From 4976e7d6fbeaeb9ded2193723015a35ae1cc8452 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:04:04 -0700 Subject: [PATCH 01/27] =?UTF-8?q?feat(3ds):=20Pocket=20Shell=20=E2=80=94?= =?UTF-8?q?=20a=20tiling=20window=20shell=20for=20the=20console?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Omarchy binds every window action to SUPER plus one key, and SUPER + K shows the table. Pocket Shell keeps that grammar and changes the hardware: L is super, R is shift, L+R addresses workspaces, and the chord map for whichever shoulder is down replaces the minimap on the touch screen — the reference appears exactly when the modifier that needs it is pressed, and disappears when it is released. The top screen is the stage: Omarchy's tokyo-night wallpaper under windows tiled by dwindle (a binary split tree, longer side first, splits preserved across a close) or scrolling (columns at 0.49 of the width on a strip that pans to keep the focused column whole), five workspaces, a 14 px bar. The touch screen is the deck: workspace strip, live minimap, dock, launcher, and a hand-laid keyboard. Windows hold local applets — pocketsh, a clock, notes, the key sheet, stats, about — so nothing needs a companion. Touch does what the buttons do. Tap the minimap to focus, drag a window onto another to swap or onto a tab to move it, drag the gap between two windows to move that split. Closing is a hold, a slide and a release onto a bar, the Pocket Term convention: the panel is resistive and single-contact, and a small × is how a shell gets killed by accident. wm.ts, chords.ts and shell.ts are pure and unit-tested; the render layer replays the golden tape headlessly in the sim, which is what caught the renderer bug below in 30 ms instead of an emulator boot. Ten Azahar goldens cover both screens and reproduce byte-exactly across runs. Also here, because the app was the first thing to need them: - framework: insertBefore(node, node) is a no-op, as in the DOM. Solid's reconcileArrays issues exactly that call when two adjacent items swap, and unlinking first left the node as its own missing anchor — every adjacent window swap threw. Covered in tests/renderer.test.ts. - e2e: the Azahar fixture pins the emulated clock so a guest that shows the time stays byte-exact, and the default 3DS spec set now runs both apps. Nothing is bound to ZL/ZR: they are New-3DS-only, arrive through ir:rst rather than the HID pad, and have no BTN constant in the spec yet. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-shell/README.md | 168 ++++ apps/pocket-shell/app.tsx | 26 + apps/pocket-shell/applets.tsx | 334 ++++++++ apps/pocket-shell/chords.ts | 243 ++++++ apps/pocket-shell/deck.tsx | 712 ++++++++++++++++ apps/pocket-shell/images.json | 5 + apps/pocket-shell/keyboard.tsx | 191 +++++ apps/pocket-shell/main.tsx | 5 + apps/pocket-shell/pocket.json | 40 + apps/pocket-shell/shell.ts | 167 ++++ apps/pocket-shell/stage.tsx | 203 +++++ apps/pocket-shell/store.ts | 740 ++++++++++++++++ apps/pocket-shell/wall/lake.png | Bin 0 -> 78799 bytes apps/pocket-shell/wall/prepare.ts | 64 ++ apps/pocket-shell/wall/road.png | Bin 0 -> 220685 bytes apps/pocket-shell/wall/swirl.png | Bin 0 -> 237665 bytes apps/pocket-shell/wm.ts | 796 ++++++++++++++++++ framework/src/native-tree.ts | 6 + tests/e2e/azahar.ts | 8 +- tests/golden-specs.ts | 44 + .../3ds/pocket-shell.112.auxiliary.png | Bin 0 -> 22884 bytes tests/goldens/3ds/pocket-shell.112.png | Bin 0 -> 18362 bytes .../3ds/pocket-shell.126.auxiliary.png | Bin 0 -> 8919 bytes tests/goldens/3ds/pocket-shell.126.png | Bin 0 -> 64202 bytes .../3ds/pocket-shell.160.auxiliary.png | Bin 0 -> 22817 bytes tests/goldens/3ds/pocket-shell.160.png | Bin 0 -> 23651 bytes .../3ds/pocket-shell.176.auxiliary.png | Bin 0 -> 11395 bytes tests/goldens/3ds/pocket-shell.176.png | Bin 0 -> 18362 bytes .../3ds/pocket-shell.214.auxiliary.png | Bin 0 -> 24451 bytes tests/goldens/3ds/pocket-shell.214.png | Bin 0 -> 18362 bytes .../3ds/pocket-shell.240.auxiliary.png | Bin 0 -> 23607 bytes tests/goldens/3ds/pocket-shell.240.png | Bin 0 -> 23604 bytes .../goldens/3ds/pocket-shell.3.auxiliary.png | Bin 0 -> 33433 bytes tests/goldens/3ds/pocket-shell.3.png | Bin 0 -> 63310 bytes .../goldens/3ds/pocket-shell.48.auxiliary.png | Bin 0 -> 24546 bytes tests/goldens/3ds/pocket-shell.48.png | Bin 0 -> 24289 bytes .../goldens/3ds/pocket-shell.60.auxiliary.png | Bin 0 -> 10139 bytes tests/goldens/3ds/pocket-shell.60.png | Bin 0 -> 24592 bytes .../goldens/3ds/pocket-shell.84.auxiliary.png | Bin 0 -> 25326 bytes tests/goldens/3ds/pocket-shell.84.png | Bin 0 -> 24414 bytes tests/platform-contracts.test.ts | 1 + tests/pocket-shell-sim.test.ts | 107 +++ tests/pocket-shell-wm.test.ts | 372 ++++++++ tests/renderer.test.ts | 37 + tools/test.ts | 7 + 45 files changed, 4275 insertions(+), 1 deletion(-) create mode 100644 apps/pocket-shell/README.md create mode 100644 apps/pocket-shell/app.tsx create mode 100644 apps/pocket-shell/applets.tsx create mode 100644 apps/pocket-shell/chords.ts create mode 100644 apps/pocket-shell/deck.tsx create mode 100644 apps/pocket-shell/images.json create mode 100644 apps/pocket-shell/keyboard.tsx create mode 100644 apps/pocket-shell/main.tsx create mode 100644 apps/pocket-shell/pocket.json create mode 100644 apps/pocket-shell/shell.ts create mode 100644 apps/pocket-shell/stage.tsx create mode 100644 apps/pocket-shell/store.ts create mode 100644 apps/pocket-shell/wall/lake.png create mode 100644 apps/pocket-shell/wall/prepare.ts create mode 100644 apps/pocket-shell/wall/road.png create mode 100644 apps/pocket-shell/wall/swirl.png create mode 100644 apps/pocket-shell/wm.ts create mode 100644 tests/goldens/3ds/pocket-shell.112.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.112.png create mode 100644 tests/goldens/3ds/pocket-shell.126.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.126.png create mode 100644 tests/goldens/3ds/pocket-shell.160.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.160.png create mode 100644 tests/goldens/3ds/pocket-shell.176.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.176.png create mode 100644 tests/goldens/3ds/pocket-shell.214.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.214.png create mode 100644 tests/goldens/3ds/pocket-shell.240.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.240.png create mode 100644 tests/goldens/3ds/pocket-shell.3.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.3.png create mode 100644 tests/goldens/3ds/pocket-shell.48.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.48.png create mode 100644 tests/goldens/3ds/pocket-shell.60.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.60.png create mode 100644 tests/goldens/3ds/pocket-shell.84.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell.84.png create mode 100644 tests/pocket-shell-sim.test.ts create mode 100644 tests/pocket-shell-wm.test.ts diff --git a/apps/pocket-shell/README.md b/apps/pocket-shell/README.md new file mode 100644 index 000000000..a33ab3c1f --- /dev/null +++ b/apps/pocket-shell/README.md @@ -0,0 +1,168 @@ +# Pocket Shell + +A tiling window shell for the Nintendo 3DS, running entirely on the console. +The top screen is the **stage**: Omarchy's tokyo-night wallpaper under windows +tiled by a **dwindle** or **scrolling** layout, five workspaces, a 14 px bar. +The touch screen is the **deck**: the workspace strip, a live minimap of the +stage, the dock, and — whenever a shoulder is held — the chord map for that +shoulder. Every window holds a local applet (a command line, a clock, notes, +the key sheet, stats, about); nothing needs a companion. + +```sh +bun tools/3ds.ts pocket-shell # dist/3ds/pocketshell-main.3dsx +bun tools/3ds.ts pocket-shell --cia # plus the installable CIA +bun test tests/pocket-shell-wm.test.ts # layout rules, chords, pocketsh +bun tools/test.ts --stage=pocket-shell # the headless sim replay of the tape +E2E_AZAHAR_APP=pocket-shell bun run e2e:3ds # the ten Azahar goldens +``` + +## The interaction model + +Omarchy binds every window action to `SUPER` plus one key, and `SUPER + K` +shows the table. Pocket Shell keeps the grammar and changes the hardware: + +| held | layer | what the other buttons do | +|---|---|---| +| nothing | plain | belong to the focused window's applet | +| **L** | super | act on the focused window | +| **R** | shift | the same verbs, moved: swap, maximize, spawn | +| **L + R** | ws | the d-pad steps workspaces and carries windows | + +**The chord map is on the deck, not behind a key.** Pressing a shoulder +replaces the minimap with the table for that layer, labelled per button, and +puts the layer's name in the bar. Releasing brings the minimap back. The +table and the dispatcher read the same array (`chords.ts`), so a label cannot +describe something the button does not do. + +**Every chord is also reachable by touch.** Rows of the chord map are tap +targets, and the L and R pills on the strip latch a layer for one action, so a +stylus alone can close a window or switch layouts. + +### L — window + +| button | action | Omarchy | +|---|---|---| +| d-pad | focus the window in that direction | `SUPER + arrows` | +| circle pad | push the nearest split boundary (dwindle) · column width (scrolling) | `SUPER + -/=` | +| A | launcher (grid on the deck; d-pad picks, A opens, B closes) | `SUPER + SPACE` | +| B | close the focused window | `SUPER + W` | +| X | fullscreen (covers the bar) | `SUPER + F` | +| Y | toggle the split's orientation (dwindle) · cycle column width ⅓ ½ ⅔ 1 (scrolling) | `SUPER + J` | +| START | toggle this workspace between dwindle and scrolling | `SUPER + L` | +| SELECT | the key sheet on the stage | `SUPER + K` | + +### R — move + +| button | action | Omarchy | +|---|---|---| +| d-pad | swap with the window in that direction | `SUPER + SHIFT + arrows` | +| circle pad | pan the strip (scrolling) | | +| A | another window of the focused app | `SUPER + RETURN` | +| B | reopen the last closed app | | +| X | maximize (keeps the bar and the outer gap) | `fullscreen, 1` | +| Y | swap the split's halves (dwindle) · stack into the left column, or unstack (scrolling) | `swapsplit` | +| START | next wallpaper | `SUPER + CTRL + SPACE` | +| SELECT | toggle the bar | `SUPER + SHIFT + SPACE` | + +### L + R — workspace + +| button | action | +|---|---| +| d-pad ← → | previous / next workspace | +| d-pad ↑ ↓ | carry the focused window to the previous / next workspace and follow it | + +Plain **SELECT** opens the deck keyboard when a term or notes window has +focus. Nothing is bound to **ZL / ZR**: they are New-3DS-only, reach libctru +through `ir:rst` rather than the HID pad, and have no `BTN` constant in +`contracts/spec/spec.ts` yet. + +### Touch + +- **Workspace strip**: tap a tab to switch; the layout badge toggles the + layout; L / R pills latch a layer. +- **Minimap** (the stage at 0.6): tap a window to focus it. **Hold a window + to arm the close bar**, then release on the bar to close — a resistive + panel has one contact and an 18 px × is a coin flip, so closing is a hold, + a slide and a release (the Pocket Term convention). Drag a window onto + another to swap them, or onto a workspace tab to move it there. Drag the + gap between two windows to move that split. In the scrolling layout, drag + the background to pan the strip, or a column's edge to resize it. +- **Gutter buttons**: `kbd` (keyboard), `wall` (next wallpaper), `keys` (key + sheet), `bar` (toggle the bar). +- **Dock**: tap an app to open it on the current workspace; a green dot marks + apps with a window. + +### Feedback + +Anything that cannot happen says why on the deck's hint line for about 1.6 s +("nothing left", "workspace 1 is the first", "a split needs two windows"). +A focus change is also visible on the stage: the focused window carries +Omarchy's 2 px active border (cyan to green), unfocused windows a grey one. + +## Layouts + +Both layouts share the geometry constants in `wm.ts`: **`BAR_H` 14, +`GAP_OUT` 4, `GAP_IN` 3, `BORDER` 2** — neighbours sit 6 px apart, the edge +gap is 7 px. Omarchy's `gaps_in 5 / gaps_out 10 / border 2` at a 3.5" panel. + +**Dwindle** is a binary split tree. A new window splits the focused leaf +along its longer side and takes the right or bottom half (Hyprland's +`force_split = 2`); a split keeps its orientation when a child closes +(`preserve_split = true`). Resizing walks up from the focused leaf to the +nearest split on that axis whose boundary lies on the pushed side, and moves +that ratio; ratios clamp to 0.15..0.85. + +**Scrolling** is a strip of columns wider than the screen. A new window +opens as a column after the focused one at **0.49 of the workspace width**, +so two columns fit (Omarchy's `column_width`). The strip scrolls so the +focused column is fully visible, preferring its right edge. A column holds a +vertical stack of equal-height windows. + +**Toggling layouts keeps window order and focus**: dwindle → scrolling makes +one column per leaf in tree order; scrolling → dwindle re-inserts the windows +in strip order, each splitting the one before it. + +Each workspace keeps its own layout, fullscreen state and scroll position. +Five workspaces exist from boot; nothing is persisted across launches (the +3DS host has no `fs` module). + +## Applets + +- **term** — pocketsh, the shell's own `hyprctl`: `ls`, `open `, + `close [id]`, `focus `, `ws [1-5]`, `layout [dwindle|scrolling]`, + `wall [next]`, `keys`, `fetch`, `date`, `uptime`, `echo`, `clear`. Plain + buttons: A enter, B backspace, X tab-complete, Y space, ↑↓ history, START + clear; the circle pad scrolls. 12 px JetBrains Mono on a 7 px cell. +- **clock** — the RTC at 36 px, the date, a seconds bar; A toggles 12 h. +- **notes** — a scratch pad on the same keyboard; A newline, B backspace. +- **keys** — the chord table as a window; ↑↓ scroll. +- **stats** — fps, frame, uptime, windows, host, wallpaper, layer. +- **about** — what this is. + +## Files + +``` +wm.ts the window manager: pure state and geometry (tested) +chords.ts the modifier grammar as one table, plus its labels (tested) +shell.ts pocketsh, the command interpreter (tested) +store.ts signals, per-frame input dispatch, geometry animation, applet state +stage.tsx top screen: wallpaper, windows, bar, key sheet +deck.tsx touch screen: strip, minimap and its gestures, chord map, launcher, dock +keyboard.tsx the deck's hand-laid touch keyboard +applets.tsx term · clock · notes · keys · stats · about +wall/ tokyo-night backgrounds in 512x256 envelopes (prepare.ts cooks them) +images.json bakes the wallpapers as PSM_5650 +``` + +**Wallpapers are 400x240 crops padded into 512x256**: `framework/compiler/pak.ts` +accepts power-of-two images only, and the stage clips the padding under an +overflow-hidden root. Three fit in 768 KB at 16 bits per pixel; `R + START` +cycles them. + +## Determinism + +The bar shows the RTC as `HH:MM`. `tests/e2e/azahar.ts` pins the emulator's +clock (`init_clock = 1`, `init_time` = 2000-01-01 00:00:00), so a golden run +reads `00:00` for its first minute. The golden tape avoids the clock and +stats applets, whose seconds would differ run to run. Uptime counts frames, +not wall time. diff --git a/apps/pocket-shell/app.tsx b/apps/pocket-shell/app.tsx new file mode 100644 index 000000000..28c9837ac --- /dev/null +++ b/apps/pocket-shell/app.tsx @@ -0,0 +1,26 @@ +// apps/pocket-shell/app.tsx — Pocket Shell: a tiling window shell for the +// Nintendo 3DS, entirely on the console. The top screen is the stage — +// Omarchy's tokyo-night wallpaper under dwindle- or scrolling-tiled windows — +// and the touch screen is the deck, where the shoulders' chord map, the +// workspace strip, a live minimap and the dock live. See README.md for the +// interaction design and store.ts for how input becomes actions. + +import { AuxiliarySurface } from "@pocketjs/framework/components"; +import { Deck } from "./deck.tsx"; +import { Stage } from "./stage.tsx"; +import { createShellStore } from "./store.ts"; + +export default function PocketShell() { + const store = createShellStore(); + // Debug handle for the headless sim test (tests/pocket-shell-sim.test.ts), + // which has no touch screen to open windows from. + (globalThis as { __pocketShell?: unknown }).__pocketShell = store; + return ( + <> + + + + + + ); +} diff --git a/apps/pocket-shell/applets.tsx b/apps/pocket-shell/applets.tsx new file mode 100644 index 000000000..f14b18aee --- /dev/null +++ b/apps/pocket-shell/applets.tsx @@ -0,0 +1,334 @@ +// apps/pocket-shell/applets.tsx — what the windows hold. Every applet is +// self-contained on the console: pocketsh drives the window manager itself, +// the clock reads the RTC, notes is a scratch pad, keys is the chord table, +// stats reads the frame loop, about says what this is. +// +// An applet is given its content size and reads its own state object from +// the store (one per window, mutated in place, revalidated through `rev`). +// Text rows are absolutely positioned: on this host a Text that is a direct +// flex child of a short bar can paint nothing, so rows are offsets. + +import { Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { getOps } from "@pocketjs/framework"; +import { keySheet } from "./chords.ts"; +import { formatClock, formatDate, formatUptime } from "./shell.ts"; +import type { AppId, ShellStore } from "./store.ts"; + +export interface AppletProps { + id: number; + app: AppId; + store: ShellStore; + /** Content size: the window minus border and header. */ + w: () => number; + h: () => number; +} + +/** 12 px JetBrains Mono is spec slot 16; its ~7.2 px advance snaps to a 7 px + * cell the way Pocket Term does it, so columns land on pixels. */ +const MONO_SLOT = 16; +const LINE_H = 13; +const ROW_H = 13; +const PAD = 4; + +let cellW = 7; +let measured = false; +function monoCell(): number { + if (!measured) { + measured = true; + const advance = getOps().measureText("M", MONO_SLOT); + if (advance > 0) cellW = Math.max(6, Math.round(advance)); + } + return cellW; +} + +/** Hard-wrap one logical line to `cols` cells. */ +function wrap(line: string, cols: number, out: string[]): void { + if (cols < 1) return; + if (line.length === 0) { + out.push(""); + return; + } + for (let i = 0; i < line.length; i += cols) out.push(line.slice(i, i + cols)); +} + +export function Applet(props: AppletProps) { + switch (props.app) { + case "term": + return ; + case "clock": + return ; + case "notes": + return ; + case "keys": + return ; + case "stats": + return ; + case "about": + return ; + } +} + +// ---- term --------------------------------------------------------------------- + +function Term(props: AppletProps) { + const cell = monoCell(); + const cols = () => Math.max(4, Math.floor((props.w() - PAD * 2) / cell)); + const rows = () => Math.max(1, Math.floor((props.h() - PAD) / LINE_H)); + const state = () => { + props.store.rev(); + const s = props.store.stateOf(props.id); + return s && s.kind === "term" ? s : null; + }; + /** Wrapped scrollback, then the visible window of it above the prompt. */ + const view = () => { + const s = state(); + if (!s) return { lines: [] as string[], input: "", promptRow: 0 }; + const wrapped: string[] = []; + for (const line of s.lines) wrap(line, cols(), wrapped); + const visible = rows() - 1; // the prompt keeps the last row + const maxScroll = Math.max(0, wrapped.length - visible); + const scroll = Math.min(s.scroll, maxScroll); + const end = wrapped.length - scroll; + const start = Math.max(0, end - visible); + const lines = wrapped.slice(start, end); + return { lines, input: s.input, promptRow: lines.length }; + }; + const inputShown = () => { + const text = view().input; + const room = cols() - 3; + return text.length > room ? text.slice(text.length - room) : text; + }; + return ( + + + {(line, i) => ( + + {line()} + + )} + + + {"❯"} + + + {inputShown()} + + + + ); +} + +// ---- clock -------------------------------------------------------------------- + +function Clock(props: AppletProps) { + const state = () => { + props.store.rev(); + const s = props.store.stateOf(props.id); + return s && s.kind === "clock" ? s : null; + }; + const time = () => formatClock(props.store.now(), state()?.hour12 ?? false); + const suffix = () => (state()?.hour12 ? (props.store.now().getHours() < 12 ? "am" : "pm") : ""); + const seconds = () => props.store.now().getSeconds(); + const big = () => props.w() >= 200 && props.h() >= 96; + const mid = () => !big() && props.h() >= 56 && props.w() >= 110; + return ( + + + {time()} + + + {time()} + + + {time()} + + = 56}> + + {formatDate(props.store.now())} + {suffix() ? ` ${suffix()}` : ""} + + + + + + + ); +} + +// ---- notes -------------------------------------------------------------------- + +function Notes(props: AppletProps) { + const cell = monoCell(); + const cols = () => Math.max(4, Math.floor((props.w() - PAD * 2) / cell)); + const rows = () => Math.max(1, Math.floor((props.h() - PAD) / LINE_H)); + const state = () => { + props.store.rev(); + const s = props.store.stateOf(props.id); + return s && s.kind === "notes" ? s : null; + }; + const view = () => { + const s = state(); + const wrapped: string[] = []; + for (const line of (s?.text ?? "").split("\n")) wrap(line, cols(), wrapped); + if (wrapped.length === 0) wrapped.push(""); + // The cursor sits after the last line; a full last line starts a new one. + if (wrapped[wrapped.length - 1].length >= cols()) wrapped.push(""); + const maxScroll = Math.max(0, wrapped.length - rows()); + const scroll = Math.min(s?.scroll ?? 0, maxScroll); + const end = wrapped.length - scroll; + const start = Math.max(0, end - rows()); + const lines = wrapped.slice(start, end); + return { lines, cursorRow: lines.length - 1, cursorCol: lines[lines.length - 1].length, empty: !s?.text }; + }; + return ( + + + {(line, i) => ( + + {line()} + + )} + + = 40}> + SELECT opens the keyboard + + + + ); +} + +// ---- keys --------------------------------------------------------------------- + +export interface SheetLine { + kind: "title" | "row" | "gap"; + keys: string; + what: string; +} + +export function sheetLines(layout: "dwindle" | "scrolling"): SheetLine[] { + const out: SheetLine[] = []; + for (const group of keySheet(layout)) { + out.push({ kind: "title", keys: group.title, what: "" }); + for (const row of group.rows) out.push({ kind: "row", keys: row.keys, what: row.what }); + out.push({ kind: "gap", keys: "", what: "" }); + } + return out; +} + +function Keys(props: AppletProps) { + const rows = () => Math.max(1, Math.floor((props.h() - PAD) / ROW_H)); + const state = () => { + props.store.rev(); + const s = props.store.stateOf(props.id); + return s && s.kind === "keys" ? s : null; + }; + const view = () => { + const all = sheetLines(props.store.layoutKind()); + const maxScroll = Math.max(0, all.length - rows()); + const scroll = Math.min(state()?.scroll ?? 0, maxScroll); + return all.slice(scroll, scroll + rows()); + }; + const keysW = () => (props.w() >= 200 ? 84 : 64); + return ( + + + {(line, i) => ( + + + {line().keys} + + + {line().keys} + + {line().what} + + + + )} + + + ); +} + +// ---- stats -------------------------------------------------------------------- + +function Stats(props: AppletProps) { + const store = props.store; + const rows = () => { + store.rev(); + const ops = getOps(); + return [ + ["fps", String(store.fps())], + ["frame", String(store.frameCount())], + ["uptime", formatUptime(store.uptimeSeconds())], + ["windows", String(store.wm.windows.size)], + ["workspace", `${store.active()} of 5 · ${store.layoutKind()}`], + ["host", `${ops.__host ?? "3ds"} · abi ${ops.__hostAbi ?? "?"}`], + ["wallpaper", store.wallpaper()], + ["layer", store.layer()], + ]; + }; + return ( + + + {(row, i) => ( + + {row()[0]} + {row()[1]} + + )} + + + ); +} + +// ---- about -------------------------------------------------------------------- + +function About(props: AppletProps) { + const compact = () => props.h() < 80; + return ( + + + + + + + Pocket Shell + + a tiling shell for the Nintendo 3DS + Omarchy's SUPER grammar on two shoulders + dwindle · scrolling · five workspaces + tokyo-night · wallpapers from Omarchy + PocketJS · Solid · QuickJS · citro3d + + = 112}> + hold L and press SELECT for every key + + + ); +} diff --git a/apps/pocket-shell/chords.ts b/apps/pocket-shell/chords.ts new file mode 100644 index 000000000..abd013f64 --- /dev/null +++ b/apps/pocket-shell/chords.ts @@ -0,0 +1,243 @@ +// apps/pocket-shell/chords.ts — the modifier grammar, as one table. +// +// Omarchy binds every window action to SUPER plus one key and shows the whole +// table on SUPER+K. Pocket Shell gives the two shoulders that role: +// +// L held super act on the focused window (focus, close, launch) +// R held shift the same verbs, moved: swap, maximize, spawn +// L and R held ws the d-pad steps workspaces and carries windows +// neither plain buttons belong to the focused window's applet +// +// This table is read twice: by the input dispatcher (store.ts) to fire an +// action, and by the deck (deck.tsx) to draw the live keybinding map while a +// shoulder is down — the same entry produces the behaviour and its label, so +// the two cannot drift. +// +// Only buttons the 3DS host delivers appear here. ZL and ZR are New-3DS-only, +// reach libctru through ir:rst rather than the HID pad, and have no BTN +// constant in contracts/spec/spec.ts, so nothing is bound to them; when the +// contract gains them, stepping workspaces without a shoulder is two rows. + +import { BTN } from "@pocketjs/framework/input"; +import type { LayoutKind } from "./wm.ts"; + +export type Layer = "plain" | "super" | "shift" | "ws"; + +export type ActionId = + | "focus.left" + | "focus.right" + | "focus.up" + | "focus.down" + | "swap.left" + | "swap.right" + | "swap.up" + | "swap.down" + | "ws.prev" + | "ws.next" + | "carry.prev" + | "carry.next" + | "launcher" + | "close" + | "fullscreen" + | "maximize" + | "split" + | "swapsplit" + | "layout" + | "keys" + | "another" + | "reopen" + | "wallpaper" + | "bar"; + +export interface Chord { + layer: Layer; + button: number; + action: ActionId; +} + +/** The face-button order the deck draws rows in. */ +export const FACE_ORDER: readonly number[] = [BTN.TRIANGLE, BTN.SQUARE, BTN.CIRCLE, BTN.CROSS]; +export const DPAD = BTN.LEFT | BTN.RIGHT | BTN.UP | BTN.DOWN; + +export const CHORDS: readonly Chord[] = [ + { layer: "super", button: BTN.LEFT, action: "focus.left" }, + { layer: "super", button: BTN.RIGHT, action: "focus.right" }, + { layer: "super", button: BTN.UP, action: "focus.up" }, + { layer: "super", button: BTN.DOWN, action: "focus.down" }, + { layer: "super", button: BTN.CIRCLE, action: "launcher" }, + { layer: "super", button: BTN.CROSS, action: "close" }, + { layer: "super", button: BTN.TRIANGLE, action: "fullscreen" }, + { layer: "super", button: BTN.SQUARE, action: "split" }, + { layer: "super", button: BTN.START, action: "layout" }, + { layer: "super", button: BTN.SELECT, action: "keys" }, + + { layer: "shift", button: BTN.LEFT, action: "swap.left" }, + { layer: "shift", button: BTN.RIGHT, action: "swap.right" }, + { layer: "shift", button: BTN.UP, action: "swap.up" }, + { layer: "shift", button: BTN.DOWN, action: "swap.down" }, + { layer: "shift", button: BTN.CIRCLE, action: "another" }, + { layer: "shift", button: BTN.CROSS, action: "reopen" }, + { layer: "shift", button: BTN.TRIANGLE, action: "maximize" }, + { layer: "shift", button: BTN.SQUARE, action: "swapsplit" }, + { layer: "shift", button: BTN.START, action: "wallpaper" }, + { layer: "shift", button: BTN.SELECT, action: "bar" }, + + { layer: "ws", button: BTN.LEFT, action: "ws.prev" }, + { layer: "ws", button: BTN.RIGHT, action: "ws.next" }, + { layer: "ws", button: BTN.UP, action: "carry.prev" }, + { layer: "ws", button: BTN.DOWN, action: "carry.next" }, +]; + +export function layerOf(held: number): Layer { + const l = (held & BTN.LTRIGGER) !== 0; + const r = (held & BTN.RTRIGGER) !== 0; + if (l && r) return "ws"; + if (l) return "super"; + if (r) return "shift"; + return "plain"; +} + +export function chordsOf(layer: Layer): Chord[] { + return CHORDS.filter((chord) => chord.layer === layer); +} + +export function chordFor(layer: Layer, button: number): Chord | undefined { + return CHORDS.find((chord) => chord.layer === layer && chord.button === button); +} + +export const LAYER_TITLE: Record = { + plain: "", + super: "L window", + shift: "R move", + ws: "L+R workspace", +}; + +/** What the shoulders do next, for the idle hint line. */ +export const LAYER_HINT: Record = { + plain: "hold L window · R move · L+R workspace", + super: "add R for workspaces · release to finish", + shift: "add L for workspaces · release to finish", + ws: "d-pad steps · release to finish", +}; + +/** The label a chord shows, given the workspace layout it would act on. */ +export function labelFor(action: ActionId, layout: LayoutKind): string { + switch (action) { + case "focus.left": + case "focus.right": + case "focus.up": + case "focus.down": + return "focus window"; + case "swap.left": + case "swap.right": + case "swap.up": + case "swap.down": + return "swap window"; + case "ws.prev": + case "ws.next": + return "switch workspace"; + case "carry.prev": + case "carry.next": + return "carry window"; + case "launcher": + return "launcher"; + case "close": + return "close window"; + case "fullscreen": + return "fullscreen"; + case "maximize": + return "maximize"; + case "split": + return layout === "dwindle" ? "toggle split" : "column width"; + case "swapsplit": + return layout === "dwindle" ? "swap split" : "stack / unstack"; + case "layout": + return layout === "dwindle" ? "layout: scrolling" : "layout: dwindle"; + case "keys": + return "key sheet"; + case "another": + return "another of this"; + case "reopen": + return "reopen closed"; + case "wallpaper": + return "next wallpaper"; + case "bar": + return "toggle bar"; + } +} + +/** What the d-pad does, in one line. Both the deck's map and the key sheet + * give it a column about 140 px wide, so it has to stay short. */ +export function dpadLabel(layer: Layer): string { + switch (layer) { + case "super": + return "focus window"; + case "shift": + return "swap window"; + case "ws": + return "workspace · carry"; + case "plain": + return "to the app"; + } +} + +/** What the circle pad does with a layer held. */ +export function padLabel(layer: Layer, layout: LayoutKind): string { + switch (layer) { + case "super": + return layout === "dwindle" ? "resize" : "column width"; + case "shift": + return layout === "scrolling" ? "scroll strip" : "—"; + case "ws": + return "—"; + case "plain": + return "to the app"; + } +} + +export const BUTTON_GLYPH: Record = { + [BTN.CIRCLE]: "A", + [BTN.CROSS]: "B", + [BTN.TRIANGLE]: "X", + [BTN.SQUARE]: "Y", + [BTN.START]: "START", + [BTN.SELECT]: "SELECT", +}; + +export interface KeySheetRow { + keys: string; + what: string; +} + +/** The full table, the way SUPER+K lists it: one row per binding. */ +export function keySheet(layout: LayoutKind): { title: string; rows: KeySheetRow[] }[] { + // "L+R" keeps the widest row inside the sheet's 80 px key column. + const prefix: Record = { plain: "", super: "L +", shift: "R +", ws: "L+R" }; + const groups: { title: string; rows: KeySheetRow[] }[] = []; + for (const layer of ["super", "shift", "ws"] as const) { + const rows: KeySheetRow[] = []; + const list = chordsOf(layer); + const dpad = list.filter((c) => c.button & DPAD); + if (dpad.length > 0) { + // The sheet's value column is ~100 px; the deck's is wider, so the ws + // row is the one place the two wordings differ. + const what = layer === "ws" ? "switch · carry" : dpadLabel(layer); + rows.push({ keys: `${prefix[layer]} d-pad`, what }); + } + const pad = padLabel(layer, layout); + if (pad !== "—") rows.push({ keys: `${prefix[layer]} pad`, what: pad }); + for (const chord of list) { + if (chord.button & DPAD) continue; + rows.push({ keys: `${prefix[layer]} ${BUTTON_GLYPH[chord.button]}`, what: labelFor(chord.action, layout) }); + } + groups.push({ title: LAYER_TITLE[layer], rows }); + } + groups.push({ + title: "always", + rows: [ + { keys: "SELECT", what: "keyboard" }, + { keys: "touch", what: "hold a layer" }, + ], + }); + return groups; +} diff --git a/apps/pocket-shell/deck.tsx b/apps/pocket-shell/deck.tsx new file mode 100644 index 000000000..c5586e2a7 --- /dev/null +++ b/apps/pocket-shell/deck.tsx @@ -0,0 +1,712 @@ +// apps/pocket-shell/deck.tsx — the touch screen. Omarchy's SUPER key is a +// key; here it is a surface. The deck always shows the workspace strip, a +// live minimap of the top screen, and the dock, and it re-labels itself the +// moment a shoulder goes down: the minimap gives way to the chord map for +// the held layer, which is Omarchy's SUPER+K menu appearing exactly when the +// modifier that needs it is pressed. Every row of that map is also a tap +// target, and the L/R pills latch a layer for one action, so a stylus can +// complete any chord on its own. +// +// Minimap touch: tap focuses, hold arms the close bar (release on it to +// close — a resistive panel and a coin-flip × are how shells get killed), +// drag a window onto another to swap or onto a workspace tab to move it, +// drag the gap between two windows to resize the split, and in the +// scrolling layout drag the background to pan the strip. + +import { For, Index, Show } from "solid-js"; +import { Image, Text, View } from "@pocketjs/framework/components"; +import { createGesture } from "@pocketjs/framework/gesture"; +import { + BUTTON_GLYPH, + chordFor, + dpadLabel, + FACE_ORDER, + labelFor, + LAYER_HINT, + LAYER_TITLE, + padLabel, + type ActionId, + type Layer, +} from "./chords.ts"; +import { Keyboard, keyboardHit, createKeyPress } from "./keyboard.tsx"; +import { APP_BLURB, APPS, isTextApp, type AppId, type ShellStore } from "./store.ts"; +import { BTN } from "@pocketjs/framework/input"; +import { BAR_H, WORKSPACES, type Rect } from "./wm.ts"; + +const STRIP_H = 24; +const PILL_W = 28; +const TABS_X = 28; +const TAB_W = 40; +const BADGE_X = 228; +const BADGE_W = 64; +const R_PILL_X = 292; + +const BODY_TOP = 24; +const BODY_BOTTOM = 200; + +const S = 0.6; +const MAP_X = 40; +const MAP_Y = 30; +const MAP_W = 240; +const MAP_H = 144; +const MAP_RECT: Rect = { x: MAP_X, y: MAP_Y, w: MAP_W, h: MAP_H }; +const HINT_Y = 180; +const CLOSE_BAR_H = 44; +const CLOSE_BAR_Y = BODY_BOTTOM - CLOSE_BAR_H; +const CLOSE_HOLD_SECONDS = 0.4; + +const DOCK_Y = 200; +const DOCK_X = 16; +const DOCK_CELL = 48; + +const GUTTER_BTN_W = 32; +const GUTTER_BTN_H = 22; +interface GutterButton { + x: number; + y: number; + label: string; + act: "kbd" | "wall" | "keys" | "bar"; +} +const GUTTER_BUTTONS: GutterButton[] = [ + { x: 4, y: 34, label: "kbd", act: "kbd" }, + { x: 4, y: 62, label: "wall", act: "wall" }, + { x: 284, y: 34, label: "keys", act: "keys" }, + { x: 284, y: 62, label: "bar", act: "bar" }, +]; + +const CHORD_TITLE_Y = 30; +const CHORD_ROWS_Y = 48; +const CHORD_ROW_H = 24; +const CHORD_COL_SPLIT = 160; + +const LAUNCH_X = 16; +const LAUNCH_Y = 44; +const LAUNCH_W = 96; +const LAUNCH_H = 64; +const LAUNCH_COLS = 3; + +const within = (x: number, y: number, r: Rect): boolean => + x >= r.x && x < r.x + r.w && y >= r.y && y < r.y + r.h; +const toStage = (x: number, y: number) => ({ x: (x - MAP_X) / S, y: (y - MAP_Y) / S }); + +type BodyMode = "launcher" | "chords" | "keyboard" | "map"; + +/** Dock and launcher icons: one literal tree per app. */ +function AppIcon(props: { app: AppId }) { + switch (props.app) { + case "term": + return ( + + {"❯_"} + + ); + case "clock": + return ( + + + + + + + ); + case "notes": + return ( + + + + + + ); + case "keys": + return ( + + + + + + + + + + + + + ); + case "stats": + return ( + + + + + + ); + case "about": + return ( + + i + + ); + } +} + +export function Deck(props: { store: ShellStore }) { + const store = props.store; + const keyPress = createKeyPress(); + + const bodyMode = (): BodyMode => { + if (store.launcherOpen()) return "launcher"; + if (store.layer() !== "plain") return "chords"; + if (store.kbVisible()) return "keyboard"; + return "map"; + }; + const lHeld = () => store.layer() === "super" || store.layer() === "ws"; + const rHeld = () => store.layer() === "shift" || store.layer() === "ws"; + + // ---- touch --------------------------------------------------------------- + + let pending: { id: number } | null = null; + let splitHandle: ReturnType = null; + let columnHandle: ReturnType = null; + let panning = false; + + const reset = () => { + pending = null; + splitHandle = null; + columnHandle = null; + panning = false; + store.setDrag(null); + store.setClosing(null); + }; + + const tabAt = (x: number): number | null => { + if (x < TABS_X || x >= TABS_X + TAB_W * WORKSPACES) return null; + return 1 + Math.floor((x - TABS_X) / TAB_W); + }; + + const runGutter = (button: GutterButton) => { + switch (button.act) { + case "kbd": + store.toggleKeyboard(); + break; + case "wall": + store.run("wallpaper"); + break; + case "keys": + store.run("keys"); + break; + case "bar": + store.run("bar"); + break; + } + }; + + const chordActionAt = (x: number, y: number): ActionId | null => { + const row = Math.floor((y - CHORD_ROWS_Y) / CHORD_ROW_H); + if (row < 0 || row > 3) return null; + const layer = store.layer(); + let button: number | null = null; + if (x < CHORD_COL_SPLIT) { + if (row === 2) button = BTN.START; + if (row === 3) button = BTN.SELECT; + } else { + button = FACE_ORDER[row]; + } + if (button === null) return null; + return chordFor(layer, button)?.action ?? null; + }; + + const tapStrip = (x: number) => { + if (x < PILL_W) { + store.setLatchL(!store.latchL()); + return; + } + if (x >= R_PILL_X) { + store.setLatchR(!store.latchR()); + return; + } + if (x >= BADGE_X && x < BADGE_X + BADGE_W) { + store.toggleLayout(); + return; + } + const tab = tabAt(x); + if (tab !== null) store.switchWs(tab); + }; + + const tapDock = (x: number) => { + const index = Math.floor((x - DOCK_X) / DOCK_CELL); + if (x >= DOCK_X && index >= 0 && index < APPS.length) store.open(APPS[index]); + }; + + const tapBody = (x: number, y: number) => { + switch (bodyMode()) { + case "launcher": { + const col = Math.floor((x - LAUNCH_X) / LAUNCH_W); + const row = Math.floor((y - LAUNCH_Y) / LAUNCH_H); + if (x < LAUNCH_X || col < 0 || col >= LAUNCH_COLS || row < 0 || row > 1) return; + const index = row * LAUNCH_COLS + col; + if (index < APPS.length) { + store.open(APPS[index]); + store.setLauncherOpen(false); + } + return; + } + case "chords": { + const action = chordActionAt(x, y); + if (action) { + store.run(action); + store.setLatchL(false); + store.setLatchR(false); + } + return; + } + case "keyboard": { + const hit = keyboardHit(x, y, store.kbLayer()); + if (!hit) return; + keyPress.press(hit); + if ("ch" in hit.act) { + store.typeChar(hit.act.ch); + if (store.kbLayer() === "upper") store.setKbLayer("lower"); + } else if ("key" in hit.act) { + store.typeKey(hit.act.key); + } else if ("layer" in hit.act) { + store.setKbLayer(hit.act.layer); + } else { + store.setKbOpen(false); + } + return; + } + case "map": { + for (const button of GUTTER_BUTTONS) { + if (within(x, y, { x: button.x, y: button.y, w: GUTTER_BTN_W, h: GUTTER_BTN_H })) { + runGutter(button); + return; + } + } + if (within(x, y, MAP_RECT)) { + const id = store.wm.windowAt(toStage(x, y)); + if (id !== null) store.focusWin(id); + } + } + } + }; + + createGesture({ + surface: "auxiliary", + tapSlop: 6, + panSlop: 6, + longPressSeconds: CLOSE_HOLD_SECONDS, + onDown: (c) => { + pending = null; + if (bodyMode() === "map" && within(c.x, c.y, MAP_RECT)) { + const id = store.wm.windowAt(toStage(c.x, c.y)); + if (id !== null) pending = { id }; + } + }, + onTap: (c) => { + pending = null; + if (c.y < STRIP_H) tapStrip(c.x); + else if (c.y >= DOCK_Y) tapDock(c.x); + else tapBody(c.x, c.y); + }, + onLongPress: (c) => { + if (pending && bodyMode() === "map") { + store.setClosing({ id: pending.id, over: false }); + store.say(""); + } + pending = null; + void c; + }, + onPanStart: (c) => { + if (store.closing() || bodyMode() !== "map") return; + const sp = toStage(c.x, c.y); + if (pending) { + store.setDrag({ id: pending.id, x: sp.x, y: sp.y, over: null, overWs: null }); + pending = null; + return; + } + if (!within(c.x, c.y, MAP_RECT)) return; + splitHandle = store.wm.splitAt(sp, 8); + if (splitHandle) return; + columnHandle = store.wm.columnEdgeAt(sp, 8); + if (columnHandle) return; + panning = store.wm.workspace().layout === "scrolling"; + }, + onPanMove: (c) => { + const closing = store.closing(); + if (closing) { + const over = c.y >= CLOSE_BAR_Y && c.y < CLOSE_BAR_Y + CLOSE_BAR_H; + if (over !== closing.over) store.setClosing({ id: closing.id, over }); + return; + } + const drag = store.drag(); + const sp = toStage(c.x, c.y); + if (drag) { + const overId = within(c.x, c.y, MAP_RECT) ? store.wm.windowAt(sp) : null; + store.setDrag({ + id: drag.id, + x: sp.x, + y: sp.y, + over: overId !== null && overId !== drag.id ? overId : null, + overWs: c.y < STRIP_H ? tabAt(c.x) : null, + }); + return; + } + if (splitHandle) { + store.wm.dragSplit(splitHandle, sp); + store.bump(); + } else if (columnHandle) { + store.wm.dragColumnEdge(columnHandle, sp); + store.bump(); + } else if (panning) { + store.wm.scrollBy(-c.fdx / S); + store.bump(); + } + }, + onUp: (c) => { + const closing = store.closing(); + if (closing) { + if (c.y >= CLOSE_BAR_Y && c.y < CLOSE_BAR_Y + CLOSE_BAR_H) store.close(closing.id); + reset(); + return; + } + const drag = store.drag(); + if (drag) { + if (drag.overWs !== null && drag.overWs !== store.wm.active) { + store.wm.moveToWs(drag.id, drag.overWs); + store.say(`moved to workspace ${drag.overWs}`); + store.bump(); + } else if (drag.over !== null) { + store.wm.swap(store.wm.workspace(), drag.id, drag.over); + store.bump(); + } + } + reset(); + }, + onCancel: () => reset(), + }); + + // ---- render ---------------------------------------------------------------- + + const hint = () => { + const toast = store.toast(); + if (toast) return toast; + if (store.drag()) return "drop on a window to swap · on a tab to move"; + if (store.wm.count() === 0) return "tap the dock to open a window"; + return LAYER_HINT.plain; + }; + + const closingTitle = () => { + const c = store.closing(); + return c ? store.windowOf(c.id)?.title ?? "" : ""; + }; + + const chordLeft = () => { + const layer = store.layer(); + const layout = store.layoutKind(); + const start = chordFor(layer, BTN.START)?.action; + const select = chordFor(layer, BTN.SELECT)?.action; + return [ + { badge: "dpad", label: dpadLabel(layer) }, + { badge: "pad", label: padLabel(layer, layout) }, + { badge: "START", label: start ? labelFor(start, layout) : "—" }, + { badge: "SELECT", label: select ? labelFor(select, layout) : "—" }, + ]; + }; + const chordRight = () => { + const layer = store.layer(); + const layout = store.layoutKind(); + return FACE_ORDER.map((button) => { + const chord = chordFor(layer, button); + return { badge: BUTTON_GLYPH[button], label: chord ? labelFor(chord.action, layout) : "—" }; + }); + }; + const latched = () => store.latchL() || store.latchR(); + + return ( + + {/* ---- workspace strip ---- */} + + + L + + + {(count, i) => ( + + 0 + ? "text-sm text-[#a9b1d6]" + : "text-sm text-[#414868]" + } + > + {String(i + 1)} + + 0}> + + + {() => } + + + + + + + + )} + + + {store.layoutKind()} + + + R + + + + {/* ---- body: minimap ---- */} + + + + + + + + + + + + + + + + + {(id) => { + const p = () => store.placementOf(id); + const focused = () => store.focusedId() === id; + const target = () => store.drag()?.over === id; + return ( + + + = 34 && p()!.rect.h * S >= 14}> + + {store.windowOf(id)?.title ?? ""} + + + + + ); + }} + + + {(d) => ( + + {store.windowOf(d().id)?.title ?? ""} + + )} + + + + {(button) => ( + + + {button.label} + + + )} + + + {hint()} + + 0}> + + × + + {store.closing()?.over ? "release to close" : "slide here to close"} + + {closingTitle()} + + + + + {/* ---- body: chord map ---- */} + + + + {LAYER_TITLE[store.layer() as Layer]} + + + {(row, i) => ( + + + + + + + + + + + + + + + {row().badge} + + + {row().label} + + )} + + + {(row, i) => ( + + + {row().badge} + + {row().label} + + )} + + + {latched() ? "tap a row, or press the button · tap L/R again to let go" : LAYER_HINT[store.layer()]} + + + + + {/* ---- body: launcher ---- */} + + + launch + + {(app, i) => ( + + + + + {app()} + {APP_BLURB[app()]} + + )} + + + d-pad picks · A opens · B or L+A closes + + + + + {/* ---- body: keyboard ---- */} + + + + + {/* ---- dock ---- */} + + + {(app, i) => { + const running = () => { + store.rev(); + for (const w of store.wm.windows.values()) if (w.app === app()) return true; + return false; + }; + return ( + + + + + + + + {app()} + + ); + }} + + + + ); +} + +export { BAR_H }; diff --git a/apps/pocket-shell/images.json b/apps/pocket-shell/images.json new file mode 100644 index 000000000..19cd27540 --- /dev/null +++ b/apps/pocket-shell/images.json @@ -0,0 +1,5 @@ +{ + "wall/road.png": { "psm": 0 }, + "wall/lake.png": { "psm": 0 }, + "wall/swirl.png": { "psm": 0 } +} diff --git a/apps/pocket-shell/keyboard.tsx b/apps/pocket-shell/keyboard.tsx new file mode 100644 index 000000000..8e14fd076 --- /dev/null +++ b/apps/pocket-shell/keyboard.tsx @@ -0,0 +1,191 @@ +// apps/pocket-shell/keyboard.tsx — the deck's touch keyboard, for term and +// notes. The framework Osk lays itself out against the PRIMARY viewport, so +// the 320 px auxiliary panel gets a hand-laid grid instead: 32 px columns, +// 30 px rows, hit by the deck's one gesture through `keyboardHit`. Shift is +// one-shot (the resistive panel has one contact); "123" latches the symbol +// layer until "abc". + +import { createSignal, Index } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { onFrame } from "@pocketjs/framework/lifecycle"; +import type { KbLayer, ShellStore } from "./store.ts"; + +export const KB_TOP = 24; +export const KB_BOTTOM = 200; +const ECHO_H = 26; +const ROWS_TOP = KB_TOP + ECHO_H + 6; +const KEY_H = 30; +const UNIT = 32; +const PRESS_FRAMES = 6; + +export type KeyAction = + | { ch: string } + | { key: "enter" | "backspace" | "space" | "tab" } + | { layer: KbLayer } + | { hide: true }; + +interface KeyDef { + label: string; + /** Width in 32 px units. */ + w: number; + act: KeyAction; + dark?: boolean; +} + +const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); + +const ROWS: Record = { + lower: [ + chars("qwertyuiop"), + chars("asdfghjkl"), + [ + { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, + ...chars("zxcvbnm"), + { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, + ], + [ + { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, + { label: ",", w: 1, act: { ch: "," } }, + { label: "space", w: 4, act: { key: "space" } }, + { label: ".", w: 1, act: { ch: "." } }, + { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, + ], + ], + upper: [ + chars("QWERTYUIOP"), + chars("ASDFGHJKL"), + [ + { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, + ...chars("ZXCVBNM"), + { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, + ], + [ + { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, + { label: "!", w: 1, act: { ch: "!" } }, + { label: "space", w: 4, act: { key: "space" } }, + { label: "?", w: 1, act: { ch: "?" } }, + { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, + ], + ], + sym: [ + chars("1234567890"), + chars("-/:;()&@\""), + [ + { label: "#+=", w: 1.5, act: { ch: "#" }, dark: true }, + ...chars(".,?!'*="), + { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, + ], + [ + { label: "abc", w: 1.5, act: { layer: "lower" }, dark: true }, + { label: "<", w: 1, act: { ch: "<" } }, + { label: "space", w: 4, act: { key: "space" } }, + { label: ">", w: 1, act: { ch: ">" } }, + { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, + ], + ], +}; + +/** Left offset that centres a row's total width on the 320 px panel. */ +function rowStart(row: KeyDef[]): number { + const total = row.reduce((sum, k) => sum + k.w, 0) * UNIT; + return Math.round((320 - total) / 2); +} + +export interface KeyHit { + act: KeyAction; + row: number; + index: number; +} + +export function keyboardHit(x: number, y: number, layer: KbLayer): KeyHit | null { + if (y >= KB_TOP && y < KB_TOP + ECHO_H) { + return x >= 320 - 52 ? { act: { hide: true }, row: -1, index: 0 } : null; + } + const row = Math.floor((y - ROWS_TOP) / KEY_H); + if (row < 0 || row >= 4) return null; + const keys = ROWS[layer][row]; + let left = rowStart(keys); + for (let index = 0; index < keys.length; index++) { + const w = keys[index].w * UNIT; + if (x >= left && x < left + w) return { act: keys[index].act, row, index }; + left += w; + } + return null; +} + +export function Keyboard(props: { store: ShellStore; pressed: () => KeyHit | null }) { + const store = props.store; + const echo = () => { + const id = store.focusedId(); + const state = id === null ? undefined : store.stateOf(id); + store.rev(); + if (!state) return ""; + if (state.kind === "term") return `❯ ${state.input}`; + if (state.kind === "notes") { + const lines = state.text.split("\n"); + return lines[lines.length - 1]; + } + return ""; + }; + const rows = () => ROWS[store.kbLayer()]; + return ( + + + {echo()} + + + hide + + + {(row, r) => ( + + {(key, i) => { + const left = () => rowStart(row()) + row().slice(0, i).reduce((sum, k) => sum + k.w, 0) * UNIT; + const hot = () => { + const p = props.pressed(); + return p !== null && p.row === r && p.index === i; + }; + return ( + + + {key().label} + + + ); + }} + + )} + + + ); +} + +/** Pressed-key highlight that lasts PRESS_FRAMES frames. */ +export function createKeyPress(): { pressed: () => KeyHit | null; press: (hit: KeyHit) => void } { + const [pressed, setPressed] = createSignal(null); + let left = 0; + onFrame(() => { + if (left > 0 && --left === 0) setPressed(null); + }); + return { + pressed, + press: (hit) => { + setPressed(hit); + left = PRESS_FRAMES; + }, + }; +} diff --git a/apps/pocket-shell/main.tsx b/apps/pocket-shell/main.tsx new file mode 100644 index 000000000..107175258 --- /dev/null +++ b/apps/pocket-shell/main.tsx @@ -0,0 +1,5 @@ +// @title PocketJS: Pocket Shell +import PocketShell from "./app.tsx"; +import { mount } from "@pocketjs/framework/solid"; + +mount(() => ); diff --git a/apps/pocket-shell/pocket.json b/apps/pocket-shell/pocket.json new file mode 100644 index 000000000..d5f474849 --- /dev/null +++ b/apps/pocket-shell/pocket.json @@ -0,0 +1,40 @@ +{ + "$schema": "https://pocketjs.dev/schema/pocket-2.json", + "pocket": 2, + "id": "dev.pocket-stack.pocket-shell", + "name": "pocketjs-pocket-shell", + "title": "PocketJS: Pocket Shell", + "version": "0.1.0", + "engine": { + "capabilities": { + "requires": [ + "text.glyphs.baked", + "input.buttons", + "display.auxiliary", + "input.touch.auxiliary" + ], + "enhances": [ + "input.analog.left" + ] + } + }, + "app": { + "entry": "apps/pocket-shell/main.tsx", + "output": "pocketshell-main", + "framework": "solid", + "surfaces": { + "auxiliary": { + "fixed": { + "logical": [320, 240], + "presentation": "native" + } + } + }, + "viewport": { + "fixed": { + "logical": [400, 240], + "presentation": "native" + } + } + } +} diff --git a/apps/pocket-shell/shell.ts b/apps/pocket-shell/shell.ts new file mode 100644 index 000000000..395d35e51 --- /dev/null +++ b/apps/pocket-shell/shell.ts @@ -0,0 +1,167 @@ +// apps/pocket-shell/shell.ts — pocketsh, the terminal applet's command +// interpreter. It is to Pocket Shell what hyprctl is to Hyprland: every +// window-manager verb the chords reach is also a command here, so the same +// state can be driven from a keyboard. Pure: the interpreter takes a +// ShellApi and returns the lines to print, and is unit-tested against a fake. + +import type { LayoutKind } from "./wm.ts"; + +export interface ShellWindow { + id: number; + app: string; + title: string; + ws: number; + focused: boolean; +} + +export interface ShellApi { + apps(): readonly string[]; + windows(): ShellWindow[]; + workspace(): number; + layout(): LayoutKind; + wallpaper(): string; + uptimeSeconds(): number; + now(): Date; + host(): string; + open(app: string): number | null; + close(id?: number): boolean; + focus(id: number): boolean; + switchWs(id: number): boolean; + setLayout(layout: LayoutKind): void; + nextWallpaper(): string; + keys(): { title: string; rows: { keys: string; what: string }[] }[]; +} + +export const COMMANDS = [ + "help", + "ls", + "open", + "close", + "focus", + "ws", + "layout", + "wall", + "keys", + "fetch", + "date", + "uptime", + "echo", + "clear", +] as const; + +export type Command = (typeof COMMANDS)[number]; + +/** Command names starting with `partial`, for Tab completion. */ +export function complete(partial: string): string[] { + return COMMANDS.filter((c) => c.startsWith(partial)); +} + +export const CLEAR = "\u0000clear"; + +const pad2 = (n: number): string => String(n).padStart(2, "0"); + +export function formatClock(date: Date, hour12 = false): string { + const h = date.getHours(); + const shown = hour12 ? h % 12 || 12 : h; + return `${pad2(shown)}:${pad2(date.getMinutes())}`; +} + +const DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; +const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + +export function formatDate(date: Date): string { + return `${DAYS[date.getDay()]} ${MONTHS[date.getMonth()]} ${date.getDate()} ${date.getFullYear()}`; +} + +export function formatUptime(seconds: number): string { + const s = Math.max(0, Math.floor(seconds)); + const h = Math.floor(s / 3600); + const m = Math.floor((s % 3600) / 60); + return h > 0 ? `${h}h ${pad2(m)}m ${pad2(s % 60)}s` : `${m}m ${pad2(s % 60)}s`; +} + +/** Run one line. Returns output lines; CLEAR as the only line clears the + * scrollback. */ +export function run(line: string, api: ShellApi): string[] { + const words = line.trim().split(/\s+/).filter(Boolean); + if (words.length === 0) return []; + const [name, ...args] = words; + switch (name) { + case "help": + return [ + "pocketsh — the shell's own hyprctl", + " ls windows on this workspace", + " open " + api.apps().join(" "), + " close [id] close focused or #id", + " focus focus window #id", + " ws [1-5] show or switch workspace", + " layout [name] dwindle | scrolling", + " wall [next] wallpaper", + " keys the chord table", + " fetch date uptime echo clear", + ]; + case "ls": { + const list = api.windows().filter((w) => w.ws === api.workspace()); + if (list.length === 0) return ["(empty workspace)"]; + return list.map((w) => `${w.focused ? "*" : " "} #${w.id} ${w.title}`); + } + case "open": { + const app = args[0]; + if (!app) return ["open: which app? " + api.apps().join(" ")]; + const id = api.open(app); + return id === null ? [`open: no app named '${app}'`] : [`opened ${app} as #${id}`]; + } + case "close": { + if (args[0] !== undefined) { + const id = Number(args[0].replace("#", "")); + if (!Number.isInteger(id)) return [`close: bad id '${args[0]}'`]; + return api.close(id) ? [`closed #${id}`] : [`close: no window #${id}`]; + } + return api.close() ? ["closed"] : ["close: nothing focused"]; + } + case "focus": { + const id = Number((args[0] ?? "").replace("#", "")); + if (!Number.isInteger(id)) return ["focus: which id?"]; + return api.focus(id) ? [] : [`focus: no window #${id}`]; + } + case "ws": { + if (args[0] === undefined) return [`workspace ${api.workspace()} · ${api.layout()}`]; + const id = Number(args[0]); + return api.switchWs(id) ? [] : [`ws: workspaces are 1-5`]; + } + case "layout": { + if (args[0] === undefined) return [api.layout()]; + if (args[0] !== "dwindle" && args[0] !== "scrolling") return ["layout: dwindle | scrolling"]; + api.setLayout(args[0]); + return [`workspace ${api.workspace()} is now ${args[0]}`]; + } + case "wall": + if (args[0] === "next") return [`wallpaper: ${api.nextWallpaper()}`]; + return [`wallpaper: ${api.wallpaper()} (wall next)`]; + case "keys": + return api + .keys() + .flatMap((group) => [group.title, ...group.rows.map((r) => ` ${r.keys.padEnd(12)} ${r.what}`)]); + case "fetch": { + const windows = api.windows(); + return [ + " ___ pocket-shell @ " + api.host(), + " / \\ ws " + `${api.workspace()} · ${api.layout()}`, + "| o | windows " + String(windows.length), + " \\___/ uptime " + formatUptime(api.uptimeSeconds()), + " | | theme tokyo-night", + " wall " + api.wallpaper(), + ]; + } + case "date": + return [`${formatDate(api.now())} ${formatClock(api.now())}`]; + case "uptime": + return [formatUptime(api.uptimeSeconds())]; + case "echo": + return [args.join(" ")]; + case "clear": + return [CLEAR]; + default: + return [`pocketsh: ${name}: command not found`]; + } +} diff --git a/apps/pocket-shell/stage.tsx b/apps/pocket-shell/stage.tsx new file mode 100644 index 000000000..60efce8f4 --- /dev/null +++ b/apps/pocket-shell/stage.tsx @@ -0,0 +1,203 @@ +// apps/pocket-shell/stage.tsx — the top screen: wallpaper, tiled windows, +// the bar, and the key sheet. Window geometry comes from the store's +// animated rects; the applet inside sizes from the settled placement so text +// does not reflow every frame of a transition. + +import { For, Index, Show } from "solid-js"; +import { Image, Text, View } from "@pocketjs/framework/components"; +import { keySheet, LAYER_TITLE } from "./chords.ts"; +import { formatClock } from "./shell.ts"; +import { Applet, type SheetLine } from "./applets.tsx"; +import type { ShellStore } from "./store.ts"; +import { BAR_H, BORDER } from "./wm.ts"; + +const HEADER_H = 14; + +/** The three cooked wallpapers. Only the current one is mounted. */ +function Wallpaper(props: { store: ShellStore }) { + return ( + <> + + + + + + + + + + + ); +} + +function Win(props: { id: number; store: ShellStore }) { + const store = props.store; + const win = () => store.windowOf(props.id); + const focused = () => store.focusedId() === props.id; + const geometry = () => { + const a = store.animOf(props.id); + return { insetL: a.cur.x, insetT: a.cur.y, width: a.cur.w, height: a.cur.h, opacity: a.alpha }; + }; + const contentW = () => Math.max(0, (store.placementOf(props.id)?.rect.w ?? 0) - 2 * BORDER); + const contentH = () => Math.max(0, (store.placementOf(props.id)?.rect.h ?? 0) - 2 * BORDER - HEADER_H); + return ( + + + + + + {win()?.title ?? ""} + + {`#${props.id}`} + + + + {(w) => } + + + + + ); +} + +function Bar(props: { store: ShellStore }) { + const store = props.store; + const title = () => { + const id = store.focusedId(); + return id === null ? "" : store.windowOf(id)?.title ?? ""; + }; + return ( + + + {(count, i) => ( + 0 + ? "absolute top-0 text-xs text-[#a9b1d6]" + : "absolute top-0 text-xs text-[#414868]" + } + style={{ insetL: 6 + i * 12 }} + > + {String(i + 1)} + + )} + + {title()} + + {formatClock(store.now())} + + + {LAYER_TITLE[store.layer()]} + + {store.layoutKind()} + + ); +} + +/** SUPER+K: the whole chord table over the stage. Four groups in two + * columns — L and "always" on the left, R and L+R on the right — with every + * cell clipped to its column so a long label cannot run into its neighbour + * or off the panel. */ +const SHEET_COL_W = 184; +const SHEET_KEYS_W = 80; +const SHEET_ROW_H = 12; + +function SheetColumn(props: { store: ShellStore; x: number; groups: number[] }) { + const lines = () => { + const all = keySheet(props.store.layoutKind()); + const out: SheetLine[] = []; + for (const index of props.groups) { + const group = all[index]; + out.push({ kind: "title", keys: group.title, what: "" }); + for (const row of group.rows) out.push({ kind: "row", keys: row.keys, what: row.what }); + out.push({ kind: "gap", keys: "", what: "" }); + } + return out; + }; + return ( + + {(line, i) => ( + + + {line().keys} + + + + {line().keys} + + + {line().what} + + + + )} + + ); +} + +function KeySheet(props: { store: ShellStore }) { + return ( + + keys + every chord · B closes + {/* keySheet() returns L, R, L+R, always — pair the long groups with the short. */} + + + + ); +} + +export function Stage(props: { store: ShellStore }) { + const store = props.store; + return ( + + + + {(id) => } + + {(ghost) => ( + + )} + + + + + + {`workspace ${store.active()} is empty · hold L and press A, or tap the dock`} + + + + + + + + + + + ); +} + +export { BAR_H }; diff --git a/apps/pocket-shell/store.ts b/apps/pocket-shell/store.ts new file mode 100644 index 000000000..aaa8bfdb5 --- /dev/null +++ b/apps/pocket-shell/store.ts @@ -0,0 +1,740 @@ +// apps/pocket-shell/store.ts — the shell's live state: the window manager +// wrapped in signals, the per-frame input dispatcher that turns shoulder +// chords into actions, window geometry animation, and the applet states the +// windows render. Everything the two screens show reads from here. +// +// Reactivity is coarse on purpose. `rev` bumps after every structural change +// (open, close, focus, layout) and `frame` bumps only on frames where +// something is still moving, so an idle shell re-evaluates nothing. + +import { createMemo, createSignal } from "solid-js"; +import { BTN } from "@pocketjs/framework/input"; +import { analogX, analogY, onFrame } from "@pocketjs/framework/lifecycle"; +import { getOps } from "@pocketjs/framework"; +import { chordsOf, keySheet, layerOf, type ActionId, type Layer } from "./chords.ts"; +import { CLEAR, complete, run as runShell, type ShellApi } from "./shell.ts"; +import { WindowManager, WORKSPACES, type Placement, type Rect } from "./wm.ts"; + +export type AppId = "term" | "clock" | "notes" | "keys" | "stats" | "about"; +export const APPS: readonly AppId[] = ["term", "clock", "notes", "keys", "stats", "about"]; +/** Short enough for the launcher's 96 px card. */ +export const APP_BLURB: Record = { + term: "pocketsh", + clock: "time and date", + notes: "scratch pad", + keys: "chord table", + stats: "frames, host", + about: "what this is", +}; + +export const WALLPAPERS = ["road", "lake", "swirl"] as const; +export type Wallpaper = (typeof WALLPAPERS)[number]; + +export const isTextApp = (app: AppId | undefined): boolean => app === "term" || app === "notes"; + +export interface TermState { + kind: "term"; + lines: string[]; + input: string; + history: string[]; + /** history.length when not browsing. */ + histIdx: number; + /** Lines scrolled up from the bottom. */ + scroll: number; +} +export interface NotesState { + kind: "notes"; + text: string; + scroll: number; +} +export interface ClockState { + kind: "clock"; + hour12: boolean; +} +export interface KeysState { + kind: "keys"; + scroll: number; +} +export interface PlainState { + kind: "stats" | "about"; +} +export type AppletState = TermState | NotesState | ClockState | KeysState | PlainState; + +export interface Anim { + cur: Rect; + alpha: number; +} + +export interface Ghost { + rect: Rect; + alpha: number; +} + +export interface Drag { + id: number; + /** Finger position in stage coordinates. */ + x: number; + y: number; + /** A window the finger is over (swap target). */ + over: number | null; + /** A workspace tab the finger is over (move target). */ + overWs: number | null; +} + +export type KbLayer = "lower" | "upper" | "sym"; + +const PROMPT = "❯ "; +const MAX_LINES = 200; +const TOAST_FRAMES = 100; +const EASE = 0.35; +const SLIDE_PX = 48; +const MAX_LAUNCHER_INDEX = APPS.length - 1; +const LAUNCHER_COLS = 3; +const DEAD_ZONE = 0.25; +const RESIZE_PX = 3; +const SCROLL_PX = 6; + +function initialState(app: AppId): AppletState { + switch (app) { + case "term": + return { + kind: "term", + lines: ["pocketsh — type help, or hold L", ""], + input: "", + history: [], + histIdx: 0, + scroll: 0, + }; + case "notes": + return { kind: "notes", text: "", scroll: 0 }; + case "clock": + return { kind: "clock", hour12: false }; + case "keys": + return { kind: "keys", scroll: 0 }; + case "stats": + case "about": + return { kind: app }; + } +} + +const lerp = (a: number, b: number): number => { + const next = a + (b - a) * EASE; + return Math.abs(b - next) < 0.5 ? b : next; +}; + +const shrink = (r: Rect, by: number): Rect => ({ + x: r.x + r.w * by * 0.5, + y: r.y + r.h * by * 0.5, + w: r.w * (1 - by), + h: r.h * (1 - by), +}); + +export type ShellStore = ReturnType; + +export function createShellStore() { + const wm = new WindowManager(); + const applets = new Map(); + const anims = new Map(); + let ghosts: Ghost[] = []; + + const [rev, setRev] = createSignal(0); + const bump = () => setRev((r) => r + 1); + const [frame, setFrame] = createSignal(0); + const [second, setSecond] = createSignal(0); + const [layer, setLayer] = createSignal("plain"); + const [latchL, setLatchL] = createSignal(false); + const [latchR, setLatchR] = createSignal(false); + const [launcherOpen, setLauncherOpen] = createSignal(false); + const [launcherIndex, setLauncherIndex] = createSignal(0); + const [keysOpen, setKeysOpen] = createSignal(false); + const [kbOpen, setKbOpen] = createSignal(false); + const [kbLayer, setKbLayer] = createSignal("lower"); + const [wallpaper, setWallpaper] = createSignal("road"); + const [toast, setToast] = createSignal(""); + const [drag, setDrag] = createSignal(null); + const [closing, setClosing] = createSignal<{ id: number; over: boolean } | null>(null); + const [closeAnim, setCloseAnim] = createSignal(0); + const [fps, setFps] = createSignal(0); + + let frames = 0; + let toastFrames = 0; + let slide = 0; + let prevButtons = 0; + let lastSecond = -1; + let fpsFrames = 0; + let fpsStamp = 0; + + // ---- derived ----------------------------------------------------------------- + + const active = createMemo(() => { + rev(); + return wm.active; + }); + // The active Workspace is one mutable object, so identity never changes: + // opt out of the memo's equality check or nothing downstream re-reads it. + const workspace = createMemo( + () => { + rev(); + return wm.workspace(); + }, + undefined, + { equals: false }, + ); + const placements = createMemo(() => { + rev(); + return wm.placements(); + }); + const order = createMemo(() => { + rev(); + return wm.order(); + }); + const focusedId = createMemo(() => { + rev(); + return wm.workspace().focus; + }); + const focusedApp = createMemo(() => { + const id = focusedId(); + return id === null ? undefined : wm.windows.get(id)?.app; + }); + const counts = createMemo(() => { + rev(); + return wm.workspaces.map((ws) => wm.count(ws)); + }); + const layoutKind = createMemo(() => workspace().layout); + const barVisible = createMemo(() => { + rev(); + return wm.barVisible; + }); + const kbVisible = createMemo(() => kbOpen() && isTextApp(focusedApp())); + const now = createMemo(() => { + second(); + return new Date(); + }); + + const placementOf = (id: number): Placement | undefined => placements().find((p) => p.id === id); + const windowOf = (id: number) => wm.windows.get(id); + const stateOf = (id: number): AppletState | undefined => applets.get(id); + /** Animated geometry for the stage; snaps to the target when unknown. */ + const animOf = (id: number): Anim => { + frame(); + const anim = anims.get(id); + if (anim) return anim; + const target = wm.placement(id)?.rect ?? { x: 0, y: 0, w: 0, h: 0 }; + return { cur: target, alpha: 1 }; + }; + const ghostList = (): Ghost[] => { + frame(); + return ghosts; + }; + const slideOffset = (): number => { + frame(); + return slide; + }; + const uptimeSeconds = (): number => frames / 60; + const frameCount = (): number => { + frame(); + return frames; + }; + + // ---- mutations ----------------------------------------------------------------- + + const say = (message: string) => { + setToast(message); + toastFrames = TOAST_FRAMES; + }; + + const open = (app: AppId, wsId: number = wm.active): number => { + const id = wm.open(app, wsId); + applets.set(id, initialState(app)); + const target = wm.placement(id)?.rect; + if (target) anims.set(id, { cur: shrink(target, 0.12), alpha: 0 }); + bump(); + return id; + }; + + const close = (id: number | null = wm.workspace().focus): boolean => { + if (id === null) return false; + const anim = anims.get(id); + const win = wm.windows.get(id); + const onStage = win?.ws === wm.active; + if (!wm.close(id)) return false; + if (anim && onStage) ghosts = [...ghosts, { rect: anim.cur, alpha: anim.alpha }]; + anims.delete(id); + applets.delete(id); + bump(); + return true; + }; + + const focusWin = (id: number) => { + wm.focusWin(id); + bump(); + }; + + const switchWs = (id: number) => { + if (id < 1 || id > WORKSPACES || id === wm.active) return; + slide = (id > wm.active ? 1 : -1) * SLIDE_PX; + wm.switchWs(id); + snapWorkspace(); + say(`workspace ${id}`); + bump(); + }; + + /** Windows arriving on stage start from their target, offset by the slide. */ + const snapWorkspace = () => { + for (const p of wm.placements()) { + anims.set(p.id, { cur: { ...p.rect, x: p.rect.x + slide }, alpha: p.hidden ? 0 : 1 }); + } + }; + + const toggleLayout = () => { + const kind = wm.toggleLayout(); + say(`layout: ${kind}`); + bump(); + }; + + const nextWallpaper = (): Wallpaper => { + const next = WALLPAPERS[(WALLPAPERS.indexOf(wallpaper()) + 1) % WALLPAPERS.length]; + setWallpaper(next); + return next; + }; + + const toggleKeyboard = () => { + if (!isTextApp(focusedApp())) { + say("the keyboard types into term or notes"); + return; + } + setKbOpen(!kbOpen()); + }; + + const run = (action: ActionId): void => { + switch (action) { + case "focus.left": + case "focus.right": + case "focus.up": + case "focus.down": { + const dir = action.slice(6) as "left" | "right" | "up" | "down"; + if (!wm.focusDir(dir)) say(wm.count() === 0 ? "empty workspace — L+A launches" : `nothing ${dir}`); + break; + } + case "swap.left": + case "swap.right": + case "swap.up": + case "swap.down": { + const dir = action.slice(5) as "left" | "right" | "up" | "down"; + if (!wm.swapDir(dir)) say(`nothing to swap ${dir}`); + break; + } + case "ws.prev": + case "ws.next": { + const next = wm.active + (action === "ws.next" ? 1 : -1); + if (next < 1 || next > WORKSPACES) say(`workspace ${wm.active} is the ${next < 1 ? "first" : "last"}`); + else switchWs(next); + return; + } + case "carry.prev": + case "carry.next": { + const delta = action === "carry.next" ? 1 : -1; + const from = wm.active; + if (wm.carryWs(delta)) { + slide = delta * SLIDE_PX; + snapWorkspace(); + say(`carried to workspace ${wm.active}`); + } else { + say(wm.workspace().focus === null ? "nothing to carry" : `workspace ${from} is the ${delta < 0 ? "first" : "last"}`); + } + break; + } + case "launcher": + setLauncherOpen(!launcherOpen()); + setKeysOpen(false); + return; + case "close": + if (!close()) say("nothing to close"); + return; + case "fullscreen": + if (!wm.toggleFullscreen("full")) say("nothing to fill the screen with"); + break; + case "maximize": + if (!wm.toggleFullscreen("max")) say("nothing to maximize"); + break; + case "split": + if (wm.workspace().layout === "dwindle") { + if (!wm.toggleSplit()) say("a split needs two windows"); + } else if (!wm.cycleColumnWidth()) say("no column focused"); + break; + case "swapsplit": + if (wm.workspace().layout === "dwindle") { + if (!wm.swapSplit()) say("a split needs two windows"); + } else if (!wm.consumeOrExpel()) say("nothing to stack with"); + break; + case "layout": + toggleLayout(); + return; + case "keys": + setKeysOpen(!keysOpen()); + setLauncherOpen(false); + return; + case "another": { + const app = focusedApp(); + if (app) open(app); + else say("focus a window to open another of it"); + return; + } + case "reopen": { + const id = wm.reopen(); + if (id === null) say("nothing to reopen"); + else { + applets.set(id, initialState(wm.windows.get(id)!.app)); + const target = wm.placement(id)?.rect; + if (target) anims.set(id, { cur: shrink(target, 0.12), alpha: 0 }); + } + break; + } + case "wallpaper": + say(`wallpaper: ${nextWallpaper()}`); + return; + case "bar": + wm.toggleBar(); + break; + } + bump(); + }; + + // ---- text input ---------------------------------------------------------------- + + const focusedText = (): TermState | NotesState | null => { + const id = wm.workspace().focus; + const state = id === null ? undefined : applets.get(id); + return state && (state.kind === "term" || state.kind === "notes") ? state : null; + }; + + const shellApi: ShellApi = { + apps: () => APPS, + windows: () => + [...wm.windows.values()].map((w) => ({ + id: w.id, + app: w.app, + title: w.title, + ws: w.ws, + focused: wm.workspace(w.ws).focus === w.id, + })), + workspace: () => wm.active, + layout: () => wm.workspace().layout, + wallpaper: () => wallpaper(), + uptimeSeconds, + now: () => new Date(), + host: () => getOps().__host ?? "3ds", + open: (app) => (APPS.includes(app as AppId) ? open(app as AppId) : null), + close: (id) => close(id ?? wm.workspace().focus), + focus: (id) => { + if (!wm.windows.has(id)) return false; + focusWin(id); + return true; + }, + switchWs: (id) => { + if (!Number.isInteger(id) || id < 1 || id > WORKSPACES) return false; + switchWs(id); + return true; + }, + setLayout: (kind) => { + if (wm.workspace().layout !== kind) toggleLayout(); + }, + nextWallpaper, + keys: () => keySheet(wm.workspace().layout), + }; + + const termSubmit = (term: TermState) => { + const line = term.input; + term.lines.push(PROMPT + line); + const out = runShell(line, shellApi); + if (out.length === 1 && out[0] === CLEAR) term.lines = []; + else term.lines.push(...out); + if (term.lines.length > MAX_LINES) term.lines.splice(0, term.lines.length - MAX_LINES); + if (line.trim()) term.history.push(line); + term.histIdx = term.history.length; + term.input = ""; + term.scroll = 0; + }; + + const termComplete = (term: TermState) => { + const word = term.input.trimStart(); + if (word.includes(" ")) return; + const matches = complete(word); + if (matches.length === 1) term.input = matches[0] + " "; + else if (matches.length > 1) term.lines.push(matches.join(" ")); + }; + + const termHistory = (term: TermState, delta: number) => { + const next = Math.max(0, Math.min(term.history.length, term.histIdx + delta)); + term.histIdx = next; + term.input = next === term.history.length ? "" : term.history[next]; + }; + + /** A character from the deck keyboard, into whichever text applet has focus. */ + const typeChar = (ch: string) => { + const state = focusedText(); + if (!state) return; + if (state.kind === "term") state.input += ch; + else state.text += ch; + bump(); + }; + + const typeKey = (key: "enter" | "backspace" | "space" | "tab") => { + const state = focusedText(); + if (!state) return; + if (state.kind === "term") { + if (key === "enter") termSubmit(state); + else if (key === "backspace") state.input = state.input.slice(0, -1); + else if (key === "space") state.input += " "; + else termComplete(state); + } else { + if (key === "enter") state.text += "\n"; + else if (key === "backspace") state.text = state.text.slice(0, -1); + else if (key === "space") state.text += " "; + else state.text += " "; + } + bump(); + }; + + // ---- plain-layer buttons: the focused applet's --------------------------------- + + const plainInput = (pressed: number) => { + if (launcherOpen()) { + let index = launcherIndex(); + if (pressed & BTN.LEFT) index -= 1; + if (pressed & BTN.RIGHT) index += 1; + if (pressed & BTN.UP) index -= LAUNCHER_COLS; + if (pressed & BTN.DOWN) index += LAUNCHER_COLS; + setLauncherIndex(Math.max(0, Math.min(MAX_LAUNCHER_INDEX, index))); + if (pressed & BTN.CIRCLE) { + open(APPS[launcherIndex()]); + setLauncherOpen(false); + } + if (pressed & BTN.CROSS) setLauncherOpen(false); + return; + } + if (keysOpen()) { + if (pressed & (BTN.CROSS | BTN.SELECT | BTN.CIRCLE)) setKeysOpen(false); + return; + } + if (pressed & BTN.SELECT) { + toggleKeyboard(); + return; + } + const id = wm.workspace().focus; + const state = id === null ? undefined : applets.get(id); + if (!state) return; + switch (state.kind) { + case "term": + if (pressed & BTN.CIRCLE) termSubmit(state); + if (pressed & BTN.CROSS) state.input = state.input.slice(0, -1); + if (pressed & BTN.TRIANGLE) termComplete(state); + if (pressed & BTN.SQUARE) state.input += " "; + if (pressed & BTN.UP) termHistory(state, -1); + if (pressed & BTN.DOWN) termHistory(state, 1); + if (pressed & BTN.START) { + state.lines = []; + state.scroll = 0; + } + break; + case "notes": + if (pressed & BTN.CIRCLE) state.text += "\n"; + if (pressed & BTN.CROSS) state.text = state.text.slice(0, -1); + if (pressed & BTN.SQUARE) state.text += " "; + break; + case "clock": + if (pressed & BTN.CIRCLE) state.hour12 = !state.hour12; + break; + case "keys": + if (pressed & BTN.UP) state.scroll = Math.max(0, state.scroll - 1); + if (pressed & BTN.DOWN) state.scroll += 1; + break; + default: + return; + } + bump(); + }; + + const scrollApplet = (lines: number) => { + const id = wm.workspace().focus; + const state = id === null ? undefined : applets.get(id); + if (!state) return; + if (state.kind === "term" || state.kind === "notes" || state.kind === "keys") { + state.scroll = Math.max(0, state.scroll + lines); + bump(); + } + }; + + // ---- the frame ------------------------------------------------------------------- + + let scrollCarry = 0; + + onFrame((buttons) => { + frames++; + + // Wall clock, once a second. + const nowSecond = Math.floor(Date.now() / 1000); + if (nowSecond !== lastSecond) { + lastSecond = nowSecond; + setSecond(nowSecond); + const stamp = Date.now(); + if (fpsStamp > 0) setFps(Math.round((fpsFrames * 1000) / Math.max(1, stamp - fpsStamp))); + fpsStamp = stamp; + fpsFrames = 0; + } + fpsFrames++; + + const held = buttons | (latchL() ? BTN.LTRIGGER : 0) | (latchR() ? BTN.RTRIGGER : 0); + const currentLayer = layerOf(held); + if (currentLayer !== layer()) setLayer(currentLayer); + const pressed = buttons & ~prevButtons; + prevButtons = buttons; + + let consumed = false; + if (currentLayer === "plain") { + plainInput(pressed); + } else { + for (const chord of chordsOf(currentLayer)) { + if (pressed & chord.button) { + run(chord.action); + consumed = true; + } + } + } + if (consumed && (latchL() || latchR())) { + setLatchL(false); + setLatchR(false); + } + + // The circle pad: resize under L, pan the strip under R, scroll the applet plain. + const ax = analogX(); + const ay = analogY(); + const px = Math.abs(ax) > DEAD_ZONE ? ax : 0; + const py = Math.abs(ay) > DEAD_ZONE ? ay : 0; + if (px !== 0 || py !== 0) { + if (currentLayer === "super") { + wm.resize(px * RESIZE_PX, py * RESIZE_PX); + bump(); + } else if (currentLayer === "shift") { + if (wm.workspace().layout === "scrolling" && px !== 0) { + wm.scrollBy(px * SCROLL_PX); + bump(); + } + } else if (currentLayer === "plain" && py !== 0) { + scrollCarry += -py * 0.4; + const lines = Math.trunc(scrollCarry); + if (lines !== 0) { + scrollCarry -= lines; + scrollApplet(lines); + } + } + } else { + scrollCarry = 0; + } + + // Geometry animation for the stage. + let moving = false; + for (const p of wm.placements()) { + let anim = anims.get(p.id); + if (!anim) { + anim = { cur: { ...p.rect }, alpha: p.hidden ? 0 : 1 }; + anims.set(p.id, anim); + } + const targetAlpha = p.hidden ? 0 : 1; + const cur = anim.cur; + const next = { + x: lerp(cur.x, p.rect.x), + y: lerp(cur.y, p.rect.y), + w: lerp(cur.w, p.rect.w), + h: lerp(cur.h, p.rect.h), + }; + const alpha = Math.abs(targetAlpha - anim.alpha) < 0.05 ? targetAlpha : anim.alpha + (targetAlpha - anim.alpha) * EASE; + if (next.x !== cur.x || next.y !== cur.y || next.w !== cur.w || next.h !== cur.h || alpha !== anim.alpha) { + anim.cur = next; + anim.alpha = alpha; + moving = true; + } + } + if (ghosts.length > 0) { + ghosts = ghosts + .map((g) => ({ rect: shrink(g.rect, 0.04), alpha: g.alpha - 0.1 })) + .filter((g) => g.alpha > 0); + moving = true; + } + if (slide !== 0) { + slide *= 0.7; + if (Math.abs(slide) < 0.5) slide = 0; + moving = true; + } + if (toastFrames > 0) { + toastFrames--; + if (toastFrames === 0) setToast(""); + } + const closeTarget = closing() ? 1 : 0; + if (closeAnim() !== closeTarget) { + const step = 1 / 6; + setCloseAnim(closeTarget > closeAnim() ? Math.min(1, closeAnim() + step) : Math.max(0, closeAnim() - step)); + } + if (moving) setFrame(frames); + }); + + return { + wm, + rev, + frame, + frameCount, + second, + now, + fps, + uptimeSeconds, + layer, + latchL, + setLatchL, + latchR, + setLatchR, + launcherOpen, + setLauncherOpen, + launcherIndex, + setLauncherIndex, + keysOpen, + setKeysOpen, + kbOpen, + setKbOpen, + kbVisible, + kbLayer, + setKbLayer, + wallpaper, + toast, + say, + drag, + setDrag, + closing, + setClosing, + closeAnim, + active, + workspace, + layoutKind, + barVisible, + placements, + placementOf, + order, + focusedId, + focusedApp, + counts, + windowOf, + stateOf, + animOf, + ghostList, + slideOffset, + open, + close, + focusWin, + switchWs, + toggleLayout, + toggleKeyboard, + run, + typeChar, + typeKey, + bump, + }; +} diff --git a/apps/pocket-shell/wall/lake.png b/apps/pocket-shell/wall/lake.png new file mode 100644 index 0000000000000000000000000000000000000000..4f98e57c52aa5c82953ab41a47503202b3fc0dee GIT binary patch literal 78799 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-shell/wall/prepare.ts b/apps/pocket-shell/wall/prepare.ts new file mode 100644 index 000000000..1bd543e1e --- /dev/null +++ b/apps/pocket-shell/wall/prepare.ts @@ -0,0 +1,64 @@ +// apps/pocket-shell/wall/prepare.ts — cook the Omarchy tokyo-night backgrounds +// into pak-ready textures. +// +// bun apps/pocket-shell/wall/prepare.ts +// +// holds the originals from /usr/share/omarchy/themes/tokyo-night/ +// backgrounds/ (0-winding-road.jpg, 3-sunset-lake.png, 2-swirl-buck.jpg). +// Each is scaled to a 240 px height, centre-cropped to the 400x240 top +// screen (sips does both), then padded into a 512x256 opaque envelope: +// framework/compiler/pak.ts only accepts power-of-two images, and +// images.json bakes these as PSM_5650, which needs every pixel opaque. The +// stage draws the texture at its full 512x256 size under an overflow-hidden +// root, so the padding never shows. + +import { $ } from "bun"; +import { mkdtempSync, writeFileSync } from "node:fs"; +import { tmpdir } from "node:os"; +import { join } from "node:path"; +import { decodePng } from "../../../framework/compiler/pak.ts"; +import { encodePNG } from "../../../tests/png.ts"; + +const OUT_W = 512; +const OUT_H = 256; +const SCREEN_W = 400; +const SCREEN_H = 240; + +const SOURCES: Record = { + "road.png": "0-winding-road.jpg", + "lake.png": "3-sunset-lake.png", + "swirl.png": "2-swirl-buck.jpg", +}; + +const sourceDir = process.argv[2]; +if (!sourceDir) { + console.error("usage: bun apps/pocket-shell/wall/prepare.ts "); + process.exit(1); +} +const here = new URL(".", import.meta.url).pathname; +const work = mkdtempSync(join(tmpdir(), "pocket-shell-wall-")); + +for (const [target, source] of Object.entries(SOURCES)) { + const scaled = join(work, `${target}.scaled.png`); + // Height first, then a centred crop to the screen's aspect. + await $`sips -s format png --resampleHeight ${SCREEN_H} ${join(sourceDir, source)} --out ${scaled}`.quiet(); + await $`sips -c ${SCREEN_H} ${SCREEN_W} ${scaled} --out ${scaled}`.quiet(); + const img = decodePng(new Uint8Array(await Bun.file(scaled).arrayBuffer())); + if (img.width !== SCREEN_W || img.height !== SCREEN_H) { + throw new Error(`${source}: expected ${SCREEN_W}x${SCREEN_H} after crop, got ${img.width}x${img.height}`); + } + const rgba = new Uint8Array(OUT_W * OUT_H * 4); + for (let i = 3; i < rgba.length; i += 4) rgba[i] = 255; // opaque black padding + for (let y = 0; y < SCREEN_H; y++) { + for (let x = 0; x < SCREEN_W; x++) { + const s = (y * SCREEN_W + x) * 4; + const d = (y * OUT_W + x) * 4; + rgba[d] = img.rgba[s]; + rgba[d + 1] = img.rgba[s + 1]; + rgba[d + 2] = img.rgba[s + 2]; + rgba[d + 3] = 255; + } + } + writeFileSync(join(here, target), encodePNG(rgba, OUT_W, OUT_H)); + console.log(`${target} <- ${source} (${SCREEN_W}x${SCREEN_H} in a ${OUT_W}x${OUT_H} envelope)`); +} diff --git a/apps/pocket-shell/wall/road.png b/apps/pocket-shell/wall/road.png new file mode 100644 index 0000000000000000000000000000000000000000..395a5406b6f75686edb23c41967592299e5e0be7 GIT binary patch literal 220685 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�GP0OPp?IQRn>|0L;a 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%0AQF=~sgsP(H^6t#;Id(%>T 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

c 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.112.png b/tests/goldens/3ds/pocket-shell.112.png new file mode 100644 index 0000000000000000000000000000000000000000..31a8f406985dd5994f0ab834413679a8b37eaad9 GIT binary patch literal 18362 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%0D>!E~=sLJ(%Us{_oXyS&XXN{?Q})UHY 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

dJyg*N*23s{xS?koqv` zbRDy#_4V?vu-_UEqPocx>x|1r_dDx_?3}}U-}rxkF-&wl%A9EuR7gp{BIU&)4tc}gvQn>`tv!Bn$ z@IscradV!ve&*ddor``&!2$S2+z~g=%)(S+7FdT)7%H5D@v=uziy3cFoiJ2XWx$c`K z_zpnA_688C`-sXV!;|r!kp#gGM9}%#DtYu7x6c+?hsU+SV*rC1gNO0`2LhU_qVhe8 zo#LW%g-M1cW;*5SoNZ=uR?>?Ws}e?@*96Gh0T2!e+M_;}x zA2Ujmwst^RI3PUw zDE$Kz2p%s09<4%&{xyNzLKL2^Coe#6qS6*|W_R4Olrk#d^1qQh- zdkt$a_LhmU90`EnP*w*?%Ym#vs15NpfWebRHeC2LD>jT$?T7%f3aC3n1hu30MBJW9 z1aR7xJh&QOg z-e>T%Df+?ufhiD?bIDmd_5lJQGQghz2+ij{Zvtc&A`%1$3?3xVb*=LtyDW-r>Rv7H z#jy*>EzzEa_r*>RP(mQgLNX1GL|#S$e7tV=GQ5xVYkdVIa(4U(eedbZMf~!ZXVL*N zOgyi?eda;Pa}e`L4S2Nq!7O+j?-h6i9XqRsFFo~@o}! z7M(SnPf_m`?achh20-?2Mhl}ZTjRjM@UlFUjAfydg_0?d1riVH$QhpS=hEC&$@B{Z;mU!mQ)* zJw4Vl@{id%|8oSF8{UspKpo+&vQ~)z1zJR_z+-%0?GfUpaIgI4KEts=l>_acsl^dd|8vV&NMf4qS_fafisea_tD5~wU-So>J(W{j2b>ZFMs7$|f_0rHxK zhoN8Ts;UKhW*~W62S*le%u6^45ZDHi3$emi9V%j0l5YP4?RbnioWGF)00000NkvXX Hu0mjfccQiB literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.160.auxiliary.png b/tests/goldens/3ds/pocket-shell.160.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a91dd8356ba2de01038d316ddd02cba82ddcd0 GIT binary patch literal 22817 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.176.auxiliary.png b/tests/goldens/3ds/pocket-shell.176.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..89343c4b897153c11fa5e56e246ec92cb3532d9f GIT binary patch literal 11395 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

(u>=yJ=;e~KkYt}HW}oYW#bNJ0Lf8^Br} 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 literal 0 HcmV?d00001 diff --git a/tests/platform-contracts.test.ts b/tests/platform-contracts.test.ts index 1c5914a45..a1d4548c8 100644 --- a/tests/platform-contracts.test.ts +++ b/tests/platform-contracts.test.ts @@ -535,6 +535,7 @@ describe("semantic resolution", () => { "meizu-m8-demo": [false, false, false, false], // admitted only by the private meizu-m8-dev profile nsengine: [false, true, false, false], // targets the private ios-dev profile; vita shares its touch + integer-fit contract "ipod-nano": [false, false, false, false], // admitted by the package-shaped macos-embedded target + "pocket-shell": [false, false, false, false], // the tiling shell needs the private 3ds-dev profile's auxiliary display and touch contracts launcher: [true, true, false, true], // the Cover Flow deck (docs/LAUNCHER.md) is an ordinary console app library: [true, true, false, true], motions: [true, true, false, true], diff --git a/tests/pocket-shell-sim.test.ts b/tests/pocket-shell-sim.test.ts new file mode 100644 index 000000000..7c0957e5a --- /dev/null +++ b/tests/pocket-shell-sim.test.ts @@ -0,0 +1,107 @@ +// tests/pocket-shell-sim.test.ts — Pocket Shell's render layer in the +// headless sim: the same button tape the Azahar golden runs, with the dock +// taps replaced by store calls (the sim has no touch screen; a detached core +// node stands in for the 3DS bottom screen's host root). What this proves is +// that every chord, layout toggle and workspace switch reconciles the two +// Solid trees without a renderer error, in milliseconds rather than an +// emulator boot. + +import { describe, expect, test } from "bun:test"; +import { NODE_TYPE } from "../contracts/spec/spec.ts"; +import { bootWorld } from "../hosts/sim/sim.ts"; +import { THREE_DS_GOLDEN_SPECS } from "./golden-specs.ts"; +import type { ShellStore } from "../apps/pocket-shell/store.ts"; + +const spec = THREE_DS_GOLDEN_SPECS.find((s) => s.name === "pocket-shell"); +if (!spec) throw new Error("no pocket-shell golden spec"); + +async function boot(): Promise<{ world: Awaited>; store: ShellStore }> { + const world = await bootWorld("pocket-shell-main", 60, undefined, (ops) => { + const createNode = ops.createNode as (type: number) => number; + ops.__auxiliarySurface = { root: createNode(NODE_TYPE.view), w: 320, h: 240 }; + }); + const store = (globalThis as { __pocketShell?: ShellStore }).__pocketShell; + if (!store) throw new Error("the bundle did not publish __pocketShell"); + return { world, store }; +} + +describe("pocket-shell in the sim", () => { + test("the golden tape's chords run clean", async () => { + const { world, store } = await boot(); + // The tape's dock taps land on frames 8, 18 and 28. + const taps: Record = { 8: "term", 18: "notes", 28: "about" }; + for (let frame = 0; frame <= spec!.frames; frame++) { + const app = taps[frame]; + if (app) store.open(app); + // The tape's minimap hold at 186..222 closes term; the sim has no + // touch screen, so arm and release the close bar through the store. + if (frame === 210) store.setClosing({ id: store.order()[1], over: true }); + if (frame === 223) { + const closing = store.closing(); + if (closing) store.close(closing.id); + store.setClosing(null); + } + world.frame(spec!.input!(frame)); + if (frame === 48) { + expect(store.order().length).toBe(3); + expect(store.focusedApp()).toBe("about"); + } + if (frame === 60) { + expect(store.layer()).toBe("super"); + expect(store.focusedApp()).toBe("term"); + } + if (frame === 84) { + // R + RIGHT swapped term with notes: term now leads nothing, notes leads. + expect(store.windowOf(store.order()[0])?.app).toBe("notes"); + expect(store.focusedApp()).toBe("term"); + } + if (frame === 112) expect(store.layoutKind()).toBe("scrolling"); + if (frame === 126) { + expect(store.active()).toBe(2); + expect(store.layer()).toBe("ws"); + } + if (frame === 160) { + expect(store.active()).toBe(1); + expect(store.keysOpen()).toBe(true); + } + if (frame === 176) { + expect(store.keysOpen()).toBe(false); + expect(store.launcherOpen()).toBe(true); + } + if (frame === 183) expect(store.launcherOpen()).toBe(false); + if (frame === 240) expect(store.order().length).toBe(2); + } + }); + + test("every action runs against an empty and a full workspace", async () => { + const { world, store } = await boot(); + const actions = [ + "focus.left", "focus.right", "focus.up", "focus.down", + "swap.left", "swap.right", "swap.up", "swap.down", + "launcher", "launcher", "close", "fullscreen", "fullscreen", "maximize", "maximize", + "split", "swapsplit", "layout", "split", "swapsplit", "layout", + "keys", "keys", "another", "reopen", "wallpaper", "bar", "bar", + "carry.next", "carry.prev", "ws.next", "ws.prev", + ] as const; + world.frame(0); + for (const action of actions) { + store.run(action); + world.frame(0); + } + for (const app of ["term", "clock", "notes", "keys", "stats", "about"] as const) store.open(app); + for (let i = 0; i < 10; i++) world.frame(0); + for (const action of actions) { + store.run(action); + for (let i = 0; i < 3; i++) world.frame(0); + } + store.setKbOpen(true); + store.focusWin(store.order()[0]); + for (let i = 0; i < 3; i++) world.frame(0); + store.typeChar("h"); + store.typeChar("e"); + store.typeKey("tab"); + store.typeKey("enter"); + for (let i = 0; i < 3; i++) world.frame(0); + expect(store.wm.windows.size).toBeGreaterThan(0); + }); +}); diff --git a/tests/pocket-shell-wm.test.ts b/tests/pocket-shell-wm.test.ts new file mode 100644 index 000000000..90992a972 --- /dev/null +++ b/tests/pocket-shell-wm.test.ts @@ -0,0 +1,372 @@ +// tests/pocket-shell-wm.test.ts — the window manager's layout rules, without +// a device: dwindle splits, scrolling columns, directional focus and swap, +// resize, fullscreen, workspace moves, and the touch handles. + +import { describe, expect, test } from "bun:test"; +import { + BAR_H, + GAP_IN, + GAP_OUT, + STAGE_H, + STAGE_W, + WindowManager, + type Rect, +} from "../apps/pocket-shell/wm.ts"; +import { CHORDS, chordFor, keySheet, labelFor, layerOf } from "../apps/pocket-shell/chords.ts"; +import { CLEAR, complete, formatClock, formatUptime, run, type ShellApi } from "../apps/pocket-shell/shell.ts"; +import { BTN } from "../contracts/spec/spec.ts"; + +type App = "term" | "clock" | "notes"; + +const rectOf = (wm: WindowManager, id: number): Rect => { + const placement = wm.placement(id); + if (!placement) throw new Error(`no placement for #${id}`); + return placement.rect; +}; + +describe("dwindle", () => { + test("the first window fills the workspace inside the gaps", () => { + const wm = new WindowManager(); + const id = wm.open("term"); + expect(rectOf(wm, id)).toEqual({ + x: GAP_OUT + GAP_IN, + y: BAR_H + GAP_OUT + GAP_IN, + w: STAGE_W - 2 * (GAP_OUT + GAP_IN), + h: STAGE_H - BAR_H - 2 * (GAP_OUT + GAP_IN), + }); + expect(wm.workspace().focus).toBe(id); + }); + + test("a second window splits the wide first one side by side, third stacks", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + const ra = rectOf(wm, a); + const rb = rectOf(wm, b); + expect(ra.y).toBe(rb.y); + expect(rb.x).toBeGreaterThan(ra.x + ra.w); + expect(rb.x - (ra.x + ra.w)).toBe(2 * GAP_IN); + // The focused (right) column is taller than wide, so the third stacks under it. + const c = wm.open("notes"); + const rb2 = rectOf(wm, b); + const rc = rectOf(wm, c); + expect(rc.x).toBe(rb2.x); + expect(rc.y).toBeGreaterThan(rb2.y + rb2.h); + expect(wm.order()).toEqual([a, b, c]); + }); + + test("closing gives the space back and focuses the neighbour", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + const c = wm.open("notes"); + expect(wm.close(c)).toBe(true); + expect(wm.workspace().focus).toBe(b); + expect(rectOf(wm, b).h).toBe(rectOf(wm, a).h); + wm.close(b); + expect(rectOf(wm, a).w).toBe(STAGE_W - 2 * (GAP_OUT + GAP_IN)); + wm.close(a); + expect(wm.count()).toBe(0); + expect(wm.workspace().focus).toBeNull(); + expect(wm.close()).toBe(false); + }); + + test("reopen brings back the last closed app", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + wm.open("clock"); + wm.close(a); + const again = wm.reopen(); + expect(again).not.toBeNull(); + expect(wm.windows.get(again!)?.app).toBe("term"); + expect(wm.windows.get(again!)?.title).toBe("term"); + wm.close(); // closes term again + wm.close(); // clock + wm.reopen(); + wm.reopen(); + expect(wm.reopen()).toBeNull(); + }); + + test("focus and swap follow the d-pad directions", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + const c = wm.open("notes"); + expect(wm.workspace().focus).toBe(c); + expect(wm.focusDir("up")).toBe(true); + expect(wm.workspace().focus).toBe(b); + expect(wm.focusDir("left")).toBe(true); + expect(wm.workspace().focus).toBe(a); + expect(wm.focusDir("left")).toBe(false); + // Swap a with its right neighbour: a takes b's slot. + const before = rectOf(wm, b); + expect(wm.swapDir("right")).toBe(true); + expect(rectOf(wm, a)).toEqual(before); + expect(wm.workspace().focus).toBe(a); + expect(wm.order()).toEqual([b, a, c]); + }); + + test("resize pushes the nearest boundary in the pad's direction", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + wm.focusWin(a); + const wa = rectOf(wm, a).w; + wm.resize(20, 0); + expect(rectOf(wm, a).w).toBe(wa + 20); + // From the right window, pushing right has no boundary on that side, so + // the left boundary moves right and the window shrinks. + wm.focusWin(b); + const wb = rectOf(wm, b).w; + wm.resize(20, 0); + expect(rectOf(wm, b).w).toBe(wb - 20); + // Ratios clamp. + for (let i = 0; i < 100; i++) wm.resize(50, 0); + expect(rectOf(wm, a).w).toBeGreaterThan(rectOf(wm, b).w); + expect(rectOf(wm, b).w).toBeGreaterThan(20); + }); + + test("toggleSplit flips orientation; swapSplit exchanges halves", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + expect(wm.toggleSplit()).toBe(true); + expect(rectOf(wm, a).x).toBe(rectOf(wm, b).x); + expect(rectOf(wm, b).y).toBeGreaterThan(rectOf(wm, a).y); + expect(wm.swapSplit()).toBe(true); + expect(rectOf(wm, a).y).toBeGreaterThan(rectOf(wm, b).y); + expect(wm.order()).toEqual([b, a]); + }); + + test("fullscreen covers the stage and hides the others; focus elsewhere clears it", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + wm.toggleFullscreen("full"); + expect(rectOf(wm, b)).toEqual({ x: 0, y: 0, w: STAGE_W, h: STAGE_H }); + expect(wm.placement(a)?.hidden).toBe(true); + wm.toggleFullscreen("max"); + expect(rectOf(wm, b)).toEqual(wm.area()); + wm.focusWin(a); + expect(wm.workspace().fullscreen).toBeNull(); + expect(wm.placement(a)?.hidden).toBe(false); + }); + + test("a split boundary can be found and dragged", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + wm.open("clock"); + const ra = rectOf(wm, a); + const handle = wm.splitAt({ x: ra.x + ra.w + GAP_IN, y: 120 }, 6); + expect(handle?.axis).toBe("x"); + wm.dragSplit(handle!, { x: 100, y: 120 }); + expect(rectOf(wm, a).x + rectOf(wm, a).w + GAP_IN).toBe(100); + expect(wm.splitAt({ x: 200, y: 20 }, 6)).toBeNull(); + }); + + test("the bar can be hidden and the area grows", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const before = rectOf(wm, a); + wm.toggleBar(); + expect(rectOf(wm, a).y).toBe(before.y - BAR_H); + expect(rectOf(wm, a).h).toBe(before.h + BAR_H); + }); +}); + +describe("scrolling", () => { + test("columns take 0.49 of the width and the strip follows focus", () => { + const wm = new WindowManager(); + wm.toggleLayout(); + expect(wm.workspace().layout).toBe("scrolling"); + const a = wm.open("term"); + const b = wm.open("clock"); + const area = wm.area(); + expect(rectOf(wm, a).w).toBe(Math.round(area.w * 0.49) - 2 * GAP_IN); + expect(rectOf(wm, a).x).toBe(area.x + GAP_IN); + expect(rectOf(wm, b).x).toBe(area.x + Math.round(area.w * 0.49) + GAP_IN); + // A third column does not fit: the strip scrolls so it is fully visible. + const c = wm.open("notes"); + const rc = rectOf(wm, c); + expect(rc.x + rc.w + GAP_IN).toBeLessThanOrEqual(area.x + area.w); + expect(wm.workspace().scroll).toBeGreaterThan(0); + expect(rectOf(wm, a).x).toBeLessThan(area.x); + // Focusing the first column scrolls back. + wm.focusWin(a); + expect(wm.workspace().scroll).toBe(0); + }); + + test("focus and swap work across offscreen columns", () => { + const wm = new WindowManager(); + wm.toggleLayout(); + const a = wm.open("term"); + const b = wm.open("clock"); + const c = wm.open("notes"); + wm.focusWin(a); + expect(wm.focusDir("right")).toBe(true); + expect(wm.workspace().focus).toBe(b); + expect(wm.focusDir("right")).toBe(true); + expect(wm.workspace().focus).toBe(c); + expect(wm.focusDir("right")).toBe(false); + expect(wm.swapDir("left")).toBe(true); + expect(wm.order()).toEqual([a, c, b]); + }); + + test("column width cycles, and stack/unstack moves a window between columns", () => { + const wm = new WindowManager(); + wm.toggleLayout(); + const a = wm.open("term"); + const b = wm.open("clock"); + expect(wm.cycleColumnWidth()).toBe(true); + expect(wm.workspace().columns[1].width).toBe(0.66); + // b joins a's column. + expect(wm.consumeOrExpel()).toBe(true); + expect(wm.workspace().columns.length).toBe(1); + expect(wm.workspace().columns[0].wins).toEqual([a, b]); + expect(rectOf(wm, b).y).toBeGreaterThan(rectOf(wm, a).y); + expect(wm.focusDir("up")).toBe(true); + expect(wm.workspace().focus).toBe(a); + // a leaves into its own column to the right. + expect(wm.consumeOrExpel()).toBe(true); + expect(wm.workspace().columns.map((c) => c.wins)).toEqual([[b], [a]]); + }); + + test("toggling back to dwindle keeps order and focus", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + const c = wm.open("notes"); + wm.focusWin(b); + wm.toggleLayout(); + expect(wm.order()).toEqual([a, b, c]); + expect(wm.workspace().focus).toBe(b); + wm.toggleLayout(); + expect(wm.workspace().layout).toBe("dwindle"); + expect(wm.order()).toEqual([a, b, c]); + expect(wm.workspace().focus).toBe(b); + expect(wm.placements().length).toBe(3); + }); + + test("a column edge can be dragged", () => { + const wm = new WindowManager(); + wm.toggleLayout(); + wm.open("term"); + wm.open("clock"); + const area = wm.area(); + const edge = area.x + Math.round(area.w * 0.49); + const handle = wm.columnEdgeAt({ x: edge + 2, y: 100 }, 6); + expect(handle).not.toBeNull(); + wm.dragColumnEdge(handle!, { x: area.x + Math.round(area.w * 0.3), y: 100 }); + expect(handle!.column.width).toBeCloseTo(0.3, 1); + }); +}); + +describe("workspaces", () => { + test("carry moves the focused window and follows it", () => { + const wm = new WindowManager(); + const a = wm.open("term"); + const b = wm.open("clock"); + expect(wm.carryWs(1)).toBe(true); + expect(wm.active).toBe(2); + expect(wm.workspace(2).focus).toBe(b); + expect(wm.workspace(1).focus).toBe(a); + expect(wm.count(wm.workspace(1))).toBe(1); + expect(wm.windows.get(b)?.ws).toBe(2); + expect(wm.stepWs(-1)).toBe(true); + expect(wm.stepWs(-1)).toBe(false); + expect(wm.moveToWs(a, 1)).toBe(false); + expect(wm.moveToWs(a, 5)).toBe(true); + expect(wm.active).toBe(1); + expect(wm.count()).toBe(0); + }); + + test("each workspace keeps its own layout", () => { + const wm = new WindowManager(); + wm.toggleLayout(); + wm.switchWs(2); + expect(wm.workspace().layout).toBe("dwindle"); + wm.switchWs(1); + expect(wm.workspace().layout).toBe("scrolling"); + }); +}); + +describe("chords", () => { + test("layers come from the shoulders", () => { + expect(layerOf(0)).toBe("plain"); + expect(layerOf(BTN.LTRIGGER)).toBe("super"); + expect(layerOf(BTN.RTRIGGER)).toBe("shift"); + expect(layerOf(BTN.LTRIGGER | BTN.RTRIGGER)).toBe("ws"); + }); + + test("every chord is unique per layer and every action has a label", () => { + const seen = new Set(); + for (const chord of CHORDS) { + const key = `${chord.layer}:${chord.button}`; + expect(seen.has(key)).toBe(false); + seen.add(key); + expect(labelFor(chord.action, "dwindle").length).toBeGreaterThan(0); + expect(labelFor(chord.action, "scrolling").length).toBeGreaterThan(0); + } + expect(chordFor("super", BTN.CROSS)?.action).toBe("close"); + expect(chordFor("plain", BTN.CROSS)).toBeUndefined(); + expect(keySheet("dwindle").length).toBe(4); + }); +}); + +describe("pocketsh", () => { + function fakeApi(): { api: ShellApi; log: string[] } { + const log: string[] = []; + const api: ShellApi = { + apps: () => ["term", "clock"], + windows: () => [{ id: 1, app: "term", title: "term", ws: 1, focused: true }], + workspace: () => 1, + layout: () => "dwindle", + wallpaper: () => "road", + uptimeSeconds: () => 3725, + now: () => new Date(2000, 0, 1, 9, 41, 0), + host: () => "3ds", + open: (app) => (app === "clock" ? 2 : null), + close: (id) => { + log.push(`close ${id ?? "focused"}`); + return true; + }, + focus: (id) => id === 1, + switchWs: (id) => id >= 1 && id <= 5, + setLayout: (layout) => { + log.push(`layout ${layout}`); + }, + nextWallpaper: () => "lake", + keys: () => [{ title: "L", rows: [{ keys: "L + B", what: "close" }] }], + }; + return { api, log }; + } + + test("commands drive the api and report", () => { + const { api, log } = fakeApi(); + expect(run("ls", api)).toEqual(["* #1 term"]); + expect(run("open clock", api)).toEqual(["opened clock as #2"]); + expect(run("open nope", api)[0]).toContain("no app"); + expect(run("close #1", api)).toEqual(["closed #1"]); + expect(run("layout scrolling", api)).toEqual(["workspace 1 is now scrolling"]); + expect(log).toEqual(["close 1", "layout scrolling"]); + expect(run("ws 9", api)[0]).toContain("1-5"); + expect(run("wall next", api)).toEqual(["wallpaper: lake"]); + expect(run("date", api)).toEqual(["Sat Jan 1 2000 09:41"]); + expect(run("uptime", api)).toEqual(["1h 02m 05s"]); + expect(run("echo hi there", api)).toEqual(["hi there"]); + expect(run("clear", api)).toEqual([CLEAR]); + expect(run("", api)).toEqual([]); + expect(run("frob", api)).toEqual(["pocketsh: frob: command not found"]); + expect(run("keys", api)).toEqual(["L", " L + B close"]); + expect(run("fetch", api).length).toBe(6); + }); + + test("completion and clock formatting", () => { + expect(complete("la")).toEqual(["layout"]); + expect(complete("")).toHaveLength(14); + expect(formatClock(new Date(2000, 0, 1, 0, 5), false)).toBe("00:05"); + expect(formatClock(new Date(2000, 0, 1, 13, 5), true)).toBe("01:05"); + expect(formatClock(new Date(2000, 0, 1, 0, 5), true)).toBe("12:05"); + expect(formatUptime(59)).toBe("0m 59s"); + }); +}); diff --git a/tests/renderer.test.ts b/tests/renderer.test.ts index 75972ffe4..1fea92b1d 100644 --- a/tests/renderer.test.ts +++ b/tests/renderer.test.ts @@ -326,6 +326,43 @@ describe(" reorder — DOM move semantics [R]", () => { dispose(); }); + test("an adjacent swap is a move too (insertBefore(node, node) is a no-op)", () => { + // Solid's reconcileArrays swaps [a, b] by inserting b before a.nextSibling + // — which is b itself. The DOM leaves the node in place; so must we, + // instead of unlinking b and then failing to find it as the anchor. + const [items, setItems] = createSignal(["a", "b", "c"]); + const byLabel = new Map(); + + const dispose = render( + () => + comp(For, { + get each() { + return items(); + }, + children: (item: string) => { + const el = createElement("view"); + byLabel.set(item, el); + return el; + }, + }), + root, + ); + + const [a, b, c] = [byLabel.get("a")!, byLabel.get("b")!, byLabel.get("c")!]; + host.clear(); + setItems(["b", "a", "c"]); + expect(childIds(root)).toEqual([b.id, a.id, c.id]); + expect(new Set(childIds(root)).size).toBe(3); + expect(host.of("createNode")).toEqual([]); + expect(host.of("destroyNode")).toEqual([]); + setItems(["b", "c", "a"]); + expect(childIds(root)).toEqual([b.id, c.id, a.id]); + runSweep(); + expect(host.of("destroyNode")).toEqual([]); + + dispose(); + }); + test("row removal detaches, then the frame-end sweep destroys", () => { const [items, setItems] = createSignal(["a", "b"]); const byLabel = new Map(); diff --git a/tools/test.ts b/tools/test.ts index ab6f5838e..bf3db1362 100644 --- a/tools/test.ts +++ b/tools/test.ts @@ -50,6 +50,7 @@ const SUITE: readonly Stage[] = [ "tests/3ds-profile.test.ts", "tests/3ds-runtime-state.test.ts", "tests/3ds-runtime-wire.test.ts", + "tests/pocket-shell-wm.test.ts", "tests/iphone2g-profile.test.ts", "tests/iphone4s-profile.test.ts", "tests/ipodtouch-profile.test.ts", @@ -162,6 +163,12 @@ const SUITE: readonly Stage[] = [ browser: true, tests: ["tests/launcher-sim.test.ts"], }, + { + name: "pocket-shell sim", + prep: [["bun", "tools/build.ts", "pocket-shell-main"]], + browser: true, + tests: ["tests/pocket-shell-sim.test.ts"], + }, ]; // --------------------------------------------------------------------------- From 7738aa43f6295e1fe2992b2c709ca179f4abb2d6 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 13:48:26 -0700 Subject: [PATCH 02/27] fix(3ds): give the JS stack room for ordinary UI depth, and open every applet in a golden MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Opening one `keys` window on hardware took the whole guest down: the runtime rolled back to last-good, which on a card that also holds Pocket Term is Pocket Term, so the shell appeared to turn into another app and stay there. The guest had hit `InternalError: stack overflow`. The 3DS spends its JS stack on JSX NESTING DEPTH, not node count — a QuickJS call frame is expensive and mounting descends the tree — and an applet sits under stage, windows, chrome and content before it draws anything. 192 KiB did not cover a windowed applet whose rows each carried a wrapper view with a Show inside. The sibling Pocket Term work already found 384 KiB; the main thread's stack is 1 MiB and the limit costs nothing until it is used. Two changes, because either alone leaves a trap: - hosts/3ds/src/qjs.c raises the budget to 384 KiB. This is the root cause, and it needs a reflash to reach a card already carrying the old binary. - Keys and Stats render each column as a flat pass of absolutely-positioned Text under the applet root — a row is an offset, not a node — which is what lets the fix reach an unflashed console over the dev wire. The README now states the budget so the next applet starts the right shape. The first tape never opened these applets, so three of the six reached a device for the first time in Evan's hands. `pocket-shell-applets` taps every dock cell and is in the default spec set; it reproduces the crash in ~90 s against the old budget, which is how this was diagnosed rather than guessed. An emulator with a generous stack would not have warned us, so the tape is the guard, not the sim. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-shell/README.md | 20 ++++++ apps/pocket-shell/applets.tsx | 61 +++++++++++++----- hosts/3ds/src/qjs.c | 8 ++- tests/e2e/azahar.ts | 2 +- tests/golden-specs.ts | 20 ++++++ .../3ds/pocket-shell-applets.40.auxiliary.png | Bin 0 -> 25968 bytes tests/goldens/3ds/pocket-shell-applets.40.png | Bin 0 -> 27306 bytes .../3ds/pocket-shell-applets.90.auxiliary.png | Bin 0 -> 26739 bytes tests/goldens/3ds/pocket-shell-applets.90.png | Bin 0 -> 26720 bytes 9 files changed, 92 insertions(+), 19 deletions(-) create mode 100644 tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell-applets.40.png create mode 100644 tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell-applets.90.png diff --git a/apps/pocket-shell/README.md b/apps/pocket-shell/README.md index a33ab3c1f..78b24f38e 100644 --- a/apps/pocket-shell/README.md +++ b/apps/pocket-shell/README.md @@ -159,6 +159,26 @@ accepts power-of-two images only, and the stage clips the padding under an overflow-hidden root. Three fit in 768 KB at 16 bits per pixel; `R + START` cycles them. +## The depth budget + +**The 3DS spends its JS stack on JSX nesting depth, not node count** +(`hosts/3ds/src/qjs.c`, `POCKETJS_JS_STACK_SIZE`). A QuickJS call frame is +expensive and mounting descends the tree, so an applet sits at the bottom of +a chain that already runs stage → windows → window chrome → content. Opening +one `keys` window whose rows each carried a wrapper view with a `Show` inside +overflowed the old 192 KiB budget mid-frame, and the runtime rolled the whole +guest back to last-good — which, on a card that also holds Pocket Term, looks +like the shell "turning into" another app. + +Two things came out of that. The host budget is now 384 KiB, which is what +the sibling Pocket Term work already found it needed. And **a row here is an +offset, not a node**: `Keys` and `Stats` render each column as its own flat +pass of absolutely-positioned `Text` under the applet root, three levels +deep, instead of a wrapper view per row. Prefer that shape for any new +applet, and remember an emulator with a generous stack will not warn you — +`tests/golden-specs.ts` has a `pocket-shell-applets` tape that opens every +applet from the dock precisely because the first tape never did. + ## Determinism The bar shows the RTC as `HH:MM`. `tests/e2e/azahar.ts` pins the emulator's diff --git a/apps/pocket-shell/applets.tsx b/apps/pocket-shell/applets.tsx index f14b18aee..e6c05b2e3 100644 --- a/apps/pocket-shell/applets.tsx +++ b/apps/pocket-shell/applets.tsx @@ -254,22 +254,42 @@ function Keys(props: AppletProps) { return all.slice(scroll, scroll + rows()); }; const keysW = () => (props.w() >= 200 ? 84 : 64); + // A row is an offset, not a node. The 3DS spends its JS stack on JSX + // NESTING DEPTH rather than node count (hosts/3ds/src/qjs.c + // POCKETJS_JS_STACK_SIZE), and a wrapper View with a Show inside it put + // this applet two levels past what mounting inside a window could afford — + // opening one keys window overflowed the stack and the runtime rolled the + // whole guest back. Each column is therefore its own flat pass of + // absolutely-positioned Text, three levels deep in total. return ( - {(line, i) => ( - - - {line().keys} - - - {line().keys} - - {line().what} - - - - )} + {(line, i) => + line().kind === "gap" ? null : ( + + {line().keys} + + ) + } + + + {(line, i) => + line().kind === "row" ? ( + + {line().what} + + ) : null + } ); @@ -293,14 +313,21 @@ function Stats(props: AppletProps) { ["layer", store.layer()], ]; }; + // Flat for the same reason as Keys: two passes of Text, no per-row wrapper. return ( {(row, i) => ( - - {row()[0]} - {row()[1]} - + + {row()[0]} + + )} + + + {(row, i) => ( + + {row()[1]} + )} diff --git a/hosts/3ds/src/qjs.c b/hosts/3ds/src/qjs.c index 069781ee8..b70286210 100644 --- a/hosts/3ds/src/qjs.c +++ b/hosts/3ds/src/qjs.c @@ -38,7 +38,13 @@ * host presents at the same rate, so the advertised simulation rate is 60. */ #define POCKETJS_SIMULATION_HZ 60 /* QuickJS recurses; the 3DS main thread's stack is set in main.c. */ -#define POCKETJS_JS_STACK_SIZE (192 * 1024) +/* A QuickJS call frame is expensive and mounting a UI descends the tree, so + * this budget is spent on JSX NESTING DEPTH rather than node count. 192 KiB + * was not enough for an ordinary windowed app: opening one Pocket Shell + * applet whose rows carried a wrapper view overflowed it mid-frame, and the + * runtime rolled the whole guest back to last-good. The main thread's own + * stack is 1 MiB (main.c) and this limit costs nothing until it is used. */ +#define POCKETJS_JS_STACK_SIZE (384 * 1024) typedef enum { HostCreateNode, diff --git a/tests/e2e/azahar.ts b/tests/e2e/azahar.ts index 098edec15..0d349d4d6 100644 --- a/tests/e2e/azahar.ts +++ b/tests/e2e/azahar.ts @@ -84,7 +84,7 @@ const graphicsApi = process.env.E2E_AZAHAR_GRAPHICS_API ?? "0"; // The 3DS top screen is 400x240; the stock 480x272 demo corpus does not fit it // on either axis and the resolver has no scaling fallback, so this driver runs // only the specs whose app declares the 400x240 native viewport. -const DEFAULT_SPEC_NAMES = ["3ds-demo", "pocket-shell"]; +const DEFAULT_SPEC_NAMES = ["3ds-demo", "pocket-shell", "pocket-shell-applets"]; // --------------------------------------------------------------------------- // Preflight diff --git a/tests/golden-specs.ts b/tests/golden-specs.ts index c6e26901b..e382de881 100644 --- a/tests/golden-specs.ts +++ b/tests/golden-specs.ts @@ -327,6 +327,26 @@ export const THREE_DS_GOLDEN_SPECS: GoldenSpec[] = [ return []; }, }, + + { + name: "pocket-shell-applets", + app: "pocket-shell", + frames: 95, + capture: [40, 90], + // Open every applet from the dock, one tap per cell. The first tape only + // ever opened term, notes and about, so three applets reached a device + // for the first time here — and mounting one of them is what overflowed + // the guest's JS stack on hardware. Dock cells are 48 px wide from x=16 + // in the bottom 40 px of the touch screen. + touch: (frame) => { + const taps = [6, 16, 26, 36, 46, 56]; + const index = taps.indexOf(frame); + if (index >= 0) return [{ id: 0, x: 40 + index * 48, y: 222 }]; + const held = taps.indexOf(frame - 1); + if (held >= 0) return [{ id: 0, x: 40 + held * 48, y: 222 }]; + return []; + }, + }, ]; export function encodeThresholdInput(spec: GoldenSpec): string { diff --git a/tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png b/tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..56c5327e214524a085f8fa4444f03a492030e3a7 GIT binary patch literal 25968 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


=#3na;a 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 V^L+=Y;7KaL%^NxzMQXNT{{`Dg(TV^7 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell-applets.40.png b/tests/goldens/3ds/pocket-shell-applets.40.png new file mode 100644 index 0000000000000000000000000000000000000000..467dbf82faf01b4553e1cbfeeb7b325efda6f3d2 GIT binary patch literal 27306 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 JWt#S3{|}H^>J$I~ literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png b/tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..b182842fdb26d569b14efa9aaeef05e3b033c1c8 GIT binary patch literal 26739 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%0D4*G|fge5*QP(wH z>kkOw8XXhLJ1w)@DxBIk!FcFTT<&wmp=r7TyKFS)buq@k2j?!B?@T|egt;pTQ%nd@ Nex|NaC1(-(e*nxCX=MNa literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell-applets.90.png b/tests/goldens/3ds/pocket-shell-applets.90.png new file mode 100644 index 0000000000000000000000000000000000000000..387743b919d2aa7ae4f0f056fc68778bb3402e80 GIT binary patch literal 26720 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 Date: Tue, 1 Sep 2026 14:46:05 -0700 Subject: [PATCH 03/27] fix(3ds): derive the clock from the epoch, draw the icons, answer a press MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four things Evan found on the console, three of them real defects. **The clock flickered.** Not a rendering fault: two wrong times alternating frame to frame. The RTC's epoch is sound — Date.now() is monotonic and correct on hardware — but the console's breakdown of it is not, and getHours() intermittently disagreed with the epoch by whole hours, applying the timezone on some reads and not others. Measured over the dev wire, the big time text changed by ~1600 px between consecutive frames; it now changes by zero. Nothing calls a Date breakdown method any more: civilFromEpoch derives the civil date and time by arithmetic, tested across leap years, the 1900/2100 century rules and the exact reading the device produced. The zone is sampled once at boot and kept only if it looks like a real one, so a bad read cannot be frozen in — and because this console reports none, pocketsh gained `tz +8` to state the offset it could not. This also explains the one golden frame that read 06:47 among neighbours reading 00:00. It reproduced byte-exactly, so I let it stand; it was the same bug, visible and dismissed. A capture that reproduces is not thereby correct. **The term icon drew a tofu box** — `❯` is not in the baked face, so a Text rendered the placeholder. It is pixels now. Rotation was the obvious alternative and would have been worse: `-rotate-45` is not a utility this compiler accepts, and an unknown token makes the whole class literal unknown, which paints nothing at all. **The keys icon read as a row of dots.** Two flex rows in a container with no `flex-col` — the default direction here is row, so they sat side by side. It is a keyboard now, placed absolutely. **Painted buttons say nothing when pressed.** A physical button reports itself; on a resistive panel with no hover, nothing else tells you the panel heard you. The strip pills, layout badge, workspace tabs, gutter buttons, dock cells, chord rows and launcher cards now darken or invert under the finger and hold it a few frames after release, so a quick tap is still seen. A pan or a long press withdraws it, because those are not taps. The applets tape captures a frame mid-tap to keep it honest. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-shell/README.md | 21 +- apps/pocket-shell/applets.tsx | 4 +- apps/pocket-shell/deck.tsx | 182 +++++++++++++++--- apps/pocket-shell/shell.ts | 118 +++++++++++- apps/pocket-shell/store.ts | 30 ++- tests/golden-specs.ts | 4 +- .../3ds/pocket-shell-applets.40.auxiliary.png | Bin 25968 -> 26246 bytes tests/goldens/3ds/pocket-shell-applets.40.png | Bin 27306 -> 27108 bytes .../3ds/pocket-shell-applets.7.auxiliary.png | Bin 0 -> 33600 bytes tests/goldens/3ds/pocket-shell-applets.7.png | Bin 0 -> 63310 bytes .../3ds/pocket-shell-applets.90.auxiliary.png | Bin 26739 -> 26745 bytes tests/goldens/3ds/pocket-shell-applets.90.png | Bin 26720 -> 26511 bytes .../3ds/pocket-shell.112.auxiliary.png | Bin 22884 -> 22888 bytes .../3ds/pocket-shell.126.auxiliary.png | Bin 8919 -> 8927 bytes .../3ds/pocket-shell.160.auxiliary.png | Bin 22817 -> 22822 bytes .../3ds/pocket-shell.176.auxiliary.png | Bin 11395 -> 11415 bytes .../3ds/pocket-shell.214.auxiliary.png | Bin 24451 -> 24456 bytes .../3ds/pocket-shell.240.auxiliary.png | Bin 23607 -> 23606 bytes .../goldens/3ds/pocket-shell.3.auxiliary.png | Bin 33433 -> 33443 bytes .../goldens/3ds/pocket-shell.48.auxiliary.png | Bin 24546 -> 24549 bytes .../goldens/3ds/pocket-shell.60.auxiliary.png | Bin 10139 -> 10146 bytes .../goldens/3ds/pocket-shell.84.auxiliary.png | Bin 25326 -> 25331 bytes tests/pocket-shell-wm.test.ts | 73 ++++++- 23 files changed, 375 insertions(+), 57 deletions(-) create mode 100644 tests/goldens/3ds/pocket-shell-applets.7.auxiliary.png create mode 100644 tests/goldens/3ds/pocket-shell-applets.7.png diff --git a/apps/pocket-shell/README.md b/apps/pocket-shell/README.md index 78b24f38e..8c5449e61 100644 --- a/apps/pocket-shell/README.md +++ b/apps/pocket-shell/README.md @@ -130,7 +130,8 @@ Five workspaces exist from boot; nothing is persisted across launches (the - **term** — pocketsh, the shell's own `hyprctl`: `ls`, `open `, `close [id]`, `focus `, `ws [1-5]`, `layout [dwindle|scrolling]`, - `wall [next]`, `keys`, `fetch`, `date`, `uptime`, `echo`, `clear`. Plain + `wall [next]`, `tz [+8]`, `keys`, `fetch`, `date`, `uptime`, `echo`, + `clear`. Plain buttons: A enter, B backspace, X tab-complete, Y space, ↑↓ history, START clear; the circle pad scrolls. 12 px JetBrains Mono on a 7 px cell. - **clock** — the RTC at 36 px, the date, a seconds bar; A toggles 12 h. @@ -179,6 +180,24 @@ applet, and remember an emulator with a generous stack will not warn you — `tests/golden-specs.ts` has a `pocket-shell-applets` tape that opens every applet from the dock precisely because the first tape never did. +## The clock + +**The RTC's epoch is sound; the console's breakdown of it is not.** On +hardware `Date.now()` is monotonic and correct, but `getHours()` +intermittently disagreed with that epoch by whole hours — applying the +timezone on some reads and not others. Two adjacent frames rendered two +different times, which is what "the clock flickers" turned out to be: not a +rendering fault but two wrong readings alternating. Measured on the device, +the big time text changed by ~1600 px between consecutive frames; after the +fix it changes by zero. + +So nothing here calls a `Date` breakdown method. `civilFromEpoch` in +`shell.ts` derives the whole civil date and time from the epoch by +arithmetic, and the shell reads only that. The zone is sampled once at boot +and accepted only if it looks like a real one (a whole quarter-hour within +±14 h); a console that reports nothing usable shows UTC, and **`tz +8` in +pocketsh states the offset the console could not**. + ## Determinism The bar shows the RTC as `HH:MM`. `tests/e2e/azahar.ts` pins the emulator's diff --git a/apps/pocket-shell/applets.tsx b/apps/pocket-shell/applets.tsx index e6c05b2e3..1ef69f0bb 100644 --- a/apps/pocket-shell/applets.tsx +++ b/apps/pocket-shell/applets.tsx @@ -143,8 +143,8 @@ function Clock(props: AppletProps) { return s && s.kind === "clock" ? s : null; }; const time = () => formatClock(props.store.now(), state()?.hour12 ?? false); - const suffix = () => (state()?.hour12 ? (props.store.now().getHours() < 12 ? "am" : "pm") : ""); - const seconds = () => props.store.now().getSeconds(); + const suffix = () => (state()?.hour12 ? (props.store.now().hour < 12 ? "am" : "pm") : ""); + const seconds = () => props.store.now().second; const big = () => props.w() >= 200 && props.h() >= 96; const mid = () => !big() && props.h() >= 56 && props.w() >= 110; return ( diff --git a/apps/pocket-shell/deck.tsx b/apps/pocket-shell/deck.tsx index c5586e2a7..da8486b11 100644 --- a/apps/pocket-shell/deck.tsx +++ b/apps/pocket-shell/deck.tsx @@ -13,9 +13,10 @@ // drag the gap between two windows to resize the split, and in the // scrolling layout drag the background to pan the strip. -import { For, Index, Show } from "solid-js"; +import { createSignal, For, Index, Show } from "solid-js"; import { Image, Text, View } from "@pocketjs/framework/components"; import { createGesture } from "@pocketjs/framework/gesture"; +import { onFrame } from "@pocketjs/framework/lifecycle"; import { BUTTON_GLYPH, chordFor, @@ -95,9 +96,19 @@ type BodyMode = "launcher" | "chords" | "keyboard" | "map"; function AppIcon(props: { app: AppId }) { switch (props.app) { case "term": + // The chevron is drawn as pixels, not typed and not rotated. `❯` + // (U+276F) is not in the baked face, so a Text rendered the placeholder + // box; and `-rotate-45` is not a utility this compiler accepts (only + // non-negative numbers parse), which would have made the whole class + // literal unknown and left the node unstyled. return ( - - {"❯_"} + + + + + + + ); case "clock": @@ -118,18 +129,19 @@ function AppIcon(props: { app: AppId }) { ); case "keys": + // A keyboard: two rows of caps over a spacebar. The old icon stacked + // two flex rows in a container with no `flex-col` — the default + // direction here is ROW, so they sat side by side and read as one line + // of dots. Absolute placement says what it means. return ( - - - - - - - - - - - + + + + + + + + ); case "stats": @@ -149,9 +161,42 @@ function AppIcon(props: { app: AppId }) { } } +/** A touch target's transient pressed look. + * + * A physical button reports its own press; a painted one has to say so, and + * on a resistive panel with no hover there is nothing else to tell you the + * panel heard you. Every target here therefore darkens or inverts while the + * finger is on it, and holds that for a few frames after release so a quick + * tap is still visible. Ids are `kind:key` strings so one signal covers the + * strip, the gutter, the dock, the chord rows and the launcher. */ +function createPressTracker(): { + is: (id: string) => boolean; + down: (id: string | null) => void; + release: () => void; +} { + const [pressed, setPressed] = createSignal(null); + let linger = 0; + onFrame(() => { + if (linger > 0 && --linger === 0) setPressed(null); + }); + return { + is: (id) => pressed() === id, + down: (id) => { + linger = 0; + setPressed(id); + }, + release: () => { + if (pressed() !== null) linger = PRESS_LINGER_FRAMES; + }, + }; +} + +const PRESS_LINGER_FRAMES = 5; + export function Deck(props: { store: ShellStore }) { const store = props.store; const keyPress = createKeyPress(); + const press = createPressTracker(); const bodyMode = (): BodyMode => { if (store.launcherOpen()) return "launcher"; @@ -169,11 +214,51 @@ export function Deck(props: { store: ShellStore }) { let columnHandle: ReturnType = null; let panning = false; + /** Which painted target a point is on, for the pressed look. */ + const targetAt = (x: number, y: number): string | null => { + if (y < STRIP_H) { + if (x < PILL_W) return "pill:L"; + if (x >= R_PILL_X) return "pill:R"; + if (x >= BADGE_X && x < BADGE_X + BADGE_W) return "badge:layout"; + const tab = tabAt(x); + return tab === null ? null : `tab:${tab}`; + } + if (y >= DOCK_Y) { + const index = Math.floor((x - DOCK_X) / DOCK_CELL); + return x >= DOCK_X && index >= 0 && index < APPS.length ? `dock:${index}` : null; + } + switch (bodyMode()) { + case "launcher": { + const col = Math.floor((x - LAUNCH_X) / LAUNCH_W); + const row = Math.floor((y - LAUNCH_Y) / LAUNCH_H); + if (x < LAUNCH_X || col < 0 || col >= LAUNCH_COLS || row < 0 || row > 1) return null; + const index = row * LAUNCH_COLS + col; + return index < APPS.length ? `launch:${index}` : null; + } + case "chords": { + const row = Math.floor((y - CHORD_ROWS_Y) / CHORD_ROW_H); + if (row < 0 || row > 3) return null; + return chordActionAt(x, y) === null ? null : `chord:${x < CHORD_COL_SPLIT ? "l" : "r"}${row}`; + } + case "map": { + for (const button of GUTTER_BUTTONS) { + if (within(x, y, { x: button.x, y: button.y, w: GUTTER_BTN_W, h: GUTTER_BTN_H })) { + return `gutter:${button.act}`; + } + } + return null; + } + default: + return null; + } + }; + const reset = () => { pending = null; splitHandle = null; columnHandle = null; panning = false; + press.release(); store.setDrag(null); store.setClosing(null); }; @@ -297,6 +382,7 @@ export function Deck(props: { store: ShellStore }) { longPressSeconds: CLOSE_HOLD_SECONDS, onDown: (c) => { pending = null; + press.down(targetAt(c.x, c.y)); if (bodyMode() === "map" && within(c.x, c.y, MAP_RECT)) { const id = store.wm.windowAt(toStage(c.x, c.y)); if (id !== null) pending = { id }; @@ -304,11 +390,13 @@ export function Deck(props: { store: ShellStore }) { }, onTap: (c) => { pending = null; + press.release(); if (c.y < STRIP_H) tapStrip(c.x); else if (c.y >= DOCK_Y) tapDock(c.x); else tapBody(c.x, c.y); }, onLongPress: (c) => { + press.down(null); if (pending && bodyMode() === "map") { store.setClosing({ id: pending.id, over: false }); store.say(""); @@ -317,6 +405,7 @@ export function Deck(props: { store: ShellStore }) { void c; }, onPanStart: (c) => { + press.down(null); if (store.closing() || bodyMode() !== "map") return; const sp = toStage(c.x, c.y); if (pending) { @@ -430,7 +519,9 @@ export function Deck(props: { store: ShellStore }) { class={ lHeld() ? "absolute left-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#7aa2f7] items-center justify-center" - : "absolute left-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#24283b] items-center justify-center" + : press.is("pill:L") + ? "absolute left-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#3d4c63] items-center justify-center" + : "absolute left-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#24283b] items-center justify-center" } > L @@ -441,9 +532,11 @@ export function Deck(props: { store: ShellStore }) { class={ store.drag()?.overWs === i + 1 ? "absolute top-0 h-[24] items-center justify-center bg-[#9ece6a33]" - : store.active() === i + 1 - ? "absolute top-0 h-[24] items-center justify-center bg-[#1a1b26]" - : "absolute top-0 h-[24] items-center justify-center" + : press.is(`tab:${i + 1}`) + ? "absolute top-0 h-[24] items-center justify-center bg-[#3d4c63]" + : store.active() === i + 1 + ? "absolute top-0 h-[24] items-center justify-center bg-[#1a1b26]" + : "absolute top-0 h-[24] items-center justify-center" } style={{ insetL: TABS_X + i * TAB_W, width: TAB_W }} > @@ -472,7 +565,11 @@ export function Deck(props: { store: ShellStore }) { )} {store.layoutKind()} @@ -481,7 +578,9 @@ export function Deck(props: { store: ShellStore }) { class={ rHeld() ? "absolute right-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#7aa2f7] items-center justify-center" - : "absolute right-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#24283b] items-center justify-center" + : press.is("pill:R") + ? "absolute right-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#3d4c63] items-center justify-center" + : "absolute right-[2] top-[3] w-[24] h-[18] rounded-[4] bg-[#24283b] items-center justify-center" } > R @@ -553,9 +652,11 @@ export function Deck(props: { store: ShellStore }) { class={ button.act === "kbd" && !isTextApp(store.focusedApp()) ? "absolute w-[32] h-[22] rounded-[4] bg-[#1a1b26] items-center justify-center" - : button.act === "kbd" && store.kbOpen() + : press.is(`gutter:${button.act}`) ? "absolute w-[32] h-[22] rounded-[4] bg-[#7aa2f7] items-center justify-center" - : "absolute w-[32] h-[22] rounded-[4] bg-[#24283b] items-center justify-center" + : button.act === "kbd" && store.kbOpen() + ? "absolute w-[32] h-[22] rounded-[4] bg-[#7aa2f7] items-center justify-center" + : "absolute w-[32] h-[22] rounded-[4] bg-[#24283b] items-center justify-center" } style={{ insetL: button.x, insetT: button.y }} > @@ -563,7 +664,7 @@ export function Deck(props: { store: ShellStore }) { class={ button.act === "kbd" && !isTextApp(store.focusedApp()) ? "text-xs text-[#414868]" - : button.act === "kbd" && store.kbOpen() + : press.is(`gutter:${button.act}`) || (button.act === "kbd" && store.kbOpen()) ? "text-xs text-[#1a1b26] font-bold" : "text-xs text-[#a9b1d6]" } @@ -608,7 +709,14 @@ export function Deck(props: { store: ShellStore }) { {(row, i) => ( - + + @@ -630,7 +738,14 @@ export function Deck(props: { store: ShellStore }) { {(row, i) => ( - + {row().badge} @@ -652,9 +767,11 @@ export function Deck(props: { store: ShellStore }) { {(app, i) => ( + diff --git a/apps/pocket-shell/shell.ts b/apps/pocket-shell/shell.ts index 395d35e51..0dd2e2ad7 100644 --- a/apps/pocket-shell/shell.ts +++ b/apps/pocket-shell/shell.ts @@ -21,7 +21,7 @@ export interface ShellApi { layout(): LayoutKind; wallpaper(): string; uptimeSeconds(): number; - now(): Date; + now(): CivilTime; host(): string; open(app: string): number | null; close(id?: number): boolean; @@ -29,6 +29,8 @@ export interface ShellApi { switchWs(id: number): boolean; setLayout(layout: LayoutKind): void; nextWallpaper(): string; + timezone(): number; + setTimezone(minutes: number): void; keys(): { title: string; rows: { keys: string; what: string }[] }[]; } @@ -41,6 +43,7 @@ export const COMMANDS = [ "ws", "layout", "wall", + "tz", "keys", "fetch", "date", @@ -60,17 +63,104 @@ export const CLEAR = "\u0000clear"; const pad2 = (n: number): string => String(n).padStart(2, "0"); -export function formatClock(date: Date, hour12 = false): string { - const h = date.getHours(); - const shown = hour12 ? h % 12 || 12 : h; - return `${pad2(shown)}:${pad2(date.getMinutes())}`; -} - const DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; -export function formatDate(date: Date): string { - return `${DAYS[date.getDay()]} ${MONTHS[date.getMonth()]} ${date.getDate()} ${date.getFullYear()}`; +export interface CivilTime { + year: number; + /** 1-12. */ + month: number; + /** 1-31. */ + day: number; + /** 0 = Sunday. */ + weekday: number; + hour: number; + minute: number; + second: number; +} + +/** + * Civil time from an epoch, by arithmetic. + * + * The 3DS RTC's epoch is reliable — `Date.now()` is monotonic and correct on + * hardware — but QuickJS's BREAKDOWN of it is not: `getHours()` intermittently + * disagreed with the epoch by whole hours, applying the timezone on some reads + * and not others. Two adjacent frames therefore rendered two different times + * and the clock appeared to flicker. Everything this app displays is derived + * here instead, so a wrong reading cannot reach the screen. + * + * Days-to-civil is Howard Hinnant's shift-to-March algorithm, which needs no + * lookup table and no leap-year special cases. + */ +export function civilFromEpoch(epochMs: number, offsetMinutes = 0): CivilTime { + const total = Math.floor(epochMs / 1000) + offsetMinutes * 60; + let days = Math.floor(total / 86400); + const secondOfDay = total - days * 86400; + const weekday = (((days + 4) % 7) + 7) % 7; // 1970-01-01 was a Thursday + days += 719468; // shift the epoch to 0000-03-01 + const era = Math.floor(days / 146097); + const dayOfEra = days - era * 146097; + const yearOfEra = Math.floor( + (dayOfEra - Math.floor(dayOfEra / 1460) + Math.floor(dayOfEra / 36524) - Math.floor(dayOfEra / 146096)) / 365, + ); + const dayOfYear = dayOfEra - (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100)); + const marchMonth = Math.floor((5 * dayOfYear + 2) / 153); + const day = dayOfYear - Math.floor((153 * marchMonth + 2) / 5) + 1; + const month = marchMonth < 10 ? marchMonth + 3 : marchMonth - 9; + const year = yearOfEra + era * 400 + (month <= 2 ? 1 : 0); + return { + year, + month, + day, + weekday, + hour: Math.floor(secondOfDay / 3600), + minute: Math.floor((secondOfDay % 3600) / 60), + second: secondOfDay % 60, + }; +} + +/** + * The device's UTC offset, read ONCE and sanity-checked. + * + * A single bad read would otherwise be frozen in, so the value is accepted + * only if it looks like a real zone: a whole quarter-hour within ±14 h. + * Anything else means the platform's breakdown is not to be trusted at all + * and the shell shows UTC. + */ +export function detectOffsetMinutes(epochMs: number, local: Date): number { + const utc = civilFromEpoch(epochMs, 0); + let delta = local.getHours() * 60 + local.getMinutes() - (utc.hour * 60 + utc.minute); + if (delta > 720) delta -= 1440; + if (delta < -720) delta += 1440; + if (Math.abs(delta) > 14 * 60 || delta % 15 !== 0) return 0; + return delta; +} + +/** "+08:00" / "-05:30" / "" for UTC itself. */ +export function formatOffset(minutes: number): string { + if (minutes === 0) return ""; + const sign = minutes < 0 ? "-" : "+"; + const abs = Math.abs(minutes); + return `${sign}${pad2(Math.floor(abs / 60))}:${pad2(abs % 60)}`; +} + +/** `+8`, `8`, `-5:30`, `+05:45`, `0` — a whole quarter-hour within ±14 h. */ +export function parseOffset(text: string): number | null { + const m = /^([+-]?)(\d{1,2})(?::(\d{2}))?$/.exec(text.trim()); + if (!m) return null; + const minutes = Number(m[2]) * 60 + Number(m[3] ?? 0); + const signed = m[1] === "-" ? -minutes : minutes; + if (Math.abs(signed) > 14 * 60 || signed % 15 !== 0) return null; + return signed; +} + +export function formatClock(time: CivilTime, hour12 = false): string { + const shown = hour12 ? time.hour % 12 || 12 : time.hour; + return `${pad2(shown)}:${pad2(time.minute)}`; +} + +export function formatDate(time: CivilTime): string { + return `${DAYS[time.weekday]} ${MONTHS[time.month - 1]} ${time.day} ${time.year}`; } export function formatUptime(seconds: number): string { @@ -97,6 +187,7 @@ export function run(line: string, api: ShellApi): string[] { " ws [1-5] show or switch workspace", " layout [name] dwindle | scrolling", " wall [next] wallpaper", + " tz [+8|-5:30] clock offset from UTC", " keys the chord table", " fetch date uptime echo clear", ]; @@ -135,6 +226,15 @@ export function run(line: string, api: ShellApi): string[] { api.setLayout(args[0]); return [`workspace ${api.workspace()} is now ${args[0]}`]; } + case "tz": { + // The console's own breakdown of the epoch is not trustworthy (see + // civilFromEpoch), so the offset is the operator's to state. + if (args[0] === undefined) return [`UTC${formatOffset(api.timezone())}`]; + const minutes = parseOffset(args[0]); + if (minutes === null) return ["tz: try +8, -5:30, or 0"]; + api.setTimezone(minutes); + return [`clock is UTC${formatOffset(minutes)}`]; + } case "wall": if (args[0] === "next") return [`wallpaper: ${api.nextWallpaper()}`]; return [`wallpaper: ${api.wallpaper()} (wall next)`]; diff --git a/apps/pocket-shell/store.ts b/apps/pocket-shell/store.ts index aaa8bfdb5..65e431169 100644 --- a/apps/pocket-shell/store.ts +++ b/apps/pocket-shell/store.ts @@ -12,7 +12,7 @@ import { BTN } from "@pocketjs/framework/input"; import { analogX, analogY, onFrame } from "@pocketjs/framework/lifecycle"; import { getOps } from "@pocketjs/framework"; import { chordsOf, keySheet, layerOf, type ActionId, type Layer } from "./chords.ts"; -import { CLEAR, complete, run as runShell, type ShellApi } from "./shell.ts"; +import { CLEAR, civilFromEpoch, complete, detectOffsetMinutes, run as runShell, type CivilTime, type ShellApi } from "./shell.ts"; import { WindowManager, WORKSPACES, type Placement, type Rect } from "./wm.ts"; export type AppId = "term" | "clock" | "notes" | "keys" | "stats" | "about"; @@ -137,10 +137,22 @@ export function createShellStore() { const anims = new Map(); let ghosts: Ghost[] = []; + // The RTC's epoch is trustworthy; QuickJS's breakdown of it on this device + // is not (see civilFromEpoch). Read the zone once, then do the arithmetic. + const detectedOffset = (() => { + try { + const ms = Date.now(); + return detectOffsetMinutes(ms, new Date(ms)); + } catch { + return 0; + } + })(); + + const [offsetMinutes, setOffsetMinutes] = createSignal(detectedOffset); const [rev, setRev] = createSignal(0); const bump = () => setRev((r) => r + 1); const [frame, setFrame] = createSignal(0); - const [second, setSecond] = createSignal(0); + const [epochSecond, setEpochSecond] = createSignal(0); const [layer, setLayer] = createSignal("plain"); const [latchL, setLatchL] = createSignal(false); const [latchR, setLatchR] = createSignal(false); @@ -206,10 +218,7 @@ export function createShellStore() { return wm.barVisible; }); const kbVisible = createMemo(() => kbOpen() && isTextApp(focusedApp())); - const now = createMemo(() => { - second(); - return new Date(); - }); + const now = createMemo(() => civilFromEpoch(epochSecond() * 1000, offsetMinutes())); const placementOf = (id: number): Placement | undefined => placements().find((p) => p.id === id); const windowOf = (id: number) => wm.windows.get(id); @@ -422,7 +431,7 @@ export function createShellStore() { layout: () => wm.workspace().layout, wallpaper: () => wallpaper(), uptimeSeconds, - now: () => new Date(), + now: () => civilFromEpoch(Date.now(), offsetMinutes()), host: () => getOps().__host ?? "3ds", open: (app) => (APPS.includes(app as AppId) ? open(app as AppId) : null), close: (id) => close(id ?? wm.workspace().focus), @@ -440,6 +449,8 @@ export function createShellStore() { if (wm.workspace().layout !== kind) toggleLayout(); }, nextWallpaper, + timezone: () => offsetMinutes(), + setTimezone: (minutes) => setOffsetMinutes(minutes), keys: () => keySheet(wm.workspace().layout), }; @@ -576,7 +587,7 @@ export function createShellStore() { const nowSecond = Math.floor(Date.now() / 1000); if (nowSecond !== lastSecond) { lastSecond = nowSecond; - setSecond(nowSecond); + setEpochSecond(nowSecond); const stamp = Date.now(); if (fpsStamp > 0) setFps(Math.round((fpsFrames * 1000) / Math.max(1, stamp - fpsStamp))); fpsStamp = stamp; @@ -683,7 +694,7 @@ export function createShellStore() { rev, frame, frameCount, - second, + epochSecond, now, fps, uptimeSeconds, @@ -704,6 +715,7 @@ export function createShellStore() { kbLayer, setKbLayer, wallpaper, + offsetMinutes, toast, say, drag, diff --git a/tests/golden-specs.ts b/tests/golden-specs.ts index e382de881..d7b3cc294 100644 --- a/tests/golden-specs.ts +++ b/tests/golden-specs.ts @@ -332,7 +332,9 @@ export const THREE_DS_GOLDEN_SPECS: GoldenSpec[] = [ name: "pocket-shell-applets", app: "pocket-shell", frames: 95, - capture: [40, 90], + // Frame 7 lands inside the first dock tap, so it captures the pressed + // look a painted button needs on a panel with no hover. + capture: [7, 40, 90], // Open every applet from the dock, one tap per cell. The first tape only // ever opened term, notes and about, so three applets reached a device // for the first time here — and mounting one of them is what overflowed diff --git a/tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png b/tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png index 56c5327e214524a085f8fa4444f03a492030e3a7..c73b32bc6693a61c4210e298e6c4d9bf6e031033 100644 GIT binary patch literal 26246 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 Iignn30W8>Uvj6}9 literal 25968 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
=#3na;a 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
MNjkliY<;!4eOt8`PF&o6h>S%?c?h_uW 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 V^L+=Y;7KaL%^NxzMQXNT{{`Dg(TV^7 diff --git a/tests/goldens/3ds/pocket-shell-applets.40.png b/tests/goldens/3ds/pocket-shell-applets.40.png index 467dbf82faf01b4553e1cbfeeb7b325efda6f3d2..877a6b6f9f3a162300dbb519e217310216b4a8cb 100644 GIT binary patch literal 27108 zcmX`Sby$?$_dR?ML&q@EISfdHfJjRWAt~M6f|PVf4Gl_%BHbk|Ee(>=64IR#f`IgI zd_Ldzy{@T$&YZK)*=Oyw*WP!Onu;6&E)^~S00av1G8zB?ibwrE!Nx>=a*6UX0Kn_d z3Nn&f-k@J?#_lxJ^~awh+%A{}A%+SWGRRJ%57vVp9RGV&9KX?*tz|5x{uvWbW9|{s z83WdH0g9FJKXe5#KZie1BZo_lI0vH-u1mJC@v?cS}&E; zrb5=+8}tHm027CdSI9~&Ct+ZAZ&9zcp-^z3i*oV%TEgcuEO6W+rM3NyO8r#}r$gr{ zGKZ8#Sx=9_tTocx2V=&XJaV)9#u-E5^+~)Q%Ic675-yWg^Q_&7wYA5C^Db`%iZBDK;JI4T*kTSu4fQ~XK|IjlfGN$ z?-5qVgXrCzQea`&?0w4mN?;cI>@hEY{NKyK{o0l0wVYek=G%_nu3OhjMd8~GD`OoV zZ+Z;B7QlbAe-Q<(JMx@i#DB+c_H(@0Y4II1FRM5_^QYBLxv}LuWehC(LaF2Y>!(|) z=Z}ktzFOlSKdC){2>+jZs<~gVGz^r!rn9i!e|bQv;g#`Q2=jPudlL(; zT&;flAWO|wVQmXAP;*dGO6|=z8Ip97!j~e(CT#x@ozwaBkt3kE$k{G>&>aoXyRGb4 znfrMpec`194AYe2idWFm-;nmuF{aup0Rm@j%(YOJr7v{{UfWU>9A{rs`Z8NA{GE`S zQ)>3ze>$%<-Mb@9^KL4r>-E&}`;k#iU*FV^jgGH3JZJ>{c1?7h2MnA593mJRe8#bx zbfu;uiQw<&jvH06G4=jFngx-C{?}iv1DoqQ^8GVrsXYm5t6TjIKdQGc=K8hV30V3W zW>z_>V7`5t6`t?prq?)B+?WUvegE4zBgUC)=sD$0VFV6PUCj1<6~IPERJYn+M!Mh+ z4dmF`i7Og5cxt}5;u6Pnd^G%oR`XX(oyU@N1+8XXvupOmJ^SooPEiq0NPa*+=-y$` zEtQ=X2tE`#UM}KsWL>eg8=JY<#*II>{(5EM3&}n^4ASe-XC~a#xm?6T9|I#gi(8lM z#t-%hYgfYx!1DHEVn$@S92f3GUe*~K@gOws){`L#4MX2K)-%0zU3`+x^&qV5LYu5W z)vs^bh>dh^A;5<2n_Cv`#rCB0)51W@lT{%a@ao^70ax|*q|I8JwFcGptlz&QetNHX zJv_ri^!3v{Z5SNxj$bN$^Hq1{V)XpsqxfzA!cPCNyy_|w|Am{_AYRYmPqzzbnI?iX>TfPN^RN)|lq7`gJx>ifB8`k)cS zxa9RWD1G+)N!R&TAA?V5jMkkaS^o3R355>(^BQK=Z`>l}N46oDA+5B1RIG&gRa1bb%&c6h3!o6ad;Hclwke!I3IN zX>;J|wp7>MbLHL9w|qc#YgDW$?C5h7EBW}AG1LQ);ha5g4Vk6)WNm@V&Zv)4!)rPFmhj*zmWWjk0QT~2 zBiGlrk$8PZ7XmU>Y%J1TiNEp$N!z8%dlsBe5du1gf{qLImps!BheJc)pH;rpXb^^% z7(mmVeOFC4UP6z4EwuaX{-;LaTT(s>GBAX~St2XKaD8F;>}0=+tKCq(6U_%gaePMp zVC4|P0&hh>xOW{6u-`b2AHuV=O_uNr77^jRdGqYp>vp!Cq9;S?arWnfAu^KKem#Qb zkCGQ?$^s_?n4X`ysv8QZj-5G; z7Q=-75L*mF*A!FA>x*~4~g4K1Yl;xAl2x1L>D`2#KF!5p;>yyiyXMJ#((1N7Wr+x z8J%ukghc#~2n|{=vFBc?_8q^xXA-=X4DLPry0l6k(l_^Ew6i!wZizuG@!MPSPn|FE zEW6@+o+E97ct}r)@-oeR-3~%0w&StiIA-Rs(-H-Mf*b1HP$8i*;O;Ac$$`jesaV2K zSOyb1`!G&cjK?1riiI-yGN_nWxIZ5Dj}~gQTjEV<`cO-Q+X*t7WZL=g`POr~Vq98J z2}HOvt}TL`>oNGmIv)5Zj8paTVe6O=-2TIu@%49F#HPJ6rA4EJl}fI8^iq8Bz5+{! zPoMkYQw)5Y*D!ez>D0YCM)9s18uP>venXDvx!B6)6W+JyCi)x%@V#PY$t|+xxR!E` zvgb6vvSM`aAKRxczB1+J=2^;;?Fz~t?E&nE_p%zN+%9kWyYJgnPF(TAu8y78e~?8# zr4b=1n;gK6a{yUn5)b2*yy)RSBMG;oWxSYXocb)_MldTv_dFwN|F`gQo9RG*bNBgu zr9W>>?DRvj%F@+yk*6nRufHDrKIc09ZS2}yqUMh|IoxlbL{fD*lTj%Ht~2u+{gRlr zUq4o$);2E6WM6NcJQ1s`fwtoSHQ;$dy%KWj7v1ngTbAp+=fO(bB0CSYsndkp z^mSnkm8u#^&Bcht?9V3TGGhDjHU=#5J7rXdfnI$@X{l zTn|N!$+At#vWu1cUMeaGPAjgI+N<~pUQAo~1Z}&o3CbF4p>G`EK<~eciMHk>*0cf% z5EvSjc$YcveE@+UGt@aaV&M{dSKVZxFL$MMewMY$gJh}~zPcVce15*L*l7;*KB5uW z>w7i}brJGZ2V4>dHC^;Rf*3-2F<6}*Zoh zpbAYZ6?xU{Z`C-ff(lr~NRuGr>s(2!h@;m=rOE|b+}sBzJfex{+|Pt)?#n;ruKjWu z?D&SWE)Fn6=L2DQq92GD7&21WWLi7dFo_~8X+aj+%=Aojxy-te-bg0uv2Jo9QBeXf zCJom>RJzrCh4YLZKJOAFFSHu&S6T zM1MKi&(G|kPtba&KYZR@A8R1`>M$ZBh4a_}VB$H<+x4h_)__&15D3%84(PNG)VD9H}!7~;1flZ1Fs+y@o zeiioai|_L^=V#AF8-X-z7F04!@7;fYEpq!iK@>^}7w=Z_L02eR<75H!#w^c7L^nB_4^zGjFlwcMg$mAi zjfgj#YVW>yU5Fd?=+qzeEiwxHDji4Sq zE%4@A;{KMsSw>Bv=r=E;P?HaB5if+6jnhMhb74R91VU9C&xHQ1dX`2pOWugY|dfQIH;eEjE&qU*1R* zheO_Btpp#LKn81(TOIzaXW{)f3`Jv_k{VYV9G;DDW4;>pS*5Vw_~5JmiK^r04Nt>! z1zw^fAi<4KqbHGCUjRBddB!7|J00PQjWy;Q6?hol>+iz5dxcCg8bu@EM)EZQ1qwGT zquG$$&&l)`@kS~F+XS@$WMq}Plc)7Px^dMsQx|8`ae#pYaA zzY*U7ob&!)`$>#%k}ma!i=QtS_hsN6Hp)|r8SXq|E`4dHvbX)j z`RMtuNA|NPJwNvbMDS{oDHHbD8u&r_Y-JN$jc2|~+Rmss@VuJ*j%42W8!}#=TPlft z^XgC}HHcrI8LP!G=s zcooJ5mEU~xTBUkL*vHy;sOBr6nRi4mf3R+`NeuTKd;COn(abzd$uzo;sX2> zQX|+&-}N}T{?(P{v)yGNstE|)GW+`lBOC|Di%kLJIz>j3QrWs2^e9pK2wamPDc~;i zTp)Bz1N->vVj%J_guKTx7)c8M34D9R(2~njISnDYYH>Ij7X$q)!Lu#EK$0`kTqqBV z*y@{*(1>0T>Lbj{pM(0YXjIhPLS*brzk^|12+GJFV) zca(QicT_x9nN%6(Vw=o(4(QI+nOz_?T0Uv%#phFWWWxfg1lHJ4`+Deu1C1U2 z>4_~^pW7j}M*8kAFT)1S$&2)!iew8ey_oEi3ok&Ci1QT6!`(r zAym^|-!j1x(BhwLIjv~*^L-(v^y}-@2gR}lVFdqz$RwK8#VY3$z9$7OQi{N%t4N2+ z<84C$HKo~_7k7O|8PcWB3th^B6~&Iv-ky`Mg;~Q#L@LtTj|BBY@IKI$Ch{TW0 zEHZra8FJglMtUIzz-2-Zj~@|WEnIjkj@)<&(q4#Stp+h}p|!jactTSg}4<0<)$8vA!o;BfJI_X0qK#5_a`th`0*Rd|m!usrkF-S(EV{v1~Pq&~Cn;_xfv zM56GzkN$p^@xhnf)U-eQV5niP;c)r+khQ(npHq=h;y++@gXPQB=PPXa?}m))imfvQ zob1-O`tHojDu0f}fC+YIJkp!hufPKixNstw?Pow_$wSFl-u-jRz+%@=8Q{ZLf&HO} zdWGFzvG(Rc7d;1^#X^{epe-_t_`w%I!P_%&DqOKqOu7`x1%Oy6m!`qo^l}x94=eBa+SMEqAfz~a2}@o!7$L}~3>5OD<9h<8$;*&H+Ac8? zc=J6OXDZPKD>&GGcr^*2pVLX*IWE%W1trLp6cjAJx?LK&62qFOo|m)Mwp<-Uyxyt< z(|gmu7K=Bhg=hW*3YgEJIxn_VDu0~@0O&c7QcU@X23iPWBmpcm`Eg|MzsWm(cZ!h{ zfFD}Rt$BYVD5!MmxyGY%_0!G)?0t#(5Tkze%Pk2dr!4^gR{zuuf)TfRu&C&WRqME< zF?;AEo{ohU@4h__u0caL=Pd6zC+ikjbYUT1M$Li+i`46PL3yU`_bpB&XwZd^rfDO+ zp@ElmbFRu1+1Z2S8+-gZ0TViK==~!Q+4(x#Xf|^wNQ>Ywr$zx}?V&J(BtpTxV-?*WO`0Qy0m zr9#36^`Uzdo5&aGI)y7JKUIcZlA2!kUKT~R_*>CgNJK9ETb`%QR$bp<$$x0PShOV0NhC$MZUwQH`c@n4 zBOLTD5hCRHPY@z9@ehDZaJveV2jQtY77d6Y=Dh}>PO47%xD@gofcFp~thfu@f_%+< zm?lzwi0LVNbWVeR6F~j zsI|}Vl1#^i368e8c34~UIB2ptC#)%)6cHStqIl&<$crdve>clK7{8TLy#7sQKd4mE z5ZeO*NP!st+T_+H0_&%v4jA#Pba{y=^a7XBavCDPPcuhpzxn8WS6bFthDI($s|J%l zLHT+is24=@5BEe1Z&$!iXG!D0>cUWMEWB1)5m4_u*CJ>#zMxccD+v7#nsVwzr~(>@{x zC;GI89iQK)R2>iN{50BeZJy12?DBSVBKu1<&7U^|^)RY;HC&BcJTg`wRu&QjTA-|= zac`UW4jwcXKWC{N#(|s6eyV7##4v#dgm|~F2Uv4- zN@EV3tK22gCt4k&-=u(aFc*vORbjt=PZ0jWFk&TCy*`NmMcE5L*&n0@gh;e-3@-GQXJ` zGhOosqWs3lFrdi%X9{$UX&!G``*2&#IZAz@R#h^O+Sj2oQqqZJjJBNeX|&Nbi}>-s zo^Cba?DxN`nAS5f^F)d`)k)h;_N6@v(*9bd3r#5-$DSk~5 z&vUCn#B-9k;L$CF%Z4>pjrFNzpZ~ zWj?F%cYzI*KSqRBtAZH4dy0~?eR-bKSQ?{oiX^$~lkH&bhyjx%_y{#f?fuzHo5efE z;z!y2KAGLJ0qu{;Q4Vn%(h&ZWw{12c1p+tOF{%Xg%lVMs-=fKEAwDcSvptFPb#|p_ zBeJ0&*?q~7{5hw(s^Yx0DZ27F4MQ^=A_I6lNyybH@PkmuTHH_^a z891Z&u?TQ>>-7nRcI(bp{HVgRdj&mL;9-|$ID1ofl7D6UZ+pvnmU+LjT z7oq!4Cg-Rc694(6W)u7lz!fY6W8>3P3E_v)ybm`gT4Uw&7Um*&438+=+$fK-+T;$E zB-$ZavEirT(L=4G8PIWMm4(D$fS`>BBpsBO!&JeiZdFT1@6%fYd|TYsMG`p4J0!ie zOlH|)doEt~b$L%08i8fpr`qt5IR}*xB2bcMghjcZpcM*bgG<111j9tB0u;}N1Ftm#T=f&l5&wM7 z(W8?Nq2-HxEzGt>4mb52rM%7)>_QV2Ka?S&UA3+6kp{_V|B$jTSq2o?k(?nm1<4)0 z&THc&#z?Hm&p{h!%jo_y&sDQ8MyFWX&i=R@i<0W+nu8;U2NwKZ_C>e`VD9AVj@xA{ zs=jUp7)!y7vc<9~Sb6)_=5-@y5kT+rzC zIU4$s4~TFYkK^x70m@mOJ>AnrVQJ>he*2hE%XOg=HU(gaG#eN^xAHp?=K02zl6k0OiI!RI``1{4TrJ^9Cq0i&P1}e*p+*f|B2fJ9Wb!Ia<*(M<)fj?wduY zj9B?O5wH4y(8b()83RrVsoQ6=NXED6EFt?6H;2dd^vHxNq>F^F=oPIYLY>k z9<|W@&Yv}}XKb*D{``!`gnp>W$YG$Q&=C{h>lq?}o1BsRfO_9%ptws)2^@rGDDu5O18aw7dF_*|Qz8+VRW>ggX{<-2Q9zv)~8dQ*&wjjHEBjFu1Dt0DtfMsKn zdmobI^E{x?bVU&z`_GkHxAqGP{B_*;HOd(a=8Z2Z$Q^#lY>y)jR1h?c!c}kru4K># zEHNm$%gW~!#<*`k-Jc#mEU0(*9B9tBf3X~lHQk$S)bI#!NE?k)o*j4HpZ2Bzz>;)C*OV96o zLIV$Mip8Zzv)rc`4tHV?TaSufEo9IVcID8upP>)iEq?4duXvRyA^L3+;FU8Cg`=tn zW5Sz=e^K69v1<|B2}YWk4NTs&XH%w|lMbB))g;FhPb2ZxvcG0Hk52!N&sgj`b^Y2t zU4BMS3n$_!*8ub}2^C-aEQYv=o_dChKj(R)Nsos9G*BXZifVfhHG=>6&wk=I4!C?~ienX>8Bf63@@;$luRCnOwFxx`UM}0r z$6Vp`_HhYXvG_6fOxi4Sj5}!*3=FU!+G!N4$1m^RgK@4i_*HjgZS=x4=)Uk*4^VHe zdt>)eHRBH0HKFV!Wk-af&PbW)51UeUgD!~iB%+w)B{tr*QD+YWC{@Zw;PfvxH`x9V zm%|n3z1V*TG#hq8GW-Z8=Z-YX69OfW$p0~6iLh|rR$IH>&|v@N+o>rCz`GAvosk1; zkMRqJ>lQ8I{&|`mfTq_}BA?Z8ZTVh>?%jmtKJ9prgnXf>07U{Hi81+8>ktUZg&Hn4 zJV08Ir%c7?-8UHOWUF!jRP0$ogR<_@N|q{(qadfJ zp8J_3QIpd37rzc?aECNJ9vy zVNQE$X9$amY0ljY+?jiGN8T~FL45(C__ATqu(;*v{}~4NQh7b@te)UFZwG>Y7cUcy z@1)DqfKlUvErQ!c$-I7qfwg|Ys z)J(v~@4uw`hdP8BY^ns?k?8Rop2pEH$HU~!LA|es2wA$M_12f<`y_AjBtb{>V`axsJ24J9|ajj zljuNt6}*+`q$GaEMhyJ%-eic!)32OuECab}VGX$0kVdgli_;|*Tn3SYKf8KJ{!5T> zndpS$aX!*u18!O%nd#haTRHN$eL(mK1bs=gQ}o618E0|QijK((mMk%u%h8owpcWt2 zpiyb$nIfa>p-|7_M3{hb<_dY*ZU^xXoh}8NQ%@0E z-;8jcn(|t-YJ9)^Yb1Hmt--$NYleo+;S?f2v6FwcS&p9hTy(_sCOAa10w3C868R5t zrPyv#tDN_y#k9^#P&geHg_?`-d-FTcX_&IN@mlL|Md?Ov1jRvE;HOvS`Y2$IsH}^` zbaQ`4zeaZaWYa`XG0cn5541TIrG)O^XOJ@%%Q?Oymssw$rY}OBb$*+8{NRw>7C-a+ zqM!}_4|ds-MX93sU)#FOPJorpyEQyY)aJ*-z8345W@Wf(tLFt|spx9h-{${2;~Oz34AV@K z7Xgd>@|DZztp}mD7<;IQ^V%HAdzG=~GVB~@O%Y@cH8+43&x%BU=u9E|Y1Z^nn>~~X z!O)A;4+Gd%s*@lA$1hrT1|JHd)8M_i$8hyVKw1N@;i#pQH$E5;bzOeMyy&*a7IVSJt@_eux|8}fg zV`U5FP%+(~1Q?|B$YL%>s{emSj>F6chvIwpjsO!Yan)%@^wAvig}+?PsH5}rBFsa( zdOQBc);#O;q}Vy`_=E8PjtCk>hdb?%n1C<95R0F0#f?_BX~FnJEXdW%)y30eDPbe5 zhP4*!lQjdl%P)(IDl+3%n|J41#BMUG-+vbuHRUpdM{p7&EXs2NBT*8d&ug9}P4`C% zJxMOtrwL6LI4%&YbCn{Bwv&~Z!2KD2p2WXiOV92}s7)WOcZ>fX`|9Bx8`Erx^v)!{ zG0QN&ts$HZJ8*kmMU5!$enSkyj;+Ze?s$=5gWB=;Tr{(QlaYny`O0;d%@EnC zL<9>?s_FMRF?6j7)CO$|0lfX!i5RJ!j}@R|iS9ro<9`Xg#{Cfp^N|!|;w~9!w-A&< z&Kvy%=oRp$(ChDTqBt`GdJi+u;HNbvD{EMA?65V#!G0jwm6EaRTf?^_(%dSvY;V8?DGM7WaR1{i#MojE}e>6?n zO{8FUAYk5W{?~l-1tIh2F3)F21NH;ZM9{j&D2lu@eytFOg$`~yo}T~ni-~V@B*xLo z#A5uardcYJJN-L*Nno576A3w8yX{?90ze}Ho>WGJPl&`gq0j|zZY9~bYPuo=jmEzu zW@T;olfTmWh{fOvaV6Ict(J*4^~SB0Y(VQ}d!UyRVIaZaMr8CKWHh5=M~k$g6)(nS zcy$Hbnot(JU+SQ8|Lq+;x96e93`g z>R6@8V}VARubkzHZgdyUpvFcoxD_a*K^W#V=8-RIjRoeA1hFprL7|SP!WihSqn|jC zk!N~LZ~e?A+D#oAW0~}S-B0IC^-TR4?aIYg!auQ1HasIu`Mt0{us&3Iy7FQ-tCPkZin4U-MFMNLEvb6-r+c!6_f6=)i^FSgE?vz(tg|gdm z#t<_i7{JygmcgWd2vOt^?u=w5l&SAQvyZ50XG_~l=LK0V6To#)WkOnFzPU#@xBpgD z?cfS$4=tRx465s=lt2~QBZy`APy-ovQ5%HHC|q8JbB*>!W+@VhCHxT2&SH5>ra1o1 zw^-Mj$XH=1Q~eg-U{+$RMMc^-TxR5UaT~IsneU3~vYa z{X%(supNhhf?vHwi?}eXEIH8$cm$>V^{&K3udJKwWr!GgnzcX7fX9~(4L$_Mxus;= zI)-KJMpbj|RU@}K^7wQg6?(r&X66tD(9Xed<1*^1vbwMd=P_88H3(kYK8`YL825ix z$`b)VgA!jNo6)O6Y|Ha)? zE3EoIHLw|LV~Ln=nKXB>wj|eCKRKL<4OxO)N>yNj1)Bn$DjWwZXJ2qpAk{r&r$3=W zTy7;c2WLn=U!gcEtUkmie;`M|JG&KZAm4Utq)~?aFT>Sw9yk~RtCMQ*%iCiQlfvh! zfV}ya=5?QHVzE&ab(FrmX^(ixJNJJGJB$V2lh)HUz2)W5e&eW#^0_x2a1La$0WhgU zR46-u{zw@g${()=Dn|ex#6$U&Y-C9h$qA;kIb%2oA;~-z8LQOD(wE6tM6KqULt|n> z9z3$e5f*=34$uyWb5))s9FfES$)@2Vs~AxCjZDr@1$lk-=5~h96?*1!daU#!aEf@< zQOOAkKz3jmm^e+HYX~iai{k>v?k%lH>~pz ze0+I|Nbvqtq$U>{K0hrKpF>xm;S5~$j-!FmHO8c;2c^LBO;(9{Oi9VC7(#i;own{O zc~u0O8}kY}hJ%dK=qB=YoQerYIPXdlcK@;N+py}K17(E|C!+AsT9_s*vg|#^4_LoQ zAKMRcl_VzfcRdHJnFY zHl*U*{#3Zx)q7Ij0)@{o z>G{WL&11eWyGNa4hfS7pNLdSVuF@OY=?f zkFKWfN2(P(?#^X*ueBJ<7kcS$AFkhHA3lMnbSYX6lUGO%pJ%{-WZjtp;!cK=fzeOK zbIm)^0m?dQ23nby*7zm1ZOwB)Y~Su8MFDl-)f67lo)sttM^v_%xbM_w0F&C-;%bz_ zScqY7m(y6N%s)#a4~#ZGITm$HRL!@EhNde-lU6S+Ww2d~k55Y_4TLkh52{f5eOU{% zRl|((mPI0UMz1*!cWQ#I(o`VIQ-6?@FibuNAR(9j0}HDaD+VqxqY+|_nG%*t;j#!s zRyIIm>O)y4$?{&)(h#%G=B7~F)6I5kza3yVqA41zH-9I^#7rnd2hQWbfTn!xQ4*@(7n{XmHbS$_W-+d=NW$wq>! z_<-^Y*C%&rCr-(h<7oZ?jD=&eg+Jf>CcU4u$@KJ}FFii4DKF6TEe5)aYxU-2X2>kqLGqU%%Sr6lq}o-PjJYjD zU#=JW^oNjak4>;W%shGe3~c48T7DEL0N?E7EBT&O1BuD*;8z%t?MrjBcFUe^#A^Cx zQC;sTKo37b&$MolFSwH0TQMna3@Pd_b105wDW~cCbDV?2AW}M$*>98n_)x7a;u~PE zPWul0%nk#y;tL-pH5Q60|IWD56s6wt1tZkHp z0qT!*EkS4z`%G7^ba-yA66564@Nsk~@yi)@ zB)a2x@~JOj5#}q~w`So)=V#@pgho+-Q6G=sEX{_&hb2uCgm90qyH3KV{32)xQv5t^ zsGp-6=3YGjdykL*pg6fBhf+9jQ7$z+a(JhHL0s1n_2YrWt3JrLO1!uq$ug%xLtK@pV-gx;Z_-M#f%2_IIg z(RxSDkP%N6qKHN|Qm0Iz*4{KN#R;bZJj~7-^HqfcGOV9#gkE}la{|~V#C=i1WwbXa z$RRHDWR_z>ZHgh{OZmHJ=zQqH}L}C${@p1+@!R`cP&QFzro&Ta32RzXbKL6AQTu=}9P$ zkBf2ne~2HI-pp>TS{nE|NttU{g!J5ykxoPy4Q5hTZrloVIea_pWvxwaSfNJN3%$hcgqOUW zFQuxCRgvY&AoTxLMB?d?->cW_&-iSJki2ig6%Iv17)yJ40mZvkwp(ifMF=bkpTsol z{bn15Vo)C$+84AJ;kd3;zdRWEtH1!IvK?<&nICIXZ43HsXoNYgoHce#of=3qZJW*H zncSd(H~$X)KJb@CVbt@z>LkXR9N?Wzeatu}#|TU`5gcAN+a?_kth71848 z#z*&5(@AUnC||S0xxclL8ulMpW2Oe&5&jlGx6!db*HtIqKQF&}|FUypAOGDjGf39PyNKS{8*>KN^6@0O^P@2oC2L_ei0z%JL`|%|t(S9|#Dd%>1Tj z-KTRy{)6(Qly>qq2LNTW(k}8CbmW-mb4AD!8nN+h7207A@Cz+J8v?^scDqj<9_kwW&BBS#S^h}AmpW~FB;E7n6VBtU z^NCYvoJ5xp3H?)8aDUOuDa-sRcL9=oH?O{3KdTR1FGnZCqVz?)b~rP|X!5^UzWu2G zRA)m?(Z;CI>oba{T1qEI*HEOXJdtuTE>VSivwh_p{tB~bZ?lV1}~|v%RCuD8lhyC_n}+hbV@op;N3jf8Tp|z`G@Ew7QnO5?~fCi$`1eZF7d*uvgon%cVEt^=&SS*f= zVbdoqv{Fu9$4=NA-{tr=C;oIH5}h!6e7rLO4fC^i z>b|=^KqSC4@pZm01q&5K(=`H)y6RMsem4t^Y)?XbtFOLwj2DqVd@sAdlGCbp&MYIV zRG;qFE;INWFVOx6q}`6+rb->~JFAkTZjJm{?HkAO__gVMlxN%dSlwAgU|wd&J^B0< z^{!>v!=c1f?Ce97XY2h_$H2R)w17)Ot;;^slA{<2&BNo|gSr@xmO z3{$)P=J`yxmuWG<@xAP9Rq1-0Qr-QMZt3Zg?(2=4s_~gi)4W5vb{P*{(;`P*(>wyy z@518_#7e+Jaoxq;&R+U46Y4EJHX$hf7w6!B&ZM9!@C4ugE~L2hukE)30;s#c~F)kH2ytx|}R z-Ls(Z5OaQa^^2hi{=SU^7aV>B@e{)a?)4sg#CAxvL_ms@7OB* z2@`?SWjB;X+2aPlCfEyE-h55se?Fh|XWCx1nu0{iKD^ZEqj0D;5mORpTeTMC|7x*t zDfOs%#*x_t;tgyi5YG^jn;W^YUWG(;KX0c_%257o0c zoXD4s#p5CBM6p{=*a`nzb|BI=ZPq;Rb&Euw0dBsKkY}1xTZM@8Mk|q4qgy8+zx4T` z7=uKoXJwxn{^|rB2TDMt0+Z7@Il+ndXlZxV#+1)iV3HEF&1ObApBg1n$(KZXnS*6? z+b-BHzEU=%zxj#qHH;f?seMw{VcD(sVc22C18L9_J8{&OZv*wO#W)V9Cy0i`-Mw7$0CUb-Au zvDpl2LSuX!$vL{v)Fx0rf{*Xzt#$Y-m*DxlkB_B4If?DE6#5G#vm&*iIWa__0pGg-&8XFS~aUz*jM@pj$%c!f=zgUGj#b131sw(EIuDRo{KpX_2#4= zEdYs6Vt%^?B^w%A4FYhHvIs@L2)}lzpn=i0$E~eb-vY-`dKu$&gU)=*We(~Im<7nx zZ>&J6bk7S4fU^03#Fs6%RPOcEsCalEtyfmTk@Qny1oM%9V%iN01=R2oaw-x_{rBij z7>J~$x(C%}3(R)vO28eJ2b!mw9=Z`iElZnuBMC)^C8yUlo|BCaI%_^F8J z1IG1QQpbjy2TjIy?Ru-w*f(;CJc5PidOLyFpqRyTY>zmZy$IF2*dq#wPfUo`E|e5` zaA5FyVVQn@$(1E=Xqa?i0d*FyMG^clSS1#6UnP*8V0}w0RD*h<3jw?qB?L4*)f{>d zgDSWt@HN`Kh4&3%!cSl=Sadvx(zdwGP!5FJ3@$YbeQ225x~L@er62YQ;@;A0${b=o zZF;R5K@&-f+IuNxZ-j44|K9hhH=m^R0PNKu>*SRM|Io2#L_RXZg}clB-?9T`(ml^l zMUd;WVErnkAo2%)%!#Xy<1=4)>4`RRMV0+TPK~1}E_|UCaFr!A7e-jd zkhKu8*LF!Kq5`nAi98%k^9s{~&osNvHYo8NkM9}JFly1*!t{SaPf+>#$%g@-oD4l# zeIGhe{7vcj_m~0(=!Xy3f?#wQxRpQ{YckOL z1O2}zzx)|p-+_Xmq@ia3=ZL?-U)*lbjLV=YiQ@4ZIa;^{mK-jH)X%Wb<;{ef{B~3j z9t5;~zSS4ma7>-z3RkZ4r@QcY%I62(+~0thb3B?$M{TS)t4QFWG!j7%jTT6gZEpLc798%^D(bC3>RgW|2xgUfH93B;C zj?j-hE?wFI!yO^3_^)Pt{QWJ@b#l7K<8esqrA@CsCw)dZxG?yglJ(T6+l z%x(>VBJyv>@ue*fvcL{=mzPT~&Lr-TFp)E*aJ&%7Qz=Y{L}&koX!il430Eyh7p=4N z3rGtcA#==?R2v?Vj>QmSP3KE9;E$5(IX7iCX|Q|gIkM@?AM8S_3&vB>V}58co3nQt zmUJ_zr*Xy{bW@j|1fR1Kbb-|Yb$|nkRQ_Z3_L%YlVdad?Efd=GuS4z-_T%=ps?KMP z&hLB3mMDu(iwk^r=;p3J@RQ=?!P;k67l`J-5Fw%#Bcj9k!xxQ{YBonmFFv6o^K$jY zGApbQf+SI$Z&% z76{O#2lb}R)BTX~05x;QH!Q?J1s-qYU+`c{IVdlp`cDnq>CA#uxiV&Q)1cMN7(7r7 zC@LgN9X_H$)eTy6Sy8gzOApm?_e+wIgX0l0&1Sq*RwSn?a#2HlrzBm!{%BrJsnMZi zs@_Fx|13?GaqNqEeX~e+mI5im*>wClsjeOC< zLctLAPH058_jM(MiiRumo1b-mOO?7A zbT6*G&?uroaT-@{PGfA#Zyq4H+BoS8l$`JP1Jr5RV)Kqj`|V%FSy3qiYnQa6G&B7; zP1t}PIFgdN5JF%6vNbN9i~|Jy$fHx)X^s|o6qNe^ntIQ;rkZGb_#}aZo=}v~BOqNV z(gh3to8C=cttkye#M-W7e-lcmC zvUY``41Tb7?P`}YU=6siwaSJ`ftKXJEK}1%B|N~YcOF=?wKA#E_rfW$3E%ooWN#Tm z%dALOr*gF~@PFpjQeMB{#b9!3d!7t6j~5vwdpNYs7NJhTEp;=fFi60C-%7zfkSX0)iq+E*B9kv^xrBu}{udhfPlZ`y7g-Nnk@P(Sf{6XJo0U7X&g}M zfq9st$?j8>i(`z!EiP+w6UZQ7lC!v~{9_aS25@^#4+jC8>baAF8&1)hQbR6>wi|4` zxjSw8a8`i2!0`D-MoJhswqa3APdm^RVXu2rOo0^JQL&z#@I6XzF`75m!aI~2lgZ+K z_j`lSE7p#}smaE%gYhkln~vP=%ID+Vn+;yA(Y)ZPFnPqaBJFkk0H{h>3AWZuVSGQ+ z2;@Gxp&j|d9I9RbFgf}o(f~SFW!(--nr0XV9|~<-fw!G2XCI=2asVRNtwZ84gj`!I zz#4tL(h@jYg}n7dC`w`T<~hUYpm*{NU}kpKATPY_d^jUWg__AVd+@ilev9Lk`u)hj zFB`qz89aA;zT_^WU?gLuz9;)HePtLDAc^C!`7j174z0zEj0sTZxU^T8WaUASDgDZr zP(*~PPebKBbQZT9z8J4IGD`D{f?j{ClWBL_*O$5}C6&UM2; z*P9}K69-D(k$k+nzZ--&T9N+d1OmsB5CQdO=cO6(dLki6-_$sKs1P;x@jV^^1f2&s74+EZtN1p(D+K|Y*e@oJ+*}Xm$6TjVKHlJ) zzK_WWF1cjpztc$X1SLyQ8PNnt+MR`944gezyfGHv{#ZY|a_w(uHnbS_5wY&+{}MT_ z#f7ZxHd93BAJs&OVMX}U*e<_boutH@aaZg2KMp~_G73HPR;umb?doG+SAxr_m_c|E zlBQ%tN{*`PbX<(yah*pP<~pu;n!wd@lS(&E%j+R!2X7Fbo;PJpmyT$HKuz2H8NT%z zi~EZl+rxTOQ7loa(Q9hJrIv~~{Sclm{MpK5-u4w4Y`z*$r{J`BVv=(Rzpdia|20b0 zcv~7Z7%6oak`||imkugvx$OsH0N62Eggtj~TyW#ROPK zpWtU0iJO!t+U|h9P{sgzXEI6+w}L3S&6|@`m(QbVE1=jfsNs)HoJJ;i;wW|ecbnW8%FU+0z)zpMQ@B%e=P zR~m-1@q{%CV4Ep1nejK7*!lAJTJj|5X7DOJK%M{L2M`RZVp@*u5JV+ z7$Ntx`SAt)(Mw`jBOBG!lO$}P9D8&9#PIIgkQ2s>(d2~Sy1M@(s6_8q)mw(K)J8`> z1{it%>#iHuC?EoXV1KVRns0#~qc4lq(@zS@w5o=qPOwUugHTkdupzK@OLjsSTl-|b zD;MFsMt(z%`$gg;VpiN(7-kg-N2yDothp%!!W`CuGb!=9z=JNJJsuG=d81td>zo8T z8q3$|oqDXbv`O?bf53as3Weu8B~ZxNv$dM{YlIh1XSzv| z6+XjHNBt$h->yiu`d=*;Aw~C)_io(NIcj}ft|!xjPiIulmG_n4@9)#eFR7-1#9EBf zy@wn5Uo~dRq$Ax``1&)SJTc-2e%F4EeZu}Kqg%D!+JQ+(&j|ed;@H2 zCTt1+RdAn6R_>_8k{!p6C@ahjy>oGR-|IAYs`q$Q9<*Bc!d-p2rJuVN)ml|zgr+a! z(T=PR0fv?lMWWfNcet=?%QYfNf@l&scV^Q|l>U3m!^|6G~B?P3qh|Yc&<~ zWP3t*CW2Nt2B<^QlCJg@o3pmj(@eZv@GLq03G|up#J}tQfS?1Dhm`nUE`+C7#px$%@}#&+U#Z5I8Qqe!g)<{=2hc)V4s0Dj+9+v{?_ zt2~zDu=xQ}R$7$Q~f1@v8h3@hUQ}f<=Zb zz9CxBAtw9MCDd>exIZIz*>8kV8++)cI&kUeA;yCZDrBO>6c>!RiV4)2DF>9Gad%oF zFSni23Vt~OS863$5r@A4i`sAl?<@BxFi}a_PY=M8+QdZUYk6LZ|JL6oHHKSfP~lrg z<2Tt`pP972`J<@tr!U)A%SEU5N%CB8AA;H=*?V25mJO)d{EYOd`eJ*NvH^QUf9sS< zIK2QMxS;JQ*Bm&~!bX@V*t~=GU8A-o3zUsQ-JuQRdd7C6Pgh#(Vt=#DaC?0~W52%C zi=~NAO>i2d)MDBUfEZ;ccRB%=m9{91?>mKKng?T9kXDYXx{^ePi@z?^D7=MVYsSXv z4vhH0Th$0pM|IPe9!sJewTd?k_K`-`KWYG4$u{5zfVmumtU)_ys06wApVW!b?REK1Z5V zUI&~{668lqtC>g3Wr|3!>pq7vCc;zwZA5$tjbpm?bk4fl^YoguTeI6Y-yut~(|i`A z&(Rj*W=b z68q6hX97W&K&T1i5hSj^>AmOPj90xkY^4&{WUb4*9NufD<}leyZb=R!SEjTi_{|!i zj25JV7F=0tS%Na1Nl~wE$ua+SfuQp$zo3EWVp_a^$!)A6**A`1-Z!zS6wl0R@UKTg zH@bL&egJ*`7#R1~?xV*;0zvunFD}O{h)m)GrKA4(4@hy$pDB%8hv7U}QDy=5cvYK0 z8rfF|-(6>SDYNDvsOPQDoei`wI)0?pYe)Rw4de}xdE))45%IU8`(e4-5g>xWYQZkV z9#-VmwUWLf;WO~{iF7uk3#!Q1dz?`FN8rL;tGfXNn%k%6oz=vXxHG#;K?YXD7-Clr`7x;z}p>p zc4+d-u&d`n)DCYn1)E*+r!tZ!K7<1iGIF%E{Q-3_w6V;--4l2Bk8xZqPE@vZtql3eZo~|L}c?Tm;Be2~5}3Gv*i9IAfbD z_~9G1NmejsHJ4b!%i(HFt60?7~MnOL$cWHWU%>l0w##H zLOaD=3|{=9#2hH>vVMoyvV85_6nL&*_1+oNT~}gzuwN>w<_pCudddVX3|SijBqfS; z#vYe8rAtf!n7I%L(+JW6zbh)$F1kAhoTtgyZh0zR+=<2wH#mK6XX$&g6b}gqlBwS1 zd>riNy6Q8pCj9G9$je^}_N?kk&`_A1Q6i-l(%9)RJRV9WM^q$5f!#I|i$F46HEQ(7_@fUOds3}XSpcU1Y;V~ySvh*nlIVw~ZPWo&94>TB#3@;O-7PnqyQC?7B_ zDqnA&r0i5MyBk!2s-Pox#X?I^8m^^mGr4m}5b6vtF$zre)}LZJi5{R7B#nB{ru0Az z`)REUMips!aFN&=g1IoCI4}i~(r=G%t8czwJZQ4eI6`7GwnEIAb?2~9DO=5>8pIhJ ztpNq=lLZQpIV~fS!KnlBAWIj(n#GGO-8l)mav*yLZG!eKMXLT@@i~N$-P5gl?+3#K zxj;}*9-~kx=!@wSEA{q&@fgU6eG$3&xP)c{c3`)v#ZklEryu4jW8=`_Z)D1s3F97o zBv{GSw+cdK2NI9{{P zC{Ks61)t-D=^!w2Vwu?>X=})1*|#;x*b>exu~KTzpQPBI6CP(U9NqK`fU-OP-VSU3 z6JOzH2jJ#q^-!V-#bbgp zfixgS1`FQw=A|mu*1Axb^&Jxk8p_O!b0#4oX`8&pX)zV3gf*X~V|>%*C|~esi%r3` zgStEa)JF9H)3BFuytdwZ6|S|pf=|URRg^P4tN0&E2iStTGBK$7<f!4fYSRVA{M3#>szFs0i1H&&Qg)HeZE0D6~K%#%RT}pue5L1x}Og z?my!FBn%R`6uodls?P-Be*fFUP8?Lc6DZ}9A)LWqKxvO7_rFz5EdoIt6>*O^&Hmw5 zSx%unZ38%VrHXM#jj1cx`dy^Eu5jEooIqS^jL%;lXS`5tVrE2g$4kGhIdG;k4hboU zmekJ5dA$EWSCB?^wIEU?cP5_}Btryfisi3}s`lbctR^w(s!tJ#S~Nqdaopp3+vsk= z0Vm5+{cOqEat2<8LXU9~Ye^7pZCpgqvV9fIbi_32oNv6Qk2Mc34 zDLl+<>7Tb&HD?gerM`B9H0h`0mYk~E8sPSYARcyjW;k=8`3R-#=pFxddQ!f5^2?%h zY@hcmZvJU2djk{oR~G8jPkJ_ooiD28|No&P{&!oY1s}_5%z&&jp}`>QX9d@AmI7h* zd4OIXETd}ijxC4!ZR-H*rHVYS>R`omn`|253A^u`VNuVtLT1a;o> zIP8BGk=}T&0OXt*KtE>2GK6;U@b`<}nbQ(sOwcO<{JRzAtXq5&fk-*p>HYzBzF;99%Fyo#1mGKjT~Ww?|_SP@Rv)7Twc z_K(m%X)u;VS{V=CQNy!-@Qs5&&#)gEXgAS)yecHP>B8w6FfHjt9p;Dzww$V!?wMNn zHjywBFhjTA5M5#95EO*wXM7vojU7!Bb=pZ%PEhpoD*Z0SI{R*Auu-I)$|H1EMY)I0 zoy6lInqTT;=+M%E8xJ1<(Y*RW(zRCY{&5Z?-Qg=TC?;m5(-;9ZjLyYh*b0Yy_a~I_ z+W;v}e4ivL^_?*r6;}a_$AYuvvmEW5ZYM56R!+c8qq9YQmr9PdjU3Y!NFZlWnS>po zxJOEmx$j z!eNB_c)}nIA~)a8VEv4s!-P4IPZn=7!IPLl@YD48h67B}bqoY=cA*HSK-jZ@&McU^ z=AXXB-$1i$DyK6$J_JwxEqe1iiO+&<695ORw*78C5NiiXyOfz!#0)bKNO{Gj+c5h=POp%RnxNNsJdXK^}Njj5Y)~i8oL{Y3zBE_t9pld{l%wv z?!7ml3(ay1;ng1ah_z9AxcHa1)UrVHuBsA(xLX-f`hUn+Lk<3zL{76w6}dxhR?;EW(fFp0-7T+66^$Ltjm^aDfx$Oy~< z{o7v=tY!8rmPUM0wIV$Fu5fiP9o+8MrlUT$VPPCqVj^~ywcj~3^cEq`@wbXv)U6dV zBAqb)@vRjh!RUW8fqE_Zl1WVisC}yERLD~2km(boTgDI>M z@5XmZ%o0U}OZrV=E4I=Uc1|dRnD*(s{Ap;3H^RKRMm_}>84dv({i?ir6~Uqr9m$NC<9`0o8Jy~sb@=i}Gg3GfGPw!w7R9tS}luqay1*}@sMelBkYXo(pB!uV)4n@Ot zZS6~L(kOL1JAoQB{Xk>71pcu6!|XUfesP-DZ4P&1Z8v+vIyy=SCbylTu4dQbFG3DE z6ZXtfX54>UBlk!0lBnBFGgRi#LKLZG`jyPN5c%M}_k-l4Z;-?*$`pmYwVCS1C zp!e!b1B|I5|K`&Um*|UU^gy&VsALi@XaG?L5q5%lvQ$~qfDxUfmrd@|vJODc=3_^O z{q*&9d$&h}citA&a)>?$;H+GKnjVfnqC9h-*#nK}{`#AlrS7lqUK{9Dz_rdT-j2QA z0UW(sY7z9}*4!ix+XLoT_G_LbR=;aCQZ!`vAMXbuHdG{-yqTRaA8eLU4dRl}wnAC# zIFJ6g(Xa)KtOZYqp2tU^?G@0~!cxE%gzgsTW`r?vLBE&gKM1(bSYXbq9Lz(}8P z2HKVma%?}ATOX|P4$wMtCSwEN*~t_p{@v=5ag{*e+r6SXi^l{?EQlqMOsU6#CJxOv zd%jycDSyv&np@CI-6vBS3KqZ!+0{`q+Vw((VBYNp!(nICfl$J7BWm8qC{3Bu; zu#AoUz)w3w^n1W!LQfAo@y$O#!CrnFz_tlvRT{i=K+fKb8_!Q~5Z9inoC|5yy zxo&s@j^BhX6Q_~4BK;iy-XD($E293dg(O3 zd+femxFAPo%nswM-tzqpC*~aK?>0Fj)LF`3A6nICe zg=o9>8fcrHj;?1ZJ`2_x(p@$Iwn9Q<8TBIkgE-_>BE9MZZ@IO5q6!$}$3Ha&+zQ^^ z+doq-_#_zqPt62TZzZuS5_d3sFb+h3qoTz4raIjaBz^NkvH9Y8t?!ij5(%o3$-VAR zQ-AfALZ)JXx0wbe+CMG0L}(KQ{D-A`aOqO~ladmrLEWGxul`RINZxSUl(9~I|Kd+w zaT$bg1NV25Ad%~UAj=Y#aXt-Y2Q(sKrQh}+Bgnz@Q)aoeI?Y${PjUSpASco%+8F+} zh3)Eo{?oE*9{ryrn7uBDZRHYS`95Vitpd+Puv=EWJwq%;#}IE8pyB~KydZJ!TAJs>3d$k4HY#Gm|4r5rl#KiP_qz|qM~YYGR!9lM;4X^C zWW;;?>AJdyb=dy^D_vb5VKUG^KqJ|kpY8UqJY>Q0SUffI_EKHW2M>^9lUq+IjN8HV zzXpf~;{JEM7{EL*v`BrJL`yz)5J5bXci$ek>Y$%A{v1Lm;Qiy(3?;t5{6SqO zw<7oL9ff1giHF8dgGxohIJY^(uoV(}z3pnIpC0AeG${+stX+^?3?|MZi z0xM1cdHi6qf;xRRBQJc$d+n_!j7XAIPNZH#gO zPlkT9Y%p6FoX3{fo9aks1EtDbH}G-xzg4pRPMJf?noqE(yt0szk~i%Pv>kN75evw9 zTE4_#Ks2jbf`bJHC=E&uw)>>SMqlv4W}GO=BAoEUbscP4+K8!~%VnVcAgY8FqDN=_wSn@VZpj&miYxza=>{~53;3i9*-v9& zR_P?5kfrV==!<(S3AXV=OYhMcOAINIsGDjG5b>d2Tr(>Og8X9X7odv&1wI4g9D4~f z++*YUMnWkUm2f(`!}JWP={yXMQwuV0jFF43kI`VZ<5(0i=pD|Dt7&HdjTwc; zuDk#NyI0*cY2=n;h4=SdK?L`K(LM}i_-y_stPcoaH(Ck{4w9L?y96he72Z6GucRWb zE-vSDWCD8i()gTQZLsA}m3~!@3dSs}9-_sY$$jiG4L;z+3G=R!v;BK)!_mAG$IzZO z;QWgYW_7p(lS3rPI5{BHRVLVdKNNz5mxW_`)kID2i7JNb7#EB!ceO3C15@RJ$&CH$ z3DTvbJ`bEdtOFWFsqNEKF!;CrjUkM_`w$)TfQ^QcXl*5KpU z%%lQ(Xn+<*{;LrifoMdd@FcMU*U7PxR!CHYNGrqDRLiK|lyzNpb;8{QDioDa!Njm7 zRDElYa<@DxrN7CLiehm%#nPKrKMPHv1@#Qct@Df+ebfT|U-AG|dDLeHECmvCQoS(` z39%4}HLw(*KS+kFrq7)^D_F^dl!)A}k@E?YgOh+@RB`B#))k?7EP(o1D|paAXA(*k z&B?7EM1pPhGSnhegRTl-c>zkY)HCuIOOJsVk5SpAS+$gnL!w&7cUYrWH)NJPW_QB9 zk42CRZ)R0J5NVjQLxG8Q;grOqQ$o2tIKVbhJ=pGG#85?)$L#J!OUA<<+;J1-Lz2js zid@7e!x}{=9amejj(A6fRtXFN+qffV}$;_8$1i;O~Uy3Rd zfb>f`goJX#)!%Pp4d$%EljgB^TXGo_&rvj?EA~-N`t~@4}NtH=N>QE-P?O@_hpL_q~!`LWJDHYIqoh9Pg&X@F4WxHTDg>W za%P&lzipbk9q;#v`r9c%@^riB-d1PSv$K3diMoBr>b_~6&cZjZs1Cn9NW7`n+YaG6 z<;wG89oN<3;@)c0Z_1Tte~<-_d`~1Nw#THF{|u*gy6&ug%YNj00H4^d>2&R6DgNx> zJ6E~;Vd~qRsiU*v<*~OC@wG>G$3ySmEQ00v z4kvY%S`JduS*9+?Cl1el?fSji6!%#Rq}<&@e#~-w?47W;XUDj_QDmCIQf&H(rML&= z-3w=U=xMo;5y0!(WfZVROO5uxydY>c1-9jnT8xX6t zN5$YMd zE4tok??H%~EFPUIq}7q0Q^bAe@~U=SXxXIq+cEwW%?;!S*Ixs|8F zt>M`Ay^gUAvAO~$<6Qe(owfS*lX9O?$x`9_Ewz6OiTTwDSd*!z^~mbcwG~H}Y~QVR z3Y(Y%rvCl*slJb?a5f2tXKjj5w1LdW&a{`t4r7JeE_Duz;_*yx=eIxDZ1jCyJGbJ= zK1qIBTID zOYY`fR0@Bgc-8L4k)ndISK;eZ)hJMU4BYX?nem$gZ{)&M zEZ6<_;>%j93(X%H687Yl@4roD_Oa`)xb|yf+grZHE37E_@wbJ_L+Q%O0{D;Wo|A`N zWBM~#pPRTtmtBJ{BN};=ItZt+ zpQPknj_>B|8rLVcW_D{oU}FL_R-`hPgX3wj$yDzH8$Z(+2(>d{e&d^0jVgUirb`SP6g=hTXFB&E>v5Yb_?5{I1=HodBd)S2B!w~d{C!J1{_ zu42;`v0~qJAD|r>&Dwrtdo=!#>k7Xa@yZwsbSsJ+R^{ep+2&icJ$^jPpB(J0z>W|- zF1b_2SJ*cY5}moH?tC?Sqte8XIL!E!+oNIU#rEarnqaCh#r;x)-TC|x1yvKBuj3XCMD0_aJv~5t0^X4QSY1o z{$MthuI>BxoxBkn@SVNKiv(eO#}X?=Q|6C`{9e!aSe+Xm;e&3a(t3I8cuLJ)1>2$| znDYyZZnTUNIwXy8BtT5%UEHHA?e{S;g7fF@ZD>?)Xdck%KS!%IhImSHaat`S!cbtk@s2+h9M&J=F01iCrOd-J7PW)qvk5x z#mM~>GVdU;#|Rgi2t8Git(o9Ba!VmsBfdtUO39-4dTYazGXok^ zs2M~))HCnGB80+jGmIOXE!zifg`VAS82JfLpl07M?Lo0SzTZa0x*+{SMh;GjKqhMP)eoKU57TW o1dY;{#|Qv+u8OkK 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 JWt#S3{|}H^>J$I~ diff --git a/tests/goldens/3ds/pocket-shell-applets.7.auxiliary.png b/tests/goldens/3ds/pocket-shell-applets.7.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..1e718f61103a9ec373cf13e9d287907ee4de536f GIT binary patch literal 33600 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png b/tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png index b182842fdb26d569b14efa9aaeef05e3b033c1c8..78cb9f71b371629f1cc6913a2df44c6cf321f382 100644 GIT binary patch literal 26745 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 Y43|-+2@*noQV39dp(0!M+$iwB0PsJVtpET3 literal 26739 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%0D4*G|fge5*QP(wH z>kkOw8XXhLJ1w)@DxBIk!FcFTT<&wmp=r7TyKFS)buq@k2j?!B?@T|egt;pTQ%nd@ Nex|NaC1(-(e*nxCX=MNa diff --git a/tests/goldens/3ds/pocket-shell-applets.90.png b/tests/goldens/3ds/pocket-shell-applets.90.png index 387743b919d2aa7ae4f0f056fc68778bb3402e80..8fb98953e64df7c6481bfe24fa481a2d4063e71e 100644 GIT binary patch literal 26511 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 YP>0s^Qol_sHvqowsOzeIRIv*AA8$Bz4*&oF literal 26720 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 delta 22210 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 S_jdr?%lLP*bA^V4@c#iC-<75S diff --git a/tests/goldens/3ds/pocket-shell.176.auxiliary.png b/tests/goldens/3ds/pocket-shell.176.auxiliary.png index 89343c4b897153c11fa5e56e246ec92cb3532d9f..eb803a39649096f2c02aed266786861b5f8f7be9 100644 GIT binary patch literal 11415 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 P90RI~n(#__^SA#4r&NBH delta 11059 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 B8%+QJ diff --git a/tests/goldens/3ds/pocket-shell.214.auxiliary.png b/tests/goldens/3ds/pocket-shell.214.auxiliary.png index 016660aa42bfdd155c077072849859ef80493d9c..035d90661a7f3e61828f69d06461a3d5ca847747 100644 GIT binary patch delta 24133 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 L>P(3lCj9>ZE%$d5 delta 24128 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 diff --git a/tests/goldens/3ds/pocket-shell.3.auxiliary.png b/tests/goldens/3ds/pocket-shell.3.auxiliary.png index e29beeecf4931a9044feafc63a9e6ff1017035be..6886add9a256e7a49fa4c49ccb27026310a62d26 100644 GIT binary patch delta 2796 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 delta 2786 zcmah|dpOgJ8~<)5a|w-ub>x!Jam^)h$c8R*s}vS1W4Y9ZmU1cE7rEq86vYlvoX9N} z4PleZ99g77Wo53@1w$Cdj`Mqdzu$kq=l4GE^S;mXKJWASyw~DHC^Zq9xd(!yY11RY zCf}A+y>yX8!Xb?W_cDx|)Z@qWSo35j{r3fGx1X!WLjBt#!{hhh^vWQ`M~*e0tTxwt z1i?3(uu!oH9Ub!3{I@={4dZQj=VVt~p2>z!vDpQYAe(|JNV^xlT=0=laOOKTsQTmF z_2rb#Cl{JaXwLq~G)Yudn2|)I&Ds%ARc@D6%T+dp@g^=hV5C1};IcxJMYLY0rb#xi z>;$Fj@Ct;J2{CY>sFk*ZKf%h-omdpV5ng9^el1CQ-&EFjqFoKnLapi9fV!Wb=9%HO z#-5XvrM=Dc$s3#Le$vwFDj^2fgthYFAq*fsOV618SKF%jEuPQ24`rAV|2FXIO_JXI zz^zhPF&j||Vq-*m7DljuA4quQTHr)-1hivYvNSkfR++VeTQ}+O<)@tb0ofE<{_&>X z>bpeRxIVVkAc0TavB5_!v9<=T8Jou8EnEO?KTVV=Cc8i_8vuL9S+0To&0RjQK+m(;aNGyk{*Uep*5g!? zYUoFz{$yco)i1V~eUxAC$@wD)i{el$+hjo3qL34{*@$Ig4Z=;1b(-qLmf0j7QD=3a z0`KWs8p@eK(*1(-O5IgWCAklw@KMY@Pb%L`5iODpO{=T|z{``4=IR(olK(Vgj*wX*GXl&zFAG%-o_)O@ z>s?ozbpmQh$=jB+;X(9 zNr8~#jT{=o8wgiy1a<5EdFn3;H&(s%$Gv0H6Ghj%_$}WJ(8gi{0sGwBNz3@KZ({c6}Ls4sr9NvWAm5+mMD2>$XnVsSWtdT^eSzxUWxIB z@A0dshiUcMTVUVr6(UsrvPmF}N^kdlKA)i%dpZO@v@3EK!H^OtX!UySlv!S7Ja1NU zM$-NHk~Sr9zrI~Lozc-(8K@094h-f9r~{R-vQKLWR4q;Kpiyh=LobU z*WN3(DXeLD2DLDKdojN_#8bcZL`|N{FSvCG_$ zh&|ik25mr(h++3Y(#ddy85#ce;O0ALLb>-9+kTV8Cr>R66iRR0wJJ2qm)B&PUc|PsU*1U0dKp+&0 z9r2SRuS~c|;(RI+eSH(|0}-Pc=aSx#Am6THtUHfax9jmT&Luw{@>}wdnNECS7+<1X z^eyqpS)~W(ZoZf>KGgZsNoZVwYC(Y4HmC0id_Ci?X>Y1ZX_SDee}bv+6H#lWj$0b; z19_z=w)KrFd146kol92`uM|Ns$%l>_n(`7I5Rcg1aS3Qud5Jpl0%=6dWRlP4dbQ}# zE9yPC)OP|aOkK=ra9h+=%7M?f4$L6QV`OA_^w?O~(G{A^>K~Jq1L=#E6X&1AywCUb zfW&Y=WX-n8fit&3o_2kh$iasv7c>5T!tL@j<5u_CPG-}O7fZd}eR*J5BfhIqYsAL- zYm=xTS+`4oL@-CsW80Bhc9kRMwz(tUQi39|!-IT>A1RuYnH3%EyNRADlIYubmIV{^ z^+c4aSO{pBdEYF2xt#FzQN4zCs|0-KmaF?T}3WS`b&1$++@RETNzQN)Y~)p$R^1}^VK30S<@yYf6iLjmE`1y zSNpkr95S`D;k7$Hk+e;{i$#bEJ+NLg_eKzoY1=QgZS4;be*Y;lUC3|Ys_>K|q}d4@ zi8t?{<8gMT^L(*To(A)ds@5^si!e49R-YlB&e&VJW(V9oGlqxHFOE-nIc26VTCv|v zNuQ*d#DL^JEu~Ubi#!Rku)HHi_SSG$;ZA+d@+#9zBJ?MX@qA3J-G8;F!M_q^&{dHS zu>5H?Ak;CX$K<^ExJo=LUa>$6XKT_B3WvaSyPfZ}@9SKn?#&UPv)#!r5SB+QdwKhg zXBmHLOd|145vf+NuhUpoaY*BB_DJVt^lyXk@^34a<*# zDw0H#L?12&mFHU~H|54;6hca1`;w#oh#~d*Msa4=H&YK8xmgh-4q|C~-Ms^?;91lA z>Ol%SzDtxkKrFy3VS;jLTp`YPW*QtH5~w z?tE>C3@QF)!JWih_l=VImuH6x`nMa#y5>4Bim&ca7T#4TPhuS7D3&T(n9&2Ub6wB3 z&EBO6Ew$9@G&0Cz1T*D@shp>cF30!{Q`lYlsp4 zxV};rOEd3*iX#xDA^B_+k6yC7=QnIb^#>$uB~IkXb5~x@cLG~-?6BLRr}nt`zX3N{ BXDt8# diff --git a/tests/goldens/3ds/pocket-shell.48.auxiliary.png b/tests/goldens/3ds/pocket-shell.48.auxiliary.png index 06eaa9a1e59e6848656d2ad3299c534a34eabb24..11acf52d397a4cef269538dabbc8576b81449d54 100644 GIT binary patch literal 24549 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 literal 24546 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 diff --git a/tests/goldens/3ds/pocket-shell.60.auxiliary.png b/tests/goldens/3ds/pocket-shell.60.auxiliary.png index c4ea5bf43bab15ccb456796e2c7ad8bf39b85252..74946a4b6378e65b5f152f97602b56829a45feff 100644 GIT binary patch literal 10146 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 literal 10139 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 diff --git a/tests/goldens/3ds/pocket-shell.84.auxiliary.png b/tests/goldens/3ds/pocket-shell.84.auxiliary.png index 832908f1600276b7297a011d8f2a4d67d819e588..d82d1414332e1aaecf40fdc7bef3449aed7ef744 100644 GIT binary patch delta 22460 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 delta 22438 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 fjNTWxWittL{b7#u>35w2fcR)?=-e$+vkdtk> { describe("pocketsh", () => { function fakeApi(): { api: ShellApi; log: string[] } { const log: string[] = []; + let tz = 0; const api: ShellApi = { apps: () => ["term", "clock"], windows: () => [{ id: 1, app: "term", title: "term", ws: 1, focused: true }], @@ -323,7 +336,7 @@ describe("pocketsh", () => { layout: () => "dwindle", wallpaper: () => "road", uptimeSeconds: () => 3725, - now: () => new Date(2000, 0, 1, 9, 41, 0), + now: () => civilFromEpoch(Date.UTC(2000, 0, 1, 9, 41, 0)), host: () => "3ds", open: (app) => (app === "clock" ? 2 : null), close: (id) => { @@ -336,6 +349,11 @@ describe("pocketsh", () => { log.push(`layout ${layout}`); }, nextWallpaper: () => "lake", + timezone: () => tz, + setTimezone: (minutes: number) => { + tz = minutes; + log.push(`tz ${minutes}`); + }, keys: () => [{ title: "L", rows: [{ keys: "L + B", what: "close" }] }], }; return { api, log }; @@ -363,10 +381,53 @@ describe("pocketsh", () => { test("completion and clock formatting", () => { expect(complete("la")).toEqual(["layout"]); - expect(complete("")).toHaveLength(14); - expect(formatClock(new Date(2000, 0, 1, 0, 5), false)).toBe("00:05"); - expect(formatClock(new Date(2000, 0, 1, 13, 5), true)).toBe("01:05"); - expect(formatClock(new Date(2000, 0, 1, 0, 5), true)).toBe("12:05"); + expect(complete("")).toHaveLength(15); + const at = (h: number, m: number) => civilFromEpoch(Date.UTC(2000, 0, 1, h, m, 0)); + expect(formatClock(at(0, 5), false)).toBe("00:05"); + expect(formatClock(at(13, 5), true)).toBe("01:05"); + expect(formatClock(at(0, 5), true)).toBe("12:05"); expect(formatUptime(59)).toBe("0m 59s"); }); + + // The device's RTC epoch is sound but QuickJS's breakdown of it is not, so + // every displayed field comes from this arithmetic instead of Date methods. + test("civil time is derived from the epoch alone", () => { + const cases: [number, string, string][] = [ + [Date.UTC(1970, 0, 1, 0, 0, 0), "Thu Jan 1 1970", "00:00"], + [Date.UTC(2000, 1, 29, 23, 59, 59), "Tue Feb 29 2000", "23:59"], // leap year + [Date.UTC(2026, 8, 2, 5, 24, 49), "Wed Sep 2 2026", "05:24"], // the reading on hardware + [Date.UTC(2100, 2, 1, 12, 0, 0), "Mon Mar 1 2100", "12:00"], // 2100 is not a leap year + ]; + for (const [ms, date, clock] of cases) { + const civil = civilFromEpoch(ms); + expect(formatDate(civil)).toBe(date); + expect(formatClock(civil)).toBe(clock); + } + // Whole seconds, and the offset shifts the wall clock without touching the epoch. + expect(civilFromEpoch(Date.UTC(2026, 8, 2, 5, 24, 49)).second).toBe(49); + expect(formatClock(civilFromEpoch(Date.UTC(2026, 8, 2, 5, 24, 0), 8 * 60))).toBe("13:24"); + expect(formatDate(civilFromEpoch(Date.UTC(2026, 8, 2, 23, 30, 0), 60))).toBe("Thu Sep 3 2026"); + }); + + test("the operator can state the clock offset the console cannot", () => { + const { api } = fakeApi(); + expect(run("tz", api)).toEqual(["UTC"]); + expect(run("tz +8", api)).toEqual(["clock is UTC+08:00"]); + expect(run("tz", api)).toEqual(["UTC+08:00"]); + expect(run("tz -5:30", api)).toEqual(["clock is UTC-05:30"]); + expect(run("tz 0", api)).toEqual(["clock is UTC"]); + expect(run("tz +7:07", api)[0]).toContain("try"); + expect(run("tz 99", api)[0]).toContain("try"); + expect(parseOffset("+05:45")).toBe(345); + expect(formatOffset(-330)).toBe("-05:30"); + }); + + test("a nonsensical timezone reading is refused rather than frozen in", () => { + const ms = Date.UTC(2026, 8, 2, 5, 0, 0); + const local = (h: number, m = 0) => ({ getHours: () => h, getMinutes: () => m }) as Date; + expect(detectOffsetMinutes(ms, local(13))).toBe(8 * 60); // a real zone + expect(detectOffsetMinutes(ms, local(5))).toBe(0); + expect(detectOffsetMinutes(ms, local(6, 30))).toBe(90); // quarter-hour zones exist + expect(detectOffsetMinutes(ms, local(5, 7))).toBe(0); // 7 minutes is not a zone + }); }); From 4ea6170e84f6cb54d6450b53ad159019c1e1d6ed Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:43:32 -0700 Subject: [PATCH 04/27] =?UTF-8?q?feat(ipodtouch4):=20Pocket=20Remote=20?= =?UTF-8?q?=E2=80=94=20an=20Omarchy=20touch=20companion,=20landscape,=20ov?= =?UTF-8?q?er=20the=20svc=20wire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A second app for the iPod touch 4: a 480x320 landscape remote for an Omarchy desktop. The iPod mirrors Hyprland — workspaces on a strip, the focused monitor as a live miniature of tiles, volume and brightness on two rails, the theme's palette on every node — and drives it: tap a tab to switch, tap a tile to focus, hold to close, drag onto a tile to swap or onto a tab to move, rails follow the thumb relatively, a dock of nine, a pad with the long tail grouped like Omarchy's menu, a keyboard that types into the focused window. Every command travels as an id from one table both ends read; the daemon runs exactly what Omarchy's own keybinding runs. Host side: - hosts/iphone2g/svcwire.{c,h}: the legacy Apple hosts' first network path, a frame-pumped non-blocking port of the 3DS PKNT transport (spec ops 30..32), compiled in only under POCKET_SVC_WIRE. - Landscape on the portrait panel: the window stays 320x480, the content view turns a quarter turn about its centre; touches and the GL drawable follow. The resolver admits a native viewport that fills the panel transposed and reports the transposed physical size. - tools/ipodtouch4.ts knows two apps (POCKETJS_IPODTOUCH4_APP): own bundle, executable, URL scheme and receipt paths, so Clear and Remote coexist; the receipt carries the plan's drawable; a keep-awake flag disables the idle timer for the remote. Daemon (apps/pocket-remote/host, Node on the Omarchy machine as a systemd user unit): Hyprland over its two sockets, debounced snapshots under the 8 KiB poll cap, levels via Omarchy's own scripts, theme from colors.toml, approval of new devices through hyprland-dialog. tools/pocket-remote.ts deploys it, tails it, and runs a relay (ssh tunnel + beacon) for a laptop whose ufw drops the wire port. Verified: full gate 13/13, sim drives hello/theme/snapshot/tap, the iPod found the relay's beacon and connected to the daemon; hardware capture at 960x640 shows the desk mirroring the laptop. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 182 +++++ apps/pocket-remote/actions.ts | 233 +++++++ apps/pocket-remote/app.tsx | 73 ++ apps/pocket-remote/connect.tsx | 78 +++ apps/pocket-remote/desk.tsx | 640 ++++++++++++++++++ apps/pocket-remote/host/hypr.ts | 273 ++++++++ apps/pocket-remote/host/omarchy.ts | 246 +++++++ apps/pocket-remote/host/pocket-remote.service | 23 + apps/pocket-remote/host/serve.ts | 494 ++++++++++++++ apps/pocket-remote/host/wire.ts | 109 +++ apps/pocket-remote/icons.tsx | 289 ++++++++ apps/pocket-remote/keyboard.tsx | 234 +++++++ apps/pocket-remote/layout.ts | 203 ++++++ apps/pocket-remote/main.tsx | 5 + apps/pocket-remote/pad.tsx | 261 +++++++ apps/pocket-remote/pocket.json | 24 + apps/pocket-remote/protocol.ts | 230 +++++++ apps/pocket-remote/store.ts | 579 ++++++++++++++++ apps/pocket-remote/theme.ts | 157 +++++ framework/src/manifest/resolve.ts | 72 +- hosts/iphone2g/pocket_runtime.c | 46 ++ hosts/iphone2g/runtime.c | 43 +- hosts/iphone2g/svcwire.c | 630 +++++++++++++++++ hosts/iphone2g/svcwire.h | 48 ++ hosts/ipodtouch4/runtime.c | 16 + tests/ipodtouch4-profile.test.ts | 39 +- tests/platform-contracts.test.ts | 1 + tests/pocket-remote-sim.test.ts | 118 ++++ tests/pocket-remote.test.ts | 354 ++++++++++ tools/ipodtouch4-profile.ts | 5 +- tools/ipodtouch4.ts | 220 ++++-- tools/pocket-remote.ts | 226 +++++++ tools/test.ts | 7 + 33 files changed, 6083 insertions(+), 75 deletions(-) create mode 100644 apps/pocket-remote/README.md create mode 100644 apps/pocket-remote/actions.ts create mode 100644 apps/pocket-remote/app.tsx create mode 100644 apps/pocket-remote/connect.tsx create mode 100644 apps/pocket-remote/desk.tsx create mode 100644 apps/pocket-remote/host/hypr.ts create mode 100644 apps/pocket-remote/host/omarchy.ts create mode 100644 apps/pocket-remote/host/pocket-remote.service create mode 100644 apps/pocket-remote/host/serve.ts create mode 100644 apps/pocket-remote/host/wire.ts create mode 100644 apps/pocket-remote/icons.tsx create mode 100644 apps/pocket-remote/keyboard.tsx create mode 100644 apps/pocket-remote/layout.ts create mode 100644 apps/pocket-remote/main.tsx create mode 100644 apps/pocket-remote/pad.tsx create mode 100644 apps/pocket-remote/pocket.json create mode 100644 apps/pocket-remote/protocol.ts create mode 100644 apps/pocket-remote/store.ts create mode 100644 apps/pocket-remote/theme.ts create mode 100644 hosts/iphone2g/svcwire.c create mode 100644 hosts/iphone2g/svcwire.h create mode 100644 tests/pocket-remote-sim.test.ts create mode 100644 tests/pocket-remote.test.ts create mode 100644 tools/pocket-remote.ts diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md new file mode 100644 index 000000000..369d5bc7c --- /dev/null +++ b/apps/pocket-remote/README.md @@ -0,0 +1,182 @@ +# Pocket Remote + +An Omarchy companion on the iPod touch 4: a landscape touch surface that +mirrors the desktop and drives it. **The iPod runs the PocketJS guest; a +small daemon on the Omarchy machine mirrors Hyprland into snapshots and runs +the same commands the keyboard bindings run.** Nothing on the wire is a +command string — the device sends action ids from `actions.ts`, the daemon +looks them up. + +``` + iPod touch 4 (480x320 landscape) WiFi Omarchy machine + ┌────────────────────────────────┐ PKNT/TCP ┌─────────────────────────┐ + │ apps/pocket-remote (Solid) │◀────────────▶│ host/serve.ts (Node) │ + │ hosts/iphone2g/svcwire.c │ beacon UDP │ .socket.sock requests │ + └────────────────────────────────┘ │ .socket2.sock events │ + │ omarchy-* / wtype │ + └─────────────────────────┘ +``` + +## The screen + +``` +┌────┬───────────────────────────────────────────────────┬────┐ +│ ☀ │ 1 2 3 + dwindle ⏮ ▷ ⏭ │ ♪ │ strip 32 px +│ ├───────────────────────────────────────────────────┤ │ +│ │ │ │ +│ b │ live miniature of the focused monitor │ v │ stage 228 px +│ r │ tiles = windows, accent border = focus │ o │ +│ i │ │ l │ +│ ├───────────────────────────────────────────────────┤ │ +│ │ Ω >_ ◍ ▤ ✎ ⛶ ◱ ▣ ⌨ ⋯ │ │ dock 60 px +└────┴───────────────────────────────────────────────────┴────┘ + 40px 400 px 40px +``` + +The layout does not move. Every element has one place, every place one job, +so the remote can be used with a glance and, after a day, without one. + +- **Rails** (left brightness, right volume). A drag anywhere on a rail moves + the level **relatively** — touching a rail never jumps the level to the + finger, the failure of every absolute slider on a thin track. A full-track + drag spans 0–100 %. A tap on the track nudges 5 %, the keyboard's own step. + The cap toggles: mute on the right, nightlight on the left. Thumbs rest at + the edges when the device is held in two hands, and the rails stay live + under every sheet. +- **Strip**. One tab per workspace Hyprland has, the active one filled, plus + one empty tab so there is always somewhere new to go (the Omarchy bar's + rule). Tap switches. Hold a tab to bring the focused window there and + follow it. The badge names the active workspace's layout and toggles it + (Omarchy's SUPER+L). Media transport sits at the right end. +- **Stage**. The focused monitor scaled to fit, every window a tile labelled + by class and title, the focused one bordered in the accent. **Tap focuses. + Hold closes** — a bar fills across the tile over 0.6 s; lift early and + nothing happens. Drag a tile onto another to swap them (Hyprland's + `swapwindow` in the direction between their centres), onto a strip tab to + move it there. Swipe empty stage to step workspaces. The stage is direct + manipulation of the real desktop: the snapshot comes from `hyprctl clients` + geometry, so a tile is exactly where the window is. +- **Dock**. Menu, Terminal, Browser, Files, Editor, Full screen, Float, + Screenshot, Type, More. Nine things a remote is reached for; each runs the + command Omarchy binds to the equivalent key. +- **Pad** (More). Everything else, grouped the way Omarchy's own menu groups + it — Window, Desk, Toggle, Capture, Theme, System — as labelled keys on one + sheet. **Destructive keys take a hold** (close, suspend, close all) and say + so when tapped. The Theme page lists the installed themes; the active one is + filled. +- **Type**. A landscape keyboard sends each key to the focused window + (`wtype`). Nothing is buffered on the device: the desktop shows the truth. + +Every touch target answers a press with a tint overlay that lingers a few +frames after release — a capacitive panel has no hover and the remote's own +feedback is the only local one; the action itself is confirmed on the +desktop. A toast over the dock names the last action. + +## Why these choices + +**A tiling desktop is addressable.** Workspaces have numbers, windows have +addresses, actions have names. That is why the remote has no cursor and no +dial: the Siri Remote needs a trackpad because tvOS is spatial; Omarchy is a +namespace, and a namespace wants direct targets. The stage is the one +spatial element and it is a picture of the real arrangement, not a proxy. + +**The remote wears the theme.** The daemon reads Omarchy's `colors.toml` +for the current theme and every themed node repaints through `jump()` on its +mirror when the palette changes (theme.ts). Class literals carry Tokyo Night, +Omarchy's default, so the first frame looks right before the daemon speaks. +Because a class string is a baked literal, a runtime colour can only reach a +node as a prop write; pressed states therefore live on separate overlay nodes +rather than as class flips on themed ones. + +**Motion is a pool, not a tree.** Tiles live in a fixed pool of 24 slots +(protocol `WINDOWS_MAX`) keyed by window address. A snapshot re-targets the +pool; the frame loop eases each slot toward its target and writes geometry +straight to the node mirror. Reordering never happens, so the `` +adjacent-swap reconcile path is never exercised, and an idle frame writes +nothing. + +**Optimistic where the desktop will agree.** Tapping a tab commits the new +active workspace locally and re-targets the stage before the daemon confirms; +a snapshot carries every workspace's windows, so the new stage is already +known. Level drags update locally and send at most every three frames; host +echoes are ignored for half a second after a release so the rail never +snaps back on the way. + +## The wire + +Spec ops 30–32 (`svcOpen`/`svcPoll`/`svcSend`) over the SVC WIRE (PKNT) TCP +transport, exactly the mailbox the PSP, Vita and 3DS companions speak. +`hosts/iphone2g/svcwire.c` is the legacy Apple hosts' transport — a port of +the 3DS one (non-blocking BSD sockets pumped once per guest frame, no +threads) — compiled in only when `POCKET_SVC_WIRE` is defined, so every +other legacy Apple build keeps its op table byte-identical. + +Lines are JSON (`protocol.ts`). Host → device: `hello`, `auth`, `state`, +`levels`, `theme`, `toast`. Device → host: `hello`, `act`, `ws`, `win`, +`vol`, `bri`, `mute`, `media`, `type`, `key`, `theme`. **A snapshot has to +fit one 8 KiB poll batch**, so titles are clipped to 28 code points, windows +to the 24 most recently focused, and coordinates are integers. + +Discovery: the daemon (or the relay) broadcasts the PKNT beacon once a +second; the device connects to the datagram's source. A host override file +at `/private/var/tmp/pocketjs-svc-host.txt` on the device (one line, +`a.b.c.d[:port]`) skips discovery for broadcast-hostile networks. + +## Trust + +The LAN is not a trust boundary. The daemon accepts commands only from +addresses in `~/.local/state/pocket-remote/allowed.json`; a new device is put +on hold and `hyprland-dialog` asks on the desktop whether to allow it. An +unanswered dialog is not a refusal — the device is asked again next time. +Until allowed, a device sees the mirror but every command is dropped. The +action vocabulary is closed (`actions.ts`); typed text goes through `wtype` +capped at 256 characters per line; keysyms are a short allow-list. + +## Running it + +On the Omarchy machine (`ssh` alias `x1nano`; Node comes from mise): + +``` +bun tools/pocket-remote.ts deploy-host x1nano # copy the daemon, install + start the user unit +bun tools/pocket-remote.ts logs x1nano # journal tail +``` + +Omarchy ships ufw with incoming DROP, so the iPod cannot reach tcp 8622 on +the laptop directly. Until `sudo ufw allow from 172.20.8.0/21 to any port 8622 +proto tcp` has been run there (and the unit started with `--beacon`), run the +relay on the Mac — an ssh tunnel over the port that is open, plus the beacon: + +``` +bun tools/pocket-remote.ts relay x1nano # local 8623 -> x1nano:8622, beacon on 8621 +``` + +On the iPod: + +``` +POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 deploy +POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 launch +``` + +The app coexists with Pocket Clear: its own bundle, executable, URL scheme +and receipt files (`tools/ipodtouch4.ts` `IPODTOUCH4_APPS`). + +## Landscape on a portrait panel + +The plan asks for 480x320 native. The host keeps the window at the panel's +own 320x480, rotates the content view a quarter turn about its centre +(home button on the right) and lets the CAEAGLLayer's drawable follow the +view's bounds, so GL renders 960x640 and UIKit's `locationInView:` already +reports touches in the view's rotated space. The resolver admits a native +viewport that fills the panel in either orientation and reports the +transposed physical size, which `status` and `capture` check against. + +## Testing + +- `tests/pocket-remote.test.ts` — wire constants pinned to spec.ts, framing, + protocol clipping, the action table's invariants, layout arithmetic, the + Hyprland → snapshot reduction, Omarchy output parsers. +- `tests/pocket-remote-sim.test.ts` — the built bundle in the headless sim: + hello, theme, snapshot, tiles settle, a tap on the strip switches + workspace, the pending-approval screen. +- `bun tools/pocket-remote.ts client 127.0.0.1:8623 --for 4` — a scripted + device against a live daemon. diff --git a/apps/pocket-remote/actions.ts b/apps/pocket-remote/actions.ts new file mode 100644 index 000000000..937894c0a --- /dev/null +++ b/apps/pocket-remote/actions.ts @@ -0,0 +1,233 @@ +// apps/pocket-remote/actions.ts — the whole vocabulary the remote can ask the +// laptop for, in one table read by BOTH ends: the device renders labels and +// groups from it, the daemon runs exactly the command it names and nothing +// else. The wire carries an action id, never a command string, so a device +// on the LAN can only ever pick from this list. +// +// Every command is the one Omarchy binds to the equivalent key +// (/usr/share/omarchy/default/hypr/bindings/*.lua, Omarchy 4.0) or the one +// its menu runs (omarchy-menu.jsonc), so the remote behaves exactly like the +// keyboard would. + +export type ActionGroup = + | "launch" + | "window" + | "workspace" + | "toggle" + | "capture" + | "style" + | "system" + | "media"; + +export type ActionRun = + /** argv, spawned directly (no shell). */ + | { exec: string[] } + /** `hyprctl dispatch <...>` over the Hyprland socket. */ + | { dispatch: string }; + +export interface ActionDef { + id: ActionId; + label: string; + group: ActionGroup; + run: ActionRun; + /** Destructive: the device requires a press-and-hold, not a tap. */ + hold?: true; +} + +export type ActionId = + // launch + | "menu" + | "apps" + | "terminal" + | "browser" + | "files" + | "editor" + | "keybindings" + | "emoji" + | "clipboard" + // window + | "close" + | "fullscreen" + | "maximize" + | "float" + | "pseudo" + | "split" + | "pop" + | "group" + | "cycle" + | "focusL" + | "focusR" + | "focusU" + | "focusD" + | "swapL" + | "swapR" + | "swapU" + | "swapD" + | "widen" + | "narrow" + // workspace + | "wsPrev" + | "wsNext" + | "wsBack" + | "scratchpad" + | "toScratchpad" + | "layout" + // toggle + | "nightlight" + | "awake" + | "bar" + | "silence" + | "gaps" + | "transparency" + | "dismiss" + // capture + | "screenshot" + | "record" + | "recordStop" + | "ocr" + | "color" + | "qr" + // style + | "bgNext" + | "themePicker" + // system + | "lock" + | "screensaver" + | "suspend" + | "closeAll" + // media + | "play" + | "next" + | "prev" + | "outputSwitch"; + +const omarchy = (...argv: string[]): ActionRun => ({ exec: argv }); +const dispatch = (line: string): ActionRun => ({ dispatch: line }); + +export const ACTIONS: readonly ActionDef[] = [ + // -- launch (SUPER + ...) -------------------------------------------------- + { id: "menu", label: "Menu", group: "launch", run: omarchy("omarchy-menu", "toggle") }, + { id: "apps", label: "Apps", group: "launch", run: omarchy("omarchy-menu", "toggle", "apps") }, + { id: "terminal", label: "Terminal", group: "launch", run: omarchy("omarchy-launch-terminal") }, + { id: "browser", label: "Browser", group: "launch", run: omarchy("omarchy-launch-browser") }, + { id: "files", label: "Files", group: "launch", run: omarchy("omarchy-launch-nautilus") }, + { id: "editor", label: "Editor", group: "launch", run: omarchy("omarchy-launch-editor") }, + { id: "keybindings", label: "Keys", group: "launch", run: omarchy("omarchy-menu-keybindings") }, + { id: "emoji", label: "Emoji", group: "launch", run: omarchy("omarchy-shell", "shell", "toggle", "omarchy.emojis") }, + { id: "clipboard", label: "Clipboard", group: "launch", run: omarchy("omarchy-menu-clipboard") }, + + // -- window ---------------------------------------------------------------- + { id: "close", label: "Close", group: "window", run: dispatch("killactive"), hold: true }, + { id: "fullscreen", label: "Full screen", group: "window", run: dispatch("fullscreen 0") }, + { id: "maximize", label: "Full width", group: "window", run: dispatch("fullscreen 1") }, + { id: "float", label: "Float", group: "window", run: dispatch("togglefloating") }, + { id: "pseudo", label: "Pseudo", group: "window", run: dispatch("pseudo") }, + { id: "split", label: "Split", group: "window", run: dispatch("togglesplit") }, + { id: "pop", label: "Pop out", group: "window", run: omarchy("omarchy-hyprland-window-pop") }, + { id: "group", label: "Group", group: "window", run: dispatch("togglegroup") }, + { id: "cycle", label: "Next window", group: "window", run: dispatch("cyclenext") }, + { id: "focusL", label: "Focus left", group: "window", run: dispatch("movefocus l") }, + { id: "focusR", label: "Focus right", group: "window", run: dispatch("movefocus r") }, + { id: "focusU", label: "Focus up", group: "window", run: dispatch("movefocus u") }, + { id: "focusD", label: "Focus down", group: "window", run: dispatch("movefocus d") }, + { id: "swapL", label: "Swap left", group: "window", run: dispatch("swapwindow l") }, + { id: "swapR", label: "Swap right", group: "window", run: dispatch("swapwindow r") }, + { id: "swapU", label: "Swap up", group: "window", run: dispatch("swapwindow u") }, + { id: "swapD", label: "Swap down", group: "window", run: dispatch("swapwindow d") }, + { id: "widen", label: "Wider", group: "window", run: dispatch("resizeactive 100 0") }, + { id: "narrow", label: "Narrower", group: "window", run: dispatch("resizeactive -100 0") }, + + // -- workspace ------------------------------------------------------------- + { id: "wsPrev", label: "Previous", group: "workspace", run: dispatch("workspace e-1") }, + { id: "wsNext", label: "Next", group: "workspace", run: dispatch("workspace e+1") }, + { id: "wsBack", label: "Former", group: "workspace", run: dispatch("workspace previous") }, + { id: "scratchpad", label: "Scratchpad", group: "workspace", run: dispatch("togglespecialworkspace scratchpad") }, + { id: "toScratchpad", label: "To scratchpad", group: "workspace", run: dispatch("movetoworkspacesilent special:scratchpad") }, + { id: "layout", label: "Layout", group: "workspace", run: omarchy("omarchy-hyprland-workspace-layout-toggle") }, + + // -- toggle ---------------------------------------------------------------- + { id: "nightlight", label: "Nightlight", group: "toggle", run: omarchy("omarchy-toggle-nightlight") }, + { id: "awake", label: "Stay awake", group: "toggle", run: omarchy("omarchy-toggle-idle") }, + { id: "bar", label: "Menu bar", group: "toggle", run: omarchy("omarchy-toggle-bar") }, + { id: "silence", label: "Silence", group: "toggle", run: omarchy("omarchy-toggle-notification-silencing") }, + { id: "gaps", label: "Gaps", group: "toggle", run: omarchy("omarchy-hyprland-window-gaps-toggle") }, + { id: "transparency", label: "Transparency", group: "toggle", run: omarchy("omarchy-hyprland-window-transparency-toggle") }, + { id: "dismiss", label: "Dismiss alerts", group: "toggle", run: omarchy("omarchy-shell", "notifications", "dismissAll") }, + + // -- capture --------------------------------------------------------------- + { id: "screenshot", label: "Screenshot", group: "capture", run: omarchy("omarchy-capture-screenshot") }, + { id: "record", label: "Record", group: "capture", run: omarchy("omarchy-capture-screenrecording") }, + { id: "recordStop", label: "Stop record", group: "capture", run: omarchy("omarchy-capture-screenrecording", "--stop-recording") }, + { id: "ocr", label: "Copy text", group: "capture", run: omarchy("omarchy-capture-text") }, + { id: "color", label: "Pick colour", group: "capture", run: omarchy("hyprpicker", "-a") }, + { id: "qr", label: "Read QR", group: "capture", run: omarchy("omarchy-capture-qr") }, + + // -- style ----------------------------------------------------------------- + { id: "bgNext", label: "Next wallpaper", group: "style", run: omarchy("omarchy-theme-bg-next") }, + { id: "themePicker", label: "Theme menu", group: "style", run: omarchy("omarchy-menu", "toggle", "theme") }, + + // -- system ---------------------------------------------------------------- + { id: "lock", label: "Lock", group: "system", run: omarchy("omarchy-system-lock") }, + { id: "screensaver", label: "Screensaver", group: "system", run: omarchy("omarchy-launch-screensaver", "force") }, + { id: "suspend", label: "Suspend", group: "system", run: omarchy("systemctl", "suspend"), hold: true }, + { id: "closeAll", label: "Close all", group: "system", run: omarchy("omarchy-hyprland-window-close-all"), hold: true }, + + // -- media ----------------------------------------------------------------- + { id: "play", label: "Play / pause", group: "media", run: omarchy("omarchy-shell", "media", "playPause") }, + { id: "next", label: "Next track", group: "media", run: omarchy("omarchy-shell", "media", "next") }, + { id: "prev", label: "Previous track", group: "media", run: omarchy("omarchy-shell", "media", "previous") }, + { id: "outputSwitch", label: "Audio output", group: "media", run: omarchy("omarchy-audio-output-switch") }, +]; + +const BY_ID = new Map(ACTIONS.map((action) => [action.id, action])); + +export function actionById(id: string): ActionDef | undefined { + return BY_ID.get(id as ActionId); +} + +export function actionsOf(group: ActionGroup): ActionDef[] { + return ACTIONS.filter((action) => action.group === group); +} + +/** The dock: the nine things a remote is reached for, in reading order. The + * tenth slot opens the pad with everything else. */ +export const DOCK: readonly ActionId[] = [ + "menu", + "terminal", + "browser", + "files", + "editor", + "fullscreen", + "float", + "screenshot", +]; + +/** Pad pages, in tab order, with the actions each shows. */ +export const PAD_PAGES: readonly { id: ActionGroup | "theme"; label: string; actions: ActionId[] }[] = [ + { + id: "window", + label: "Window", + actions: ["fullscreen", "maximize", "float", "pseudo", "split", "pop", "group", "cycle", "widen", "narrow", "close"], + }, + { + id: "workspace", + label: "Desk", + actions: ["wsPrev", "wsNext", "wsBack", "scratchpad", "toScratchpad", "layout", "apps", "keybindings", "emoji", "clipboard"], + }, + { + id: "toggle", + label: "Toggle", + actions: ["nightlight", "awake", "bar", "silence", "gaps", "transparency", "dismiss", "outputSwitch"], + }, + { + id: "capture", + label: "Capture", + actions: ["screenshot", "record", "recordStop", "ocr", "color", "qr"], + }, + { id: "theme", label: "Theme", actions: ["bgNext", "themePicker"] }, + { + id: "system", + label: "System", + actions: ["lock", "screensaver", "suspend", "closeAll"], + }, +]; diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx new file mode 100644 index 000000000..1975d90f2 --- /dev/null +++ b/apps/pocket-remote/app.tsx @@ -0,0 +1,73 @@ +// apps/pocket-remote/app.tsx — Pocket Remote: an Omarchy companion for the +// iPod touch. Landscape, two-thumb: brightness and volume on the rails, the +// workspace strip on top, a live miniature of the desktop in the middle you +// can touch, the dock below, and a pad with the long tail. The daemon on the +// Omarchy machine mirrors Hyprland into a snapshot and runs exactly the +// commands the keyboard would (actions.ts). See README.md for the design. + +import { Show } from "solid-js"; +import { View } from "@pocketjs/framework/components"; +import { createGesture, type GestureContact } from "@pocketjs/framework/gesture"; +import { Connect } from "./connect.tsx"; +import { Desk, deskHandlers, type GestureHandlers } from "./desk.tsx"; +import { KB_RECT, Keyboard, keyboardHandlers } from "./keyboard.tsx"; +import { within } from "./layout.ts"; +import { Pad, padHandlers } from "./pad.tsx"; +import { createRemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +export default function PocketRemote() { + const store = createRemoteStore(); + // Debug handle for the headless sim test (tests/pocket-remote-sim.test.ts), + // which has no daemon to mirror: it feeds host lines through applyLine. + (globalThis as { __pocketRemote?: unknown }).__pocketRemote = store; + + const connected = () => store.link() === "up"; + // One recogniser for the whole screen. A tap single-fires on one owner, so + // the sheets cannot be separate recognisers layered over the desk; instead + // each contact is routed at its down edge to the surface under it — the + // pad while it is open, the keyboard inside its sheet, the desk otherwise — + // and every later callback for that contact follows the same route. + const desk = deskHandlers(store, () => connected() && store.pad() === null); + const pad = padHandlers(store); + const keyboard = keyboardHandlers(store); + const routes = new Map(); + const pick = (c: GestureContact): GestureHandlers => { + if (store.pad() !== null) return pad; + if (store.kb() && within(c.x, c.y, KB_RECT)) return keyboard; + return desk; + }; + createGesture({ + tapSlop: 8, + panSlop: 8, + longPressSeconds: 0.35, + onDown: (c) => { + if (!connected()) return; + const route = pick(c); + routes.set(c.id, route); + route.onDown?.(c); + }, + // Routes are not cleared on up: onUp and onTap both describe one + // release, and contact ids are reused only by a later onDown. + onTap: (c) => routes.get(c.id)?.onTap?.(c), + onLongPress: (c) => routes.get(c.id)?.onLongPress?.(c), + onPanStart: (c) => routes.get(c.id)?.onPanStart?.(c), + onPanMove: (c) => routes.get(c.id)?.onPanMove?.(c), + onUp: (c) => routes.get(c.id)?.onUp?.(c), + onCancel: (c) => routes.get(c.id)?.onCancel?.(c), + }); + + return ( + + }> + + + + + + + + + + ); +} diff --git a/apps/pocket-remote/connect.tsx b/apps/pocket-remote/connect.tsx new file mode 100644 index 000000000..6697a9679 --- /dev/null +++ b/apps/pocket-remote/connect.tsx @@ -0,0 +1,78 @@ +// apps/pocket-remote/connect.tsx — what the remote shows before it has a +// desktop to mirror: looking for the daemon's beacon, then waiting for the +// laptop to approve this device (the daemon puts a dialog on the desktop), +// then nothing — the desk takes over. A pulse keeps the screen visibly alive +// during the wait, which on a WiFi handheld can take a few seconds. + +import { createEffect, createSignal, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { onFrame } from "@pocketjs/framework/lifecycle"; +import type { RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +export function Connect(p: { store: RemoteStore }) { + const [phase, setPhase] = createSignal(0); + let frames = 0; + onFrame(() => { + frames += 1; + if (frames % 2 === 0) setPhase((frames / 2) % 60); + }); + let ring: NodeMirror | null = null; + createEffect(() => { + if (!ring) return; + const t = phase() / 60; + // A ring that grows and fades, once a second. + jump(ring, "scale", 1 + t * 0.7); + jump(ring, "opacity", 1 - t); + }); + const status = () => { + switch (p.store.link()) { + case "off": + return "this host has no network channel"; + case "search": + return "looking for your Omarchy desktop…"; + case "pending": + return `approve this remote on ${p.store.hostName() || "your laptop"}`; + case "denied": + return `${p.store.hostName() || "the laptop"} declined this remote`; + default: + return ""; + } + }; + return ( + + { + ring = node; + themed("borderAccent")(node); + }} + /> + + + + Pocket Remote + + + + + {status()} + + + + + + a dialog is on the laptop screen + + + + + + an Omarchy companion · PocketJS + + + + ); +} diff --git a/apps/pocket-remote/desk.tsx b/apps/pocket-remote/desk.tsx new file mode 100644 index 000000000..5fbb2e946 --- /dev/null +++ b/apps/pocket-remote/desk.tsx @@ -0,0 +1,640 @@ +// apps/pocket-remote/desk.tsx — the main screen: two rails, the workspace +// strip, the live stage and the dock, plus the one gesture recogniser that +// routes every finger by where it landed. Every painted target answers a +// press with a tint overlay (a capacitive panel has no hover), continuous +// controls follow the finger relatively (touching a rail never jumps the +// level to the finger), and the only destructive act — closing a window — +// is a hold with a visible fill, never a tap. + +import { createEffect, Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import type { GestureContact } from "@pocketjs/framework/gesture"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { type ActionId, actionById, DOCK as DOCK_ACTIONS } from "./actions.ts"; +import { Icon, type IconName } from "./icons.tsx"; +import { + BADGE_W, + BADGE_X, + DOCK, + dockSlotAt, + dockSlotX, + MEDIA_W, + MEDIA_X, + RAIL_CAP_H, + RAIL_LEFT, + RAIL_RIGHT, + RAIL_TRACK_BOTTOM, + RAIL_TRACK_H, + RAIL_TRACK_TOP, + railDelta, + railFill, + STAGE, + STRIP, + SWIPE_PX, + tabAt, + within, +} from "./layout.ts"; +import type { RemoteStore, TileSlot } from "./store.ts"; +import { themed } from "./theme.ts"; + +/** The subset of gesture callbacks a sheet or the desk implements. */ +export type GestureHandlers = { + [K in "onDown" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: (c: GestureContact) => void; +}; + +const DOCK_ICONS: Record = { + menu: "menu", + terminal: "terminal", + browser: "browser", + files: "files", + editor: "editor", + fullscreen: "fullscreen", + float: "float", + screenshot: "screenshot", +}; + +/** Dock captions: a 44 px slot fits about five characters at 12 px, so the + * dock speaks in short words; the pad and the toast use the full labels. */ +const DOCK_LABELS: Record = { + menu: "Menu", + terminal: "Term", + browser: "Web", + files: "Files", + editor: "Edit", + fullscreen: "Full", + float: "Float", + screenshot: "Shot", +}; + +/** Dock slot 8 opens the keyboard, slot 9 the pad; 0..7 are actions. */ +const DOCK_KEYBOARD = 8; +const DOCK_MORE = 9; +const DOCK_ITEMS: readonly { id: string; label: string; icon: IconName }[] = [ + ...DOCK_ACTIONS.map((id) => ({ id, label: DOCK_LABELS[id] ?? actionById(id)!.label, icon: DOCK_ICONS[id]! })), + { id: "keyboard", label: "Type", icon: "keyboard" }, +]; + +// --------------------------------------------------------------------------- +// rails +// --------------------------------------------------------------------------- + +function Rail(p: { store: RemoteStore; side: "left" | "right" }) { + const rect = p.side === "left" ? RAIL_LEFT : RAIL_RIGHT; + const level = () => (p.side === "left" ? p.store.bri() : p.store.vol()); + const pressedId = p.side === "left" ? "rail:bri" : "rail:vol"; + const capId = p.side === "left" ? "cap:bri" : "cap:vol"; + let fill: NodeMirror | null = null; + const paintFill = () => { + if (!fill) return; + const h = railFill(level()); + jump(fill, "height", h); + jump(fill, "insetT", RAIL_TRACK_H - h); + }; + // The fill is geometry, so it moves through jump() as the level changes. + createEffect(() => paintFill()); + const dragging = () => p.store.railDrag()?.rail === (p.side === "left" ? "bri" : "vol"); + const percent = () => `${Math.round(level() * 100)}`; + return ( + + {/* cap: brightness -> nightlight toggle, volume -> mute toggle */} + + + + + + }> + + + + + + {/* track */} + + { + fill = node; + themed("accentFill")(node); + paintFill(); + }} + /> + + {/* value readout while the finger is down */} + + + + {percent()} + + + + + + ); +} + +// --------------------------------------------------------------------------- +// strip +// --------------------------------------------------------------------------- + +function Strip(p: { store: RemoteStore }) { + const tabs = () => p.store.tabs(); + const active = () => p.store.state()?.active ?? -1; + const layoutLabel = () => (p.store.layout() === "scrolling" ? "scroll" : "dwindle"); + return ( + + + {(tab) => ( + + 0 + ? "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#414868]" + : "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#1a1b26]" + } + ref={themed(() => tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface")} + /> + 0 + ? "text-sm font-bold text-[#a9b1d6]" + : "text-sm text-[#565f89]" + } + ref={themed(() => tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim")} + > + {tab().id === 10 ? "0" : `${tab().id}`} + + + + )} + + {/* layout badge */} + + + {layoutLabel()} + + + + {/* media transport */} + + {(op, i) => ( + + + + + + + )} + + + ); +} + +// --------------------------------------------------------------------------- +// stage +// --------------------------------------------------------------------------- + +function Tile(p: { store: RemoteStore; slot: TileSlot }) { + const s = p.slot; + const closing = () => { + const c = p.store.closing(); + return c && c.a === s.a ? c : null; + }; + const dragged = () => p.store.drag()?.a === s.a; + const over = () => p.store.drag()?.over === s.a; + return ( + + + + + {s.label()} + + + + {s.title()} + + + + + { + themed("dangerFill")(node); + // The fill follows the hold: 0..1 of the tile width. + createEffect(() => { + const c = closing(); + jump(node, "width", Math.round((c ? c.progress : 0) * s.cur.w)); + }); + }} + /> + + + ); +} + +function Stage(p: { store: RemoteStore }) { + const empty = () => { + const s = p.store.state(); + return !!s && !s.win.some((w) => w.ws === s.active); + }; + return ( + + + + + empty workspace · swipe for the next + + + + {/* tiles are positioned in screen space; the stage origin is offset */} + + + {(slot) => ( + + + + )} + + + + ); +} + +// --------------------------------------------------------------------------- +// dock +// --------------------------------------------------------------------------- + +function Dock(p: { store: RemoteStore }) { + const focusLabel = () => { + const c = p.store.focusClass(); + return c ? c : ""; + }; + return ( + + + {(item, i) => ( + + + + + + {item().label} + + + + )} + + {/* more */} + + + + + + more + + + + + + + {p.store.toast()} + + + + + + + {focusLabel()} + + + + + ); +} + +// --------------------------------------------------------------------------- +// gesture routing +// --------------------------------------------------------------------------- + +type Target = + | { kind: "rail"; rail: "vol" | "bri" } + | { kind: "cap"; rail: "vol" | "bri" } + | { kind: "tab"; id: number } + | { kind: "badge" } + | { kind: "media"; op: "prev" | "play" | "next" } + | { kind: "tile"; a: string } + | { kind: "stage" } + | { kind: "dock"; slot: number } + | { kind: "none" }; + +function targetAt(store: RemoteStore, x: number, y: number): Target { + if (within(x, y, RAIL_LEFT)) return y < RAIL_CAP_H ? { kind: "cap", rail: "bri" } : { kind: "rail", rail: "bri" }; + if (within(x, y, RAIL_RIGHT)) return y < RAIL_CAP_H ? { kind: "cap", rail: "vol" } : { kind: "rail", rail: "vol" }; + if (within(x, y, STRIP)) { + if (x >= MEDIA_X) { + const i = Math.min(2, Math.floor((x - MEDIA_X) / MEDIA_W)); + return { kind: "media", op: (["prev", "play", "next"] as const)[i]! }; + } + if (x >= BADGE_X && x < BADGE_X + BADGE_W) return { kind: "badge" }; + const tab = tabAt(x, store.tabs()); + return tab ? { kind: "tab", id: tab.id } : { kind: "none" }; + } + if (within(x, y, STAGE)) { + const a = store.windowAt(x, y); + return a ? { kind: "tile", a } : { kind: "stage" }; + } + if (within(x, y, DOCK)) { + const slot = dockSlotAt(x); + return slot === null ? { kind: "none" } : { kind: "dock", slot }; + } + return { kind: "none" }; +} + +function pressId(t: Target): string | null { + switch (t.kind) { + case "rail": + return `rail:${t.rail}`; + case "cap": + return `cap:${t.rail}`; + case "tab": + return `tab:${t.id}`; + case "badge": + return "badge"; + case "media": + return `media:${t.op}`; + case "tile": + return `tile:${t.a}`; + case "dock": + return `dock:${t.slot}`; + default: + return null; + } +} + +/** The desk's touch handlers; app.tsx routes contacts here when no sheet is + * open. `active` gates every callback so a contact that began before a + * sheet opened cannot act after it. */ +export function deskHandlers(store: RemoteStore, active: () => boolean): GestureHandlers { + let down: Target = { kind: "none" }; + let swiping = false; + + // onUp arrives before onTap for one release, and onTap reads `down`, so a + // reset leaves the down target alone; the next onDown overwrites it. + const reset = () => { + store.pressRelease(); + store.setDrag(null); + store.setClosing(null); + store.setRailDrag(null); + swiping = false; + }; + + const tapDock = (slot: number) => { + if (slot === DOCK_MORE) { + store.setPad(store.pad() === null ? 0 : null); + return; + } + if (slot === DOCK_KEYBOARD) { + store.setKb(!store.kb()); + return; + } + const id = DOCK_ACTIONS[slot]; + if (id) store.act(id as ActionId); + }; + + return { + onDown: (c) => { + if (!active()) return; + down = targetAt(store, c.x, c.y); + store.pressDown(pressId(down)); + if (down.kind === "rail") { + store.setRailDrag({ rail: down.rail, start: down.rail === "vol" ? store.vol() : store.bri() }); + } + }, + onTap: (c) => { + if (!active()) return; + const t = down; + store.pressRelease(); + store.setRailDrag(null); + switch (t.kind) { + case "cap": + if (t.rail === "vol") store.toggleMute(); + else store.act("nightlight"); + break; + case "tab": + store.workspace(t.id); + break; + case "badge": + store.act("layout"); + break; + case "media": + store.media(t.op); + store.say(t.op === "play" ? "play / pause" : t.op === "next" ? "next track" : "previous track"); + break; + case "tile": + store.focusWindow(t.a); + break; + case "dock": + tapDock(t.slot); + break; + case "rail": { + // A tap on the track nudges by a step, the keyboard's own increment. + const step = c.y < (RAIL_TRACK_TOP + RAIL_TRACK_BOTTOM) / 2 ? 0.05 : -0.05; + store.setLevel(t.rail, (t.rail === "vol" ? store.vol() : store.bri()) + step, true); + break; + } + default: + break; + } + down = { kind: "none" }; + }, + onLongPress: () => { + if (!active()) return; + const t = down; + if (t.kind === "tile") { + store.pressDown(null); + store.setClosing({ a: t.a, progress: 0 }); + } else if (t.kind === "tab") { + // Hold a tab: bring the focused window here and follow it. + const focus = store.state()?.focus; + store.pressDown(null); + if (focus) { + store.moveWindow(focus, t.id); + store.workspace(t.id); + } + down = { kind: "none" }; + } + }, + onPanStart: (c) => { + if (!active()) return; + const t = down; + if (t.kind === "rail") return; // stays pressed; the rail follows below + store.pressDown(null); + if (t.kind === "tile" && !store.closing()) { + store.setDrag({ a: t.a, x: c.x, y: c.y, over: null, overWs: null }); + } else if (t.kind === "stage" || t.kind === "tile") { + swiping = true; + } + }, + onPanMove: (c) => { + if (!active()) return; + const rail = store.railDrag(); + if (rail) { + store.setLevel(rail.rail, rail.start + railDelta(c.dy)); + return; + } + const drag = store.drag(); + if (drag) { + const overA = within(c.x, c.y, STAGE) ? store.windowAt(c.x, c.y) : null; + const tab = within(c.x, c.y, STRIP) ? tabAt(c.x, store.tabs()) : null; + store.setDrag({ + a: drag.a, + x: c.x, + y: c.y, + over: overA !== null && overA !== drag.a ? overA : null, + overWs: tab ? tab.id : null, + }); + } + }, + onUp: (c) => { + if (!active()) { + reset(); + return; + } + const rail = store.railDrag(); + if (rail) { + store.setLevel(rail.rail, rail.start + railDelta(c.dy), true); + reset(); + return; + } + const drag = store.drag(); + if (drag) { + if (drag.overWs !== null && drag.overWs !== store.state()?.active) store.moveWindow(drag.a, drag.overWs); + else if (drag.over !== null) store.swapWindows(drag.a, drag.over); + reset(); + return; + } + if (swiping && Math.abs(c.dx) >= SWIPE_PX && Math.abs(c.dx) > Math.abs(c.dy)) { + store.workspaceStep(c.dx < 0 ? 1 : -1); + } + reset(); + }, + onCancel: () => reset(), + }; +} + +// --------------------------------------------------------------------------- +// desk +// --------------------------------------------------------------------------- + +export function Desk(p: { store: RemoteStore }) { + return ( + <> + + + + + + + ); +} diff --git a/apps/pocket-remote/host/hypr.ts b/apps/pocket-remote/host/hypr.ts new file mode 100644 index 000000000..ed21d3aed --- /dev/null +++ b/apps/pocket-remote/host/hypr.ts @@ -0,0 +1,273 @@ +// apps/pocket-remote/host/hypr.ts — Hyprland over its two Unix sockets: +// requests (`j/clients`, `dispatch ...`) on .socket.sock, the event stream +// on .socket2.sock. Plus the pure reduction from Hyprland's JSON to the +// remote's snapshot, which is what the tests exercise. + +import { connect, type Socket } from "node:net"; +import { readdirSync } from "node:fs"; +import { join } from "node:path"; +import { + clipTitle, + type HostState, + type Layout, + type WinInfo, + WINDOWS_MAX, + type WsInfo, +} from "../protocol.ts"; + +// --------------------------------------------------------------------------- +// Hyprland JSON shapes (the fields the daemon reads) +// --------------------------------------------------------------------------- + +export interface HyprMonitor { + id: number; + name: string; + width: number; + height: number; + scale: number; + x: number; + y: number; + focused: boolean; + activeWorkspace: { id: number; name: string }; + specialWorkspace?: { id: number; name: string }; +} + +export interface HyprWorkspace { + id: number; + name: string; + monitor: string; + monitorID?: number; + windows: number; + tiledLayout?: string; +} + +export interface HyprClient { + address: string; + mapped: boolean; + hidden: boolean; + at: [number, number]; + size: [number, number]; + workspace: { id: number; name: string }; + floating: boolean; + monitor: number; + class: string; + title: string; + initialClass: string; + pinned: boolean; + fullscreen: number; + focusHistoryID: number; +} + +export interface HyprActiveWindow { + address?: string; +} + +/** + * Reduce Hyprland's state to the remote's snapshot: the focused monitor's + * geometry in logical pixels, its active workspace, every ordinary workspace, + * and the windows — most recently focused first, clipped to WINDOWS_MAX so + * the line stays under the device's poll cap. + */ +export function buildState( + monitors: HyprMonitor[], + workspaces: HyprWorkspace[], + clients: HyprClient[], + active: HyprActiveWindow | null, +): HostState { + const monitor = monitors.find((m) => m.focused) ?? monitors[0]; + const scale = monitor && monitor.scale > 0 ? monitor.scale : 1; + const mon = monitor + ? { w: Math.round(monitor.width / scale), h: Math.round(monitor.height / scale) } + : { w: 1280, h: 800 }; + const monX = monitor?.x ?? 0; + const monY = monitor?.y ?? 0; + const activeWs = monitor?.activeWorkspace.id ?? 1; + const special = monitor?.specialWorkspace && monitor.specialWorkspace.id !== 0; + + const ws: WsInfo[] = workspaces + .filter((w) => w.id > 0) + .sort((a, b) => a.id - b.id) + .map((w) => ({ id: w.id, n: w.windows })); + + const layoutName = workspaces.find((w) => w.id === activeWs)?.tiledLayout; + const layout: Layout = layoutName === "scrolling" ? "scrolling" : "dwindle"; + + const win: WinInfo[] = clients + .filter((c) => c.mapped && !c.hidden && c.workspace.id > 0) + .sort((a, b) => a.focusHistoryID - b.focusHistoryID) + .slice(0, WINDOWS_MAX) + .map((c) => { + const info: WinInfo = { + a: c.address, + c: c.class || c.initialClass || "?", + ti: clipTitle(c.title || ""), + ws: c.workspace.id, + x: Math.round(c.at[0] - monX), + y: Math.round(c.at[1] - monY), + w: Math.round(c.size[0]), + h: Math.round(c.size[1]), + }; + if (c.floating) info.f = 1; + if (c.fullscreen === 1 || c.fullscreen === 2) info.fs = c.fullscreen; + if (c.pinned) info.p = 1; + return info; + }); + + const state: HostState = { + t: "state", + mon, + ws, + active: activeWs, + focus: active?.address ?? null, + win, + layout, + }; + if (special) state.special = 1; + return state; +} + +// --------------------------------------------------------------------------- +// sockets +// --------------------------------------------------------------------------- + +/** Locate the running instance: $HYPRLAND_INSTANCE_SIGNATURE, else the one + * directory under $XDG_RUNTIME_DIR/hypr (a headless daemon has no session + * environment of its own). */ +export function hyprDirectory(env: NodeJS.ProcessEnv = process.env): string { + const runtime = env.XDG_RUNTIME_DIR ?? `/run/user/${process.getuid?.() ?? 1000}`; + const base = join(runtime, "hypr"); + const signature = env.HYPRLAND_INSTANCE_SIGNATURE; + if (signature) return join(base, signature); + const entries = readdirSync(base).filter((entry) => !entry.startsWith(".")); + if (entries.length === 0) throw new Error(`no Hyprland instance under ${base}`); + // Signatures end in __; the newest start time is the live one. + entries.sort((a, b) => Number(b.split("_")[1] ?? 0) - Number(a.split("_")[1] ?? 0)); + return join(base, entries[0]!); +} + +/** One request on .socket.sock; Hyprland answers and closes. */ +export function hyprRequest(directory: string, command: string, timeoutMs = 2000): Promise { + return new Promise((resolve, reject) => { + const chunks: Buffer[] = []; + const socket = connect(join(directory, ".socket.sock")); + const timer = setTimeout(() => { + socket.destroy(); + reject(new Error(`hyprctl ${command}: timeout`)); + }, timeoutMs); + socket.on("connect", () => socket.write(command)); + socket.on("data", (chunk: Buffer) => chunks.push(chunk)); + socket.on("error", (error) => { + clearTimeout(timer); + reject(error); + }); + socket.on("close", () => { + clearTimeout(timer); + resolve(Buffer.concat(chunks).toString("utf8")); + }); + }); +} + +export async function hyprJson(directory: string, command: string): Promise { + const text = await hyprRequest(directory, `j/${command}`); + return JSON.parse(text) as T; +} + +export async function hyprDispatch(directory: string, dispatch: string): Promise { + return hyprRequest(directory, `dispatch ${dispatch}`); +} + +/** Several dispatches in one round trip, in order. */ +export async function hyprBatch(directory: string, dispatches: string[]): Promise { + return hyprRequest(directory, `[[BATCH]]${dispatches.map((d) => `dispatch ${d}`).join(";")}`); +} + +export async function snapshot(directory: string): Promise { + const [monitors, workspaces, clients, active] = await Promise.all([ + hyprJson(directory, "monitors"), + hyprJson(directory, "workspaces"), + hyprJson(directory, "clients"), + hyprJson(directory, "activewindow"), + ]); + return buildState(monitors, workspaces, clients, active && active.address ? active : null); +} + +/** Event names on .socket2.sock that change what the remote shows. */ +export const STATE_EVENTS = new Set([ + "workspace", + "workspacev2", + "focusedmon", + "focusedmonv2", + "activewindow", + "activewindowv2", + "fullscreen", + "openwindow", + "closewindow", + "movewindow", + "movewindowv2", + "changefloatingmode", + "createworkspace", + "createworkspacev2", + "destroyworkspace", + "destroyworkspacev2", + "activespecial", + "activespecialv2", + "windowtitle", + "windowtitlev2", + "pin", + "configreloaded", + "monitoradded", + "monitorremoved", +]); + +/** Parse one `EVENT>>DATA` line. */ +export function parseEvent(line: string): { name: string; data: string } | null { + const at = line.indexOf(">>"); + if (at < 0) return null; + return { name: line.slice(0, at), data: line.slice(at + 2) }; +} + +/** + * Subscribe to the event stream. `onEvent` fires per parsed line; the + * connection is re-established after a drop with a short backoff so a + * Hyprland restart does not orphan the daemon. + */ +export function watchEvents( + directory: string, + onEvent: (event: { name: string; data: string }) => void, + onStatus: (message: string) => void = () => {}, +): () => void { + let socket: Socket | null = null; + let stopped = false; + let pending = ""; + const open = () => { + if (stopped) return; + socket = connect(join(directory, ".socket2.sock")); + socket.on("connect", () => onStatus("events connected")); + socket.on("data", (chunk: Buffer) => { + pending += chunk.toString("utf8"); + let at: number; + while ((at = pending.indexOf("\n")) >= 0) { + const line = pending.slice(0, at); + pending = pending.slice(at + 1); + const event = parseEvent(line); + if (event) onEvent(event); + } + }); + const retry = () => { + if (stopped) return; + socket = null; + onStatus("events dropped, retrying"); + setTimeout(open, 1000); + }; + socket.on("error", retry); + socket.on("close", () => { + if (socket) retry(); + }); + }; + open(); + return () => { + stopped = true; + socket?.destroy(); + socket = null; + }; +} diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts new file mode 100644 index 000000000..471ca3eba --- /dev/null +++ b/apps/pocket-remote/host/omarchy.ts @@ -0,0 +1,246 @@ +// apps/pocket-remote/host/omarchy.ts — the Omarchy side of the daemon: run +// one whitelisted action, read and set the audio and display levels, read +// the theme palette, type text. Everything here shells out to the same +// commands Omarchy binds to its keys, so the OSD, the sink resolution and +// the theme machinery are Omarchy's own. + +import { execFile, spawn } from "node:child_process"; +import { existsSync, readdirSync, readFileSync } from "node:fs"; +import { homedir } from "node:os"; +import { join } from "node:path"; +import { promisify } from "node:util"; +import type { ActionDef } from "../actions.ts"; +import type { ThemeColors } from "../protocol.ts"; +import { hyprDispatch } from "./hypr.ts"; + +const execFileAsync = promisify(execFile); + +export interface Log { + (message: string): void; +} + +/** Fire-and-forget: the desktop command's output goes to the journal. */ +export function runDetached(argv: string[], log: Log): void { + const [command, ...args] = argv; + if (!command) return; + try { + const child = spawn(command, args, { stdio: "ignore", detached: true }); + child.on("error", (error) => log(`${command}: ${error.message}`)); + child.unref(); + } catch (error) { + log(`${command}: ${(error as Error).message}`); + } +} + +export async function runAction(action: ActionDef, hyprDir: string, log: Log): Promise { + if ("dispatch" in action.run) { + const reply = await hyprDispatch(hyprDir, action.run.dispatch); + if (reply.trim() !== "ok") log(`dispatch ${action.run.dispatch}: ${reply.trim()}`); + return; + } + runDetached(action.run.exec, log); +} + +// --------------------------------------------------------------------------- +// levels +// --------------------------------------------------------------------------- + +async function capture(command: string, args: string[]): Promise { + const { stdout } = await execFileAsync(command, args, { timeout: 3000 }); + return stdout; +} + +/** The sink Omarchy's own volume keys move (resolves through any DSP sink). */ +async function outputSink(): Promise { + try { + const sink = (await capture("omarchy-audio-output-sink", [])).trim(); + if (sink) return sink; + } catch { + // fall through + } + return "@DEFAULT_AUDIO_SINK@"; +} + +/** Parse `pactl get-sink-volume` (first channel's percentage). */ +export function parsePactlVolume(text: string): number | null { + const match = text.match(/(\d+)%/); + return match ? Number(match[1]) / 100 : null; +} + +/** Parse `brightnessctl -m`: device,class,current,percent%,max. */ +export function parseBrightnessctl(text: string): number | null { + const first = text.trim().split("\n")[0] ?? ""; + const fields = first.split(","); + const percent = fields[3]; + if (!percent) return null; + const value = Number(percent.replace("%", "")); + return Number.isFinite(value) ? value / 100 : null; +} + +export interface Levels { + vol: number; + mute: boolean; + bri: number; +} + +export async function readLevels(): Promise { + const sink = await outputSink(); + const [volumeText, muteText, brightnessText] = await Promise.all([ + capture("pactl", ["get-sink-volume", sink]).catch(() => ""), + capture("pactl", ["get-sink-mute", sink]).catch(() => ""), + capture("brightnessctl", ["-m"]).catch(() => ""), + ]); + return { + vol: parsePactlVolume(volumeText) ?? 0, + mute: /yes/.test(muteText), + bri: parseBrightnessctl(brightnessText) ?? 0, + }; +} + +/** + * Set the output volume to an absolute level through Omarchy's own script, + * which only knows relative steps: read, diff, step. That keeps the OSD and + * the DSP-sink resolution Omarchy's. + */ +export async function setVolume(level: number, log: Log): Promise { + const target = Math.round(Math.max(0, Math.min(1, level)) * 100); + const sink = await outputSink(); + const current = parsePactlVolume(await capture("pactl", ["get-sink-volume", sink]).catch(() => "")); + const from = current === null ? target : Math.round(current * 100); + const delta = target - from; + if (delta === 0) { + // Still show the OSD, so the laptop acknowledges the touch. + runDetached(["omarchy-audio-output-volume", "+0"], log); + return; + } + runDetached(["omarchy-audio-output-volume", delta > 0 ? `+${delta}` : `${delta}`], log); +} + +export function toggleMute(log: Log): void { + runDetached(["omarchy-audio-output-volume", "mute-toggle"], log); +} + +export function setBrightness(level: number, log: Log): void { + const target = Math.round(Math.max(0.01, Math.min(1, level)) * 100); + runDetached(["omarchy-brightness-display", `${target}%`], log); +} + +// --------------------------------------------------------------------------- +// theme +// --------------------------------------------------------------------------- + +const STATE_DIR = join(homedir(), ".local/state/omarchy/current"); + +export function currentThemeName(): string { + try { + return readFileSync(join(STATE_DIR, "theme.name"), "utf8").trim() || "tokyo-night"; + } catch { + return "tokyo-night"; + } +} + +/** Where a theme's files live: the user's own themes first, then Omarchy's. */ +export function themeDirectory(name: string, env: NodeJS.ProcessEnv = process.env): string | null { + const candidates = [ + join(homedir(), ".config/omarchy/themes", name), + join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "themes", name), + ]; + return candidates.find((dir) => existsSync(join(dir, "colors.toml"))) ?? null; +} + +export function themeList(env: NodeJS.ProcessEnv = process.env): string[] { + const names = new Set(); + for (const dir of [join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "themes"), join(homedir(), ".config/omarchy/themes")]) { + try { + for (const entry of readdirSync(dir)) { + if (existsSync(join(dir, entry, "colors.toml"))) names.add(entry); + } + } catch { + // missing directory + } + } + return [...names].sort(); +} + +/** Parse Omarchy's colors.toml: flat `key = "#rrggbb"` lines. */ +export function parseColorsToml(text: string): Record { + const out: Record = {}; + for (const raw of text.split("\n")) { + const line = raw.replace(/#[^"]*$/, (m) => (raw.includes('"') ? m : "")).trim(); + const match = raw.match(/^\s*([A-Za-z0-9_]+)\s*=\s*"?(#[0-9a-fA-F]{6})/); + if (match) out[match[1]!] = match[2]!.toLowerCase(); + void line; + } + return out; +} + +/** The remote's palette from a theme's colours, with Tokyo Night fallbacks + * for keys a theme leaves out. */ +export function paletteFrom(colors: Record): ThemeColors { + const pick = (keys: string[], fallback: string): string => { + for (const key of keys) if (colors[key]) return colors[key]!; + return fallback; + }; + return { + bg: pick(["background", "bg"], "#1a1b26"), + bgDark: pick(["dark_background", "dark_bg", "darker_background", "background"], "#13141c"), + fg: pick(["foreground", "fg"], "#a9b1d6"), + fgDim: pick(["dark_foreground", "dark_fg", "color8"], "#565f89"), + accent: pick(["accent", "blue", "color4"], "#7aa2f7"), + red: pick(["red", "color1"], "#f7768e"), + green: pick(["green", "color2"], "#9ece6a"), + yellow: pick(["yellow", "color3"], "#e0af68"), + blue: pick(["blue", "color4"], "#7aa2f7"), + magenta: pick(["magenta", "purple", "color5"], "#bb9af7"), + cyan: pick(["cyan", "color6"], "#449dab"), + muted: pick(["color8", "dark_foreground"], "#414868"), + }; +} + +export function readTheme(): { name: string; colors: ThemeColors; list: string[] } { + const name = currentThemeName(); + const dir = themeDirectory(name); + let colors: Record = {}; + if (dir) { + try { + colors = parseColorsToml(readFileSync(join(dir, "colors.toml"), "utf8")); + } catch { + colors = {}; + } + } + return { name, colors: paletteFrom(colors), list: themeList() }; +} + +export function themeStateDirectory(): string { + return STATE_DIR; +} + +export function setThemeByName(name: string, list: string[], log: Log): boolean { + if (!list.includes(name)) { + log(`theme ${name}: not installed`); + return false; + } + runDetached(["omarchy-theme-set", name], log); + return true; +} + +// --------------------------------------------------------------------------- +// typing +// --------------------------------------------------------------------------- + +/** Keysyms the remote may send (xkb names wtype understands). */ +export const ALLOWED_KEYS = new Set(["Return", "BackSpace", "Tab", "Escape", "space", "Left", "Right", "Up", "Down"]); + +export function typeText(text: string, log: Log): void { + // wtype types its argument literally; cap it so a runaway line cannot + // flood the focused window. + const clipped = Array.from(text).slice(0, 256).join(""); + if (clipped.length === 0) return; + runDetached(["wtype", "--", clipped], log); +} + +export function pressKey(key: string, log: Log): boolean { + if (!ALLOWED_KEYS.has(key)) return false; + runDetached(["wtype", "-k", key], log); + return true; +} diff --git a/apps/pocket-remote/host/pocket-remote.service b/apps/pocket-remote/host/pocket-remote.service new file mode 100644 index 000000000..dfe28aa37 --- /dev/null +++ b/apps/pocket-remote/host/pocket-remote.service @@ -0,0 +1,23 @@ +# Pocket Remote daemon — a systemd user unit for the Omarchy machine. +# Installed by `bun tools/pocket-remote.ts deploy-host ` into +# ~/.config/systemd/user/, next to the daemon copy in ~/.local/share/pocket-remote. +# +# The user manager already carries the graphical session's environment under +# Omarchy (uwsm imports WAYLAND_DISPLAY, HYPRLAND_INSTANCE_SIGNATURE, OMARCHY_PATH +# and the mise shims into it), which is what hyprland-dialog, wtype and the +# omarchy-* scripts need. + +[Unit] +Description=Pocket Remote — Omarchy companion daemon +After=graphical-session.target +PartOf=graphical-session.target + +[Service] +Type=simple +ExecStart=%h/.local/share/mise/shims/node %h/.local/share/pocket-remote/host/serve.ts +Restart=on-failure +RestartSec=2 +Environment=NODE_NO_WARNINGS=1 + +[Install] +WantedBy=graphical-session.target diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts new file mode 100644 index 000000000..22055f723 --- /dev/null +++ b/apps/pocket-remote/host/serve.ts @@ -0,0 +1,494 @@ +// apps/pocket-remote/host/serve.ts — the Omarchy-side daemon for Pocket +// Remote. Runs on the Omarchy machine as a user service: +// +// node serve.ts [--port 8622] [--beacon] [--name ] +// +// Node >= 23.6 (native type stripping); Omarchy installs Node through mise, +// so `~/.local/share/mise/shims/node` is the interpreter the unit uses. +// +// What it does: listens for PKNT connections from the remote, mirrors +// Hyprland (one snapshot per change, debounced) plus the volume, brightness +// and theme to every connected device, and runs the commands the device asks +// for — never a command string off the wire, only ids from actions.ts. +// +// Trust: the LAN is not a trust boundary. A device that has not been seen +// before is put on hold and a dialog appears on the desktop (hyprland-dialog) +// asking whether to allow it; the answer is remembered by address in +// ~/.local/state/pocket-remote/allowed.json. Until allowed, a device sees the +// mirror but its commands are dropped. + +import { createServer, type Socket } from "node:net"; +import { createSocket } from "node:dgram"; +import { execFile } from "node:child_process"; +import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs"; +import { homedir, hostname } from "node:os"; +import { join } from "node:path"; +import { actionById } from "../actions.ts"; +import { + type ClientLine, + type HostLine, + type HostState, + parseLines, + REMOTE_APP, + REMOTE_PROTO, +} from "../protocol.ts"; +import { hyprBatch, hyprDirectory, hyprDispatch, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; +import { + pressKey, + readLevels, + readTheme, + runAction, + setBrightness, + setThemeByName, + setVolume, + themeStateDirectory, + toggleMute, + typeText, +} from "./omarchy.ts"; +import { + encodeBeacon, + encodeCtrl, + encodeFrame, + encodeHelloAck, + FrameParser, + parseHello, + WIRE_BEACON_PORT, + WIRE_MSG, + WIRE_PORT, +} from "./wire.ts"; + +// --------------------------------------------------------------------------- +// options +// --------------------------------------------------------------------------- + +interface Options { + port: number; + beacon: boolean; + name: string; + /** Skip the approval dialog (every device allowed) — for tests only. */ + trustAll: boolean; +} + +function parseOptions(argv: string[]): Options { + const options: Options = { port: WIRE_PORT, beacon: false, name: hostname(), trustAll: false }; + for (let i = 0; i < argv.length; i += 1) { + const arg = argv[i]!; + if (arg === "--port") options.port = Number(argv[++i]); + else if (arg === "--beacon") options.beacon = true; + else if (arg === "--name") options.name = argv[++i] ?? options.name; + else if (arg === "--trust-all") options.trustAll = true; + else if (arg === "--help" || arg === "-h") { + console.log("node serve.ts [--port 8622] [--beacon] [--name ]"); + process.exit(0); + } + } + return options; +} + +const options = parseOptions(process.argv.slice(2)); +const log = (message: string) => console.log(`[remote] ${new Date().toISOString().slice(11, 19)} ${message}`); + +// --------------------------------------------------------------------------- +// allow list +// --------------------------------------------------------------------------- + +const STATE_HOME = join(homedir(), ".local/state/pocket-remote"); +const ALLOWED_PATH = join(STATE_HOME, "allowed.json"); + +function readAllowed(): Set { + try { + const parsed = JSON.parse(readFileSync(ALLOWED_PATH, "utf8")) as unknown; + return new Set(Array.isArray(parsed) ? parsed.filter((v): v is string => typeof v === "string") : []); + } catch { + return new Set(); + } +} + +function writeAllowed(allowed: Set): void { + mkdirSync(STATE_HOME, { recursive: true }); + writeFileSync(ALLOWED_PATH, JSON.stringify([...allowed].sort(), null, 2) + "\n"); +} + +const allowed = readAllowed(); +const denied = new Set(); +let dialogOpen: Promise | null = null; + +type Verdict = "allow" | "deny" | "timeout"; + +/** Ask on the desktop. One dialog at a time; a second device waits. A + * dialog nobody answers is not a refusal: the device stays pending and is + * asked again when it next connects. */ +function askApproval(address: string, device: string): Promise { + const run = () => + new Promise((resolve) => { + execFile( + "hyprland-dialog", + [ + "--title", + "Pocket Remote", + "--apptitle", + "A remote wants to control this desktop", + "--text", + `${device} at ${address} is asking to connect as a Pocket Remote. Allow it to switch workspaces, launch apps, change volume and type here?`, + "--buttons", + "Allow;Deny", + ], + { timeout: 120_000 }, + (error, stdout) => { + if (error) { + log(`dialog: ${error.message}`); + resolve("timeout"); + return; + } + const answer = stdout.trim().toLowerCase(); + resolve(answer.startsWith("allow") ? "allow" : answer.startsWith("deny") ? "deny" : "timeout"); + }, + ); + }); + const next: Promise = (dialogOpen ?? Promise.resolve("timeout")).then(run, run); + dialogOpen = next; + next.finally(() => { + if (dialogOpen === next) dialogOpen = null; + }); + return next; +} + +// --------------------------------------------------------------------------- +// connections +// --------------------------------------------------------------------------- + +interface Conn { + socket: Socket; + address: string; + parser: FrameParser; + hello: Uint8Array | null; + device: string; + auth: "ok" | "pending" | "denied"; + lastSeen: number; +} + +const conns = new Set(); + +function sendLine(conn: Conn, line: HostLine): void { + try { + conn.socket.write(encodeCtrl(JSON.stringify(line))); + } catch (error) { + log(`send to ${conn.address}: ${(error as Error).message}`); + } +} + +function broadcast(line: HostLine): void { + for (const conn of conns) if (conn.hello === null) sendLine(conn, line); +} + +// --------------------------------------------------------------------------- +// mirror +// --------------------------------------------------------------------------- + +const hyprDir = hyprDirectory(); +let lastState: HostState | null = null; +let lastLevels: { vol: number; mute: boolean; bri: number } | null = null; +let theme = readTheme(); +let snapshotTimer: ReturnType | null = null; +let snapshotBusy = false; +let snapshotDirty = false; + +async function refreshState(): Promise { + if (snapshotBusy) { + snapshotDirty = true; + return; + } + snapshotBusy = true; + try { + const state = await snapshot(hyprDir); + const text = JSON.stringify(state); + if (!lastState || JSON.stringify(lastState) !== text) { + lastState = state; + broadcast(state); + } + } catch (error) { + log(`snapshot: ${(error as Error).message}`); + } finally { + snapshotBusy = false; + if (snapshotDirty) { + snapshotDirty = false; + scheduleSnapshot(20); + } + } +} + +/** Debounce: Hyprland emits bursts (a window open is 4-5 events). */ +function scheduleSnapshot(delayMs = 30): void { + if (snapshotTimer) return; + snapshotTimer = setTimeout(() => { + snapshotTimer = null; + void refreshState(); + }, delayMs); +} + +async function refreshLevels(force = false): Promise { + try { + const levels = await readLevels(); + if ( + force || + !lastLevels || + Math.abs(levels.vol - lastLevels.vol) > 0.004 || + levels.mute !== lastLevels.mute || + Math.abs(levels.bri - lastLevels.bri) > 0.004 + ) { + lastLevels = levels; + const line: HostLine = { t: "levels", vol: levels.vol, bri: levels.bri }; + if (levels.mute) line.mute = 1; + broadcast(line); + } + } catch (error) { + log(`levels: ${(error as Error).message}`); + } +} + +function refreshTheme(): void { + const next = readTheme(); + if (JSON.stringify(next) === JSON.stringify(theme)) return; + theme = next; + broadcast({ t: "theme", name: theme.name, colors: theme.colors, list: theme.list }); + log(`theme -> ${theme.name}`); +} + +function sendMirror(conn: Conn): void { + sendLine(conn, { t: "theme", name: theme.name, colors: theme.colors, list: theme.list }); + if (lastLevels) { + const line: HostLine = { t: "levels", vol: lastLevels.vol, bri: lastLevels.bri }; + if (lastLevels.mute) line.mute = 1; + sendLine(conn, line); + } + if (lastState) sendLine(conn, lastState); +} + +// --------------------------------------------------------------------------- +// commands +// --------------------------------------------------------------------------- + +async function handle(conn: Conn, line: ClientLine): Promise { + if (line.t === "hello") { + conn.device = typeof line.device === "string" ? line.device.slice(0, 40) : "device"; + if (line.proto !== REMOTE_PROTO) log(`${conn.address}: proto ${line.proto} (ours ${REMOTE_PROTO})`); + if (options.trustAll || allowed.has(conn.address)) conn.auth = "ok"; + else if (denied.has(conn.address)) conn.auth = "denied"; + else conn.auth = "pending"; + sendLine(conn, { t: "hello", proto: REMOTE_PROTO, name: options.name, omarchy: omarchyVersion, auth: conn.auth }); + sendMirror(conn); + if (conn.auth !== "pending") log(`${conn.device} at ${conn.address}: ${conn.auth === "ok" ? "allowed" : "denied"}`); + if (conn.auth === "pending") { + log(`${conn.device} at ${conn.address} asks to connect — dialog on screen`); + const verdict = await askApproval(conn.address, conn.device); + if (verdict === "allow") { + allowed.add(conn.address); + writeAllowed(allowed); + conn.auth = "ok"; + } else if (verdict === "deny") { + denied.add(conn.address); + conn.auth = "denied"; + } + log(`${conn.address}: ${verdict}`); + if (conns.has(conn) && verdict !== "timeout") sendLine(conn, { t: "auth", auth: conn.auth }); + } + return; + } + if (conn.auth !== "ok") return; + + switch (line.t) { + case "act": { + const action = actionById(line.id); + if (!action) { + log(`${conn.address}: unknown action ${JSON.stringify(line.id)}`); + return; + } + await runAction(action, hyprDir, log); + scheduleSnapshot(); + if (action.group === "media" || action.id === "nightlight") setTimeout(() => void refreshLevels(), 300); + return; + } + case "ws": { + const n = Number(line.n); + if (!Number.isInteger(n)) return; + await hyprDispatch(hyprDir, line.rel ? `workspace e${n >= 0 ? "+" : "-"}${Math.abs(n)}` : `workspace ${n}`); + scheduleSnapshot(); + return; + } + case "win": { + const address = typeof line.a === "string" && /^0x[0-9a-f]+$/.test(line.a) ? line.a : null; + if (!address) return; + switch (line.op) { + case "focus": + await hyprDispatch(hyprDir, `focuswindow address:${address}`); + break; + case "close": + await hyprDispatch(hyprDir, `closewindow address:${address}`); + break; + case "swap": + if (!["l", "r", "u", "d"].includes(line.dir)) return; + await hyprBatch(hyprDir, [`focuswindow address:${address}`, `swapwindow ${line.dir}`]); + break; + case "move": { + const n = Number(line.n); + if (!Number.isInteger(n) || n < 1 || n > 10) return; + await hyprDispatch(hyprDir, `movetoworkspacesilent ${n},address:${address}`); + break; + } + } + scheduleSnapshot(); + return; + } + case "vol": { + const v = Number(line.v); + if (!Number.isFinite(v)) return; + await setVolume(v, log); + setTimeout(() => void refreshLevels(), 150); + return; + } + case "bri": { + const v = Number(line.v); + if (!Number.isFinite(v)) return; + setBrightness(v, log); + setTimeout(() => void refreshLevels(), 300); + return; + } + case "mute": + toggleMute(log); + setTimeout(() => void refreshLevels(), 150); + return; + case "media": { + const action = actionById(line.op === "play" ? "play" : line.op === "next" ? "next" : "prev"); + if (action) await runAction(action, hyprDir, log); + return; + } + case "type": + if (typeof line.text === "string") typeText(line.text, log); + return; + case "key": + if (typeof line.k === "string" && !pressKey(line.k, log)) log(`${conn.address}: key ${line.k} not allowed`); + return; + case "theme": + if (typeof line.name === "string" && setThemeByName(line.name, theme.list, log)) { + setTimeout(refreshTheme, 1500); + setTimeout(refreshTheme, 4000); + } + return; + } +} + +// --------------------------------------------------------------------------- +// server +// --------------------------------------------------------------------------- + +let omarchyVersion = ""; +execFile("omarchy-version", [], { timeout: 3000 }, (error, stdout) => { + if (!error) omarchyVersion = stdout.trim(); +}); + +const server = createServer((socket) => { + const address = socket.remoteAddress?.replace(/^::ffff:/, "") ?? "?"; + const conn: Conn = { + socket, + address, + parser: new FrameParser(), + hello: new Uint8Array(0), + device: "device", + auth: "pending", + lastSeen: Date.now(), + }; + socket.setNoDelay(true); + conns.add(conn); + log(`connection from ${address}`); + socket.on("data", (chunk: Buffer) => { + conn.lastSeen = Date.now(); + try { + let bytes = new Uint8Array(chunk); + if (conn.hello !== null) { + const merged = new Uint8Array(conn.hello.length + bytes.length); + merged.set(conn.hello); + merged.set(bytes, conn.hello.length); + const hello = parseHello(merged); + if (hello === null) { + conn.hello = merged; + return; + } + if (hello.app !== REMOTE_APP) throw new Error(`unknown app "${hello.app}"`); + conn.hello = null; + socket.write(encodeHelloAck()); + bytes = merged.slice(hello.consumed); + } + for (const frame of conn.parser.push(bytes)) { + if (frame.type === WIRE_MSG.pong) continue; + if (frame.type !== WIRE_MSG.ctrl) continue; // forward compatibility + const text = new TextDecoder().decode(frame.payload); + for (const line of parseLines(text)) { + handle(conn, line).catch((error) => log(`${address}: ${(error as Error).message}`)); + } + } + } catch (error) { + log(`dropping ${address}: ${(error as Error).message}`); + socket.destroy(); + } + }); + const gone = () => { + if (conns.delete(conn)) log(`${address} disconnected`); + }; + socket.on("close", gone); + socket.on("error", (error) => { + log(`${address}: ${error.message}`); + gone(); + }); +}); + +server.listen(options.port, "0.0.0.0", () => { + log(`listening on tcp ${options.port} (hyprland at ${hyprDir})`); +}); + +// ping every 2 s; drop after 10 s of silence (the wire's liveness rule) +let pingToken = 1; +setInterval(() => { + const now = Date.now(); + for (const conn of conns) { + if (now - conn.lastSeen > 10_000) { + log(`${conn.address} silent, dropping`); + conn.socket.destroy(); + conns.delete(conn); + continue; + } + const token = new Uint8Array(4); + new DataView(token.buffer).setUint32(0, pingToken++ >>> 0, true); + conn.socket.write(encodeFrame(WIRE_MSG.ping, token)); + } +}, 2000); + +// discovery beacon (off by default: on a firewalled box the relay beacons) +if (options.beacon) { + const udp = createSocket("udp4"); + const payload = encodeBeacon(REMOTE_APP, options.name, options.port); + udp.bind(() => { + udp.setBroadcast(true); + setInterval(() => udp.send(payload, WIRE_BEACON_PORT, "255.255.255.255", () => {}), 1000); + log(`beacon on udp ${WIRE_BEACON_PORT}`); + }); +} + +// mirror sources +watchEvents( + hyprDir, + (event) => { + if (STATE_EVENTS.has(event.name)) scheduleSnapshot(); + }, + log, +); +void refreshState(); +void refreshLevels(true); +setInterval(() => void refreshLevels(), 1000); +setInterval(() => scheduleSnapshot(), 5000); // belt and braces for missed events +try { + const stateDir = themeStateDirectory(); + if (existsSync(stateDir)) watch(stateDir, () => setTimeout(refreshTheme, 500)); +} catch (error) { + log(`theme watch: ${(error as Error).message}`); +} +setInterval(refreshTheme, 10_000); diff --git a/apps/pocket-remote/host/wire.ts b/apps/pocket-remote/host/wire.ts new file mode 100644 index 000000000..5c117c670 --- /dev/null +++ b/apps/pocket-remote/host/wire.ts @@ -0,0 +1,109 @@ +// apps/pocket-remote/host/wire.ts — the host side of the SVC WIRE (PKNT) +// protocol: framing, the device hello, the discovery beacon. Byte layouts +// come from contracts/spec/spec.ts "SVC WIRE protocol" and must stay +// bit-identical to engine/core/src/wire.rs and hosts/iphone2g/svcwire.c. +// +// The constants are repeated here rather than imported so the daemon can be +// copied to the Omarchy machine as one small directory with no repository +// around it; tests/pocket-remote.test.ts pins them to spec.ts. + +export const WIRE_MAGIC = 0x544e4b50; // 'PKNT' LE +export const WIRE_BEACON_MAGIC = 0x42444b50; // 'PKDB' LE +export const WIRE_VERSION = 1; +export const WIRE_HEADER_SIZE = 8; +export const WIRE_MAX_PAYLOAD = 256 * 1024; +export const WIRE_BEACON_PORT = 8621; +export const WIRE_PORT = 8622; +export const WIRE_MSG = { ping: 0x01, pong: 0x02, ctrl: 0x10 } as const; +/** One ctrl line may not exceed this (spec SVC_POLL_BUF). */ +export const SVC_POLL_BUF = 8192; + +export function encodeFrame(type: number, payload: Uint8Array): Uint8Array { + if (payload.length > WIRE_MAX_PAYLOAD) { + throw new Error(`frame payload ${payload.length} exceeds WIRE_MAX_PAYLOAD`); + } + const frame = new Uint8Array(WIRE_HEADER_SIZE + payload.length); + frame[0] = type; + frame[1] = 0; + new DataView(frame.buffer).setUint32(4, payload.length, true); + frame.set(payload, WIRE_HEADER_SIZE); + return frame; +} + +export function encodeCtrl(line: string): Uint8Array { + const bytes = new TextEncoder().encode(line); + if (bytes.length > SVC_POLL_BUF) throw new Error(`ctrl line ${bytes.length} bytes exceeds SVC_POLL_BUF`); + return encodeFrame(WIRE_MSG.ctrl, bytes); +} + +/** Once-a-second discovery datagram; the device connects to the SOURCE + * address of the datagram at the advertised TCP port. */ +export function encodeBeacon(app: string, name: string, tcpPort: number): Uint8Array { + const appBytes = new TextEncoder().encode(app); + const nameBytes = new TextEncoder().encode(name).slice(0, 32); + const datagram = new Uint8Array(8 + 1 + appBytes.length + 1 + nameBytes.length); + const view = new DataView(datagram.buffer); + view.setUint32(0, WIRE_BEACON_MAGIC, true); + datagram[4] = WIRE_VERSION; + datagram[5] = 0; + view.setUint16(6, tcpPort, true); + datagram[8] = appBytes.length; + datagram.set(appBytes, 9); + datagram[9 + appBytes.length] = nameBytes.length; + datagram.set(nameBytes, 10 + appBytes.length); + return datagram; +} + +/** The device's opening handshake. Returns the app id, or null while the + * buffer is still short of a full hello; throws on a malformed one. */ +export function parseHello(buffer: Uint8Array): { app: string; consumed: number } | null { + if (buffer.length < 7) return null; + const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); + if (view.getUint32(0, true) !== WIRE_MAGIC) throw new Error("bad hello magic"); + if (buffer[4] !== WIRE_VERSION) throw new Error(`unsupported wire version ${buffer[4]}`); + const appLength = buffer[6]!; + if (appLength === 0 || appLength > 64) throw new Error("bad hello app length"); + if (buffer.length < 7 + appLength) return null; + const app = new TextDecoder().decode(buffer.subarray(7, 7 + appLength)); + return { app, consumed: 7 + appLength }; +} + +export function encodeHelloAck(): Uint8Array { + const ack = new Uint8Array(8); + new DataView(ack.buffer).setUint32(0, WIRE_MAGIC, true); + ack[4] = WIRE_VERSION; + return ack; +} + +export interface Frame { + type: number; + payload: Uint8Array; +} + +/** Incremental frame reassembly over a byte stream. */ +export class FrameParser { + private buffer = new Uint8Array(0); + + push(chunk: Uint8Array): Frame[] { + const merged = new Uint8Array(this.buffer.length + chunk.length); + merged.set(this.buffer); + merged.set(chunk, this.buffer.length); + this.buffer = merged; + const frames: Frame[] = []; + for (;;) { + if (this.buffer.length < WIRE_HEADER_SIZE) break; + const view = new DataView(this.buffer.buffer, this.buffer.byteOffset); + const length = view.getUint32(4, true); + if (this.buffer[2] !== 0 || this.buffer[3] !== 0 || length > WIRE_MAX_PAYLOAD) { + throw new Error("bad frame header"); + } + if (this.buffer.length < WIRE_HEADER_SIZE + length) break; + frames.push({ + type: this.buffer[0]!, + payload: this.buffer.slice(WIRE_HEADER_SIZE, WIRE_HEADER_SIZE + length), + }); + this.buffer = this.buffer.slice(WIRE_HEADER_SIZE + length); + } + return frames; + } +} diff --git a/apps/pocket-remote/icons.tsx b/apps/pocket-remote/icons.tsx new file mode 100644 index 000000000..02f00083c --- /dev/null +++ b/apps/pocket-remote/icons.tsx @@ -0,0 +1,289 @@ +// apps/pocket-remote/icons.tsx — glyphs drawn from rectangles. The baked +// atlas carries only the text the source spells out, so an icon that leaned +// on a symbol codepoint would render as the tofu box on the device; these +// are Views, and they recolour with the theme like everything else. +// +// Every icon fills a 24x24 box positioned by its parent. + +import { Text, View } from "@pocketjs/framework/components"; +import { themed } from "./theme.ts"; + +/** Icon stroke tone: dimmed in the dock at rest, the theme foreground when + * the item is live, accent for the active workspace, dark on accent fills. */ +type Tone = "fg" | "dim" | "accent" | "onAccent"; +type Shape = "plain" | "rot45" | "rot90" | "rot135" | "rot315" | "dot4" | "dot8"; + +/** + * A class string reaches the device as a whole literal looked up in the baked + * table, so every tone x shape pair is spelled out here rather than composed. + */ +const STROKE: Record> = { + fg: { + plain: "absolute bg-[#a9b1d6]", + rot45: "absolute bg-[#a9b1d6] rotate-45", + rot90: "absolute bg-[#a9b1d6] rotate-90", + rot135: "absolute bg-[#a9b1d6] rotate-135", + rot315: "absolute bg-[#a9b1d6] rotate-315", + dot4: "absolute bg-[#a9b1d6] rounded-[2]", + dot8: "absolute bg-[#a9b1d6] rounded-[4]", + }, + dim: { + plain: "absolute bg-[#565f89]", + rot45: "absolute bg-[#565f89] rotate-45", + rot90: "absolute bg-[#565f89] rotate-90", + rot135: "absolute bg-[#565f89] rotate-135", + rot315: "absolute bg-[#565f89] rotate-315", + dot4: "absolute bg-[#565f89] rounded-[2]", + dot8: "absolute bg-[#565f89] rounded-[4]", + }, + accent: { + plain: "absolute bg-[#7aa2f7]", + rot45: "absolute bg-[#7aa2f7] rotate-45", + rot90: "absolute bg-[#7aa2f7] rotate-90", + rot135: "absolute bg-[#7aa2f7] rotate-135", + rot315: "absolute bg-[#7aa2f7] rotate-315", + dot4: "absolute bg-[#7aa2f7] rounded-[2]", + dot8: "absolute bg-[#7aa2f7] rounded-[4]", + }, + onAccent: { + plain: "absolute bg-[#13141c]", + rot45: "absolute bg-[#13141c] rotate-45", + rot90: "absolute bg-[#13141c] rotate-90", + rot135: "absolute bg-[#13141c] rotate-135", + rot315: "absolute bg-[#13141c] rotate-315", + dot4: "absolute bg-[#13141c] rounded-[2]", + dot8: "absolute bg-[#13141c] rounded-[4]", + }, +}; + +const strokeRef = (tone: Tone) => { + switch (tone) { + case "fg": + return themed("fgFill"); + case "dim": + return themed("fgDimFill"); + case "accent": + return themed("accentFill"); + case "onAccent": + return themed("surfaceDark"); + } +}; + +interface BarProps { + tone: Tone; + x: number; + y: number; + w: number; + h: number; + /** Optional rotation in degrees. */ + rot?: 45 | 90 | 135 | 315; + /** A round dot (w = h = 4 or 8). */ + round?: boolean; +} + +/** One rectangle of an icon. */ +function Bar(p: BarProps) { + const shape: Shape = + p.rot === 45 ? "rot45" : p.rot === 90 ? "rot90" : p.rot === 135 ? "rot135" : p.rot === 315 ? "rot315" : p.round ? (p.w >= 8 ? "dot8" : "dot4") : "plain"; + return ( + + ); +} + +export type IconName = + | "menu" + | "terminal" + | "browser" + | "files" + | "editor" + | "fullscreen" + | "float" + | "screenshot" + | "keyboard" + | "more" + | "prev" + | "play" + | "next" + | "sun" + | "speaker" + | "mute" + | "close"; + +export function Icon(p: { name: IconName; tone: Tone }) { + switch (p.name) { + case "menu": + // Omarchy's menu is the one thing on this remote that may borrow a + // letter: Ω is in Inter's Greek block and the atlas bakes it from here. + return ( + + + Ω + + + ); + case "terminal": + return ( + <> + + + + + + + + + ); + case "browser": + return ( + <> + + + + + ); + case "files": + return ( + <> + + + + ); + case "editor": + return ( + <> + + + + ); + case "fullscreen": + return ( + <> + + + + + + + + + + ); + case "float": + return ( + <> + + + + + + + ); + case "screenshot": + return ( + <> + + + + + ); + case "keyboard": + return ( + <> + + + + + + + + + + ); + case "more": + return ( + <> + + + + + ); + case "prev": + return ( + <> + + + + + ); + case "play": + return ( + <> + + + + ); + case "next": + return ( + <> + + + + + ); + case "sun": + return ( + <> + + + + + + + + + + + ); + case "speaker": + return ( + <> + + + + + + ); + case "mute": + return ( + <> + + + + + + ); + case "close": + return ( + <> + + + + ); + } +} diff --git a/apps/pocket-remote/keyboard.tsx b/apps/pocket-remote/keyboard.tsx new file mode 100644 index 000000000..11f4fa81c --- /dev/null +++ b/apps/pocket-remote/keyboard.tsx @@ -0,0 +1,234 @@ +// apps/pocket-remote/keyboard.tsx — typing into the focused window from the +// remote, the Apple TV app's one killer feature. Keys go straight to the +// laptop (wtype) as they are pressed; nothing is buffered on the device, so +// what the desktop shows is the truth. A landscape iOS layout at 40 px keys: +// ten columns across the 400 px centre column, four rows, one-shot shift, +// a symbols layer with esc and tab, and a caption naming the window the +// keys land in. + +import { createSignal, Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import type { GestureHandlers } from "./desk.tsx"; +import { RAIL_W, SCREEN_W, within } from "./layout.ts"; +import type { KbLayer, RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +export const KB_X = RAIL_W; +export const KB_W = SCREEN_W - 2 * RAIL_W; +export const KB_TOP = 140; +export const KB_RECT = { x: KB_X, y: KB_TOP, w: KB_W, h: 320 - KB_TOP }; +const CAPTION_H = 20; +const ROWS_TOP = KB_TOP + CAPTION_H + 4; +const UNIT = 40; +const KEY_H = 38; +const ROW_PITCH = 42; + +export type KeyAction = + | { ch: string } + | { key: "Return" | "BackSpace" | "space" | "Tab" | "Escape" } + | { layer: KbLayer } + | { hide: true }; + +interface KeyDef { + label: string; + /** Width in 40 px units. */ + w: number; + act: KeyAction; + dark?: boolean; +} + +const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); + +const ROWS: Record = { + lower: [ + chars("qwertyuiop"), + chars("asdfghjkl"), + [ + { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, + ...chars("zxcvbnm"), + { label: "del", w: 1.5, act: { key: "BackSpace" }, dark: true }, + ], + [ + { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, + { label: ",", w: 1, act: { ch: "," } }, + { label: "space", w: 4.5, act: { key: "space" } }, + { label: ".", w: 1, act: { ch: "." } }, + { label: "return", w: 2, act: { key: "Return" }, dark: true }, + ], + ], + upper: [ + chars("QWERTYUIOP"), + chars("ASDFGHJKL"), + [ + { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, + ...chars("ZXCVBNM"), + { label: "del", w: 1.5, act: { key: "BackSpace" }, dark: true }, + ], + [ + { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, + { label: "!", w: 1, act: { ch: "!" } }, + { label: "space", w: 4.5, act: { key: "space" } }, + { label: "?", w: 1, act: { ch: "?" } }, + { label: "return", w: 2, act: { key: "Return" }, dark: true }, + ], + ], + sym: [ + chars("1234567890"), + chars("-/:;()$&@\""), + [ + { label: "esc", w: 1.5, act: { key: "Escape" }, dark: true }, + ...chars("#+=.,?!'"), + { label: "del", w: 0.5, act: { key: "BackSpace" }, dark: true }, + ], + [ + { label: "abc", w: 1.5, act: { layer: "lower" }, dark: true }, + { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, + { label: "space", w: 4.5, act: { key: "space" } }, + { label: "~", w: 1, act: { ch: "~" } }, + { label: "return", w: 2, act: { key: "Return" }, dark: true }, + ], + ], +}; + +interface KeyRect { + x: number; + y: number; + w: number; + h: number; + def: KeyDef; + row: number; + col: number; +} + +function layoutKeys(layer: KbLayer): KeyRect[] { + const out: KeyRect[] = []; + ROWS[layer].forEach((row, r) => { + const total = row.reduce((sum, key) => sum + key.w, 0); + let x = KB_X + Math.round(((KB_W / UNIT - total) * UNIT) / 2); + row.forEach((def, c) => { + const w = Math.round(def.w * UNIT); + out.push({ x: x + 2, y: ROWS_TOP + r * ROW_PITCH, w: w - 4, h: KEY_H, def, row: r, col: c }); + x += w; + }); + }); + return out; +} + +const LAYOUTS: Record = { + lower: layoutKeys("lower"), + upper: layoutKeys("upper"), + sym: layoutKeys("sym"), +}; + +export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { + for (const key of LAYOUTS[layer]) { + if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; + } + return null; +} + +/** What a key does, as the store sees it. Exported for tests. */ +export function keyToLine(act: KeyAction): { t: "type"; text: string } | { t: "key"; k: string } | null { + if ("ch" in act) return { t: "type", text: act.ch }; + if ("key" in act) return { t: "key", k: act.key }; + return null; +} + +/** The keyboard's touch handlers; app.tsx routes contacts inside the sheet here. */ +export function keyboardHandlers(store: RemoteStore): GestureHandlers { + const [down, setDown] = createSignal(null); + const active = () => store.kb() && store.pad() === null; + const press = (key: KeyRect) => { + const act = key.def.act; + if ("layer" in act) { + store.setKbLayer(act.layer); + return; + } + if ("hide" in act) { + store.setKb(false); + return; + } + if ("ch" in act) { + store.typeText(act.ch); + // One-shot shift: the upper layer drops back after a letter. + if (store.kbLayer() === "upper") store.setKbLayer("lower"); + return; + } + store.typeKey(act.key); + }; + return { + onDown: (c) => { + if (!active()) return; + if (!within(c.x, c.y, KB_RECT)) return; + const key = keyAt(store.kbLayer(), c.x, c.y); + setDown(key); + if (key) store.pressDown(`key:${key.row}:${key.col}`); + }, + onTap: () => { + if (!active()) return; + const key = down(); + store.pressRelease(); + if (key) press(key); + setDown(null); + }, + onPanStart: () => { + store.pressDown(null); + setDown(null); + }, + onUp: () => store.pressRelease(), + onCancel: () => { + store.pressRelease(); + setDown(null); + }, + }; +} + +export function Keyboard(p: { store: RemoteStore }) { + const keys = () => LAYOUTS[p.store.kbLayer()]; + const target = () => { + const c = p.store.focusClass(); + return c ? `typing into ${c}` : "no focused window"; + }; + return ( + + + + {target()} + + + + {(key) => ( + key().def.dark ? "surface" : "surfaceMuted")} + > + + {key().def.label} + + + + )} + + + + + + ); +} diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts new file mode 100644 index 000000000..1805fb7a3 --- /dev/null +++ b/apps/pocket-remote/layout.ts @@ -0,0 +1,203 @@ +// apps/pocket-remote/layout.ts — the screen's fixed geometry and the pure +// arithmetic behind it: where the rails, strip, stage and dock sit on the +// 480x320 landscape panel, how a monitor is fitted into the stage, how a +// finger on a rail becomes a level. No Solid here so tests can run it bare. + +import type { Direction, HostState, WinInfo, WsInfo } from "./protocol.ts"; + +export const SCREEN_W = 480; +export const SCREEN_H = 320; + +export interface Rect { + x: number; + y: number; + w: number; + h: number; +} + +/** Left rail = display brightness, right rail = output volume. */ +export const RAIL_W = 40; +export const RAIL_LEFT: Rect = { x: 0, y: 0, w: RAIL_W, h: SCREEN_H }; +export const RAIL_RIGHT: Rect = { x: SCREEN_W - RAIL_W, y: 0, w: RAIL_W, h: SCREEN_H }; +/** The rail's track: the part of its height a drag maps onto 0..1. */ +export const RAIL_TRACK_TOP = 44; +export const RAIL_TRACK_BOTTOM = 300; +export const RAIL_TRACK_H = RAIL_TRACK_BOTTOM - RAIL_TRACK_TOP; +/** Icon cap at the top of a rail (mute / nightlight). */ +export const RAIL_CAP_H = 36; + +/** The workspace strip across the top of the centre column. */ +export const STRIP: Rect = { x: RAIL_W, y: 0, w: SCREEN_W - 2 * RAIL_W, h: 32 }; +export const TAB_W = 28; +export const TAB_MAX = 10; +/** Media transport cluster at the strip's right end. */ +export const MEDIA_W = 30; +export const MEDIA_X = STRIP.x + STRIP.w - 3 * MEDIA_W - 4; +/** Layout badge sits left of the media cluster. */ +export const BADGE_W = 56; +export const BADGE_X = MEDIA_X - BADGE_W - 6; + +/** The stage: the live miniature of the focused monitor. */ +export const STAGE: Rect = { x: RAIL_W, y: STRIP.h, w: SCREEN_W - 2 * RAIL_W, h: 228 }; + +/** The dock across the bottom of the centre column. */ +export const DOCK: Rect = { x: RAIL_W, y: STAGE.y + STAGE.h, w: SCREEN_W - 2 * RAIL_W, h: SCREEN_H - STAGE.y - STAGE.h }; +export const DOCK_SLOTS = 9; +export const DOCK_SLOT_W = 44; +export const DOCK_X0 = DOCK.x + Math.floor((DOCK.w - DOCK_SLOTS * DOCK_SLOT_W) / 2); + +/** Seconds a tile must be held before it closes; the ring fills over this. */ +export const CLOSE_HOLD_SECONDS = 0.6; +/** Horizontal travel on empty stage that switches workspace. */ +export const SWIPE_PX = 48; +/** Tiles shorter than this drop their title line. */ +export const TILE_TWO_LINES_H = 40; +/** Fixed pool of tile slots (protocol WINDOWS_MAX). */ +export const TILE_SLOTS = 24; + +export function within(x: number, y: number, r: Rect): boolean { + return x >= r.x && x < r.x + r.w && y >= r.y && y < r.y + r.h; +} + +export function clamp01(v: number): number { + return v < 0 ? 0 : v > 1 ? 1 : v; +} + +// --------------------------------------------------------------------------- +// stage +// --------------------------------------------------------------------------- + +export interface Fit { + /** Monitor logical px -> stage px. */ + s: number; + /** Stage-space origin of the monitor's top-left. */ + ox: number; + oy: number; + /** The fitted monitor rectangle on screen. */ + rect: Rect; +} + +/** Fit a monitor into the stage preserving aspect, centred. */ +export function fitMonitor(mon: { w: number; h: number }, stage: Rect = STAGE): Fit { + const w = Math.max(1, mon.w); + const h = Math.max(1, mon.h); + const s = Math.min(stage.w / w, stage.h / h); + const fw = Math.round(w * s); + const fh = Math.round(h * s); + const ox = stage.x + Math.floor((stage.w - fw) / 2); + const oy = stage.y + Math.floor((stage.h - fh) / 2); + return { s, ox, oy, rect: { x: ox, y: oy, w: fw, h: fh } }; +} + +/** One window's tile on the stage, integer px, at least 8x8. */ +export function tileRect(win: WinInfo, fit: Fit): Rect { + const x = Math.round(fit.ox + win.x * fit.s); + const y = Math.round(fit.oy + win.y * fit.s); + const x2 = Math.round(fit.ox + (win.x + win.w) * fit.s); + const y2 = Math.round(fit.oy + (win.y + win.h) * fit.s); + return { x, y, w: Math.max(8, x2 - x), h: Math.max(8, y2 - y) }; +} + +/** Windows shown on the stage: the active workspace's, tiled first so a + * floating window paints over the tiling it covers. */ +export function stageWindows(state: HostState): WinInfo[] { + const tiled = state.win.filter((w) => w.ws === state.active && !w.f); + const floating = state.win.filter((w) => w.ws === state.active && w.f); + return [...tiled, ...floating]; +} + +/** The window whose tile contains the point, topmost (last painted) first. */ +export function windowAt( + x: number, + y: number, + tiles: readonly { a: string; rect: Rect }[], +): string | null { + for (let i = tiles.length - 1; i >= 0; i -= 1) { + if (within(x, y, tiles[i]!.rect)) return tiles[i]!.a; + } + return null; +} + +/** Direction from `from` to `to` by their centres — what `swapwindow` needs. */ +export function swapDirection(from: Rect, to: Rect): Direction { + const dx = to.x + to.w / 2 - (from.x + from.w / 2); + const dy = to.y + to.h / 2 - (from.y + from.h / 2); + if (Math.abs(dx) >= Math.abs(dy)) return dx >= 0 ? "r" : "l"; + return dy >= 0 ? "d" : "u"; +} + +// --------------------------------------------------------------------------- +// strip +// --------------------------------------------------------------------------- + +export interface Tab { + id: number; + /** Window count (0 for the trailing empty tab). */ + n: number; + x: number; +} + +/** + * Workspaces on the strip: every ordinary workspace Hyprland has, the active + * one even when empty, plus one more empty tab so there is always somewhere + * new to go — the Omarchy bar's own rule. Capped at TAB_MAX. + */ +export function stripTabs(ws: readonly WsInfo[], active: number): Tab[] { + const ids = new Set(); + for (const w of ws) if (w.id > 0) ids.add(w.id); + if (active > 0) ids.add(active); + const sorted = [...ids].sort((a, b) => a - b); + const last = sorted.length ? sorted[sorted.length - 1]! : 0; + const lastN = ws.find((w) => w.id === last)?.n ?? 0; + // An empty tab trails the list unless the last workspace is already empty. + if ((last === 0 || lastN > 0) && last < TAB_MAX) sorted.push(last + 1); + return sorted.slice(0, TAB_MAX).map((id, i) => ({ + id, + n: ws.find((w) => w.id === id)?.n ?? 0, + x: STRIP.x + i * TAB_W, + })); +} + +export function tabAt(x: number, tabs: readonly Tab[]): Tab | null { + for (const tab of tabs) if (x >= tab.x && x < tab.x + TAB_W) return tab; + return null; +} + +// --------------------------------------------------------------------------- +// rails +// --------------------------------------------------------------------------- + +/** A vertical drag of `dy` px (down = positive) changes the level by this. */ +export function railDelta(dy: number): number { + return -dy / RAIL_TRACK_H; +} + +/** Fill height for a level, in track px. */ +export function railFill(level: number): number { + return Math.round(clamp01(level) * RAIL_TRACK_H); +} + +// --------------------------------------------------------------------------- +// dock +// --------------------------------------------------------------------------- + +export function dockSlotAt(x: number): number | null { + const i = Math.floor((x - DOCK_X0) / DOCK_SLOT_W); + return i >= 0 && i < DOCK_SLOTS && x >= DOCK_X0 ? i : null; +} + +export function dockSlotX(i: number): number { + return DOCK_X0 + i * DOCK_SLOT_W; +} + +// --------------------------------------------------------------------------- +// motion +// --------------------------------------------------------------------------- + +/** Per-frame ease toward a target (the pocket-shell EASE), snapping when + * within half a pixel so idle frames settle to exact integers. */ +export const EASE = 0.35; +export function approach(current: number, target: number): number { + const next = current + (target - current) * EASE; + return Math.abs(target - next) < 0.5 ? target : next; +} diff --git a/apps/pocket-remote/main.tsx b/apps/pocket-remote/main.tsx new file mode 100644 index 000000000..7997c1447 --- /dev/null +++ b/apps/pocket-remote/main.tsx @@ -0,0 +1,5 @@ +// @title Pocket Remote +import PocketRemote from "./app.tsx"; +import { mount } from "@pocketjs/framework/solid"; + +mount(() => ); diff --git a/apps/pocket-remote/pad.tsx b/apps/pocket-remote/pad.tsx new file mode 100644 index 000000000..91c7c64c6 --- /dev/null +++ b/apps/pocket-remote/pad.tsx @@ -0,0 +1,261 @@ +// apps/pocket-remote/pad.tsx — the long tail. The dock holds the nine things +// a remote is reached for; everything else Omarchy binds lives here, grouped +// the way its own menu groups them (Window, Desk, Toggle, Capture, Theme, +// System), as labelled keys on one sheet that slides over the stage. The +// rails stay live underneath: volume is never more than one thumb away. +// +// Destructive keys (close, suspend, close all) take a hold, and say so when +// tapped. + +import { createEffect, Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import { type ActionId, actionById, PAD_PAGES } from "./actions.ts"; +import type { GestureHandlers } from "./desk.tsx"; +import { Icon } from "./icons.tsx"; +import { RAIL_W, SCREEN_W, within } from "./layout.ts"; +import type { RemoteStore } from "./store.ts"; +import { themed, themeTitle } from "./theme.ts"; + +export const PAD_X = RAIL_W; +export const PAD_W = SCREEN_W - 2 * RAIL_W; +const HEADER_H = 32; +const TAB_W = 60; +const CLOSE_W = PAD_W - PAD_PAGES.length * TAB_W; +const GRID_TOP = HEADER_H + 8; +const COLS = 4; +const ROWS = 3; +const CELL_W = 96; +const CELL_H = 88; +const CELL_GAP = 4; +const GRID_X0 = PAD_X + Math.floor((PAD_W - COLS * CELL_W) / 2); +/** Theme page: cells 0..9 are themes, the last two the style actions. */ +const THEME_CELLS = COLS * ROWS - 2; + +interface Cell { + kind: "action" | "theme" | "empty"; + id: string; + label: string; + hold: boolean; + active: boolean; +} + +function cells(store: RemoteStore, page: number): Cell[] { + const def = PAD_PAGES[page]; + if (!def) return []; + const out: Cell[] = []; + if (def.id === "theme") { + const themes = store.themeList(); + for (let i = 0; i < THEME_CELLS; i += 1) { + const name = themes[i]; + out.push( + name + ? { kind: "theme", id: name, label: themeTitle(name), hold: false, active: name === store.themeName() } + : { kind: "empty", id: `empty:${i}`, label: "", hold: false, active: false }, + ); + } + } + for (const id of def.actions) { + const action = actionById(id); + if (!action) continue; + out.push({ kind: "action", id, label: action.label, hold: action.hold === true, active: false }); + } + while (out.length < COLS * ROWS) out.push({ kind: "empty", id: `empty:${out.length}`, label: "", hold: false, active: false }); + return out.slice(0, COLS * ROWS); +} + +function cellRect(i: number) { + const col = i % COLS; + const row = Math.floor(i / COLS); + return { x: GRID_X0 + col * CELL_W, y: GRID_TOP + row * CELL_H, w: CELL_W - CELL_GAP, h: CELL_H - CELL_GAP }; +} + +function cellAt(x: number, y: number): number | null { + if (y < GRID_TOP || x < GRID_X0) return null; + const col = Math.floor((x - GRID_X0) / CELL_W); + const row = Math.floor((y - GRID_TOP) / CELL_H); + if (col < 0 || col >= COLS || row < 0 || row >= ROWS) return null; + return row * COLS + col; +} + +/** The pad's touch handlers; app.tsx routes every contact here while it is open. */ +export function padHandlers(store: RemoteStore): GestureHandlers { + let downCell: number | null = null; + let downTab: number | null = null; + let closeDown = false; + const active = () => store.pad() !== null; + return { + onDown: (c) => { + if (!active()) return; + downCell = null; + downTab = null; + closeDown = false; + if (!within(c.x, c.y, { x: PAD_X, y: 0, w: PAD_W, h: 320 })) return; + if (c.y < HEADER_H) { + const i = Math.floor((c.x - PAD_X) / TAB_W); + if (i < PAD_PAGES.length) { + downTab = i; + store.pressDown(`padtab:${i}`); + } else { + closeDown = true; + store.pressDown("padclose"); + } + return; + } + downCell = cellAt(c.x, c.y); + if (downCell !== null) store.pressDown(`cell:${downCell}`); + }, + onTap: () => { + if (!active()) return; + store.pressRelease(); + if (closeDown) { + store.setPad(null); + } else if (downTab !== null) { + store.setPad(store.pad() === downTab ? null : downTab); + } else if (downCell !== null) { + const cell = cells(store, store.pad()!)[downCell]; + if (!cell) return; + if (cell.kind === "theme") store.chooseTheme(cell.id); + else if (cell.kind === "action") { + if (cell.hold) store.say(`hold to ${cell.label.toLowerCase()}`); + else store.act(cell.id as ActionId); + } + } + downCell = null; + downTab = null; + closeDown = false; + }, + onLongPress: () => { + if (!active() || downCell === null) return; + const cell = cells(store, store.pad()!)[downCell]; + store.pressDown(null); + if (cell && cell.kind === "action" && cell.hold) store.act(cell.id as ActionId); + downCell = null; + }, + onPanStart: () => { + if (!active()) return; + store.pressDown(null); + downCell = null; + downTab = null; + closeDown = false; + }, + onUp: () => { + if (!active()) return; + store.pressRelease(); + }, + onCancel: () => store.pressRelease(), + }; +} + +export function Pad(p: { store: RemoteStore }) { + const page = () => p.store.pad() ?? 0; + const items = () => cells(p.store, page()); + return ( + + {/* header: page tabs + close */} + + + {(def, i) => ( + + + page() === i ? "text" : "textDim")} + > + {def().label} + + + + )} + + + + + + + + + {/* grid */} + + {(cell, i) => { + const r = cellRect(i); + return ( + + { + themed(() => cell().active ? "accentFill" : "surfaceMutedDim")(node); + if (cell().hold) themed("borderDanger")(node); + }} + > + + + + cell().active ? "textOnAccent" : cell().hold ? "textDanger" : "text")} + > + {cell().label} + + + + hold + + + + + + ); + }} + + + + ); +} + +/** A hold key's progress: the row under the cells fills while it is held. */ +function HoldHint(p: { store: RemoteStore }) { + let bar: import("@pocketjs/framework/components").NodeMirror | null = null; + createEffect(() => { + if (!bar) return; + const pressed = p.store.pressed(); + jump(bar, "opacity", pressed && pressed.startsWith("cell:") ? 1 : 0); + }); + return ( + { + bar = node; + themed("surfaceMuted")(node); + }} + /> + ); +} diff --git a/apps/pocket-remote/pocket.json b/apps/pocket-remote/pocket.json new file mode 100644 index 000000000..39c7d99e2 --- /dev/null +++ b/apps/pocket-remote/pocket.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://pocketjs.dev/schema/pocket-2.json", + "pocket": 2, + "id": "dev.pocket-stack.remote", + "name": "pocket-remote", + "title": "Pocket Remote", + "version": "0.1.0", + "engine": { + "capabilities": { + "requires": ["input.touch", "text.glyphs.baked"] + } + }, + "app": { + "entry": "apps/pocket-remote/main.tsx", + "output": "pocket-remote-main", + "framework": "solid", + "viewport": { + "fixed": { + "logical": [480, 320], + "presentation": "native" + } + } + } +} diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts new file mode 100644 index 000000000..5ff415d92 --- /dev/null +++ b/apps/pocket-remote/protocol.ts @@ -0,0 +1,230 @@ +// apps/pocket-remote/protocol.ts — the JSON lines the iPod and the Omarchy +// daemon exchange over the SVC WIRE (spec ops 30..32). One file, imported by +// both ends, so a field cannot drift between them. Every line is small: the +// device polls at most SVC_POLL_BUF (8192) bytes per frame and a state +// snapshot has to fit in one line, which is why titles are clipped and +// coordinates are integers. + +import type { ActionId } from "./actions.ts"; + +/** The svc app id: what the beacon advertises and the hello names. */ +export const REMOTE_APP = "pocket-remote"; +export const REMOTE_PROTO = 1; + +/** Title bytes kept per window in a snapshot. */ +export const TITLE_MAX = 28; +/** Windows carried per snapshot; Hyprland's `clients` beyond this are dropped + * by focus history (oldest first) so the line stays under the poll cap. */ +export const WINDOWS_MAX = 24; + +export type Layout = "dwindle" | "scrolling"; +export type Direction = "l" | "r" | "u" | "d"; + +// --------------------------------------------------------------------------- +// host -> device +// --------------------------------------------------------------------------- + +export interface WinInfo { + /** Hyprland window address, the handle every window command names. */ + a: string; + /** Class (initialClass when the live one is empty). */ + c: string; + /** Title, clipped to TITLE_MAX. */ + ti: string; + /** Workspace id. */ + ws: number; + /** Geometry in the monitor's logical pixels, relative to the monitor. */ + x: number; + y: number; + w: number; + h: number; + /** Floating. */ + f?: 1; + /** Fullscreen mode: 1 = maximized, 2 = fullscreen. */ + fs?: 1 | 2; + /** Pinned. */ + p?: 1; +} + +export interface WsInfo { + id: number; + /** Window count. */ + n: number; +} + +export interface HostState { + t: "state"; + /** The focused monitor's logical size (pixels / scale). */ + mon: { w: number; h: number }; + /** Ordinary workspaces (ids > 0), ascending. */ + ws: WsInfo[]; + /** Active workspace id on the focused monitor. */ + active: number; + /** Active window address, or null. */ + focus: string | null; + /** Windows on every ordinary workspace, most recently focused first. */ + win: WinInfo[]; + /** Tiling layout of the active workspace. */ + layout: Layout; + /** The scratchpad (special workspace) is showing. */ + special?: 1; +} + +export interface HostLevels { + t: "levels"; + /** Output volume 0..1 (may exceed 1 on boosted sinks; the device clamps). */ + vol: number; + mute?: 1; + /** Display brightness 0..1. */ + bri: number; +} + +/** The colours the device repaints itself with — Omarchy's colors.toml keys + * the remote uses, as #rrggbb. */ +export interface ThemeColors { + bg: string; + bgDark: string; + fg: string; + fgDim: string; + accent: string; + red: string; + green: string; + yellow: string; + blue: string; + magenta: string; + cyan: string; + /** color8 — the muted border/inactive tone. */ + muted: string; +} + +export interface HostTheme { + t: "theme"; + /** Theme slug, e.g. "tokyo-night". */ + name: string; + colors: ThemeColors; + /** Installed theme slugs, for the picker. */ + list: string[]; +} + +export interface HostHello { + t: "hello"; + proto: number; + /** The daemon host's display name (hostname). */ + name: string; + /** Omarchy version string, informational. */ + omarchy: string; + /** Whether this device may issue commands yet. "pending" means the daemon + * put an approval dialog on the laptop screen. */ + auth: "ok" | "pending" | "denied"; +} + +export interface HostAuth { + t: "auth"; + auth: "ok" | "pending" | "denied"; +} + +export interface HostToast { + t: "toast"; + text: string; +} + +export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast; + +// --------------------------------------------------------------------------- +// device -> host +// --------------------------------------------------------------------------- + +export interface ClientHello { + t: "hello"; + proto: number; + /** Device description for the approval dialog, e.g. "iPod touch". */ + device: string; +} + +/** Run one whitelisted action (actions.ts). */ +export interface ClientAction { + t: "act"; + id: ActionId; +} + +export interface ClientWorkspace { + t: "ws"; + /** Workspace id, or a relative step when `rel` is set. */ + n: number; + rel?: 1; +} + +export type WindowOp = + | { op: "focus"; a: string } + | { op: "close"; a: string } + | { op: "swap"; a: string; dir: Direction } + | { op: "move"; a: string; n: number }; + +export type ClientWindow = { t: "win" } & WindowOp; + +export interface ClientLevel { + t: "vol" | "bri"; + /** Absolute 0..1. */ + v: number; +} + +export interface ClientMute { + t: "mute"; +} + +export interface ClientMedia { + t: "media"; + op: "play" | "next" | "prev"; +} + +export interface ClientType { + t: "type"; + /** Literal text, typed into the focused window. */ + text: string; +} + +export interface ClientKey { + t: "key"; + /** An xkb keysym name: Return, BackSpace, Tab, Escape, space, Left... */ + k: string; +} + +export interface ClientTheme { + t: "theme"; + name: string; +} + +export type ClientLine = + | ClientHello + | ClientAction + | ClientWorkspace + | ClientWindow + | ClientLevel + | ClientMute + | ClientMedia + | ClientType + | ClientKey + | ClientTheme; + +/** Parse one wire batch (newline-separated JSON) into typed lines; malformed + * lines are skipped rather than allowed to wedge the reader. */ +export function parseLines(batch: string): T[] { + const out: T[] = []; + for (const line of batch.split("\n")) { + if (line === "") continue; + try { + const value = JSON.parse(line) as T; + if (value && typeof value === "object" && typeof (value as { t?: unknown }).t === "string") out.push(value); + } catch { + // skip + } + } + return out; +} + +/** Clip a title for the wire: TITLE_MAX code points, an ellipsis when cut. */ +export function clipTitle(title: string, max = TITLE_MAX): string { + const chars = Array.from(title.replace(/\s+/g, " ").trim()); + if (chars.length <= max) return chars.join(""); + return chars.slice(0, max - 1).join("") + "…"; +} diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts new file mode 100644 index 000000000..c8b295224 --- /dev/null +++ b/apps/pocket-remote/store.ts @@ -0,0 +1,579 @@ +// apps/pocket-remote/store.ts — the remote's live state: the link to the +// daemon, the mirrored desktop (workspaces, windows, levels, theme), the +// tile slot pool that animates the stage, and the senders every touch target +// calls. Everything the screen shows reads from here; nothing here knows +// about pixels except the tile pool, which owns motion. +// +// Reactivity is coarse on purpose: a snapshot replaces one signal, tiles +// live in a fixed pool of per-slot signals so a frame in which one window +// moves re-renders one node, and idle frames write nothing. + +import { batch, createMemo, createSignal, type Accessor } from "solid-js"; +import { getOps } from "@pocketjs/framework"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { onFrame } from "@pocketjs/framework/lifecycle"; +import { type ActionId, actionById } from "./actions.ts"; +import { + approach, + CLOSE_HOLD_SECONDS, + clamp01, + fitMonitor, + type Rect, + stageWindows, + stripTabs, + swapDirection, + type Tab, + TILE_SLOTS, + TILE_TWO_LINES_H, + tileRect, + windowAt, +} from "./layout.ts"; +import { + type ClientLine, + type Direction, + type HostLine, + type HostState, + type Layout, + parseLines, + REMOTE_APP, + REMOTE_PROTO, + type ThemeColors, +} from "./protocol.ts"; +import { isThemeColors, setTheme as paintTheme, TOKYO_NIGHT } from "./theme.ts"; + +// --------------------------------------------------------------------------- +// svc channel +// --------------------------------------------------------------------------- + +export interface Svc { + /** Non-blocking transport probe, once per frame; false until connected. */ + open(): boolean; + poll(): HostLine[]; + send(line: ClientLine): void; +} + +/** Null = this host has no svc channel (hosts/sim, goldens). */ +export function connectSvc(): Svc | null { + const ops = getOps(); + if (!ops.svcOpen || !ops.svcPoll || !ops.svcSend) return null; + const open = ops.svcOpen.bind(ops); + const poll = ops.svcPoll.bind(ops); + const send = ops.svcSend.bind(ops); + return { + open: () => open(REMOTE_APP), + poll() { + const batchText = poll(); + return batchText ? parseLines(batchText) : []; + }, + send(line) { + send(JSON.stringify(line)); + }, + }; +} + +function deviceName(): string { + const host = (getOps() as { __host?: string }).__host ?? ""; + if (host.startsWith("ipodtouch4")) return "iPod touch 4"; + if (host.startsWith("iphone4s")) return "iPhone 4S"; + if (host.startsWith("iphone2g")) return "iPhone"; + return "PocketJS"; +} + +// --------------------------------------------------------------------------- +// types +// --------------------------------------------------------------------------- + +/** off = no svc channel at all; search = looking for the daemon; pending = + * connected, waiting for the laptop to approve this device. */ +export type Link = "off" | "search" | "pending" | "denied" | "up"; + +export interface TileView { + x: number; + y: number; + w: number; + h: number; + /** 0..1, fades a tile in on open and out on close. */ + alpha: number; +} + +export interface TileSlot { + index: number; + /** Window address, or null while the slot is free. */ + a: string | null; + /** The tile's node, captured by ref; geometry and opacity are written to + * it directly by the frame loop (jump), never through Solid. */ + node: NodeMirror | null; + /** True while the slot is showing a window (free slots paint nothing). */ + live: Accessor; + label: Accessor; + title: Accessor; + /** Tall enough for class + title. */ + twoLines: Accessor; + focused: Accessor; + floating: Accessor; + setLive(live: boolean): void; + setLabel(label: string): void; + setTitle(title: string): void; + setTwoLines(two: boolean): void; + setFocused(focused: boolean): void; + setFloating(floating: boolean): void; + /** Motion targets, owned by the frame loop. */ + target: Rect; + targetAlpha: number; + cur: TileView; + dying: boolean; +} + +export interface Drag { + a: string; + x: number; + y: number; + /** Tile under the finger (not the dragged one). */ + over: string | null; + /** Workspace tab under the finger. */ + overWs: number | null; +} + +export interface Closing { + a: string; + /** 0..1 of CLOSE_HOLD_SECONDS. */ + progress: number; +} + +export interface RailDrag { + rail: "vol" | "bri"; + /** Level when the finger went down. */ + start: number; +} + +export type KbLayer = "lower" | "upper" | "sym"; + +const TOAST_FRAMES = 150; +/** Frames between level sends while a rail is being dragged. */ +const LEVEL_SEND_EVERY = 3; +/** Frames after a rail release during which host echoes are ignored. */ +const LEVEL_ECHO_HOLD = 30; + +export type RemoteStore = ReturnType; + +// --------------------------------------------------------------------------- +// store +// --------------------------------------------------------------------------- + +export function createRemoteStore(svc: Svc | null = connectSvc()) { + // ---- link ----------------------------------------------------------------- + const [link, setLink] = createSignal(svc ? "search" : "off"); + const [hostName, setHostName] = createSignal(""); + const [omarchy, setOmarchy] = createSignal(""); + let opened = false; + + // ---- mirrored desktop --------------------------------------------------------- + const [state, setState] = createSignal(null); + const [vol, setVol] = createSignal(0); + const [mute, setMute] = createSignal(false); + const [bri, setBri] = createSignal(0); + const [themeName, setThemeName] = createSignal("tokyo-night"); + const [themeList, setThemeList] = createSignal([]); + const [colors, setColors] = createSignal(TOKYO_NIGHT); + + const tabs = createMemo(() => { + const s = state(); + return s ? stripTabs(s.ws, s.active) : []; + }); + const layout = createMemo(() => state()?.layout ?? "dwindle"); + const focusTitle = createMemo(() => { + const s = state(); + if (!s || !s.focus) return ""; + const win = s.win.find((w) => w.a === s.focus); + return win ? (win.ti || win.c) : ""; + }); + const focusClass = createMemo(() => { + const s = state(); + if (!s || !s.focus) return ""; + return s.win.find((w) => w.a === s.focus)?.c ?? ""; + }); + + // ---- ui -------------------------------------------------------------------- + const [pad, setPad] = createSignal(null); + const [kb, setKb] = createSignal(false); + const [kbLayer, setKbLayer] = createSignal("lower"); + const [pressed, setPressed] = createSignal(null); + const [drag, setDrag] = createSignal(null); + const [closing, setClosing] = createSignal(null); + const [railDrag, setRailDrag] = createSignal(null); + const [toast, setToast] = createSignal(""); + const [frame, setFrame] = createSignal(0); + let toastUntil = 0; + let frameCount = 0; + let pressLinger = 0; + + const say = (text: string) => { + setToast(text); + toastUntil = frameCount + TOAST_FRAMES; + }; + + // ---- tile pool --------------------------------------------------------------- + const slots: TileSlot[] = []; + for (let i = 0; i < TILE_SLOTS; i += 1) { + const [live, setLive] = createSignal(false); + const [label, setLabel] = createSignal(""); + const [title, setTitle] = createSignal(""); + const [twoLines, setTwoLines] = createSignal(false); + const [focused, setFocused] = createSignal(false); + const [floating, setFloating] = createSignal(false); + slots.push({ + index: i, + a: null, + node: null, + live, + label, + title, + twoLines, + focused, + floating, + setLive, + setLabel, + setTitle, + setTwoLines, + setFocused, + setFloating, + target: { x: 0, y: 0, w: 0, h: 0 }, + targetAlpha: 0, + cur: { x: 0, y: 0, w: 0, h: 0, alpha: 0 }, + dying: false, + }); + } + const slotOf = (a: string): TileSlot | undefined => slots.find((s) => s.a === a); + const paintSlot = (slot: TileSlot) => { + const node = slot.node; + if (!node) return; + const c = slot.cur; + jump(node, "insetL", Math.round(c.x)); + jump(node, "insetT", Math.round(c.y)); + jump(node, "width", Math.max(1, Math.round(c.w))); + jump(node, "height", Math.max(1, Math.round(c.h))); + jump(node, "opacity", c.alpha); + }; + + /** Re-target the pool from a snapshot: keep slots by address, fade new + * windows in where they belong, fade vanished ones out in place. */ + const retarget = (s: HostState) => { + const fit = fitMonitor(s.mon); + const shown = stageWindows(s); + const seen = new Set(); + batch(() => { + for (const win of shown) { + seen.add(win.a); + const rect = tileRect(win, fit); + let slot = slotOf(win.a); + if (!slot) { + slot = slots.find((candidate) => candidate.a === null); + if (!slot) continue; // pool exhausted: WINDOWS_MAX guards this + slot.a = win.a; + slot.cur = { ...rect, alpha: 0 }; + paintSlot(slot); + slot.setLive(true); + } + slot.dying = false; + slot.target = rect; + slot.targetAlpha = 1; + slot.setLabel(win.c); + slot.setTitle(win.ti); + slot.setTwoLines(rect.h >= TILE_TWO_LINES_H && rect.w >= 56); + slot.setFocused(win.a === s.focus); + slot.setFloating(win.f === 1); + } + for (const slot of slots) { + if (slot.a !== null && !seen.has(slot.a)) { + slot.dying = true; + slot.targetAlpha = 0; + } + } + }); + }; + + /** Replace the mirrored desktop and re-target the tiles in one step; the + * optimistic paths (a tap on the strip) go through here too, so the stage + * moves the instant the finger lifts, not when the daemon confirms. */ + const commit = (next: HostState) => { + setState(next); + retarget(next); + }; + + /** Current tile rectangles for hit testing, in paint order. */ + const tilesForHit = (): { a: string; rect: Rect }[] => { + const s = state(); + if (!s) return []; + const out: { a: string; rect: Rect }[] = []; + for (const win of stageWindows(s)) { + const slot = slotOf(win.a); + if (slot && !slot.dying) out.push({ a: win.a, rect: slot.target }); + } + return out; + }; + + // ---- senders ------------------------------------------------------------------- + const send = (line: ClientLine) => { + if (svc && link() === "up") svc.send(line); + }; + const act = (id: ActionId) => { + const def = actionById(id); + if (!def) return; + send({ t: "act", id }); + say(def.label); + }; + const workspace = (n: number) => { + const s = state(); + if (s && s.active !== n) commit({ ...s, active: n }); + send({ t: "ws", n }); + }; + const workspaceStep = (delta: 1 | -1) => { + const s = state(); + if (s) { + const ids = tabs().map((t) => t.id); + const at = ids.indexOf(s.active); + const next = ids[at + delta]; + if (next !== undefined) commit({ ...s, active: next }); + } + send({ t: "ws", n: delta, rel: 1 }); + }; + const focusWindow = (a: string) => { + const s = state(); + if (s && s.focus !== a) { + setState({ ...s, focus: a }); + for (const slot of slots) if (slot.a) slot.setFocused(slot.a === a); + } + send({ t: "win", op: "focus", a }); + }; + const closeWindow = (a: string) => { + send({ t: "win", op: "close", a }); + const slot = slotOf(a); + if (slot) { + slot.dying = true; + slot.targetAlpha = 0; + } + say("closed"); + }; + const swapWindows = (a: string, b: string) => { + const from = slotOf(a); + const to = slotOf(b); + if (!from || !to) return; + const dir: Direction = swapDirection(from.target, to.target); + send({ t: "win", op: "swap", a, dir }); + }; + const moveWindow = (a: string, n: number) => { + send({ t: "win", op: "move", a, n }); + const s = state(); + if (s) commit({ ...s, win: s.win.map((w) => (w.a === a ? { ...w, ws: n } : w)) }); + say(`moved to ${n}`); + }; + + let levelSendAt = 0; + let levelEchoHoldUntil = 0; + let pendingLevel: { rail: "vol" | "bri"; v: number } | null = null; + const setLevel = (rail: "vol" | "bri", v: number, final = false) => { + const value = clamp01(v); + if (rail === "vol") { + setVol(value); + if (value > 0) setMute(false); + } else setBri(value); + levelEchoHoldUntil = frameCount + LEVEL_ECHO_HOLD; + if (final || frameCount >= levelSendAt) { + send({ t: rail, v: Math.round(value * 100) / 100 }); + levelSendAt = frameCount + LEVEL_SEND_EVERY; + pendingLevel = null; + } else { + pendingLevel = { rail, v: value }; + } + }; + const toggleMute = () => { + setMute(!mute()); + send({ t: "mute" }); + }; + const media = (op: "play" | "next" | "prev") => send({ t: "media", op }); + const typeText = (text: string) => send({ t: "type", text }); + const typeKey = (k: string) => send({ t: "key", k }); + const chooseTheme = (name: string) => { + send({ t: "theme", name }); + say(name); + }; + + // ---- reducer --------------------------------------------------------------------- + const applyLine = (line: HostLine) => { + switch (line.t) { + case "hello": + setHostName(line.name); + setOmarchy(line.omarchy); + setLink(line.auth === "ok" ? "up" : line.auth === "pending" ? "pending" : "denied"); + break; + case "auth": + setLink(line.auth === "ok" ? "up" : line.auth === "pending" ? "pending" : "denied"); + break; + case "state": + commit(line); + break; + case "levels": + if (frameCount >= levelEchoHoldUntil && !railDrag()) { + setVol(clamp01(line.vol)); + setMute(line.mute === 1); + setBri(clamp01(line.bri)); + } + break; + case "theme": + if (isThemeColors(line.colors)) { + setColors(line.colors); + paintTheme(line.colors); + } + setThemeName(line.name); + if (Array.isArray(line.list)) setThemeList(line.list.filter((v): v is string => typeof v === "string")); + break; + case "toast": + say(line.text); + break; + } + }; + + // ---- frame loop ---------------------------------------------------------------------- + onFrame(() => { + frameCount += 1; + let moved = false; + + if (svc) { + const up = svc.open(); + if (up && !opened) { + opened = true; + svc.send({ t: "hello", proto: REMOTE_PROTO, device: deviceName() }); + } else if (!up && opened) { + opened = false; + setLink("search"); + setState(null); + for (const slot of slots) { + slot.dying = true; + slot.targetAlpha = 0; + } + } + if (up) for (const line of svc.poll()) applyLine(line); + } + + if (pendingLevel && frameCount >= levelSendAt) { + const { rail, v } = pendingLevel; + pendingLevel = null; + send({ t: rail, v: Math.round(v * 100) / 100 }); + levelSendAt = frameCount + LEVEL_SEND_EVERY; + } + + for (const slot of slots) { + if (slot.a === null) continue; + const c = slot.cur; + const t = slot.target; + const next: TileView = { + x: approach(c.x, t.x), + y: approach(c.y, t.y), + w: approach(c.w, t.w), + h: approach(c.h, t.h), + alpha: slot.targetAlpha === 0 ? Math.max(0, c.alpha - 0.12) : Math.min(1, c.alpha + 0.12), + }; + if (next.x !== c.x || next.y !== c.y || next.w !== c.w || next.h !== c.h || next.alpha !== c.alpha) { + slot.cur = next; + paintSlot(slot); + moved = true; + } + if (slot.dying && next.alpha <= 0) { + slot.a = null; + slot.dying = false; + slot.setLive(false); + } + } + + const hold = closing(); + if (hold) { + const progress = Math.min(1, hold.progress + 1 / (60 * CLOSE_HOLD_SECONDS)); + setClosing({ a: hold.a, progress }); + if (progress >= 1) { + closeWindow(hold.a); + setClosing(null); + } + moved = true; + } + + if (pressLinger > 0) { + pressLinger -= 1; + if (pressLinger === 0) setPressed(null); + } + if (toast() !== "" && frameCount >= toastUntil) setToast(""); + if (moved) setFrame(frameCount); + }); + + // ---- press feedback ---------------------------------------------------------------------- + const pressDown = (id: string | null) => { + pressLinger = 0; + setPressed(id); + }; + const pressRelease = () => { + // Linger a few frames so a tap that lands and lifts inside one frame + // still shows. + if (pressed() !== null) pressLinger = 5; + }; + + /** Ref for a tile slot's node: binds it and paints the current geometry. */ + const bindSlot = (slot: TileSlot) => (node: NodeMirror) => { + slot.node = node; + paintSlot(slot); + }; + + return { + svc, + bindSlot, + link, + hostName, + omarchy, + state, + tabs, + layout, + focusTitle, + focusClass, + vol, + mute, + bri, + themeName, + themeList, + colors, + slots, + tilesForHit, + windowAt: (x: number, y: number) => windowAt(x, y, tilesForHit()), + pad, + setPad, + kb, + setKb, + kbLayer, + setKbLayer, + pressed, + pressDown, + pressRelease, + drag, + setDrag, + closing, + setClosing, + railDrag, + setRailDrag, + toast, + say, + frame, + act, + workspace, + workspaceStep, + focusWindow, + closeWindow, + swapWindows, + moveWindow, + setLevel, + toggleMute, + media, + typeText, + typeKey, + chooseTheme, + applyLine, + send, + }; +} diff --git a/apps/pocket-remote/theme.ts b/apps/pocket-remote/theme.ts new file mode 100644 index 000000000..77c3d815f --- /dev/null +++ b/apps/pocket-remote/theme.ts @@ -0,0 +1,157 @@ +// apps/pocket-remote/theme.ts — the remote wears the desktop's theme. Omarchy +// publishes its palette as colors.toml; the daemon forwards the keys the +// remote uses (protocol ThemeColors) whenever the theme changes, and every +// node that carries a themed colour re-paints through jump() on its +// NodeMirror. Class literals still carry Tokyo Night, Omarchy's default, so +// the first frame looks right before any theme line arrives. +// +// Why mirrors and not classes: a class string is a compile-time literal the +// device looks up in a baked table, so a colour that arrives at runtime can +// only reach a node as a prop write. Pressed states therefore live on +// separate overlay nodes (see desk.tsx) — a class flip on a themed node would +// re-apply the baked record over the runtime colour. + +import { createEffect, createSignal, type Accessor } from "solid-js"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import type { ThemeColors } from "./protocol.ts"; + +export const TOKYO_NIGHT: ThemeColors = { + bg: "#1a1b26", + bgDark: "#13141c", + fg: "#a9b1d6", + fgDim: "#565f89", + accent: "#7aa2f7", + red: "#f7768e", + green: "#9ece6a", + yellow: "#e0af68", + blue: "#7aa2f7", + magenta: "#bb9af7", + cyan: "#449dab", + muted: "#414868", +}; + +/** What a themed node paints with which colour. */ +export type Role = + | "surface" // bgColor = bg + | "surfaceDark" // bgColor = bgDark + | "surfaceMuted" // bgColor = muted + | "surfaceMutedDim" // bgColor = muted at 50% + | "accentFill" // bgColor = accent + | "accentTint" // bgColor = accent at 25% + | "dangerFill" // bgColor = red + | "okFill" // bgColor = green + | "text" // textColor = fg + | "textDim" // textColor = fgDim + | "textAccent" // textColor = accent + | "textOnAccent" // textColor = bgDark + | "textDanger" // textColor = red + | "fgFill" // bgColor = fg (icon strokes) + | "fgDimFill" // bgColor = fgDim + | "borderMuted" // borderColor = muted + | "borderFg" // borderColor = fg + | "borderAccent" // borderColor = accent + | "borderDanger"; // borderColor = red + +type Prop = "bgColor" | "textColor" | "borderColor"; + +function paint(role: Role, c: ThemeColors): [Prop, string] { + switch (role) { + case "surface": + return ["bgColor", c.bg]; + case "surfaceDark": + return ["bgColor", c.bgDark]; + case "surfaceMuted": + return ["bgColor", c.muted]; + case "surfaceMutedDim": + return ["bgColor", c.muted + "80"]; + case "accentFill": + return ["bgColor", c.accent]; + case "accentTint": + return ["bgColor", c.accent + "40"]; + case "dangerFill": + return ["bgColor", c.red]; + case "okFill": + return ["bgColor", c.green]; + case "text": + return ["textColor", c.fg]; + case "textDim": + return ["textColor", c.fgDim]; + case "textAccent": + return ["textColor", c.accent]; + case "textOnAccent": + return ["textColor", c.bgDark]; + case "textDanger": + return ["textColor", c.red]; + case "fgFill": + return ["bgColor", c.fg]; + case "fgDimFill": + return ["bgColor", c.fgDim]; + case "borderMuted": + return ["borderColor", c.muted]; + case "borderFg": + return ["borderColor", c.fg]; + case "borderAccent": + return ["borderColor", c.accent]; + case "borderDanger": + return ["borderColor", c.red]; + } +} + +const [themeColorsSignal, setThemeColorsSignal] = createSignal(TOKYO_NIGHT); + +/** The live palette as a signal, for anything that derives from it. */ +export const themeColors: Accessor = themeColorsSignal; + +/** Paint one role onto one node with the given palette. */ +export function paintRole(node: NodeMirror, role: Role, colors: ThemeColors): void { + const [prop, value] = paint(role, colors); + jump(node, prop, value); +} + +/** + * A `ref` for a node that paints one themed colour. Repaints whenever the + * palette changes — and, because the effect runs after Solid's render pass, + * after any class flip on the same node, so a runtime colour always wins + * over the baked record. Pass a function for a role that changes with state + * (an active tab, a pressed key). + */ +export function themed(role: Role | (() => Role)): (node: NodeMirror) => void { + return (node) => { + createEffect(() => { + const colors = themeColors(); + const current = typeof role === "function" ? role() : role; + // The baked classes already carry Tokyo Night; painting it again on a + // static role would only cost a prop write per node at boot. + if (colors !== TOKYO_NIGHT || typeof role === "function") paintRole(node, current, colors); + }); + }; +} + +/** Repaint every themed node with a new palette. */ +export function setTheme(colors: ThemeColors): void { + setThemeColorsSignal(colors); +} + +export function currentTheme(): ThemeColors { + return themeColors(); +} + +/** Validate a palette off the wire: every key present and a #rrggbb colour. */ +export function isThemeColors(value: unknown): value is ThemeColors { + if (!value || typeof value !== "object") return false; + const keys: (keyof ThemeColors)[] = [ + "bg", "bgDark", "fg", "fgDim", "accent", "red", "green", "yellow", "blue", "magenta", "cyan", "muted", + ]; + const record = value as Record; + return keys.every((key) => typeof record[key] === "string" && /^#[0-9a-fA-F]{6}$/.test(record[key] as string)); +} + +/** Pretty theme name from its slug: "tokyo-night" -> "Tokyo Night". */ +export function themeTitle(slug: string): string { + return slug + .split("-") + .filter(Boolean) + .map((part) => part[0]!.toUpperCase() + part.slice(1)) + .join(" "); +} diff --git a/framework/src/manifest/resolve.ts b/framework/src/manifest/resolve.ts index cde23f554..4ca4c3d82 100644 --- a/framework/src/manifest/resolve.ts +++ b/framework/src/manifest/resolve.ts @@ -37,6 +37,22 @@ function sameViewport(left: Viewport, right: Viewport): boolean { return left[0] === right[0] && left[1] === right[1]; } +/** + * Native presentation fills the panel: one logical px = rasterDensity + * physical px, with no letterbox. A panel is the same panel turned a quarter + * turn, so a logical viewport that fills it in the transposed orientation + * fills it too — that is how a portrait handheld hosts a landscape app. The + * returned physical viewport is the panel as the app sees it (transposed + * when the fit was transposed); `logicalViewports` stays the gate that says + * which orientations a target's host can actually present. + */ +function nativeFill(logical: Viewport, rasterDensity: number, panel: Viewport): Viewport | null { + const scaled: Viewport = [logical[0] * rasterDensity, logical[1] * rasterDensity]; + if (sameViewport(scaled, panel)) return [panel[0], panel[1]]; + if (sameViewport(scaled, [panel[1], panel[0]])) return [panel[1], panel[0]]; + return null; +} + function resolveFixedDisplay( requested: { logical: Viewport; presentation: PresentationMode }, provided: FixedDisplayProfile, @@ -66,19 +82,19 @@ function resolveFixedDisplay( }); ok = false; } - if ( - presentation === "native" && - !sameViewport( - [logical[0] * provided.rasterDensity, logical[1] * provided.rasterDensity], - provided.physicalViewport, - ) - ) { - diagnostics?.push({ - code: "surface.nativeMismatch", - path, - message: "native auxiliary presentation requires the logical viewport to fill the panel", - }); - ok = false; + let physical: Viewport = [provided.physicalViewport[0], provided.physicalViewport[1]]; + if (presentation === "native") { + const fill = nativeFill(logical, provided.rasterDensity, provided.physicalViewport); + if (fill === null) { + diagnostics?.push({ + code: "surface.nativeMismatch", + path, + message: "native auxiliary presentation requires the logical viewport to fill the panel", + }); + ok = false; + } else { + physical = fill; + } } if (presentation === "integer-fit") { const x = provided.physicalViewport[0] / logical[0]; @@ -95,7 +111,7 @@ function resolveFixedDisplay( return ok ? { logical: [logical[0], logical[1]], - physical: [provided.physicalViewport[0], provided.physicalViewport[1]], + physical, presentation, rasterDensity: provided.rasterDensity, } @@ -223,17 +239,21 @@ function resolveViewport( }); ok = false; } - // Native presentation: one logical px maps to rasterDensity physical px. - if ( - presentation === "native" && - !sameViewport([logical[0] * rasterDensity, logical[1] * rasterDensity], physicalViewport) - ) { - diagnostics.push({ - code: "viewport.nativeMismatch", - path: fixedPath, - message: "native presentation requires the logical viewport to fill the panel", - }); - ok = false; + // Native presentation: one logical px maps to rasterDensity physical px, + // in either orientation of the panel (nativeFill). + let physical: Viewport = [physicalViewport[0], physicalViewport[1]]; + if (presentation === "native") { + const fill = nativeFill(logical, rasterDensity, physicalViewport); + if (fill === null) { + diagnostics.push({ + code: "viewport.nativeMismatch", + path: fixedPath, + message: "native presentation requires the logical viewport to fill the panel", + }); + ok = false; + } else { + physical = fill; + } } if (presentation === "integer-fit") { const x = physicalViewport[0] / logical[0]; @@ -251,7 +271,7 @@ function resolveViewport( ? { logical, presentation, - physical: [physicalViewport[0], physicalViewport[1]], + physical, policy: "fixed", } : null; diff --git a/hosts/iphone2g/pocket_runtime.c b/hosts/iphone2g/pocket_runtime.c index 44990522f..e3bba6dfd 100644 --- a/hosts/iphone2g/pocket_runtime.c +++ b/hosts/iphone2g/pocket_runtime.c @@ -3,6 +3,9 @@ #include "pocket_core.h" #include "pocket_spec.h" #include "quickjs.h" +#ifdef POCKET_SVC_WIRE +#include "svcwire.h" +#endif #include #include @@ -59,6 +62,14 @@ typedef enum { HostDebugPause, HostDebugStep, HostReportAppAction, +#ifdef POCKET_SVC_WIRE + /* spec ops 30..32 — the host service channel over the PKNT wire + * (svcwire.c). Present only in builds whose companion is on the network, + * so every other legacy Apple op table stays byte-identical. */ + HostSvcOpen, + HostSvcPoll, + HostSvcSend, +#endif } HostOperation; static JSRuntime *runtime; @@ -70,6 +81,10 @@ static char reported_action_name[POCKETJS_ACTION_NAME_CAPACITY]; static int32_t reported_action_value; static unsigned long reported_action_sequence; static int runtime_failed; +#ifdef POCKET_SVC_WIRE +/* spec SVC_POLL_BUF (8192) + terminator: one svcPoll batch. */ +static char svc_poll_buffer[8193]; +#endif static void clear_error(void) { last_error[0] = '\0'; @@ -418,6 +433,24 @@ static JSValue host_operation( reported_action_sequence += 1; JS_FreeCString(ctx, text); return JS_UNDEFINED; +#ifdef POCKET_SVC_WIRE + case HostSvcOpen: { + int open; + if (!string_argument(ctx, argc, argv, 0, &text, &text_length)) return JS_NewBool(ctx, 0); + open = svcwire_open(text); + JS_FreeCString(ctx, text); + return JS_NewBool(ctx, open); + } + case HostSvcPoll: { + size_t length = svcwire_recv_lines(svc_poll_buffer, sizeof svc_poll_buffer); + return length == 0 ? JS_UNDEFINED : JS_NewStringLen(ctx, svc_poll_buffer, length); + } + case HostSvcSend: + if (!string_argument(ctx, argc, argv, 0, &text, &text_length)) return JS_UNDEFINED; + svcwire_send_line(text, text_length); + JS_FreeCString(ctx, text); + return JS_UNDEFINED; +#endif } return JS_ThrowInternalError(ctx, "unknown PocketJS HostOp"); } @@ -478,6 +511,14 @@ static int install_host(int width, int height) { JS_FreeValue(context, ui); return 0; } +#ifdef POCKET_SVC_WIRE + if (!add_host_operation(context, ui, "svcOpen", 1, HostSvcOpen) || + !add_host_operation(context, ui, "svcPoll", 0, HostSvcPoll) || + !add_host_operation(context, ui, "svcSend", 1, HostSvcSend)) { + JS_FreeValue(context, ui); + return 0; + } +#endif JSValue viewport = JS_NewObject(context); if (JS_IsException(viewport)) { @@ -639,6 +680,11 @@ static int run_frame( unsigned int tick; unsigned int index; if (runtime == 0 || context == 0 || runtime_failed) return 0; +#ifdef POCKET_SVC_WIRE + /* Bounded, non-blocking: discovery, connect, rx and tx progress once per + * guest turn, before the guest polls. */ + svcwire_pump(); +#endif JSValue touch_array = JS_NewArray(context); JSValue hit_array = JS_NewArray(context); if (JS_IsException(touch_array) || JS_IsException(hit_array)) { diff --git a/hosts/iphone2g/runtime.c b/hosts/iphone2g/runtime.c index ce123f756..0191954b6 100644 --- a/hosts/iphone2g/runtime.c +++ b/hosts/iphone2g/runtime.c @@ -1680,11 +1680,20 @@ static void launch_application(id self, id application) { Class hardware_class = objc_getClass("UIHardware"); Class window_class = objc_getClass("UIWindow"); CGRect frame; + CGRect window_frame; + int landscape; if (g_window != NULL) { return; } +#ifdef POCKET_KEEP_AWAKE + /* A remote control must not auto-lock under the thumb: the idle timer is + * the device's, and the app disables it for its own lifetime. */ + if (responds_to(application, "setIdleTimerDisabled:")) { + send_void_bool(application, "setIdleTimerDisabled:", YES); + } +#endif if (responds_to(application, "setStatusBarHidden:")) { send_void_bool(application, "setStatusBarHidden:", YES); } else { @@ -1692,18 +1701,33 @@ static void launch_application(id self, id application) { send_void_float((id)hardware_class, "_setStatusBarHeight:", 0.0f); send_status_bar_mode(application, 2, 0, 0.0f, 0); } + /* + * The panel is portrait. A landscape plan (logical width > height) keeps + * the window at the panel's own size and rotates the content view a + * quarter turn about its centre — the home button ends up on the right. + * UIKit inverts that transform for locationInView:, so touches arrive in + * the view's own 480x320 space and the touch mapping below stays the same; + * the CAEAGLLayer's drawable follows the view's bounds, so the GL path + * gets exactly logical x density pixels either way. + */ + landscape = POCKET_LOGICAL_WIDTH > POCKET_LOGICAL_HEIGHT; frame.origin.x = 0.0f; frame.origin.y = 0.0f; frame.size.width = (float)POCKET_LOGICAL_WIDTH; frame.size.height = (float)POCKET_LOGICAL_HEIGHT; g_content_frame = frame; + window_frame = frame; + if (landscape) { + window_frame.size.width = frame.size.height; + window_frame.size.height = frame.size.width; + } if (responds_to(application, "setStatusBarHidden:")) { - g_window = send_id_rect(send_id((id)window_class, "alloc"), "initWithFrame:", frame); + g_window = send_id_rect(send_id((id)window_class, "alloc"), "initWithFrame:", window_frame); } else { g_window = send_id_rect( send_id((id)window_class, "alloc"), "initWithContentRect:", - frame + window_frame ); } g_view = send_id_rect(send_id(objc_getClass("PocketJSRuntimeView"), "alloc"), "initWithFrame:", frame); @@ -1713,6 +1737,21 @@ static void launch_application(id self, id application) { copy_status_message("UIKit could not create the PocketJS window"); return; } + if (landscape) { + /* CGAffineTransformMakeRotation(+pi/2): a = cos, b = sin, c = -sin, + * d = cos. The view's centre moves to the window's centre; bounds stay + * the logical 480x320. */ + CGAffineTransform quarter_turn = {0.0f, 1.0f, -1.0f, 0.0f, 0.0f, 0.0f}; + CGPoint window_centre; + window_centre.x = window_frame.size.width / 2.0f; + window_centre.y = window_frame.size.height / 2.0f; + ((void (*)(id, SEL, CGAffineTransform))objc_msgSend)( + g_view, + sel_registerName("setTransform:"), + quarter_turn + ); + ((void (*)(id, SEL, CGPoint))objc_msgSend)(g_view, sel_registerName("setCenter:"), window_centre); + } if (POCKET_RASTER_DENSITY > 1) { id layer; diff --git a/hosts/iphone2g/svcwire.c b/hosts/iphone2g/svcwire.c new file mode 100644 index 000000000..3d7b8e4d4 --- /dev/null +++ b/hosts/iphone2g/svcwire.c @@ -0,0 +1,630 @@ +/* + * SVC WIRE (PKNT) client — see svcwire.h. Byte layouts come verbatim from + * contracts/spec/spec.ts "SVC WIRE protocol" (the Rust codec in + * engine/core/src/wire.rs is the executable reference): + * + * beacon (UDP, host -> broadcast, once a second): + * u32 'PKDB' LE · u8 version · u8 reserved · u16 tcpPort LE · + * u8 appLen · app · u8 nameLen · name + * hello (device -> host, before any frame): + * u32 'PKNT' LE · u8 version · u8 reserved · u8 appLen · app + * hello ack (host -> device): u32 'PKNT' LE · u8 acceptedVersion · + * u8 flags · u16 reserved + * frame header (8 bytes): u8 type · u8 flags · u16 reserved · + * u32 payloadLen LE + * + * Types handled: ping (echoed as pong), ctrl (one JSON line -> the poll + * queue). Everything else — file, stream, unknown — is skipped by length, + * the protocol's forward-compatibility rule. + * + * Discovery order: a host override file (one line, `a.b.c.d[:port]`, at + * POCKET_SVC_HOST_PATH — writable over the deployment SSH tunnel, for + * broadcast-hostile networks), then the compile-time POCKET_SVC_HOST string + * when the tool bakes one, then the LAN beacon. A failing override degrades + * into beacon discovery instead of wedging the transport. + * + * Like the 3DS transport this host never blocks a frame on the network: + * every socket is non-blocking and svcwire_pump does a bounded amount of + * work per call from the frame runner. + */ + +#include "svcwire.h" + +#ifdef POCKET_SVC_WIRE + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SVC_WIRE_MAGIC 0x544e4b50u /* 'PKNT' little-endian */ +#define SVC_BEACON_MAGIC 0x42444b50u /* 'PKDB' little-endian */ +#define SVC_WIRE_VERSION 1u +#define SVC_WIRE_HEADER_BYTES 8u +#define SVC_WIRE_MAX_PAYLOAD (256u * 1024u) +#define SVC_BEACON_PORT 8621u +#define SVC_WIRE_PORT 8622u +#define SVC_MSG_PING 0x01u +#define SVC_MSG_PONG 0x02u +#define SVC_MSG_CTRL 0x10u + +/* contracts/spec/spec.ts SVC_POLL_BUF: max bytes consumed per svcPoll. */ +#define SVC_POLL_BUF 8192u +/* One ctrl line is capped at SVC_POLL_BUF by the protocol; the rx buffer + * only ever has to reassemble one frame of that size. */ +#define SVC_RX_BYTES (SVC_WIRE_HEADER_BYTES + SVC_POLL_BUF) +#define SVC_LINES_BYTES (32u * 1024u) +#define SVC_TX_BYTES (16u * 1024u) +#define SVC_PING_MAX 16u + +#define SVC_CONNECT_TIMEOUT_MS 3000u +#define SVC_HELLO_TIMEOUT_MS 5000u +#define SVC_SILENCE_TIMEOUT_MS 10000u +#define SVC_BACKOFF_MS 1000u + +#ifndef POCKET_SVC_HOST_PATH +#define POCKET_SVC_HOST_PATH "/private/var/tmp/pocketjs-svc-host.txt" +#endif + +typedef enum { + SVC_STATE_IDLE, + SVC_STATE_DISCOVER, + SVC_STATE_CONNECTING, + SVC_STATE_HELLO_WAIT, + SVC_STATE_UP, + SVC_STATE_BACKOFF +} SvcState; + +static int enabled; +static char app_id[65]; +static SvcState state = SVC_STATE_IDLE; +static int beacon_fd = -1; +static int tcp_fd = -1; +static struct sockaddr_in target; +static int target_from_override; +static int override_failed; +static uint64_t state_since_ms; +static uint64_t last_rx_ms; + +static uint8_t rx_buffer[SVC_RX_BYTES]; +static size_t rx_length; +static uint32_t skip_remaining; +static char lines[SVC_LINES_BYTES]; +static size_t lines_length; +static uint8_t tx_buffer[SVC_TX_BYTES]; +static size_t tx_length; +static size_t tx_offset; +static int pong_pending; +static uint8_t pong_payload[SVC_PING_MAX]; +static uint32_t pong_length; + +static uint64_t now_ms(void) { + struct timeval tv; + gettimeofday(&tv, NULL); + return (uint64_t)tv.tv_sec * 1000u + (uint64_t)tv.tv_usec / 1000u; +} + +static uint32_t rd_u32(const uint8_t *at) { + return (uint32_t)at[0] | ((uint32_t)at[1] << 8) | ((uint32_t)at[2] << 16) | + ((uint32_t)at[3] << 24); +} + +static uint16_t rd_u16(const uint8_t *at) { + return (uint16_t)((uint16_t)at[0] | ((uint16_t)at[1] << 8)); +} + +static void wr_u32(uint8_t *at, uint32_t value) { + at[0] = (uint8_t)(value & 0xffu); + at[1] = (uint8_t)((value >> 8) & 0xffu); + at[2] = (uint8_t)((value >> 16) & 0xffu); + at[3] = (uint8_t)((value >> 24) & 0xffu); +} + +static int would_block(void) { + return errno == EAGAIN || errno == EWOULDBLOCK; +} + +static int set_nonblocking(int fd) { + int flags = fcntl(fd, F_GETFL, 0); + return flags >= 0 && fcntl(fd, F_SETFL, flags | O_NONBLOCK) == 0; +} + +static void enter_state(SvcState next) { + state = next; + state_since_ms = now_ms(); +} + +static void close_connection(void) { + if (tcp_fd >= 0) close(tcp_fd); + tcp_fd = -1; + rx_length = 0; + skip_remaining = 0; + tx_length = 0; + tx_offset = 0; + pong_pending = 0; +} + +static void drop_to_backoff(void) { + int failed_override = target_from_override; + close_connection(); + /* A stale override (the companion's DHCP lease moved on) must degrade into + * beacon discovery instead of wedging the transport. */ + if (failed_override) override_failed = 1; + enter_state(SVC_STATE_BACKOFF); +} + +/* ------------------------------------------------------------------------ */ +/* discovery */ +/* ------------------------------------------------------------------------ */ + +static void ensure_beacon_socket(void) { + int fd; + int reuse = 1; + struct sockaddr_in address; + if (beacon_fd >= 0) return; + fd = socket(AF_INET, SOCK_DGRAM, 0); + if (fd < 0) return; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof reuse); + memset(&address, 0, sizeof address); + address.sin_family = AF_INET; + address.sin_addr.s_addr = htonl(INADDR_ANY); + address.sin_port = htons(SVC_BEACON_PORT); + if (bind(fd, (struct sockaddr *)&address, sizeof address) != 0 || !set_nonblocking(fd)) { + close(fd); + return; + } + beacon_fd = fd; +} + +/* Drain beacon datagrams. While DISCOVERing, the first one advertising our + * app id becomes the connect target; in every other state the datagrams are + * discarded so the socket buffer never fills. */ +static int poll_beacon(struct sockaddr_in *out) { + int found = 0; + uint32_t attempt; + if (beacon_fd < 0) return 0; + for (attempt = 0; attempt < 4; attempt += 1) { + uint8_t datagram[160]; + struct sockaddr_in sender; + socklen_t sender_length = sizeof sender; + uint16_t port; + size_t app_length; + ssize_t length = recvfrom( + beacon_fd, + datagram, + sizeof datagram, + 0, + (struct sockaddr *)&sender, + &sender_length + ); + if (length <= 0) break; + if (found || out == NULL) continue; + if ((size_t)length < 10) continue; + if (rd_u32(datagram) != SVC_BEACON_MAGIC) continue; + if (datagram[4] != SVC_WIRE_VERSION) continue; + port = rd_u16(datagram + 6); + app_length = datagram[8]; + if (9 + app_length > (size_t)length) continue; + if (app_length != strlen(app_id)) continue; + if (memcmp(datagram + 9, app_id, app_length) != 0) continue; + *out = sender; + out->sin_port = htons(port); + found = 1; + } + return found; +} + +static int parse_host(const char *text_in, struct sockaddr_in *out) { + char text[64]; + size_t length; + unsigned long port = SVC_WIRE_PORT; + char *colon; + struct in_addr address; + snprintf(text, sizeof text, "%s", text_in); + length = strlen(text); + while (length > 0 && (text[length - 1] == '\n' || text[length - 1] == '\r' || + text[length - 1] == ' ')) { + text[--length] = '\0'; + } + if (length == 0) return 0; + colon = strchr(text, ':'); + if (colon != NULL) { + *colon = '\0'; + port = strtoul(colon + 1, NULL, 10); + if (port == 0 || port > 65535) return 0; + } + if (inet_aton(text, &address) == 0) return 0; + memset(out, 0, sizeof *out); + out->sin_family = AF_INET; + out->sin_addr = address; + out->sin_port = htons((uint16_t)port); + return 1; +} + +/* Override file first, then the compile-time host, else nothing. */ +static int read_host_override(struct sockaddr_in *out) { + FILE *file = fopen(POCKET_SVC_HOST_PATH, "rb"); + if (file != NULL) { + char text[64] = {0}; + size_t length = fread(text, 1, sizeof text - 1, file); + fclose(file); + text[length] = '\0'; + if (parse_host(text, out)) return 1; + } +#ifdef POCKET_SVC_HOST + return parse_host(POCKET_SVC_HOST, out); +#else + return 0; +#endif +} + +static void start_connect(void) { + int fd = socket(AF_INET, SOCK_STREAM, 0); + int rc; + int nodelay = 1; + if (fd < 0) { + enter_state(SVC_STATE_BACKOFF); + return; + } + if (!set_nonblocking(fd)) { + close(fd); + enter_state(SVC_STATE_BACKOFF); + return; + } + /* Input lines are latency-bound; batching is already done frame-side. */ + setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof nodelay); + tcp_fd = fd; + rc = connect(tcp_fd, (struct sockaddr *)&target, sizeof target); + if (rc == 0 || errno == EINPROGRESS || errno == EWOULDBLOCK) { + enter_state(SVC_STATE_CONNECTING); /* hello goes out on the next pump */ + return; + } + drop_to_backoff(); +} + +static void pump_discover(void) { + struct sockaddr_in candidate; + ensure_beacon_socket(); + if (!override_failed && read_host_override(&candidate)) { + target = candidate; + target_from_override = 1; + start_connect(); + return; + } + if (poll_beacon(&candidate)) { + target = candidate; + target_from_override = 0; + override_failed = 0; /* a fresh beacon re-arms the override for later */ + start_connect(); + } +} + +/* ------------------------------------------------------------------------ */ +/* connection */ +/* ------------------------------------------------------------------------ */ + +/* Queue the device hello. The tx buffer is empty on a fresh connection, so + * this cannot fail for space. */ +static void queue_hello(void) { + size_t app_length = strlen(app_id); + wr_u32(tx_buffer, SVC_WIRE_MAGIC); + tx_buffer[4] = SVC_WIRE_VERSION; + tx_buffer[5] = 0; + tx_buffer[6] = (uint8_t)app_length; + memcpy(tx_buffer + 7, app_id, app_length); + tx_length = 7 + app_length; + tx_offset = 0; +} + +static void pump_connecting(void) { + /* Re-issuing connect() on a non-blocking socket reports progress without + * select(): EALREADY while in flight, EISCONN (or 0) once established. */ + int rc = connect(tcp_fd, (struct sockaddr *)&target, sizeof target); + if (rc == 0 || errno == EISCONN) { + queue_hello(); + last_rx_ms = now_ms(); + enter_state(SVC_STATE_HELLO_WAIT); + return; + } + if (errno == EALREADY || errno == EINPROGRESS || errno == EWOULDBLOCK) { + if (now_ms() - state_since_ms > SVC_CONNECT_TIMEOUT_MS) drop_to_backoff(); + return; + } + drop_to_backoff(); +} + +static int queue_frame(uint8_t type, const uint8_t *payload, size_t length) { + uint8_t *at; + if (SVC_WIRE_HEADER_BYTES + length > sizeof tx_buffer - tx_length) { + if (tx_offset > 0) { + memmove(tx_buffer, tx_buffer + tx_offset, tx_length - tx_offset); + tx_length -= tx_offset; + tx_offset = 0; + } + if (SVC_WIRE_HEADER_BYTES + length > sizeof tx_buffer - tx_length) return 0; + } + at = tx_buffer + tx_length; + at[0] = type; + at[1] = 0; + at[2] = 0; + at[3] = 0; + wr_u32(at + 4, (uint32_t)length); + if (length > 0) memcpy(at + SVC_WIRE_HEADER_BYTES, payload, length); + tx_length += SVC_WIRE_HEADER_BYTES + length; + return 1; +} + +/* Append one host line to the poll queue (newline-terminated), dropping the + * oldest queued lines when full — the Vita transport's bounded-queue rule. */ +static void append_line(const uint8_t *bytes, size_t length) { + if (length == 0 || length + 1 > sizeof lines) return; + if (memchr(bytes, '\n', length) != NULL || memchr(bytes, '\r', length) != NULL) return; + while (length + 1 > sizeof lines - lines_length) { + char *oldest_end = memchr(lines, '\n', lines_length); + size_t drop; + if (oldest_end == NULL) { + lines_length = 0; + break; + } + drop = (size_t)(oldest_end - lines) + 1; + memmove(lines, lines + drop, lines_length - drop); + lines_length -= drop; + } + memcpy(lines + lines_length, bytes, length); + lines_length += length; + lines[lines_length++] = '\n'; +} + +static void handle_frame(uint8_t type, const uint8_t *payload, uint32_t length) { + switch (type) { + case SVC_MSG_PING: + if (length <= SVC_PING_MAX) { + memcpy(pong_payload, payload, length); + pong_length = length; + pong_pending = 1; + } + break; + case SVC_MSG_CTRL: + append_line(payload, length); + break; + default: + /* file/stream/unknown types are skipped for forward compatibility. */ + break; + } +} + +static void pump_rx(void) { + for (;;) { + int progressed; + /* An oversized (or unwanted-bulk) payload is drained without buffering. */ + if (skip_remaining > 0) { + uint8_t sink[1024]; + size_t want = skip_remaining < sizeof sink ? skip_remaining : sizeof sink; + ssize_t got = recv(tcp_fd, sink, want, 0); + if (got > 0) { + skip_remaining -= (uint32_t)got; + last_rx_ms = now_ms(); + continue; + } + if (got == 0 || !would_block()) drop_to_backoff(); + return; + } + + if (rx_length < sizeof rx_buffer) { + ssize_t got = recv(tcp_fd, rx_buffer + rx_length, sizeof rx_buffer - rx_length, 0); + if (got > 0) { + rx_length += (size_t)got; + last_rx_ms = now_ms(); + } else if (got == 0 || !would_block()) { + drop_to_backoff(); + return; + } + } + + if (state == SVC_STATE_HELLO_WAIT) { + if (rx_length < 8) return; + if (rd_u32(rx_buffer) != SVC_WIRE_MAGIC || rx_buffer[4] != SVC_WIRE_VERSION) { + drop_to_backoff(); + return; + } + memmove(rx_buffer, rx_buffer + 8, rx_length - 8); + rx_length -= 8; + enter_state(SVC_STATE_UP); + } + + progressed = 0; + while (rx_length >= SVC_WIRE_HEADER_BYTES) { + uint32_t payload_length = rd_u32(rx_buffer + 4); + size_t total; + if (rx_buffer[2] != 0 || rx_buffer[3] != 0 || payload_length > SVC_WIRE_MAX_PAYLOAD) { + drop_to_backoff(); + return; + } + if (SVC_WIRE_HEADER_BYTES + payload_length > sizeof rx_buffer) { + /* Consume the header and whatever payload is already buffered, then + * drain the rest in skip mode. */ + size_t buffered = rx_length - SVC_WIRE_HEADER_BYTES; + size_t consumed = buffered < payload_length ? buffered : payload_length; + skip_remaining = payload_length - (uint32_t)consumed; + memmove( + rx_buffer, + rx_buffer + SVC_WIRE_HEADER_BYTES + consumed, + rx_length - SVC_WIRE_HEADER_BYTES - consumed + ); + rx_length -= SVC_WIRE_HEADER_BYTES + consumed; + progressed = 1; + break; + } + total = SVC_WIRE_HEADER_BYTES + payload_length; + if (rx_length < total) break; + handle_frame(rx_buffer[0], rx_buffer + SVC_WIRE_HEADER_BYTES, payload_length); + if (tcp_fd < 0) return; /* handle_frame path dropped the connection */ + memmove(rx_buffer, rx_buffer + total, rx_length - total); + rx_length -= total; + progressed = 1; + } + if (!progressed && rx_length < sizeof rx_buffer && skip_remaining == 0) return; + } +} + +static void pump_tx(void) { + ssize_t sent; + if (tcp_fd < 0) return; + if (state == SVC_STATE_UP && pong_pending && + queue_frame(SVC_MSG_PONG, pong_payload, pong_length)) { + pong_pending = 0; + } + if (tx_offset >= tx_length) return; + sent = send(tcp_fd, tx_buffer + tx_offset, tx_length - tx_offset, 0); + if (sent > 0) { + tx_offset += (size_t)sent; + if (tx_offset == tx_length) { + tx_offset = 0; + tx_length = 0; + } + return; + } + if (sent < 0 && would_block()) return; + drop_to_backoff(); +} + +/* ------------------------------------------------------------------------ */ +/* public surface */ +/* ------------------------------------------------------------------------ */ + +int svcwire_open(const char *app) { + if (app == NULL || app[0] == '\0' || strlen(app) > 64) return 0; + if (enabled && strcmp(app_id, app) != 0) { + /* One companion per guest: a new app id restarts discovery. */ + close_connection(); + lines_length = 0; + enter_state(SVC_STATE_DISCOVER); + } + snprintf(app_id, sizeof app_id, "%s", app); + if (!enabled) { + enabled = 1; + enter_state(SVC_STATE_DISCOVER); + } + return state == SVC_STATE_UP; +} + +void svcwire_pump(void) { + if (!enabled) return; + switch (state) { + case SVC_STATE_IDLE: + break; + case SVC_STATE_DISCOVER: + pump_discover(); + break; + case SVC_STATE_CONNECTING: + poll_beacon(NULL); + pump_connecting(); + break; + case SVC_STATE_HELLO_WAIT: + poll_beacon(NULL); + pump_tx(); + if (tcp_fd < 0) break; + pump_rx(); + if (state == SVC_STATE_HELLO_WAIT && + now_ms() - state_since_ms > SVC_HELLO_TIMEOUT_MS) { + drop_to_backoff(); + } + break; + case SVC_STATE_UP: + poll_beacon(NULL); + pump_rx(); + if (tcp_fd < 0) break; + pump_tx(); + if (tcp_fd >= 0 && now_ms() - last_rx_ms > SVC_SILENCE_TIMEOUT_MS) { + drop_to_backoff(); + } + break; + case SVC_STATE_BACKOFF: + poll_beacon(NULL); + if (now_ms() - state_since_ms > SVC_BACKOFF_MS) enter_state(SVC_STATE_DISCOVER); + break; + } +} + +size_t svcwire_recv_lines(char *out, size_t capacity) { + size_t cap; + size_t length; + if (out == NULL || capacity <= 1 || lines_length == 0) return 0; + cap = capacity - 1 < SVC_POLL_BUF ? capacity - 1 : SVC_POLL_BUF; + length = lines_length < cap ? lines_length : cap; + /* Whole lines only — QuickJS must never see a torn JSON record. */ + while (length > 0 && lines[length - 1] != '\n') length -= 1; + if (length == 0) return 0; + memcpy(out, lines, length); + out[length] = '\0'; + memmove(lines, lines + length, lines_length - length); + lines_length -= length; + return length; +} + +void svcwire_send_line(const char *line, size_t length) { + if (state != SVC_STATE_UP || line == NULL || length == 0 || length > SVC_POLL_BUF) return; + queue_frame(SVC_MSG_CTRL, (const uint8_t *)line, length); +} + +const char *svcwire_state_name(void) { + switch (state) { + case SVC_STATE_DISCOVER: + return "discover"; + case SVC_STATE_CONNECTING: + return "connecting"; + case SVC_STATE_HELLO_WAIT: + return "hello"; + case SVC_STATE_UP: + return "up"; + case SVC_STATE_BACKOFF: + return "backoff"; + case SVC_STATE_IDLE: + default: + return "idle"; + } +} + +void svcwire_shutdown(void) { + close_connection(); + if (beacon_fd >= 0) close(beacon_fd); + beacon_fd = -1; + enabled = 0; + state = SVC_STATE_IDLE; + lines_length = 0; +} + +#else /* !POCKET_SVC_WIRE */ + +int svcwire_open(const char *app) { + (void)app; + return 0; +} + +void svcwire_pump(void) {} + +size_t svcwire_recv_lines(char *out, size_t capacity) { + (void)out; + (void)capacity; + return 0; +} + +void svcwire_send_line(const char *line, size_t length) { + (void)line; + (void)length; +} + +const char *svcwire_state_name(void) { + return "absent"; +} + +void svcwire_shutdown(void) {} + +#endif /* POCKET_SVC_WIRE */ diff --git a/hosts/iphone2g/svcwire.h b/hosts/iphone2g/svcwire.h new file mode 100644 index 000000000..be6a5a85a --- /dev/null +++ b/hosts/iphone2g/svcwire.h @@ -0,0 +1,48 @@ +/* + * SVC WIRE (PKNT) client transport for the legacy Apple hosts — the host + * service channel (spec ops 30..32) over one TCP connection to a companion + * process on the LAN, discovered through its UDP beacon (contracts/spec/ + * spec.ts "SVC WIRE protocol"; hosts/vita/src/net.rs is the threaded + * reference, hosts/3ds/src/svcwire.c the frame-pumped one this file follows: + * non-blocking BSD sockets, a bounded amount of work per frame, no threads). + * + * The guest contract is the PSP mailbox, unchanged: svcOpen is a + * non-blocking probe the app retries, svcPoll drains complete JSON lines, + * svcSend appends one line and is a silent no-op while disconnected. + * + * Compiled in only when POCKET_SVC_WIRE is defined (tools/ipodtouch4.ts does + * that for apps whose companion lives on the network); every other legacy + * Apple build keeps its op table byte-identical. + */ + +#ifndef POCKETJS_IPHONE2G_SVCWIRE_H +#define POCKETJS_IPHONE2G_SVCWIRE_H + +#include +#include + +/* spec op 30: remember `app`, keep the transport coming up for it, report + * the live connection state. A different app name tears the connection down + * and rediscovers (one companion per guest). */ +int svcwire_open(const char *app); + +/* Pump discovery, connect, handshake, rx and tx — bounded, non-blocking. + * Called once per guest frame by pocket_runtime.c. */ +void svcwire_pump(void); + +/* spec op 31: copy queued host->device lines (each newline-terminated) into + * `out`, whole lines only, up to the svc poll cap. Returns the byte count + * (0 = idle). */ +size_t svcwire_recv_lines(char *out, size_t capacity); + +/* spec op 32: queue one device->host ctrl line (no trailing newline). + * Dropped silently while disconnected or when the outbox is full. */ +void svcwire_send_line(const char *line, size_t length); + +/* Connection state for the acceptance record: "idle", "discover", + * "connecting", "hello", "up" or "backoff". */ +const char *svcwire_state_name(void); + +void svcwire_shutdown(void); + +#endif diff --git a/hosts/ipodtouch4/runtime.c b/hosts/ipodtouch4/runtime.c index c1bcae0a3..a413ae293 100644 --- a/hosts/ipodtouch4/runtime.c +++ b/hosts/ipodtouch4/runtime.c @@ -1,8 +1,24 @@ +/* + * Device-local receipt paths. Pocket Clear's are the defaults; a second app + * on the same iPod (tools/ipodtouch4.ts selects it by POCKETJS_IPODTOUCH4_APP) + * gets its own set through -D flags so two installed apps never share a + * status file. + */ +#ifndef POCKET_ACCEPTANCE_PATH #define POCKET_ACCEPTANCE_PATH "/private/var/tmp/pocketjs-ipodtouch4.status" +#endif +#ifndef POCKET_ACCEPTANCE_TEMP #define POCKET_ACCEPTANCE_TEMP "/private/var/tmp/pocketjs-ipodtouch4.status.new" +#endif +#ifndef POCKET_CAPTURE_REQUEST_PATH #define POCKET_CAPTURE_REQUEST_PATH "/private/var/tmp/pocketjs-ipodtouch4.capture" +#endif +#ifndef POCKET_CAPTURE_OUTPUT_PATH #define POCKET_CAPTURE_OUTPUT_PATH "/private/var/tmp/pocketjs-ipodtouch4.frame.rgba" +#endif +#ifndef POCKET_PREFER_GL_PATH #define POCKET_PREFER_GL_PATH "/private/var/tmp/pocketjs-ipodtouch4.gles1" +#endif #define POCKET_GL_DEFAULT 1 #define POCKET_REQUIRE_GL 1 diff --git a/tests/ipodtouch4-profile.test.ts b/tests/ipodtouch4-profile.test.ts index 9255c0095..d09a2c85e 100644 --- a/tests/ipodtouch4-profile.test.ts +++ b/tests/ipodtouch4-profile.test.ts @@ -7,6 +7,7 @@ import { IPODTOUCH4_DEV_CONTRACTS, IPODTOUCH4_DEV_HOST_ABI, IPODTOUCH4_DEV_TARGET_ID, + IPODTOUCH4_LANDSCAPE_VIEWPORT, IPODTOUCH4_LOGICAL_VIEWPORT, IPODTOUCH4_PHYSICAL_VIEWPORT, IPODTOUCH4_RASTER_DENSITY, @@ -24,7 +25,9 @@ import { deploymentAcquireLockCommand, deploymentInstallCommand, deploymentRenewLockCommand, + IPODTOUCH4_APPS, ipodtouch4DeploymentPaths, + selectIPodTouch4App, } from "../tools/ipodtouch4.ts"; const repository = join(import.meta.dir, ".."); @@ -38,7 +41,7 @@ describe("private iPod touch 4 profile", () => { form: "takeover", display: { physicalViewport: IPODTOUCH4_PHYSICAL_VIEWPORT, - logicalViewports: [IPODTOUCH4_LOGICAL_VIEWPORT], + logicalViewports: [IPODTOUCH4_LOGICAL_VIEWPORT, IPODTOUCH4_LANDSCAPE_VIEWPORT], presentations: ["native"], rasterDensity: IPODTOUCH4_RASTER_DENSITY, }, @@ -66,6 +69,40 @@ describe("private iPod touch 4 profile", () => { expect(verifyPlanHash(plan)).toBe(true); }); + test("resolves the landscape Pocket Remote plan on the same panel, turned", () => { + const manifest = JSON.parse(readFileSync(join(repository, "apps/pocket-remote/pocket.json"), "utf8")); + const plan = resolveIPodTouch4BuildPlan(manifest); + expect(plan.viewport).toEqual({ + logical: IPODTOUCH4_LANDSCAPE_VIEWPORT, + physical: [IPODTOUCH4_PHYSICAL_VIEWPORT[1], IPODTOUCH4_PHYSICAL_VIEWPORT[0]], + presentation: "native", + rasterDensity: IPODTOUCH4_RASTER_DENSITY, + policy: "fixed", + }); + expect(plan.app.output).toBe("pocket-remote-main"); + expect(plan.app.framework).toBe("solid"); + // A second app on the device needs its own bundle, executable, scheme and + // receipt paths; the network app compiles the svc wire in. + const remote = selectIPodTouch4App("pocket-remote"); + const clear = selectIPodTouch4App(undefined); + expect(clear).toBe(IPODTOUCH4_APPS.clear); + expect(remote.svcWire).toBe(true); + expect(clear.svcWire).toBe(false); + for (const key of ["bundleId", "bundleName", "executable", "scheme", "receiptSlug"] as const) { + expect(remote[key]).not.toBe(clear[key]); + } + expect(() => selectIPodTouch4App("nope")).toThrow("unknown app"); + const wrapper = readFileSync(join(repository, "hosts/ipodtouch4/runtime.c"), "utf8"); + expect(wrapper).toContain("#ifndef POCKET_ACCEPTANCE_PATH"); + const runtime = readFileSync(join(repository, "hosts/iphone2g/runtime.c"), "utf8"); + expect(runtime).toContain("landscape = POCKET_LOGICAL_WIDTH > POCKET_LOGICAL_HEIGHT"); + expect(runtime).toContain('sel_registerName("setTransform:")'); + const guest = readFileSync(join(repository, "hosts/iphone2g/pocket_runtime.c"), "utf8"); + expect(guest).toContain("#ifdef POCKET_SVC_WIRE"); + expect(guest).toContain('add_host_operation(context, ui, "svcOpen", 1, HostSvcOpen)'); + expect(guest).toContain("svcwire_pump();"); + }); + test("pins the device tuple and shares the validated 4S toolchain", () => { expect(IPODTOUCH4_DEVICE).toEqual({ productType: "iPod4,1", diff --git a/tests/platform-contracts.test.ts b/tests/platform-contracts.test.ts index 1c5914a45..c4804b982 100644 --- a/tests/platform-contracts.test.ts +++ b/tests/platform-contracts.test.ts @@ -522,6 +522,7 @@ describe("semantic resolution", () => { cards: [true, true, false, true], chrome: [true, true, false, true], clear: [false, false, false, false], // admitted only by the private ipodtouch4-dev profile (fixed 320x480 portrait touch surface) + "pocket-remote": [false, false, false, false], // admitted only by the private ipodtouch4-dev profile (the same panel turned: fixed 480x320 landscape touch surface + svc wire) cursor: [true, true, false, true], gallery: [true, true, false, true], hero: [true, true, true, true], diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts new file mode 100644 index 000000000..c5f4ef227 --- /dev/null +++ b/tests/pocket-remote-sim.test.ts @@ -0,0 +1,118 @@ +// Boots the built Pocket Remote bundle in the headless sim and drives it the +// way the daemon would: hello, theme, a Hyprland snapshot. No svc channel +// exists in the sim, so the app publishes its store as globalThis.__pocketRemote +// and the test feeds host lines straight into the reducer, then taps the +// screen through the real touch path. + +import { describe, expect, test } from "bun:test"; +import { bootWorld } from "../hosts/sim/sim.ts"; +import type { HostState } from "../apps/pocket-remote/protocol.ts"; +import { STAGE, STRIP, TAB_W } from "../apps/pocket-remote/layout.ts"; +import type { RemoteStore } from "../apps/pocket-remote/store.ts"; + +const HZ = 60; + +function pack(x: number, y: number, id = 0): number { + return x > 511 || y > 511 ? (0x80000000 | (id << 20) | (y << 10) | x) >>> 0 : (id << 18) | (y << 9) | x; +} + +const SNAPSHOT: HostState = { + t: "state", + mon: { w: 1440, h: 900 }, + ws: [{ id: 1, n: 2 }, { id: 2, n: 0 }], + active: 1, + focus: "0x55f90cb39300", + layout: "dwindle", + win: [ + { a: "0x55f90cb39300", c: "foot", ti: "evan@x1nano-omarchy:~", ws: 1, x: 12, y: 38, w: 701, h: 850 }, + { a: "0x55f90e41dd40", c: "chromium", ti: "ChatGPT - Chromium", ws: 1, x: 725, y: 38, w: 703, h: 850 }, + ], +}; + +/** The devtools tree: `{ i, t, c?, x?, k? }` — id, tag, class, text, kids. */ +function walk(node: unknown, visit: (n: Record) => void): void { + if (!node || typeof node !== "object") return; + const record = node as Record; + visit(record); + const kids = record.k; + if (Array.isArray(kids)) for (const child of kids) walk(child, visit); +} + +function texts(tree: unknown): string[] { + const out: string[] = []; + walk(tree, (n) => { + if (n.t === "#text" && typeof n.x === "string") out.push(n.x); + }); + return out; +} + +describe("pocket-remote in the sim", () => { + test("connects, mirrors a snapshot into tiles, and switches workspace from the strip", async () => { + const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); + const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote; + expect(store).toBeDefined(); + if (!store) return; + + world.frame(0); + expect(store.link()).toBe("off"); + expect(texts(world.getTree()).join(" ")).toContain("Pocket Remote"); + + store.applyLine({ t: "hello", proto: 1, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); + store.applyLine({ + t: "theme", + name: "tokyo-night", + list: ["tokyo-night", "nord"], + colors: { + bg: "#1a1b26", bgDark: "#13141c", fg: "#a9b1d6", fgDim: "#565f89", accent: "#7aa2f7", + red: "#f7768e", green: "#9ece6a", yellow: "#e0af68", blue: "#7aa2f7", magenta: "#bb9af7", cyan: "#449dab", muted: "#414868", + }, + }); + store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); + store.applyLine(SNAPSHOT); + for (let i = 0; i < 30; i += 1) world.frame(0); + + expect(store.link()).toBe("up"); + expect(store.vol()).toBeCloseTo(0.4); + expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.label())).toEqual(["foot", "chromium"]); + const shown = texts(world.getTree()); + expect(shown).toContain("foot"); + expect(shown).toContain("chromium"); + expect(shown).toContain("dwindle"); + expect(store.tabs().map((t) => t.id)).toEqual([1, 2]); + + // The tile pool settled: geometry landed inside the stage. + for (const slot of store.slots) { + if (slot.a === null) continue; + expect(slot.cur.x).toBeGreaterThanOrEqual(STAGE.x); + expect(slot.cur.x + slot.cur.w).toBeLessThanOrEqual(STAGE.x + STAGE.w + 1); + expect(slot.cur.alpha).toBe(1); + } + + // Tap workspace tab 2 on the strip: optimistic switch, tiles of ws 1 fade. + const x = STRIP.x + TAB_W + TAB_W / 2; + const y = 16; + world.frame(0, undefined, [pack(x, y)]); + world.frame(0, undefined, [pack(x, y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 20; i += 1) world.frame(0); + expect(store.state()?.active).toBe(2); + expect(store.slots.filter((slot) => slot.a !== null).length).toBe(0); + expect(texts(world.getTree()).join(" ")).toContain("empty workspace"); + + // Render a frame: the panel is 480x320 logical. + const pixels = world.render(); + expect(pixels.length).toBe(480 * 320 * 4); + }); + + test("a hello that is still pending shows the approval screen", async () => { + const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); + const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; + store.applyLine({ t: "hello", proto: 1, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "pending" }); + world.frame(0); + expect(store.link()).toBe("pending"); + expect(texts(world.getTree()).join(" ")).toContain("approve this remote on x1nano-omarchy"); + store.applyLine({ t: "auth", auth: "ok" }); + world.frame(0); + expect(store.link()).toBe("up"); + }); +}); diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts new file mode 100644 index 000000000..eb9f79963 --- /dev/null +++ b/tests/pocket-remote.test.ts @@ -0,0 +1,354 @@ +import { describe, expect, test } from "bun:test"; +import { + SVC_POLL_BUF, + WIRE_BEACON_MAGIC, + WIRE_BEACON_PORT, + WIRE_HEADER_SIZE, + WIRE_MAGIC, + WIRE_MAX_PAYLOAD, + WIRE_MSG, + WIRE_PORT, + WIRE_VERSION, +} from "../contracts/spec/spec.ts"; +import { ACTIONS, actionById, actionsOf, DOCK, PAD_PAGES } from "../apps/pocket-remote/actions.ts"; +import * as wire from "../apps/pocket-remote/host/wire.ts"; +import { buildState, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; +import { paletteFrom, parseBrightnessctl, parseColorsToml, parsePactlVolume } from "../apps/pocket-remote/host/omarchy.ts"; +import { + approach, + DOCK_SLOTS, + DOCK_X0, + dockSlotAt, + fitMonitor, + railDelta, + railFill, + RAIL_TRACK_H, + STAGE, + stageWindows, + stripTabs, + swapDirection, + tabAt, + tileRect, + windowAt, +} from "../apps/pocket-remote/layout.ts"; +import { clipTitle, parseLines, TITLE_MAX, WINDOWS_MAX, type HostState } from "../apps/pocket-remote/protocol.ts"; +import { isThemeColors, themeTitle, TOKYO_NIGHT } from "../apps/pocket-remote/theme.ts"; + +describe("pocket-remote wire", () => { + test("the daemon's copy of the PKNT constants matches spec.ts", () => { + expect(wire.WIRE_MAGIC).toBe(WIRE_MAGIC); + expect(wire.WIRE_BEACON_MAGIC).toBe(WIRE_BEACON_MAGIC); + expect(wire.WIRE_VERSION).toBe(WIRE_VERSION); + expect(wire.WIRE_HEADER_SIZE).toBe(WIRE_HEADER_SIZE); + expect(wire.WIRE_MAX_PAYLOAD).toBe(WIRE_MAX_PAYLOAD); + expect(wire.WIRE_BEACON_PORT).toBe(WIRE_BEACON_PORT); + expect(wire.WIRE_PORT).toBe(WIRE_PORT); + expect(wire.WIRE_MSG.ping).toBe(WIRE_MSG.ping); + expect(wire.WIRE_MSG.pong).toBe(WIRE_MSG.pong); + expect(wire.WIRE_MSG.ctrl).toBe(WIRE_MSG.ctrl); + expect(wire.SVC_POLL_BUF).toBe(SVC_POLL_BUF); + }); + + test("frames round-trip through the parser, hello parses incrementally", () => { + const parser = new wire.FrameParser(); + const a = wire.encodeCtrl('{"t":"hello"}'); + const b = wire.encodeFrame(wire.WIRE_MSG.ping, new Uint8Array([1, 2, 3, 4])); + const joined = new Uint8Array(a.length + b.length); + joined.set(a); + joined.set(b, a.length); + expect(parser.push(joined.subarray(0, 5))).toEqual([]); + const frames = parser.push(joined.subarray(5)); + expect(frames.map((f) => f.type)).toEqual([wire.WIRE_MSG.ctrl, wire.WIRE_MSG.ping]); + expect(new TextDecoder().decode(frames[0]!.payload)).toBe('{"t":"hello"}'); + + const app = new TextEncoder().encode("pocket-remote"); + const hello = new Uint8Array(7 + app.length); + new DataView(hello.buffer).setUint32(0, WIRE_MAGIC, true); + hello[4] = WIRE_VERSION; + hello[6] = app.length; + hello.set(app, 7); + expect(wire.parseHello(hello.subarray(0, 10))).toBeNull(); + expect(wire.parseHello(hello)).toEqual({ app: "pocket-remote", consumed: hello.length }); + expect(() => wire.parseHello(new Uint8Array([1, 2, 3, 4, 5, 6, 7]))).toThrow("bad hello magic"); + expect(wire.encodeHelloAck().length).toBe(8); + }); + + test("beacon layout: magic, version, port, app, name", () => { + const beacon = wire.encodeBeacon("pocket-remote", "x1nano", 8622); + const view = new DataView(beacon.buffer); + expect(view.getUint32(0, true)).toBe(WIRE_BEACON_MAGIC); + expect(beacon[4]).toBe(WIRE_VERSION); + expect(view.getUint16(6, true)).toBe(8622); + expect(beacon[8]).toBe("pocket-remote".length); + expect(new TextDecoder().decode(beacon.subarray(9, 9 + 13))).toBe("pocket-remote"); + expect(beacon[9 + 13]).toBe(6); + }); +}); + +describe("pocket-remote protocol", () => { + test("parseLines skips torn or foreign lines", () => { + expect(parseLines('{"t":"toast","text":"a"}\n{bad\n\n{"x":1}\n{"t":"auth","auth":"ok"}')).toEqual([ + { t: "toast", text: "a" }, + { t: "auth", auth: "ok" }, + ]); + }); + + test("titles clip to TITLE_MAX code points with an ellipsis", () => { + expect(clipTitle("evan@x1nano-omarchy:~")).toBe("evan@x1nano-omarchy:~"); + const long = "ChatGPT - Chromium - a very long window title indeed"; + expect(Array.from(clipTitle(long)).length).toBe(TITLE_MAX); + expect(clipTitle(long).endsWith("…")).toBe(true); + expect(clipTitle(" spaced out ")).toBe("spaced out"); + }); + + test("a full snapshot of WINDOWS_MAX windows fits one poll batch", () => { + const win = Array.from({ length: WINDOWS_MAX }, (_, i) => ({ + a: `0x55f90cb${(39300 + i).toString(16)}`, + c: "chromium", + ti: clipTitle("ChatGPT - Chromium - a very long window title indeed"), + ws: (i % 9) + 1, + x: 712, + y: 38, + w: 1416, + h: 850, + f: 1 as const, + fs: 1 as const, + p: 1 as const, + })); + const state: HostState = { + t: "state", + mon: { w: 1440, h: 900 }, + ws: Array.from({ length: 10 }, (_, i) => ({ id: i + 1, n: 3 })), + active: 2, + focus: win[0]!.a, + win, + layout: "scrolling", + special: 1, + }; + expect(JSON.stringify(state).length).toBeLessThan(SVC_POLL_BUF); + }); +}); + +describe("pocket-remote actions", () => { + test("ids are unique, every dock and pad entry exists, holds are the destructive ones", () => { + const ids = ACTIONS.map((a) => a.id); + expect(new Set(ids).size).toBe(ids.length); + for (const id of DOCK) expect(actionById(id)).toBeDefined(); + for (const page of PAD_PAGES) for (const id of page.actions) expect(actionById(id)).toBeDefined(); + expect(ACTIONS.filter((a) => a.hold).map((a) => a.id).sort()).toEqual(["close", "closeAll", "suspend"]); + expect(actionById("nope")).toBeUndefined(); + }); + + test("actions run the command Omarchy binds, never a shell string", () => { + for (const action of ACTIONS) { + if ("exec" in action.run) { + expect(action.run.exec.length).toBeGreaterThan(0); + for (const word of action.run.exec) expect(word).not.toMatch(/[|;&$`]/); + } else { + expect(action.run.dispatch).toMatch(/^[a-z]+( .+)?$/); + } + } + expect(actionById("terminal")!.run).toEqual({ exec: ["omarchy-launch-terminal"] }); + expect(actionById("close")!.run).toEqual({ dispatch: "killactive" }); + expect(actionById("layout")!.run).toEqual({ exec: ["omarchy-hyprland-workspace-layout-toggle"] }); + expect(actionById("play")!.run).toEqual({ exec: ["omarchy-shell", "media", "playPause"] }); + expect(actionsOf("media").length).toBe(4); + }); +}); + +describe("pocket-remote layout", () => { + const mon = { w: 1440, h: 900 }; + + test("a 16:10 monitor fits the stage centred, preserving aspect", () => { + const fit = fitMonitor(mon); + expect(fit.rect.w).toBeLessThanOrEqual(STAGE.w); + expect(fit.rect.h).toBeLessThanOrEqual(STAGE.h); + expect(Math.abs(fit.rect.w / fit.rect.h - 1.6)).toBeLessThan(0.02); + expect(fit.rect.x + fit.rect.w / 2).toBeCloseTo(STAGE.x + STAGE.w / 2, -1); + expect(fit.rect.y + fit.rect.h / 2).toBeCloseTo(STAGE.y + STAGE.h / 2, -1); + }); + + test("tiles map window geometry to stage pixels and stay hit-testable", () => { + const fit = fitMonitor(mon); + const foot = { a: "0xa", c: "foot", ti: "", ws: 1, x: 12, y: 38, w: 701, h: 850 }; + const chrome = { a: "0xb", c: "chromium", ti: "", ws: 1, x: 725, y: 38, w: 703, h: 850 }; + const ra = tileRect(foot, fit); + const rb = tileRect(chrome, fit); + expect(ra.x).toBeLessThan(rb.x); + expect(ra.x + ra.w).toBeLessThanOrEqual(rb.x); + const tiles = [ + { a: "0xa", rect: ra }, + { a: "0xb", rect: rb }, + ]; + expect(windowAt(ra.x + 2, ra.y + 2, tiles)).toBe("0xa"); + expect(windowAt(rb.x + rb.w - 2, rb.y + 2, tiles)).toBe("0xb"); + expect(windowAt(STAGE.x + 1, STAGE.y + 1, tiles)).toBeNull(); + expect(swapDirection(ra, rb)).toBe("r"); + expect(swapDirection(rb, ra)).toBe("l"); + expect(swapDirection({ x: 0, y: 0, w: 10, h: 10 }, { x: 0, y: 20, w: 10, h: 10 })).toBe("d"); + }); + + test("floating windows paint after tiled ones on the active workspace only", () => { + const state: HostState = { + t: "state", + mon, + ws: [{ id: 1, n: 2 }, { id: 2, n: 1 }], + active: 1, + focus: null, + layout: "dwindle", + win: [ + { a: "0x1", c: "a", ti: "", ws: 1, x: 0, y: 0, w: 10, h: 10, f: 1 }, + { a: "0x2", c: "b", ti: "", ws: 1, x: 0, y: 0, w: 10, h: 10 }, + { a: "0x3", c: "c", ti: "", ws: 2, x: 0, y: 0, w: 10, h: 10 }, + ], + }; + expect(stageWindows(state).map((w) => w.a)).toEqual(["0x2", "0x1"]); + }); + + test("the strip lists every workspace, the active one, and one empty tab after", () => { + expect(stripTabs([{ id: 1, n: 2 }], 1).map((t) => t.id)).toEqual([1, 2]); + expect(stripTabs([{ id: 1, n: 2 }, { id: 2, n: 0 }], 2).map((t) => t.id)).toEqual([1, 2]); + expect(stripTabs([{ id: 1, n: 2 }, { id: 3, n: 1 }], 1).map((t) => t.id)).toEqual([1, 3, 4]); + expect(stripTabs([{ id: 1, n: 1 }], 5).map((t) => t.id)).toEqual([1, 5]); + const ten = stripTabs(Array.from({ length: 10 }, (_, i) => ({ id: i + 1, n: 1 })), 10); + expect(ten.length).toBe(10); + const tabs = stripTabs([{ id: 1, n: 2 }, { id: 2, n: 1 }], 1); + expect(tabAt(tabs[1]!.x + 3, tabs)?.id).toBe(2); + expect(tabAt(tabs[0]!.x - 1, tabs)).toBeNull(); + }); + + test("rails: a full-track drag spans the whole range, up raises", () => { + expect(railDelta(-RAIL_TRACK_H)).toBeCloseTo(1); + expect(railDelta(RAIL_TRACK_H / 2)).toBeCloseTo(-0.5); + expect(railFill(0.4)).toBe(Math.round(0.4 * RAIL_TRACK_H)); + expect(railFill(2)).toBe(RAIL_TRACK_H); + }); + + test("dock slots tile the centre column", () => { + expect(dockSlotAt(DOCK_X0 - 1)).toBeNull(); + expect(dockSlotAt(DOCK_X0)).toBe(0); + expect(dockSlotAt(DOCK_X0 + 44 * (DOCK_SLOTS - 1) + 43)).toBe(DOCK_SLOTS - 1); + expect(dockSlotAt(DOCK_X0 + 44 * DOCK_SLOTS)).toBeNull(); + }); + + test("approach eases and snaps within half a pixel", () => { + let v = 0; + for (let i = 0; i < 40; i += 1) v = approach(v, 100); + expect(v).toBe(100); + expect(approach(99.5, 100)).toBe(100); + expect(approach(0, 1)).toBeCloseTo(0.35); + }); +}); + +describe("pocket-remote hypr mirror", () => { + const monitors: HyprMonitor[] = [ + { + id: 0, + name: "eDP-1", + width: 2160, + height: 1350, + scale: 1.5, + x: 0, + y: 0, + focused: true, + activeWorkspace: { id: 1, name: "1" }, + specialWorkspace: { id: 0, name: "" }, + }, + ]; + const workspaces: HyprWorkspace[] = [ + { id: 1, name: "1", monitor: "eDP-1", windows: 2, tiledLayout: "dwindle" }, + { id: 2, name: "2", monitor: "eDP-1", windows: 0, tiledLayout: "scrolling" }, + { id: -98, name: "special:scratchpad", monitor: "eDP-1", windows: 1 }, + ]; + const client = (over: Partial): HyprClient => ({ + address: "0x55f90cb39300", + mapped: true, + hidden: false, + at: [12, 38], + size: [701, 850], + workspace: { id: 1, name: "1" }, + floating: false, + monitor: 0, + class: "foot", + title: "evan@x1nano-omarchy:~", + initialClass: "foot", + pinned: false, + fullscreen: 0, + focusHistoryID: 0, + ...over, + }); + + test("reduces monitors, workspaces and clients to one snapshot", () => { + const clients = [ + client({}), + client({ address: "0x55f90e41dd40", class: "chromium", title: "ChatGPT - Chromium", at: [725, 38], size: [1423, 850], focusHistoryID: 1 }), + client({ address: "0xdead", mapped: false }), + client({ address: "0xbeef", workspace: { id: -98, name: "special:scratchpad" } }), + ]; + const state = buildState(monitors, workspaces, clients, { address: "0x55f90cb39300" }); + expect(state.mon).toEqual({ w: 1440, h: 900 }); + expect(state.active).toBe(1); + expect(state.layout).toBe("dwindle"); + expect(state.ws).toEqual([{ id: 1, n: 2 }, { id: 2, n: 0 }]); + expect(state.focus).toBe("0x55f90cb39300"); + expect(state.win.map((w) => w.a)).toEqual(["0x55f90cb39300", "0x55f90e41dd40"]); + expect(state.win[1]).toEqual({ + a: "0x55f90e41dd40", + c: "chromium", + ti: "ChatGPT - Chromium", + ws: 1, + x: 725, + y: 38, + w: 1423, + h: 850, + }); + expect(state.special).toBeUndefined(); + }); + + test("marks floating, fullscreen and pinned windows and the special workspace", () => { + const shown = [{ ...monitors[0]!, activeWorkspace: { id: 2, name: "2" }, specialWorkspace: { id: -98, name: "special:scratchpad" } }]; + const state = buildState(shown, workspaces, [client({ floating: true, fullscreen: 2, pinned: true })], null); + expect(state.layout).toBe("scrolling"); + expect(state.special).toBe(1); + expect(state.focus).toBeNull(); + expect(state.win[0]).toMatchObject({ f: 1, fs: 2, p: 1 }); + }); + + test("keeps the most recently focused WINDOWS_MAX windows", () => { + const many = Array.from({ length: 40 }, (_, i) => client({ address: `0x${i}`, focusHistoryID: 39 - i })); + const state = buildState(monitors, workspaces, many, null); + expect(state.win.length).toBe(WINDOWS_MAX); + expect(state.win[0]!.a).toBe("0x39"); + }); + + test("parses socket2 event lines", () => { + expect(parseEvent("workspacev2>>2,2")).toEqual({ name: "workspacev2", data: "2,2" }); + expect(parseEvent("activewindow>>foot,evan@x1nano-omarchy:~")).toEqual({ name: "activewindow", data: "foot,evan@x1nano-omarchy:~" }); + expect(parseEvent("garbage")).toBeNull(); + }); +}); + +describe("pocket-remote omarchy readers", () => { + test("pactl and brightnessctl output", () => { + expect(parsePactlVolume("Volume: front-left: 26214 / 40% / -23.88 dB, front-right: 26214 / 40% / -23.88 dB")).toBeCloseTo(0.4); + expect(parsePactlVolume("")).toBeNull(); + expect(parseBrightnessctl("intel_backlight,backlight,6310,33%,19393\n")).toBeCloseTo(0.33); + expect(parseBrightnessctl("nonsense")).toBeNull(); + }); + + test("colors.toml becomes the remote's palette, with fallbacks", () => { + const toml = `accent = "#7aa2f7"\nbackground = "#1a1b26"\nforeground = "#a9b1d6"\n# comment\ncolor8 = "#414868"\ndark_foreground = "#565f89"\nred = "#F7768E"\n`; + const colors = parseColorsToml(toml); + expect(colors.accent).toBe("#7aa2f7"); + expect(colors.red).toBe("#f7768e"); + const palette = paletteFrom(colors); + expect(palette.accent).toBe("#7aa2f7"); + expect(palette.bg).toBe("#1a1b26"); + expect(palette.muted).toBe("#414868"); + expect(palette.green).toBe(TOKYO_NIGHT.green); // absent -> fallback + expect(isThemeColors(palette)).toBe(true); + expect(isThemeColors({ ...palette, accent: "blue" })).toBe(false); + expect(themeTitle("tokyo-night")).toBe("Tokyo Night"); + expect(themeTitle("osaka-jade")).toBe("Osaka Jade"); + }); +}); diff --git a/tools/ipodtouch4-profile.ts b/tools/ipodtouch4-profile.ts index d5fa2a960..a4bb45935 100644 --- a/tools/ipodtouch4-profile.ts +++ b/tools/ipodtouch4-profile.ts @@ -17,6 +17,9 @@ import { validateAndResolveBuildPlan } from "../framework/src/manifest/resolve.t export const IPODTOUCH4_DEV_TARGET_ID = "ipodtouch4-dev"; export const IPODTOUCH4_DEV_HOST_ABI = 8; export const IPODTOUCH4_LOGICAL_VIEWPORT = [320, 480] as const; +/** The same panel a quarter turn over: the host rotates its content view and + * presents 480x320 logical on the 960x640 drawable (hosts/iphone2g/runtime.c). */ +export const IPODTOUCH4_LANDSCAPE_VIEWPORT = [480, 320] as const; export const IPODTOUCH4_PHYSICAL_VIEWPORT = [640, 960] as const; export const IPODTOUCH4_RASTER_DENSITY = 2; @@ -29,7 +32,7 @@ export const IPODTOUCH4_DEV_CONTRACTS = definePlatformContractRegistry( form: "takeover", display: { physicalViewport: IPODTOUCH4_PHYSICAL_VIEWPORT, - logicalViewports: [IPODTOUCH4_LOGICAL_VIEWPORT], + logicalViewports: [IPODTOUCH4_LOGICAL_VIEWPORT, IPODTOUCH4_LANDSCAPE_VIEWPORT], presentations: ["native"], rasterDensity: IPODTOUCH4_RASTER_DENSITY, }, diff --git a/tools/ipodtouch4.ts b/tools/ipodtouch4.ts index 5ae621c6a..78ded05d7 100644 --- a/tools/ipodtouch4.ts +++ b/tools/ipodtouch4.ts @@ -48,18 +48,88 @@ const KEY_PATH = process.env.POCKETJS_IPODTOUCH4_KEY ?? join(ipodtouch4CacheRoot(), "ssh/id_rsa"); const KNOWN_HOSTS_PATH = process.env.POCKETJS_IPODTOUCH4_KNOWN_HOSTS ?? join(ipodtouch4CacheRoot(), "ssh/known_hosts"); -const BUNDLE_NAME = "PocketJSiPodTouch4.app"; -const BUNDLE_ID = "dev.pocket-stack.clear"; -const INSTALL_PATH = `/Applications/${BUNDLE_NAME}`; -const STATUS_PATH = "/private/var/tmp/pocketjs-ipodtouch4.status"; -const FRAME_PATH = "/private/var/tmp/pocketjs-ipodtouch4.frame.rgba"; -const CAPTURE_REQUEST_PATH = "/private/var/tmp/pocketjs-ipodtouch4.capture"; const DEPLOYMENT_TARGET = IPODTOUCH4_TOOLCHAIN.compiler.minimumVersion; const DEPLOYMENT_LEASE_SECONDS = 10 * 60; /** The app-side acceptance receipt: the Clear guest reports completed gesture * interactions (complete / delete / create / reorder) under this name. */ const ACTION_NAME = "clear_gesture"; +/** + * One installable app on the iPod. Two apps coexist on the device only if + * every device-side name differs: the bundle, its executable, the URL scheme + * SpringBoard launches it by, and the /private/var/tmp receipt files the + * host writes (hosts/ipodtouch4/runtime.c takes those as -D overrides). + */ +export interface IPodTouch4App { + readonly id: string; + /** Repository-relative pocket.json. */ + readonly manifest: string; + readonly bundleId: string; + readonly bundleName: string; + readonly executable: string; + readonly title: string; + /** SpringBoard URL scheme; `://launch` opens the app. */ + readonly scheme: string; + /** `/private/var/tmp/.status` and friends on the device. */ + readonly receiptSlug: string; + /** The `__reportAppAction` name `status --require-action` waits for. */ + readonly actionName: string; + /** Compile hosts/iphone2g/svcwire.c and expose spec ops 30..32: the app's + * companion process lives on the LAN (svcwire.h). */ + readonly svcWire: boolean; + /** Disable iOS's idle timer while the app runs (a remote must not auto-lock). */ + readonly keepAwake: boolean; +} + +export const IPODTOUCH4_APPS: Readonly> = { + clear: { + id: "clear", + manifest: "apps/clear/pocket.json", + bundleId: "dev.pocket-stack.clear", + bundleName: "PocketJSiPodTouch4.app", + executable: "PocketJSiPodTouch4", + title: "Pocket Clear", + scheme: "pocketjs-ipodtouch4", + receiptSlug: "pocketjs-ipodtouch4", + actionName: ACTION_NAME, + svcWire: false, + keepAwake: false, + }, + "pocket-remote": { + id: "pocket-remote", + manifest: "apps/pocket-remote/pocket.json", + bundleId: "dev.pocket-stack.remote", + bundleName: "PocketJSRemote.app", + executable: "PocketJSRemote", + title: "Pocket Remote", + scheme: "pocketjs-remote", + receiptSlug: "pocketjs-remote", + actionName: "remote_action", + svcWire: true, + keepAwake: true, + }, +}; + +export function selectIPodTouch4App(name: string | undefined): IPodTouch4App { + const key = name?.trim() || "clear"; + const app = IPODTOUCH4_APPS[key]; + if (!app) { + throw new Error( + `pocket ipodtouch4: unknown app ${JSON.stringify(key)}; POCKETJS_IPODTOUCH4_APP must be one of ${Object.keys(IPODTOUCH4_APPS).join(", ")}`, + ); + } + return app; +} + +const APP = selectIPodTouch4App(process.env.POCKETJS_IPODTOUCH4_APP); +const BUNDLE_NAME = APP.bundleName; +const BUNDLE_ID = APP.bundleId; +const EXECUTABLE = APP.executable; +const INSTALL_PATH = `/Applications/${BUNDLE_NAME}`; +const STATUS_PATH = `/private/var/tmp/${APP.receiptSlug}.status`; +const FRAME_PATH = `/private/var/tmp/${APP.receiptSlug}.frame.rgba`; +const CAPTURE_REQUEST_PATH = `/private/var/tmp/${APP.receiptSlug}.capture`; + interface CommandResult { readonly exitCode: number; readonly stdout: string; @@ -80,6 +150,20 @@ interface BuildReceipt { readonly hostAbi: number; readonly deploymentTarget: string; readonly files: Readonly>; + /** The plan's presented surface; absent in receipts written before the + * landscape viewport existed (those are the portrait Clear build). */ + readonly viewport?: { + readonly logical: readonly [number, number]; + readonly physical: readonly [number, number]; + readonly rasterDensity: number; + }; +} + +/** The drawable `status`/`capture` must see, from the receipt when it says. */ +function expectedDrawable(receipt: BuildReceipt): { physical: readonly [number, number]; rasterDensity: number } { + return receipt.viewport + ? { physical: receipt.viewport.physical, rasterDensity: receipt.viewport.rasterDensity } + : { physical: IPODTOUCH4_PHYSICAL_VIEWPORT, rasterDensity: IPODTOUCH4_RASTER_DENSITY }; } const BUILD_ID_PLACEHOLDER = "00000000000000000000000000000000"; @@ -205,15 +289,45 @@ function check(label: string, ok: boolean, detail: string): boolean { } function manifestPath(): string { - return join(REPOSITORY, "apps/clear/pocket.json"); + return join(REPOSITORY, APP.manifest); } function planPath(): string { - return join(REPOSITORY, ".pocket/ipodtouch4/clear.plan.json"); + return join(REPOSITORY, `.pocket/ipodtouch4/${APP.id}.plan.json`); } function guestDirectory(): string { - return join(REPOSITORY, "dist/ipodtouch4/guest"); + return join(REPOSITORY, `dist/ipodtouch4/${APP.id}/guest`); +} + +/** + * hosts/ipodtouch4/Info.plist is written for Pocket Clear; every other app + * takes the same plist with its own identity substituted. For Clear the + * substitution is the identity, so its bundle stays byte-identical. + */ +function renderInfoPlist(): string { + const clear = IPODTOUCH4_APPS.clear; + const source = readFileSync(join(REPOSITORY, "hosts/ipodtouch4/Info.plist"), "utf8"); + return source + .replaceAll(`${clear.bundleId}.launch`, `${APP.bundleId}.launch`) + .replaceAll(`${clear.bundleId}`, `${APP.bundleId}`) + .replaceAll(`${clear.title}`, `${APP.title}`) + .replaceAll(`${clear.executable}`, `${APP.executable}`) + .replaceAll(`${clear.scheme}`, `${APP.scheme}`); +} + +/** Device receipt paths for the wrapper (hosts/ipodtouch4/runtime.c defaults + * are Clear's; any other app overrides all five). */ +function receiptPathDefines(): string[] { + if (APP.id === "clear") return []; + const slug = `/private/var/tmp/${APP.receiptSlug}`; + return [ + `-DPOCKET_ACCEPTANCE_PATH=\"${slug}.status\"`, + `-DPOCKET_ACCEPTANCE_TEMP=\"${slug}.status.new\"`, + `-DPOCKET_CAPTURE_REQUEST_PATH=\"${slug}.capture\"`, + `-DPOCKET_CAPTURE_OUTPUT_PATH=\"${slug}.frame.rgba\"`, + `-DPOCKET_PREFER_GL_PATH=\"${slug}.gles1\"`, + ]; } function bundleDirectory(): string { @@ -445,7 +559,7 @@ async function build(): Promise { const sysroot = ipodtouch4SysrootPath(); const csu = ipodtouch4CsuPath(); const quickjs = join(ipodtouch4QuickJsPath(), "libquickjs-sys/embed/quickjs"); - const nativeBuild = join(REPOSITORY, ".pocket-build/ipodtouch4/runtime"); + const nativeBuild = join(REPOSITORY, `.pocket-build/ipodtouch4/${APP.id}/runtime`); const rustTarget = join(ipodtouch4CacheRoot(), "build/rust-target"); const cargoHome = join(ipodtouch4CacheRoot(), "build/cargo-home"); rmSync(nativeBuild, { recursive: true, force: true }); @@ -496,7 +610,7 @@ async function build(): Promise { const bundle = bundleDirectory(); rmSync(bundle, { recursive: true, force: true }); mkdirSync(bundle, { recursive: true }); - cpSync(join(REPOSITORY, "hosts/ipodtouch4/Info.plist"), join(bundle, "Info.plist")); + writeFileSync(join(bundle, "Info.plist"), renderInfoPlist()); cpSync(join(REPOSITORY, "hosts/ipodtouch4/PkgInfo"), join(bundle, "PkgInfo")); await bakeClassicIPhoneArtwork(bundle); @@ -505,10 +619,14 @@ async function build(): Promise { `-DPOCKET_LOGICAL_WIDTH=${inputs.viewport.logical[0]}`, `-DPOCKET_LOGICAL_HEIGHT=${inputs.viewport.logical[1]}`, `-DPOCKET_RASTER_DENSITY=${inputs.viewport.rasterDensity}`, + ...receiptPathDefines(), + ...(APP.keepAwake ? ["-DPOCKET_KEEP_AWAKE"] : []), ]; + const svcWireDefines = APP.svcWire ? ["-DPOCKET_SVC_WIRE"] : []; const crtGlobalsObject = join(nativeBuild, "crt_globals.o"); const runtimeIdentityObject = join(nativeBuild, "runtime.build-id-input.o"); const pocketRuntimeObject = join(nativeBuild, "pocket_runtime.o"); + const svcWireObject = join(nativeBuild, "svcwire.o"); const compatObject = join(nativeBuild, "compat.o"); compile(join(REPOSITORY, "hosts/iphone2g/crt_globals.c"), crtGlobalsObject, warnings); compile(join(REPOSITORY, "hosts/ipodtouch4/runtime.c"), runtimeIdentityObject, [ @@ -518,19 +636,23 @@ async function build(): Promise { ]); compile(join(REPOSITORY, "hosts/iphone2g/pocket_runtime.c"), pocketRuntimeObject, [ ...warnings, + ...svcWireDefines, `-DPOCKETJS_TARGET_ID=\"${inputs.target}\"`, `-DPOCKETJS_HOST_ABI=${inputs.hostAbi}`, `-DPOCKET_RASTER_DENSITY=${inputs.viewport.rasterDensity}`, "-isystem", quickjs, ]); + if (APP.svcWire) { + compile(join(REPOSITORY, "hosts/iphone2g/svcwire.c"), svcWireObject, [...warnings, ...svcWireDefines]); + } compile(join(REPOSITORY, "hosts/iphone2g/compat.c"), compatObject, warnings); const buildId = hashInputs([ planPath(), guestJavaScript, guestPak, - join(REPOSITORY, "hosts/ipodtouch4/Info.plist"), + { label: "bundle/Info.plist", path: join(bundle, "Info.plist") }, join(REPOSITORY, "hosts/ipodtouch4/PkgInfo"), join(REPOSITORY, "hosts/iphone2g/Icon.png"), join(REPOSITORY, "hosts/iphone4s/Icon.svg"), @@ -551,6 +673,7 @@ async function build(): Promise { { label: "native/crt_globals.o", path: crtGlobalsObject }, { label: "native/runtime.build-id-input.o", path: runtimeIdentityObject }, { label: "native/pocket_runtime.o", path: pocketRuntimeObject }, + ...(APP.svcWire ? [{ label: "native/svcwire.o", path: svcWireObject }] : []), { label: "native/compat.o", path: compatObject }, ...quickJsObjects.map((path) => ({ label: `native/${path.slice(nativeBuild.length + 1)}`, path })), { label: "native/libpocketjs_symbian_core.a", path: rustLibrary }, @@ -569,14 +692,14 @@ async function build(): Promise { const embeddedJavaScript = join(nativeBuild, "app.js.bin"); writeFileSync(embeddedJavaScript, Buffer.concat([readFileSync(guestJavaScript), Buffer.from([0])])); - const executable = join(bundle, "PocketJSiPodTouch4"); + const executable = join(bundle, EXECUTABLE); mustRun(linker, ["-arch", "armv7", "-syslibroot", sysroot, "-L/usr/lib", "-F/System/Library/Frameworks", "-iphoneos_version_min", DEPLOYMENT_TARGET, "-no_pie", "-no_uuid", "-no_function_starts", "-no_data_in_code_info", "-no_source_version", "-no_compact_unwind", "-no_adhoc_codesign", "-no_encryption", "-e", "start", "-o", executable, join(nativeBuild, "csu-start.o"), join(nativeBuild, "csu-dyld-glue.o"), crtGlobalsObject, - runtimeObject, pocketRuntimeObject, compatObject, + runtimeObject, pocketRuntimeObject, ...(APP.svcWire ? [svcWireObject] : []), compatObject, "-force_load", rustLibrary, ...quickJsObjects, "-sectcreate", "__DATA", "__pocket_js", embeddedJavaScript, "-sectcreate", "__DATA", "__pocket_pak", guestPak, @@ -594,7 +717,7 @@ async function build(): Promise { } const fileNames = [ - "PocketJSiPodTouch4", + EXECUTABLE, "Info.plist", "PkgInfo", IPHONE_CLASSIC_ICON_FILE, @@ -611,6 +734,11 @@ async function build(): Promise { hostAbi: inputs.hostAbi, deploymentTarget: DEPLOYMENT_TARGET, files, + viewport: { + logical: [inputs.viewport.logical[0], inputs.viewport.logical[1]], + physical: [inputs.viewport.physical[0], inputs.viewport.physical[1]], + rasterDensity: inputs.viewport.rasterDensity, + }, }; writeFileSync(receiptPath(), JSON.stringify(receipt, null, 2) + "\n"); @@ -632,11 +760,11 @@ export function ipodtouch4DeploymentPaths(transactionId: string): DeploymentPath throw new Error("pocket ipodtouch4: deployment transaction id must be 24 lowercase hex digits"); } return { - archive: `/private/var/tmp/pocketjs-ipodtouch4-${transactionId}.app.tar`, - unpack: `/Applications/.PocketJSiPodTouch4.app.pocketjs-unpack-${transactionId}`, - stage: `/Applications/.PocketJSiPodTouch4.app.pocketjs-stage-${transactionId}`, - backup: `/Applications/.PocketJSiPodTouch4.app.pocketjs-backup-${transactionId}`, - lock: "/private/var/tmp/pocketjs-ipodtouch4.deploy.lock", + archive: `/private/var/tmp/${APP.receiptSlug}-${transactionId}.app.tar`, + unpack: `/Applications/.${BUNDLE_NAME}.pocketjs-unpack-${transactionId}`, + stage: `/Applications/.${BUNDLE_NAME}.pocketjs-stage-${transactionId}`, + backup: `/Applications/.${BUNDLE_NAME}.pocketjs-backup-${transactionId}`, + lock: `/private/var/tmp/${APP.receiptSlug}.deploy.lock`, }; } @@ -691,14 +819,14 @@ export function deploymentAcquireLockCommand( "valid_owner=0; case \"$owner\" in " + "????????????????????????) case \"$owner\" in *[!0-9a-f]*) ;; *) valid_owner=1 ;; esac ;; esac; " + "if [ \"$valid_owner\" -eq 1 ]; then " + - "backup=/Applications/.PocketJSiPodTouch4.app.pocketjs-backup-${owner}; " + - "stage=/Applications/.PocketJSiPodTouch4.app.pocketjs-stage-${owner}; " + - "unpack=/Applications/.PocketJSiPodTouch4.app.pocketjs-unpack-${owner}; " + - "archive=/private/var/tmp/pocketjs-ipodtouch4-${owner}.app.tar; " + + `backup=/Applications/.${BUNDLE_NAME}.pocketjs-backup-\${owner}; ` + + `stage=/Applications/.${BUNDLE_NAME}.pocketjs-stage-\${owner}; ` + + `unpack=/Applications/.${BUNDLE_NAME}.pocketjs-unpack-\${owner}; ` + + `archive=/private/var/tmp/${APP.receiptSlug}-\${owner}.app.tar; ` + "phase=$(cat \"$lock/phase\" 2>/dev/null || true); origin=$(cat \"$lock/origin\" 2>/dev/null || true); " + "if [ \"$phase\" = committed ]; then rm -rf \"$backup\"; " + "elif [ -e \"$backup\" ]; then rm -rf \"$dest\"; mv \"$backup\" \"$dest\"; " + - "chown -R root:wheel \"$dest\"; chmod 755 \"$dest/PocketJSiPodTouch4\"; " + + `chown -R root:wheel "$dest"; chmod 755 "$dest/${EXECUTABLE}"; ` + "elif [ \"$origin\" = empty ]; then rm -rf \"$dest\"; fi; " + "rm -rf \"$stage\" \"$unpack\" \"$archive\"; fi; " + "rm -f \"$lock/phase\" \"$lock/origin\"; " + @@ -733,7 +861,7 @@ export function deploymentInstallCommand(transactionId: string, paths: Deploymen "if [ \"$installed_new\" -eq 1 ]; then rm -rf \"$dest\"; fi; " + "if [ \"$had_previous\" -eq 1 ] && [ -e \"$backup\" ]; then " + "mv \"$backup\" \"$dest\"; " + - "chown -R root:wheel \"$dest\"; chmod 755 \"$dest/PocketJSiPodTouch4\"; " + + `chown -R root:wheel "$dest"; chmod 755 "$dest/${EXECUTABLE}"; ` + "/bin/su mobile -c /usr/bin/uicache; fi; exit \"$status\"; }; " + "trap rollback EXIT HUP INT TERM; " + "printf '%s\\n' prepared > \"$lock/phase\"; " + @@ -742,8 +870,8 @@ export function deploymentInstallCommand(transactionId: string, paths: Deploymen "else printf '%s\\n' empty > \"$lock/origin\"; fi; " + "mv \"$stage\" \"$dest\"; installed_new=1; printf '%s\\n' installed > \"$lock/phase\"; " + "chown -R root:wheel \"$dest\"; " + - "chmod 755 \"$dest/PocketJSiPodTouch4\"; test -x \"$dest/PocketJSiPodTouch4\"; " + - "/usr/bin/ldid -e \"$dest/PocketJSiPodTouch4\" >/dev/null; " + + `chmod 755 "$dest/${EXECUTABLE}"; test -x "$dest/${EXECUTABLE}"; ` + + `/usr/bin/ldid -e "$dest/${EXECUTABLE}" >/dev/null; ` + "/bin/su mobile -c /usr/bin/uicache; printf '%s\\n' committed > \"$lock/phase\"; " + "trap - EXIT HUP INT TERM; " + "rm -rf \"$backup\"; " + @@ -756,7 +884,7 @@ async function deploy(): Promise { const receipt = readReceipt(); const transactionId = randomBytes(12).toString("hex"); const paths = ipodtouch4DeploymentPaths(transactionId); - const archive = join(REPOSITORY, `.pocket-build/ipodtouch4/PocketJSiPodTouch4.app-${transactionId}.tar`); + const archive = join(REPOSITORY, `.pocket-build/ipodtouch4/${BUNDLE_NAME}-${transactionId}.tar`); mkdirSync(dirname(archive), { recursive: true }); mustRun( "tar", @@ -805,10 +933,10 @@ async function deploy(): Promise { `stage=${paths.stage}; unpack=${paths.unpack}; archive=${paths.archive}; ` + "rm -rf \"$stage\" \"$unpack\"; mkdir -p \"$unpack\"; " + "tar -xf \"$archive\" -C \"$unpack\"; " + - "test -d \"$unpack/PocketJSiPodTouch4.app\"; " + - "mv \"$unpack/PocketJSiPodTouch4.app\" \"$stage\"; rmdir \"$unpack\"; " + - "test -x \"$stage/PocketJSiPodTouch4\"; " + - "/usr/bin/ldid -e \"$stage/PocketJSiPodTouch4\" >/dev/null", + `test -d "$unpack/${BUNDLE_NAME}"; ` + + `mv "$unpack/${BUNDLE_NAME}" "$stage"; rmdir "$unpack"; ` + + `test -x "$stage/${EXECUTABLE}"; ` + + `/usr/bin/ldid -e "$stage/${EXECUTABLE}" >/dev/null`, ); mustRemote(port, deploymentRenewLockCommand( transactionId, @@ -882,8 +1010,8 @@ async function launch(): Promise { verifyInstalledReceipt(port, receipt); mustRemote( port, - `killall PocketJSiPodTouch4 2>/dev/null || true; rm -f ${STATUS_PATH} ${FRAME_PATH}; ` + - "/bin/su mobile -c '/usr/bin/uiopen pocketjs-ipodtouch4://launch'; echo launch-requested", + `killall ${EXECUTABLE} 2>/dev/null || true; rm -f ${STATUS_PATH} ${FRAME_PATH}; ` + + `/bin/su mobile -c '/usr/bin/uiopen ${APP.scheme}://launch'; echo launch-requested`, ); await Bun.sleep(2500); }); @@ -941,14 +1069,15 @@ async function status(requireAction: boolean): Promise { if (current.state !== "running" || current.error !== "") { throw new Error(`pocket ipodtouch4: guest state=${current.state} error=${current.error || "none"}`); } + const drawable = expectedDrawable(receipt); if ( current.renderer !== "gles1" || - current.raster_density !== IPODTOUCH4_RASTER_DENSITY || - current.drawable_width !== IPODTOUCH4_PHYSICAL_VIEWPORT[0] || - current.drawable_height !== IPODTOUCH4_PHYSICAL_VIEWPORT[1] + current.raster_density !== drawable.rasterDensity || + current.drawable_width !== drawable.physical[0] || + current.drawable_height !== drawable.physical[1] ) { throw new Error( - `pocket ipodtouch4: expected GLES1 Retina ${IPODTOUCH4_PHYSICAL_VIEWPORT.join("x")}, got ` + + `pocket ipodtouch4: expected GLES1 Retina ${drawable.physical.join("x")}, got ` + `${current.renderer} ${current.drawable_width}x${current.drawable_height} @${current.raster_density}x`, ); } @@ -960,11 +1089,11 @@ async function status(requireAction: boolean): Promise { if ( requireAction && (current.completed_touch_sequences < 1 || - current.action_name !== ACTION_NAME || + current.action_name !== APP.actionName || current.action_value < 1 || current.action_sequence < 1) ) { - throw new Error("pocket ipodtouch4: no completed Clear gesture receipt yet"); + throw new Error(`pocket ipodtouch4: no completed ${APP.title} action receipt yet`); } console.log(JSON.stringify(current, null, 2)); }); @@ -978,6 +1107,7 @@ async function capture(): Promise { let renderer = ""; let width = 0; let height = 0; + const drawable = expectedDrawable(readReceipt()); await withTunnel(async (port) => { try { const status = await readDeviceStatus(port); @@ -986,9 +1116,9 @@ async function capture(): Promise { height = status.drawable_height; if ( renderer !== "gles1" || - width !== IPODTOUCH4_PHYSICAL_VIEWPORT[0] || - height !== IPODTOUCH4_PHYSICAL_VIEWPORT[1] || - status.raster_density !== IPODTOUCH4_RASTER_DENSITY + width !== drawable.physical[0] || + height !== drawable.physical[1] || + status.raster_density !== drawable.rasterDensity ) { throw new Error(`pocket ipodtouch4: refusing non-Retina capture ${renderer} ${width}x${height}`); } @@ -1046,7 +1176,7 @@ function tunnel(): never { } function usage(): void { - console.log(`PocketJS iPod touch 4 tool + console.log(`PocketJS iPod touch 4 tool (app: ${APP.id}; POCKETJS_IPODTOUCH4_APP=${Object.keys(IPODTOUCH4_APPS).join("|")}) bun ipodtouch4 doctor bun ipodtouch4 setup-sources diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts new file mode 100644 index 000000000..ad9fc808e --- /dev/null +++ b/tools/pocket-remote.ts @@ -0,0 +1,226 @@ +// tools/pocket-remote.ts — operate the Pocket Remote daemon on an Omarchy +// machine from this Mac, and bridge the iPod to it when the machine's +// firewall is in the way. +// +// bun tools/pocket-remote.ts deploy-host copy the daemon, install the user unit, restart +// bun tools/pocket-remote.ts logs [-n 80] journal tail +// bun tools/pocket-remote.ts status unit status + listener +// bun tools/pocket-remote.ts relay ssh -L tunnel (local 8623) + LAN beacon from this Mac +// bun tools/pocket-remote.ts client a scripted device, for checking a daemon +// +// Why a relay: Omarchy ships ufw with incoming DROP (only ssh is open), so the +// iPod cannot reach tcp 8622 on the laptop directly. The relay forwards the +// wire over the ssh connection that IS allowed and answers the LAN beacon +// from the Mac, so the device connects to the Mac and the Mac to the laptop. +// Once `sudo ufw allow from to any port 8622 proto tcp` has been run on +// the laptop, start the daemon with --beacon instead and drop the relay. + +import { createSocket } from "node:dgram"; +import { connect } from "node:net"; +import { hostname } from "node:os"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; +import { REMOTE_APP, REMOTE_PROTO, type ClientLine, type HostLine, parseLines } from "../apps/pocket-remote/protocol.ts"; +import { + encodeBeacon, + encodeCtrl, + encodeFrame, + FrameParser, + WIRE_BEACON_PORT, + WIRE_MAGIC, + WIRE_MSG, + WIRE_PORT, + WIRE_VERSION, +} from "../apps/pocket-remote/host/wire.ts"; + +const REPOSITORY = fileURLToPath(new URL("..", import.meta.url)); +const APP_DIR = join(REPOSITORY, "apps/pocket-remote"); +/** Files the daemon needs on the Omarchy machine (no repository there). */ +const HOST_FILES = ["protocol.ts", "actions.ts", "host/wire.ts", "host/hypr.ts", "host/omarchy.ts", "host/serve.ts"]; +const REMOTE_DIR = ".local/share/pocket-remote"; +const UNIT = "pocket-remote.service"; + +function run(cmd: string[], input?: string): string { + const result = Bun.spawnSync({ cmd, stdin: input === undefined ? "inherit" : Buffer.from(input), stdout: "pipe", stderr: "pipe" }); + if (result.exitCode !== 0) { + throw new Error(`${cmd.join(" ")} failed (${result.exitCode}):\n${result.stderr.toString().trim()}`); + } + return result.stdout.toString(); +} + +function ssh(host: string, command: string, input?: string): string { + return run(["ssh", "-o", "BatchMode=yes", host, command], input); +} + +async function deployHost(host: string): Promise { + // One tar over ssh: the six daemon files and the unit, into the user's home. + const tar = Bun.spawnSync({ + cmd: ["tar", "-cf", "-", "-C", APP_DIR, ...HOST_FILES, "host/pocket-remote.service"], + stdout: "pipe", + stderr: "pipe", + }); + if (tar.exitCode !== 0) throw new Error(tar.stderr.toString()); + const archive = Buffer.from(tar.stdout); + const install = + `set -eu; mkdir -p ~/${REMOTE_DIR} ~/.config/systemd/user; ` + + `tar -xf - -C ~/${REMOTE_DIR}; ` + + `cp ~/${REMOTE_DIR}/host/${UNIT} ~/.config/systemd/user/${UNIT}; ` + + `test -x ~/.local/share/mise/shims/node || { echo "node (mise) is missing on the host" >&2; exit 2; }; ` + + `systemctl --user daemon-reload; systemctl --user enable ${UNIT} >/dev/null 2>&1 || true; ` + + `systemctl --user restart ${UNIT}; sleep 1; systemctl --user is-active ${UNIT}`; + const result = Bun.spawnSync({ cmd: ["ssh", "-o", "BatchMode=yes", host, install], stdin: archive, stdout: "pipe", stderr: "pipe" }); + if (result.exitCode !== 0) throw new Error(`deploy failed (${result.exitCode}):\n${result.stderr.toString().trim()}`); + console.log(`deployed to ${host}:~/${REMOTE_DIR}; ${UNIT} ${result.stdout.toString().trim()}`); + console.log(ssh(host, `journalctl --user -u ${UNIT} -n 5 --no-pager -o cat`)); +} + +function logs(host: string, lines: number): void { + console.log(ssh(host, `journalctl --user -u ${UNIT} -n ${lines} --no-pager -o cat`)); +} + +function status(host: string): void { + console.log(ssh(host, `systemctl --user status ${UNIT} --no-pager 2>&1 | head -12; ss -ltn | grep -E ':${WIRE_PORT} ' || echo 'no listener on ${WIRE_PORT}'`)); +} + +/** The relay's local port: 8622 is often taken on a developer Mac (the + * pocket-youtube companion holds it), and the beacon carries the port. */ +const RELAY_PORT = 8623; + +/** ssh -L tunnel to the daemon + a beacon from this Mac naming this Mac. */ +async function relay(host: string, name: string, localPort: number): Promise { + const tunnel = Bun.spawn({ + cmd: ["ssh", "-o", "BatchMode=yes", "-o", "ExitOnForwardFailure=yes", "-o", "ServerAliveInterval=15", "-N", "-L", `0.0.0.0:${localPort}:127.0.0.1:${WIRE_PORT}`, host], + stdout: "inherit", + stderr: "inherit", + }); + const udp = createSocket("udp4"); + const payload = encodeBeacon(REMOTE_APP, name, localPort); + udp.bind(() => { + udp.setBroadcast(true); + setInterval(() => udp.send(payload, WIRE_BEACON_PORT, "255.255.255.255", () => {}), 1000); + console.log(`relay: tcp ${localPort} on this Mac -> ${host}:${WIRE_PORT} over ssh; beacon "${name}" on udp ${WIRE_BEACON_PORT}`); + }); + const stop = () => { + tunnel.kill(); + udp.close(); + process.exit(0); + }; + process.on("SIGINT", stop); + process.on("SIGTERM", stop); + const code = await tunnel.exited; + console.error(`relay: ssh tunnel exited (${code})`); + udp.close(); + process.exit(code === 0 ? 0 : 1); +} + +/** + * A scripted device: connect, hello, print what the daemon mirrors, run the + * lines given after `--` (JSON), then hang up. Verifies a daemon end to end + * without an iPod in hand. + */ +async function client(target: string, lines: string[], seconds: number): Promise { + const [hostName, portText] = target.split(":"); + const port = Number(portText ?? WIRE_PORT); + await new Promise((resolve, reject) => { + const socket = connect({ host: hostName, port }); + const parser = new FrameParser(); + let acked = false; + socket.on("connect", () => { + const app = new TextEncoder().encode(REMOTE_APP); + const hello = new Uint8Array(7 + app.length); + new DataView(hello.buffer).setUint32(0, WIRE_MAGIC, true); + hello[4] = WIRE_VERSION; + hello[6] = app.length; + hello.set(app, 7); + socket.write(hello); + }); + socket.on("data", (chunk: Buffer) => { + let bytes = new Uint8Array(chunk); + if (!acked) { + if (bytes.length < 8) return; + acked = true; + bytes = bytes.slice(8); + const helloLine: ClientLine = { t: "hello", proto: REMOTE_PROTO, device: `client on ${hostname()}` }; + socket.write(encodeCtrl(JSON.stringify(helloLine))); + setTimeout(() => { + for (const line of lines) socket.write(encodeCtrl(line)); + }, 400); + setTimeout(() => { + socket.end(); + resolve(); + }, seconds * 1000); + } + for (const frame of parser.push(bytes)) { + if (frame.type === WIRE_MSG.ping) { + socket.write(encodeFrame(WIRE_MSG.pong, frame.payload)); + continue; + } + if (frame.type !== WIRE_MSG.ctrl) continue; + for (const line of parseLines(new TextDecoder().decode(frame.payload))) { + const text = JSON.stringify(line); + console.log(text.length > 400 ? `${text.slice(0, 400)}… (${text.length} bytes)` : text); + } + } + }); + socket.on("error", reject); + }); +} + +function usage(): void { + console.log(`Pocket Remote host tool + + bun tools/pocket-remote.ts deploy-host + bun tools/pocket-remote.ts logs [-n N] + bun tools/pocket-remote.ts status + bun tools/pocket-remote.ts relay [--name ] [--local-port 8623] + bun tools/pocket-remote.ts client [--for seconds] [-- ...]`); +} + +async function main(args: string[]): Promise { + const [command, target] = args; + switch (command) { + case "deploy-host": + if (!target) throw new Error("deploy-host needs an ssh host"); + await deployHost(target); + break; + case "logs": { + if (!target) throw new Error("logs needs an ssh host"); + const at = args.indexOf("-n"); + logs(target, at >= 0 ? Number(args[at + 1]) : 40); + break; + } + case "status": + if (!target) throw new Error("status needs an ssh host"); + status(target); + break; + case "relay": { + if (!target) throw new Error("relay needs an ssh host"); + const at = args.indexOf("--name"); + const portAt = args.indexOf("--local-port"); + await relay( + target, + at >= 0 ? (args[at + 1] ?? hostname()) : `${target} via ${hostname().replace(/\.local$/, "")}`, + portAt >= 0 ? Number(args[portAt + 1]) : RELAY_PORT, + ); + break; + } + case "client": { + if (!target) throw new Error("client needs host[:port]"); + const dash = args.indexOf("--"); + const forAt = args.indexOf("--for"); + const seconds = forAt >= 0 ? Number(args[forAt + 1]) : 3; + await client(target, dash >= 0 ? args.slice(dash + 1) : [], seconds); + break; + } + default: + usage(); + if (command && command !== "help" && command !== "--help") throw new Error(`unknown command ${command}`); + } +} + +if (import.meta.main) { + main(Bun.argv.slice(2)).catch((error) => { + console.error(error instanceof Error ? error.message : error); + process.exit(1); + }); +} diff --git a/tools/test.ts b/tools/test.ts index ab6f5838e..1f5db97f8 100644 --- a/tools/test.ts +++ b/tools/test.ts @@ -54,6 +54,7 @@ const SUITE: readonly Stage[] = [ "tests/iphone4s-profile.test.ts", "tests/ipodtouch-profile.test.ts", "tests/ipodtouch4-profile.test.ts", + "tests/pocket-remote.test.ts", "tests/meizu-m8-profile.test.ts", "tests/blackberry-classic.test.ts", "tests/pocket-input.test.ts", @@ -138,6 +139,12 @@ const SUITE: readonly Stage[] = [ browser: true, tests: ["tests/sim.test.ts"], }, + { + name: "pocket-remote sim", + prep: [["bun", "tools/build.ts", "pocket-remote-main"]], + browser: true, + tests: ["tests/pocket-remote-sim.test.ts"], + }, { name: "deepzoom sim", prep: [["bun", "tools/build.ts", "zoomlab-main"]], From 9881bf02d4f074a19cba11a0b79a0c57b4f02c99 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 16:48:43 -0700 Subject: [PATCH 05/27] fix(pocket-remote): speak Hyprland 0.56's Lua dispatcher grammar, log allowed devices, fit the dock captions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hyprland's request socket now evaluates `dispatch ` as `hl.dispatch()` — `dispatch workspace 1` fails with a Lua parse error, from hyprctl too. Every dispatcher in actions.ts is a constructor call (hl.dsp.focus({ workspace = "1" }), hl.dsp.window.close({ window = … })), the daemon builds window and workspace targets only from validated pieces, and a batch is one `eval` chunk. Verified against the laptop: the remote's workspace switch now moves the desktop and the iPod mirrors it. Also: an unanswered approval dialog no longer counts as a refusal, allowed connections are logged, and the dock speaks in five-letter captions so the labels stop overlapping in their 44 px slots (seen on the device capture). Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 12 +++++++ apps/pocket-remote/actions.ts | 52 ++++++++++++++++-------------- apps/pocket-remote/host/hypr.ts | 24 +++++++++++--- apps/pocket-remote/host/omarchy.ts | 2 +- apps/pocket-remote/host/serve.ts | 34 ++++++++++++------- tests/pocket-remote.test.ts | 23 +++++++++++-- 6 files changed, 102 insertions(+), 45 deletions(-) diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 369d5bc7c..4593d1e36 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -102,6 +102,18 @@ known. Level drags update locally and send at most every three frames; host echoes are ignored for half a second after a release so the rail never snaps back on the way. +## Hyprland's request socket speaks Lua + +Hyprland 0.5x (the Lua-config generation Omarchy 4 runs) evaluates +`dispatch ` on `.socket.sock` as `hl.dispatch()`, so the old +`dispatch workspace 1` grammar fails with a Lua parse error — from `hyprctl` +too. **Every dispatcher in `actions.ts` is therefore a Lua constructor call** +(`hl.dsp.focus({ workspace = "1" })`, `hl.dsp.window.close({ window = +"address:0x…" })`), the same ones Omarchy's own bindings and scripts use. The +daemon builds window and workspace targets only from validated pieces +(`luaWindow`, `luaWorkspace`), so nothing off the wire can reach the Lua +evaluator as code. + ## The wire Spec ops 30–32 (`svcOpen`/`svcPoll`/`svcSend`) over the SVC WIRE (PKNT) TCP diff --git a/apps/pocket-remote/actions.ts b/apps/pocket-remote/actions.ts index 937894c0a..97df222d3 100644 --- a/apps/pocket-remote/actions.ts +++ b/apps/pocket-remote/actions.ts @@ -22,7 +22,11 @@ export type ActionGroup = export type ActionRun = /** argv, spawned directly (no shell). */ | { exec: string[] } - /** `hyprctl dispatch <...>` over the Hyprland socket. */ + /** A Hyprland dispatcher as a Lua expression (Hyprland 0.5x's request + * socket takes `dispatch ` and evaluates `hl.dispatch()`; the + * old `dispatch workspace 1` grammar is gone). Constructors are the ones + * Omarchy's own bindings use: hl.dsp.window.*, hl.dsp.focus(...), + * hl.dsp.layout(...), hl.dsp.workspace.*, hl.dsp.group.*. */ | { dispatch: string }; export interface ActionDef { @@ -117,32 +121,32 @@ export const ACTIONS: readonly ActionDef[] = [ { id: "clipboard", label: "Clipboard", group: "launch", run: omarchy("omarchy-menu-clipboard") }, // -- window ---------------------------------------------------------------- - { id: "close", label: "Close", group: "window", run: dispatch("killactive"), hold: true }, - { id: "fullscreen", label: "Full screen", group: "window", run: dispatch("fullscreen 0") }, - { id: "maximize", label: "Full width", group: "window", run: dispatch("fullscreen 1") }, - { id: "float", label: "Float", group: "window", run: dispatch("togglefloating") }, - { id: "pseudo", label: "Pseudo", group: "window", run: dispatch("pseudo") }, - { id: "split", label: "Split", group: "window", run: dispatch("togglesplit") }, + { id: "close", label: "Close", group: "window", run: dispatch("hl.dsp.window.close()"), hold: true }, + { id: "fullscreen", label: "Full screen", group: "window", run: dispatch('hl.dsp.window.fullscreen({ mode = "fullscreen" })') }, + { id: "maximize", label: "Full width", group: "window", run: dispatch('hl.dsp.window.fullscreen({ mode = "maximized" })') }, + { id: "float", label: "Float", group: "window", run: dispatch('hl.dsp.window.float({ action = "toggle" })') }, + { id: "pseudo", label: "Pseudo", group: "window", run: dispatch("hl.dsp.window.pseudo()") }, + { id: "split", label: "Split", group: "window", run: dispatch('hl.dsp.layout("togglesplit")') }, { id: "pop", label: "Pop out", group: "window", run: omarchy("omarchy-hyprland-window-pop") }, - { id: "group", label: "Group", group: "window", run: dispatch("togglegroup") }, - { id: "cycle", label: "Next window", group: "window", run: dispatch("cyclenext") }, - { id: "focusL", label: "Focus left", group: "window", run: dispatch("movefocus l") }, - { id: "focusR", label: "Focus right", group: "window", run: dispatch("movefocus r") }, - { id: "focusU", label: "Focus up", group: "window", run: dispatch("movefocus u") }, - { id: "focusD", label: "Focus down", group: "window", run: dispatch("movefocus d") }, - { id: "swapL", label: "Swap left", group: "window", run: dispatch("swapwindow l") }, - { id: "swapR", label: "Swap right", group: "window", run: dispatch("swapwindow r") }, - { id: "swapU", label: "Swap up", group: "window", run: dispatch("swapwindow u") }, - { id: "swapD", label: "Swap down", group: "window", run: dispatch("swapwindow d") }, - { id: "widen", label: "Wider", group: "window", run: dispatch("resizeactive 100 0") }, - { id: "narrow", label: "Narrower", group: "window", run: dispatch("resizeactive -100 0") }, + { id: "group", label: "Group", group: "window", run: dispatch("hl.dsp.group.toggle()") }, + { id: "cycle", label: "Next window", group: "window", run: dispatch("hl.dsp.window.cycle_next()") }, + { id: "focusL", label: "Focus left", group: "window", run: dispatch('hl.dsp.focus({ direction = "l" })') }, + { id: "focusR", label: "Focus right", group: "window", run: dispatch('hl.dsp.focus({ direction = "r" })') }, + { id: "focusU", label: "Focus up", group: "window", run: dispatch('hl.dsp.focus({ direction = "u" })') }, + { id: "focusD", label: "Focus down", group: "window", run: dispatch('hl.dsp.focus({ direction = "d" })') }, + { id: "swapL", label: "Swap left", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "l" })') }, + { id: "swapR", label: "Swap right", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "r" })') }, + { id: "swapU", label: "Swap up", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "u" })') }, + { id: "swapD", label: "Swap down", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "d" })') }, + { id: "widen", label: "Wider", group: "window", run: dispatch("hl.dsp.window.resize({ x = 100, y = 0, relative = true })") }, + { id: "narrow", label: "Narrower", group: "window", run: dispatch("hl.dsp.window.resize({ x = -100, y = 0, relative = true })") }, // -- workspace ------------------------------------------------------------- - { id: "wsPrev", label: "Previous", group: "workspace", run: dispatch("workspace e-1") }, - { id: "wsNext", label: "Next", group: "workspace", run: dispatch("workspace e+1") }, - { id: "wsBack", label: "Former", group: "workspace", run: dispatch("workspace previous") }, - { id: "scratchpad", label: "Scratchpad", group: "workspace", run: dispatch("togglespecialworkspace scratchpad") }, - { id: "toScratchpad", label: "To scratchpad", group: "workspace", run: dispatch("movetoworkspacesilent special:scratchpad") }, + { id: "wsPrev", label: "Previous", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e-1" })') }, + { id: "wsNext", label: "Next", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e+1" })') }, + { id: "wsBack", label: "Former", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "previous" })') }, + { id: "scratchpad", label: "Scratchpad", group: "workspace", run: dispatch('hl.dsp.workspace.toggle_special("scratchpad")') }, + { id: "toScratchpad", label: "To scratchpad", group: "workspace", run: dispatch('hl.dsp.window.move({ workspace = "special:scratchpad", follow = false })') }, { id: "layout", label: "Layout", group: "workspace", run: omarchy("omarchy-hyprland-workspace-layout-toggle") }, // -- toggle ---------------------------------------------------------------- diff --git a/apps/pocket-remote/host/hypr.ts b/apps/pocket-remote/host/hypr.ts index ed21d3aed..dfae8a2db 100644 --- a/apps/pocket-remote/host/hypr.ts +++ b/apps/pocket-remote/host/hypr.ts @@ -172,13 +172,27 @@ export async function hyprJson(directory: string, command: string): Promise { - return hyprRequest(directory, `dispatch ${dispatch}`); +/** Run one dispatcher given as a Lua expression (`hl.dsp...`): the request + * socket evaluates `hl.dispatch()` and answers `ok`. */ +export async function hyprDispatch(directory: string, lua: string): Promise { + return hyprRequest(directory, `dispatch ${lua}`); } -/** Several dispatches in one round trip, in order. */ -export async function hyprBatch(directory: string, dispatches: string[]): Promise { - return hyprRequest(directory, `[[BATCH]]${dispatches.map((d) => `dispatch ${d}`).join(";")}`); +/** Several dispatchers in one round trip, in order, as one Lua chunk. */ +export async function hyprBatch(directory: string, luaDispatchers: string[]): Promise { + return hyprRequest(directory, `eval ${luaDispatchers.map((d) => `hl.dispatch(${d})`).join(" ")}`); +} + +/** Lua for a window target by address (validated: `0x` + hex only). */ +export function luaWindow(address: string): string | null { + return /^0x[0-9a-f]+$/.test(address) ? `"address:${address}"` : null; +} + +/** Lua for a workspace target: an id, or a relative step `e+1`/`e-1`. */ +export function luaWorkspace(n: number, rel = false): string | null { + if (!Number.isInteger(n)) return null; + if (rel) return n === 0 ? null : `"e${n > 0 ? "+" : "-"}${Math.abs(n)}"`; + return n >= 1 && n <= 10 ? `"${n}"` : null; } export async function snapshot(directory: string): Promise { diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index 471ca3eba..4f96ad52f 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -35,7 +35,7 @@ export function runDetached(argv: string[], log: Log): void { export async function runAction(action: ActionDef, hyprDir: string, log: Log): Promise { if ("dispatch" in action.run) { const reply = await hyprDispatch(hyprDir, action.run.dispatch); - if (reply.trim() !== "ok") log(`dispatch ${action.run.dispatch}: ${reply.trim()}`); + if (reply.trim() !== "ok") log(`dispatch ${action.run.dispatch}: ${reply.trim().split("\n")[0]}`); return; } runDetached(action.run.exec, log); diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index 22055f723..3df0817f9 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -32,7 +32,7 @@ import { REMOTE_APP, REMOTE_PROTO, } from "../protocol.ts"; -import { hyprBatch, hyprDirectory, hyprDispatch, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; +import { hyprBatch, hyprDirectory, hyprDispatch, luaWindow, luaWorkspace, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; import { pressKey, readLevels, @@ -268,6 +268,16 @@ function sendMirror(conn: Conn): void { // commands // --------------------------------------------------------------------------- +async function dispatchLogged(lua: string): Promise { + const reply = await hyprDispatch(hyprDir, lua); + if (reply.trim() !== "ok") log(`dispatch ${lua}: ${reply.trim().split("\n")[0]}`); +} + +async function batchLogged(luaDispatchers: string[]): Promise { + const reply = await hyprBatch(hyprDir, luaDispatchers); + if (reply.trim() !== "ok") log(`batch ${luaDispatchers.join(" ")}: ${reply.trim().split("\n")[0]}`); +} + async function handle(conn: Conn, line: ClientLine): Promise { if (line.t === "hello") { conn.device = typeof line.device === "string" ? line.device.slice(0, 40) : "device"; @@ -309,30 +319,30 @@ async function handle(conn: Conn, line: ClientLine): Promise { return; } case "ws": { - const n = Number(line.n); - if (!Number.isInteger(n)) return; - await hyprDispatch(hyprDir, line.rel ? `workspace e${n >= 0 ? "+" : "-"}${Math.abs(n)}` : `workspace ${n}`); + const target = luaWorkspace(Number(line.n), line.rel === 1); + if (!target) return; + await dispatchLogged(`hl.dsp.focus({ workspace = ${target} })`); scheduleSnapshot(); return; } case "win": { - const address = typeof line.a === "string" && /^0x[0-9a-f]+$/.test(line.a) ? line.a : null; - if (!address) return; + const window = typeof line.a === "string" ? luaWindow(line.a) : null; + if (!window) return; switch (line.op) { case "focus": - await hyprDispatch(hyprDir, `focuswindow address:${address}`); + await dispatchLogged(`hl.dsp.focus({ window = ${window} })`); break; case "close": - await hyprDispatch(hyprDir, `closewindow address:${address}`); + await dispatchLogged(`hl.dsp.window.close({ window = ${window} })`); break; case "swap": if (!["l", "r", "u", "d"].includes(line.dir)) return; - await hyprBatch(hyprDir, [`focuswindow address:${address}`, `swapwindow ${line.dir}`]); + await batchLogged([`hl.dsp.focus({ window = ${window} })`, `hl.dsp.window.swap({ direction = "${line.dir}" })`]); break; case "move": { - const n = Number(line.n); - if (!Number.isInteger(n) || n < 1 || n > 10) return; - await hyprDispatch(hyprDir, `movetoworkspacesilent ${n},address:${address}`); + const target = luaWorkspace(Number(line.n)); + if (!target) return; + await dispatchLogged(`hl.dsp.window.move({ window = ${window}, workspace = ${target}, follow = false })`); break; } } diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index eb9f79963..2f38b6083 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -12,7 +12,7 @@ import { } from "../contracts/spec/spec.ts"; import { ACTIONS, actionById, actionsOf, DOCK, PAD_PAGES } from "../apps/pocket-remote/actions.ts"; import * as wire from "../apps/pocket-remote/host/wire.ts"; -import { buildState, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; +import { buildState, luaWindow, luaWorkspace, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; import { paletteFrom, parseBrightnessctl, parseColorsToml, parsePactlVolume } from "../apps/pocket-remote/host/omarchy.ts"; import { approach, @@ -145,11 +145,15 @@ describe("pocket-remote actions", () => { expect(action.run.exec.length).toBeGreaterThan(0); for (const word of action.run.exec) expect(word).not.toMatch(/[|;&$`]/); } else { - expect(action.run.dispatch).toMatch(/^[a-z]+( .+)?$/); + // Hyprland 0.5x's socket evaluates `hl.dispatch()`: every + // dispatcher is a constructor call under hl.dsp, balanced. + expect(action.run.dispatch).toMatch(/^hl\.dsp\.[a-z_.]+\(.*\)$/); + expect((action.run.dispatch.match(/\(/g) ?? []).length).toBe((action.run.dispatch.match(/\)/g) ?? []).length); } } expect(actionById("terminal")!.run).toEqual({ exec: ["omarchy-launch-terminal"] }); - expect(actionById("close")!.run).toEqual({ dispatch: "killactive" }); + expect(actionById("close")!.run).toEqual({ dispatch: "hl.dsp.window.close()" }); + expect(actionById("wsNext")!.run).toEqual({ dispatch: 'hl.dsp.focus({ workspace = "e+1" })' }); expect(actionById("layout")!.run).toEqual({ exec: ["omarchy-hyprland-workspace-layout-toggle"] }); expect(actionById("play")!.run).toEqual({ exec: ["omarchy-shell", "media", "playPause"] }); expect(actionsOf("media").length).toBe(4); @@ -321,6 +325,19 @@ describe("pocket-remote hypr mirror", () => { expect(state.win[0]!.a).toBe("0x39"); }); + test("window and workspace targets reach Lua only when well-formed", () => { + expect(luaWindow("0x55f90cb39300")).toBe('"address:0x55f90cb39300"'); + expect(luaWindow('0x1" }) os.exit() --')).toBeNull(); + expect(luaWindow("foot")).toBeNull(); + expect(luaWorkspace(3)).toBe('"3"'); + expect(luaWorkspace(0)).toBeNull(); + expect(luaWorkspace(11)).toBeNull(); + expect(luaWorkspace(1.5)).toBeNull(); + expect(luaWorkspace(1, true)).toBe('"e+1"'); + expect(luaWorkspace(-1, true)).toBe('"e-1"'); + expect(luaWorkspace(0, true)).toBeNull(); + }); + test("parses socket2 event lines", () => { expect(parseEvent("workspacev2>>2,2")).toEqual({ name: "workspacev2", data: "2,2" }); expect(parseEvent("activewindow>>foot,evan@x1nano-omarchy:~")).toEqual({ name: "activewindow", data: "foot,evan@x1nano-omarchy:~" }); From dd577e666978aa4f3c40d05b66a6ca3f2e95c631 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 18:33:20 -0700 Subject: [PATCH 06/27] feat(pocket-remote): levels card, menu cascade, full-screen keyboard with chords MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Round two of the remote's UX, from the first hands-on: - The rails are gone. Brightness and volume were low-frequency and their caps were easy to hit by accident, so they live in one levels card now — the control-centre control: tap Levels to open it sticky (tap outside closes), or hold Levels and slide: the row under the finger follows the finger relatively, release lingers a second, then the card puts itself away. The speaker glyph is a stepped horn instead of the rotated square that read as broken. - With the rails gone the strip, stage and dock span the full 480 px and the dock has eleven 43 px slots, so "more" no longer sits under a rail. - Hold Menu and a cascade rises above the dock: six routes (Apps, Capture, Toggle, Style, System, Learn) with a staggered entrance over a veil; slide onto a route and its leaves fan out beside it; release on a leaf to run it, on a route to open it on the desktop, elsewhere to cancel. - The keyboard takes the whole screen: five rows of 48 px keys, esc and digits on top, arrows, tab, a hide chevron in the caption bar, and two ways to make chords — sticky ctrl/alt that arm for one key, and hold-and-slide variants (hold x → ^X ⌥X, hold 1 → F1 ^1) as light chips. The wire carries `mods` on a key; the daemon builds `wtype -M … -k … -m …` from an allow-list. - Geometry and the key table moved to keyboard-layout.ts so tests import them bare; the sim now drives a real hold-and-slide through the touch path. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/actions.ts | 35 +- apps/pocket-remote/app.tsx | 32 +- apps/pocket-remote/desk.tsx | 607 +++++++++++++++++--------- apps/pocket-remote/host/omarchy.ts | 35 +- apps/pocket-remote/host/serve.ts | 8 +- apps/pocket-remote/icons.tsx | 31 +- apps/pocket-remote/keyboard-layout.ts | 193 ++++++++ apps/pocket-remote/keyboard.tsx | 327 +++++++------- apps/pocket-remote/layout.ts | 157 +++++-- apps/pocket-remote/pad.tsx | 20 +- apps/pocket-remote/protocol.ts | 7 +- apps/pocket-remote/store.ts | 176 +++++++- tests/pocket-remote-sim.test.ts | 6 +- tests/pocket-remote.test.ts | 168 ++++++- 14 files changed, 1326 insertions(+), 476 deletions(-) create mode 100644 apps/pocket-remote/keyboard-layout.ts diff --git a/apps/pocket-remote/actions.ts b/apps/pocket-remote/actions.ts index 97df222d3..b09502079 100644 --- a/apps/pocket-remote/actions.ts +++ b/apps/pocket-remote/actions.ts @@ -42,6 +42,11 @@ export type ActionId = // launch | "menu" | "apps" + | "menuStyle" + | "menuCapture" + | "menuToggle" + | "menuSystem" + | "menuLearn" | "terminal" | "browser" | "files" @@ -112,6 +117,11 @@ export const ACTIONS: readonly ActionDef[] = [ // -- launch (SUPER + ...) -------------------------------------------------- { id: "menu", label: "Menu", group: "launch", run: omarchy("omarchy-menu", "toggle") }, { id: "apps", label: "Apps", group: "launch", run: omarchy("omarchy-menu", "toggle", "apps") }, + { id: "menuStyle", label: "Style menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "style") }, + { id: "menuCapture", label: "Capture menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "capture") }, + { id: "menuToggle", label: "Toggle menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "toggle") }, + { id: "menuSystem", label: "System menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "system") }, + { id: "menuLearn", label: "Learn menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "learn") }, { id: "terminal", label: "Terminal", group: "launch", run: omarchy("omarchy-launch-terminal") }, { id: "browser", label: "Browser", group: "launch", run: omarchy("omarchy-launch-browser") }, { id: "files", label: "Files", group: "launch", run: omarchy("omarchy-launch-nautilus") }, @@ -193,8 +203,29 @@ export function actionsOf(group: ActionGroup): ActionDef[] { return ACTIONS.filter((action) => action.group === group); } -/** The dock: the nine things a remote is reached for, in reading order. The - * tenth slot opens the pad with everything else. */ +/** + * The Menu key's hold-and-slide flyout: Omarchy's root menu as routes + * (bottom = nearest the finger), each with the leaves the remote can run + * directly. Releasing on a route opens that route on the desktop; releasing + * on a leaf runs it. Leaves are capped at six so the column fits the stage. + */ +export interface MenuRoute { + id: ActionId; + label: string; + leaves: ActionId[]; +} + +export const MENU_ROUTES: readonly MenuRoute[] = [ + { id: "apps", label: "Apps", leaves: ["terminal", "browser", "files", "editor", "emoji", "clipboard"] }, + { id: "menuCapture", label: "Capture", leaves: ["screenshot", "record", "recordStop", "ocr", "color", "qr"] }, + { id: "menuToggle", label: "Toggle", leaves: ["nightlight", "awake", "bar", "silence", "gaps", "transparency"] }, + { id: "menuStyle", label: "Style", leaves: ["themePicker", "bgNext"] }, + { id: "menuSystem", label: "System", leaves: ["lock", "screensaver", "dismiss"] }, + { id: "menuLearn", label: "Learn", leaves: ["keybindings"] }, +]; + +/** The dock: the things a remote is reached for, in reading order. Slots + * eight to ten are the levels card, the keyboard and the pad. */ export const DOCK: readonly ActionId[] = [ "menu", "terminal", diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx index 1975d90f2..26842faf0 100644 --- a/apps/pocket-remote/app.tsx +++ b/apps/pocket-remote/app.tsx @@ -1,17 +1,17 @@ // apps/pocket-remote/app.tsx — Pocket Remote: an Omarchy companion for the -// iPod touch. Landscape, two-thumb: brightness and volume on the rails, the -// workspace strip on top, a live miniature of the desktop in the middle you -// can touch, the dock below, and a pad with the long tail. The daemon on the -// Omarchy machine mirrors Hyprland into a snapshot and runs exactly the -// commands the keyboard would (actions.ts). See README.md for the design. +// iPod touch. Landscape: the workspace strip on top, a live miniature of the +// desktop in the middle you can touch, the dock below, a levels card and a +// menu cascade that open under a held finger, a pad with the long tail, and +// a full-screen keyboard. The daemon on the Omarchy machine mirrors Hyprland +// into a snapshot and runs exactly the commands the keyboard would +// (actions.ts). See README.md for the design. import { Show } from "solid-js"; import { View } from "@pocketjs/framework/components"; import { createGesture, type GestureContact } from "@pocketjs/framework/gesture"; import { Connect } from "./connect.tsx"; import { Desk, deskHandlers, type GestureHandlers } from "./desk.tsx"; -import { KB_RECT, Keyboard, keyboardHandlers } from "./keyboard.tsx"; -import { within } from "./layout.ts"; +import { Keyboard, keyboardHandlers } from "./keyboard.tsx"; import { Pad, padHandlers } from "./pad.tsx"; import { createRemoteStore } from "./store.ts"; import { themed } from "./theme.ts"; @@ -26,15 +26,15 @@ export default function PocketRemote() { // One recogniser for the whole screen. A tap single-fires on one owner, so // the sheets cannot be separate recognisers layered over the desk; instead // each contact is routed at its down edge to the surface under it — the - // pad while it is open, the keyboard inside its sheet, the desk otherwise — + // pad while it is open, the keyboard while it is up, the desk otherwise — // and every later callback for that contact follows the same route. - const desk = deskHandlers(store, () => connected() && store.pad() === null); + const desk = deskHandlers(store, () => connected() && store.pad() === null && !store.kb()); const pad = padHandlers(store); const keyboard = keyboardHandlers(store); const routes = new Map(); - const pick = (c: GestureContact): GestureHandlers => { + const pick = (): GestureHandlers => { if (store.pad() !== null) return pad; - if (store.kb() && within(c.x, c.y, KB_RECT)) return keyboard; + if (store.kb()) return keyboard; return desk; }; createGesture({ @@ -43,12 +43,13 @@ export default function PocketRemote() { longPressSeconds: 0.35, onDown: (c) => { if (!connected()) return; - const route = pick(c); + const route = pick(); routes.set(c.id, route); route.onDown?.(c); }, // Routes are not cleared on up: onUp and onTap both describe one // release, and contact ids are reused only by a later onDown. + onMove: (c) => routes.get(c.id)?.onMove?.(c), onTap: (c) => routes.get(c.id)?.onTap?.(c), onLongPress: (c) => routes.get(c.id)?.onLongPress?.(c), onPanStart: (c) => routes.get(c.id)?.onPanStart?.(c), @@ -56,17 +57,18 @@ export default function PocketRemote() { onUp: (c) => routes.get(c.id)?.onUp?.(c), onCancel: (c) => routes.get(c.id)?.onCancel?.(c), }); + void (0 as unknown as GestureContact); return ( }> - - - + + + ); diff --git a/apps/pocket-remote/desk.tsx b/apps/pocket-remote/desk.tsx index 5fbb2e946..7963e6cf3 100644 --- a/apps/pocket-remote/desk.tsx +++ b/apps/pocket-remote/desk.tsx @@ -1,38 +1,58 @@ -// apps/pocket-remote/desk.tsx — the main screen: two rails, the workspace -// strip, the live stage and the dock, plus the one gesture recogniser that -// routes every finger by where it landed. Every painted target answers a -// press with a tint overlay (a capacitive panel has no hover), continuous -// controls follow the finger relatively (touching a rail never jumps the +// apps/pocket-remote/desk.tsx — the main screen: the workspace strip, the +// live stage, the dock, the levels card and the Menu key's cascade, plus the +// desk's touch handlers (app.tsx routes contacts here). Every painted target +// answers a press with a tint overlay (a capacitive panel has no hover), the +// levels follow the finger relatively (touching a slider never jumps the // level to the finger), and the only destructive act — closing a window — // is a hold with a visible fill, never a tap. +// +// Hold-and-slide is the desk's second verb: hold Menu and a column of routes +// rises; slide onto one and its leaves fan out beside it; release on a leaf +// to run it, on a route to open it on the desktop, elsewhere to cancel. Hold +// Levels and the card opens under the finger; slide across a slider to set +// it; release and the card lingers, then puts itself away. import { createEffect, Index, Show } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; import type { GestureContact } from "@pocketjs/framework/gesture"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; -import { type ActionId, actionById, DOCK as DOCK_ACTIONS } from "./actions.ts"; +import { type ActionId, actionById, DOCK as DOCK_ACTIONS, MENU_ROUTES } from "./actions.ts"; import { Icon, type IconName } from "./icons.tsx"; import { BADGE_W, BADGE_X, + CARD, + CARD_ICON_W, + CARD_ICON_X, + CARD_ROW_H, + CARD_ROW_Y, + CARD_TRACK_H, + CARD_TRACK_W, + CARD_TRACK_X, + cardHit, + cardRowAt, + clamp01, DOCK, dockSlotAt, dockSlotX, + FLY_GAP, + FLY_ITEM_H, + FLY_W, + FLY_X, + FLY2_W, + FLY2_X, + flyItemAt, + flyItemY, MEDIA_W, MEDIA_X, - RAIL_CAP_H, - RAIL_LEFT, - RAIL_RIGHT, - RAIL_TRACK_BOTTOM, - RAIL_TRACK_H, - RAIL_TRACK_TOP, - railDelta, - railFill, STAGE, + stagger, STRIP, SWIPE_PX, tabAt, + trackDelta, + trackFill, within, } from "./layout.ts"; import type { RemoteStore, TileSlot } from "./store.ts"; @@ -40,7 +60,7 @@ import { themed } from "./theme.ts"; /** The subset of gesture callbacks a sheet or the desk implements. */ export type GestureHandlers = { - [K in "onDown" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: (c: GestureContact) => void; + [K in "onDown" | "onMove" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: (c: GestureContact) => void; }; const DOCK_ICONS: Record = { @@ -54,7 +74,7 @@ const DOCK_ICONS: Record = { screenshot: "screenshot", }; -/** Dock captions: a 44 px slot fits about five characters at 12 px, so the +/** Dock captions: a 43 px slot fits about five characters at 12 px, so the * dock speaks in short words; the pad and the toast use the full labels. */ const DOCK_LABELS: Record = { menu: "Menu", @@ -67,91 +87,17 @@ const DOCK_LABELS: Record = { screenshot: "Shot", }; -/** Dock slot 8 opens the keyboard, slot 9 the pad; 0..7 are actions. */ -const DOCK_KEYBOARD = 8; -const DOCK_MORE = 9; +/** Slots 0..7 are actions; 8 the levels card, 9 the keyboard, 10 the pad. */ +const DOCK_LEVELS = 8; +const DOCK_KEYBOARD = 9; +const DOCK_MORE = 10; const DOCK_ITEMS: readonly { id: string; label: string; icon: IconName }[] = [ ...DOCK_ACTIONS.map((id) => ({ id, label: DOCK_LABELS[id] ?? actionById(id)!.label, icon: DOCK_ICONS[id]! })), + { id: "levels", label: "Levels", icon: "levels" }, { id: "keyboard", label: "Type", icon: "keyboard" }, + { id: "more", label: "more", icon: "more" }, ]; -// --------------------------------------------------------------------------- -// rails -// --------------------------------------------------------------------------- - -function Rail(p: { store: RemoteStore; side: "left" | "right" }) { - const rect = p.side === "left" ? RAIL_LEFT : RAIL_RIGHT; - const level = () => (p.side === "left" ? p.store.bri() : p.store.vol()); - const pressedId = p.side === "left" ? "rail:bri" : "rail:vol"; - const capId = p.side === "left" ? "cap:bri" : "cap:vol"; - let fill: NodeMirror | null = null; - const paintFill = () => { - if (!fill) return; - const h = railFill(level()); - jump(fill, "height", h); - jump(fill, "insetT", RAIL_TRACK_H - h); - }; - // The fill is geometry, so it moves through jump() as the level changes. - createEffect(() => paintFill()); - const dragging = () => p.store.railDrag()?.rail === (p.side === "left" ? "bri" : "vol"); - const percent = () => `${Math.round(level() * 100)}`; - return ( - - {/* cap: brightness -> nightlight toggle, volume -> mute toggle */} - - - - - - }> - - - - - - {/* track */} - - { - fill = node; - themed("accentFill")(node); - paintFill(); - }} - /> - - {/* value readout while the finger is down */} - - - - {percent()} - - - - - - ); -} - // --------------------------------------------------------------------------- // strip // --------------------------------------------------------------------------- @@ -159,18 +105,12 @@ function Rail(p: { store: RemoteStore; side: "left" | "right" }) { function Strip(p: { store: RemoteStore }) { const tabs = () => p.store.tabs(); const active = () => p.store.state()?.active ?? -1; - const layoutLabel = () => (p.store.layout() === "scrolling" ? "scroll" : "dwindle"); + const layoutLabel = () => (p.store.layout() === "scrolling" ? "scrolling" : "dwindle"); return ( - + {(tab) => ( - + tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface")} + ref={themed(() => (tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface"))} /> tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim")} + ref={themed(() => (tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim"))} > {tab().id === 10 ? "0" : `${tab().id}`} @@ -207,34 +147,25 @@ function Strip(p: { store: RemoteStore }) { {/* layout badge */} {layoutLabel()} - + {/* media transport */} {(op, i) => ( - + @@ -259,11 +190,9 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { return ( @@ -273,13 +202,13 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { ref={themed("borderAccent")} /> {s.label()} - + {s.title()} @@ -301,7 +230,6 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { class="absolute left-0 top-0 h-[3] bg-[#f7768e]" ref={(node) => { themed("dangerFill")(node); - // The fill follows the hold: 0..1 of the tile width. createEffect(() => { const c = closing(); jump(node, "width", Math.round((c ? c.progress : 0) * s.cur.w)); @@ -319,12 +247,9 @@ function Stage(p: { store: RemoteStore }) { return !!s && !s.win.some((w) => w.ws === s.active); }; return ( - + - + empty workspace · swipe for the next @@ -349,88 +274,268 @@ function Stage(p: { store: RemoteStore }) { // --------------------------------------------------------------------------- function Dock(p: { store: RemoteStore }) { - const focusLabel = () => { - const c = p.store.focusClass(); - return c ? c : ""; - }; + const lit = (id: string) => + (id === "levels" && p.store.card() !== null) || + (id === "more" && p.store.pad() !== null) || + (id === "menu" && p.store.flyout()?.kind === "menu"); return ( - + {(item, i) => ( - - + + - + {item().label} )} - {/* more */} - - - - - - more + + ); +} + +/** The last action's name, briefly, over the top of the stage. */ +function Toast(p: { store: RemoteStore }) { + return ( + + + + {p.store.toast()} + + + ); +} + +// --------------------------------------------------------------------------- +// levels card +// --------------------------------------------------------------------------- + +function LevelRow(p: { store: RemoteStore; row: 0 | 1 }) { + const level = () => (p.row === 0 ? p.store.bri() : p.store.vol()); + const hot = () => p.store.card()?.row === p.row; + let fill: NodeMirror | null = null; + createEffect(() => { + if (fill) jump(fill, "width", trackFill(level())); + }); + return ( + + {/* toggle: nightlight / mute */} + (hot() ? "accentTint" : "surface"))} + > + + + + + + }> + + + + + + + {/* track */} + { + fill = node; + themed("accentFill")(node); + jump(node, "width", trackFill(level())); + }} /> - - - - {p.store.toast()} - - - - - - - {focusLabel()} - - - + + (hot() ? "textAccent" : "textDim"))}> + {`${Math.round(level() * 100)}`} + + ); } +function LevelsCard(p: { store: RemoteStore }) { + let root: NodeMirror | null = null; + // Entrance: rise 12 px and fade in, driven by the store's progress. + createEffect(() => { + if (!root) return; + const t = p.store.cardT(); + jump(root, "translateY", Math.round((1 - t) * 12)); + jump(root, "opacity", t); + }); + return ( + { + root = node; + themed("surfaceDark")(node); + }} + > + + + + + {p.store.card()?.mode === "hold" ? "slide · release to close" : "tap outside to close"} + + + + ); +} + +// --------------------------------------------------------------------------- +// menu cascade +// --------------------------------------------------------------------------- + +function FlyItem(p: { + store: RemoteStore; + x: number; + w: number; + i: number; + count: number; + label: string; + hot: boolean; + progress: () => number; +}) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const t = stagger(p.progress(), p.i, p.count); + jump(root, "translateY", Math.round((1 - t) * 18)); + jump(root, "opacity", t); + }); + return ( + { + root = node; + themed(() => (p.hot ? "accentFill" : "surfaceMuted"))(node); + }} + > + (p.hot ? "textOnAccent" : "text"))} + > + {p.label} + + + ); +} + +function MenuCascade(p: { store: RemoteStore }) { + const fly = () => { + const f = p.store.flyout(); + return f && f.kind === "menu" ? f : null; + }; + const leaves = () => { + const f = fly(); + if (!f || f.open === null) return []; + return MENU_ROUTES[f.open]?.leaves.slice(0, 6) ?? []; + }; + let veil: NodeMirror | null = null; + createEffect(() => { + if (veil) jump(veil, "opacity", p.store.flyT() * 0.85); + }); + return ( + <> + {/* a veil over the stage: the cascade is the only thing to look at */} + { + veil = node; + themed("surfaceDark")(node); + }} + /> + + + {fly()?.hot !== null ? "release: open on the desktop · slide right for shortcuts" : "slide to a route"} + + + + {(route, i) => ( + + )} + + + {(id, i) => ( + + )} + + + ); +} + // --------------------------------------------------------------------------- // gesture routing // --------------------------------------------------------------------------- type Target = - | { kind: "rail"; rail: "vol" | "bri" } - | { kind: "cap"; rail: "vol" | "bri" } | { kind: "tab"; id: number } | { kind: "badge" } | { kind: "media"; op: "prev" | "play" | "next" } | { kind: "tile"; a: string } | { kind: "stage" } | { kind: "dock"; slot: number } + | { kind: "cardIcon"; row: 0 | 1 } + | { kind: "cardTrack"; row: 0 | 1 } + | { kind: "card" } | { kind: "none" }; function targetAt(store: RemoteStore, x: number, y: number): Target { - if (within(x, y, RAIL_LEFT)) return y < RAIL_CAP_H ? { kind: "cap", rail: "bri" } : { kind: "rail", rail: "bri" }; - if (within(x, y, RAIL_RIGHT)) return y < RAIL_CAP_H ? { kind: "cap", rail: "vol" } : { kind: "rail", rail: "vol" }; + if (store.card()) { + const hit = cardHit(x, y); + if (hit) { + if (hit.kind === "icon") return { kind: "cardIcon", row: hit.row }; + if (hit.kind === "track") return { kind: "cardTrack", row: hit.row }; + return { kind: "card" }; + } + } if (within(x, y, STRIP)) { if (x >= MEDIA_X) { const i = Math.min(2, Math.floor((x - MEDIA_X) / MEDIA_W)); @@ -440,23 +545,19 @@ function targetAt(store: RemoteStore, x: number, y: number): Target { const tab = tabAt(x, store.tabs()); return tab ? { kind: "tab", id: tab.id } : { kind: "none" }; } - if (within(x, y, STAGE)) { - const a = store.windowAt(x, y); - return a ? { kind: "tile", a } : { kind: "stage" }; - } if (within(x, y, DOCK)) { const slot = dockSlotAt(x); return slot === null ? { kind: "none" } : { kind: "dock", slot }; } + if (within(x, y, STAGE)) { + const a = store.windowAt(x, y); + return a ? { kind: "tile", a } : { kind: "stage" }; + } return { kind: "none" }; } function pressId(t: Target): string | null { switch (t.kind) { - case "rail": - return `rail:${t.rail}`; - case "cap": - return `cap:${t.rail}`; case "tab": return `tab:${t.id}`; case "badge": @@ -467,6 +568,8 @@ function pressId(t: Target): string | null { return `tile:${t.a}`; case "dock": return `dock:${t.slot}`; + case "cardIcon": + return `cardicon:${t.row}`; default: return null; } @@ -478,6 +581,8 @@ function pressId(t: Target): string | null { export function deskHandlers(store: RemoteStore, active: () => boolean): GestureHandlers { let down: Target = { kind: "none" }; let swiping = false; + /** The contact is inside a hold-and-slide (menu cascade or levels card). */ + let sliding: "menu" | "card" | null = null; // onUp arrives before onTap for one release, and onTap reads `down`, so a // reset leaves the down target alone; the next onDown overwrites it. @@ -485,17 +590,48 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture store.pressRelease(); store.setDrag(null); store.setClosing(null); - store.setRailDrag(null); swiping = false; + sliding = null; + }; + + const menuFollow = (x: number, y: number) => { + const f = store.flyout(); + if (!f || f.kind !== "menu") return; + const hot = flyItemAt(x, y, FLY_X, FLY_W, MENU_ROUTES.length); + const open = hot ?? f.open; + const leafCount = open === null ? 0 : Math.min(6, MENU_ROUTES[open]?.leaves.length ?? 0); + const leaf = hot === null && open !== null ? flyItemAt(x, y, FLY2_X, FLY2_W, leafCount) : null; + store.menuHover(hot, leaf); + }; + + /** A finger sliding across the card: the row under it is adjusted + * relatively from where the finger entered the row. */ + const cardFollow = (x: number, y: number) => { + const c = store.card(); + if (!c) return; + const row = cardRowAt(y); + if (c.row !== row) { + store.setCard({ ...c, row, refX: x, refLevel: row === 0 ? store.bri() : store.vol() }); + return; + } + const level = clamp01(c.refLevel + trackDelta(x - c.refX)); + store.setLevel(row === 0 ? "bri" : "vol", level); }; const tapDock = (slot: number) => { if (slot === DOCK_MORE) { + store.closeCard(); store.setPad(store.pad() === null ? 0 : null); return; } if (slot === DOCK_KEYBOARD) { - store.setKb(!store.kb()); + store.closeCard(); + store.setKb(true); + return; + } + if (slot === DOCK_LEVELS) { + if (store.card()) store.closeCard(); + else store.openCard("sticky"); return; } const id = DOCK_ACTIONS[slot]; @@ -506,21 +642,27 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture onDown: (c) => { if (!active()) return; down = targetAt(store, c.x, c.y); + sliding = null; store.pressDown(pressId(down)); - if (down.kind === "rail") { - store.setRailDrag({ rail: down.rail, start: down.rail === "vol" ? store.vol() : store.bri() }); + // A sticky card closes on any touch outside it. + const card = store.card(); + if (card && card.mode === "sticky" && down.kind !== "cardIcon" && down.kind !== "cardTrack" && down.kind !== "card") { + if (!(down.kind === "dock" && down.slot === DOCK_LEVELS)) store.closeCard(); + } + if (down.kind === "cardTrack") { + store.setCard({ ...store.card()!, row: down.row, refX: c.x, refLevel: down.row === 0 ? store.bri() : store.vol() }); } }, + onMove: (c) => { + if (!active()) return; + if (sliding === "menu") menuFollow(c.x, c.y); + else if (sliding === "card") cardFollow(c.x, c.y); + }, onTap: (c) => { if (!active()) return; const t = down; store.pressRelease(); - store.setRailDrag(null); switch (t.kind) { - case "cap": - if (t.rail === "vol") store.toggleMute(); - else store.act("nightlight"); - break; case "tab": store.workspace(t.id); break; @@ -537,10 +679,17 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture case "dock": tapDock(t.slot); break; - case "rail": { - // A tap on the track nudges by a step, the keyboard's own increment. - const step = c.y < (RAIL_TRACK_TOP + RAIL_TRACK_BOTTOM) / 2 ? 0.05 : -0.05; - store.setLevel(t.rail, (t.rail === "vol" ? store.vol() : store.bri()) + step, true); + case "cardIcon": + if (t.row === 1) store.toggleMute(); + else store.act("nightlight"); + break; + case "cardTrack": { + // A tap on the track nudges by the keyboard's own step. + const card = store.card(); + const level = t.row === 0 ? store.bri() : store.vol(); + const trackX = CARD.x + CARD_TRACK_X + trackFill(level); + store.setLevel(t.row === 0 ? "bri" : "vol", level + (c.x > trackX ? 0.05 : -0.05), true); + if (card) store.setCard({ ...card, row: null }); break; } default: @@ -548,7 +697,7 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture } down = { kind: "none" }; }, - onLongPress: () => { + onLongPress: (c) => { if (!active()) return; const t = down; if (t.kind === "tile") { @@ -563,12 +712,22 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture store.workspace(t.id); } down = { kind: "none" }; + } else if (t.kind === "dock" && DOCK_ACTIONS[t.slot] === "menu") { + store.pressDown(null); + store.closeCard(); + store.openFlyout({ kind: "menu", hot: null, leaf: null, open: null }); + sliding = "menu"; + } else if (t.kind === "dock" && t.slot === DOCK_LEVELS) { + store.pressDown(null); + store.openCard("hold", cardRowAt(c.y), c.x); + sliding = "card"; } }, onPanStart: (c) => { if (!active()) return; const t = down; - if (t.kind === "rail") return; // stays pressed; the rail follows below + if (sliding) return; + if (t.kind === "cardTrack") return; // the drag follows in onPanMove store.pressDown(null); if (t.kind === "tile" && !store.closing()) { store.setDrag({ a: t.a, x: c.x, y: c.y, over: null, overWs: null }); @@ -578,9 +737,12 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture }, onPanMove: (c) => { if (!active()) return; - const rail = store.railDrag(); - if (rail) { - store.setLevel(rail.rail, rail.start + railDelta(c.dy)); + if (sliding) return; // onMove owns the slide + if (down.kind === "cardTrack") { + const card = store.card(); + if (card && card.row !== null) { + store.setLevel(card.row === 0 ? "bri" : "vol", clamp01(card.refLevel + trackDelta(c.x - card.refX))); + } return; } const drag = store.drag(); @@ -601,9 +763,25 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture reset(); return; } - const rail = store.railDrag(); - if (rail) { - store.setLevel(rail.rail, rail.start + railDelta(c.dy), true); + if (sliding === "menu") { + menuFollow(c.x, c.y); + store.menuRelease(); + reset(); + return; + } + if (sliding === "card") { + const card = store.card(); + if (card && card.row !== null) store.setLevel(card.row === 0 ? "bri" : "vol", card.row === 0 ? store.bri() : store.vol(), true); + store.cardReleased(); + reset(); + return; + } + if (down.kind === "cardTrack") { + const card = store.card(); + if (card && card.row !== null) { + store.setLevel(card.row === 0 ? "bri" : "vol", card.row === 0 ? store.bri() : store.vol(), true); + store.setCard({ ...card, row: null }); + } reset(); return; } @@ -619,7 +797,11 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture } reset(); }, - onCancel: () => reset(), + onCancel: () => { + if (sliding === "menu") store.closeFlyout(); + if (sliding === "card") store.cardReleased(); + reset(); + }, }; } @@ -630,11 +812,18 @@ export function deskHandlers(store: RemoteStore, active: () => boolean): Gesture export function Desk(p: { store: RemoteStore }) { return ( <> - - + + + + + + + ); } + +export { CARD_ICON_W, CARD_ROW_H, CARD_TRACK_H, FLY_GAP }; diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index 4f96ad52f..cdbd3a922 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -228,8 +228,32 @@ export function setThemeByName(name: string, list: string[], log: Log): boolean // typing // --------------------------------------------------------------------------- -/** Keysyms the remote may send (xkb names wtype understands). */ -export const ALLOWED_KEYS = new Set(["Return", "BackSpace", "Tab", "Escape", "space", "Left", "Right", "Up", "Down"]); +/** Keysyms the remote may send: xkb names wtype understands. Letters, + * digits and a few punctuation names carry modifiers (ctrl+c, alt+.). */ +export const ALLOWED_KEYS: ReadonlySet = new Set([ + "Return", "BackSpace", "Tab", "ISO_Left_Tab", "Escape", "space", "Delete", "Insert", + "Left", "Right", "Up", "Down", "Home", "End", "Page_Up", "Page_Down", + ...Array.from({ length: 12 }, (_, i) => `F${i + 1}`), + ..."abcdefghijklmnopqrstuvwxyz0123456789".split(""), + "minus", "equal", "bracketleft", "bracketright", "semicolon", "apostrophe", "grave", + "backslash", "comma", "period", "slash", +]); + +const MODIFIERS: ReadonlySet = new Set(["ctrl", "alt", "shift", "super"]); + +/** wtype argv for one key with modifiers held around it: press mods, key, + * release mods in reverse. Null when the key or a modifier is not allowed. */ +export function wtypeArgs(key: string, mods: readonly string[] = []): string[] | null { + if (!ALLOWED_KEYS.has(key)) return null; + if (mods.some((m) => !MODIFIERS.has(m))) return null; + const unique = [...new Set(mods)]; + return [ + ...unique.flatMap((m) => ["-M", m]), + "-k", + key, + ...unique.slice().reverse().flatMap((m) => ["-m", m]), + ]; +} export function typeText(text: string, log: Log): void { // wtype types its argument literally; cap it so a runaway line cannot @@ -239,8 +263,9 @@ export function typeText(text: string, log: Log): void { runDetached(["wtype", "--", clipped], log); } -export function pressKey(key: string, log: Log): boolean { - if (!ALLOWED_KEYS.has(key)) return false; - runDetached(["wtype", "-k", key], log); +export function pressKey(key: string, log: Log, mods: readonly string[] = []): boolean { + const args = wtypeArgs(key, mods); + if (!args) return false; + runDetached(["wtype", ...args], log); return true; } diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index 3df0817f9..d47131557 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -375,9 +375,13 @@ async function handle(conn: Conn, line: ClientLine): Promise { case "type": if (typeof line.text === "string") typeText(line.text, log); return; - case "key": - if (typeof line.k === "string" && !pressKey(line.k, log)) log(`${conn.address}: key ${line.k} not allowed`); + case "key": { + const mods: string[] = Array.isArray(line.mods) ? (line.mods as unknown[]).filter((m): m is string => typeof m === "string") : []; + if (typeof line.k === "string" && !pressKey(line.k, log, mods)) { + log(`${conn.address}: key ${line.k}${mods.length ? `+${mods.join("+")}` : ""} not allowed`); + } return; + } case "theme": if (typeof line.name === "string" && setThemeByName(line.name, theme.list, log)) { setTimeout(refreshTheme, 1500); diff --git a/apps/pocket-remote/icons.tsx b/apps/pocket-remote/icons.tsx index 02f00083c..f8aa58d9a 100644 --- a/apps/pocket-remote/icons.tsx +++ b/apps/pocket-remote/icons.tsx @@ -111,6 +111,8 @@ export type IconName = | "sun" | "speaker" | "mute" + | "levels" + | "hide" | "close"; export function Icon(p: { name: IconName; tone: Tone }) { @@ -261,10 +263,12 @@ export function Icon(p: { name: IconName; tone: Tone }) { ); case "speaker": + // A horn in three steps, then two sound bars. return ( <> - - + + + @@ -272,12 +276,31 @@ export function Icon(p: { name: IconName; tone: Tone }) { case "mute": return ( <> - - + + + ); + case "levels": + // Two sliders with their knobs, the control-centre glyph. + return ( + <> + + + + + + ); + case "hide": + // A chevron pointing down: put the keyboard away. + return ( + <> + + + + ); case "close": return ( <> diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts new file mode 100644 index 000000000..b7454793a --- /dev/null +++ b/apps/pocket-remote/keyboard-layout.ts @@ -0,0 +1,193 @@ +// apps/pocket-remote/keyboard-layout.ts — the keyboard's geometry and key +// table with no Solid in it: rows, keysym names, hold-and-slide variants, +// chip placement, and the key -> wire-line mapping. keyboard.tsx renders +// and handles; tests import this file bare (bun test cannot load the app's +// .tsx through the Solid transform). + +import { type Rect, SCREEN_H, SCREEN_W } from "./layout.ts"; +import type { Modifier } from "./protocol.ts"; +import type { KbLayer, KeyVariant } from "./store.ts"; + +export const KB_RECT: Rect = { x: 0, y: 0, w: SCREEN_W, h: SCREEN_H }; +export const CAPTION_H = 28; +export const ROWS_TOP = 30; +export const ROW_PITCH = 56; +export const KEY_H = 48; +/** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ +const UNIT = 44; +const TOP_UNIT = 40; +export const HIDE_W = 44; + +export type KeyAction = + | { ch: string } + | { key: string } + | { layer: KbLayer } + | { mod: Modifier } + | { hide: true }; + +export interface KeyDef { + label: string; + /** Width in row units. */ + w: number; + act: KeyAction; + dark?: boolean; + /** Hold-and-slide variants (letters and digits). */ + variants?: KeyVariant[]; +} + +/** Keysym names for the characters that need one (wtype -k). */ +const KEYSYM: Record = { + "-": "minus", "=": "equal", "[": "bracketleft", "]": "bracketright", ";": "semicolon", + "'": "apostrophe", "`": "grave", "\\": "backslash", ",": "comma", ".": "period", "/": "slash", +}; + +export function keysymFor(ch: string): string | null { + if (/^[a-z0-9]$/.test(ch)) return ch; + return KEYSYM[ch] ?? null; +} + +function letterVariants(ch: string): KeyVariant[] { + return [ + { label: `^${ch.toUpperCase()}`, k: ch, mods: ["ctrl"] }, + { label: `⌥${ch.toUpperCase()}`, k: ch, mods: ["alt"] }, + ]; +} + +function digitVariants(ch: string): KeyVariant[] { + const n = ch === "0" ? 10 : Number(ch); + return [ + { label: `F${n}`, k: `F${n}`, mods: [] }, + { label: `^${ch}`, k: ch, mods: ["ctrl"] }, + ]; +} + +const letters = (row: string): KeyDef[] => + [...row].map((ch) => ({ label: ch, w: 1, act: { ch }, variants: /^[a-z]$/.test(ch) ? letterVariants(ch) : undefined })); +const digits = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch }, variants: digitVariants(ch) })); +const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); + +const TOP_ROW: KeyDef[] = [ + { label: "esc", w: 1, act: { key: "Escape" }, dark: true }, + ...digits("1234567890"), + { label: "⌫", w: 1, act: { key: "BackSpace" }, dark: true }, +]; + +const BOTTOM_ROW = (layer: KbLayer): KeyDef[] => [ + { label: layer === "sym" ? "abc" : "123", w: 1, act: { layer: layer === "sym" ? "lower" : "sym" }, dark: true }, + { label: "ctrl", w: 1, act: { mod: "ctrl" }, dark: true }, + { label: "alt", w: 1, act: { mod: "alt" }, dark: true }, + { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, + { label: "space", w: 3, act: { key: "space" } }, + { label: "←", w: 1, act: { key: "Left" }, dark: true }, + { label: "→", w: 1, act: { key: "Right" }, dark: true }, + { label: "return", w: 1.5, act: { key: "Return" }, dark: true }, +]; + +const ROWS: Record = { + lower: [ + letters("qwertyuiop"), + letters("asdfghjkl"), + [ + { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, + ...letters("zxcvbnm"), + { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, + { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, + ], + BOTTOM_ROW("lower"), + ], + upper: [ + chars("QWERTYUIOP"), + chars("ASDFGHJKL"), + [ + { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, + ...chars("ZXCVBNM"), + { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, + { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, + ], + BOTTOM_ROW("upper"), + ], + sym: [ + chars("-/:;()$&@\""), + chars("[]{}#%^*+="), + [ + { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, + ...chars("_\\|~<>!?"), + { label: "'", w: 1, act: { ch: "'" } }, + ], + BOTTOM_ROW("sym"), + ], +}; + +export interface KeyRect extends Rect { + def: KeyDef; + row: number; + col: number; +} + +function layoutRow(row: KeyDef[], r: number, unit: number): KeyRect[] { + const total = row.reduce((sum, key) => sum + key.w, 0); + let x = Math.round((SCREEN_W - total * unit) / 2); + const y = ROWS_TOP + r * ROW_PITCH; + return row.map((def, c) => { + const w = Math.round(def.w * unit); + const rect = { x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }; + x += w; + return rect; + }); +} + +function layoutKeys(layer: KbLayer): KeyRect[] { + return [...layoutRow(TOP_ROW, 0, TOP_UNIT), ...ROWS[layer].flatMap((row, r) => layoutRow(row, r + 1, UNIT))]; +} + +const LAYOUTS: Record = { + lower: layoutKeys("lower"), + upper: layoutKeys("upper"), + sym: layoutKeys("sym"), +}; + +export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { + return LAYOUTS[layer]; +} + +export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { + for (const key of LAYOUTS[layer]) { + if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 4 && y < key.y + key.h + 4) return key; + } + return null; +} + +/** Variant chip geometry: above the key, or below it for the top row. */ +export const CHIP_W = 60; +export const CHIP_H = 36; +export const CHIP_GAP = 6; +export function chipRects(key: Rect, count: number): Rect[] { + const total = count * CHIP_W + (count - 1) * CHIP_GAP; + let x = Math.round(key.x + key.w / 2 - total / 2); + x = Math.max(4, Math.min(SCREEN_W - 4 - total, x)); + const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - CHIP_H - 10 : key.y + key.h + 10; + return Array.from({ length: count }, (_, i) => ({ x: x + i * (CHIP_W + CHIP_GAP), y, w: CHIP_W, h: CHIP_H })); +} + +export function chipAt(key: Rect, count: number, x: number, y: number): number | null { + const rects = chipRects(key, count); + for (let i = 0; i < rects.length; i += 1) { + const r = rects[i]!; + if (x >= r.x - 4 && x < r.x + r.w + 4 && y >= r.y - 10 && y < r.y + r.h + 10) return i; + } + return null; +} + +/** What a key sends, as the store sees it. Exported for tests. */ +export function keyToLine( + act: KeyAction, + mods: Modifier[], +): { t: "type"; text: string } | { t: "key"; k: string; mods?: Modifier[] } | null { + if ("ch" in act) { + if (mods.length === 0) return { t: "type", text: act.ch }; + const k = keysymFor(act.ch.toLowerCase()); + return k ? { t: "key", k, mods } : null; + } + if ("key" in act) return mods.length ? { t: "key", k: act.key, mods } : { t: "key", k: act.key }; + return null; +} diff --git a/apps/pocket-remote/keyboard.tsx b/apps/pocket-remote/keyboard.tsx index 11f4fa81c..c72ea8224 100644 --- a/apps/pocket-remote/keyboard.tsx +++ b/apps/pocket-remote/keyboard.tsx @@ -1,143 +1,60 @@ -// apps/pocket-remote/keyboard.tsx — typing into the focused window from the -// remote, the Apple TV app's one killer feature. Keys go straight to the -// laptop (wtype) as they are pressed; nothing is buffered on the device, so -// what the desktop shows is the truth. A landscape iOS layout at 40 px keys: -// ten columns across the 400 px centre column, four rows, one-shot shift, -// a symbols layer with esc and tab, and a caption naming the window the -// keys land in. +// apps/pocket-remote/keyboard.tsx — the whole iPod as a keyboard. When +// typing is the job, nothing else on the remote matters, so the sheet takes +// the full 480x320: five rows of 48 px keys, ten columns, a caption naming +// the window the keys land in and a chevron to put the keyboard away. +// +// Keys go straight to the desktop (wtype) as they are pressed; nothing is +// buffered on the device, so what the desktop shows is the truth. +// +// Developers type chords, so the keyboard has two ways to make them: +// - sticky modifiers: tap ctrl (or alt), then the key — the modifier arms, +// paints itself, and drops after one key; +// - hold-and-slide: hold a letter and its variants fan out above it +// (^x · ⌥x); slide onto one and release. Digits offer their F-key and +// ctrl variant the same way. Releasing on the key itself types it plain. +// +// Geometry and the key table live in keyboard-layout.ts. -import { createSignal, Index, Show } from "solid-js"; +import { createEffect, createSignal, Index, Show } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; import type { GestureHandlers } from "./desk.tsx"; -import { RAIL_W, SCREEN_W, within } from "./layout.ts"; -import type { KbLayer, RemoteStore } from "./store.ts"; +import { Icon } from "./icons.tsx"; +import { + CAPTION_H, + chipAt, + chipRects, + HIDE_W, + KB_RECT, + keyAt, + keyboardKeys, + type KeyAction, + type KeyDef, + type KeyRect, + keyToLine, +} from "./keyboard-layout.ts"; +import { type Rect, SCREEN_W, stagger } from "./layout.ts"; +import type { RemoteStore } from "./store.ts"; import { themed } from "./theme.ts"; -export const KB_X = RAIL_W; -export const KB_W = SCREEN_W - 2 * RAIL_W; -export const KB_TOP = 140; -export const KB_RECT = { x: KB_X, y: KB_TOP, w: KB_W, h: 320 - KB_TOP }; -const CAPTION_H = 20; -const ROWS_TOP = KB_TOP + CAPTION_H + 4; -const UNIT = 40; -const KEY_H = 38; -const ROW_PITCH = 42; +export { KB_RECT } from "./keyboard-layout.ts"; -export type KeyAction = - | { ch: string } - | { key: "Return" | "BackSpace" | "space" | "Tab" | "Escape" } - | { layer: KbLayer } - | { hide: true }; - -interface KeyDef { - label: string; - /** Width in 40 px units. */ - w: number; - act: KeyAction; - dark?: boolean; -} - -const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); - -const ROWS: Record = { - lower: [ - chars("qwertyuiop"), - chars("asdfghjkl"), - [ - { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, - ...chars("zxcvbnm"), - { label: "del", w: 1.5, act: { key: "BackSpace" }, dark: true }, - ], - [ - { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, - { label: ",", w: 1, act: { ch: "," } }, - { label: "space", w: 4.5, act: { key: "space" } }, - { label: ".", w: 1, act: { ch: "." } }, - { label: "return", w: 2, act: { key: "Return" }, dark: true }, - ], - ], - upper: [ - chars("QWERTYUIOP"), - chars("ASDFGHJKL"), - [ - { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, - ...chars("ZXCVBNM"), - { label: "del", w: 1.5, act: { key: "BackSpace" }, dark: true }, - ], - [ - { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, - { label: "!", w: 1, act: { ch: "!" } }, - { label: "space", w: 4.5, act: { key: "space" } }, - { label: "?", w: 1, act: { ch: "?" } }, - { label: "return", w: 2, act: { key: "Return" }, dark: true }, - ], - ], - sym: [ - chars("1234567890"), - chars("-/:;()$&@\""), - [ - { label: "esc", w: 1.5, act: { key: "Escape" }, dark: true }, - ...chars("#+=.,?!'"), - { label: "del", w: 0.5, act: { key: "BackSpace" }, dark: true }, - ], - [ - { label: "abc", w: 1.5, act: { layer: "lower" }, dark: true }, - { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, - { label: "space", w: 4.5, act: { key: "space" } }, - { label: "~", w: 1, act: { ch: "~" } }, - { label: "return", w: 2, act: { key: "Return" }, dark: true }, - ], - ], -}; - -interface KeyRect { - x: number; - y: number; - w: number; - h: number; - def: KeyDef; - row: number; - col: number; -} - -function layoutKeys(layer: KbLayer): KeyRect[] { - const out: KeyRect[] = []; - ROWS[layer].forEach((row, r) => { - const total = row.reduce((sum, key) => sum + key.w, 0); - let x = KB_X + Math.round(((KB_W / UNIT - total) * UNIT) / 2); - row.forEach((def, c) => { - const w = Math.round(def.w * UNIT); - out.push({ x: x + 2, y: ROWS_TOP + r * ROW_PITCH, w: w - 4, h: KEY_H, def, row: r, col: c }); - x += w; - }); - }); - return out; -} - -const LAYOUTS: Record = { - lower: layoutKeys("lower"), - upper: layoutKeys("upper"), - sym: layoutKeys("sym"), -}; - -export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { - for (const key of LAYOUTS[layer]) { - if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; - } - return null; -} - -/** What a key does, as the store sees it. Exported for tests. */ -export function keyToLine(act: KeyAction): { t: "type"; text: string } | { t: "key"; k: string } | null { - if ("ch" in act) return { t: "type", text: act.ch }; - if ("key" in act) return { t: "key", k: act.key }; - return null; -} - -/** The keyboard's touch handlers; app.tsx routes contacts inside the sheet here. */ export function keyboardHandlers(store: RemoteStore): GestureHandlers { const [down, setDown] = createSignal(null); + let holding = false; const active = () => store.kb() && store.pad() === null; + + const send = (act: KeyAction) => { + const mods = store.kbMods(); + const line = keyToLine(act, mods); + if (line) { + if (line.t === "type") store.typeText(line.text); + else store.typeKey(line.k, line.mods ?? []); + } + if (mods.length) store.setKbMods([]); + }; + const press = (key: KeyRect) => { const act = key.def.act; if ("layer" in act) { @@ -148,86 +65,188 @@ export function keyboardHandlers(store: RemoteStore): GestureHandlers { store.setKb(false); return; } - if ("ch" in act) { - store.typeText(act.ch); - // One-shot shift: the upper layer drops back after a letter. - if (store.kbLayer() === "upper") store.setKbLayer("lower"); + if ("mod" in act) { + const mods = store.kbMods(); + store.setKbMods(mods.includes(act.mod) ? mods.filter((m) => m !== act.mod) : [...mods, act.mod]); return; } - store.typeKey(act.key); + send(act); + // One-shot shift: the upper layer drops back after a letter. + if ("ch" in act && store.kbLayer() === "upper") store.setKbLayer("lower"); }; + return { onDown: (c) => { if (!active()) return; - if (!within(c.x, c.y, KB_RECT)) return; + holding = false; + if (c.y < CAPTION_H) { + setDown(null); + if (c.x >= SCREEN_W - HIDE_W) store.pressDown("kbhide"); + return; + } const key = keyAt(store.kbLayer(), c.x, c.y); setDown(key); if (key) store.pressDown(`key:${key.row}:${key.col}`); }, + onMove: (c) => { + if (!active() || !holding) return; + const key = down(); + const f = store.flyout(); + if (!key || !f || f.kind !== "keyvar") return; + store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); + }, onTap: () => { if (!active()) return; const key = down(); + if (store.pressed() === "kbhide") { + store.pressRelease(); + store.setKb(false); + return; + } store.pressRelease(); if (key) press(key); setDown(null); }, + onLongPress: () => { + if (!active()) return; + const key = down(); + if (!key || !key.def.variants) return; + holding = true; + store.pressDown(null); + store.openFlyout({ kind: "keyvar", key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); + }, onPanStart: () => { + if (holding) return; store.pressDown(null); setDown(null); }, - onUp: () => store.pressRelease(), + onUp: () => { + if (!active()) return; + if (holding) { + const chosen = store.keyRelease(); + const key = down(); + if (chosen) store.typeKey(chosen.k, chosen.mods); + else if (key && "ch" in key.def.act) send(key.def.act); // release on the key: plain + holding = false; + setDown(null); + } + store.pressRelease(); + }, onCancel: () => { + if (holding) store.closeFlyout(); + holding = false; store.pressRelease(); setDown(null); }, }; } +function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; count: number; hot: boolean }) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const t = stagger(p.store.flyT(), p.i, p.count, 0.3); + jump(root, "translateY", Math.round((1 - t) * 10)); + jump(root, "opacity", t); + jump(root, "scale", p.hot ? 1.08 : 1); + }); + return ( + { + root = node; + // A light chip over dark keys: the iOS accent-popup contrast. + themed(() => (p.hot ? "accentFill" : "fgFill"))(node); + }} + > + + {p.label} + + + ); +} + export function Keyboard(p: { store: RemoteStore }) { - const keys = () => LAYOUTS[p.store.kbLayer()]; + const keys = () => keyboardKeys(p.store.kbLayer()); const target = () => { const c = p.store.focusClass(); - return c ? `typing into ${c}` : "no focused window"; + const mods = p.store.kbMods(); + const prefix = mods.length ? `${mods.join(" + ")} + ` : ""; + return c ? `${prefix}typing into ${c}` : `${prefix}no focused window`; }; + const fly = () => { + const f = p.store.flyout(); + return f && f.kind === "keyvar" ? f : null; + }; + const armed = (def: KeyDef) => "mod" in def.act && p.store.kbMods().includes(def.act.mod); return ( - - + + {target()} + {/* hide */} + + + + + + {(key) => ( key().def.dark ? "surface" : "surfaceMuted")} + style={{ insetL: key().x, insetT: key().y, width: key().w, height: key().h }} + ref={themed(() => (armed(key().def) ? "accentFill" : key().def.dark ? "surface" : "surfaceMuted"))} > (armed(key().def) ? "textOnAccent" : "text"))} > {key().def.label} + + + )} + + {(f) => ( + + {(rect, i) => ( + + )} + + )} + - + ); diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index 1805fb7a3..86a23c341 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -1,7 +1,8 @@ // apps/pocket-remote/layout.ts — the screen's fixed geometry and the pure -// arithmetic behind it: where the rails, strip, stage and dock sit on the -// 480x320 landscape panel, how a monitor is fitted into the stage, how a -// finger on a rail becomes a level. No Solid here so tests can run it bare. +// arithmetic behind it: where the strip, stage and dock sit on the 480x320 +// landscape panel, how a monitor is fitted into the stage, where the levels +// card and the menu flyout open, how a finger on a slider becomes a level. +// No Solid here so tests can run it bare. import type { Direction, HostState, WinInfo, WsInfo } from "./protocol.ts"; @@ -15,38 +16,28 @@ export interface Rect { h: number; } -/** Left rail = display brightness, right rail = output volume. */ -export const RAIL_W = 40; -export const RAIL_LEFT: Rect = { x: 0, y: 0, w: RAIL_W, h: SCREEN_H }; -export const RAIL_RIGHT: Rect = { x: SCREEN_W - RAIL_W, y: 0, w: RAIL_W, h: SCREEN_H }; -/** The rail's track: the part of its height a drag maps onto 0..1. */ -export const RAIL_TRACK_TOP = 44; -export const RAIL_TRACK_BOTTOM = 300; -export const RAIL_TRACK_H = RAIL_TRACK_BOTTOM - RAIL_TRACK_TOP; -/** Icon cap at the top of a rail (mute / nightlight). */ -export const RAIL_CAP_H = 36; - -/** The workspace strip across the top of the centre column. */ -export const STRIP: Rect = { x: RAIL_W, y: 0, w: SCREEN_W - 2 * RAIL_W, h: 32 }; +/** The workspace strip across the top. */ +export const STRIP: Rect = { x: 0, y: 0, w: SCREEN_W, h: 28 }; export const TAB_W = 28; +export const TAB_X0 = 6; export const TAB_MAX = 10; /** Media transport cluster at the strip's right end. */ export const MEDIA_W = 30; -export const MEDIA_X = STRIP.x + STRIP.w - 3 * MEDIA_W - 4; +export const MEDIA_X = SCREEN_W - 3 * MEDIA_W - 6; /** Layout badge sits left of the media cluster. */ -export const BADGE_W = 56; -export const BADGE_X = MEDIA_X - BADGE_W - 6; +export const BADGE_W = 60; +export const BADGE_X = MEDIA_X - BADGE_W - 8; /** The stage: the live miniature of the focused monitor. */ -export const STAGE: Rect = { x: RAIL_W, y: STRIP.h, w: SCREEN_W - 2 * RAIL_W, h: 228 }; +export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: 240 }; -/** The dock across the bottom of the centre column. */ -export const DOCK: Rect = { x: RAIL_W, y: STAGE.y + STAGE.h, w: SCREEN_W - 2 * RAIL_W, h: SCREEN_H - STAGE.y - STAGE.h }; -export const DOCK_SLOTS = 9; -export const DOCK_SLOT_W = 44; -export const DOCK_X0 = DOCK.x + Math.floor((DOCK.w - DOCK_SLOTS * DOCK_SLOT_W) / 2); +/** The dock across the bottom: eleven slots of 43 px. */ +export const DOCK: Rect = { x: 0, y: STAGE.y + STAGE.h, w: SCREEN_W, h: SCREEN_H - STAGE.y - STAGE.h }; +export const DOCK_SLOTS = 11; +export const DOCK_SLOT_W = 43; +export const DOCK_X0 = Math.floor((SCREEN_W - DOCK_SLOTS * DOCK_SLOT_W) / 2); -/** Seconds a tile must be held before it closes; the ring fills over this. */ +/** Seconds a tile must be held before it closes; the bar fills over this. */ export const CLOSE_HOLD_SECONDS = 0.6; /** Horizontal travel on empty stage that switches workspace. */ export const SWIPE_PX = 48; @@ -55,6 +46,91 @@ export const TILE_TWO_LINES_H = 40; /** Fixed pool of tile slots (protocol WINDOWS_MAX). */ export const TILE_SLOTS = 24; +// --------------------------------------------------------------------------- +// levels card (brightness + volume, the control-centre control) +// --------------------------------------------------------------------------- + +export const CARD: Rect = { x: 100, y: 92, w: 280, h: 132 }; +/** Row tops inside the card (brightness, volume). */ +export const CARD_ROW_Y = [14, 72] as const; +export const CARD_ROW_H = 44; +/** The toggle icon at the row's left (nightlight / mute). */ +export const CARD_ICON_X = 12; +export const CARD_ICON_W = 36; +/** The slider track. */ +export const CARD_TRACK_X = 60; +export const CARD_TRACK_W = 172; +export const CARD_TRACK_H = 12; +/** Frames the card lingers after a hold-and-slide release. */ +export const CARD_LINGER_FRAMES = 70; + +export type CardHit = { kind: "icon"; row: 0 | 1 } | { kind: "track"; row: 0 | 1 } | { kind: "card" } | null; + +/** What is under a point on the levels card. */ +export function cardHit(x: number, y: number, card: Rect = CARD): CardHit { + if (!within(x, y, card)) return null; + const ly = y - card.y; + const lx = x - card.x; + for (const row of [0, 1] as const) { + const top = CARD_ROW_Y[row] - 4; + if (ly < top || ly >= top + CARD_ROW_H + 8) continue; + if (lx >= CARD_ICON_X && lx < CARD_ICON_X + CARD_ICON_W) return { kind: "icon", row }; + if (lx >= CARD_TRACK_X - 8) return { kind: "track", row }; + } + return { kind: "card" }; +} + +/** Which row a finger height selects while sliding across the card. */ +export function cardRowAt(y: number, card: Rect = CARD): 0 | 1 { + const mid = card.y + (CARD_ROW_Y[0] + CARD_ROW_Y[1] + CARD_ROW_H) / 2; + return y < mid ? 0 : 1; +} + +/** A horizontal drag of `dx` px changes a level by this (full track = 0..1). */ +export function trackDelta(dx: number): number { + return dx / CARD_TRACK_W; +} + +/** Fill width for a level, in track px. */ +export function trackFill(level: number): number { + return Math.round(clamp01(level) * CARD_TRACK_W); +} + +// --------------------------------------------------------------------------- +// menu flyout (hold Menu, slide, release) +// --------------------------------------------------------------------------- + +export const FLY_ITEM_H = 34; +export const FLY_GAP = 4; +/** Column one: routes. Bottom-anchored just above the dock. */ +export const FLY_X = 8; +export const FLY_W = 120; +export const FLY_BOTTOM = DOCK.y - 6; +/** Column two: the hot route's leaves. */ +export const FLY2_X = FLY_X + FLY_W + 8; +export const FLY2_W = 156; +export const FLY_MAX_ROWS = 6; + +/** Top of item `i` in a bottom-anchored column of `count` items (i = 0 is + * nearest the dock). */ +export function flyItemY(i: number): number { + return FLY_BOTTOM - (i + 1) * FLY_ITEM_H - i * FLY_GAP; +} + +/** Item index under a point in a bottom-anchored column, or null. */ +export function flyItemAt(x: number, y: number, colX: number, colW: number, count: number): number | null { + if (x < colX - 6 || x >= colX + colW + 6) return null; + for (let i = 0; i < count; i += 1) { + const top = flyItemY(i); + if (y >= top - FLY_GAP / 2 && y < top + FLY_ITEM_H + FLY_GAP / 2) return i; + } + return null; +} + +// --------------------------------------------------------------------------- +// helpers +// --------------------------------------------------------------------------- + export function within(x: number, y: number, r: Rect): boolean { return x >= r.x && x < r.x + r.w && y >= r.y && y < r.y + r.h; } @@ -154,7 +230,7 @@ export function stripTabs(ws: readonly WsInfo[], active: number): Tab[] { return sorted.slice(0, TAB_MAX).map((id, i) => ({ id, n: ws.find((w) => w.id === id)?.n ?? 0, - x: STRIP.x + i * TAB_W, + x: STRIP.x + TAB_X0 + i * TAB_W, })); } @@ -163,20 +239,6 @@ export function tabAt(x: number, tabs: readonly Tab[]): Tab | null { return null; } -// --------------------------------------------------------------------------- -// rails -// --------------------------------------------------------------------------- - -/** A vertical drag of `dy` px (down = positive) changes the level by this. */ -export function railDelta(dy: number): number { - return -dy / RAIL_TRACK_H; -} - -/** Fill height for a level, in track px. */ -export function railFill(level: number): number { - return Math.round(clamp01(level) * RAIL_TRACK_H); -} - // --------------------------------------------------------------------------- // dock // --------------------------------------------------------------------------- @@ -201,3 +263,16 @@ export function approach(current: number, target: number): number { const next = current + (target - current) * EASE; return Math.abs(target - next) < 0.5 ? target : next; } + +/** Ease a 0..1 progress toward 1: fast start, soft landing. */ +export function easeProgress(t: number): number { + const next = t + (1 - t) * 0.28; + return next > 0.995 ? 1 : next; +} + +/** Stagger: item `i` of `count` runs its own 0..1 inside the shared progress. */ +export function stagger(t: number, i: number, count: number, spread = 0.5): number { + const start = count <= 1 ? 0 : (i / (count - 1)) * spread; + const span = 1 - spread; + return clamp01((t - start) / span); +} diff --git a/apps/pocket-remote/pad.tsx b/apps/pocket-remote/pad.tsx index 91c7c64c6..e75b382f9 100644 --- a/apps/pocket-remote/pad.tsx +++ b/apps/pocket-remote/pad.tsx @@ -13,19 +13,19 @@ import { jump } from "@pocketjs/framework/animation"; import { type ActionId, actionById, PAD_PAGES } from "./actions.ts"; import type { GestureHandlers } from "./desk.tsx"; import { Icon } from "./icons.tsx"; -import { RAIL_W, SCREEN_W, within } from "./layout.ts"; +import { SCREEN_W, within } from "./layout.ts"; import type { RemoteStore } from "./store.ts"; import { themed, themeTitle } from "./theme.ts"; -export const PAD_X = RAIL_W; -export const PAD_W = SCREEN_W - 2 * RAIL_W; +export const PAD_X = 0; +export const PAD_W = SCREEN_W; const HEADER_H = 32; -const TAB_W = 60; +const TAB_W = 72; const CLOSE_W = PAD_W - PAD_PAGES.length * TAB_W; const GRID_TOP = HEADER_H + 8; const COLS = 4; const ROWS = 3; -const CELL_W = 96; +const CELL_W = 116; const CELL_H = 88; const CELL_GAP = 4; const GRID_X0 = PAD_X + Math.floor((PAD_W - COLS * CELL_W) / 2); @@ -151,14 +151,14 @@ export function Pad(p: { store: RemoteStore }) { const page = () => p.store.pad() ?? 0; const items = () => cells(p.store, page()); return ( - + {/* header: page tabs + close */} - + {(def, i) => ( - + diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts index 5ff415d92..6069ef81e 100644 --- a/apps/pocket-remote/protocol.ts +++ b/apps/pocket-remote/protocol.ts @@ -183,10 +183,15 @@ export interface ClientType { text: string; } +export type Modifier = "ctrl" | "alt" | "shift" | "super"; + export interface ClientKey { t: "key"; - /** An xkb keysym name: Return, BackSpace, Tab, Escape, space, Left... */ + /** An xkb keysym name: Return, BackSpace, Tab, Escape, space, Left, a, 1, + * F5... (host/omarchy.ts keeps the allow-list). */ k: string; + /** Held around the key: ctrl+c is `{ k: "c", mods: ["ctrl"] }`. */ + mods?: Modifier[]; } export interface ClientTheme { diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts index c8b295224..eb2a2e7b1 100644 --- a/apps/pocket-remote/store.ts +++ b/apps/pocket-remote/store.ts @@ -1,8 +1,9 @@ // apps/pocket-remote/store.ts — the remote's live state: the link to the // daemon, the mirrored desktop (workspaces, windows, levels, theme), the -// tile slot pool that animates the stage, and the senders every touch target -// calls. Everything the screen shows reads from here; nothing here knows -// about pixels except the tile pool, which owns motion. +// tile slot pool that animates the stage, the hold-and-slide flyouts, and +// the senders every touch target calls. Everything the screen shows reads +// from here; nothing here knows about pixels except the tile pool and the +// flyout progress, which own motion. // // Reactivity is coarse on purpose: a snapshot replaces one signal, tiles // live in a fixed pool of per-slot signals so a frame in which one window @@ -13,11 +14,13 @@ import { getOps } from "@pocketjs/framework"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; import { onFrame } from "@pocketjs/framework/lifecycle"; -import { type ActionId, actionById } from "./actions.ts"; +import { type ActionId, actionById, MENU_ROUTES } from "./actions.ts"; import { approach, + CARD_LINGER_FRAMES, CLOSE_HOLD_SECONDS, clamp01, + easeProgress, fitMonitor, type Rect, stageWindows, @@ -35,6 +38,7 @@ import { type HostLine, type HostState, type Layout, + type Modifier, parseLines, REMOTE_APP, REMOTE_PROTO, @@ -141,18 +145,55 @@ export interface Closing { progress: number; } -export interface RailDrag { - rail: "vol" | "bri"; - /** Level when the finger went down. */ - start: number; +/** + * The levels card: brightness and volume, the control-centre control. Opened + * sticky by a tap on the dock (tap outside closes) or by hold-and-slide (the + * finger that opened it adjusts, release lingers then closes). + */ +export interface Card { + mode: "sticky" | "hold"; + /** Row the sliding finger is on (hold mode) or dragging (sticky mode). */ + row: 0 | 1 | null; + /** Finger x and level when the current row was entered — drags are relative. */ + refX: number; + refLevel: number; + /** Frame after which a released hold card closes. */ + until: number; } +/** The Menu key's cascade: routes in column one, the hot route's leaves in + * column two. `hot` / `leaf` are what is under the finger. */ +export interface MenuFly { + kind: "menu"; + hot: number | null; + leaf: number | null; + /** Route whose leaves column two shows (sticks while the finger crosses). */ + open: number | null; +} + +/** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ +export interface KeyVariant { + label: string; + k: string; + mods: Modifier[]; +} + +export interface KeyFly { + kind: "keyvar"; + /** Screen-space rect of the held key. */ + key: Rect; + variants: KeyVariant[]; + hot: number | null; +} + +export type Flyout = MenuFly | KeyFly; + export type KbLayer = "lower" | "upper" | "sym"; const TOAST_FRAMES = 150; -/** Frames between level sends while a rail is being dragged. */ +/** Frames between level sends while a slider is being dragged. */ const LEVEL_SEND_EVERY = 3; -/** Frames after a rail release during which host echoes are ignored. */ +/** Frames after a slider release during which host echoes are ignored. */ const LEVEL_ECHO_HOLD = 30; export type RemoteStore = ReturnType; @@ -198,10 +239,17 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const [pad, setPad] = createSignal(null); const [kb, setKb] = createSignal(false); const [kbLayer, setKbLayer] = createSignal("lower"); + const [kbMods, setKbMods] = createSignal([]); const [pressed, setPressed] = createSignal(null); const [drag, setDrag] = createSignal(null); const [closing, setClosing] = createSignal(null); - const [railDrag, setRailDrag] = createSignal(null); + const [card, setCard] = createSignal(null); + const [flyout, setFlyout] = createSignal(null); + /** 0..1 progress of the open flyout (drives its entrance). */ + const [flyT, setFlyT] = createSignal(0); + /** 0..1 progress of the menu's second column, restarted per route. */ + const [flyT2, setFlyT2] = createSignal(0); + const [cardT, setCardT] = createSignal(0); const [toast, setToast] = createSignal(""); const [frame, setFrame] = createSignal(0); let toastUntil = 0; @@ -393,12 +441,76 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { }; const media = (op: "play" | "next" | "prev") => send({ t: "media", op }); const typeText = (text: string) => send({ t: "type", text }); - const typeKey = (k: string) => send({ t: "key", k }); + const typeKey = (k: string, mods: Modifier[] = []) => send(mods.length ? { t: "key", k, mods } : { t: "key", k }); const chooseTheme = (name: string) => { send({ t: "theme", name }); say(name); }; + // ---- card + flyouts -------------------------------------------------------------- + const openCard = (mode: Card["mode"], row: 0 | 1 | null = null, refX = 0) => { + setCard({ mode, row, refX, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0, until: 0 }); + setCardT(0); + }; + const closeCard = () => setCard(null); + /** Release a held card: linger, then close on its own. */ + const cardReleased = () => { + const c = card(); + if (!c) return; + if (c.mode === "hold") setCard({ ...c, row: null, until: frameCount + CARD_LINGER_FRAMES }); + else setCard({ ...c, row: null }); + }; + + const openFlyout = (fly: Flyout) => { + setFlyout(fly); + setFlyT(0); + setFlyT2(0); + }; + const closeFlyout = () => setFlyout(null); + + /** Menu cascade: move the finger. Column two follows the hot route and + * restarts its entrance when the route changes. */ + const menuHover = (hot: number | null, leaf: number | null) => { + const f = flyout(); + if (!f || f.kind !== "menu") return; + let open = f.open; + if (hot !== null && hot !== f.open) { + open = hot; + setFlyT2(0); + } + if (hot !== f.hot || leaf !== f.leaf || open !== f.open) setFlyout({ kind: "menu", hot, leaf, open }); + }; + + /** Menu cascade: release. A leaf runs; a route opens on the desktop. */ + const menuRelease = () => { + const f = flyout(); + if (!f || f.kind !== "menu") return; + closeFlyout(); + if (f.leaf !== null && f.open !== null) { + const id = MENU_ROUTES[f.open]?.leaves[f.leaf]; + if (id) act(id); + return; + } + if (f.hot !== null) { + const route = MENU_ROUTES[f.hot]; + if (route) act(route.id); + } + }; + + const keyHover = (hot: number | null) => { + const f = flyout(); + if (!f || f.kind !== "keyvar" || f.hot === hot) return; + setFlyout({ ...f, hot }); + }; + + /** Key variants: release. Returns the chosen variant, or null for none. */ + const keyRelease = (): KeyVariant | null => { + const f = flyout(); + if (!f || f.kind !== "keyvar") return null; + closeFlyout(); + return f.hot !== null ? (f.variants[f.hot] ?? null) : null; + }; + // ---- reducer --------------------------------------------------------------------- const applyLine = (line: HostLine) => { switch (line.t) { @@ -414,7 +526,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { commit(line); break; case "levels": - if (frameCount >= levelEchoHoldUntil && !railDrag()) { + if (frameCount >= levelEchoHoldUntil && card()?.row == null) { setVol(clamp01(line.vol)); setMute(line.mute === 1); setBri(clamp01(line.bri)); @@ -497,6 +609,25 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { moved = true; } + if (flyout()) { + if (flyT() < 1) { + setFlyT(easeProgress(flyT())); + moved = true; + } + if (flyT2() < 1) { + setFlyT2(easeProgress(flyT2())); + moved = true; + } + } + const c = card(); + if (c) { + if (cardT() < 1) { + setCardT(easeProgress(cardT())); + moved = true; + } + if (c.mode === "hold" && c.row === null && c.until > 0 && frameCount >= c.until) setCard(null); + } + if (pressLinger > 0) { pressLinger -= 1; if (pressLinger === 0) setPressed(null); @@ -548,6 +679,8 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setKb, kbLayer, setKbLayer, + kbMods, + setKbMods, pressed, pressDown, pressRelease, @@ -555,8 +688,21 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setDrag, closing, setClosing, - railDrag, - setRailDrag, + card, + setCard, + openCard, + closeCard, + cardReleased, + cardT, + flyout, + openFlyout, + closeFlyout, + flyT, + flyT2, + menuHover, + menuRelease, + keyHover, + keyRelease, toast, say, frame, diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index c5f4ef227..61c95ec3e 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -7,7 +7,7 @@ import { describe, expect, test } from "bun:test"; import { bootWorld } from "../hosts/sim/sim.ts"; import type { HostState } from "../apps/pocket-remote/protocol.ts"; -import { STAGE, STRIP, TAB_W } from "../apps/pocket-remote/layout.ts"; +import { STAGE, TAB_W } from "../apps/pocket-remote/layout.ts"; import type { RemoteStore } from "../apps/pocket-remote/store.ts"; const HZ = 60; @@ -89,8 +89,8 @@ describe("pocket-remote in the sim", () => { } // Tap workspace tab 2 on the strip: optimistic switch, tiles of ws 1 fade. - const x = STRIP.x + TAB_W + TAB_W / 2; - const y = 16; + const x = store.tabs()[1]!.x + TAB_W / 2; + const y = 14; world.frame(0, undefined, [pack(x, y)]); world.frame(0, undefined, [pack(x, y)]); world.frame(0, undefined, []); diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 2f38b6083..9d8d9a003 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -10,25 +10,42 @@ import { WIRE_PORT, WIRE_VERSION, } from "../contracts/spec/spec.ts"; -import { ACTIONS, actionById, actionsOf, DOCK, PAD_PAGES } from "../apps/pocket-remote/actions.ts"; +import { ACTIONS, actionById, actionsOf, DOCK, MENU_ROUTES, PAD_PAGES } from "../apps/pocket-remote/actions.ts"; import * as wire from "../apps/pocket-remote/host/wire.ts"; import { buildState, luaWindow, luaWorkspace, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; -import { paletteFrom, parseBrightnessctl, parseColorsToml, parsePactlVolume } from "../apps/pocket-remote/host/omarchy.ts"; +import { paletteFrom, parseBrightnessctl, parseColorsToml, parsePactlVolume, wtypeArgs } from "../apps/pocket-remote/host/omarchy.ts"; +import { chipAt, chipRects, keyAt, keyboardKeys, keysymFor, keyToLine } from "../apps/pocket-remote/keyboard-layout.ts"; import { approach, + CARD, + CARD_TRACK_W, + cardHit, + cardRowAt, + DOCK as DOCK_RECT, DOCK_SLOTS, + DOCK_SLOT_W, DOCK_X0, dockSlotAt, + dockSlotX, + easeProgress, fitMonitor, - railDelta, - railFill, - RAIL_TRACK_H, + FLY_BOTTOM, + FLY_W, + FLY_X, + flyItemAt, + flyItemY, + SCREEN_H, + SCREEN_W, STAGE, stageWindows, + stagger, + STRIP, stripTabs, swapDirection, tabAt, tileRect, + trackDelta, + trackFill, windowAt, } from "../apps/pocket-remote/layout.ts"; import { clipTitle, parseLines, TITLE_MAX, WINDOWS_MAX, type HostState } from "../apps/pocket-remote/protocol.ts"; @@ -137,6 +154,17 @@ describe("pocket-remote actions", () => { for (const page of PAD_PAGES) for (const id of page.actions) expect(actionById(id)).toBeDefined(); expect(ACTIONS.filter((a) => a.hold).map((a) => a.id).sort()).toEqual(["close", "closeAll", "suspend"]); expect(actionById("nope")).toBeUndefined(); + // The menu cascade: every route and leaf is a real action, no leaf takes + // a hold (a slide-and-release cannot express one), six leaves at most. + for (const route of MENU_ROUTES) { + expect(actionById(route.id)?.group).toBe("launch"); + expect(route.leaves.length).toBeLessThanOrEqual(6); + for (const leaf of route.leaves) { + const def = actionById(leaf); + expect(def).toBeDefined(); + expect(def!.hold).toBeUndefined(); + } + } }); test("actions run the command Omarchy binds, never a shell string", () => { @@ -221,18 +249,57 @@ describe("pocket-remote layout", () => { expect(tabAt(tabs[0]!.x - 1, tabs)).toBeNull(); }); - test("rails: a full-track drag spans the whole range, up raises", () => { - expect(railDelta(-RAIL_TRACK_H)).toBeCloseTo(1); - expect(railDelta(RAIL_TRACK_H / 2)).toBeCloseTo(-0.5); - expect(railFill(0.4)).toBe(Math.round(0.4 * RAIL_TRACK_H)); - expect(railFill(2)).toBe(RAIL_TRACK_H); - }); - - test("dock slots tile the centre column", () => { + test("the three bands cover the screen exactly and the dock fits eleven slots", () => { + expect(STRIP.y).toBe(0); + expect(STAGE.y).toBe(STRIP.h); + expect(DOCK_RECT.y).toBe(STAGE.y + STAGE.h); + expect(DOCK_RECT.y + DOCK_RECT.h).toBe(SCREEN_H); + expect(DOCK_SLOTS).toBe(11); + expect(dockSlotX(DOCK_SLOTS - 1) + DOCK_SLOT_W).toBeLessThanOrEqual(SCREEN_W); expect(dockSlotAt(DOCK_X0 - 1)).toBeNull(); expect(dockSlotAt(DOCK_X0)).toBe(0); - expect(dockSlotAt(DOCK_X0 + 44 * (DOCK_SLOTS - 1) + 43)).toBe(DOCK_SLOTS - 1); - expect(dockSlotAt(DOCK_X0 + 44 * DOCK_SLOTS)).toBeNull(); + expect(dockSlotAt(dockSlotX(DOCK_SLOTS - 1) + DOCK_SLOT_W - 1)).toBe(DOCK_SLOTS - 1); + expect(dockSlotAt(dockSlotX(DOCK_SLOTS))).toBeNull(); + }); + + test("levels card: rows, tracks and toggles hit-test; drags are relative", () => { + expect(cardHit(CARD.x - 1, CARD.y + 20)).toBeNull(); + expect(cardHit(CARD.x + 20, CARD.y + 30)).toEqual({ kind: "icon", row: 0 }); + expect(cardHit(CARD.x + 150, CARD.y + 30)).toEqual({ kind: "track", row: 0 }); + expect(cardHit(CARD.x + 150, CARD.y + 90)).toEqual({ kind: "track", row: 1 }); + expect(cardHit(CARD.x + 20, CARD.y + 90)).toEqual({ kind: "icon", row: 1 }); + expect(cardHit(CARD.x + 150, CARD.y + 125)).toEqual({ kind: "card" }); + expect(cardRowAt(CARD.y + 20)).toBe(0); + expect(cardRowAt(CARD.y + 100)).toBe(1); + expect(trackDelta(CARD_TRACK_W)).toBeCloseTo(1); + expect(trackDelta(-CARD_TRACK_W / 4)).toBeCloseTo(-0.25); + expect(trackFill(0.4)).toBe(Math.round(0.4 * CARD_TRACK_W)); + expect(trackFill(2)).toBe(CARD_TRACK_W); + }); + + test("menu cascade: six routes stack up from the dock and stay under the strip", () => { + const top = flyItemY(MENU_ROUTES.length - 1); + expect(top).toBeGreaterThanOrEqual(STRIP.h); + expect(flyItemY(0) + 34).toBeLessThanOrEqual(FLY_BOTTOM); + expect(flyItemAt(FLY_X + 10, flyItemY(0) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBe(0); + expect(flyItemAt(FLY_X + 10, flyItemY(3) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBe(3); + expect(flyItemAt(FLY_X + FLY_W + 40, flyItemY(0) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBeNull(); + expect(flyItemAt(FLY_X + 10, 5, FLY_X, FLY_W, MENU_ROUTES.length)).toBeNull(); + }); + + test("entrance progress eases to one and staggers by index", () => { + let t = 0; + let frames = 0; + while (t < 1 && frames < 60) { + t = easeProgress(t); + frames += 1; + } + expect(t).toBe(1); + expect(frames).toBeLessThan(30); + expect(stagger(0, 0, 6)).toBe(0); + expect(stagger(1, 5, 6)).toBe(1); + expect(stagger(0.5, 0, 6)).toBe(1); + expect(stagger(0.5, 5, 6)).toBe(0); }); test("approach eases and snaps within half a pixel", () => { @@ -369,3 +436,74 @@ describe("pocket-remote omarchy readers", () => { expect(themeTitle("osaka-jade")).toBe("Osaka Jade"); }); }); + +describe("pocket-remote keyboard", () => { + test("every layer fits the 480x320 screen and no two keys overlap", () => { + for (const layer of ["lower", "upper", "sym"] as const) { + const keys = keyboardKeys(layer); + expect(keys.length).toBeGreaterThan(40); + for (const key of keys) { + expect(key.x).toBeGreaterThanOrEqual(0); + expect(key.y).toBeGreaterThanOrEqual(28); + expect(key.x + key.w).toBeLessThanOrEqual(SCREEN_W); + expect(key.y + key.h).toBeLessThanOrEqual(SCREEN_H); + } + for (let i = 0; i < keys.length; i += 1) { + for (let j = i + 1; j < keys.length; j += 1) { + const a = keys[i]!; + const b = keys[j]!; + const overlap = a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h; + expect(overlap).toBe(false); + } + } + } + const q = keyboardKeys("lower").find((k) => k.def.label === "q")!; + expect(keyAt("lower", q.x + 5, q.y + 5)?.def.label).toBe("q"); + expect(keyAt("lower", 2, 2)).toBeNull(); + }); + + test("keys become wire lines: text plain, keysyms under modifiers", () => { + expect(keyToLine({ ch: "a" }, [])).toEqual({ t: "type", text: "a" }); + expect(keyToLine({ ch: "c" }, ["ctrl"])).toEqual({ t: "key", k: "c", mods: ["ctrl"] }); + expect(keyToLine({ ch: "." }, ["alt"])).toEqual({ t: "key", k: "period", mods: ["alt"] }); + expect(keyToLine({ ch: "€" }, ["ctrl"])).toBeNull(); + expect(keyToLine({ key: "Tab" }, [])).toEqual({ t: "key", k: "Tab" }); + expect(keyToLine({ key: "Tab" }, ["ctrl"])).toEqual({ t: "key", k: "Tab", mods: ["ctrl"] }); + expect(keyToLine({ layer: "sym" }, [])).toBeNull(); + expect(keysymFor("x")).toBe("x"); + expect(keysymFor("/")).toBe("slash"); + expect(keysymFor("é")).toBeNull(); + }); + + test("held letters and digits offer variants as chips inside the screen", () => { + const x = keyboardKeys("lower").find((k) => k.def.label === "x")!; + expect(x.def.variants?.map((v) => v.label)).toEqual(["^X", "⌥X"]); + const chips = chipRects(x, 2); + expect(chips.length).toBe(2); + for (const chip of chips) { + expect(chip.x).toBeGreaterThanOrEqual(0); + expect(chip.x + chip.w).toBeLessThanOrEqual(SCREEN_W); + expect(chip.y).toBeGreaterThanOrEqual(0); + } + expect(chips[0]!.y).toBeLessThan(x.y); // above the key + expect(chipAt(x, 2, chips[1]!.x + 10, chips[1]!.y + 10)).toBe(1); + expect(chipAt(x, 2, x.x, x.y + 10)).toBeNull(); + const one = keyboardKeys("lower").find((k) => k.def.label === "1")!; + expect(one.def.variants?.map((v) => v.k)).toEqual(["F1", "1"]); + expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); // top row: below + const zero = keyboardKeys("lower").find((k) => k.def.label === "0")!; + expect(zero.def.variants?.[0]?.k).toBe("F10"); + }); +}); + +describe("pocket-remote wtype chords", () => { + test("modifiers wrap the key and only allowed keysyms pass", () => { + expect(wtypeArgs("c", ["ctrl"])).toEqual(["-M", "ctrl", "-k", "c", "-m", "ctrl"]); + expect(wtypeArgs("Tab", ["ctrl", "shift"])).toEqual(["-M", "ctrl", "-M", "shift", "-k", "Tab", "-m", "shift", "-m", "ctrl"]); + expect(wtypeArgs("F5")).toEqual(["-k", "F5"]); + expect(wtypeArgs("period", ["alt"])).toEqual(["-M", "alt", "-k", "period", "-m", "alt"]); + expect(wtypeArgs("rm -rf", [])).toBeNull(); + expect(wtypeArgs("c", ["hyper"])).toBeNull(); + expect(wtypeArgs("", [])).toBeNull(); + }); +}); From 31c00910d41d7b348b82570a2192cbe0769bfaf8 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 18:38:08 -0700 Subject: [PATCH 07/27] =?UTF-8?q?feat(pocket-remote):=20the=20cable=20?= =?UTF-8?q?=E2=80=94=20a=20device-side=20listener,=20a=20usbmuxd=20dialler?= =?UTF-8?q?=20in=20the=20daemon,=20deploys=20via=20a=20jump=20host?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The iPod now sits on the Omarchy machine's USB, so the wire learns to run down the cable instead of through the air: - hosts/iphone2g/svcwire.c listens on port 8624 as well as discovering by beacon. An accepted connection is the same wire with connect() reversed — the device still speaks the hello first — and it beats any outbound attempt in flight. The acceptance record reports the transport (`svc=discover|connecting|hello|up|up-usb|backoff`). - The daemon (default `--usb`, `--no-usb` to disable) polls `idevice_id -l`, forwards a host port per device with iproxy, dials the listener, and trusts a device on the cable without a dialog: physical possession is the pairing. A missing usbmuxd is reported once and the cable path stays off. - tools/ipodtouch4.ts takes POCKETJS_IPODTOUCH4_VIA=: device discovery and the iproxy tunnel run on the machine the iPod is plugged into, and every ssh/scp to the device jumps through it (ProxyJump), so the deployment key and the pinned host key stay on this Mac. Not yet exercised on the wire: the machine has libimobiledevice but not the usbmuxd package, which needs root to install. Also: the cascade's veil is denser and its hint shorter. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 90 +++++++++++++------- apps/pocket-remote/desk.tsx | 4 +- apps/pocket-remote/host/serve.ts | 139 +++++++++++++++++++++++++++++-- hosts/iphone2g/runtime.c | 12 ++- hosts/iphone2g/svcwire.c | 72 +++++++++++++++- tools/ipodtouch4.ts | 54 ++++++++++-- 6 files changed, 321 insertions(+), 50 deletions(-) diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 4593d1e36..9dbfdb83a 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -20,29 +20,25 @@ looks them up. ## The screen ``` -┌────┬───────────────────────────────────────────────────┬────┐ -│ ☀ │ 1 2 3 + dwindle ⏮ ▷ ⏭ │ ♪ │ strip 32 px -│ ├───────────────────────────────────────────────────┤ │ -│ │ │ │ -│ b │ live miniature of the focused monitor │ v │ stage 228 px -│ r │ tiles = windows, accent border = focus │ o │ -│ i │ │ l │ -│ ├───────────────────────────────────────────────────┤ │ -│ │ Ω >_ ◍ ▤ ✎ ⛶ ◱ ▣ ⌨ ⋯ │ │ dock 60 px -└────┴───────────────────────────────────────────────────┴────┘ - 40px 400 px 40px +┌─────────────────────────────────────────────────────────────┐ +│ 1 2 3 + dwindle ⏮ ▷ ⏭ │ strip 28 px +├─────────────────────────────────────────────────────────────┤ +│ │ +│ live miniature of the focused monitor │ stage 240 px +│ tiles = windows, accent border = focus │ +│ │ +├─────────────────────────────────────────────────────────────┤ +│ Ω >_ ◍ ▤ ✎ ⛶ ◱ ▣ ≡ ⌨ ⋯ │ dock 52 px +└─────────────────────────────────────────────────────────────┘ ``` The layout does not move. Every element has one place, every place one job, -so the remote can be used with a glance and, after a day, without one. - -- **Rails** (left brightness, right volume). A drag anywhere on a rail moves - the level **relatively** — touching a rail never jumps the level to the - finger, the failure of every absolute slider on a thin track. A full-track - drag spans 0–100 %. A tap on the track nudges 5 %, the keyboard's own step. - The cap toggles: mute on the right, nightlight on the left. Thumbs rest at - the edges when the device is held in two hands, and the rails stay live - under every sheet. +so the remote can be used with a glance and, after a day, without one. It +has two verbs: **tap**, and **hold-and-slide** — hold a key and a set of +choices opens under the finger; slide onto one and release. Novices see the +choices, experts stroke through them without looking (the marking-menu +result). + - **Strip**. One tab per workspace Hyprland has, the active one filled, plus one empty tab so there is always somewhere new to go (the Omarchy bar's rule). Tap switches. Hold a tab to bring the focused window there and @@ -56,21 +52,39 @@ so the remote can be used with a glance and, after a day, without one. move it there. Swipe empty stage to step workspaces. The stage is direct manipulation of the real desktop: the snapshot comes from `hyprctl clients` geometry, so a tile is exactly where the window is. -- **Dock**. Menu, Terminal, Browser, Files, Editor, Full screen, Float, - Screenshot, Type, More. Nine things a remote is reached for; each runs the +- **Dock**. Menu, Term, Web, Files, Edit, Full, Float, Shot, Levels, Type, + more — eleven 43 px slots across the full width. Each action runs the command Omarchy binds to the equivalent key. -- **Pad** (More). Everything else, grouped the way Omarchy's own menu groups - it — Window, Desk, Toggle, Capture, Theme, System — as labelled keys on one - sheet. **Destructive keys take a hold** (close, suspend, close all) and say - so when tapped. The Theme page lists the installed themes; the active one is - filled. -- **Type**. A landscape keyboard sends each key to the focused window - (`wtype`). Nothing is buffered on the device: the desktop shows the truth. +- **Menu** (tap) toggles Omarchy's menu on the desktop. **Menu (hold)** opens + the cascade: six routes rise above the dock over a veil — Apps, Capture, + Toggle, Style, System, Learn, nearest first — and sliding onto a route fans + its leaves out beside it. Release on a leaf to run it, on a route to open + that route's menu on the desktop, elsewhere to cancel. +- **Levels** is the control-centre control: brightness and volume as two + horizontal sliders with their toggles (nightlight, mute) in one card. + Tap Levels to open it sticky and drag a slider; tap outside to close. + Hold Levels and slide: the row under the finger follows it **relatively** + (a slider never jumps to the finger), release and the card lingers a second + then puts itself away. Brightness and volume are low-frequency, so they + earn one slot, not two rails. +- **Type** opens the keyboard over the whole screen — when typing is the job, + nothing else on the remote matters. Five rows of 48 px keys: esc and the + digits on top, letters, arrows, tab, ctrl and alt, a chevron in the caption + bar to put it away. Chords two ways: **sticky modifiers** (tap ctrl, then + the key; ctrl arms, paints itself, drops after one key) and + **hold-and-slide variants** (hold `x` → `^X` `⌥X`, hold `1` → `F1` `^1`, + as light chips above the key; release on the key itself types it plain). + Keys go straight to the desktop (`wtype`); nothing is buffered on the + device, so what the desktop shows is the truth. +- **more** opens the pad: everything else, grouped the way Omarchy's own + menu groups it — Window, Desk, Toggle, Capture, Theme, System — as + labelled keys. **Destructive keys take a hold** (close, suspend, close all) + and say so when tapped. Every touch target answers a press with a tint overlay that lingers a few frames after release — a capacitive panel has no hover and the remote's own feedback is the only local one; the action itself is confirmed on the -desktop. A toast over the dock names the last action. +desktop. A toast over the stage names the last action. ## Why these choices @@ -134,6 +148,17 @@ second; the device connects to the datagram's source. A host override file at `/private/var/tmp/pocketjs-svc-host.txt` on the device (one line, `a.b.c.d[:port]`) skips discovery for broadcast-hostile networks. +**The cable.** The device also listens on port 8624. When the iPod is plugged +into the Omarchy machine, usbmuxd lists it and `iproxy` forwards a host port +to that listener; the daemon polls `idevice_id -l` every three seconds, +forwards a port per device and dials it. Same wire, roles of `connect()` +reversed — the device still speaks the hello first — no WiFi, no beacon, no +firewall rule, and **a device on the cable is trusted without a dialog: +physical possession is the pairing.** The device's acceptance record reports +the transport as `svc=up-usb`. This needs the `usbmuxd` package on the +machine (libimobiledevice alone ships `iproxy` but not the daemon that talks +to the device). + ## Trust The LAN is not a trust boundary. The daemon accepts commands only from @@ -169,6 +194,11 @@ POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 deploy POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 launch ``` +When the iPod is plugged into the Omarchy machine rather than this Mac, add +`POCKETJS_IPODTOUCH4_VIA=x1nano`: device discovery and the `iproxy` tunnel +run there over ssh, and every ssh/scp to the device jumps through it +(`ProxyJump`), so the deployment key and the pinned host key stay here. + The app coexists with Pocket Clear: its own bundle, executable, URL scheme and receipt files (`tools/ipodtouch4.ts` `IPODTOUCH4_APPS`). diff --git a/apps/pocket-remote/desk.tsx b/apps/pocket-remote/desk.tsx index 7963e6cf3..08b885ceb 100644 --- a/apps/pocket-remote/desk.tsx +++ b/apps/pocket-remote/desk.tsx @@ -462,7 +462,7 @@ function MenuCascade(p: { store: RemoteStore }) { }; let veil: NodeMirror | null = null; createEffect(() => { - if (veil) jump(veil, "opacity", p.store.flyT() * 0.85); + if (veil) jump(veil, "opacity", p.store.flyT() * 0.92); }); return ( <> @@ -476,7 +476,7 @@ function MenuCascade(p: { store: RemoteStore }) { /> - {fly()?.hot !== null ? "release: open on the desktop · slide right for shortcuts" : "slide to a route"} + {fly()?.hot !== null ? "release to open · slide right for shortcuts" : "slide to a route"} diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index d47131557..531bafc6d 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -1,7 +1,7 @@ // apps/pocket-remote/host/serve.ts — the Omarchy-side daemon for Pocket // Remote. Runs on the Omarchy machine as a user service: // -// node serve.ts [--port 8622] [--beacon] [--name ] +// node serve.ts [--port 8622] [--beacon] [--no-usb] [--name ] // // Node >= 23.6 (native type stripping); Omarchy installs Node through mise, // so `~/.local/share/mise/shims/node` is the interpreter the unit uses. @@ -11,15 +11,22 @@ // and theme to every connected device, and runs the commands the device asks // for — never a command string off the wire, only ids from actions.ts. // +// USB: when the device is plugged into this machine, usbmuxd (the usbmuxd +// package) lists it and iproxy can forward a host port to the device's +// listener (hosts/iphone2g/svcwire.c, port 8624). The daemon polls for +// devices, forwards a port per device and connects to it — the wire is the +// same, only who dials is reversed, and a device on the cable is trusted: +// physical possession is the pairing. +// // Trust: the LAN is not a trust boundary. A device that has not been seen // before is put on hold and a dialog appears on the desktop (hyprland-dialog) // asking whether to allow it; the answer is remembered by address in // ~/.local/state/pocket-remote/allowed.json. Until allowed, a device sees the // mirror but its commands are dropped. -import { createServer, type Socket } from "node:net"; +import { createServer, Socket } from "node:net"; import { createSocket } from "node:dgram"; -import { execFile } from "node:child_process"; +import { execFile, spawn, type ChildProcess } from "node:child_process"; import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs"; import { homedir, hostname } from "node:os"; import { join } from "node:path"; @@ -64,21 +71,24 @@ import { interface Options { port: number; beacon: boolean; + /** Look for devices on this machine's USB through usbmuxd. */ + usb: boolean; name: string; /** Skip the approval dialog (every device allowed) — for tests only. */ trustAll: boolean; } function parseOptions(argv: string[]): Options { - const options: Options = { port: WIRE_PORT, beacon: false, name: hostname(), trustAll: false }; + const options: Options = { port: WIRE_PORT, beacon: false, usb: true, name: hostname(), trustAll: false }; for (let i = 0; i < argv.length; i += 1) { const arg = argv[i]!; if (arg === "--port") options.port = Number(argv[++i]); else if (arg === "--beacon") options.beacon = true; + else if (arg === "--no-usb") options.usb = false; else if (arg === "--name") options.name = argv[++i] ?? options.name; else if (arg === "--trust-all") options.trustAll = true; else if (arg === "--help" || arg === "-h") { - console.log("node serve.ts [--port 8622] [--beacon] [--name ]"); + console.log("node serve.ts [--port 8622] [--beacon] [--no-usb] [--name ]"); process.exit(0); } } @@ -165,6 +175,8 @@ interface Conn { device: string; auth: "ok" | "pending" | "denied"; lastSeen: number; + /** Arrived over the cable (usbmuxd): allowed without a dialog. */ + trusted: boolean; } const conns = new Set(); @@ -282,7 +294,7 @@ async function handle(conn: Conn, line: ClientLine): Promise { if (line.t === "hello") { conn.device = typeof line.device === "string" ? line.device.slice(0, 40) : "device"; if (line.proto !== REMOTE_PROTO) log(`${conn.address}: proto ${line.proto} (ours ${REMOTE_PROTO})`); - if (options.trustAll || allowed.has(conn.address)) conn.auth = "ok"; + if (options.trustAll || conn.trusted || allowed.has(conn.address)) conn.auth = "ok"; else if (denied.has(conn.address)) conn.auth = "denied"; else conn.auth = "pending"; sendLine(conn, { t: "hello", proto: REMOTE_PROTO, name: options.name, omarchy: omarchyVersion, auth: conn.auth }); @@ -400,8 +412,9 @@ execFile("omarchy-version", [], { timeout: 3000 }, (error, stdout) => { if (!error) omarchyVersion = stdout.trim(); }); -const server = createServer((socket) => { - const address = socket.remoteAddress?.replace(/^::ffff:/, "") ?? "?"; +/** Wire up one socket, whichever end dialled: the device speaks the hello + * first either way. */ +function attach(socket: Socket, address: string, trusted: boolean, onGone?: () => void): void { const conn: Conn = { socket, address, @@ -410,6 +423,7 @@ const server = createServer((socket) => { device: "device", auth: "pending", lastSeen: Date.now(), + trusted, }; socket.setNoDelay(true); conns.add(conn); @@ -446,13 +460,20 @@ const server = createServer((socket) => { } }); const gone = () => { - if (conns.delete(conn)) log(`${address} disconnected`); + if (conns.delete(conn)) { + log(`${address} disconnected`); + onGone?.(); + } }; socket.on("close", gone); socket.on("error", (error) => { log(`${address}: ${error.message}`); gone(); }); +} + +const server = createServer((socket) => { + attach(socket, socket.remoteAddress?.replace(/^::ffff:/, "") ?? "?", false); }); server.listen(options.port, "0.0.0.0", () => { @@ -487,6 +508,106 @@ if (options.beacon) { }); } +// --------------------------------------------------------------------------- +// usb (usbmuxd): forward a host port to each plugged device's listener and dial it +// --------------------------------------------------------------------------- + +/** hosts/iphone2g/svcwire.c POCKET_SVC_LISTEN_PORT. */ +const USB_DEVICE_PORT = 8624; +const USB_LOCAL_PORT_BASE = 8630; + +interface UsbLink { + udid: string; + localPort: number; + proxy: ChildProcess | null; + socket: Socket | null; + /** Earliest time to dial again after a failure. */ + retryAt: number; +} + +const usbLinks = new Map(); +let usbToolMissing = false; + +function listUsbDevices(): Promise { + return new Promise((resolve) => { + execFile("idevice_id", ["-l"], { timeout: 3000 }, (error, stdout) => { + if (error) { + const code = (error as NodeJS.ErrnoException).code; + if (!usbToolMissing) { + usbToolMissing = true; + log( + code === "ENOENT" + ? "usb: idevice_id not installed; the cable path is off (pacman -S usbmuxd libimobiledevice)" + : `usb: idevice_id failed (${error.message.trim().split("\n")[0]}); is usbmuxd installed and running?`, + ); + } + resolve([]); + return; + } + usbToolMissing = false; + resolve(stdout.split("\n").map((line) => line.trim()).filter((line) => /^[0-9a-f-]{20,}$/i.test(line))); + }); + }); +} + +function dialUsb(link: UsbLink): void { + if (link.socket || Date.now() < link.retryAt) return; + if (!link.proxy) { + const proxy = spawn("iproxy", ["-u", link.udid, `${link.localPort}:${USB_DEVICE_PORT}`], { stdio: "ignore" }); + proxy.on("exit", () => { + if (link.proxy === proxy) link.proxy = null; + }); + proxy.on("error", (error) => log(`usb ${link.udid.slice(0, 8)}: iproxy: ${error.message}`)); + link.proxy = proxy; + link.retryAt = Date.now() + 500; // let iproxy bind before dialling + return; + } + const socket = new Socket(); + link.socket = socket; + const label = `usb:${link.udid.slice(0, 8)}`; + const failed = () => { + if (link.socket === socket) link.socket = null; + link.retryAt = Date.now() + 2000; + }; + socket.once("error", failed); + socket.connect(link.localPort, "127.0.0.1", () => { + socket.removeListener("error", failed); + log(`usb ${link.udid.slice(0, 8)}: dialled the device's listener on ${USB_DEVICE_PORT}`); + attach(socket, label, true, failed); + }); +} + +function dropUsb(link: UsbLink): void { + link.socket?.destroy(); + link.socket = null; + link.proxy?.kill(); + link.proxy = null; +} + +async function pollUsb(): Promise { + const ids = await listUsbDevices(); + for (const udid of ids) { + if (!usbLinks.has(udid)) { + log(`usb: device ${udid.slice(0, 8)} on the cable`); + usbLinks.set(udid, { udid, localPort: USB_LOCAL_PORT_BASE + (usbLinks.size % 20), proxy: null, socket: null, retryAt: 0 }); + } + } + for (const [udid, link] of usbLinks) { + if (!ids.includes(udid)) { + log(`usb: device ${udid.slice(0, 8)} unplugged`); + dropUsb(link); + usbLinks.delete(udid); + continue; + } + dialUsb(link); + } +} + +if (options.usb) { + void pollUsb(); + setInterval(() => void pollUsb(), 3000); +} + // mirror sources watchEvents( hyprDir, diff --git a/hosts/iphone2g/runtime.c b/hosts/iphone2g/runtime.c index 0191954b6..7287b00b9 100644 --- a/hosts/iphone2g/runtime.c +++ b/hosts/iphone2g/runtime.c @@ -1,4 +1,13 @@ #include "pocket_runtime.h" +/* The svc transport's state, for the acceptance record: "absent" on builds + * without the network channel, else discover / connecting / hello / up / + * up-usb / backoff (svcwire.c). */ +#ifdef POCKET_SVC_WIRE +#include "svcwire.h" +#define POCKET_SVC_STATE_NAME() svcwire_state_name() +#else +#define POCKET_SVC_STATE_NAME() "absent" +#endif #include #include @@ -359,7 +368,7 @@ static void write_acceptance_record(void) { "frame_us=%lu\nsubmit_us=%lu\npresent_us=%lu\n" "window_frames=%lu\nwindow_us=%lu\nblit_us=%lu\n" "damage_attempts=%lu\ndamage_failures=%lu\ndamage_full_redraws=%lu\n" - "damage_pixels=%lu\ncomposites=%lu\ndamage_regions_last=%lu\nerror=%s\n", + "damage_pixels=%lu\ncomposites=%lu\ndamage_regions_last=%lu\nsvc=%s\nerror=%s\n", POCKET_BUILD_ID, state, (long)getpid(), @@ -392,6 +401,7 @@ static void write_acceptance_record(void) { pocket_runtime_damage_pixels(), g_composites, g_damage_regions_last, + POCKET_SVC_STATE_NAME(), g_state == POCKET_STATE_FAILED ? g_status_message : "" ); g_last_record_attempt_frame = g_guest_frames; diff --git a/hosts/iphone2g/svcwire.c b/hosts/iphone2g/svcwire.c index 3d7b8e4d4..75b771bca 100644 --- a/hosts/iphone2g/svcwire.c +++ b/hosts/iphone2g/svcwire.c @@ -23,6 +23,13 @@ * when the tool bakes one, then the LAN beacon. A failing override degrades * into beacon discovery instead of wedging the transport. * + * The wire also LISTENS on POCKET_SVC_LISTEN_PORT: a companion on the + * machine the device is plugged into reaches it through usbmuxd (iproxy + * forwards a host port to this one), which needs no WiFi, no beacon and no + * firewall rule. An accepted connection is the same wire with the roles of + * connect() reversed — the device still speaks the hello first — and it + * wins over any outbound attempt in flight. + * * Like the 3DS transport this host never blocks a frame on the network: * every socket is non-blocking and svcwire_pump does a bounded amount of * work per call from the frame runner. @@ -72,6 +79,9 @@ #ifndef POCKET_SVC_HOST_PATH #define POCKET_SVC_HOST_PATH "/private/var/tmp/pocketjs-svc-host.txt" #endif +#ifndef POCKET_SVC_LISTEN_PORT +#define POCKET_SVC_LISTEN_PORT 8624 +#endif typedef enum { SVC_STATE_IDLE, @@ -86,7 +96,11 @@ static int enabled; static char app_id[65]; static SvcState state = SVC_STATE_IDLE; static int beacon_fd = -1; +static int listen_fd = -1; static int tcp_fd = -1; +/* The live connection came in over the listener (usbmuxd), not out to a + * beacon: reported in the acceptance record as "up-usb". */ +static int inbound; static struct sockaddr_in target; static int target_from_override; static int override_failed; @@ -105,6 +119,8 @@ static int pong_pending; static uint8_t pong_payload[SVC_PING_MAX]; static uint32_t pong_length; +static void queue_hello(void); + static uint64_t now_ms(void) { struct timeval tv; gettimeofday(&tv, NULL); @@ -144,6 +160,7 @@ static void enter_state(SvcState next) { static void close_connection(void) { if (tcp_fd >= 0) close(tcp_fd); tcp_fd = -1; + inbound = 0; rx_length = 0; skip_remaining = 0; tx_length = 0; @@ -183,6 +200,51 @@ static void ensure_beacon_socket(void) { beacon_fd = fd; } +static void ensure_listen_socket(void) { + int fd; + int reuse = 1; + struct sockaddr_in address; + if (listen_fd >= 0 || POCKET_SVC_LISTEN_PORT == 0) return; + fd = socket(AF_INET, SOCK_STREAM, 0); + if (fd < 0) return; + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof reuse); + memset(&address, 0, sizeof address); + address.sin_family = AF_INET; + address.sin_addr.s_addr = htonl(INADDR_ANY); + address.sin_port = htons(POCKET_SVC_LISTEN_PORT); + if (bind(fd, (struct sockaddr *)&address, sizeof address) != 0 || listen(fd, 1) != 0 || + !set_nonblocking(fd)) { + close(fd); + return; + } + listen_fd = fd; +} + +/* Take one inbound connection if a companion reached the listener. While a + * connection is up, extra arrivals are refused (closed) so the wire stays + * one connection. Returns 1 when a new connection was adopted. */ +static int poll_listener(int adopt) { + int fd; + int nodelay = 1; + struct sockaddr_in peer; + socklen_t peer_length = sizeof peer; + if (listen_fd < 0) return 0; + fd = accept(listen_fd, (struct sockaddr *)&peer, &peer_length); + if (fd < 0) return 0; + if (!adopt || !set_nonblocking(fd)) { + close(fd); + return 0; + } + setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &nodelay, sizeof nodelay); + close_connection(); + tcp_fd = fd; + inbound = 1; + queue_hello(); + last_rx_ms = now_ms(); + enter_state(SVC_STATE_HELLO_WAIT); + return 1; +} + /* Drain beacon datagrams. While DISCOVERing, the first one advertising our * app id becomes the connect target; in every other state the datagrams are * discarded so the socket buffer never fills. */ @@ -292,6 +354,8 @@ static void start_connect(void) { static void pump_discover(void) { struct sockaddr_in candidate; ensure_beacon_socket(); + ensure_listen_socket(); + if (poll_listener(1)) return; if (!override_failed && read_host_override(&candidate)) { target = candidate; target_from_override = 1; @@ -525,10 +589,12 @@ void svcwire_pump(void) { break; case SVC_STATE_CONNECTING: poll_beacon(NULL); + if (poll_listener(1)) break; /* the wire in the cable beats the one in the air */ pump_connecting(); break; case SVC_STATE_HELLO_WAIT: poll_beacon(NULL); + poll_listener(0); pump_tx(); if (tcp_fd < 0) break; pump_rx(); @@ -539,6 +605,7 @@ void svcwire_pump(void) { break; case SVC_STATE_UP: poll_beacon(NULL); + poll_listener(0); pump_rx(); if (tcp_fd < 0) break; pump_tx(); @@ -548,6 +615,7 @@ void svcwire_pump(void) { break; case SVC_STATE_BACKOFF: poll_beacon(NULL); + if (poll_listener(1)) break; if (now_ms() - state_since_ms > SVC_BACKOFF_MS) enter_state(SVC_STATE_DISCOVER); break; } @@ -583,7 +651,7 @@ const char *svcwire_state_name(void) { case SVC_STATE_HELLO_WAIT: return "hello"; case SVC_STATE_UP: - return "up"; + return inbound ? "up-usb" : "up"; case SVC_STATE_BACKOFF: return "backoff"; case SVC_STATE_IDLE: @@ -596,6 +664,8 @@ void svcwire_shutdown(void) { close_connection(); if (beacon_fd >= 0) close(beacon_fd); beacon_fd = -1; + if (listen_fd >= 0) close(listen_fd); + listen_fd = -1; enabled = 0; state = SVC_STATE_IDLE; lines_length = 0; diff --git a/tools/ipodtouch4.ts b/tools/ipodtouch4.ts index 78ded05d7..bdc15797c 100644 --- a/tools/ipodtouch4.ts +++ b/tools/ipodtouch4.ts @@ -122,6 +122,15 @@ export function selectIPodTouch4App(name: string | undefined): IPodTouch4App { } const APP = selectIPodTouch4App(process.env.POCKETJS_IPODTOUCH4_APP); +/** + * The machine the iPod is plugged into, when it is not this one: an ssh host + * (alias) with usbmuxd + libimobiledevice. Device discovery and the iproxy + * tunnel then run there, and every ssh/scp to the device jumps through it + * (ProxyJump), so keys and the pinned host key stay on this Mac. + */ +const VIA = process.env.POCKETJS_IPODTOUCH4_VIA?.trim() || null; +/** The tunnel's port on the jump host (fixed: nothing else there uses it). */ +const VIA_TUNNEL_PORT = 22224; const BUNDLE_NAME = APP.bundleName; const BUNDLE_ID = APP.bundleId; const EXECUTABLE = APP.executable; @@ -345,10 +354,20 @@ function readReceipt(): BuildReceipt { return JSON.parse(readFileSync(receiptPath(), "utf8")) as BuildReceipt; } +function shellQuote(word: string): string { + return /^[A-Za-z0-9_./:=+-]+$/.test(word) ? word : `'${word.replace(/'/g, "'\\''")}'`; +} + +/** Run a libimobiledevice command where the device is: here, or on VIA. */ +function usbRun(command: string, args: readonly string[]): string { + if (!VIA) return mustRun(command, args); + return mustRun("ssh", ["-o", "BatchMode=yes", VIA, [command, ...args].map(shellQuote).join(" ")]); +} + function deviceUdid(): string { const requested = process.env.POCKETJS_IPODTOUCH4_UDID?.trim(); if (requested) return requested; - const ids = mustRun("idevice_id", ["-l"]) + const ids = usbRun("idevice_id", ["-l"]) .split("\n") .map((id) => id.trim()) .filter(Boolean); @@ -361,7 +380,7 @@ function deviceUdid(): string { } function deviceValue(udid: string, key: string): string { - return mustRun("ideviceinfo", ["-u", udid, "-k", key]); + return usbRun("ideviceinfo", ["-u", udid, "-k", key]); } function verifyDeviceIdentity(): string { @@ -389,8 +408,14 @@ function verifyDeviceIdentity(): string { return udid; } +/** ssh/scp options that route through the jump host when the device is there. */ +function viaArgs(): string[] { + return VIA ? ["-o", `ProxyJump=${VIA}`] : []; +} + function sshArgs(port: number, command: string): string[] { return [ + ...viaArgs(), "-i", KEY_PATH, "-p", @@ -455,10 +480,15 @@ async function withTunnel( // LOCAL_PORT may point at another device, so it is only the known-host alias // for SSH verification and for the explicit long-running `tunnel` command. const udid = verifyDeviceIdentity(); - const port = await availableLocalPort(); + const port = VIA ? VIA_TUNNEL_PORT : await availableLocalPort(); + // On a jump host the forwarder runs there; -tt gives it a pty so it dies + // with this ssh instead of lingering when the tunnel is torn down. const tunnel = Bun.spawn({ - cmd: ["iproxy", "-u", udid, `${port}:${DEVICE_PORT}`], + cmd: VIA + ? ["ssh", "-tt", "-o", "BatchMode=yes", VIA, `exec iproxy -u ${udid} ${port}:${DEVICE_PORT}`] + : ["iproxy", "-u", udid, `${port}:${DEVICE_PORT}`], cwd: REPOSITORY, + stdin: "ignore", stdout: "ignore", stderr: "pipe", }); @@ -471,7 +501,7 @@ async function withTunnel( if (tunnel.exitCode === null) tunnel.kill(); await tunnel.exited; const stderr = await new Response(tunnel.stderr as ReadableStream).text(); - throw new Error(`pocket ipodtouch4: USB SSH tunnel did not become ready${stderr ? `:\n${stderr}` : ""}`); + throw new Error(`pocket ipodtouch4: USB SSH tunnel${VIA ? ` via ${VIA}` : ""} did not become ready${stderr ? `:\n${stderr}` : ""}`); } finally { if (tunnel.exitCode === null) { tunnel.kill(); @@ -482,11 +512,20 @@ async function withTunnel( async function doctor(): Promise { let ok = true; - const required = ["bun", "rustup", "xcrun", "ldid", "idevice_id", "ideviceinfo", "iproxy", "ssh", "scp", "tar", "unzip", "hdiutil"]; + const usbTools = ["idevice_id", "ideviceinfo", "iproxy"]; + const required = ["bun", "rustup", "xcrun", "ldid", ...(VIA ? [] : usbTools), "ssh", "scp", "tar", "unzip", "hdiutil"]; for (const name of required) { const path = commandPath(name); ok = check(name, path !== undefined, path ?? "not found") && ok; } + if (VIA) { + for (const name of usbTools) { + const found = run("ssh", ["-o", "BatchMode=yes", VIA, `command -v ${name}`]); + ok = check(`${name} on ${VIA}`, found.exitCode === 0, found.exitCode === 0 ? found.stdout.trim() : `not found on ${VIA} (pacman -S usbmuxd libimobiledevice)`) && ok; + } + const muxd = run("ssh", ["-o", "BatchMode=yes", VIA, "test -S /var/run/usbmuxd && echo socket"]); + ok = check(`usbmuxd on ${VIA}`, muxd.exitCode === 0, muxd.exitCode === 0 ? "/var/run/usbmuxd" : `no /var/run/usbmuxd on ${VIA} (the usbmuxd package starts it on plug-in)`) && ok; + } const toolchain = inspectIPodTouch4Toolchain(); ok = check( "validated iOS 6.1.3 ARMv7 sysroot (shared with iphone4s)", @@ -895,6 +934,7 @@ async function deploy(): Promise { try { await withTunnel(async (port) => { mustRun("scp", [ + ...viaArgs(), "-O", "-i", KEY_PATH, @@ -1176,7 +1216,7 @@ function tunnel(): never { } function usage(): void { - console.log(`PocketJS iPod touch 4 tool (app: ${APP.id}; POCKETJS_IPODTOUCH4_APP=${Object.keys(IPODTOUCH4_APPS).join("|")}) + console.log(`PocketJS iPod touch 4 tool (app: ${APP.id}; POCKETJS_IPODTOUCH4_APP=${Object.keys(IPODTOUCH4_APPS).join("|")}; POCKETJS_IPODTOUCH4_VIA=${VIA ? ` = ${VIA}` : ""}) bun ipodtouch4 doctor bun ipodtouch4 setup-sources From 1b99d8a429430593429946ade622fd6cce1b906c Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 18:50:37 -0700 Subject: [PATCH 08/27] fix(ipodtouch4): report the svc transport in the record; a cable connection replaces a WiFi one The wrapper is compiled without the guest runtime's POCKET_SVC_WIRE switch, so the acceptance record said svc=absent while the daemon was talking to the device over usbmuxd. The wrapper now gets the same switch. On the device, an inbound (cable) connection arriving while a WiFi one is up replaces it instead of being refused; a second inbound is still refused. Co-Authored-By: Claude Opus 4.8 --- hosts/iphone2g/svcwire.c | 11 +++++++---- tools/ipodtouch4.ts | 3 +++ 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/hosts/iphone2g/svcwire.c b/hosts/iphone2g/svcwire.c index 75b771bca..33299ccfc 100644 --- a/hosts/iphone2g/svcwire.c +++ b/hosts/iphone2g/svcwire.c @@ -220,9 +220,10 @@ static void ensure_listen_socket(void) { listen_fd = fd; } -/* Take one inbound connection if a companion reached the listener. While a - * connection is up, extra arrivals are refused (closed) so the wire stays - * one connection. Returns 1 when a new connection was adopted. */ +/* Take one inbound connection if a companion reached the listener. While an + * inbound connection is up, extra arrivals are refused (closed) so the wire + * stays one connection; an inbound arrival while a WiFi connection is up + * replaces it. Returns 1 when a new connection was adopted. */ static int poll_listener(int adopt) { int fd; int nodelay = 1; @@ -605,7 +606,9 @@ void svcwire_pump(void) { break; case SVC_STATE_UP: poll_beacon(NULL); - poll_listener(0); + /* The cable beats the air: an inbound (usbmuxd) connection replaces a + * WiFi one; a second inbound while one is up is refused. */ + if (poll_listener(!inbound)) break; pump_rx(); if (tcp_fd < 0) break; pump_tx(); diff --git a/tools/ipodtouch4.ts b/tools/ipodtouch4.ts index bdc15797c..23c2e7753 100644 --- a/tools/ipodtouch4.ts +++ b/tools/ipodtouch4.ts @@ -660,6 +660,9 @@ async function build(): Promise { `-DPOCKET_RASTER_DENSITY=${inputs.viewport.rasterDensity}`, ...receiptPathDefines(), ...(APP.keepAwake ? ["-DPOCKET_KEEP_AWAKE"] : []), + // The wrapper reports the transport's state in the acceptance record, + // so it needs the same switch as the guest runtime. + ...(APP.svcWire ? ["-DPOCKET_SVC_WIRE"] : []), ]; const svcWireDefines = APP.svcWire ? ["-DPOCKET_SVC_WIRE"] : []; const crtGlobalsObject = join(nativeBuild, "crt_globals.o"); From c9a9db88a84ea24c42580b4180433eb6d945de53 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 19:38:54 -0700 Subject: [PATCH 09/27] refactor(3ds): move Pocket Shell to its own repository, keep the runtime fixes it found MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The shell is a product, not a demo of the runtime, so it now lives in pocket-stack/pocket-shell with the PocketJS checkout as its vendor submodule — the same split Pocket Term took. Its app, tests, tapes and byte-exact frames move there; this branch keeps only what belongs to the runtime. What stays, and why it is worth keeping on its own: - framework/src/native-tree.ts: insertBefore(node, node) is a no-op, like the DOM. Solid's reconcileArrays issues exactly that call when two ADJACENT items swap, and the old code unlinked first, so the node became its own missing anchor and threw. Any app that reorders a by one position hit it; tests/renderer.test.ts pins the case. - hosts/3ds/src/qjs.c: the guest's JS stack is 384 KiB, not 192. The console spends it on JSX nesting depth rather than node count, and a UI four levels deeper than a demo overflowed it mid-frame — after which the runtime rolled back to last-good, which on a shared SD card looks like a different app booting. - tests/e2e/azahar.ts: the fixture pins the emulated clock, so a guest that shows the RTC can still be compared byte for byte. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-shell/README.md | 207 ----- apps/pocket-shell/app.tsx | 26 - apps/pocket-shell/applets.tsx | 361 -------- apps/pocket-shell/chords.ts | 243 ----- apps/pocket-shell/deck.tsx | 836 ------------------ apps/pocket-shell/images.json | 5 - apps/pocket-shell/keyboard.tsx | 191 ---- apps/pocket-shell/main.tsx | 5 - apps/pocket-shell/pocket.json | 40 - apps/pocket-shell/shell.ts | 267 ------ apps/pocket-shell/stage.tsx | 203 ----- apps/pocket-shell/store.ts | 752 ---------------- apps/pocket-shell/wall/lake.png | Bin 78799 -> 0 bytes apps/pocket-shell/wall/prepare.ts | 64 -- apps/pocket-shell/wall/road.png | Bin 220685 -> 0 bytes apps/pocket-shell/wall/swirl.png | Bin 237665 -> 0 bytes apps/pocket-shell/wm.ts | 796 ----------------- tests/e2e/azahar.ts | 6 +- tests/golden-specs.ts | 66 -- .../3ds/pocket-shell-applets.40.auxiliary.png | Bin 26246 -> 0 bytes tests/goldens/3ds/pocket-shell-applets.40.png | Bin 27108 -> 0 bytes .../3ds/pocket-shell-applets.7.auxiliary.png | Bin 33600 -> 0 bytes tests/goldens/3ds/pocket-shell-applets.7.png | Bin 63310 -> 0 bytes .../3ds/pocket-shell-applets.90.auxiliary.png | Bin 26745 -> 0 bytes tests/goldens/3ds/pocket-shell-applets.90.png | Bin 26511 -> 0 bytes .../3ds/pocket-shell.112.auxiliary.png | Bin 22888 -> 0 bytes tests/goldens/3ds/pocket-shell.112.png | Bin 18362 -> 0 bytes .../3ds/pocket-shell.126.auxiliary.png | Bin 8927 -> 0 bytes tests/goldens/3ds/pocket-shell.126.png | Bin 64202 -> 0 bytes .../3ds/pocket-shell.160.auxiliary.png | Bin 22822 -> 0 bytes tests/goldens/3ds/pocket-shell.160.png | Bin 23651 -> 0 bytes .../3ds/pocket-shell.176.auxiliary.png | Bin 11415 -> 0 bytes tests/goldens/3ds/pocket-shell.176.png | Bin 18362 -> 0 bytes .../3ds/pocket-shell.214.auxiliary.png | Bin 24456 -> 0 bytes tests/goldens/3ds/pocket-shell.214.png | Bin 18362 -> 0 bytes .../3ds/pocket-shell.240.auxiliary.png | Bin 23606 -> 0 bytes tests/goldens/3ds/pocket-shell.240.png | Bin 23604 -> 0 bytes .../goldens/3ds/pocket-shell.3.auxiliary.png | Bin 33443 -> 0 bytes tests/goldens/3ds/pocket-shell.3.png | Bin 63310 -> 0 bytes .../goldens/3ds/pocket-shell.48.auxiliary.png | Bin 24549 -> 0 bytes tests/goldens/3ds/pocket-shell.48.png | Bin 24289 -> 0 bytes .../goldens/3ds/pocket-shell.60.auxiliary.png | Bin 10146 -> 0 bytes tests/goldens/3ds/pocket-shell.60.png | Bin 24592 -> 0 bytes .../goldens/3ds/pocket-shell.84.auxiliary.png | Bin 25331 -> 0 bytes tests/goldens/3ds/pocket-shell.84.png | Bin 24414 -> 0 bytes tests/platform-contracts.test.ts | 1 - tests/pocket-shell-sim.test.ts | 107 --- tests/pocket-shell-wm.test.ts | 433 --------- tools/test.ts | 7 - 49 files changed, 3 insertions(+), 4613 deletions(-) delete mode 100644 apps/pocket-shell/README.md delete mode 100644 apps/pocket-shell/app.tsx delete mode 100644 apps/pocket-shell/applets.tsx delete mode 100644 apps/pocket-shell/chords.ts delete mode 100644 apps/pocket-shell/deck.tsx delete mode 100644 apps/pocket-shell/images.json delete mode 100644 apps/pocket-shell/keyboard.tsx delete mode 100644 apps/pocket-shell/main.tsx delete mode 100644 apps/pocket-shell/pocket.json delete mode 100644 apps/pocket-shell/shell.ts delete mode 100644 apps/pocket-shell/stage.tsx delete mode 100644 apps/pocket-shell/store.ts delete mode 100644 apps/pocket-shell/wall/lake.png delete mode 100644 apps/pocket-shell/wall/prepare.ts delete mode 100644 apps/pocket-shell/wall/road.png delete mode 100644 apps/pocket-shell/wall/swirl.png delete mode 100644 apps/pocket-shell/wm.ts delete mode 100644 tests/goldens/3ds/pocket-shell-applets.40.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell-applets.40.png delete mode 100644 tests/goldens/3ds/pocket-shell-applets.7.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell-applets.7.png delete mode 100644 tests/goldens/3ds/pocket-shell-applets.90.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell-applets.90.png delete mode 100644 tests/goldens/3ds/pocket-shell.112.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.112.png delete mode 100644 tests/goldens/3ds/pocket-shell.126.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.126.png delete mode 100644 tests/goldens/3ds/pocket-shell.160.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.160.png delete mode 100644 tests/goldens/3ds/pocket-shell.176.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.176.png delete mode 100644 tests/goldens/3ds/pocket-shell.214.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.214.png delete mode 100644 tests/goldens/3ds/pocket-shell.240.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.240.png delete mode 100644 tests/goldens/3ds/pocket-shell.3.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.3.png delete mode 100644 tests/goldens/3ds/pocket-shell.48.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.48.png delete mode 100644 tests/goldens/3ds/pocket-shell.60.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.60.png delete mode 100644 tests/goldens/3ds/pocket-shell.84.auxiliary.png delete mode 100644 tests/goldens/3ds/pocket-shell.84.png delete mode 100644 tests/pocket-shell-sim.test.ts delete mode 100644 tests/pocket-shell-wm.test.ts diff --git a/apps/pocket-shell/README.md b/apps/pocket-shell/README.md deleted file mode 100644 index 8c5449e61..000000000 --- a/apps/pocket-shell/README.md +++ /dev/null @@ -1,207 +0,0 @@ -# Pocket Shell - -A tiling window shell for the Nintendo 3DS, running entirely on the console. -The top screen is the **stage**: Omarchy's tokyo-night wallpaper under windows -tiled by a **dwindle** or **scrolling** layout, five workspaces, a 14 px bar. -The touch screen is the **deck**: the workspace strip, a live minimap of the -stage, the dock, and — whenever a shoulder is held — the chord map for that -shoulder. Every window holds a local applet (a command line, a clock, notes, -the key sheet, stats, about); nothing needs a companion. - -```sh -bun tools/3ds.ts pocket-shell # dist/3ds/pocketshell-main.3dsx -bun tools/3ds.ts pocket-shell --cia # plus the installable CIA -bun test tests/pocket-shell-wm.test.ts # layout rules, chords, pocketsh -bun tools/test.ts --stage=pocket-shell # the headless sim replay of the tape -E2E_AZAHAR_APP=pocket-shell bun run e2e:3ds # the ten Azahar goldens -``` - -## The interaction model - -Omarchy binds every window action to `SUPER` plus one key, and `SUPER + K` -shows the table. Pocket Shell keeps the grammar and changes the hardware: - -| held | layer | what the other buttons do | -|---|---|---| -| nothing | plain | belong to the focused window's applet | -| **L** | super | act on the focused window | -| **R** | shift | the same verbs, moved: swap, maximize, spawn | -| **L + R** | ws | the d-pad steps workspaces and carries windows | - -**The chord map is on the deck, not behind a key.** Pressing a shoulder -replaces the minimap with the table for that layer, labelled per button, and -puts the layer's name in the bar. Releasing brings the minimap back. The -table and the dispatcher read the same array (`chords.ts`), so a label cannot -describe something the button does not do. - -**Every chord is also reachable by touch.** Rows of the chord map are tap -targets, and the L and R pills on the strip latch a layer for one action, so a -stylus alone can close a window or switch layouts. - -### L — window - -| button | action | Omarchy | -|---|---|---| -| d-pad | focus the window in that direction | `SUPER + arrows` | -| circle pad | push the nearest split boundary (dwindle) · column width (scrolling) | `SUPER + -/=` | -| A | launcher (grid on the deck; d-pad picks, A opens, B closes) | `SUPER + SPACE` | -| B | close the focused window | `SUPER + W` | -| X | fullscreen (covers the bar) | `SUPER + F` | -| Y | toggle the split's orientation (dwindle) · cycle column width ⅓ ½ ⅔ 1 (scrolling) | `SUPER + J` | -| START | toggle this workspace between dwindle and scrolling | `SUPER + L` | -| SELECT | the key sheet on the stage | `SUPER + K` | - -### R — move - -| button | action | Omarchy | -|---|---|---| -| d-pad | swap with the window in that direction | `SUPER + SHIFT + arrows` | -| circle pad | pan the strip (scrolling) | | -| A | another window of the focused app | `SUPER + RETURN` | -| B | reopen the last closed app | | -| X | maximize (keeps the bar and the outer gap) | `fullscreen, 1` | -| Y | swap the split's halves (dwindle) · stack into the left column, or unstack (scrolling) | `swapsplit` | -| START | next wallpaper | `SUPER + CTRL + SPACE` | -| SELECT | toggle the bar | `SUPER + SHIFT + SPACE` | - -### L + R — workspace - -| button | action | -|---|---| -| d-pad ← → | previous / next workspace | -| d-pad ↑ ↓ | carry the focused window to the previous / next workspace and follow it | - -Plain **SELECT** opens the deck keyboard when a term or notes window has -focus. Nothing is bound to **ZL / ZR**: they are New-3DS-only, reach libctru -through `ir:rst` rather than the HID pad, and have no `BTN` constant in -`contracts/spec/spec.ts` yet. - -### Touch - -- **Workspace strip**: tap a tab to switch; the layout badge toggles the - layout; L / R pills latch a layer. -- **Minimap** (the stage at 0.6): tap a window to focus it. **Hold a window - to arm the close bar**, then release on the bar to close — a resistive - panel has one contact and an 18 px × is a coin flip, so closing is a hold, - a slide and a release (the Pocket Term convention). Drag a window onto - another to swap them, or onto a workspace tab to move it there. Drag the - gap between two windows to move that split. In the scrolling layout, drag - the background to pan the strip, or a column's edge to resize it. -- **Gutter buttons**: `kbd` (keyboard), `wall` (next wallpaper), `keys` (key - sheet), `bar` (toggle the bar). -- **Dock**: tap an app to open it on the current workspace; a green dot marks - apps with a window. - -### Feedback - -Anything that cannot happen says why on the deck's hint line for about 1.6 s -("nothing left", "workspace 1 is the first", "a split needs two windows"). -A focus change is also visible on the stage: the focused window carries -Omarchy's 2 px active border (cyan to green), unfocused windows a grey one. - -## Layouts - -Both layouts share the geometry constants in `wm.ts`: **`BAR_H` 14, -`GAP_OUT` 4, `GAP_IN` 3, `BORDER` 2** — neighbours sit 6 px apart, the edge -gap is 7 px. Omarchy's `gaps_in 5 / gaps_out 10 / border 2` at a 3.5" panel. - -**Dwindle** is a binary split tree. A new window splits the focused leaf -along its longer side and takes the right or bottom half (Hyprland's -`force_split = 2`); a split keeps its orientation when a child closes -(`preserve_split = true`). Resizing walks up from the focused leaf to the -nearest split on that axis whose boundary lies on the pushed side, and moves -that ratio; ratios clamp to 0.15..0.85. - -**Scrolling** is a strip of columns wider than the screen. A new window -opens as a column after the focused one at **0.49 of the workspace width**, -so two columns fit (Omarchy's `column_width`). The strip scrolls so the -focused column is fully visible, preferring its right edge. A column holds a -vertical stack of equal-height windows. - -**Toggling layouts keeps window order and focus**: dwindle → scrolling makes -one column per leaf in tree order; scrolling → dwindle re-inserts the windows -in strip order, each splitting the one before it. - -Each workspace keeps its own layout, fullscreen state and scroll position. -Five workspaces exist from boot; nothing is persisted across launches (the -3DS host has no `fs` module). - -## Applets - -- **term** — pocketsh, the shell's own `hyprctl`: `ls`, `open `, - `close [id]`, `focus `, `ws [1-5]`, `layout [dwindle|scrolling]`, - `wall [next]`, `tz [+8]`, `keys`, `fetch`, `date`, `uptime`, `echo`, - `clear`. Plain - buttons: A enter, B backspace, X tab-complete, Y space, ↑↓ history, START - clear; the circle pad scrolls. 12 px JetBrains Mono on a 7 px cell. -- **clock** — the RTC at 36 px, the date, a seconds bar; A toggles 12 h. -- **notes** — a scratch pad on the same keyboard; A newline, B backspace. -- **keys** — the chord table as a window; ↑↓ scroll. -- **stats** — fps, frame, uptime, windows, host, wallpaper, layer. -- **about** — what this is. - -## Files - -``` -wm.ts the window manager: pure state and geometry (tested) -chords.ts the modifier grammar as one table, plus its labels (tested) -shell.ts pocketsh, the command interpreter (tested) -store.ts signals, per-frame input dispatch, geometry animation, applet state -stage.tsx top screen: wallpaper, windows, bar, key sheet -deck.tsx touch screen: strip, minimap and its gestures, chord map, launcher, dock -keyboard.tsx the deck's hand-laid touch keyboard -applets.tsx term · clock · notes · keys · stats · about -wall/ tokyo-night backgrounds in 512x256 envelopes (prepare.ts cooks them) -images.json bakes the wallpapers as PSM_5650 -``` - -**Wallpapers are 400x240 crops padded into 512x256**: `framework/compiler/pak.ts` -accepts power-of-two images only, and the stage clips the padding under an -overflow-hidden root. Three fit in 768 KB at 16 bits per pixel; `R + START` -cycles them. - -## The depth budget - -**The 3DS spends its JS stack on JSX nesting depth, not node count** -(`hosts/3ds/src/qjs.c`, `POCKETJS_JS_STACK_SIZE`). A QuickJS call frame is -expensive and mounting descends the tree, so an applet sits at the bottom of -a chain that already runs stage → windows → window chrome → content. Opening -one `keys` window whose rows each carried a wrapper view with a `Show` inside -overflowed the old 192 KiB budget mid-frame, and the runtime rolled the whole -guest back to last-good — which, on a card that also holds Pocket Term, looks -like the shell "turning into" another app. - -Two things came out of that. The host budget is now 384 KiB, which is what -the sibling Pocket Term work already found it needed. And **a row here is an -offset, not a node**: `Keys` and `Stats` render each column as its own flat -pass of absolutely-positioned `Text` under the applet root, three levels -deep, instead of a wrapper view per row. Prefer that shape for any new -applet, and remember an emulator with a generous stack will not warn you — -`tests/golden-specs.ts` has a `pocket-shell-applets` tape that opens every -applet from the dock precisely because the first tape never did. - -## The clock - -**The RTC's epoch is sound; the console's breakdown of it is not.** On -hardware `Date.now()` is monotonic and correct, but `getHours()` -intermittently disagreed with that epoch by whole hours — applying the -timezone on some reads and not others. Two adjacent frames rendered two -different times, which is what "the clock flickers" turned out to be: not a -rendering fault but two wrong readings alternating. Measured on the device, -the big time text changed by ~1600 px between consecutive frames; after the -fix it changes by zero. - -So nothing here calls a `Date` breakdown method. `civilFromEpoch` in -`shell.ts` derives the whole civil date and time from the epoch by -arithmetic, and the shell reads only that. The zone is sampled once at boot -and accepted only if it looks like a real one (a whole quarter-hour within -±14 h); a console that reports nothing usable shows UTC, and **`tz +8` in -pocketsh states the offset the console could not**. - -## Determinism - -The bar shows the RTC as `HH:MM`. `tests/e2e/azahar.ts` pins the emulator's -clock (`init_clock = 1`, `init_time` = 2000-01-01 00:00:00), so a golden run -reads `00:00` for its first minute. The golden tape avoids the clock and -stats applets, whose seconds would differ run to run. Uptime counts frames, -not wall time. diff --git a/apps/pocket-shell/app.tsx b/apps/pocket-shell/app.tsx deleted file mode 100644 index 28c9837ac..000000000 --- a/apps/pocket-shell/app.tsx +++ /dev/null @@ -1,26 +0,0 @@ -// apps/pocket-shell/app.tsx — Pocket Shell: a tiling window shell for the -// Nintendo 3DS, entirely on the console. The top screen is the stage — -// Omarchy's tokyo-night wallpaper under dwindle- or scrolling-tiled windows — -// and the touch screen is the deck, where the shoulders' chord map, the -// workspace strip, a live minimap and the dock live. See README.md for the -// interaction design and store.ts for how input becomes actions. - -import { AuxiliarySurface } from "@pocketjs/framework/components"; -import { Deck } from "./deck.tsx"; -import { Stage } from "./stage.tsx"; -import { createShellStore } from "./store.ts"; - -export default function PocketShell() { - const store = createShellStore(); - // Debug handle for the headless sim test (tests/pocket-shell-sim.test.ts), - // which has no touch screen to open windows from. - (globalThis as { __pocketShell?: unknown }).__pocketShell = store; - return ( - <> - - - - - - ); -} diff --git a/apps/pocket-shell/applets.tsx b/apps/pocket-shell/applets.tsx deleted file mode 100644 index 1ef69f0bb..000000000 --- a/apps/pocket-shell/applets.tsx +++ /dev/null @@ -1,361 +0,0 @@ -// apps/pocket-shell/applets.tsx — what the windows hold. Every applet is -// self-contained on the console: pocketsh drives the window manager itself, -// the clock reads the RTC, notes is a scratch pad, keys is the chord table, -// stats reads the frame loop, about says what this is. -// -// An applet is given its content size and reads its own state object from -// the store (one per window, mutated in place, revalidated through `rev`). -// Text rows are absolutely positioned: on this host a Text that is a direct -// flex child of a short bar can paint nothing, so rows are offsets. - -import { Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { getOps } from "@pocketjs/framework"; -import { keySheet } from "./chords.ts"; -import { formatClock, formatDate, formatUptime } from "./shell.ts"; -import type { AppId, ShellStore } from "./store.ts"; - -export interface AppletProps { - id: number; - app: AppId; - store: ShellStore; - /** Content size: the window minus border and header. */ - w: () => number; - h: () => number; -} - -/** 12 px JetBrains Mono is spec slot 16; its ~7.2 px advance snaps to a 7 px - * cell the way Pocket Term does it, so columns land on pixels. */ -const MONO_SLOT = 16; -const LINE_H = 13; -const ROW_H = 13; -const PAD = 4; - -let cellW = 7; -let measured = false; -function monoCell(): number { - if (!measured) { - measured = true; - const advance = getOps().measureText("M", MONO_SLOT); - if (advance > 0) cellW = Math.max(6, Math.round(advance)); - } - return cellW; -} - -/** Hard-wrap one logical line to `cols` cells. */ -function wrap(line: string, cols: number, out: string[]): void { - if (cols < 1) return; - if (line.length === 0) { - out.push(""); - return; - } - for (let i = 0; i < line.length; i += cols) out.push(line.slice(i, i + cols)); -} - -export function Applet(props: AppletProps) { - switch (props.app) { - case "term": - return ; - case "clock": - return ; - case "notes": - return ; - case "keys": - return ; - case "stats": - return ; - case "about": - return ; - } -} - -// ---- term --------------------------------------------------------------------- - -function Term(props: AppletProps) { - const cell = monoCell(); - const cols = () => Math.max(4, Math.floor((props.w() - PAD * 2) / cell)); - const rows = () => Math.max(1, Math.floor((props.h() - PAD) / LINE_H)); - const state = () => { - props.store.rev(); - const s = props.store.stateOf(props.id); - return s && s.kind === "term" ? s : null; - }; - /** Wrapped scrollback, then the visible window of it above the prompt. */ - const view = () => { - const s = state(); - if (!s) return { lines: [] as string[], input: "", promptRow: 0 }; - const wrapped: string[] = []; - for (const line of s.lines) wrap(line, cols(), wrapped); - const visible = rows() - 1; // the prompt keeps the last row - const maxScroll = Math.max(0, wrapped.length - visible); - const scroll = Math.min(s.scroll, maxScroll); - const end = wrapped.length - scroll; - const start = Math.max(0, end - visible); - const lines = wrapped.slice(start, end); - return { lines, input: s.input, promptRow: lines.length }; - }; - const inputShown = () => { - const text = view().input; - const room = cols() - 3; - return text.length > room ? text.slice(text.length - room) : text; - }; - return ( - - - {(line, i) => ( - - {line()} - - )} - - - {"❯"} - - - {inputShown()} - - - - ); -} - -// ---- clock -------------------------------------------------------------------- - -function Clock(props: AppletProps) { - const state = () => { - props.store.rev(); - const s = props.store.stateOf(props.id); - return s && s.kind === "clock" ? s : null; - }; - const time = () => formatClock(props.store.now(), state()?.hour12 ?? false); - const suffix = () => (state()?.hour12 ? (props.store.now().hour < 12 ? "am" : "pm") : ""); - const seconds = () => props.store.now().second; - const big = () => props.w() >= 200 && props.h() >= 96; - const mid = () => !big() && props.h() >= 56 && props.w() >= 110; - return ( - - - {time()} - - - {time()} - - - {time()} - - = 56}> - - {formatDate(props.store.now())} - {suffix() ? ` ${suffix()}` : ""} - - - - - - - ); -} - -// ---- notes -------------------------------------------------------------------- - -function Notes(props: AppletProps) { - const cell = monoCell(); - const cols = () => Math.max(4, Math.floor((props.w() - PAD * 2) / cell)); - const rows = () => Math.max(1, Math.floor((props.h() - PAD) / LINE_H)); - const state = () => { - props.store.rev(); - const s = props.store.stateOf(props.id); - return s && s.kind === "notes" ? s : null; - }; - const view = () => { - const s = state(); - const wrapped: string[] = []; - for (const line of (s?.text ?? "").split("\n")) wrap(line, cols(), wrapped); - if (wrapped.length === 0) wrapped.push(""); - // The cursor sits after the last line; a full last line starts a new one. - if (wrapped[wrapped.length - 1].length >= cols()) wrapped.push(""); - const maxScroll = Math.max(0, wrapped.length - rows()); - const scroll = Math.min(s?.scroll ?? 0, maxScroll); - const end = wrapped.length - scroll; - const start = Math.max(0, end - rows()); - const lines = wrapped.slice(start, end); - return { lines, cursorRow: lines.length - 1, cursorCol: lines[lines.length - 1].length, empty: !s?.text }; - }; - return ( - - - {(line, i) => ( - - {line()} - - )} - - = 40}> - SELECT opens the keyboard - - - - ); -} - -// ---- keys --------------------------------------------------------------------- - -export interface SheetLine { - kind: "title" | "row" | "gap"; - keys: string; - what: string; -} - -export function sheetLines(layout: "dwindle" | "scrolling"): SheetLine[] { - const out: SheetLine[] = []; - for (const group of keySheet(layout)) { - out.push({ kind: "title", keys: group.title, what: "" }); - for (const row of group.rows) out.push({ kind: "row", keys: row.keys, what: row.what }); - out.push({ kind: "gap", keys: "", what: "" }); - } - return out; -} - -function Keys(props: AppletProps) { - const rows = () => Math.max(1, Math.floor((props.h() - PAD) / ROW_H)); - const state = () => { - props.store.rev(); - const s = props.store.stateOf(props.id); - return s && s.kind === "keys" ? s : null; - }; - const view = () => { - const all = sheetLines(props.store.layoutKind()); - const maxScroll = Math.max(0, all.length - rows()); - const scroll = Math.min(state()?.scroll ?? 0, maxScroll); - return all.slice(scroll, scroll + rows()); - }; - const keysW = () => (props.w() >= 200 ? 84 : 64); - // A row is an offset, not a node. The 3DS spends its JS stack on JSX - // NESTING DEPTH rather than node count (hosts/3ds/src/qjs.c - // POCKETJS_JS_STACK_SIZE), and a wrapper View with a Show inside it put - // this applet two levels past what mounting inside a window could afford — - // opening one keys window overflowed the stack and the runtime rolled the - // whole guest back. Each column is therefore its own flat pass of - // absolutely-positioned Text, three levels deep in total. - return ( - - - {(line, i) => - line().kind === "gap" ? null : ( - - {line().keys} - - ) - } - - - {(line, i) => - line().kind === "row" ? ( - - {line().what} - - ) : null - } - - - ); -} - -// ---- stats -------------------------------------------------------------------- - -function Stats(props: AppletProps) { - const store = props.store; - const rows = () => { - store.rev(); - const ops = getOps(); - return [ - ["fps", String(store.fps())], - ["frame", String(store.frameCount())], - ["uptime", formatUptime(store.uptimeSeconds())], - ["windows", String(store.wm.windows.size)], - ["workspace", `${store.active()} of 5 · ${store.layoutKind()}`], - ["host", `${ops.__host ?? "3ds"} · abi ${ops.__hostAbi ?? "?"}`], - ["wallpaper", store.wallpaper()], - ["layer", store.layer()], - ]; - }; - // Flat for the same reason as Keys: two passes of Text, no per-row wrapper. - return ( - - - {(row, i) => ( - - {row()[0]} - - )} - - - {(row, i) => ( - - {row()[1]} - - )} - - - ); -} - -// ---- about -------------------------------------------------------------------- - -function About(props: AppletProps) { - const compact = () => props.h() < 80; - return ( - - - - - - - Pocket Shell - - a tiling shell for the Nintendo 3DS - Omarchy's SUPER grammar on two shoulders - dwindle · scrolling · five workspaces - tokyo-night · wallpapers from Omarchy - PocketJS · Solid · QuickJS · citro3d - - = 112}> - hold L and press SELECT for every key - - - ); -} diff --git a/apps/pocket-shell/chords.ts b/apps/pocket-shell/chords.ts deleted file mode 100644 index abd013f64..000000000 --- a/apps/pocket-shell/chords.ts +++ /dev/null @@ -1,243 +0,0 @@ -// apps/pocket-shell/chords.ts — the modifier grammar, as one table. -// -// Omarchy binds every window action to SUPER plus one key and shows the whole -// table on SUPER+K. Pocket Shell gives the two shoulders that role: -// -// L held super act on the focused window (focus, close, launch) -// R held shift the same verbs, moved: swap, maximize, spawn -// L and R held ws the d-pad steps workspaces and carries windows -// neither plain buttons belong to the focused window's applet -// -// This table is read twice: by the input dispatcher (store.ts) to fire an -// action, and by the deck (deck.tsx) to draw the live keybinding map while a -// shoulder is down — the same entry produces the behaviour and its label, so -// the two cannot drift. -// -// Only buttons the 3DS host delivers appear here. ZL and ZR are New-3DS-only, -// reach libctru through ir:rst rather than the HID pad, and have no BTN -// constant in contracts/spec/spec.ts, so nothing is bound to them; when the -// contract gains them, stepping workspaces without a shoulder is two rows. - -import { BTN } from "@pocketjs/framework/input"; -import type { LayoutKind } from "./wm.ts"; - -export type Layer = "plain" | "super" | "shift" | "ws"; - -export type ActionId = - | "focus.left" - | "focus.right" - | "focus.up" - | "focus.down" - | "swap.left" - | "swap.right" - | "swap.up" - | "swap.down" - | "ws.prev" - | "ws.next" - | "carry.prev" - | "carry.next" - | "launcher" - | "close" - | "fullscreen" - | "maximize" - | "split" - | "swapsplit" - | "layout" - | "keys" - | "another" - | "reopen" - | "wallpaper" - | "bar"; - -export interface Chord { - layer: Layer; - button: number; - action: ActionId; -} - -/** The face-button order the deck draws rows in. */ -export const FACE_ORDER: readonly number[] = [BTN.TRIANGLE, BTN.SQUARE, BTN.CIRCLE, BTN.CROSS]; -export const DPAD = BTN.LEFT | BTN.RIGHT | BTN.UP | BTN.DOWN; - -export const CHORDS: readonly Chord[] = [ - { layer: "super", button: BTN.LEFT, action: "focus.left" }, - { layer: "super", button: BTN.RIGHT, action: "focus.right" }, - { layer: "super", button: BTN.UP, action: "focus.up" }, - { layer: "super", button: BTN.DOWN, action: "focus.down" }, - { layer: "super", button: BTN.CIRCLE, action: "launcher" }, - { layer: "super", button: BTN.CROSS, action: "close" }, - { layer: "super", button: BTN.TRIANGLE, action: "fullscreen" }, - { layer: "super", button: BTN.SQUARE, action: "split" }, - { layer: "super", button: BTN.START, action: "layout" }, - { layer: "super", button: BTN.SELECT, action: "keys" }, - - { layer: "shift", button: BTN.LEFT, action: "swap.left" }, - { layer: "shift", button: BTN.RIGHT, action: "swap.right" }, - { layer: "shift", button: BTN.UP, action: "swap.up" }, - { layer: "shift", button: BTN.DOWN, action: "swap.down" }, - { layer: "shift", button: BTN.CIRCLE, action: "another" }, - { layer: "shift", button: BTN.CROSS, action: "reopen" }, - { layer: "shift", button: BTN.TRIANGLE, action: "maximize" }, - { layer: "shift", button: BTN.SQUARE, action: "swapsplit" }, - { layer: "shift", button: BTN.START, action: "wallpaper" }, - { layer: "shift", button: BTN.SELECT, action: "bar" }, - - { layer: "ws", button: BTN.LEFT, action: "ws.prev" }, - { layer: "ws", button: BTN.RIGHT, action: "ws.next" }, - { layer: "ws", button: BTN.UP, action: "carry.prev" }, - { layer: "ws", button: BTN.DOWN, action: "carry.next" }, -]; - -export function layerOf(held: number): Layer { - const l = (held & BTN.LTRIGGER) !== 0; - const r = (held & BTN.RTRIGGER) !== 0; - if (l && r) return "ws"; - if (l) return "super"; - if (r) return "shift"; - return "plain"; -} - -export function chordsOf(layer: Layer): Chord[] { - return CHORDS.filter((chord) => chord.layer === layer); -} - -export function chordFor(layer: Layer, button: number): Chord | undefined { - return CHORDS.find((chord) => chord.layer === layer && chord.button === button); -} - -export const LAYER_TITLE: Record = { - plain: "", - super: "L window", - shift: "R move", - ws: "L+R workspace", -}; - -/** What the shoulders do next, for the idle hint line. */ -export const LAYER_HINT: Record = { - plain: "hold L window · R move · L+R workspace", - super: "add R for workspaces · release to finish", - shift: "add L for workspaces · release to finish", - ws: "d-pad steps · release to finish", -}; - -/** The label a chord shows, given the workspace layout it would act on. */ -export function labelFor(action: ActionId, layout: LayoutKind): string { - switch (action) { - case "focus.left": - case "focus.right": - case "focus.up": - case "focus.down": - return "focus window"; - case "swap.left": - case "swap.right": - case "swap.up": - case "swap.down": - return "swap window"; - case "ws.prev": - case "ws.next": - return "switch workspace"; - case "carry.prev": - case "carry.next": - return "carry window"; - case "launcher": - return "launcher"; - case "close": - return "close window"; - case "fullscreen": - return "fullscreen"; - case "maximize": - return "maximize"; - case "split": - return layout === "dwindle" ? "toggle split" : "column width"; - case "swapsplit": - return layout === "dwindle" ? "swap split" : "stack / unstack"; - case "layout": - return layout === "dwindle" ? "layout: scrolling" : "layout: dwindle"; - case "keys": - return "key sheet"; - case "another": - return "another of this"; - case "reopen": - return "reopen closed"; - case "wallpaper": - return "next wallpaper"; - case "bar": - return "toggle bar"; - } -} - -/** What the d-pad does, in one line. Both the deck's map and the key sheet - * give it a column about 140 px wide, so it has to stay short. */ -export function dpadLabel(layer: Layer): string { - switch (layer) { - case "super": - return "focus window"; - case "shift": - return "swap window"; - case "ws": - return "workspace · carry"; - case "plain": - return "to the app"; - } -} - -/** What the circle pad does with a layer held. */ -export function padLabel(layer: Layer, layout: LayoutKind): string { - switch (layer) { - case "super": - return layout === "dwindle" ? "resize" : "column width"; - case "shift": - return layout === "scrolling" ? "scroll strip" : "—"; - case "ws": - return "—"; - case "plain": - return "to the app"; - } -} - -export const BUTTON_GLYPH: Record = { - [BTN.CIRCLE]: "A", - [BTN.CROSS]: "B", - [BTN.TRIANGLE]: "X", - [BTN.SQUARE]: "Y", - [BTN.START]: "START", - [BTN.SELECT]: "SELECT", -}; - -export interface KeySheetRow { - keys: string; - what: string; -} - -/** The full table, the way SUPER+K lists it: one row per binding. */ -export function keySheet(layout: LayoutKind): { title: string; rows: KeySheetRow[] }[] { - // "L+R" keeps the widest row inside the sheet's 80 px key column. - const prefix: Record = { plain: "", super: "L +", shift: "R +", ws: "L+R" }; - const groups: { title: string; rows: KeySheetRow[] }[] = []; - for (const layer of ["super", "shift", "ws"] as const) { - const rows: KeySheetRow[] = []; - const list = chordsOf(layer); - const dpad = list.filter((c) => c.button & DPAD); - if (dpad.length > 0) { - // The sheet's value column is ~100 px; the deck's is wider, so the ws - // row is the one place the two wordings differ. - const what = layer === "ws" ? "switch · carry" : dpadLabel(layer); - rows.push({ keys: `${prefix[layer]} d-pad`, what }); - } - const pad = padLabel(layer, layout); - if (pad !== "—") rows.push({ keys: `${prefix[layer]} pad`, what: pad }); - for (const chord of list) { - if (chord.button & DPAD) continue; - rows.push({ keys: `${prefix[layer]} ${BUTTON_GLYPH[chord.button]}`, what: labelFor(chord.action, layout) }); - } - groups.push({ title: LAYER_TITLE[layer], rows }); - } - groups.push({ - title: "always", - rows: [ - { keys: "SELECT", what: "keyboard" }, - { keys: "touch", what: "hold a layer" }, - ], - }); - return groups; -} diff --git a/apps/pocket-shell/deck.tsx b/apps/pocket-shell/deck.tsx deleted file mode 100644 index da8486b11..000000000 --- a/apps/pocket-shell/deck.tsx +++ /dev/null @@ -1,836 +0,0 @@ -// apps/pocket-shell/deck.tsx — the touch screen. Omarchy's SUPER key is a -// key; here it is a surface. The deck always shows the workspace strip, a -// live minimap of the top screen, and the dock, and it re-labels itself the -// moment a shoulder goes down: the minimap gives way to the chord map for -// the held layer, which is Omarchy's SUPER+K menu appearing exactly when the -// modifier that needs it is pressed. Every row of that map is also a tap -// target, and the L/R pills latch a layer for one action, so a stylus can -// complete any chord on its own. -// -// Minimap touch: tap focuses, hold arms the close bar (release on it to -// close — a resistive panel and a coin-flip × are how shells get killed), -// drag a window onto another to swap or onto a workspace tab to move it, -// drag the gap between two windows to resize the split, and in the -// scrolling layout drag the background to pan the strip. - -import { createSignal, For, Index, Show } from "solid-js"; -import { Image, Text, View } from "@pocketjs/framework/components"; -import { createGesture } from "@pocketjs/framework/gesture"; -import { onFrame } from "@pocketjs/framework/lifecycle"; -import { - BUTTON_GLYPH, - chordFor, - dpadLabel, - FACE_ORDER, - labelFor, - LAYER_HINT, - LAYER_TITLE, - padLabel, - type ActionId, - type Layer, -} from "./chords.ts"; -import { Keyboard, keyboardHit, createKeyPress } from "./keyboard.tsx"; -import { APP_BLURB, APPS, isTextApp, type AppId, type ShellStore } from "./store.ts"; -import { BTN } from "@pocketjs/framework/input"; -import { BAR_H, WORKSPACES, type Rect } from "./wm.ts"; - -const STRIP_H = 24; -const PILL_W = 28; -const TABS_X = 28; -const TAB_W = 40; -const BADGE_X = 228; -const BADGE_W = 64; -const R_PILL_X = 292; - -const BODY_TOP = 24; -const BODY_BOTTOM = 200; - -const S = 0.6; -const MAP_X = 40; -const MAP_Y = 30; -const MAP_W = 240; -const MAP_H = 144; -const MAP_RECT: Rect = { x: MAP_X, y: MAP_Y, w: MAP_W, h: MAP_H }; -const HINT_Y = 180; -const CLOSE_BAR_H = 44; -const CLOSE_BAR_Y = BODY_BOTTOM - CLOSE_BAR_H; -const CLOSE_HOLD_SECONDS = 0.4; - -const DOCK_Y = 200; -const DOCK_X = 16; -const DOCK_CELL = 48; - -const GUTTER_BTN_W = 32; -const GUTTER_BTN_H = 22; -interface GutterButton { - x: number; - y: number; - label: string; - act: "kbd" | "wall" | "keys" | "bar"; -} -const GUTTER_BUTTONS: GutterButton[] = [ - { x: 4, y: 34, label: "kbd", act: "kbd" }, - { x: 4, y: 62, label: "wall", act: "wall" }, - { x: 284, y: 34, label: "keys", act: "keys" }, - { x: 284, y: 62, label: "bar", act: "bar" }, -]; - -const CHORD_TITLE_Y = 30; -const CHORD_ROWS_Y = 48; -const CHORD_ROW_H = 24; -const CHORD_COL_SPLIT = 160; - -const LAUNCH_X = 16; -const LAUNCH_Y = 44; -const LAUNCH_W = 96; -const LAUNCH_H = 64; -const LAUNCH_COLS = 3; - -const within = (x: number, y: number, r: Rect): boolean => - x >= r.x && x < r.x + r.w && y >= r.y && y < r.y + r.h; -const toStage = (x: number, y: number) => ({ x: (x - MAP_X) / S, y: (y - MAP_Y) / S }); - -type BodyMode = "launcher" | "chords" | "keyboard" | "map"; - -/** Dock and launcher icons: one literal tree per app. */ -function AppIcon(props: { app: AppId }) { - switch (props.app) { - case "term": - // The chevron is drawn as pixels, not typed and not rotated. `❯` - // (U+276F) is not in the baked face, so a Text rendered the placeholder - // box; and `-rotate-45` is not a utility this compiler accepts (only - // non-negative numbers parse), which would have made the whole class - // literal unknown and left the node unstyled. - return ( - - - - - - - - - ); - case "clock": - return ( - - - - - - - ); - case "notes": - return ( - - - - - - ); - case "keys": - // A keyboard: two rows of caps over a spacebar. The old icon stacked - // two flex rows in a container with no `flex-col` — the default - // direction here is ROW, so they sat side by side and read as one line - // of dots. Absolute placement says what it means. - return ( - - - - - - - - - - ); - case "stats": - return ( - - - - - - ); - case "about": - return ( - - i - - ); - } -} - -/** A touch target's transient pressed look. - * - * A physical button reports its own press; a painted one has to say so, and - * on a resistive panel with no hover there is nothing else to tell you the - * panel heard you. Every target here therefore darkens or inverts while the - * finger is on it, and holds that for a few frames after release so a quick - * tap is still visible. Ids are `kind:key` strings so one signal covers the - * strip, the gutter, the dock, the chord rows and the launcher. */ -function createPressTracker(): { - is: (id: string) => boolean; - down: (id: string | null) => void; - release: () => void; -} { - const [pressed, setPressed] = createSignal(null); - let linger = 0; - onFrame(() => { - if (linger > 0 && --linger === 0) setPressed(null); - }); - return { - is: (id) => pressed() === id, - down: (id) => { - linger = 0; - setPressed(id); - }, - release: () => { - if (pressed() !== null) linger = PRESS_LINGER_FRAMES; - }, - }; -} - -const PRESS_LINGER_FRAMES = 5; - -export function Deck(props: { store: ShellStore }) { - const store = props.store; - const keyPress = createKeyPress(); - const press = createPressTracker(); - - const bodyMode = (): BodyMode => { - if (store.launcherOpen()) return "launcher"; - if (store.layer() !== "plain") return "chords"; - if (store.kbVisible()) return "keyboard"; - return "map"; - }; - const lHeld = () => store.layer() === "super" || store.layer() === "ws"; - const rHeld = () => store.layer() === "shift" || store.layer() === "ws"; - - // ---- touch --------------------------------------------------------------- - - let pending: { id: number } | null = null; - let splitHandle: ReturnType = null; - let columnHandle: ReturnType = null; - let panning = false; - - /** Which painted target a point is on, for the pressed look. */ - const targetAt = (x: number, y: number): string | null => { - if (y < STRIP_H) { - if (x < PILL_W) return "pill:L"; - if (x >= R_PILL_X) return "pill:R"; - if (x >= BADGE_X && x < BADGE_X + BADGE_W) return "badge:layout"; - const tab = tabAt(x); - return tab === null ? null : `tab:${tab}`; - } - if (y >= DOCK_Y) { - const index = Math.floor((x - DOCK_X) / DOCK_CELL); - return x >= DOCK_X && index >= 0 && index < APPS.length ? `dock:${index}` : null; - } - switch (bodyMode()) { - case "launcher": { - const col = Math.floor((x - LAUNCH_X) / LAUNCH_W); - const row = Math.floor((y - LAUNCH_Y) / LAUNCH_H); - if (x < LAUNCH_X || col < 0 || col >= LAUNCH_COLS || row < 0 || row > 1) return null; - const index = row * LAUNCH_COLS + col; - return index < APPS.length ? `launch:${index}` : null; - } - case "chords": { - const row = Math.floor((y - CHORD_ROWS_Y) / CHORD_ROW_H); - if (row < 0 || row > 3) return null; - return chordActionAt(x, y) === null ? null : `chord:${x < CHORD_COL_SPLIT ? "l" : "r"}${row}`; - } - case "map": { - for (const button of GUTTER_BUTTONS) { - if (within(x, y, { x: button.x, y: button.y, w: GUTTER_BTN_W, h: GUTTER_BTN_H })) { - return `gutter:${button.act}`; - } - } - return null; - } - default: - return null; - } - }; - - const reset = () => { - pending = null; - splitHandle = null; - columnHandle = null; - panning = false; - press.release(); - store.setDrag(null); - store.setClosing(null); - }; - - const tabAt = (x: number): number | null => { - if (x < TABS_X || x >= TABS_X + TAB_W * WORKSPACES) return null; - return 1 + Math.floor((x - TABS_X) / TAB_W); - }; - - const runGutter = (button: GutterButton) => { - switch (button.act) { - case "kbd": - store.toggleKeyboard(); - break; - case "wall": - store.run("wallpaper"); - break; - case "keys": - store.run("keys"); - break; - case "bar": - store.run("bar"); - break; - } - }; - - const chordActionAt = (x: number, y: number): ActionId | null => { - const row = Math.floor((y - CHORD_ROWS_Y) / CHORD_ROW_H); - if (row < 0 || row > 3) return null; - const layer = store.layer(); - let button: number | null = null; - if (x < CHORD_COL_SPLIT) { - if (row === 2) button = BTN.START; - if (row === 3) button = BTN.SELECT; - } else { - button = FACE_ORDER[row]; - } - if (button === null) return null; - return chordFor(layer, button)?.action ?? null; - }; - - const tapStrip = (x: number) => { - if (x < PILL_W) { - store.setLatchL(!store.latchL()); - return; - } - if (x >= R_PILL_X) { - store.setLatchR(!store.latchR()); - return; - } - if (x >= BADGE_X && x < BADGE_X + BADGE_W) { - store.toggleLayout(); - return; - } - const tab = tabAt(x); - if (tab !== null) store.switchWs(tab); - }; - - const tapDock = (x: number) => { - const index = Math.floor((x - DOCK_X) / DOCK_CELL); - if (x >= DOCK_X && index >= 0 && index < APPS.length) store.open(APPS[index]); - }; - - const tapBody = (x: number, y: number) => { - switch (bodyMode()) { - case "launcher": { - const col = Math.floor((x - LAUNCH_X) / LAUNCH_W); - const row = Math.floor((y - LAUNCH_Y) / LAUNCH_H); - if (x < LAUNCH_X || col < 0 || col >= LAUNCH_COLS || row < 0 || row > 1) return; - const index = row * LAUNCH_COLS + col; - if (index < APPS.length) { - store.open(APPS[index]); - store.setLauncherOpen(false); - } - return; - } - case "chords": { - const action = chordActionAt(x, y); - if (action) { - store.run(action); - store.setLatchL(false); - store.setLatchR(false); - } - return; - } - case "keyboard": { - const hit = keyboardHit(x, y, store.kbLayer()); - if (!hit) return; - keyPress.press(hit); - if ("ch" in hit.act) { - store.typeChar(hit.act.ch); - if (store.kbLayer() === "upper") store.setKbLayer("lower"); - } else if ("key" in hit.act) { - store.typeKey(hit.act.key); - } else if ("layer" in hit.act) { - store.setKbLayer(hit.act.layer); - } else { - store.setKbOpen(false); - } - return; - } - case "map": { - for (const button of GUTTER_BUTTONS) { - if (within(x, y, { x: button.x, y: button.y, w: GUTTER_BTN_W, h: GUTTER_BTN_H })) { - runGutter(button); - return; - } - } - if (within(x, y, MAP_RECT)) { - const id = store.wm.windowAt(toStage(x, y)); - if (id !== null) store.focusWin(id); - } - } - } - }; - - createGesture({ - surface: "auxiliary", - tapSlop: 6, - panSlop: 6, - longPressSeconds: CLOSE_HOLD_SECONDS, - onDown: (c) => { - pending = null; - press.down(targetAt(c.x, c.y)); - if (bodyMode() === "map" && within(c.x, c.y, MAP_RECT)) { - const id = store.wm.windowAt(toStage(c.x, c.y)); - if (id !== null) pending = { id }; - } - }, - onTap: (c) => { - pending = null; - press.release(); - if (c.y < STRIP_H) tapStrip(c.x); - else if (c.y >= DOCK_Y) tapDock(c.x); - else tapBody(c.x, c.y); - }, - onLongPress: (c) => { - press.down(null); - if (pending && bodyMode() === "map") { - store.setClosing({ id: pending.id, over: false }); - store.say(""); - } - pending = null; - void c; - }, - onPanStart: (c) => { - press.down(null); - if (store.closing() || bodyMode() !== "map") return; - const sp = toStage(c.x, c.y); - if (pending) { - store.setDrag({ id: pending.id, x: sp.x, y: sp.y, over: null, overWs: null }); - pending = null; - return; - } - if (!within(c.x, c.y, MAP_RECT)) return; - splitHandle = store.wm.splitAt(sp, 8); - if (splitHandle) return; - columnHandle = store.wm.columnEdgeAt(sp, 8); - if (columnHandle) return; - panning = store.wm.workspace().layout === "scrolling"; - }, - onPanMove: (c) => { - const closing = store.closing(); - if (closing) { - const over = c.y >= CLOSE_BAR_Y && c.y < CLOSE_BAR_Y + CLOSE_BAR_H; - if (over !== closing.over) store.setClosing({ id: closing.id, over }); - return; - } - const drag = store.drag(); - const sp = toStage(c.x, c.y); - if (drag) { - const overId = within(c.x, c.y, MAP_RECT) ? store.wm.windowAt(sp) : null; - store.setDrag({ - id: drag.id, - x: sp.x, - y: sp.y, - over: overId !== null && overId !== drag.id ? overId : null, - overWs: c.y < STRIP_H ? tabAt(c.x) : null, - }); - return; - } - if (splitHandle) { - store.wm.dragSplit(splitHandle, sp); - store.bump(); - } else if (columnHandle) { - store.wm.dragColumnEdge(columnHandle, sp); - store.bump(); - } else if (panning) { - store.wm.scrollBy(-c.fdx / S); - store.bump(); - } - }, - onUp: (c) => { - const closing = store.closing(); - if (closing) { - if (c.y >= CLOSE_BAR_Y && c.y < CLOSE_BAR_Y + CLOSE_BAR_H) store.close(closing.id); - reset(); - return; - } - const drag = store.drag(); - if (drag) { - if (drag.overWs !== null && drag.overWs !== store.wm.active) { - store.wm.moveToWs(drag.id, drag.overWs); - store.say(`moved to workspace ${drag.overWs}`); - store.bump(); - } else if (drag.over !== null) { - store.wm.swap(store.wm.workspace(), drag.id, drag.over); - store.bump(); - } - } - reset(); - }, - onCancel: () => reset(), - }); - - // ---- render ---------------------------------------------------------------- - - const hint = () => { - const toast = store.toast(); - if (toast) return toast; - if (store.drag()) return "drop on a window to swap · on a tab to move"; - if (store.wm.count() === 0) return "tap the dock to open a window"; - return LAYER_HINT.plain; - }; - - const closingTitle = () => { - const c = store.closing(); - return c ? store.windowOf(c.id)?.title ?? "" : ""; - }; - - const chordLeft = () => { - const layer = store.layer(); - const layout = store.layoutKind(); - const start = chordFor(layer, BTN.START)?.action; - const select = chordFor(layer, BTN.SELECT)?.action; - return [ - { badge: "dpad", label: dpadLabel(layer) }, - { badge: "pad", label: padLabel(layer, layout) }, - { badge: "START", label: start ? labelFor(start, layout) : "—" }, - { badge: "SELECT", label: select ? labelFor(select, layout) : "—" }, - ]; - }; - const chordRight = () => { - const layer = store.layer(); - const layout = store.layoutKind(); - return FACE_ORDER.map((button) => { - const chord = chordFor(layer, button); - return { badge: BUTTON_GLYPH[button], label: chord ? labelFor(chord.action, layout) : "—" }; - }); - }; - const latched = () => store.latchL() || store.latchR(); - - return ( - - {/* ---- workspace strip ---- */} - - - L - - - {(count, i) => ( - - 0 - ? "text-sm text-[#a9b1d6]" - : "text-sm text-[#414868]" - } - > - {String(i + 1)} - - 0}> - - - {() => } - - - - - - - - )} - - - {store.layoutKind()} - - - R - - - - {/* ---- body: minimap ---- */} - - - - - - - - - - - - - - - - - {(id) => { - const p = () => store.placementOf(id); - const focused = () => store.focusedId() === id; - const target = () => store.drag()?.over === id; - return ( - - - = 34 && p()!.rect.h * S >= 14}> - - {store.windowOf(id)?.title ?? ""} - - - - - ); - }} - - - {(d) => ( - - {store.windowOf(d().id)?.title ?? ""} - - )} - - - - {(button) => ( - - - {button.label} - - - )} - - - {hint()} - - 0}> - - × - - {store.closing()?.over ? "release to close" : "slide here to close"} - - {closingTitle()} - - - - - {/* ---- body: chord map ---- */} - - - - {LAYER_TITLE[store.layer() as Layer]} - - - {(row, i) => ( - - - - + - - - - - - - - - - {row().badge} - - - {row().label} - - )} - - - {(row, i) => ( - - - {row().badge} - - {row().label} - - )} - - - {latched() ? "tap a row, or press the button · tap L/R again to let go" : LAYER_HINT[store.layer()]} - - - - - {/* ---- body: launcher ---- */} - - - launch - - {(app, i) => ( - - - - - {app()} - {APP_BLURB[app()]} - - )} - - - d-pad picks · A opens · B or L+A closes - - - - - {/* ---- body: keyboard ---- */} - - - - - {/* ---- dock ---- */} - - - {(app, i) => { - const running = () => { - store.rev(); - for (const w of store.wm.windows.values()) if (w.app === app()) return true; - return false; - }; - return ( - - - - - - - - {app()} - - ); - }} - - - - ); -} - -export { BAR_H }; diff --git a/apps/pocket-shell/images.json b/apps/pocket-shell/images.json deleted file mode 100644 index 19cd27540..000000000 --- a/apps/pocket-shell/images.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "wall/road.png": { "psm": 0 }, - "wall/lake.png": { "psm": 0 }, - "wall/swirl.png": { "psm": 0 } -} diff --git a/apps/pocket-shell/keyboard.tsx b/apps/pocket-shell/keyboard.tsx deleted file mode 100644 index 8e14fd076..000000000 --- a/apps/pocket-shell/keyboard.tsx +++ /dev/null @@ -1,191 +0,0 @@ -// apps/pocket-shell/keyboard.tsx — the deck's touch keyboard, for term and -// notes. The framework Osk lays itself out against the PRIMARY viewport, so -// the 320 px auxiliary panel gets a hand-laid grid instead: 32 px columns, -// 30 px rows, hit by the deck's one gesture through `keyboardHit`. Shift is -// one-shot (the resistive panel has one contact); "123" latches the symbol -// layer until "abc". - -import { createSignal, Index } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { onFrame } from "@pocketjs/framework/lifecycle"; -import type { KbLayer, ShellStore } from "./store.ts"; - -export const KB_TOP = 24; -export const KB_BOTTOM = 200; -const ECHO_H = 26; -const ROWS_TOP = KB_TOP + ECHO_H + 6; -const KEY_H = 30; -const UNIT = 32; -const PRESS_FRAMES = 6; - -export type KeyAction = - | { ch: string } - | { key: "enter" | "backspace" | "space" | "tab" } - | { layer: KbLayer } - | { hide: true }; - -interface KeyDef { - label: string; - /** Width in 32 px units. */ - w: number; - act: KeyAction; - dark?: boolean; -} - -const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); - -const ROWS: Record = { - lower: [ - chars("qwertyuiop"), - chars("asdfghjkl"), - [ - { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, - ...chars("zxcvbnm"), - { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, - ], - [ - { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, - { label: ",", w: 1, act: { ch: "," } }, - { label: "space", w: 4, act: { key: "space" } }, - { label: ".", w: 1, act: { ch: "." } }, - { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, - ], - ], - upper: [ - chars("QWERTYUIOP"), - chars("ASDFGHJKL"), - [ - { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, - ...chars("ZXCVBNM"), - { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, - ], - [ - { label: "123", w: 1.5, act: { layer: "sym" }, dark: true }, - { label: "!", w: 1, act: { ch: "!" } }, - { label: "space", w: 4, act: { key: "space" } }, - { label: "?", w: 1, act: { ch: "?" } }, - { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, - ], - ], - sym: [ - chars("1234567890"), - chars("-/:;()&@\""), - [ - { label: "#+=", w: 1.5, act: { ch: "#" }, dark: true }, - ...chars(".,?!'*="), - { label: "del", w: 1.5, act: { key: "backspace" }, dark: true }, - ], - [ - { label: "abc", w: 1.5, act: { layer: "lower" }, dark: true }, - { label: "<", w: 1, act: { ch: "<" } }, - { label: "space", w: 4, act: { key: "space" } }, - { label: ">", w: 1, act: { ch: ">" } }, - { label: "enter", w: 2.5, act: { key: "enter" }, dark: true }, - ], - ], -}; - -/** Left offset that centres a row's total width on the 320 px panel. */ -function rowStart(row: KeyDef[]): number { - const total = row.reduce((sum, k) => sum + k.w, 0) * UNIT; - return Math.round((320 - total) / 2); -} - -export interface KeyHit { - act: KeyAction; - row: number; - index: number; -} - -export function keyboardHit(x: number, y: number, layer: KbLayer): KeyHit | null { - if (y >= KB_TOP && y < KB_TOP + ECHO_H) { - return x >= 320 - 52 ? { act: { hide: true }, row: -1, index: 0 } : null; - } - const row = Math.floor((y - ROWS_TOP) / KEY_H); - if (row < 0 || row >= 4) return null; - const keys = ROWS[layer][row]; - let left = rowStart(keys); - for (let index = 0; index < keys.length; index++) { - const w = keys[index].w * UNIT; - if (x >= left && x < left + w) return { act: keys[index].act, row, index }; - left += w; - } - return null; -} - -export function Keyboard(props: { store: ShellStore; pressed: () => KeyHit | null }) { - const store = props.store; - const echo = () => { - const id = store.focusedId(); - const state = id === null ? undefined : store.stateOf(id); - store.rev(); - if (!state) return ""; - if (state.kind === "term") return `❯ ${state.input}`; - if (state.kind === "notes") { - const lines = state.text.split("\n"); - return lines[lines.length - 1]; - } - return ""; - }; - const rows = () => ROWS[store.kbLayer()]; - return ( - - - {echo()} - - - hide - - - {(row, r) => ( - - {(key, i) => { - const left = () => rowStart(row()) + row().slice(0, i).reduce((sum, k) => sum + k.w, 0) * UNIT; - const hot = () => { - const p = props.pressed(); - return p !== null && p.row === r && p.index === i; - }; - return ( - - - {key().label} - - - ); - }} - - )} - - - ); -} - -/** Pressed-key highlight that lasts PRESS_FRAMES frames. */ -export function createKeyPress(): { pressed: () => KeyHit | null; press: (hit: KeyHit) => void } { - const [pressed, setPressed] = createSignal(null); - let left = 0; - onFrame(() => { - if (left > 0 && --left === 0) setPressed(null); - }); - return { - pressed, - press: (hit) => { - setPressed(hit); - left = PRESS_FRAMES; - }, - }; -} diff --git a/apps/pocket-shell/main.tsx b/apps/pocket-shell/main.tsx deleted file mode 100644 index 107175258..000000000 --- a/apps/pocket-shell/main.tsx +++ /dev/null @@ -1,5 +0,0 @@ -// @title PocketJS: Pocket Shell -import PocketShell from "./app.tsx"; -import { mount } from "@pocketjs/framework/solid"; - -mount(() => ); diff --git a/apps/pocket-shell/pocket.json b/apps/pocket-shell/pocket.json deleted file mode 100644 index d5f474849..000000000 --- a/apps/pocket-shell/pocket.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "$schema": "https://pocketjs.dev/schema/pocket-2.json", - "pocket": 2, - "id": "dev.pocket-stack.pocket-shell", - "name": "pocketjs-pocket-shell", - "title": "PocketJS: Pocket Shell", - "version": "0.1.0", - "engine": { - "capabilities": { - "requires": [ - "text.glyphs.baked", - "input.buttons", - "display.auxiliary", - "input.touch.auxiliary" - ], - "enhances": [ - "input.analog.left" - ] - } - }, - "app": { - "entry": "apps/pocket-shell/main.tsx", - "output": "pocketshell-main", - "framework": "solid", - "surfaces": { - "auxiliary": { - "fixed": { - "logical": [320, 240], - "presentation": "native" - } - } - }, - "viewport": { - "fixed": { - "logical": [400, 240], - "presentation": "native" - } - } - } -} diff --git a/apps/pocket-shell/shell.ts b/apps/pocket-shell/shell.ts deleted file mode 100644 index 0dd2e2ad7..000000000 --- a/apps/pocket-shell/shell.ts +++ /dev/null @@ -1,267 +0,0 @@ -// apps/pocket-shell/shell.ts — pocketsh, the terminal applet's command -// interpreter. It is to Pocket Shell what hyprctl is to Hyprland: every -// window-manager verb the chords reach is also a command here, so the same -// state can be driven from a keyboard. Pure: the interpreter takes a -// ShellApi and returns the lines to print, and is unit-tested against a fake. - -import type { LayoutKind } from "./wm.ts"; - -export interface ShellWindow { - id: number; - app: string; - title: string; - ws: number; - focused: boolean; -} - -export interface ShellApi { - apps(): readonly string[]; - windows(): ShellWindow[]; - workspace(): number; - layout(): LayoutKind; - wallpaper(): string; - uptimeSeconds(): number; - now(): CivilTime; - host(): string; - open(app: string): number | null; - close(id?: number): boolean; - focus(id: number): boolean; - switchWs(id: number): boolean; - setLayout(layout: LayoutKind): void; - nextWallpaper(): string; - timezone(): number; - setTimezone(minutes: number): void; - keys(): { title: string; rows: { keys: string; what: string }[] }[]; -} - -export const COMMANDS = [ - "help", - "ls", - "open", - "close", - "focus", - "ws", - "layout", - "wall", - "tz", - "keys", - "fetch", - "date", - "uptime", - "echo", - "clear", -] as const; - -export type Command = (typeof COMMANDS)[number]; - -/** Command names starting with `partial`, for Tab completion. */ -export function complete(partial: string): string[] { - return COMMANDS.filter((c) => c.startsWith(partial)); -} - -export const CLEAR = "\u0000clear"; - -const pad2 = (n: number): string => String(n).padStart(2, "0"); - -const DAYS = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; -const MONTHS = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - -export interface CivilTime { - year: number; - /** 1-12. */ - month: number; - /** 1-31. */ - day: number; - /** 0 = Sunday. */ - weekday: number; - hour: number; - minute: number; - second: number; -} - -/** - * Civil time from an epoch, by arithmetic. - * - * The 3DS RTC's epoch is reliable — `Date.now()` is monotonic and correct on - * hardware — but QuickJS's BREAKDOWN of it is not: `getHours()` intermittently - * disagreed with the epoch by whole hours, applying the timezone on some reads - * and not others. Two adjacent frames therefore rendered two different times - * and the clock appeared to flicker. Everything this app displays is derived - * here instead, so a wrong reading cannot reach the screen. - * - * Days-to-civil is Howard Hinnant's shift-to-March algorithm, which needs no - * lookup table and no leap-year special cases. - */ -export function civilFromEpoch(epochMs: number, offsetMinutes = 0): CivilTime { - const total = Math.floor(epochMs / 1000) + offsetMinutes * 60; - let days = Math.floor(total / 86400); - const secondOfDay = total - days * 86400; - const weekday = (((days + 4) % 7) + 7) % 7; // 1970-01-01 was a Thursday - days += 719468; // shift the epoch to 0000-03-01 - const era = Math.floor(days / 146097); - const dayOfEra = days - era * 146097; - const yearOfEra = Math.floor( - (dayOfEra - Math.floor(dayOfEra / 1460) + Math.floor(dayOfEra / 36524) - Math.floor(dayOfEra / 146096)) / 365, - ); - const dayOfYear = dayOfEra - (365 * yearOfEra + Math.floor(yearOfEra / 4) - Math.floor(yearOfEra / 100)); - const marchMonth = Math.floor((5 * dayOfYear + 2) / 153); - const day = dayOfYear - Math.floor((153 * marchMonth + 2) / 5) + 1; - const month = marchMonth < 10 ? marchMonth + 3 : marchMonth - 9; - const year = yearOfEra + era * 400 + (month <= 2 ? 1 : 0); - return { - year, - month, - day, - weekday, - hour: Math.floor(secondOfDay / 3600), - minute: Math.floor((secondOfDay % 3600) / 60), - second: secondOfDay % 60, - }; -} - -/** - * The device's UTC offset, read ONCE and sanity-checked. - * - * A single bad read would otherwise be frozen in, so the value is accepted - * only if it looks like a real zone: a whole quarter-hour within ±14 h. - * Anything else means the platform's breakdown is not to be trusted at all - * and the shell shows UTC. - */ -export function detectOffsetMinutes(epochMs: number, local: Date): number { - const utc = civilFromEpoch(epochMs, 0); - let delta = local.getHours() * 60 + local.getMinutes() - (utc.hour * 60 + utc.minute); - if (delta > 720) delta -= 1440; - if (delta < -720) delta += 1440; - if (Math.abs(delta) > 14 * 60 || delta % 15 !== 0) return 0; - return delta; -} - -/** "+08:00" / "-05:30" / "" for UTC itself. */ -export function formatOffset(minutes: number): string { - if (minutes === 0) return ""; - const sign = minutes < 0 ? "-" : "+"; - const abs = Math.abs(minutes); - return `${sign}${pad2(Math.floor(abs / 60))}:${pad2(abs % 60)}`; -} - -/** `+8`, `8`, `-5:30`, `+05:45`, `0` — a whole quarter-hour within ±14 h. */ -export function parseOffset(text: string): number | null { - const m = /^([+-]?)(\d{1,2})(?::(\d{2}))?$/.exec(text.trim()); - if (!m) return null; - const minutes = Number(m[2]) * 60 + Number(m[3] ?? 0); - const signed = m[1] === "-" ? -minutes : minutes; - if (Math.abs(signed) > 14 * 60 || signed % 15 !== 0) return null; - return signed; -} - -export function formatClock(time: CivilTime, hour12 = false): string { - const shown = hour12 ? time.hour % 12 || 12 : time.hour; - return `${pad2(shown)}:${pad2(time.minute)}`; -} - -export function formatDate(time: CivilTime): string { - return `${DAYS[time.weekday]} ${MONTHS[time.month - 1]} ${time.day} ${time.year}`; -} - -export function formatUptime(seconds: number): string { - const s = Math.max(0, Math.floor(seconds)); - const h = Math.floor(s / 3600); - const m = Math.floor((s % 3600) / 60); - return h > 0 ? `${h}h ${pad2(m)}m ${pad2(s % 60)}s` : `${m}m ${pad2(s % 60)}s`; -} - -/** Run one line. Returns output lines; CLEAR as the only line clears the - * scrollback. */ -export function run(line: string, api: ShellApi): string[] { - const words = line.trim().split(/\s+/).filter(Boolean); - if (words.length === 0) return []; - const [name, ...args] = words; - switch (name) { - case "help": - return [ - "pocketsh — the shell's own hyprctl", - " ls windows on this workspace", - " open " + api.apps().join(" "), - " close [id] close focused or #id", - " focus focus window #id", - " ws [1-5] show or switch workspace", - " layout [name] dwindle | scrolling", - " wall [next] wallpaper", - " tz [+8|-5:30] clock offset from UTC", - " keys the chord table", - " fetch date uptime echo clear", - ]; - case "ls": { - const list = api.windows().filter((w) => w.ws === api.workspace()); - if (list.length === 0) return ["(empty workspace)"]; - return list.map((w) => `${w.focused ? "*" : " "} #${w.id} ${w.title}`); - } - case "open": { - const app = args[0]; - if (!app) return ["open: which app? " + api.apps().join(" ")]; - const id = api.open(app); - return id === null ? [`open: no app named '${app}'`] : [`opened ${app} as #${id}`]; - } - case "close": { - if (args[0] !== undefined) { - const id = Number(args[0].replace("#", "")); - if (!Number.isInteger(id)) return [`close: bad id '${args[0]}'`]; - return api.close(id) ? [`closed #${id}`] : [`close: no window #${id}`]; - } - return api.close() ? ["closed"] : ["close: nothing focused"]; - } - case "focus": { - const id = Number((args[0] ?? "").replace("#", "")); - if (!Number.isInteger(id)) return ["focus: which id?"]; - return api.focus(id) ? [] : [`focus: no window #${id}`]; - } - case "ws": { - if (args[0] === undefined) return [`workspace ${api.workspace()} · ${api.layout()}`]; - const id = Number(args[0]); - return api.switchWs(id) ? [] : [`ws: workspaces are 1-5`]; - } - case "layout": { - if (args[0] === undefined) return [api.layout()]; - if (args[0] !== "dwindle" && args[0] !== "scrolling") return ["layout: dwindle | scrolling"]; - api.setLayout(args[0]); - return [`workspace ${api.workspace()} is now ${args[0]}`]; - } - case "tz": { - // The console's own breakdown of the epoch is not trustworthy (see - // civilFromEpoch), so the offset is the operator's to state. - if (args[0] === undefined) return [`UTC${formatOffset(api.timezone())}`]; - const minutes = parseOffset(args[0]); - if (minutes === null) return ["tz: try +8, -5:30, or 0"]; - api.setTimezone(minutes); - return [`clock is UTC${formatOffset(minutes)}`]; - } - case "wall": - if (args[0] === "next") return [`wallpaper: ${api.nextWallpaper()}`]; - return [`wallpaper: ${api.wallpaper()} (wall next)`]; - case "keys": - return api - .keys() - .flatMap((group) => [group.title, ...group.rows.map((r) => ` ${r.keys.padEnd(12)} ${r.what}`)]); - case "fetch": { - const windows = api.windows(); - return [ - " ___ pocket-shell @ " + api.host(), - " / \\ ws " + `${api.workspace()} · ${api.layout()}`, - "| o | windows " + String(windows.length), - " \\___/ uptime " + formatUptime(api.uptimeSeconds()), - " | | theme tokyo-night", - " wall " + api.wallpaper(), - ]; - } - case "date": - return [`${formatDate(api.now())} ${formatClock(api.now())}`]; - case "uptime": - return [formatUptime(api.uptimeSeconds())]; - case "echo": - return [args.join(" ")]; - case "clear": - return [CLEAR]; - default: - return [`pocketsh: ${name}: command not found`]; - } -} diff --git a/apps/pocket-shell/stage.tsx b/apps/pocket-shell/stage.tsx deleted file mode 100644 index 60efce8f4..000000000 --- a/apps/pocket-shell/stage.tsx +++ /dev/null @@ -1,203 +0,0 @@ -// apps/pocket-shell/stage.tsx — the top screen: wallpaper, tiled windows, -// the bar, and the key sheet. Window geometry comes from the store's -// animated rects; the applet inside sizes from the settled placement so text -// does not reflow every frame of a transition. - -import { For, Index, Show } from "solid-js"; -import { Image, Text, View } from "@pocketjs/framework/components"; -import { keySheet, LAYER_TITLE } from "./chords.ts"; -import { formatClock } from "./shell.ts"; -import { Applet, type SheetLine } from "./applets.tsx"; -import type { ShellStore } from "./store.ts"; -import { BAR_H, BORDER } from "./wm.ts"; - -const HEADER_H = 14; - -/** The three cooked wallpapers. Only the current one is mounted. */ -function Wallpaper(props: { store: ShellStore }) { - return ( - <> - - - - - - - - - - - ); -} - -function Win(props: { id: number; store: ShellStore }) { - const store = props.store; - const win = () => store.windowOf(props.id); - const focused = () => store.focusedId() === props.id; - const geometry = () => { - const a = store.animOf(props.id); - return { insetL: a.cur.x, insetT: a.cur.y, width: a.cur.w, height: a.cur.h, opacity: a.alpha }; - }; - const contentW = () => Math.max(0, (store.placementOf(props.id)?.rect.w ?? 0) - 2 * BORDER); - const contentH = () => Math.max(0, (store.placementOf(props.id)?.rect.h ?? 0) - 2 * BORDER - HEADER_H); - return ( - - - - - - {win()?.title ?? ""} - - {`#${props.id}`} - - - - {(w) => } - - - - - ); -} - -function Bar(props: { store: ShellStore }) { - const store = props.store; - const title = () => { - const id = store.focusedId(); - return id === null ? "" : store.windowOf(id)?.title ?? ""; - }; - return ( - - - {(count, i) => ( - 0 - ? "absolute top-0 text-xs text-[#a9b1d6]" - : "absolute top-0 text-xs text-[#414868]" - } - style={{ insetL: 6 + i * 12 }} - > - {String(i + 1)} - - )} - - {title()} - - {formatClock(store.now())} - - - {LAYER_TITLE[store.layer()]} - - {store.layoutKind()} - - ); -} - -/** SUPER+K: the whole chord table over the stage. Four groups in two - * columns — L and "always" on the left, R and L+R on the right — with every - * cell clipped to its column so a long label cannot run into its neighbour - * or off the panel. */ -const SHEET_COL_W = 184; -const SHEET_KEYS_W = 80; -const SHEET_ROW_H = 12; - -function SheetColumn(props: { store: ShellStore; x: number; groups: number[] }) { - const lines = () => { - const all = keySheet(props.store.layoutKind()); - const out: SheetLine[] = []; - for (const index of props.groups) { - const group = all[index]; - out.push({ kind: "title", keys: group.title, what: "" }); - for (const row of group.rows) out.push({ kind: "row", keys: row.keys, what: row.what }); - out.push({ kind: "gap", keys: "", what: "" }); - } - return out; - }; - return ( - - {(line, i) => ( - - - {line().keys} - - - - {line().keys} - - - {line().what} - - - - )} - - ); -} - -function KeySheet(props: { store: ShellStore }) { - return ( - - keys - every chord · B closes - {/* keySheet() returns L, R, L+R, always — pair the long groups with the short. */} - - - - ); -} - -export function Stage(props: { store: ShellStore }) { - const store = props.store; - return ( - - - - {(id) => } - - {(ghost) => ( - - )} - - - - - - {`workspace ${store.active()} is empty · hold L and press A, or tap the dock`} - - - - - - - - - - - ); -} - -export { BAR_H }; diff --git a/apps/pocket-shell/store.ts b/apps/pocket-shell/store.ts deleted file mode 100644 index 65e431169..000000000 --- a/apps/pocket-shell/store.ts +++ /dev/null @@ -1,752 +0,0 @@ -// apps/pocket-shell/store.ts — the shell's live state: the window manager -// wrapped in signals, the per-frame input dispatcher that turns shoulder -// chords into actions, window geometry animation, and the applet states the -// windows render. Everything the two screens show reads from here. -// -// Reactivity is coarse on purpose. `rev` bumps after every structural change -// (open, close, focus, layout) and `frame` bumps only on frames where -// something is still moving, so an idle shell re-evaluates nothing. - -import { createMemo, createSignal } from "solid-js"; -import { BTN } from "@pocketjs/framework/input"; -import { analogX, analogY, onFrame } from "@pocketjs/framework/lifecycle"; -import { getOps } from "@pocketjs/framework"; -import { chordsOf, keySheet, layerOf, type ActionId, type Layer } from "./chords.ts"; -import { CLEAR, civilFromEpoch, complete, detectOffsetMinutes, run as runShell, type CivilTime, type ShellApi } from "./shell.ts"; -import { WindowManager, WORKSPACES, type Placement, type Rect } from "./wm.ts"; - -export type AppId = "term" | "clock" | "notes" | "keys" | "stats" | "about"; -export const APPS: readonly AppId[] = ["term", "clock", "notes", "keys", "stats", "about"]; -/** Short enough for the launcher's 96 px card. */ -export const APP_BLURB: Record = { - term: "pocketsh", - clock: "time and date", - notes: "scratch pad", - keys: "chord table", - stats: "frames, host", - about: "what this is", -}; - -export const WALLPAPERS = ["road", "lake", "swirl"] as const; -export type Wallpaper = (typeof WALLPAPERS)[number]; - -export const isTextApp = (app: AppId | undefined): boolean => app === "term" || app === "notes"; - -export interface TermState { - kind: "term"; - lines: string[]; - input: string; - history: string[]; - /** history.length when not browsing. */ - histIdx: number; - /** Lines scrolled up from the bottom. */ - scroll: number; -} -export interface NotesState { - kind: "notes"; - text: string; - scroll: number; -} -export interface ClockState { - kind: "clock"; - hour12: boolean; -} -export interface KeysState { - kind: "keys"; - scroll: number; -} -export interface PlainState { - kind: "stats" | "about"; -} -export type AppletState = TermState | NotesState | ClockState | KeysState | PlainState; - -export interface Anim { - cur: Rect; - alpha: number; -} - -export interface Ghost { - rect: Rect; - alpha: number; -} - -export interface Drag { - id: number; - /** Finger position in stage coordinates. */ - x: number; - y: number; - /** A window the finger is over (swap target). */ - over: number | null; - /** A workspace tab the finger is over (move target). */ - overWs: number | null; -} - -export type KbLayer = "lower" | "upper" | "sym"; - -const PROMPT = "❯ "; -const MAX_LINES = 200; -const TOAST_FRAMES = 100; -const EASE = 0.35; -const SLIDE_PX = 48; -const MAX_LAUNCHER_INDEX = APPS.length - 1; -const LAUNCHER_COLS = 3; -const DEAD_ZONE = 0.25; -const RESIZE_PX = 3; -const SCROLL_PX = 6; - -function initialState(app: AppId): AppletState { - switch (app) { - case "term": - return { - kind: "term", - lines: ["pocketsh — type help, or hold L", ""], - input: "", - history: [], - histIdx: 0, - scroll: 0, - }; - case "notes": - return { kind: "notes", text: "", scroll: 0 }; - case "clock": - return { kind: "clock", hour12: false }; - case "keys": - return { kind: "keys", scroll: 0 }; - case "stats": - case "about": - return { kind: app }; - } -} - -const lerp = (a: number, b: number): number => { - const next = a + (b - a) * EASE; - return Math.abs(b - next) < 0.5 ? b : next; -}; - -const shrink = (r: Rect, by: number): Rect => ({ - x: r.x + r.w * by * 0.5, - y: r.y + r.h * by * 0.5, - w: r.w * (1 - by), - h: r.h * (1 - by), -}); - -export type ShellStore = ReturnType; - -export function createShellStore() { - const wm = new WindowManager(); - const applets = new Map(); - const anims = new Map(); - let ghosts: Ghost[] = []; - - // The RTC's epoch is trustworthy; QuickJS's breakdown of it on this device - // is not (see civilFromEpoch). Read the zone once, then do the arithmetic. - const detectedOffset = (() => { - try { - const ms = Date.now(); - return detectOffsetMinutes(ms, new Date(ms)); - } catch { - return 0; - } - })(); - - const [offsetMinutes, setOffsetMinutes] = createSignal(detectedOffset); - const [rev, setRev] = createSignal(0); - const bump = () => setRev((r) => r + 1); - const [frame, setFrame] = createSignal(0); - const [epochSecond, setEpochSecond] = createSignal(0); - const [layer, setLayer] = createSignal("plain"); - const [latchL, setLatchL] = createSignal(false); - const [latchR, setLatchR] = createSignal(false); - const [launcherOpen, setLauncherOpen] = createSignal(false); - const [launcherIndex, setLauncherIndex] = createSignal(0); - const [keysOpen, setKeysOpen] = createSignal(false); - const [kbOpen, setKbOpen] = createSignal(false); - const [kbLayer, setKbLayer] = createSignal("lower"); - const [wallpaper, setWallpaper] = createSignal("road"); - const [toast, setToast] = createSignal(""); - const [drag, setDrag] = createSignal(null); - const [closing, setClosing] = createSignal<{ id: number; over: boolean } | null>(null); - const [closeAnim, setCloseAnim] = createSignal(0); - const [fps, setFps] = createSignal(0); - - let frames = 0; - let toastFrames = 0; - let slide = 0; - let prevButtons = 0; - let lastSecond = -1; - let fpsFrames = 0; - let fpsStamp = 0; - - // ---- derived ----------------------------------------------------------------- - - const active = createMemo(() => { - rev(); - return wm.active; - }); - // The active Workspace is one mutable object, so identity never changes: - // opt out of the memo's equality check or nothing downstream re-reads it. - const workspace = createMemo( - () => { - rev(); - return wm.workspace(); - }, - undefined, - { equals: false }, - ); - const placements = createMemo(() => { - rev(); - return wm.placements(); - }); - const order = createMemo(() => { - rev(); - return wm.order(); - }); - const focusedId = createMemo(() => { - rev(); - return wm.workspace().focus; - }); - const focusedApp = createMemo(() => { - const id = focusedId(); - return id === null ? undefined : wm.windows.get(id)?.app; - }); - const counts = createMemo(() => { - rev(); - return wm.workspaces.map((ws) => wm.count(ws)); - }); - const layoutKind = createMemo(() => workspace().layout); - const barVisible = createMemo(() => { - rev(); - return wm.barVisible; - }); - const kbVisible = createMemo(() => kbOpen() && isTextApp(focusedApp())); - const now = createMemo(() => civilFromEpoch(epochSecond() * 1000, offsetMinutes())); - - const placementOf = (id: number): Placement | undefined => placements().find((p) => p.id === id); - const windowOf = (id: number) => wm.windows.get(id); - const stateOf = (id: number): AppletState | undefined => applets.get(id); - /** Animated geometry for the stage; snaps to the target when unknown. */ - const animOf = (id: number): Anim => { - frame(); - const anim = anims.get(id); - if (anim) return anim; - const target = wm.placement(id)?.rect ?? { x: 0, y: 0, w: 0, h: 0 }; - return { cur: target, alpha: 1 }; - }; - const ghostList = (): Ghost[] => { - frame(); - return ghosts; - }; - const slideOffset = (): number => { - frame(); - return slide; - }; - const uptimeSeconds = (): number => frames / 60; - const frameCount = (): number => { - frame(); - return frames; - }; - - // ---- mutations ----------------------------------------------------------------- - - const say = (message: string) => { - setToast(message); - toastFrames = TOAST_FRAMES; - }; - - const open = (app: AppId, wsId: number = wm.active): number => { - const id = wm.open(app, wsId); - applets.set(id, initialState(app)); - const target = wm.placement(id)?.rect; - if (target) anims.set(id, { cur: shrink(target, 0.12), alpha: 0 }); - bump(); - return id; - }; - - const close = (id: number | null = wm.workspace().focus): boolean => { - if (id === null) return false; - const anim = anims.get(id); - const win = wm.windows.get(id); - const onStage = win?.ws === wm.active; - if (!wm.close(id)) return false; - if (anim && onStage) ghosts = [...ghosts, { rect: anim.cur, alpha: anim.alpha }]; - anims.delete(id); - applets.delete(id); - bump(); - return true; - }; - - const focusWin = (id: number) => { - wm.focusWin(id); - bump(); - }; - - const switchWs = (id: number) => { - if (id < 1 || id > WORKSPACES || id === wm.active) return; - slide = (id > wm.active ? 1 : -1) * SLIDE_PX; - wm.switchWs(id); - snapWorkspace(); - say(`workspace ${id}`); - bump(); - }; - - /** Windows arriving on stage start from their target, offset by the slide. */ - const snapWorkspace = () => { - for (const p of wm.placements()) { - anims.set(p.id, { cur: { ...p.rect, x: p.rect.x + slide }, alpha: p.hidden ? 0 : 1 }); - } - }; - - const toggleLayout = () => { - const kind = wm.toggleLayout(); - say(`layout: ${kind}`); - bump(); - }; - - const nextWallpaper = (): Wallpaper => { - const next = WALLPAPERS[(WALLPAPERS.indexOf(wallpaper()) + 1) % WALLPAPERS.length]; - setWallpaper(next); - return next; - }; - - const toggleKeyboard = () => { - if (!isTextApp(focusedApp())) { - say("the keyboard types into term or notes"); - return; - } - setKbOpen(!kbOpen()); - }; - - const run = (action: ActionId): void => { - switch (action) { - case "focus.left": - case "focus.right": - case "focus.up": - case "focus.down": { - const dir = action.slice(6) as "left" | "right" | "up" | "down"; - if (!wm.focusDir(dir)) say(wm.count() === 0 ? "empty workspace — L+A launches" : `nothing ${dir}`); - break; - } - case "swap.left": - case "swap.right": - case "swap.up": - case "swap.down": { - const dir = action.slice(5) as "left" | "right" | "up" | "down"; - if (!wm.swapDir(dir)) say(`nothing to swap ${dir}`); - break; - } - case "ws.prev": - case "ws.next": { - const next = wm.active + (action === "ws.next" ? 1 : -1); - if (next < 1 || next > WORKSPACES) say(`workspace ${wm.active} is the ${next < 1 ? "first" : "last"}`); - else switchWs(next); - return; - } - case "carry.prev": - case "carry.next": { - const delta = action === "carry.next" ? 1 : -1; - const from = wm.active; - if (wm.carryWs(delta)) { - slide = delta * SLIDE_PX; - snapWorkspace(); - say(`carried to workspace ${wm.active}`); - } else { - say(wm.workspace().focus === null ? "nothing to carry" : `workspace ${from} is the ${delta < 0 ? "first" : "last"}`); - } - break; - } - case "launcher": - setLauncherOpen(!launcherOpen()); - setKeysOpen(false); - return; - case "close": - if (!close()) say("nothing to close"); - return; - case "fullscreen": - if (!wm.toggleFullscreen("full")) say("nothing to fill the screen with"); - break; - case "maximize": - if (!wm.toggleFullscreen("max")) say("nothing to maximize"); - break; - case "split": - if (wm.workspace().layout === "dwindle") { - if (!wm.toggleSplit()) say("a split needs two windows"); - } else if (!wm.cycleColumnWidth()) say("no column focused"); - break; - case "swapsplit": - if (wm.workspace().layout === "dwindle") { - if (!wm.swapSplit()) say("a split needs two windows"); - } else if (!wm.consumeOrExpel()) say("nothing to stack with"); - break; - case "layout": - toggleLayout(); - return; - case "keys": - setKeysOpen(!keysOpen()); - setLauncherOpen(false); - return; - case "another": { - const app = focusedApp(); - if (app) open(app); - else say("focus a window to open another of it"); - return; - } - case "reopen": { - const id = wm.reopen(); - if (id === null) say("nothing to reopen"); - else { - applets.set(id, initialState(wm.windows.get(id)!.app)); - const target = wm.placement(id)?.rect; - if (target) anims.set(id, { cur: shrink(target, 0.12), alpha: 0 }); - } - break; - } - case "wallpaper": - say(`wallpaper: ${nextWallpaper()}`); - return; - case "bar": - wm.toggleBar(); - break; - } - bump(); - }; - - // ---- text input ---------------------------------------------------------------- - - const focusedText = (): TermState | NotesState | null => { - const id = wm.workspace().focus; - const state = id === null ? undefined : applets.get(id); - return state && (state.kind === "term" || state.kind === "notes") ? state : null; - }; - - const shellApi: ShellApi = { - apps: () => APPS, - windows: () => - [...wm.windows.values()].map((w) => ({ - id: w.id, - app: w.app, - title: w.title, - ws: w.ws, - focused: wm.workspace(w.ws).focus === w.id, - })), - workspace: () => wm.active, - layout: () => wm.workspace().layout, - wallpaper: () => wallpaper(), - uptimeSeconds, - now: () => civilFromEpoch(Date.now(), offsetMinutes()), - host: () => getOps().__host ?? "3ds", - open: (app) => (APPS.includes(app as AppId) ? open(app as AppId) : null), - close: (id) => close(id ?? wm.workspace().focus), - focus: (id) => { - if (!wm.windows.has(id)) return false; - focusWin(id); - return true; - }, - switchWs: (id) => { - if (!Number.isInteger(id) || id < 1 || id > WORKSPACES) return false; - switchWs(id); - return true; - }, - setLayout: (kind) => { - if (wm.workspace().layout !== kind) toggleLayout(); - }, - nextWallpaper, - timezone: () => offsetMinutes(), - setTimezone: (minutes) => setOffsetMinutes(minutes), - keys: () => keySheet(wm.workspace().layout), - }; - - const termSubmit = (term: TermState) => { - const line = term.input; - term.lines.push(PROMPT + line); - const out = runShell(line, shellApi); - if (out.length === 1 && out[0] === CLEAR) term.lines = []; - else term.lines.push(...out); - if (term.lines.length > MAX_LINES) term.lines.splice(0, term.lines.length - MAX_LINES); - if (line.trim()) term.history.push(line); - term.histIdx = term.history.length; - term.input = ""; - term.scroll = 0; - }; - - const termComplete = (term: TermState) => { - const word = term.input.trimStart(); - if (word.includes(" ")) return; - const matches = complete(word); - if (matches.length === 1) term.input = matches[0] + " "; - else if (matches.length > 1) term.lines.push(matches.join(" ")); - }; - - const termHistory = (term: TermState, delta: number) => { - const next = Math.max(0, Math.min(term.history.length, term.histIdx + delta)); - term.histIdx = next; - term.input = next === term.history.length ? "" : term.history[next]; - }; - - /** A character from the deck keyboard, into whichever text applet has focus. */ - const typeChar = (ch: string) => { - const state = focusedText(); - if (!state) return; - if (state.kind === "term") state.input += ch; - else state.text += ch; - bump(); - }; - - const typeKey = (key: "enter" | "backspace" | "space" | "tab") => { - const state = focusedText(); - if (!state) return; - if (state.kind === "term") { - if (key === "enter") termSubmit(state); - else if (key === "backspace") state.input = state.input.slice(0, -1); - else if (key === "space") state.input += " "; - else termComplete(state); - } else { - if (key === "enter") state.text += "\n"; - else if (key === "backspace") state.text = state.text.slice(0, -1); - else if (key === "space") state.text += " "; - else state.text += " "; - } - bump(); - }; - - // ---- plain-layer buttons: the focused applet's --------------------------------- - - const plainInput = (pressed: number) => { - if (launcherOpen()) { - let index = launcherIndex(); - if (pressed & BTN.LEFT) index -= 1; - if (pressed & BTN.RIGHT) index += 1; - if (pressed & BTN.UP) index -= LAUNCHER_COLS; - if (pressed & BTN.DOWN) index += LAUNCHER_COLS; - setLauncherIndex(Math.max(0, Math.min(MAX_LAUNCHER_INDEX, index))); - if (pressed & BTN.CIRCLE) { - open(APPS[launcherIndex()]); - setLauncherOpen(false); - } - if (pressed & BTN.CROSS) setLauncherOpen(false); - return; - } - if (keysOpen()) { - if (pressed & (BTN.CROSS | BTN.SELECT | BTN.CIRCLE)) setKeysOpen(false); - return; - } - if (pressed & BTN.SELECT) { - toggleKeyboard(); - return; - } - const id = wm.workspace().focus; - const state = id === null ? undefined : applets.get(id); - if (!state) return; - switch (state.kind) { - case "term": - if (pressed & BTN.CIRCLE) termSubmit(state); - if (pressed & BTN.CROSS) state.input = state.input.slice(0, -1); - if (pressed & BTN.TRIANGLE) termComplete(state); - if (pressed & BTN.SQUARE) state.input += " "; - if (pressed & BTN.UP) termHistory(state, -1); - if (pressed & BTN.DOWN) termHistory(state, 1); - if (pressed & BTN.START) { - state.lines = []; - state.scroll = 0; - } - break; - case "notes": - if (pressed & BTN.CIRCLE) state.text += "\n"; - if (pressed & BTN.CROSS) state.text = state.text.slice(0, -1); - if (pressed & BTN.SQUARE) state.text += " "; - break; - case "clock": - if (pressed & BTN.CIRCLE) state.hour12 = !state.hour12; - break; - case "keys": - if (pressed & BTN.UP) state.scroll = Math.max(0, state.scroll - 1); - if (pressed & BTN.DOWN) state.scroll += 1; - break; - default: - return; - } - bump(); - }; - - const scrollApplet = (lines: number) => { - const id = wm.workspace().focus; - const state = id === null ? undefined : applets.get(id); - if (!state) return; - if (state.kind === "term" || state.kind === "notes" || state.kind === "keys") { - state.scroll = Math.max(0, state.scroll + lines); - bump(); - } - }; - - // ---- the frame ------------------------------------------------------------------- - - let scrollCarry = 0; - - onFrame((buttons) => { - frames++; - - // Wall clock, once a second. - const nowSecond = Math.floor(Date.now() / 1000); - if (nowSecond !== lastSecond) { - lastSecond = nowSecond; - setEpochSecond(nowSecond); - const stamp = Date.now(); - if (fpsStamp > 0) setFps(Math.round((fpsFrames * 1000) / Math.max(1, stamp - fpsStamp))); - fpsStamp = stamp; - fpsFrames = 0; - } - fpsFrames++; - - const held = buttons | (latchL() ? BTN.LTRIGGER : 0) | (latchR() ? BTN.RTRIGGER : 0); - const currentLayer = layerOf(held); - if (currentLayer !== layer()) setLayer(currentLayer); - const pressed = buttons & ~prevButtons; - prevButtons = buttons; - - let consumed = false; - if (currentLayer === "plain") { - plainInput(pressed); - } else { - for (const chord of chordsOf(currentLayer)) { - if (pressed & chord.button) { - run(chord.action); - consumed = true; - } - } - } - if (consumed && (latchL() || latchR())) { - setLatchL(false); - setLatchR(false); - } - - // The circle pad: resize under L, pan the strip under R, scroll the applet plain. - const ax = analogX(); - const ay = analogY(); - const px = Math.abs(ax) > DEAD_ZONE ? ax : 0; - const py = Math.abs(ay) > DEAD_ZONE ? ay : 0; - if (px !== 0 || py !== 0) { - if (currentLayer === "super") { - wm.resize(px * RESIZE_PX, py * RESIZE_PX); - bump(); - } else if (currentLayer === "shift") { - if (wm.workspace().layout === "scrolling" && px !== 0) { - wm.scrollBy(px * SCROLL_PX); - bump(); - } - } else if (currentLayer === "plain" && py !== 0) { - scrollCarry += -py * 0.4; - const lines = Math.trunc(scrollCarry); - if (lines !== 0) { - scrollCarry -= lines; - scrollApplet(lines); - } - } - } else { - scrollCarry = 0; - } - - // Geometry animation for the stage. - let moving = false; - for (const p of wm.placements()) { - let anim = anims.get(p.id); - if (!anim) { - anim = { cur: { ...p.rect }, alpha: p.hidden ? 0 : 1 }; - anims.set(p.id, anim); - } - const targetAlpha = p.hidden ? 0 : 1; - const cur = anim.cur; - const next = { - x: lerp(cur.x, p.rect.x), - y: lerp(cur.y, p.rect.y), - w: lerp(cur.w, p.rect.w), - h: lerp(cur.h, p.rect.h), - }; - const alpha = Math.abs(targetAlpha - anim.alpha) < 0.05 ? targetAlpha : anim.alpha + (targetAlpha - anim.alpha) * EASE; - if (next.x !== cur.x || next.y !== cur.y || next.w !== cur.w || next.h !== cur.h || alpha !== anim.alpha) { - anim.cur = next; - anim.alpha = alpha; - moving = true; - } - } - if (ghosts.length > 0) { - ghosts = ghosts - .map((g) => ({ rect: shrink(g.rect, 0.04), alpha: g.alpha - 0.1 })) - .filter((g) => g.alpha > 0); - moving = true; - } - if (slide !== 0) { - slide *= 0.7; - if (Math.abs(slide) < 0.5) slide = 0; - moving = true; - } - if (toastFrames > 0) { - toastFrames--; - if (toastFrames === 0) setToast(""); - } - const closeTarget = closing() ? 1 : 0; - if (closeAnim() !== closeTarget) { - const step = 1 / 6; - setCloseAnim(closeTarget > closeAnim() ? Math.min(1, closeAnim() + step) : Math.max(0, closeAnim() - step)); - } - if (moving) setFrame(frames); - }); - - return { - wm, - rev, - frame, - frameCount, - epochSecond, - now, - fps, - uptimeSeconds, - layer, - latchL, - setLatchL, - latchR, - setLatchR, - launcherOpen, - setLauncherOpen, - launcherIndex, - setLauncherIndex, - keysOpen, - setKeysOpen, - kbOpen, - setKbOpen, - kbVisible, - kbLayer, - setKbLayer, - wallpaper, - offsetMinutes, - toast, - say, - drag, - setDrag, - closing, - setClosing, - closeAnim, - active, - workspace, - layoutKind, - barVisible, - placements, - placementOf, - order, - focusedId, - focusedApp, - counts, - windowOf, - stateOf, - animOf, - ghostList, - slideOffset, - open, - close, - focusWin, - switchWs, - toggleLayout, - toggleKeyboard, - run, - typeChar, - typeKey, - bump, - }; -} diff --git a/apps/pocket-shell/wall/lake.png b/apps/pocket-shell/wall/lake.png deleted file mode 100644 index 4f98e57c52aa5c82953ab41a47503202b3fc0dee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78799 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 diff --git a/apps/pocket-shell/wall/prepare.ts b/apps/pocket-shell/wall/prepare.ts deleted file mode 100644 index 1bd543e1e..000000000 --- a/apps/pocket-shell/wall/prepare.ts +++ /dev/null @@ -1,64 +0,0 @@ -// apps/pocket-shell/wall/prepare.ts — cook the Omarchy tokyo-night backgrounds -// into pak-ready textures. -// -// bun apps/pocket-shell/wall/prepare.ts -// -// holds the originals from /usr/share/omarchy/themes/tokyo-night/ -// backgrounds/ (0-winding-road.jpg, 3-sunset-lake.png, 2-swirl-buck.jpg). -// Each is scaled to a 240 px height, centre-cropped to the 400x240 top -// screen (sips does both), then padded into a 512x256 opaque envelope: -// framework/compiler/pak.ts only accepts power-of-two images, and -// images.json bakes these as PSM_5650, which needs every pixel opaque. The -// stage draws the texture at its full 512x256 size under an overflow-hidden -// root, so the padding never shows. - -import { $ } from "bun"; -import { mkdtempSync, writeFileSync } from "node:fs"; -import { tmpdir } from "node:os"; -import { join } from "node:path"; -import { decodePng } from "../../../framework/compiler/pak.ts"; -import { encodePNG } from "../../../tests/png.ts"; - -const OUT_W = 512; -const OUT_H = 256; -const SCREEN_W = 400; -const SCREEN_H = 240; - -const SOURCES: Record = { - "road.png": "0-winding-road.jpg", - "lake.png": "3-sunset-lake.png", - "swirl.png": "2-swirl-buck.jpg", -}; - -const sourceDir = process.argv[2]; -if (!sourceDir) { - console.error("usage: bun apps/pocket-shell/wall/prepare.ts "); - process.exit(1); -} -const here = new URL(".", import.meta.url).pathname; -const work = mkdtempSync(join(tmpdir(), "pocket-shell-wall-")); - -for (const [target, source] of Object.entries(SOURCES)) { - const scaled = join(work, `${target}.scaled.png`); - // Height first, then a centred crop to the screen's aspect. - await $`sips -s format png --resampleHeight ${SCREEN_H} ${join(sourceDir, source)} --out ${scaled}`.quiet(); - await $`sips -c ${SCREEN_H} ${SCREEN_W} ${scaled} --out ${scaled}`.quiet(); - const img = decodePng(new Uint8Array(await Bun.file(scaled).arrayBuffer())); - if (img.width !== SCREEN_W || img.height !== SCREEN_H) { - throw new Error(`${source}: expected ${SCREEN_W}x${SCREEN_H} after crop, got ${img.width}x${img.height}`); - } - const rgba = new Uint8Array(OUT_W * OUT_H * 4); - for (let i = 3; i < rgba.length; i += 4) rgba[i] = 255; // opaque black padding - for (let y = 0; y < SCREEN_H; y++) { - for (let x = 0; x < SCREEN_W; x++) { - const s = (y * SCREEN_W + x) * 4; - const d = (y * OUT_W + x) * 4; - rgba[d] = img.rgba[s]; - rgba[d + 1] = img.rgba[s + 1]; - rgba[d + 2] = img.rgba[s + 2]; - rgba[d + 3] = 255; - } - } - writeFileSync(join(here, target), encodePNG(rgba, OUT_W, OUT_H)); - console.log(`${target} <- ${source} (${SCREEN_W}x${SCREEN_H} in a ${OUT_W}x${OUT_H} envelope)`); -} diff --git a/apps/pocket-shell/wall/road.png b/apps/pocket-shell/wall/road.png deleted file mode 100644 index 395a5406b6f75686edb23c41967592299e5e0be7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 220685 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�GP0OPp?IQRn>|0L;a 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

dJyg*N*23s{xS?koqv` zbRDy#_4V?vu-_UEqPocx>x|1r_dDx_?3}}U-}rxkF-&wl%A9EuR7gp{BIU&)4tc}gvQn>`tv!Bn$ z@IscradV!ve&*ddor``&!2$S2+z~g=%)(S+7FdT)7%H5D@v=uziy3cFoiJ2XWx$c`K z_zpnA_688C`-sXV!;|r!kp#gGM9}%#DtYu7x6c+?hsU+SV*rC1gNO0`2LhU_qVhe8 zo#LW%g-M1cW;*5SoNZ=uR?>?Ws}e?@*96Gh0T2!e+M_;}x zA2Ujmwst^RI3PUw zDE$Kz2p%s09<4%&{xyNzLKL2^Coe#6qS6*|W_R4Olrk#d^1qQh- zdkt$a_LhmU90`EnP*w*?%Ym#vs15NpfWebRHeC2LD>jT$?T7%f3aC3n1hu30MBJW9 z1aR7xJh&QOg z-e>T%Df+?ufhiD?bIDmd_5lJQGQghz2+ij{Zvtc&A`%1$3?3xVb*=LtyDW-r>Rv7H z#jy*>EzzEa_r*>RP(mQgLNX1GL|#S$e7tV=GQ5xVYkdVIa(4U(eedbZMf~!ZXVL*N zOgyi?eda;Pa}e`L4S2Nq!7O+j?-h6i9XqRsFFo~@o}! z7M(SnPf_m`?achh20-?2Mhl}ZTjRjM@UlFUjAfydg_0?d1riVH$QhpS=hEC&$@B{Z;mU!mQ)* zJw4Vl@{id%|8oSF8{UspKpo+&vQ~)z1zJR_z+-%0?GfUpaIgI4KEts=l>_acsl^dd|8vV&NMf4qS_fafisea_tD5~wU-So>J(W{j2b>ZFMs7$|f_0rHxK zhoN8Ts;UKhW*~W62S*le%u6^45ZDHi3$emi9V%j0l5YP4?RbnioWGF)00000NkvXX Hu0mjfccQiB diff --git a/tests/goldens/3ds/pocket-shell.160.auxiliary.png b/tests/goldens/3ds/pocket-shell.160.auxiliary.png deleted file mode 100644 index b502636eaf87c694ca203c9c1c4751b41c2ff536..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22822 zcmXVXbyyVN`}S=3Hz%acnf~UtYW`lz8Hf3>(h| zCH2$!YgJ?DFT171LcdD0G4{}B(MYlWnRxh|QRvIB^s0LEhRhJI;91f^t$Iq(EHd6{ zn}7G^fEY57r<;yrW!y~4*FXFLS77wK=!1gtI#F1$kM;jwIDg89Yl<#!)E|@2 zzVWQA#{J*96o~NSx!1w*s_JWs-E|S@&L5e{Umv742gVLu&M|L4g!mPy{%$mR-qhBu z{M)~f7&h==)#JCK3vCGvX65RAm4K3+o?~5)kbm1b5c1nDpGwuE#OPP&8>#=Arl&{G z7XTD@S`UkAm0kBC-@z&MZh6*Dv?Xor&gg0Xj~{XV%Hbs1v(AH$Jvmvr^aQpKAt$9{ zW8K0OxzmS%IqgevpE<;kQqL0T?<6vOK-jHMs z&j`THc=uK=h3&#O-xkxkP+@R97#};((Z^5bQwNJPN^l6>a6wPA!tX>D=y>r($)M_@ z+$K?unSeGPPm3`IKvOZ~;70!UkdO2@+5BkJxRgE~Z?1C9)IOP~yVWNrPjA-s98|GK z)%E_Z`SyG23CpMq!2A8Is_$>=2Nd02F~arFf(*2AUAw`A&rlME596A0g66st z9U={~s`|p5Y5_zvH_)Ga{)Y+^xlM}JQ*0V4_}kgG^V|MZH|%d#-yiJuQu(9#=$~F^ zI$XKUkqF!Z+xZ9CXk8u>$MRplJ?>QM`qOXby|3HgZtC(pO2_p`C~E?l zeSh1|E#jyNzlxX7hc=~lBX#ReTKZ1gS{&qoU$W7siDBXR*~5Pycs7C%ot4{8;`qb9 z!;o`5kQ{*CO8s%V;&U45v$%Wuz2K*$0XhsmtU2FhUyeh@*)H{H#ZR35ci(o zH7-uPf6)=NL|L&NMv8T665l#4PK@(BHn@xkRwJ`jGFkP=Tsnjk)sjH<`-9Q@^0aKH zG~gkMdEWL71@~|qFF~3KN9G;@fyD>?m1IO@abfhp8x$+FVEO1{$XFC2;st=9lazz` zN;gIMc8uF@FNEGyee?U9VbN_vZY9^>FpQ}0sF&jDY!lR*mIxuliZh^Lyw@U-Y7G7H z>8*)Q{S71_ZHI0=?g#N$+~ijOx;Buu`DrZDo?mm5ECBJ11)w1S-A=bmTr!`x3!m>t zKout`Bc_&hF?IG*q0nf5uY>_XItd(1T@NAAzukXg0_e;S`W1@$+5kF3uvvXcXsz)- zSs7qu#QXeoRh>gIaSqf-Ew>PMN45DkOcg*7Qrga}=VxbD$la5g3DTZf57$%e&5w#b zn<|Vq*zg)K+`~>8Uvtz$bvK$7elQhI1M3jR=^l=7Tsc|=qey}c-t-vSdD@+EymDsc zRVBRPLWhP#d2l=KC3qG$68i>%p`PYaK8l6WT~!415ok)Yig{TOI+i{45gSRHUk#b6 zIx%AORj?pAAN`w(kQSa3_$Ao{bR_;a20Wxd^3P)i2L2AhcF@4x`O(0MvDK1z^moe4 zR$!Jn^_K&JK|l81j{sk8I2Mpa6e-~QP-RXDq26$8_TftXPHu#4Aa%cek=QWgXBbhBnqqE`^zn-dPo=(78b6kjzIoWPTP(79ZGi( z8126~{J+Q8aDT52qlXVMz3@iJM_D!41zum=h9yQY+(Ug2zj$#6QhXW82K~!@f%NjX zV}*m-Mywb!OWpSFdvwGcU#hX7z21C%gX)1QdWbqQ%f6QD*QRH(Ky!EUhvk;MZiBPk zmury{9g@P-huYD8nva%Uo7RTrz{I<3xDkyfz^rn(uP0TXA3+l&haQrogGCMLLu2V5 z51`*1>S0XQ!@p7#LSJe3H|TBTI1!cAcPYZWR&vRnik?xqB7l*F#F44GFVbNe8l@`* zUG{)z(BCI$Q?MH#<#^*r$&`<-x z)2~nm)8Tn&RNTEIQ&4?b*spNP!1n~wQ**|E7ZR9Ow#-y&Q8xT9*RX;;=aHE3D`utr zZOYGq?!X78B6PI|UK^Z8qDP}9fanYbQ4mk8R$pQaNu&dLi>We7ZdpMbpcYS3nG|Fa zYn$!k$hI)1c#qR_@w$z|zu|UmoyH`)r#loorOd}k?=t|wQCqvMSK}*iq+gNt z_NFUZxAuhLkMeF%q~3rXvXALcl(U~^m1>H>$GhK%p5-dhJ|h?=5$r?klW9MHIc*YO zT4^QCtrwxM4r5?eA-aj}N;!Oskcz{R?%$a3_X1+u4)0ApTi@5V`Jk6yG>DP1%CN zJfxcYum?xxbD9kWo6j8jycpDyyd>Vr0l4>Lf6M?2qjG+^JAXWjzkaUJ+p4aLC zFE_qULn=YFzkG0wFMdtK9o@oVz1IOdijAXaL*UiGd#038%Kmt8A@BDkHqMHWSRgR1 zBrNnmW6?gb5l`|lW?I#?_5R2N9NLFjN3JTWPBRV#jqUaoW%c8S$=q#R-dr0UYM==5 zJO0YRF**EjF{DX=q@l%*nyqcl+qgPD`wSXf=ARM%b03-KPT`n zq;SV^kNg|O|K_l$1r2j5*w`;|3NYbv1q0M|!rjRUj+zf-4nzUz@xoo4 zW|2E@DFqNHTHjlHGY@Uk1vlrh%-cwGbLSjSW`{>{xI|y4dP_wx>wj&JU6^}IWC@5| zlbwpQz79M%6SA>CUDYTB4DV9mYXNx&3M!Q=vf~cCtb$68@|-LwltohU#92T?(ipd* zaD3B2v1lA~9})Ajq0pfM=(YqAbTr=rtZ|OrbuQO|k;POLuKQ5K?F4nC;XY*cnopI| z)6(q`>TwLp(Ttzw-60IeZ}tu(%Fr$yztlLLa3>b>u)mT9%M4pI-e(BsTr{O^|BwENd4BIf~z z@F4F4#oRAs8~e;~9iE59rmj+N5~v{cv=YKo*CZ z&z0&I-onl&3TYXe->;gR2XP+vOj0~_79+^YZzKcFWR4+_&g~c!b1ttxBpZAXBi%ve zi_J>> z90#tLuFfJ>J+_#p=T&blG~X+zw5?{EIZygDY=>#uzT(orKGfW!wvex zmNZiL_v+u+2MK;h=^zWxU^!&VH0}~_QV~Dx&9_hrb$o2Si2+N(m?;v2M}r)$L-(>> z!k5`(U_|mAUT7hN6XJMvO9b5}hdkB#hUYhG*A-e)41L1X+EgZ(Z+*|vi!~zZ!Al&u z8H}o&A^eCBd*%#eCV+lrT=ExSM{36rbXk|Q6Ddl1kwEYTwLu!|7BB)UeYDj;u(#&l1}NMdLe&=Wb11(}0{0gn9Fl-f;OfL0)mMV0!kZ zQ8+gpc4YS^Ya^BYxg|ZEdU|nhoC&Z5Q|oy%rlbsvN8BQUpff-H-YXynD%Zp~ebeuv zZEAdRml4Y1N8)dS*!{^5cPq9U`(J?^SUrMP%xPJA`=CkEB`@lHnh@gu$N93GnKRq(kSNLM`v>V}SSd~HZ>rYe$gOykoRVU+5h3=&k zxCoSmf-5#{X76uM)~#-W>2;>qDz2JUW;IGgHVOBV}(?$KP!6AMrkxrSWF7rSm`2qU-i zz@3I|^@dUmFY3`OGLy2w5HZ_a@Kzr)=&p`! zK~{vId)Gc&?c(YILyc@b+wC`|d-djE6r3g&324PT*l6SL*t+R)L}bL=4a;*u;BNM` zoE7KaP_2|c1cVcQwGPVh0)O`(uY`3sR#D4PiQbUq)rQ;gv$);1v7b=_*gJf))IUHt z1EMEn5Un?0@;gM|m-i5&QvrC-KTNfYiX{Gc8i3E0Db8LVnyK!H#PHz##BYFRl|c3K zsClr%0%$a2jT;vMXho(&yncSz(bw^4AFHLSj(f5D2miQQfakGbj;Vb2GxSF8SHm=D z&v-Do({cIaeTKjK6~=e(ave8VJxjC0_bT80C(r#B&el1S z9JK~ox>S|+HUp&qet>Y7s5ze~4JBOP%SZ76Fy3Lcq-02b1YxUM+v5%P7QEeLFDlRW6O2k&l3Ils~1Le-sr*a1Xex;*= zY=6zNRWI)nyvWwumV=4T%Ne1SGbu@QbwdGD#kY4|R z{`g_yzQC4|b78ybB$v)7XPrtAVaQCH+QziaeEZi259)+TUYWnWUqpYtAhd)>pJ_$b zN0q3sb9?k3ltwr60;3G}YrVYEvAeWY9)Q2r96a!j845>};4hWxf!J(~sJ1N_87^xn z(w)8L z5xP7C#U1Bcew~O_9e=PsvJeuFC6|KIT2+PGuvKC|<(yHqrUH{1Zy`<%kx=czLz zZX%X*hwPcU^KUd#T-9UX*?kco&qdvCtSYx#}K=`U)?E}~J8jZWaZ zIL$x(hR4h)93b(OOqn38C)HF7AFhZ_BadQ9;m$7R@*A*W<-eELpdGNDB4g}~tow@3 zizRuXfAVhd_Mj4#1qCA>i~a*HGr)K0Nb(Sf@ISCnwp10xWWxy3rt)nvys}7WsZ4ZH z?fs)JaYp9ows?lC`s#*snO{2JprIn-GfFvEpTN)rA8KH>n(bpdu8N{xLVekCpdsb= z^9A>x5l}#DB@1)`3cYPnTa?_dEK(C?q`m4(-HO#spA`25l=N#x2_+1u&nWId-P>s< z02}U#PtNc`-pPL`793ibvv8^#Jg&6=k=AO8^1)zbcy19nKX_MH-Y&yGk)(bDXiHVf zL4}Td>E@{J2*Ck8hsn*K^h1fR+gmSUKla}rnSVXnYb3v!+2R{O53F?UR|Un6Xc%gi z|Ja4ZdLG^*m5eJv>J@~!;doxRx5Ug!)Yc|eHj`$8*B9oXFzb-ckeiF|tpgKJ2A!^e zaDpjXu>;bBGXnLQ>IDyqU8Wy72`)4Zau#=|s82~hc41pC_5ahB#E*#*hdx(G|*(WDZTl15XaB?QjuAEw-~ zR4)T?42Wr0EZbA#G>@kM-!B7ncCs8G6f0Otb3oWPko_addR%^B%ZIFU=uUwHWV1)< zRac({$f>B_woLruG$0*}(8_M0B+4OyM<_Xf;Lx6oy60N~O@=b>aAvWJLxB5hfN?Gl ztzJi!=LXpbJq(p?kG6w~a6HMR1$YD88WV>CXbEblFv=&d!=;{mU)%WQm!g?cG!Ie< zC_i}m970^P0HEH0D&S9G0IaC2eN}dk{ z?e5xIgK?Xn3ALo@#J?+Bft-bO1C(m@^bf7Ah`?2G58&(ZtJJpCeXMl0qB)C^UP#cp zo1ml#Wwlx5&rn=o;}zeCLdI4g^%^}mj$k#Q@do3JvM?zWVNCgY2l3p|Iy;RuNm&$F z=Ey5QY{`WP&zw=vQ%M+J8xVkT@*tx83u!dis07Kn$T-SuSGd{^eO_D{l8gmoYUgmH z25yYs^aZ}BmCq}r0^Ogv0c^m(vU=yc06vzGg>@vPUp_@k-?}>}DZm+(FyjY8(7LD@ zR0k>&9Js7+2oK=g&Ft49enRp&M4|)sD~3(e3Fj+}5N#7{4<;Al(D%|WTFaB~x9DcB z^yVd`KKDBC)ic?H8aMf#ci(7EQUXx7p>-5v1P|T~r5g!#tcdi2;0&NZnNIAz3Y90W zCdI_tbdHbCw9SOMSgo&?REyfPqh8bW_Cg79>g+gEx|gipmpPN=IryBY1|fGq4)#7l&R$%^c!5o4#)SJX<#BIw z;Dys_o&f$kOdR?PX*gw;D8fKNls2h_D47{xnDMJ%!&pbHAHL?b43BS6r3?suzm)?C ztb}Xd){+h=+>WV(64oyRHXeoYz(5C-7?7C%j)ExsAIhHkk}M+Iy__|3iM5`yjqFo! zQDbc)r69CR<3R0T@N*6bwNPMM3b_v+WV9GnlqNk3xD^fd-Bx*UZWwu=V)uWn4qw5ku2gj6A(J1-Tr57a}`rFkVu~@;7P~_$=}G64-z$TM0VMP2j{J1#IqzGgyT5ly0K+%>^U;?&~n}(LXk&W(WAY)csgql zms`)JU$(S+t9ipSUZ1eEXjWw_Rm)BAom_Tdn@?+nP~D$*MOQcZve-y3(I>vC~dC_ae|BIqVC0%h&K|Ti-i;3E0XfD#& z;J7Cn(RCdaOo6zJa7@4AX0q6Z-X|Kv7}Q1H|NXhW*l_0n(|)55=za^x!RdnLcy$b~ zj^_qhy3!I@kTu9=qyHoP?h-yCT;Z`93#@KV9uzmx7QpAt5A>r~x@)HUlRezL;Dq+~ zcC_CeRPjpqrCV!KowkU@PktnVfkj)RGjwG3leKOIFZnmzEP#sOS7cc#lR9PM1tOPX z5B44vLeA_UzV$!dr%%f#79ixciH6rXkhJ#xbfL#ubT%U#G%*x&71CZ>pQGsx4-G6=;q?ckFO7zYB@$L4_2Ks>6^&*@fUM5>Sh>j(XLm{Q z1*6CsOmOx!?bxq6AupWTb@1p|a%HCbTCvY9hjY z_0#?CLt&E5@$FXI2Ktw~lO`NU@^fs}m4o*qtyyM1#1;Z(~heU zp$+cIeg!;7E2#UxgxA69DkqCd+B-#$Y_OSc0PVA1<*VBc|qJ}1=tXzMpeeQghEKhin zfUFX2zREv!4G*okt>yHbYxGd7M)=9(uWt!fo5&V9VAm43d?X222jUz7?=W?g=p~eq z`K_sI&@4y+31_I&Doq<>tXA$=zAiEMS=rTQ_gP+&mRKe|jb&ajlu+zcob{TrRXBHN_>lT+N9aOy7!gMj#}Lp3%$JjuK7X91ooS~ z;^*THHfoGY{ZAu`qsr+o+lJ4F)>ho8fT2Yfot-hr%5ZKR0Wl|cJ*2OzD6=M0#~(@N zj^Uv|C-loxPJn@vtUuIKAcs0|Qluf6rs41Hm#@$;B5k{e3w|C}G;-CcU_GxqL4bNF zO#o1Pn~M(AShwR~Z#dj<0&K2RrrF8LIa)r{fe1gQ>|?}z>$C&!Gjr|VBmb2|lC>5| zJU>xK{prc0wZWPm&)ud?-CU_~g_S5)4HC>)&4MmU50tFubXuQ{6`x!!5kX!4u8!I# zQIBA382I8EpafTLrt9*ATL9;j$z_Cbo(oMV{l0p73R~>5|2MzOL=Gsy9FC)tKB770 z{`0Yka-1Vj)1y?;Xykur(biPanfLVhgRvN`n02i0)dAnR5BIWZ3-8v}f6BjR!VM)| z)n^_NHQKD=tfYQsl6Tt=V`Gq(&l^1`UI{V#gQCs4mZRTV(uinJgff$YZ`QpC@ zHBbHu;geHl|29pr>>pB2F|+gJJSJ>h)i5LszUeX}NBA+SC35N0S4^HZe1o`--XNL> zC!})-$KCNwwlkZnCB>fFU19KK5fJFulcwM`4;ir*lUFkt7SUOe>{Nqva|v;%A3lae z`0Q&@qqRV@uj$<42aN4g?zQ}&=dX~!uq*JKL5Zfx*HpvI9x>x)6i@O4ITmRM?hq7b zp$$JPbp{FHsEzf(uTG+qJ~@HCV5OqL{nZjdNg#xOd%Vr%cs{xeE+`j34Ic(9!rVC2 z41?1FOl5M{kh?b6uC02FJWnpvd<$xKD)>Z0$ON_bI;8WQ>B6mkpk~$5K7b5s#i}81 z`0l*>_Hygj(UW}R0b8!iQrQm{f8kX==vy~JXgb~`3DKyfK2lU~4>m|>gp_PDm|G+) z34A)3GEoFLA-Tx`Y>!0i_=qA5uV1UpT)LNK41iBBCIchbzN5V=SaiFB^!=(Xfx3bU zXDa?|Wqp&j!JKN?Cpz2CbvQ%tM?PP3BDGI!lcjZ8f4e6;9(!({Fv=7Zqpx@wdIP9a zF*2ylck9QN@K~LpImo=HF8oEJl2i>6M9bJ0CYf5HiZVwZifYQ~5iATQV z*xV{6Eyhss4H;$IUnb3m*a<~R14@FBdJ>Uk;(n1EgXF3LK_HN%O%-I!o3#B`gDmly zzrq^uH6MW&f|d)VjLveQY&^KLM_rpA2J)@?+F$?kTj-~{hkjpJv2K&-dj?9@yMMP+ z0m7%@FXBsR3R{nVPE>>;Kvjr}Q20=Rz+5=fp5jw-zN31~aIn?F5~n`~w}qI`+^B>o zQ^r0|t3m{Ifq@4{j{r{F1=AU^1;ayy@J*y24(MI_QDoJrl=}esU=!;A6l4a)u;a2K zk9Z>pYznAv3Y7l5^6h>b+Q2iySNq=DorOqy+YWzSu7wj!UtgH>n5XB_>C(&1A1C&A z+IE%h#GTX9max$E6)r{mQV!ZZs@i<_X@<&hdq>$U@v!gJAMZZn`_y2=USD#)on~7q zL~_Y%Ea6_)w8qcn!`T7?VAUh(WeDdK4(X%`wGBi(UZ}T=vUmT=aqJcs|DxOw4<^- z(WYmM(MSB7eNq4BpL?@9ZuI*%+>*QkRnfkDN&`qxg4u|dSTm@*Jcbf3$OH=CPrg5T z0m^KEhb0g!=Hup$kdze|9B;X8-wMW#CYW z@6GqE@(CWDfP-%y-uQB**u8y3ZN`}t+T&2yS&lLefX2`9){bX3%;hQG2?IWI520#$RP z)<>z|qa{3lsSy5W>l4Gl#`cBNaW}d=DD)q;hgP3=#F){nG_PB%DaT{4b4p zL(6t|p&4jaF4E3^gT6?~>i@G?Z2bmoJ@2&j1LVklC?ol!=OntDualIoQvsQ6MZoD+ zMjdGk)%%Jlg?}?s$K^Krnal)AGVBUJ6xjy$r0@g^z>D=!AIGv{+q$doOF(?%SYUrR zoL2S3191Ba+5wIVy}2vPt05Wz;Mn!R3u##j*s@ueQU_jfe!q%hXEnm`az1zzblVJ{ z@{u=8eTb^;ZTHAJ1^dshD6-)H|LccKKnDB%;rPEI2 zQ};+NuSatF2G6d$zCXG08)Rz^1zueRbi@PoWIu>Xz&h)-SUa?iSv76Y6lghRL`=`B zg>73swTKYN*AE++4EVbH731hm%_7D?vdE*Ws9#>R`_r`dMUD!0>YPenirdZ}-~s8e zHABz;>Ec_|yy6rNAa%M65r(E;FToK}?g!dX2k`Z*oA5*qG3I&o(C*gOIuhJbF=E-i zS8e)9;B18NuC78yV{5Q=97F2A)9tpPJSTTFVwyNtw^{{J9fKJbXE*Y|HPa;LgDkMvbG{@H4Y8uwdo2!yI4m1R@<-e zT6s`LNw6Mcz8~O`f!(huDEO`l19vZGOtftr>0%O9U7*l;c-}aUW-p}o#2C`WMH3@& z`!#R9rI{RtYsb4>ENTu^uMLys>#q4a)~;O4dL##gTgf(GFqIX6<&W}PpgiLepC+p} z^@jSrXtwFGzlQrHnwK)Qf8ZW&{?#s{&8H_?1up%9>~hm_woFhxM1&Cnl>N#t#)2v@ zUNls+$zz^IG-o{9JL~JG+lStJ-(@{xW@HxZWQ**?VCs;b_IYYh{b4i2Vci``2&%Ev zOna>gZ6(H$&8cD{hy7TFIc{_vcl+A%)QHhwFAXt2vq9G>(nKQTI=G=#yaiOZ`c4YC zg$?F|{gfjRVz;4c>m?;aY= z0!s#)>G&hHDv_hl_jGKB);;y?yW(Hh$zOD?+l>o%-+Pn=EQgJ=zrD|Jrq$wAi8kx| zu5Qz=j%z(eC954P|Gr4h97Go@p`k8?v^26oEb@jlNz#-?fUhAPP7w3mYh&}FYoPlH zR_s}esNqLp7CqC)t5rI;nn7)q*F==5yY~v)YDGh)soVjTpijw)gbN~_g5U~%@Ckio zu!Jh1xp&;hm6gtw)M5G{Eg@TxljTq8^88Kt#H8PZTG80=F$}kvk2Ds!a?8V+aWK0p z*KF2iKr%rIMYpD!Q${_l1>U>(J}CCGQWkDvwWv|%OC({^lzWc$;PegsX*RE&8@(g%1cz)kJ8bAf6jCI$6U4|(x z1DB#UfB@`9W(NAgrd{=t<#2K|Ub)5T1pKA9+u!(^OcAR+&qdldNg`q#wsA=9&mi{1 zxK^A-@Kk4~0q4k0{^Fo?ofch%C62~)eo;0&%tXdtO{#Jd651La_+*HBXj&NXN<2lr zOM!Han$QBqRV33;CQQgkuxvoa;|Uw5hE4jf@{fhd+mBAH+P11-gu|cpgXCI znWzna#vttYxl9O&@AmP}YlKeUnPG`VhoqDyuko34#+F9h&!gDkW)DIN1AbrMhBg+{ z=oB~3>juOyhAzaXkoL=rS&~+K!q)yYo^$Gl;?-9jxC*_%Umk2Gcr)6<9BLu=OOfQY zf!@xR`a17<7xA-^D_6is{44IXOAM%LO3e&GiNOQ674qjX%PMj1;7w_H!t$DS;)ys=`8*XT^6{VbZl zRKchA)E9T!fo7~xDdJ_zoBnl(h~UTPgv4D%NucOb^UftBAnniS2Y{0UCqDa%+js9< zZ!KIpPSlD#_tZ7(Qi3>@h-lM%wHxa0unkW_I#ws9aF>eI(QgOxjpiJ@n-m7)7we|Q z)imol%%cIU`1hd4`&}qpuwr}gOc#7JY#p<>b8!*fAk$c@I$93jI-gsltXN0WrJ`mr)n&IM_yN;`IkQGw5aD^ z#`*frRe#aDL1oUA#TLr6V5!J9ZFn+h7?A4>#$K7smPH4$3s2clC`uB>sI)X>BcMTkjgP4o^+l%TOA@@b7X_8S_7{DA^i2-z>D|PGV z03M)*Xjs5dHa9WMb+9C*don@395;t{Zf0-reM6Hv2Q4J|q;+Vo;U3C_v|ehAD}toM zyOK_XmI*V_l@YZw5x3yy8kDnv~DD@Gxg{JYhH<@?C$ysPnd4B~6fQCx4xnNcA}!E!7SB)fds4?#CLGq1*-uVz^(wNhM&5ZTDj8AETz;b`{^1U#58z)|0%~ZG+ z$n6B;3YSv>KoRDwKo3-F2+jk);*#ucTjVLa%6?g~o%b|C{B9mE?ehke+7Dc2&d&#f zk}LGn>WUfOam+#hb4y#^U~A9suq#D@ZbrcnLa{mwXIfN7qlQ#c_{g9G<;?r`bnq!Z z_fc@Lb>PDYM)$sXn>mSJYofdYY(QD+61{))d$Q0J$SnFbsL(HJ1FQ>t9CUm_hq3K5 zy!X=kStDVAwyXn7twOEV6Zx5WOaTkRE%0s{&VgZA=RR*ynm5nJ&yI#p|2iJCFlR9@|NtQ(6PmqRr?-h?Gd?;ceXM5yHcwyGihVV-Qn>{pP{VN4!CDbBEOKp-`+QK? z#=#}rpQ~RwG)u2ZkbA=)lv5;AQ|WH9>Ma&#AV$F6`Uth(OVe!WKW;^(-vr+cvwmav z?M(qRe*}J+`jMC1V=ro!F4&9X(^>H@eMR+#NHpY?Iea)B?H|DUV8ADzi&mbm3E3tR zHw~D;IAlKVXlKL~Gi=e=a%f0CY?jR|^m_5-3L(JxT5&zpl(v{L%VHbs?8eb_bkfchv|9d{m2eoJ^o)t{>Vx^mPff*ikM z4lA_Y35vhMD}EK@W}I!we`idCnUzD$3F}5BksHH}cKu4~ptP+2`7nd$+7*E;QMyRr z6;yK=>*Ztp4eAbdZb=JxbSv;xF#Oi$=~cME;pK*megq?gPVR_&Rs>1M|0fV z_hg4FkWZ^_5%+Lf$IzyPaaqNaO|uaD#cRrHvExmS?$*SB+O$UsN>cFJe8oYJj;`9{ z#h{i(ITMIb7L*c8XIt$#5DVA{t*xeECMOr4tR9PMe&-nip$g%j?8hnDfljCv%t4p8 zULQxG*?;?eq%7}g)Kn01r^J&y=WJt3tFbKNFF(^>8^)gU@lxX$vgF)#huK!^c7|}2 z?d9$H$0uDSx90wu2Gw9?+qPQx15@r`KL^(cVcaye-aT$eDBMo|#uvSxov?7wA0kKY zgl7DG5~hR!h^3KdIv}m4S}$-aHWiFKLBBK%&%-zM((KDL3+&SzeXu>UX&=D`+8OXq zO=)i*S;a2>c(@yPaC6YL4^9bx)f?OjY90m8yEeIjGnxq7*VNpYv%8e=b|6CeX{Q=L zwaJ)rEnMoOinQ&pEdqmmcaCMfo9Eae^2&Z}BNge?r|J8^6r~X|$FRWL>hq?A7DGGo zFbK~Wi?}&+Behknnb4%otR1FA813z>;wl88J9}D-G*_-b#>#Q|6wA2E^|-pNqk)5G z-JFsDmiPiss#;1=n3M$0oX`O6DFO8LY7)hAsnXRbMF9WvPnbcD24Ywq^X*Uhs?$#D zr~z7WK=SCrJahp~9sTHWBUEFJ@lsN)%4eU)+w=n7Jyn|0Crsog$a*4h8>GX)olQ}8 zvblQ&cq2aBev?7r%bkLT3$ES}UtKk+oi^Ib9`t9bGYB`n(WW=HYXg-QaD7&?k{B2C+8vyyCc2kBdCV z>t3W`8>l%sP3R^)w8$At)FpX5jY}hpf4W0Zp(gxRcL!TA(4S~CE(Rvx-^B}EEzslQ z3wgPB6=~4vtDWNx6}aYw@{ItdQBdB9(tzu$y+77&h&m25jYUPeJWy>9e#>1n zOP#AD?c+b5wvkkhs^hS)6IW{CDneA6w6}3QAT;O8P93Z0b~!AftfSxX>{UQCFQB81 z!YxxMqOZpqbP*O%VG%&BJ+4#L_#eDS-G+I#Q-)fV_AM3gi>->>10{g*(A*8yn{E$Q z>LCRMxe}F7-h?rlN;`ypE?4giv3Lkg5XOB3lIkbpR8T+y!M*o&?(GVXsEcp}2MJVc z?dUwo(IrZeS3kLp_k(6(f7IK7U+j#UrD+Lijxw6&k5b1J=YlK9q8WEeE+zWhB$y)oLX z9+AyIp^H4!ac~;^JK7iK+feP++4w>K)()@s_?f*euPwRe0v|c~!NWbyLN0dIL_!9* za1`L^=tq5cQgEgq3lXHM8GXaYZ&CTj@8m77*-utwgrvCS>*0B+iDS+CjgY!-v1Xp& zlTQgpr^DTIPrTu?bLKOO;hm!6fZ;}%nXxF1Z5=aZA}x(}BoAdc{L-GV-=%BTdmrm# z8ZU_%%opBvS6~Q;pQ;bMKq{bl#pi;*OF(b&Yk>ru-9~7OXiql*!>=-t|0Ku9X}?K4 zJl0*KA4xI#VAh8I#$Nhvv6I6g1Y5&=c`#W`R$;#Oj%!G~XiPJAeRjbh*f-F9*~0)@ zxI7XkCROLinr>(b+`Xi;N`RHjJ^KEq62l6)67NWvRGKeJ;?vTX%t>cP1|(YSQ1OH6 z%dI{{##rBuWjw%%LNhlP?$HW4ZrHpG@VzE1&E{~QMeFd(E+i;LwE1~%o{fyv@_L-X z=v4#yhf$F{At{q9YDWF->UCaD=HBb&T*T5I^-i|OWP+}v-)&KwGC~H?0%>pw|2E<> za};9&qDcW$5|l{6sJ&t1p^gn7ARpiESJPKmwed!Y1jPpg;q0((Mnfv3tDAGfV1~EH zU~}5o@hTi$jqx*EzU8r9@1YZ(#7SL&5LR-->g&j8aXd0|Z6y%;qQSG6i}=>|hSjX8 zA|s9h`aRJW$+4LIfOkl}ziC2CrqaxIiYM*3M` z_qH{3DJHKwT0VO#@-gc_5y{gt`L4;2&)HY8$utcpPMGmC{G-Iei>*8%!CeZZ$ zvAifVwRasiafJ^K95cX!jZSZRKc>@kw|70Gzh+7-O=$t;@}a57kMcCzgGod{Y(O{~ zhWi1(v11`890xElpv{_fIVo>`etHMDmnH+n{0w+5uAe{`33icdqNc&UNnleVu!`&VBCp@_N6Hmo#_e zh>w+ez9k(XH{^o)w18bP2+|}jGqae^@NwijymrUoM2o?x@+TrXf}DYbTqng#z7Nf- z%ptx){A>a^<$IzQl_*%={gZF+#yR~3aX1uvpa`70qNwz4&y0vPh>?Cmp*bPQ)I8M| zy=pneC9iwcHhuFctA3(t6QD4_@a4O=($%=YLHBMy z`Oaq3Yl%K+aoI;sm1r#?eUx(Lutuy@;sa=HYDhxg3)}SR)w2FmnPSH;6?sMZ7}^ES zJt`*t$qdH3=^U{h^$s+6o-Ah(jW`W6N&;z&6|4qZo4*TZ*+s&03 z-WiwPEG-cA{^3(TLhLFnv;lHhR~k7u|PQTl3F1k~KbF zI0Xs+E1ky#R!aGNL`;y!hH2!innTx=BeO@6jtT2j?DUDK_egzPknzm%qhA@D3$je)PJ1xU%YbbU z@A_eMtHb2s)OKS!@c4-qa7t?QyPKMRQYlbDoFFy5TiDnAJ1j{~OBjw%OAXzQ8=NOqM}u2u<=e4 zeTDP4|27&jXy1Rl=$5bYYLW5y+Zw7BvS@oU1jqP1k$B*IY6J|Tt%JWH@8xxJ96teaPo1&dv zrsjhZ+onK+*b*`3ACC~ux-@?$v{amLiC)TKmU{w*!P$DOabB82a@pQA%^Bd#_x#DS z3oyCvt>57mB)$6SZE_1gb_~!xno{%(_A2XKb*D0|4GxYoX&WKm9WZ=|UQhep>7RVJ z^4BG^FW5fh4U6dtJnzaWdx?mo!rj2v+?YHl%YoLMVMR@Is=3k zL?qM>9G9JtL|PS)NnS|BKmI(Qrg66^vsr1T2izR`68M%*yd9#Sk2cgf|3~iPhv1yo zUhClDn!tj&VANMfJteWz`{q){f5^)`fZXj7!J4%^>2K+IEr1giEmuTWCf@Q<*}Qy@ zGaJ;~O({jP&adjyKaf-n+H%6bp);NU*Ui6lgObbr5reWoz9G<$>V<+Q=zZsj|1ubKJicu|M8)X%rlYw@36zHv!x!v?;( zPsrh$rLPBaAweys5Dg&avFR37yjtS?>5$`7i)9$9way{gHsjaN1=-prGK%8+4Ne=) z5-QXkN~Ye~A-yX>E#s!B!-utk=&&f;a(@~2ehk~n-W)-a4em*xI4Wj-r@WVuzj5SA zsi09uP!G5cdNMEqp{H|03_FkB{$2$N-FXJelR6UJdZyZZT&mCze%%AfBJf5^Mh*ml}-cIm#-@(z(l3tmMG_FQW$b?FN zY5}FIiKDh|hyaBW*LQEfbFMyi7Ev2?nRMRk9_(S$V%|F?&#jH$(Lq<>koO10K+_x7 z$N_sk$OxGTMen?X7AKCNu26Lpnvx>s7`F5rzX0g@?*}bVJ~;cjovc3?jp~eP2ME5r&)X`&CNEg1Hi$*sI47xXX!p}3D!|H159+e5ji$H%q zKeX?K6zXR1Ioir(`I_GpXtmqQ_T>ZM^qw|r68!^+JXATexat*9?7BzI_hEI!%D5aH z7)=eJ+_W(MTl*EmLfyRvYJ@U|A4TcU?frcH3p}17LvchL5ix0{JP}J|e$}BST5*7nXUumA)PfY5{jKA!YB9?L>~P*gL$gm4#5A z7romLA}16`p<26l3>*vQ0d2q@&b9&prtH7I!eNc?mpz5OsP7GO2Oo*p<0k1Yw41E* z`;BJ?&FLRXKL^a9~SVIMw9W5+sCjG2x8WC zO-`N!&qPhMIH%EJ(5g;2TmYdBl-R%}C-3~>=TC-T4K<``(*xwRahyj}n#>^elo%6X zs}*j~#uuSO&Vo-Byw|7V-}@={+!gM_3@?iPbc=t8N+nXn;yN*oE4u|R#~SgR4KMc; zn8g=>*!4C}v8nO~&merbI8{PtKf@Cpc#QWY(%Try8nDbwwqo2BYM(K+8!{BzJQ8t| z+$Hsh#8_49)Z34|(7?S8XPrY}0xr9^Rfhis<(yb`UJkoBwfRE}WeuS@I|;MlciA(5 z!Vkdl&k5lZws`of!1rI_g~5Tlm{KK2v?yk}@`kDE&GR=6)WOYSx5z2U<6`%EPiZ%X z3Slb&HXkeG#0tIk#Hce}WBHIEcb}%#yc@cD9Dqt(N2TiQ+zUdDbSoGT)`zLK2m5UM zd#*P0R!Cs4fbI&VbxChvDG}VD*{8Oo`eTo%rRh{5%BRgdiLPc;8F+G zh3N=+a{&JS+Ejc$v?4+`bY7Qr^D~INR8SqNI+?u~;3Zv;`Hn?}5a!#|kt99Irl$I- zSXD#^s52R+&26!x(fcnORl7S6FY2hW5@^z&WiLDjQ>7_fb8$zP@&QL{gzUXPx|&kJ zv^(h87joiYkF0jH(}wGQq(HmXPkZcbTh1mJQiO<5IrE!0&VKu6EB86!<+OlLggP!T z0{`c!y=pXhW{JQcL-dHcF2}fn%rk~MXxsU;}KkkD~}oz*62F>ZHZ=7 zHET#s&QSTa71HIuXNe$Ofy6ESS$n6TZ@bWSYDM@=eSn3d;0(7lH@5F8+YK6)pDU5Q zaLLWt!f}44H0Sukw!EpdfSbKlffiX6HJix&lao9G-ltQWx2QI`;c0yBXM09XG(lo{ zaQ>P%myRphOaFP(9_=A~+qS;^7qc|g8&KS~4AGg&Zdt}9uotp6ILtzVgzq7kvrLEU znIEf9O)Z4XDZz~y66~v6ofl1}bL&`HVD=w+mobBq(N=Ukh}n0#}tU;j9(2{ zy-Quc%GYt-r0JZSEjZh4iKiQt%CTp`9(JyA2Rl+Z#stw=R2t?99kcam4?1yr+Bl|Y zwv$3GQGL1myb$XI+k0@vDVd?5|o?i1{XBsn^-0s4v4xR z23+O@@HuoM_!K(hIdZXldK^A4&i@kRkWkka&ZHXrBQZu`{g*>WSMZK+3^FDH&1ckc z`#&O=HU7)K;x)LydO>-C81t1f0)D--H0*ttne48_m@PY<7D#99{TziOL@#MM$S{yv=OtuA7t6vEjjRNA>1* zc0x}=1(uuiU3_+iqRTuwwQOTkIo-?I4i=;{Q0$lu)_R@Z{M78L{2Hzdd^yqEw_#Ct zOEv{G?}t@{?;Je$ZI!SZ86k7UbwR+<7;uKM*CLjmL5?PZnKBLA+?(yc*~A0@HOC8Q z^P_(0i>RzdtYn~H0;#|Q+u_YeLony7^It2cf&fV&5+IC`Fc8|H4}cXLmw8)&a}7_S=!5rG7Z!Rv_F|&wLeoIm;)*{N$aCTsqqFZDo6!t_+~`j`fiNN`w)#2sWyajB zXr^MKn5cU3T*YCxNxBFeF*#xBt!$Z(CK1}OkBUA%A`6cUvI3Nep&R>Z4` z)*b-R3HKPX^ph(P9oWFBrAQ{yL3$Vs-DnIW!&?f?@A&X7!6ArOVL5OJuLibMmKN#( zVVsG(BQg!ISn?-t4P)!>A;DNc!8Mxr2;5xoyJV1qB0>R&Oah6@kP&#EBh3MyIktaS z7()gFZ#6PFkRc*4ZAeQ`|IbJS3imPhA@_htJlV_+Z#l0MfO9S;j;RSWh0~R1ZaQns zKv>P*jUezC4ZC`a!&*0h;^rW9;|UXL?6YQn(M<6aK~$E!?PD#Vy^>$50C{q+d?XCS z0_54dLFcpeE5LFH3}!~S6=X>6MGQk2#c~3+f^5iRP&p+Ukn)1Jj_d(U9i1L~MaW>% znzB?NyiH{Y4W-r;+T-r2mmO5yW&mSj9O4$rk*se{vA=J+Oa#|XbZ?h&AD^}A|9d-7 z232|O+cWL|PkO4SL(u%4@z$w^of4<+n3XkH&YVbQdvwCOJ2U$76p*#9H#I&aJypEn zp|A{m$aW_T;Q{)fAm!q5I~x3AoWt;8vN;#QY&Oyr2l+FZS|Jjra0l>mCxnh1=BX(MFwpYuXHab*>-1)%<_BttT`9nk`OHt1$MT};Y4q# z5Z#f-)bKqo+ILc-I8m-Vzs9OZk=qSx#rcO|SP6`0KX*r>Va4>{2FGoS=pEm~|2C|& zp9Uc+L|8#Vi-xYNg=|Th>J(HV65ROmr2w(}P_7)ax|*H%z?{~}#X8vA^Nh}P3C4JO z3P(M5Cm7JYy&KUda@lv`a&Z--c;W}aCe0FRVT)k6>j>{f+Ya8@R~3`jvxZfeNs4do zBJ7OD)m70#E^z)+Q5$_3MS9%8f14tH{Dtz_fds6_1#W})YT=`x?f>&&ywpH%=|#*;(pz!=A)HbNG3sx`D9!`9j1c7Jj&q;RBa|YB=lp3}B%RH2i|^RH|L|rRqT#LUixArspuWr_-kQ z%azi~kXAfkz!34$^F{GqB(U6SP`pDB(Z%?kpZT7mhZ6s|2<5$Xd=yC9MMoFzrCLD4?y8<-0N7JOVw z7m9Rm@UfUh)Fn81e$x%8MzW6Z*AdF8pmp)xY^uR9%ECfEC>w;|bw-%&R)q@;rZ0R& z%C89IjnK$xHnJ#{W0;r{qw}}e+`UP0Qp+nn6>G0$F1CR&i{Q6Uy z?uzIeSXr^?y&sK!qdgirv9co{A>0m}@Ro5gY3zi^LDw?R8~4))Nh8SN)6{E>1ZdJQ%*bb~0?>vuEPEHpcA^r^UZ% z#YML`htyxurpaFU9yJ+I9GN4O4B^VQ;V=@zwi!>_mYRmE!Z)h;aB*KVC9a9G^dQz# z`c<8)f$m1Ew3U+1j>zWgq6K6x{MEyimoH|ETCvK)7gK6iGR81|!(a5T$^*>W>L;>w z3&RuAVm=qiFyd}=*}($d=sa=#Z@rqt7N?GBcF~AdA1br4HoP+G%NK_Ja@9?#cr8{nqOscz z2JMCSFPg3l-W9nv0`G$Ff=Y;*gY)*s!SzR&NS~-T9}H->*~ecwURG2{&&d?{c&ZT7 zkMaSS*-9>GU6FMZlnvPVeI;9J%&90u-as_T>)U+-AK!Y&i$=WxDak(XB&l>9|w65TfCi#~{Na(jSP*GUI zzNq{}Oy~ZOSe2W*i*c&1D_?8ia_^QY10z@gV)KnS0_L$%wgOL^l?Joa$?th`v&!fqAmIrNH9?S6+N|LF;_YY;W(jv@^P zcXCpGuUno4o=b+?1vxbm%Jb-+r;Oa!H`*K!NCn|2)fl0uqxU5lpK0fKE^XpKsBR&W zeDYoE?teaXCyD6^c@b8bR>?(m<{F5fdB&7y@9nR@@ubb_v6mvEl@c9xvE=Mr`uqc~ z6dN=R$n%66Vu!ea114ESn?K&jvZpBe_XAeDOhW(QU7(yx>jC`=_qp@YaYQ~M=J_}m zL)q#sZ@qn($d&u8Rv7k-wS$;wnv`TPl@kE0u%baS_h(-WxgPBX_?O8E^WznUl$iek D{EX$& diff --git a/tests/goldens/3ds/pocket-shell.160.png b/tests/goldens/3ds/pocket-shell.160.png deleted file mode 100644 index 9548eb22001d754311efc7e8d75d94ebfa249fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23651 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 diff --git a/tests/goldens/3ds/pocket-shell.176.auxiliary.png b/tests/goldens/3ds/pocket-shell.176.auxiliary.png deleted file mode 100644 index eb803a39649096f2c02aed266786861b5f8f7be9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11415 zcmbVybyQScAMTkMVgzXrq)SOj=^9~ZX$6r~LJ$y;k{$%<5b5rYp+uVT1u1Ei7(kG2 zrJK2f@8@^djX&%jsodL^#P_`cB>H7CQOF-m~F*9QXBZ_R>H28N(u-RaSz3vUq0&?Paoqnk-RXsEgX z^=Z)9#(Kc;mEXC7aG=zq@e{w*!l}>QAH)VzY7_C8LZF*rKa5LiV}@b6fLDCgn^WRi z-#Nuv>)GCUV5VU?*>nHA{l47QsUx|eP&FSdu)rKgrsu>UUWvJhZry%-%52qrxNwLSqg_+Z;6 zQXylkH1tayV*cz6`>e1bMy5sZc%<;bq_Lrln{abNm z(<;k23D=7-r88bB|7Rls6b2M0+fwdUuF{S_&-@_ov`n_!c@5!H?o7<7{Gv6hUh|T2foM(S$IwX;ghLWkdhf+$4}+ z`}mlisrR3-3R;jPVS{;ZSEsE-AQJ#`-|@h#@Ea%PcT{gF7pkstK0a8jju;ioQVEg&*1MSbZj*yeJKsZr zFdtkG70eldPXddulRC=OKy`Ew&$9!2pG$2{xdBRT_2#|Kru7hJqhsmJbe=t#Wz!3C zc732wkzd2#Ew>nu^*mvb@1*rIHUTl8#ql?=0o6M_b+-QYPjP~FAc;-D6Y7`)D=3j1 zj*bq)&0Q-fJTQMFzde6_FGw7n#L{^sSx$5=XPbGpfzb>avKoBnLr|V8Nwct7HE9vg zZwNu%KT+J5ET1$BB^X}9xc_eKm%z=IFOCpn^<{Y(!4G#(r$qc@P*-%z79AD@UJ{gR zmT8uW3OoVo?`&9ZSiXdGR0kZ-x{hrtU7wOIDgdX`29&Cx*XRqv&87`_3vJ+`g*;-@CM_l^CR$S<{o5^ztN*ug!u%VQ66Yo4CFD#7Ci1o( zCg3rG=kiO>|JlyeWth1ya^_9DWGlKw3GotVJJ7#(1JXO~ew1~oTh;c7-rID-6jTg6 zVuO;va)o3mQntkpYf@w!-CpMR?CzYKrQGUu5I=dim(s4glX!cdyvI4Sp6eHQ*g#9s zO}h*4pvdW^fCY$Dz~pQXBShVPB1cXmvww(*^T9K3Q;A)y;e?KqIc7f!mpjLC`-F)OTG0WV z+q)_CTPh#+Z4Z~8V80&rWo?KMaIgG2_)B-VJ|$vDL^bxbWh;}SasAV5VP*3_$Z{eZ zf^sF{Tfo%*qVVv7^y(-8<&6Ne(ebSc8)TOQ=`uOMBkzhsr6S-_AT1#REDb1@a(lbP zv)o$|_I`tky#Emj*eV~L+8B(!JUYD({>G^VDpn%>u0YD@1ziJ@f%i2Z2K(ZS7_FB; z?}rdENBNao_}l;$f&e>#v%hrdwCRQ^pG3hPT+cOWFXQ}5p1}Z{|G`dOQ2_UMHw52^ ztQ8!1Lk6;m^u zk3Q24(pHkVzgu8Yim5syA%?M1Xn3b-osLxV6MXx|V^5iTMpA~E2P|t%^V;2yq(?rM zVTN@^hT(@yNmo<|h}V2B@CYC_p+t}&R6sO8$euf+h8J(Ay52&3o!AmPwr`uW|KZm5 zK|4uQUZJ=QFmApi+n;B;&{+P(u8VDxg4vXmV!S=(EUp&Ns{8zo8A$eT1yRHMB=<6K z=4a_NQ%VL%k_&j;(;5j2xo^1H2G+|57TW>Re!J5jeOWT<<)t1xBz}@VST@91epA-K zhNq7B`KbQ^!2S|qynm|#c~g!Ion4Wm^!72J@=gC3=^RXdBk{YOj*-c4ircT*CnbOn zP0qaqH;M8p0jKmjF&>7>m#EqmUXhR(IqM@vX`?i~`y zXoRG>>1oqXj!``O`fbUKnJ3pJnbNBjJb&oHADPbum}17~?hse64!@fp4rf3pGhtSU z+{Cf}h(Oy>msA*&!^~@5@e@h}F6d-|3DbD$=!oGqY(TbLMSE_Q@JCjXQTZLI`=|7L zm%Grie!aN6Bpu7TT1y1MQi)n1RRO<+eQ|x#};dE$n4J;P+Wc$k#*6m ztR=SB;RIyJ%)hG$5F#8ek1;8{sZhj%H0k0=h}`AJ)0H$#vQHr|GbD%}qFK3r+o{j9 z@5ZCpUl$Ypn)5G@_t%H~k$OOS`x`9hx!M#1G@=`oQn-Q6Q~OzFaSGy`fbN`g{Xu!MGU=*3prG*05b@7N>{1k1;RGi-Kc=@_q0V1 z%8@{e+Y0Oc)}j9p4(%$Z!jureK2W1qC=HzTQJAPu>J@63_1$6vz8)FkB93ka5~8rf z0cmfL{k#DvhB9+01PxXrNLi@Hp#tVOJrE*KPF5?GcdB-^%!L3i2~72Y1OCz`rTCZL zv7}c{+Gd`)!7V~|dyP>`8%7ozEnOmtsLF4jH5*$nUTrT~dH z;@cE`%5UGACA)Nv=4gdG)+C8_LWh&U=lN;`k)$jtwD51tn)8rs6VpslHBaxcwufm8 z{rLfcvN*PExPxGGos8-Ad+Yo<>EGfG^ch`ALFjX2yz-K@r5qRIeIU(`fY&T2v8W!Q z3A+=U0~MfujutyDl-Zt0X^TW-x{7iT- zD@uC<(3ZL^7?Nb$H3e0zb&!3sX9Uia1i%jxPJRNRYdpL7#IP`&!z|W! zpltZtGp*Qv0BzO>mqjWNylk}wsP-LuoZ?(Etjq&V5|VNPi=*vI2uL`e2>Abo?wkM{ z5Q|l7Y@G{;oNnR!I)Du^jtLUGsEKcXisD?>>dc_RXD8MI7ZXo*UdRHgov!Z&u{hxa8feXIPXx+KU(_*SKfY zI%Ge095mH*yt`CuVm&*KA19RNE}I@d)Vu=TsB9*=>oDzB@FRG8RcUqod@?0zpi)6A zrB~xP3XQHgAIUHGjXtXFnxO(J=gtIO4%(9X>t$k6mdlPFMgU9uEm9MA{W-+a)drDI zT$sPxNOXS`(d&*oYm*J*D-z9U%pvL%W~_9a@q2Y(SP6N7E?|7GNvELSSl4DE6Q45F z0N_Xp-EDSk_IKsKY~Ey*ER_^%b^w{9X(#RO_@4I_L>2T)5`z)oI2q+kK|AboP_9b{ zMM^M`5_AF}^Qck$T5n}q3xZyRZs^at*ni`21E>!X6IYAvN$F;_JC>uz-&W4!yz0IP zTIBLBH{9KZDB1?LHA7*#BnOahPMlKU_d_&d!A%wz#oEpJg3dP*)`Q>T>YW7A1MI#% z)9@YC^dH4@Ab8RkoEL5}+;wGPpyal0R5_wmQ_0w^%9Hf{Q&~vv{%vXm3f848cfcZ9 z;2*S)!ZFb{9e=m$LPYa8#YlhJ*3KN6Cxh3e#f0Fu)A@;M13>fD@x8~8}-3wgwIKAEx4MZ10mVI(ZvJ>?_YzZ&uO`M zoDNJ}rg79>-QK9qhC8y-Q!FE*cV%ahNEmq&s-Qd%8d2r_}Ie-i--Yq(=+M(j5g1u&qe(+eRUbQ zFsX3LHLIwCHA!M(1l)igB0puv_Jticp(nfs?v`KQW{3K!86ctcR82xPu#wL}#eWN5 z?M#jCbyPbr6fFyKVFGb_D?Da{>E3l^-kzt~`qfYpCmu$x*A4~lJdQuIO|qD9uIaNn z+}_Ap^XbB6-iAm^B!)l^h8l2L`y+OzY+veNzrTLrHZLG#Iuf&Gwo>67>qbwHEmr_j z6@k2#IYPJ0UQ@d{l112PN%7`5?*@I?EoYouxtk!)BO(Nib8frF z3vP(^5p)D%ORD4`RS(rvaz*T%s;965OTw|Z+q#)&K<}!!?Q+eT`=Pe0>>`-di4-KL z)%8yU4zW8XQk^mS z$PKU|9`T@sMpQ~s5D=*^E8qA-WckY{Ir`P83GH^Ujiy7u&%s0Tuv_D9NAEDYv| zi9_26C6y*BujG98)91};!n5tZ`x{>~|1hverk8{``x*DzIQ6A1C5`eyj?SAWm-zVe z4xjin>Ek&S$9|rnLjEf^G-<|9A7N$#%^Uzq7R3(3)286Q6G>Q7Tb-DO3fVWZO}7>y z+oX+lzuzLUN1}MJYrhbIh9%jB6 z>~M}_{hI=*@7ZKIOYv2QWbTICt4n;`?0@*n$%?NYV{+!dxk00eV3%C_-b&eWUkEmX zN--w~O!Np^-=J2)QtT-Tv7BbXq))jND89FE$kh>bSz?z0^p+w>-1u)PdaD@P3&>xW zt+N<)Ohy=R?BLnyv)eb9%+z{hdMAg^A;=vutos;a6r-84YT7Ypj=3ci!Dn-b((^gy?&ckSrU zx+|>P`I4B)zkf^SjXNpcdjr2eiiNl$q;k#wU-2S&Re7$w3Oo_JfRCOT2~`hXoUFDB zI{IOfK2w(wL3()1usvNV9rY$f6ddX8=5Bdz&xieIe^Zo5Ue#ab?YM2;2PP^fk{mxZlL*j8<__5~%)sj{O8QM{MZ#|vWp$5$I>aUx!acK$L? zDOhm~IhGd2%xDyeY~AF`6)1p~i`wJD>HZ~Nq_;E-3rP%&8zfV||oL@|qN~*KX z>iEpb)2%zlCua$)tSeWB^=K&eRcnU&)K9x?20aP63%vO`;IGy80wU1p zwQSA09U3$Fw!J(9y?Q7d#5p9pYV_#=q-t9Rwqss1`TDp9Nl4mg6b>?H=e^%ePF3SX z579HUys37U&-mV+jUbW%p?I)Zs7PKt@2abuuH4t)CSQRaC4A6tF#{)P5iFpU^c>TJ zCB%iZ^VQyTALt|Iprm0-#&WMGe#jPaIWYq@Z@@z5VM*{H-VZ^?yrm2>q)jdld-z~= zQ3~h+X{&A5MlGQKC5Jl3^K4h*opeV0Hx0B3#Jt$e28__cEKOK%EK#V^8Y>f|7pO~t z>o!$N)o$;`Vs*pkHA!a5c3r@o8CR3AH6RsE42F3lJKN$wN{v!zhxd4s!SCL?AKU|% zgHfz!&d-8f!XUcQO`c@`-aE{VDnJ7 zPzHo&Qym1y!$_sxw^P|(MU9zxbxX1)0j^fTX=HEiqvCBz#X{t&V&lMH4@XhjB*PT7q^y~{7SJ(KHqr#>9>IXu>uBWm0Rpr z=J>cr66pA}h)Z^ZK~<^O_U94JuiQ4xnBFb{q_Lcu@?L!^aF*wCgP*1!Aad+1-O-9> z4%?6}V(i!W`L)_TwJWOEl;kLrln(JKLwl1{3fOnGJr6)0>ud)|(RrRM5;GBa&^+-||6A2?jv$ z_jW8P7Z+_o<78jr8jUUtx63>Rf+rfm0*oWjssc)JeeA*Lj6ZcWF=5!9CgLhjD`47> zL4U5G{OZu{$+JVI>CLJpz6?lq8>vV+f$n3FvhLR?!z#aDmC1)2CeN%J?YoIuB>5{M???HM0!K=GBr zwE4p$B$+u*L@q#I`A0nD8vreT=>EiMSNzA9dsT)l_I7NGc3xYGMA<4CQq&c~%D=pO z)8EXerucU6%`4FdI@Fb5o~)#O?`GK7zjO3?j@2RI-dy~Z6cH?)?2c#w?=3oL(<(`( zPa7$;rfcG0GJ+Nh(0XZu$-P8HPnqoO>vddbH^=?Q_6JgveD9UT{6|3W&b*k~6AmVZ z!EoL?!FS+CZ=I;88ZOff+Yc?oW^{ZGmo!Cx4Swu3E9uBBPm#<_w{Z3W@=0=Y9K0EY zzZz_-4(c$eG%VM4tqR}0&13PtTGRpXT)w@JrON%8Y(wl8>SHFU#4~%~Q7Sv){2%6{ z2Z+IZk`dq3M<1i={CqZl1YcDvxZder>%_yiFl(^1*zp+~=dd%~`B*MHvnJqJ(U-_{ zA20-h-YKh!vsZnhr*I8m4VIlYs zP08VLo^!A7`F%d%HivJYG@wa`Ei9R*Xp8;z%249uIAet&-9%`I`|tZQRj+CojTc)? z_=yl!4r~=n9<$SF)eP_@Tqx_#82a(mi8^SnhU9IIb2=W3ivt#CM^m_YF*72L7gW>! zEGD43Z!(|Wo5)wv6c-5Y7bBn(_Bl>67s)SR{nYBQPZaq|1R~p8X1J?iM`{L z<$#!-@7{`)84m%9m*K3-C?7k4oOsazukqowH4jp$kCI9_JecSqi@+oCED{7S>7gKd zq+aHSy`*=p8CgAVH|sRg+5{&p3XF|BP?EqCIKCo~T!5c$demO5CAWZe_e@g*6RM-i z{kGg3^)OJ2>T|c4eMDBhtml3Wk_y*6k=S?fp03|8@aP61Y7$plw9)xT{$D5IGi#?M zfOQ=z-=C3xdB@nTeK;qAH6W_4Y1V(SNpJrD8=L%pLw{d8?{v%BI3{J+EOQ%+XC%ZZ zk~wLPhUdZ8oEmvX;t(P@Cqba}n*M&nYqEq~)6oZik{@h(@o$)8gHx=O&8+>u zBn8>t|K-ZQ(A>Y>MgNV0E@>nGCPnS||Gk`FzKo0$di|t>B<8$y9bnY40K?l&2=jr_=|+@GI~5*Y*uGxMfb&EiOjI_;%Fe2Og=aybiRo{Af$^Z)bp*)m9*95FBEAmUk6%zpMm=dy9UIGv%EfUNnF&W zNcp?{7AaF0rXE&k?>X|#67bMsaLmtgb``DMNvn@)Q~w2oK6rM5f_4lAewcaC7~w*l ziT1HZGh__K(P?^4bB!A4pSLxO9ZH1MzMg%tM&-eX5=TBktXtjO$IonuMGC)`Eo*KQuu`JfyTwWjh zB9%uJQ(IX3}sJ5&X}mZ0KZD%cfj5@YDi4EB*d=)Z;2*vZDq}uKgzX7 z1YK@n%9m^-b#H)IlArFT?d3_3=$L&K-|T9_*U=Z~vv1Fgs@0J|C<_?>oIauptk%TE zs>Fk5NhcW0=3!C!)${0>J-lb*t8CKuHiwqc%x&NxWK30p+D{bTDd9`pDY0?7Gr#ag zH|z9t^!40{6FohvU35A{@s!u|SGq%Zgcd(98uoKdjMm0XzY6WE1&%fV^vcJT4wNYo zT3Mc(ai8!^l1xF`quO%}`lGkW1XaukSVkDL1R47**lEfDfinJcWBv0Zk#ri1!vXca zk#^)w;x4yJvWl~t2~y2NI=A`p_{H!>VvGjGWY1nd*cpuV5-+Imj=rg~6B%qV z79eYEjyAP2^}K9waeiQ5^mB3T#|tw<7uB&B<7bp6fqdBU+bG+x*0g`n@AgQdUV9cV z9z`SWUvQc0YxU8Q4vCccMAT?hG!U{oil@z4D%=O*o(63-`z5|w$FH&+i1kuTpTI{s zuPj3-#7J}3YWBIOwML*$^t0!#$s$SjeXT2o8tjH~*QtOzmeg!7NWvFcfq10qd}qxB zi>5tY4b790wi@)ODC)eTwv1E=L~J0|kDaK{f0}bS=izPNMh~}@HSgrbXf4DC5#^1k z`Jc4s8f`M#bcn_NulRTAXT>I1_qoTkbb#nG?<@z)fjb&mhMU4Ww5|`laAA#l&v0nS zHG7`l0x^52_URdjeibBU*Lezie)O_m1`RfgQ-;RvI09 zF4r8S)XOebKA_I`03x@&A1Rz(0G9!J;HwpxehS@O`xyy;(v9!M!;X)-t=G8u~}p3IiJI@w>7Z(-6(J5u!-60HbY*=j%5y)a(kmYe*`|75i^p6DHl31 z&Z(&1=HSF?dtjnPag(P*D@fGlYcx)pKJ%aa(N>t8{g2jnXP>OQ`r`noq{aT9ect~w zqqOGPyZfUj1tf)F1pCPJR-(avuFr?%Htg{01@X=oi*jfI8HF z410>z{OHkZm2az#aqG~^zjrx7Bo|xXb!`TqYqHh=8~*1efW7V>%>7{3G4=MR!K}OK zbmTx9CEZgygDs}@BzWRh1WT?S6dd z6A9FHPkn^`-W&QMY&0n2=q`5}4z7BL^F)L^k_G%Xxy!Qsc4*hZ#Pss)1D4=u}*jorV^H z-8W{L*?RTM6hJfQ-?XxTm>V1eA&FoQT*S4WwTyJ(80P^(NI~4dAxr4B0-Kb9nGtMJ zXatCW={eA2(5h9l!1XZ&(yTRw_g~xSs0bke6Ku?5$&G%2RA&u5gG`{&%(If$CjWzc{?1Mi3#(APbiRC$oIOn&8nLJ9M3K#%S8*4uv<)?9=t0S0}mg+yeNd5 zg`$5^=hkzz`rPrO%SCo-`Tu+T^^0eBI^Oh3FTWm+;rf8dV*PjrtM|@MwPMkfm+dG} z0`hvnLhY~%-A&$2{$s#rGy;s3aoRcz#n>hMccIgQ+AA`_05f zD(-bjoJUhtL{4V}PA6#%mB+-_ZlewA*LRDe6vy+*O-@;rOVX@eT7h}x6{KLu&ShXH zv!LmqpiX>9fY7N)NM>r`OocZe`-FCCdLI31L%r`DMOd{L-3_{J@rWj4Ev0S0%hMH``+F`yr}5P149F* z$i^t=i2TFljg(zyUiYYsuLD2sO&^@pb}gK7T4a~Qs)~o0%Sqbbysi0cC~;KU7zi;0C1~Tg-!!CG@i!5^~^GTh}LE5 z5X?OqGHW`!|9hRw&R&S*bhHJ2XViLZvA#QNJSpvHDk}vd=4Ccjf3QOrQ66$>fpbC9 zTT{jhoVkt|0pts>BL%~qA_LCimogQe)j!il-T;I&Z}AU^TRv=i4PIt-01E1a7HO-7 z=Ebu_R)jXcxNQuRY>z0-4ki~Av0B7QfRyMmHDaa{>)MQqk{lSa2YtqX$*z;Ju7z5j zF!I_hHP8u$I;L5btSSgE+Z$h#E)GdwLc^sHE6N^T;>|Bih%mI^t2M2p7{0rGUyvj# zbFWLuBur?_wIRxxdj0FT@I-PJ9A24Gq^P11DQCyq#;akTVr3ABpS^Sxv^}GxXfBQMk!oybtTRa^5*r{?UGM@ED*aH2uE-8l#>DzB+wl}ZB;fa|wU3U+w zslq-i8PhHDjV4vR2ndbuC^P}orV6{WL~a?9jBrRM$@EA!FQnRQRRz0qI}9N`xCHv1 z*MPb2#yp3n>4fuIKg7afFO6kPKZD-WMj;2Mi3FLZLQt~UO77;nT?jSWN+XnZLv%q} zrXWfqs4nuX-gKJABeu<620~H^qPP+wnI7D((TKqgsfH2mW~{tA;~IYQw)~y+x4L7% zB+X72yVZ(_=gA#LhMucOYtF@;c@SKzgOWYkLL4d^D#X66tHWRp!BA(>2^X$9#b{tR P90RI~n(#__^SA#4r&NBH diff --git a/tests/goldens/3ds/pocket-shell.176.png b/tests/goldens/3ds/pocket-shell.176.png deleted file mode 100644 index 31a8f406985dd5994f0ab834413679a8b37eaad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18362 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 diff --git a/tests/goldens/3ds/pocket-shell.3.auxiliary.png b/tests/goldens/3ds/pocket-shell.3.auxiliary.png deleted file mode 100644 index 6886add9a256e7a49fa4c49ccb27026310a62d26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33443 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 diff --git a/tests/goldens/3ds/pocket-shell.48.auxiliary.png b/tests/goldens/3ds/pocket-shell.48.auxiliary.png deleted file mode 100644 index 11acf52d397a4cef269538dabbc8576b81449d54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24549 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 diff --git a/tests/goldens/3ds/pocket-shell.48.png b/tests/goldens/3ds/pocket-shell.48.png deleted file mode 100644 index dbf1b4467858043986376c70e23c8309b61230a7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24289 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 diff --git a/tests/goldens/3ds/pocket-shell.60.png b/tests/goldens/3ds/pocket-shell.60.png deleted file mode 100644 index a1c95cdffe354ffbdbbd6aa5d26845714bbc6b7d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24592 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 diff --git a/tests/goldens/3ds/pocket-shell.84.png b/tests/goldens/3ds/pocket-shell.84.png deleted file mode 100644 index ac2b5f8a32d9b697eed887126568739199d57430..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24414 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

(u>=yJ=;e~KkYt}HW}oYW#bNJ0Lf8^Br} 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 diff --git a/tests/platform-contracts.test.ts b/tests/platform-contracts.test.ts index a1d4548c8..1c5914a45 100644 --- a/tests/platform-contracts.test.ts +++ b/tests/platform-contracts.test.ts @@ -535,7 +535,6 @@ describe("semantic resolution", () => { "meizu-m8-demo": [false, false, false, false], // admitted only by the private meizu-m8-dev profile nsengine: [false, true, false, false], // targets the private ios-dev profile; vita shares its touch + integer-fit contract "ipod-nano": [false, false, false, false], // admitted by the package-shaped macos-embedded target - "pocket-shell": [false, false, false, false], // the tiling shell needs the private 3ds-dev profile's auxiliary display and touch contracts launcher: [true, true, false, true], // the Cover Flow deck (docs/LAUNCHER.md) is an ordinary console app library: [true, true, false, true], motions: [true, true, false, true], diff --git a/tests/pocket-shell-sim.test.ts b/tests/pocket-shell-sim.test.ts deleted file mode 100644 index 7c0957e5a..000000000 --- a/tests/pocket-shell-sim.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -// tests/pocket-shell-sim.test.ts — Pocket Shell's render layer in the -// headless sim: the same button tape the Azahar golden runs, with the dock -// taps replaced by store calls (the sim has no touch screen; a detached core -// node stands in for the 3DS bottom screen's host root). What this proves is -// that every chord, layout toggle and workspace switch reconciles the two -// Solid trees without a renderer error, in milliseconds rather than an -// emulator boot. - -import { describe, expect, test } from "bun:test"; -import { NODE_TYPE } from "../contracts/spec/spec.ts"; -import { bootWorld } from "../hosts/sim/sim.ts"; -import { THREE_DS_GOLDEN_SPECS } from "./golden-specs.ts"; -import type { ShellStore } from "../apps/pocket-shell/store.ts"; - -const spec = THREE_DS_GOLDEN_SPECS.find((s) => s.name === "pocket-shell"); -if (!spec) throw new Error("no pocket-shell golden spec"); - -async function boot(): Promise<{ world: Awaited>; store: ShellStore }> { - const world = await bootWorld("pocket-shell-main", 60, undefined, (ops) => { - const createNode = ops.createNode as (type: number) => number; - ops.__auxiliarySurface = { root: createNode(NODE_TYPE.view), w: 320, h: 240 }; - }); - const store = (globalThis as { __pocketShell?: ShellStore }).__pocketShell; - if (!store) throw new Error("the bundle did not publish __pocketShell"); - return { world, store }; -} - -describe("pocket-shell in the sim", () => { - test("the golden tape's chords run clean", async () => { - const { world, store } = await boot(); - // The tape's dock taps land on frames 8, 18 and 28. - const taps: Record = { 8: "term", 18: "notes", 28: "about" }; - for (let frame = 0; frame <= spec!.frames; frame++) { - const app = taps[frame]; - if (app) store.open(app); - // The tape's minimap hold at 186..222 closes term; the sim has no - // touch screen, so arm and release the close bar through the store. - if (frame === 210) store.setClosing({ id: store.order()[1], over: true }); - if (frame === 223) { - const closing = store.closing(); - if (closing) store.close(closing.id); - store.setClosing(null); - } - world.frame(spec!.input!(frame)); - if (frame === 48) { - expect(store.order().length).toBe(3); - expect(store.focusedApp()).toBe("about"); - } - if (frame === 60) { - expect(store.layer()).toBe("super"); - expect(store.focusedApp()).toBe("term"); - } - if (frame === 84) { - // R + RIGHT swapped term with notes: term now leads nothing, notes leads. - expect(store.windowOf(store.order()[0])?.app).toBe("notes"); - expect(store.focusedApp()).toBe("term"); - } - if (frame === 112) expect(store.layoutKind()).toBe("scrolling"); - if (frame === 126) { - expect(store.active()).toBe(2); - expect(store.layer()).toBe("ws"); - } - if (frame === 160) { - expect(store.active()).toBe(1); - expect(store.keysOpen()).toBe(true); - } - if (frame === 176) { - expect(store.keysOpen()).toBe(false); - expect(store.launcherOpen()).toBe(true); - } - if (frame === 183) expect(store.launcherOpen()).toBe(false); - if (frame === 240) expect(store.order().length).toBe(2); - } - }); - - test("every action runs against an empty and a full workspace", async () => { - const { world, store } = await boot(); - const actions = [ - "focus.left", "focus.right", "focus.up", "focus.down", - "swap.left", "swap.right", "swap.up", "swap.down", - "launcher", "launcher", "close", "fullscreen", "fullscreen", "maximize", "maximize", - "split", "swapsplit", "layout", "split", "swapsplit", "layout", - "keys", "keys", "another", "reopen", "wallpaper", "bar", "bar", - "carry.next", "carry.prev", "ws.next", "ws.prev", - ] as const; - world.frame(0); - for (const action of actions) { - store.run(action); - world.frame(0); - } - for (const app of ["term", "clock", "notes", "keys", "stats", "about"] as const) store.open(app); - for (let i = 0; i < 10; i++) world.frame(0); - for (const action of actions) { - store.run(action); - for (let i = 0; i < 3; i++) world.frame(0); - } - store.setKbOpen(true); - store.focusWin(store.order()[0]); - for (let i = 0; i < 3; i++) world.frame(0); - store.typeChar("h"); - store.typeChar("e"); - store.typeKey("tab"); - store.typeKey("enter"); - for (let i = 0; i < 3; i++) world.frame(0); - expect(store.wm.windows.size).toBeGreaterThan(0); - }); -}); diff --git a/tests/pocket-shell-wm.test.ts b/tests/pocket-shell-wm.test.ts deleted file mode 100644 index 1535d607d..000000000 --- a/tests/pocket-shell-wm.test.ts +++ /dev/null @@ -1,433 +0,0 @@ -// tests/pocket-shell-wm.test.ts — the window manager's layout rules, without -// a device: dwindle splits, scrolling columns, directional focus and swap, -// resize, fullscreen, workspace moves, and the touch handles. - -import { describe, expect, test } from "bun:test"; -import { - BAR_H, - GAP_IN, - GAP_OUT, - STAGE_H, - STAGE_W, - WindowManager, - type Rect, -} from "../apps/pocket-shell/wm.ts"; -import { CHORDS, chordFor, keySheet, labelFor, layerOf } from "../apps/pocket-shell/chords.ts"; -import { - CLEAR, - civilFromEpoch, - complete, - detectOffsetMinutes, - formatClock, - formatDate, - formatOffset, - parseOffset, - formatUptime, - run, - type ShellApi, -} from "../apps/pocket-shell/shell.ts"; -import { BTN } from "../contracts/spec/spec.ts"; - -type App = "term" | "clock" | "notes"; - -const rectOf = (wm: WindowManager, id: number): Rect => { - const placement = wm.placement(id); - if (!placement) throw new Error(`no placement for #${id}`); - return placement.rect; -}; - -describe("dwindle", () => { - test("the first window fills the workspace inside the gaps", () => { - const wm = new WindowManager(); - const id = wm.open("term"); - expect(rectOf(wm, id)).toEqual({ - x: GAP_OUT + GAP_IN, - y: BAR_H + GAP_OUT + GAP_IN, - w: STAGE_W - 2 * (GAP_OUT + GAP_IN), - h: STAGE_H - BAR_H - 2 * (GAP_OUT + GAP_IN), - }); - expect(wm.workspace().focus).toBe(id); - }); - - test("a second window splits the wide first one side by side, third stacks", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - const ra = rectOf(wm, a); - const rb = rectOf(wm, b); - expect(ra.y).toBe(rb.y); - expect(rb.x).toBeGreaterThan(ra.x + ra.w); - expect(rb.x - (ra.x + ra.w)).toBe(2 * GAP_IN); - // The focused (right) column is taller than wide, so the third stacks under it. - const c = wm.open("notes"); - const rb2 = rectOf(wm, b); - const rc = rectOf(wm, c); - expect(rc.x).toBe(rb2.x); - expect(rc.y).toBeGreaterThan(rb2.y + rb2.h); - expect(wm.order()).toEqual([a, b, c]); - }); - - test("closing gives the space back and focuses the neighbour", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - const c = wm.open("notes"); - expect(wm.close(c)).toBe(true); - expect(wm.workspace().focus).toBe(b); - expect(rectOf(wm, b).h).toBe(rectOf(wm, a).h); - wm.close(b); - expect(rectOf(wm, a).w).toBe(STAGE_W - 2 * (GAP_OUT + GAP_IN)); - wm.close(a); - expect(wm.count()).toBe(0); - expect(wm.workspace().focus).toBeNull(); - expect(wm.close()).toBe(false); - }); - - test("reopen brings back the last closed app", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - wm.open("clock"); - wm.close(a); - const again = wm.reopen(); - expect(again).not.toBeNull(); - expect(wm.windows.get(again!)?.app).toBe("term"); - expect(wm.windows.get(again!)?.title).toBe("term"); - wm.close(); // closes term again - wm.close(); // clock - wm.reopen(); - wm.reopen(); - expect(wm.reopen()).toBeNull(); - }); - - test("focus and swap follow the d-pad directions", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - const c = wm.open("notes"); - expect(wm.workspace().focus).toBe(c); - expect(wm.focusDir("up")).toBe(true); - expect(wm.workspace().focus).toBe(b); - expect(wm.focusDir("left")).toBe(true); - expect(wm.workspace().focus).toBe(a); - expect(wm.focusDir("left")).toBe(false); - // Swap a with its right neighbour: a takes b's slot. - const before = rectOf(wm, b); - expect(wm.swapDir("right")).toBe(true); - expect(rectOf(wm, a)).toEqual(before); - expect(wm.workspace().focus).toBe(a); - expect(wm.order()).toEqual([b, a, c]); - }); - - test("resize pushes the nearest boundary in the pad's direction", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - wm.focusWin(a); - const wa = rectOf(wm, a).w; - wm.resize(20, 0); - expect(rectOf(wm, a).w).toBe(wa + 20); - // From the right window, pushing right has no boundary on that side, so - // the left boundary moves right and the window shrinks. - wm.focusWin(b); - const wb = rectOf(wm, b).w; - wm.resize(20, 0); - expect(rectOf(wm, b).w).toBe(wb - 20); - // Ratios clamp. - for (let i = 0; i < 100; i++) wm.resize(50, 0); - expect(rectOf(wm, a).w).toBeGreaterThan(rectOf(wm, b).w); - expect(rectOf(wm, b).w).toBeGreaterThan(20); - }); - - test("toggleSplit flips orientation; swapSplit exchanges halves", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - expect(wm.toggleSplit()).toBe(true); - expect(rectOf(wm, a).x).toBe(rectOf(wm, b).x); - expect(rectOf(wm, b).y).toBeGreaterThan(rectOf(wm, a).y); - expect(wm.swapSplit()).toBe(true); - expect(rectOf(wm, a).y).toBeGreaterThan(rectOf(wm, b).y); - expect(wm.order()).toEqual([b, a]); - }); - - test("fullscreen covers the stage and hides the others; focus elsewhere clears it", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - wm.toggleFullscreen("full"); - expect(rectOf(wm, b)).toEqual({ x: 0, y: 0, w: STAGE_W, h: STAGE_H }); - expect(wm.placement(a)?.hidden).toBe(true); - wm.toggleFullscreen("max"); - expect(rectOf(wm, b)).toEqual(wm.area()); - wm.focusWin(a); - expect(wm.workspace().fullscreen).toBeNull(); - expect(wm.placement(a)?.hidden).toBe(false); - }); - - test("a split boundary can be found and dragged", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - wm.open("clock"); - const ra = rectOf(wm, a); - const handle = wm.splitAt({ x: ra.x + ra.w + GAP_IN, y: 120 }, 6); - expect(handle?.axis).toBe("x"); - wm.dragSplit(handle!, { x: 100, y: 120 }); - expect(rectOf(wm, a).x + rectOf(wm, a).w + GAP_IN).toBe(100); - expect(wm.splitAt({ x: 200, y: 20 }, 6)).toBeNull(); - }); - - test("the bar can be hidden and the area grows", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const before = rectOf(wm, a); - wm.toggleBar(); - expect(rectOf(wm, a).y).toBe(before.y - BAR_H); - expect(rectOf(wm, a).h).toBe(before.h + BAR_H); - }); -}); - -describe("scrolling", () => { - test("columns take 0.49 of the width and the strip follows focus", () => { - const wm = new WindowManager(); - wm.toggleLayout(); - expect(wm.workspace().layout).toBe("scrolling"); - const a = wm.open("term"); - const b = wm.open("clock"); - const area = wm.area(); - expect(rectOf(wm, a).w).toBe(Math.round(area.w * 0.49) - 2 * GAP_IN); - expect(rectOf(wm, a).x).toBe(area.x + GAP_IN); - expect(rectOf(wm, b).x).toBe(area.x + Math.round(area.w * 0.49) + GAP_IN); - // A third column does not fit: the strip scrolls so it is fully visible. - const c = wm.open("notes"); - const rc = rectOf(wm, c); - expect(rc.x + rc.w + GAP_IN).toBeLessThanOrEqual(area.x + area.w); - expect(wm.workspace().scroll).toBeGreaterThan(0); - expect(rectOf(wm, a).x).toBeLessThan(area.x); - // Focusing the first column scrolls back. - wm.focusWin(a); - expect(wm.workspace().scroll).toBe(0); - }); - - test("focus and swap work across offscreen columns", () => { - const wm = new WindowManager(); - wm.toggleLayout(); - const a = wm.open("term"); - const b = wm.open("clock"); - const c = wm.open("notes"); - wm.focusWin(a); - expect(wm.focusDir("right")).toBe(true); - expect(wm.workspace().focus).toBe(b); - expect(wm.focusDir("right")).toBe(true); - expect(wm.workspace().focus).toBe(c); - expect(wm.focusDir("right")).toBe(false); - expect(wm.swapDir("left")).toBe(true); - expect(wm.order()).toEqual([a, c, b]); - }); - - test("column width cycles, and stack/unstack moves a window between columns", () => { - const wm = new WindowManager(); - wm.toggleLayout(); - const a = wm.open("term"); - const b = wm.open("clock"); - expect(wm.cycleColumnWidth()).toBe(true); - expect(wm.workspace().columns[1].width).toBe(0.66); - // b joins a's column. - expect(wm.consumeOrExpel()).toBe(true); - expect(wm.workspace().columns.length).toBe(1); - expect(wm.workspace().columns[0].wins).toEqual([a, b]); - expect(rectOf(wm, b).y).toBeGreaterThan(rectOf(wm, a).y); - expect(wm.focusDir("up")).toBe(true); - expect(wm.workspace().focus).toBe(a); - // a leaves into its own column to the right. - expect(wm.consumeOrExpel()).toBe(true); - expect(wm.workspace().columns.map((c) => c.wins)).toEqual([[b], [a]]); - }); - - test("toggling back to dwindle keeps order and focus", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - const c = wm.open("notes"); - wm.focusWin(b); - wm.toggleLayout(); - expect(wm.order()).toEqual([a, b, c]); - expect(wm.workspace().focus).toBe(b); - wm.toggleLayout(); - expect(wm.workspace().layout).toBe("dwindle"); - expect(wm.order()).toEqual([a, b, c]); - expect(wm.workspace().focus).toBe(b); - expect(wm.placements().length).toBe(3); - }); - - test("a column edge can be dragged", () => { - const wm = new WindowManager(); - wm.toggleLayout(); - wm.open("term"); - wm.open("clock"); - const area = wm.area(); - const edge = area.x + Math.round(area.w * 0.49); - const handle = wm.columnEdgeAt({ x: edge + 2, y: 100 }, 6); - expect(handle).not.toBeNull(); - wm.dragColumnEdge(handle!, { x: area.x + Math.round(area.w * 0.3), y: 100 }); - expect(handle!.column.width).toBeCloseTo(0.3, 1); - }); -}); - -describe("workspaces", () => { - test("carry moves the focused window and follows it", () => { - const wm = new WindowManager(); - const a = wm.open("term"); - const b = wm.open("clock"); - expect(wm.carryWs(1)).toBe(true); - expect(wm.active).toBe(2); - expect(wm.workspace(2).focus).toBe(b); - expect(wm.workspace(1).focus).toBe(a); - expect(wm.count(wm.workspace(1))).toBe(1); - expect(wm.windows.get(b)?.ws).toBe(2); - expect(wm.stepWs(-1)).toBe(true); - expect(wm.stepWs(-1)).toBe(false); - expect(wm.moveToWs(a, 1)).toBe(false); - expect(wm.moveToWs(a, 5)).toBe(true); - expect(wm.active).toBe(1); - expect(wm.count()).toBe(0); - }); - - test("each workspace keeps its own layout", () => { - const wm = new WindowManager(); - wm.toggleLayout(); - wm.switchWs(2); - expect(wm.workspace().layout).toBe("dwindle"); - wm.switchWs(1); - expect(wm.workspace().layout).toBe("scrolling"); - }); -}); - -describe("chords", () => { - test("layers come from the shoulders", () => { - expect(layerOf(0)).toBe("plain"); - expect(layerOf(BTN.LTRIGGER)).toBe("super"); - expect(layerOf(BTN.RTRIGGER)).toBe("shift"); - expect(layerOf(BTN.LTRIGGER | BTN.RTRIGGER)).toBe("ws"); - }); - - test("every chord is unique per layer and every action has a label", () => { - const seen = new Set(); - for (const chord of CHORDS) { - const key = `${chord.layer}:${chord.button}`; - expect(seen.has(key)).toBe(false); - seen.add(key); - expect(labelFor(chord.action, "dwindle").length).toBeGreaterThan(0); - expect(labelFor(chord.action, "scrolling").length).toBeGreaterThan(0); - } - expect(chordFor("super", BTN.CROSS)?.action).toBe("close"); - expect(chordFor("plain", BTN.CROSS)).toBeUndefined(); - expect(keySheet("dwindle").length).toBe(4); - }); -}); - -describe("pocketsh", () => { - function fakeApi(): { api: ShellApi; log: string[] } { - const log: string[] = []; - let tz = 0; - const api: ShellApi = { - apps: () => ["term", "clock"], - windows: () => [{ id: 1, app: "term", title: "term", ws: 1, focused: true }], - workspace: () => 1, - layout: () => "dwindle", - wallpaper: () => "road", - uptimeSeconds: () => 3725, - now: () => civilFromEpoch(Date.UTC(2000, 0, 1, 9, 41, 0)), - host: () => "3ds", - open: (app) => (app === "clock" ? 2 : null), - close: (id) => { - log.push(`close ${id ?? "focused"}`); - return true; - }, - focus: (id) => id === 1, - switchWs: (id) => id >= 1 && id <= 5, - setLayout: (layout) => { - log.push(`layout ${layout}`); - }, - nextWallpaper: () => "lake", - timezone: () => tz, - setTimezone: (minutes: number) => { - tz = minutes; - log.push(`tz ${minutes}`); - }, - keys: () => [{ title: "L", rows: [{ keys: "L + B", what: "close" }] }], - }; - return { api, log }; - } - - test("commands drive the api and report", () => { - const { api, log } = fakeApi(); - expect(run("ls", api)).toEqual(["* #1 term"]); - expect(run("open clock", api)).toEqual(["opened clock as #2"]); - expect(run("open nope", api)[0]).toContain("no app"); - expect(run("close #1", api)).toEqual(["closed #1"]); - expect(run("layout scrolling", api)).toEqual(["workspace 1 is now scrolling"]); - expect(log).toEqual(["close 1", "layout scrolling"]); - expect(run("ws 9", api)[0]).toContain("1-5"); - expect(run("wall next", api)).toEqual(["wallpaper: lake"]); - expect(run("date", api)).toEqual(["Sat Jan 1 2000 09:41"]); - expect(run("uptime", api)).toEqual(["1h 02m 05s"]); - expect(run("echo hi there", api)).toEqual(["hi there"]); - expect(run("clear", api)).toEqual([CLEAR]); - expect(run("", api)).toEqual([]); - expect(run("frob", api)).toEqual(["pocketsh: frob: command not found"]); - expect(run("keys", api)).toEqual(["L", " L + B close"]); - expect(run("fetch", api).length).toBe(6); - }); - - test("completion and clock formatting", () => { - expect(complete("la")).toEqual(["layout"]); - expect(complete("")).toHaveLength(15); - const at = (h: number, m: number) => civilFromEpoch(Date.UTC(2000, 0, 1, h, m, 0)); - expect(formatClock(at(0, 5), false)).toBe("00:05"); - expect(formatClock(at(13, 5), true)).toBe("01:05"); - expect(formatClock(at(0, 5), true)).toBe("12:05"); - expect(formatUptime(59)).toBe("0m 59s"); - }); - - // The device's RTC epoch is sound but QuickJS's breakdown of it is not, so - // every displayed field comes from this arithmetic instead of Date methods. - test("civil time is derived from the epoch alone", () => { - const cases: [number, string, string][] = [ - [Date.UTC(1970, 0, 1, 0, 0, 0), "Thu Jan 1 1970", "00:00"], - [Date.UTC(2000, 1, 29, 23, 59, 59), "Tue Feb 29 2000", "23:59"], // leap year - [Date.UTC(2026, 8, 2, 5, 24, 49), "Wed Sep 2 2026", "05:24"], // the reading on hardware - [Date.UTC(2100, 2, 1, 12, 0, 0), "Mon Mar 1 2100", "12:00"], // 2100 is not a leap year - ]; - for (const [ms, date, clock] of cases) { - const civil = civilFromEpoch(ms); - expect(formatDate(civil)).toBe(date); - expect(formatClock(civil)).toBe(clock); - } - // Whole seconds, and the offset shifts the wall clock without touching the epoch. - expect(civilFromEpoch(Date.UTC(2026, 8, 2, 5, 24, 49)).second).toBe(49); - expect(formatClock(civilFromEpoch(Date.UTC(2026, 8, 2, 5, 24, 0), 8 * 60))).toBe("13:24"); - expect(formatDate(civilFromEpoch(Date.UTC(2026, 8, 2, 23, 30, 0), 60))).toBe("Thu Sep 3 2026"); - }); - - test("the operator can state the clock offset the console cannot", () => { - const { api } = fakeApi(); - expect(run("tz", api)).toEqual(["UTC"]); - expect(run("tz +8", api)).toEqual(["clock is UTC+08:00"]); - expect(run("tz", api)).toEqual(["UTC+08:00"]); - expect(run("tz -5:30", api)).toEqual(["clock is UTC-05:30"]); - expect(run("tz 0", api)).toEqual(["clock is UTC"]); - expect(run("tz +7:07", api)[0]).toContain("try"); - expect(run("tz 99", api)[0]).toContain("try"); - expect(parseOffset("+05:45")).toBe(345); - expect(formatOffset(-330)).toBe("-05:30"); - }); - - test("a nonsensical timezone reading is refused rather than frozen in", () => { - const ms = Date.UTC(2026, 8, 2, 5, 0, 0); - const local = (h: number, m = 0) => ({ getHours: () => h, getMinutes: () => m }) as Date; - expect(detectOffsetMinutes(ms, local(13))).toBe(8 * 60); // a real zone - expect(detectOffsetMinutes(ms, local(5))).toBe(0); - expect(detectOffsetMinutes(ms, local(6, 30))).toBe(90); // quarter-hour zones exist - expect(detectOffsetMinutes(ms, local(5, 7))).toBe(0); // 7 minutes is not a zone - }); -}); diff --git a/tools/test.ts b/tools/test.ts index bf3db1362..ab6f5838e 100644 --- a/tools/test.ts +++ b/tools/test.ts @@ -50,7 +50,6 @@ const SUITE: readonly Stage[] = [ "tests/3ds-profile.test.ts", "tests/3ds-runtime-state.test.ts", "tests/3ds-runtime-wire.test.ts", - "tests/pocket-shell-wm.test.ts", "tests/iphone2g-profile.test.ts", "tests/iphone4s-profile.test.ts", "tests/ipodtouch-profile.test.ts", @@ -163,12 +162,6 @@ const SUITE: readonly Stage[] = [ browser: true, tests: ["tests/launcher-sim.test.ts"], }, - { - name: "pocket-shell sim", - prep: [["bun", "tools/build.ts", "pocket-shell-main"]], - browser: true, - tests: ["tests/pocket-shell-sim.test.ts"], - }, ]; // --------------------------------------------------------------------------- From 582cc1c6e1e2bdd5df780e3348c6d5d69aaa239d Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Tue, 1 Sep 2026 23:04:02 -0700 Subject: [PATCH 10/27] feat(pocket-remote): stage and deck modes, the ball and Omarchy's menu as a sheet, a control centre, a virtual pointer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The third pass over the iPod touch remote after hands-on use. The dock is gone; everything it held has a better place. - Strip: tabs, the layout badge, a Stage | Deck mode switch and the control centre's button. Stage is the desktop miniature (now 292 px tall); Deck is the laptop's C surface — five compact rows of keys over a trackpad. - Stage: hold a tile and a classic popup (Float/Tile, Full screen, Close) opens at the finger with a caret; drag a floating window and it moves on the laptop under the finger (`win place`, monitor-relative; the daemon restores the monitor origin and dispatches hl.dsp.window.move). An empty workspace offers Terminal, Browser and Files. - Deck: comma, period and apostrophe on the letter layers, backtick on the symbol layer; a pressed key rises, glows and shows its character in a bubble; hold-and-slide variants stay. The trackpad is a relative pointer with acceleration: tap clicks, two fingers scroll, two-finger tap is the right button, a hold drags. - The ball: an AssistiveTouch-style handle that snaps to a side edge; tapping it opens Omarchy's whole menu as a centred two-column scrolling sheet with the shell's own rows, order, titles and glyphs. menu.ts is generated from omarchy-menu.jsonc (`bun tools/pocket-remote.ts menu x1nano`); the daemon parses the same file live, runs rows by id under `bash -lc` as the shell does, evaluates every `when`/`checked` in one bash run and sends the hidden and checked ids. The wire still carries no command strings. - Control centre: hangs from its button — Wi-Fi (nmcli), screenshot, nightlight, MPRIS now-playing with transport (busctl), brightness and volume sliders; hold the button and slide to adjust relatively. - Icons are Nerd Font glyphs: fonts.json names a 68 KiB subset (tools/font-subset.ts) and bake-font gains `fallbackTtfs`, tried per codepoint the slot's face lacks and scaled through the source face's upm. - host/pointer/pocket-pointer.c: a zwlr_virtual_pointer_v1 client fed one command per line, built on the Omarchy machine at deploy with wayland-scanner and cc (protocol XML vendored). Verified against Hyprland. - Protocol 2: host `cc` and `menu` lines; device `win place/float/full`, `ptr`, `click`, `scroll`, `drag`, `wifi`, `menu`. - `bun tools/pocket-remote.ts shots

` renders every screen in the headless sim; the README shows them. Tests cover the new geometry, the JSONC parser and baked table, the readers, and the sim flows over a fake svc channel (46 tests). - Licensed GPL-3.0-or-later (LICENSE, SPDX headers). Gotchas kept: Node's type stripping rejects constructor parameter properties; a View's default cross-axis alignment is centre, so fixed-width labels take items-start. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/LICENSE | 674 ++++++++++++++ apps/pocket-remote/README.md | 341 +++---- apps/pocket-remote/actions.ts | 216 +---- apps/pocket-remote/app.tsx | 101 ++- apps/pocket-remote/ball.tsx | 69 ++ apps/pocket-remote/connect.tsx | 1 + apps/pocket-remote/control.tsx | 288 ++++++ apps/pocket-remote/deck.tsx | 388 ++++++++ apps/pocket-remote/desk.tsx | 829 ------------------ apps/pocket-remote/fonts.json | 3 + .../pocket-remote/fonts/LICENSE-NerdFonts.txt | 126 +++ .../fonts/SymbolsNerdFont-subset.otf | Bin 0 -> 69784 bytes apps/pocket-remote/glyphs.ts | 86 ++ apps/pocket-remote/handlers.ts | 14 + apps/pocket-remote/host/hypr.ts | 7 +- apps/pocket-remote/host/menu-source.ts | 160 ++++ apps/pocket-remote/host/omarchy.ts | 267 +++++- .../host/pointer/pocket-pointer.c | 114 +++ .../wlr-virtual-pointer-unstable-v1.xml | 152 ++++ apps/pocket-remote/host/serve.ts | 112 ++- apps/pocket-remote/host/wire.ts | 1 + apps/pocket-remote/icons.tsx | 368 ++------ apps/pocket-remote/keyboard-layout.ts | 113 ++- apps/pocket-remote/keyboard.tsx | 253 ------ apps/pocket-remote/layout.ts | 325 +++++-- apps/pocket-remote/main.tsx | 1 + apps/pocket-remote/media/connect.png | Bin 0 -> 8371 bytes apps/pocket-remote/media/control-centre.png | Bin 0 -> 14190 bytes apps/pocket-remote/media/deck-key.png | Bin 0 -> 15895 bytes apps/pocket-remote/media/deck-variants.png | Bin 0 -> 15793 bytes apps/pocket-remote/media/deck.png | Bin 0 -> 15275 bytes apps/pocket-remote/media/empty.png | Bin 0 -> 10214 bytes apps/pocket-remote/media/menu-root.png | Bin 0 -> 13300 bytes apps/pocket-remote/media/menu-toggle.png | Bin 0 -> 9090 bytes apps/pocket-remote/media/menu-trigger.png | Bin 0 -> 12531 bytes apps/pocket-remote/media/popup.png | Bin 0 -> 11710 bytes apps/pocket-remote/media/stage.png | Bin 0 -> 10949 bytes apps/pocket-remote/menu-sheet.tsx | 225 +++++ apps/pocket-remote/menu-tree.ts | 60 ++ apps/pocket-remote/menu.ts | 354 ++++++++ apps/pocket-remote/pad.tsx | 261 ------ apps/pocket-remote/popup.tsx | 87 ++ apps/pocket-remote/protocol.ts | 90 +- apps/pocket-remote/stage.tsx | 297 +++++++ apps/pocket-remote/store.ts | 582 +++++++++--- apps/pocket-remote/strip.tsx | 217 +++++ apps/pocket-remote/theme.ts | 19 + framework/compiler/bake-font.ts | 30 +- tests/pocket-remote-sim.test.ts | 121 ++- tests/pocket-remote.test.ts | 618 +++++++++---- tools/build.ts | 19 + tools/font-subset.ts | 81 ++ tools/pocket-remote.ts | 263 +++++- 53 files changed, 5804 insertions(+), 2529 deletions(-) create mode 100644 apps/pocket-remote/LICENSE create mode 100644 apps/pocket-remote/ball.tsx create mode 100644 apps/pocket-remote/control.tsx create mode 100644 apps/pocket-remote/deck.tsx delete mode 100644 apps/pocket-remote/desk.tsx create mode 100644 apps/pocket-remote/fonts.json create mode 100644 apps/pocket-remote/fonts/LICENSE-NerdFonts.txt create mode 100644 apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf create mode 100644 apps/pocket-remote/glyphs.ts create mode 100644 apps/pocket-remote/handlers.ts create mode 100644 apps/pocket-remote/host/menu-source.ts create mode 100644 apps/pocket-remote/host/pointer/pocket-pointer.c create mode 100644 apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml delete mode 100644 apps/pocket-remote/keyboard.tsx create mode 100644 apps/pocket-remote/media/connect.png create mode 100644 apps/pocket-remote/media/control-centre.png create mode 100644 apps/pocket-remote/media/deck-key.png create mode 100644 apps/pocket-remote/media/deck-variants.png create mode 100644 apps/pocket-remote/media/deck.png create mode 100644 apps/pocket-remote/media/empty.png create mode 100644 apps/pocket-remote/media/menu-root.png create mode 100644 apps/pocket-remote/media/menu-toggle.png create mode 100644 apps/pocket-remote/media/menu-trigger.png create mode 100644 apps/pocket-remote/media/popup.png create mode 100644 apps/pocket-remote/media/stage.png create mode 100644 apps/pocket-remote/menu-sheet.tsx create mode 100644 apps/pocket-remote/menu-tree.ts create mode 100644 apps/pocket-remote/menu.ts delete mode 100644 apps/pocket-remote/pad.tsx create mode 100644 apps/pocket-remote/popup.tsx create mode 100644 apps/pocket-remote/stage.tsx create mode 100644 apps/pocket-remote/strip.tsx create mode 100644 tools/font-subset.ts diff --git a/apps/pocket-remote/LICENSE b/apps/pocket-remote/LICENSE new file mode 100644 index 000000000..f288702d2 --- /dev/null +++ b/apps/pocket-remote/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 9dbfdb83a..3daf30698 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -4,129 +4,166 @@ An Omarchy companion on the iPod touch 4: a landscape touch surface that mirrors the desktop and drives it. **The iPod runs the PocketJS guest; a small daemon on the Omarchy machine mirrors Hyprland into snapshots and runs the same commands the keyboard bindings run.** Nothing on the wire is a -command string — the device sends action ids from `actions.ts`, the daemon -looks them up. +command string — the device names an action id or a row of Omarchy's own +menu, the daemon looks it up. + +Licensed under the GNU General Public License v3.0 or later (`LICENSE`). ``` - iPod touch 4 (480x320 landscape) WiFi Omarchy machine - ┌────────────────────────────────┐ PKNT/TCP ┌─────────────────────────┐ - │ apps/pocket-remote (Solid) │◀────────────▶│ host/serve.ts (Node) │ - │ hosts/iphone2g/svcwire.c │ beacon UDP │ .socket.sock requests │ - └────────────────────────────────┘ │ .socket2.sock events │ - │ omarchy-* / wtype │ - └─────────────────────────┘ + iPod touch 4 (480x320 landscape) USB (usbmuxd) Omarchy machine + ┌────────────────────────────────┐ PKNT/TCP ┌──────────────────────────┐ + │ apps/pocket-remote (Solid) │◀───────────────▶│ host/serve.ts (Node) │ + │ hosts/iphone2g/svcwire.c │ or WiFi+beacon │ .socket.sock requests │ + └────────────────────────────────┘ │ .socket2.sock events │ + │ omarchy-* / wtype │ + │ pocket-pointer (wl) │ + └──────────────────────────┘ ``` +## Screens + +Rendered in the headless sim by `bun tools/pocket-remote.ts shots media/` +against a scripted desktop; the panel is 480x320. + +| | | +|---|---| +| ![the stage](media/stage.png) | ![a held tile's popup](media/popup.png) | +| ![the control centre](media/control-centre.png) | ![Omarchy's menu as a sheet](media/menu-root.png) | +| ![the Trigger submenu](media/menu-trigger.png) | ![the deck](media/deck.png) | +| ![a key's bubble](media/deck-key.png) | ![a held key's variants](media/deck-variants.png) | + ## The screen ``` -┌─────────────────────────────────────────────────────────────┐ -│ 1 2 3 + dwindle ⏮ ▷ ⏭ │ strip 28 px -├─────────────────────────────────────────────────────────────┤ -│ │ -│ live miniature of the focused monitor │ stage 240 px -│ tiles = windows, accent border = focus │ -│ │ -├─────────────────────────────────────────────────────────────┤ -│ Ω >_ ◍ ▤ ✎ ⛶ ◱ ▣ ≡ ⌨ ⋯ │ dock 52 px -└─────────────────────────────────────────────────────────────┘ +┌────────────────────────────────────────────────────────────────┐ +│ 1 2 3 dwindle [▦ | ⌨] ☰ │ strip 28 px +├────────────────────────────────────────────────────────────────┤ +│ │ +│ stage: live miniature of the focused monitor │ +│ tiles = windows, accent border = focus ┌──┐ │ 292 px +│ deck: five rows of keys over a trackpad │◎ │ │ +│ └──┘ │ +└────────────────────────────────────────────────────────────────┘ ``` -The layout does not move. Every element has one place, every place one job, -so the remote can be used with a glance and, after a day, without one. It -has two verbs: **tap**, and **hold-and-slide** — hold a key and a set of -choices opens under the finger; slide onto one and release. Novices see the -choices, experts stroke through them without looking (the marking-menu -result). +Two verbs: **tap**, and **hold**. A hold either opens something under the +finger (a tile's popup, the control centre's sliders) or picks something up +(the ball, a floating window, a key's variants). Novices see the choices; +after a day the strokes are made without looking. -- **Strip**. One tab per workspace Hyprland has, the active one filled, plus +- **Strip.** One tab per workspace Hyprland has, the active one filled, plus one empty tab so there is always somewhere new to go (the Omarchy bar's - rule). Tap switches. Hold a tab to bring the focused window there and + rule). Tap switches; hold a tab to bring the focused window there and follow it. The badge names the active workspace's layout and toggles it - (Omarchy's SUPER+L). Media transport sits at the right end. -- **Stage**. The focused monitor scaled to fit, every window a tile labelled - by class and title, the focused one bordered in the accent. **Tap focuses. - Hold closes** — a bar fills across the tile over 0.6 s; lift early and - nothing happens. Drag a tile onto another to swap them (Hyprland's - `swapwindow` in the direction between their centres), onto a strip tab to - move it there. Swipe empty stage to step workspaces. The stage is direct - manipulation of the real desktop: the snapshot comes from `hyprctl clients` - geometry, so a tile is exactly where the window is. -- **Dock**. Menu, Term, Web, Files, Edit, Full, Float, Shot, Levels, Type, - more — eleven 43 px slots across the full width. Each action runs the - command Omarchy binds to the equivalent key. -- **Menu** (tap) toggles Omarchy's menu on the desktop. **Menu (hold)** opens - the cascade: six routes rise above the dock over a veil — Apps, Capture, - Toggle, Style, System, Learn, nearest first — and sliding onto a route fans - its leaves out beside it. Release on a leaf to run it, on a route to open - that route's menu on the desktop, elsewhere to cancel. -- **Levels** is the control-centre control: brightness and volume as two - horizontal sliders with their toggles (nightlight, mute) in one card. - Tap Levels to open it sticky and drag a slider; tap outside to close. - Hold Levels and slide: the row under the finger follows it **relatively** - (a slider never jumps to the finger), release and the card lingers a second - then puts itself away. Brightness and volume are low-frequency, so they - earn one slot, not two rails. -- **Type** opens the keyboard over the whole screen — when typing is the job, - nothing else on the remote matters. Five rows of 48 px keys: esc and the - digits on top, letters, arrows, tab, ctrl and alt, a chevron in the caption - bar to put it away. Chords two ways: **sticky modifiers** (tap ctrl, then - the key; ctrl arms, paints itself, drops after one key) and - **hold-and-slide variants** (hold `x` → `^X` `⌥X`, hold `1` → `F1` `^1`, - as light chips above the key; release on the key itself types it plain). - Keys go straight to the desktop (`wtype`); nothing is buffered on the - device, so what the desktop shows is the truth. -- **more** opens the pad: everything else, grouped the way Omarchy's own - menu groups it — Window, Desk, Toggle, Capture, Theme, System — as - labelled keys. **Destructive keys take a hold** (close, suspend, close all) - and say so when tapped. - -Every touch target answers a press with a tint overlay that lingers a few -frames after release — a capacitive panel has no hover and the remote's own -feedback is the only local one; the action itself is confirmed on the -desktop. A toast over the stage names the last action. + (SUPER+L). The **mode switch** picks the stage or the deck. The last button + opens the **control centre**. +- **Stage.** The focused monitor scaled to fit, every window a tile labelled + by class and title, the focused one bordered in the accent, floating + windows marked. **Tap focuses. Hold a tile** and a popup opens at the + finger — Float / Tile, Full screen, Close — the classic kind: one container + of rows with a caret at the point it answers. **Drag a floating window and + it moves**, on the laptop, under the finger (Hyprland places it every third + frame and on release). Drag a tiled window onto another to swap them, onto + a tab to move it there. Swipe empty stage to step workspaces; an empty + workspace offers Terminal, Browser and Files. +- **Deck.** The laptop's C surface on the iPod: five compact rows of keys + over a trackpad, so typing and pointing need no mode of their own. Keys go + straight to the desktop (`wtype`) as they are pressed; a pressed key rises, + brightens and shows its character in a bubble above the finger. Comma and + period sit beside the space bar, apostrophe after the letters, backtick on + the symbol layer; esc, tab, ctrl, alt and the arrows are always there. + **Chords two ways**: sticky modifiers (tap ctrl, then the key; ctrl arms, + paints itself, drops after one key) and hold-and-slide variants (hold `x` + → `^X` `⌥X`, hold `1` → `F1` `^1`; release on the key itself types it + plain). The **trackpad** is a relative pointer with acceleration: one + finger moves, a tap clicks, two fingers scroll, a two-finger tap is the + right button, a hold picks something up and the button stays down until + the finger lifts. +- **The ball.** Omarchy's menu (SUPER+SPACE) has a handle that floats over + everything and lives on a side edge. **Tap it and the menu opens as a + sheet** in the middle of the screen: the same rows in the same order with + the same glyphs, two columns wide, scrolling. A submenu opens in place with + its title and a back chevron; an action runs on the laptop and the sheet + goes away; the two runtime-listed submenus (Apps, Fonts) open on the laptop + instead. **Hold the ball and it comes along**; let go and it slides to the + nearer edge at that height. It fades while idle. +- **Control centre.** Hangs from its button: Wi-Fi (tap toggles the radio), + a screenshot, nightlight, what is playing with its transport, then + brightness and volume as sliders. Levels follow the finger **relatively** — + touching a slider never jumps the level to the finger — and a tap on a + track nudges by a step. Opened by a tap it stays until a tap outside; + **hold the button and slide** down onto a slider to adjust and let go, and + it puts itself away. + +Every touch target answers a press with a tint that eases in and out — a +capacitive panel has no hover and the remote's own feedback is the only local +one; the action itself is confirmed on the desktop. A toast over the stage +names the last action. ## Why these choices **A tiling desktop is addressable.** Workspaces have numbers, windows have -addresses, actions have names. That is why the remote has no cursor and no -dial: the Siri Remote needs a trackpad because tvOS is spatial; Omarchy is a -namespace, and a namespace wants direct targets. The stage is the one -spatial element and it is a picture of the real arrangement, not a proxy. - -**The remote wears the theme.** The daemon reads Omarchy's `colors.toml` -for the current theme and every themed node repaints through `jump()` on its -mirror when the palette changes (theme.ts). Class literals carry Tokyo Night, -Omarchy's default, so the first frame looks right before the daemon speaks. -Because a class string is a baked literal, a runtime colour can only reach a -node as a prop write; pressed states therefore live on separate overlay nodes -rather than as class flips on themed ones. +addresses, actions have names. That is why the stage has no cursor: the Siri +Remote needs a trackpad because tvOS is spatial; Omarchy is a namespace, and +a namespace wants direct targets. The stage is the one spatial element and it +is a picture of the real arrangement, not a proxy. The deck's trackpad exists +for the applications inside the windows, which are spatial. + +**The menu is Omarchy's, not a summary of it.** `menu.ts` is generated from +the machine's `omarchy-menu.jsonc` (`bun tools/pocket-remote.ts menu x1nano`) +and carries every row's id, parent, kind, label and glyph in the shell's +order. The daemon parses the same file live — the default plus the user's +extension — runs an action's command under `bash -lc` exactly as the shell +does, evaluates every `when` and `checked` in one bash run every thirty +seconds and after any action, and sends the hidden and the checked ids; the +device applies them to its static table. A row the device names has to exist +on the machine as well, so the wire still carries no command strings. + +**The remote wears the theme and its iconography.** The daemon reads Omarchy's +`colors.toml` and every themed node repaints through `jump()` on its mirror +when the palette changes (theme.ts); class literals carry Tokyo Night so the +first frame looks right before the daemon speaks. The icons are the Nerd Font +glyphs Omarchy's bar and menu draw: `fonts.json` names a 68 KiB subset of the +symbols face (`tools/font-subset.ts`) as a fallback for codepoints Inter does +not map, and the atlas baker takes those glyphs from it, so an icon is text — +it recolours with the theme and needs no rectangle art. **Motion is a pool, not a tree.** Tiles live in a fixed pool of 24 slots (protocol `WINDOWS_MAX`) keyed by window address. A snapshot re-targets the pool; the frame loop eases each slot toward its target and writes geometry -straight to the node mirror. Reordering never happens, so the `` -adjacent-swap reconcile path is never exercised, and an idle frame writes -nothing. +straight to the node mirror. A floating tile under the finger keeps its own +geometry until the daemon echoes the placement, so a snapshot cannot yank it +back mid-drag. **Optimistic where the desktop will agree.** Tapping a tab commits the new -active workspace locally and re-targets the stage before the daemon confirms; -a snapshot carries every workspace's windows, so the new stage is already -known. Level drags update locally and send at most every three frames; host -echoes are ignored for half a second after a release so the rail never -snaps back on the way. +active workspace locally before the daemon confirms. Level drags update +locally and send at most every three frames; host echoes are ignored for half +a second after a release so a slider never snaps back on the way. ## Hyprland's request socket speaks Lua Hyprland 0.5x (the Lua-config generation Omarchy 4 runs) evaluates `dispatch ` on `.socket.sock` as `hl.dispatch()`, so the old `dispatch workspace 1` grammar fails with a Lua parse error — from `hyprctl` -too. **Every dispatcher in `actions.ts` is therefore a Lua constructor call** -(`hl.dsp.focus({ workspace = "1" })`, `hl.dsp.window.close({ window = -"address:0x…" })`), the same ones Omarchy's own bindings and scripts use. The -daemon builds window and workspace targets only from validated pieces -(`luaWindow`, `luaWorkspace`), so nothing off the wire can reach the Lua -evaluator as code. +too. **Every dispatcher is therefore a Lua constructor call** +(`hl.dsp.focus({ workspace = "1" })`, `hl.dsp.window.move({ window = +"address:0x…", x = 100, y = 200 })`), the same ones Omarchy's own bindings and +scripts use. The daemon builds window and workspace targets only from +validated pieces (`luaWindow`, `luaWorkspace`), so nothing off the wire can +reach the Lua evaluator as code. Placements arrive monitor-relative and get +the focused monitor's origin back on, because Hyprland places in layout +coordinates. + +## The pointer + +Hyprland has no dispatcher for a click and nothing in Omarchy's repositories +drives a pointer from a script, but Hyprland speaks `zwlr_virtual_pointer_v1`. +`host/pointer/pocket-pointer.c` is a client of that protocol and nothing +else: it reads one command per line (`m dx dy`, `b code state`, `s dy dx`, +`e`) and forwards them as pointer events. The daemon keeps one running and +restarts it if it dies. It is built on the Omarchy machine at deploy time +with `wayland-scanner` and `cc` against the vendored protocol XML — no +uinput, no root, no extra daemon. ## The wire @@ -134,91 +171,81 @@ Spec ops 30–32 (`svcOpen`/`svcPoll`/`svcSend`) over the SVC WIRE (PKNT) TCP transport, exactly the mailbox the PSP, Vita and 3DS companions speak. `hosts/iphone2g/svcwire.c` is the legacy Apple hosts' transport — a port of the 3DS one (non-blocking BSD sockets pumped once per guest frame, no -threads) — compiled in only when `POCKET_SVC_WIRE` is defined, so every -other legacy Apple build keeps its op table byte-identical. - -Lines are JSON (`protocol.ts`). Host → device: `hello`, `auth`, `state`, -`levels`, `theme`, `toast`. Device → host: `hello`, `act`, `ws`, `win`, -`vol`, `bri`, `mute`, `media`, `type`, `key`, `theme`. **A snapshot has to -fit one 8 KiB poll batch**, so titles are clipped to 28 code points, windows -to the 24 most recently focused, and coordinates are integers. - -Discovery: the daemon (or the relay) broadcasts the PKNT beacon once a -second; the device connects to the datagram's source. A host override file -at `/private/var/tmp/pocketjs-svc-host.txt` on the device (one line, -`a.b.c.d[:port]`) skips discovery for broadcast-hostile networks. - -**The cable.** The device also listens on port 8624. When the iPod is plugged -into the Omarchy machine, usbmuxd lists it and `iproxy` forwards a host port -to that listener; the daemon polls `idevice_id -l` every three seconds, -forwards a port per device and dials it. Same wire, roles of `connect()` -reversed — the device still speaks the hello first — no WiFi, no beacon, no -firewall rule, and **a device on the cable is trusted without a dialog: -physical possession is the pairing.** The device's acceptance record reports -the transport as `svc=up-usb`. This needs the `usbmuxd` package on the -machine (libimobiledevice alone ships `iproxy` but not the daemon that talks -to the device). +threads) — compiled in only when `POCKET_SVC_WIRE` is defined. + +Lines are JSON (`protocol.ts`, `REMOTE_PROTO` 2). Host → device: `hello`, +`auth`, `state`, `levels`, `theme`, `cc` (Wi-Fi and what is playing), `menu` +(hidden and checked ids), `toast`. Device → host: `hello`, `act`, `ws`, `win` +(focus, close, swap, move, place, float, full), `vol`, `bri`, `mute`, `media`, +`type`, `key`, `ptr`, `click`, `scroll`, `drag`, `wifi`, `menu`. **A snapshot +has to fit one 8 KiB poll batch**, so titles are clipped to 28 code points, +windows to the 24 most recently focused, and coordinates are integers. +Pointer motion is accumulated on the device and sent at most once per frame. + +**The cable.** The device listens on port 8624. When the iPod is plugged into +the Omarchy machine, usbmuxd lists it and `iproxy` forwards a host port to +that listener; the daemon polls `idevice_id -l` every three seconds, forwards +a port per device and dials it. Same wire, roles of `connect()` reversed — the +device still speaks the hello first — no WiFi, no beacon, no firewall rule, +and **a device on the cable is trusted without a dialog: physical possession +is the pairing.** This needs the `usbmuxd` package on the machine. + +Discovery over WiFi is still there: the daemon (or the relay) broadcasts the +PKNT beacon once a second and the device connects to the datagram's source. ## Trust The LAN is not a trust boundary. The daemon accepts commands only from -addresses in `~/.local/state/pocket-remote/allowed.json`; a new device is put -on hold and `hyprland-dialog` asks on the desktop whether to allow it. An -unanswered dialog is not a refusal — the device is asked again next time. -Until allowed, a device sees the mirror but every command is dropped. The -action vocabulary is closed (`actions.ts`); typed text goes through `wtype` -capped at 256 characters per line; keysyms are a short allow-list. +addresses in `~/.local/state/pocket-remote/allowed.json` or from the cable; a +new WiFi device is put on hold and `hyprland-dialog` asks on the desktop +whether to allow it. Until allowed, a device sees the mirror but every +command is dropped. The action vocabulary is closed (`actions.ts`); menu rows +are ids resolved against the machine's own menu file; typed text goes through +`wtype` capped at 256 characters per line; keysyms are a short allow-list; +pointer deltas are bounded. ## Running it On the Omarchy machine (`ssh` alias `x1nano`; Node comes from mise): ``` -bun tools/pocket-remote.ts deploy-host x1nano # copy the daemon, install + start the user unit -bun tools/pocket-remote.ts logs x1nano # journal tail +bun tools/pocket-remote.ts deploy-host x1nano # copy the daemon, build the pointer helper, install + start the user unit +bun tools/pocket-remote.ts logs x1nano # journal tail +bun tools/pocket-remote.ts menu x1nano # regenerate menu.ts after an Omarchy update +bun tools/pocket-remote.ts shots out/ # render every screen in the headless sim ``` -Omarchy ships ufw with incoming DROP, so the iPod cannot reach tcp 8622 on -the laptop directly. Until `sudo ufw allow from 172.20.8.0/21 to any port 8622 -proto tcp` has been run there (and the unit started with `--beacon`), run the -relay on the Mac — an ssh tunnel over the port that is open, plus the beacon: +On the iPod, plugged into the Omarchy machine: ``` -bun tools/pocket-remote.ts relay x1nano # local 8623 -> x1nano:8622, beacon on 8621 +POCKETJS_IPODTOUCH4_APP=pocket-remote POCKETJS_IPODTOUCH4_VIA=x1nano bun ipodtouch4 deploy +POCKETJS_IPODTOUCH4_APP=pocket-remote POCKETJS_IPODTOUCH4_VIA=x1nano bun ipodtouch4 launch ``` -On the iPod: - -``` -POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 deploy -POCKETJS_IPODTOUCH4_APP=pocket-remote bun ipodtouch4 launch -``` - -When the iPod is plugged into the Omarchy machine rather than this Mac, add -`POCKETJS_IPODTOUCH4_VIA=x1nano`: device discovery and the `iproxy` tunnel -run there over ssh, and every ssh/scp to the device jumps through it -(`ProxyJump`), so the deployment key and the pinned host key stay here. - -The app coexists with Pocket Clear: its own bundle, executable, URL scheme -and receipt files (`tools/ipodtouch4.ts` `IPODTOUCH4_APPS`). +`POCKETJS_IPODTOUCH4_VIA` runs device discovery and the `iproxy` tunnel on +the machine over ssh and jumps every ssh/scp to the device through it +(`ProxyJump`), so the deployment key and the pinned host key stay here. The +app coexists with Pocket Clear: its own bundle, executable, URL scheme and +receipt files (`tools/ipodtouch4.ts` `IPODTOUCH4_APPS`). ## Landscape on a portrait panel The plan asks for 480x320 native. The host keeps the window at the panel's -own 320x480, rotates the content view a quarter turn about its centre -(home button on the right) and lets the CAEAGLLayer's drawable follow the -view's bounds, so GL renders 960x640 and UIKit's `locationInView:` already -reports touches in the view's rotated space. The resolver admits a native -viewport that fills the panel in either orientation and reports the -transposed physical size, which `status` and `capture` check against. +own 320x480, rotates the content view a quarter turn about its centre (home +button on the right) and lets the CAEAGLLayer's drawable follow the view's +bounds, so GL renders 960x640 and UIKit's `locationInView:` already reports +touches in the view's rotated space. ## Testing - `tests/pocket-remote.test.ts` — wire constants pinned to spec.ts, framing, - protocol clipping, the action table's invariants, layout arithmetic, the - Hyprland → snapshot reduction, Omarchy output parsers. -- `tests/pocket-remote-sim.test.ts` — the built bundle in the headless sim: - hello, theme, snapshot, tiles settle, a tap on the strip switches - workspace, the pending-approval screen. + protocol clipping, the action table, layout arithmetic (stage, ball, popup, + control centre, sheet, deck), the Hyprland → snapshot reduction, the Omarchy + readers (levels, theme, network, MPRIS), the menu source parser against a + JSONC sample and the baked table, the deck's keyboard. +- `tests/pocket-remote-sim.test.ts` — the built bundle in the headless sim + over a fake svc channel: a snapshot becomes tiles, the strip switches + workspace, the ball opens the sheet and a submenu, the control centre + opens and mutes, the deck types a chord and the trackpad moves the pointer. - `bun tools/pocket-remote.ts client 127.0.0.1:8623 --for 4` — a scripted device against a live daemon. diff --git a/apps/pocket-remote/actions.ts b/apps/pocket-remote/actions.ts index b09502079..692201f91 100644 --- a/apps/pocket-remote/actions.ts +++ b/apps/pocket-remote/actions.ts @@ -1,23 +1,20 @@ -// apps/pocket-remote/actions.ts — the whole vocabulary the remote can ask the -// laptop for, in one table read by BOTH ends: the device renders labels and -// groups from it, the daemon runs exactly the command it names and nothing -// else. The wire carries an action id, never a command string, so a device -// on the LAN can only ever pick from this list. +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/actions.ts — the fixed vocabulary the remote's own +// controls ask the laptop for, in one table read by BOTH ends: the device +// renders labels from it, the daemon runs exactly the command it names and +// nothing else. The wire carries an action id, never a command string. +// +// Omarchy's menu is not in this table: the device carries the menu tree +// (menu.ts) and names a row by id; the daemon runs that row from its own +// parse of omarchy-menu.jsonc (host/menu-source.ts). This table is for the +// controls the remote draws itself — the strip, the control centre, the +// empty stage's launchers. // // Every command is the one Omarchy binds to the equivalent key -// (/usr/share/omarchy/default/hypr/bindings/*.lua, Omarchy 4.0) or the one -// its menu runs (omarchy-menu.jsonc), so the remote behaves exactly like the -// keyboard would. +// (/usr/share/omarchy/default/hypr/bindings/*.lua, Omarchy 4.0), so the +// remote behaves exactly like the keyboard would. -export type ActionGroup = - | "launch" - | "window" - | "workspace" - | "toggle" - | "capture" - | "style" - | "system" - | "media"; +export type ActionGroup = "launch" | "workspace" | "toggle" | "capture" | "media"; export type ActionRun = /** argv, spawned directly (no shell). */ @@ -25,8 +22,7 @@ export type ActionRun = /** A Hyprland dispatcher as a Lua expression (Hyprland 0.5x's request * socket takes `dispatch ` and evaluates `hl.dispatch()`; the * old `dispatch workspace 1` grammar is gone). Constructors are the ones - * Omarchy's own bindings use: hl.dsp.window.*, hl.dsp.focus(...), - * hl.dsp.layout(...), hl.dsp.workspace.*, hl.dsp.group.*. */ + * Omarchy's own bindings use. */ | { dispatch: string }; export interface ActionDef { @@ -34,163 +30,50 @@ export interface ActionDef { label: string; group: ActionGroup; run: ActionRun; - /** Destructive: the device requires a press-and-hold, not a tap. */ - hold?: true; } export type ActionId = // launch - | "menu" - | "apps" - | "menuStyle" - | "menuCapture" - | "menuToggle" - | "menuSystem" - | "menuLearn" | "terminal" | "browser" | "files" - | "editor" - | "keybindings" - | "emoji" - | "clipboard" - // window - | "close" - | "fullscreen" - | "maximize" - | "float" - | "pseudo" - | "split" - | "pop" - | "group" - | "cycle" - | "focusL" - | "focusR" - | "focusU" - | "focusD" - | "swapL" - | "swapR" - | "swapU" - | "swapD" - | "widen" - | "narrow" // workspace | "wsPrev" | "wsNext" - | "wsBack" - | "scratchpad" - | "toScratchpad" | "layout" // toggle | "nightlight" - | "awake" - | "bar" - | "silence" - | "gaps" - | "transparency" - | "dismiss" // capture | "screenshot" - | "record" - | "recordStop" - | "ocr" - | "color" - | "qr" - // style - | "bgNext" - | "themePicker" - // system - | "lock" - | "screensaver" - | "suspend" - | "closeAll" // media | "play" | "next" - | "prev" - | "outputSwitch"; + | "prev"; const omarchy = (...argv: string[]): ActionRun => ({ exec: argv }); const dispatch = (line: string): ActionRun => ({ dispatch: line }); export const ACTIONS: readonly ActionDef[] = [ - // -- launch (SUPER + ...) -------------------------------------------------- - { id: "menu", label: "Menu", group: "launch", run: omarchy("omarchy-menu", "toggle") }, - { id: "apps", label: "Apps", group: "launch", run: omarchy("omarchy-menu", "toggle", "apps") }, - { id: "menuStyle", label: "Style menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "style") }, - { id: "menuCapture", label: "Capture menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "capture") }, - { id: "menuToggle", label: "Toggle menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "toggle") }, - { id: "menuSystem", label: "System menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "system") }, - { id: "menuLearn", label: "Learn menu", group: "launch", run: omarchy("omarchy-menu", "toggle", "learn") }, + // -- launch (SUPER + Return / B / F) ----------------------------------------- { id: "terminal", label: "Terminal", group: "launch", run: omarchy("omarchy-launch-terminal") }, { id: "browser", label: "Browser", group: "launch", run: omarchy("omarchy-launch-browser") }, { id: "files", label: "Files", group: "launch", run: omarchy("omarchy-launch-nautilus") }, - { id: "editor", label: "Editor", group: "launch", run: omarchy("omarchy-launch-editor") }, - { id: "keybindings", label: "Keys", group: "launch", run: omarchy("omarchy-menu-keybindings") }, - { id: "emoji", label: "Emoji", group: "launch", run: omarchy("omarchy-shell", "shell", "toggle", "omarchy.emojis") }, - { id: "clipboard", label: "Clipboard", group: "launch", run: omarchy("omarchy-menu-clipboard") }, - - // -- window ---------------------------------------------------------------- - { id: "close", label: "Close", group: "window", run: dispatch("hl.dsp.window.close()"), hold: true }, - { id: "fullscreen", label: "Full screen", group: "window", run: dispatch('hl.dsp.window.fullscreen({ mode = "fullscreen" })') }, - { id: "maximize", label: "Full width", group: "window", run: dispatch('hl.dsp.window.fullscreen({ mode = "maximized" })') }, - { id: "float", label: "Float", group: "window", run: dispatch('hl.dsp.window.float({ action = "toggle" })') }, - { id: "pseudo", label: "Pseudo", group: "window", run: dispatch("hl.dsp.window.pseudo()") }, - { id: "split", label: "Split", group: "window", run: dispatch('hl.dsp.layout("togglesplit")') }, - { id: "pop", label: "Pop out", group: "window", run: omarchy("omarchy-hyprland-window-pop") }, - { id: "group", label: "Group", group: "window", run: dispatch("hl.dsp.group.toggle()") }, - { id: "cycle", label: "Next window", group: "window", run: dispatch("hl.dsp.window.cycle_next()") }, - { id: "focusL", label: "Focus left", group: "window", run: dispatch('hl.dsp.focus({ direction = "l" })') }, - { id: "focusR", label: "Focus right", group: "window", run: dispatch('hl.dsp.focus({ direction = "r" })') }, - { id: "focusU", label: "Focus up", group: "window", run: dispatch('hl.dsp.focus({ direction = "u" })') }, - { id: "focusD", label: "Focus down", group: "window", run: dispatch('hl.dsp.focus({ direction = "d" })') }, - { id: "swapL", label: "Swap left", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "l" })') }, - { id: "swapR", label: "Swap right", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "r" })') }, - { id: "swapU", label: "Swap up", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "u" })') }, - { id: "swapD", label: "Swap down", group: "window", run: dispatch('hl.dsp.window.swap({ direction = "d" })') }, - { id: "widen", label: "Wider", group: "window", run: dispatch("hl.dsp.window.resize({ x = 100, y = 0, relative = true })") }, - { id: "narrow", label: "Narrower", group: "window", run: dispatch("hl.dsp.window.resize({ x = -100, y = 0, relative = true })") }, // -- workspace ------------------------------------------------------------- { id: "wsPrev", label: "Previous", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e-1" })') }, { id: "wsNext", label: "Next", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e+1" })') }, - { id: "wsBack", label: "Former", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "previous" })') }, - { id: "scratchpad", label: "Scratchpad", group: "workspace", run: dispatch('hl.dsp.workspace.toggle_special("scratchpad")') }, - { id: "toScratchpad", label: "To scratchpad", group: "workspace", run: dispatch('hl.dsp.window.move({ workspace = "special:scratchpad", follow = false })') }, { id: "layout", label: "Layout", group: "workspace", run: omarchy("omarchy-hyprland-workspace-layout-toggle") }, // -- toggle ---------------------------------------------------------------- { id: "nightlight", label: "Nightlight", group: "toggle", run: omarchy("omarchy-toggle-nightlight") }, - { id: "awake", label: "Stay awake", group: "toggle", run: omarchy("omarchy-toggle-idle") }, - { id: "bar", label: "Menu bar", group: "toggle", run: omarchy("omarchy-toggle-bar") }, - { id: "silence", label: "Silence", group: "toggle", run: omarchy("omarchy-toggle-notification-silencing") }, - { id: "gaps", label: "Gaps", group: "toggle", run: omarchy("omarchy-hyprland-window-gaps-toggle") }, - { id: "transparency", label: "Transparency", group: "toggle", run: omarchy("omarchy-hyprland-window-transparency-toggle") }, - { id: "dismiss", label: "Dismiss alerts", group: "toggle", run: omarchy("omarchy-shell", "notifications", "dismissAll") }, // -- capture --------------------------------------------------------------- { id: "screenshot", label: "Screenshot", group: "capture", run: omarchy("omarchy-capture-screenshot") }, - { id: "record", label: "Record", group: "capture", run: omarchy("omarchy-capture-screenrecording") }, - { id: "recordStop", label: "Stop record", group: "capture", run: omarchy("omarchy-capture-screenrecording", "--stop-recording") }, - { id: "ocr", label: "Copy text", group: "capture", run: omarchy("omarchy-capture-text") }, - { id: "color", label: "Pick colour", group: "capture", run: omarchy("hyprpicker", "-a") }, - { id: "qr", label: "Read QR", group: "capture", run: omarchy("omarchy-capture-qr") }, - - // -- style ----------------------------------------------------------------- - { id: "bgNext", label: "Next wallpaper", group: "style", run: omarchy("omarchy-theme-bg-next") }, - { id: "themePicker", label: "Theme menu", group: "style", run: omarchy("omarchy-menu", "toggle", "theme") }, - - // -- system ---------------------------------------------------------------- - { id: "lock", label: "Lock", group: "system", run: omarchy("omarchy-system-lock") }, - { id: "screensaver", label: "Screensaver", group: "system", run: omarchy("omarchy-launch-screensaver", "force") }, - { id: "suspend", label: "Suspend", group: "system", run: omarchy("systemctl", "suspend"), hold: true }, - { id: "closeAll", label: "Close all", group: "system", run: omarchy("omarchy-hyprland-window-close-all"), hold: true }, // -- media ----------------------------------------------------------------- { id: "play", label: "Play / pause", group: "media", run: omarchy("omarchy-shell", "media", "playPause") }, { id: "next", label: "Next track", group: "media", run: omarchy("omarchy-shell", "media", "next") }, { id: "prev", label: "Previous track", group: "media", run: omarchy("omarchy-shell", "media", "previous") }, - { id: "outputSwitch", label: "Audio output", group: "media", run: omarchy("omarchy-audio-output-switch") }, ]; const BY_ID = new Map(ACTIONS.map((action) => [action.id, action])); @@ -203,66 +86,5 @@ export function actionsOf(group: ActionGroup): ActionDef[] { return ACTIONS.filter((action) => action.group === group); } -/** - * The Menu key's hold-and-slide flyout: Omarchy's root menu as routes - * (bottom = nearest the finger), each with the leaves the remote can run - * directly. Releasing on a route opens that route on the desktop; releasing - * on a leaf runs it. Leaves are capped at six so the column fits the stage. - */ -export interface MenuRoute { - id: ActionId; - label: string; - leaves: ActionId[]; -} - -export const MENU_ROUTES: readonly MenuRoute[] = [ - { id: "apps", label: "Apps", leaves: ["terminal", "browser", "files", "editor", "emoji", "clipboard"] }, - { id: "menuCapture", label: "Capture", leaves: ["screenshot", "record", "recordStop", "ocr", "color", "qr"] }, - { id: "menuToggle", label: "Toggle", leaves: ["nightlight", "awake", "bar", "silence", "gaps", "transparency"] }, - { id: "menuStyle", label: "Style", leaves: ["themePicker", "bgNext"] }, - { id: "menuSystem", label: "System", leaves: ["lock", "screensaver", "dismiss"] }, - { id: "menuLearn", label: "Learn", leaves: ["keybindings"] }, -]; - -/** The dock: the things a remote is reached for, in reading order. Slots - * eight to ten are the levels card, the keyboard and the pad. */ -export const DOCK: readonly ActionId[] = [ - "menu", - "terminal", - "browser", - "files", - "editor", - "fullscreen", - "float", - "screenshot", -]; - -/** Pad pages, in tab order, with the actions each shows. */ -export const PAD_PAGES: readonly { id: ActionGroup | "theme"; label: string; actions: ActionId[] }[] = [ - { - id: "window", - label: "Window", - actions: ["fullscreen", "maximize", "float", "pseudo", "split", "pop", "group", "cycle", "widen", "narrow", "close"], - }, - { - id: "workspace", - label: "Desk", - actions: ["wsPrev", "wsNext", "wsBack", "scratchpad", "toScratchpad", "layout", "apps", "keybindings", "emoji", "clipboard"], - }, - { - id: "toggle", - label: "Toggle", - actions: ["nightlight", "awake", "bar", "silence", "gaps", "transparency", "dismiss", "outputSwitch"], - }, - { - id: "capture", - label: "Capture", - actions: ["screenshot", "record", "recordStop", "ocr", "color", "qr"], - }, - { id: "theme", label: "Theme", actions: ["bgNext", "themePicker"] }, - { - id: "system", - label: "System", - actions: ["lock", "screensaver", "suspend", "closeAll"], - }, -]; +/** The empty stage's launch chips, in reading order. */ +export const LAUNCHERS: readonly ActionId[] = ["terminal", "browser", "files"]; diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx index 26842faf0..e4355fbcd 100644 --- a/apps/pocket-remote/app.tsx +++ b/apps/pocket-remote/app.tsx @@ -1,41 +1,69 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/app.tsx — Pocket Remote: an Omarchy companion for the -// iPod touch. Landscape: the workspace strip on top, a live miniature of the -// desktop in the middle you can touch, the dock below, a levels card and a -// menu cascade that open under a held finger, a pad with the long tail, and -// a full-screen keyboard. The daemon on the Omarchy machine mirrors Hyprland -// into a snapshot and runs exactly the commands the keyboard would -// (actions.ts). See README.md for the design. +// iPod touch. Landscape: the workspace strip on top with the mode switch and +// the control centre; under it either the stage (a live miniature of the +// desktop you can touch) or the deck (keyboard over trackpad); a ball on +// one edge that opens Omarchy's menu as a sheet. The daemon on the Omarchy +// machine mirrors Hyprland into a snapshot and runs exactly the commands +// the keyboard would. See README.md for the design. import { Show } from "solid-js"; -import { View } from "@pocketjs/framework/components"; -import { createGesture, type GestureContact } from "@pocketjs/framework/gesture"; +import { Text, View } from "@pocketjs/framework/components"; +import { createGesture } from "@pocketjs/framework/gesture"; +import { Ball, ballHandlers } from "./ball.tsx"; import { Connect } from "./connect.tsx"; -import { Desk, deskHandlers, type GestureHandlers } from "./desk.tsx"; -import { Keyboard, keyboardHandlers } from "./keyboard.tsx"; -import { Pad, padHandlers } from "./pad.tsx"; -import { createRemoteStore } from "./store.ts"; +import { ccHandlers, ControlCentre } from "./control.tsx"; +import { Deck, deckHandlers } from "./deck.tsx"; +import type { GestureHandlers } from "./handlers.ts"; +import { ballHit, STRIP } from "./layout.ts"; +import { MenuSheet, sheetHandlers } from "./menu-sheet.tsx"; +import { popupHandlers, Stage, stageHandlers, TilePopup } from "./stage.tsx"; +import { connectSvc, createRemoteStore, type Svc } from "./store.ts"; +import { Strip, stripHandlers } from "./strip.tsx"; import { themed } from "./theme.ts"; +/** The last action's name, briefly, over the top of the stage. */ +function Toast(p: { store: ReturnType }) { + return ( + + + + {p.store.toast()} + + + + ); +} + export default function PocketRemote() { - const store = createRemoteStore(); - // Debug handle for the headless sim test (tests/pocket-remote-sim.test.ts), - // which has no daemon to mirror: it feeds host lines through applyLine. + // The headless sim (tests/pocket-remote-sim.test.ts) has no svc channel; + // it may install a fake one before the bundle runs to see what the remote + // would send, and reads the store back to feed host lines in. + const store = createRemoteStore((globalThis as { __pocketRemoteSvc?: Svc }).__pocketRemoteSvc ?? connectSvc()); (globalThis as { __pocketRemote?: unknown }).__pocketRemote = store; const connected = () => store.link() === "up"; // One recogniser for the whole screen. A tap single-fires on one owner, so - // the sheets cannot be separate recognisers layered over the desk; instead - // each contact is routed at its down edge to the surface under it — the - // pad while it is open, the keyboard while it is up, the desk otherwise — - // and every later callback for that contact follows the same route. - const desk = deskHandlers(store, () => connected() && store.pad() === null && !store.kb()); - const pad = padHandlers(store); - const keyboard = keyboardHandlers(store); + // the layers cannot be separate recognisers stacked over each other; + // instead each contact is routed at its down edge to the surface under it + // — the sheet, the control centre or a popup while one is up, the ball, + // the strip, then the stage or the deck — and every later callback for + // that contact follows the same route. + const strip = stripHandlers(store); + const stage = stageHandlers(store); + const popup = popupHandlers(store); + const control = ccHandlers(store); + const ball = ballHandlers(store); + const sheet = sheetHandlers(store); + const deck = deckHandlers(store); const routes = new Map(); - const pick = (): GestureHandlers => { - if (store.pad() !== null) return pad; - if (store.kb()) return keyboard; - return desk; + const pick = (x: number, y: number): GestureHandlers => { + if (store.sheet()) return sheet; + if (store.cc()) return control; + if (store.popup()) return popup; + if (ballHit(x, y, store.ball())) return ball; + if (y < STRIP.h) return strip; + return store.mode() === "stage" ? stage : deck; }; createGesture({ tapSlop: 8, @@ -43,7 +71,7 @@ export default function PocketRemote() { longPressSeconds: 0.35, onDown: (c) => { if (!connected()) return; - const route = pick(); + const route = pick(c.x, c.y); routes.set(c.id, route); route.onDown?.(c); }, @@ -57,17 +85,24 @@ export default function PocketRemote() { onUp: (c) => routes.get(c.id)?.onUp?.(c), onCancel: (c) => routes.get(c.id)?.onCancel?.(c), }); - void (0 as unknown as GestureContact); return ( }> - - - + + }> + + + + + + + + + - - + + diff --git a/apps/pocket-remote/ball.tsx b/apps/pocket-remote/ball.tsx new file mode 100644 index 000000000..bb865b89e --- /dev/null +++ b/apps/pocket-remote/ball.tsx @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/ball.tsx — the menu's handle: a translucent ball that +// floats over everything and lives on a side edge. Tap it and Omarchy's menu +// opens; hold it and it comes along with the finger, and when let go it +// slides to the nearer edge and stays at that height. It fades while idle so +// what is under it stays legible. + +import { createEffect } from "solid-js"; +import { View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import type { GestureHandlers } from "./handlers.ts"; +import type { RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +export function Ball(p: { store: RemoteStore }) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const lifted = p.store.ballDragging() || p.store.pressed() === "ball"; + jump(root, "opacity", lifted ? 1 : 0.62); + jump(root, "scale", p.store.ballDragging() ? 1.12 : 1); + }); + return ( + { + root = node; + p.store.bindBall(node); + themed("borderMuted")(node); + }} + > + + + + + ); +} + +export function ballHandlers(store: RemoteStore): GestureHandlers { + return { + onDown: () => store.pressDown("ball"), + onTap: () => { + store.pressRelease(); + store.openSheet(); + }, + onLongPress: (c) => { + store.ballGrab(c.x, c.y); + }, + onMove: (c) => { + if (store.ballDragging()) store.ballDragTo(c.x, c.y); + }, + onPanStart: (c) => { + // A drag without the hold still moves it: the ball is meant to get + // out of the way. + if (!store.ballDragging()) store.ballGrab(c.startX, c.startY); + store.ballDragTo(c.x, c.y); + }, + onPanMove: (c) => store.ballDragTo(c.x, c.y), + onUp: () => { + store.ballRelease(); + store.pressRelease(); + }, + onCancel: () => { + store.ballRelease(); + store.pressRelease(); + }, + }; +} diff --git a/apps/pocket-remote/connect.tsx b/apps/pocket-remote/connect.tsx index 6697a9679..889391f33 100644 --- a/apps/pocket-remote/connect.tsx +++ b/apps/pocket-remote/connect.tsx @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/connect.tsx — what the remote shows before it has a // desktop to mirror: looking for the daemon's beacon, then waiting for the // laptop to approve this device (the daemon puts a dialog on the desktop), diff --git a/apps/pocket-remote/control.tsx b/apps/pocket-remote/control.tsx new file mode 100644 index 000000000..e827f8f94 --- /dev/null +++ b/apps/pocket-remote/control.tsx @@ -0,0 +1,288 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/control.tsx — the control centre: a card that hangs +// from its button at the strip's right end. Wi-Fi, a screenshot, nightlight, +// what is playing with its transport, then brightness and volume as +// sliders. Levels follow the finger relatively — touching a slider never +// jumps the level to the finger — and a tap on a track nudges by a step. +// Opened by a tap it stays until a tap outside; opened by a hold it follows +// that finger down onto a slider and puts itself away after the release. + +import { createEffect, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { GLYPH } from "./glyphs.ts"; +import type { GestureHandlers } from "./handlers.ts"; +import { Icon } from "./icons.tsx"; +import { + CC, + CC_BUTTON, + CC_ICON_W, + CC_ICON_X, + CC_MEDIA, + CC_MEDIA_BTN_W, + CC_MEDIA_BTN_X, + CC_NIGHT, + CC_ROW_Y, + CC_SHOT, + CC_TRACK_H, + CC_TRACK_W, + CC_TRACK_X, + CC_VALUE_X, + CC_WIFI, + ccHit, + clamp01, + trackDelta, + trackFill, + within, +} from "./layout.ts"; +import type { RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +function Slider(p: { store: RemoteStore; row: 0 | 1 }) { + const level = () => (p.row === 0 ? p.store.bri() : p.store.vol()); + const hot = () => p.store.cc()?.row === p.row; + let fill: NodeMirror | null = null; + createEffect(() => { + if (fill) jump(fill, "width", trackFill(level())); + }); + const glyph = () => { + if (p.row === 0) return GLYPH.brightness; + if (p.store.mute() || p.store.vol() === 0) return GLYPH.volumeOff; + return p.store.vol() < 0.5 ? GLYPH.volumeMid : GLYPH.volume; + }; + return ( + + (hot() ? "accentTint" : "surface"))} + > + (p.row === 1 && p.store.mute() ? "dim" : "fg")} size="lg" /> + + + + { + fill = node; + themed("accentFill")(node); + jump(node, "width", trackFill(level())); + }} + /> + + + (hot() ? "textAccent" : "textDim"))}> + {`${Math.round(level() * 100)}`} + + + + ); +} + +export function ControlCentre(p: { store: RemoteStore }) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const t = p.store.ccT(); + jump(root, "translateY", Math.round((1 - t) * -10)); + jump(root, "opacity", t); + }); + const wifi = () => p.store.wifi(); + const media = () => p.store.media(); + const pressed = (id: string) => p.store.pressed() === id; + return ( + { + root = node; + }} + > + {/* caret under the button */} + + { + themed("surfaceDark")(node); + themed("borderMuted")(node); + }} + > + {/* wifi */} + (wifi().on ? "accentFill" : "surface"))} + > + + (wifi().on ? GLYPH.wifi : GLYPH.wifiOff)} tone={() => (wifi().on ? "onAccent" : "dim")} size="xl" /> + + + (wifi().on ? "textOnAccent" : "text"))}> + Wi-Fi + + + + (wifi().on ? "textOnAccent" : "textDim"))}> + {wifi().on ? (wifi().ssid || "not connected") : "off"} + + + + + {/* screenshot */} + + + + + {/* nightlight */} + + + + + {/* now playing */} + + + (media().st === "playing" ? "accent" : "dim")} size="xl" /> + + + + {media().st === "none" ? "Nothing playing" : media().title || "Untitled"} + + + + + {media().st === "none" ? "" : media().artist} + + + + + + + + (media().st === "playing" ? GLYPH.pause : GLYPH.play)} tone="fg" size="2xl" /> + + + + + + + + + + + + + + slide onto a slider · release to close + + + + + ); +} + +/** While the control centre is up (sticky): tiles and buttons answer taps, + * tracks drag relatively, a touch anywhere else puts it away. */ +export function ccHandlers(store: RemoteStore): GestureHandlers { + let down: ReturnType | "button" | "outside" = null; + const pressIdFor = (hit: ReturnType): string | null => { + if (!hit) return null; + if (hit.kind === "icon") return `ccicon:${hit.row}`; + if (hit.kind === "track" || hit.kind === "card" || hit.kind === "media") return null; + return `cc:${hit.kind}`; + }; + return { + onDown: (c) => { + if (within(c.x, c.y, CC_BUTTON)) { + down = "button"; + store.pressDown("cc"); + return; + } + const hit = ccHit(c.x, c.y); + if (!hit) { + down = "outside"; + store.closeCc(); + return; + } + down = hit; + store.pressDown(pressIdFor(hit)); + if (hit.kind === "track") store.ccGrabTrack(hit.row, c.x); + }, + onTap: (c) => { + const t = down; + store.pressRelease(); + if (t === "button") { + store.closeCc(); + return; + } + if (!t || t === "outside") return; + switch (t.kind) { + case "wifi": + store.wifiToggle(); + break; + case "shot": + store.act("screenshot"); + break; + case "night": + store.act("nightlight"); + break; + case "prev": + case "play": + case "next": + store.mediaOp(t.kind); + break; + case "icon": + if (t.row === 1) store.toggleMute(); + break; + case "track": { + // A tap on the track nudges by the keyboard's own step. + const level = t.row === 0 ? store.bri() : store.vol(); + const knob = CC.x + CC_TRACK_X + trackFill(level); + store.setLevel(t.row === 0 ? "bri" : "vol", level + (c.x > knob ? 0.05 : -0.05), true); + store.ccReleased(); + break; + } + default: + break; + } + }, + onPanStart: () => { + if (!down || down === "button" || down === "outside" || down.kind !== "track") store.pressDown(null); + }, + onPanMove: (c) => { + const cc = store.cc(); + if (!cc || cc.row === null || !down || down === "button" || down === "outside" || down.kind !== "track") return; + store.setLevel(cc.row === 0 ? "bri" : "vol", clamp01(cc.refLevel + trackDelta(c.x - cc.refX))); + }, + onUp: () => { + const cc = store.cc(); + if (cc && cc.row !== null && down && down !== "button" && down !== "outside" && down.kind === "track") store.ccReleased(); + store.pressRelease(); + }, + onCancel: () => { + store.pressRelease(); + }, + }; +} + +export { CC_MEDIA_BTN_W }; diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx new file mode 100644 index 000000000..94dfad545 --- /dev/null +++ b/apps/pocket-remote/deck.tsx @@ -0,0 +1,388 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/deck.tsx — the deck: the laptop's C surface on the +// iPod. Five compact rows of keys over a trackpad, so typing and pointing +// need no mode of their own. Keys go straight to the desktop (wtype) as they +// are pressed; nothing is buffered on the device, so what the desktop shows +// is the truth. A pressed key rises, brightens and shows its character in a +// bubble above the finger — the feedback a capacitive keyboard owes. +// +// Chords two ways: sticky modifiers (tap ctrl, then the key; ctrl arms, +// paints itself, drops after one key) and hold-and-slide variants (hold a +// letter and ^X ⌥X fan out above it; hold a digit for its F-key). +// +// The trackpad is a relative pointer: one finger moves, tap clicks, two +// fingers scroll, a two-finger tap is the right button, and a hold picks +// something up — the button stays down until the finger lifts. + +import { createEffect, createSignal, Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { GLYPH } from "./glyphs.ts"; +import type { GestureHandlers } from "./handlers.ts"; +import { Icon } from "./icons.tsx"; +import { + bubbleRect, + chipAt, + chipRects, + keyAt, + keyboardKeys, + type KeyAction, + type KeyDef, + type KeyRect, + keyToLine, + TRACKPAD, +} from "./keyboard-layout.ts"; +import { pointerGain, type Rect, SCROLL_GAIN, stagger, within } from "./layout.ts"; +import type { RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +// --------------------------------------------------------------------------- +// keyboard +// --------------------------------------------------------------------------- + +function Key(p: { store: RemoteStore; key: KeyRect }) { + const id = `key:${p.key.row}:${p.key.col}`; + const armed = () => "mod" in p.key.def.act && p.store.kbMods().includes(p.key.def.act.mod); + let root: NodeMirror | null = null; + let glow: NodeMirror | null = null; + createEffect(() => { + const depth = p.store.pressed() === id ? p.store.pressT() : 0; + if (root) jump(root, "scale", 1 + 0.07 * depth); + if (glow) jump(glow, "opacity", depth); + }); + return ( + { + root = node; + themed(() => (armed() ? "accentFill" : p.key.def.dark ? "surface" : "surfaceMuted"))(node); + }} + > + (armed() ? "textOnAccent" : "text"))} + > + {p.key.def.label} + + + + + { + glow = node; + jump(node, "opacity", 0); + }} + /> + + ); +} + +/** The pressed character, large, above the key. */ +function Bubble(p: { store: RemoteStore; key: KeyRect }) { + const r = bubbleRect(p.key); + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const depth = p.store.pressT(); + jump(root, "opacity", depth); + jump(root, "translateY", Math.round((1 - depth) * 8)); + jump(root, "scale", 0.9 + 0.1 * depth); + }); + return ( + { + root = node; + themed("fgFill")(node); + }} + > + + {p.key.def.label} + + + ); +} + +function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; count: number; hot: boolean }) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const t = stagger(p.store.flyT(), p.i, p.count, 0.3); + jump(root, "translateY", Math.round((1 - t) * 10)); + jump(root, "opacity", t); + jump(root, "scale", p.hot ? 1.08 : 1); + }); + return ( + { + root = node; + themed(() => (p.hot ? "accentFill" : "fgFill"))(node); + }} + > + + {p.label} + + + ); +} + +function Keyboard(p: { store: RemoteStore }) { + const keys = () => keyboardKeys(p.store.kbLayer()); + const pressedKey = (): KeyRect | null => { + const id = p.store.pressed(); + if (!id || !id.startsWith("key:")) return null; + const [, row, col] = id.split(":"); + const key = keys().find((k) => k.row === Number(row) && k.col === Number(col)); + return key && "ch" in key.def.act ? key : null; + }; + return ( + <> + {(key) => } + + {(f) => ( + + {(rect, i) => } + + )} + + {(key) => } + + ); +} + +// --------------------------------------------------------------------------- +// trackpad +// --------------------------------------------------------------------------- + +function Trackpad(p: { store: RemoteStore }) { + const target = () => { + const c = p.store.focusClass(); + const mods = p.store.kbMods(); + const prefix = mods.length ? `${mods.join(" + ")} + ` : ""; + return c ? `${prefix}${c}` : `${prefix}no focused window`; + }; + return ( + { + themed("surface")(node); + themed(() => (p.store.pressed() === "pad:drag" ? "borderAccent" : "borderMuted"))(node); + }} + > + + + + + + {target()} + + + + + {p.store.pressed() === "pad:drag" ? "dragging · lift to drop" : "tap · two fingers scroll · hold to drag"} + + + + ); +} + +export function Deck(p: { store: RemoteStore }) { + return ( + + + + + + + ); +} + +// --------------------------------------------------------------------------- +// gestures +// --------------------------------------------------------------------------- + +export function deckHandlers(store: RemoteStore): GestureHandlers { + const [down, setDown] = createSignal(null); + let holding = false; + + // Trackpad contacts, by id. A second finger makes the gesture two-finger + // for the rest of its life: scroll while they move, the right button if + // they lift without moving. + const pads = new Map(); + let twoFinger = false; + let twoFingerMoved = false; + let leader: number | null = null; + let dragging = false; + + const send = (act: KeyAction) => { + const mods = store.kbMods(); + const line = keyToLine(act, mods); + if (line) { + if (line.t === "type") store.typeText(line.text); + else store.typeKey(line.k, line.mods ?? []); + } + if (mods.length) store.setKbMods([]); + }; + + const press = (key: KeyRect) => { + const act = key.def.act; + if ("layer" in act) { + store.setKbLayer(act.layer); + return; + } + if ("mod" in act) { + const mods = store.kbMods(); + store.setKbMods(mods.includes(act.mod) ? mods.filter((m) => m !== act.mod) : [...mods, act.mod]); + return; + } + send(act); + // One-shot shift: the upper layer drops back after a character. + if ("ch" in act && store.kbLayer() === "upper") store.setKbLayer("lower"); + }; + + const onPad = (x: number, y: number) => within(x, y, TRACKPAD); + + return { + onDown: (c) => { + holding = false; + if (onPad(c.x, c.y)) { + setDown(null); + pads.set(c.id, { moved: false }); + if (pads.size >= 2) { + twoFinger = true; + twoFingerMoved = false; + } else { + leader = c.id; + } + store.pressDown(dragging ? "pad:drag" : "pad"); + return; + } + const key = keyAt(store.kbLayer(), c.x, c.y); + setDown(key); + store.pressDown(key ? `key:${key.row}:${key.col}` : null); + }, + onMove: (c) => { + const pad = pads.get(c.id); + if (pad) { + if (c.fdx === 0 && c.fdy === 0) return; + if (Math.abs(c.dx) > 3 || Math.abs(c.dy) > 3) pad.moved = true; + if (twoFinger) { + if (c.id === leader) { + store.scroll(c.fdx * SCROLL_GAIN, c.fdy * SCROLL_GAIN); + twoFingerMoved = true; + } + return; + } + const gain = pointerGain(Math.hypot(c.fdx, c.fdy)); + store.pointer(c.fdx * gain, c.fdy * gain); + return; + } + if (!holding) return; + const key = down(); + const f = store.keyFly(); + if (!key || !f) return; + store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); + }, + onTap: (c) => { + if (pads.has(c.id)) { + // The tap resolves at the last finger's up (below); a two-finger + // tap must not also click twice. + return; + } + const key = down(); + store.pressRelease(); + if (key) press(key); + setDown(null); + }, + onLongPress: (c) => { + const pad = pads.get(c.id); + if (pad) { + if (twoFinger || pad.moved || dragging) return; + dragging = true; + store.dragButton(true); + store.pressDown("pad:drag"); + return; + } + const key = down(); + if (!key || !key.def.variants) return; + holding = true; + store.pressDown(null); + store.openKeyFly({ key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); + }, + onPanStart: (c) => { + if (pads.has(c.id) || holding) return; + store.pressDown(null); + setDown(null); + }, + onUp: (c) => { + const pad = pads.get(c.id); + if (pad) { + pads.delete(c.id); + if (pads.size === 0) { + if (twoFinger) { + if (!twoFingerMoved) store.click("r"); + twoFinger = false; + } else if (dragging) { + store.dragButton(false); + } else if (!pad.moved && c.frames < 20) { + store.click("l"); + } + dragging = false; + leader = null; + store.pressRelease(); + } else if (c.id === leader) { + leader = pads.keys().next().value ?? null; + } + return; + } + if (holding) { + const chosen = store.keyRelease(); + const key = down(); + if (chosen) store.typeKey(chosen.k, chosen.mods); + else if (key && "ch" in key.def.act) send(key.def.act); // release on the key: plain + holding = false; + setDown(null); + } + store.pressRelease(); + }, + onCancel: (c) => { + if (pads.delete(c.id) && pads.size === 0) { + if (dragging) store.dragButton(false); + dragging = false; + twoFinger = false; + leader = null; + } + if (holding) store.closeKeyFly(); + holding = false; + store.pressRelease(); + setDown(null); + }, + }; +} + +export type { KeyDef }; diff --git a/apps/pocket-remote/desk.tsx b/apps/pocket-remote/desk.tsx deleted file mode 100644 index 08b885ceb..000000000 --- a/apps/pocket-remote/desk.tsx +++ /dev/null @@ -1,829 +0,0 @@ -// apps/pocket-remote/desk.tsx — the main screen: the workspace strip, the -// live stage, the dock, the levels card and the Menu key's cascade, plus the -// desk's touch handlers (app.tsx routes contacts here). Every painted target -// answers a press with a tint overlay (a capacitive panel has no hover), the -// levels follow the finger relatively (touching a slider never jumps the -// level to the finger), and the only destructive act — closing a window — -// is a hold with a visible fill, never a tap. -// -// Hold-and-slide is the desk's second verb: hold Menu and a column of routes -// rises; slide onto one and its leaves fan out beside it; release on a leaf -// to run it, on a route to open it on the desktop, elsewhere to cancel. Hold -// Levels and the card opens under the finger; slide across a slider to set -// it; release and the card lingers, then puts itself away. - -import { createEffect, Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import type { GestureContact } from "@pocketjs/framework/gesture"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { type ActionId, actionById, DOCK as DOCK_ACTIONS, MENU_ROUTES } from "./actions.ts"; -import { Icon, type IconName } from "./icons.tsx"; -import { - BADGE_W, - BADGE_X, - CARD, - CARD_ICON_W, - CARD_ICON_X, - CARD_ROW_H, - CARD_ROW_Y, - CARD_TRACK_H, - CARD_TRACK_W, - CARD_TRACK_X, - cardHit, - cardRowAt, - clamp01, - DOCK, - dockSlotAt, - dockSlotX, - FLY_GAP, - FLY_ITEM_H, - FLY_W, - FLY_X, - FLY2_W, - FLY2_X, - flyItemAt, - flyItemY, - MEDIA_W, - MEDIA_X, - STAGE, - stagger, - STRIP, - SWIPE_PX, - tabAt, - trackDelta, - trackFill, - within, -} from "./layout.ts"; -import type { RemoteStore, TileSlot } from "./store.ts"; -import { themed } from "./theme.ts"; - -/** The subset of gesture callbacks a sheet or the desk implements. */ -export type GestureHandlers = { - [K in "onDown" | "onMove" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: (c: GestureContact) => void; -}; - -const DOCK_ICONS: Record = { - menu: "menu", - terminal: "terminal", - browser: "browser", - files: "files", - editor: "editor", - fullscreen: "fullscreen", - float: "float", - screenshot: "screenshot", -}; - -/** Dock captions: a 43 px slot fits about five characters at 12 px, so the - * dock speaks in short words; the pad and the toast use the full labels. */ -const DOCK_LABELS: Record = { - menu: "Menu", - terminal: "Term", - browser: "Web", - files: "Files", - editor: "Edit", - fullscreen: "Full", - float: "Float", - screenshot: "Shot", -}; - -/** Slots 0..7 are actions; 8 the levels card, 9 the keyboard, 10 the pad. */ -const DOCK_LEVELS = 8; -const DOCK_KEYBOARD = 9; -const DOCK_MORE = 10; -const DOCK_ITEMS: readonly { id: string; label: string; icon: IconName }[] = [ - ...DOCK_ACTIONS.map((id) => ({ id, label: DOCK_LABELS[id] ?? actionById(id)!.label, icon: DOCK_ICONS[id]! })), - { id: "levels", label: "Levels", icon: "levels" }, - { id: "keyboard", label: "Type", icon: "keyboard" }, - { id: "more", label: "more", icon: "more" }, -]; - -// --------------------------------------------------------------------------- -// strip -// --------------------------------------------------------------------------- - -function Strip(p: { store: RemoteStore }) { - const tabs = () => p.store.tabs(); - const active = () => p.store.state()?.active ?? -1; - const layoutLabel = () => (p.store.layout() === "scrolling" ? "scrolling" : "dwindle"); - return ( - - - {(tab) => ( - - 0 - ? "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#414868]" - : "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#1a1b26]" - } - ref={themed(() => (tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface"))} - /> - 0 - ? "text-sm font-bold text-[#a9b1d6]" - : "text-sm text-[#565f89]" - } - ref={themed(() => (tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim"))} - > - {tab().id === 10 ? "0" : `${tab().id}`} - - - - )} - - {/* layout badge */} - - - {layoutLabel()} - - - - {/* media transport */} - - {(op, i) => ( - - - - - - - )} - - - ); -} - -// --------------------------------------------------------------------------- -// stage -// --------------------------------------------------------------------------- - -function Tile(p: { store: RemoteStore; slot: TileSlot }) { - const s = p.slot; - const closing = () => { - const c = p.store.closing(); - return c && c.a === s.a ? c : null; - }; - const dragged = () => p.store.drag()?.a === s.a; - const over = () => p.store.drag()?.over === s.a; - return ( - - - - - {s.label()} - - - - {s.title()} - - - - - { - themed("dangerFill")(node); - createEffect(() => { - const c = closing(); - jump(node, "width", Math.round((c ? c.progress : 0) * s.cur.w)); - }); - }} - /> - - - ); -} - -function Stage(p: { store: RemoteStore }) { - const empty = () => { - const s = p.store.state(); - return !!s && !s.win.some((w) => w.ws === s.active); - }; - return ( - - - - - empty workspace · swipe for the next - - - - {/* tiles are positioned in screen space; the stage origin is offset */} - - - {(slot) => ( - - - - )} - - - - ); -} - -// --------------------------------------------------------------------------- -// dock -// --------------------------------------------------------------------------- - -function Dock(p: { store: RemoteStore }) { - const lit = (id: string) => - (id === "levels" && p.store.card() !== null) || - (id === "more" && p.store.pad() !== null) || - (id === "menu" && p.store.flyout()?.kind === "menu"); - return ( - - - {(item, i) => ( - - - - - - {item().label} - - - - )} - - - ); -} - -/** The last action's name, briefly, over the top of the stage. */ -function Toast(p: { store: RemoteStore }) { - return ( - - - - {p.store.toast()} - - - - ); -} - -// --------------------------------------------------------------------------- -// levels card -// --------------------------------------------------------------------------- - -function LevelRow(p: { store: RemoteStore; row: 0 | 1 }) { - const level = () => (p.row === 0 ? p.store.bri() : p.store.vol()); - const hot = () => p.store.card()?.row === p.row; - let fill: NodeMirror | null = null; - createEffect(() => { - if (fill) jump(fill, "width", trackFill(level())); - }); - return ( - - {/* toggle: nightlight / mute */} - (hot() ? "accentTint" : "surface"))} - > - - - - - - }> - - - - - - - {/* track */} - - { - fill = node; - themed("accentFill")(node); - jump(node, "width", trackFill(level())); - }} - /> - - - (hot() ? "textAccent" : "textDim"))}> - {`${Math.round(level() * 100)}`} - - - - ); -} - -function LevelsCard(p: { store: RemoteStore }) { - let root: NodeMirror | null = null; - // Entrance: rise 12 px and fade in, driven by the store's progress. - createEffect(() => { - if (!root) return; - const t = p.store.cardT(); - jump(root, "translateY", Math.round((1 - t) * 12)); - jump(root, "opacity", t); - }); - return ( - { - root = node; - themed("surfaceDark")(node); - }} - > - - - - - {p.store.card()?.mode === "hold" ? "slide · release to close" : "tap outside to close"} - - - - ); -} - -// --------------------------------------------------------------------------- -// menu cascade -// --------------------------------------------------------------------------- - -function FlyItem(p: { - store: RemoteStore; - x: number; - w: number; - i: number; - count: number; - label: string; - hot: boolean; - progress: () => number; -}) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const t = stagger(p.progress(), p.i, p.count); - jump(root, "translateY", Math.round((1 - t) * 18)); - jump(root, "opacity", t); - }); - return ( - { - root = node; - themed(() => (p.hot ? "accentFill" : "surfaceMuted"))(node); - }} - > - (p.hot ? "textOnAccent" : "text"))} - > - {p.label} - - - ); -} - -function MenuCascade(p: { store: RemoteStore }) { - const fly = () => { - const f = p.store.flyout(); - return f && f.kind === "menu" ? f : null; - }; - const leaves = () => { - const f = fly(); - if (!f || f.open === null) return []; - return MENU_ROUTES[f.open]?.leaves.slice(0, 6) ?? []; - }; - let veil: NodeMirror | null = null; - createEffect(() => { - if (veil) jump(veil, "opacity", p.store.flyT() * 0.92); - }); - return ( - <> - {/* a veil over the stage: the cascade is the only thing to look at */} - { - veil = node; - themed("surfaceDark")(node); - }} - /> - - - {fly()?.hot !== null ? "release to open · slide right for shortcuts" : "slide to a route"} - - - - {(route, i) => ( - - )} - - - {(id, i) => ( - - )} - - - ); -} - -// --------------------------------------------------------------------------- -// gesture routing -// --------------------------------------------------------------------------- - -type Target = - | { kind: "tab"; id: number } - | { kind: "badge" } - | { kind: "media"; op: "prev" | "play" | "next" } - | { kind: "tile"; a: string } - | { kind: "stage" } - | { kind: "dock"; slot: number } - | { kind: "cardIcon"; row: 0 | 1 } - | { kind: "cardTrack"; row: 0 | 1 } - | { kind: "card" } - | { kind: "none" }; - -function targetAt(store: RemoteStore, x: number, y: number): Target { - if (store.card()) { - const hit = cardHit(x, y); - if (hit) { - if (hit.kind === "icon") return { kind: "cardIcon", row: hit.row }; - if (hit.kind === "track") return { kind: "cardTrack", row: hit.row }; - return { kind: "card" }; - } - } - if (within(x, y, STRIP)) { - if (x >= MEDIA_X) { - const i = Math.min(2, Math.floor((x - MEDIA_X) / MEDIA_W)); - return { kind: "media", op: (["prev", "play", "next"] as const)[i]! }; - } - if (x >= BADGE_X && x < BADGE_X + BADGE_W) return { kind: "badge" }; - const tab = tabAt(x, store.tabs()); - return tab ? { kind: "tab", id: tab.id } : { kind: "none" }; - } - if (within(x, y, DOCK)) { - const slot = dockSlotAt(x); - return slot === null ? { kind: "none" } : { kind: "dock", slot }; - } - if (within(x, y, STAGE)) { - const a = store.windowAt(x, y); - return a ? { kind: "tile", a } : { kind: "stage" }; - } - return { kind: "none" }; -} - -function pressId(t: Target): string | null { - switch (t.kind) { - case "tab": - return `tab:${t.id}`; - case "badge": - return "badge"; - case "media": - return `media:${t.op}`; - case "tile": - return `tile:${t.a}`; - case "dock": - return `dock:${t.slot}`; - case "cardIcon": - return `cardicon:${t.row}`; - default: - return null; - } -} - -/** The desk's touch handlers; app.tsx routes contacts here when no sheet is - * open. `active` gates every callback so a contact that began before a - * sheet opened cannot act after it. */ -export function deskHandlers(store: RemoteStore, active: () => boolean): GestureHandlers { - let down: Target = { kind: "none" }; - let swiping = false; - /** The contact is inside a hold-and-slide (menu cascade or levels card). */ - let sliding: "menu" | "card" | null = null; - - // onUp arrives before onTap for one release, and onTap reads `down`, so a - // reset leaves the down target alone; the next onDown overwrites it. - const reset = () => { - store.pressRelease(); - store.setDrag(null); - store.setClosing(null); - swiping = false; - sliding = null; - }; - - const menuFollow = (x: number, y: number) => { - const f = store.flyout(); - if (!f || f.kind !== "menu") return; - const hot = flyItemAt(x, y, FLY_X, FLY_W, MENU_ROUTES.length); - const open = hot ?? f.open; - const leafCount = open === null ? 0 : Math.min(6, MENU_ROUTES[open]?.leaves.length ?? 0); - const leaf = hot === null && open !== null ? flyItemAt(x, y, FLY2_X, FLY2_W, leafCount) : null; - store.menuHover(hot, leaf); - }; - - /** A finger sliding across the card: the row under it is adjusted - * relatively from where the finger entered the row. */ - const cardFollow = (x: number, y: number) => { - const c = store.card(); - if (!c) return; - const row = cardRowAt(y); - if (c.row !== row) { - store.setCard({ ...c, row, refX: x, refLevel: row === 0 ? store.bri() : store.vol() }); - return; - } - const level = clamp01(c.refLevel + trackDelta(x - c.refX)); - store.setLevel(row === 0 ? "bri" : "vol", level); - }; - - const tapDock = (slot: number) => { - if (slot === DOCK_MORE) { - store.closeCard(); - store.setPad(store.pad() === null ? 0 : null); - return; - } - if (slot === DOCK_KEYBOARD) { - store.closeCard(); - store.setKb(true); - return; - } - if (slot === DOCK_LEVELS) { - if (store.card()) store.closeCard(); - else store.openCard("sticky"); - return; - } - const id = DOCK_ACTIONS[slot]; - if (id) store.act(id as ActionId); - }; - - return { - onDown: (c) => { - if (!active()) return; - down = targetAt(store, c.x, c.y); - sliding = null; - store.pressDown(pressId(down)); - // A sticky card closes on any touch outside it. - const card = store.card(); - if (card && card.mode === "sticky" && down.kind !== "cardIcon" && down.kind !== "cardTrack" && down.kind !== "card") { - if (!(down.kind === "dock" && down.slot === DOCK_LEVELS)) store.closeCard(); - } - if (down.kind === "cardTrack") { - store.setCard({ ...store.card()!, row: down.row, refX: c.x, refLevel: down.row === 0 ? store.bri() : store.vol() }); - } - }, - onMove: (c) => { - if (!active()) return; - if (sliding === "menu") menuFollow(c.x, c.y); - else if (sliding === "card") cardFollow(c.x, c.y); - }, - onTap: (c) => { - if (!active()) return; - const t = down; - store.pressRelease(); - switch (t.kind) { - case "tab": - store.workspace(t.id); - break; - case "badge": - store.act("layout"); - break; - case "media": - store.media(t.op); - store.say(t.op === "play" ? "play / pause" : t.op === "next" ? "next track" : "previous track"); - break; - case "tile": - store.focusWindow(t.a); - break; - case "dock": - tapDock(t.slot); - break; - case "cardIcon": - if (t.row === 1) store.toggleMute(); - else store.act("nightlight"); - break; - case "cardTrack": { - // A tap on the track nudges by the keyboard's own step. - const card = store.card(); - const level = t.row === 0 ? store.bri() : store.vol(); - const trackX = CARD.x + CARD_TRACK_X + trackFill(level); - store.setLevel(t.row === 0 ? "bri" : "vol", level + (c.x > trackX ? 0.05 : -0.05), true); - if (card) store.setCard({ ...card, row: null }); - break; - } - default: - break; - } - down = { kind: "none" }; - }, - onLongPress: (c) => { - if (!active()) return; - const t = down; - if (t.kind === "tile") { - store.pressDown(null); - store.setClosing({ a: t.a, progress: 0 }); - } else if (t.kind === "tab") { - // Hold a tab: bring the focused window here and follow it. - const focus = store.state()?.focus; - store.pressDown(null); - if (focus) { - store.moveWindow(focus, t.id); - store.workspace(t.id); - } - down = { kind: "none" }; - } else if (t.kind === "dock" && DOCK_ACTIONS[t.slot] === "menu") { - store.pressDown(null); - store.closeCard(); - store.openFlyout({ kind: "menu", hot: null, leaf: null, open: null }); - sliding = "menu"; - } else if (t.kind === "dock" && t.slot === DOCK_LEVELS) { - store.pressDown(null); - store.openCard("hold", cardRowAt(c.y), c.x); - sliding = "card"; - } - }, - onPanStart: (c) => { - if (!active()) return; - const t = down; - if (sliding) return; - if (t.kind === "cardTrack") return; // the drag follows in onPanMove - store.pressDown(null); - if (t.kind === "tile" && !store.closing()) { - store.setDrag({ a: t.a, x: c.x, y: c.y, over: null, overWs: null }); - } else if (t.kind === "stage" || t.kind === "tile") { - swiping = true; - } - }, - onPanMove: (c) => { - if (!active()) return; - if (sliding) return; // onMove owns the slide - if (down.kind === "cardTrack") { - const card = store.card(); - if (card && card.row !== null) { - store.setLevel(card.row === 0 ? "bri" : "vol", clamp01(card.refLevel + trackDelta(c.x - card.refX))); - } - return; - } - const drag = store.drag(); - if (drag) { - const overA = within(c.x, c.y, STAGE) ? store.windowAt(c.x, c.y) : null; - const tab = within(c.x, c.y, STRIP) ? tabAt(c.x, store.tabs()) : null; - store.setDrag({ - a: drag.a, - x: c.x, - y: c.y, - over: overA !== null && overA !== drag.a ? overA : null, - overWs: tab ? tab.id : null, - }); - } - }, - onUp: (c) => { - if (!active()) { - reset(); - return; - } - if (sliding === "menu") { - menuFollow(c.x, c.y); - store.menuRelease(); - reset(); - return; - } - if (sliding === "card") { - const card = store.card(); - if (card && card.row !== null) store.setLevel(card.row === 0 ? "bri" : "vol", card.row === 0 ? store.bri() : store.vol(), true); - store.cardReleased(); - reset(); - return; - } - if (down.kind === "cardTrack") { - const card = store.card(); - if (card && card.row !== null) { - store.setLevel(card.row === 0 ? "bri" : "vol", card.row === 0 ? store.bri() : store.vol(), true); - store.setCard({ ...card, row: null }); - } - reset(); - return; - } - const drag = store.drag(); - if (drag) { - if (drag.overWs !== null && drag.overWs !== store.state()?.active) store.moveWindow(drag.a, drag.overWs); - else if (drag.over !== null) store.swapWindows(drag.a, drag.over); - reset(); - return; - } - if (swiping && Math.abs(c.dx) >= SWIPE_PX && Math.abs(c.dx) > Math.abs(c.dy)) { - store.workspaceStep(c.dx < 0 ? 1 : -1); - } - reset(); - }, - onCancel: () => { - if (sliding === "menu") store.closeFlyout(); - if (sliding === "card") store.cardReleased(); - reset(); - }, - }; -} - -// --------------------------------------------------------------------------- -// desk -// --------------------------------------------------------------------------- - -export function Desk(p: { store: RemoteStore }) { - return ( - <> - - - - - - - - - - - - ); -} - -export { CARD_ICON_W, CARD_ROW_H, CARD_TRACK_H, FLY_GAP }; diff --git a/apps/pocket-remote/fonts.json b/apps/pocket-remote/fonts.json new file mode 100644 index 000000000..96b3c4012 --- /dev/null +++ b/apps/pocket-remote/fonts.json @@ -0,0 +1,3 @@ +{ + "fallback": ["fonts/SymbolsNerdFont-subset.otf"] +} diff --git a/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt b/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt new file mode 100644 index 000000000..d163912b3 --- /dev/null +++ b/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt @@ -0,0 +1,126 @@ +# Nerd Fonts Licensing + +There are various sources used under various licenses: + +* Nerd Fonts source fonts, patched fonts, and folders with explict OFL SIL files are licensed under SIL OPEN FONT LICENSE Version 1.1 (see below). +* Nerd Fonts original source code files (such as `.sh`, `.py`, `font-patcher` and others) are licensed under the MIT License (MIT) (see below). +* Many other licenses are present in this project for even more detailed breakdown see: [License Audit](https://github.com/ryanoasis/nerd-fonts/blob/-/license-audit.md). + +## Source files not in folders containing an explicit license are using the MIT License (MIT) + +The MIT License (MIT) + +Copyright (c) 2014 Ryan L McIntyre + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Various Fonts, Patched Fonts, SVGs, Glyph Fonts, and any files in a folder with explicit SIL OFL 1.1 License + +Copyright (c) 2014, Ryan L McIntyre (https://ryanlmcintyre.com). + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf b/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf new file mode 100644 index 0000000000000000000000000000000000000000..d78203d0d2c1904728eec4deded660e8cdfa701e GIT binary patch literal 69784 zcmc$`37A|(xj%fmXATtW06Ge;5fv50JK4jYjob)GG++`!60%MvlgVT<`}FkmzMeXL z`t;tjPi7{Q$z)-&kPQBQXc)bZAYCyCncF^xvZ}mX*>i>W5^L*d)O;TNT z>eTX9)m!gYZ=D7A-@ib)SaB&u%7i)d=1uradWla_N=6ms{XZ_a@82ff+kM$GMX_9= zD9Xw;n^x6qeg5576h&=Tl#8#fShs5J#0xGr@opEwv+z zDa&Ppiei1Os(#h_bq=K%&7lwFs!gk!Ym~#^6a^T5E~s9$Y2Eubzf*_j8bv8qYc|)_ z11|iPh(0DL7W^VSz5BJXhe~e!lTuXlhIo7G*gBM#@!#J4TYa&o2r#3jRpjCib&AgY z^##DNL}pM+g(O9X6$NnMS1GbCvAn0KD63f?#j`GB%deD)mhtweiVN*tK`HsO1b@oR z|MXt{p6m-S=y)SwRxE!dh-AUZ)=DIb>A|X8UPxP%GRhJ8B3C?#bdfSo`Eem#tjtty zFQirFW6Hro`T}K!;wYpqq}sABJ1>3FdFhMKOJ8zc`qJ~#mz|fs{JiuP=fQa;!AT=T z?-r$`Fs~NnYRgrHv{kv#a(y9Pq3vATZQz6h{xMx z=cO+?FMaWO=}XQ_UwU5pvh&iHpO?PkJUFi;IExfZ@kJPmSOJ-q>mt)~U1VCWi%iRP zk!iUuGA-9drscZGv|JaNmg^$Za$RIvu8T~|b&+YgE;23GMW*Gt$h2IS`;-=Cld@Xb ztW+s=$^_+JWt~#1tVL=b@~V}3r0!E1P@)cR>Xn7~U61D~WfjW(Z);EZKh_`bd%Wj= z-R~lTvQF7RFirrreNCANNN*-+|92z$2bk__*|d6dRo#Sp*VV3_FmH2p{e=4(R@beo zU$}04L)EIT7PT#?Uldn|LwDHU-kAizq{;rxBsE$56M3q zJ)@qv^33PXeEv+?nVZkterD#Gxo7_UjPuN^?|k%~tKa$5JImfV`0i)l-SF;ne|+FQ z^}WjX!tWja)8&8ro1zq;xc)pSrk}p`{}m{1`v)jKS%9MA11N$LicdMN`Q0_YxaQ~A zymHO6*F1d9gVz*Y{le8hx%#=Qk6gXu>Vd11S0}D^U0r?k;;X;>@gIHs=*MS${KnE9 zr9-8IrJpUm;-jvQ-v807K6>d#uDR;XD-K_gx}xTa>#q3Z6_;LdNy*ENrP|32AFO+<)ByI36=1bnATWdQ9`PJKxRV3u;~dW0KL2i)Y;jWPhglv6WgP%cFLfD8)w@TomA zD4>I<@lFJRpQooIppJ40;#(1JL;5nrcgO%rt(;ygg965Qxd;;;$Wl%ne_zyBD zpHh^!>Sa(qjks9`@t)1rfr?zZ3Cc8I<{o@+U}7 zA}C)6_T553QSL%~Cj~{h8}TqsZgg{uLJWN4R zzJ>S^3JUmKiSi@`1zfU3`4t64v~7W?il8XpM*LL@in0jtECh^CS&UdbFGBhO#1BzW zl%5n|7eP@>#G@1xC5HGU1x1M?K21SUu(lWck%FQCmJ2VUpeQNCz&`{N{3RyfFB5o*f$JwgrF#0h%p8PMd?O-go2{z-=Ux=dzF%p{u1F=$j5qq4C6silmmzXH-aK)$;XaUP@u(? zT>TyeML8rm_W$Y6q7+*ci^cNkf{gi3rBPAf%VVEZ#y({o`*hLRXNq}#!e7j>w^gvd z3xg&2Wq-bsBYOXjS1FHLAw66Q4l@_jav`YFN@xMq*kyKLwgzmN{@eyRMI^0x9vT8-mv_^@@LEY)?(`=)~l@7SSMJ&Wc`|T zs`Xau9P3@yh1R9k)z(UDt<`4rKo^f&JFNZI5$itdQS0N@r>xIge{TJ?^)2hW*1r^4 zi!Ls@s^}9%*A`u0G^yz3qS-}v6)h}UTC}>TvZ%JmR^%ztisD5bMg2u1Mf-}57Cm0{ zRMGQAKQH=q(OX6D7X78zT6}TwRmGnuzP9-K;z`9f7tb!ft9W7Y(&E*{mBqEiwqj4Q zRva(xDDE#FDc)CnwD|Gjr;491{(14Qi{C1KxA-rrRlQifO8ta-t$MvWNxfN}t=^?B zRF|r&)k?KiwW%IeQ{!rf+OLkN`_!Z7DGmQOjp1LtFQ_IB)f?`dJY%wmrcInm(WL1z znkA#zGMY=#67QsyUA2<`s8`^G*uRvCW}mynbT!7 zVjWk_L?@(b&AQDe~PE(HNe@6wE85LC-6jE8v_raU#8&I8gwPr$VNf!Fdy> z%4qg9@ib|o0Dj&inn6SY_<57&QV)}9Rpw2Ra88*SKU zz_Q8IVOiM}Il{6jVlu>lCCFt{3(wQ3c3Ig?h4Qlqn6k3jg?e)e@8`<=iDh!+6DQFS z$|g>cb2f2`n0n0QR2mcFLiy>1=NYoUi8BiMvkT9J4X8J#uo80%o>Ew3xfErSrx)_47xD}9 zGI>s+-rPcd0lvw17M8wD_A_OYgn!Cp+254Ovb`x&WxXi{_@>bQ0?N!Tyf2J<${dM9 zvWM68g?7n>xMlJVUO-RN7+5FU-T#o8MRN0)Ixt#3y42$ zl5A%hZPnz9$G>Hc{71r;jd9uA(1-zO?JAPi-tUKjA z&YmLMon2VB*#*3vTiDuj3-frV#Dj@tv#9*UiDl#4l*Tu4;yhZviBsm%{2-?JoH%Wk z%%3((mY+6TzMnAT5BFO3S@v5FSRSz)1aCZSIbu0#dDQY9 z%Q5iD$1Eo--?cn$`JUw@c;@#lKd}7J@}%V{%a6c6pSC<>dDilr*YZcpdzL?e59cgnma~?>Sn`&0miH}xwfxPhSS?nowFvxKwO(Mo(8{bASuX~! zzSMe|^>S;8^$P2i;M*Uue$-lO{h0OR)~mt8KVki(^;6bQTR&s{Ecp57tk+sUZ~cPx zi`MJF+rMo6iuHQy4c4z(Zv>zJH*1-7qIHsWvULi0{xs`!>kR8n)|;)jfdAiSz1@0; zb*6Qea##o{#g;qO+b>yg$^J{jm#r%K(Ur=TRad_Lkh3k4U$bZJPs&s4=U04U!(S_VHtwqWdG*GctG2A&@<#0s>hEoM*mhy-rnZkc7CYB@ zFY~_Wi~F;|&j#NMeP5d#DKq@hnbFqhaP(*96=rkni!ooOCG&K4Vf(k+o7&skA8pTd zI68|uAL&}q^>TMb_gL?ZeVv2JZOgZv7`kz&W4m)l$%uF7XLkMDuHC!m?RM_|>7Ley ziyziUKe_k1y$knN?EBpQ&mEX_;BSw7>5&DG{PfV3hmRe3?a|Pqzx>Xm@BHl8wa4Cg z>{BOBeK-F2y2l^=-b*KIzVG?rWj{Rqu=|BGDkJHa6&o(@F`SX8zLH*f- zFMjH!ue@~j_}b#vg0Fx1^(TJa`JYYy^|jLtZ(Q-l>u)x__1(9> z^1EmMFzw9u-+k(j;jz%=V{h}^xl+zm{%qG%yPsgYP98b(#4dJn*Hc~3aEAQj{89JO zW_F}$f6eYnwrj)Cn%?ECXIbh&zJ&25?gyKfv8H7;Ybq<*hRQWH%bVHqrlsyBoGsx? zQ_FkV^4>K=mAlx6T{ZigkFusC?nn7?_DfDZ-a0(*VoOEEmKCgKg<~mS z#ByD-Weg`*tMY^qH%(@maU;Q5oX10EfSG>7$91x3Mp=^Ql>@P~Z_qL=%OfXM=8D9#fM6L|LZ+;_!zhCGQD*A`JB=U9M~qYeJn zn7fDiiwBc|Gz+AIiBO#S<6&LXnWl&FPh_~XR;^KEjfh+{b}bYRhG>$)m?D`9`NDpU znhv!2J>DSm23@*6Ch9w)t+B=gYfLyyIoK^}Z&zwiyfWg^q?u)AHkvf3Y{>AN-Z=Bd z{m~FjOjEBb9i|jFLJ>Ll{*Wh#VYmXGppT{kDejFjZ`2nLBt^S{w71jK$2@($PK*s1 z{;jdj9-8{Nk&LEImNt{o7`3bGdPLWmhtk9UBC4$EUc+HBhv|y?sD$10 z#6k%cO6X~`T~vwpWrjOOMJm0mD>3L6DIJ)W4X`X`7Knum(~QLvNtQ^)6TnAN!iYo+ zgBdbHMifb8AZ74~!R3s^#@8n)*C&wX$!LN_6Y+SGnn|0TiM}N3OLoRFFjU4^{i$YZ z<{vRb=MhcUn65>%2(4wBcj|pQ>(e{+G-c?zk&sK0ju1YG5e?9Yj@x#)(=?QAu7u59 zCwd6^gYJNX1sp+lh)~T4#R3T*OZd#7L5ssRGnn+Uq&M!15`yrM5sp(|v430(tcsop zvP3ZMGpS3{6>m*7vQ%Td)pUveVhz65W_sld0mTFscnes-!&+F=n5H2jD0P?Ksy8yd zQE%l`x!0?T z70k9mU*5Aql;~TrYvW-XJ8V0mAMOzwKX>Zve$mz&#?xCyzb%R+oe4+W&f@l{!*GfW z!xga`P0VQ0+qj2uk8aoNMLw_RZE_3i8zam01x#NMS*ugO{I=G6H$Ef^VdLYUOa%g< zMLr@0lo9fUJoL&N2!uj3=mqt2yweln?P_CPXXS`UHJPnxM-OxKczOfj3hfbR*kL-dqM|dSC$a== zR5x{#v;0*a0b5c_g_1N=1FrVw=w=q(>}jaCiz-d6b)n5kwmE6*_H7dxfq__GPY>(q z=}q(lQz|vlK$G6=w>g;2;kIc_qEyHhZAsc#(w2305-sd^4)ASRwk_M)V^TZjpnq#i zA8YArNY-jBKOrRA=>Z_v7e*-HaXJWM%^mdln9rwslZ2$EBjj=Un9JvmdOJi3dzaRe z?qlh`u2etf>RO*@C!@v1Mn-Bd*wvcY%o3Xe^|lsjv8~nH6lP7~mS`){FI(E(F4xl6 zAM5MtVO?TqA(or5N;KusfIS{2XsGEG4P{)l-$xA52k6UJGEpy(!nAffs~ULCt&!w4{(2VuBaK{0WC;~3MLZt`I*lj7)S45 z0QfCB3xb*Gey01u4QSC4dJNi9KL}Ar=iqdDLK0BN{Pv zX6go)Gt}uy>t=?T8NEG7GivC-4uhG788IRZG&gFP%rL_-pM)5E#7lg{oAQB>i7vdR z$8c$E_ePrh5U3fgUfdq=w$d_y9Rn^=)RSzD)CX97z#fsU@OC2^kFt0)p(hF6WGIC_ z#nLxxGdRf$~ zyER$d<_&wOxHlVaj}n6ttVWNp+(@2Qp*Ps>PtaP&UECkgSU^J;v~My2BjBS+_xZiL zhc;YD4})!pvH2pQ7zb*kAyY-!xf6toX}|9F+L_nx_Bsi4pBCg`+F`-PBs&w`8%#HJ zoueH+qy=aq91$LqnAVZanBXmAjpr^Bv(c$#+tRh7NA3s(<+6l80D`nY!I;W5J!lZJ zB-=C}14&k$09lIGL zI5$H*hxpuLP`UB^n+o}e#}^@n|3kuVX; zP^K-tMW!G%%PA?(E>GOA6Gl96_M4(+OpArhATxu}0LU9M_`UpYK95rW&hOyU8K2JY z;wwZ()E;y?Jj~&7awj!h-@RdY*?zWc|N0%ZeWJu2^gqP?+{2lN3u-8`19~75Fj&9{ z#-zZ=bJbWf9_1ipCjQZCas&TF1}KAEUc@p5@@W`4Gq77hM$zI{eHTB(*&)7*_fZ$w zY+v{G0k(ahvpq^gBW`wf3=OiO!G175mKzF)(WZDZn550}^v!#}n#>o8w)C2aJrW`~ zZ@0~>{)R|}u=#ur=5qu+Qke+)0v?}-`M~;#HF^Ucs$$pO(E!Od{)7hB#G>hVDoG^j z@ta z8AyhbER^I)lK@4JCVHHHz335=doV^bvTbGiGGj3_7P}s-TPf;?THNjy8l)}cG<~u= zsFnutp}vvK9%C;v_68od?-s>a9jFU_qT>rjWenwxvB zOwC=LJFc2|n3(^o+P*Q{kS5H{_|l;ittD?$^OeBFcD0AAS)MgAG@tRf5iMX!yBdl^ zIV3$|d;;kg-#vE}ci#wq*(+J|N-QFSDc%7Pm5{(b2BfQs0Q_D%y zOmP|?kB5^1VpL(2iK)SOAQd16UH1e5wfPR!QyXXzGBXO;lkOg3OlGK4`>_3m)c#i9 zlkTMb+&PdPN)C$}xjS+vOWjdj6|w?iw!0&c58o z#OmZO&0nhWv5%_x%X9NpJ^!Gd|1!Uxt!*piW6kQm{bCO7pyqZpza+Or9XoP%W@+y3 z{JpAv&ZkywQ1dtDY^ZNj&uz(nsx=_umCd!S&34vo zcR0N+=5+<#QuWnc5f2PoQD4lJB;iNM(z4M^W2D*J%Dk;Ehn)n-x;CIf1b+(;Z;Pz0f$Pd{)Ev@yewZ6W-x=v)&H``iVHs-PgZHAp0_GlZC@q{Bykfd7^j;M#_ zZqL6gAQ>^Y#e3qcC!UF8dXZtq)NoTn>uLvE?Re0)NMnn%#e69Zu|{t&nhn-$xD1FQ zDC>)=`+bjxp6Bd&{*;N0gB>=uVT_gL@8W6|-{PvTXZ7{2En2lG&2Lgct{>nVN9;co z&z{lXPL5FyMn{q~$MNCz{=QDu*Ex`oj35UV#|J?Y5k0H&;aFd$on_hwQlqpI1LkmK zmn0v2Bs@%uIT+aL>awveTe4B7=@6D+t=7|EYi73Q22U-O&sXOXrEwqFA7@EnN{%zI zMksOuF6i5h2uF!H8bR3Ji4?WmC<^raPL1}4 zI@~nruB6SBv$h6xz6Z8@U+Lrz+Cs)YRNx&ExvkUDR4hr9Dv^jKAd{I8sUk#p&4FN# zlQ@;Lqd6{Ve=g5UC;iLDvS=*vKX2^ZZTZVfyZ%$%iM8jMP|VL_e%)2rjIDmBn@E|* z*A{9aTmvf={iDXnKdWK$J3Yi_M2%*uQA6@e?)tNV(v+zh`jF!oZJ@_D4%>9nY$H(q z^3xF%{_Sy9uP<|8K&;je_o(`7D*u(LNAMqigiWTgt>fsBc>m%-$jIu;52?qhx7j1q zoDtHi_`S5$lhklX)wEjsQtEQnDwTu3PlINzg~L=>)0S+y?py4-Z!NBtN@)OFMqfO9 z-4pD(Cl>FJ76qZJOSKa5uX%1JL*T!Lu|l9H3QfJ^PmZd#bW^%9 z!^ZBPA@;{TdjMdgb9EhCUDxOo>ay17JW$UL)b}~%>?NXrBZhMeVa_pOfKQsq7)8)8 zL}m=eBmql2sy3&aGWA(@Zg55Eg59bIhX$?~bH%(Ssb`^xMr#;~V0D5BAvO1zTPg6L zs`x)=zq)*|u3eskfQf1-n7c#Oa<{9w8}d-Ga%ISvq&B-6K~6-U7$wh7gd{jgef7wJ z0lA)$h?;vmH?j1dhgJO78h9PwA`0`l>XYl$19dbqm}Lg|QOf?Qn!6rGB7pGxKQui@ z)#t*FK$P) zR6a-if29A&&~f5cxljLG$i-tHJL?cD@MrD6*1b5By*P7pqCP>uqfIC;n>mxsoH=pb z1kNV#vb{53WHVn}cZ&a+@jvhVuNPlrFTQwc@1J$ZSowO`u)wKY|vrYldUY-+T|LgoxjtwJu;YOgW2|;C~e_rziV49&13Uc)!q^A z%o4-MWILmM#O0vo1rq@V-PD`%u#^V}D@0;F8$A`ia?wesPIcYyUgN1@o|?9%7GnKv z7>xgzj+B33dd%TmyI}_O?0iQ}_ zqV3dWmd8RmO)%HSk2ZsWFznU>Ae{dB#F23z5l%`bSbVm$^u?Edv+q65-s8Vn`{M2F z#oI@3)bds;p0}3YIP-Qk^Y%$=ujTAoK55^~m)Xph%irWV6v$ae-+b|9mfQM@z}5Tt zBFEAiwzOvT`pRXZ_E68xdkzhQa#T9J{}(psGAAK{~!Awm*}O4}2=#9KY3ckn)u;=iwaZT?T#{GZ&s=c}CE zdk#u2j+)(CL0uq&AtwtbemIfyt=_(1FE!oGdyHNZtO91xlmyDw-}K%3Uy7zRE#&bL z;I`GyN`D<&UMCti($Op(EXK01$s)r{C%bU2fmFIL359{`La%{c19`0n>_ZN+UAvQ> zgggSOvo+T{HZ#X&U$wSL6ykRcE;+W2dge5-Fd71GqG!)%M$SatrVqIHd{-{U8; z$A;Lkp#!5kzat7&c&Y-MX-<6Htvd%ivG_?A zKRI~xz+O?=VK^dAs$8K}x~l70b$#Oo$8zyXvuO@a;sO8i?rG25$)36M7Zq=D5}Utp z_8tMwARlqwjZ+Fez^7p{u&iK-udXrVK#F3;NHiHuAqXUZ|{6;M7)KG8{)r6Ju(bb80j-)Ap>fA3HEuS6OBxcz9=Ay##0)#&{MM@84h?#+ZFcndcHgAV)yhQvPP zmG@Pp>(E-0n4Dfd?sG>gdr0Yu*Zx}7ZpM3j!#?B6iFnhme+ct~4D5ZzKffA;+% zHS7M#HP;bLU*waAW<4(QW9(d)7`RBM4>L`8S5ODN_O6yJEnuc8(O}U0Vc&_Z2Xn0~bDkj{bHe5E z351LOaKCGSxd!Tc))S4a4wnKw10Y|}`~X+BDN%3KiWE#b{sJc1LM@Vw;qU}d2rmG% zC<-MZN<~Q_j%Ky4KrajQI(u4ZTmTjaQ=(8UtURC*kniNdf`GL)Q12!l>29<)H4~2% z=kL_GXkOIoPjq**_p|nXW7zYs$iOjx4iot%qB#J&VC}#gSDn2X)(fOsS{qzjXh-5q zKP(6k8kOx0YW=bP4%Xk%u`M||-d>oqIr(Za&#;6SPM2Kd0KjNxH(Zh6R3v8Vf7o|^S8FK-g3=**U@B|?I$;8bXc@$@5Yf4C0M0{{f)^1E=|mrX z4i-whG8hfxe1Q6m>d{D4q;M1v!BHtvQ3&I50mMlEMQ=LibbN^)POZ~{R7lkSXMGdS z{%^Zq3hQdVRA3?;D`3u|Eget9q1lOk;6q|a%UCz>^mRBy9-xKtmokX&5QqfaHyQ*+ zySZ2M6No+>JoqKgmzz+IA?3>YJ89NB^lU6e_#yTpiE$9`XbWK|u5_DelQde-^@}M= z4ya~Fd@Ib+$>I1`leTKCH{O{fK)U+3W`}8(<9Zs5SwQ-GK#HLS)z)ffgNL?4<$Vq1 zE}~^^b*=R+L^145_BK0FSEttzY@@3AGOo69hbfPX92sY~XFxRR>v4@bz9&*Jw|D!9 zZV9>~ceNlj1w|yRwludiv=G?{1>xC6!fnlTh`lXMwe-;HZ4JT=0BzZzM^sV@S{;n{ znSgE)BH z6K_q>SWSC!W0n|4$G60}ub?gf07?VjRLalxsb{wWg7^E>_Ysdx%rUX32DCIXS?X~; z!E~JU$m6dhonG^V^l0I^W$J8H&VN(oi^7{i#3wv9o4=N}z9;HQdI+*=shnx2V_mdPkl<4Wq4zS$GUeT@Dsdoo^MTt>c&(l|)%T@c9d1Ycf0u z)0p62;9&5Gibxt0f)zxkJ!m9j@l=%Ie21rLCwBx>?l@WUlJU4yHsQe__ofkx#;KMk z<4*($ry2(~rB~BT)rZwB-e#AJu&KGpR~xNj(W>_PergP^a^7Aq>qV3yjLP~F-Uy8{ zY700VKIZV*LQRC^4Q6vkD_aFzt@vOiyooyO36n zpS`|x><^Gpcm~9iCE=*Z2@ZY^$ISMC)8l3yw=-ZT3^<39ZQN%el;Pa3B?1z8E(HQL19N zjlyXcG>{-#!!*D>DVip_orS-Ltbs!`VP=QD+G|inc!GIl@rag)WT}G;NEbRr6XJkD zy3Iv{(A8C~UX6xTBb?APw9s9^2Kn9yaZiwDKh&mqrFBNvlA0tV?L4U&B(>xyJx=CvhQtKup+pc~ zj>zx8*(X?z9t?OLG*Xw#?-P;&w6`n~)s!y=d>3U6aHLR(h2T91S0`jRyngcKfsrgt zm9s9>s|A@B^aNVzn8pW+1S^v8@dF17fx*aWm9uMvq;FxmHR=w~ZV89I;WnB98yp1- zpoig5M9s(T5w~=z3x_?LM7~z;fv6z_G`M>TprSVJCMaFpMq8>42K@pf4QpPV@K|q9 zgF(2105HzN993yaou)TJaE1VeXe`tm^hozrcQP$H2-(=2$+!yx{jqzpu&}2beaDYy&c|33o46{%e zatiI>pn+4?EDL0Denc4|!xL|(XfM-!r}LZXt0=j zLA$hMK~dkT1|#ro_7;w7Y(cjs#q(ek=hU47WTRbAz&S^Yc;J*NGHjYB5{|NP6i4f{ z-63Y+9}|8F<3>Q(9=t{?Z2+f%c@@CGxro+;8_{@@2A_me5&`aw$~CaZJf;?98l0@8 zlTkWt!jFt`fdxe1oiK-B8sK_GtwF?r%`BqFqDfjr_&7;V2)L4oYM>fqmJCONI7p)v zhzDZS1vki(Hx4aVIkKz*Kafm?_Mx`YN^9W6wE8I?g=o^7^-9P z(V0m3P|t`mBbtnK5s~Qxe;~m_cyNdk#K6Uj3iz;W6d^y@qZ;VSO!F?<5SdT{PClYW z6kYYJS_e%1kL?PGPISm{&<)?Kq3i)*2G9h5;PnTMOrnK4W@}(q&@Lqp;_Hb zND;@(7;%CTPDO>{3i7K_uW#ZoYt(m>34f`dXF4ND`A*BACi-7Jb4@;DBx z(KOP`NQV>BFAbD80^xhZg3`u5A>-MD>O-z|&6PD`l#MpGyP&9OC$v8k9Dm{`wImUR zZN5HdXEW<;jyGxKavH9+*GqFBh(O`+RYstTH1l}+AO)R8IP8%lwG>B$Pn0y$bhf3N zO_E{Y_v@3C+4LtuX^o{p@+F^!4K1zHj?lAuOj>GnIIQA|0$|6%qi(A3$j)js|5{wF z&Z;fYI>LlD0TYtC)J~#iHrXfYbnH??F|~2emf^~N@oZ1Gr0SEbK52_NXnsAq+SIJV zsmKTCyFkd#{jx2b06A$X@<#sO#1cRp1`%fg@3=##>5Byc7=);(^lC9o9)m9~43|-P zz83-m#Y&9*m~=#tazUigln1Uo#?*_;15s0$-StMkiUzWtH^SM0 z;j)V9Bc9?(dAt3CVhFyS{_YTU;7@vEF2aEzJmTd^SAIhNfl@K~ShfKCX(bt!` zis4H5<(|v%c#QTOT)Bwi<=%`49C2|l3tAhWBkBf!&-y@qiC@Iip|p!;9>>t4d12na z`m9q_`?G#(-Ai|{m+shGrcIz3pRlg%jyu>Lca)8r_wRU#-SN`6dH>W)FR_&Y|%DORszlH)b*m{mb=tsFztsa z8V?ao?R`--GJ%Ag6)=@x$jRpaQYi3$*FIDup{78sEodv$n?x&JP3^(u7N_ARswzwm za02?=LIM)UZmw}4jRKHV4PWf`$imB1-rSnjeMI`&j1BTV2Fj};> zWEO!QTq<%1xE0&_9ulziZ`3`FF%5_y1aTnXZI9r^V@D z?G3_c`uDAUKmU=^p6AA4L8YKTCVwzYD}(j5-J_;(NkeiXtW@rb+=Zn$p~P%xhN=OE zhzc*tsGny2zfFS&{>*Sqm!lJF`LCDZw`$HL3jmJDyxY~LmsQ76)%A$#8&rdx@OX#5 zOkGmn=-#ofVP_R>t@7dJ9rx4zyN@rkudQNhtD4KD-zHz(Q#o48Mr)6`o+1c=qFGD= z9G`%@0GGIiux8PEYB*3MlOK#}NW<)aM2LQoMuPqen;;TF@n5_hPwOBI$n;TWK-B|k z#3vqgFD1N`@Tj7gQka~Z2AokZunsi^BO_X8z$Kq%L|5~V zTPu+AV8_8Y zyjPJr%#V1Fkj{I=_DIdX^&(H)LGXB($Ab$E#Gt%hr?a({wYEB)UJ`KX`l~xDX=~KS z>y1Wg>FfNyx)l$K`n9#qRSs&&Qxn|6YZ4-3I39iH3zFiYN&bGIYN3)7Osok z)I<+1UP<;b5*=0&;IDq zpOb<cutqoL0 z)+E`QBPIlUlm%VFKT1VZGXm#1altVhD@YJ=SIkc3nqzGd7fqWd z?A765;fvyC7FDd|E&d=`W3`aD#Y&AqjU`207=kH7!$nay)7*$?IlN7{-$HX?3p;cd z=|5o|9zYT1i;%4h(7|^x8i=w$GziT|G!u@h{-g>QcT+Q&W`=NX$U^aORN|(uJ(vs= zmIX4tl=M^-hC`{1Lcc9sXTcTMNGQU{6;deH;$o3#JpdYqBp!rd6ec*Kkq2?bG2{;i zWd___0wFI8d67kGQ^183)%OR3Fe8YTJaB7{_|hKQ-=VlS<0PTqoA#J48Z=#qDs&1p zow|ZGLCh99_-{S>A#??Cxi?6fI8LjBxH1*+`TYSu3-}?oQ&T**S>;2if!= zO>Z{kyImQG)8`M(U`nZ0JED>*!vRM;DjH8f(U4$rU@ja6i|*_ z(Qu$lgUALlLFp{p6U@L|AqvrU(HIV7pyrAUUBkTwlD)+?ii%A~`M4eG^frkS-nyWJ zj5cEMf-fA+#Y$rshi`MFhW78g!L`RdFNv}^I?rmoOzYJ;<-LwTzrS0WR$2!dGq|dV zLN08qcsedkcTa3P89zxlKk6N=-Mdm0fU@UFIa$gHhZ36MNAEwrS(><;+ZugfA&tB_ z-by-`ru$7Pt@`5bsEc;KBjO6t74WbN4xDH(S=C#+qgkYeTK2dP&^{W_`i*{?eU$=h&jz!_oscGFhJ zGWJ-DRxjGM@86tVO&Z%$+Y)^V0bQNm(%U#J-ikX=(BpGIl(*-cx*H}?f-i)vBrb0T zaj+&bYHHWDEg`^wC6LSuvN^PVT$p2IPZA~<)08eKNvLyjA8Z@OhazYn4C{S?EMXMR z2*lYUv@>D6`_c(9njOZFZ-C6X9-`T}bqK4Ykb*_`Rpyp}yw$q4_95R=!fv#pOC=q~ zImph!-%eV&VZsoV`a)aHt;A?{^gt3ZSpI^XMf9~KvaEmQK~V%NM;i3DT*6j3h^EQw$ruBay_DZahK zn~+r4m2g6q5hFQj?6mi6VDRqWLV6lx)p1nJx8!dVaO@EZJ^in;r`n)BuFqLY!qv0P~`nY&OuH|3mP%>l2z zoWD@bJ0XRpa3f}HD$ZZ>UK~xLNDgRyZtxtuKE_bg$JHBA6cATos`9<+QLcUo8F1b{ zd)3&brN7Tzrapx?Xf}`SE*jX0$6UL*j7ag=`rJbRXaV#Na`E!VebSNI7XpX!gF_Xr z{^U^vY$hf?+!2?q*l{Bk!$&=gf{~{y_YAFBLL`^zNiq*Ua3O9SW#Ms@ zWXU8PkvPlZR1F?+u)w>xgDuPL64h_vvzz9xWAoQ8UbJ>TTRXpLHot}OTY6{jo6q*m ze{AtHYuPhvUub%jvsd{Gz0d4p&+I$#*uH1jzGr$~5FR40Hovg;8MgMBMJML(WApdT z?zsh)t&7fmU9=s3uJg$~C)w_khYz3J!%psbvgsS;+P*?D~ed z4mi*Djf#b=V&RGv3oF^e%5SvH)7U)i8=VXHu!Vb89IiacDo@&;D0%h`7!Sgx{g$Xhhm@aNlu7dcMSzr zVoJwuK*=AedDwh-?g}+0;v3a)HUi{hCaxk#EWy7iWa}!>1Ga> z-4E9WfP4li1R`2S*; z@%JAuh1H>nH+41bVokeRkGM_>aC4Oq*uK@eylDe#s%Ww`(HM}QzbI#j3ckJJ1Nvd6 zA2J?^?xzY42ykm6t6L#(y|&&8)?3lJJiU;b15oKFI*;`3VZFP1JA37f&(9M?IW*9* zDzQpOt1G>$TR&*k+#eCG@<+l40rJx7YCbt?0lX8Zli%|L&Fo!VMumH>9P<=jc$V26E^PFCW#5H2^(v6pXY+Uh> z|9k%TsGOTf@uUl})U&sivl> zk~LMj%Q-DDuQ9izYeYAuE9i8Q^qYS!|ANYIP;({d{0%{76)n+a<%B^(usM}0CTN@Gk~s@Yh8>;}6Vomz zZdXiPvCL#U1gWJZbFhpfhO1>Pcdulff-XV_^^56+Y%I97kKs&WoLkfFYsswzvyU-< zjF^4yOVdU7A;0QtQf+mr&+CQSBPL=K46yiSL5QSE+&K1u!U@5ESdT4;y{>M-=0-%MX-!yN6Oqu7 z>BfHyHj9vuX5siV{voTNy37e6RNURixxDDZmr`9>cc%xFj!9{Ug#&h39BI*v9DEob zk%FO;-^8M)K!vAXM4koia0`DIAr0WA5mVzk1RU`+iTN>< zH((2+Wl4cvYB8U@QV<6oV43At1TdT(DdF=MmKW=zUNz~8xuutf;Z{vtd6S#JrcMoO z90$gtxBezIiA#GpXUu2w*Om77;*(*4l%Eu)4Oo(pPXh_@a1U%hkThWEXV-MMBCTt1S=T^H~FwOYPoSWgRGhQ+$iLX+LqHS(9-lq1()DELP zjDx`poU9_Wf1<78Bm}D*PsZ@|GEulA-od5&P?ukgwX3a|whX>%kY*ZO4nQ;BpLEVD z=)+UM_Pf=4pp^25y30pd`Dn`_{+MWjkA*;*yAO_zveD5)-Jr?H9K%W4aek;}w49BW zcdsn?o!_m#e;gHrShGH}slT4}*OO3{FF8vz@GNv6zNa81Zpu_pQ|Hi>5X|apS-p@F zD~QqcNl``!yQGywLCgr6P3jJqPDHjKfB4FvAci4)VF{!WU+bbKH=&zKFf9m@0ek?- ziwmQ`HLoG4B8*^#W9wZIPKCHx$WG9GOt1j)8H;fiunR5i_y^ALeo_7kF=hV%1WJAY zn~=}N7Z3?HABnT)!-fq8*hmFKw$41T^Wrl|KG=i{uKFIS=d!{&EE^0R3Yg z3b2tekU$4MF*pcQT^05L9) z>mH`VP%Q51z}-UfNCAWx4#aeE&Gkd&QOx4F@`%3P|6Et;*rKt8>ej*S83_Hm_^^`@ zBtv>ZrE_yFxrv-xcy5te+pyV%la@+tbEdwZ)%QEM3n6@GdVBw%L_Wxtx4a5b`P{{- z!{uue9*_1|n~-xH?fy>Afb?-GV~kxqcClKXD=B^T7InuCHJy&N3$Moxe>;4>;7|;) zh}n6YUrGdD(-_z(DYB!usw*_?#v(c+S99XgNgtjoryyc<7 z9>}A}lJ19SV;pM1ZpoMA7C;F{_MXfR44{8-M+S-pGz@2dE$gq%Yy!%Q#!)j;;o4MJ z&uZ&8Ik7pgD+=S^!S~R>=kE}3i3wlic%XI#t6jdKd{qrwx%olcBBGQ0dWl*e?1m5V zdmQcGRu{z|>{_**tsL4gT6=`m9(Ek#CkO(G=^tX#Kf`doBE7nQE!(v90^k2l(OhTKsTJi53Y_XmbdO)|2~X>6^5f&Nn#x9cE(4 zH)7OptK;Q_E({V4ruWav?Q!m?gBm(8PGE!^%iom)DS#FabG{U%(DaS!_4xhokpLV zEOQFof}}Z)olXjP<~#*_>|)9HGlDi?vy*8Tj#zJtjkJoFcUFzCs*%=FQv5ncM@HDl z$Y|#yoIS!vTSuzcNL6P!>7T9TRaLC2s=QVB1qt02N*`~4FFR{#@icI#79Xhi9-Ida z@vX`3Zr0V6+{%Yo!E(^j)sTdDkkAV5npW!c;d-n1u$t3=c!2iuMNg})n1=fm;;ARz z8Sfyu4t|=#pBj0uFM+QzT%PF|Blmjl+p74sY2i>5U)JGKSc~ap{`K7baL|Een+)># z*YkM9NgF2_f}cZK94kr}=2MH*L06B4OWz%dIPNFW&K)aJv6P_T;^`4#N-+wb!{z7j zs?xIsUqiID)OxC@L_OaU-%LjCDaX|Mth1MIm(8G~?U~+wDI^J?`m+OEUJ}m59RLt;O78R?zf6 zV3sHAI#^u?K07IU*p(fE8^KV|XzD06^<8bhXQ-JCHFs1SQpXJ8T#wf2L+|31;?`I& zfJj_|`2-B=E7Z7zyK$ zk#O8A^57XOk2ey+B$;(3eE1~8*!S}nidl*_!l?s%wIaMZMCNcx{~3#_J=^nm~`- zwP)!7E4Lv31vL$S#KJX@uc)~P@=Mfh?b}U!mt{Dx&CySSR&GUp1-=6tYva%zTK#PW zlgNcQUU0eE{BRy`6=o&U*zzlKE7XRqj%|S*EU?4e-oEYsY41(Iqq?qiQ9H@L+1>7U z)9y}v_ochji5=T<9Cz$E*cjq?#yAGsATWr*5*9*ep2t$DRHf2byUF7)Jb>JN$1Nc<%snA*E&^_0NHWgyVJX0Cq`9u&Yp+0*IvWF zs6mX<^%dy$6fhTzbhl{hL@@x`*pQ_fZZwqc^$P;#6)?w@9^iAji{(w1pQ91d{F+~A zpVU7o>^t{FH%4=rv4AYe$Ve_U_6MZL4H=y>qq8uy%?BHLJ3HkcZU}6nB3$7G+f#PP zlpVVhBX~wrdIjXq&GBv-?~YUP4leU+F!UiSzt_6XOi#<{=`&rg@rbsn)`}LUhxHXT zC2+~vQv}ayBM*%OO#4F$l3V!LWH0s5as69HxPz*Z>d+)~FX&|@tenCA&(8U{wS`r7pn}#p>dSyGid+q@dO(dzcOAS=8l-A~!i2Ob_9}QS7b;eQI*MTA zU&#A^DsT^#GMzY-)SM`r6J6;R)(|G|xF=Wt3O8eS_|6w15~%2o$o3e2vh*i6=K>rW z4%9$!N%552FVCEu4!Ww>5zI@-&%HZ}QbeTEjkysH430=ylL+xOi5N9o(y;u8f& zc@1}uwUJL;(_meP0XJ3UP=$sIZsCrs&57$M`GM@-EML0xrB~({9$I!wrXvP?`Azx; z8qd+n{%R=tJ8Bzi3>g}r4=G>yaPshmee`Y5mb{I-0P@qvfMw>?J?6Gz*;d?BJHn%7 zYbop~;L|S0l4rFP$-w`uy-X$dIvd>($l_Z?drrr$4*FJPv1aCScl||eMJC@}?Mq|2q=eAPLr%;lJjSsHqne;)e^6ge8v3B6i&MnBpY}8J zzfeXS6xAhp^sOYfoFThG-U^@?2IiPs!rjGN)her6>slN9l*sDJtc>GzRJp2k)$kMa ztb6ld%os0%A0GbUD{udto;4NK)8!Q3EZLSk3)9an>%zBe-a*g&0LW;qlC4z)U`7wT zwZd5r`$W3)7MA34#@yoU@(h-bHSMm?0-)Q`KqJi#c_SExQQ(>23?(6H1T+KKhO!#A zmc)5iONEwJ6J&$&4KSqKYB=D+P+P(d-(`?;v&&+$W=Ly>Bd$D>(vI(i)W2NnHlWVH zqNcH^&M*Q_-(yKD-$W^#Y^6Zox>T35n>R;!M@74{LvGOzQ7&`5Ewv<5mSk2~4B%c! z=V~oJM>ibg)lmI759RZn(c=kcW#GT+e@A)f+;}yRYSLdt7he+U?Vj(QI3Z7*IN$q2 z9)w;z)_*1RS9NGGfWD~x3ZxGIlnx}uZ>Fr?5GFT-txka!7KQ1OR8OmWHk_0jPNtkU zJo;y!BrB2iC<3{(UkQ}>L+APA6C31-4Lwh)2Ph-)!(Fre)F4gj4xu&d5}oDE*4j*2 zn^~F*7Mn_c7D$j2db6m?bmZn1NLczfvyD?HU;B*EE&69fwk_M0+bDAz9j#TofG4zO zWYnG!W?yM*ZHKJwfG;V}iPo@RXrI;`z{c=-I+g5HKAR_-S##?wlzC|F-0g6RD5ZnZ zhC_JaK!lrEqiUu$sle?*H3MPUBR!r*_@>fBKr5HBl(E|C$|v#XGAb=5Ic0aw4wt)aS#;4V{xeEP;7j9jCpIm<5tuN?* zWz5kH>ehqzy({l~_l4gm?FO#tyNxgRyd-;G+CMeLtfIHRu?p_k=tr>uW$3Y16*%*y zGr!mh#9Uf4%L3b}Q>B(7o26J_c; zS6W|HujI;Ca?iw0htuYfLbd_b*E2@9jgiHVuJ!N2M^=yy|3U_ci%69qjb z)6oV0X>xVFszLcBR$dharG|0V(?HcpM0}O=DQ_$JwmRQ)lF!wFfsTERqf}dUQ@sa_ zUsG+PtC8tUQ>n+!(5|YW)Iuq8!VeR1(Yirse}6?goQYie zT$FGnUe%7v-@dXP%!a5ylu-RwwS&skVs#b}ZgWPN<0vGLIf^#*Heb|Gyc~)jGaq60 z?ucv5H#jH<2Yq9%BUH8Xhn8NC8KR-Je3hPWJ+uz03|9 zd56PZX61e^0~t`T+^&<3x-#6AxI6C&S3^}j`!3a2H2^hmZ!*nm06uQlEL($^F?Uac zk0c+td-Q|zB{>@nq6VF0e(1iiuoagqX)#%(^JB?2VY!$Wb`$q9SlIm1W~LKlcG14p zUnQC9`vQzYJpcpi>bU2qAvBW2Wmnl@c!XzanNWobBgs=kBMGqU&`2^t9oLz^4i$0r zWPF?=us^Px46ItEnPAQJ!nG?p5XG>PSM8EHq+D2?hHzyLDHrb&UY&pVcA&=8>TPqi z*<_oo-mLfzt|)(|-JD~SIW`2<;5DK@g4;=&4~rRRFo5IxMYm6A^bqZvotj-ilS5m; z0dr)MjMBx2Zw+eh4N>P2+AW|gbqx(QO*}(Q%2Q&%f*c1{-W}Q|r14ba9bUlaiw0eD z>aRhCg(LEU0HayUOj0r23FPH(zfaZ8qPj&i!kNHRh3Y=;-hAV#5!G(he@z8vIJ4bm zp9GME-_=QlIy>EMJ|9GJ{yIMB+Z+r_T9>0Tq{?t)gTFAFbBe(B(P+2=514XtL{yZ} z@jsE5muXEcqGI&KHNsq4PzAL;ep$WcIPmG)IW0-J_j=nQ?ZYok*K{#9CfeG>nP-Id zDg9IQIcJ%>-qbuM!f*kA0+R=W16v^n_^v23S&}&nJdhXkn}l}LK>@2q7;kf#f!Xz@ z?!AJD;ee7fYVADPuRSI@G7b7lgq7Lhv@~ivdhpB{p?^yI6n(b&#n=I%zdko;(i$`` z^v95uK~S@3URbwEbB`8*XK64lzgPnV&c;U8B&ar=R4Z$^Su|QN%|2zyY8OTDCkfqI zdEIQcvT{^S;# zvPw)@VMAGPzK&^6i5frfka_m>d$bW+HCjZF1_voeAr;4Dqewc6LIhYxsvKo5E+~)% z1;wmzMyffhP&u{c#sb+`;43yD+yc<>wkcn2W20Qeqb|eV8X%4Iuj*ya~k0 zsFFCH2+J-**ldX~C?X1rP%%v`tG4V9>Q(}%cA_aLvTlMF1``r+&Q5Z7U}P*jg^Q&- zi={fegw4(1tD=Mkm{)wYktqs>Z}aIv^(F(1a& z_`rgr3aScU$(-<74v*wdT#ZicwiPb0+gyY$H9Y<32KqqPG;CT_g|7=;54IG&FEvH5G)G(ygWf$ui=v}5VWnR8Eo#^>z8}|&^0m(IPB~z+?y@;W;dtQ#&iGw8-ayyX?F13_57$6#Lo z@l^!&g(O}`JR!7)yG<+;Qxe;uiqCUM3;E=7LMFzC^kVwraIj1axm{KueK=@D)oVCp zuRaox;{W3@6SzGPWzwPkP~aLh`UFoHxP2}PwPCR>dhro$&>U<~YK2ujTJ!@PnftFi z`~FP6RQrA4wrG|M0ACFwPATK9qECN;9XD7AmfBF;o)1PS9O=^G3W#dD;KH?`| zmp}RXq<+29Kg$b4|Jw-ty070YzkauVeS~hL#D{*}#M;KFQT!oLg_O2I84OGXP-z~$yx4KtNWfiO|>Etfgy@T z$PW_CGGB=T2wMrSBei=>i)jYm``3Y zeO|6UA9qpxLaJX3T|9qYo17xD+0XoDB^bShG|@=7UQCjd~Gdsyetai z%9ZqJ5!BKpi$Fu+Qp2Ya8p`)HD&iW38SPvYa~A$ilKh>nXefY$QA^LqY-q|7qtR;WX?uh z1l&S-%YN*J28&1$6geSO#Q%W}CBpsbSyl@%8=-?;%?Da4nWHwALfnews+qA{=fIUO zNXb5m`>O(z8k9p2=ow)CuEXY07U=D4-mc_! zwKG3HUdG3pqg~r66JSNYsNW@0_M{bO7)p%dUki8w9{JaI-Eeg+MaZ8~$kJU_J9iq$K;cREFq{Hqr8^Ig_ z(41l8o3K5@Y|gOD410z$LSkpS^PBB{YE|G<8v9x%y3#yZewpQm+_hhlptIdC+x^|1 zejZCYkJ__jdzL4SOjHtWX<1n^D=XDTYqE!kc!vw-&&|@;T-T;Lr0Q_AnVY4#8PLdF zK!!8N!AKvD9Fk3C*5x$k%jWzxM<*LB%-#?{0IDwv{RRxw?}dgB{RXYcL|>Ht3FEo; z3CKe9;KTW}`YC_5D6Ji12lZF0&Yq?~1P3LCHI-yIfu6va7tU#9Ji)*nO1S=R)_;lfN>09cuJ^ z-{!k9|3trOiQZzRheFC<^#5S&0@bH&)&Etr?e0n5mo4{YkJ`q$L!GL#s*AUa{&^_Z zbkTh0^h58tqd?veN0qhJ5L{#o9cfiKPS7|(qP(VWy)^Nv`#BQ`D4{v74dKMxh#`0<(Xa|80+ z!1?CaIm;#ITiLHg$=9NeZy0-A&K(DpLR!~?Fk^zEA&yws{;nxTMM@QE3EJOTBDsi2 zS4bQ(;+&uh;2&-baFjU(6E|`%fsYA19;w)Q8gNsH1^}J?tHbxdChvc3%Llo?r$q3h zCTKvoXhN+{4~j0j-|T&bzPURZJACcZ*Y0aF!lI;ZvTP~aMz7k=?|;dzm}cCVAW*IC!puc8!H>9rY9FyfoNy{y~SD_y;HU0yaIX!JKXw${nk zy5`D8ZZf(+4!Ur~f$1q_K?Ls7Aeu*BS)O6UNH|3=G{^R`F~LOCwB@8np7c!i4Ng&x z_I}vl9+T>r^>8ZBsih;o6=G4m+A+4JC(I|qeCsOLu@t8QGYdcW3PS%3dAj47tz5)8 zk_yu;lnMXgmW8!Tf60NH><%cXJAL5g$lz4xS-!IGt=U`I!z-^9cnZ#rawD`Gav09) z^B*v2ggX&EME=3z!NMV?kpv#XuR>50p3+8pD@*bLMq$MF1cU_-R6~)+UeA5-S{w75 za=4|8v;yQn`aeA&-+F>XARsS(06+)+!4(^jP{1KWQy7QrBaLbp?u?2h0(Y_m3%R#R;Y-DXM~L96tyW;>3evYEBJzO+qeNnJFrh(v$xY` z-{Y%lG~n#qEfiyoMgnn%s(rls2oM5pO9(I>Tpmk{afpe6R`FwM3`na;+7CwO0oo|X ziJ5&%FEd>(!swEE@|wHdlA;q7gpO!Gp2hWuGTtq$+3_!gKPAJTiVjQPD$}=^H#nZ= zwRnHuW2e^1Q|n$&x}@YK^?Ki_Q}WcQzSq@{=(X)k?#Yy6GUZsz@rYCM`BMqwd93TF z$V2T>1KTGy%JGf+w)aQN{+&Hrx}TBV&on+=`4pG@rI>plb9v;Edtz{IeM#Lj0(s0M z7h-;_en+oe-)TJCeMWYl?mgN+D*H!A4v!y~2agXP=@?^a8G@tC!ln(8LJW`nYA>$@ z4O{jtbvE%ZllvoQ&knrBYZMcywcvJ*(9RHqFvzr_TDy!wtN@uNNB~=@amm()l!#Vw z1*xgjlIUoGSERtSDnLiL`Pry|&t_vZm#q(z03ZY;5VTGWZ1M2eYOi9>ZW3y=U?_F3 zT$Bm-Ej4#qXh2bzR0j)3GUPu8_-3i*BE(4N!3M~~Q9Hd?fzv|Ag(Ote4+e|NUgxX`o1Wq}EUR<)nXq?*Oxg z55EC>*N|_Z@>By6maEQ%i7N1{71JlB=K?CPv@`@tL?8i_>fZN6RK&L38`9;5^k=PW zj1l>y`s&F2Z^--K*!DB4c0DD-=EYV3E+wO0(Sv!NFT$?Nz~?nKXb)H0?J$Il$ljHb z0KEw8OdkRkG_1hOxDbF98};jGn@yEg2fd9nv~9lKaB_4S)b+i4#n|MLeJ8r)iLTS$ zb4IT|seT#rqetYA9yxNCS2x-gBp>|V6| z)Vs{kS=eX4PxGK%)WgI`c1r@;+tc*kC{$ElLJU(A{i2Q_+(mh%EUL<@HuFN#FKQbQ zm?UpN@hPkV$a1h{V8l-aXcx6G(Nf=14I_b8)l%AGmupv2MfyPE_3KtBM0@km}q$|RNM z$@a@^zpa~CbS3`qkEl7YRa~B-0oqFFi={@KVJf&@Rl_Ek(phGgne;iN0jNUY25Q=M znBvlEI~P5-MVa)!G2Sxt0+1B+6g>L`VG)+jFIh0vH&Wie{vX++&!DN)*F_c6aC}I| zm~1U{BwRmh0y!dx5zrwU=ny&&=+&Er-GC^;PeiT<1g~@;f^<2r8UmvZ&X_>}kx07^ zBc#(GpqT`T5Qi zz{69%R7+|>D%0D$qVLYRTgkiC-EDWV309If)tkZhHh|w%GOixMTT?EA2InGeb!Kli z^T-I|+fdL%FUz3!F6KQ|>?v;uDy`lI*onK(*CTyB9sXV}6`q2g;Iya`6I-1e*?+aVAiQ+9C5J^2mTX4?UEOH%Ym&WeW!z}#b8sa?p7wTn z)z;=6sNt(-&C$}Kd><`-?cuo(c(?ow_$&PO=BQh15(~NS-uUh zDB4rOlX{+0(Ekp@r_U`SB4q}bWpx6?i?Np)3{@$_0fJKVxy}n#0cps9ekY1jPEnfa z;Clci;@r~t6OL?GJ<}`6yX~rnz}dOx8NBGOO$cC~YZAh<^_pi(7Z@nNCLyhdgIX9) zy>jsmT0U0}4*sq0YyYI(N$cm-I-&na{}KLZKf;T))=}Q=kbveflfEo)t0_>9d@IBp zKD1m|F0ZFNNUqVJm+*rg@(>|0r9xuL!_V=a({T>u06zYiQQ2PY8X|onCW?mGtXD@$8%)L4Lpee9n4$*ov@D|_6J+*6EMo(`Uex{Yu zsz#ywj#g|^vkyW(B{KoHkWbcAj@%$dT7gI}&ah?XQ*!O@%U0@U2cabRWV5fXmBfS? z2U>ZVb-6IZYBskyI*b$VQ<~TGgKvs&A%rP{uEJCXqU^iH557fDT5dIIPiRjHy-2eO zSa>M?dqUr+L3xM?vFH{u|F+OnY8$~2D*Y940QFO1owCt%Wd^Va8Ih(0$T_euVP8;l zjfFfz3!6&d(gom^8ZSAI!pse)fUl$pxcxW>YRsS-`ZpJ6FT5hVbs;-}KP_Y@gcr`P zKcKIp{N&XGH~_L>AbTHDX~J!u9D)qv2PmEEYO6xtK+s(l0ksmARZ7z+yBVJ9jQcZR zJ!AXKSKn}T>kA2j5jLR@%wcEYTt)B)phzJ0CPT0Q0vZ9K;SW>+>=HPb?4h{sReKCa z6G&R%-%v#`(Ww5`Q0ozWv}mFA@aDSGbfb2m^}x$_7_HYPGpWKOcUiU$>q$SrD4c>?C32g${H^J&@Z6nm5T3Fl0)(Q^I z;yqCw+7p*?+ED(FnxKzrn|`AXGwJ!^U$TzSzFVqo+Kv7Xss8^5`-X_V9*8!*^Ny%n z*wrAZ7?3-DNg*c5w27yWZxt(6;KYI~Z!U5!!W6hKaG%ic#sM^U-yCADjfK(IJNhI!li8%+UK<| zkW%CeIN)$HZ^mKx1?}_rqvH>LDIHHguYUmv@rQnCc&gEBjS|u?G~%7vo2U(RJI9Gm zAc&XHdi-ivtqvcwY-U(DXY!d%{8FYP2Z}heIoFYeH4Rg5bR|pW*3n6h;B>~R%uGy2 z9hpiuH@DWcQ==&&2>e48!tmzGgxvJB+(en1V2@S1q}o*<+nOj_6S~p|a%F$+uzkOh z`_*v$K&$L;?e1zFkgfghVYOeX{RkC1AancEx)WPvLTjvh7g~YwV5_*oPT*5y7$7LI zg-ID1G9zOi{lxJ7Wz-0Or@-;Ivy;J7Fa)#r%zoB%>RE7g=%Jnm5!NY)10U2M6oID$ z&+trr7Bh9~6fp{L1))FS%ZO>kfZ-3y&=Qe?m^FII$&j31axzMxLq@1sGz;f7I1T!- znC$=y$|;x;q53E}weU#b8R}%gh25vaj>z?gpX_{?hku=V&ax#@Zb{s=GcBCvBdT;) zL0qPc%S=tqjgdJq_Gq<(Coj?y#S05qE1AGrIY?M5NFUg*#L`2J6?8oBaLfT2Gx~h{ z#wy|h)hi~oTrl*~B|(zz*`mPPV6$%&%aK~UQCz~uC2A-w3pKY)sO`4JH2<e5JPbE53~)TnWfp=9QZEy`-@@@{$DC^Q3UAo9U3Qk!mKatDX_k5cTY)4$IZKs znObTKQij;ypqAVyOtl+)G%3q*%-x9bzr+_5Y)ev_quluoe39=x)B@Z|(6YeFK$xi? z#vMQie&idX5rM+sr{_j2d#8n0ja|g(ZUn@0x%uLPO{LTtPeogFJeHFyz9#v1UKxicV^aB}lw*ft_ zrpRTJE?c>spxO~<&oBtn|67Xq3CLot%|+mErMBWCI}3_1FxubE`e=T%cX`x?!LkoBoDckE>nGm+sVF0vuAr3}TEF~%%Q^i+W+}-FG zC@+1?-A8jsx54E!Vbq?Lfjnx@0;%N-P)D%nRw|mumI-z)8%Zo~VBmm(GebM(Di#2> z5YUtXC=g^}Q4{SkW(eGnS{l~~q@)WU?5GzQ+PMRlzxLm?VGC^SqK3^g$BP@bz@aZ{ z*gUUGtNXtY=nsq>hjRCq9;8XKk~;?0~z~S)HPw5+H;)c zQ8 zb8=lgeRIc@CFZiYG%M4U)5ZI`#nxLq#)_Pg@@|)pCDK!#(av6$cytdpj=QF$Ysxm6 z&N9K+SDt(EaelRW^6Zf_@2S5pYa) zyX9_obafQ(k>%>aoX5HA1m=mTP$e#a##hU7@UnnRK`_T4;NkbjF8P1PStiuM(y<~r zW*^HRXW|HG%Q6JRaN(+8;P{szq5>=h=YEcu;;0l%Fod!|?kq>B7la#eRU0zpvD3#6 zon^(x_l92gK^OU!^R@hQ3G!V0OvKnaYA!`UbCyUaqK1@G)IHp6T@tbK5J8e&$INUS z3+ttC&-Opn3~}h=&NY^GiS!^Wd0SM>Ci(^k2>826%{#}K^k_^lcW$etrLajBHd$M( zU6eBUnB}xOPu~D|HsT+a{-NHz``YBbw$XZ6+l;GG`@S5xFQ+%vA1nQ_o)GvfgdaRqbfl&D}`wr+1qN zq?j8=ZJP1(&}*cmR1&y6HqNe z&r|?;v!p^I3Jp|&6jB<{>eQv|8QXDng1)Kg`iVB)YkNMy+$pmhe+Axi8hVr#ml?79pkGZ@!Yn)Bzm zg4o(PZ@l!zx1|`~a0msG@3%>RVYj`PuQQko0O86?w3$QBATWKo1bRJyBxvJnE8%*K z!)k$#nddi%`?{Ksd3#Ad=9Ku-zf&**<17LfMY17#8Of`RvlXWn`Pd?aX~^9NXOZ?k zTxv+KsP78u7k3H$eM80)xQ`DoLVcq z9(4)kiEcl^&a^skr$NK$kX+ze=WjpYd#~VHsSEG(IqnWXcBkz$yuMZlqwP1+Q6IQL z!wm^HFqTQ~< zvbm3{Ondi3Dg$rw;g!uE3h+g8j;BKitrIfBM-ta>WDWe**k|*e;33ZDXBz0-RS%e{y8?K`wrPVPPGeNo95)zN~(sWi+T*46?;>4P6Xct_;< zgt;-#o6RbjR9})8AWe7^-4In{sIwkakLNta2hG}DTf$@3$X!q6KB*p;>hYE*N1l@V zo|+0j8$(&nN4=4Ak=yl#`fl^7etD|@(B$Ata`2_*@2WQ_h3c>9DrL)AULoB?{!`dM^U@9`wLogS>vT`hx1%iT~zS)^{iz>Qn*YCkBSOUlHo}kEYE^f ze_vx^pgP@jylY)bd%bQj1jOOM0Q^ZQgwWm_%1zg2%!Y^vMZwxeH0_Q#H< zACc*Yt<&nb3`9azg0_C_TQ5O|F5H$O6y=tjQ70_ZiE=vez|KCVWIDXkqEsw=Vr61_ zZi0hZi?6_#p>K5mz~K&gsAH<(7>1AUG8@$Zkp3+JC4I8kf=0zC-?L>7TBjLC4f_ z`%Lz<%$`m<6g?`VN1yLQz@Kpcrh1TG%*Q2zOQ+im?nWPjOQ*g6ak%tK_G6DwFW90p zWprjz5{qGMQ7n{U)Y6V1YH8L%n{l&^`5AzzogR+BS_6bAU7`p!`>{`&aP!#Nfkf>q?NI3|i!1eouA>v!xx~J^rC)IoLE*hf^6X9s}<)oFj*`_Y&{Z7F!=3G~)@k zY{4!d3mCdg23#}2)7?oLwP2ks2q ziSFIbQb=t=EGPP>Pl&m<(Wk)M#=--4hl&;&JHMbmHmgb{8#0;CU_fGbh`?)LJ;s@> z3>;}Oop@Y$3u?`wNMC?T2?-!Wq9SV0!dji@8j;dp>+?1eF+1^^@HUZ_n|{#o)~b9C zFW=qg4$Y;p%#}o`ys_|!VQCM1naGH(w!~fTk>ws&eGPL(XA#J(s;;KS&9_+XhuXIh zaAZFG6JVo}NxP)45p|^q^T7=NnVS)eVUHakBIUM{B3m&fiOM8%=O>i@1^NZxioyaz z&`DW~OXq>{OZec^FKKH;0nk)~c*+2LD{#Olp-#@;soi4IU8J@^F?yfCIrEQVZr>{O zX@Df=UqYvb!GmkCg?o2yrAezqNFt?u4h*jTe~AJD2xDeQ!5yjrw7Fx4(3-Tbii~lg zH|k%dp$L3-_6u05m~vXqn0i{y;J~kWMrpf1q~^9`Rw+Y(zR=UQK!8T`*=NQ6?7k%b zF6rOpF;0J5)HNy@@Clyib{XBC)W@f|jWNq7J!Ag;61Kg4h7sxd(;_l4Hacy)Ox!uRo*u+cewq{VCFlyH4E-MQvf*D0*cgB2ygyfVrpy8oS0b-hzQ)1sB0Ff85jwXt zpf)JfO`eA29>#cF{jgx|$d>Kd^Wa`j3rZNeR?#M4c^q{Ircu4Bv!2ah>pKY-y2swh zR;?NJ$;=Td?R6sLq=;BS`&4^hgTfvZjc6VSAqHzXsqk@qqP1Z>0pX*hWN#G8O36dt z@eXv7ibQhbhe0iQFb!%($^a_xlA!~kWS3y8M8)70C8xYN7KqmJ&IKK&izbffm2`VX zbB#JLe~sGrr&8%FN$&cmQei=aT)S5Lo*oR7gJFlBe<@C$j5}*KWC~O2Nd4hfd8l=) zdw7r*+1j%rEj1}S)*@pqyByIxp=;F!-&Qsuj2Mg?&zg~$GbJy&!JWen?eyMb6BBY` z;@IBPOm2>QUM!i(k~5j(as4b?8s6Hn!SMOwyX;DgLlwGxKboc!{X%nxaT9{!(@Dzd97N_H}n|X(CG}K$-ohWQJz~y+qzt6zsF$c z^aq{R{tntWnkl5Aq<9}dI)2Rw=?T*P;SRcwgWn@kiqr2VYSc}}cY1_3H=(_7q$9Bc zY%g%lrsr5aH<1pAlHxl(!ke4O(#=SU8C)p!OH}HYkOnneRVvyLSf;Vl8--{HDJl2y zcJ~8Ys7-p>;MBrH8@QdUkn-nl5w;vlevVb*ySc-`v+zyy^7fPoAY(WATL$6Je7re%Q zyGD~H_(EozA$iq_`WN}K)^~`nZio8#A~#cyYh7R&@jJ*AW_yk=f=Q9P_)3mvghLlB znN$f2*O%H*J$?P1!!2XdH|8D>Vib)z4p{iIbo4zj@?^_uT<0-*vv&l(Lba^fzp~?Y z9;L6%PH7+ovW^@PFB^{;Mk=)-fF*C^InmB&;Dlm*`4&D79i({NmGd;;j0%8 z&uBaZnrwNAQx-c*s4P6V2yQjaetz~J#Hsb-^5-xAqgZ!Z z1pZ54&g5Suo<1Pfy&zg%73&U(*Q-SLt77kJ@p^^WuubTn1BvxLC$I4;KkIspe*|8}pu{km}C)#f8s&Ez2xD)3ODA}9Zo1%AT zV+5kMd~4aT^t5L)X(61q#ZZib(7eRUmBjydFQ;QLgI7& za+|p6E+$;>8+yJ4_V5ZlAFB`-OFA%Mz_4AUh%{sd3)u~K>YypcRoR*My^=YlYtUlm z^v|nZdp`h{8?=(>`e8BR?rZDllO4ScLu9)Vd_K+^L>A>5_K0|ndp3zF78yUGfE`9T zyBgv;l4VCyU(N_KoNBxAJh~y4o+snEoeB>{<4)U?YhFraq*_ z=!pkC={0&X%4CP{Adux=2rGJQIBJaSk@3~%k+=#~Et z6hbO>q-Zd=Pv-WebtJOflbY4v*xlaRCtLg6gU|`h-2{n_vBpAwI472TJ_6Vu|o zJ)-v=(X&E0jBV|4dCC#*0>Lh9l~!2^Psw85IR)7kb3WfKH*H$G`|(`)Sngx$@mBd* z>)L&rX5^-s-DmS&m$|R0*IQqgEwAl6J2OMQ_xXHHtzP=(K_EbHnFJP6vD+@)Hk_WU zZ7F@WcAbBnY+E-FJ{ch=Bc>BhWy@39ryXZ%^vBb!{1noRkq0aYxfn z$n+D|m&*CZ6TKsCYvD#|-LPk4^G4aUv3L7elpKpXoP69OkLMq+IO&xq8m79(jXjyI z^_uiALUTE|r-xA_DtgM8r`7PVE~zR-LEe~Fmf}dFM(YU%RzTNe>(M6e5C!kdj!jQW zBxyHDy;T+&7O#3Zj^n`AGL=lY+b3kN*vH+66D zvA9%6i+m@$PmIg}L5v8K(V~KxoTKTJlx5U9oZFu+`_sD;A$x^CV-Vf%PJW7}yDhfBt@H|AbWp4QUw~Oyhz1j66C4Z#eO#j|i%KZIbi5>mhyTV)K zX5S{ap@Nt#+HbnNX7*{Zag#XvtjH_OD>Snu3EJXsYH#XdQuWXOB;pH_&1pGY%Z zV_%Cg_rJecY%bq!j^awW&%Yt#Ofnw>-O(pzpQh$5Q}#W;bNc7Rbm5`wgGM*0OV3l6!hO%VG0Gr53Q8_qoI>6`Bz~g%65n=l#hJrz ztr90#=o(8mEG>9iK_vG8)|GJ(EgX$R(xx;-2k0QxYIboh4^d%}IUh(c=m;G03X7N* zw^;LS`7CitQkhK_Ufky4ifPYxDV_JN!Ji+~K1pBQ@c7y%`kO>|LuYNfiyrk>b(BC- zj&E8zq>280l~e30)=}JE)M}&WZM)&0SE-EfPRI054t~x1AU$t*vV4n~X}TpT(_(nd zB0NrgKJU+>I%|Ugc#+j^ZZ70&My@xz)-Zw9|31KHAuC!I%$Kfl$oMd;e2fibTwgWu z%@R`4;01FfMi`e{x>@49r+elKT=_{xfNLb3^ROAC55rIlN7`~^Fr*WFmZBsQNEm_( za3_~AEy03<#lonJcniET3Z>*Ils;G>f`-jrm`yjS%fEn6uNEVEmIGfxU#)bVS0BVi z^*L=ayUpGe)Pl}_3X-MzE|$-9*7tC#*-x?1hTN3fvg?BaCU8anK%3TOCjV`KD=W5M2erZ)Xs~oh$ssjZ zJ;+HrYTN7l{H?1I0IdKZusaNaXhD&sIKPaF>)R!|_K4QX)@nen;CEMp-`CQ?jX5C7 z2TBKvhPl=w`G>MtNtV+nEbja|Gs`iv+*wuGyfqyqVmx0AT08UM&V+I@8%4G|t1gq1 z#nr`E#VdKQfh7h1K?YX|IR#F^EqSfEhf}?P;iP zg#FH=%zs>)-F`*(q7TVV+c?tDS1i7T@D^5RZbyb=TWab>YeD^&+P7rlRdAfw`uheQHU&x$a|iC*>@q==tn|lWPVo(q4A%UK-{TzF$x`ehxKENu4Va1AX0YvH zVc^{1=AiT*7N%+g_zm0LFc{gdBa3@KiUMDZ^!jF)44*tn>^{|=pT>bdoPO|loS}#bg??MmA zzMM{lowF@)A6Y11kt+rlaHT5-pU*33&#}n>`PGCr7OUMboD*o<6$S+81ZATgv&fDB z4=E+alRgZ1klOjc2(&wJOdwlmcosQ+pj}s6(Nj;}o2|x4bCZBMr(?`4$IQbSz0A&x z@95pq6egR(T~i@1iVxfbAy6vQQ`$mEo`f}Ki6sklZCfKo6-riTX_hkANtPw!BpVFS^w{H3kN zDW;WUFJRQ>wHX(5LRHz>R$bK~SAFPCm@bpv<+_ORJlU(q@e|&E0sj z*qb<%HC8CctOsBgEDv~w{Js6Mr@v*Sj?tE81!*?H+L5szY(v=SZ^gCN`$W7~h?{9= zTdOEeXr04tz_}>6ITSdgrN|nL1Vf4m)^w3T3^>S(to@-mWo!R=qk43cILvp%zY|75 zV_Bm^HWt+u1#yWyb#6qNZL0HL$b-^V9cZ~ZCPZ)UB+<>HDMA@za zKc9z{inwGL8kUzCqSxO46(rSgTJ1B-3(YvjP(0heD zs~54leNuaNy9q&r;m%r(ut#R6rPyYL|8}XxWtJ}T-?qsH8%O;{w1Vme4|M`N>m3ry z%^Q1O?G#6b10T;R4k@pojk9+zH<2-i(%&@~RRv3HPXmtQs%}Xsu1zoK{}oKRaP3d*{IY7lt9Dw{892SC|_J@CA=4cmA+2y!Ig{K8p`(A(rwjW_~&3B zfyPDfhxiA$I_}UpqpRE)qpRh?uC57n^&{GR&S*2|Hrl*6_lLHbDn*+)o6+XQ*?4@_ zFR95!SN8}fwe2lJ z$@@{xTT!pcs8=_fST!aeAA7Kk#6OpZs98{wHih@e@V=+IxbdrE$m&aT z#!$1IC0Kgm1$`JUfkkFZfwWliigUP3{T1Q|bLtE^iQcX472}h_+t5_w+%A&Hf#-mFfU)oJ5syzt9d@W_2#-(pg)3)PC)0CbphOaUD294ZHQZiQ1iw)%k|wR{Wk4Z@*4i& zUh$1(WcQ}srrkyz(4vEC6gqAx20~F;=wyBbkVk;dLqH+}q5^gQ7X3~T`mOkY!3|_S z!Q&scz#&cnF;F}}FkF24--6@=xUk{lWs+2}+U9>&eZNx#Ro!8dNSd)82(26xxv`;tJTwF850J}n7A+*XIRE4821c?$sri`oFwC(m&v&2ygKVU zIV4XGO&%ILDThw_UM6?5rL1j~;ljB|ZS_WW%ZTpS;j~GaHesDoGjd);GCVxlEhoCC zyfaG9kW42{PNZES)7fO*nieV3B4T4B(_}>2Rx5lS$5_#MAK%%*?m>EqzL3>ENif+x zo+QiHIMdES#Jr%x4heUzai+x}smnzMC{rL3*E{^i4UaFcWHG!<+l2)RUWuKx!LyRN zr1sbNgx(B4(U#e>+6ki4uK1EfYqBgz&H*w3jeh?#!jtXFDaw&WIRypTETfFK3q&Pw z7BRtt|Fhe|>tWfyi(R#GO-andfKsjRHx%!GkfV6xP9t0S`ZG8tdsFCF7%F$qPAYTUMgh6AiD$?Z{nUgYffs zjSvERYI#x{YHR9{!YB*@&AVE8)}lO7xjUKQMAs%)spygUH?9qvgiKGXh&tP5huvVd5Pzh-3y$V?PBNI$$Fbz4e|yhzH2 zt6C?FW(c={jb>0a-M^egPQGJe**p_8+&!=}Xt;ZZ8`z>6T?o$tBhG45;B5%fo+UYl z+P3x%{YL7*&D5w{5r3L!`hGI@2_0IXjdT0y@<+Gs&^<9!ITf`aaS!oyb4VGwdoIQ%ME8gq|mx<9dhS;9}UqAQc>i1TMh{y3Wh=C)#12 zVu!f7_v;5 z;{9)k_3MdO{rWPo{w49_4(O z(AHXJuuE^MS1sp~wQzb}#aklz@o0`z{-@8z`Wf>q5ogX%@m)Qb6P z@nde;4ilrUKtB?cGtwxB#E$RqdN0!c$n+)FnT4oA6r;+(6fQ2dmjfY_mIqYN011a4 zsu2h@aI2{)ttxiG?AGDRQZX{{Q;iKd)ZAY#(Cm=vXWpZWV%`8mtCLqx04YP~0DE+y zmMgu)=p2|kpg%@UbMCL`bk<9!yUbn6ho+;^?zUD-YjxHhLj$r2z0xPe6shC=dm5{y zx5`uNZjg1JYHww;tZY`j&T(jnFPYR)x=tmkTsZv85+}eWN@QtCMUm4gomRD5g>n1z z&xnRXQC(V7UgMP2&K9TPu6zd792Ix%5$Y8(s#QnCIy`v=K<7d$H>fm%*yS;AmQpU# zzaq?Qijob1&~^=Yp)R{Chu5MBZlrQC?0;mbx? zqf{!UGPx)tH%I2=q}$2nWVVQ!yI`;%Wf<%m5~d{_g^-xh6su$FdS1G;u0jbgdU%F9EK&%{|K3xOLq)K48Tg`704|ySR0`_zj|0tETwgCu!MD z{962GQrvo&I^-tB|0VHDTt~rbU{q~jMesqtK>n@xg_Vn$_$E{mE5rx<{j0_c92Arc zACxKhYZX#lBHps@9dR#6P_3fV4p~te9wAZ$R7x0FqWKtCnnzkNSHf@o;dae!f|Ajr z+=%yys3lb)$r=ta#NwdK9Ilk1kQh5j{ZbUf(ho_~a4aG+hMR(<)VT?%jF!n+q55Di z)fU>AFc`73`3MZ9n6cAW!V;2>C8RX8UO^aO)_TzfG_+nwu~wWU=nf^0mmSI)iIyWf zTecJQ0uH7`;h4xCiS3iIeLI`BbJd$wWZv%GGA1T3Qf=n8*hOl3K_cNXqOd47F1yCD z@nFaqr+&0;M7ECX?H%fngB|-D4>HN=p5A|8s$Wj^A16^c%6U_LFXN@{^5nLC&o(~F zoaT?}`?QE!m+(yHS~+_kq@j)u;lPEy zxRO%lR%cZL#|GaLT?yq0e9et2ipmEx0kXy4H4zLXuK^x1Nidept0pT;IKuaEpwC959>A)IA^fR`X}`Lrc+p+cWQTt z0=mTW8LkrurT!PEOlqB=x7%Ra@(e`7WXZ0yzo5t3gW7|l$Xg6$EVWL*L%)+5;6HPm z1Lq7_XfQ9(cT-8#QKdWbBj{W9ny9CrSx4ViJ%0bjJ6IEN&j(`kUyfgT^%Z)2?AXly z-wP3t3IqVi5uEGfr1PPu>T^sQX81FwhD?S1_;OgB9xEXv!{PQOU>m{{LWL0NW zrs4bw*U$a$I!m+vfqN82g;>)W>roQBPR0%c9w(xEt9LUm@*VU_cxyfNbzWKPt(vz* zTa5aM1$7l}1dJW)APBO0?A{U@ceM$ARbsQ+W{n`>?C#jK2#9K76Sj%oqJ9?QF932Q z2WTjv0xpPWkdT;XGR6xcQp|%>8sdqo&^yN|IZJG=aI*o4CaZ!451_eYPn)K;imh8= zo15R9Fi0)hhTl_SYD#Q9N`H@RrN5MD3mFLnlW)W8E7Q4DbN)a)6>ub!oKDIA9A<#U zM8U3RhjEd-QOse+NE(i_P>u6N3vmAX-NUT|vZcSPn~`^i-N50+P|}qT7_mhI1kT%) z2B_Ya1UCcsA~PSPbN^9e`qzIEzq&(g4HsLc>F?HQvK}-2>R-ga@>BfY!cQ?Df#(9u zlijZ#PJePMRq@cT#d!bW&SNcdx@E?FoI!z#rt{=<-jR&)L`sp9CL+pTuR-|^;J~R5aSYfg=WZ}~Ty`;tKa{JywRj(WE3C5B+W8PruKbdC&W;O32wL%V1PTKVITOf3 zLllqU`2kT5-ru+djJ+zVDyt|k2#T7@5`*oc{zd5at19dG5ttu}|Fx$=?x}DE!}`@d zC*0-UVjs(;jsUqxRXY_6JjPZbpa@VA`S!IvL8uqR-S81Wa}g(k7-s-p;1+<;^u<;( z#3^PLJHM6;aS%n's codepoint from nerd-fonts glyphnames.json. + +export const GLYPH = { + /** U+F05A9 */ + wifi: "󰖩", + /** U+F05AA */ + wifiOff: "󰖪", + /** U+F057E */ + volume: "󰕾", + /** U+F0580 */ + volumeMid: "󰖀", + /** U+F0581 */ + volumeOff: "󰖁", + /** U+F00DF */ + brightness: "󰃟", + /** U+F075A */ + music: "󰝚", + /** U+F040A */ + play: "󰐊", + /** U+F03E4 */ + pause: "󰏤", + /** U+F04AD */ + next: "󰒭", + /** U+F04AE */ + prev: "󰒮", + /** U+F0100 */ + camera: "󰄀", + /** U+F030C */ + keyboard: "󰌌", + /** U+F056E */ + stage: "󰕮", + /** U+F0322 */ + deck: "󰌢", + /** U+F062E */ + tune: "󰘮", + /** U+F0156 */ + close: "󰅖", + /** U+F012C */ + check: "󰄬", + /** U+F0142 */ + chevronRight: "󰅂", + /** U+F0141 */ + chevronLeft: "󰅁", + /** U+F004D */ + back: "󰁍", + /** U+F0293 */ + fullscreen: "󰊓", + /** U+F0294 */ + fullscreenExit: "󰊔", + /** U+F05B2 */ + float: "󰖲", + /** U+F0570 */ + tile: "󰕰", + /** U+F0594 */ + night: "󰖔", + /** U+F03CC */ + launch: "󰏌", + /** U+F018D */ + terminal: "󰆍", + /** U+F059F */ + browser: "󰖟", + /** U+F024B */ + files: "󰉋", + /** U+F06A9 */ + robot: "󰚩", + /** U+F06B0 */ + update: "󰚰", + /** U+F0765 */ + dot: "󰝥", + /** U+F07F8 */ + trackpad: "󰟸", + /** U+F035C */ + menu: "󰍜", + /** U+F01C0 */ + cursor: "󰇀", +} as const; + +export type GlyphName = keyof typeof GLYPH; diff --git a/apps/pocket-remote/handlers.ts b/apps/pocket-remote/handlers.ts new file mode 100644 index 000000000..cf7f94338 --- /dev/null +++ b/apps/pocket-remote/handlers.ts @@ -0,0 +1,14 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/handlers.ts — the shape every surface implements. One +// recogniser covers the screen (app.tsx); each contact is routed at its down +// edge to the surface under it and every later callback for that contact +// follows the same route, so a sheet cannot steal a finger that began on +// the stage and a finger that began on the sheet cannot leak through it. + +import type { GestureContact } from "@pocketjs/framework/gesture"; + +export type GestureHandlers = { + [K in "onDown" | "onMove" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: ( + c: GestureContact, + ) => void; +}; diff --git a/apps/pocket-remote/host/hypr.ts b/apps/pocket-remote/host/hypr.ts index dfae8a2db..15666f7ec 100644 --- a/apps/pocket-remote/host/hypr.ts +++ b/apps/pocket-remote/host/hypr.ts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/host/hypr.ts — Hyprland over its two Unix sockets: // requests (`j/clients`, `dispatch ...`) on .socket.sock, the event stream // on .socket2.sock. Plus the pure reduction from Hyprland's JSON to the @@ -76,11 +77,11 @@ export function buildState( ): HostState { const monitor = monitors.find((m) => m.focused) ?? monitors[0]; const scale = monitor && monitor.scale > 0 ? monitor.scale : 1; - const mon = monitor - ? { w: Math.round(monitor.width / scale), h: Math.round(monitor.height / scale) } - : { w: 1280, h: 800 }; const monX = monitor?.x ?? 0; const monY = monitor?.y ?? 0; + const mon = monitor + ? { w: Math.round(monitor.width / scale), h: Math.round(monitor.height / scale), x: monX, y: monY } + : { w: 1280, h: 800, x: 0, y: 0 }; const activeWs = monitor?.activeWorkspace.id ?? 1; const special = monitor?.specialWorkspace && monitor.specialWorkspace.id !== 0; diff --git a/apps/pocket-remote/host/menu-source.ts b/apps/pocket-remote/host/menu-source.ts new file mode 100644 index 000000000..c12d3edac --- /dev/null +++ b/apps/pocket-remote/host/menu-source.ts @@ -0,0 +1,160 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/host/menu-source.ts — Omarchy's menu definition, read +// the way Omarchy reads it. The menu is a JSONC object keyed by dotted ids +// (/usr/share/omarchy/default/omarchy/omarchy-menu.jsonc, extended by +// ~/.config/omarchy/extensions/omarchy-menu.jsonc); the dots define the +// tree, `action` makes a row an action, `target` a link, `provider` a +// runtime-listed submenu, anything else a submenu. `when` and `checked` are +// bash conditions the shell evaluates at open time. +// +// Two readers share this file: the daemon, which runs actions by id and +// evaluates the conditions, and `bun tools/pocket-remote.ts menu`, which +// bakes the tree into the device as apps/pocket-remote/menu.ts. Pure: no +// filesystem, so tests run it bare. + +export type MenuKind = "action" | "menu" | "link" | "provider"; + +export interface MenuEntry { + id: string; + /** "root" for a top-level row. */ + parent: string; + kind: MenuKind; + /** The icon glyph as written (a Nerd Font symbol, an emoji, or ""). */ + icon: string; + /** Font family the icon needs when it is not the menu font ("omarchy" + * for Omarchy's private logo font). */ + iconFont: string; + label: string; + /** Header shown when the submenu is open; defaults to label. */ + title: string; + /** Link rows: the submenu id they open. */ + target: string; + action: string; + provider: string; + when: string; + checked: string; +} + +/** The raw JSONC row, as Omarchy writes it. */ +export interface RawMenuRow { + icon?: string; + iconFont?: string; + label?: string; + title?: string; + target?: string; + action?: string; + provider?: string; + when?: string; + checked?: string; + aliases?: string[]; + description?: string; +} + +/** + * JSONC to JSON: comments and trailing commas go, strings are left alone + * (the menu's URLs carry `//` inside string literals). + */ +export function stripJsonc(text: string): string { + // Two string-aware passes: comments first, then the commas they may have + // been hiding in front of a closing bracket. + const withoutComments = scan(text, (source, i) => { + if (source[i] === "/" && source[i + 1] === "/") { + let j = i; + while (j < source.length && source[j] !== "\n") j += 1; + return { skipTo: j, emit: "" }; + } + if (source[i] === "/" && source[i + 1] === "*") { + const end = source.indexOf("*/", i + 2); + return { skipTo: end < 0 ? source.length : end + 2, emit: "" }; + } + return null; + }); + return scan(withoutComments, (source, i) => { + if (source[i] !== ",") return null; + let j = i + 1; + while (j < source.length && /\s/.test(source[j]!)) j += 1; + return source[j] === "}" || source[j] === "]" ? { skipTo: i + 1, emit: "" } : null; + }); +} + +/** Walk `text` outside of string literals; `rule` may replace a span. */ +function scan(text: string, rule: (source: string, i: number) => { skipTo: number; emit: string } | null): string { + let out = ""; + let i = 0; + const n = text.length; + while (i < n) { + const ch = text[i]!; + if (ch === '"') { + let j = i + 1; + while (j < n && text[j] !== '"') { + if (text[j] === "\\") j += 1; + j += 1; + } + out += text.slice(i, j + 1); + i = j + 1; + continue; + } + const hit = rule(text, i); + if (hit) { + out += hit.emit; + i = hit.skipTo; + continue; + } + out += ch; + i += 1; + } + return out; +} + +export function parseMenuJsonc(text: string): Record { + const parsed = JSON.parse(stripJsonc(text)) as unknown; + if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("omarchy-menu.jsonc: not an object"); + return parsed as Record; +} + +export function parentOf(id: string): string { + const dot = id.lastIndexOf("."); + return dot < 0 ? "root" : id.slice(0, dot); +} + +/** + * Layers in order (Omarchy's default file, then the user's extension): a row + * that reuses an id overrides the fields it names and keeps the rest; a new + * id is appended. Kind is inferred as the shell infers it. + */ +export function normalizeMenu(layers: readonly Record[]): MenuEntry[] { + const merged = new Map(); + for (const layer of layers) { + for (const [id, row] of Object.entries(layer)) { + if (!row || typeof row !== "object") continue; + merged.set(id, { ...(merged.get(id) ?? {}), ...row }); + } + } + const entries: MenuEntry[] = []; + for (const [id, row] of merged) { + const action = typeof row.action === "string" ? row.action : ""; + const target = typeof row.target === "string" ? row.target : ""; + const provider = typeof row.provider === "string" ? row.provider : ""; + const kind: MenuKind = action ? "action" : target ? "link" : provider ? "provider" : "menu"; + entries.push({ + id, + parent: parentOf(id), + kind, + icon: typeof row.icon === "string" ? row.icon : "", + iconFont: typeof row.iconFont === "string" ? row.iconFont : "", + label: typeof row.label === "string" ? row.label : id, + title: typeof row.title === "string" ? row.title : "", + target, + action, + provider, + when: typeof row.when === "string" ? row.when : "", + checked: typeof row.checked === "string" ? row.checked : "", + }); + } + return entries; +} + +/** Children of a row in source order — the order the shell shows them. */ +export function childrenOf(entries: readonly MenuEntry[], parent: string): MenuEntry[] { + return entries.filter((entry) => entry.parent === parent); +} diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index cdbd3a922..edeb28e18 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -1,17 +1,20 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/host/omarchy.ts — the Omarchy side of the daemon: run // one whitelisted action, read and set the audio and display levels, read // the theme palette, type text. Everything here shells out to the same // commands Omarchy binds to its keys, so the OSD, the sink resolution and // the theme machinery are Omarchy's own. -import { execFile, spawn } from "node:child_process"; +import { type ChildProcess, execFile, spawn } from "node:child_process"; import { existsSync, readdirSync, readFileSync } from "node:fs"; import { homedir } from "node:os"; -import { join } from "node:path"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; import { promisify } from "node:util"; import type { ActionDef } from "../actions.ts"; -import type { ThemeColors } from "../protocol.ts"; +import type { HostCc, ThemeColors } from "../protocol.ts"; import { hyprDispatch } from "./hypr.ts"; +import { type MenuEntry, normalizeMenu, parseMenuJsonc } from "./menu-source.ts"; const execFileAsync = promisify(execFile); @@ -269,3 +272,261 @@ export function pressKey(key: string, log: Log, mods: readonly string[] = []): b runDetached(["wtype", ...args], log); return true; } + +// --------------------------------------------------------------------------- +// network (the control centre's Wi-Fi tile) +// --------------------------------------------------------------------------- + +/** Parse `omarchy-network-status`: `type\tssid\tsignal\tfreq`. */ +export function parseNetworkStatus(text: string): { type: string; ssid: string; sig: number } { + const [type = "", ssid = "", signal = ""] = text.trim().split("\n")[0]?.split("\t") ?? []; + const sig = Number(signal); + return { type: type || "disconnected", ssid, sig: Number.isFinite(sig) ? Math.max(0, Math.min(100, Math.round(sig))) : 0 }; +} + +/** Parse `nmcli -t radio wifi`: enabled / disabled. */ +export function parseRadio(text: string): boolean { + return /enabled/i.test(text); +} + +export async function readWifi(): Promise { + const [radio, status] = await Promise.all([ + capture("nmcli", ["-t", "radio", "wifi"]).catch(() => ""), + capture("omarchy-network-status", []).catch(() => ""), + ]); + const net = parseNetworkStatus(status); + const on = parseRadio(radio); + return { + on: on ? 1 : 0, + ssid: on && net.type === "wifi" ? net.ssid : net.type === "ethernet" ? "ethernet" : "", + sig: net.type === "wifi" ? net.sig : 0, + }; +} + +export function setWifi(on: boolean, log: Log): void { + runDetached(["nmcli", "radio", "wifi", on ? "on" : "off"], log); +} + +// --------------------------------------------------------------------------- +// now playing (MPRIS over the session bus, through busctl) +// --------------------------------------------------------------------------- + +/** MPRIS bus names out of `busctl --user --json=short list`. */ +export function parseMprisNames(json: string): string[] { + try { + const rows = JSON.parse(json) as { name?: unknown }[]; + return rows + .map((row) => (typeof row.name === "string" ? row.name : "")) + .filter((name) => name.startsWith("org.mpris.MediaPlayer2.")); + } catch { + return []; + } +} + +/** `busctl --json=short` encodes a variant as `{ type, data }`. */ +function variantData(value: unknown): unknown { + return value && typeof value === "object" && "data" in (value as Record) + ? (value as { data: unknown }).data + : value; +} + +/** Playback status and track out of `GetAll org.mpris.MediaPlayer2.Player`. */ +export function parseMprisPlayer(json: string): HostCc["media"] | null { + try { + const parsed = JSON.parse(json) as { data?: unknown[] }; + const props = variantData(parsed.data?.[0]) as Record | undefined; + if (!props || typeof props !== "object") return null; + const status = String(variantData(props.PlaybackStatus) ?? ""); + const metadata = (variantData(props.Metadata) ?? {}) as Record; + const title = variantData(metadata["xesam:title"]); + const artist = variantData(metadata["xesam:artist"]); + return { + st: status === "Playing" ? "playing" : status === "Paused" ? "paused" : "none", + title: typeof title === "string" ? title.slice(0, 60) : "", + artist: Array.isArray(artist) ? artist.filter((a): a is string => typeof a === "string").join(", ").slice(0, 60) : "", + }; + } catch { + return null; + } +} + +const NOTHING_PLAYING: HostCc["media"] = { st: "none", title: "", artist: "" }; + +/** The playing player, else the first paused one, else nothing. */ +export async function readMedia(): Promise { + const names = parseMprisNames(await capture("busctl", ["--user", "--json=short", "list"]).catch(() => "[]")); + let paused: HostCc["media"] | null = null; + for (const name of names) { + const player = parseMprisPlayer( + await capture("busctl", [ + "--user", "--json=short", "call", name, "/org/mpris/MediaPlayer2", + "org.freedesktop.DBus.Properties", "GetAll", "s", "org.mpris.MediaPlayer2.Player", + ]).catch(() => ""), + ); + if (!player) continue; + if (player.st === "playing") return player; + if (player.st === "paused" && !paused) paused = player; + } + return paused ?? NOTHING_PLAYING; +} + +// --------------------------------------------------------------------------- +// Omarchy's menu +// --------------------------------------------------------------------------- + +const MENU_ID = /^[a-z0-9][a-z0-9._-]*$/i; + +/** The menu as this machine defines it: Omarchy's default file, then the + * user's extension. */ +export function loadMenu(env: NodeJS.ProcessEnv = process.env): MenuEntry[] { + const layers = [ + join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "default/omarchy/omarchy-menu.jsonc"), + join(homedir(), ".config/omarchy/extensions/omarchy-menu.jsonc"), + ] + .filter((path) => existsSync(path)) + .map((path) => parseMenuJsonc(readFileSync(path, "utf8"))); + return normalizeMenu(layers); +} + +/** Run one row the way the shell runs it: an action's command under bash, + * a provider or link summoned on the desktop. False for an unknown id. */ +export function runMenuEntry(entries: readonly MenuEntry[], id: string, log: Log): boolean { + if (!MENU_ID.test(id)) return false; + const entry = entries.find((candidate) => candidate.id === id); + if (!entry) return false; + if (entry.kind === "action" && entry.action) { + runDetached(["bash", "-lc", entry.action], log); + return true; + } + runDetached(["omarchy-menu", "summon", entry.kind === "link" && entry.target ? entry.target : entry.id], log); + return true; +} + +/** + * Evaluate every `when` and `checked` in one bash run, the way the shell + * does at open time. Returns the rows hidden by a failing `when` and the + * rows whose `checked` holds. + */ +export async function evaluateMenuConditions(entries: readonly MenuEntry[]): Promise<{ hide: string[]; check: string[] }> { + const lines: string[] = []; + for (const entry of entries) { + if (!MENU_ID.test(entry.id)) continue; + if (entry.when) lines.push(`if ( ${entry.when} ) >/dev/null 2>&1; then :; else printf 'w %s\\n' '${entry.id}'; fi`); + if (entry.checked) lines.push(`if ( ${entry.checked} ) >/dev/null 2>&1; then printf 'c %s\\n' '${entry.id}'; fi`); + } + if (lines.length === 0) return { hide: [], check: [] }; + const { stdout } = await execFileAsync("bash", ["-lc", lines.join("\n")], { timeout: 30_000, maxBuffer: 1 << 20 }); + const hide: string[] = []; + const check: string[] = []; + for (const line of stdout.split("\n")) { + const [kind, id] = line.split(" "); + if (!id || !MENU_ID.test(id)) continue; + if (kind === "w") hide.push(id); + else if (kind === "c") check.push(id); + } + return { hide: hide.sort(), check: check.sort() }; +} + +// --------------------------------------------------------------------------- +// the pointer (host/pointer/pocket-pointer.c) +// --------------------------------------------------------------------------- + +const BUTTON_CODES = { l: 272, r: 273, m: 274 } as const; + +/** One long-lived virtual pointer, fed one command per line. Started on + * first use, restarted after it dies, silent about it beyond the log. */ +export class Pointer { + private child: ChildProcess | null = null; + private ready = false; + private queue: string[] = []; + private failedAt = 0; + private scrolling = false; + private scrollEnd: ReturnType | null = null; + private readonly binary: string; + private readonly log: Log; + + // No parameter properties: Node runs this file with type stripping, which + // erases annotations but cannot rewrite constructor(private x) syntax. + constructor(binary?: string, log?: Log) { + this.binary = binary ?? join(dirname(fileURLToPath(import.meta.url)), "pointer/pocket-pointer"); + this.log = log ?? (() => {}); + } + + available(): boolean { + return existsSync(this.binary); + } + + private start(): void { + if (this.child || Date.now() < this.failedAt) return; + if (!this.available()) { + if (!this.failedAt) this.log(`pointer: ${this.binary} is missing — redeploy with tools/pocket-remote.ts deploy-host`); + this.failedAt = Date.now() + 30_000; + return; + } + const child = spawn(this.binary, [], { stdio: ["pipe", "pipe", "pipe"] }); + this.child = child; + child.stdout?.on("data", (chunk: Buffer) => { + if (chunk.toString().includes("ready") && !this.ready) { + this.ready = true; + this.log("pointer: virtual pointer ready"); + for (const line of this.queue.splice(0)) child.stdin?.write(line); + } + }); + child.stderr?.on("data", (chunk: Buffer) => this.log(`pointer: ${chunk.toString().trim()}`)); + const gone = () => { + if (this.child === child) { + this.child = null; + this.ready = false; + this.failedAt = Date.now() + 2000; + } + }; + child.on("exit", (code) => { + if (code !== 0) this.log(`pointer: exited ${code}`); + gone(); + }); + child.on("error", (error) => { + this.log(`pointer: ${error.message}`); + gone(); + }); + } + + private write(line: string): void { + this.start(); + if (this.child && this.ready) this.child.stdin?.write(line); + else if (this.queue.length < 64) this.queue.push(line); + } + + move(dx: number, dy: number): void { + if (!Number.isFinite(dx) || !Number.isFinite(dy)) return; + this.write(`m ${dx.toFixed(2)} ${dy.toFixed(2)}\n`); + } + + button(b: "l" | "r" | "m", down: boolean): void { + this.write(`b ${BUTTON_CODES[b]} ${down ? 1 : 0}\n`); + } + + click(b: "l" | "r" | "m"): void { + this.button(b, true); + this.button(b, false); + } + + /** Finger scrolling: a stream of deltas, ended a moment after the last. */ + scroll(dx: number, dy: number): void { + if (!Number.isFinite(dx) || !Number.isFinite(dy)) return; + this.scrolling = true; + this.write(`s ${dy.toFixed(2)} ${dx.toFixed(2)}\n`); + if (this.scrollEnd) clearTimeout(this.scrollEnd); + this.scrollEnd = setTimeout(() => { + this.scrollEnd = null; + if (this.scrolling) { + this.scrolling = false; + this.write("e\n"); + } + }, 120); + } + + stop(): void { + this.child?.kill(); + this.child = null; + } +} diff --git a/apps/pocket-remote/host/pointer/pocket-pointer.c b/apps/pocket-remote/host/pointer/pocket-pointer.c new file mode 100644 index 000000000..267b59cf2 --- /dev/null +++ b/apps/pocket-remote/host/pointer/pocket-pointer.c @@ -0,0 +1,114 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// pocket-pointer.c — a virtual pointer for the Pocket Remote daemon. +// +// The remote's trackpad needs a mouse the compositor believes in: relative +// motion, buttons, finger scrolling. Hyprland has no dispatcher for a click +// and nothing in Omarchy's repositories drives a pointer from a script, but +// Hyprland speaks zwlr_virtual_pointer_v1, so this is a client of that +// protocol and nothing else — no uinput, no root, no daemon of its own. +// +// It reads one command per line on stdin and forwards it as pointer events: +// +// m relative motion, logical px (fractions allowed) +// b <0|1> button release / press (272 left, 273 right, 274 middle) +// s finger scroll, in px of travel +// e the scroll gesture ended (axis_stop) +// +// It prints "ready" once the pointer exists, then says nothing. The daemon +// (host/serve.ts) keeps one running for as long as it lives and restarts it +// if it dies. Built on the Omarchy machine at deploy time by +// `bun tools/pocket-remote.ts deploy-host` with wayland-scanner and cc. + +#include +#include +#include +#include +#include +#include + +#include "wlr-virtual-pointer-unstable-v1-client-protocol.h" + +static struct zwlr_virtual_pointer_manager_v1 *manager; +static struct wl_seat *seat; + +static void registry_global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, + uint32_t version) { + (void)data; + if (strcmp(interface, zwlr_virtual_pointer_manager_v1_interface.name) == 0) { + manager = wl_registry_bind(registry, name, &zwlr_virtual_pointer_manager_v1_interface, version < 2 ? version : 2); + } else if (strcmp(interface, wl_seat_interface.name) == 0 && !seat) { + seat = wl_registry_bind(registry, name, &wl_seat_interface, 1); + } +} + +static void registry_global_remove(void *data, struct wl_registry *registry, uint32_t name) { + (void)data; + (void)registry; + (void)name; +} + +static const struct wl_registry_listener registry_listener = {registry_global, registry_global_remove}; + +static uint32_t now_ms(void) { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (uint32_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); +} + +int main(void) { + struct wl_display *display = wl_display_connect(NULL); + if (!display) { + fprintf(stderr, "pocket-pointer: no Wayland display (is WAYLAND_DISPLAY set?)\n"); + return 2; + } + struct wl_registry *registry = wl_display_get_registry(display); + wl_registry_add_listener(registry, ®istry_listener, NULL); + wl_display_roundtrip(display); + if (!manager) { + fprintf(stderr, "pocket-pointer: the compositor does not offer zwlr_virtual_pointer_manager_v1\n"); + return 3; + } + struct zwlr_virtual_pointer_v1 *pointer = zwlr_virtual_pointer_manager_v1_create_virtual_pointer(manager, seat); + wl_display_roundtrip(display); + printf("ready\n"); + fflush(stdout); + + char line[256]; + unsigned commands = 0; + while (fgets(line, sizeof line, stdin)) { + double a = 0; + double b = 0; + unsigned code = 0; + unsigned state = 0; + uint32_t t = now_ms(); + if (sscanf(line, "m %lf %lf", &a, &b) == 2) { + zwlr_virtual_pointer_v1_motion(pointer, t, wl_fixed_from_double(a), wl_fixed_from_double(b)); + zwlr_virtual_pointer_v1_frame(pointer); + } else if (sscanf(line, "b %u %u", &code, &state) == 2) { + zwlr_virtual_pointer_v1_button(pointer, t, code, + state ? WL_POINTER_BUTTON_STATE_PRESSED : WL_POINTER_BUTTON_STATE_RELEASED); + zwlr_virtual_pointer_v1_frame(pointer); + } else if (sscanf(line, "s %lf %lf", &a, &b) == 2) { + zwlr_virtual_pointer_v1_axis_source(pointer, WL_POINTER_AXIS_SOURCE_FINGER); + if (a != 0) zwlr_virtual_pointer_v1_axis(pointer, t, WL_POINTER_AXIS_VERTICAL_SCROLL, wl_fixed_from_double(a)); + if (b != 0) zwlr_virtual_pointer_v1_axis(pointer, t, WL_POINTER_AXIS_HORIZONTAL_SCROLL, wl_fixed_from_double(b)); + zwlr_virtual_pointer_v1_frame(pointer); + } else if (line[0] == 'e') { + zwlr_virtual_pointer_v1_axis_source(pointer, WL_POINTER_AXIS_SOURCE_FINGER); + zwlr_virtual_pointer_v1_axis_stop(pointer, t, WL_POINTER_AXIS_VERTICAL_SCROLL); + zwlr_virtual_pointer_v1_axis_stop(pointer, t, WL_POINTER_AXIS_HORIZONTAL_SCROLL); + zwlr_virtual_pointer_v1_frame(pointer); + } else { + continue; + } + wl_display_flush(display); + // The pointer never receives events, but the seat does; drain the + // socket now and then so the compositor's side cannot fill up. + if ((++commands & 63) == 0) wl_display_roundtrip(display); + } + + zwlr_virtual_pointer_v1_destroy(pointer); + wl_display_flush(display); + wl_display_disconnect(display); + return 0; +} diff --git a/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml b/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml new file mode 100644 index 000000000..ea243e7c8 --- /dev/null +++ b/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml @@ -0,0 +1,152 @@ + + + + Copyright © 2019 Josef Gajdusek + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice (including the next + paragraph) shall be included in all copies or substantial portions of the + Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + + + + + This protocol allows clients to emulate a physical pointer device. The + requests are mostly mirror opposites of those specified in wl_pointer. + + + + + + + + + + The pointer has moved by a relative amount to the previous request. + + Values are in the global compositor space. + + + + + + + + + The pointer has moved in an absolute coordinate frame. + + Value of x can range from 0 to x_extent, value of y can range from 0 + to y_extent. + + + + + + + + + + + A button was pressed or released. + + + + + + + + + Scroll and other axis requests. + + + + + + + + + Indicates the set of events that logically belong together. + + + + + + Source information for scroll and other axis. + + + + + + + Stop notification for scroll and other axes. + + + + + + + + Discrete step information for scroll and other axes. + + This event allows the client to extend data normally sent using the axis + event with discrete value. + + + + + + + + + + + + + + + This object allows clients to create individual virtual pointer objects. + + + + + Creates a new virtual pointer. The optional seat is a suggestion to the + compositor. + + + + + + + + + + + + + Creates a new virtual pointer. The seat and the output arguments are + optional. If the seat argument is set, the compositor should assign the + input device to the requested seat. If the output argument is set, the + compositor should map the input device to the requested output. + + + + + + + diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index 531bafc6d..fa0d1ebe9 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/host/serve.ts — the Omarchy-side daemon for Pocket // Remote. Runs on the Omarchy machine as a user service: // @@ -41,13 +42,19 @@ import { } from "../protocol.ts"; import { hyprBatch, hyprDirectory, hyprDispatch, luaWindow, luaWorkspace, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; import { + evaluateMenuConditions, + loadMenu, + Pointer, pressKey, readLevels, + readMedia, readTheme, + readWifi, runAction, + runMenuEntry, setBrightness, - setThemeByName, setVolume, + setWifi, themeStateDirectory, toggleMute, typeText, @@ -201,6 +208,14 @@ const hyprDir = hyprDirectory(); let lastState: HostState | null = null; let lastLevels: { vol: number; mute: boolean; bri: number } | null = null; let theme = readTheme(); +/** The focused monitor's origin in layout px: a placement off the wire is + * monitor-relative and Hyprland wants layout coordinates. */ +let monitorOrigin = { x: 0, y: 0 }; +let lastCc: HostLine | null = null; +let lastMenu: { hide: string[]; check: string[] } | null = null; +let menuEntries = loadMenu(); +let menuBusy = false; +const pointer = new Pointer(undefined, log); let snapshotTimer: ReturnType | null = null; let snapshotBusy = false; let snapshotDirty = false; @@ -213,6 +228,7 @@ async function refreshState(): Promise { snapshotBusy = true; try { const state = await snapshot(hyprDir); + monitorOrigin = { x: state.mon.x ?? 0, y: state.mon.y ?? 0 }; const text = JSON.stringify(state); if (!lastState || JSON.stringify(lastState) !== text) { lastState = state; @@ -258,6 +274,41 @@ async function refreshLevels(force = false): Promise { } } +/** The control centre's other half: the network and what is playing. */ +async function refreshCc(): Promise { + try { + const [wifi, media] = await Promise.all([readWifi(), readMedia()]); + const line: HostLine = { t: "cc", wifi, media }; + if (!lastCc || JSON.stringify(lastCc) !== JSON.stringify(line)) { + lastCc = line; + broadcast(line); + } + } catch (error) { + log(`cc: ${(error as Error).message}`); + } +} + +/** The menu's live conditions, the way the shell evaluates them at open: + * one bash run over every `when` and `checked`, here on a timer so the + * device's sheet never waits for it. */ +async function refreshMenu(): Promise { + if (menuBusy) return; + menuBusy = true; + try { + menuEntries = loadMenu(); + const result = await evaluateMenuConditions(menuEntries); + if (!lastMenu || JSON.stringify(lastMenu) !== JSON.stringify(result)) { + lastMenu = result; + broadcast({ t: "menu", hide: result.hide, check: result.check }); + log(`menu: ${menuEntries.length} rows, ${result.hide.length} hidden, ${result.check.length} checked`); + } + } catch (error) { + log(`menu: ${(error as Error).message}`); + } finally { + menuBusy = false; + } +} + function refreshTheme(): void { const next = readTheme(); if (JSON.stringify(next) === JSON.stringify(theme)) return; @@ -274,6 +325,8 @@ function sendMirror(conn: Conn): void { sendLine(conn, line); } if (lastState) sendLine(conn, lastState); + if (lastCc) sendLine(conn, lastCc); + if (lastMenu) sendLine(conn, { t: "menu", hide: lastMenu.hide, check: lastMenu.check }); } // --------------------------------------------------------------------------- @@ -357,6 +410,23 @@ async function handle(conn: Conn, line: ClientLine): Promise { await dispatchLogged(`hl.dsp.window.move({ window = ${window}, workspace = ${target}, follow = false })`); break; } + case "place": { + // Monitor-relative logical px off the wire; Hyprland places in + // layout coordinates, so the focused monitor's origin goes back on. + const x = Number(line.x); + const y = Number(line.y); + if (!Number.isFinite(x) || !Number.isFinite(y) || Math.abs(x) > 20000 || Math.abs(y) > 20000) return; + await dispatchLogged( + `hl.dsp.window.move({ window = ${window}, x = ${Math.round(x + monitorOrigin.x)}, y = ${Math.round(y + monitorOrigin.y)} })`, + ); + break; + } + case "float": + await dispatchLogged(`hl.dsp.window.float({ window = ${window}, action = "toggle" })`); + break; + case "full": + await batchLogged([`hl.dsp.focus({ window = ${window} })`, 'hl.dsp.window.fullscreen({ mode = "fullscreen" })']); + break; } scheduleSnapshot(); return; @@ -394,11 +464,38 @@ async function handle(conn: Conn, line: ClientLine): Promise { } return; } - case "theme": - if (typeof line.name === "string" && setThemeByName(line.name, theme.list, log)) { - setTimeout(refreshTheme, 1500); - setTimeout(refreshTheme, 4000); + case "ptr": { + const dx = Number(line.dx); + const dy = Number(line.dy); + if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.move(dx, dy); + return; + } + case "click": + if (line.b === "l" || line.b === "r" || line.b === "m") pointer.click(line.b); + return; + case "scroll": { + const dx = Number(line.dx); + const dy = Number(line.dy); + if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.scroll(dx, dy); + return; + } + case "drag": + pointer.button("l", line.on === 1); + return; + case "wifi": + setWifi(line.on === 1, log); + setTimeout(() => void refreshCc(), 1500); + setTimeout(() => void refreshCc(), 5000); + return; + case "menu": + if (typeof line.id !== "string" || !runMenuEntry(menuEntries, line.id, log)) { + log(`${conn.address}: unknown menu row ${JSON.stringify(line.id)}`); + return; } + log(`menu: ${line.id}`); + scheduleSnapshot(300); + setTimeout(() => void refreshMenu(), 2000); + setTimeout(() => void refreshLevels(), 500); return; } } @@ -618,7 +715,12 @@ watchEvents( ); void refreshState(); void refreshLevels(true); +void refreshCc(); +void refreshMenu(); setInterval(() => void refreshLevels(), 1000); +setInterval(() => void refreshCc(), 3000); +setInterval(() => void refreshMenu(), 30_000); +if (!pointer.available()) log("pointer: helper not built; the trackpad will be inert until the next deploy"); setInterval(() => scheduleSnapshot(), 5000); // belt and braces for missed events try { const stateDir = themeStateDirectory(); diff --git a/apps/pocket-remote/host/wire.ts b/apps/pocket-remote/host/wire.ts index 5c117c670..ffdfc1c59 100644 --- a/apps/pocket-remote/host/wire.ts +++ b/apps/pocket-remote/host/wire.ts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/host/wire.ts — the host side of the SVC WIRE (PKNT) // protocol: framing, the device hello, the discovery beacon. Byte layouts // come from contracts/spec/spec.ts "SVC WIRE protocol" and must stay diff --git a/apps/pocket-remote/icons.tsx b/apps/pocket-remote/icons.tsx index f8aa58d9a..63e58f8f7 100644 --- a/apps/pocket-remote/icons.tsx +++ b/apps/pocket-remote/icons.tsx @@ -1,312 +1,86 @@ -// apps/pocket-remote/icons.tsx — glyphs drawn from rectangles. The baked -// atlas carries only the text the source spells out, so an icon that leaned -// on a symbol codepoint would render as the tofu box on the device; these -// are Views, and they recolour with the theme like everything else. +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/icons.tsx — an icon is a glyph. The remote's symbols +// come from the Nerd Font face fonts.json adds to the atlas (glyphs.ts names +// them), so they are text: they recolour with the theme like every label, +// and Omarchy's menu rows carry the very glyphs the shell shows. // -// Every icon fills a 24x24 box positioned by its parent. +// A class string reaches the device as one literal looked up in the baked +// table, so every size x tone pair is spelled out here rather than composed. -import { Text, View } from "@pocketjs/framework/components"; -import { themed } from "./theme.ts"; +import { Text } from "@pocketjs/framework/components"; +import { type Role, themed } from "./theme.ts"; -/** Icon stroke tone: dimmed in the dock at rest, the theme foreground when - * the item is live, accent for the active workspace, dark on accent fills. */ -type Tone = "fg" | "dim" | "accent" | "onAccent"; -type Shape = "plain" | "rot45" | "rot90" | "rot135" | "rot315" | "dot4" | "dot8"; +export type Tone = "fg" | "dim" | "accent" | "onAccent" | "danger" | "ok" | "warn"; +export type Size = "sm" | "base" | "lg" | "xl" | "2xl"; -/** - * A class string reaches the device as a whole literal looked up in the baked - * table, so every tone x shape pair is spelled out here rather than composed. - */ -const STROKE: Record> = { - fg: { - plain: "absolute bg-[#a9b1d6]", - rot45: "absolute bg-[#a9b1d6] rotate-45", - rot90: "absolute bg-[#a9b1d6] rotate-90", - rot135: "absolute bg-[#a9b1d6] rotate-135", - rot315: "absolute bg-[#a9b1d6] rotate-315", - dot4: "absolute bg-[#a9b1d6] rounded-[2]", - dot8: "absolute bg-[#a9b1d6] rounded-[4]", +const CLASS: Record> = { + sm: { + fg: "text-sm text-[#a9b1d6]", + dim: "text-sm text-[#565f89]", + accent: "text-sm text-[#7aa2f7]", + onAccent: "text-sm text-[#13141c]", + danger: "text-sm text-[#f7768e]", + ok: "text-sm text-[#9ece6a]", + warn: "text-sm text-[#e0af68]", }, - dim: { - plain: "absolute bg-[#565f89]", - rot45: "absolute bg-[#565f89] rotate-45", - rot90: "absolute bg-[#565f89] rotate-90", - rot135: "absolute bg-[#565f89] rotate-135", - rot315: "absolute bg-[#565f89] rotate-315", - dot4: "absolute bg-[#565f89] rounded-[2]", - dot8: "absolute bg-[#565f89] rounded-[4]", + base: { + fg: "text-base text-[#a9b1d6]", + dim: "text-base text-[#565f89]", + accent: "text-base text-[#7aa2f7]", + onAccent: "text-base text-[#13141c]", + danger: "text-base text-[#f7768e]", + ok: "text-base text-[#9ece6a]", + warn: "text-base text-[#e0af68]", }, - accent: { - plain: "absolute bg-[#7aa2f7]", - rot45: "absolute bg-[#7aa2f7] rotate-45", - rot90: "absolute bg-[#7aa2f7] rotate-90", - rot135: "absolute bg-[#7aa2f7] rotate-135", - rot315: "absolute bg-[#7aa2f7] rotate-315", - dot4: "absolute bg-[#7aa2f7] rounded-[2]", - dot8: "absolute bg-[#7aa2f7] rounded-[4]", + lg: { + fg: "text-lg text-[#a9b1d6]", + dim: "text-lg text-[#565f89]", + accent: "text-lg text-[#7aa2f7]", + onAccent: "text-lg text-[#13141c]", + danger: "text-lg text-[#f7768e]", + ok: "text-lg text-[#9ece6a]", + warn: "text-lg text-[#e0af68]", }, - onAccent: { - plain: "absolute bg-[#13141c]", - rot45: "absolute bg-[#13141c] rotate-45", - rot90: "absolute bg-[#13141c] rotate-90", - rot135: "absolute bg-[#13141c] rotate-135", - rot315: "absolute bg-[#13141c] rotate-315", - dot4: "absolute bg-[#13141c] rounded-[2]", - dot8: "absolute bg-[#13141c] rounded-[4]", + xl: { + fg: "text-xl text-[#a9b1d6]", + dim: "text-xl text-[#565f89]", + accent: "text-xl text-[#7aa2f7]", + onAccent: "text-xl text-[#13141c]", + danger: "text-xl text-[#f7768e]", + ok: "text-xl text-[#9ece6a]", + warn: "text-xl text-[#e0af68]", + }, + "2xl": { + fg: "text-2xl text-[#a9b1d6]", + dim: "text-2xl text-[#565f89]", + accent: "text-2xl text-[#7aa2f7]", + onAccent: "text-2xl text-[#13141c]", + danger: "text-2xl text-[#f7768e]", + ok: "text-2xl text-[#9ece6a]", + warn: "text-2xl text-[#e0af68]", }, }; -const strokeRef = (tone: Tone) => { - switch (tone) { - case "fg": - return themed("fgFill"); - case "dim": - return themed("fgDimFill"); - case "accent": - return themed("accentFill"); - case "onAccent": - return themed("surfaceDark"); - } +const ROLE: Record = { + fg: "text", + dim: "textDim", + accent: "textAccent", + onAccent: "textOnAccent", + danger: "textDanger", + ok: "textOk", + warn: "textWarn", }; -interface BarProps { - tone: Tone; - x: number; - y: number; - w: number; - h: number; - /** Optional rotation in degrees. */ - rot?: 45 | 90 | 135 | 315; - /** A round dot (w = h = 4 or 8). */ - round?: boolean; -} - -/** One rectangle of an icon. */ -function Bar(p: BarProps) { - const shape: Shape = - p.rot === 45 ? "rot45" : p.rot === 90 ? "rot90" : p.rot === 135 ? "rot135" : p.rot === 315 ? "rot315" : p.round ? (p.w >= 8 ? "dot8" : "dot4") : "plain"; +/** One glyph, coloured by tone, sized by the text scale. The parent centres + * it (a View with items-center justify-center). Tone and size may be + * functions for a glyph that changes with state. */ +export function Icon(p: { glyph: string | (() => string); tone?: Tone | (() => Tone); size?: Size }) { + const tone = () => (typeof p.tone === "function" ? p.tone() : (p.tone ?? "fg")); + const glyph = () => (typeof p.glyph === "function" ? p.glyph() : p.glyph); + const size = p.size ?? "base"; return ( - + ROLE[tone()])}> + {glyph()} + ); } - -export type IconName = - | "menu" - | "terminal" - | "browser" - | "files" - | "editor" - | "fullscreen" - | "float" - | "screenshot" - | "keyboard" - | "more" - | "prev" - | "play" - | "next" - | "sun" - | "speaker" - | "mute" - | "levels" - | "hide" - | "close"; - -export function Icon(p: { name: IconName; tone: Tone }) { - switch (p.name) { - case "menu": - // Omarchy's menu is the one thing on this remote that may borrow a - // letter: Ω is in Inter's Greek block and the atlas bakes it from here. - return ( - - - Ω - - - ); - case "terminal": - return ( - <> - - - - - - - - - ); - case "browser": - return ( - <> - - - - - ); - case "files": - return ( - <> - - - - ); - case "editor": - return ( - <> - - - - ); - case "fullscreen": - return ( - <> - - - - - - - - - - ); - case "float": - return ( - <> - - - - - - - ); - case "screenshot": - return ( - <> - - - - - ); - case "keyboard": - return ( - <> - - - - - - - - - - ); - case "more": - return ( - <> - - - - - ); - case "prev": - return ( - <> - - - - - ); - case "play": - return ( - <> - - - - ); - case "next": - return ( - <> - - - - - ); - case "sun": - return ( - <> - - - - - - - - - - - ); - case "speaker": - // A horn in three steps, then two sound bars. - return ( - <> - - - - - - - ); - case "mute": - return ( - <> - - - - - - - ); - case "levels": - // Two sliders with their knobs, the control-centre glyph. - return ( - <> - - - - - - ); - case "hide": - // A chevron pointing down: put the keyboard away. - return ( - <> - - - - ); - case "close": - return ( - <> - - - - ); - } -} diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts index b7454793a..0bdaa7147 100644 --- a/apps/pocket-remote/keyboard-layout.ts +++ b/apps/pocket-remote/keyboard-layout.ts @@ -1,29 +1,41 @@ -// apps/pocket-remote/keyboard-layout.ts — the keyboard's geometry and key -// table with no Solid in it: rows, keysym names, hold-and-slide variants, -// chip placement, and the key -> wire-line mapping. keyboard.tsx renders -// and handles; tests import this file bare (bun test cannot load the app's -// .tsx through the Solid transform). - -import { type Rect, SCREEN_H, SCREEN_W } from "./layout.ts"; +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/keyboard-layout.ts — the deck's geometry and key table +// with no Solid in it: the keyboard's five compact rows over the trackpad +// (the laptop's C surface, upside up), keysym names, hold-and-slide +// variants, chip placement, and the key -> wire-line mapping. deck.tsx +// renders and handles; tests import this file bare (bun test cannot load the +// app's .tsx through the Solid transform). + +import { type Rect, SCREEN_H, SCREEN_W, STRIP } from "./layout.ts"; import type { Modifier } from "./protocol.ts"; -import type { KbLayer, KeyVariant } from "./store.ts"; -export const KB_RECT: Rect = { x: 0, y: 0, w: SCREEN_W, h: SCREEN_H }; -export const CAPTION_H = 28; -export const ROWS_TOP = 30; -export const ROW_PITCH = 56; -export const KEY_H = 48; +export type KbLayer = "lower" | "upper" | "sym"; + +/** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ +export interface KeyVariant { + label: string; + k: string; + mods: Modifier[]; +} + +/** Five rows of 32 px keys on a 36 px pitch, starting under the strip. */ +export const ROWS_TOP = STRIP.h + 4; +export const ROW_PITCH = 36; +export const KEY_H = 32; +export const ROW_COUNT = 5; /** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ const UNIT = 44; const TOP_UNIT = 40; -export const HIDE_W = 44; + +export const KEYBOARD: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: ROWS_TOP - STRIP.h + ROW_COUNT * ROW_PITCH }; +/** The trackpad fills what the keyboard leaves. */ +export const TRACKPAD: Rect = { x: 4, y: KEYBOARD.y + KEYBOARD.h, w: SCREEN_W - 8, h: SCREEN_H - 4 - (KEYBOARD.y + KEYBOARD.h) }; export type KeyAction = | { ch: string } | { key: string } | { layer: KbLayer } - | { mod: Modifier } - | { hide: true }; + | { mod: Modifier }; export interface KeyDef { label: string; @@ -72,14 +84,27 @@ const TOP_ROW: KeyDef[] = [ { label: "⌫", w: 1, act: { key: "BackSpace" }, dark: true }, ]; -const BOTTOM_ROW = (layer: KbLayer): KeyDef[] => [ +/** Row three's ends: shift, then the arrows. */ +const rowThree = (middle: KeyDef[], shiftTo: KbLayer): KeyDef[] => [ + { label: "shift", w: 1.25, act: { layer: shiftTo }, dark: true }, + ...middle, + { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, + { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, +]; + +/** The bottom row: layer switch, ctrl, alt, tab, space, two punctuation + * keys (comma and period; apostrophe and backtick on the symbol layer), + * the horizontal arrows and return. 10.75 units. */ +const bottomRow = (layer: KbLayer): KeyDef[] => [ { label: layer === "sym" ? "abc" : "123", w: 1, act: { layer: layer === "sym" ? "lower" : "sym" }, dark: true }, { label: "ctrl", w: 1, act: { mod: "ctrl" }, dark: true }, { label: "alt", w: 1, act: { mod: "alt" }, dark: true }, { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, - { label: "space", w: 3, act: { key: "space" } }, - { label: "←", w: 1, act: { key: "Left" }, dark: true }, - { label: "→", w: 1, act: { key: "Right" }, dark: true }, + { label: "space", w: 2.25, act: { key: "space" } }, + { label: layer === "sym" ? "'" : ",", w: 0.75, act: { ch: layer === "sym" ? "'" : "," } }, + { label: layer === "sym" ? "`" : ".", w: 0.75, act: { ch: layer === "sym" ? "`" : "." } }, + { label: "←", w: 0.75, act: { key: "Left" }, dark: true }, + { label: "→", w: 0.75, act: { key: "Right" }, dark: true }, { label: "return", w: 1.5, act: { key: "Return" }, dark: true }, ]; @@ -87,34 +112,20 @@ const ROWS: Record = { lower: [ letters("qwertyuiop"), letters("asdfghjkl"), - [ - { label: "shift", w: 1.5, act: { layer: "upper" }, dark: true }, - ...letters("zxcvbnm"), - { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, - { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, - ], - BOTTOM_ROW("lower"), + rowThree([...letters("zxcvbnm"), { label: "'", w: 1, act: { ch: "'" } }], "upper"), + bottomRow("lower"), ], upper: [ chars("QWERTYUIOP"), chars("ASDFGHJKL"), - [ - { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, - ...chars("ZXCVBNM"), - { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, - { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, - ], - BOTTOM_ROW("upper"), + rowThree([...chars("ZXCVBNM"), { label: '"', w: 1, act: { ch: '"' } }], "lower"), + bottomRow("upper"), ], sym: [ chars("-/:;()$&@\""), chars("[]{}#%^*+="), - [ - { label: "shift", w: 1.5, act: { layer: "lower" }, dark: true }, - ...chars("_\\|~<>!?"), - { label: "'", w: 1, act: { ch: "'" } }, - ], - BOTTOM_ROW("sym"), + rowThree(chars("_\\|~<>!?"), "lower"), + bottomRow("sym"), ], }; @@ -150,22 +161,36 @@ export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { return LAYOUTS[layer]; } +/** The key under a point, with the gaps between keys belonging to their + * nearer neighbour so a finger never falls between two. */ export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { for (const key of LAYOUTS[layer]) { - if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 4 && y < key.y + key.h + 4) return key; + if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; } return null; } +/** The pressed key's preview bubble: the character, large, above the key + * (below it for the top row), the classic capacitive-keyboard feedback. */ +export const BUBBLE_W = 44; +export const BUBBLE_H = 40; +export function bubbleRect(key: Rect): Rect { + const x = Math.max(2, Math.min(SCREEN_W - 2 - BUBBLE_W, Math.round(key.x + key.w / 2 - BUBBLE_W / 2))); + // Sits on the key's top edge, so the first letter row's bubble ends where + // the strip begins; the top row's opens below it. + const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - BUBBLE_H : key.y + key.h + 4; + return { x, y, w: BUBBLE_W, h: BUBBLE_H }; +} + /** Variant chip geometry: above the key, or below it for the top row. */ -export const CHIP_W = 60; -export const CHIP_H = 36; +export const CHIP_W = 56; +export const CHIP_H = 34; export const CHIP_GAP = 6; export function chipRects(key: Rect, count: number): Rect[] { const total = count * CHIP_W + (count - 1) * CHIP_GAP; let x = Math.round(key.x + key.w / 2 - total / 2); x = Math.max(4, Math.min(SCREEN_W - 4 - total, x)); - const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - CHIP_H - 10 : key.y + key.h + 10; + const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - CHIP_H - 6 : key.y + key.h + 6; return Array.from({ length: count }, (_, i) => ({ x: x + i * (CHIP_W + CHIP_GAP), y, w: CHIP_W, h: CHIP_H })); } diff --git a/apps/pocket-remote/keyboard.tsx b/apps/pocket-remote/keyboard.tsx deleted file mode 100644 index c72ea8224..000000000 --- a/apps/pocket-remote/keyboard.tsx +++ /dev/null @@ -1,253 +0,0 @@ -// apps/pocket-remote/keyboard.tsx — the whole iPod as a keyboard. When -// typing is the job, nothing else on the remote matters, so the sheet takes -// the full 480x320: five rows of 48 px keys, ten columns, a caption naming -// the window the keys land in and a chevron to put the keyboard away. -// -// Keys go straight to the desktop (wtype) as they are pressed; nothing is -// buffered on the device, so what the desktop shows is the truth. -// -// Developers type chords, so the keyboard has two ways to make them: -// - sticky modifiers: tap ctrl (or alt), then the key — the modifier arms, -// paints itself, and drops after one key; -// - hold-and-slide: hold a letter and its variants fan out above it -// (^x · ⌥x); slide onto one and release. Digits offer their F-key and -// ctrl variant the same way. Releasing on the key itself types it plain. -// -// Geometry and the key table live in keyboard-layout.ts. - -import { createEffect, createSignal, Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import type { GestureHandlers } from "./desk.tsx"; -import { Icon } from "./icons.tsx"; -import { - CAPTION_H, - chipAt, - chipRects, - HIDE_W, - KB_RECT, - keyAt, - keyboardKeys, - type KeyAction, - type KeyDef, - type KeyRect, - keyToLine, -} from "./keyboard-layout.ts"; -import { type Rect, SCREEN_W, stagger } from "./layout.ts"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -export { KB_RECT } from "./keyboard-layout.ts"; - -export function keyboardHandlers(store: RemoteStore): GestureHandlers { - const [down, setDown] = createSignal(null); - let holding = false; - const active = () => store.kb() && store.pad() === null; - - const send = (act: KeyAction) => { - const mods = store.kbMods(); - const line = keyToLine(act, mods); - if (line) { - if (line.t === "type") store.typeText(line.text); - else store.typeKey(line.k, line.mods ?? []); - } - if (mods.length) store.setKbMods([]); - }; - - const press = (key: KeyRect) => { - const act = key.def.act; - if ("layer" in act) { - store.setKbLayer(act.layer); - return; - } - if ("hide" in act) { - store.setKb(false); - return; - } - if ("mod" in act) { - const mods = store.kbMods(); - store.setKbMods(mods.includes(act.mod) ? mods.filter((m) => m !== act.mod) : [...mods, act.mod]); - return; - } - send(act); - // One-shot shift: the upper layer drops back after a letter. - if ("ch" in act && store.kbLayer() === "upper") store.setKbLayer("lower"); - }; - - return { - onDown: (c) => { - if (!active()) return; - holding = false; - if (c.y < CAPTION_H) { - setDown(null); - if (c.x >= SCREEN_W - HIDE_W) store.pressDown("kbhide"); - return; - } - const key = keyAt(store.kbLayer(), c.x, c.y); - setDown(key); - if (key) store.pressDown(`key:${key.row}:${key.col}`); - }, - onMove: (c) => { - if (!active() || !holding) return; - const key = down(); - const f = store.flyout(); - if (!key || !f || f.kind !== "keyvar") return; - store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); - }, - onTap: () => { - if (!active()) return; - const key = down(); - if (store.pressed() === "kbhide") { - store.pressRelease(); - store.setKb(false); - return; - } - store.pressRelease(); - if (key) press(key); - setDown(null); - }, - onLongPress: () => { - if (!active()) return; - const key = down(); - if (!key || !key.def.variants) return; - holding = true; - store.pressDown(null); - store.openFlyout({ kind: "keyvar", key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); - }, - onPanStart: () => { - if (holding) return; - store.pressDown(null); - setDown(null); - }, - onUp: () => { - if (!active()) return; - if (holding) { - const chosen = store.keyRelease(); - const key = down(); - if (chosen) store.typeKey(chosen.k, chosen.mods); - else if (key && "ch" in key.def.act) send(key.def.act); // release on the key: plain - holding = false; - setDown(null); - } - store.pressRelease(); - }, - onCancel: () => { - if (holding) store.closeFlyout(); - holding = false; - store.pressRelease(); - setDown(null); - }, - }; -} - -function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; count: number; hot: boolean }) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const t = stagger(p.store.flyT(), p.i, p.count, 0.3); - jump(root, "translateY", Math.round((1 - t) * 10)); - jump(root, "opacity", t); - jump(root, "scale", p.hot ? 1.08 : 1); - }); - return ( - { - root = node; - // A light chip over dark keys: the iOS accent-popup contrast. - themed(() => (p.hot ? "accentFill" : "fgFill"))(node); - }} - > - - {p.label} - - - ); -} - -export function Keyboard(p: { store: RemoteStore }) { - const keys = () => keyboardKeys(p.store.kbLayer()); - const target = () => { - const c = p.store.focusClass(); - const mods = p.store.kbMods(); - const prefix = mods.length ? `${mods.join(" + ")} + ` : ""; - return c ? `${prefix}typing into ${c}` : `${prefix}no focused window`; - }; - const fly = () => { - const f = p.store.flyout(); - return f && f.kind === "keyvar" ? f : null; - }; - const armed = (def: KeyDef) => "mod" in def.act && p.store.kbMods().includes(def.act.mod); - return ( - - - - {target()} - - - {/* hide */} - - - - - - - - {(key) => ( - (armed(key().def) ? "accentFill" : key().def.dark ? "surface" : "surfaceMuted"))} - > - (armed(key().def) ? "textOnAccent" : "text"))} - > - {key().def.label} - - - - - - - )} - - - {(f) => ( - - {(rect, i) => ( - - )} - - )} - - - - - - ); -} diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index 86a23c341..3ba69b78f 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -1,8 +1,11 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/layout.ts — the screen's fixed geometry and the pure -// arithmetic behind it: where the strip, stage and dock sit on the 480x320 -// landscape panel, how a monitor is fitted into the stage, where the levels -// card and the menu flyout open, how a finger on a slider becomes a level. -// No Solid here so tests can run it bare. +// arithmetic behind it: where the strip and the stage sit on the 480x320 +// landscape panel, how a monitor is fitted into the stage, where the ball +// snaps, where a popup opens so it stays on screen, how the control centre +// and the menu sheet are laid out, how a finger on a slider becomes a level +// and a finger on the trackpad becomes pointer motion. No Solid here so +// tests can run it bare. import type { Direction, HostState, WinInfo, WsInfo } from "./protocol.ts"; @@ -16,29 +19,33 @@ export interface Rect { h: number; } +/** Stage: the live miniature of the desktop. Deck: keyboard over trackpad, + * the laptop's own C surface. */ +export type Mode = "stage" | "deck"; + +// --------------------------------------------------------------------------- +// strip +// --------------------------------------------------------------------------- + /** The workspace strip across the top. */ export const STRIP: Rect = { x: 0, y: 0, w: SCREEN_W, h: 28 }; export const TAB_W = 28; export const TAB_X0 = 6; export const TAB_MAX = 10; -/** Media transport cluster at the strip's right end. */ -export const MEDIA_W = 30; -export const MEDIA_X = SCREEN_W - 3 * MEDIA_W - 6; -/** Layout badge sits left of the media cluster. */ -export const BADGE_W = 60; -export const BADGE_X = MEDIA_X - BADGE_W - 8; - -/** The stage: the live miniature of the focused monitor. */ -export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: 240 }; - -/** The dock across the bottom: eleven slots of 43 px. */ -export const DOCK: Rect = { x: 0, y: STAGE.y + STAGE.h, w: SCREEN_W, h: SCREEN_H - STAGE.y - STAGE.h }; -export const DOCK_SLOTS = 11; -export const DOCK_SLOT_W = 43; -export const DOCK_X0 = Math.floor((SCREEN_W - DOCK_SLOTS * DOCK_SLOT_W) / 2); - -/** Seconds a tile must be held before it closes; the bar fills over this. */ -export const CLOSE_HOLD_SECONDS = 0.6; +/** The active workspace's layout name; tapping toggles it (SUPER+L). */ +export const BADGE: Rect = { x: 296, y: 4, w: 62, h: 20 }; +/** The mode switch: two halves, stage and deck. */ +export const MODE: Rect = { x: 366, y: 3, w: 68, h: 22 }; +export const MODE_HALF_W = 34; +/** The control centre button at the strip's right end. */ +export const CC_BUTTON: Rect = { x: 440, y: 2, w: 34, h: 24 }; + +// --------------------------------------------------------------------------- +// stage +// --------------------------------------------------------------------------- + +/** Everything under the strip: the desktop miniature, or the deck. */ +export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: SCREEN_H - STRIP.h }; /** Horizontal travel on empty stage that switches workspace. */ export const SWIPE_PX = 48; /** Tiles shorter than this drop their title line. */ @@ -46,87 +53,231 @@ export const TILE_TWO_LINES_H = 40; /** Fixed pool of tile slots (protocol WINDOWS_MAX). */ export const TILE_SLOTS = 24; +/** Launch chips on an empty workspace: the apps a remote is reached for. */ +export const LAUNCH_CHIP_W = 104; +export const LAUNCH_CHIP_H = 36; +export const LAUNCH_CHIP_GAP = 10; +export const LAUNCH_Y = STAGE.y + 124; + +export function launchChipRect(i: number, count: number): Rect { + const total = count * LAUNCH_CHIP_W + (count - 1) * LAUNCH_CHIP_GAP; + const x0 = Math.round((SCREEN_W - total) / 2); + return { x: x0 + i * (LAUNCH_CHIP_W + LAUNCH_CHIP_GAP), y: LAUNCH_Y, w: LAUNCH_CHIP_W, h: LAUNCH_CHIP_H }; +} + +export function launchChipAt(x: number, y: number, count: number): number | null { + for (let i = 0; i < count; i += 1) if (within(x, y, launchChipRect(i, count))) return i; + return null; +} + // --------------------------------------------------------------------------- -// levels card (brightness + volume, the control-centre control) +// the ball (the menu's handle: floats, snaps to a side edge) // --------------------------------------------------------------------------- -export const CARD: Rect = { x: 100, y: 92, w: 280, h: 132 }; -/** Row tops inside the card (brightness, volume). */ -export const CARD_ROW_Y = [14, 72] as const; -export const CARD_ROW_H = 44; -/** The toggle icon at the row's left (nightlight / mute). */ -export const CARD_ICON_X = 12; -export const CARD_ICON_W = 36; -/** The slider track. */ -export const CARD_TRACK_X = 60; -export const CARD_TRACK_W = 172; -export const CARD_TRACK_H = 12; -/** Frames the card lingers after a hold-and-slide release. */ -export const CARD_LINGER_FRAMES = 70; +export const BALL = 44; +export const BALL_MARGIN = 6; +export const BALL_Y_MIN = STRIP.h + 6; +export const BALL_Y_MAX = SCREEN_H - BALL - 6; +/** Where it starts: the right edge, low, over the corner a window's tile + * least often needs. */ +export const BALL_HOME = { x: SCREEN_W - BALL - BALL_MARGIN, y: SCREEN_H - BALL - 16 }; + +/** Released anywhere, the ball goes to the nearer side edge and keeps its + * height, clamped under the strip. */ +export function ballSnap(x: number, y: number): { x: number; y: number } { + const left = x + BALL / 2 < SCREEN_W / 2; + return { + x: left ? BALL_MARGIN : SCREEN_W - BALL - BALL_MARGIN, + y: Math.max(BALL_Y_MIN, Math.min(BALL_Y_MAX, Math.round(y))), + }; +} + +export function ballHit(x: number, y: number, ball: { x: number; y: number }): boolean { + return within(x, y, { x: ball.x - 4, y: ball.y - 4, w: BALL + 8, h: BALL + 8 }); +} -export type CardHit = { kind: "icon"; row: 0 | 1 } | { kind: "track"; row: 0 | 1 } | { kind: "card" } | null; +// --------------------------------------------------------------------------- +// popup (the classic one: a container of rows with a caret at its anchor) +// --------------------------------------------------------------------------- + +export const POPUP_W = 176; +export const POPUP_ROW_H = 38; +export const POPUP_PAD = 4; +export const POPUP_CARET = 8; +/** Distance between the anchor point and the popup's near edge. */ +export const POPUP_GAP = 12; + +export interface Popup extends Rect { + /** Caret tip, screen x. */ + caretX: number; + /** The popup opened below its anchor: the caret sits on the top edge. */ + below: boolean; +} + +/** Place a popup of `rows` rows at an anchor point, inside `bounds`: below + * the anchor when there is room, above otherwise, centred on it and pushed + * in from the sides. */ +export function placePopup(anchorX: number, anchorY: number, rows: number, bounds: Rect = STAGE): Popup { + const w = POPUP_W; + const h = rows * POPUP_ROW_H + POPUP_PAD * 2; + const below = anchorY + POPUP_GAP + h <= bounds.y + bounds.h - 6; + const y = below ? anchorY + POPUP_GAP : anchorY - POPUP_GAP - h; + const x = Math.max(bounds.x + 6, Math.min(bounds.x + bounds.w - 6 - w, Math.round(anchorX - w / 2))); + const caretX = Math.max(x + 16, Math.min(x + w - 16, anchorX)); + return { x, y: Math.max(bounds.y + 6, y), w, h, caretX, below }; +} + +export function popupRowAt(p: Popup, x: number, y: number): number | null { + if (!within(x, y, p)) return null; + const i = Math.floor((y - p.y - POPUP_PAD) / POPUP_ROW_H); + const rows = Math.round((p.h - POPUP_PAD * 2) / POPUP_ROW_H); + return i >= 0 && i < rows ? i : null; +} + +// --------------------------------------------------------------------------- +// control centre (hangs from the strip's right end) +// --------------------------------------------------------------------------- -/** What is under a point on the levels card. */ -export function cardHit(x: number, y: number, card: Rect = CARD): CardHit { +export const CC: Rect = { x: SCREEN_W - 8 - 268, y: STRIP.h + 4, w: 268, h: 210 }; +/** Tiles, relative to the card. */ +export const CC_WIFI: Rect = { x: 10, y: 10, w: 130, h: 52 }; +export const CC_SHOT: Rect = { x: 148, y: 10, w: 54, h: 52 }; +export const CC_NIGHT: Rect = { x: 206, y: 10, w: 52, h: 52 }; +export const CC_MEDIA: Rect = { x: 10, y: 70, w: 248, h: 48 }; +export const CC_MEDIA_BTN_W = 36; +/** prev, play, next — the right end of the media row. */ +export const CC_MEDIA_BTN_X = [150, 186, 222] as const; +/** Slider rows: brightness, volume. */ +export const CC_ROW_Y = [126, 166] as const; +export const CC_ROW_H = 36; +export const CC_ICON_X = 10; +export const CC_ICON_W = 36; +export const CC_TRACK_X = 54; +export const CC_TRACK_W = 160; +export const CC_TRACK_H = 10; +export const CC_VALUE_X = 220; +/** Frames the card lingers after a hold-and-slide release. */ +export const CC_LINGER_FRAMES = 70; + +export type CcHit = + | { kind: "wifi" } + | { kind: "shot" } + | { kind: "night" } + | { kind: "media" } + | { kind: "prev" } + | { kind: "play" } + | { kind: "next" } + | { kind: "icon"; row: 0 | 1 } + | { kind: "track"; row: 0 | 1 } + | { kind: "card" } + | null; + +/** What is under a point on the control centre. */ +export function ccHit(x: number, y: number, card: Rect = CC): CcHit { if (!within(x, y, card)) return null; - const ly = y - card.y; const lx = x - card.x; + const ly = y - card.y; + const inside = (r: Rect) => lx >= r.x && lx < r.x + r.w && ly >= r.y && ly < r.y + r.h; + if (inside(CC_WIFI)) return { kind: "wifi" }; + if (inside(CC_SHOT)) return { kind: "shot" }; + if (inside(CC_NIGHT)) return { kind: "night" }; + if (inside(CC_MEDIA)) { + const buttons = ["prev", "play", "next"] as const; + for (let i = 0; i < 3; i += 1) { + if (lx >= CC_MEDIA_BTN_X[i]! && lx < CC_MEDIA_BTN_X[i]! + CC_MEDIA_BTN_W) return { kind: buttons[i]! }; + } + return { kind: "media" }; + } for (const row of [0, 1] as const) { - const top = CARD_ROW_Y[row] - 4; - if (ly < top || ly >= top + CARD_ROW_H + 8) continue; - if (lx >= CARD_ICON_X && lx < CARD_ICON_X + CARD_ICON_W) return { kind: "icon", row }; - if (lx >= CARD_TRACK_X - 8) return { kind: "track", row }; + const top = CC_ROW_Y[row] - 3; + if (ly < top || ly >= top + CC_ROW_H + 6) continue; + if (lx >= CC_ICON_X && lx < CC_ICON_X + CC_ICON_W) return { kind: "icon", row }; + if (lx >= CC_TRACK_X - 8) return { kind: "track", row }; } return { kind: "card" }; } -/** Which row a finger height selects while sliding across the card. */ -export function cardRowAt(y: number, card: Rect = CARD): 0 | 1 { - const mid = card.y + (CARD_ROW_Y[0] + CARD_ROW_Y[1] + CARD_ROW_H) / 2; - return y < mid ? 0 : 1; +/** The slider row a sliding finger is on: brightness above the midline + * between the rows, volume below; null while the finger is still up among + * the tiles. */ +export function ccRowAt(y: number, card: Rect = CC): 0 | 1 | null { + const ly = y - card.y; + if (ly < CC_ROW_Y[0] - 10) return null; + const mid = (CC_ROW_Y[0] + CC_ROW_Y[1] + CC_ROW_H) / 2; + return ly < mid ? 0 : 1; } /** A horizontal drag of `dx` px changes a level by this (full track = 0..1). */ export function trackDelta(dx: number): number { - return dx / CARD_TRACK_W; + return dx / CC_TRACK_W; } /** Fill width for a level, in track px. */ export function trackFill(level: number): number { - return Math.round(clamp01(level) * CARD_TRACK_W); + return Math.round(clamp01(level) * CC_TRACK_W); } // --------------------------------------------------------------------------- -// menu flyout (hold Menu, slide, release) +// the menu sheet (Omarchy's menu, centred, two columns, scrolling) // --------------------------------------------------------------------------- -export const FLY_ITEM_H = 34; -export const FLY_GAP = 4; -/** Column one: routes. Bottom-anchored just above the dock. */ -export const FLY_X = 8; -export const FLY_W = 120; -export const FLY_BOTTOM = DOCK.y - 6; -/** Column two: the hot route's leaves. */ -export const FLY2_X = FLY_X + FLY_W + 8; -export const FLY2_W = 156; -export const FLY_MAX_ROWS = 6; - -/** Top of item `i` in a bottom-anchored column of `count` items (i = 0 is - * nearest the dock). */ -export function flyItemY(i: number): number { - return FLY_BOTTOM - (i + 1) * FLY_ITEM_H - i * FLY_GAP; -} - -/** Item index under a point in a bottom-anchored column, or null. */ -export function flyItemAt(x: number, y: number, colX: number, colW: number, count: number): number | null { - if (x < colX - 6 || x >= colX + colW + 6) return null; - for (let i = 0; i < count; i += 1) { - const top = flyItemY(i); - if (y >= top - FLY_GAP / 2 && y < top + FLY_ITEM_H + FLY_GAP / 2) return i; - } - return null; +export const SHEET: Rect = { x: 30, y: 34, w: 420, h: 274 }; +export const SHEET_HEAD_H = 36; +export const SHEET_PAD = 8; +export const SHEET_COLS = 2; +export const SHEET_COL_W = 198; +export const SHEET_ROW_H = 38; +/** The scrolling list's viewport. */ +export const SHEET_LIST: Rect = { + x: SHEET.x + SHEET_PAD, + y: SHEET.y + SHEET_HEAD_H, + w: SHEET.w - 2 * SHEET_PAD, + h: SHEET.h - SHEET_HEAD_H - SHEET_PAD, +}; +export const SHEET_BACK: Rect = { x: SHEET.x + 4, y: SHEET.y + 2, w: 44, h: 32 }; +export const SHEET_CLOSE: Rect = { x: SHEET.x + SHEET.w - 48, y: SHEET.y + 2, w: 44, h: 32 }; + +/** Row `i` of a submenu, in LIST space (before the scroll offset). */ +export function sheetRowRect(i: number): Rect { + const col = i % SHEET_COLS; + const row = Math.floor(i / SHEET_COLS); + return { x: col * (SHEET_COL_W + SHEET_PAD), y: row * SHEET_ROW_H, w: SHEET_COL_W, h: SHEET_ROW_H }; +} + +export function sheetContentH(count: number): number { + return Math.ceil(count / SHEET_COLS) * SHEET_ROW_H; +} + +export function sheetMaxScroll(count: number): number { + return Math.max(0, sheetContentH(count) - SHEET_LIST.h); +} + +/** Row index under a screen point, given the list's scroll offset. */ +export function sheetRowAt(x: number, y: number, count: number, scroll: number): number | null { + if (!within(x, y, SHEET_LIST)) return null; + const lx = x - SHEET_LIST.x; + const ly = y - SHEET_LIST.y + scroll; + const col = Math.floor(lx / (SHEET_COL_W + SHEET_PAD)); + if (col < 0 || col >= SHEET_COLS || lx - col * (SHEET_COL_W + SHEET_PAD) >= SHEET_COL_W) return null; + const row = Math.floor(ly / SHEET_ROW_H); + if (row < 0) return null; + const i = row * SHEET_COLS + col; + return i < count ? i : null; +} + +// --------------------------------------------------------------------------- +// trackpad +// --------------------------------------------------------------------------- + +/** Pointer gain by finger speed (px per frame on the pad): slow strokes are + * precise, fast ones cross the laptop's screen in one swipe. */ +export function pointerGain(speed: number): number { + return Math.max(1.2, Math.min(4, 1.2 + speed * 0.14)); } +/** Two-finger travel to scroll distance. */ +export const SCROLL_GAIN = 1.6; + // --------------------------------------------------------------------------- // helpers // --------------------------------------------------------------------------- @@ -140,7 +291,7 @@ export function clamp01(v: number): number { } // --------------------------------------------------------------------------- -// stage +// the desktop on the stage // --------------------------------------------------------------------------- export interface Fit { @@ -174,6 +325,11 @@ export function tileRect(win: WinInfo, fit: Fit): Rect { return { x, y, w: Math.max(8, x2 - x), h: Math.max(8, y2 - y) }; } +/** Stage px back to the monitor's logical px (a dragged floating window). */ +export function stageToMonitor(x: number, y: number, fit: Fit): { x: number; y: number } { + return { x: Math.round((x - fit.ox) / fit.s), y: Math.round((y - fit.oy) / fit.s) }; +} + /** Windows shown on the stage: the active workspace's, tiled first so a * floating window paints over the tiling it covers. */ export function stageWindows(state: HostState): WinInfo[] { @@ -203,7 +359,7 @@ export function swapDirection(from: Rect, to: Rect): Direction { } // --------------------------------------------------------------------------- -// strip +// strip tabs // --------------------------------------------------------------------------- export interface Tab { @@ -239,19 +395,6 @@ export function tabAt(x: number, tabs: readonly Tab[]): Tab | null { return null; } -// --------------------------------------------------------------------------- -// dock -// --------------------------------------------------------------------------- - -export function dockSlotAt(x: number): number | null { - const i = Math.floor((x - DOCK_X0) / DOCK_SLOT_W); - return i >= 0 && i < DOCK_SLOTS && x >= DOCK_X0 ? i : null; -} - -export function dockSlotX(i: number): number { - return DOCK_X0 + i * DOCK_SLOT_W; -} - // --------------------------------------------------------------------------- // motion // --------------------------------------------------------------------------- diff --git a/apps/pocket-remote/main.tsx b/apps/pocket-remote/main.tsx index 7997c1447..9cdf986df 100644 --- a/apps/pocket-remote/main.tsx +++ b/apps/pocket-remote/main.tsx @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // @title Pocket Remote import PocketRemote from "./app.tsx"; import { mount } from "@pocketjs/framework/solid"; diff --git a/apps/pocket-remote/media/connect.png b/apps/pocket-remote/media/connect.png new file mode 100644 index 0000000000000000000000000000000000000000..b659b87b9823b061b8f97cff0afb812c94714cae GIT binary patch literal 8371 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 H;@W=!&JS+1 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png new file mode 100644 index 0000000000000000000000000000000000000000..0c4b553812ff572fdcf8f9d303a0b6cc2d50b0eb GIT binary patch literal 14190 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 x4ERk`IAR|>{QU^vy%-9ryUcNpZ*sZui_ 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%0Dpp+_>({^=ISy_U`(qdwC0We-t zd$SO_VPkw6P~|WvuRL@Z(K_&F5|SM@JsjFoeZUZux^N7ryL3HM#&!mVQFD;Jt>sIk_=4T@~## zsZ6z~kTw{A?RbUw!ei`}XCg4QK$IXuoQ)H4m=^R87KObsUCAD}ailX81a?RHKI+O};6@_k`#5 zq6xBh<6}&eg@Z%Q)ywh{87DhNrXjiBji>M!(I4y^Sj8gTw*li~!feB3UhJd+1!kHoh?BHSq$h!XNdULSI_YS$cOZt#n(g^>=L)dhPm1)FsEcJcdgF`bx23 zsiDN_u`<-OC#Vfw{=jMH8=CEvL*uAJ7ZjwIK`Bb&eTD6}MP1p&W!*%?nhLiAvW>r& z|1YLrj39a8uNDoQ`GO_`s#o;Cqn3Y<_8ot5dNN9GqCMQa56Mc(Li)=H(`o3+Hc*kbE1s3i5_Wgv@UWLZuy_n4k2lx zemvE6&qrgU#PaS5k!x7tn677&r$r?e6v|lq-<^Wi?Q?Z0TU)mL>YrKrbrk;4*^V&S z^HJ^*6QDH(yt9_eEx)|80%q(%%g*Y`w|V^il;_ezZS{a{Q~oja4RMrB6U-&IdA6zL z(BsX_$+uPsb7WUdrM)u6f%01!s8^s@;IBp1?F}x39IiSAz6dz_gim$F?4yiR>|9 zWTa%Izq+ohpxJ0I#aH&U{_LQsnQ53`g03}1QEN<5e*YE1W3_@AHdR#vVhHRG}2vH5kd;*-bAXi%&B z_WG&Y;@MWCaWZFAbtdb0gIt`nwvJMi#Wvxa%AB&&d3-8hFMm#Jpz=U`M|}7yNz0&v zaP;wkqy&O3y%?Y(*Qz7#exG(v_tVLl_T1}X|8+3r$^V@8d&yM&Ul?;g?Aw3l{gAv` zkN@-V#}!GO`+xl|d-deMert4N|Eqmq!pMI@TJQr>r4!bI98AAWC1Xoi!8-y^OTTjA zkp#J^6vlVmr&6PVSV^<;3P(W<_+t`c4kRcXL2OQdp z5OZN?vOnS}`Eal#rr}vh{R5Zt0-U2LO2A@CKL0`IDNm5CMJ<6|L-hOCU$_1-X3w_Z zqSAWh#-ma<5%!52m4-=@LL&+DlWILt9fw)mh zD)>wsu$>(K?9nIv!CY?jk_Ve`nqIP6pp?fV%B1M!KN~%r>la?Rb`<86YIBGIl|FzF zf8$S_K+sWwDQCLei!PIal7YxTe`C;d5=vfSn?);Qu>oABB^NCWCkiYV)1T#1r30`i zr6($1EtE@8bTNBJOlBOHITs=dY~6;-4S#Rl1<>&9l*L~NR-yHTwa-d#o8$X)w{jc+ zJ3?~&30?>u|9id()`j?^b1(zH0;%TGxqOE1wRYUU2_Ek&-VK zlo?ZF$btpr_<=FEeci|ZisVpUC1l~N5@xcAz7bK=5+l0%|3+UKB+d`a_v-H;%kEc5 zGMgNrL0l4hQpJU3540_?#L2CAl(5KD+(#1;j(1W8wd ke?^X94{YUaBKCx2)?i{F4$X%Lj$(su=oo63UWJDI50pxuU;qFB literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/deck.png b/apps/pocket-remote/media/deck.png new file mode 100644 index 0000000000000000000000000000000000000000..7ae7c0aaf257f0d25da7a88cee2cea43b16c08af GIT binary patch literal 15275 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/empty.png b/apps/pocket-remote/media/empty.png new file mode 100644 index 0000000000000000000000000000000000000000..349fd9f9026d89cb42660934d2080d8b4e263036 GIT binary patch literal 10214 zcmeHthgXwX*Y6X$NYTMTECEJlL=*&+qM?fhP>OT}X(CcX5kd(q2#Af~h=9@+X$cT& zKuQQ$5D}?KAR!b{frQWrB?4bS@B7Yo?>}(Ad*8L5td*Se?0xn=`JG+Q{i~)1!h(kd z0RRv-GQ4O30H86>M^}K4Gjj6-HUa=-%Zx7SS%ra^+0>My9^vmdb>hc>G`DMpq;ixK zwsZ;c7sJyittstmt!`RU*`Ty8^q53E6B!T*%p4QpZ@+I;!TnZF`j0qz0ri3<8WJi!6Ovm1-lfOqiE-Ni7Ekqzx913g4 zmVfa3QR`40+RSbqY8KXMggIgik1l z9Xf+BL-=nZ7H3yW{Wi58Ibql=-%>6+%X*W<7bU)kumN`e)4=|5pBs>dC_?X_VHG!y z#c>v1abhIQ)xyZe%ul%4Xcy0@A__^H!YVEf6dlh2X+G-ptTUf3UR8h8tC&B=YK5ju z=*7=FO13p?^&TiqiuAxqO4;XLd&(l>3_5EOU;BI6qS+m4G;Q?^Kr%#+IxP9+_X->V> zebwuqZC!V(7I;^jm>vJ!5fi1SC8ggZ!^pN0m_Kw6;I4 zV*9_m?*4utLs8l&p7L`)zpcWM4zG_MlK)vuVCVsJg2hkIpvT`I}6SD}P18rftiX*_BRH`RLoz z+`9ds$Z4OJ4{@RF7s>Jp?6*g@EyE+Y9w6_;j`LS=1vAR~!wt$zsTa(XJ#Zt9H8~`s zxDfVm+|csfb@zN*t(->o-;pYsF=IdaCY;zO_qr&M8TQW1GhBFa0{oUBx^#5ld|`lU zfebA;+&nHmPzIFcGzWfnAb99$jfuXf8_)HD`?B~P|HeSJ9M?1CUoMFsbcv=EsFC2s zgzs(7G2v@+*OTQnYimXp-gzv+6%5UCqO?Unt7xv+b(U%I&R1I6B4#lX1UBmW2j@Dq zzKN*%3WRZ+bLTPQUm$TOq zdqrWG1C|c=;(E5ff(?+gownbbEp9q)Egy+uVod?5sAWvJ09Do1aqlg`4B(5tVI#=5 zpO9S+VpRHl=?&_D7HF(yIocP=Bl}qg8tg}4&eI{3TwG;u=Br6->=m;`6T2LPo%emv z;odad`&DI}j7zP*%qV(X!xJbXBmJZ2eDRxX?RD~X?&I-$#>KhMfjcr(`f4kxdo%-P zZbU1P+iYbllB^g!0d-LYR4*-sIrUc=B4ehPz!hn@+JG)VrgkQwjb!Pc`FK^{GO-wSLw8emTA!w4Bt=I zxfwXzN{v}k6DGRL%W9PSI1($hQdqUWqU!rM#qGRhcI#<8zb1NrMftk@8r`3!_?Rp_ zrov%7oNlJaz~;0}lF5^yMnMNvKyMQtv$zJKuLUn8nW|P<4;J({+n1aB7fo7o*HiHi zsMCB(2^G*0duR0!|Rt<1r6z&lKe`(9F#RhaR32AbL7z z>yZB0?ME*<0Libp%CFQ5R`PM2As=ys>@M^!I3W#n} z_*Cw-Z1r+ql>@{y4na$3*)usKyA+U&U7+bpv zQ1cQDee5!TbMGfOv5Mp-^zPVE&oGCz2RJkU-|^GP{gMPgX!ijL@dWeybboH01YubB zw2bDi_mjBy0RYY93G9-%NK10_RKy*V-kpmL6WT`*d4QY;_&DsoDC+_mC%D?Ucf97k z_Wuz5XCwZDi2odo|M@lo`i`(+!mdiK8xaXo;^!8TkVb+JfK2Z4*O|59r2fgd?t13~2Bs|dEgD{fty(R1W3VJUxx#KSn%5Dy>@7;f)4qwBZ+b&4 z?-mEg2kpZcKLOF>_d#5Pdi$>~Nfu8yp9@kIwc$nGSs+wCyn;P-4<)ae+TzEc!xJ8m z$ZlmR0}?$W!-6-6NO)flon$9S745{ zUJN^>p@;#7pd8b3&Y+4=CCVc>)>XZF{UE`}^>3b#=-clz zbfAXo6fK!j0Vt%f++4k6jKHCX(c<&=ehdnm#89ITxbZqxM!^)l*k4qAnkNU;*WINA z&|!I^#}+^5_-u>kWuvaayfaV2^~02me!8-Z6#_IzT;+IDp}f#T%S!w53i-R{hX=g^ z?CM{=a1_N)sN*HM=8Wd0ll;6?`X`oc@?*`}zvyj(T>3_1aYB zO&Pt2#dsSwpyzlRx2&bm-&I>~$ z`LwZtX)W<|FSOlUFEm{o86r%A*05f@Nay#K)q<9J#+>w1splP{p&q-95kQ#y)ro3L^m#{PunG;7Ts{(TW9jA=*!Vz?Rg+LpFY()hQZVa&Fq&<3}-ySkD|75_-gexdPL z{-3I)93fpSC2f<)NrMKCLR0UgeQQls+;l+^gk*< znn&`PmbILsR!waAl1CD&wGwl5_2+d*KDvc#m5RkeL~W zd0f5QmM_kW<%tW~%$aHS34QrTn6&@5%BHl*MSO`E5`scq+a*$BNN{#Vs<6vfD<`hb zZz+~!cGvUC3*w+D|e(`Jz`}=>RTsO8)xom!5B125huhAC|3!LJ%CQ5bZEgnYF{~rqOcLa z_N}F(z-){@#;ombS_{EvLqwXLaK^b~wb!Zk8q-g!%lwm7Z?n6KVsxC%y8BDim{g|} zNp{a(Zn!bpD7#Tvi&R-UVbf*R?*~6gvccQKRKfPXmW)>;-r!mXn}f}20{U>(61Z_{ zj_jq+jq6m5T8>p6s`nCLt8%%H#`xTV17VL41nZ@KOdSlrM~^2DeD{f2o+uy__j^8v zpb{n7pZcom@Jn;+YPe=x_*SY;H?@aj|8cI__azx{_%WPL2g$k-QBLl2JLQ9UU?oPp zmBp|l1!Agat!39e`ZE@dM=sMVR{k(F9!!*~d;wRj!l{+%liiqC+FyiNiI(|juDrSG zXyOgF{JmQ&Vz_hEuXdrZ0siPTSN%)#4Eu!*>wHsCDauaPXXE}*`K5x~w-3qwwerH3 zqBd;Wb8s&A&W8d13tvrEop zIIl6U=cMXuyjnOijHdwR8=Q(LJ6w=;Pc)FI$l0m;@R~z;XK>8G-(xh0h0ImzMR5K@ zpxpB*9yy{m4Cl7%X5KBeqW>xH(#eIbH)e=q4GP(e}pn_!m)XHls6(-GcWMWX_E{hkc6(=XbQF_&o-2-)Myx z=pll=U#tsOF1}p>S;w^hfM0yCBab06{I|k}mK2*=p+jJYWRZcuPK+rBh!4S)6bk~q zlGh*7g*A0dE?7RJZywUs;(YfmEl||LfQX&Z_a`EVWp2;SSi5SUEgpUI8>a%JzGdY8 zSPY*#uPTfXOEa}GaUEK@$bJhW-!wQxpww}-LXLprNK!?B&E#g{=$6-MIA!DUt9jbF zAf;{0WYNg#LIJ!cnuc<4@}i$vL4P{9*8)>Udzw1(qTJjPk)L_tT6aG#NviR)=h@#w zj5n23W>682A>umn1yV2h_KZjSx6!}*V<}+=II=YEbxFFXqIJ#MzU4kZ+Jg}rjy|9Z z_TM1pnmcooWJ5K?%P@I|ih!*)Ow4nB41`XL5MMf+tr5e7%5D;ans4cqtzd$O-%0sb z_~2-fawMBp`zENT&Y*?Rw;NjTE;ekd46b1Hm| z0M4`lU3%7^ee*EIh%%;HY7QShJcK@;8_7zFT*kB@qQ8%yS`WeueKU)K4Kd)@JqD?( z07-QVr*)WrheIcjLs7~N{d{z1^7>V-Ss0FjdPJY&PhEF5z4eaPepdGUd5|J_VAI1QC zroJD7j(!J_f)wf|r8d{*ly2X)Gk|i+M%3{uKwX&dV7Vy0;TTA>!EE>ul6vG&c!>;X zrU=#hPM|&kz?uKOMPHAVNj}Ziewn7sm6PQ|$Vl_k7=EwE6VL>K9t3HA0Z!k=zQUpp z_%BN%H{rt#)bpE{pGR36gD{igJ?NqwYBD@Hk!`Bq1swU&H z-4OI?R@4u4-^M`o`mXFROFA32h3`9?Es_Hd7L<56ZYzugxLfvp@Bs415j)Z*#aN8T zuTleh1M8f*>4W$fr;9r^w~9Ei-ibZk{3R^LB`|fBa)t9h$xS_gGAZnU9bZcthjwaR zHL*HEKR4ogwf)&Ii|G(DoD0hU&q#&jfB#?8k>>xJwq(qG4EdzKsidsF4E^I8$SG-&7HUoi*b7o6bEj5A&B;)Q{k%-_D zzHo)Y5YpWo2+moDBlW5iUE&%~fXSO%I7!*~?5r8|rIs;E1D$L&xNnO%jI4|n7z084 z3-hU&-@U)wEJ88il!404v1Oa~d&iJ$mCuFB@c!7@9}}l8ztQOUR;HOoHZcn_Z|{YZ zIIj_wo!UK*A^BCVhW?nwMZ^{>=5f?}T(=nZEY#MbeZ2Y#ST;XK;u1Lj-cDf1$+S5A zntjQ;3C+IUQkJgf&-m?UFK6Lr1UwGfsd2q^+l?mwKO>gPCred4Voh;Nx;rVF)%|@o`fJ1A3u(-~>kw}<#=+!E)T0{kzci}m2da9}u%b;$ z2(E?bQ>VbJ8%%@t?UeaP(-S^Rw->qN9JAF_(BuZ3=|)pnmY0Jy<0`r62Eb5lmZBCu zy6?0?bfZGs&6mq(2GJX+c_c@b`$t<(XT8n{MbZa?%|}+Q z5PPZ0#R?8B9~Vl5n^&VLk7LA*?fvGkVOi5#Xwr*vGcQ_=S*?%W$o>0%D?}fJuhhO8 zQ^>>K>3_?`5Rktr-&AU8tPz?-8ZbhqkZ$wdP0+mt_(b_QXP3Ql_quvbprq`JvRBmJ zlQ0jqiN=!3zCJSASg%MA2C`ULgVefe!+rGGm5)z4J)BkHb*vSEM^(AMn`geiShqo8 z;F`#l)9_m7#J%zSZ*C&xJOQ7A6mxzw${LJoYlU3SjJA@vtajOmyNc71z`;~rg$(S$ zn55*Sn^+ezeKf$f8x1IPhSh7-5aV!#ldXW27Ty%*8J?=9a#EfztPUu*Pi)X0Iuj** z!jHVGrdvWY$~qPuqJZo~by@8!%cHc<*w-NMvsHGXW9C2*{2tv!6;W;KEOX!pZz^v9 zq_5I+s4xw4)ZnoEwBg5B6PAxv4-u@Bu@1nhw?6(v)>jW@mj>Q|RLH=J9Jq`A48rU5 zk)xZpR;^omeoKg^d;2Z)8{W1!*E5`w3IRIO;VF2g`TU7&N#Y5URu{{7acO%SaYL3J zY;YrF^D4~C>L&TzN(S_{yR-9UZab@8W3aq|_WFBiRc`&2KH=cg`#8Cvu97)87NXf$UMyk>jyTL? ze~Y~KF(;k30_sSAMw~{Ut%Va?G1WvvQ*1$YWD#)MuZYDgA3F&ut>}Sd7v4}nVkDjG zfLYSrv?6uMp$}Cv=Q>9WupEU;>W$mo$WjR< zUp;CrZXP9BNm&N9gRi=gg6a(~Umc`AL^y zXc$wUeGGX%_I#`>r=26M!i^yfKj)t)Zx(g0rp|S8-)1(v_U&5!4Bau8tQS#Uxs*`a zggeg+aQLT7?a|>@r)g%x8YTiH?`C?;d1(ej7_kTNa3P2|*E6vUvBNuEqT@Lr-Vq$_ z;ZU}QnTUIhgNIeATTi8xuq%`x0$lj%w&N1~9aup^I){Gpzw*doq_ z2)lMDpn>H1>C;s@k$#9iI9aVIyV1meF^Hf&dnfP=6^jDxto0rRqJuK#*u8_Psu>Jpwj&eV*1u{!?(m)tz7<@fxC?mKMc7BMN+^Q zs%az@zveSe)J@#IJ9BLr&<_7@!P*klto9w+=!$4GHA*)*?~@t)nqo!eso>uCGf+de z09*6l6x}04nqr2k_`9P{YAnsCUdYqV-X!fE{anyK?PG6CebqToNclGkq>pl2bFEEJ zj(k+>mb{Le5$pb;hl8yu#^_y%b!ggiO4zjw1M5@Ur2!*<^(BAs&IdXF@C%_fICiE- zjcat`_m-ObD~rv$D<-vrnYRC}XJy&*j|L~f#O|NJ$d8X60R1bt zl=>3zkB~I_L7(3Kf5oJ09zy>lY>^56_p7lGP}cUr{CCOUbgKT|5-_m#I>NbOME5&2 zZKu(ke1xL*+s`Ek1SM`eNWfR_@W&&ogp|~}-UbSk$`Zr#D7o~%ZsovDS6mBel8$Xk zOQa`U!3JM9zZ4LV|U{KBmd!{%YQ3+d`X265i zD?<=c#(Mqdd(Qtl3jvd;l%cy_>?3&E?TYVmpKwyHI5rf=KyV1ge( zZ2rB6$M5V~8OI1IZ!MPyqyJ8p;i_xdxMLo)ZfY2{lVBUyz8qEpbAh>bVEG8VYj%>A z_?r*;Nc1UB4+cNtV8-s(Mpg^?a;!_p-~f*E2)Ib+$?S}C r`sS^G%uZ?j|I+-0kP#sHL&rNoPRGkN^(N>39$<9I^kVr1mplIjQRdm0 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/menu-root.png b/apps/pocket-remote/media/menu-root.png new file mode 100644 index 0000000000000000000000000000000000000000..68e0888b8a67ddaa7a68be74a6ffcd9de745e0c4 GIT binary patch literal 13300 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℘CrMSe!OV`pK_8saUG=u(77&vmIL{X|z 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/menu-trigger.png b/apps/pocket-remote/media/menu-trigger.png new file mode 100644 index 0000000000000000000000000000000000000000..9489e02ef4e300799fc5274c3f8c5698c11b5df2 GIT binary patch literal 12531 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/popup.png b/apps/pocket-remote/media/popup.png new file mode 100644 index 0000000000000000000000000000000000000000..a313f1faca082986877350417ffa76e9cf00fdd7 GIT binary patch literal 11710 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 UkMf8w0RA&MX=Yq>0u%Y)0F;bphX4Qo literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/stage.png b/apps/pocket-remote/media/stage.png new file mode 100644 index 0000000000000000000000000000000000000000..a1a6428db8245b1ddd9f74b11fa8c89e4ad3a37f GIT binary patch literal 10949 zcmeHtc{tSV+xInwnP?cTwk*+I85N~ajHO+LqOoQPB|F*oL3fHmx>5EbGK?)VM8l8> zcgSwWFhbU0RE*vGRo&0;d7tBWk9Yg$`Q!J;IL3Fb>pZXTd7bCyTpwQ5y}-{W$_D`8 z*S>gG9{?B=`e<%JKu>Hx76t%-d8B<->$)$DmD(4xr^l;)NyFAXpFhF=^A|VCxc5WH z-tYbJd~ZZ^?E7<>FD@qSm(@==)Fe%kPdIDZZS8k+q%mZgl z1WFi&8j=0@G(AO4I8@S=y~};SPh?kD*A#`p;jnL3IKIVs%=okxwh$+0&V~GFP(FDU z#Rd{oxGz9^_Q0dIsDulknJ_gxlC3!cB$EA_QrD&n`**mmy^yuHBwd^Ll{8oSa{t0u zKRI*u63` z_kgru-Y43|@TbF}Wn1bTp29wYI=F8}hs5Hr#@oIiW~+LC_nzH(KQtyox;9c!csj48 zWGyMWM|W{qu)r_$Gi=x*+-*_dd|ig6TH7QFm+x@v>y;IT+pu%ZM#Rh%x$2p7{#Gj; zkutHW?3WXF{`oTQh?se#y<8*pK=>XAH+WY+IuU!5H_7&=GXiIge0k#y;`E zkXLRu{@*)W%jNajf)CYeB;j5Wh5Z=3Bh8yVTX^Trg$Goj-Da;;<_^RLWtS* zGb$=*rbhL0=F+Iaif%oOd0}8tQaNCVamAl8!MA8*XL&bgHlR!V)be#B3^R0>jms!A z%Pf$-+_VCOm|@5yj^_A?#3kIY{)t%%dx=xfG5v7t*e+sTkHz?+C#H4b5MB?v;o;MK zq5IRU&w5jcH;U?$UNK!Yx3FR&b;YP)J&I1+sEG!P-RMI10JO$Xbc%1I&NMcCO`I~k z4TC68W1LHPE@k-Sa zr;MRKEg&ASH}65E*RA^xv?3vtg7EBx%0D!ZDBJzpF#2F&F-8foM7?paJb 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 MENU_DOT_EMOJI[p.item.icon]; + return ( + }> + + + ); +} + +function dotClass(tone: "ok" | "warn" | "danger"): string { + switch (tone) { + case "ok": + return "w-[10] h-[10] rounded-full bg-[#9ece6a]"; + case "warn": + return "w-[10] h-[10] rounded-full bg-[#e0af68]"; + default: + return "w-[10] h-[10] rounded-full bg-[#f7768e]"; + } +} + +function Row(p: { store: RemoteStore; item: MenuItem; i: number }) { + const r = sheetRowRect(p.i); + const hot = () => p.store.sheet()?.hot === p.i; + const checked = () => p.store.menuChecked().has(p.item.id); + const trailing = (): { glyph: string; tone: Tone } | null => { + if (checked()) return { glyph: GLYPH.check, tone: "accent" }; + if (p.item.kind === "menu") return { glyph: GLYPH.chevronRight, tone: "dim" }; + if (p.item.kind === "provider" || p.item.kind === "link") return { glyph: GLYPH.launch, tone: "dim" }; + return null; + }; + return ( + + + + + + + + {p.item.label} + + + + {(t) => ( + + t().glyph} tone={() => t().tone} size="base" /> + + )} + + + ); +} + +export function MenuSheet(p: { store: RemoteStore }) { + let veil: NodeMirror | null = null; + let card: NodeMirror | null = null; + let list: NodeMirror | null = null; + createEffect(() => { + const t = p.store.sheetT(); + if (veil) jump(veil, "opacity", t); + if (card) { + jump(card, "opacity", t); + jump(card, "scale", 0.94 + 0.06 * t); + } + }); + createEffect(() => { + if (!list) return; + const t = p.store.sheetListT(); + jump(list, "opacity", t); + jump(list, "translateX", Math.round((1 - t) * 20)); + jump(list, "translateY", -Math.round(p.store.sheetScroller.offset())); + }); + const sheet = () => p.store.sheet(); + const title = () => menuTitle(sheet()?.at ?? "root"); + const atRoot = () => (sheet()?.trail.length ?? 0) === 0; + const rows = () => p.store.sheetRows(); + return ( + <> + { + veil = node; + themed("surfaceVeil")(node); + }} + /> + { + card = node; + themed("surface")(node); + themed("borderMuted")(node); + }} + > + {/* header */} + + + (atRoot() ? GLYPH.menu : GLYPH.chevronLeft)} tone={() => (atRoot() ? "dim" : "fg")} size="xl" /> + + + + + {title()} + + + + + + + + {/* the list: a clip over a canvas the scroller moves */} + + { + list = node; + }} + > + {(item, i) => } + + + + nothing here on this machine + + + + + + + + ); +} + +export { SHEET_COL_W, SHEET_ROW_H }; + +/** The sheet owns every contact while it is up: rows answer taps, the list + * pans and flings, the header goes back or closes, outside closes. */ +export function sheetHandlers(store: RemoteStore): GestureHandlers { + type Down = { kind: "row"; i: number } | { kind: "back" } | { kind: "close" } | { kind: "list" } | { kind: "outside" } | { kind: "card" }; + let down: Down = { kind: "card" }; + let panning = false; + return { + onDown: (c) => { + panning = false; + if (within(c.x, c.y, SHEET_BACK)) { + down = { kind: "back" }; + store.pressDown("sheet:back"); + return; + } + if (within(c.x, c.y, SHEET_CLOSE)) { + down = { kind: "close" }; + store.pressDown("sheet:close"); + return; + } + if (within(c.x, c.y, SHEET_LIST)) { + const i = sheetRowAt(c.x, c.y, store.sheetRows().length, store.sheetScroller.offset()); + down = i === null ? { kind: "list" } : { kind: "row", i }; + store.sheetHover(i); + store.sheetScroller.stop(); + return; + } + if (!within(c.x, c.y, SHEET)) { + down = { kind: "outside" }; + store.closeSheet(); + return; + } + down = { kind: "card" }; + }, + onTap: () => { + const t = down; + store.pressRelease(); + store.sheetHover(null); + if (t.kind === "row") store.sheetTap(t.i); + else if (t.kind === "back") store.sheetBack(); + else if (t.kind === "close") store.closeSheet(); + }, + onPanStart: (c) => { + store.pressRelease(); + store.sheetHover(null); + if (down.kind === "row" || down.kind === "list") { + panning = true; + store.sheetScroller.beginDrag(); + store.sheetScroller.drag(-c.fdy); + } + }, + onPanMove: (c) => { + if (panning) store.sheetScroller.drag(-c.fdy); + }, + onUp: (c) => { + if (panning) store.sheetScroller.endDrag(-c.vy); + panning = false; + store.pressRelease(); + store.sheetHover(null); + }, + onCancel: () => { + if (panning) store.sheetScroller.endDrag(0); + panning = false; + store.pressRelease(); + store.sheetHover(null); + }, + }; +} diff --git a/apps/pocket-remote/menu-tree.ts b/apps/pocket-remote/menu-tree.ts new file mode 100644 index 000000000..08217e79d --- /dev/null +++ b/apps/pocket-remote/menu-tree.ts @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/menu-tree.ts — walking the baked menu (menu.ts) the way +// Omarchy's shell walks its own: children in source order, a submenu shown +// only while something under it is visible, a title that falls back to the +// label, "Go" at the root. The daemon's live conditions arrive as sets of +// ids (protocol HostMenu) and are applied here, so the table stays static. + +import { MENU, type MenuItem } from "./menu.ts"; + +export const MENU_ROOT = "root"; +/** What Omarchy titles its root menu. */ +export const MENU_ROOT_TITLE = "Go"; + +const BY_ID = new Map(); +const CHILDREN = new Map(); +for (const item of MENU) { + BY_ID.set(item.id, item); + const siblings = CHILDREN.get(item.parent); + if (siblings) siblings.push(item); + else CHILDREN.set(item.parent, [item]); +} + +export function menuItem(id: string): MenuItem | undefined { + return BY_ID.get(id); +} + +/** A row is visible unless its `when` failed; a submenu is visible only + * while one of its rows is (the shell's isVisible rule). */ +export function menuVisible(item: MenuItem, hidden: ReadonlySet, depth = 0): boolean { + if (hidden.has(item.id)) return false; + if (item.kind !== "menu" || depth > 8) return true; + const rows = CHILDREN.get(item.id) ?? []; + if (rows.length === 0) return true; + return rows.some((row) => menuVisible(row, hidden, depth + 1)); +} + +/** The rows of a submenu, in the shell's order, minus the hidden ones. */ +export function menuChildren(parent: string, hidden: ReadonlySet = new Set()): MenuItem[] { + return (CHILDREN.get(parent) ?? []).filter((item) => menuVisible(item, hidden)); +} + +export function menuTitle(id: string): string { + if (id === MENU_ROOT) return MENU_ROOT_TITLE; + const item = BY_ID.get(id); + return item ? item.title || item.label : id; +} + +/** The parent to go back to from a submenu. */ +export function menuParent(id: string): string { + return BY_ID.get(id)?.parent ?? MENU_ROOT; +} + +/** The four coloured-dot emoji Omarchy uses for its update channels; the + * remote draws these as themed dots rather than baking emoji. */ +export const MENU_DOT_EMOJI: Readonly> = { + "🟢": "ok", + "🟡": "warn", + "🟠": "warn", + "🔴": "danger", +}; diff --git a/apps/pocket-remote/menu.ts b/apps/pocket-remote/menu.ts new file mode 100644 index 000000000..a4924ccd5 --- /dev/null +++ b/apps/pocket-remote/menu.ts @@ -0,0 +1,354 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/menu.ts — GENERATED by `bun tools/pocket-remote.ts menu` +// from Omarchy 4.0.1-1's omarchy-menu.jsonc (sha256 42eafef634bb). Do not edit; +// regenerate against the machine after an Omarchy update. +// +// The device's copy of Omarchy's menu tree: every row's id, parent, kind, +// icon, label and title, in the shell's own order. Icons are the Nerd Font +// glyphs the file spells (written literally so the build's codepoint scan +// bakes them); rows whose icon lives in Omarchy's private logo font carry a +// Material stand-in. `when` and `checked` mark rows the daemon evaluates +// live — it sends the hidden and the checked ids, the table stays static. + +export type MenuKind = "action" | "menu" | "link" | "provider"; + +export interface MenuItem { + id: string; + /** "root" for a top-level row. */ + parent: string; + kind: MenuKind; + icon: string; + label: string; + /** Header when the submenu is open; defaults to label. */ + title?: string; + /** Visibility depends on a condition the daemon reports. */ + when?: true; + /** A tick depends on a condition the daemon reports. */ + checked?: true; +} + +export const MENU_OMARCHY_VERSION = "4.0.1-1"; +export const MENU_SOURCE_DIGEST = "42eafef634bb"; + +export const MENU: readonly MenuItem[] = [ + { id: "apps", parent: "root", kind: "provider", icon: "󰀻", label: "Apps" }, + { id: "learn", parent: "root", kind: "menu", icon: "󰧑", label: "Learn" }, + { id: "trigger", parent: "root", kind: "menu", icon: "󱓞", label: "Trigger" }, + { id: "style", parent: "root", kind: "menu", icon: "", label: "Style" }, + { id: "setup", parent: "root", kind: "menu", icon: "", label: "Setup" }, + { id: "install", parent: "root", kind: "menu", icon: "󰉉", label: "Install" }, + { id: "remove", parent: "root", kind: "menu", icon: "󰭌", label: "Remove" }, + { id: "update", parent: "root", kind: "menu", icon: "", label: "Update" }, + { id: "about", parent: "root", kind: "action", icon: "", label: "About" }, + { id: "system", parent: "root", kind: "menu", icon: "", label: "System" }, + { id: "system.screensaver", parent: "system", kind: "action", icon: "󱄄", label: "Screensaver" }, + { id: "system.lock", parent: "system", kind: "action", icon: "", label: "Lock" }, + { id: "system.suspend", parent: "system", kind: "action", icon: "󰒲", label: "Suspend", when: true }, + { id: "system.hibernate", parent: "system", kind: "action", icon: "󰤁", label: "Hibernate", when: true }, + { id: "system.logout", parent: "system", kind: "action", icon: "󰍃", label: "Logout" }, + { id: "system.reboot", parent: "system", kind: "action", icon: "󰜉", label: "Reboot" }, + { id: "system.shutdown", parent: "system", kind: "action", icon: "󰐥", label: "Shutdown" }, + { id: "learn.keybindings", parent: "learn", kind: "action", icon: "", label: "Keybindings" }, + { id: "learn.omarchy", parent: "learn", kind: "action", icon: "", label: "Omarchy" }, + { id: "learn.hyprland", parent: "learn", kind: "action", icon: "", label: "Hyprland" }, + { id: "learn.arch", parent: "learn", kind: "action", icon: "󰣇", label: "Arch" }, + { id: "learn.neovim", parent: "learn", kind: "action", icon: "", label: "Neovim" }, + { id: "learn.bash", parent: "learn", kind: "action", icon: "󱆃", label: "Bash" }, + { id: "learn.tmux-keybindings", parent: "learn", kind: "action", icon: "", label: "Tmux" }, + { id: "learn.herdr-keybindings", parent: "learn", kind: "action", icon: "", label: "Herdr" }, + { id: "learn.community", parent: "learn", kind: "action", icon: "󰙯", label: "Community" }, + { id: "trigger.emoji", parent: "trigger", kind: "action", icon: "", label: "Emoji" }, + { id: "trigger.reminder", parent: "trigger", kind: "menu", icon: "󰢌", label: "Reminder" }, + { id: "trigger.capture", parent: "trigger", kind: "menu", icon: "", label: "Capture" }, + { id: "trigger.capture.screenshot", parent: "trigger.capture", kind: "action", icon: "", label: "Screenshot" }, + { id: "trigger.capture.screenrecord.stop", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "Stop Screenrecording", when: true }, + { id: "trigger.capture.screenrecord", parent: "trigger.capture", kind: "menu", icon: "", label: "Screenrecord" }, + { id: "trigger.capture.text", parent: "trigger.capture", kind: "action", icon: "󰴑", label: "Text" }, + { id: "trigger.capture.qr", parent: "trigger.capture", kind: "action", icon: "󰐲", label: "QR Code" }, + { id: "trigger.capture.color", parent: "trigger.capture", kind: "action", icon: "󰃉", label: "Color" }, + { id: "trigger.capture.screenrecord.no-audio", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With no audio" }, + { id: "trigger.capture.screenrecord.desktop-audio", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop audio" }, + { id: "trigger.capture.screenrecord.microphone", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop + microphone audio" }, + { id: "trigger.capture.screenrecord.webcam", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop + microphone audio + webcam", when: true }, + { id: "trigger.transcode", parent: "trigger", kind: "action", icon: "󰧸", label: "Transcode" }, + { id: "trigger.share", parent: "trigger", kind: "menu", icon: "", label: "Share" }, + { id: "trigger.toggle", parent: "trigger", kind: "menu", icon: "󰔎", label: "Toggle" }, + { id: "trigger.hardware", parent: "trigger", kind: "menu", icon: "", label: "Hardware" }, + { id: "trigger.tests", parent: "trigger", kind: "menu", icon: "󰓅", label: "Speed Test" }, + { id: "trigger.hardware.laptop-display", parent: "trigger.hardware", kind: "action", icon: "󰛧", label: "Laptop Display", when: true }, + { id: "trigger.hardware.mirror-display", parent: "trigger.hardware", kind: "action", icon: "󰍹", label: "Mirror Display", when: true }, + { id: "trigger.hardware.hybrid-gpu", parent: "trigger.hardware", kind: "action", icon: "", label: "Hybrid GPU", when: true }, + { id: "trigger.hardware.touchpad", parent: "trigger.hardware", kind: "action", icon: "󰟸", label: "Touchpad", when: true }, + { id: "trigger.hardware.touchpad-haptics", parent: "trigger.hardware", kind: "menu", icon: "󰌌", label: "Touchpad Haptics" }, + { id: "trigger.hardware.touchpad-haptics.low", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "low", when: true, checked: true }, + { id: "trigger.hardware.touchpad-haptics.mid", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "mid", when: true, checked: true }, + { id: "trigger.hardware.touchpad-haptics.high", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "high", when: true, checked: true }, + { id: "trigger.hardware.touchscreen", parent: "trigger.hardware", kind: "action", icon: "󰆽", label: "Touchscreen", when: true }, + { id: "trigger.reminder.set", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Set one" }, + { id: "trigger.reminder.show", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Show all" }, + { id: "trigger.reminder.clear", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Clear all" }, + { id: "trigger.share.clipboard", parent: "trigger.share", kind: "action", icon: "", label: "Clipboard" }, + { id: "trigger.share.file", parent: "trigger.share", kind: "action", icon: "", label: "File" }, + { id: "trigger.share.folder", parent: "trigger.share", kind: "action", icon: "", label: "Folder" }, + { id: "trigger.share.receive", parent: "trigger.share", kind: "action", icon: "󰥦", label: "Receive" }, + { id: "trigger.toggle.idle-lock", parent: "trigger.toggle", kind: "action", icon: "󰅶", label: "Stay Awake" }, + { id: "trigger.toggle.notifications", parent: "trigger.toggle", kind: "action", icon: "󰂛", label: "Notifications" }, + { id: "trigger.toggle.crash-capture", parent: "trigger.toggle", kind: "action", icon: "󱚡", label: "Crash Capture" }, + { id: "trigger.toggle.screensaver", parent: "trigger.toggle", kind: "action", icon: "󱄄", label: "Screensaver" }, + { id: "trigger.toggle.nightlight", parent: "trigger.toggle", kind: "action", icon: "󰔎", label: "Nightlight" }, + { id: "trigger.toggle.top-bar", parent: "trigger.toggle", kind: "action", icon: "󰍜", label: "Menu Bar" }, + { id: "trigger.toggle.battery-percentage", parent: "trigger.toggle", kind: "action", icon: "󰁹", label: "Battery Percentage", when: true }, + { id: "trigger.toggle.workspace-layout", parent: "trigger.toggle", kind: "action", icon: "󱂬", label: "Workspace Layout" }, + { id: "trigger.toggle.window-gaps", parent: "trigger.toggle", kind: "action", icon: "", label: "Window Gaps" }, + { id: "trigger.toggle.one-window-ratio", parent: "trigger.toggle", kind: "action", icon: "", label: "1-Window Ratio" }, + { id: "trigger.tests.network-speedtest", parent: "trigger.tests", kind: "action", icon: "󰓅", label: "Network Speed Test" }, + { id: "trigger.tests.disk-speedtest", parent: "trigger.tests", kind: "action", icon: "󰋊", label: "Disk Speed Test" }, + { id: "style.theme", parent: "style", kind: "action", icon: "󰸌", label: "Theme" }, + { id: "style.background", parent: "style", kind: "action", icon: "", label: "Background" }, + { id: "style.unlock", parent: "style", kind: "action", icon: "󰟵", label: "Unlock" }, + { id: "style.font", parent: "style", kind: "provider", icon: "", label: "Font" }, + { id: "style.bar", parent: "style", kind: "menu", icon: "󰍜", label: "Menu Bar" }, + { id: "style.bar.position", parent: "style.bar", kind: "menu", icon: "", label: "Position" }, + { id: "style.bar.transparency", parent: "style.bar", kind: "action", icon: "󰂵", label: "Transparency" }, + { id: "style.hyprland", parent: "style", kind: "action", icon: "", label: "Hyprland" }, + { id: "style.screensaver", parent: "style", kind: "menu", icon: "󱄄", label: "Screensaver" }, + { id: "style.about", parent: "style", kind: "menu", icon: "", label: "About" }, + { id: "style.bar.position.top", parent: "style.bar.position", kind: "action", icon: "󰁝", label: "Top" }, + { id: "style.bar.position.bottom", parent: "style.bar.position", kind: "action", icon: "󰁅", label: "Bottom" }, + { id: "style.bar.position.left", parent: "style.bar.position", kind: "action", icon: "󰁍", label: "Left" }, + { id: "style.bar.position.right", parent: "style.bar.position", kind: "action", icon: "󰁔", label: "Right" }, + { id: "style.about.text", parent: "style.about", kind: "action", icon: "", label: "Edit Text" }, + { id: "style.about.image", parent: "style.about", kind: "action", icon: "", label: "Set From Image" }, + { id: "style.about.default", parent: "style.about", kind: "action", icon: "", label: "Restore Default" }, + { id: "style.screensaver.text", parent: "style.screensaver", kind: "action", icon: "", label: "Edit Text" }, + { id: "style.screensaver.image", parent: "style.screensaver", kind: "action", icon: "", label: "Set From Image" }, + { id: "style.screensaver.default", parent: "style.screensaver", kind: "action", icon: "", label: "Restore Default" }, + { id: "setup.monitors", parent: "setup", kind: "action", icon: "󰍹", label: "Monitors" }, + { id: "setup.keybindings", parent: "setup", kind: "action", icon: "", label: "Keybindings", when: true }, + { id: "setup.input", parent: "setup", kind: "action", icon: "", label: "Input", when: true }, + { id: "setup.network", parent: "setup", kind: "menu", icon: "󰛳", label: "Network" }, + { id: "setup.network.dns", parent: "setup.network", kind: "menu", icon: "󰇖", label: "DNS" }, + { id: "setup.network.dns.dhcp", parent: "setup.network.dns", kind: "action", icon: "󰩟", label: "DHCP", checked: true }, + { id: "setup.network.dns.cloudflare", parent: "setup.network.dns", kind: "action", icon: "󰅟", label: "Cloudflare", checked: true }, + { id: "setup.network.dns.google", parent: "setup.network.dns", kind: "action", icon: "󰊭", label: "Google", checked: true }, + { id: "setup.network.dns.custom", parent: "setup.network.dns", kind: "action", icon: "", label: "Custom", checked: true }, + { id: "setup.network.qr", parent: "setup.network", kind: "action", icon: "󰐲", label: "QR Code", when: true }, + { id: "setup.default", parent: "setup", kind: "menu", icon: "", label: "Defaults" }, + { id: "setup.default.agent", parent: "setup.default", kind: "menu", icon: "󰚩", label: "Agent", title: "Default Agent" }, + { id: "setup.default.agent.claude", parent: "setup.default.agent", kind: "action", icon: "󰛄", label: "Claude", checked: true }, + { id: "setup.default.agent.codex", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Codex", checked: true }, + { id: "setup.default.agent.copilot", parent: "setup.default.agent", kind: "action", icon: "", label: "Copilot", checked: true }, + { id: "setup.default.agent.crush", parent: "setup.default.agent", kind: "action", icon: "󰋑", label: "Crush", checked: true }, + { id: "setup.default.agent.gemini", parent: "setup.default.agent", kind: "action", icon: "󰫢", label: "Gemini", checked: true }, + { id: "setup.default.agent.grok", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Grok", checked: true }, + { id: "setup.default.agent.omp", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "omp", checked: true }, + { id: "setup.default.agent.opencode", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "OpenCode", checked: true }, + { id: "setup.default.agent.pi", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Pi", checked: true }, + { id: "setup.default.browser", parent: "setup.default", kind: "menu", icon: "", label: "Browser", title: "Default Browser" }, + { id: "setup.default.browser.chromium", parent: "setup.default.browser", kind: "action", icon: "", label: "Chromium", when: true, checked: true }, + { id: "setup.default.browser.chrome", parent: "setup.default.browser", kind: "action", icon: "󰊯", label: "Chrome", when: true, checked: true }, + { id: "setup.default.browser.brave", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Brave", when: true, checked: true }, + { id: "setup.default.browser.brave-origin", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Brave Origin", when: true, checked: true }, + { id: "setup.default.browser.edge", parent: "setup.default.browser", kind: "action", icon: "󰇩", label: "Edge", when: true, checked: true }, + { id: "setup.default.browser.firefox", parent: "setup.default.browser", kind: "action", icon: "", label: "Firefox", when: true, checked: true }, + { id: "setup.default.browser.zen", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Zen", when: true, checked: true }, + { id: "setup.default.terminal", parent: "setup.default", kind: "menu", icon: "", label: "Terminal", title: "Default Terminal" }, + { id: "setup.default.terminal.alacritty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Alacritty", when: true, checked: true }, + { id: "setup.default.terminal.foot", parent: "setup.default.terminal", kind: "action", icon: "", label: "Foot", when: true, checked: true }, + { id: "setup.default.terminal.ghostty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Ghostty", when: true, checked: true }, + { id: "setup.default.terminal.kitty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Kitty", when: true, checked: true }, + { id: "setup.default.editor", parent: "setup.default", kind: "menu", icon: "", label: "Editor", title: "Default Editor" }, + { id: "setup.default.editor.neovim", parent: "setup.default.editor", kind: "action", icon: "", label: "Neovim", when: true, checked: true }, + { id: "setup.default.editor.vscode", parent: "setup.default.editor", kind: "action", icon: "", label: "VSCode", when: true, checked: true }, + { id: "setup.default.editor.cursor", parent: "setup.default.editor", kind: "action", icon: "", label: "Cursor", when: true, checked: true }, + { id: "setup.default.editor.zed", parent: "setup.default.editor", kind: "action", icon: "", label: "Zed", when: true, checked: true }, + { id: "setup.default.editor.sublime", parent: "setup.default.editor", kind: "action", icon: "", label: "Sublime Text", when: true, checked: true }, + { id: "setup.default.editor.helix", parent: "setup.default.editor", kind: "action", icon: "", label: "Helix", when: true, checked: true }, + { id: "setup.default.editor.vim", parent: "setup.default.editor", kind: "action", icon: "", label: "Vim", when: true, checked: true }, + { id: "setup.default.editor.emacs", parent: "setup.default.editor", kind: "action", icon: "", label: "Emacs", when: true, checked: true }, + { id: "setup.plugin", parent: "setup", kind: "menu", icon: "󰐱", label: "Plugins" }, + { id: "setup.plugin.enable", parent: "setup.plugin", kind: "action", icon: "󰄬", label: "Enable Plugin" }, + { id: "setup.plugin.disable", parent: "setup.plugin", kind: "action", icon: "󰅖", label: "Disable Plugin" }, + { id: "setup.plugin.add", parent: "setup.plugin", kind: "action", icon: "󰖟", label: "Add Plugin" }, + { id: "setup.plugin.clone", parent: "setup.plugin", kind: "action", icon: "󰆏", label: "Clone Plugin" }, + { id: "setup.plugin.remove", parent: "setup.plugin", kind: "action", icon: "󰭌", label: "Remove Plugin", when: true }, + { id: "setup.security", parent: "setup", kind: "menu", icon: "", label: "Security" }, + { id: "setup.config", parent: "setup", kind: "menu", icon: "", label: "Config" }, + { id: "setup.security.fingerprint", parent: "setup.security", kind: "action", icon: "󰈷", label: "Fingerprint", when: true }, + { id: "setup.security.fido2", parent: "setup.security", kind: "action", icon: "", label: "Fido2" }, + { id: "setup.security.sshd", parent: "setup.security", kind: "action", icon: "󰣀", label: "SSHD" }, + { id: "setup.security.passwordless-sudo", parent: "setup.security", kind: "action", icon: "󰟵", label: "Passwordless Sudo" }, + { id: "setup.security.sudoless-docker", parent: "setup.security", kind: "action", icon: "󰡨", label: "Sudoless Docker", when: true }, + { id: "setup.config.hyprland", parent: "setup.config", kind: "action", icon: "", label: "Hyprland" }, + { id: "setup.config.hyprsunset", parent: "setup.config", kind: "action", icon: "", label: "Hyprsunset" }, + { id: "setup.config.xcompose", parent: "setup.config", kind: "action", icon: "󰞅", label: "XCompose" }, + { id: "setup.direct-boot", parent: "setup", kind: "action", icon: "", label: "Direct Boot" }, + { id: "setup.reset", parent: "setup", kind: "action", icon: "󰑓", label: "Reset Computer", when: true }, + { id: "install.package", parent: "install", kind: "action", icon: "󰣇", label: "Package" }, + { id: "install.aur", parent: "install", kind: "action", icon: "󰣇", label: "AUR" }, + { id: "install.webapp", parent: "install", kind: "action", icon: "", label: "Web App" }, + { id: "install.tui", parent: "install", kind: "action", icon: "", label: "TUI" }, + { id: "install.style", parent: "install", kind: "menu", icon: "", label: "Style" }, + { id: "install.style.theme", parent: "install.style", kind: "action", icon: "󰸌", label: "Theme" }, + { id: "install.style.background", parent: "install.style", kind: "action", icon: "", label: "Background" }, + { id: "install.style.font", parent: "install.style", kind: "menu", icon: "", label: "Font" }, + { id: "install.style.font.cascadia", parent: "install.style.font", kind: "action", icon: "", label: "Cascadia Mono" }, + { id: "install.style.font.meslo", parent: "install.style.font", kind: "action", icon: "", label: "Meslo LG Mono" }, + { id: "install.style.font.fira", parent: "install.style.font", kind: "action", icon: "", label: "Fira Code" }, + { id: "install.style.font.victor", parent: "install.style.font", kind: "action", icon: "", label: "Victor Code" }, + { id: "install.style.font.bitstream", parent: "install.style.font", kind: "action", icon: "", label: "Bitstream Vera Mono" }, + { id: "install.style.font.iosevka", parent: "install.style.font", kind: "action", icon: "", label: "Iosevka" }, + { id: "install.service", parent: "install", kind: "menu", icon: "", label: "Service" }, + { id: "install.development", parent: "install", kind: "menu", icon: "󰵮", label: "Development" }, + { id: "install.editor", parent: "install", kind: "menu", icon: "", label: "Editor" }, + { id: "install.terminal", parent: "install", kind: "menu", icon: "", label: "Terminal" }, + { id: "install.browser", parent: "install", kind: "menu", icon: "", label: "Browser" }, + { id: "install.ai", parent: "install", kind: "menu", icon: "󱚤", label: "AI" }, + { id: "install.gaming", parent: "install", kind: "menu", icon: "", label: "Gaming" }, + { id: "install.windows", parent: "install", kind: "action", icon: "󰍲", label: "Windows", when: true }, + { id: "install.preinstalls", parent: "install", kind: "action", icon: "󰏓", label: "Preinstalls", when: true }, + { id: "install.browser.chrome", parent: "install.browser", kind: "action", icon: "", label: "Chrome", when: true }, + { id: "install.browser.edge", parent: "install.browser", kind: "action", icon: "󰇩", label: "Edge", when: true }, + { id: "install.browser.brave", parent: "install.browser", kind: "action", icon: "", label: "Brave", when: true }, + { id: "install.browser.brave-origin", parent: "install.browser", kind: "action", icon: "", label: "Brave Origin", when: true }, + { id: "install.browser.firefox", parent: "install.browser", kind: "action", icon: "", label: "Firefox", when: true }, + { id: "install.browser.zen", parent: "install.browser", kind: "action", icon: "󰖟", label: "Zen", when: true }, + { id: "install.service.1password", parent: "install.service", kind: "action", icon: "󰢁", label: "1Password", when: true }, + { id: "install.service.dropbox", parent: "install.service", kind: "action", icon: "", label: "Dropbox", when: true }, + { id: "install.service.spotify", parent: "install.service", kind: "action", icon: "󰓇", label: "Spotify", when: true }, + { id: "install.service.signal", parent: "install.service", kind: "action", icon: "󰭹", label: "Signal", when: true }, + { id: "install.service.tailscale", parent: "install.service", kind: "action", icon: "", label: "Tailscale", when: true }, + { id: "install.service.nordvpn", parent: "install.service", kind: "action", icon: "󱇱", label: "NordVPN", when: true }, + { id: "install.service.once", parent: "install.service", kind: "action", icon: "󰏖", label: "ONCE", when: true }, + { id: "install.service.bitwarden", parent: "install.service", kind: "action", icon: "󰟵", label: "Bitwarden", when: true }, + { id: "install.service.chromium-account", parent: "install.service", kind: "action", icon: "", label: "Chromium Account", when: true }, + { id: "install.editor.vscode", parent: "install.editor", kind: "action", icon: "", label: "VSCode", when: true }, + { id: "install.editor.cursor", parent: "install.editor", kind: "action", icon: "", label: "Cursor", when: true }, + { id: "install.editor.zed", parent: "install.editor", kind: "action", icon: "", label: "Zed", when: true }, + { id: "install.editor.sublime", parent: "install.editor", kind: "action", icon: "", label: "Sublime Text", when: true }, + { id: "install.editor.helix", parent: "install.editor", kind: "action", icon: "", label: "Helix", when: true }, + { id: "install.editor.vim", parent: "install.editor", kind: "action", icon: "", label: "Vim", when: true }, + { id: "install.editor.emacs", parent: "install.editor", kind: "action", icon: "", label: "Emacs", when: true }, + { id: "install.terminal.alacritty", parent: "install.terminal", kind: "action", icon: "", label: "Alacritty", when: true }, + { id: "install.terminal.foot", parent: "install.terminal", kind: "action", icon: "", label: "Foot", when: true }, + { id: "install.terminal.ghostty", parent: "install.terminal", kind: "action", icon: "", label: "Ghostty", when: true }, + { id: "install.terminal.kitty", parent: "install.terminal", kind: "action", icon: "", label: "Kitty", when: true }, + { id: "install.ai.chatgpt", parent: "install.ai", kind: "action", icon: "󰚩", label: "ChatGPT Desktop", when: true }, + { id: "install.ai.dictation", parent: "install.ai", kind: "action", icon: "", label: "Dictation", when: true }, + { id: "install.ai.grok-bot", parent: "install.ai", kind: "action", icon: "󰚩", label: "Grok Bot", when: true }, + { id: "install.ai.lm-studio", parent: "install.ai", kind: "action", icon: "󰚩", label: "LM Studio", when: true }, + { id: "install.ai.ollama", parent: "install.ai", kind: "action", icon: "󰚩", label: "Ollama", when: true }, + { id: "install.gaming.steam", parent: "install.gaming", kind: "action", icon: "", label: "Steam", when: true }, + { id: "install.gaming.retroarch", parent: "install.gaming", kind: "action", icon: "󰯉", label: "RetroArch", when: true }, + { id: "install.gaming.minecraft", parent: "install.gaming", kind: "action", icon: "󰍳", label: "Minecraft", when: true }, + { id: "install.gaming.geforce-now", parent: "install.gaming", kind: "action", icon: "󰢹", label: "NVIDIA GeForce NOW", when: true }, + { id: "install.gaming.xbox-cloud", parent: "install.gaming", kind: "action", icon: "", label: "Xbox Cloud Gaming", when: true }, + { id: "install.gaming.xbox-controllers", parent: "install.gaming", kind: "action", icon: "󰂯", label: "Xbox Controllers", when: true }, + { id: "install.gaming.battlenet", parent: "install.gaming", kind: "action", icon: "", label: "Battle.net", when: true }, + { id: "install.gaming.lutris", parent: "install.gaming", kind: "action", icon: "", label: "Lutris", when: true }, + { id: "install.gaming.heroic", parent: "install.gaming", kind: "action", icon: "󱓟", label: "Heroic (Epic Games)", when: true }, + { id: "install.gaming.retro-launcher", parent: "install.gaming", kind: "action", icon: "󰯉", label: "RetroArch Game Launcher" }, + { id: "install.development.rails", parent: "install.development", kind: "action", icon: "󰫏", label: "Ruby on Rails", when: true }, + { id: "install.development.docker-dbs", parent: "install.development", kind: "action", icon: "", label: "Docker DB" }, + { id: "install.development.javascript", parent: "install.development", kind: "menu", icon: "", label: "JavaScript" }, + { id: "install.development.go", parent: "install.development", kind: "action", icon: "", label: "Go", when: true }, + { id: "install.development.php", parent: "install.development", kind: "menu", icon: "", label: "PHP" }, + { id: "install.development.python", parent: "install.development", kind: "action", icon: "", label: "Python", when: true }, + { id: "install.development.elixir", parent: "install.development", kind: "menu", icon: "", label: "Elixir" }, + { id: "install.development.zig", parent: "install.development", kind: "action", icon: "", label: "Zig", when: true }, + { id: "install.development.rust", parent: "install.development", kind: "action", icon: "", label: "Rust", when: true }, + { id: "install.development.java", parent: "install.development", kind: "action", icon: "", label: "Java", when: true }, + { id: "install.development.dotnet", parent: "install.development", kind: "action", icon: "", label: ".NET", when: true }, + { id: "install.development.ocaml", parent: "install.development", kind: "action", icon: "", label: "OCaml", when: true }, + { id: "install.development.clojure", parent: "install.development", kind: "action", icon: "", label: "Clojure", when: true }, + { id: "install.development.scala", parent: "install.development", kind: "action", icon: "", label: "Scala", when: true }, + { id: "install.development.javascript.node", parent: "install.development.javascript", kind: "action", icon: "", label: "Node.js", when: true }, + { id: "install.development.javascript.bun", parent: "install.development.javascript", kind: "action", icon: "", label: "Bun", when: true }, + { id: "install.development.javascript.deno", parent: "install.development.javascript", kind: "action", icon: "", label: "Deno", when: true }, + { id: "install.development.php.php", parent: "install.development.php", kind: "action", icon: "", label: "PHP", when: true }, + { id: "install.development.php.laravel", parent: "install.development.php", kind: "action", icon: "", label: "Laravel", when: true }, + { id: "install.development.php.symfony", parent: "install.development.php", kind: "action", icon: "", label: "Symfony", when: true }, + { id: "install.development.elixir.elixir", parent: "install.development.elixir", kind: "action", icon: "", label: "Elixir", when: true }, + { id: "install.development.elixir.phoenix", parent: "install.development.elixir", kind: "action", icon: "", label: "Phoenix", when: true }, + { id: "remove.package", parent: "remove", kind: "action", icon: "󰣇", label: "Package" }, + { id: "remove.webapp", parent: "remove", kind: "action", icon: "", label: "Web App", when: true }, + { id: "remove.tui", parent: "remove", kind: "action", icon: "", label: "TUI", when: true }, + { id: "remove.development", parent: "remove", kind: "menu", icon: "󰵮", label: "Development", title: "Remove" }, + { id: "remove.theme", parent: "remove", kind: "action", icon: "󰸌", label: "Theme" }, + { id: "remove.browser", parent: "remove", kind: "menu", icon: "", label: "Browser", title: "Remove" }, + { id: "remove.dictation", parent: "remove", kind: "action", icon: "", label: "Dictation", when: true }, + { id: "remove.gaming", parent: "remove", kind: "menu", icon: "", label: "Gaming", title: "Remove" }, + { id: "remove.service", parent: "remove", kind: "menu", icon: "", label: "Services", title: "Remove" }, + { id: "remove.windows", parent: "remove", kind: "action", icon: "󰍲", label: "Windows", when: true }, + { id: "remove.preinstalls", parent: "remove", kind: "action", icon: "󰏓", label: "Preinstalls", when: true }, + { id: "remove.security", parent: "remove", kind: "menu", icon: "", label: "Security", title: "Remove" }, + { id: "remove.security.fingerprint", parent: "remove.security", kind: "action", icon: "󰈷", label: "Fingerprint", when: true }, + { id: "remove.security.fido2", parent: "remove.security", kind: "action", icon: "", label: "Fido2", when: true }, + { id: "remove.security.sshd", parent: "remove.security", kind: "action", icon: "󰣀", label: "SSHD", when: true }, + { id: "remove.security.sudoless-docker", parent: "remove.security", kind: "action", icon: "󰡨", label: "Sudoless Docker", when: true }, + { id: "remove.browser.chrome", parent: "remove.browser", kind: "action", icon: "", label: "Chrome", when: true }, + { id: "remove.browser.edge", parent: "remove.browser", kind: "action", icon: "󰇩", label: "Edge", when: true }, + { id: "remove.browser.brave", parent: "remove.browser", kind: "action", icon: "", label: "Brave", when: true }, + { id: "remove.browser.brave-origin", parent: "remove.browser", kind: "action", icon: "", label: "Brave Origin", when: true }, + { id: "remove.browser.firefox", parent: "remove.browser", kind: "action", icon: "", label: "Firefox", when: true }, + { id: "remove.browser.zen", parent: "remove.browser", kind: "action", icon: "", label: "Zen", when: true }, + { id: "remove.service.dropbox", parent: "remove.service", kind: "action", icon: "", label: "Dropbox", when: true }, + { id: "remove.service.tailscale", parent: "remove.service", kind: "action", icon: "", label: "Tailscale", when: true }, + { id: "remove.gaming.steam", parent: "remove.gaming", kind: "action", icon: "", label: "Steam", when: true }, + { id: "remove.gaming.retroarch", parent: "remove.gaming", kind: "action", icon: "", label: "RetroArch", when: true }, + { id: "remove.gaming.minecraft", parent: "remove.gaming", kind: "action", icon: "󰍳", label: "Minecraft", when: true }, + { id: "remove.gaming.geforce-now", parent: "remove.gaming", kind: "action", icon: "󰢹", label: "NVIDIA GeForce NOW", when: true }, + { id: "remove.gaming.xbox-cloud", parent: "remove.gaming", kind: "action", icon: "", label: "Xbox Cloud Gaming", when: true }, + { id: "remove.gaming.xbox-controllers", parent: "remove.gaming", kind: "action", icon: "󰖺", label: "Xbox Controllers (󰂯)", when: true }, + { id: "remove.gaming.battlenet", parent: "remove.gaming", kind: "action", icon: "", label: "Battle.net", when: true }, + { id: "remove.gaming.lutris", parent: "remove.gaming", kind: "action", icon: "", label: "Lutris", when: true }, + { id: "remove.gaming.heroic", parent: "remove.gaming", kind: "action", icon: "󱓟", label: "Heroic (Epic Games)", when: true }, + { id: "remove.development.rails", parent: "remove.development", kind: "action", icon: "󰫏", label: "Ruby on Rails", when: true }, + { id: "remove.development.javascript", parent: "remove.development", kind: "menu", icon: "", label: "JavaScript", title: "Remove" }, + { id: "remove.development.go", parent: "remove.development", kind: "action", icon: "", label: "Go", when: true }, + { id: "remove.development.php", parent: "remove.development", kind: "menu", icon: "", label: "PHP", title: "Remove" }, + { id: "remove.development.python", parent: "remove.development", kind: "action", icon: "", label: "Python", when: true }, + { id: "remove.development.elixir", parent: "remove.development", kind: "menu", icon: "", label: "Elixir", title: "Remove" }, + { id: "remove.development.zig", parent: "remove.development", kind: "action", icon: "", label: "Zig", when: true }, + { id: "remove.development.rust", parent: "remove.development", kind: "action", icon: "", label: "Rust", when: true }, + { id: "remove.development.java", parent: "remove.development", kind: "action", icon: "", label: "Java", when: true }, + { id: "remove.development.dotnet", parent: "remove.development", kind: "action", icon: "", label: ".NET", when: true }, + { id: "remove.development.ocaml", parent: "remove.development", kind: "action", icon: "", label: "OCaml", when: true }, + { id: "remove.development.clojure", parent: "remove.development", kind: "action", icon: "", label: "Clojure", when: true }, + { id: "remove.development.scala", parent: "remove.development", kind: "action", icon: "", label: "Scala", when: true }, + { id: "remove.development.javascript.node", parent: "remove.development.javascript", kind: "action", icon: "", label: "Node.js", when: true }, + { id: "remove.development.javascript.bun", parent: "remove.development.javascript", kind: "action", icon: "", label: "Bun", when: true }, + { id: "remove.development.javascript.deno", parent: "remove.development.javascript", kind: "action", icon: "", label: "Deno", when: true }, + { id: "remove.development.php.php", parent: "remove.development.php", kind: "action", icon: "", label: "PHP", when: true }, + { id: "remove.development.php.laravel", parent: "remove.development.php", kind: "action", icon: "", label: "Laravel", when: true }, + { id: "remove.development.php.symfony", parent: "remove.development.php", kind: "action", icon: "", label: "Symfony", when: true }, + { id: "remove.development.elixir.elixir", parent: "remove.development.elixir", kind: "action", icon: "", label: "Elixir", when: true }, + { id: "remove.development.elixir.phoenix", parent: "remove.development.elixir", kind: "action", icon: "", label: "Phoenix", when: true }, + { id: "update.omarchy", parent: "update", kind: "action", icon: "󰚰", label: "Omarchy" }, + { id: "update.channel", parent: "update", kind: "menu", icon: "󰔫", label: "Channel" }, + { id: "update.config", parent: "update", kind: "menu", icon: "", label: "Config", title: "Reset to default" }, + { id: "update.themes", parent: "update", kind: "action", icon: "󰸌", label: "Extra Themes", when: true }, + { id: "update.process", parent: "update", kind: "menu", icon: "", label: "Process", title: "Restart" }, + { id: "update.hardware", parent: "update", kind: "menu", icon: "󰇅", label: "Hardware", title: "Restart" }, + { id: "update.firmware", parent: "update", kind: "action", icon: "", label: "Firmware" }, + { id: "update.password", parent: "update", kind: "menu", icon: "", label: "Password" }, + { id: "update.timezone", parent: "update", kind: "action", icon: "", label: "Timezone" }, + { id: "update.time", parent: "update", kind: "action", icon: "", label: "Time" }, + { id: "update.channel.stable", parent: "update.channel", kind: "action", icon: "🟢", label: "Stable", checked: true }, + { id: "update.channel.rc", parent: "update.channel", kind: "action", icon: "🟡", label: "RC", checked: true }, + { id: "update.channel.edge", parent: "update.channel", kind: "action", icon: "🟠", label: "Edge", checked: true }, + { id: "update.channel.dev", parent: "update.channel", kind: "action", icon: "🔴", label: "Dev", checked: true }, + { id: "update.process.hyprsunset", parent: "update.process", kind: "action", icon: "", label: "Hyprsunset" }, + { id: "update.process.shell", parent: "update.process", kind: "action", icon: "󰍜", label: "Shell" }, + { id: "update.config.hyprland", parent: "update.config", kind: "action", icon: "", label: "Hyprland" }, + { id: "update.config.hyprsunset", parent: "update.config", kind: "action", icon: "", label: "Hyprsunset" }, + { id: "update.config.plymouth", parent: "update.config", kind: "action", icon: "󱣴", label: "Plymouth" }, + { id: "update.config.tmux", parent: "update.config", kind: "action", icon: "", label: "Tmux" }, + { id: "update.config.shell", parent: "update.config", kind: "action", icon: "󰍜", label: "Shell" }, + { id: "update.hardware.audio", parent: "update.hardware", kind: "action", icon: "", label: "Audio" }, + { id: "update.hardware.wifi", parent: "update.hardware", kind: "action", icon: "󱚾", label: "Wi-Fi" }, + { id: "update.hardware.bluetooth", parent: "update.hardware", kind: "action", icon: "󰂯", label: "Bluetooth" }, + { id: "update.hardware.trackpad", parent: "update.hardware", kind: "action", icon: "󰟸", label: "Trackpad" }, + { id: "update.password.drive", parent: "update.password", kind: "action", icon: "", label: "Drive Encryption" }, + { id: "update.password.user", parent: "update.password", kind: "action", icon: "", label: "User" }, +]; diff --git a/apps/pocket-remote/pad.tsx b/apps/pocket-remote/pad.tsx deleted file mode 100644 index e75b382f9..000000000 --- a/apps/pocket-remote/pad.tsx +++ /dev/null @@ -1,261 +0,0 @@ -// apps/pocket-remote/pad.tsx — the long tail. The dock holds the nine things -// a remote is reached for; everything else Omarchy binds lives here, grouped -// the way its own menu groups them (Window, Desk, Toggle, Capture, Theme, -// System), as labelled keys on one sheet that slides over the stage. The -// rails stay live underneath: volume is never more than one thumb away. -// -// Destructive keys (close, suspend, close all) take a hold, and say so when -// tapped. - -import { createEffect, Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import { type ActionId, actionById, PAD_PAGES } from "./actions.ts"; -import type { GestureHandlers } from "./desk.tsx"; -import { Icon } from "./icons.tsx"; -import { SCREEN_W, within } from "./layout.ts"; -import type { RemoteStore } from "./store.ts"; -import { themed, themeTitle } from "./theme.ts"; - -export const PAD_X = 0; -export const PAD_W = SCREEN_W; -const HEADER_H = 32; -const TAB_W = 72; -const CLOSE_W = PAD_W - PAD_PAGES.length * TAB_W; -const GRID_TOP = HEADER_H + 8; -const COLS = 4; -const ROWS = 3; -const CELL_W = 116; -const CELL_H = 88; -const CELL_GAP = 4; -const GRID_X0 = PAD_X + Math.floor((PAD_W - COLS * CELL_W) / 2); -/** Theme page: cells 0..9 are themes, the last two the style actions. */ -const THEME_CELLS = COLS * ROWS - 2; - -interface Cell { - kind: "action" | "theme" | "empty"; - id: string; - label: string; - hold: boolean; - active: boolean; -} - -function cells(store: RemoteStore, page: number): Cell[] { - const def = PAD_PAGES[page]; - if (!def) return []; - const out: Cell[] = []; - if (def.id === "theme") { - const themes = store.themeList(); - for (let i = 0; i < THEME_CELLS; i += 1) { - const name = themes[i]; - out.push( - name - ? { kind: "theme", id: name, label: themeTitle(name), hold: false, active: name === store.themeName() } - : { kind: "empty", id: `empty:${i}`, label: "", hold: false, active: false }, - ); - } - } - for (const id of def.actions) { - const action = actionById(id); - if (!action) continue; - out.push({ kind: "action", id, label: action.label, hold: action.hold === true, active: false }); - } - while (out.length < COLS * ROWS) out.push({ kind: "empty", id: `empty:${out.length}`, label: "", hold: false, active: false }); - return out.slice(0, COLS * ROWS); -} - -function cellRect(i: number) { - const col = i % COLS; - const row = Math.floor(i / COLS); - return { x: GRID_X0 + col * CELL_W, y: GRID_TOP + row * CELL_H, w: CELL_W - CELL_GAP, h: CELL_H - CELL_GAP }; -} - -function cellAt(x: number, y: number): number | null { - if (y < GRID_TOP || x < GRID_X0) return null; - const col = Math.floor((x - GRID_X0) / CELL_W); - const row = Math.floor((y - GRID_TOP) / CELL_H); - if (col < 0 || col >= COLS || row < 0 || row >= ROWS) return null; - return row * COLS + col; -} - -/** The pad's touch handlers; app.tsx routes every contact here while it is open. */ -export function padHandlers(store: RemoteStore): GestureHandlers { - let downCell: number | null = null; - let downTab: number | null = null; - let closeDown = false; - const active = () => store.pad() !== null; - return { - onDown: (c) => { - if (!active()) return; - downCell = null; - downTab = null; - closeDown = false; - if (!within(c.x, c.y, { x: PAD_X, y: 0, w: PAD_W, h: 320 })) return; - if (c.y < HEADER_H) { - const i = Math.floor((c.x - PAD_X) / TAB_W); - if (i < PAD_PAGES.length) { - downTab = i; - store.pressDown(`padtab:${i}`); - } else { - closeDown = true; - store.pressDown("padclose"); - } - return; - } - downCell = cellAt(c.x, c.y); - if (downCell !== null) store.pressDown(`cell:${downCell}`); - }, - onTap: () => { - if (!active()) return; - store.pressRelease(); - if (closeDown) { - store.setPad(null); - } else if (downTab !== null) { - store.setPad(store.pad() === downTab ? null : downTab); - } else if (downCell !== null) { - const cell = cells(store, store.pad()!)[downCell]; - if (!cell) return; - if (cell.kind === "theme") store.chooseTheme(cell.id); - else if (cell.kind === "action") { - if (cell.hold) store.say(`hold to ${cell.label.toLowerCase()}`); - else store.act(cell.id as ActionId); - } - } - downCell = null; - downTab = null; - closeDown = false; - }, - onLongPress: () => { - if (!active() || downCell === null) return; - const cell = cells(store, store.pad()!)[downCell]; - store.pressDown(null); - if (cell && cell.kind === "action" && cell.hold) store.act(cell.id as ActionId); - downCell = null; - }, - onPanStart: () => { - if (!active()) return; - store.pressDown(null); - downCell = null; - downTab = null; - closeDown = false; - }, - onUp: () => { - if (!active()) return; - store.pressRelease(); - }, - onCancel: () => store.pressRelease(), - }; -} - -export function Pad(p: { store: RemoteStore }) { - const page = () => p.store.pad() ?? 0; - const items = () => cells(p.store, page()); - return ( - - {/* header: page tabs + close */} - - - {(def, i) => ( - - - page() === i ? "text" : "textDim")} - > - {def().label} - - - - )} - - - - - - - - - {/* grid */} - - {(cell, i) => { - const r = cellRect(i); - return ( - - { - themed(() => cell().active ? "accentFill" : "surfaceMutedDim")(node); - if (cell().hold) themed("borderDanger")(node); - }} - > - - - - cell().active ? "textOnAccent" : cell().hold ? "textDanger" : "text")} - > - {cell().label} - - - - hold - - - - - - ); - }} - - - - ); -} - -/** A hold key's progress: the row under the cells fills while it is held. */ -function HoldHint(p: { store: RemoteStore }) { - let bar: import("@pocketjs/framework/components").NodeMirror | null = null; - createEffect(() => { - if (!bar) return; - const pressed = p.store.pressed(); - jump(bar, "opacity", pressed && pressed.startsWith("cell:") ? 1 : 0); - }); - return ( - { - bar = node; - themed("surfaceMuted")(node); - }} - /> - ); -} diff --git a/apps/pocket-remote/popup.tsx b/apps/pocket-remote/popup.tsx new file mode 100644 index 000000000..6dd04dd71 --- /dev/null +++ b/apps/pocket-remote/popup.tsx @@ -0,0 +1,87 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/popup.tsx — the classic popup: one container of rows +// with hairlines between them and a caret at the point it answers, scaled +// and faded in from that point. The stage's tile menu is one; anything else +// that needs a small list at a finger can be another. +// +// The caret joins the body without a seam by drawing three things in order: +// a border-coloured diamond, the bordered body, then a body-coloured diamond +// on top that covers the border where the two meet. + +import { createEffect, Index } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { jump } from "@pocketjs/framework/animation"; +import type { NodeMirror } from "@pocketjs/framework/components"; +import { Icon, type Tone } from "./icons.tsx"; +import { type Popup, POPUP_CARET, POPUP_PAD, POPUP_ROW_H } from "./layout.ts"; +import { themed } from "./theme.ts"; + +export interface PopupRow { + glyph: string; + label: string; + tone?: Tone; +} + +export function PopupBox(p: { place: Popup; rows: readonly PopupRow[]; hot: number | null; progress: () => number }) { + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const t = p.progress(); + jump(root, "opacity", t); + jump(root, "scale", 0.92 + 0.08 * t); + // Grows out of its anchor: from the caret's edge. + jump(root, "translateY", Math.round((1 - t) * (p.place.below ? -6 : 6))); + }); + const caretY = p.place.below ? p.place.y - POPUP_CARET : p.place.y + p.place.h - POPUP_CARET; + const innerY = p.place.below ? p.place.y - POPUP_CARET + 2 : p.place.y + p.place.h - POPUP_CARET - 2; + return ( + { + root = node; + }} + > + {/* caret, border colour */} + + {/* body */} + { + themed("surfaceDark")(node); + themed("borderMuted")(node); + }} + > + + {(row, i) => ( + + + + + + + + {row().label} + + + + + )} + + + {/* caret, body colour, over the border */} + + + ); +} diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts index 6069ef81e..f2905b1ac 100644 --- a/apps/pocket-remote/protocol.ts +++ b/apps/pocket-remote/protocol.ts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/protocol.ts — the JSON lines the iPod and the Omarchy // daemon exchange over the SVC WIRE (spec ops 30..32). One file, imported by // both ends, so a field cannot drift between them. Every line is small: the @@ -9,7 +10,7 @@ import type { ActionId } from "./actions.ts"; /** The svc app id: what the beacon advertises and the hello names. */ export const REMOTE_APP = "pocket-remote"; -export const REMOTE_PROTO = 1; +export const REMOTE_PROTO = 2; /** Title bytes kept per window in a snapshot. */ export const TITLE_MAX = 28; @@ -54,8 +55,9 @@ export interface WsInfo { export interface HostState { t: "state"; - /** The focused monitor's logical size (pixels / scale). */ - mon: { w: number; h: number }; + /** The focused monitor's logical size (pixels / scale) and, for the + * daemon's own use, its origin in layout px. */ + mon: { w: number; h: number; x?: number; y?: number }; /** Ordinary workspaces (ids > 0), ascending. */ ws: WsInfo[]; /** Active workspace id on the focused monitor. */ @@ -128,7 +130,34 @@ export interface HostToast { text: string; } -export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast; +/** What the control centre shows besides the levels: the network and + * whatever is playing. Sent on change. */ +export interface HostCc { + t: "cc"; + wifi: { + /** The radio is on. */ + on: 0 | 1; + /** Connected network, "" when none; "ethernet" links carry the device. */ + ssid: string; + /** Signal 0..100, 0 when unknown. */ + sig: number; + }; + media: { + st: "playing" | "paused" | "none"; + title: string; + artist: string; + }; +} + +/** The menu's live conditions: rows hidden by a failing `when`, rows whose + * `checked` holds. Full sets, sent when they change. */ +export interface HostMenu { + t: "menu"; + hide: string[]; + check: string[]; +} + +export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast | HostCc | HostMenu; // --------------------------------------------------------------------------- // device -> host @@ -158,7 +187,12 @@ export type WindowOp = | { op: "focus"; a: string } | { op: "close"; a: string } | { op: "swap"; a: string; dir: Direction } - | { op: "move"; a: string; n: number }; + | { op: "move"; a: string; n: number } + /** Put a floating window at monitor-relative logical px (a drag). */ + | { op: "place"; a: string; x: number; y: number } + /** Toggle floating / fullscreen on one window. */ + | { op: "float"; a: string } + | { op: "full"; a: string }; export type ClientWindow = { t: "win" } & WindowOp; @@ -194,9 +228,42 @@ export interface ClientKey { mods?: Modifier[]; } -export interface ClientTheme { - t: "theme"; - name: string; +/** Trackpad: relative pointer motion in laptop-screen px (already + * accelerated on the device), at most one line per device frame. */ +export interface ClientPointer { + t: "ptr"; + dx: number; + dy: number; +} + +export interface ClientClick { + t: "click"; + b: "l" | "r" | "m"; +} + +/** Two-finger scroll, in px of travel. */ +export interface ClientScroll { + t: "scroll"; + dx: number; + dy: number; +} + +/** Hold the left button down (a long-press on the trackpad) and let go. */ +export interface ClientDrag { + t: "drag"; + on: 0 | 1; +} + +export interface ClientWifi { + t: "wifi"; + on: 0 | 1; +} + +/** Run one row of Omarchy's menu by id (menu.ts / host/menu-source.ts): an + * action runs its command, a provider submenu opens on the desktop. */ +export interface ClientMenu { + t: "menu"; + id: string; } export type ClientLine = @@ -209,7 +276,12 @@ export type ClientLine = | ClientMedia | ClientType | ClientKey - | ClientTheme; + | ClientPointer + | ClientClick + | ClientScroll + | ClientDrag + | ClientWifi + | ClientMenu; /** Parse one wire batch (newline-separated JSON) into typed lines; malformed * lines are skipped rather than allowed to wedge the reader. */ diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx new file mode 100644 index 000000000..368f5f131 --- /dev/null +++ b/apps/pocket-remote/stage.tsx @@ -0,0 +1,297 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/stage.tsx — the live miniature of the focused monitor: +// tiles = windows, accent border = focus. Tap focuses. Hold a tile and a +// popup answers at the finger — float or tile it, take it full screen, +// close it. Drag a tiled window onto another to swap them, onto a strip +// tab to move it there; drag a floating window and it moves, on the laptop, +// under the finger. Swipe empty stage to step workspaces; an empty +// workspace offers the launchers. + +import { Index, Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { type ActionId, actionById, LAUNCHERS } from "./actions.ts"; +import { GLYPH } from "./glyphs.ts"; +import type { GestureHandlers } from "./handlers.ts"; +import { Icon } from "./icons.tsx"; +import { launchChipAt, launchChipRect, popupRowAt, STAGE, STRIP, SWIPE_PX, tabAt, within } from "./layout.ts"; +import { PopupBox, type PopupRow } from "./popup.tsx"; +import type { RemoteStore, TileSlot } from "./store.ts"; +import { themed } from "./theme.ts"; + +const LAUNCH_GLYPH: Record = { + terminal: GLYPH.terminal, + browser: GLYPH.browser, + files: GLYPH.files, +}; + +function Tile(p: { store: RemoteStore; slot: TileSlot }) { + const s = p.slot; + const dragged = () => p.store.drag()?.a === s.a; + const over = () => p.store.drag()?.over === s.a; + const held = () => p.store.popup()?.a === s.a; + return ( + + + + + {s.label()} + + + + {s.title()} + + + + + + + + + + ); +} + +function Launchers(p: { store: RemoteStore }) { + return ( + <> + + + empty workspace + + + + {(id, i) => { + const r = launchChipRect(i, LAUNCHERS.length); + return ( + { + themed("surfaceMutedDim")(node); + themed("borderMuted")(node); + }} + > + + + + + + {actionById(id())?.label ?? id()} + + + + + ); + }} + + + + swipe for the next workspace + + + + ); +} + +const POPUP_ROWS = (floating: boolean): PopupRow[] => [ + { glyph: floating ? GLYPH.tile : GLYPH.float, label: floating ? "Tile" : "Float" }, + { glyph: GLYPH.fullscreen, label: "Full screen" }, + { glyph: GLYPH.close, label: "Close", tone: "danger" }, +]; + +export function Stage(p: { store: RemoteStore }) { + const empty = () => { + const s = p.store.state(); + return !!s && !s.win.some((w) => w.ws === s.active); + }; + return ( + + + + + {/* tiles are positioned in screen space; the stage origin is offset */} + + + {(slot) => ( + + + + )} + + + + ); +} + +/** The held tile's popup, drawn over everything on the stage. */ +export function TilePopup(p: { store: RemoteStore }) { + return ( + + {(popup) => } + + ); +} + +// --------------------------------------------------------------------------- +// gestures +// --------------------------------------------------------------------------- + +type Target = { kind: "tile"; a: string } | { kind: "launch"; i: number } | { kind: "stage" } | { kind: "none" }; + +function stageTarget(store: RemoteStore, x: number, y: number): Target { + if (!within(x, y, STAGE)) return { kind: "none" }; + const a = store.windowAt(x, y); + if (a) return { kind: "tile", a }; + const s = store.state(); + if (s && !s.win.some((w) => w.ws === s.active)) { + const i = launchChipAt(x, y, LAUNCHERS.length); + if (i !== null) return { kind: "launch", i }; + } + return { kind: "stage" }; +} + +export function stageHandlers(store: RemoteStore): GestureHandlers { + let down: Target = { kind: "none" }; + let swiping = false; + let placing = false; + const reset = () => { + store.pressRelease(); + store.setDrag(null); + swiping = false; + placing = false; + }; + return { + onDown: (c) => { + down = stageTarget(store, c.x, c.y); + store.pressDown(down.kind === "tile" ? `tile:${down.a}` : down.kind === "launch" ? `launch:${down.i}` : null); + }, + onTap: () => { + const t = down; + store.pressRelease(); + if (t.kind === "tile") store.focusWindow(t.a); + else if (t.kind === "launch") store.act(LAUNCHERS[t.i] as ActionId); + down = { kind: "none" }; + }, + onLongPress: (c) => { + if (down.kind === "tile") { + store.pressDown(null); + store.openPopup(down.a, c.x, c.y); + down = { kind: "none" }; + } + }, + onPanStart: (c) => { + const t = down; + store.pressDown(null); + if (t.kind === "tile" && store.isFloating(t.a)) { + placing = true; + store.placeBegin(t.a, c.startX, c.startY); + store.placeTo(c.x, c.y); + } else if (t.kind === "tile") { + store.setDrag({ a: t.a, x: c.x, y: c.y, over: null, overWs: null }); + } else { + swiping = true; + } + }, + onPanMove: (c) => { + if (placing) { + store.placeTo(c.x, c.y); + return; + } + const drag = store.drag(); + if (drag) { + const overA = within(c.x, c.y, STAGE) ? store.windowAt(c.x, c.y) : null; + const tab = c.y < STRIP.h ? tabAt(c.x, store.tabs()) : null; + store.setDrag({ + a: drag.a, + x: c.x, + y: c.y, + over: overA !== null && overA !== drag.a ? overA : null, + overWs: tab ? tab.id : null, + }); + } + }, + onUp: (c) => { + if (placing) { + store.placeTo(c.x, c.y, true); + reset(); + return; + } + const drag = store.drag(); + if (drag) { + if (drag.overWs !== null && drag.overWs !== store.state()?.active) store.moveWindow(drag.a, drag.overWs); + else if (drag.over !== null) store.swapWindows(drag.a, drag.over); + reset(); + return; + } + if (swiping && Math.abs(c.dx) >= SWIPE_PX && Math.abs(c.dx) > Math.abs(c.dy)) { + store.workspaceStep(c.dx < 0 ? 1 : -1); + } + reset(); + }, + onCancel: () => { + if (placing) store.placeCancel(); + reset(); + }, + }; +} + +/** While a tile's popup is up: rows answer, anything else puts it away. */ +export function popupHandlers(store: RemoteStore): GestureHandlers { + let outside = false; + return { + onDown: (c) => { + const popup = store.popup(); + if (!popup) return; + const row = popupRowAt(popup.place, c.x, c.y); + outside = row === null; + if (outside) { + store.closePopup(); + return; + } + store.popupHover(row); + store.pressDown(`popup:${row}`); + }, + onMove: (c) => { + const popup = store.popup(); + if (!popup || outside) return; + store.popupHover(popupRowAt(popup.place, c.x, c.y)); + }, + onTap: () => { + const popup = store.popup(); + store.pressRelease(); + if (!popup || outside || popup.hot === null) return; + store.popupRun(popup.hot); + }, + onUp: () => { + store.pressRelease(); + store.popupHover(null); + }, + onCancel: () => { + store.pressRelease(); + store.popupHover(null); + }, + }; +} diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts index eb2a2e7b1..e6250c7cb 100644 --- a/apps/pocket-remote/store.ts +++ b/apps/pocket-remote/store.ts @@ -1,9 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/store.ts — the remote's live state: the link to the -// daemon, the mirrored desktop (workspaces, windows, levels, theme), the -// tile slot pool that animates the stage, the hold-and-slide flyouts, and -// the senders every touch target calls. Everything the screen shows reads -// from here; nothing here knows about pixels except the tile pool and the -// flyout progress, which own motion. +// daemon, the mirrored desktop (workspaces, windows, levels, theme, network, +// what is playing, the menu's live conditions), the tile slot pool that +// animates the stage, the ball, the popups (a tile's, the control centre, +// the menu sheet), the deck's keyboard state, and the senders every touch +// target calls. Everything the screen shows reads from here; nothing here +// knows about pixels except the motion owners — the tile pool, the ball and +// the entrance progresses — which write geometry straight to node mirrors. // // Reactivity is coarse on purpose: a snapshot replaces one signal, tiles // live in a fixed pool of per-slot signals so a frame in which one window @@ -13,16 +16,28 @@ import { batch, createMemo, createSignal, type Accessor } from "solid-js"; import { getOps } from "@pocketjs/framework"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; +import { createScroller, type Scroller } from "@pocketjs/framework/kinetics"; import { onFrame } from "@pocketjs/framework/lifecycle"; -import { type ActionId, actionById, MENU_ROUTES } from "./actions.ts"; +import { type ActionId, actionById } from "./actions.ts"; +import type { KbLayer, KeyVariant } from "./keyboard-layout.ts"; import { approach, - CARD_LINGER_FRAMES, - CLOSE_HOLD_SECONDS, + BALL, + BALL_HOME, + ballSnap, + CC_LINGER_FRAMES, + ccRowAt, clamp01, easeProgress, + type Fit, fitMonitor, + type Mode, + placePopup, + type Popup, type Rect, + SHEET_LIST, + sheetMaxScroll, + stageToMonitor, stageWindows, stripTabs, swapDirection, @@ -30,11 +45,15 @@ import { TILE_SLOTS, TILE_TWO_LINES_H, tileRect, + trackDelta, windowAt, } from "./layout.ts"; +import { MENU_ROOT, menuChildren, menuItem, menuParent } from "./menu-tree.ts"; +import type { MenuItem } from "./menu.ts"; import { type ClientLine, type Direction, + type HostCc, type HostLine, type HostState, type Layout, @@ -129,6 +148,7 @@ export interface TileSlot { dying: boolean; } +/** A tiled window being dragged onto another (swap) or onto a tab (move). */ export interface Drag { a: string; x: number; @@ -139,20 +159,22 @@ export interface Drag { overWs: number | null; } -export interface Closing { +/** A tile's popup: float/tile, full screen, close. */ +export interface TilePopup { a: string; - /** 0..1 of CLOSE_HOLD_SECONDS. */ - progress: number; + place: Popup; + floating: boolean; + hot: number | null; } /** - * The levels card: brightness and volume, the control-centre control. Opened - * sticky by a tap on the dock (tap outside closes) or by hold-and-slide (the - * finger that opened it adjusts, release lingers then closes). + * The control centre. Opened sticky by a tap on its button (tap outside + * closes) or by hold-and-slide (the finger that opened it adjusts, release + * lingers then closes). */ -export interface Card { +export interface Cc { mode: "sticky" | "hold"; - /** Row the sliding finger is on (hold mode) or dragging (sticky mode). */ + /** Slider row the finger is on (hold mode) or dragging (sticky mode). */ row: 0 | 1 | null; /** Finger x and level when the current row was entered — drags are relative. */ refX: number; @@ -161,40 +183,42 @@ export interface Card { until: number; } -/** The Menu key's cascade: routes in column one, the hot route's leaves in - * column two. `hot` / `leaf` are what is under the finger. */ -export interface MenuFly { - kind: "menu"; +/** The menu sheet: which submenu is open and how it was reached. */ +export interface Sheet { + /** The open submenu's id ("root" at the top). */ + at: string; + /** Ancestors, root first — what back returns to. */ + trail: string[]; hot: number | null; - leaf: number | null; - /** Route whose leaves column two shows (sticks while the finger crosses). */ - open: number | null; -} - -/** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ -export interface KeyVariant { - label: string; - k: string; - mods: Modifier[]; } +/** A held key's variant chips. */ export interface KeyFly { - kind: "keyvar"; /** Screen-space rect of the held key. */ key: Rect; variants: KeyVariant[]; hot: number | null; } -export type Flyout = MenuFly | KeyFly; +export interface Wifi { + on: boolean; + ssid: string; + sig: number; +} -export type KbLayer = "lower" | "upper" | "sym"; +export interface Media { + st: "playing" | "paused" | "none"; + title: string; + artist: string; +} const TOAST_FRAMES = 150; /** Frames between level sends while a slider is being dragged. */ const LEVEL_SEND_EVERY = 3; /** Frames after a slider release during which host echoes are ignored. */ const LEVEL_ECHO_HOLD = 30; +/** Frames between placements while a floating tile is dragged. */ +const PLACE_SEND_EVERY = 3; export type RemoteStore = ReturnType; @@ -217,6 +241,10 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const [themeName, setThemeName] = createSignal("tokyo-night"); const [themeList, setThemeList] = createSignal([]); const [colors, setColors] = createSignal(TOKYO_NIGHT); + const [wifi, setWifi] = createSignal({ on: false, ssid: "", sig: 0 }); + const [media, setMedia] = createSignal({ st: "none", title: "", artist: "" }); + const [menuHidden, setMenuHidden] = createSignal>(new Set()); + const [menuChecked, setMenuChecked] = createSignal>(new Set()); const tabs = createMemo(() => { const s = state(); @@ -234,33 +262,87 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { if (!s || !s.focus) return ""; return s.win.find((w) => w.a === s.focus)?.c ?? ""; }); + const fit = createMemo(() => { + const s = state(); + return s ? fitMonitor(s.mon) : null; + }); // ---- ui -------------------------------------------------------------------- - const [pad, setPad] = createSignal(null); - const [kb, setKb] = createSignal(false); + const [mode, setMode] = createSignal("stage"); const [kbLayer, setKbLayer] = createSignal("lower"); const [kbMods, setKbMods] = createSignal([]); const [pressed, setPressed] = createSignal(null); + /** 0..1 eased press depth of the pressed target: attack on down, release + * after up. Keys scale and brighten by it, the bubble rides on it. */ + const [pressT, setPressT] = createSignal(0); const [drag, setDrag] = createSignal(null); - const [closing, setClosing] = createSignal(null); - const [card, setCard] = createSignal(null); - const [flyout, setFlyout] = createSignal(null); - /** 0..1 progress of the open flyout (drives its entrance). */ + const [popup, setPopup] = createSignal(null); + const [popupT, setPopupT] = createSignal(0); + const [cc, setCc] = createSignal(null); + const [ccT, setCcT] = createSignal(0); + const [sheet, setSheet] = createSignal(null); + const [sheetT, setSheetT] = createSignal(0); + /** Restarted on every route change: the list's own entrance. */ + const [sheetListT, setSheetListT] = createSignal(0); + const [keyFly, setKeyFly] = createSignal(null); const [flyT, setFlyT] = createSignal(0); - /** 0..1 progress of the menu's second column, restarted per route. */ - const [flyT2, setFlyT2] = createSignal(0); - const [cardT, setCardT] = createSignal(0); const [toast, setToast] = createSignal(""); const [frame, setFrame] = createSignal(0); let toastUntil = 0; let frameCount = 0; - let pressLinger = 0; + let pressHeld = false; const say = (text: string) => { setToast(text); toastUntil = frameCount + TOAST_FRAMES; }; + /** The open submenu's visible rows. */ + const sheetRows = createMemo(() => { + const s = sheet(); + return s ? menuChildren(s.at, menuHidden()) : []; + }); + const sheetScroller: Scroller = createScroller({ + max: () => sheetMaxScroll(sheetRows().length), + extent: () => SHEET_LIST.h, + overscroll: 40, + }); + + // ---- the ball ---------------------------------------------------------------- + const [ball, setBall] = createSignal<{ x: number; y: number }>({ ...BALL_HOME }); + const [ballDragging, setBallDragging] = createSignal(false); + const ballCur = { x: BALL_HOME.x, y: BALL_HOME.y }; + let ballNode: NodeMirror | null = null; + let grab = { dx: 0, dy: 0 }; + const paintBall = () => { + if (!ballNode) return; + jump(ballNode, "insetL", Math.round(ballCur.x)); + jump(ballNode, "insetT", Math.round(ballCur.y)); + }; + const bindBall = (node: NodeMirror) => { + ballNode = node; + paintBall(); + }; + /** A held ball comes along with the finger from where it was grabbed. */ + const ballGrab = (x: number, y: number) => { + const b = ball(); + grab = { dx: x - b.x, dy: y - b.y }; + setBallDragging(true); + }; + const ballDragTo = (x: number, y: number) => { + if (!ballDragging()) return; + ballCur.x = x - grab.dx; + ballCur.y = y - grab.dy; + setBall({ x: ballCur.x, y: ballCur.y }); + paintBall(); + }; + /** Released: snap to the nearer edge (the frame loop eases it there). */ + const ballRelease = () => { + if (!ballDragging()) return; + setBallDragging(false); + setBall(ballSnap(ballCur.x, ballCur.y)); + }; + // ---- tile pool --------------------------------------------------------------- const slots: TileSlot[] = []; for (let i = 0; i < TILE_SLOTS; i += 1) { @@ -304,16 +386,20 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { jump(node, "opacity", c.alpha); }; + /** A floating tile under the finger: its own geometry is the truth until + * the daemon echoes the placement, so a snapshot must not yank it back. */ + let placing: { a: string; dx: number; dy: number; sentAt: number } | null = null; + /** Re-target the pool from a snapshot: keep slots by address, fade new * windows in where they belong, fade vanished ones out in place. */ const retarget = (s: HostState) => { - const fit = fitMonitor(s.mon); + const f = fitMonitor(s.mon); const shown = stageWindows(s); const seen = new Set(); batch(() => { for (const win of shown) { seen.add(win.a); - const rect = tileRect(win, fit); + const rect = tileRect(win, f); let slot = slotOf(win.a); if (!slot) { slot = slots.find((candidate) => candidate.a === null); @@ -324,7 +410,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { slot.setLive(true); } slot.dying = false; - slot.target = rect; + if (!(placing && placing.a === win.a)) slot.target = rect; slot.targetAlpha = 1; slot.setLabel(win.c); slot.setTitle(win.ti); @@ -360,6 +446,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { } return out; }; + const isFloating = (a: string): boolean => state()?.win.find((w) => w.a === a)?.f === 1; // ---- senders ------------------------------------------------------------------- const send = (line: ClientLine) => { @@ -416,6 +503,46 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { if (s) commit({ ...s, win: s.win.map((w) => (w.a === a ? { ...w, ws: n } : w)) }); say(`moved to ${n}`); }; + const floatWindow = (a: string) => { + send({ t: "win", op: "float", a }); + say(isFloating(a) ? "tiled" : "floating"); + }; + const fullWindow = (a: string) => { + send({ t: "win", op: "full", a }); + say("full screen"); + }; + + /** Begin dragging a floating tile: remember where inside it the finger + * landed so the tile does not jump to the fingertip. */ + const placeBegin = (a: string, x: number, y: number) => { + const slot = slotOf(a); + if (!slot) return; + placing = { a, dx: x - slot.cur.x, dy: y - slot.cur.y, sentAt: 0 }; + }; + /** Move it: the tile follows the finger now; the laptop hears every third + * frame and on release. */ + const placeTo = (x: number, y: number, final = false) => { + if (!placing) return; + const slot = slotOf(placing.a); + const f = fit(); + if (!slot || !f) return; + const nx = x - placing.dx; + const ny = y - placing.dy; + slot.target = { ...slot.target, x: nx, y: ny }; + slot.cur = { ...slot.cur, x: nx, y: ny }; + paintSlot(slot); + if (final || frameCount >= placing.sentAt + PLACE_SEND_EVERY) { + const at = stageToMonitor(nx, ny, f); + send({ t: "win", op: "place", a: placing.a, x: at.x, y: at.y }); + placing.sentAt = frameCount; + } + if (final) placing = null; + }; + const placeCancel = () => { + placing = null; + const s = state(); + if (s) retarget(s); + }; let levelSendAt = 0; let levelEchoHoldUntil = 0; @@ -439,75 +566,154 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setMute(!mute()); send({ t: "mute" }); }; - const media = (op: "play" | "next" | "prev") => send({ t: "media", op }); + const mediaOp = (op: "play" | "next" | "prev") => { + send({ t: "media", op }); + const m = media(); + if (op === "play" && m.st !== "none") setMedia({ ...m, st: m.st === "playing" ? "paused" : "playing" }); + }; + const wifiToggle = () => { + const w = wifi(); + setWifi({ ...w, on: !w.on, ssid: w.on ? "" : w.ssid }); + send({ t: "wifi", on: w.on ? 0 : 1 }); + say(w.on ? "Wi-Fi off" : "Wi-Fi on"); + }; const typeText = (text: string) => send({ t: "type", text }); const typeKey = (k: string, mods: Modifier[] = []) => send(mods.length ? { t: "key", k, mods } : { t: "key", k }); - const chooseTheme = (name: string) => { - send({ t: "theme", name }); - say(name); + + /** Trackpad: motion and scroll accumulate and go out once per frame. */ + let ptrDx = 0; + let ptrDy = 0; + let scrollDx = 0; + let scrollDy = 0; + const pointer = (dx: number, dy: number) => { + ptrDx += dx; + ptrDy += dy; + }; + const scroll = (dx: number, dy: number) => { + scrollDx += dx; + scrollDy += dy; + }; + const click = (b: "l" | "r" | "m") => send({ t: "click", b }); + const dragButton = (on: boolean) => send({ t: "drag", on: on ? 1 : 0 }); + + /** Run a row of Omarchy's menu on the laptop. */ + const menuRun = (id: string) => { + const item = menuItem(id); + if (!item) return; + send({ t: "menu", id }); + say(item.kind === "action" ? item.label : `${item.label} — on the laptop`); }; - // ---- card + flyouts -------------------------------------------------------------- - const openCard = (mode: Card["mode"], row: 0 | 1 | null = null, refX = 0) => { - setCard({ mode, row, refX, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0, until: 0 }); - setCardT(0); + // ---- popups -------------------------------------------------------------------- + const openPopup = (a: string, x: number, y: number) => { + setPopup({ a, place: placePopup(x, y, 3), floating: isFloating(a), hot: null }); + setPopupT(0); }; - const closeCard = () => setCard(null); - /** Release a held card: linger, then close on its own. */ - const cardReleased = () => { - const c = card(); - if (!c) return; - if (c.mode === "hold") setCard({ ...c, row: null, until: frameCount + CARD_LINGER_FRAMES }); - else setCard({ ...c, row: null }); + const popupHover = (hot: number | null) => { + const p = popup(); + if (p && p.hot !== hot) setPopup({ ...p, hot }); + }; + const closePopup = () => setPopup(null); + /** Rows: float / tile, full screen, close. */ + const popupRun = (row: number) => { + const p = popup(); + if (!p) return; + closePopup(); + if (row === 0) floatWindow(p.a); + else if (row === 1) fullWindow(p.a); + else if (row === 2) closeWindow(p.a); }; - const openFlyout = (fly: Flyout) => { - setFlyout(fly); - setFlyT(0); - setFlyT2(0); - }; - const closeFlyout = () => setFlyout(null); - - /** Menu cascade: move the finger. Column two follows the hot route and - * restarts its entrance when the route changes. */ - const menuHover = (hot: number | null, leaf: number | null) => { - const f = flyout(); - if (!f || f.kind !== "menu") return; - let open = f.open; - if (hot !== null && hot !== f.open) { - open = hot; - setFlyT2(0); + const openCc = (ccMode: Cc["mode"], row: 0 | 1 | null = null, refX = 0) => { + setCc({ mode: ccMode, row, refX, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0, until: 0 }); + setCcT(0); + }; + const closeCc = () => setCc(null); + /** A finger sliding over the card: the slider row under it is adjusted + * relatively from where the finger entered the row. */ + const ccFollow = (x: number, y: number) => { + const c = cc(); + if (!c) return; + const row = ccRowAt(y); + if (c.row !== row) { + setCc({ ...c, row, refX: x, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0 }); + return; } - if (hot !== f.hot || leaf !== f.leaf || open !== f.open) setFlyout({ kind: "menu", hot, leaf, open }); + if (row === null) return; + setLevel(row === 0 ? "bri" : "vol", clamp01(c.refLevel + trackDelta(x - c.refX))); + }; + /** Release a held card: send the final level, linger, then close. */ + const ccReleased = () => { + const c = cc(); + if (!c) return; + if (c.row !== null) setLevel(c.row === 0 ? "bri" : "vol", c.row === 0 ? bri() : vol(), true); + if (c.mode === "hold") setCc({ ...c, row: null, until: frameCount + CC_LINGER_FRAMES }); + else setCc({ ...c, row: null }); + }; + /** Sticky mode: a drag begins on a track. */ + const ccGrabTrack = (row: 0 | 1, x: number) => { + const c = cc(); + if (c) setCc({ ...c, row, refX: x, refLevel: row === 0 ? bri() : vol() }); }; - /** Menu cascade: release. A leaf runs; a route opens on the desktop. */ - const menuRelease = () => { - const f = flyout(); - if (!f || f.kind !== "menu") return; - closeFlyout(); - if (f.leaf !== null && f.open !== null) { - const id = MENU_ROUTES[f.open]?.leaves[f.leaf]; - if (id) act(id); + const openSheet = () => { + setSheet({ at: MENU_ROOT, trail: [], hot: null }); + setSheetT(0); + setSheetListT(1); + sheetScroller.scrollTo(0, { immediate: true }); + }; + const closeSheet = () => setSheet(null); + const sheetGo = (at: string, trail: string[]) => { + setSheet({ at, trail, hot: null }); + setSheetListT(0); + sheetScroller.stop(); + sheetScroller.scrollTo(0, { immediate: true }); + }; + const sheetPush = (id: string) => { + const s = sheet(); + if (s) sheetGo(id, [...s.trail, s.at]); + }; + const sheetBack = () => { + const s = sheet(); + if (!s) return; + if (s.trail.length === 0) { + closeSheet(); return; } - if (f.hot !== null) { - const route = MENU_ROUTES[f.hot]; - if (route) act(route.id); + const trail = s.trail.slice(0, -1); + sheetGo(s.trail[s.trail.length - 1] ?? menuParent(s.at), trail); + }; + const sheetHover = (hot: number | null) => { + const s = sheet(); + if (s && s.hot !== hot) setSheet({ ...s, hot }); + }; + /** A tapped row: a submenu opens here, anything else runs on the laptop + * and the sheet goes away. */ + const sheetTap = (i: number) => { + const item = sheetRows()[i]; + if (!item) return; + if (item.kind === "menu") { + sheetPush(item.id); + return; } + closeSheet(); + menuRun(item.id); }; + const openKeyFly = (fly: KeyFly) => { + setKeyFly(fly); + setFlyT(0); + }; + const closeKeyFly = () => setKeyFly(null); const keyHover = (hot: number | null) => { - const f = flyout(); - if (!f || f.kind !== "keyvar" || f.hot === hot) return; - setFlyout({ ...f, hot }); + const f = keyFly(); + if (f && f.hot !== hot) setKeyFly({ ...f, hot }); }; - - /** Key variants: release. Returns the chosen variant, or null for none. */ + /** Release: the chosen variant, or null for none. */ const keyRelease = (): KeyVariant | null => { - const f = flyout(); - if (!f || f.kind !== "keyvar") return null; - closeFlyout(); + const f = keyFly(); + if (!f) return null; + closeKeyFly(); return f.hot !== null ? (f.variants[f.hot] ?? null) : null; }; @@ -526,7 +732,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { commit(line); break; case "levels": - if (frameCount >= levelEchoHoldUntil && card()?.row == null) { + if (frameCount >= levelEchoHoldUntil && cc()?.row == null) { setVol(clamp01(line.vol)); setMute(line.mute === 1); setBri(clamp01(line.bri)); @@ -540,11 +746,35 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setThemeName(line.name); if (Array.isArray(line.list)) setThemeList(line.list.filter((v): v is string => typeof v === "string")); break; + case "cc": + applyCc(line); + break; + case "menu": + setMenuHidden(new Set(Array.isArray(line.hide) ? line.hide.filter((v): v is string => typeof v === "string") : [])); + setMenuChecked(new Set(Array.isArray(line.check) ? line.check.filter((v): v is string => typeof v === "string") : [])); + break; case "toast": say(line.text); break; } }; + const applyCc = (line: HostCc) => { + if (line.wifi && typeof line.wifi === "object") { + setWifi({ + on: line.wifi.on === 1, + ssid: typeof line.wifi.ssid === "string" ? line.wifi.ssid : "", + sig: typeof line.wifi.sig === "number" ? line.wifi.sig : 0, + }); + } + if (line.media && typeof line.media === "object") { + const st = line.media.st; + setMedia({ + st: st === "playing" || st === "paused" ? st : "none", + title: typeof line.media.title === "string" ? line.media.title : "", + artist: typeof line.media.artist === "string" ? line.media.artist : "", + }); + } + }; // ---- frame loop ---------------------------------------------------------------------- onFrame(() => { @@ -574,6 +804,16 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { send({ t: rail, v: Math.round(v * 100) / 100 }); levelSendAt = frameCount + LEVEL_SEND_EVERY; } + if (ptrDx !== 0 || ptrDy !== 0) { + send({ t: "ptr", dx: Math.round(ptrDx * 10) / 10, dy: Math.round(ptrDy * 10) / 10 }); + ptrDx = 0; + ptrDy = 0; + } + if (scrollDx !== 0 || scrollDy !== 0) { + send({ t: "scroll", dx: Math.round(scrollDx), dy: Math.round(scrollDy) }); + scrollDx = 0; + scrollDy = 0; + } for (const slot of slots) { if (slot.a === null) continue; @@ -598,53 +838,72 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { } } - const hold = closing(); - if (hold) { - const progress = Math.min(1, hold.progress + 1 / (60 * CLOSE_HOLD_SECONDS)); - setClosing({ a: hold.a, progress }); - if (progress >= 1) { - closeWindow(hold.a); - setClosing(null); + if (!ballDragging()) { + const b = ball(); + const nx = approach(ballCur.x, b.x); + const ny = approach(ballCur.y, b.y); + if (nx !== ballCur.x || ny !== ballCur.y) { + ballCur.x = nx; + ballCur.y = ny; + paintBall(); + moved = true; } - moved = true; } - if (flyout()) { - if (flyT() < 1) { - setFlyT(easeProgress(flyT())); + if (popup() && popupT() < 1) { + setPopupT(easeProgress(popupT())); + moved = true; + } + if (keyFly() && flyT() < 1) { + setFlyT(easeProgress(flyT())); + moved = true; + } + const c = cc(); + if (c) { + if (ccT() < 1) { + setCcT(easeProgress(ccT())); moved = true; } - if (flyT2() < 1) { - setFlyT2(easeProgress(flyT2())); + if (c.mode === "hold" && c.row === null && c.until > 0 && frameCount >= c.until) setCc(null); + } + if (sheet()) { + if (sheetT() < 1) { + setSheetT(easeProgress(sheetT())); moved = true; } - } - const c = card(); - if (c) { - if (cardT() < 1) { - setCardT(easeProgress(cardT())); + if (sheetListT() < 1) { + setSheetListT(easeProgress(sheetListT())); moved = true; } - if (c.mode === "hold" && c.row === null && c.until > 0 && frameCount >= c.until) setCard(null); + sheetScroller.step(); } - if (pressLinger > 0) { - pressLinger -= 1; - if (pressLinger === 0) setPressed(null); + // Press depth: a quick attack while held, a soft release after. + const target = pressHeld ? 1 : 0; + const depth = pressT(); + if (depth !== target) { + const next = target === 1 ? Math.min(1, depth + (1 - depth) * 0.55 + 0.02) : depth * 0.72; + if (next < 0.02 && target === 0) { + setPressT(0); + setPressed(null); + } else setPressT(next); + moved = true; } + if (toast() !== "" && frameCount >= toastUntil) setToast(""); if (moved) setFrame(frameCount); }); // ---- press feedback ---------------------------------------------------------------------- const pressDown = (id: string | null) => { - pressLinger = 0; + pressHeld = id !== null; setPressed(id); + if (id === null) setPressT(0); }; const pressRelease = () => { - // Linger a few frames so a tap that lands and lifts inside one frame - // still shows. - if (pressed() !== null) pressLinger = 5; + // The depth eases back to zero and clears the target when it gets there, + // so a tap that lands and lifts inside one frame still shows. + pressHeld = false; }; /** Ref for a tile slot's node: binds it and paints the current geometry. */ @@ -662,6 +921,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { state, tabs, layout, + fit, focusTitle, focusClass, vol, @@ -670,37 +930,61 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { themeName, themeList, colors, + wifi, + media, + menuHidden, + menuChecked, slots, tilesForHit, windowAt: (x: number, y: number) => windowAt(x, y, tilesForHit()), - pad, - setPad, - kb, - setKb, + isFloating, + mode, + setMode, kbLayer, setKbLayer, kbMods, setKbMods, pressed, + pressT, pressDown, pressRelease, drag, setDrag, - closing, - setClosing, - card, - setCard, - openCard, - closeCard, - cardReleased, - cardT, - flyout, - openFlyout, - closeFlyout, + ball, + ballDragging, + bindBall, + ballGrab, + ballDragTo, + ballRelease, + ballSize: BALL, + popup, + popupT, + openPopup, + popupHover, + popupRun, + closePopup, + cc, + ccT, + openCc, + closeCc, + ccFollow, + ccReleased, + ccGrabTrack, + sheet, + sheetT, + sheetListT, + sheetRows, + sheetScroller, + openSheet, + closeSheet, + sheetPush, + sheetBack, + sheetHover, + sheetTap, + keyFly, flyT, - flyT2, - menuHover, - menuRelease, + openKeyFly, + closeKeyFly, keyHover, keyRelease, toast, @@ -713,12 +997,22 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { closeWindow, swapWindows, moveWindow, + floatWindow, + fullWindow, + placeBegin, + placeTo, + placeCancel, setLevel, toggleMute, - media, + mediaOp, + wifiToggle, typeText, typeKey, - chooseTheme, + pointer, + scroll, + click, + dragButton, + menuRun, applyLine, send, }; diff --git a/apps/pocket-remote/strip.tsx b/apps/pocket-remote/strip.tsx new file mode 100644 index 000000000..72980081a --- /dev/null +++ b/apps/pocket-remote/strip.tsx @@ -0,0 +1,217 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/strip.tsx — the top strip: one tab per workspace, the +// active layout's name, the mode switch (stage | deck) and the control +// centre's button. Tap a tab to go there, hold one to bring the focused +// window along. Tap the control centre to open it sticky; hold it and slide +// down onto a slider to adjust and let go. + +import { Index } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import { GLYPH } from "./glyphs.ts"; +import type { GestureHandlers } from "./handlers.ts"; +import { Icon } from "./icons.tsx"; +import { BADGE, CC_BUTTON, MODE, MODE_HALF_W, STRIP, tabAt, within } from "./layout.ts"; +import type { RemoteStore } from "./store.ts"; +import { themed } from "./theme.ts"; + +export function Strip(p: { store: RemoteStore }) { + const tabs = () => p.store.tabs(); + const active = () => p.store.state()?.active ?? -1; + const layoutLabel = () => (p.store.layout() === "scrolling" ? "scrolling" : "dwindle"); + const stage = () => p.store.mode() === "stage"; + return ( + + + {(tab) => ( + + 0 + ? "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#414868]" + : "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#1a1b26]" + } + ref={themed(() => (tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface"))} + /> + 0 + ? "text-sm font-bold text-[#a9b1d6]" + : "text-sm text-[#565f89]" + } + ref={themed(() => (tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim"))} + > + {tab().id === 10 ? "0" : `${tab().id}`} + + + + )} + + {/* layout badge */} + + + {layoutLabel()} + + + + {/* mode switch */} + + + + (stage() ? "fg" : "dim")} size="base" /> + + + (stage() ? "dim" : "fg")} size="base" /> + + + + {/* control centre */} + + + (p.store.cc() ? "accent" : "fg")} size="lg" /> + + + + ); +} + +type Target = + | { kind: "tab"; id: number } + | { kind: "badge" } + | { kind: "mode"; to: "stage" | "deck" } + | { kind: "cc" } + | { kind: "none" }; + +function stripTarget(store: RemoteStore, x: number, y: number): Target { + if (within(x, y, CC_BUTTON)) return { kind: "cc" }; + if (within(x, y, MODE)) return { kind: "mode", to: x < MODE.x + MODE_HALF_W ? "stage" : "deck" }; + if (within(x, y, BADGE)) return { kind: "badge" }; + const tab = tabAt(x, store.tabs()); + return tab ? { kind: "tab", id: tab.id } : { kind: "none" }; +} + +function pressId(t: Target): string | null { + switch (t.kind) { + case "tab": + return `tab:${t.id}`; + case "badge": + return "badge"; + case "mode": + return `mode:${t.to}`; + case "cc": + return "cc"; + default: + return null; + } +} + +/** The strip's touch handlers. A hold on the control centre's button turns + * the rest of that contact into a slide over the card. */ +export function stripHandlers(store: RemoteStore): GestureHandlers { + let down: Target = { kind: "none" }; + let sliding = false; + const reset = () => { + store.pressRelease(); + sliding = false; + }; + return { + onDown: (c) => { + down = stripTarget(store, c.x, c.y); + sliding = false; + store.pressDown(pressId(down)); + }, + onMove: (c) => { + if (sliding) store.ccFollow(c.x, c.y); + }, + onTap: () => { + const t = down; + store.pressRelease(); + switch (t.kind) { + case "tab": + store.workspace(t.id); + break; + case "badge": + store.act("layout"); + break; + case "mode": + store.setMode(t.to); + break; + case "cc": + if (store.cc()) store.closeCc(); + else store.openCc("sticky"); + break; + default: + break; + } + down = { kind: "none" }; + }, + onLongPress: (c) => { + const t = down; + if (t.kind === "tab") { + // Hold a tab: bring the focused window here and follow it. + const focus = store.state()?.focus; + store.pressDown(null); + if (focus) { + store.moveWindow(focus, t.id); + store.workspace(t.id); + } + down = { kind: "none" }; + } else if (t.kind === "cc") { + store.pressDown(null); + store.openCc("hold", null, c.x); + sliding = true; + } + }, + onPanStart: () => { + if (!sliding) store.pressDown(null); + }, + onUp: (c) => { + if (sliding) { + store.ccFollow(c.x, c.y); + store.ccReleased(); + } + reset(); + }, + onCancel: () => { + if (sliding) store.ccReleased(); + reset(); + }, + }; +} diff --git a/apps/pocket-remote/theme.ts b/apps/pocket-remote/theme.ts index 77c3d815f..178de4cd2 100644 --- a/apps/pocket-remote/theme.ts +++ b/apps/pocket-remote/theme.ts @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/theme.ts — the remote wears the desktop's theme. Omarchy // publishes its palette as colors.toml; the daemon forwards the keys the // remote uses (protocol ThemeColors) whenever the theme changes, and every @@ -37,6 +38,8 @@ export type Role = | "surfaceDark" // bgColor = bgDark | "surfaceMuted" // bgColor = muted | "surfaceMutedDim" // bgColor = muted at 50% + | "surfaceRaised" // bgColor = muted at 25% (a popup's body over the surface) + | "surfaceVeil" // bgColor = bgDark at 70% (behind a sheet) | "accentFill" // bgColor = accent | "accentTint" // bgColor = accent at 25% | "dangerFill" // bgColor = red @@ -46,6 +49,10 @@ export type Role = | "textAccent" // textColor = accent | "textOnAccent" // textColor = bgDark | "textDanger" // textColor = red + | "textOk" // textColor = green + | "textWarn" // textColor = yellow + | "okFillDot" // bgColor = green (a status dot) + | "warnFill" // bgColor = yellow | "fgFill" // bgColor = fg (icon strokes) | "fgDimFill" // bgColor = fgDim | "borderMuted" // borderColor = muted @@ -65,6 +72,10 @@ function paint(role: Role, c: ThemeColors): [Prop, string] { return ["bgColor", c.muted]; case "surfaceMutedDim": return ["bgColor", c.muted + "80"]; + case "surfaceRaised": + return ["bgColor", c.muted + "40"]; + case "surfaceVeil": + return ["bgColor", c.bgDark + "b3"]; case "accentFill": return ["bgColor", c.accent]; case "accentTint": @@ -83,6 +94,14 @@ function paint(role: Role, c: ThemeColors): [Prop, string] { return ["textColor", c.bgDark]; case "textDanger": return ["textColor", c.red]; + case "textOk": + return ["textColor", c.green]; + case "textWarn": + return ["textColor", c.yellow]; + case "okFillDot": + return ["bgColor", c.green]; + case "warnFill": + return ["bgColor", c.yellow]; case "fgFill": return ["bgColor", c.fg]; case "fgDimFill": diff --git a/framework/compiler/bake-font.ts b/framework/compiler/bake-font.ts index bdd56544b..3b12845ee 100644 --- a/framework/compiler/bake-font.ts +++ b/framework/compiler/bake-font.ts @@ -66,6 +66,12 @@ export interface BakeOptions { regularTtf?: string; boldTtf?: string; monoTtf?: string; + /** Faces tried, in order, for a codepoint the slot's own face does not + * map — an icon font whose glyphs have to sit in the same atlas as the + * text they label. A fallback glyph keeps its own advance, scaled to the + * slot's px through its own unitsPerEm, so a double-width symbol stays + * centred in its box. */ + fallbackTtfs?: string[]; } // --------------------------------------------------------------------------- @@ -276,6 +282,7 @@ export function bakeSlot( bold: boolean, chars: number[], rasterDensity = 1, + fallbacks: readonly Font[] = [], ): BakedAtlas { rasterDensity = checkedRasterDensity(rasterDensity); const upm = font.unitsPerEm; @@ -304,10 +311,23 @@ export function bakeSlot( for (const cp of chars) { if (cp === TOFU_CODEPOINT) continue; // reserved for gid 0 const ch = String.fromCodePoint(cp); - const gi = font.charToGlyphIndex(ch); + // The slot's own face first; a codepoint it does not map comes from the + // first fallback that does. Metrics scale through the SOURCE face's + // unitsPerEm (opentype.js stamps it on the glyph path), so the fallback + // glyph lands on this slot's baseline at this slot's px. + let source = font; + let gi = font.charToGlyphIndex(ch); + for (let f = 0; gi <= 0 && f < fallbacks.length; f++) { + const candidate = fallbacks[f]!.charToGlyphIndex(ch); + if (candidate > 0) { + source = fallbacks[f]!; + gi = candidate; + } + } if (gi <= 0) continue; - const glyph = font.glyphs.get(gi); - const advance = Math.max(0, Math.min(255, Math.round((glyph.advanceWidth ?? 0) * scale))); + const glyph = source.glyphs.get(gi); + const sourceScale = source === font ? scale : px / source.unitsPerEm; + const advance = Math.max(0, Math.min(255, Math.round((glyph.advanceWidth ?? 0) * sourceScale))); const path = glyph.getPath(0, baseline, px); // Keep every metric byte-for-byte equivalent to the density-1 bake. The // higher-density contour gets more curve subdivisions, then is scaled into @@ -426,6 +446,8 @@ export async function bakeAtlases(opts: BakeOptions): Promise { bold: null, mono: null, }; + const fallbacks: Font[] = []; + for (const path of opts.fallbackTtfs ?? []) fallbacks.push(await loadFont(path)); const results: BakedAtlas[] = []; for (const slot of [...opts.slots].sort((a, b) => a - b)) { if (slot < 0 || slot >= MAX_FONT_SLOTS) { @@ -440,7 +462,7 @@ export async function bakeAtlases(opts: BakeOptions): Promise { ? (opts.boldTtf ?? DEFAULT_BOLD) : (opts.regularTtf ?? DEFAULT_REGULAR), ); - results.push(bakeSlot(fonts[key]!, slot, px, bold, chars, rasterDensity)); + results.push(bakeSlot(fonts[key]!, slot, px, bold, chars, rasterDensity, fallbacks)); } return results; } diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index 61c95ec3e..86337f3cf 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -1,13 +1,14 @@ // Boots the built Pocket Remote bundle in the headless sim and drives it the // way the daemon would: hello, theme, a Hyprland snapshot. No svc channel // exists in the sim, so the app publishes its store as globalThis.__pocketRemote -// and the test feeds host lines straight into the reducer, then taps the +// and the test feeds host lines straight into the reducer, then touches the // screen through the real touch path. import { describe, expect, test } from "bun:test"; import { bootWorld } from "../hosts/sim/sim.ts"; import type { HostState } from "../apps/pocket-remote/protocol.ts"; -import { STAGE, TAB_W } from "../apps/pocket-remote/layout.ts"; +import { keyboardKeys, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts"; +import { BALL_HOME, CC_BUTTON, MODE, MODE_HALF_W, SHEET_LIST, sheetRowRect, STAGE, TAB_W } from "../apps/pocket-remote/layout.ts"; import type { RemoteStore } from "../apps/pocket-remote/store.ts"; const HZ = 60; @@ -18,7 +19,7 @@ function pack(x: number, y: number, id = 0): number { const SNAPSHOT: HostState = { t: "state", - mon: { w: 1440, h: 900 }, + mon: { w: 1440, h: 900, x: 0, y: 0 }, ws: [{ id: 1, n: 2 }, { id: 2, n: 0 }], active: 1, focus: "0x55f90cb39300", @@ -46,6 +47,30 @@ function texts(tree: unknown): string[] { return out; } +/** A connected remote over a fake svc channel: `sent` is what it asked + * the laptop for, in order. */ +async function connected(): Promise<{ world: Awaited>; store: RemoteStore; sent: unknown[] }> { + const sent: unknown[] = []; + const svc = { open: () => true, poll: () => [], send: (line: unknown) => sent.push(line) }; + const world = await bootWorld("pocket-remote-main", HZ, { __pocketRemoteSvc: svc }, undefined, { width: 480, height: 320 }); + const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote; + if (!store) throw new Error("the bundle did not publish its store"); + world.frame(0); + store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); + store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); + store.applyLine(SNAPSHOT); + for (let i = 0; i < 30; i += 1) world.frame(0); + sent.length = 0; + return { world, store, sent }; +} + +const tap = (world: Awaited>, x: number, y: number, settle = 20) => { + world.frame(0, undefined, [pack(x, y)]); + world.frame(0, undefined, [pack(x, y)]); + world.frame(0, undefined, []); + for (let i = 0; i < settle; i += 1) world.frame(0); +}; + describe("pocket-remote in the sim", () => { test("connects, mirrors a snapshot into tiles, and switches workspace from the strip", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); @@ -57,7 +82,7 @@ describe("pocket-remote in the sim", () => { expect(store.link()).toBe("off"); expect(texts(world.getTree()).join(" ")).toContain("Pocket Remote"); - store.applyLine({ t: "hello", proto: 1, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); + store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); store.applyLine({ t: "theme", name: "tokyo-night", @@ -68,11 +93,14 @@ describe("pocket-remote in the sim", () => { }, }); store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); + store.applyLine({ t: "cc", wifi: { on: 1, ssid: "Petite Auberge", sig: 54 }, media: { st: "paused", title: "Blue in Green", artist: "Miles Davis" } }); store.applyLine(SNAPSHOT); for (let i = 0; i < 30; i += 1) world.frame(0); expect(store.link()).toBe("up"); expect(store.vol()).toBeCloseTo(0.4); + expect(store.wifi().ssid).toBe("Petite Auberge"); + expect(store.media().st).toBe("paused"); expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.label())).toEqual(["foot", "chromium"]); const shown = texts(world.getTree()); expect(shown).toContain("foot"); @@ -90,24 +118,97 @@ describe("pocket-remote in the sim", () => { // Tap workspace tab 2 on the strip: optimistic switch, tiles of ws 1 fade. const x = store.tabs()[1]!.x + TAB_W / 2; - const y = 14; - world.frame(0, undefined, [pack(x, y)]); - world.frame(0, undefined, [pack(x, y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 20; i += 1) world.frame(0); + tap(world, x, 14); expect(store.state()?.active).toBe(2); expect(store.slots.filter((slot) => slot.a !== null).length).toBe(0); expect(texts(world.getTree()).join(" ")).toContain("empty workspace"); + expect(texts(world.getTree()).join(" ")).toContain("Terminal"); // Render a frame: the panel is 480x320 logical. const pixels = world.render(); expect(pixels.length).toBe(480 * 320 * 4); }); + test("the ball opens Omarchy's menu as a sheet, a submenu opens in place, back returns", async () => { + const { world, store, sent } = await connected(); + tap(world, BALL_HOME.x + 22, BALL_HOME.y + 22); + expect(store.sheet()?.at).toBe("root"); + let shown = texts(world.getTree()).join(" "); + expect(shown).toContain("Go"); + expect(shown).toContain("Trigger"); + expect(shown).toContain("System"); + // Trigger is the third root row: second column, second row. + const trigger = sheetRowRect(2); + tap(world, SHEET_LIST.x + trigger.x + 60, SHEET_LIST.y + trigger.y + 19); + expect(store.sheet()?.at).toBe("trigger"); + shown = texts(world.getTree()).join(" "); + expect(shown).toContain("Capture"); + expect(shown).not.toContain("Install"); + // A row with an action runs on the laptop and closes the sheet. + const rows = store.sheetRows(); + const emoji = rows.findIndex((row) => row.id === "trigger.emoji"); + expect(emoji).toBeGreaterThanOrEqual(0); + const r = sheetRowRect(emoji); + tap(world, SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 19); + expect(store.sheet()).toBeNull(); + expect(sent).toContainEqual({ t: "menu", id: "trigger.emoji" }); + // Hidden rows vanish from the sheet. + store.applyLine({ t: "menu", hide: ["trigger.emoji"], check: [] }); + store.openSheet(); + store.sheetPush("trigger"); + world.frame(0); + expect(store.sheetRows().map((row) => row.id)).not.toContain("trigger.emoji"); + store.sheetBack(); + expect(store.sheet()?.at).toBe("root"); + store.sheetBack(); + expect(store.sheet()).toBeNull(); + }); + + test("the control centre opens from the strip and a tap outside closes it", async () => { + const { world, store, sent } = await connected(); + tap(world, CC_BUTTON.x + CC_BUTTON.w / 2, CC_BUTTON.y + CC_BUTTON.h / 2); + expect(store.cc()?.mode).toBe("sticky"); + expect(texts(world.getTree()).join(" ")).toContain("Wi-Fi"); + // The volume icon mutes. + store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); + tap(world, 204 + 28, 32 + 166 + 18); + expect(sent).toContainEqual({ t: "mute" }); + tap(world, 40, 300); + expect(store.cc()).toBeNull(); + }); + + test("the deck types through the wire and the trackpad moves the pointer", async () => { + const { world, store, sent } = await connected(); + tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); + expect(store.mode()).toBe("deck"); + expect(texts(world.getTree()).join(" ")).toContain("space"); + const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; + tap(world, f.x + f.w / 2, f.y + f.h / 2); + expect(sent).toContainEqual({ t: "type", text: "f" }); + // ctrl then c: a chord. + const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; + tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); + const c = keyboardKeys("lower").find((k) => k.def.label === "c")!; + tap(world, c.x + c.w / 2, c.y + c.h / 2); + expect(sent).toContainEqual({ t: "key", k: "c", mods: ["ctrl"] }); + // A stroke across the trackpad. + const y = TRACKPAD.y + 50; + for (let i = 0; i < 12; i += 1) world.frame(0, undefined, [pack(100 + i * 6, y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 5; i += 1) world.frame(0); + const moves = sent.filter((line) => (line as { t: string }).t === "ptr") as { dx: number; dy: number }[]; + expect(moves.length).toBeGreaterThan(3); + expect(moves.reduce((sum, m) => sum + m.dx, 0)).toBeGreaterThan(60); + expect(sent).not.toContainEqual({ t: "click", b: "l" }); + // A tap on the trackpad clicks. + tap(world, 200, y); + expect(sent).toContainEqual({ t: "click", b: "l" }); + }); + test("a hello that is still pending shows the approval screen", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; - store.applyLine({ t: "hello", proto: 1, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "pending" }); + store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "pending" }); world.frame(0); expect(store.link()).toBe("pending"); expect(texts(world.getTree()).join(" ")).toContain("approve this remote on x1nano-omarchy"); diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 9d8d9a003..fcf7b130f 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -1,3 +1,9 @@ +// Pocket Remote: the wire constants pinned to spec.ts, framing, protocol +// clipping, the action table's invariants, the layout arithmetic (stage, +// ball, popup, control centre, menu sheet, deck), the Hyprland -> snapshot +// reduction, the Omarchy readers (levels, theme, network, MPRIS), the menu +// source parser and the baked menu table, and the deck's keyboard. + import { describe, expect, test } from "bun:test"; import { SVC_POLL_BUF, @@ -10,45 +16,88 @@ import { WIRE_PORT, WIRE_VERSION, } from "../contracts/spec/spec.ts"; -import { ACTIONS, actionById, actionsOf, DOCK, MENU_ROUTES, PAD_PAGES } from "../apps/pocket-remote/actions.ts"; +import { ACTIONS, actionById, actionsOf, LAUNCHERS } from "../apps/pocket-remote/actions.ts"; +import { GLYPH } from "../apps/pocket-remote/glyphs.ts"; import * as wire from "../apps/pocket-remote/host/wire.ts"; import { buildState, luaWindow, luaWorkspace, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; -import { paletteFrom, parseBrightnessctl, parseColorsToml, parsePactlVolume, wtypeArgs } from "../apps/pocket-remote/host/omarchy.ts"; -import { chipAt, chipRects, keyAt, keyboardKeys, keysymFor, keyToLine } from "../apps/pocket-remote/keyboard-layout.ts"; +import { childrenOf, normalizeMenu, parentOf, parseMenuJsonc, stripJsonc } from "../apps/pocket-remote/host/menu-source.ts"; +import { + evaluateMenuConditions, + paletteFrom, + parseBrightnessctl, + parseColorsToml, + parseMprisNames, + parseMprisPlayer, + parseNetworkStatus, + parsePactlVolume, + parseRadio, + runMenuEntry, + wtypeArgs, +} from "../apps/pocket-remote/host/omarchy.ts"; +import { + bubbleRect, + chipAt, + chipRects, + KEYBOARD, + keyAt, + keyboardKeys, + keysymFor, + keyToLine, + TRACKPAD, +} from "../apps/pocket-remote/keyboard-layout.ts"; import { approach, - CARD, - CARD_TRACK_W, - cardHit, - cardRowAt, - DOCK as DOCK_RECT, - DOCK_SLOTS, - DOCK_SLOT_W, - DOCK_X0, - dockSlotAt, - dockSlotX, + BADGE, + BALL, + BALL_HOME, + BALL_MARGIN, + BALL_Y_MAX, + BALL_Y_MIN, + ballHit, + ballSnap, + CC, + CC_BUTTON, + CC_ROW_Y, + CC_TRACK_W, + CC_TRACK_X, + ccHit, + ccRowAt, easeProgress, fitMonitor, - FLY_BOTTOM, - FLY_W, - FLY_X, - flyItemAt, - flyItemY, + launchChipAt, + launchChipRect, + MODE, + placePopup, + pointerGain, + POPUP_ROW_H, + popupRowAt, SCREEN_H, SCREEN_W, + SHEET, + SHEET_LIST, + sheetContentH, + sheetMaxScroll, + sheetRowAt, + sheetRowRect, STAGE, + stageToMonitor, stageWindows, stagger, STRIP, stripTabs, swapDirection, + TAB_MAX, + TAB_W, + TAB_X0, tabAt, tileRect, trackDelta, trackFill, windowAt, } from "../apps/pocket-remote/layout.ts"; -import { clipTitle, parseLines, TITLE_MAX, WINDOWS_MAX, type HostState } from "../apps/pocket-remote/protocol.ts"; +import { MENU, MENU_OMARCHY_VERSION } from "../apps/pocket-remote/menu.ts"; +import { MENU_DOT_EMOJI, MENU_ROOT, menuChildren, menuItem, menuParent, menuTitle, menuVisible } from "../apps/pocket-remote/menu-tree.ts"; +import { clipTitle, parseLines, REMOTE_PROTO, TITLE_MAX, WINDOWS_MAX, type HostState } from "../apps/pocket-remote/protocol.ts"; import { isThemeColors, themeTitle, TOKYO_NIGHT } from "../apps/pocket-remote/theme.ts"; describe("pocket-remote wire", () => { @@ -60,33 +109,33 @@ describe("pocket-remote wire", () => { expect(wire.WIRE_MAX_PAYLOAD).toBe(WIRE_MAX_PAYLOAD); expect(wire.WIRE_BEACON_PORT).toBe(WIRE_BEACON_PORT); expect(wire.WIRE_PORT).toBe(WIRE_PORT); - expect(wire.WIRE_MSG.ping).toBe(WIRE_MSG.ping); - expect(wire.WIRE_MSG.pong).toBe(WIRE_MSG.pong); - expect(wire.WIRE_MSG.ctrl).toBe(WIRE_MSG.ctrl); + expect(WIRE_MSG).toMatchObject(wire.WIRE_MSG); expect(wire.SVC_POLL_BUF).toBe(SVC_POLL_BUF); + expect(REMOTE_PROTO).toBe(2); }); test("frames round-trip through the parser, hello parses incrementally", () => { const parser = new wire.FrameParser(); - const a = wire.encodeCtrl('{"t":"hello"}'); - const b = wire.encodeFrame(wire.WIRE_MSG.ping, new Uint8Array([1, 2, 3, 4])); + const a = wire.encodeCtrl('{"t":"ping"}'); + const b = wire.encodeFrame(WIRE_MSG.pong, new Uint8Array([1, 2, 3, 4])); const joined = new Uint8Array(a.length + b.length); joined.set(a); joined.set(b, a.length); - expect(parser.push(joined.subarray(0, 5))).toEqual([]); - const frames = parser.push(joined.subarray(5)); - expect(frames.map((f) => f.type)).toEqual([wire.WIRE_MSG.ctrl, wire.WIRE_MSG.ping]); - expect(new TextDecoder().decode(frames[0]!.payload)).toBe('{"t":"hello"}'); + const frames = [...parser.push(joined.subarray(0, 5)), ...parser.push(joined.subarray(5))]; + expect(frames.length).toBe(2); + expect(frames[0]!.type).toBe(WIRE_MSG.ctrl); + expect(new TextDecoder().decode(frames[0]!.payload)).toBe('{"t":"ping"}'); + expect(frames[1]!.type).toBe(WIRE_MSG.pong); + expect([...frames[1]!.payload]).toEqual([1, 2, 3, 4]); - const app = new TextEncoder().encode("pocket-remote"); - const hello = new Uint8Array(7 + app.length); + const hello = new Uint8Array(7 + 13); new DataView(hello.buffer).setUint32(0, WIRE_MAGIC, true); hello[4] = WIRE_VERSION; - hello[6] = app.length; - hello.set(app, 7); + hello[6] = 13; + hello.set(new TextEncoder().encode("pocket-remote"), 7); expect(wire.parseHello(hello.subarray(0, 10))).toBeNull(); - expect(wire.parseHello(hello)).toEqual({ app: "pocket-remote", consumed: hello.length }); - expect(() => wire.parseHello(new Uint8Array([1, 2, 3, 4, 5, 6, 7]))).toThrow("bad hello magic"); + expect(wire.parseHello(hello)).toEqual({ app: "pocket-remote", consumed: 20 }); + expect(() => wire.parseHello(new Uint8Array(8))).toThrow(/magic/); expect(wire.encodeHelloAck().length).toBe(8); }); @@ -96,78 +145,59 @@ describe("pocket-remote wire", () => { expect(view.getUint32(0, true)).toBe(WIRE_BEACON_MAGIC); expect(beacon[4]).toBe(WIRE_VERSION); expect(view.getUint16(6, true)).toBe(8622); - expect(beacon[8]).toBe("pocket-remote".length); - expect(new TextDecoder().decode(beacon.subarray(9, 9 + 13))).toBe("pocket-remote"); - expect(beacon[9 + 13]).toBe(6); + expect(beacon[8]).toBe(13); + expect(new TextDecoder().decode(beacon.subarray(9, 22))).toBe("pocket-remote"); + expect(beacon[22]).toBe(6); }); }); describe("pocket-remote protocol", () => { test("parseLines skips torn or foreign lines", () => { - expect(parseLines('{"t":"toast","text":"a"}\n{bad\n\n{"x":1}\n{"t":"auth","auth":"ok"}')).toEqual([ - { t: "toast", text: "a" }, - { t: "auth", auth: "ok" }, - ]); + const lines = parseLines<{ t: string }>('{"t":"a"}\n{"t":"b"\n\n{"x":1}\n{"t":"c"}'); + expect(lines.map((l) => l.t)).toEqual(["a", "c"]); }); test("titles clip to TITLE_MAX code points with an ellipsis", () => { - expect(clipTitle("evan@x1nano-omarchy:~")).toBe("evan@x1nano-omarchy:~"); - const long = "ChatGPT - Chromium - a very long window title indeed"; + expect(clipTitle("short")).toBe("short"); + const long = "x".repeat(TITLE_MAX + 5); expect(Array.from(clipTitle(long)).length).toBe(TITLE_MAX); expect(clipTitle(long).endsWith("…")).toBe(true); - expect(clipTitle(" spaced out ")).toBe("spaced out"); + expect(clipTitle(" a b\n c ")).toBe("a b c"); }); test("a full snapshot of WINDOWS_MAX windows fits one poll batch", () => { - const win = Array.from({ length: WINDOWS_MAX }, (_, i) => ({ - a: `0x55f90cb${(39300 + i).toString(16)}`, - c: "chromium", - ti: clipTitle("ChatGPT - Chromium - a very long window title indeed"), - ws: (i % 9) + 1, - x: 712, - y: 38, - w: 1416, - h: 850, - f: 1 as const, - fs: 1 as const, - p: 1 as const, - })); const state: HostState = { t: "state", - mon: { w: 1440, h: 900 }, + mon: { w: 3840, h: 2160, x: 0, y: 0 }, ws: Array.from({ length: 10 }, (_, i) => ({ id: i + 1, n: 3 })), - active: 2, - focus: win[0]!.a, - win, + active: 10, + focus: "0x55f90cb39300", layout: "scrolling", special: 1, + win: Array.from({ length: WINDOWS_MAX }, (_, i) => ({ + a: `0x55f90cb3${(0x9300 + i).toString(16)}`, + c: "org.gnome.Nautilus.Something", + ti: "x".repeat(TITLE_MAX), + ws: (i % 10) + 1, + x: 1234, + y: 1234, + w: 3840, + h: 2160, + f: 1 as const, + fs: 2 as const, + p: 1 as const, + })), }; expect(JSON.stringify(state).length).toBeLessThan(SVC_POLL_BUF); }); }); describe("pocket-remote actions", () => { - test("ids are unique, every dock and pad entry exists, holds are the destructive ones", () => { + test("ids are unique, every launcher exists, commands are argv or Lua", () => { const ids = ACTIONS.map((a) => a.id); expect(new Set(ids).size).toBe(ids.length); - for (const id of DOCK) expect(actionById(id)).toBeDefined(); - for (const page of PAD_PAGES) for (const id of page.actions) expect(actionById(id)).toBeDefined(); - expect(ACTIONS.filter((a) => a.hold).map((a) => a.id).sort()).toEqual(["close", "closeAll", "suspend"]); + for (const id of LAUNCHERS) expect(actionById(id)?.group).toBe("launch"); expect(actionById("nope")).toBeUndefined(); - // The menu cascade: every route and leaf is a real action, no leaf takes - // a hold (a slide-and-release cannot express one), six leaves at most. - for (const route of MENU_ROUTES) { - expect(actionById(route.id)?.group).toBe("launch"); - expect(route.leaves.length).toBeLessThanOrEqual(6); - for (const leaf of route.leaves) { - const def = actionById(leaf); - expect(def).toBeDefined(); - expect(def!.hold).toBeUndefined(); - } - } - }); - - test("actions run the command Omarchy binds, never a shell string", () => { for (const action of ACTIONS) { if ("exec" in action.run) { expect(action.run.exec.length).toBeGreaterThan(0); @@ -180,17 +210,28 @@ describe("pocket-remote actions", () => { } } expect(actionById("terminal")!.run).toEqual({ exec: ["omarchy-launch-terminal"] }); - expect(actionById("close")!.run).toEqual({ dispatch: "hl.dsp.window.close()" }); expect(actionById("wsNext")!.run).toEqual({ dispatch: 'hl.dsp.focus({ workspace = "e+1" })' }); expect(actionById("layout")!.run).toEqual({ exec: ["omarchy-hyprland-workspace-layout-toggle"] }); expect(actionById("play")!.run).toEqual({ exec: ["omarchy-shell", "media", "playPause"] }); - expect(actionsOf("media").length).toBe(4); + expect(actionsOf("media").length).toBe(3); }); }); describe("pocket-remote layout", () => { const mon = { w: 1440, h: 900 }; + test("the strip and the stage cover the screen; the strip's controls clear the tabs", () => { + expect(STRIP.y).toBe(0); + expect(STAGE.y).toBe(STRIP.h); + expect(STAGE.y + STAGE.h).toBe(SCREEN_H); + const tabsEnd = TAB_X0 + TAB_MAX * TAB_W; + expect(BADGE.x).toBeGreaterThanOrEqual(tabsEnd); + expect(BADGE.x + BADGE.w).toBeLessThanOrEqual(MODE.x); + expect(MODE.x + MODE.w).toBeLessThanOrEqual(CC_BUTTON.x); + expect(CC_BUTTON.x + CC_BUTTON.w).toBeLessThanOrEqual(SCREEN_W); + for (const r of [BADGE, MODE, CC_BUTTON]) expect(r.y + r.h).toBeLessThanOrEqual(STRIP.h); + }); + test("a 16:10 monitor fits the stage centred, preserving aspect", () => { const fit = fitMonitor(mon); expect(fit.rect.w).toBeLessThanOrEqual(STAGE.w); @@ -200,91 +241,142 @@ describe("pocket-remote layout", () => { expect(fit.rect.y + fit.rect.h / 2).toBeCloseTo(STAGE.y + STAGE.h / 2, -1); }); - test("tiles map window geometry to stage pixels and stay hit-testable", () => { + test("tiles map window geometry to stage pixels, stay hit-testable and map back", () => { const fit = fitMonitor(mon); - const foot = { a: "0xa", c: "foot", ti: "", ws: 1, x: 12, y: 38, w: 701, h: 850 }; - const chrome = { a: "0xb", c: "chromium", ti: "", ws: 1, x: 725, y: 38, w: 703, h: 850 }; - const ra = tileRect(foot, fit); - const rb = tileRect(chrome, fit); - expect(ra.x).toBeLessThan(rb.x); - expect(ra.x + ra.w).toBeLessThanOrEqual(rb.x); - const tiles = [ - { a: "0xa", rect: ra }, - { a: "0xb", rect: rb }, - ]; - expect(windowAt(ra.x + 2, ra.y + 2, tiles)).toBe("0xa"); - expect(windowAt(rb.x + rb.w - 2, rb.y + 2, tiles)).toBe("0xb"); - expect(windowAt(STAGE.x + 1, STAGE.y + 1, tiles)).toBeNull(); - expect(swapDirection(ra, rb)).toBe("r"); - expect(swapDirection(rb, ra)).toBe("l"); - expect(swapDirection({ x: 0, y: 0, w: 10, h: 10 }, { x: 0, y: 20, w: 10, h: 10 })).toBe("d"); + const left = tileRect({ a: "a", c: "foot", ti: "", ws: 1, x: 0, y: 0, w: 720, h: 900 }, fit); + const right = tileRect({ a: "b", c: "web", ti: "", ws: 1, x: 720, y: 0, w: 720, h: 900 }, fit); + expect(left.x).toBe(fit.rect.x); + expect(left.x + left.w).toBe(right.x); + expect(right.x + right.w).toBe(fit.rect.x + fit.rect.w); + const tiles = [{ a: "a", rect: left }, { a: "b", rect: right }]; + expect(windowAt(left.x + 5, left.y + 5, tiles)).toBe("a"); + expect(windowAt(right.x + 5, right.y + 5, tiles)).toBe("b"); + expect(windowAt(0, 0, tiles)).toBeNull(); + expect(swapDirection(left, right)).toBe("r"); + expect(swapDirection(right, left)).toBe("l"); + const back = stageToMonitor(right.x, right.y, fit); + expect(Math.abs(back.x - 720)).toBeLessThanOrEqual(2); + expect(Math.abs(back.y)).toBeLessThanOrEqual(2); + const tiny = tileRect({ a: "c", c: "x", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1 }, fit); + expect(tiny.w).toBeGreaterThanOrEqual(8); }); test("floating windows paint after tiled ones on the active workspace only", () => { const state: HostState = { t: "state", mon, - ws: [{ id: 1, n: 2 }, { id: 2, n: 1 }], + ws: [{ id: 1, n: 3 }], active: 1, focus: null, layout: "dwindle", win: [ - { a: "0x1", c: "a", ti: "", ws: 1, x: 0, y: 0, w: 10, h: 10, f: 1 }, - { a: "0x2", c: "b", ti: "", ws: 1, x: 0, y: 0, w: 10, h: 10 }, - { a: "0x3", c: "c", ti: "", ws: 2, x: 0, y: 0, w: 10, h: 10 }, + { a: "f", c: "", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1, f: 1 }, + { a: "t", c: "", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1 }, + { a: "o", c: "", ti: "", ws: 2, x: 0, y: 0, w: 1, h: 1 }, ], }; - expect(stageWindows(state).map((w) => w.a)).toEqual(["0x2", "0x1"]); + expect(stageWindows(state).map((w) => w.a)).toEqual(["t", "f"]); }); test("the strip lists every workspace, the active one, and one empty tab after", () => { - expect(stripTabs([{ id: 1, n: 2 }], 1).map((t) => t.id)).toEqual([1, 2]); - expect(stripTabs([{ id: 1, n: 2 }, { id: 2, n: 0 }], 2).map((t) => t.id)).toEqual([1, 2]); - expect(stripTabs([{ id: 1, n: 2 }, { id: 3, n: 1 }], 1).map((t) => t.id)).toEqual([1, 3, 4]); - expect(stripTabs([{ id: 1, n: 1 }], 5).map((t) => t.id)).toEqual([1, 5]); - const ten = stripTabs(Array.from({ length: 10 }, (_, i) => ({ id: i + 1, n: 1 })), 10); - expect(ten.length).toBe(10); - const tabs = stripTabs([{ id: 1, n: 2 }, { id: 2, n: 1 }], 1); - expect(tabAt(tabs[1]!.x + 3, tabs)?.id).toBe(2); - expect(tabAt(tabs[0]!.x - 1, tabs)).toBeNull(); - }); - - test("the three bands cover the screen exactly and the dock fits eleven slots", () => { - expect(STRIP.y).toBe(0); - expect(STAGE.y).toBe(STRIP.h); - expect(DOCK_RECT.y).toBe(STAGE.y + STAGE.h); - expect(DOCK_RECT.y + DOCK_RECT.h).toBe(SCREEN_H); - expect(DOCK_SLOTS).toBe(11); - expect(dockSlotX(DOCK_SLOTS - 1) + DOCK_SLOT_W).toBeLessThanOrEqual(SCREEN_W); - expect(dockSlotAt(DOCK_X0 - 1)).toBeNull(); - expect(dockSlotAt(DOCK_X0)).toBe(0); - expect(dockSlotAt(dockSlotX(DOCK_SLOTS - 1) + DOCK_SLOT_W - 1)).toBe(DOCK_SLOTS - 1); - expect(dockSlotAt(dockSlotX(DOCK_SLOTS))).toBeNull(); - }); - - test("levels card: rows, tracks and toggles hit-test; drags are relative", () => { - expect(cardHit(CARD.x - 1, CARD.y + 20)).toBeNull(); - expect(cardHit(CARD.x + 20, CARD.y + 30)).toEqual({ kind: "icon", row: 0 }); - expect(cardHit(CARD.x + 150, CARD.y + 30)).toEqual({ kind: "track", row: 0 }); - expect(cardHit(CARD.x + 150, CARD.y + 90)).toEqual({ kind: "track", row: 1 }); - expect(cardHit(CARD.x + 20, CARD.y + 90)).toEqual({ kind: "icon", row: 1 }); - expect(cardHit(CARD.x + 150, CARD.y + 125)).toEqual({ kind: "card" }); - expect(cardRowAt(CARD.y + 20)).toBe(0); - expect(cardRowAt(CARD.y + 100)).toBe(1); - expect(trackDelta(CARD_TRACK_W)).toBeCloseTo(1); - expect(trackDelta(-CARD_TRACK_W / 4)).toBeCloseTo(-0.25); - expect(trackFill(0.4)).toBe(Math.round(0.4 * CARD_TRACK_W)); - expect(trackFill(2)).toBe(CARD_TRACK_W); - }); - - test("menu cascade: six routes stack up from the dock and stay under the strip", () => { - const top = flyItemY(MENU_ROUTES.length - 1); - expect(top).toBeGreaterThanOrEqual(STRIP.h); - expect(flyItemY(0) + 34).toBeLessThanOrEqual(FLY_BOTTOM); - expect(flyItemAt(FLY_X + 10, flyItemY(0) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBe(0); - expect(flyItemAt(FLY_X + 10, flyItemY(3) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBe(3); - expect(flyItemAt(FLY_X + FLY_W + 40, flyItemY(0) + 10, FLY_X, FLY_W, MENU_ROUTES.length)).toBeNull(); - expect(flyItemAt(FLY_X + 10, 5, FLY_X, FLY_W, MENU_ROUTES.length)).toBeNull(); + const tabs = stripTabs([{ id: 1, n: 2 }, { id: 3, n: 1 }], 3); + expect(tabs.map((t) => t.id)).toEqual([1, 3, 4]); + expect(tabs[2]!.n).toBe(0); + expect(stripTabs([{ id: 1, n: 0 }], 1).map((t) => t.id)).toEqual([1]); + expect(stripTabs([], 5).map((t) => t.id)).toEqual([5]); // already empty: no trailing tab + expect(stripTabs(Array.from({ length: 12 }, (_, i) => ({ id: i + 1, n: 1 })), 1).length).toBe(TAB_MAX); + expect(tabAt(tabs[1]!.x + 3, tabs)!.id).toBe(3); + expect(tabAt(0, tabs)).toBeNull(); + }); + + test("launch chips sit centred on the empty stage and hit-test", () => { + const rects = [0, 1, 2].map((i) => launchChipRect(i, 3)); + expect(rects[0]!.x).toBeGreaterThan(0); + expect(rects[2]!.x + rects[2]!.w).toBeLessThan(SCREEN_W); + expect(SCREEN_W - (rects[2]!.x + rects[2]!.w)).toBeCloseTo(rects[0]!.x, -1); + expect(launchChipAt(rects[1]!.x + 10, rects[1]!.y + 10, 3)).toBe(1); + expect(launchChipAt(rects[1]!.x + 10, rects[1]!.y - 10, 3)).toBeNull(); + }); + + test("the ball snaps to the nearer edge, keeps its height, stays under the strip", () => { + expect(BALL_HOME.x + BALL).toBeLessThanOrEqual(SCREEN_W); + expect(ballSnap(100, 150)).toEqual({ x: BALL_MARGIN, y: 150 }); + expect(ballSnap(300, 150)).toEqual({ x: SCREEN_W - BALL - BALL_MARGIN, y: 150 }); + expect(ballSnap(300, 0).y).toBe(BALL_Y_MIN); + expect(ballSnap(300, 900).y).toBe(BALL_Y_MAX); + const ball = { x: 400, y: 200 }; + expect(ballHit(420, 220, ball)).toBe(true); + expect(ballHit(398, 220, ball)).toBe(true); // 4 px of slack + expect(ballHit(380, 220, ball)).toBe(false); + }); + + test("a popup opens below its anchor when there is room, above otherwise, and stays on the stage", () => { + const below = placePopup(240, 60, 3); + expect(below.below).toBe(true); + expect(below.y).toBeGreaterThan(60); + expect(below.h).toBe(3 * POPUP_ROW_H + 8); + const above = placePopup(240, 300, 3); + expect(above.below).toBe(false); + expect(above.y + above.h).toBeLessThan(300); + const edge = placePopup(5, 60, 3); + expect(edge.x).toBeGreaterThanOrEqual(STAGE.x + 6); + expect(edge.caretX).toBeGreaterThanOrEqual(edge.x + 16); + const far = placePopup(478, 60, 3); + expect(far.x + far.w).toBeLessThanOrEqual(SCREEN_W - 6); + expect(popupRowAt(below, below.x + 10, below.y + 4 + 10)).toBe(0); + expect(popupRowAt(below, below.x + 10, below.y + 4 + POPUP_ROW_H * 2 + 10)).toBe(2); + expect(popupRowAt(below, below.x - 1, below.y + 10)).toBeNull(); + }); + + test("the control centre hangs from its button and hit-tests its tiles, transport and sliders", () => { + expect(CC.x + CC.w).toBeLessThanOrEqual(SCREEN_W); + expect(CC.y).toBeGreaterThanOrEqual(STRIP.h); + expect(CC.y + CC.h).toBeLessThanOrEqual(SCREEN_H); + expect(CC_BUTTON.x + CC_BUTTON.w / 2).toBeGreaterThan(CC.x); + expect(ccHit(CC.x - 1, CC.y + 20)).toBeNull(); + expect(ccHit(CC.x + 20, CC.y + 30)).toEqual({ kind: "wifi" }); + expect(ccHit(CC.x + 160, CC.y + 30)).toEqual({ kind: "shot" }); + expect(ccHit(CC.x + 220, CC.y + 30)).toEqual({ kind: "night" }); + expect(ccHit(CC.x + 60, CC.y + 90)).toEqual({ kind: "media" }); + expect(ccHit(CC.x + 160, CC.y + 90)).toEqual({ kind: "prev" }); + expect(ccHit(CC.x + 200, CC.y + 90)).toEqual({ kind: "play" }); + expect(ccHit(CC.x + 240, CC.y + 90)).toEqual({ kind: "next" }); + expect(ccHit(CC.x + 20, CC.y + CC_ROW_Y[0] + 10)).toEqual({ kind: "icon", row: 0 }); + expect(ccHit(CC.x + 120, CC.y + CC_ROW_Y[0] + 10)).toEqual({ kind: "track", row: 0 }); + expect(ccHit(CC.x + 120, CC.y + CC_ROW_Y[1] + 10)).toEqual({ kind: "track", row: 1 }); + expect(ccHit(CC.x + 20, CC.y + CC_ROW_Y[1] + 10)).toEqual({ kind: "icon", row: 1 }); + expect(ccRowAt(CC.y + 30)).toBeNull(); + expect(ccRowAt(CC.y + CC_ROW_Y[0] + 5)).toBe(0); + expect(ccRowAt(CC.y + CC_ROW_Y[1] + 5)).toBe(1); + expect(trackDelta(CC_TRACK_W)).toBeCloseTo(1); + expect(trackDelta(-CC_TRACK_W / 4)).toBeCloseTo(-0.25); + expect(trackFill(0.4)).toBe(Math.round(0.4 * CC_TRACK_W)); + expect(trackFill(2)).toBe(CC_TRACK_W); + expect(CC_TRACK_X + CC_TRACK_W).toBeLessThan(CC.w); + }); + + test("the menu sheet lays rows out in two columns, scrolls what does not fit, and hit-tests through the scroll", () => { + expect(SHEET.x + SHEET.w).toBeLessThanOrEqual(SCREEN_W); + expect(SHEET.y + SHEET.h).toBeLessThanOrEqual(SCREEN_H); + expect(SHEET_LIST.y + SHEET_LIST.h).toBeLessThanOrEqual(SHEET.y + SHEET.h); + expect(sheetRowRect(0)).toMatchObject({ x: 0, y: 0 }); + expect(sheetRowRect(1).x).toBeGreaterThan(sheetRowRect(0).w); + expect(sheetRowRect(2).y).toBe(sheetRowRect(0).h); + expect(sheetRowRect(1).x + sheetRowRect(1).w).toBeLessThanOrEqual(SHEET_LIST.w); + expect(sheetMaxScroll(10)).toBe(0); // the root fits + expect(sheetContentH(14)).toBeGreaterThan(SHEET_LIST.h); + expect(sheetMaxScroll(14)).toBe(sheetContentH(14) - SHEET_LIST.h); + const r3 = sheetRowRect(3); + expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10, 10, 0)).toBe(3); + expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10 - 38, 10, 38)).toBe(3); + expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10, 3, 0)).toBeNull(); + expect(sheetRowAt(SHEET.x + 2, SHEET_LIST.y + 10, 10, 0)).toBeNull(); + }); + + test("pointer gain grows with speed inside its bounds", () => { + expect(pointerGain(0)).toBe(1.2); + expect(pointerGain(5)).toBeGreaterThan(pointerGain(1)); + expect(pointerGain(100)).toBe(4); }); test("entrance progress eases to one and staggers by index", () => { @@ -357,7 +449,7 @@ describe("pocket-remote hypr mirror", () => { client({ address: "0xbeef", workspace: { id: -98, name: "special:scratchpad" } }), ]; const state = buildState(monitors, workspaces, clients, { address: "0x55f90cb39300" }); - expect(state.mon).toEqual({ w: 1440, h: 900 }); + expect(state.mon).toEqual({ w: 1440, h: 900, x: 0, y: 0 }); expect(state.active).toBe(1); expect(state.layout).toBe("dwindle"); expect(state.ws).toEqual([{ id: 1, n: 2 }, { id: 2, n: 0 }]); @@ -376,6 +468,14 @@ describe("pocket-remote hypr mirror", () => { expect(state.special).toBeUndefined(); }); + test("a second monitor's origin comes off its windows and rides along for placements", () => { + const right = [{ ...monitors[0]!, x: 2160, y: 100 }]; + const state = buildState(right, workspaces, [client({ at: [2160 + 12, 100 + 38] })], null); + expect(state.mon.x).toBe(2160); + expect(state.mon.y).toBe(100); + expect(state.win[0]).toMatchObject({ x: 12, y: 38 }); + }); + test("marks floating, fullscreen and pinned windows and the special workspace", () => { const shown = [{ ...monitors[0]!, activeWorkspace: { id: 2, name: "2" }, specialWorkspace: { id: -98, name: "special:scratchpad" } }]; const state = buildState(shown, workspaces, [client({ floating: true, fullscreen: 2, pinned: true })], null); @@ -435,64 +535,212 @@ describe("pocket-remote omarchy readers", () => { expect(themeTitle("tokyo-night")).toBe("Tokyo Night"); expect(themeTitle("osaka-jade")).toBe("Osaka Jade"); }); + + test("network status and the radio", () => { + expect(parseNetworkStatus("wifi\tPetite Auberge\t54\t5560.0\n")).toEqual({ type: "wifi", ssid: "Petite Auberge", sig: 54 }); + expect(parseNetworkStatus("ethernet\tenp0s31f6\t\t\n")).toEqual({ type: "ethernet", ssid: "enp0s31f6", sig: 0 }); + expect(parseNetworkStatus("disconnected\t\t\t\n")).toEqual({ type: "disconnected", ssid: "", sig: 0 }); + expect(parseNetworkStatus("")).toEqual({ type: "disconnected", ssid: "", sig: 0 }); + expect(parseRadio("enabled\n")).toBe(true); + expect(parseRadio("disabled\n")).toBe(false); + }); + + test("MPRIS players and their properties out of busctl's JSON", () => { + const list = JSON.stringify([ + { name: "org.freedesktop.Notifications", pid: 1 }, + { name: "org.mpris.MediaPlayer2.spotify", pid: 2 }, + { name: ":1.42", pid: 3 }, + ]); + expect(parseMprisNames(list)).toEqual(["org.mpris.MediaPlayer2.spotify"]); + expect(parseMprisNames("nonsense")).toEqual([]); + const props = JSON.stringify({ + type: "a{sv}", + data: [ + { + PlaybackStatus: { type: "s", data: "Playing" }, + Metadata: { + type: "a{sv}", + data: { + "xesam:title": { type: "s", data: "Blue in Green" }, + "xesam:artist": { type: "as", data: ["Miles Davis", "Bill Evans"] }, + }, + }, + }, + ], + }); + expect(parseMprisPlayer(props)).toEqual({ st: "playing", title: "Blue in Green", artist: "Miles Davis, Bill Evans" }); + expect(parseMprisPlayer('{"type":"a{sv}","data":[{"PlaybackStatus":{"type":"s","data":"Stopped"}}]}')).toEqual({ st: "none", title: "", artist: "" }); + expect(parseMprisPlayer("")).toBeNull(); + }); +}); + +describe("pocket-remote menu source", () => { + const jsonc = `{ + // Root Menu + "learn": {"icon":"󰧑","label":"Learn"}, + "learn.omarchy": {"icon":"","label":"Omarchy","action":"omarchy-launch-webapp 'https://omarchy.org/manual/'"}, + "apps": {"icon":"󰀻","label":"Apps","provider":"apps"}, /* trailing comma next */ + "system": {"icon":"","label":"System","aliases":["power-menu"]}, + "system.suspend": {"icon":"󰒲","label":"Suspend","when":"! omarchy-toggle-enabled suspend-off","action":"systemctl suspend"}, + "system.dns": {"icon":"","label":"DNS","checked":"[[ \\"$(omarchy-dns)\\" == \\"DHCP\\" ]]","action":"omarchy-dns DHCP",}, +}`; + + test("strips comments and trailing commas but leaves the URLs inside strings alone", () => { + const parsed = parseMenuJsonc(jsonc); + expect(Object.keys(parsed)).toEqual(["learn", "learn.omarchy", "apps", "system", "system.suspend", "system.dns"]); + expect(parsed["learn.omarchy"]!.action).toBe("omarchy-launch-webapp 'https://omarchy.org/manual/'"); + expect(parsed["system.dns"]!.checked).toBe('[[ "$(omarchy-dns)" == "DHCP" ]]'); + // A comment can hide a trailing comma: both go. + expect(JSON.parse(stripJsonc('{"a": "x // y", // c\n}'))).toEqual({ a: "x // y" }); + expect(JSON.parse(stripJsonc('["a", /* b */ "c",\n]'))).toEqual(["a", "c"]); + }); + + test("normalises rows the way the shell infers them, and later layers override", () => { + const entries = normalizeMenu([parseMenuJsonc(jsonc), { "system.suspend": { label: "Sleep" }, personal: { icon: "", label: "Personal" } }]); + expect(entries.map((e) => e.kind)).toEqual(["menu", "action", "provider", "menu", "action", "action", "menu"]); + expect(entries.find((e) => e.id === "system.suspend")).toMatchObject({ parent: "system", label: "Sleep", action: "systemctl suspend", when: "! omarchy-toggle-enabled suspend-off" }); + expect(parentOf("trigger.capture.screenrecord.stop")).toBe("trigger.capture.screenrecord"); + expect(parentOf("about")).toBe("root"); + expect(childrenOf(entries, "system").map((e) => e.id)).toEqual(["system.suspend", "system.dns"]); + expect(childrenOf(entries, "root").map((e) => e.id)).toEqual(["learn", "apps", "system", "personal"]); + }); + + test("runs an action under bash, summons anything else, refuses unknown ids", () => { + const entries = normalizeMenu([parseMenuJsonc(jsonc)]); + const ran: string[] = []; + // runMenuEntry spawns detached; here the id validation and lookup are what matter. + expect(runMenuEntry(entries, "nope", (m) => ran.push(m))).toBe(false); + expect(runMenuEntry(entries, 'x"; rm -rf /', (m) => ran.push(m))).toBe(false); + expect(ran).toEqual([]); + }); + + test("conditions are evaluated in one bash run and reported by id", async () => { + const entries = normalizeMenu([ + { + hidden: { label: "Hidden", when: "false", action: "true" }, + shown: { label: "Shown", when: "true", action: "true" }, + ticked: { label: "Ticked", checked: "[[ 1 == 1 ]]", action: "true" }, + plain: { label: "Plain", checked: "[[ 1 == 2 ]]", action: "true" }, + 'bad id"': { label: "Bad", when: "false", action: "true" }, + }, + ]); + const result = await evaluateMenuConditions(entries); + expect(result.hide).toEqual(["hidden"]); + expect(result.check).toEqual(["ticked"]); + }, 20_000); }); -describe("pocket-remote keyboard", () => { - test("every layer fits the 480x320 screen and no two keys overlap", () => { +describe("pocket-remote baked menu", () => { + test("the table is Omarchy's tree: unique ids, every parent present, the root in the shell's order", () => { + expect(MENU_OMARCHY_VERSION).toMatch(/^\d/); + const ids = new Set(MENU.map((item) => item.id)); + expect(ids.size).toBe(MENU.length); + for (const item of MENU) if (item.parent !== MENU_ROOT) expect(ids.has(item.parent)).toBe(true); + expect(menuChildren(MENU_ROOT).map((item) => item.label)).toEqual([ + "Apps", "Learn", "Trigger", "Style", "Setup", "Install", "Remove", "Update", "About", "System", + ]); + expect(menuItem("apps")?.kind).toBe("provider"); + expect(menuItem("about")?.kind).toBe("action"); + expect(menuTitle(MENU_ROOT)).toBe("Go"); + expect(menuTitle("setup.default.agent")).toBe("Default Agent"); + expect(menuParent("trigger.capture.screenshot")).toBe("trigger.capture"); + }); + + test("hidden rows disappear and take an emptied submenu with them", () => { + const hardware = menuChildren("trigger.hardware").map((item) => item.id); + expect(hardware).toContain("trigger.hardware.touchpad"); + const hidden = new Set(menuChildren("trigger.hardware").map((item) => item.id)); + expect(menuChildren("trigger.hardware", hidden)).toEqual([]); + expect(menuVisible(menuItem("trigger.hardware")!, hidden)).toBe(false); + expect(menuChildren("trigger", hidden).map((item) => item.id)).not.toContain("trigger.hardware"); + expect(menuChildren("trigger", new Set()).map((item) => item.id)).toContain("trigger.hardware"); + }); + + test("every icon is a glyph the atlas can carry, or one of the four channel dots", () => { + for (const item of MENU) { + if (!item.icon) continue; + const cp = item.icon.codePointAt(0)!; + const pua = (cp >= 0xe000 && cp <= 0xf8ff) || (cp >= 0xf0000 && cp <= 0xffffd); + expect(pua || item.icon in MENU_DOT_EMOJI).toBe(true); + } + for (const glyph of Object.values(GLYPH)) expect(glyph.codePointAt(0)!).toBeGreaterThanOrEqual(0xf0000); + }); +}); + +describe("pocket-remote deck", () => { + test("every layer fits over the trackpad and no two keys overlap", () => { for (const layer of ["lower", "upper", "sym"] as const) { const keys = keyboardKeys(layer); expect(keys.length).toBeGreaterThan(40); for (const key of keys) { expect(key.x).toBeGreaterThanOrEqual(0); - expect(key.y).toBeGreaterThanOrEqual(28); expect(key.x + key.w).toBeLessThanOrEqual(SCREEN_W); - expect(key.y + key.h).toBeLessThanOrEqual(SCREEN_H); + expect(key.y).toBeGreaterThanOrEqual(KEYBOARD.y); + expect(key.y + key.h).toBeLessThanOrEqual(TRACKPAD.y); } for (let i = 0; i < keys.length; i += 1) { for (let j = i + 1; j < keys.length; j += 1) { const a = keys[i]!; const b = keys[j]!; - const overlap = a.x < b.x + b.w && b.x < a.x + a.w && a.y < b.y + b.h && b.y < a.y + a.h; - expect(overlap).toBe(false); + const apart = a.x + a.w <= b.x || b.x + b.w <= a.x || a.y + a.h <= b.y || b.y + b.h <= a.y; + expect(apart).toBe(true); } } + const labels = keys.map((k) => k.def.label); + expect(labels).toContain("esc"); + expect(labels).toContain("tab"); + expect(labels).toContain("ctrl"); } - const q = keyboardKeys("lower").find((k) => k.def.label === "q")!; - expect(keyAt("lower", q.x + 5, q.y + 5)?.def.label).toBe("q"); - expect(keyAt("lower", 2, 2)).toBeNull(); + expect(TRACKPAD.y + TRACKPAD.h).toBeLessThanOrEqual(SCREEN_H); + expect(TRACKPAD.h).toBeGreaterThanOrEqual(96); + const lower = keyboardKeys("lower").map((k) => k.def.label); + expect(lower).toContain(","); + expect(lower).toContain("."); + expect(lower).toContain("'"); + const sym = keyboardKeys("sym").map((k) => k.def.label); + expect(sym).toContain("`"); + expect(sym).toContain("~"); + const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; + expect(keyAt("lower", f.x + 2, f.y + 2)).toBe(f); + expect(keyAt("lower", f.x + f.w + 1, f.y + 2)).toBe(f); // the gap belongs to a key + expect(keyAt("lower", 240, TRACKPAD.y + 10)).toBeNull(); }); test("keys become wire lines: text plain, keysyms under modifiers", () => { expect(keyToLine({ ch: "a" }, [])).toEqual({ t: "type", text: "a" }); - expect(keyToLine({ ch: "c" }, ["ctrl"])).toEqual({ t: "key", k: "c", mods: ["ctrl"] }); + expect(keyToLine({ ch: "a" }, ["ctrl"])).toEqual({ t: "key", k: "a", mods: ["ctrl"] }); expect(keyToLine({ ch: "." }, ["alt"])).toEqual({ t: "key", k: "period", mods: ["alt"] }); expect(keyToLine({ ch: "€" }, ["ctrl"])).toBeNull(); expect(keyToLine({ key: "Tab" }, [])).toEqual({ t: "key", k: "Tab" }); - expect(keyToLine({ key: "Tab" }, ["ctrl"])).toEqual({ t: "key", k: "Tab", mods: ["ctrl"] }); + expect(keyToLine({ key: "Return" }, ["ctrl"])).toEqual({ t: "key", k: "Return", mods: ["ctrl"] }); expect(keyToLine({ layer: "sym" }, [])).toBeNull(); - expect(keysymFor("x")).toBe("x"); expect(keysymFor("/")).toBe("slash"); - expect(keysymFor("é")).toBeNull(); - }); - - test("held letters and digits offer variants as chips inside the screen", () => { - const x = keyboardKeys("lower").find((k) => k.def.label === "x")!; - expect(x.def.variants?.map((v) => v.label)).toEqual(["^X", "⌥X"]); - const chips = chipRects(x, 2); - expect(chips.length).toBe(2); - for (const chip of chips) { - expect(chip.x).toBeGreaterThanOrEqual(0); - expect(chip.x + chip.w).toBeLessThanOrEqual(SCREEN_W); - expect(chip.y).toBeGreaterThanOrEqual(0); + expect(keysymFor("Z")).toBeNull(); + }); + + test("held letters and digits offer variants as chips inside the screen; the bubble stays on screen", () => { + const keys = keyboardKeys("lower"); + const x = keys.find((k) => k.def.label === "x")!; + expect(x.def.variants!.map((v) => v.label)).toEqual(["^X", "⌥X"]); + const one = keys.find((k) => k.def.label === "1")!; + expect(one.def.variants!.map((v) => v.k)).toEqual(["F1", "1"]); + for (const key of [x, one, keys.find((k) => k.def.label === "p")!]) { + const chips = chipRects(key, 2); + for (const chip of chips) { + expect(chip.x).toBeGreaterThanOrEqual(0); + expect(chip.x + chip.w).toBeLessThanOrEqual(SCREEN_W); + expect(chip.y).toBeGreaterThanOrEqual(STRIP.h); + } + expect(chipAt(key, 2, chips[1]!.x + 5, chips[1]!.y + 5)).toBe(1); + expect(chipAt(key, 2, key.x, key.y + key.h + 60)).toBeNull(); + const bubble = bubbleRect(key); + expect(bubble.x).toBeGreaterThanOrEqual(0); + expect(bubble.x + bubble.w).toBeLessThanOrEqual(SCREEN_W); } - expect(chips[0]!.y).toBeLessThan(x.y); // above the key - expect(chipAt(x, 2, chips[1]!.x + 10, chips[1]!.y + 10)).toBe(1); - expect(chipAt(x, 2, x.x, x.y + 10)).toBeNull(); - const one = keyboardKeys("lower").find((k) => k.def.label === "1")!; - expect(one.def.variants?.map((v) => v.k)).toEqual(["F1", "1"]); - expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); // top row: below - const zero = keyboardKeys("lower").find((k) => k.def.label === "0")!; - expect(zero.def.variants?.[0]?.k).toBe("F10"); + // The top row's chips and bubble open below it. + expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); + expect(bubbleRect(one).y).toBeGreaterThan(one.y); + expect(bubbleRect(x).y).toBeLessThan(x.y); }); }); @@ -501,9 +749,7 @@ describe("pocket-remote wtype chords", () => { expect(wtypeArgs("c", ["ctrl"])).toEqual(["-M", "ctrl", "-k", "c", "-m", "ctrl"]); expect(wtypeArgs("Tab", ["ctrl", "shift"])).toEqual(["-M", "ctrl", "-M", "shift", "-k", "Tab", "-m", "shift", "-m", "ctrl"]); expect(wtypeArgs("F5")).toEqual(["-k", "F5"]); - expect(wtypeArgs("period", ["alt"])).toEqual(["-M", "alt", "-k", "period", "-m", "alt"]); - expect(wtypeArgs("rm -rf", [])).toBeNull(); + expect(wtypeArgs("rm -rf", ["ctrl"])).toBeNull(); expect(wtypeArgs("c", ["hyper"])).toBeNull(); - expect(wtypeArgs("", [])).toBeNull(); }); }); diff --git a/tools/build.ts b/tools/build.ts index fbb7c1605..dacbae54c 100644 --- a/tools/build.ts +++ b/tools/build.ts @@ -308,6 +308,24 @@ console.log( `${Object.keys(styles.ids).length} literal(s) -> framework/src/styles.generated.ts`, ); +// Optional per-app font sidecar: /fonts.json names fallback faces +// tried, in order, for codepoints the slot's own face does not map — an icon +// font (Nerd Font symbols, say) whose glyphs must share the atlas with text. +// Paths are relative to the app directory, so the face travels with the app. +interface FontsManifest { + fallback?: string[]; +} +const fontsManifestPath = join(dirname(entry), "fonts.json"); +let fallbackTtfs: string[] = []; +if (existsSync(fontsManifestPath)) { + const fontsManifest = JSON.parse(await Bun.file(fontsManifestPath).text()) as FontsManifest; + fallbackTtfs = (fontsManifest.fallback ?? []).map((p) => resolvePath(dirname(entry), p)); + for (const p of fallbackTtfs) { + if (!existsSync(p)) throw new Error(`PocketJS build: fonts.json fallback face not found: ${p}`); + } + if (fallbackTtfs.length) console.log(` fonts: ${fallbackTtfs.length} fallback face(s) from fonts.json`); +} + const atlases = await bakeAtlases({ codepoints, slots: styles.usedFontSlots, @@ -315,6 +333,7 @@ const atlases = await bakeAtlases({ rasterDensity, regularTtf: regularFontPath, boldTtf: boldFontPath, + fallbackTtfs, }); for (const a of atlases) { console.log( diff --git a/tools/font-subset.ts b/tools/font-subset.ts new file mode 100644 index 000000000..5b07926c8 --- /dev/null +++ b/tools/font-subset.ts @@ -0,0 +1,81 @@ +// tools/font-subset.ts — cut a face down to the glyphs an app actually +// spells, so an icon font can travel with the app instead of the 2.5 MB it +// ships as. +// +// bun tools/font-subset.ts --name="Symbols Nerd Font Subset" \ +// --scan=apps/foo/menu.ts --scan=apps/foo/glyphs.ts [--range=E000-F8FF,F0000-FFFFD] [--chars=...] +// +// Codepoints come from the scanned files (every character inside the ranges, +// which default to the two private-use areas icon fonts live in) plus any +// --chars. The result is written through opentype.js, so it is a CFF-flavoured +// OpenType face; framework/compiler/bake-font.ts reads it like any other and +// tools/build.ts picks it up from an app's fonts.json. + +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { Font, Glyph, parse as parseFont, Path } from "opentype.js"; + +const args = process.argv.slice(2); +const positional = args.filter((a) => !a.startsWith("--")); +const flag = (name: string): string[] => + args.filter((a) => a.startsWith(`--${name}=`)).map((a) => a.slice(name.length + 3)); + +const [source, output] = positional; +if (!source || !output) { + console.error("usage: bun tools/font-subset.ts --name= --scan= [--scan=...] [--range=A-B,...] [--chars=...]"); + process.exit(2); +} +if (!existsSync(source)) { + console.error(`font-subset: ${source} not found`); + process.exit(2); +} + +const family = flag("name")[0] ?? "Subset"; +const ranges: [number, number][] = (flag("range")[0] ?? "E000-F8FF,F0000-FFFFD").split(",").map((r) => { + const [lo, hi] = r.split("-"); + return [parseInt(lo!, 16), parseInt(hi ?? lo!, 16)]; +}); +const inRange = (cp: number): boolean => ranges.some(([lo, hi]) => cp >= lo && cp <= hi); + +const wanted = new Set(); +for (const file of flag("scan")) { + for (const ch of readFileSync(file, "utf8")) { + const cp = ch.codePointAt(0)!; + if (inRange(cp)) wanted.add(cp); + } +} +for (const list of flag("chars")) for (const ch of list) wanted.add(ch.codePointAt(0)!); + +const font = parseFont(readFileSync(source).buffer as ArrayBuffer); +const glyphs: Glyph[] = [new Glyph({ name: ".notdef", unicode: undefined as unknown as number, advanceWidth: font.unitsPerEm / 2, path: new Path() })]; +const missing: number[] = []; +for (const cp of [...wanted].sort((a, b) => a - b)) { + const index = font.charToGlyphIndex(String.fromCodePoint(cp)); + if (index <= 0) { + missing.push(cp); + continue; + } + const glyph = font.glyphs.get(index); + glyphs.push( + new Glyph({ + name: `uni${cp.toString(16).toUpperCase().padStart(4, "0")}`, + unicode: cp, + advanceWidth: glyph.advanceWidth ?? font.unitsPerEm, + path: glyph.path, + }), + ); +} + +const subset = new Font({ + familyName: family, + styleName: "Regular", + unitsPerEm: font.unitsPerEm, + ascender: font.ascender, + descender: font.descender, + glyphs, +}); +const bytes = new Uint8Array(subset.toArrayBuffer()); +writeFileSync(output, bytes); +console.log(`${output}: ${glyphs.length - 1} glyph(s) from ${wanted.size} codepoint(s), ${(bytes.byteLength / 1024).toFixed(1)} KiB`); +if (missing.length) { + console.log(` not in ${source}: ${missing.map((cp) => `U+${cp.toString(16).toUpperCase()}`).join(" ")}`); +} diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index ad9fc808e..7ed4d0993 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -20,6 +20,8 @@ import { connect } from "node:net"; import { hostname } from "node:os"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; +import { existsSync, readFileSync, writeFileSync } from "node:fs"; +import { normalizeMenu, parseMenuJsonc, type MenuEntry } from "../apps/pocket-remote/host/menu-source.ts"; import { REMOTE_APP, REMOTE_PROTO, type ClientLine, type HostLine, parseLines } from "../apps/pocket-remote/protocol.ts"; import { encodeBeacon, @@ -36,7 +38,18 @@ import { const REPOSITORY = fileURLToPath(new URL("..", import.meta.url)); const APP_DIR = join(REPOSITORY, "apps/pocket-remote"); /** Files the daemon needs on the Omarchy machine (no repository there). */ -const HOST_FILES = ["protocol.ts", "actions.ts", "host/wire.ts", "host/hypr.ts", "host/omarchy.ts", "host/serve.ts"]; +const HOST_FILES = [ + "LICENSE", + "protocol.ts", + "actions.ts", + "host/wire.ts", + "host/hypr.ts", + "host/omarchy.ts", + "host/menu-source.ts", + "host/serve.ts", + "host/pointer/pocket-pointer.c", + "host/pointer/wlr-virtual-pointer-unstable-v1.xml", +]; const REMOTE_DIR = ".local/share/pocket-remote"; const UNIT = "pocket-remote.service"; @@ -61,12 +74,21 @@ async function deployHost(host: string): Promise { }); if (tar.exitCode !== 0) throw new Error(tar.stderr.toString()); const archive = Buffer.from(tar.stdout); + // The pointer helper is built on the machine: wayland-scanner turns the + // vendored protocol XML into a header and a stub, cc links them against + // libwayland-client. Both ship with Omarchy (base-devel, wayland). + const buildPointer = + `cd ~/${REMOTE_DIR}/host/pointer && ` + + "wayland-scanner client-header wlr-virtual-pointer-unstable-v1.xml wlr-virtual-pointer-unstable-v1-client-protocol.h && " + + "wayland-scanner private-code wlr-virtual-pointer-unstable-v1.xml wlr-virtual-pointer-unstable-v1-protocol.c && " + + "cc -O2 -o pocket-pointer pocket-pointer.c wlr-virtual-pointer-unstable-v1-protocol.c $(pkg-config --cflags --libs wayland-client) && cd ~"; const install = `set -eu; mkdir -p ~/${REMOTE_DIR} ~/.config/systemd/user; ` + `tar -xf - -C ~/${REMOTE_DIR}; ` + `cp ~/${REMOTE_DIR}/host/${UNIT} ~/.config/systemd/user/${UNIT}; ` + `test -x ~/.local/share/mise/shims/node || { echo "node (mise) is missing on the host" >&2; exit 2; }; ` + - `systemctl --user daemon-reload; systemctl --user enable ${UNIT} >/dev/null 2>&1 || true; ` + + `if command -v wayland-scanner >/dev/null && command -v cc >/dev/null; then ${buildPointer}; else echo "no wayland-scanner/cc: the trackpad's pointer helper was not built" >&2; fi; ` + + `systemctl --user daemon-reload; systemctl --user enable ${UNIT} >/dev/null 2>&1 || true; systemctl --user reset-failed ${UNIT} >/dev/null 2>&1 || true; ` + `systemctl --user restart ${UNIT}; sleep 1; systemctl --user is-active ${UNIT}`; const result = Bun.spawnSync({ cmd: ["ssh", "-o", "BatchMode=yes", host, install], stdin: archive, stdout: "pipe", stderr: "pipe" }); if (result.exitCode !== 0) throw new Error(`deploy failed (${result.exitCode}):\n${result.stderr.toString().trim()}`); @@ -166,6 +188,229 @@ async function client(target: string, lines: string[], seconds: number): Promise }); } +// --------------------------------------------------------------------------- +// menu: bake Omarchy's menu tree into the device +// --------------------------------------------------------------------------- + +const MENU_DEFAULT_PATH = "/usr/share/omarchy/default/omarchy/omarchy-menu.jsonc"; +const MENU_OUT = join(APP_DIR, "menu.ts"); + +/** Glyphs for rows whose icon lives in Omarchy's private logo font, which + * the remote cannot carry: AI agents get the robot, the updater the update + * arrows, anything else a dot. */ +const ROBOT = "\u{F06A9}"; +const UPDATE = "\u{F06B0}"; +const DOT = "\u{F0765}"; + +function deviceIcon(entry: MenuEntry): string { + if (entry.iconFont === "omarchy") { + if (entry.id === "update.omarchy") return UPDATE; + if (entry.id.startsWith("setup.default.agent.") || entry.id.startsWith("install.ai.")) return ROBOT; + return DOT; + } + return entry.icon; +} + +/** + * Read omarchy-menu.jsonc from an Omarchy machine (or a local copy) and write + * apps/pocket-remote/menu.ts: every row's id, parent, kind, icon, label and + * title in the shell's own order, plus whether it carries a `when` or a + * `checked` condition (the daemon evaluates those live). The device shows + * this table; the daemon runs actions from its own live parse by id, so a row + * the device names has to exist on the machine as well. + */ +function bakeMenu(source: string, omarchyVersion: string | undefined): void { + let text: string; + let version = omarchyVersion ?? ""; + if (existsSync(source)) { + text = readFileSync(source, "utf8"); + } else { + text = ssh(source, `cat ${MENU_DEFAULT_PATH}`); + if (!version) version = ssh(source, "omarchy-version").trim(); + } + const entries = normalizeMenu([parseMenuJsonc(text)]); + const hasher = new Bun.CryptoHasher("sha256"); + hasher.update(text); + const digest = hasher.digest("hex").slice(0, 12); + const rows = entries.map((entry) => { + const fields = [ + `id: ${JSON.stringify(entry.id)}`, + `parent: ${JSON.stringify(entry.parent)}`, + `kind: ${JSON.stringify(entry.kind)}`, + `icon: ${JSON.stringify(deviceIcon(entry))}`, + `label: ${JSON.stringify(entry.label)}`, + ]; + if (entry.title) fields.push(`title: ${JSON.stringify(entry.title)}`); + if (entry.when) fields.push("when: true"); + if (entry.checked) fields.push("checked: true"); + return ` { ${fields.join(", ")} },`; + }); + const out = `// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/menu.ts — GENERATED by \`bun tools/pocket-remote.ts menu\` +// from Omarchy ${version || "?"}'s omarchy-menu.jsonc (sha256 ${digest}). Do not edit; +// regenerate against the machine after an Omarchy update. +// +// The device's copy of Omarchy's menu tree: every row's id, parent, kind, +// icon, label and title, in the shell's own order. Icons are the Nerd Font +// glyphs the file spells (written literally so the build's codepoint scan +// bakes them); rows whose icon lives in Omarchy's private logo font carry a +// Material stand-in. \`when\` and \`checked\` mark rows the daemon evaluates +// live — it sends the hidden and the checked ids, the table stays static. + +export type MenuKind = "action" | "menu" | "link" | "provider"; + +export interface MenuItem { + id: string; + /** "root" for a top-level row. */ + parent: string; + kind: MenuKind; + icon: string; + label: string; + /** Header when the submenu is open; defaults to label. */ + title?: string; + /** Visibility depends on a condition the daemon reports. */ + when?: true; + /** A tick depends on a condition the daemon reports. */ + checked?: true; +} + +export const MENU_OMARCHY_VERSION = ${JSON.stringify(version)}; +export const MENU_SOURCE_DIGEST = ${JSON.stringify(digest)}; + +export const MENU: readonly MenuItem[] = [ +${rows.join("\n")} +]; +`; + writeFileSync(MENU_OUT, out); + const kinds = new Map(); + for (const entry of entries) kinds.set(entry.kind, (kinds.get(entry.kind) ?? 0) + 1); + console.log( + `wrote ${MENU_OUT}: ${entries.length} rows from Omarchy ${version || "?"} (${[...kinds].map(([k, n]) => `${n} ${k}`).join(", ")})`, + ); +} + +// --------------------------------------------------------------------------- +// shots: the screens, rendered in the headless sim +// --------------------------------------------------------------------------- + +/** + * Boot the built bundle in the sim, feed it a desktop the way the daemon + * would, walk it through its states and write each as a PNG. What the README + * shows, and what a change is checked against by eye before it is flashed. + */ +async function shots(outDir: string): Promise { + const { bootWorld } = await import("../hosts/sim/sim.ts"); + const { encodePNG } = await import("../tests/png.ts"); + const { STAGE, TAB_W, CC_BUTTON, MODE, MODE_HALF_W, SHEET_LIST, sheetRowRect, BALL_HOME } = await import("../apps/pocket-remote/layout.ts"); + const { keyboardKeys } = await import("../apps/pocket-remote/keyboard-layout.ts"); + type Store = import("../apps/pocket-remote/store.ts").RemoteStore; + const { mkdirSync } = await import("node:fs"); + mkdirSync(outDir, { recursive: true }); + + const world = await bootWorld("pocket-remote-main", 60, undefined, undefined, { width: 480, height: 320 }); + const store = (globalThis as { __pocketRemote?: Store }).__pocketRemote; + if (!store) throw new Error("the bundle did not publish its store"); + const pack = (x: number, y: number, id = 0): number => (id << 18) | (y << 9) | x; + const frames = (n: number, touches: number[] = []) => { + for (let i = 0; i < n; i += 1) world.frame(0, undefined, touches); + }; + const tap = (x: number, y: number) => { + frames(2, [pack(x, y)]); + frames(1); + }; + const hold = (x: number, y: number, n = 30) => { + frames(n, [pack(x, y)]); + }; + const shot = (name: string) => { + const pixels = world.render(); + writeFileSync(join(outDir, `${name}.png`), encodePNG(Buffer.from(pixels), 480, 320)); + console.log(` ${name}.png`); + }; + + frames(1); + shot("connect"); + store.applyLine({ t: "hello", proto: REMOTE_PROTO, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); + store.applyLine({ t: "levels", vol: 0.55, bri: 0.7 }); + store.applyLine({ + t: "cc", + wifi: { on: 1, ssid: "Petite Auberge", sig: 54 }, + media: { st: "playing", title: "Blue in Green", artist: "Miles Davis" }, + }); + store.applyLine({ t: "menu", hide: ["system.hibernate", "trigger.capture.screenrecord.stop"], check: ["setup.default.terminal.foot", "update.channel.stable"] }); + store.applyLine({ + t: "state", + mon: { w: 1440, h: 900 }, + ws: [{ id: 1, n: 3 }, { id: 2, n: 1 }, { id: 3, n: 0 }], + active: 1, + focus: "0x1", + layout: "dwindle", + win: [ + { a: "0x1", c: "foot", ti: "evan@x1nano-omarchy:~", ws: 1, x: 12, y: 38, w: 701, h: 850 }, + { a: "0x2", c: "chromium", ti: "Omarchy Manual", ws: 1, x: 725, y: 38, w: 703, h: 420 }, + { a: "0x3", c: "nautilus", ti: "Downloads", ws: 1, x: 725, y: 470, w: 703, h: 418 }, + { a: "0x4", c: "mpv", ti: "Blue in Green", ws: 1, x: 900, y: 500, w: 420, h: 260, f: 1 }, + { a: "0x5", c: "nvim", ti: "layout.ts", ws: 2, x: 12, y: 38, w: 1416, h: 850 }, + ], + }); + frames(40); + shot("stage"); + + // hold the floating tile: the popup + const fit = store.fit()!; + const px = Math.round(fit.ox + (900 + 210) * fit.s); + const py = Math.round(fit.oy + (500 + 130) * fit.s); + hold(px, py, 30); + frames(12, [pack(px, py)]); + shot("popup"); + frames(1); + tap(px, STAGE.y + 8); + frames(10); + + // the control centre, sticky + tap(CC_BUTTON.x + CC_BUTTON.w / 2, CC_BUTTON.y + CC_BUTTON.h / 2); + frames(20); + shot("control-centre"); + tap(40, 300); + frames(10); + + // the menu sheet: root, then Trigger + tap(BALL_HOME.x + 22, BALL_HOME.y + 22); + frames(20); + shot("menu-root"); + const trigger = sheetRowRect(2); + tap(SHEET_LIST.x + trigger.x + 60, SHEET_LIST.y + trigger.y + 19); + frames(20); + shot("menu-trigger"); + const toggle = sheetRowRect(7); + tap(SHEET_LIST.x + toggle.x + 60, SHEET_LIST.y + toggle.y + 19); + frames(20); + shot("menu-toggle"); + tap(10, 300); + frames(10); + + // the deck, with a key held + tap(MODE.x + MODE_HALF_W + 17, MODE.y + 11); + frames(15); + shot("deck"); + const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; + frames(4, [pack(f.x + f.w / 2, f.y + f.h / 2)]); + shot("deck-key"); + frames(1); + frames(10); + hold(f.x + f.w / 2, f.y + f.h / 2, 30); + frames(12, [pack(f.x + f.w / 2, f.y + f.h / 2)]); + shot("deck-variants"); + frames(1); + + // back to the stage, then the empty workspace three + tap(MODE.x + 17, MODE.y + 11); + frames(10); + tap(6 + TAB_W * 2 + TAB_W / 2, 14); + frames(30); + shot("empty"); + console.log(`wrote ${outDir}`); +} + function usage(): void { console.log(`Pocket Remote host tool @@ -173,7 +418,9 @@ function usage(): void { bun tools/pocket-remote.ts logs [-n N] bun tools/pocket-remote.ts status bun tools/pocket-remote.ts relay [--name ] [--local-port 8623] - bun tools/pocket-remote.ts client [--for seconds] [-- ...]`); + bun tools/pocket-remote.ts client [--for seconds] [-- ...] + bun tools/pocket-remote.ts menu [--omarchy ] + bun tools/pocket-remote.ts shots render the screens in the headless sim`); } async function main(args: string[]): Promise { @@ -204,6 +451,16 @@ async function main(args: string[]): Promise { ); break; } + case "shots": + if (!target) throw new Error("shots needs an output directory"); + await shots(target); + break; + case "menu": { + if (!target) throw new Error("menu needs an ssh host or a path to omarchy-menu.jsonc"); + const at = args.indexOf("--omarchy"); + bakeMenu(target, at >= 0 ? args[at + 1] : undefined); + break; + } case "client": { if (!target) throw new Error("client needs host[:port]"); const dash = args.indexOf("--"); From a792b7888ee9d2a5d97c9bf7816668976568e942 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 02:10:22 -0700 Subject: [PATCH 11/27] fix(pocket-remote): one column for the menu, labels on the middle line, a popup that answers the finger that opened it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Everything here came off the hardware. - Layout: a View's main axis is horizontal and its cross-axis default is stretch, so every fixed-size label box needed `items-center` rather than the `justify-center` I had reached for. Menu rows, the now-playing lines, the launch chips, the popup's rows and the trackpad's caption were all painting their text against the top edge. - The menu sheet is one column of 40 px rows, centred, scrolling — two columns of eleven-character labels made the eye jump, and Omarchy's own menu is a list. Its header bar carries the card's own top radius (an overflow clip is a rectangular scissor, so a child cannot inherit rounded corners), squared off below by a plain rect. - Apps now lists the machine's applications: the daemon reads the XDG desktop entries (Type/NoDisplay/Hidden respected, the user's directory first) and pages them forty at a time, because the whole list does not fit one 8 KiB poll batch; the row opens that list on the device and a tap launches through `uwsm-app`. 56 entries on x1nano. - A held tile's popup lost its caret (a triangle that small cannot meet a rounded, bordered body without a seam) and gained the gesture it should have had: the finger that opened it slides onto a row and releases — one gesture — and lifting without sliding leaves it up for a tap. Both paths are the same code because the row now runs on `onUp`: that edge precedes `onTap` for one release, and clearing the highlight there was why a tap on a row did nothing on hardware. - The control centre lost its caret too, for the same reason. - The key bubble follows the key: `Show` keeps one instance while the value behind it changes, so a `style` object read once froze the bubble on the first letter typed. Its geometry — and a key's own, which moves when the symbol layer gives a row one more column — is written through the mirror from an effect now. - The ball's mark is a glyph instead of two bordered circles: a stroked circle is rasterised at logical size and looked soft on a 2x panel. - Icon centring: the subset's advances are normalised to each glyph's ink. A monospaced Nerd Font patch gives every glyph one cell of advance while drawing the double-width icons across two, so a centred icon sat right of centre — the camera most visibly. - Protocol: host `apps` pages, device `launch`. - Tests: 52 across the two files, including the popup's two paths, the single-column sheet with a fling, the applications list, and a pixel check that the bubble moves. `bun tools/pocket-remote.ts shots` grew a menu-apps screen. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 79 ++++++--- apps/pocket-remote/ball.tsx | 18 +- apps/pocket-remote/control.tsx | 19 +-- apps/pocket-remote/deck.tsx | 44 +++-- .../fonts/SymbolsNerdFont-subset.otf | Bin 69784 -> 69784 bytes apps/pocket-remote/glyphs.ts | 2 + apps/pocket-remote/host/omarchy.ts | 88 ++++++++++ apps/pocket-remote/host/serve.ts | 43 +++++ apps/pocket-remote/layout.ts | 48 +++--- apps/pocket-remote/media/control-centre.png | Bin 14190 -> 13922 bytes apps/pocket-remote/media/deck-key.png | Bin 15895 -> 15662 bytes apps/pocket-remote/media/deck-variants.png | Bin 15793 -> 15560 bytes apps/pocket-remote/media/deck.png | Bin 15275 -> 15043 bytes apps/pocket-remote/media/empty.png | Bin 10214 -> 9982 bytes apps/pocket-remote/media/menu-apps.png | Bin 0 -> 10997 bytes apps/pocket-remote/media/menu-root.png | Bin 13300 -> 12003 bytes apps/pocket-remote/media/menu-toggle.png | Bin 9090 -> 12995 bytes apps/pocket-remote/media/menu-trigger.png | Bin 12531 -> 12557 bytes apps/pocket-remote/media/popup.png | Bin 11710 -> 11458 bytes apps/pocket-remote/media/stage.png | Bin 10949 -> 10801 bytes apps/pocket-remote/menu-sheet.tsx | 157 +++++++++++------- apps/pocket-remote/popup.tsx | 61 ++++--- apps/pocket-remote/protocol.ts | 23 ++- apps/pocket-remote/stage.tsx | 72 ++++++-- apps/pocket-remote/store.ts | 86 ++++++++-- tests/pocket-remote-sim.test.ts | 138 ++++++++++++++- tests/pocket-remote.test.ts | 76 ++++++--- tools/font-subset.ts | 27 ++- tools/pocket-remote.ts | 25 ++- 29 files changed, 776 insertions(+), 230 deletions(-) create mode 100644 apps/pocket-remote/media/menu-apps.png diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 3daf30698..31a5813d2 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -29,8 +29,9 @@ against a scripted desktop; the panel is 480x320. |---|---| | ![the stage](media/stage.png) | ![a held tile's popup](media/popup.png) | | ![the control centre](media/control-centre.png) | ![Omarchy's menu as a sheet](media/menu-root.png) | -| ![the Trigger submenu](media/menu-trigger.png) | ![the deck](media/deck.png) | -| ![a key's bubble](media/deck-key.png) | ![a held key's variants](media/deck-variants.png) | +| ![the Trigger submenu](media/menu-trigger.png) | ![the machine's applications](media/menu-apps.png) | +| ![the deck](media/deck.png) | ![a key's bubble](media/deck-key.png) | +| ![a held key's variants](media/deck-variants.png) | ![an empty workspace](media/empty.png) | ## The screen @@ -61,11 +62,13 @@ after a day the strokes are made without looking. by class and title, the focused one bordered in the accent, floating windows marked. **Tap focuses. Hold a tile** and a popup opens at the finger — Float / Tile, Full screen, Close — the classic kind: one container - of rows with a caret at the point it answers. **Drag a floating window and - it moves**, on the laptop, under the finger (Hyprland places it every third - frame and on release). Drag a tiled window onto another to swap them, onto - a tab to move it there. Swipe empty stage to step workspaces; an empty - workspace offers Terminal, Browser and Files. + of rows with hairlines between them. **The finger that opened it picks a + row**: slide onto one and let go, one gesture; lift without sliding and the + popup stays up for a tap. **Drag a floating window and it moves**, on the + laptop, under the finger (Hyprland places it every third frame and on + release). Drag a tiled window onto another to swap them, onto a tab to + move it there. Swipe empty stage to step workspaces; an empty workspace + offers Terminal, Browser and Files. - **Deck.** The laptop's C surface on the iPod: five compact rows of keys over a trackpad, so typing and pointing need no mode of their own. Keys go straight to the desktop (`wtype`) as they are pressed; a pressed key rises, @@ -82,12 +85,15 @@ after a day the strokes are made without looking. - **The ball.** Omarchy's menu (SUPER+SPACE) has a handle that floats over everything and lives on a side edge. **Tap it and the menu opens as a sheet** in the middle of the screen: the same rows in the same order with - the same glyphs, two columns wide, scrolling. A submenu opens in place with - its title and a back chevron; an action runs on the laptop and the sheet - goes away; the two runtime-listed submenus (Apps, Fonts) open on the laptop - instead. **Hold the ball and it comes along**; let go and it slides to the - nearer edge at that height. It fades while idle. -- **Control centre.** Hangs from its button: Wi-Fi (tap toggles the radio), + the same glyphs, one column, scrolling — a menu reads as a list, and two + columns of eleven-character labels made the eye jump. A submenu opens in + place with its title and a back chevron; an action runs on the laptop and + the sheet goes away. **Apps lists the machine's own applications** (the + daemon reads the XDG desktop entries and pages them over; the row opens + that list here rather than on the laptop). **Hold the ball and it comes + along**; let go and it slides to the nearer edge at that height. It fades + while idle. +- **Control centre.** Under its button: Wi-Fi (tap toggles the radio), a screenshot, nightlight, what is playing with its transport, then brightness and volume as sliders. Levels follow the finger **relatively** — touching a slider never jumps the level to the finger — and a tap on a @@ -128,6 +134,31 @@ symbols face (`tools/font-subset.ts`) as a fallback for codepoints Inter does not map, and the atlas baker takes those glyphs from it, so an icon is text — it recolours with the theme and needs no rectangle art. +**The panel's own two axes.** A View's main axis is horizontal and its +cross-axis default is stretch, so `justify-*` places a label across and +`items-center` is what puts it on the middle line; a fixed-size box without +it paints its text against the top edge. Icons are glyphs from an atlas baked +at the panel's density, which is also why the ball's mark is a glyph rather +than a ring of bordered Views — a stroked circle is rasterised at logical +size and looked soft at 2x. The subset's advances are normalised to each +glyph's ink (`tools/font-subset.ts`): a monospaced Nerd Font patch gives every +glyph one cell of advance while drawing the double-width icons across two, so +a centred icon sat visibly right of centre. + +**Geometry through the mirror, not the style object.** A `style` object is +evaluated once, and Solid's `Show` keeps one instance while the value behind +it changes — so anything whose position follows live state (the key bubble +over the pressed key, a popup that re-records itself as the highlight moves, +a key whose row gains a column on the symbol layer) writes `insetL`/`insetT` +with `jump()` from an effect. The bubble parked on the first letter typed +until it did. + +**A release is the commit, not the tap.** `onUp` arrives before `onTap` for +one release, so a handler that clears its highlight in `onUp` leaves `onTap` +with nothing to run — the popup's rows and the sheet's rows therefore act on +`onUp`. This is also what makes hold-and-slide and tap-then-tap the same code +path. + **Motion is a pool, not a tree.** Tiles live in a fixed pool of 24 slots (protocol `WINDOWS_MAX`) keyed by window address. A snapshot re-targets the pool; the frame loop eases each slot toward its target and writes geometry @@ -175,12 +206,14 @@ threads) — compiled in only when `POCKET_SVC_WIRE` is defined. Lines are JSON (`protocol.ts`, `REMOTE_PROTO` 2). Host → device: `hello`, `auth`, `state`, `levels`, `theme`, `cc` (Wi-Fi and what is playing), `menu` -(hidden and checked ids), `toast`. Device → host: `hello`, `act`, `ws`, `win` -(focus, close, swap, move, place, float, full), `vol`, `bri`, `mute`, `media`, -`type`, `key`, `ptr`, `click`, `scroll`, `drag`, `wifi`, `menu`. **A snapshot -has to fit one 8 KiB poll batch**, so titles are clipped to 28 code points, -windows to the 24 most recently focused, and coordinates are integers. -Pointer motion is accumulated on the device and sent at most once per frame. +(hidden and checked ids), `apps` (one page of the application list), `toast`. +Device → host: `hello`, `act`, `ws`, `win` (focus, close, swap, move, place, +float, full), `vol`, `bri`, `mute`, `media`, `type`, `key`, `ptr`, `click`, +`scroll`, `drag`, `wifi`, `menu`, `launch`. **A snapshot has to fit one 8 KiB +poll batch**, so titles are clipped to 28 code points, windows to the 24 most +recently focused, coordinates are integers, and the application list arrives +forty entries at a time. Pointer motion is accumulated on the device and sent +at most once per frame. **The cable.** The device listens on port 8624. When the iPod is plugged into the Omarchy machine, usbmuxd lists it and `iproxy` forwards a host port to @@ -245,7 +278,11 @@ touches in the view's rotated space. JSONC sample and the baked table, the deck's keyboard. - `tests/pocket-remote-sim.test.ts` — the built bundle in the headless sim over a fake svc channel: a snapshot becomes tiles, the strip switches - workspace, the ball opens the sheet and a submenu, the control centre - opens and mutes, the deck types a chord and the trackpad moves the pointer. + workspace, the ball opens the sheet, a submenu opens in place, the sheet + scrolls and lists the machine's applications, holding a tile opens its + popup and the same finger picks a row, the control centre opens and mutes, + the deck types a chord, the key bubble follows the key, and the trackpad + moves the pointer. (No tree probe while a finger is down: the probe + advances the world by one touchless frame and would end the hold.) - `bun tools/pocket-remote.ts client 127.0.0.1:8623 --for 4` — a scripted device against a live daemon. diff --git a/apps/pocket-remote/ball.tsx b/apps/pocket-remote/ball.tsx index bb865b89e..30741b436 100644 --- a/apps/pocket-remote/ball.tsx +++ b/apps/pocket-remote/ball.tsx @@ -4,12 +4,19 @@ // opens; hold it and it comes along with the finger, and when let go it // slides to the nearer edge and stays at that height. It fades while idle so // what is under it stays legible. +// +// The mark is a glyph, not drawn rings: a stroked circle built from bordered +// Views is rasterised at the panel's logical size and looked soft on a 2x +// panel, while the glyph comes out of an atlas baked at the panel's own +// density. import { createEffect } from "solid-js"; import { View } from "@pocketjs/framework/components"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; +import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; +import { Icon } from "./icons.tsx"; import type { RemoteStore } from "./store.ts"; import { themed } from "./theme.ts"; @@ -18,21 +25,20 @@ export function Ball(p: { store: RemoteStore }) { createEffect(() => { if (!root) return; const lifted = p.store.ballDragging() || p.store.pressed() === "ball"; - jump(root, "opacity", lifted ? 1 : 0.62); + jump(root, "opacity", lifted ? 1 : 0.66); jump(root, "scale", p.store.ballDragging() ? 1.12 : 1); }); return ( { root = node; p.store.bindBall(node); - themed("borderMuted")(node); + themed("surfaceDark")(node); }} > - - - + + ); } diff --git a/apps/pocket-remote/control.tsx b/apps/pocket-remote/control.tsx index e827f8f94..d166884ce 100644 --- a/apps/pocket-remote/control.tsx +++ b/apps/pocket-remote/control.tsx @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/control.tsx — the control centre: a card that hangs -// from its button at the strip's right end. Wi-Fi, a screenshot, nightlight, +// apps/pocket-remote/control.tsx — the control centre: a card under its +// button at the strip's right end (no caret: a triangle this small cannot +// meet a rounded, bordered card without a seam). Wi-Fi, a screenshot, nightlight, // what is playing with its transport, then brightness and volume as // sliders. Levels follow the finger relatively — touching a slider never // jumps the level to the finger — and a tap on a track nudges by a step. @@ -102,12 +103,6 @@ export function ControlCentre(p: { store: RemoteStore }) { root = node; }} > - {/* caret under the button */} - (wifi().on ? GLYPH.wifi : GLYPH.wifiOff)} tone={() => (wifi().on ? "onAccent" : "dim")} size="xl" /> - + (wifi().on ? "textOnAccent" : "text"))}> Wi-Fi - + (wifi().on ? "textOnAccent" : "textDim"))}> {wifi().on ? (wifi().ssid || "not connected") : "off"} @@ -164,12 +159,12 @@ export function ControlCentre(p: { store: RemoteStore }) { (media().st === "playing" ? "accent" : "dim")} size="xl" /> - + {media().st === "none" ? "Nothing playing" : media().title || "Untitled"} - + {media().st === "none" ? "" : media().artist} diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx index 94dfad545..890dde67d 100644 --- a/apps/pocket-remote/deck.tsx +++ b/apps/pocket-remote/deck.tsx @@ -42,15 +42,25 @@ import { themed } from "./theme.ts"; // --------------------------------------------------------------------------- function Key(p: { store: RemoteStore; key: KeyRect }) { - const id = `key:${p.key.row}:${p.key.col}`; + const id = () => `key:${p.key.row}:${p.key.col}`; const armed = () => "mod" in p.key.def.act && p.store.kbMods().includes(p.key.def.act.mod); let root: NodeMirror | null = null; let glow: NodeMirror | null = null; createEffect(() => { - const depth = p.store.pressed() === id ? p.store.pressT() : 0; + const depth = p.store.pressed() === id() ? p.store.pressT() : 0; if (root) jump(root, "scale", 1 + 0.07 * depth); if (glow) jump(glow, "opacity", depth); }); + // Geometry through the mirror, not the style object: the layer switch + // changes a row's key count, so the slot Index reuses keeps its node and + // has to be re-placed. + createEffect(() => { + if (!root) return; + jump(root, "insetL", p.key.x); + jump(root, "insetT", p.key.y); + jump(root, "width", p.key.w); + jump(root, "height", p.key.h); + }); return ( { root = node; themed(() => (armed() ? "accentFill" : p.key.def.dark ? "surface" : "surfaceMuted"))(node); @@ -92,10 +101,22 @@ function Key(p: { store: RemoteStore; key: KeyRect }) { ); } -/** The pressed character, large, above the key. */ -function Bubble(p: { store: RemoteStore; key: KeyRect }) { - const r = bubbleRect(p.key); +/** + * The pressed character, large, above the key. One instance follows the + * pressed key: Show holds it while the key underneath changes, so its + * position has to be written through the mirror rather than read once into + * a style object — typing "hello" left the bubble parked on the h. + */ +function Bubble(p: { store: RemoteStore; key: () => KeyRect }) { let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + const r = bubbleRect(p.key()); + jump(root, "insetL", r.x); + jump(root, "insetT", r.y); + jump(root, "width", r.w); + jump(root, "height", r.h); + }); createEffect(() => { if (!root) return; const depth = p.store.pressT(); @@ -106,14 +127,13 @@ function Bubble(p: { store: RemoteStore; key: KeyRect }) { return ( { root = node; themed("fgFill")(node); }} > - {p.key.def.label} + {p.key().def.label} ); @@ -163,7 +183,9 @@ function Keyboard(p: { store: RemoteStore }) { )} - {(key) => } + + pressedKey()!} /> + ); } @@ -197,12 +219,12 @@ function Trackpad(p: { store: RemoteStore }) { - + {target()} - + {p.store.pressed() === "pad:drag" ? "dragging · lift to drop" : "tap · two fingers scroll · hold to drag"} diff --git a/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf b/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf index d78203d0d2c1904728eec4deded660e8cdfa701e..7a426fa2e910fb510f1c13b6a60f9fad6a263ba7 100644 GIT binary patch delta 7998 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 delta 7871 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 bKeqj={=e-%{4d{s|Lga1OZKvr7R!GDKSf!X diff --git a/apps/pocket-remote/glyphs.ts b/apps/pocket-remote/glyphs.ts index 507cf5b8b..98ecb1daa 100644 --- a/apps/pocket-remote/glyphs.ts +++ b/apps/pocket-remote/glyphs.ts @@ -79,6 +79,8 @@ export const GLYPH = { trackpad: "󰟸", /** U+F035C */ menu: "󰍜", + /** U+F003B */ + apps: "󰀻", /** U+F01C0 */ cursor: "󰇀", } as const; diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index edeb28e18..6640d01bb 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -427,6 +427,94 @@ export async function evaluateMenuConditions(entries: readonly MenuEntry[]): Pro return { hide: hide.sort(), check: check.sort() }; } +// --------------------------------------------------------------------------- +// applications (the menu's `apps` provider, which the shell lists at open) +// --------------------------------------------------------------------------- + +export interface AppEntry { + /** Desktop entry id, without `.desktop`. */ + i: string; + n: string; +} + +/** The `[Desktop Entry]` group's plain keys; later groups (actions) ignored. */ +export function parseDesktopEntry(text: string): Record { + const out: Record = {}; + let inEntry = false; + for (const raw of text.split("\n")) { + const line = raw.trim(); + if (line.startsWith("[")) { + inEntry = line === "[Desktop Entry]"; + continue; + } + if (!inEntry || !line || line.startsWith("#")) continue; + const at = line.indexOf("="); + if (at <= 0) continue; + const key = line.slice(0, at).trim(); + // Localised keys (Name[de]) are skipped: the remote shows one language. + if (key.includes("[")) continue; + out[key] = line.slice(at + 1).trim(); + } + return out; +} + +/** Whether an entry belongs in a launcher, and what to call it. */ +export function launchableName(entry: Record): string | null { + if ((entry.Type ?? "Application") !== "Application") return null; + if (entry.NoDisplay === "true" || entry.Hidden === "true") return null; + const name = entry.Name?.trim(); + return name ? name.slice(0, 40) : null; +} + +/** XDG application directories, in precedence order (the user's own first). */ +export function applicationDirectories(env: NodeJS.ProcessEnv = process.env): string[] { + const home = env.XDG_DATA_HOME ?? join(homedir(), ".local/share"); + const dirs = (env.XDG_DATA_DIRS ?? "/usr/local/share:/usr/share").split(":").filter(Boolean); + const seen = new Set(); + return [home, ...dirs, "/var/lib/flatpak/exports/share"] + .map((dir) => join(dir, "applications")) + .filter((dir) => (seen.has(dir) ? false : (seen.add(dir), true))); +} + +/** Every launchable application on the machine, by name. First directory to + * carry an id wins, which is XDG's own rule. */ +export function readApps(env: NodeJS.ProcessEnv = process.env): AppEntry[] { + const byId = new Map(); + for (const dir of applicationDirectories(env)) { + let files: string[]; + try { + files = readdirSync(dir); + } catch { + continue; + } + for (const file of files) { + if (!file.endsWith(".desktop")) continue; + const id = file.slice(0, -".desktop".length); + if (byId.has(id)) continue; + let name: string | null; + try { + name = launchableName(parseDesktopEntry(readFileSync(join(dir, file), "utf8"))); + } catch { + continue; + } + if (name) byId.set(id, name); + } + } + return [...byId] + .map(([i, n]) => ({ i, n })) + .sort((a, b) => a.n.localeCompare(b.n)); +} + +const APP_ID = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/; + +/** Launch one entry the way Omarchy launches applications: through uwsm, so + * the window lands in the session's own scope. */ +export function launchApp(id: string, log: Log): boolean { + if (!APP_ID.test(id)) return false; + runDetached(["uwsm-app", "--", `${id}.desktop`], log); + return true; +} + // --------------------------------------------------------------------------- // the pointer (host/pointer/pocket-pointer.c) // --------------------------------------------------------------------------- diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index fa0d1ebe9..cecff2338 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -42,10 +42,13 @@ import { } from "../protocol.ts"; import { hyprBatch, hyprDirectory, hyprDispatch, luaWindow, luaWorkspace, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; import { + type AppEntry, evaluateMenuConditions, + launchApp, loadMenu, Pointer, pressKey, + readApps, readLevels, readMedia, readTheme, @@ -213,6 +216,7 @@ let theme = readTheme(); let monitorOrigin = { x: 0, y: 0 }; let lastCc: HostLine | null = null; let lastMenu: { hide: string[]; check: string[] } | null = null; +let lastApps: AppEntry[] = []; let menuEntries = loadMenu(); let menuBusy = false; const pointer = new Pointer(undefined, log); @@ -309,6 +313,34 @@ async function refreshMenu(): Promise { } } +/** The application list, paged: one line has to fit the device's 8 KiB poll + * batch, and a hundred entries do not. */ +const APPS_PER_PAGE = 40; + +function appPages(apps: AppEntry[]): HostLine[] { + const pages: HostLine[] = []; + for (let at = 0; at < apps.length; at += APPS_PER_PAGE) { + const slice = apps.slice(at, at + APPS_PER_PAGE); + const page: HostLine = { t: "apps", seq: pages.length, a: slice }; + if (at + APPS_PER_PAGE < apps.length) page.more = 1; + pages.push(page); + } + if (pages.length === 0) pages.push({ t: "apps", seq: 0, a: [] }); + return pages; +} + +function refreshApps(): void { + try { + const apps = readApps(); + if (JSON.stringify(apps) === JSON.stringify(lastApps)) return; + lastApps = apps; + for (const page of appPages(apps)) broadcast(page); + log(`apps: ${apps.length} entries`); + } catch (error) { + log(`apps: ${(error as Error).message}`); + } +} + function refreshTheme(): void { const next = readTheme(); if (JSON.stringify(next) === JSON.stringify(theme)) return; @@ -327,6 +359,7 @@ function sendMirror(conn: Conn): void { if (lastState) sendLine(conn, lastState); if (lastCc) sendLine(conn, lastCc); if (lastMenu) sendLine(conn, { t: "menu", hide: lastMenu.hide, check: lastMenu.check }); + for (const page of appPages(lastApps)) sendLine(conn, page); } // --------------------------------------------------------------------------- @@ -487,6 +520,14 @@ async function handle(conn: Conn, line: ClientLine): Promise { setTimeout(() => void refreshCc(), 1500); setTimeout(() => void refreshCc(), 5000); return; + case "launch": + if (typeof line.app !== "string" || !launchApp(line.app, log)) { + log(`${conn.address}: bad launch ${JSON.stringify(line.app)}`); + return; + } + log(`launch: ${line.app}`); + scheduleSnapshot(500); + return; case "menu": if (typeof line.id !== "string" || !runMenuEntry(menuEntries, line.id, log)) { log(`${conn.address}: unknown menu row ${JSON.stringify(line.id)}`); @@ -717,9 +758,11 @@ void refreshState(); void refreshLevels(true); void refreshCc(); void refreshMenu(); +refreshApps(); setInterval(() => void refreshLevels(), 1000); setInterval(() => void refreshCc(), 3000); setInterval(() => void refreshMenu(), 30_000); +setInterval(refreshApps, 60_000); if (!pointer.available()) log("pointer: helper not built; the trackpad will be inert until the next deploy"); setInterval(() => scheduleSnapshot(), 5000); // belt and braces for missed events try { diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index 3ba69b78f..c5d6b4290 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -97,20 +97,21 @@ export function ballHit(x: number, y: number, ball: { x: number; y: number }): b } // --------------------------------------------------------------------------- -// popup (the classic one: a container of rows with a caret at its anchor) +// popup (the classic one: a container of rows over the point it answers) // --------------------------------------------------------------------------- export const POPUP_W = 176; -export const POPUP_ROW_H = 38; +/** A held tile answers with three rows (stage.tsx). */ +export const TILE_POPUP_ROWS = 3; +export const POPUP_ROW_H = 36; export const POPUP_PAD = 4; -export const POPUP_CARET = 8; -/** Distance between the anchor point and the popup's near edge. */ -export const POPUP_GAP = 12; +/** Distance between the anchor point and the popup's near edge. Short: the + * popup opens under a held finger and the first row has to be reachable + * without letting go. */ +export const POPUP_GAP = 8; export interface Popup extends Rect { - /** Caret tip, screen x. */ - caretX: number; - /** The popup opened below its anchor: the caret sits on the top edge. */ + /** The popup opened below its anchor rather than above it. */ below: boolean; } @@ -123,8 +124,7 @@ export function placePopup(anchorX: number, anchorY: number, rows: number, bound const below = anchorY + POPUP_GAP + h <= bounds.y + bounds.h - 6; const y = below ? anchorY + POPUP_GAP : anchorY - POPUP_GAP - h; const x = Math.max(bounds.x + 6, Math.min(bounds.x + bounds.w - 6 - w, Math.round(anchorX - w / 2))); - const caretX = Math.max(x + 16, Math.min(x + w - 16, anchorX)); - return { x, y: Math.max(bounds.y + 6, y), w, h, caretX, below }; + return { x, y: Math.max(bounds.y + 6, y), w, h, below }; } export function popupRowAt(p: Popup, x: number, y: number): number | null { @@ -218,15 +218,14 @@ export function trackFill(level: number): number { } // --------------------------------------------------------------------------- -// the menu sheet (Omarchy's menu, centred, two columns, scrolling) +// the menu sheet (Omarchy's menu, centred, one column, scrolling) // --------------------------------------------------------------------------- -export const SHEET: Rect = { x: 30, y: 34, w: 420, h: 274 }; +export const SHEET: Rect = { x: 68, y: 34, w: 344, h: 274 }; export const SHEET_HEAD_H = 36; export const SHEET_PAD = 8; -export const SHEET_COLS = 2; -export const SHEET_COL_W = 198; -export const SHEET_ROW_H = 38; +export const SHEET_ROW_H = 40; +export const SHEET_RADIUS = 14; /** The scrolling list's viewport. */ export const SHEET_LIST: Rect = { x: SHEET.x + SHEET_PAD, @@ -237,15 +236,14 @@ export const SHEET_LIST: Rect = { export const SHEET_BACK: Rect = { x: SHEET.x + 4, y: SHEET.y + 2, w: 44, h: 32 }; export const SHEET_CLOSE: Rect = { x: SHEET.x + SHEET.w - 48, y: SHEET.y + 2, w: 44, h: 32 }; -/** Row `i` of a submenu, in LIST space (before the scroll offset). */ +/** Row `i`, in LIST space (before the scroll offset). One column: a menu + * reads as a list, and two columns of eleven-character labels did not. */ export function sheetRowRect(i: number): Rect { - const col = i % SHEET_COLS; - const row = Math.floor(i / SHEET_COLS); - return { x: col * (SHEET_COL_W + SHEET_PAD), y: row * SHEET_ROW_H, w: SHEET_COL_W, h: SHEET_ROW_H }; + return { x: 0, y: i * SHEET_ROW_H, w: SHEET_LIST.w, h: SHEET_ROW_H }; } export function sheetContentH(count: number): number { - return Math.ceil(count / SHEET_COLS) * SHEET_ROW_H; + return count * SHEET_ROW_H; } export function sheetMaxScroll(count: number): number { @@ -255,14 +253,8 @@ export function sheetMaxScroll(count: number): number { /** Row index under a screen point, given the list's scroll offset. */ export function sheetRowAt(x: number, y: number, count: number, scroll: number): number | null { if (!within(x, y, SHEET_LIST)) return null; - const lx = x - SHEET_LIST.x; - const ly = y - SHEET_LIST.y + scroll; - const col = Math.floor(lx / (SHEET_COL_W + SHEET_PAD)); - if (col < 0 || col >= SHEET_COLS || lx - col * (SHEET_COL_W + SHEET_PAD) >= SHEET_COL_W) return null; - const row = Math.floor(ly / SHEET_ROW_H); - if (row < 0) return null; - const i = row * SHEET_COLS + col; - return i < count ? i : null; + const i = Math.floor((y - SHEET_LIST.y + scroll) / SHEET_ROW_H); + return i >= 0 && i < count ? i : null; } // --------------------------------------------------------------------------- diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png index 0c4b553812ff572fdcf8f9d303a0b6cc2d50b0eb..7a7bb71598578d753c965e248223441f64389845 100644 GIT binary patch literal 13922 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 literal 14190 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 F{}0{6{LBCV literal 15895 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 Ywp}g@PGJFFD1&Zl-o93H74hu<0ng5_Q2+n{ literal 15793 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%0Dpp+_>({^=ISy_U`(qdwC0We-t zd$SO_VPkw6P~|WvuRL@Z(K_&F5|SM@JsjFoeZUZux^N7ryL3HM#&!mVQFD;Jt>sIk_=4T@~## zsZ6z~kTw{A?RbUw!ei`}XCg4QK$IXuoQ)H4m=^R87KObsUCAD}ailX81a?RHKI+O};6@_k`#5 zq6xBh<6}&eg@Z%Q)ywh{87DhNrXjiBji>M!(I4y^Sj8gTw*li~!feB3UhJd+1!kHoh?BHSq$h!XNdULSI_YS$cOZt#n(g^>=L)dhPm1)FsEcJcdgF`bx23 zsiDN_u`<-OC#Vfw{=jMH8=CEvL*uAJ7ZjwIK`Bb&eTD6}MP1p&W!*%?nhLiAvW>r& z|1YLrj39a8uNDoQ`GO_`s#o;Cqn3Y<_8ot5dNN9GqCMQa56Mc(Li)=H(`o3+Hc*kbE1s3i5_Wgv@UWLZuy_n4k2lx zemvE6&qrgU#PaS5k!x7tn677&r$r?e6v|lq-<^Wi?Q?Z0TU)mL>YrKrbrk;4*^V&S z^HJ^*6QDH(yt9_eEx)|80%q(%%g*Y`w|V^il;_ezZS{a{Q~oja4RMrB6U-&IdA6zL z(BsX_$+uPsb7WUdrM)u6f%01!s8^s@;IBp1?F}x39IiSAz6dz_gim$F?4yiR>|9 zWTa%Izq+ohpxJ0I#aH&U{_LQsnQ53`g03}1QEN<5e*YE1W3_@AHdR#vVhHRG}2vH5kd;*-bAXi%&B z_WG&Y;@MWCaWZFAbtdb0gIt`nwvJMi#Wvxa%AB&&d3-8hFMm#Jpz=U`M|}7yNz0&v zaP;wkqy&O3y%?Y(*Qz7#exG(v_tVLl_T1}X|8+3r$^V@8d&yM&Ul?;g?Aw3l{gAv` zkN@-V#}!GO`+xl|d-deMert4N|Eqmq!pMI@TJQr>r4!bI98AAWC1Xoi!8-y^OTTjA zkp#J^6vlVmr&6PVSV^<;3P(W<_+t`c4kRcXL2OQdp z5OZN?vOnS}`Eal#rr}vh{R5Zt0-U2LO2A@CKL0`IDNm5CMJ<6|L-hOCU$_1-X3w_Z zqSAWh#-ma<5%!52m4-=@LL&+DlWILt9fw)mh zD)>wsu$>(K?9nIv!CY?jk_Ve`nqIP6pp?fV%B1M!KN~%r>la?Rb`<86YIBGIl|FzF zf8$S_K+sWwDQCLei!PIal7YxTe`C;d5=vfSn?);Qu>oABB^NCWCkiYV)1T#1r30`i zr6($1EtE@8bTNBJOlBOHITs=dY~6;-4S#Rl1<>&9l*L~NR-yHTwa-d#o8$X)w{jc+ zJ3?~&30?>u|9id()`j?^b1(zH0;%TGxqOE1wRYUU2_Ek&-VK zlo?ZF$btpr_<=FEeci|ZisVpUC1l~N5@xcAz7bK=5+l0%|3+UKB+d`a_v-H;%kEc5 zGMgNrL0l4hQpJU3540_?#L2CAl(5KD+(#1;j(1W8wd ke?^X94{YUaBKCx2)?i{F4$X%Lj$(su=oo63UWJDI50pxuU;qFB diff --git a/apps/pocket-remote/media/deck.png b/apps/pocket-remote/media/deck.png index 7ae7c0aaf257f0d25da7a88cee2cea43b16c08af..1a131635520d3f1fb72cdba50611ea8aaad4701a 100644 GIT binary patch delta 12575 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 delta 12751 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 literal 10214 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 diff --git a/apps/pocket-remote/media/menu-apps.png b/apps/pocket-remote/media/menu-apps.png new file mode 100644 index 0000000000000000000000000000000000000000..ce09241c3d04ab44d4217c825f493372ea533e02 GIT binary patch literal 10997 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 literal 13300 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℘CrMSe!OV`pK_8saUG=u(77&vmIL{X|z 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 diff --git a/apps/pocket-remote/media/menu-trigger.png b/apps/pocket-remote/media/menu-trigger.png index 9489e02ef4e300799fc5274c3f8c5698c11b5df2..ca1a292fb661111e5eeb47308f8dc9ed59713a50 100644 GIT binary patch literal 12557 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 literal 12531 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 diff --git a/apps/pocket-remote/media/popup.png b/apps/pocket-remote/media/popup.png index a313f1faca082986877350417ffa76e9cf00fdd7..094796e1c7c8f8740d3a15465795b2317104f328 100644 GIT binary patch literal 11458 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 literal 11710 zcmeHtc{r4B`0qP27|9qar7V#(6q3k3(V`;7Lzsei>AG_9zR&wS&wIc3{kcE)=eh5io1I4R z?c)Og0AX^*_!0m>XyAWCULNqujW5N)0C4Dzi80DD076gePZDqP9a}T7mKNCd_yAW4 z_c6%Pj=oBs4(ok4l^=>@q5xhY$um1;ZbAo5whcnf8ArY!8!?b8Zs znRbitjOqp{2OOLMNRVIwm=cMq7+lxnpT7X4u>cLhO8?8HZmDwiu7CLOql)4Ig`iq8 zmC#-&mg*;3N$vXk(gpkA@|xN8_p|F)jKob?d58z+k2Jyp03Ivqz zeU^Ml6%Lq=u*M$S-0wNVSG#OjaBLFiW2lRRuhSzguwzB3_^tVJy|(M6XScF8t=Qyd zpz0Z8S!!@1fEZnj9Es5s300jH=8df<#feycf>GnmKjnFxYOfexF8A2BX~1t+Y3Wc= zDvQ&&G3d7XVhVBE?MqcJL!($5Wn}c1$ZI_rBguO}%RuF!8?pv+@ z8T#x!V#Ua#KhQ5js(L#}X>$_;Az=-R8%IzB&SD}8(4 z&&>6`O#(!!puPIRnO)Jf?%n#D;WxZT=)M+(Vbu0E-%V>xYAxv@lh=&MQ<9-%s%ZBn zXnK7c?c_Q6a_dTIx;iiL>@VJ{jBY{{z(`JWq52Q8D9XGS^jYjy!^q+x1LguN6jG8| z6WA1rXI8e_ObUqAJVAeqs#Z7pD0vd;^J0|yL`3PtisoQ|+p+5Iwo;$0!`1+;XMUh= zJY@IWflfl9hx_^n@l-d~C#mG_1b6bIrZT6zdn^cs zO3m|LYq1pCGf8{3Q{(`T(~6-EU|YIko}BZv0&y=$uiC*MtAqU+<=5Ru?|)cfPn^P^ zs#Yksc`>=ln`oeyu1AXB` zI&o4HK}Ma&_^D(U(pxg3xJ~k>Geo0PklnLgxd>?LB-dvUlpgQr;ijE}l0Jnfw2QqA z%N*Z4EQ?!yZ=bp?boQHPg;SNEPL*l5|4r8GVR7?ishhvr{0!g){Zmm2K7d!mt8r)b&UFaJ zS2;BV{aw(Kgxjm?KL@G1SEgxyvi}_5zleUaqI*qK?&L^5HnlBU;$yFN)|fGW{P(GWEbBy5Nnd4@fB^$eIDYZBQoxs|5yJwc5tHTn}-$WOpNEM9OGIy|eF zcu9D$I77OCdBy&r9D#Kl6Bh490)|TFa_i9bt~%kI%uwXnT|6K$D(=@GuDnkuN=w(v zafe_XbofU-c6$6UI-9-WB!d^HkOePGH4(VH>hm!8{)qskrnkW!lAPbz6N8rZBW(}! zgkiE2#YpQdi+7Ump(9F9y{=YgFEI}B)22PdW)DVpCl9#0=k@E|DH*tw8dcrs!8F?~ z1OwBE_A)LeYgw$~o~HcrU-_I2f}T*n1Gsl4-qw`tsauXo6E!jVOvPEVdPMzZd&T`U z{mbG+Xb|wx&ILmo;M7MjYjOT!0KjK18R+ldBoqqaMcee=CV-9sCQ1PLWHJmj3 zGdM9F4tR0xf&AV8!!Sq!APHULGUorCNGAgU;Ix;JpxU1Y$Nz6Un0W{wr>jp%1hOji zShg5&Cx&XsoZ;Lpjp@{u%X4%6o;Rhzw0|$yFtqr}*33TA;%WJEW7WW=lbT0$$Hv-i zqQDmw!NI=|f1mrl^&L6g;LlFB@R(mXxGop^SbuM3c-~wtlCXW`15n3WtM{w9U^n)o zvtiy)5}C7=yMK)JcDC**z>pjI2piGO)X%Bw+XEP^6o&gZO540A`TV6T_yslTg zMb~F8dCyg+1<#33ta(yzKMS5~9Igr`6L;t)gJc3qdN#bi$Y0lV!Pdv^nAq&pesi6< z4O)1|@d>ej%mhFpLn}Rk@p1A#?BU{vZ`=Gg=Zh`4yXuwt>)`^l`zm!-`C<0#fpA|| zyzY}j`|Y%5XG0ly_vd*I`&%FO=LuB(q7J>A- z#k=mr&9Qt(bRN&-DQy2rp2r3DNcIdq`OuY8bxJ#!2_DdpH_?Pmm;GBA?m5-{+JM-QVa`<`?AOBSy*KNZ*5R`@;p=x)GpVnNw;kZQ z2w5GJ_WUmA)UR%jP!DG|g%A6r4Ou`Oop)UI1PWZVEhmt?G!fm$m}lC3v(y(U)+9(a2SmtVI&JLk--g&DsMga%=f)4b?$z$M-#sf zuWpAF4iN)=X9e*5L8c>yL^_mrxd+3H00i@L|o@n?8QXAgv(xKg(g zmzomv#Z){@`<&Lv0g)@!U38uGYdshJXTp_Nw|3R|l>asH@mvF0+6liML(P=X@@p;} z@~Z8*@ZGb=L;K1$m0Scn+?8x!lzMxaZqAwfZ6w56{F4sLO$t)+ZDF=do~#i2Q}f}T$&4a_bn9u`D&z;CN84^Wu{TNiJV+pZg<(6B^m(dHV(W%fPd{%GIUZ*h1WlC;ij%m2{*|ZMr*!Dxi??XXS z;-@)YAYyX$op)FDWkc7B1YZyF#&)A|&++UOrMtq%UGP~>S6!M*yKhgk6WWUKZ`dcS zY;z&js^9U&m1e!yy1n{qpKKX?k4bxXsH@aBeSK>qjA}Am2)`tL?s(Q2-4iTsv>55g zYvjJDm)eg!FK?Ok%~`KprLfXYjxFaK@3n35ZMxND5e%)D6|KqdJ?6Jla+2u#B#4~0 z0C@P!n34PQ{xXPAIC!x1)^okaWaZ0kE2WP8+SCWDTb`RdZ@Q1OnsWTF(X+Plzir*@ zHY|55^sZo65FfwX@uo0gsd%H0-ya7bG(W0?A^vzeNr8TpLBA7 zpT5WPHb7CA-8=M#dHHtU;#GL^arSi?(XmV8^BKKIj}VjH!XwVK_%ux-eQ$+NAKer$ zeWTMABEPuvImpC_nsqZ=a z=w>+7B~2eBnio+xpgAuF}P7y1a|5?&d((gc0{K)UGbX&gJm*Zc!xR7rv`t*x|%4sUhx~@0JT%SO=mUYUB`54j{6UA*u8G?Jg z3$5%ABv9n?!uWXvFu_9(>IvQN(cPm;7O9y|Ei>)khVqm4&;@%MzQ;%wcy~|gOD_O^8U)bW`OZF)^m;Z{RTgSEj?BVCpLT=Vucb@>)gh#mzFQi$VlW2sGR}1^U9iSefeuG2TVE2DC0Ex zX(w6eM>eAu!0(BY0cI|!mW~`XX+%G)6NWDv@Z@<|iuZYmPlfVdf~eZ@g(J*aY9L_A z=~2oO7^;ut2YpKtEYuXg4QssvFtxij_hq&_B#PmL)Xp@+4gw-VQDs4YGqs6la6onF zK>f$*f5;l}6SD9xuLD#iB$03agUS8>n;;MVUmKy9N&3>6=JBhq!lrU<@k-f=kC+aL zMCK?ePzXpWfE<%hn2C@dViRk^dOG+I=6;lDLvHq=}@1U=92$FYT8b(nYw*#W?}Eh7)}XA2kWIkf7h`-5VJ%IU?x* z;9Nd1yL#IN(%psBa>gNn%P%W+v<^(B; zS@_DhD2-Zqma$Rvs$z4D-0p9{TCJR&Emyh0s@-zgN;!lKoy}pYf$Qy!c?-VwnxsRb zHqO_~2^O7q73IHNZEIQyBXwWaWN!nvAHvywHffyI(i2w zXeFOcUn^EA+|J&T1kNvTlL7$1pDXGR*Es)*5*j0fu-cl;^79b|k~p8b}d^#$;}7^-?F57-t@kgpkq8 zhG*?hnsD<+8yTj!kc4Cejrkpx49@~#OOu-5CguDy3Tn(+_MYV#1j`N?TpX%fH*v@B zNu7DM1CDUSC%^&%!~B--)Q$NsajBAV5LJMO)R46I01uFoAf+ZlmQe-=FboZm=8(nX z7{gZOn~zl`LF1-K-Hf@bVh3QerzL{z!jni3=B!PNm()gLj@E+i5FR<(*4MT`fpVz3cO zMp+U*$^eWygk&6_*ny*(_kbY_h@p<0n*0O+Ng)tbPTBf@;^rAXP>5_2QkzKSl*uMw z5SImK=7E*AuDb$4Q6eB&4$knZpHEAmsu-+M(bbDf7I#*{x5%4nFu%?J zZX^pvTTH0`HopmI=^ll6aW!ufipm4Uc%%d=!G2?BWe~M!Z_8ogN*Fe-S^)>fOHs|% zE35KQSwtvnS|bEIU6Dp0XGFDIOi$Cjnf-g5XS!U81J}wzyy-8O(nq`%X*3gXQ`X?7 z;7D4KdAA@Q^9V9_lIi*tDJFVSB9@@KIczyWx@^CeErf{ z$c#ezA}1Ez&arM1<;0ZH`TbrQLjOVJB0*jn}9W~^z66120NHF zYZYC*V)g0Z7rr{4%O)*{!zNj?AdD2_mCV)(W*31unWKj5sg_IcR7F_>n2AMfWw%2HNr*Heb8C1Wc z4IF>;#nEn8y?>&_X%PS;Rmw8V{S=h{F%!G z-7DIfl%_np;24Ulo>2!s3Vz{coX8U}heK9p_7i6$Lf6~Q2Vq-0s{^YD*R-|RhV~F; z%w&HqO;&*~I?a+4nYVRvzrNS9)f_g>S%pQuJB?2rK0W@{ahEL;2k~MUN5r9?b0WNc zo?hSjou4$!`nJ`&xl*loYVtGA#QGnAa0NWLdk;`J$wm4MAGif73=jdljZoZTx z{BVu}At5vBPcWBf=7y|^>;Tau0LK@A5mwEBz2zJ82FF3Q2Lp^pBA&!#!k0}!2w(oaOmvvzR>8%{(AjOI9NQb~+7#utYmy3HZl{15Y409t!abgk}UhT*m z4?6#aQt30F6^NkH@(261{&#O;Apti7loiR~wnk8qJliqLD0=E#Mw^f6H^iDAjbVZi ziV6bk2toBWwIPa%;h-f__Tjog5eN*+ZM;HJC`iD{%Zrs^ExF2&kC(QAMYbd=3R1HE zay@-LbNv8_6A&o}RRusa+Lu{4Ds&$J1eLSk+Vj=xb~Owq-hF4hvdo2mCOJS%LMF!> zK;~sI__ZS6+>1j^0TOmv@o}hOFmafa;W#K{@%-ZRQ?npm?$9Xt4AX_hOYY5Dav-Vy zvBDiltMbH<>~Q1#rop>TKRu`&KdPt4!pC}OI72qvOJ^e{$px^Q=5_(B>8XG|{GYf3a}n`El}+q3CsOFGA70q!B-WxMvf4f) zaGt`I@z+`F(_`%~bYL9{?)*8p2tmOQuxxI@@oOM-c5-~k7oK33a}-B^emkshwT5Np)H$8tVUUU~=DX6^rXPnd z9+=Nov=+WS5g-Zhhv1MBaaGXWUiR-dF0KTPOhoH!t@f5H288?wAk0Q=w?Bx$Es_Hl zcj!KAyP^ssU6qR)t0dO`oOs~UoENifM|ZOit!Q4skJs0Qm}hx$2!SEMi}XQY^3V9s z5_?UD*Nj)LhO?I=vy(H{8_#((-%C?pv5GaDnW$ z*urfWUeyPn;o1WIz1y8ONs;X&f7eLIWGE_YGQy+)}LPxXsWtpdgozCh}aS zckz?fdf8khhR#VZ_T^gb9}(KHY*@GdD1}+avVh&X+?Obq0cLEX?@*YHe!(J(Z?JIl z0vC7$xgX>(Ohb8~J<5_p{G@)V5H}khOliph+i_6KtY(va+JtSU0N)u4Fnec$0&5vO zh#RA~i0^M1FryrWmSDu8B>fwUf*uuOLa>-j=`)s~zWNPD1g&A!*byY*PQHszh{>iO zFP5{q#Y>4T(o^ZFiwfX*8GDGqUB<5c_G9m#(mlxbHdID;X!|R-aTM!uPQ@)lot*nN(5L=WWg`NRLe6X<}&xI05skmya#yH zf+S^uJ#4X(t$brpga$7H2YApNj(B*%)Ovl^i4}9u7<6~(i4E{YyJ2)_KueLgdWBz? z2`H#v<^!Z1z&PMXolcwptp&v)(*h1g&6ah;)wg}95zwC;Ya8apLBuqVgCyvZ(Z|fM zfW(!cU+_KWBN;JwYh09Vh$8`n5cfq}4Xy2cN=@-S1hqs;Ft#RO&62=gT?wXQ@5>F2 ziMy2dT9QbG1)5rxpf$9O`SbWNDDNpo7oNG(0_n8l8n<&{mnxoMfp@3SiR{;u(yh`N ze9wMRougKJdCL)Zle&2T0VGJCqvVyq$HyY<0Bh2&^UGJKmj=QQD~seWEKB9nD+UR+ zWq;WtK3^^V397x8B*T&dO~`+&Nds#)H(|yC{`8TO^=Xao?ndA9T=5TMa%2%|HrWMC zeH{B3;1!T435e-lmvS(dMJ_=}L4HalQ+WI47e}K(1~4G!fgNUftvu+Z<-fY+wg-UK zC^n@3?eM~of;@EN*T~!hIX$BDe5 zMVJ9I=Nj91?33hdwpHi-g@0(Uc;(Wa8S;zv`gc&CNObkKOt7Zirp zn?k^mlOHq1kzdLeJl@q=*|##u&ed-xVy0GK>1Z6_$qmj_2JDU>ql4!q+yDfVtIH|u zJY4GFpz%2&1TRTHsAA)-8gSz8Y1T~cgB3({WE_fLLSZ{j7V#_8d4*SyD>9pbs~u=# zlpBMk_rP+uwG)WFYpImz(_x|SFgZnQ+ zV_tdijOqoN+dYx55%=T7jtE#ec)1~O#^fpr$m&zIGS}56b|3kOFRcW}m8AB!11ZtS zrJYNLSCnWTzGH);9_+VKzS+KYW<#udse{262p(Mo9p{;v;4L?LjHB z=&x?h?V4TcFRs!tBht(aypG#s7$gtd)nQHOw*rZag9hv~Jw@VMU+$_@&EK88YD0|l zs!O{(j`lm4{EB^x0|kH7aR9Kgp`NIc2+2PTod3XG9e|MpOO}zHVFiL_LY#Nq9x_iN zfjPZVenUj+r6O3;{9WWQ_IgbTn(YP0jBdxx10YzSBwuR($9;YrT;MuwJ1zprXn?_% z05Y!2GM~I0qhFusu=}VW^aNP5F7j*fMjOFYEB>jR_;D-&QO-k%k_K3WE=ka5^`25i zPDn1!gk&fJ^7Dv5$xjJVuN>4cy!%8T(z=G+{J02boGARCG8o3;e#PshPkwt<(2DV6 z?h4Mi7g*wrioAFWl@o$Ff^QSZ(~3YbI8|$ekm?7pJ_IRm?8SRfl8im@0OXT^fI!wR zZk$OS0IrGw#KcY={T41L|w3EfHT8c9?EUkNYQ5j%A z6!Hd+UxIfAvfLOlZ21luYR67~>^@oZ=HI1Or{bDC(drfJ7v`cXAVOQWdjR>-MG*9>?c8dQ!X_s9s%Q z&H^z4y#xw2tI-KR?ln-6wIe;)%~~6LShY&GhYosvl@L7m)%P@?QHsusd|G^n{cmF4$sAfH84cakw@bS}{ELcg!&B-@5b?X2ikakoEEJ!R#uOiU0 z4?Xo>pz9a+VDIfFJ;&HS{6gCuX?eFNml)1RLWT`UBJkV*>GBY z_3)KarToZL)a|D9;K6d0t(+{E>bmbS15gl~!Bzr*LDMY>a#xHhQM`^gomJuJ)il{# z{?&?+W^iOk@ZSAoEIF??TgkuMHhiJg+sc&GSr$aeLlj!2T9N=>m zwiyVfe0dwga!n(ABdqzlmR~&CrcUE+jQ~&KIVX=LfPTOd=xE>ffOJKx8b6unLzHr% z|5UL`brl7=nkPr^27-)rL&NYFz+mq=Tw_WxYqj=U8nt-7;nXy{{<>!MNAUBd>h2XV z+F&%^2b|-5&cv(0#?tm-|Ew05FyqN@Dj{8kcHtPFkj12u5MDPM`p?Q&$GVRJZ+~{p z?_A_Wh#T%Jgto_yMWR+?8Xq{3>(?6|kfHe?%eHQDClb2#!$kk<3J{=GMtKM1Zsre( zOsD{OY_JNdY2uvb4oM9V#=+x;I|-1ak^`LngEwP;EW=QvIiC65<8cYpE&e>jslPd0 zAOGnJ`pJK}5(u;=s2O{ef*kN3C~tAL3d7vZkbXdm1ZfcWKZ~JsfMkL5_Fw95G;ZyP zf8D7+V1=z1NZ#)lM-uzH1tJbk>Ll2{Q%{_&XTSQuy2)w zgn{{g3Iob5QQ$O2fTI$EM;J?F7^jKzn^##eF;=2>Dmc^hYOhIZAV99cwt^l%QUt=C zRqxTOkDkres_io22DMT^ST!_Jzv^>gf53-_%Fox%omNvo(zx#vs($5z>F4~pA9;~~ z-t9vZra6!8@u|A;8!TWlkGMBF7bmTX0I^8~nFz0Dk{BP_JQ{ntz`OL-+nT}c3c%+j znL0&K=is=>Jik#wQ3{9*_mjX=*u`V*KTM~Wf$DrvNb?NW(05;#5G_meVvkl!BUS*>7i%x}k>l`0sy zskc)=O^pNRmGt-KA|SztztE)e{O?DZAC=qUck?eFzaDz!v_YQ3zu>=&usu1l9W)33 z-{uI~;tYxt6TngF0Q}2P%?7 zgNh-Xsdgsv?pXTmksRG81!tU?`R8kJHq9jy$ps3N;9GGVKu%IfX5zOyb0jP^$X!X) z9}ff%SzxQBp6nV?iT-7h+*GB2lrDryn8Zd=}7=v&R|5d=FjIW5cP z!)|-(urQH7%~t@}pG5>2-dpu=&;Rr>OX5JAi6_Lzf*oDp&EF>aa|fevS7gH;`SD$g UkMf8w0RA&MX=Yq>0u%Y)0F;bphX4Qo diff --git a/apps/pocket-remote/media/stage.png b/apps/pocket-remote/media/stage.png index a1a6428db8245b1ddd9f74b11fa8c89e4ad3a37f..7e419cd129d3acfb022f524ae313c0d409002ac6 100644 GIT binary patch literal 10801 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 literal 10949 zcmeHtc{tSV+xInwnP?cTwk*+I85N~ajHO+LqOoQPB|F*oL3fHmx>5EbGK?)VM8l8> zcgSwWFhbU0RE*vGRo&0;d7tBWk9Yg$`Q!J;IL3Fb>pZXTd7bCyTpwQ5y}-{W$_D`8 z*S>gG9{?B=`e<%JKu>Hx76t%-d8B<->$)$DmD(4xr^l;)NyFAXpFhF=^A|VCxc5WH z-tYbJd~ZZ^?E7<>FD@qSm(@==)Fe%kPdIDZZS8k+q%mZgl z1WFi&8j=0@G(AO4I8@S=y~};SPh?kD*A#`p;jnL3IKIVs%=okxwh$+0&V~GFP(FDU z#Rd{oxGz9^_Q0dIsDulknJ_gxlC3!cB$EA_QrD&n`**mmy^yuHBwd^Ll{8oSa{t0u zKRI*u63` z_kgru-Y43|@TbF}Wn1bTp29wYI=F8}hs5Hr#@oIiW~+LC_nzH(KQtyox;9c!csj48 zWGyMWM|W{qu)r_$Gi=x*+-*_dd|ig6TH7QFm+x@v>y;IT+pu%ZM#Rh%x$2p7{#Gj; zkutHW?3WXF{`oTQh?se#y<8*pK=>XAH+WY+IuU!5H_7&=GXiIge0k#y;`E zkXLRu{@*)W%jNajf)CYeB;j5Wh5Z=3Bh8yVTX^Trg$Goj-Da;;<_^RLWtS* zGb$=*rbhL0=F+Iaif%oOd0}8tQaNCVamAl8!MA8*XL&bgHlR!V)be#B3^R0>jms!A z%Pf$-+_VCOm|@5yj^_A?#3kIY{)t%%dx=xfG5v7t*e+sTkHz?+C#H4b5MB?v;o;MK zq5IRU&w5jcH;U?$UNK!Yx3FR&b;YP)J&I1+sEG!P-RMI10JO$Xbc%1I&NMcCO`I~k z4TC68W1LHPE@k-Sa zr;MRKEg&ASH}65E*RA^xv?3vtg7EBx%0D!ZDBJzpF#2F&F-8foM7?paJb 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 MENU_DOT_EMOJI[p.item.icon]; - return ( - }> - - - ); -} - function dotClass(tone: "ok" | "warn" | "danger"): string { switch (tone) { case "ok": @@ -39,30 +43,46 @@ function dotClass(tone: "ok" | "warn" | "danger"): string { } } -function Row(p: { store: RemoteStore; item: MenuItem; i: number }) { - const r = sheetRowRect(p.i); +function RowIcon(p: { row: SheetRow }) { + const dot = () => MENU_DOT_EMOJI[p.row.icon]; + return ( + } + > + p.row.icon || (p.row.kind === "app" ? GLYPH.apps : GLYPH.dot)} + tone={() => (p.row.icon || p.row.kind === "app" ? "fg" : "dim")} + size="lg" + /> + + ); +} + +function Row(p: { store: RemoteStore; row: SheetRow; i: number }) { const hot = () => p.store.sheet()?.hot === p.i; - const checked = () => p.store.menuChecked().has(p.item.id); const trailing = (): { glyph: string; tone: Tone } | null => { - if (checked()) return { glyph: GLYPH.check, tone: "accent" }; - if (p.item.kind === "menu") return { glyph: GLYPH.chevronRight, tone: "dim" }; - if (p.item.kind === "provider" || p.item.kind === "link") return { glyph: GLYPH.launch, tone: "dim" }; + if (p.row.checked) return { glyph: GLYPH.check, tone: "accent" }; + if (p.row.kind === "menu" || (p.row.kind === "provider" && p.row.id === APPS_ROUTE)) { + return { glyph: GLYPH.chevronRight, tone: "dim" }; + } + if (p.row.kind === "provider" || p.row.kind === "link") return { glyph: GLYPH.launch, tone: "dim" }; return null; }; return ( - - - - + + + + - + - {p.item.label} + {p.row.label} {(t) => ( - + t().glyph} tone={() => t().tone} size="base" /> )} @@ -91,7 +111,7 @@ export function MenuSheet(p: { store: RemoteStore }) { jump(list, "translateY", -Math.round(p.store.sheetScroller.offset())); }); const sheet = () => p.store.sheet(); - const title = () => menuTitle(sheet()?.at ?? "root"); + const title = () => (sheet()?.at === APPS_ROUTE ? "Apps" : menuTitle(sheet()?.at ?? "root")); const atRoot = () => (sheet()?.trail.length ?? 0) === 0; const rows = () => p.store.sheetRows(); return ( @@ -112,36 +132,38 @@ export function MenuSheet(p: { store: RemoteStore }) { themed("borderMuted")(node); }} > - {/* header */} - - - (atRoot() ? GLYPH.menu : GLYPH.chevronLeft)} tone={() => (atRoot() ? "dim" : "fg")} size="xl" /> - - - - - {title()} - - - - - - + {/* Header. An overflow clip is a rectangular scissor, so a child + cannot inherit the card's rounded corners: the bar is a rounded + rect with its bottom half squared off by a plain one. */} + + + + (atRoot() ? GLYPH.menu : GLYPH.chevronLeft)} tone={() => (atRoot() ? "dim" : "fg")} size="xl" /> + + + + + {title()} + + + + + {/* the list: a clip over a canvas the scroller moves */} { list = node; }} > - {(item, i) => } + {(row, i) => } - + nothing here on this machine @@ -154,14 +176,13 @@ export function MenuSheet(p: { store: RemoteStore }) { ); } -export { SHEET_COL_W, SHEET_ROW_H }; - -/** The sheet owns every contact while it is up: rows answer taps, the list - * pans and flings, the header goes back or closes, outside closes. */ +/** The sheet owns every contact while it is up: rows answer a release, the + * list pans and flings, the header goes back or closes, outside closes. */ export function sheetHandlers(store: RemoteStore): GestureHandlers { type Down = { kind: "row"; i: number } | { kind: "back" } | { kind: "close" } | { kind: "list" } | { kind: "outside" } | { kind: "card" }; let down: Down = { kind: "card" }; let panning = false; + const rowUnder = (x: number, y: number): number | null => sheetRowAt(x, y, store.sheetRows().length, store.sheetScroller.offset()); return { onDown: (c) => { panning = false; @@ -176,7 +197,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { return; } if (within(c.x, c.y, SHEET_LIST)) { - const i = sheetRowAt(c.x, c.y, store.sheetRows().length, store.sheetScroller.offset()); + const i = rowUnder(c.x, c.y); down = i === null ? { kind: "list" } : { kind: "row", i }; store.sheetHover(i); store.sheetScroller.stop(); @@ -189,10 +210,28 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { } down = { kind: "card" }; }, - onTap: () => { + onMove: (c) => { + // A finger sliding between rows without panning moves the highlight, + // so a hold-and-release lands where the eye is. + if (!panning && down.kind === "row") { + const i = rowUnder(c.x, c.y); + if (i !== null) down = { kind: "row", i }; + store.sheetHover(i); + } + }, + onUp: (c) => { + // onUp precedes onTap for one release, so the row runs here: reading + // the highlight in onTap would see it already cleared. + if (panning) { + store.sheetScroller.endDrag(-c.vy); + panning = false; + store.pressRelease(); + return; + } const t = down; store.pressRelease(); store.sheetHover(null); + down = { kind: "card" }; if (t.kind === "row") store.sheetTap(t.i); else if (t.kind === "back") store.sheetBack(); else if (t.kind === "close") store.closeSheet(); @@ -202,6 +241,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { store.sheetHover(null); if (down.kind === "row" || down.kind === "list") { panning = true; + down = { kind: "list" }; store.sheetScroller.beginDrag(); store.sheetScroller.drag(-c.fdy); } @@ -209,17 +249,12 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { onPanMove: (c) => { if (panning) store.sheetScroller.drag(-c.fdy); }, - onUp: (c) => { - if (panning) store.sheetScroller.endDrag(-c.vy); - panning = false; - store.pressRelease(); - store.sheetHover(null); - }, onCancel: () => { if (panning) store.sheetScroller.endDrag(0); panning = false; store.pressRelease(); store.sheetHover(null); + down = { kind: "card" }; }, }; } diff --git a/apps/pocket-remote/popup.tsx b/apps/pocket-remote/popup.tsx index 6dd04dd71..c7aebb13c 100644 --- a/apps/pocket-remote/popup.tsx +++ b/apps/pocket-remote/popup.tsx @@ -1,19 +1,16 @@ // SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/popup.tsx — the classic popup: one container of rows -// with hairlines between them and a caret at the point it answers, scaled -// and faded in from that point. The stage's tile menu is one; anything else -// that needs a small list at a finger can be another. -// -// The caret joins the body without a seam by drawing three things in order: -// a border-coloured diamond, the bordered body, then a body-coloured diamond -// on top that covers the border where the two meet. +// with hairlines between them, growing out of the point it answers. No +// caret: at this size a triangle cannot meet a rounded, bordered body +// without a visible seam, and the popup already reads as belonging to the +// finger that opened it. import { createEffect, Index } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; import { Icon, type Tone } from "./icons.tsx"; -import { type Popup, POPUP_CARET, POPUP_PAD, POPUP_ROW_H } from "./layout.ts"; +import { type Popup, POPUP_PAD, POPUP_ROW_H } from "./layout.ts"; import { themed } from "./theme.ts"; export interface PopupRow { @@ -22,18 +19,26 @@ export interface PopupRow { tone?: Tone; } -export function PopupBox(p: { place: Popup; rows: readonly PopupRow[]; hot: number | null; progress: () => number }) { +export function PopupBox(p: { place: () => Popup; rows: () => readonly PopupRow[]; hot: () => number | null; progress: () => number }) { let root: NodeMirror | null = null; + let body: NodeMirror | null = null; createEffect(() => { if (!root) return; const t = p.progress(); + const place = p.place(); jump(root, "opacity", t); jump(root, "scale", 0.92 + 0.08 * t); - // Grows out of its anchor: from the caret's edge. - jump(root, "translateY", Math.round((1 - t) * (p.place.below ? -6 : 6))); + // Grows towards the finger: from the edge the anchor is on. + jump(root, "translateY", Math.round((1 - t) * (place.below ? -6 : 6))); + }); + createEffect(() => { + if (!body) return; + const place = p.place(); + jump(body, "insetL", place.x); + jump(body, "insetT", place.y); + jump(body, "width", place.w); + jump(body, "height", place.h); }); - const caretY = p.place.below ? p.place.y - POPUP_CARET : p.place.y + p.place.h - POPUP_CARET; - const innerY = p.place.below ? p.place.y - POPUP_CARET + 2 : p.place.y + p.place.h - POPUP_CARET - 2; return ( - {/* caret, border colour */} - - {/* body */} { + body = node; themed("surfaceDark")(node); themed("borderMuted")(node); }} > - + {(row, i) => ( - - - + + + + - + - )} - {/* caret, body colour, over the border */} - ); } diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts index f2905b1ac..f13db9368 100644 --- a/apps/pocket-remote/protocol.ts +++ b/apps/pocket-remote/protocol.ts @@ -157,7 +157,19 @@ export interface HostMenu { check: string[]; } -export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast | HostCc | HostMenu; +/** One page of the machine's application list (the menu's `apps` provider, + * which the shell lists at open time and the device cannot know). A page + * with `seq` 0 starts a new list; the last page has no `more`. Paged + * because the whole list does not fit one poll batch. */ +export interface HostApps { + t: "apps"; + seq: number; + more?: 1; + /** Desktop entry id (without `.desktop`) and display name. */ + a: { i: string; n: string }[]; +} + +export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast | HostCc | HostMenu | HostApps; // --------------------------------------------------------------------------- // device -> host @@ -266,6 +278,12 @@ export interface ClientMenu { id: string; } +/** Launch one application by desktop entry id, as listed by `apps`. */ +export interface ClientLaunch { + t: "launch"; + app: string; +} + export type ClientLine = | ClientHello | ClientAction @@ -281,7 +299,8 @@ export type ClientLine = | ClientScroll | ClientDrag | ClientWifi - | ClientMenu; + | ClientMenu + | ClientLaunch; /** Parse one wire batch (newline-separated JSON) into typed lines; malformed * lines are skipped rather than allowed to wedge the reader. */ diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx index 368f5f131..ada6257d6 100644 --- a/apps/pocket-remote/stage.tsx +++ b/apps/pocket-remote/stage.tsx @@ -2,10 +2,11 @@ // apps/pocket-remote/stage.tsx — the live miniature of the focused monitor: // tiles = windows, accent border = focus. Tap focuses. Hold a tile and a // popup answers at the finger — float or tile it, take it full screen, -// close it. Drag a tiled window onto another to swap them, onto a strip -// tab to move it there; drag a floating window and it moves, on the laptop, -// under the finger. Swipe empty stage to step workspaces; an empty -// workspace offers the launchers. +// close it — and the SAME finger picks a row: slide onto it and let go, one +// gesture, or lift and tap. Drag a tiled window onto another to swap them, +// onto a strip tab to move it there; drag a floating window and it moves, on +// the laptop, under the finger. Swipe empty stage to step workspaces; an +// empty workspace offers the launchers. import { Index, Show } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; @@ -97,7 +98,7 @@ function Launchers(p: { store: RemoteStore }) { - + {actionById(id())?.label ?? id()} @@ -116,7 +117,9 @@ function Launchers(p: { store: RemoteStore }) { ); } -const POPUP_ROWS = (floating: boolean): PopupRow[] => [ +/** The rows a held tile answers with: what a window's own title bar would + * offer if it had one. TILE_POPUP_ROWS sizes the box. */ +const popupRows = (floating: boolean): PopupRow[] => [ { glyph: floating ? GLYPH.tile : GLYPH.float, label: floating ? "Tile" : "Float" }, { glyph: GLYPH.fullscreen, label: "Full screen" }, { glyph: GLYPH.close, label: "Close", tone: "danger" }, @@ -146,11 +149,18 @@ export function Stage(p: { store: RemoteStore }) { ); } -/** The held tile's popup, drawn over everything on the stage. */ +/** The held tile's popup, drawn over everything on the stage. Its inputs are + * accessors: Show keeps one instance while the popup's own record changes + * (a moving highlight is a new record), so geometry read once would freeze. */ export function TilePopup(p: { store: RemoteStore }) { return ( - {(popup) => } + p.store.popup()!.place} + rows={() => popupRows(p.store.popup()!.floating)} + hot={() => p.store.popup()?.hot ?? null} + progress={p.store.popupT} + /> ); } @@ -177,17 +187,28 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { let down: Target = { kind: "none" }; let swiping = false; let placing = false; + /** The contact that opened a tile's popup is still down: it now picks a + * row. One gesture — hold, slide, release — with lifting early leaving + * the popup up for a tap. */ + let picking = false; const reset = () => { store.pressRelease(); store.setDrag(null); swiping = false; placing = false; + picking = false; }; return { onDown: (c) => { down = stageTarget(store, c.x, c.y); + picking = false; store.pressDown(down.kind === "tile" ? `tile:${down.a}` : down.kind === "launch" ? `launch:${down.i}` : null); }, + onMove: (c) => { + if (!picking) return; + const popup = store.popup(); + if (popup) store.popupHover(popupRowAt(popup.place, c.x, c.y)); + }, onTap: () => { const t = down; store.pressRelease(); @@ -199,10 +220,12 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { if (down.kind === "tile") { store.pressDown(null); store.openPopup(down.a, c.x, c.y); + picking = true; down = { kind: "none" }; } }, onPanStart: (c) => { + if (picking) return; // the slide belongs to the popup, not the stage const t = down; store.pressDown(null); if (t.kind === "tile" && store.isFloating(t.a)) { @@ -216,6 +239,11 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { } }, onPanMove: (c) => { + if (picking) { + const popup = store.popup(); + if (popup) store.popupHover(popupRowAt(popup.place, c.x, c.y)); + return; + } if (placing) { store.placeTo(c.x, c.y); return; @@ -234,6 +262,16 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { } }, onUp: (c) => { + if (picking) { + // Released on a row: run it. Released anywhere else: the popup stays + // up, so the same choice can be made with a tap. + const popup = store.popup(); + const row = popup ? popupRowAt(popup.place, c.x, c.y) : null; + if (row !== null) store.popupRun(row); + else store.popupHover(null); + reset(); + return; + } if (placing) { store.placeTo(c.x, c.y, true); reset(); @@ -253,12 +291,14 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { }, onCancel: () => { if (placing) store.placeCancel(); + if (picking) store.popupHover(null); reset(); }, }; } -/** While a tile's popup is up: rows answer, anything else puts it away. */ +/** While a tile's popup is up and no finger is mid-gesture on it: a row + * answers a release, a touch anywhere else puts the popup away. */ export function popupHandlers(store: RemoteStore): GestureHandlers { let outside = false; return { @@ -279,15 +319,15 @@ export function popupHandlers(store: RemoteStore): GestureHandlers { if (!popup || outside) return; store.popupHover(popupRowAt(popup.place, c.x, c.y)); }, - onTap: () => { + onUp: (c) => { + // The action runs here, not in onTap: onUp comes first for one + // release and clearing the highlight there left onTap with nothing. const popup = store.popup(); store.pressRelease(); - if (!popup || outside || popup.hot === null) return; - store.popupRun(popup.hot); - }, - onUp: () => { - store.pressRelease(); - store.popupHover(null); + if (!popup || outside) return; + const row = popupRowAt(popup.place, c.x, c.y); + if (row !== null) store.popupRun(row); + else store.popupHover(null); }, onCancel: () => { store.pressRelease(); diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts index e6250c7cb..43c221c63 100644 --- a/apps/pocket-remote/store.ts +++ b/apps/pocket-remote/store.ts @@ -34,6 +34,7 @@ import { type Mode, placePopup, type Popup, + TILE_POPUP_ROWS, type Rect, SHEET_LIST, sheetMaxScroll, @@ -49,10 +50,11 @@ import { windowAt, } from "./layout.ts"; import { MENU_ROOT, menuChildren, menuItem, menuParent } from "./menu-tree.ts"; -import type { MenuItem } from "./menu.ts"; +import type { MenuKind } from "./menu.ts"; import { type ClientLine, type Direction, + type HostApps, type HostCc, type HostLine, type HostState, @@ -192,6 +194,27 @@ export interface Sheet { hot: number | null; } +/** The sheet's rows come from two places — the baked menu tree, and the + * machine's application list — so the view sees one shape. */ +export interface SheetRow { + id: string; + label: string; + /** The glyph the shell shows, or "" for a row that has none. */ + icon: string; + kind: MenuKind | "app"; + checked?: boolean; +} + +export interface AppEntry { + /** Desktop entry id, without `.desktop`. */ + i: string; + n: string; +} + +/** The menu's `apps` provider: the shell lists it at open time, so the + * device asks the daemon for it and shows the list itself. */ +export const APPS_ROUTE = "apps"; + /** A held key's variant chips. */ export interface KeyFly { /** Screen-space rect of the held key. */ @@ -245,6 +268,9 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const [media, setMedia] = createSignal({ st: "none", title: "", artist: "" }); const [menuHidden, setMenuHidden] = createSignal>(new Set()); const [menuChecked, setMenuChecked] = createSignal>(new Set()); + const [apps, setApps] = createSignal([]); + /** Pages arrive one line at a time; the list swaps in when the last lands. */ + let appPages: AppEntry[] = []; const tabs = createMemo(() => { const s = state(); @@ -297,10 +323,22 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { toastUntil = frameCount + TOAST_FRAMES; }; - /** The open submenu's visible rows. */ - const sheetRows = createMemo(() => { + /** The open route's rows: the machine's applications under the `apps` + * provider, this submenu's visible children anywhere else. */ + const sheetRows = createMemo(() => { const s = sheet(); - return s ? menuChildren(s.at, menuHidden()) : []; + if (!s) return []; + if (s.at === APPS_ROUTE) { + return apps().map((app) => ({ id: app.i, label: app.n, icon: "", kind: "app" as const })); + } + const checked = menuChecked(); + return menuChildren(s.at, menuHidden()).map((item) => ({ + id: item.id, + label: item.label, + icon: item.icon, + kind: item.kind, + checked: checked.has(item.id), + })); }); const sheetScroller: Scroller = createScroller({ max: () => sheetMaxScroll(sheetRows().length), @@ -604,9 +642,15 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { say(item.kind === "action" ? item.label : `${item.label} — on the laptop`); }; + /** Launch an application the daemon listed. */ + const launch = (id: string, label: string) => { + send({ t: "launch", app: id }); + say(label); + }; + // ---- popups -------------------------------------------------------------------- const openPopup = (a: string, x: number, y: number) => { - setPopup({ a, place: placePopup(x, y, 3), floating: isFloating(a), hot: null }); + setPopup({ a, place: placePopup(x, y, TILE_POPUP_ROWS), floating: isFloating(a), hot: null }); setPopupT(0); }; const popupHover = (hot: number | null) => { @@ -687,17 +731,18 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const s = sheet(); if (s && s.hot !== hot) setSheet({ ...s, hot }); }; - /** A tapped row: a submenu opens here, anything else runs on the laptop - * and the sheet goes away. */ + /** A tapped row: a submenu opens here, the applications provider opens as + * a list here, anything else runs on the laptop and the sheet goes away. */ const sheetTap = (i: number) => { - const item = sheetRows()[i]; - if (!item) return; - if (item.kind === "menu") { - sheetPush(item.id); + const row = sheetRows()[i]; + if (!row) return; + if (row.kind === "menu" || (row.kind === "provider" && row.id === APPS_ROUTE)) { + sheetPush(row.id); return; } closeSheet(); - menuRun(item.id); + if (row.kind === "app") launch(row.id, row.label); + else menuRun(row.id); }; const openKeyFly = (fly: KeyFly) => { @@ -753,11 +798,26 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setMenuHidden(new Set(Array.isArray(line.hide) ? line.hide.filter((v): v is string => typeof v === "string") : [])); setMenuChecked(new Set(Array.isArray(line.check) ? line.check.filter((v): v is string => typeof v === "string") : [])); break; + case "apps": + applyApps(line); + break; case "toast": say(line.text); break; } }; + /** One page of the application list; page 0 starts over, the page without + * `more` publishes what has arrived. */ + const applyApps = (line: HostApps) => { + if (line.seq === 0) appPages = []; + if (Array.isArray(line.a)) { + for (const entry of line.a) { + if (entry && typeof entry.i === "string" && typeof entry.n === "string") appPages.push({ i: entry.i, n: entry.n }); + } + } + if (line.more !== 1) setApps(appPages.slice()); + }; + const applyCc = (line: HostCc) => { if (line.wifi && typeof line.wifi === "object") { setWifi({ @@ -934,6 +994,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { media, menuHidden, menuChecked, + apps, slots, tilesForHit, windowAt: (x: number, y: number) => windowAt(x, y, tilesForHit()), @@ -1013,6 +1074,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { click, dragButton, menuRun, + launch, applyLine, send, }; diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index 86337f3cf..c9d10c79d 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -8,7 +8,17 @@ import { describe, expect, test } from "bun:test"; import { bootWorld } from "../hosts/sim/sim.ts"; import type { HostState } from "../apps/pocket-remote/protocol.ts"; import { keyboardKeys, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts"; -import { BALL_HOME, CC_BUTTON, MODE, MODE_HALF_W, SHEET_LIST, sheetRowRect, STAGE, TAB_W } from "../apps/pocket-remote/layout.ts"; +import { + BALL_HOME, + CC_BUTTON, + MODE, + MODE_HALF_W, + SHEET_LIST, + sheetRowRect, + STAGE, + TAB_W, + TILE_POPUP_ROWS, +} from "../apps/pocket-remote/layout.ts"; import type { RemoteStore } from "../apps/pocket-remote/store.ts"; const HZ = 60; @@ -64,13 +74,44 @@ async function connected(): Promise<{ world: Awaited>, x: number, y: number, settle = 20) => { +type World = Awaited>; + +const tap = (world: World, x: number, y: number, settle = 20) => { world.frame(0, undefined, [pack(x, y)]); world.frame(0, undefined, [pack(x, y)]); world.frame(0, undefined, []); for (let i = 0; i < settle; i += 1) world.frame(0); }; +/** Hold at one point, slide to another, release — the remote's second verb. */ +const holdSlide = (world: World, from: { x: number; y: number }, to: { x: number; y: number }, settle = 20) => { + for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); + for (let i = 1; i <= 6; i += 1) { + world.frame(0, undefined, [ + pack(Math.round(from.x + ((to.x - from.x) * i) / 6), Math.round(from.y + ((to.y - from.y) * i) / 6)), + ]); + } + world.frame(0, undefined, []); + for (let i = 0; i < settle; i += 1) world.frame(0); +}; + +/** The brightest run of pixels in a band, as a horizontal centre: the key + * bubble is a light chip over dark keys, so this finds where it sits. */ +function brightCentre(pixels: Uint8Array, top: number, bottom: number): number | null { + let sum = 0; + let count = 0; + for (let y = top; y < bottom; y += 1) { + for (let x = 0; x < 480; x += 1) { + const at = (y * 480 + x) * 4; + if (pixels[at]! > 180 && pixels[at + 1]! > 180 && pixels[at + 2]! > 180) { + sum += x; + count += 1; + } + } + } + return count > 40 ? sum / count : null; +} + describe("pocket-remote in the sim", () => { test("connects, mirrors a snapshot into tiles, and switches workspace from the strip", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); @@ -205,6 +246,99 @@ describe("pocket-remote in the sim", () => { expect(sent).toContainEqual({ t: "click", b: "l" }); }); + test("holding a tile opens its popup and the same finger picks a row", async () => { + const { world, store, sent } = await connected(); + const fit = store.fit()!; + // The right-hand window's tile, held in its middle. + const tile = store.slots.find((slot) => slot.a === "0x55f90e41dd40")!; + const from = { x: Math.round(tile.cur.x + tile.cur.w / 2), y: Math.round(tile.cur.y + tile.cur.h / 2) }; + expect(fit.rect.w).toBeGreaterThan(0); + for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); + const popup = store.popup(); + expect(popup?.a).toBe("0x55f90e41dd40"); + expect(popup!.place.h).toBe(TILE_POPUP_ROWS * 36 + 8); + // No tree probe while a finger is down: the probe advances the world by + // one touchless frame, which would end the hold being tested. + // Slide onto the second row and release: one gesture, no second tap. + const row = { x: popup!.place.x + 40, y: popup!.place.y + 4 + 36 + 18 }; + for (let i = 1; i <= 6; i += 1) { + world.frame(0, undefined, [pack(Math.round(from.x + ((row.x - from.x) * i) / 6), Math.round(from.y + ((row.y - from.y) * i) / 6))]); + } + expect(store.popup()?.hot).toBe(1); + world.frame(0, undefined, []); + for (let i = 0; i < 10; i += 1) world.frame(0); + expect(store.popup()).toBeNull(); + expect(sent).toContainEqual({ t: "win", op: "full", a: "0x55f90e41dd40" }); + + // Lifting without sliding leaves the popup up, and a later tap acts. + for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 10; i += 1) world.frame(0); + expect(store.popup()).not.toBeNull(); + expect(texts(world.getTree()).join(" ")).toContain("Full screen"); + const place = store.popup()!.place; + tap(world, place.x + 40, place.y + 4 + 18); + expect(store.popup()).toBeNull(); + expect(sent).toContainEqual({ t: "win", op: "float", a: "0x55f90e41dd40" }); + }); + + test("the sheet is one column, scrolls, and lists the machine's applications", async () => { + const { world, store, sent } = await connected(); + store.applyLine({ t: "apps", seq: 0, more: 1, a: [{ i: "foot", n: "Foot" }, { i: "chromium", n: "Chromium" }] }); + store.applyLine({ t: "apps", seq: 1, a: [{ i: "org.gnome.Nautilus", n: "Files" }] }); + expect(store.apps().length).toBe(3); + + tap(world, BALL_HOME.x + 22, BALL_HOME.y + 22); + const root = store.sheetRows(); + expect(root.length).toBe(10); + // One column: every row shares an x and steps by one row height. + expect(sheetRowRect(1).x).toBe(sheetRowRect(0).x); + expect(sheetRowRect(1).y - sheetRowRect(0).y).toBe(sheetRowRect(0).h); + // Ten rows do not fit: a fling scrolls the list. + const listMid = { x: SHEET_LIST.x + 100, y: SHEET_LIST.y + 150 }; + world.frame(0, undefined, [pack(listMid.x, listMid.y)]); + for (let i = 1; i <= 8; i += 1) world.frame(0, undefined, [pack(listMid.x, listMid.y - i * 12)]); + world.frame(0, undefined, []); + for (let i = 0; i < 40; i += 1) world.frame(0); + expect(store.sheetScroller.offset()).toBeGreaterThan(20); + expect(store.sheet()).not.toBeNull(); + + // Apps opens on the device, not the laptop. + store.sheetScroller.scrollTo(0, { immediate: true }); + world.frame(0); + const appsAt = store.sheetRows().findIndex((row) => row.id === "apps"); + const r = sheetRowRect(appsAt); + tap(world, SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 20); + expect(store.sheet()?.at).toBe("apps"); + expect(store.sheetRows().map((row) => row.label)).toEqual(["Foot", "Chromium", "Files"]); + expect(texts(world.getTree()).join(" ")).toContain("Chromium"); + // Tapping one launches it and closes the sheet. + const first = sheetRowRect(0); + tap(world, SHEET_LIST.x + first.x + 60, SHEET_LIST.y + first.y + 20); + expect(store.sheet()).toBeNull(); + expect(sent).toContainEqual({ t: "launch", app: "foot" }); + }); + + test("the key bubble follows the key being pressed", async () => { + const { world, store } = await connected(); + tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); + expect(store.mode()).toBe("deck"); + const centres: number[] = []; + for (const label of ["h", "e"]) { + const key = keyboardKeys("lower").find((k) => k.def.label === label)!; + for (let i = 0; i < 5; i += 1) world.frame(0, undefined, [pack(key.x + key.w / 2, key.y + key.h / 2)]); + const bubble = brightCentre(world.render(), key.y - 40, key.y); + expect(bubble).not.toBeNull(); + expect(Math.abs(bubble! - (key.x + key.w / 2))).toBeLessThan(8); + centres.push(bubble!); + world.frame(0, undefined, []); + for (let i = 0; i < 14; i += 1) world.frame(0); + } + // It moved: one instance follows the pressed key rather than parking on + // the first one. + expect(Math.abs(centres[1]! - centres[0]!)).toBeGreaterThan(40); + }); + test("a hello that is still pending shows the approval screen", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index fcf7b130f..71a86623f 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -22,8 +22,12 @@ import * as wire from "../apps/pocket-remote/host/wire.ts"; import { buildState, luaWindow, luaWorkspace, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; import { childrenOf, normalizeMenu, parentOf, parseMenuJsonc, stripJsonc } from "../apps/pocket-remote/host/menu-source.ts"; import { + applicationDirectories, evaluateMenuConditions, + launchableName, + launchApp, paletteFrom, + parseDesktopEntry, parseBrightnessctl, parseColorsToml, parseMprisNames, @@ -75,6 +79,7 @@ import { SCREEN_W, SHEET, SHEET_LIST, + SHEET_ROW_H, sheetContentH, sheetMaxScroll, sheetRowAt, @@ -90,6 +95,7 @@ import { TAB_W, TAB_X0, tabAt, + TILE_POPUP_ROWS, tileRect, trackDelta, trackFill, @@ -310,22 +316,24 @@ describe("pocket-remote layout", () => { expect(ballHit(380, 220, ball)).toBe(false); }); - test("a popup opens below its anchor when there is room, above otherwise, and stays on the stage", () => { - const below = placePopup(240, 60, 3); + test("a popup opens below its anchor when there is room, above otherwise, stays on the stage, and its first row is a short slide away", () => { + const below = placePopup(240, 60, TILE_POPUP_ROWS); expect(below.below).toBe(true); expect(below.y).toBeGreaterThan(60); - expect(below.h).toBe(3 * POPUP_ROW_H + 8); - const above = placePopup(240, 300, 3); + expect(below.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 8); + // A hold-and-slide has to reach row zero without letting go. + expect(below.y + 4 + POPUP_ROW_H / 2 - 60).toBeLessThanOrEqual(32); + const above = placePopup(240, 300, TILE_POPUP_ROWS); expect(above.below).toBe(false); expect(above.y + above.h).toBeLessThan(300); - const edge = placePopup(5, 60, 3); + const edge = placePopup(5, 60, TILE_POPUP_ROWS); expect(edge.x).toBeGreaterThanOrEqual(STAGE.x + 6); - expect(edge.caretX).toBeGreaterThanOrEqual(edge.x + 16); - const far = placePopup(478, 60, 3); + const far = placePopup(478, 60, TILE_POPUP_ROWS); expect(far.x + far.w).toBeLessThanOrEqual(SCREEN_W - 6); expect(popupRowAt(below, below.x + 10, below.y + 4 + 10)).toBe(0); expect(popupRowAt(below, below.x + 10, below.y + 4 + POPUP_ROW_H * 2 + 10)).toBe(2); expect(popupRowAt(below, below.x - 1, below.y + 10)).toBeNull(); + expect(popupRowAt(below, below.x + 10, below.y + below.h + 4)).toBeNull(); }); test("the control centre hangs from its button and hit-tests its tiles, transport and sliders", () => { @@ -355,21 +363,21 @@ describe("pocket-remote layout", () => { expect(CC_TRACK_X + CC_TRACK_W).toBeLessThan(CC.w); }); - test("the menu sheet lays rows out in two columns, scrolls what does not fit, and hit-tests through the scroll", () => { + test("the menu sheet is one column, is centred, scrolls what does not fit, and hit-tests through the scroll", () => { expect(SHEET.x + SHEET.w).toBeLessThanOrEqual(SCREEN_W); expect(SHEET.y + SHEET.h).toBeLessThanOrEqual(SCREEN_H); + expect(SHEET.x).toBe(SCREEN_W - (SHEET.x + SHEET.w)); // centred expect(SHEET_LIST.y + SHEET_LIST.h).toBeLessThanOrEqual(SHEET.y + SHEET.h); - expect(sheetRowRect(0)).toMatchObject({ x: 0, y: 0 }); - expect(sheetRowRect(1).x).toBeGreaterThan(sheetRowRect(0).w); - expect(sheetRowRect(2).y).toBe(sheetRowRect(0).h); - expect(sheetRowRect(1).x + sheetRowRect(1).w).toBeLessThanOrEqual(SHEET_LIST.w); - expect(sheetMaxScroll(10)).toBe(0); // the root fits - expect(sheetContentH(14)).toBeGreaterThan(SHEET_LIST.h); - expect(sheetMaxScroll(14)).toBe(sheetContentH(14) - SHEET_LIST.h); - const r3 = sheetRowRect(3); - expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10, 10, 0)).toBe(3); - expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10 - 38, 10, 38)).toBe(3); - expect(sheetRowAt(SHEET_LIST.x + r3.x + 10, SHEET_LIST.y + r3.y + 10, 3, 0)).toBeNull(); + expect(sheetRowRect(0)).toEqual({ x: 0, y: 0, w: SHEET_LIST.w, h: SHEET_ROW_H }); + expect(sheetRowRect(1)).toMatchObject({ x: 0, y: SHEET_ROW_H }); + // Ten root rows in one column already scroll. + expect(sheetContentH(10)).toBeGreaterThan(SHEET_LIST.h); + expect(sheetMaxScroll(10)).toBe(sheetContentH(10) - SHEET_LIST.h); + expect(sheetMaxScroll(2)).toBe(0); + expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 10, 0)).toBe(0); + expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 3 * SHEET_ROW_H + 10, 10, 0)).toBe(3); + expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 10, 3 * SHEET_ROW_H)).toBe(3); + expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 0, 0)).toBeNull(); expect(sheetRowAt(SHEET.x + 2, SHEET_LIST.y + 10, 10, 0)).toBeNull(); }); @@ -574,6 +582,36 @@ describe("pocket-remote omarchy readers", () => { }); }); +describe("pocket-remote applications", () => { + test("desktop entries are read the way a launcher reads them", () => { + const entry = parseDesktopEntry( + `[Desktop Entry]\n# a comment\nType=Application\nName=Files\nName[de]=Dateien\nExec=nautilus --new-window\nIcon=org.gnome.Nautilus\n\n[Desktop Action new-window]\nName=New Window\n`, + ); + expect(entry.Name).toBe("Files"); + expect(entry.Exec).toBe("nautilus --new-window"); + expect(entry["Name[de]"]).toBeUndefined(); + expect(launchableName(entry)).toBe("Files"); + expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Application\nName=X\nNoDisplay=true\n"))).toBeNull(); + expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Link\nName=X\n"))).toBeNull(); + expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Application\n"))).toBeNull(); + }); + + test("the user's own directory comes first and flatpak's is included", () => { + const dirs = applicationDirectories({ HOME: "/home/evan", XDG_DATA_DIRS: "/usr/share:/usr/local/share" }); + expect(dirs[0]!.endsWith("/.local/share/applications")).toBe(true); + expect(dirs).toContain("/usr/share/applications"); + expect(dirs.some((dir) => dir.startsWith("/var/lib/flatpak"))).toBe(true); + expect(new Set(dirs).size).toBe(dirs.length); + }); + + test("only a well-formed desktop id may be launched", () => { + const said: string[] = []; + expect(launchApp("../../etc/passwd", (m) => said.push(m))).toBe(false); + expect(launchApp("foo; rm -rf /", (m) => said.push(m))).toBe(false); + expect(said).toEqual([]); + }); +}); + describe("pocket-remote menu source", () => { const jsonc = `{ // Root Menu diff --git a/tools/font-subset.ts b/tools/font-subset.ts index 5b07926c8..58c046bcf 100644 --- a/tools/font-subset.ts +++ b/tools/font-subset.ts @@ -45,6 +45,20 @@ for (const file of flag("scan")) { } for (const list of flag("chars")) for (const ch of list) wanted.add(ch.codePointAt(0)!); +/** A copy of `path` moved along x (font units); every command's x fields. */ +function shiftPath(path: Path, dx: number): Path { + const moved = new Path(); + moved.unitsPerEm = path.unitsPerEm; + moved.commands = path.commands.map((command) => { + const next = { ...command } as Record; + for (const key of ["x", "x1", "x2"]) { + if (typeof next[key] === "number") next[key] = (next[key] as number) + dx; + } + return next as typeof command; + }); + return moved; +} + const font = parseFont(readFileSync(source).buffer as ArrayBuffer); const glyphs: Glyph[] = [new Glyph({ name: ".notdef", unicode: undefined as unknown as number, advanceWidth: font.unitsPerEm / 2, path: new Path() })]; const missing: number[] = []; @@ -55,12 +69,21 @@ for (const cp of [...wanted].sort((a, b) => a - b)) { continue; } const glyph = font.glyphs.get(index); + // Advances are normalised to the ink: a MONOSPACED Nerd Font patch gives + // every glyph one cell of advance, but draws the double-width icons across + // two, so the ink overflows to the right of the box a text layout measures + // — an icon centred in its button looked pushed right. Shifting each path + // to x = 0 and setting the advance to the ink's own width makes a + // single-glyph run measure exactly its ink, so centring is exact. + const bounds = glyph.path.getBoundingBox(); + const shift = -bounds.x1; + const width = Math.max(1, Math.round(bounds.x2 - bounds.x1)); glyphs.push( new Glyph({ name: `uni${cp.toString(16).toUpperCase().padStart(4, "0")}`, unicode: cp, - advanceWidth: glyph.advanceWidth ?? font.unitsPerEm, - path: glyph.path, + advanceWidth: width, + path: shiftPath(glyph.path, shift), }), ); } diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index 7ed4d0993..130a40e9d 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -302,6 +302,10 @@ async function shots(outDir: string): Promise { const { bootWorld } = await import("../hosts/sim/sim.ts"); const { encodePNG } = await import("../tests/png.ts"); const { STAGE, TAB_W, CC_BUTTON, MODE, MODE_HALF_W, SHEET_LIST, sheetRowRect, BALL_HOME } = await import("../apps/pocket-remote/layout.ts"); + const APPS = [ + "Chromium", "Files", "Foot", "GIMP", "Ghostty", "Localsend", "Neovim", "Nautilus", + "Signal", "Spotify", "Steam", "Text Editor", "Thunderbird", "Zed", + ].map((name) => ({ i: name.toLowerCase().replace(/ /g, "-"), n: name })); const { keyboardKeys } = await import("../apps/pocket-remote/keyboard-layout.ts"); type Store = import("../apps/pocket-remote/store.ts").RemoteStore; const { mkdirSync } = await import("node:fs"); @@ -337,6 +341,7 @@ async function shots(outDir: string): Promise { media: { st: "playing", title: "Blue in Green", artist: "Miles Davis" }, }); store.applyLine({ t: "menu", hide: ["system.hibernate", "trigger.capture.screenrecord.stop"], check: ["setup.default.terminal.foot", "update.channel.stable"] }); + store.applyLine({ t: "apps", seq: 0, a: APPS }); store.applyLine({ t: "state", mon: { w: 1440, h: 900 }, @@ -373,18 +378,28 @@ async function shots(outDir: string): Promise { tap(40, 300); frames(10); - // the menu sheet: root, then Trigger + // the menu sheet: root, a submenu, the applications list + const tapRow = (id: string) => { + const at = store.sheetRows().findIndex((row) => row.id === id); + if (at < 0) throw new Error(`no sheet row ${id} (have ${store.sheetRows().map((r) => r.id).join(", ")})`); + const r = sheetRowRect(at); + tap(SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 20 - store.sheetScroller.offset()); + }; tap(BALL_HOME.x + 22, BALL_HOME.y + 22); frames(20); shot("menu-root"); - const trigger = sheetRowRect(2); - tap(SHEET_LIST.x + trigger.x + 60, SHEET_LIST.y + trigger.y + 19); + tapRow("trigger"); frames(20); shot("menu-trigger"); - const toggle = sheetRowRect(7); - tap(SHEET_LIST.x + toggle.x + 60, SHEET_LIST.y + toggle.y + 19); + tapRow("trigger.toggle"); frames(20); shot("menu-toggle"); + store.sheetBack(); + store.sheetBack(); + frames(20); + tapRow("apps"); + frames(20); + shot("menu-apps"); tap(10, 300); frames(10); From ea79fc1d14ccaf46546ccf9b9ed5ce935cae71d7 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 02:37:52 -0700 Subject: [PATCH 12/27] fix(pocket-remote): workspace tabs are a fixed set, a launch bar at the bottom, the mode switch centred MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The strip showed "2 3" on a machine whose desks are 1..5: Hyprland destroys an empty workspace, so a tab list built from its snapshot shrinks to whatever has windows. The tabs are now a fixed 1..N — at least five (up to eight, which is what fits beside the centred switch) — because the numbers Omarchy binds with SUPER+1..0 are addressable regardless, and a tab for a workspace that does not exist yet is how you get there. Standing on a workspace above the cap, the last tab carries its number so the strip always shows where you are. - Terminal, Browser and Files are back in a fixed bar across the bottom of the stage, three wide cells; an empty workspace no longer needs launchers of its own. The deck keeps its full height: its bottom half is the trackpad. The stage is 260 px, and the ball can no longer sit on the bar. - The mode switch is centred on the strip; the layout badge moved right of it, the control centre stays at the end. - The menu sheet no longer flashes a row when a finger lands: a press is ARMED on the down edge and only shown after the finger has stayed put for seven frames, so landing to fling highlights nothing. A release still commits, so nothing about picking a row changed. Tests: the fixed tab set including the above-cap case, the bar's cells, the ball clearing the bar, and in the sim the bar launching from a stage with windows up, the armed highlight not appearing under a fling, and appearing under a finger that stays. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 34 ++++--- apps/pocket-remote/app.tsx | 12 ++- apps/pocket-remote/layout.ts | 97 ++++++++++++-------- apps/pocket-remote/media/control-centre.png | Bin 13922 -> 15465 bytes apps/pocket-remote/media/deck-key.png | Bin 15662 -> 15850 bytes apps/pocket-remote/media/deck-variants.png | Bin 15560 -> 15750 bytes apps/pocket-remote/media/deck.png | Bin 15043 -> 15232 bytes apps/pocket-remote/media/empty.png | Bin 9982 -> 9952 bytes apps/pocket-remote/media/menu-apps.png | Bin 10997 -> 11233 bytes apps/pocket-remote/media/menu-root.png | Bin 12003 -> 12223 bytes apps/pocket-remote/media/menu-toggle.png | Bin 12995 -> 13238 bytes apps/pocket-remote/media/menu-trigger.png | Bin 12557 -> 12789 bytes apps/pocket-remote/media/popup.png | Bin 11458 -> 13095 bytes apps/pocket-remote/media/stage.png | Bin 10801 -> 12565 bytes apps/pocket-remote/menu-sheet.tsx | 14 +-- apps/pocket-remote/stage.tsx | 68 +++++++------- apps/pocket-remote/store.ts | 37 +++++++- apps/pocket-remote/strip.tsx | 25 ++--- tests/pocket-remote-sim.test.ts | 36 +++++++- tests/pocket-remote.test.ts | 68 +++++++++----- tools/pocket-remote.ts | 5 +- 21 files changed, 264 insertions(+), 132 deletions(-) diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 31a5813d2..790d8a104 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -33,17 +33,22 @@ against a scripted desktop; the panel is 480x320. | ![the deck](media/deck.png) | ![a key's bubble](media/deck-key.png) | | ![a held key's variants](media/deck-variants.png) | ![an empty workspace](media/empty.png) | +The stage is 260 px between the strip and the launch bar; the deck runs to +the bottom edge. + ## The screen ``` ┌────────────────────────────────────────────────────────────────┐ -│ 1 2 3 dwindle [▦ | ⌨] ☰ │ strip 28 px +│ 1 2 3 4 5 [▦ | ⌨] dwindle ☰ │ strip 28 px ├────────────────────────────────────────────────────────────────┤ │ │ │ stage: live miniature of the focused monitor │ -│ tiles = windows, accent border = focus ┌──┐ │ 292 px +│ tiles = windows, accent border = focus ┌──┐ │ 260 px │ deck: five rows of keys over a trackpad │◎ │ │ │ └──┘ │ +├────────────────────────────────────────────────────────────────┤ +│ >_ Terminal ◍ Browser ▤ Files │ bar 32 px └────────────────────────────────────────────────────────────────┘ ``` @@ -52,12 +57,18 @@ finger (a tile's popup, the control centre's sliders) or picks something up (the ball, a floating window, a key's variants). Novices see the choices; after a day the strokes are made without looking. -- **Strip.** One tab per workspace Hyprland has, the active one filled, plus - one empty tab so there is always somewhere new to go (the Omarchy bar's - rule). Tap switches; hold a tab to bring the focused window there and - follow it. The badge names the active workspace's layout and toggles it - (SUPER+L). The **mode switch** picks the stage or the deck. The last button - opens the **control centre**. +- **Strip.** Workspace tabs on the left, the **mode switch** centred, the + layout badge and the **control centre**'s button at the end. The tabs are a + **fixed 1..N** (at least five, up to eight): Hyprland destroys an empty + workspace, so a list built from its snapshot shrank to whatever had windows + — while the numbers Omarchy binds (SUPER+1..0) stay addressable, and a tab + for a workspace that does not exist yet is how you get there. Tap switches; + hold a tab to bring the focused window along. The badge toggles the layout + (SUPER+L). +- **Launch bar.** Terminal, Browser, Files, fixed across the bottom of the + stage in three wide cells. Those three are what a remote is reached for, + and with them here an empty workspace needs no launchers of its own. The + deck has no bar: its bottom half is the trackpad. - **Stage.** The focused monitor scaled to fit, every window a tile labelled by class and title, the focused one bordered in the accent, floating windows marked. **Tap focuses. Hold a tile** and a popup opens at the @@ -67,8 +78,7 @@ after a day the strokes are made without looking. popup stays up for a tap. **Drag a floating window and it moves**, on the laptop, under the finger (Hyprland places it every third frame and on release). Drag a tiled window onto another to swap them, onto a tab to - move it there. Swipe empty stage to step workspaces; an empty workspace - offers Terminal, Browser and Files. + move it there. Swipe empty stage to step workspaces. - **Deck.** The laptop's C surface on the iPod: five compact rows of keys over a trackpad, so typing and pointing need no mode of their own. Keys go straight to the desktop (`wtype`) as they are pressed; a pressed key rises, @@ -88,7 +98,9 @@ after a day the strokes are made without looking. the same glyphs, one column, scrolling — a menu reads as a list, and two columns of eleven-character labels made the eye jump. A submenu opens in place with its title and a back chevron; an action runs on the laptop and - the sheet goes away. **Apps lists the machine's own applications** (the + the sheet goes away. A row's highlight is **armed on the down edge and + shown only once the finger has stayed put**, so landing to fling no longer + flashes a selection. **Apps lists the machine's own applications** (the daemon reads the XDG desktop entries and pages them over; the row opens that list here rather than on the laptop). **Hold the ball and it comes along**; let go and it slides to the nearer edge at that height. It fades diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx index e4355fbcd..263f95c69 100644 --- a/apps/pocket-remote/app.tsx +++ b/apps/pocket-remote/app.tsx @@ -1,9 +1,10 @@ // SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/app.tsx — Pocket Remote: an Omarchy companion for the -// iPod touch. Landscape: the workspace strip on top with the mode switch and -// the control centre; under it either the stage (a live miniature of the -// desktop you can touch) or the deck (keyboard over trackpad); a ball on -// one edge that opens Omarchy's menu as a sheet. The daemon on the Omarchy +// iPod touch. Landscape: the workspace strip on top with the mode switch +// centred and the control centre at its end; under it either the stage (a +// live miniature of the desktop you can touch, over a fixed launch bar) or +// the deck (keyboard over trackpad); a ball on one edge that opens +// Omarchy's menu as a sheet. The daemon on the Omarchy // machine mirrors Hyprland into a snapshot and runs exactly the commands // the keyboard would. See README.md for the design. @@ -17,7 +18,7 @@ import { Deck, deckHandlers } from "./deck.tsx"; import type { GestureHandlers } from "./handlers.ts"; import { ballHit, STRIP } from "./layout.ts"; import { MenuSheet, sheetHandlers } from "./menu-sheet.tsx"; -import { popupHandlers, Stage, stageHandlers, TilePopup } from "./stage.tsx"; +import { LaunchBar, popupHandlers, Stage, stageHandlers, TilePopup } from "./stage.tsx"; import { connectSvc, createRemoteStore, type Svc } from "./store.ts"; import { Strip, stripHandlers } from "./strip.tsx"; import { themed } from "./theme.ts"; @@ -92,6 +93,7 @@ export default function PocketRemote() { }> + diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index c5d6b4290..d16597df2 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -29,14 +29,23 @@ export type Mode = "stage" | "deck"; /** The workspace strip across the top. */ export const STRIP: Rect = { x: 0, y: 0, w: SCREEN_W, h: 28 }; -export const TAB_W = 28; +export const TAB_W = 24; export const TAB_X0 = 6; -export const TAB_MAX = 10; -/** The active workspace's layout name; tapping toggles it (SUPER+L). */ -export const BADGE: Rect = { x: 296, y: 4, w: 62, h: 20 }; -/** The mode switch: two halves, stage and deck. */ -export const MODE: Rect = { x: 366, y: 3, w: 68, h: 22 }; +/** + * Workspaces are a FIXED set, not the ones that happen to exist: Omarchy + * binds SUPER+1..0, so those numbers are addressable whether or not + * Hyprland is currently keeping a workspace alive (it destroys an empty + * one, which left the strip showing "2 3" on a machine the user thinks of + * as having five desks). Five is the set in practice; the strip grows to + * whatever exists above that, up to what fits left of the mode switch. + */ +export const TAB_MIN = 5; +export const TAB_MAX = 8; +/** The mode switch: two halves, stage and deck. Centred on the bar. */ +export const MODE: Rect = { x: (SCREEN_W - 68) / 2, y: 3, w: 68, h: 22 }; export const MODE_HALF_W = 34; +/** The active workspace's layout name; tapping toggles it (SUPER+L). */ +export const BADGE: Rect = { x: 326, y: 4, w: 62, h: 20 }; /** The control centre button at the strip's right end. */ export const CC_BUTTON: Rect = { x: 440, y: 2, w: 34, h: 24 }; @@ -44,8 +53,19 @@ export const CC_BUTTON: Rect = { x: 440, y: 2, w: 34, h: 24 }; // stage // --------------------------------------------------------------------------- -/** Everything under the strip: the desktop miniature, or the deck. */ -export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: SCREEN_H - STRIP.h }; +/** + * The launch bar across the bottom of the stage: terminal, browser, files. + * Fixed, because those three are what a remote is reached for and hunting + * for them in a menu is worse than the 32 px they cost — and with them here + * an empty workspace needs no launchers of its own. The deck has no bar: its + * bottom half is the trackpad. + */ +export const LAUNCH_BAR: Rect = { x: 0, y: SCREEN_H - 32, w: SCREEN_W, h: 32 }; + +/** Everything between the strip and the launch bar: the desktop miniature. + * The deck ignores the bar and runs to the bottom edge. */ +export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: LAUNCH_BAR.y - STRIP.h }; +export const DECK_AREA: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: SCREEN_H - STRIP.h }; /** Horizontal travel on empty stage that switches workspace. */ export const SWIPE_PX = 48; /** Tiles shorter than this drop their title line. */ @@ -53,20 +73,15 @@ export const TILE_TWO_LINES_H = 40; /** Fixed pool of tile slots (protocol WINDOWS_MAX). */ export const TILE_SLOTS = 24; -/** Launch chips on an empty workspace: the apps a remote is reached for. */ -export const LAUNCH_CHIP_W = 104; -export const LAUNCH_CHIP_H = 36; -export const LAUNCH_CHIP_GAP = 10; -export const LAUNCH_Y = STAGE.y + 124; - -export function launchChipRect(i: number, count: number): Rect { - const total = count * LAUNCH_CHIP_W + (count - 1) * LAUNCH_CHIP_GAP; - const x0 = Math.round((SCREEN_W - total) / 2); - return { x: x0 + i * (LAUNCH_CHIP_W + LAUNCH_CHIP_GAP), y: LAUNCH_Y, w: LAUNCH_CHIP_W, h: LAUNCH_CHIP_H }; +/** One of the launch bar's equal cells. */ +export function launchCellRect(i: number, count: number): Rect { + const w = Math.floor(LAUNCH_BAR.w / count); + return { x: i * w, y: LAUNCH_BAR.y, w: i === count - 1 ? LAUNCH_BAR.w - i * w : w, h: LAUNCH_BAR.h }; } -export function launchChipAt(x: number, y: number, count: number): number | null { - for (let i = 0; i < count; i += 1) if (within(x, y, launchChipRect(i, count))) return i; +export function launchCellAt(x: number, y: number, count: number): number | null { + if (!within(x, y, LAUNCH_BAR)) return null; + for (let i = 0; i < count; i += 1) if (within(x, y, launchCellRect(i, count))) return i; return null; } @@ -77,10 +92,12 @@ export function launchChipAt(x: number, y: number, count: number): number | null export const BALL = 44; export const BALL_MARGIN = 6; export const BALL_Y_MIN = STRIP.h + 6; -export const BALL_Y_MAX = SCREEN_H - BALL - 6; +/** It never sits on the launch bar: those three targets are fixed and the + * ball would cover one of them. */ +export const BALL_Y_MAX = LAUNCH_BAR.y - BALL - 4; /** Where it starts: the right edge, low, over the corner a window's tile * least often needs. */ -export const BALL_HOME = { x: SCREEN_W - BALL - BALL_MARGIN, y: SCREEN_H - BALL - 16 }; +export const BALL_HOME = { x: SCREEN_W - BALL - BALL_MARGIN, y: BALL_Y_MAX }; /** Released anywhere, the ball goes to the nearer side edge and keeps its * height, clamped under the strip. */ @@ -362,24 +379,32 @@ export interface Tab { } /** - * Workspaces on the strip: every ordinary workspace Hyprland has, the active - * one even when empty, plus one more empty tab so there is always somewhere - * new to go — the Omarchy bar's own rule. Capped at TAB_MAX. + * The strip's tabs: 1..N, contiguous, N at least TAB_MIN and at most + * TAB_MAX. Hyprland only reports the workspaces that exist — it destroys an + * empty one — so a list built from the snapshot alone shrank to whatever + * had windows. The numbers Omarchy binds are addressable regardless, and a + * tab for one that does not exist yet is exactly how you get there. */ export function stripTabs(ws: readonly WsInfo[], active: number): Tab[] { - const ids = new Set(); - for (const w of ws) if (w.id > 0) ids.add(w.id); - if (active > 0) ids.add(active); - const sorted = [...ids].sort((a, b) => a - b); - const last = sorted.length ? sorted[sorted.length - 1]! : 0; - const lastN = ws.find((w) => w.id === last)?.n ?? 0; - // An empty tab trails the list unless the last workspace is already empty. - if ((last === 0 || lastN > 0) && last < TAB_MAX) sorted.push(last + 1); - return sorted.slice(0, TAB_MAX).map((id, i) => ({ - id, - n: ws.find((w) => w.id === id)?.n ?? 0, + let last = TAB_MIN; + for (const w of ws) if (w.id > last && w.id <= TAB_MAX) last = w.id; + if (active > last) last = Math.min(active, TAB_MAX); + const tabs = Array.from({ length: last }, (_, i) => ({ + id: i + 1, + n: ws.find((w) => w.id === i + 1)?.n ?? 0, x: STRIP.x + TAB_X0 + i * TAB_W, })); + // Omarchy binds ten workspaces but only TAB_MAX tabs fit beside the mode + // switch. Standing on one of the high ones, the last tab carries its + // number rather than leaving the strip with nothing lit. + if (active > TAB_MAX) { + tabs[tabs.length - 1] = { + id: active, + n: ws.find((w) => w.id === active)?.n ?? 0, + x: tabs[tabs.length - 1]!.x, + }; + } + return tabs; } export function tabAt(x: number, tabs: readonly Tab[]): Tab | null { diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png index 7a7bb71598578d753c965e248223441f64389845..e326abe3a6257f6b7dd05c96b291b9c0ebf7ea55 100644 GIT binary patch literal 15465 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 literal 13922 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 diff --git a/apps/pocket-remote/media/deck-key.png b/apps/pocket-remote/media/deck-key.png index e71f35c2d217f741d558d6a4fa6243254b100361..f2473cf89db293f731db3ede3e1288683c3465d5 100644 GIT binary patch literal 15850 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 F{|goPgzEqR literal 15662 zcmdtJcQjn#*ET#eh~C>ITJ%J3(OV)S5`rK^9YhI6i8lHuK@gIN5;Y_wdLKj^Jz5Y+ zl+g(i#0;3cn!&=syyPo?#``Y{3*M4MpONW-~92E!zqSd{A z^)?6uUI6|yDb4`D+0Z5Tf&g#jY*cbj_|5HUn6PQzuDkju_RD7(L1h;4 zgd#2@1!K0sQ7V1id>WBLdyxV|rhL8<69MVOeshz;cvoF*z4gor$_&4=lV_I9y`}-F!33OINd&bsr6n!mw8-chglk}By z+-94(VJ2m^{=V5hfjl>NP%+I%FSxZd%{pD&wpz%t`oWe}Z*{iT)jKlGe}-|42Tl3`%I5Wh2LgZC=ie2|~n z-57hIxVCyutH0Xp_1mzGk_G5zPit0A*(y`AH^Pl&M0IEs{zIlLG;;3_VXk`dsY_F{ zi`B-f4GCXm&epFH)>B&>@_xeT>h6g$MC&B2S&NPP?V?*YGK7~SoLKX(J*fL7%Bz=+ zmuViC)QRFQ)!u;G`u6lur-!}RnhmI{-_=D5qWe?I^wi%jp)*S6@0P$k!yYMZS}Aa< zmA4mFYY|s$O{Q0EkL$I;C(h1cb&bdQlA)iILBtQuL{UuOg6&!_v08LN_<(yPcly8r zwOq}vQjGL$gZu3FtNa-8FvtJ=)OX!VKw=4f#Ccs@thh|SJ!CQBP5Pv;$BDa#gX@fl(LtG7iEQC(pR?5s#BVPVNQ>!r2lCIXc)pP;U^6Qu1 zRF`cSZ?NwHZnG`+U@ctX_`8`Pn#t^u+daA=QCQwwqgwOce(;;Qyjz#N)o!l6LzE}m z24H3&Y{tl@$^xV7Fvs~GhK1I{`9?8Y0|(CWLePOf#W|egyaXv?@QZVe54-vhmp49j zH;^n5zeD)U%>If(svvlq{Xjg-rV&@+-pAax6W@6MeE$lG_sdZ5H44Vw`v>h#pY@y0 zUut6G+6yFeUx$Qjt`w>oq*T6<-v63m0ax?N$+rGD-{%5#$!J?ujB8?V zZx;vF1wpNaaA90C5CS>EROH6Cg-U*^Kt=bH{86Muf{*A#O>i4tlh8<-hO|rP!L^$oTbKo;Uce< zU7H)}IY2K4yiqQC1Y$O^t4tpO_VAWe4o>FYg*Np;9}$c9=)dMkm)_VuIbu#Yd`{_w zP`^4M(hCgP=dG4RX~w=AI34&+g4A4VbbJ^r`zd5xJV1Lfz*7{~Js~oGzo(&`*M<6> zmtC3&jIugf@i8biwd`#5eS7DEe)}7%5A;Kdua`5cm4ha%MOBlIi~8xUDZH%vw0+Pi zN^!j*ffKb%FlM9N!}`?GL;9TDV%OZ%_bA0zcmyOtBtAmX;Liw%(9wRdAu z)~bcn`UCa)O(CLmLnGj0sMaoz!}=BEMp$CL;ti$J!V~G3*9lcWeWJaCYff*(+cm%z zEkHGN%=gPGhn*Yt08e!A5(^m|O z$=v~_l{(~aZ#bODFs-2m0w|RH3qXA(kxI^=_kK**mF~qXXPZtWFwT^Oji*@3i}5^h zkG;@6Gv0D#=P8AO872K7TaaX%F*SC_RG~qnGdscOPKv8vDc?|&qO+OW=G{L_WFTMt z3eu_?ilVFbxt(U&G@(wfG9rd{qB*O;XrCm`;a?#WlbA&z-IqqI()Zm?;amRzU@1-k zueT@S1*y3ZPaMe-Qt>=p90?Qbspg~8CjkDvY~VB`+kDA*`fg93EiWTUCol8A|JSz< zOj#9m?MXlR@4ku2KxgvD=Tqo^LnoAnyyE(?)s*UppSW$4d^3FZ*vMwmX#WE9#8PIb zF!51%JpI@7ur+6cU;YpC6iW3DoKh|+cnrzIrrF6|#=#33R68?=>$U~SaZ4;-edcz)= ze*DZ(F+Z;+)^u<1#=k|g1IsyW;N@zlEvhV~t@Y)_fA4z=V-gSnKQvX|QF^9NJUyk? zPHuznoSX))=<~KV@(DguG_6qQt(Z%s7_} zj9IMo1`n+y-lnb~#YeoUEmxs)s?2T7;8F>^80>}d@t~ln=&H;f@wOwUYu^yjjK|Y) zDXk5JYnQ=7zD<%T;AxCs1fpZNW{JIgLLuZ%^d}h9F5$+!ok~Fari?nuJ+${Bk%kBU z{Zcy&7XPjNQ>01|IPAeTZgb`#y-%~(w{#CCnk#3D0K;ZWv$V?|{xm1#P{)Jm6;0=*TUJ~(7#jC1^vLioaMDr}bX+@Lh` zMDa3vghtB8c=WJc-$_3dCAc=WcvvHeHnh-}T zStH!X%NJyy`8`d)h&3wjXp#yOSKsGSOq~huhH#ZI%qR8P_(qM`^K#YykB7Gr}aIm$v786v>@2o^6f}`}N1RBkjTW4(C2P zG(N&++y|i;(Q5*(`}Jd?)DviywWK1Es%Ip^rN+~6}T z24W#`?sqR;%^I<^?sb_TRi)(Q0+-Y;`8Tffsx#Eo@H$^}$TaDI`!hg?FDyI0uwCn! zxEeC{&aJZflFEahSqZ=Pnj|;h?|t}L&I~>Sa!vlet$~ms@AF6J9Pf|#Fog8&bE)K6 ztDbRCLCy!Q^$||2sk~g~NE<8c^8&&|<<*&dQWo2xcn0gBUli2}U?JU$7jzhe4H_9QU)zqh9ZuE=g#BtCcc9)X>>U3j5Dx| zoZ?RqJ->vuhgSxP?phlc)XSf2UPTsLy)q{bRWx1CWgVuI?^ zRb?LqF9yARa^+QtJKs5J;M5CLyLEB`18I_Ov?S0ir~>{YC3|_TwmDKW`Yex*xxO#_ zAyl&%(Up4zp{KsGACOR6M5Y+S>jG)~R#0S)zuxJ{XLlvt0y&t=xF>{mRIk&yyx?#n z#8m5@{seCwSNm$EP;%R2adj!FQSXacB)RFq@TJ;L{xaW1zHE0NQac;4Jma-4_jg4@ z%E2_nq8tezjH?EO%{@QRTw51uE}17lA%t07lr9z-%8hxc72csT%@%@kRS{Ib*(-2A zcqOrW;b?c9AnJ}g>IYWm8Eye(;p z#fSj<7TM&g)4)&{gHhwaxEG^T?w!lQ?658tl(V2`nV4F63{Rf6lu#3vr3jOA13MFUFfv3zw z7M=mg+uHg)G3VW9sF`=tCo*K9l^A=MfSbaL~U$!Lk_I3Kc;hkt`N4EtvG8*iUS z>5Unizh#}TdTRW$uF=VQ89=)~TMSuq_WXsqiY&Ks&VHBh$gQHIejp~NG?DjAFQGXD zzjn^5)ZP3)nEbKwXj6Co1{vUm{CrB1rQWWlvU4~;BysdD{6pBzE^)TlTfc%f=2O_I zqoJvxcpmION>SsaZcY@ntZ6t|msDn-6(OO{_*Aik0^F4ANbSfDAxQL(!|h}EgE8@Q z83LW(2)rrusy>>mr|t^v%@D!Pr8;{HPA`76^{s&eIAbdI!*;1g6LwDi zs>*O;*!IXtkphI~4$cf$6e6E}v|)qnO7~gTtNlcmv)acJJ<%SHVV)OZ^f)+Ls$9}1 zxGNGST0ybQ>$yR4<44&qvA+(sGsw)3Ov4y>K7M}~48A2^lcI+>+?qFs9L@3^rEgBU z%?~HF`b!^<^AHu%Az~*Y8gcaZ_pU(7NYh%FWd*?35DN3n{LMQKJncib@(vrA7Pztb zo=2>6VTY&JlEV+;W{K1w6zkvY4(Pc=J(YL78GZv9jE-%?nE?~oQdU9SKT($HdQ5EcOakR7ZMygL-!+JR9Z`bU_t0PrC~LYWt8*EH5s!w-AO z7gNKVSGq2cBKjO8o%(Ls48*$Qo8fD_fg|4ACkitH(K*ewAFAQA-d>bH`VKg)XHbqC zvNutI*J1eQ+)V^L5a7LHK#8|}IfgZieWxjKy&9#5XN=XKA>ID|DmX0vG#R z``9m$Z0ZL}S%9xiN?84JR5#oC)Hd;e{M6ZMa-eU2Fh>h!us_Ly(~La2%FXdLo4z};E7(x}hsHFJcyv&XH494zr+(|8t) z=~Zz7S5WhLYK>+*5=ZFXxwEB7)jh>@H>IQo-g$0S#O=ESr56zhN`t>GOiRh-NGUt? z1lma=1kt$NyEv8ZhQ~T@?J2zO_MwXmr%wlSg63B!?+T%zlxfl0$%EWVc5~5-DnZW# zP(qK&;4Q1mMG0>2I^Bw>6f43XiI+kbd^xJws4GbolfpN4Bnf4Y0~eqWD|u6Up9%Of zR~^U_%bu50m-|8od?rO4QpKwh^hBO~%y&}g8btJFl`qo(WQ4><55hUoF8}M(7Yk&? zTG_YFAe%0R2aUr%{!hctW)?khak%751C|hdkkOYkW(REnVMZfpV|m+F?`-eGC07Ssg}Ik!2*k8C-U7}k&T|@;8_rv+T^pj9SI;zJ>KwQe=+oHO z6VKXI?JC};X?eu}tM$tLSPJSxO(H1Eq~9#<$0ysCv&6RvUs@$lGLv1BknBht>!u&A6g5;&5?ZIPawE{SqdZBFgm0wB=$R ztt9asJ1mhY*ZU_6bxxzuM6M(B@@d0U_+ot6z{Pv!6}}W16)(Jj71SIp@Eb3WR&0~MSb~3G9{4RjUbc;vs9(5qH-{pD zK3)Nr-+Z+3Ip`ufXi?K=iEi;B9nGG_*WeZU6aD?*zVihANZXNk(s_i?b&=1>N>B$_V9xPSz^Q=*ni#MK6g5_MB|Q$(XCxs%T7#1xN*Wp zozU+cd|a{J{-W|1Xq$IEdB_wmY4q3<0`x+#9!xO7s<|`fu6C)Q!zHbGyl4yVcw<%o zO;t4~6#c1F1iat#8#k8^Cz^GUtgu#nifYo`bp;7sWbpe_d@`mkAvLG8lcOwyFNSV? z%5x6?wHBU&!Gs@en}81z>4B{mv6)a-F+~oN?tiSNo|-%MY-C+n3*QcrXxTm*q_3G* z+8N$_XhuvWZ4^}JRDK|V319c!CdCgm9n_|H65p%Mwf#~!^W#&b2slaeie&Vb>>L1) z@96-5DF^X4QeY?M@%gJr%hj&a&^;-q<&(-uThNld1k)UD|8u*v*BfAdFH)u;UiUm) z5Zl7|+DYhs-#kHzeZkZE$Y82@{)B#Nu&@0M6=DT4#@-UTS4oQKPN+H!!c*An7PgHK zZG7}6`R2HiTi4knC(-X2xWgN^Lgwm0JSv3a9)j&^SaGBp{pEB*`i=4}-V+qr(kVK6 z%L?KaP-|98TMy#u^ocQ;xJw}|06zb~ep&Ruw9mnxLxx5_KD^mJq#KXDVxr!_+bNBW z+&${Cy$5h4Sq`eWRr;L~0UJ+5z>hGc1HlfmJI^LD&f%Fk&Deb4MvgQ1z6k#|bKVtx z*q|Q);<={7G=xpx;>P)3WRUjS(ZGGVCfvGxvgh%N1@=s{+5$;Kk)_jV(Zk^J%K3*8 z66YXY&ByX(@jml5l&tY45p|Klm#Nb=5l`Y{Om|>?e!5rJdn^r4*YSI$R&q>G)65BO zB~fWz7|mjR=r(-G@%q!(7V<1NdicRfYx7Wk8fnr3^ZwlljydI-+~b>v4Hw(Au$2KE zg&^jiCd~pM8gI>o7OGSJ*~dMG{qnw|vvs0XeZLNVKB2hO<{27pch}`fQa8PSm8i&#*}Qvx@Aun z`EB7g!Gd?p7x&rlXk+%8Fk0UBPIjDMLYBv$zdLsG>ZE&WH2{YEpZU8!!06el z5T!`CH*|6nN88QbUIOvxYfqGj9%m>^Y+&tWS~#J+N|U|vu;l5pYTy$FMtS^_qGC8p z6EdPTYN9A$-jz_l7n2J`Fh(+nK04pa>4@>EuNFJQvry`tKE^o=J}^FSzj*JGoRY_8 z!b}V10-0i&(6m(*Lsk_Ge$LQ(iFR$$VS%d@l>TCkO0j6q`uy!f&visA<}I0d^i}}! zF_2Jey$tP4dPRFPIP|F=&+;&v+y0{UXy{K*Gem0^DbNaj+6rD+N~?kSM5>i^qj5{E zD9!-q!y(yR%pCU#C+FL8YEwccimdxNng-B9EwhA%WXKF#c(MQRbPz5QA52&d8=yZP zasJ&7^X@Q3!8bKRAJM!Ed@yZKt*nI4LVIj`vUapGfs+UlMh}`*3ytlpQ_Qi38TRF$-UMY<`j3t~E2vEN5R61`I zg0d)r-$r*x=`T}zauVlS34{F)QNU9FSiLpdO2BUSLLb0pG9* zRZTl##mu(2%Qzu*-@I@&i^|i84oVLF?$~zeYo{0x!qwP0zX00|v|^M;9l+jbmEYaGpN^Zw>n%PmQG6gyPPN$R9-P>*zzi(fSfyIw0* z4~M_dA-QdzaRF^6-YfwmVtJbyKR8h<{m?xq(uw-Ho{E2|gL}^NQS}^)nPt&9@)NWo zgT@2yS^i^nPbPUaq9~oZJM@$ONosiPKx{=_;VlwX*jpCZz}ksvo3`Zzt}_(2&P~VF zX0P;#`;U$S$zVfuCjm|N--m6XHeH?q1WZyrC5btFEsP-s(5 zWBq)~P9^>&qI7_Mu1qY?uUy>m+yYpu929Kpb*bE&rzeQWk=aagfM;RY^7x_#f)fU&`8HPO{#w~Rn$@RoI zQt0<)q`#8WFRg*2NGHKcu~1ksj>5B*9$=Q!w={e$PFTa!yDSJ$?RX^neYfovw9k{}LP4ym!fjEeXf}kMCGpD+1 zlY6hn*6(}*CjuaN1LtPnEx%L&hpjJGuBP2aHmFvKHq22m*0%-#~i z$lvy!x=tg919NQ-#&PiEoac+DJkzY3F!Bx0}$GB{cELcd? zjhljZB^%=!s+J0$MKi}eRA`BL@m)GmQrW5J@cN^M#M+qV_o+f${SrHOv%XxlR6lsg zmC&TYqJhF$vqLyt4UCY^V}-YX-8@IXd^X#<<|WbT=!2#ZrLOoTfu=ayKe)@leMY_H zOsT;1x>z?l0g8@YdJ!p{YF{o*By^3{;+U5b(8svDX;tEM%nUYjd5ew z-p6AyO@25qEtr2^D+_Wme$9IZh09R^%R9s^;5X(6W3ysK&}j(F^*U?P4BCjm-kT3G zU$6+XlR{aowceO~!p%2B%W>B~^NDfD9K9Qm_Zh7Y z^~h*Oiy*4oN1l3MRD4Z&{!9j?SofgRT@D}TYHTF4deuUaetYk}q-qt_GdrD1ts_&d zW%-dGw3T*gpuVr3VjIC^obgg_neGu@#xzEx8H-Laxs3WHwrm!>x%#9~#QpmWoK!qTz-BlEeGu z^61a8lnhFme3xbiHZ8!HK-($H;>U}GT6WAJGqm9j8RT$W+-1lN(nO$CMzjL)^9kC0 zy~!MxX)c%ZCNY(vY#i1GcOdiC1CC_#sel3Ee!w**=mYurr8S}C-tPTM(ngMxUa91N zCad`dEVTD#D);VeUGZ@`lVnaMioLnN{rIaEJ3=ikkDLa`Qm$~?BMW=^PYv>d!hhMt ziVZQZ+$Fy_-h&9H^`l7{bpEVyLzuU{)m zQ!%GT{4~+o|LFgv;eR+-vbq=ID+krD4{9I4QTGRPS60N%WdIJrZ-n4*4O_osIdBP0 z5@P}Gt+4RVAz{p!N89>&o<@(^FSSWh{#yTaLcS=xcpO9zbtS`ZU*0cgvU%J3?MWSX zP!jAdf9c;=E(G2Rl-?U~v9ulwOmyOG*M6H6b;v@Q$iZMDFVpJ9+hX??GOe23Gp?ON z!eyNN&!bTkYUmaCqO_hM5JLV<2Ls}WbRfk`mKu5EPk#73m>dXdRLOFGXNP|WiH3ZC zl~Yi1@)^m_9jRi8mg9ZTfrl5h&V8q zb92AiV2=5e+?GfZMec@&J_Edc1ft3Uao9ngEGZ1F2}Br02hecaoJa}LaJyHqd*ee{ z3uDa^C@TZh5us}HPlmfnnbaJx*k4^ZJ1oqnCH~`XvNQq#B$9uvMy;`bqMuSdGDn)x zaEF0liBQ$aA&uUJz}qujBR454J=I-0J|n^iu@PtHBv$sbd_s!I=5%^;n8x@(+bw~i2u`KC;I`s56~xAYwvZav86dqQ!)ly3{5 z{_t{DN5t{kUC+xZnZBYm%1<3Fy_gERi8S8r(4wK#`ZZ(nnT=`TDOqO*_6CqPE+#DS z#zgamdX%_Q1KcIVP7ffcm=->TU>USJpQtPN@u2}6l~%!b7H<~M2L*a#PGR?$+`#G0 z$g$XI?zCUsXQb<9Tkt8O0YD~;*+Ey#F;H*LBn!9f!gdzsQC>HZ7&cm4A%9VFbBYMsU~ zRZFpSv{B>aqwe*KXe*-IVSBCvxE)R}&AOdWTQl^)eQHm5aWz=ki&N#MP8pSF`XhgU zwVbL>Nv}B#Xo)`%n>{_-zrB}P;f~*>&KWHZC)c2PNFaMIX8GtjuR!7xY%}4bfJob z#A&zTfOlQDv1<>EeSQB)Ken4*u*BeQ5w*D~<2MWBx17=1x5`Pbe+Rck- zd>r@L*HJW~j0^X@9qtG!bYM)MX>UShoZ^}`4`nWQGr+r>zqiB*bq?T!rt!rWKITuU zJDM{bRm2pi#RHHr{@{guw7-B&39y(H{?ZD48s_M>-jlcSk(tWM2$DzCcH?v!5mPG}BG9yI1-^ zx?7%8epO}FE}_pzu(mz4NV#yjepkvpu__B>ym+g`9-b%SfCw%F@U2TMM2P2^!W-76 zjKDW~Sf_q*X|fEfxz`!z>Ofk2A{f3$?(VZpHN)c3$x=P;CfMi+a)ZfN%i&ondje=} zy8<6$Ve~~agP4iDGYVbs-iLQ}v<9&LIqt>kaJq~`yX#Hv(5azSPyKF2t9^&-Q~Q@2 z^^s>gD@r_u-Se=V+|fGF)r9<#qba{RO56~?rZm~)7q+_9uJf3kv+z+3Lc@5ZX}%Ip)fec-Q*dmVEA1YLqYVS zTHWQeyUFyG8nhnDwjl;c^ur=V^Nn9|5=$H&wV(Th&~a|wg)&`(@^WyWx}MZAPB%!R z5hMFrR+D^cx%j$$o_*n9{YJDUWacr?>Lab4uVot!(;rlzO)oNXbVBT@yrk1pG~P>^ z20o#hlk1x^l7@nRd<3Gb@?|adD^XQbBKMdzS6vcVr4G-(-;9DyQ#mthqc9B8YjQ^Q zpND$v+)j4RcC1ck&ntr$)d3Y2X0NmFRSUJ0))u~O)4RMv%A8|pLxEoD2K1v_D(PhY zuJQ6&lmNIGrB8A&U!bv?bQ_mpf; zE?EYdgCjq=wSARNmjHTsK+yW@1yeL-PF^OBRv#vHGQ%h$P5cQJyB)7k3O8AShy>mJ z^s{R(>UcUC)!k-EJ6c6?9j4GWQ`(E0jWF)bCsdt@^odCNdb-6f)$GA)UbcyNp6DS=MJmeGm;9K zsy|2wQ0F%!+T?X+K6AWPg@zf-ve`)c<`}E3oT8%n3m#W8#MI{rVRGx=zEVRHeM5P( zMicb$7&iDj3LBrlk^P<5APBwCF>qukiZ%;#H$?%$?oXVQd-F<`EySBxw8-+bto5>0Ul|S&-M4>Q54;oaHrg%kMVx5{6Gz!GFjUbuZBHRh6;PCeq37 zgUsal>?5cDOsAQri1fe3w0Ij_s^3?phB~7AsqpRXO6Xe;M6o8`|=2)S6rs^ z_@hF`U+Fyz3j978lb=o@MbGl)jObqpAp?0#H@MCeviXwt-!hk%G)=&54qfRrlB(FB zpHSb-+B2!@6yOUuFeUv2_K--U%Zfe96%lbY9 z56fs}GxnQjzf}%*-$(_?UOmR9+rDoD6wHpTf}DNMk+HcZ2)(I*?AY8Nt+q4ip{~bT zIV#pdJTws`j^0;$;-0WFXPPR8v=iFqhmvy&--+2IsCKZVhqf=)CflT`#2sXLVpL6& zE)0tIh>T*>>~zYS)DNS;A$FG>C!BbiQ90p@z0GXLo&Me3M`o#6-}f&zkCeEXZq3Jl zChB)zyQLB8^v;*=;9sLERKim$OAu=MhxFHwO&7EEy8!>J7oQkK!Iz~|@hfT9eSYr- zH(K$XF4MDqa)+;)(n;3~Lgb}ewik~RSPKQsQ8+H$#Lzdai%azkX5BJn(HTFM!tJxW z-BXRMlim)9Ycno|q`~ydw#>7fYPZq$y2`4;^JiBJG_D`PmbjJD;F}!&GMjTH`^E1@ zYTWc|!{dA`ZcPH@Tjpw}cHWXk^P2K4JYx(h7 z)iBj^;Od34qU-Pd;U9Q%$&FT2L)hb!L&?=uoZ|+g=PHbaI86_q&k9dSgD={Yevlle z@G?~~CB!FvshcRLGm&81d@|z`;D#x3))^Eb0M*{LeTH(xmA)f|#K zD3WsJzWE?oO^Qf!tH~qKhQBb_P?UySPUN)HgmYDHOwVsI{4B$iMv^*6pP_rnK7_N= zoCqcNF6Vz4En>t-zPhXl)e+FN)E%;oF1Ua;;SVu*b|rDOH4VOeHKGVIL=aN|)7Vya$Tvf-~8L56hy_6!1IZi}*G6Y+q(7hS{kO)!7f;%hSb#QCH zladcNSWmCy!XG*H@iMw)BzC_e-uSL*Ld(6bpO;hilSR-!p-wM|w6SET_DqVCj^-}1 z82dK<0{7eZ?hk!ktz?K>Jf_GkxXk!8)b>y)g}xUZ!P|Z}o_7H2$iX!K6aF!Mf1;9C z$>pDQ{@>|xO~73KA1k&2a`@ckzo;Um4rr;k9 zAOh`FO=;ywnsux4sT-1h7K2X;odjf3FHJ|||LExD7_6_>UqFqY>yu}6Fhx_@kX8QX zNM0?03IadZ6q^1xLIp|irh!z>NBw=jFR2%;T}*Jd%orsB37eCk+#k#aFQY#XPJD_N zKD27be%ma<$U8U8gn9b+#pp=L0`~T>%5%1<5hw?FYCw7YcgAGQ2l>$0)V}Fgj7kmW z%WT6{FX6L&Uhef2^DlW_$nqk8J0cOd2QOXU2Y#+^aB7$*j1F~L%6;f)Dv5c$QFWhg z5`6g|-p-n|xi{m|^dCQLaLKOy9t5~DjS#Ef^B9c~_+oZx6h>sktR*_X`gE2cxfrzn zUY=2Ia`Q(s^?1OcsQEkw^lF3H{_b^on#81*|WJ>8m!?)?%#^d$h(U}j- zB?*G>EQn%zPU{GvGe?r`R&u(~1`p!a9rurZ=-cx2r@Q6+w_9Uy+Y#lT0!QdaRjA^9i;0h4?X@Lf;iZeq8 z*=zw6#rSJ7{2d(0^S4z*CHh~hQ9iN%R++IH2uNth9j?<+@cs3*u)BOo6>N6jv^l9l z$l88i)~K&&)yjfRS4KATpCUKN1^#(hc)WCs1kkh(%7Udr{Jy4VfI=G1{Qp)9(qrec zxv#==1BH)wW5-QO^4bM4r;&X8_Zp`c(WZkE;le*l+&uM#&{l^Jz$fcmqrgpRf!O@H zUnU(2b2Y_2xUZRhp8>%v`MrM&=+2>DWh~UCu9=prFbxqK2#Yj?lp)Q~e@@W+^fRq` z{cH0^^kDbFtM37qA=#PGeva1#6o_TaB228m+1LZZn>3{uNMBrV3-5+vwDot;>rv(`K{C^&|x)RbwzBo>! z1mVnXBRdRMIUn)&!klk~)_PGHS^MvO{GI_1=~LIg3YaOFS=H}1b)HUO6;S+;zK;WA3*|E`y!6e-=yVwa7p;I`ASMZY0TLg~NapZ`3x@mcP5 z?^0{eSty>$FrzY*W^##QRphj!b1MY>LR*yqHILHmVnzl z4Ny2+{?mD#pM2D?jzvGm0$FWPPAs@Od70#28PhM(HkbRUAMQ|jUFbZQbZb82-*JZl z5l^;28#CD?PzT%Y#PlN7D(LFP(B*#}L%c!otNdd(?;-YIp$tHVpVm8(J%{}NAj2D-Sk&=E7ZKgNJDc|hfjVfAuJ)~~6<1)9 F{}0{6{LBCV diff --git a/apps/pocket-remote/media/deck-variants.png b/apps/pocket-remote/media/deck-variants.png index 5446cdf48b3ddcd28d5ad4f31e4eab504ca06e3d..cb8e1bbb0706a3309b73338aa75a395d7f3dcbfb 100644 GIT binary patch delta 13854 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 diff --git a/apps/pocket-remote/media/deck.png b/apps/pocket-remote/media/deck.png index 1a131635520d3f1fb72cdba50611ea8aaad4701a..febe72081480ab7e461e3562d2a1dc69b39179dc 100644 GIT binary patch literal 15232 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 literal 15043 zcmdseXIN8B+ienhk=|4wAV{ww2+~DF1O$Q5O9UxOS838h@1P>mK~O>IHGm+5E)a?$ zgiZ)er3Fw3{cKd8_xZl>oFC`>JU_TDuFT%EXJ*g7*SgoeCR*>d#u>_Ulpql3jONYj z`XCS(3;d~&lLEio`&8x!0$q*Kysm2K176J?%DL=CpqQVx!$Pv}94ZyQT1~ zD5Fh+=^+OO$uND1doh(#h2#}5g7!sJpS5X5iHWa9fgHMMgJZYUf9W&1dkXG+jQjBJ z2c{XlFkyZ+`Y1okup!!VZKYIJn(9?O-x`@LDW%#ceb+YE2b)FF>a`wuprK1^X8wIW zLEkK?)N%-w$+#?u*srAz%S;}wI`^t6$GmKllUYhl zVfQnL`B7U+nQ-TD1lA%+WDawG64D#79x55NUM&~OQe4}!b0n&((L1F+XMq`L7<7_< z(q+3}xi2HW&5x>R#}xZCjS?9vSUcOZ0{7Q4XvplBeb;e#%G{?U9@#`91jpQ^|Ab>=*)yJ^uLJSO+l%tYTbC2;r1R@v0vx?xGaKKbJns_CWLvFL+9Q1W8bfxOWvX_f$-O^1_Hk1-GMUG4i zCS!h*#02c@j_W6kPTasxK~$)VDo@kOL?mc^boZgx_a4@Io`hykxiSR3wN-P#;sYk| zjmOZy&A~6r;SET8zij1X<8~J!&69mRMI~`9N zf^WM2RQqVkz#9f^;g6Ap3nFIyJK{GxoD~>Lb3`|-^;o)e@jI|TR2QgyDWqf7Oz;Grm{JtgKV-)9|?x;2a0rO`6Yz;9}ZWj?VFqzY-Fj%eDQLko!Wg`R+B zB*PxQf;PV}z2IV{XurU8HYzX1hO3|9=A~T~c1QlpUVS4Y_vnfmWx#w9^m<1N@+W%_O=RxX(V9RS8-JYX6M{cp%(6Z#`?4Q8HAyyUOoEoS zX0$#U@7T*{U3K8T)Y7vuW^}EpJQRB^>>`RmkHS%bM%$o|J4`#~y)%77`Bbl0;dCM9 z_uxAQOtZPX%Y%j-$k4V_>0%4jJ7B21$9s&r2?LfCqP<-2I%q>K5o{M*hOP_9ja7Nx zO@>3cbJokYYuwr9MtLUYRpUNU7VxpK7zZfEJQOn7=c4)g2(ArtkIUf^X~1Ag9lSlE zc$2_{a&Pc-)BZ2VVeu}p>~*K}&=?s<_J)D8+k-(OW_(Zr7Bzk+3h%jLDgSK^1iO#6 zzJVJx+U-|M$Pz$R6v7isJ)25m_pd@_PySpAF~nfYSD zsA>7>M85%5`B~99nQLf=-tm6ejo!L=x~;KFMexbX7F#| zJ3%`z3&jiazlcTJ3x=U+NLBx0ql6O8O#}yZ$mzZQ>`y`RY{VyPbTR}2aI=>L`N;+X z`VQXkz~+D5N$z`SjVY8qU#XJ;jo(BiRGO#BvMwPkRE_e7QY@^v<{9mR6>qVxAoTVn?f zR_@HWrY~TmZ3dWndOXdjWva#xS0;7`>^H7-XcrYvaru9=s~YEW0Mt#Hro;=dmVn|Vnr zEB!8ynIqMPYgwBxue_nVk$Z3{?qCHr10Wcj75w}vJY4rkt52>Yl2~>Zt-@Rmk@egh zB33l6eV*?T(9wQc9!CCMFz1Wf!rnzvm_okE_Bm| zLgL8QU)<_wGW@uFi6#>*nI*TQkpe-dh73qZj>JjYuEP)mmIU4|ZHs~g>$(W~=4o6T zj@5rrUU!#-h$>Ye!DhEC-bBpVhf98Me1A-Qno$15O9811v5;m%Kc_H)%)eDzuVa8q z(6irFzfY0T{C$>+jqMLpsN}PIr^C9W7GzFrc1NK9CF1WGAONi=jU4J+niagu$=pl@>r0) zic9{A4uS%EDKEG}3)26Do#Byb2CY9_H+~@QIvSlu5wG(=A+9Xm!(5>P&s}LZOlPa) zh;>u^X(*OGD}x%`&)+-jTR%o#mX`=#kOG|{Njc0gY_VmAlXs!ZoQ+Z$ax7zc z+$WHcA3BXQ%Y7K(_PbcMm6dZ&Fq@V0P}x*EljZ5s+_n}Os#Ti~4c1{d459c8hn4NG zkVFOjV&0ODSg65V(T|@seM2rJg!#0Y1t}<+M^>09ymvErFJ*rDB?Hvf#OV8TCPl-W zxp!bl`gk@%A>SQN-0S|vNm7lA(_O^wEa1|@u-K7_3nD69tv|cyjTkM>xk>eerrq=D z0{PtP4<~TN`Jk@B5I)3&*n^nxL|zL%2ENDdN$OTO@3=uM7S$SVLU7Zv+PiM{A8qV@>NZ7nOt+T5qw6wRVfilUGreM@yWuPjTuguAO+gS6M+` zUb4*tZ(&J~guNh+>f6)|fmgb4x+WF2uDmDV*rS@3L}II86M`G2m-sX%L>+jWWRgPJ z<|gcZomW#~GxyhwD;Mb1@<+6|o+UnS8w33)vRO?=A569u{F&v6*DhD;*C%{nFCmnd zOFmkmI;s_x9TAJzsHPlm0G-cwcdqvujR>{G@obFsIQzwzOx&u{@&~>b+gRH2Fv7SP zU94o2`cchCCVsG&8Q6~+eu^DhjR%<@a4-@P@NFeQy^v?e`dhadzj^G5*I;iUm{HxK zHlM(me`EiZd4jt*s>rBJm!^kWM4imlax%qVukU{%Rin)UM|W^q@Y`=F0A+QQ%I)Fw z{{SqHvfps+MR3!uuv68r6U*~ZA|jKQeeeRtkc$9?6j{2{}2DpI#l2oTK>N{5`05 zp6GXy3@{HaF*05h1l>NnYBW+QGLr6>fux77iiopBfRo42-G_&`9ie=$uzsipN8*g#)aZ^c2#%1Sw21m zX(5tyZ7#Pw3+jmcS&<)-7j%3Jp*}jVS{B9yJn_4&4v;MvX&Hm_!(N362R{WR+O)o+ zG?D6@f0MZc(u&tOnM{jY;8T!r@J0T%x)^OsQJS~+%0V*YtP=ka025Ru@Uw{KCn zOIfok99V4wJYaJj!RVUO6}XQcUKx$n3T=_Ue7qfO3{iLpdDF?$*cae&P|`cr(VNrT zj4Q*r+}<1$AodxkDsw34x9T;QIhd;18TMbisXnXD1rP_RF65(u&vtb=^6n4sPb6fC zi%%@74&nu+9&T+sn}e!zI~)7B98_$vD)&kHb!sidx`|sK`X&4VvJDGdcnUVOV0IhX z82{b6PVXnbKhk3Mj2nlmo4>$fgw)c}sHtmIFlMuricDAhKI!PhCcGLFS8iFqZ5LQ_ zLIdV$_-1h?LX_gfDn2b|Z&RYWkb3M~q!V-wv|-Xv9_rjg-!mQ`3AK)JX-*%OYWGP^ ztCUjzXZvh9e(g>QVtYv#XIlPLPW(C67)FWS^Dc+%28dpFzq!x_Qk(e68?J~phk>9K z25}{l^S;5+t+_nwOUI%0qTU*UDB0>dyu0MHOW!u?4(J{Ic&ML-a+h4arUq&pO9psW{E>pkpHJExMM6}qao1WY~F2tsk zgsls9=5o~~H;8sJN+mLxIN8-?16eZJz*oGRN?AhSoO$cgAeayGwp46ym*)i|yHjA) zopwmSc42VB+{}lA3D`jg9k%kvq!`#U-n*2ft~7qWgd{#~G$iGoT{nw9SO3dTR>nOsK1*f@Q9|s_?Qt~vH7K;31#HrraQ2O5sN)1O z`WdQ+K_n@x619b3O#*fOD)Y?wU`92#Bkjc3kd2XO$GJmyQ${X_UuP}KwIz2qeb(l= z!p0a;&kA?qFp;O;kmmPef}2a5@PZ*|Bog!4hBs`m3!V?VJy>H}!oj$%N5Xd83idy@ zjEoZ77#G?S%Nb!xYBrQ347=(ifxL5qHpH*pP+GPD-=hYTW=t_q-srWHq>QO&#p1m< zr69#cNE3|D>Yk|wl7t&Iy?xcJILrwLSL$rGVx6LfAv8&mx2ozYzw%7mZ2pSFJQwMF zqgu=DDc?fzh-lJ9UNW(Rtd~l=lUjVVoK0Cyl}J9jtS_(=320`|u1Y+kQx6rso`wvUX$y(JfrDAhGLE%e;{I3Uge zv#YH@2wM%MZD+w8H`J{gAHV{?CDB^suY6dwh{ObtG~VBO-5p-kgW~&7K+94WpQOT{ zq;VY_WY1$=KBI_bW|Mwh$j^aSn!`+g_E^x>WBD)* z3(8Zh*z0Ycc5xT|hS%Vv`-27=od2M~;ez$Lj4YTYCx796p7W-Z`6-4(9&MI+pU(sp zu#9Q`v!eKCK_4@SO(4Y-34Hg`RUU*WrI3VsCjt0C#sPo7@f)7rBuY^LA`k;PMLHjK zI@S>)2sR>Fu_Jx?|1PZ7fyp{6lC zP-?M%sdmoIa)h{m=a^I8Lr~s-CA5WN`~)yg0v+eN-r;#7?+2>MAPufu)>fLc>i`UR zUwBY~2lTdN3!fPv+nlJ_T5w*hs*9t*Dt&1~+S;9UuoY zZ-f)^h$!=7 z{n9)uV{-;N)VC2)OXH0>`sMnX32vt4l|?%n{>~DnEQt@<+8l0n&`1b+VS8P~M+f&S zf_3&1H<7UB%0Y*2m6manyD*A8)bd#RwvUTy%5F;cnY_i}W;h8nBBzBqXl#w%EeAqR z#DC1_W~u!pat(N~x4?W9OhqK05aqtS#W3nw8T&;}5;kQPM&WCphgq6rz!HvXCJ`WS4;MwRM%YH4Q{%MDV~BR1x;s4-8~uhBU`vSm%RM0A<3j};}HMQ35=Z|_0mz(2+cq*V{W%{2hno#*UgDBqs4IuiyL#fC=F4@R8uekXADD4 z5mMH!`J4?&-axjRKok^$qk@Nwe)@eBEzv!GQu~>roSvzrW|{9P>Je2sWhAkaPep0= zAS03ZH9DJ%^gc~D>D$?A0OFCUzT%SiJfem5Fn8)=KEk#PM1** zU;P2555TT&YMj|aop0M~U9N|476wJ?gK3AG1F*nuVu90p5x_DsjgQ^vBHVF~F89l5 zpPzjm6dNlYi5L0Cy;m#VI1MnhR+_7*&IpXr2ebV#F`dDOKcl=IkIuO5v<_G*tlT)# z=^{Ic2-6?x#C->i&yN0yx`qw*mWn>A2Ol@Qloujrm!y7QQ@#6np2*S;&UhLE37<}4 z4W#iwUxc$qSMa=z`DKYP!KpP(C@`%ne40;jw8R~ej} zLlBR)aDDpA(mT7r6y>3+PXW#Kq+}MCNEA;@SS%~_Fm#pzloKNvaDxJX6|bQ4NE3YJ@vMCs4b zpS%`)22>#`hm0D)ulX0Rx=#`X7wz4aP=YTC5K>k8eW}a8`uu*#0dPNV>CgQa9e<}8 z=M4h!T!EYtfFS$y5hsy|H0Nx|PD=%2N+lp?0f07R$3EI{+_&;|%xP?{!77@?jkDeD zF{H74Hh6{A&EI5iIv}Ig!MHRa?Reo=E$0)VeL$>v>DB;9T>Z^H55P}VJ~a#Oy05kJ z`#xt5k`5Mmh&|!ozTN;5tPv9cg$ynF7PRi;Z0#D#2oHM^Eb6z8oLK+ZQlTt=(7WXwuUZ_^k{fq4ka2+-q%JD(IdkomRBaU;>Ykq4e%@jzSlEuNQ^`i{+u!b+SQ01V@ zS1^z`lM8uR)G50AY}V=a7J@9@u*ep=Uf2@+S7~}V`Ts)sxAQy zJUP6Q4>DIDg9%@;hfr;N;akRyn~F4I!)Qh7zJDpJIHaO24tcZst)|0z_+0Js$~69* zJ%zi)QDF3Ium-sU(umbR)I6 zW7AL~(RaN*mK8-xwxePZcS<5BQ1S14&A%EJfBIm7Wg!x0hhH!%?oUhgwV1b01v0SR z^Sz7e2%Rto`k86s(bpYZ#U<|dqn!37g2}!D-phfEQxHqDAAkhl|ogx7!6tqwAnyM45mGA z)w9QhqJ{6w;)IxyN>{s6YOky2W>|_xL6S=En15`}#N;`~34ode63(|N#QcqRE5gBN z&WgjHpdE(tx2+LRSZ%4zjO*uvIVHYQ;$xD%d07X<;@0mRxMs*Gr)Q?Z zNdM+AKzxq;Px#Jgu9W$WN(f|C_<^5D#$oZ;Q_(fqrCnC5mk&>{ z#|TkjZZx^3a^2wy-Z-H4Bn`Sfm=~=12d!n+cXP#E-VcFj*&dJ(W>jfP7_8nMe&N2a zh-Pom(=a-Ph=s_y@h{p$`nCWt8kG*UZ8u3!`D2TPc6#GjC@_NhBKNSFnGMA{JbwTx zW9MM728qrC3rb#Qfd4JQonZ0fUI3ayZmC}U<6e1+0P-V}Y>4hjO%Cv({5zG33nf}( zz3W@|POPzQ+pQ;DaLbvKg`S4FZIl)2`{^R*!>G}N5M3obV~q3yG?oeyR?NTCW!negnsw$KZWws<@~Qt~byE~OaNw*Fc`QNc{x z=i^q(^4#v?n1X`PXDL$JL}hj;DXmN!(0a@k8X4(CRpzGT6R2{ikP!)`!pF3<(SqXW zL&-Asy4Vz~nRf77`mM_uv}W$o(>c9cK(j73{&({dxdBo3Js{f}+29T*d@9{XwVC*| zON=Od2Zxd+f#e?sKDdOIw~D^|fg(7v0w2|)W)a8y?-q)3pppkwXn!j4Wro6n0*NC{(JjFi#jAJ`zKyK_fY=?l(HS`gAnt=Pzveysz*uxrb3ah; za+7F>$j@{!PMb>j;@ynvE~35@dq2mMhZ4*Fx_%GPitc_SOf)Y-{P(7mMO>797rpC0 zJ-?ST9Uw77mb<99T?I%uGY3a*V*su<(2?^|M^vGG)_ZEi&E=YxTSRTre{$H&xjZ>C z^&ca4dq97#%9o8QkwrZYgn*?frNfd3n4hI0;<%klca!+)QG#HiJH;#M1HDto5P^ z%56eTyJLNj#58}`d2E+|b}@j@-QO!c+Jt#piE$N>)_&`YVpc~A#|=wkn3QRGFP#1f zZjS-#-_p8e-A~i)?X;q?(vM}g75cRzr%jQxIdfa=OQ$ft3ix6cl-MH!I>i7Yq}_Y} zAq`}6YJELT&iZk(_oumeM;lq@h)N3!^uj(ZdroR^Y<?=#6=xNn6Q_Y z!kOJ2{RN{&97xcw;899%@|bD5Q?(I~2BveCLhnNEG7>jw2!R(H;i327;G~*^|I8_k zmVZ{}nBnG%yy$0xi<3Z_-7f|xonjBk`SLzFF^)cBRqF1~K9*%w+g81|d;BF?yfVu# zL5zc}rJa^Najwzh$E~BQOtT;NXV8fOfZwM69nTtj1Jr8|t4)f&%Ydl>Y{npM!!p6@`*57p5`ciR> z4Xu!@hrdadl!?r%yA!Pv5&QYYh&Br9)V`T%^T8zd$Ymm|<^W26co{N&OhUGCq2^{Vm=hcl*0kWifA-Lrpp;oo_;%t8|N4)Pno~ zk5ZjlV5&)N%Y^asxAD#}v53(K7u)H%tIivb47*p{%HH38@3ksh9Z&DY2p5{vgcYwE z*j3kd37u@jHiu1a->UbYI?(cVAy;%grLgQ$aRyoq)Es>knetg&*Dc10DAvS1B>=i8F$26W*0?_o|&x{!p_X zJC}P>4S`M<60ns}QM(DUSs8GCxFu{VeN1UqQh_{C0?ncZ+pSt}WW=SZBWx(kOGGOz z)Q(=wJ#e}i;7G4CO^Wo(Rd! zlugW5c}J7s#ev-&m1I!lOfFTW_Wth4z@&C@0T5!b>W&HHFB*^OXWTPNlw`m+EMkR| z?~9u|jhB9AF}|^7$_S5(sq^`m_Q+stJVb0;(C9;E!)+k49TM)ol;yR)-Jq1e+!*>S zBYMoVoj)JM`bcg!^gutE>^)ZJ(aKroM?9#2bO6ge{lBR>(#e>IJ3~H6kK2%-mB=sc zbEP6%$F4tH9l5ZW%2$X?uOCG&ikHzl_xEkMFwm{FRmdW<#2XcR8bCu2x*Y6koqmP4 zbi$3AeLvl4eQH(2i=xTOIXBQax2onSG5*o8@oq}w_QQ>H5)-Y<4Sa+4K;E$0=FrOW zSfF(_aF+60VZghX-ZjB(5tIm<@G|?)=oZ&ANuWgGl%L734Z-}6f1}KFQ+sC|Wwmp# zVI4V@WZGk4I+#brTT6R(hcAKT8a`zkPl?$!gd4o3`6EgXvD{*vF)g8*2o5=A>9dO* zZZToz_OPN?OJg6{sD%8SY6@BhYXDs8Fp>0;peW~AD&T8toYN7#X3u~f6UNF6H;|p; zko^PIGP93La@arI$J2il5FP3X~gf#XBTbFXK2zS_<*tIfy_t7ZR0w1g(_0`$i1sAt^yS94=zY1tG^>Y)!v*c$9QR%uW(ztxFa3h0Ts zr(OWK+8Y>6LT=gVXnvfG=6FqjwkkP%T>L`grW@=F>>|6dJKinp+fPXrwN|<-1y4RD zaZ31K#qT@RA?4R?z7s-#)B=Awkjo@tf+%`d>tuSzz14R~+PRjvbuTH%{aynwhgNI}**`EaMR z<6u3DYKEPox#`J%z5IA^=6D!U5ZRPVBL-Nn(iA~EMWf*X%n52_wIY(D(BROJ$@ z?0VRdGwpW`GA%WBZ)+)3X-;6fzIE~%ziaxWv~EOVcSpx@!Qo2rl899M*=KPb(S>te zNL306(H{kY1hZ|xVtNJr(w)7Gg414q)}d#5P8NOQxYgT^C(HRZ^&N0DbIR(mXc)$k zn@Z-IhPUlcKzEl8s)h_xIvzdauWPqkciZikx-w6LJIvOZIKL28IjLU^IpcQLt37?I zN|_DCYGmN$x?S;TVuN*U{KGsel80}xxp303R(EWt_^R>nktMnNl&tPmhcw+@;!2@J z-E+$y=8Sg>V=y|ML9WE9;^9?iO(qgCY-JvFs`oI@ihv=W7-Y#L5?qtQ?rpZ1$mzxL zJQpa_p@#bY!0Q9{sh2K|8Vt5G`4=n{SaC5X5y^BZ4TKyveo1pX!xWyvhgx^SWV0`t zFgooQTiRFcplmd+D)6nJUCdLyc>u@BZ<-=2++@4U*Ntj)hj&Eejgt=5GIiwc?gOLh zmWx&D2-?nCmi_#=csap(vFNIm?z!W71~_%Wc*!@wdQYC6MK15gk5LYl3sANwXMf%VV$P3aMF1)-%Pgx|$P??o6 z7uluCBuBFzjaqo;p-cz zhV;35##y~)np}u^%Jh57B2JSYS)n2@!lfgsRZ7SAuGf%^d&TzPVYKtjftKI&K zfB`*)n5Dukts%-f=gdO?jzFCO)1{%Sw=Z*?yt;rHAuHWb>1dFy(-674EF*=cs^6=% zkCpJ3z*nXs59agI)O-12*PIEfrzi5h?_sILE;r85gs;hvE8?y`r=u{+u1ka18Mb;k z&xDC0fog@Zui(n;*-VaQ}?QzL*f7Fa5 za+i}(F2L!zZx}EjMDJ1=lmbyWbA$0x6OVteuw9-7M(5 zxTSn_hh#LHZ|G|$Vf0FxzXT}_dMoLzckHq>1|;sN-L7G--e^tI8dH%Z_EO0Z3XGd$Ndr{&lUO?P+!r`S~|iuWQw9# zc~KXt7}EbZln@^9g~DGoxNaqH5r3%$zoBjCxd2*+9XH=SQrq+E6}0;!9I=nyLs)iS zApTUT70FCwVHaO6uQe)9RPR2s3z6?8Q0J7e%*qdk7~us8f36ZID>UnOa%;HKupZ2x z&oZ6oL7e~_eqP#^?}VZuzwj5bzZGoSO<101HK%g>ENef!3wWp8N$UPgrD-vit^bQ_ zcD|^kSnC2N3Z>wF=>x(E#f0Cx(cRdQ2sukZTVVtd8ZUOeo zy=Q+Jz+>2Q3V-W3IZ2h;yDc@r7d;nrkRp{e`euuXpKK%oD2*dzPp#)( z>;lu%9FsDIp3iLFw+znPw%zLcDaC&JXaHheQ{$*gC zD!2^s=MAmNy~^Qv{BMK)tI>$gH9u_hz1T8YZ~DYT28Mk8yK-Fdr#s|4&15C6)8Sg# z$JOb35Olp86Lxt3@e(AAWyb$0{N+(LInCLu<9g+m3$1~(0-sKIWt5+2s`(2((N90V z$Qo}T1@)`JO(;x+fDt-crA2 zxhr^9;Oy^>B$2`{z}hDN+JbR06}D8=3fL?EnX-y9CbVt%v*l!7yX4CD%V4gmJA1j<2fi>9|0@X9M(@lCTJ&UV)z5AIM*cZU}E6!+v z+~C|VcblpxEZqg%ncpZM|F$6B=mr~I08T13NF-Py$4!AUDgKlVTXBwf%rRDtkA1MC z9XmN3;duH!bZNNKU4(GU%3*x^44_l%1 z`r~&DZfDmcDdsYy`x~}yBGe%lA%ELE++W=xIapmkH1L}EP{vOt{6A?t6v$f|_NUkR z$o@AR9|PoM6PtsH&xuY5$ccO$MYM$iUuJdzPN|GUST*0(dN}y^s{#&-d;;=`-tmEC zNTcgv=vXaMIc4f3LkUg!=VrBe(7BkGdGF&%*!DX^b#H}nP`^6OM(S{}FO9xCzXe5J zDE4~1*Ye`;UDTmOj*Gk-Cr?bs59(9DXY}wp%iEu!r;`D8dNqCgb>YwGLgbbqguOJu z{;V|FVua1<+5*G2SOSel-FR8zgw diff --git a/apps/pocket-remote/media/empty.png b/apps/pocket-remote/media/empty.png index 1b17b66c722287b37d678a5b7831463151e259d1..94e5cb496f68ff20ff6aab7460b19cefa02e8ed8 100644 GIT binary patch literal 9952 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 diff --git a/apps/pocket-remote/media/menu-apps.png b/apps/pocket-remote/media/menu-apps.png index ce09241c3d04ab44d4217c825f493372ea533e02..2c4763c2be31fc425620eb64781c7c404adf8e5d 100644 GIT binary patch literal 11233 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 UH|(m|0Qh5e;{5T-qporP1Aja51ONa4 literal 10997 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

-NB5(AW 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 literal 12003 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 diff --git a/apps/pocket-remote/media/menu-toggle.png b/apps/pocket-remote/media/menu-toggle.png index e202bd4bd6aa5cf9d25328080370f5493e2d4b6c..0fa2575373bad6d39df99f47f9261723c8515582 100644 GIT binary patch literal 13238 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 MC6kL47Z9=k1G{+#t^fc4 literal 12995 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 diff --git a/apps/pocket-remote/media/popup.png b/apps/pocket-remote/media/popup.png index 094796e1c7c8f8740d3a15465795b2317104f328..7581a72f205c65db959a4be6a5db092a84df548d 100644 GIT binary patch literal 13095 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 diff --git a/apps/pocket-remote/media/stage.png b/apps/pocket-remote/media/stage.png index 7e419cd129d3acfb022f524ae313c0d409002ac6..ba7b5fd26144b72e525611d4192209cf53490e27 100644 GIT binary patch literal 12565 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 diff --git a/apps/pocket-remote/menu-sheet.tsx b/apps/pocket-remote/menu-sheet.tsx index 075b7d21d..221ffc962 100644 --- a/apps/pocket-remote/menu-sheet.tsx +++ b/apps/pocket-remote/menu-sheet.tsx @@ -177,7 +177,9 @@ export function MenuSheet(p: { store: RemoteStore }) { } /** The sheet owns every contact while it is up: rows answer a release, the - * list pans and flings, the header goes back or closes, outside closes. */ + * list pans and flings, the header goes back or closes, outside closes. A + * row's highlight is ARMED on the down edge and only shown once the finger + * has stayed put, so landing to fling no longer flashes a selection. */ export function sheetHandlers(store: RemoteStore): GestureHandlers { type Down = { kind: "row"; i: number } | { kind: "back" } | { kind: "close" } | { kind: "list" } | { kind: "outside" } | { kind: "card" }; let down: Down = { kind: "card" }; @@ -199,7 +201,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { if (within(c.x, c.y, SHEET_LIST)) { const i = rowUnder(c.x, c.y); down = i === null ? { kind: "list" } : { kind: "row", i }; - store.sheetHover(i); + store.sheetArm(i); store.sheetScroller.stop(); return; } @@ -216,7 +218,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { if (!panning && down.kind === "row") { const i = rowUnder(c.x, c.y); if (i !== null) down = { kind: "row", i }; - store.sheetHover(i); + store.sheetArm(i); } }, onUp: (c) => { @@ -230,7 +232,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { } const t = down; store.pressRelease(); - store.sheetHover(null); + store.sheetArm(null); down = { kind: "card" }; if (t.kind === "row") store.sheetTap(t.i); else if (t.kind === "back") store.sheetBack(); @@ -238,7 +240,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { }, onPanStart: (c) => { store.pressRelease(); - store.sheetHover(null); + store.sheetArm(null); if (down.kind === "row" || down.kind === "list") { panning = true; down = { kind: "list" }; @@ -253,7 +255,7 @@ export function sheetHandlers(store: RemoteStore): GestureHandlers { if (panning) store.sheetScroller.endDrag(0); panning = false; store.pressRelease(); - store.sheetHover(null); + store.sheetArm(null); down = { kind: "card" }; }, }; diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx index ada6257d6..076ce1230 100644 --- a/apps/pocket-remote/stage.tsx +++ b/apps/pocket-remote/stage.tsx @@ -14,7 +14,7 @@ import { type ActionId, actionById, LAUNCHERS } from "./actions.ts"; import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; -import { launchChipAt, launchChipRect, popupRowAt, STAGE, STRIP, SWIPE_PX, tabAt, within } from "./layout.ts"; +import { LAUNCH_BAR, launchCellAt, launchCellRect, popupRowAt, STAGE, STRIP, SWIPE_PX, tabAt, within } from "./layout.ts"; import { PopupBox, type PopupRow } from "./popup.tsx"; import type { RemoteStore, TileSlot } from "./store.ts"; import { themed } from "./theme.ts"; @@ -75,45 +75,41 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { ); } -function Launchers(p: { store: RemoteStore }) { +/** + * The launch bar: terminal, browser, files, fixed across the bottom of the + * stage. Three equal cells, so the targets are wide even though the bar is + * short, and no hunting for the three things a remote is reached for. + */ +export function LaunchBar(p: { store: RemoteStore }) { return ( - <> - - - empty workspace - - + {(id, i) => { - const r = launchChipRect(i, LAUNCHERS.length); + const r = launchCellRect(i, LAUNCHERS.length); return ( - { - themed("surfaceMutedDim")(node); - themed("borderMuted")(node); - }} - > - + + - + {actionById(id())?.label ?? id()} - + + ); }} - - - swipe for the next workspace - - - + ); } @@ -131,9 +127,18 @@ export function Stage(p: { store: RemoteStore }) { return !!s && !s.win.some((w) => w.ws === s.active); }; return ( - + - + + + empty workspace + + + + + swipe for the next · the bar below launches + + {/* tiles are positioned in screen space; the stage origin is offset */} @@ -172,14 +177,11 @@ export function TilePopup(p: { store: RemoteStore }) { type Target = { kind: "tile"; a: string } | { kind: "launch"; i: number } | { kind: "stage" } | { kind: "none" }; function stageTarget(store: RemoteStore, x: number, y: number): Target { + const cell = launchCellAt(x, y, LAUNCHERS.length); + if (cell !== null) return { kind: "launch", i: cell }; if (!within(x, y, STAGE)) return { kind: "none" }; const a = store.windowAt(x, y); if (a) return { kind: "tile", a }; - const s = store.state(); - if (s && !s.win.some((w) => w.ws === s.active)) { - const i = launchChipAt(x, y, LAUNCHERS.length); - if (i !== null) return { kind: "launch", i }; - } return { kind: "stage" }; } diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts index 43c221c63..3b11acb46 100644 --- a/apps/pocket-remote/store.ts +++ b/apps/pocket-remote/store.ts @@ -236,6 +236,8 @@ export interface Media { } const TOAST_FRAMES = 150; +/** Frames a finger must stay on a row before it is highlighted. */ +const SHEET_PRESS_FRAMES = 7; /** Frames between level sends while a slider is being dragged. */ const LEVEL_SEND_EVERY = 3; /** Frames after a slider release during which host echoes are ignored. */ @@ -307,6 +309,10 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const [cc, setCc] = createSignal(null); const [ccT, setCcT] = createSignal(0); const [sheet, setSheet] = createSignal(null); + /** A finger on a row, not yet a highlight: a list's press has to wait long + * enough to know the finger is not starting a scroll (the highlight + * flashed under every finger that landed to fling). */ + const [armed, setArmed] = createSignal<{ row: number; at: number } | null>(null); const [sheetT, setSheetT] = createSignal(0); /** Restarted on every route change: the list's own entrance. */ const [sheetListT, setSheetListT] = createSignal(0); @@ -701,13 +707,18 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { }; const openSheet = () => { + setArmed(null); setSheet({ at: MENU_ROOT, trail: [], hot: null }); setSheetT(0); setSheetListT(1); sheetScroller.scrollTo(0, { immediate: true }); }; - const closeSheet = () => setSheet(null); + const closeSheet = () => { + setArmed(null); + setSheet(null); + }; const sheetGo = (at: string, trail: string[]) => { + setArmed(null); setSheet({ at, trail, hot: null }); setSheetListT(0); sheetScroller.stop(); @@ -731,6 +742,21 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const s = sheet(); if (s && s.hot !== hot) setSheet({ ...s, hot }); }; + /** A finger landed on a row: highlight it, but only if it is still there + * SHEET_PRESS_FRAMES later. */ + const sheetArm = (row: number | null) => { + if (row === null) { + setArmed(null); + sheetHover(null); + return; + } + if (sheet()?.hot !== null && sheet()?.hot !== undefined) { + sheetHover(row); // already showing: follow the finger + return; + } + const a = armed(); + setArmed({ row, at: a ? a.at : frameCount }); + }; /** A tapped row: a submenu opens here, the applications provider opens as * a list here, anything else runs on the laptop and the sheet goes away. */ const sheetTap = (i: number) => { @@ -927,6 +953,14 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { if (c.mode === "hold" && c.row === null && c.until > 0 && frameCount >= c.until) setCc(null); } if (sheet()) { + const a = armed(); + if (a) { + if (frameCount - a.at >= SHEET_PRESS_FRAMES) { + setArmed(null); + sheetHover(a.row); + } + moved = true; + } if (sheetT() < 1) { setSheetT(easeProgress(sheetT())); moved = true; @@ -1041,6 +1075,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { sheetPush, sheetBack, sheetHover, + sheetArm, sheetTap, keyFly, flyT, diff --git a/apps/pocket-remote/strip.tsx b/apps/pocket-remote/strip.tsx index 72980081a..6e38f4c5b 100644 --- a/apps/pocket-remote/strip.tsx +++ b/apps/pocket-remote/strip.tsx @@ -1,9 +1,12 @@ // SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/strip.tsx — the top strip: one tab per workspace, the -// active layout's name, the mode switch (stage | deck) and the control -// centre's button. Tap a tab to go there, hold one to bring the focused -// window along. Tap the control centre to open it sticky; hold it and slide -// down onto a slider to adjust and let go. +// apps/pocket-remote/strip.tsx — the top strip: the workspace tabs (a FIXED +// 1..N, because Omarchy binds those numbers whether or not Hyprland is +// keeping a workspace alive), the mode switch centred on the bar, the active +// layout's name, and the control centre's button at the end. +// +// Tap a tab to go there, hold one to bring the focused window along. Tap the +// control centre to open it sticky; hold it and slide down onto a slider to +// adjust and let go. import { Index } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; @@ -23,14 +26,14 @@ export function Strip(p: { store: RemoteStore }) { {(tab) => ( - + 0 - ? "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#414868]" - : "absolute left-[2] top-0 w-[24] h-[24] rounded-[6] bg-[#1a1b26]" + ? "absolute left-[1] top-0 w-[22] h-[24] rounded-[6] bg-[#414868]" + : "absolute left-[1] top-0 w-[22] h-[24] rounded-[6] bg-[#1a1b26]" } ref={themed(() => (tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface"))} /> @@ -49,9 +52,9 @@ export function Strip(p: { store: RemoteStore }) { diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index c9d10c79d..7609bc86f 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -11,6 +11,7 @@ import { keyboardKeys, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts import { BALL_HOME, CC_BUTTON, + launchCellRect, MODE, MODE_HALF_W, SHEET_LIST, @@ -147,7 +148,8 @@ describe("pocket-remote in the sim", () => { expect(shown).toContain("foot"); expect(shown).toContain("chromium"); expect(shown).toContain("dwindle"); - expect(store.tabs().map((t) => t.id)).toEqual([1, 2]); + // Tabs are the fixed set Omarchy binds, not the two Hyprland reports. + expect(store.tabs().map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); // The tile pool settled: geometry landed inside the stage. for (const slot of store.slots) { @@ -162,8 +164,10 @@ describe("pocket-remote in the sim", () => { tap(world, x, 14); expect(store.state()?.active).toBe(2); expect(store.slots.filter((slot) => slot.a !== null).length).toBe(0); - expect(texts(world.getTree()).join(" ")).toContain("empty workspace"); - expect(texts(world.getTree()).join(" ")).toContain("Terminal"); + const onEmpty = texts(world.getTree()).join(" "); + expect(onEmpty).toContain("empty workspace"); + // The launch bar is fixed: it was already there with the windows up. + expect(onEmpty).toContain("Terminal"); // Render a frame: the panel is 480x320 logical. const pixels = world.render(); @@ -282,6 +286,17 @@ describe("pocket-remote in the sim", () => { expect(sent).toContainEqual({ t: "win", op: "float", a: "0x55f90e41dd40" }); }); + test("the launch bar starts an app from anywhere on the stage", async () => { + const { world, store, sent } = await connected(); + expect(texts(world.getTree()).join(" ")).toContain("Browser"); + const cell = launchCellRect(1, 3); + tap(world, cell.x + cell.w / 2, cell.y + cell.h / 2); + expect(sent).toContainEqual({ t: "act", id: "browser" }); + // The bar belongs to the stage: the deck's bottom half is the trackpad. + tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); + expect(texts(world.getTree()).join(" ")).not.toContain("Files"); + }); + test("the sheet is one column, scrolls, and lists the machine's applications", async () => { const { world, store, sent } = await connected(); store.applyLine({ t: "apps", seq: 0, more: 1, a: [{ i: "foot", n: "Foot" }, { i: "chromium", n: "Chromium" }] }); @@ -294,6 +309,21 @@ describe("pocket-remote in the sim", () => { // One column: every row shares an x and steps by one row height. expect(sheetRowRect(1).x).toBe(sheetRowRect(0).x); expect(sheetRowRect(1).y - sheetRowRect(0).y).toBe(sheetRowRect(0).h); + // A finger that lands to fling must not flash a row's highlight; one + // that stays put does highlight. (A release on a row navigates, so the + // sheet is reopened at the root afterwards.) + const onRow = { x: SHEET_LIST.x + 100, y: SHEET_LIST.y + 150 }; + world.frame(0, undefined, [pack(onRow.x, onRow.y)]); + world.frame(0, undefined, [pack(onRow.x, onRow.y)]); + expect(store.sheet()!.hot).toBeNull(); + for (let i = 0; i < 12; i += 1) world.frame(0, undefined, [pack(onRow.x, onRow.y)]); + expect(store.sheet()!.hot).toBe(3); + world.frame(0, undefined, []); + for (let i = 0; i < 12; i += 1) world.frame(0); + store.openSheet(); + for (let i = 0; i < 12; i += 1) world.frame(0); + expect(store.sheet()!.hot).toBeNull(); + // Ten rows do not fit: a fling scrolls the list. const listMid = { x: SHEET_LIST.x + 100, y: SHEET_LIST.y + 150 }; world.frame(0, undefined, [pack(listMid.x, listMid.y)]); diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 71a86623f..6868ae0cf 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -68,8 +68,9 @@ import { ccRowAt, easeProgress, fitMonitor, - launchChipAt, - launchChipRect, + LAUNCH_BAR, + launchCellAt, + launchCellRect, MODE, placePopup, pointerGain, @@ -92,6 +93,7 @@ import { stripTabs, swapDirection, TAB_MAX, + TAB_MIN, TAB_W, TAB_X0, tabAt, @@ -226,14 +228,16 @@ describe("pocket-remote actions", () => { describe("pocket-remote layout", () => { const mon = { w: 1440, h: 900 }; - test("the strip and the stage cover the screen; the strip's controls clear the tabs", () => { + test("the three bands cover the screen; the mode switch is centred and clears the tabs", () => { expect(STRIP.y).toBe(0); expect(STAGE.y).toBe(STRIP.h); - expect(STAGE.y + STAGE.h).toBe(SCREEN_H); - const tabsEnd = TAB_X0 + TAB_MAX * TAB_W; - expect(BADGE.x).toBeGreaterThanOrEqual(tabsEnd); - expect(BADGE.x + BADGE.w).toBeLessThanOrEqual(MODE.x); - expect(MODE.x + MODE.w).toBeLessThanOrEqual(CC_BUTTON.x); + expect(STAGE.y + STAGE.h).toBe(LAUNCH_BAR.y); + expect(LAUNCH_BAR.y + LAUNCH_BAR.h).toBe(SCREEN_H); + // Centred on the bar, and past the widest the tabs can grow. + expect(MODE.x).toBe(SCREEN_W - (MODE.x + MODE.w)); + expect(TAB_X0 + TAB_MAX * TAB_W).toBeLessThanOrEqual(MODE.x); + expect(MODE.x + MODE.w).toBeLessThanOrEqual(BADGE.x); + expect(BADGE.x + BADGE.w).toBeLessThanOrEqual(CC_BUTTON.x); expect(CC_BUTTON.x + CC_BUTTON.w).toBeLessThanOrEqual(SCREEN_W); for (const r of [BADGE, MODE, CC_BUTTON]) expect(r.y + r.h).toBeLessThanOrEqual(STRIP.h); }); @@ -284,32 +288,48 @@ describe("pocket-remote layout", () => { expect(stageWindows(state).map((w) => w.a)).toEqual(["t", "f"]); }); - test("the strip lists every workspace, the active one, and one empty tab after", () => { - const tabs = stripTabs([{ id: 1, n: 2 }, { id: 3, n: 1 }], 3); - expect(tabs.map((t) => t.id)).toEqual([1, 3, 4]); - expect(tabs[2]!.n).toBe(0); - expect(stripTabs([{ id: 1, n: 0 }], 1).map((t) => t.id)).toEqual([1]); - expect(stripTabs([], 5).map((t) => t.id)).toEqual([5]); // already empty: no trailing tab - expect(stripTabs(Array.from({ length: 12 }, (_, i) => ({ id: i + 1, n: 1 })), 1).length).toBe(TAB_MAX); - expect(tabAt(tabs[1]!.x + 3, tabs)!.id).toBe(3); + test("the strip's tabs are a fixed 1..N, whatever Hyprland currently keeps alive", () => { + // Hyprland destroys an empty workspace, so a snapshot can carry only 2 + // and 3 on a machine whose desks are 1..5. The numbers Omarchy binds + // are addressable regardless. + const tabs = stripTabs([{ id: 2, n: 1 }, { id: 3, n: 2 }], 2); + expect(tabs.map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); + expect(tabs.map((t) => t.n)).toEqual([0, 1, 2, 0, 0]); + expect(stripTabs([], 1).map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); + // A workspace above the fixed set extends it, up to what fits. + expect(stripTabs([{ id: 7, n: 1 }], 1).map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7]); + // Ten are bound but eight fit: standing on 10, the last tab is 10. + const high = stripTabs([{ id: 10, n: 1 }], 10); + expect(high.length).toBe(TAB_MAX); + expect(high.map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7, 10]); + expect(high[TAB_MAX - 1]!.n).toBe(1); + expect(stripTabs([], 8).map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7, 8]); + expect(tabAt(tabs[2]!.x + 3, tabs)!.id).toBe(3); expect(tabAt(0, tabs)).toBeNull(); + expect(tabs[TAB_MIN - 1]!.x + TAB_W).toBeLessThanOrEqual(MODE.x); }); - test("launch chips sit centred on the empty stage and hit-test", () => { - const rects = [0, 1, 2].map((i) => launchChipRect(i, 3)); - expect(rects[0]!.x).toBeGreaterThan(0); - expect(rects[2]!.x + rects[2]!.w).toBeLessThan(SCREEN_W); - expect(SCREEN_W - (rects[2]!.x + rects[2]!.w)).toBeCloseTo(rects[0]!.x, -1); - expect(launchChipAt(rects[1]!.x + 10, rects[1]!.y + 10, 3)).toBe(1); - expect(launchChipAt(rects[1]!.x + 10, rects[1]!.y - 10, 3)).toBeNull(); + test("the launch bar's three cells fill the width and hit-test", () => { + const rects = [0, 1, 2].map((i) => launchCellRect(i, 3)); + expect(rects[0]!.x).toBe(0); + expect(rects[2]!.x + rects[2]!.w).toBe(SCREEN_W); + expect(rects[1]!.x).toBe(rects[0]!.w); + for (const r of rects) { + expect(r.y).toBe(LAUNCH_BAR.y); + expect(r.w).toBeGreaterThanOrEqual(120); + } + expect(launchCellAt(rects[1]!.x + 10, LAUNCH_BAR.y + 10, 3)).toBe(1); + expect(launchCellAt(rects[1]!.x + 10, LAUNCH_BAR.y - 10, 3)).toBeNull(); + expect(launchCellAt(479, LAUNCH_BAR.y + 10, 3)).toBe(2); }); - test("the ball snaps to the nearer edge, keeps its height, stays under the strip", () => { + test("the ball snaps to the nearer edge, keeps its height, stays off the strip and the launch bar", () => { expect(BALL_HOME.x + BALL).toBeLessThanOrEqual(SCREEN_W); expect(ballSnap(100, 150)).toEqual({ x: BALL_MARGIN, y: 150 }); expect(ballSnap(300, 150)).toEqual({ x: SCREEN_W - BALL - BALL_MARGIN, y: 150 }); expect(ballSnap(300, 0).y).toBe(BALL_Y_MIN); expect(ballSnap(300, 900).y).toBe(BALL_Y_MAX); + expect(BALL_Y_MAX + BALL).toBeLessThanOrEqual(LAUNCH_BAR.y); const ball = { x: 400, y: 200 }; expect(ballHit(420, 220, ball)).toBe(true); expect(ballHit(398, 220, ball)).toBe(true); // 4 px of slack diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index 130a40e9d..788415748 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -417,10 +417,11 @@ async function shots(outDir: string): Promise { shot("deck-variants"); frames(1); - // back to the stage, then the empty workspace three + // back to the stage, then an empty workspace: the launch bar is fixed, so + // there is nothing on the stage but the hint. tap(MODE.x + 17, MODE.y + 11); frames(10); - tap(6 + TAB_W * 2 + TAB_W / 2, 14); + tap(6 + TAB_W * 4 + TAB_W / 2, 14); frames(30); shot("empty"); console.log(`wrote ${outDir}`); From 220df8847748e656cf8f0e969d80260233597563 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 09:28:39 -0700 Subject: [PATCH 13/27] feat(pocket-remote): a design system, windows named by their titles, a resize corner, and a laptop's arrow cluster MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - design.ts and ui.tsx: the spacing scale, radii, row heights, icon box and one `rowMetrics` arithmetic, plus the drawn primitives (Card, Row, PressTint) and the class literals that must spell a radius out. Every list — a held tile's popup, the menu sheet, the launch bar — is assembled from them, so the paddings that had drifted per surface now agree by construction; a test asserts the popup's metrics and the sheet's match. - A tile leads with its window's TITLE and names the program underneath: four terminals all read "foot" when the class came first. names.ts prettifies a class (org.gnome.Nautilus → Files, dev.zed.Zed → Zed) and the daemon strips the program's own name off a title's tail ("Omarchy Manual - Chromium" → "Omarchy Manual"). Titles carry 34 code points now. - Floating windows stack above tiled ones, most recently focused on top — the compositor's own order, written as a paint order (zIndex) instead of left to whichever pool slot a window happened to take. - Drag a tile's bottom-right corner to resize the window: relative monitor px through the dispatcher SUPER+arrow uses, so a tiled window moves its split and a floating one changes size. The corner is drawn on tiles big enough to carry it and wins over the ball where they overlap. - The popup gained "Open another": the daemon resolves the window's class against the machine's desktop entries (StartupWMClass, then the entry id, then the executable) and launches it. It also no longer runs a row when the finger lifts where it started — on a 260 px stage a four-row popup often covers its own anchor, and the last row closes the window. - Deck: the character bubble is gone (it covered the row above, and on the top row it had to open downwards), the arrows are a laptop's cluster (←, ↑ over ↓ in one column, →) at the bottom right, return closes the home row, and SUPER joins ctrl and alt as a sticky modifier so Omarchy's own grammar is reachable from the deck. - The ball hides on the deck (it sat on the trackpad) and starts on the left edge, where no tile keeps its resize corner. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 16 ++- apps/pocket-remote/app.tsx | 8 +- apps/pocket-remote/control.tsx | 30 ++-- apps/pocket-remote/deck.tsx | 61 +-------- apps/pocket-remote/design.ts | 77 +++++++++++ apps/pocket-remote/host/hypr.ts | 23 +++- apps/pocket-remote/host/omarchy.ts | 51 +++++-- apps/pocket-remote/host/serve.ts | 48 +++++-- apps/pocket-remote/keyboard-layout.ts | 118 ++++++++++------ apps/pocket-remote/layout.ts | 45 ++++-- apps/pocket-remote/media/control-centre.png | Bin 15465 -> 15659 bytes apps/pocket-remote/media/deck-key.png | Bin 15850 -> 0 bytes apps/pocket-remote/media/deck-variants.png | Bin 15750 -> 15502 bytes apps/pocket-remote/media/deck.png | Bin 15232 -> 15023 bytes apps/pocket-remote/media/empty.png | Bin 9952 -> 9942 bytes apps/pocket-remote/media/menu-apps.png | Bin 11233 -> 11388 bytes apps/pocket-remote/media/menu-root.png | Bin 12223 -> 12348 bytes apps/pocket-remote/media/menu-toggle.png | Bin 13238 -> 13358 bytes apps/pocket-remote/media/menu-trigger.png | Bin 12789 -> 12896 bytes apps/pocket-remote/media/popup.png | Bin 13095 -> 13341 bytes apps/pocket-remote/media/stage.png | Bin 12565 -> 13021 bytes apps/pocket-remote/menu-sheet.tsx | 68 ++++----- apps/pocket-remote/names.ts | 80 +++++++++++ apps/pocket-remote/popup.tsx | 59 ++++---- apps/pocket-remote/protocol.ts | 12 +- apps/pocket-remote/stage.tsx | 111 ++++++++++++--- apps/pocket-remote/store.ts | 98 ++++++++++++- apps/pocket-remote/ui.tsx | 136 ++++++++++++++++++ tests/pocket-remote-sim.test.ts | 99 ++++++++++---- tests/pocket-remote.test.ts | 144 +++++++++++++++++--- tools/pocket-remote.ts | 8 +- 31 files changed, 1002 insertions(+), 290 deletions(-) create mode 100644 apps/pocket-remote/design.ts delete mode 100644 apps/pocket-remote/media/deck-key.png create mode 100644 apps/pocket-remote/names.ts create mode 100644 apps/pocket-remote/ui.tsx diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 790d8a104..7de19747f 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -30,8 +30,8 @@ against a scripted desktop; the panel is 480x320. | ![the stage](media/stage.png) | ![a held tile's popup](media/popup.png) | | ![the control centre](media/control-centre.png) | ![Omarchy's menu as a sheet](media/menu-root.png) | | ![the Trigger submenu](media/menu-trigger.png) | ![the machine's applications](media/menu-apps.png) | -| ![the deck](media/deck.png) | ![a key's bubble](media/deck-key.png) | -| ![a held key's variants](media/deck-variants.png) | ![an empty workspace](media/empty.png) | +| ![the deck](media/deck.png) | ![a held key's variants](media/deck-variants.png) | +| ![an empty workspace](media/empty.png) | ![the connect screen](media/connect.png) | The stage is 260 px between the strip and the launch bar; the deck runs to the bottom edge. @@ -220,11 +220,13 @@ Lines are JSON (`protocol.ts`, `REMOTE_PROTO` 2). Host → device: `hello`, `auth`, `state`, `levels`, `theme`, `cc` (Wi-Fi and what is playing), `menu` (hidden and checked ids), `apps` (one page of the application list), `toast`. Device → host: `hello`, `act`, `ws`, `win` (focus, close, swap, move, place, -float, full), `vol`, `bri`, `mute`, `media`, `type`, `key`, `ptr`, `click`, -`scroll`, `drag`, `wifi`, `menu`, `launch`. **A snapshot has to fit one 8 KiB -poll batch**, so titles are clipped to 28 code points, windows to the 24 most -recently focused, coordinates are integers, and the application list arrives -forty entries at a time. Pointer motion is accumulated on the device and sent +resize, float, full, same), `vol`, `bri`, `mute`, `media`, `type`, `key`, +`ptr`, `click`, `scroll`, `drag`, `wifi`, `menu`, `launch`. **A snapshot has +to fit one 8 KiB poll batch**, so titles are clipped to 34 code points (a +title is what tells two terminals apart, and the daemon strips the program's +own name off its tail first), windows to the 24 most recently focused, +coordinates are integers, and the application list arrives forty entries at a +time. Pointer motion is accumulated on the device and sent at most once per frame. **The cable.** The device listens on port 8624. When the iPod is plugged into diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx index 263f95c69..57086dbab 100644 --- a/apps/pocket-remote/app.tsx +++ b/apps/pocket-remote/app.tsx @@ -62,7 +62,9 @@ export default function PocketRemote() { if (store.sheet()) return sheet; if (store.cc()) return control; if (store.popup()) return popup; - if (ballHit(x, y, store.ball())) return ball; + // A tile's resize corner wins where the ball overlaps it: the corner is + // 18 px and fixed to its window, the ball is 44 px and can be dragged. + if (store.mode() === "stage" && ballHit(x, y, store.ball()) && !store.gripAt(x, y)) return ball; if (y < STRIP.h) return strip; return store.mode() === "stage" ? stage : deck; }; @@ -97,7 +99,9 @@ export default function PocketRemote() { - + {/* The ball belongs to the stage: on the deck it would sit on the + trackpad, and the deck has SUPER for Omarchy's own menu. */} + diff --git a/apps/pocket-remote/control.tsx b/apps/pocket-remote/control.tsx index d166884ce..2ad3d84c7 100644 --- a/apps/pocket-remote/control.tsx +++ b/apps/pocket-remote/control.tsx @@ -12,12 +12,14 @@ import { createEffect, Show } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; +import { GUTTER, ICON_BOX, SPACE } from "./design.ts"; import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; import { CC, CC_BUTTON, + CC_ROW_H, CC_ICON_W, CC_ICON_X, CC_MEDIA, @@ -40,6 +42,12 @@ import { import type { RemoteStore } from "./store.ts"; import { themed } from "./theme.ts"; +/** A name too long for its box, with an ellipsis rather than a hard cut. */ +function clip(text: string, max: number): string { + const chars = Array.from(text); + return chars.length <= max ? text : `${chars.slice(0, max - 1).join("")}…`; +} + function Slider(p: { store: RemoteStore; row: 0 | 1 }) { const level = () => (p.row === 0 ? p.store.bri() : p.store.vol()); const hot = () => p.store.cc()?.row === p.row; @@ -56,7 +64,7 @@ function Slider(p: { store: RemoteStore; row: 0 | 1 }) { (hot() ? "accentTint" : "surface"))} > (p.row === 1 && p.store.mute() ? "dim" : "fg")} size="lg" /> @@ -117,17 +125,20 @@ export function ControlCentre(p: { store: RemoteStore }) { style={{ insetL: CC_WIFI.x, insetT: CC_WIFI.y, width: CC_WIFI.w, height: CC_WIFI.h }} ref={themed(() => (wifi().on ? "accentFill" : "surface"))} > - + (wifi().on ? GLYPH.wifi : GLYPH.wifiOff)} tone={() => (wifi().on ? "onAccent" : "dim")} size="xl" /> - + (wifi().on ? "textOnAccent" : "text"))}> Wi-Fi - + (wifi().on ? "textOnAccent" : "textDim"))}> - {wifi().on ? (wifi().ssid || "not connected") : "off"} + {wifi().on ? clip(wifi().ssid, 12) || "not connected" : "off"} @@ -156,15 +167,18 @@ export function ControlCentre(p: { store: RemoteStore }) { style={{ insetL: CC_MEDIA.x, insetT: CC_MEDIA.y, width: CC_MEDIA.w, height: CC_MEDIA.h }} ref={themed("surface")} > - + (media().st === "playing" ? "accent" : "dim")} size="xl" /> - + {media().st === "none" ? "Nothing playing" : media().title || "Untitled"} - + {media().st === "none" ? "" : media().artist} diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx index 890dde67d..1a7319a94 100644 --- a/apps/pocket-remote/deck.tsx +++ b/apps/pocket-remote/deck.tsx @@ -3,12 +3,14 @@ // iPod. Five compact rows of keys over a trackpad, so typing and pointing // need no mode of their own. Keys go straight to the desktop (wtype) as they // are pressed; nothing is buffered on the device, so what the desktop shows -// is the truth. A pressed key rises, brightens and shows its character in a -// bubble above the finger — the feedback a capacitive keyboard owes. +// is the truth. A pressed key rises and brightens — no character bubble: on +// a keyboard this compact it covered the row above, and on the top row it +// had to open downwards, which read as a different key lighting up. // -// Chords two ways: sticky modifiers (tap ctrl, then the key; ctrl arms, -// paints itself, drops after one key) and hold-and-slide variants (hold a -// letter and ^X ⌥X fan out above it; hold a digit for its F-key). +// Chords two ways: sticky modifiers (tap ctrl, alt or super, then the key; +// the modifier arms, paints itself, drops after one key) and hold-and-slide +// variants (hold a letter and ^X ⌥X fan out above it; hold a digit for its +// F-key). SUPER is there because Omarchy's own grammar lives on it. // // The trackpad is a relative pointer: one finger moves, tap clicks, two // fingers scroll, a two-finger tap is the right button, and a hold picks @@ -22,7 +24,6 @@ import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; import { - bubbleRect, chipAt, chipRects, keyAt, @@ -101,44 +102,6 @@ function Key(p: { store: RemoteStore; key: KeyRect }) { ); } -/** - * The pressed character, large, above the key. One instance follows the - * pressed key: Show holds it while the key underneath changes, so its - * position has to be written through the mirror rather than read once into - * a style object — typing "hello" left the bubble parked on the h. - */ -function Bubble(p: { store: RemoteStore; key: () => KeyRect }) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const r = bubbleRect(p.key()); - jump(root, "insetL", r.x); - jump(root, "insetT", r.y); - jump(root, "width", r.w); - jump(root, "height", r.h); - }); - createEffect(() => { - if (!root) return; - const depth = p.store.pressT(); - jump(root, "opacity", depth); - jump(root, "translateY", Math.round((1 - depth) * 8)); - jump(root, "scale", 0.9 + 0.1 * depth); - }); - return ( - { - root = node; - themed("fgFill")(node); - }} - > - - {p.key().def.label} - - - ); -} - function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; count: number; hot: boolean }) { let root: NodeMirror | null = null; createEffect(() => { @@ -166,13 +129,6 @@ function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; cou function Keyboard(p: { store: RemoteStore }) { const keys = () => keyboardKeys(p.store.kbLayer()); - const pressedKey = (): KeyRect | null => { - const id = p.store.pressed(); - if (!id || !id.startsWith("key:")) return null; - const [, row, col] = id.split(":"); - const key = keys().find((k) => k.row === Number(row) && k.col === Number(col)); - return key && "ch" in key.def.act ? key : null; - }; return ( <> {(key) => } @@ -183,9 +139,6 @@ function Keyboard(p: { store: RemoteStore }) { )} - - pressedKey()!} /> - ); } diff --git a/apps/pocket-remote/design.ts b/apps/pocket-remote/design.ts new file mode 100644 index 000000000..a1f80361b --- /dev/null +++ b/apps/pocket-remote/design.ts @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/design.ts — the remote's design tokens and the row +// arithmetic every list is built from. One place, because the paddings had +// drifted: each surface had picked its own icon inset, label offset and +// highlight bleed, and side by side they read as sloppy. +// +// A class string reaches the device as one baked literal, so a token cannot +// be interpolated into a class — radii and sizes therefore live here as +// NUMBERS for `style` objects, and the literals that must spell a radius out +// live in ui.tsx next to the primitive that owns them. Anything measured in +// pixels belongs in this file; anything drawn belongs there. + +/** Spacing scale. Everything that separates two things uses one of these. */ +export const SPACE = { xs: 2, sm: 4, md: 6, lg: 8, xl: 12, xxl: 16 } as const; + +/** + * Corner radii, by the thing they belong to. The literals in ui.tsx spell + * these out; the numbers are here so geometry can reason about them (the + * sheet's header squares off its own bottom corners, for instance). + */ +export const RADIUS = { card: 14, popup: 10, row: 8, control: 7, chip: 9, tab: 6, tile: 4 } as const; + +/** Row heights, by the surface. A list row is 40; a menu popup's is 36. */ +export const ROW_H = { list: 40, popup: 36, bar: 32, slider: 36 } as const; + +/** The box every row's leading glyph is centred in. */ +export const ICON_BOX = 24; +/** A row's leading and trailing inset. */ +export const GUTTER = 10; +/** Gap between the icon box and the label. */ +export const ICON_GAP = SPACE.lg; +/** The highlight behind a pressed or hovered row, inset from its edges. */ +export const HIGHLIGHT_INSET = SPACE.sm; +/** A hairline between rows, inset from both ends. */ +export const HAIRLINE_INSET = GUTTER; +/** The smallest a finger is asked to hit. */ +export const TARGET_MIN = 28; + +export interface Box { + x: number; + y: number; + w: number; + h: number; +} + +export interface RowMetrics { + h: number; + /** Leading glyph box. */ + icon: Box; + /** The label, vertically centred by `items-center` on this box. */ + label: Box; + /** Trailing glyph box (a chevron, a tick), or null without one. */ + trailing: Box | null; + /** The pressed/hot highlight. */ + highlight: Box; + /** The hairline above the row (rows after the first draw it). */ + hairline: Box; +} + +/** + * One row's anatomy in a container `width` wide: leading icon, label, an + * optional trailing glyph, the highlight and the hairline — all from the + * same tokens, so two lists cannot disagree about their paddings. + */ +export function rowMetrics(width: number, h: number, trailing = false): RowMetrics { + const iconY = Math.round((h - ICON_BOX) / 2); + const labelX = GUTTER + ICON_BOX + ICON_GAP; + const trailingX = width - GUTTER - ICON_BOX; + return { + h, + icon: { x: GUTTER, y: iconY, w: ICON_BOX, h: ICON_BOX }, + label: { x: labelX, y: 0, w: (trailing ? trailingX - SPACE.md : width - GUTTER) - labelX, h }, + trailing: trailing ? { x: trailingX, y: iconY, w: ICON_BOX, h: ICON_BOX } : null, + highlight: { x: HIGHLIGHT_INSET, y: HIGHLIGHT_INSET / 2, w: width - 2 * HIGHLIGHT_INSET, h: h - HIGHLIGHT_INSET }, + hairline: { x: HAIRLINE_INSET, y: 0, w: width - 2 * HAIRLINE_INSET, h: 1 }, + }; +} diff --git a/apps/pocket-remote/host/hypr.ts b/apps/pocket-remote/host/hypr.ts index 15666f7ec..98cc9ed7b 100644 --- a/apps/pocket-remote/host/hypr.ts +++ b/apps/pocket-remote/host/hypr.ts @@ -69,6 +69,24 @@ export interface HyprActiveWindow { * and the windows — most recently focused first, clipped to WINDOWS_MAX so * the line stays under the device's poll cap. */ +/** + * A title as a person would read it: without the program's own name tacked + * on the end. Browsers and editors append " - Chromium", " — Zed", "- NVIM"; + * the tile already says which program it is. + */ +export function cleanTitle(title: string, windowClass: string): string { + let out = title.trim(); + const name = windowClass.trim(); + if (!name) return out; + const tail = name.includes(".") ? name.slice(name.lastIndexOf(".") + 1) : name; + for (const candidate of [name, tail]) { + if (!candidate) continue; + const pattern = new RegExp(`\\s*[-—–|]\\s*${candidate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*$`, "i"); + out = out.replace(pattern, ""); + } + return out.trim(); +} + export function buildState( monitors: HyprMonitor[], workspaces: HyprWorkspace[], @@ -98,10 +116,11 @@ export function buildState( .sort((a, b) => a.focusHistoryID - b.focusHistoryID) .slice(0, WINDOWS_MAX) .map((c) => { + const windowClass = c.class || c.initialClass || "?"; const info: WinInfo = { a: c.address, - c: c.class || c.initialClass || "?", - ti: clipTitle(c.title || ""), + c: windowClass, + ti: clipTitle(cleanTitle(c.title || "", windowClass)), ws: c.workspace.id, x: Math.round(c.at[0] - monX), y: Math.round(c.at[1] - monY), diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index 6640d01bb..fbdbdd329 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -476,10 +476,27 @@ export function applicationDirectories(env: NodeJS.ProcessEnv = process.env): st .filter((dir) => (seen.has(dir) ? false : (seen.add(dir), true))); } -/** Every launchable application on the machine, by name. First directory to - * carry an id wins, which is XDG's own rule. */ -export function readApps(env: NodeJS.ProcessEnv = process.env): AppEntry[] { +export interface AppIndex { + /** By display name, for the device's list. */ + apps: AppEntry[]; + /** Window class (lowercased) -> desktop entry id, for "open same". */ + byClass: Map; +} + +/** + * Every launchable application on the machine, plus an index from window + * class to entry so a window can be opened again. First directory to carry + * an id wins, which is XDG's own rule; the class index takes + * StartupWMClass first, then the entry id, then the executable's name — + * which is how a launcher recognises its own windows. + */ +export function readAppIndex(env: NodeJS.ProcessEnv = process.env): AppIndex { const byId = new Map(); + const byClass = new Map(); + const claim = (key: string, id: string): void => { + const k = key.trim().toLowerCase(); + if (k && !byClass.has(k)) byClass.set(k, id); + }; for (const dir of applicationDirectories(env)) { let files: string[]; try { @@ -491,18 +508,34 @@ export function readApps(env: NodeJS.ProcessEnv = process.env): AppEntry[] { if (!file.endsWith(".desktop")) continue; const id = file.slice(0, -".desktop".length); if (byId.has(id)) continue; - let name: string | null; + let entry: Record; try { - name = launchableName(parseDesktopEntry(readFileSync(join(dir, file), "utf8"))); + entry = parseDesktopEntry(readFileSync(join(dir, file), "utf8")); } catch { continue; } - if (name) byId.set(id, name); + const name = launchableName(entry); + if (!name) continue; + byId.set(id, name); + if (entry.StartupWMClass) claim(entry.StartupWMClass, id); + claim(id, id); + const exec = entry.Exec?.split(/\s+/)[0]; + if (exec) claim(exec.slice(exec.lastIndexOf("/") + 1), id); } } - return [...byId] - .map(([i, n]) => ({ i, n })) - .sort((a, b) => a.n.localeCompare(b.n)); + return { + apps: [...byId].map(([i, n]) => ({ i, n })).sort((a, b) => a.n.localeCompare(b.n)), + byClass, + }; +} + +/** The entry that would open another window of this class, if any. The + * class's last reverse-DNS component is tried too (org.gnome.Nautilus). */ +export function appForClass(index: AppIndex, windowClass: string): string | null { + const raw = windowClass.trim().toLowerCase(); + if (!raw) return null; + const tail = raw.includes(".") ? raw.slice(raw.lastIndexOf(".") + 1) : raw; + return index.byClass.get(raw) ?? index.byClass.get(tail) ?? null; } const APP_ID = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/; diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index cecff2338..5cc65b621 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -48,7 +48,9 @@ import { loadMenu, Pointer, pressKey, - readApps, + appForClass, + type AppIndex, + readAppIndex, readLevels, readMedia, readTheme, @@ -216,7 +218,7 @@ let theme = readTheme(); let monitorOrigin = { x: 0, y: 0 }; let lastCc: HostLine | null = null; let lastMenu: { hide: string[]; check: string[] } | null = null; -let lastApps: AppEntry[] = []; +let apps: AppIndex = { apps: [], byClass: new Map() }; let menuEntries = loadMenu(); let menuBusy = false; const pointer = new Pointer(undefined, log); @@ -331,11 +333,14 @@ function appPages(apps: AppEntry[]): HostLine[] { function refreshApps(): void { try { - const apps = readApps(); - if (JSON.stringify(apps) === JSON.stringify(lastApps)) return; - lastApps = apps; - for (const page of appPages(apps)) broadcast(page); - log(`apps: ${apps.length} entries`); + const next = readAppIndex(); + if (JSON.stringify(next.apps) === JSON.stringify(apps.apps)) { + apps = next; + return; + } + apps = next; + for (const page of appPages(apps.apps)) broadcast(page); + log(`apps: ${apps.apps.length} entries, ${apps.byClass.size} classes`); } catch (error) { log(`apps: ${(error as Error).message}`); } @@ -359,7 +364,7 @@ function sendMirror(conn: Conn): void { if (lastState) sendLine(conn, lastState); if (lastCc) sendLine(conn, lastCc); if (lastMenu) sendLine(conn, { t: "menu", hide: lastMenu.hide, check: lastMenu.check }); - for (const page of appPages(lastApps)) sendLine(conn, page); + for (const page of appPages(apps.apps)) sendLine(conn, page); } // --------------------------------------------------------------------------- @@ -454,12 +459,39 @@ async function handle(conn: Conn, line: ClientLine): Promise { ); break; } + case "resize": { + // Relative, in monitor px: the same dispatcher Omarchy's own + // SUPER+arrow bindings use, so a tiled window moves its split and + // a floating one changes size. + const dx = Number(line.dx); + const dy = Number(line.dy); + if (!Number.isFinite(dx) || !Number.isFinite(dy) || Math.abs(dx) > 4000 || Math.abs(dy) > 4000) return; + if (Math.round(dx) === 0 && Math.round(dy) === 0) return; + await batchLogged([ + `hl.dsp.focus({ window = ${window} })`, + `hl.dsp.window.resize({ x = ${Math.round(dx)}, y = ${Math.round(dy)}, relative = true })`, + ]); + break; + } case "float": await dispatchLogged(`hl.dsp.window.float({ window = ${window}, action = "toggle" })`); break; case "full": await batchLogged([`hl.dsp.focus({ window = ${window} })`, 'hl.dsp.window.fullscreen({ mode = "fullscreen" })']); break; + case "same": { + // Another window of the same program: the class is resolved + // against the machine's own desktop entries. + const windowClass = lastState?.win.find((w) => w.a === line.a)?.c ?? ""; + const entry = appForClass(apps, windowClass); + if (!entry || !launchApp(entry, log)) { + log(`same: no launcher for ${JSON.stringify(windowClass)}`); + sendLine(conn, { t: "toast", text: `no launcher for ${windowClass}` }); + return; + } + log(`same: ${windowClass} -> ${entry}`); + break; + } } scheduleSnapshot(); return; diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts index 0bdaa7147..fce9b5351 100644 --- a/apps/pocket-remote/keyboard-layout.ts +++ b/apps/pocket-remote/keyboard-layout.ts @@ -1,10 +1,19 @@ // SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/keyboard-layout.ts — the deck's geometry and key table -// with no Solid in it: the keyboard's five compact rows over the trackpad -// (the laptop's C surface, upside up), keysym names, hold-and-slide -// variants, chip placement, and the key -> wire-line mapping. deck.tsx -// renders and handles; tests import this file bare (bun test cannot load the -// app's .tsx through the Solid transform). +// with no Solid in it: the keyboard's five rows over the trackpad (the +// laptop's C surface, upside up), keysym names, hold-and-slide variants, +// chip placement, and the key -> wire-line mapping. deck.tsx renders and +// handles; tests import this file bare (bun test cannot load the app's .tsx +// through the Solid transform). +// +// The arrows are a laptop's cluster, not two keys parked at the end of the +// letters: ← then ↑ over ↓ in one column, then →, at the bottom right where +// a hand expects them. A stacked pair shares its column, each key half the +// row's height. +// +// SUPER is a sticky modifier like ctrl and alt, so Omarchy's own bindings +// are reachable from the deck: super then space opens its menu on the +// laptop, super then 1..9 switches workspace. import { type Rect, SCREEN_H, SCREEN_W, STRIP } from "./layout.ts"; import type { Modifier } from "./protocol.ts"; @@ -23,6 +32,9 @@ export const ROWS_TOP = STRIP.h + 4; export const ROW_PITCH = 36; export const KEY_H = 32; export const ROW_COUNT = 5; +/** Half-height keys (the stacked arrow pair) with a gap between them. */ +export const HALF_GAP = 2; +export const HALF_H = (KEY_H - HALF_GAP) / 2; /** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ const UNIT = 44; const TOP_UNIT = 40; @@ -45,6 +57,9 @@ export interface KeyDef { dark?: boolean; /** Hold-and-slide variants (letters and digits). */ variants?: KeyVariant[]; + /** Half-height, sharing a column with its partner: "top" comes first and + * does not advance the row, "bottom" sits under it and does. */ + stack?: "top" | "bottom"; } /** Keysym names for the characters that need one (wtype -k). */ @@ -78,53 +93,66 @@ const letters = (row: string): KeyDef[] => const digits = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch }, variants: digitVariants(ch) })); const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); +/** esc, the digits, backspace. Twelve columns of 40. */ const TOP_ROW: KeyDef[] = [ { label: "esc", w: 1, act: { key: "Escape" }, dark: true }, ...digits("1234567890"), { label: "⌫", w: 1, act: { key: "BackSpace" }, dark: true }, ]; -/** Row three's ends: shift, then the arrows. */ -const rowThree = (middle: KeyDef[], shiftTo: KbLayer): KeyDef[] => [ - { label: "shift", w: 1.25, act: { layer: shiftTo }, dark: true }, - ...middle, - { label: "↑", w: 0.75, act: { key: "Up" }, dark: true }, - { label: "↓", w: 0.75, act: { key: "Down" }, dark: true }, -]; +/** Return closes the home row, where a keyboard puts it. */ +const RETURN: KeyDef = { label: "return", w: 1.75, act: { key: "Return" }, dark: true }; -/** The bottom row: layer switch, ctrl, alt, tab, space, two punctuation - * keys (comma and period; apostrophe and backtick on the symbol layer), - * the horizontal arrows and return. 10.75 units. */ +/** The bottom row: the layer switch, the modifiers, tab, space, and the + * arrow cluster. 10.25 units, the same width as the row above. */ const bottomRow = (layer: KbLayer): KeyDef[] => [ { label: layer === "sym" ? "abc" : "123", w: 1, act: { layer: layer === "sym" ? "lower" : "sym" }, dark: true }, { label: "ctrl", w: 1, act: { mod: "ctrl" }, dark: true }, { label: "alt", w: 1, act: { mod: "alt" }, dark: true }, + { label: "super", w: 1, act: { mod: "super" }, dark: true }, { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, - { label: "space", w: 2.25, act: { key: "space" } }, - { label: layer === "sym" ? "'" : ",", w: 0.75, act: { ch: layer === "sym" ? "'" : "," } }, - { label: layer === "sym" ? "`" : ".", w: 0.75, act: { ch: layer === "sym" ? "`" : "." } }, + { label: "space", w: 3, act: { key: "space" } }, { label: "←", w: 0.75, act: { key: "Left" }, dark: true }, + { label: "↑", w: 0.75, act: { key: "Up" }, dark: true, stack: "top" }, + { label: "↓", w: 0.75, act: { key: "Down" }, dark: true, stack: "bottom" }, { label: "→", w: 0.75, act: { key: "Right" }, dark: true }, - { label: "return", w: 1.5, act: { key: "Return" }, dark: true }, ]; const ROWS: Record = { lower: [ letters("qwertyuiop"), - letters("asdfghjkl"), - rowThree([...letters("zxcvbnm"), { label: "'", w: 1, act: { ch: "'" } }], "upper"), + [...letters("asdfghjkl"), RETURN], + [ + { label: "shift", w: 1.25, act: { layer: "upper" }, dark: true }, + ...letters("zxcvbnm"), + { label: ",", w: 0.75, act: { ch: "," } }, + { label: ".", w: 0.75, act: { ch: "." } }, + { label: "'", w: 1, act: { ch: "'" } }, + ], bottomRow("lower"), ], upper: [ chars("QWERTYUIOP"), - chars("ASDFGHJKL"), - rowThree([...chars("ZXCVBNM"), { label: '"', w: 1, act: { ch: '"' } }], "lower"), + [...chars("ASDFGHJKL"), RETURN], + [ + { label: "shift", w: 1.25, act: { layer: "lower" }, dark: true }, + ...chars("ZXCVBNM"), + { label: "!", w: 0.75, act: { ch: "!" } }, + { label: "?", w: 0.75, act: { ch: "?" } }, + { label: '"', w: 1, act: { ch: '"' } }, + ], bottomRow("upper"), ], sym: [ chars("-/:;()$&@\""), - chars("[]{}#%^*+="), - rowThree(chars("_\\|~<>!?"), "lower"), + [...chars("[]{}#%^*+"), RETURN], + [ + { label: "shift", w: 1.25, act: { layer: "lower" }, dark: true }, + ...chars("_\\|~<>!"), + { label: "=", w: 0.75, act: { ch: "=" } }, + { label: "?", w: 0.75, act: { ch: "?" } }, + { label: "`", w: 1, act: { ch: "`" } }, + ], bottomRow("sym"), ], }; @@ -136,15 +164,25 @@ export interface KeyRect extends Rect { } function layoutRow(row: KeyDef[], r: number, unit: number): KeyRect[] { - const total = row.reduce((sum, key) => sum + key.w, 0); + const total = row.reduce((sum, key) => sum + (key.stack === "top" ? 0 : key.w), 0); let x = Math.round((SCREEN_W - total * unit) / 2); const y = ROWS_TOP + r * ROW_PITCH; - return row.map((def, c) => { + const out: KeyRect[] = []; + row.forEach((def, c) => { const w = Math.round(def.w * unit); - const rect = { x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }; + if (def.stack === "top") { + out.push({ x: x + 2, y, w: w - 4, h: HALF_H, def, row: r, col: c }); + return; // its partner shares the column + } + if (def.stack === "bottom") { + out.push({ x: x + 2, y: y + HALF_H + HALF_GAP, w: w - 4, h: HALF_H, def, row: r, col: c }); + x += w; + return; + } + out.push({ x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }); x += w; - return rect; }); + return out; } function layoutKeys(layer: KbLayer): KeyRect[] { @@ -161,27 +199,19 @@ export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { return LAYOUTS[layer]; } -/** The key under a point, with the gaps between keys belonging to their - * nearer neighbour so a finger never falls between two. */ +/** + * The key under a point. The gaps between keys belong to their nearer + * neighbour so a finger never falls between two — except vertically inside + * a stacked pair, where the gap is the boundary between up and down. + */ export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { for (const key of LAYOUTS[layer]) { - if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; + const slackY = key.def.stack ? 0 : 2; + if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - slackY && y < key.y + key.h + slackY) return key; } return null; } -/** The pressed key's preview bubble: the character, large, above the key - * (below it for the top row), the classic capacitive-keyboard feedback. */ -export const BUBBLE_W = 44; -export const BUBBLE_H = 40; -export function bubbleRect(key: Rect): Rect { - const x = Math.max(2, Math.min(SCREEN_W - 2 - BUBBLE_W, Math.round(key.x + key.w / 2 - BUBBLE_W / 2))); - // Sits on the key's top edge, so the first letter row's bubble ends where - // the strip begins; the top row's opens below it. - const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - BUBBLE_H : key.y + key.h + 4; - return { x, y, w: BUBBLE_W, h: BUBBLE_H }; -} - /** Variant chip geometry: above the key, or below it for the top row. */ export const CHIP_W = 56; export const CHIP_H = 34; diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index d16597df2..f3918f105 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -7,6 +7,7 @@ // and a finger on the trackpad becomes pointer motion. No Solid here so // tests can run it bare. +import { RADIUS, ROW_H, SPACE } from "./design.ts"; import type { Direction, HostState, WinInfo, WsInfo } from "./protocol.ts"; export const SCREEN_W = 480; @@ -73,6 +74,23 @@ export const TILE_TWO_LINES_H = 40; /** Fixed pool of tile slots (protocol WINDOWS_MAX). */ export const TILE_SLOTS = 24; +/** The corner a drag resizes the window by. Tiles too small to carry it + * keep their whole face for focus and the hold. */ +export const TILE_GRIP = 18; +export const TILE_GRIP_MIN = 52; + +export function tileGripRect(tile: Rect): Rect { + return { x: tile.x + tile.w - TILE_GRIP, y: tile.y + tile.h - TILE_GRIP, w: TILE_GRIP, h: TILE_GRIP }; +} + +/** Whether the point is on a tile's resize corner, with a few px of slack + * outside the tile so the very corner is reachable. */ +export function tileGripHit(x: number, y: number, tile: Rect): boolean { + if (tile.w < TILE_GRIP_MIN || tile.h < TILE_GRIP_MIN) return false; + const grip = tileGripRect(tile); + return within(x, y, { x: grip.x - 2, y: grip.y - 2, w: grip.w + 6, h: grip.h + 6 }); +} + /** One of the launch bar's equal cells. */ export function launchCellRect(i: number, count: number): Rect { const w = Math.floor(LAUNCH_BAR.w / count); @@ -95,9 +113,14 @@ export const BALL_Y_MIN = STRIP.h + 6; /** It never sits on the launch bar: those three targets are fixed and the * ball would cover one of them. */ export const BALL_Y_MAX = LAUNCH_BAR.y - BALL - 4; -/** Where it starts: the right edge, low, over the corner a window's tile - * least often needs. */ -export const BALL_HOME = { x: SCREEN_W - BALL - BALL_MARGIN, y: BALL_Y_MAX }; +/** + * Where it starts: the LEFT edge, low. The right edge is where a tile's + * resize corner lives — in a dwindle layout the rightmost window's corner + * lands under a right-edge ball exactly — and a handle that covers a + * control is worse than one on the hand's weaker side. It can be dragged + * anywhere either way. + */ +export const BALL_HOME = { x: BALL_MARGIN, y: BALL_Y_MAX }; /** Released anywhere, the ball goes to the nearer side edge and keeps its * height, clamped under the strip. */ @@ -117,11 +140,11 @@ export function ballHit(x: number, y: number, ball: { x: number; y: number }): b // popup (the classic one: a container of rows over the point it answers) // --------------------------------------------------------------------------- -export const POPUP_W = 176; -/** A held tile answers with three rows (stage.tsx). */ -export const TILE_POPUP_ROWS = 3; -export const POPUP_ROW_H = 36; -export const POPUP_PAD = 4; +export const POPUP_W = 184; +/** A held tile answers with four rows (stage.tsx). */ +export const TILE_POPUP_ROWS = 4; +export const POPUP_ROW_H = ROW_H.popup; +export const POPUP_PAD = SPACE.md; /** Distance between the anchor point and the popup's near edge. Short: the * popup opens under a held finger and the first row has to be reachable * without letting go. */ @@ -240,9 +263,9 @@ export function trackFill(level: number): number { export const SHEET: Rect = { x: 68, y: 34, w: 344, h: 274 }; export const SHEET_HEAD_H = 36; -export const SHEET_PAD = 8; -export const SHEET_ROW_H = 40; -export const SHEET_RADIUS = 14; +export const SHEET_PAD = SPACE.lg; +export const SHEET_ROW_H = ROW_H.list; +export const SHEET_RADIUS = RADIUS.card; /** The scrolling list's viewport. */ export const SHEET_LIST: Rect = { x: SHEET.x + SHEET_PAD, diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png index e326abe3a6257f6b7dd05c96b291b9c0ebf7ea55..61a8ab453011ee39716e1b16c8154f7c99902112 100644 GIT binary patch literal 15659 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 diff --git a/apps/pocket-remote/media/deck-key.png b/apps/pocket-remote/media/deck-key.png deleted file mode 100644 index f2473cf89db293f731db3ede3e1288683c3465d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15850 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 F{|goPgzEqR diff --git a/apps/pocket-remote/media/deck-variants.png b/apps/pocket-remote/media/deck-variants.png index cb8e1bbb0706a3309b73338aa75a395d7f3dcbfb..07518078aead8246afc8e5fa38798cf69e333245 100644 GIT binary patch literal 15502 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 NRqx*}z6F2w{{TeLP|pAW diff --git a/apps/pocket-remote/media/deck.png b/apps/pocket-remote/media/deck.png index febe72081480ab7e461e3562d2a1dc69b39179dc..2d7e857c2b5e3d863d83380565cba03ed198fe37 100644 GIT binary patch literal 15023 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 diff --git a/apps/pocket-remote/media/empty.png b/apps/pocket-remote/media/empty.png index 94e5cb496f68ff20ff6aab7460b19cefa02e8ed8..93f46a2262de48709f2fb70158ec21e7c05fb2fd 100644 GIT binary patch delta 7095 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 o-uDj^dpOoq9{ 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 OKg-irrzn5B-T5DdK^Elz diff --git a/apps/pocket-remote/media/menu-apps.png b/apps/pocket-remote/media/menu-apps.png index 2c4763c2be31fc425620eb64781c7c404adf8e5d..d553bf039dd2339a76d7e4ecb899cb65a06c4bb3 100644 GIT binary patch literal 11388 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 literal 11233 zcmeHtXIN9)*6vC|2!eog8%4KnrGqpDLb0PFC?xcvsPv-JYXIw3KtYOhMd>912}lXS z0$W6i7+NS%1f(XEBtT4ZS8$*6edpYJ&yVxmdw+cQgNHmMYh}){#vJ2)-!bOAZ+ZTd zu;5NX004x|P9MJr01yiJXClB4esbl{st5p3E;c)EY8?t$$RQ`mqO!);<@xhAz8f_* zjxGl0dDO8ec=IgILnLyFCKln-oe_FeLt=+mo7kUXThMzSN<#iHF%{{x^*H)a``y8V zX_ng#9=&`^`dM4i=b3}$9HH8S;zbH9&NGn4K?S?W-N+ARlI zRmV1OCZ{*Jl`IQLvJa*`O`USjJ1SG-W(u>lYCq9B(2frIAZhWPW1 z%%nf!sf5HmeSHoi=^suJ92w{LQNPCYB!0A*IYKn>zPoP`EPyvrg{?1Y(ncrs= z&AA?p@hjKPHHM4ew>H_$H2)MGbU>ly-$Pv5Zl5&lHP*PK-*`8KpLpW!KnG*I)Ktm9 z1n))kXYFb?Dyl!dcSk$2?l zx!EPjPbZceKY#qH;Qn$VsjrCJ+Axy4ENfBu8&D}kKuqg)E=Ivht{+I`5Hx_KMD@&< zZZXM`b69&@eK-C)(}EBzpc_iLcSHk!W#jHta!drP$R6t2>ckdJP?7A9VRDvUbeCV= zr4l95LnnTwSEUjx&xEzxLnxKGuND(sfaC2Q1R{bhr zMJW)j16N%uby5aKjJ3VfY`XVzzs|hIUBQY+;*bVh>pg&UAPeEneY90J{#vMyVu|$w zej1S`v1R@NAB{u!P$=GAcmHF4Fbv!E7y+)_@(X-IlZ9QCzt(l>?Q^~@5f=VVHE7b< z+1tmFE=_JtiJwY8uimhHfYqKHA?bPkF4HX|;%eUQsiEHxsXMBteJF3<3gyU$p)XvR z3Sw?a#)%jA?nA}Q+DM&v4D_cXOf&Ya=$X_>V0Im;>SbJQCeVS}BBrIda_pC*7pg|3 z=Da52&@KHvGEsHmB=1kelAVjP8RuOF!mA7c@0P@}=8XipzV6;uQb$GLDBI3gri~26 zMzqvPS@ncjeGcB)AON_(9N%`J&r~-4HpF(y230{w)jk0Y4G1+dyIAtre~gge%r6C@ zw8AW2CjnMGpseMBs1=qzr|C2HF?z1q;?(-WftY zXoU)f{@$^@&nUaQb)BWZb=wbDk8sDa>I6oas(D=ZZXr<0+oy_BhUUjNU=vCh< z$tBRk=A$N`L(2KA<4Oh7YAZa0lD7iW>yHHMZGpM7LArTxgMA=#-)A^R^k=gI5H$Eyrx#Hpp{&3@1`5YA>lcXNNfYG0RAt2$I_ z?ULr3We7B~J)5vC!Nsf2i(w4i^tn^MS_b_;k*=}$f}7a=MnZDLxT=cCxmap&VSYu) z=xw`C&_nC|hT+=g`dOjFMFXV8k3Q2YWdHX-s5}3Ull}$u-{b-!V1pG`Dzt+Kf7bMT zDSxs!Ijm`N#H(fBfDpxtI+02VX2RjV z7af}9+SfkP3D?5ZGE{EyTobFcJYxSl--0>N;RaFTQOs9(7G5q5*S4ZH4uO@u-9Ih#c<$eOFw@ZB)Q>zv8 z@R7sa_pz(ou7_OyubtFQyK2ooZWjUe)HX8Q|x{lEyGVgMKX*} z)!%g4Jy9C>QSU*oNU0!Y?Cb3}WiE72)l?J^k^Q z5RaHU8vMrZA(tq-_F*1W#*u9BF{3wCeICtbd0dCmpH#+J@4n?`HT1QSzB66y9kSQ) zEgnv*L^j_xv5hLOGQ24RxkSJ4;oSRu7FR=Y5!~Y9h&NYvzgXe-Z93ki;WsaUsn8A@ z*?KQ1(O|*REK}c)|DAq&POuus!6#~5oZK99d@BtA2{IPCT?_`&?&cd{yM)HJO%|q^ zI7Co1xy&cqG(i#tsX2Dd5Wv9d1@3L%y#8$k07NKz6)tan^IkU$IE;CK`HOOmL;(t* z2K~k9|BEmB?e*B$mA#Rb8?Hg%h*VKu&To#2?UU;nEYh@ed&bgxBnJ51-*Tn4S+-)m z#(MK|PZxN(SW_H;QI4AT3?Z-SH=JzRwR_Y0qfAWOnS`g948f8= z0`D)Z+sTo;{(i^!#OsP%I@yAiA-1*=W0z!o8 zE-v{+f~(Ui3r5l9qjml)solsi4jskGIRERDNhuTFb1|9c zP&NkAP)uwU*Yx1NEe&y0?wSkt(N6=zLvw7cXY~qA60}qxU>9@{UOFnb!yws5sCXEC z+Z*DvkU>@Spv=Y4wwT3L=5Eg;pR7|6o;d$>Um+vP3#lwbh0)x@GMQ zP`?kz&9FC@xjGa<$h_u!gyTbUGlDeXqxZa~vX)%9{#qJ=gAvQm0t)l;qQ0t2oQ`I* zjejSfO7HfIE%PmivM+z>iz6MO*ItMj=2UUn+!s{U!)3Clfb1JZIc2JyN*8%k;QKnt z4&ivSocaN2p#qGaOHwU(cs z#-BFJ!p2g>*R!JgTY@h=5jrhXnJjHPiRz-)_8Kum+PvH$73$9&xrcA$_j^sFj}0={ zx>B$JOoPhrj&=e`@@kxC8bF5N;d_GH-^;=b*x5{qa3ki7)NJdq2Q%Iw9rjl3(%FlW zfiHC#$k7>h+_X`E<1ks%L*$`vSF*L0GNo~yV@*6~3Uj5xAf@X3sf$$IVScgrZ6KJI zfWNTQ$N4ZzCXrzP1_Cm%f|wZ423wkh0Q^J{P>&x6(dFGV1lWp!1OWH%fq2G4+WG`Y zQwtS4BcG`SVoN8X3-*DKOEBwe=JuooH^cf0%cfnI8w$L&ht7A+8D!&o*Q4UKJ}hxs zhgNa^@xO4y4hdk$l0^1fi+%Z$KJbsNu&kuV^JB(-cTVc%tv78M5z{inUtt7^_!H!u z&S5H6KqYSO4>ET!v}WO^$CcJb(_iROE(Z{O1t?v)ulN!djUcu(k~hTGcSLCjUL94z zh(}EIu{V&}6)*O;4%hwTR~EqjTq3>y2{Rq$%a%Dz+ zDf$O<#fYr-6vZEBWGpmrD6D~OMak9J0d)I@48XED3euTL_NFba<`QM$3-ei%AWR2> zmLy5%SQD*@V-gZPjE)usT!Bu>!2ejr?I4i>;$q;%ZFvYl16*>*zP%uJD}eOr3NASq z8@z{#1cw5)1BgfWKo;C2)4w7G1n;FV0D!pyyG{1;R+Y!e{Qn|u{&_+MKc&yT>cwZq z_b*-zNP`%qI^kc`@g4?F7y+X-tIHRDW~`sBDk2Y5wxp2x|3+e!*-!7X^ucuu! zg&w%yNJ_9!i7@XfQ*ZITHr3xGD$b*9pvfvGF1_VW?J*#FqQao0wiyJj(Xr5}mm|6- zVwn#R##z+ppQ@zM?wDbyqpVDJl(6C3-)>ILQDbz#2|rR0z>(gY4pXMZbb{@u+j z0WQr;rVSPpHZ8^flRHyBbBu7z6yQmiUmo5~lB_j}V6j-IkciRzA#su0}p zcvDcw+1us5tv}m7CDpAK&DxWbyKpAm2B)k#hpUtZawpCoAv1;s(0;6wtdn5ktucA- z>;-H!tm%#T=vUVqAhvy^ z802E^-ZMS@Yd}R0GmTF4on)f&VKVD&0(1~PFr?_*obGhJ*$HUuBQw~=7`Ev1d)oom zXvD~&)Gb74h4jH@W^cS?T3n^Hwdb>B-+_ae{W3J}k)}Iyz1z-6w(a?sD}l`hG>d z5G)rWDFy>NQ?T}EcABS{^k#tG`pz5X-;VqL=ZW@TW5Q<0+Uk&UNiFgSF4M2OE3d;h zepByXUE<}*7!XPQc(Q!X0AxDGIQzvRjSz^;7A9Hc)<#SlHOQDikC#9%;$v!cjpe@8mH0qRm93@QVVi# zY)I&pu1Ge!YHFAsl7e?JTssn5L*2(y;ZHz3-wvF@37iE8*H9k+O)^tz5}8Gf#chbrNYR-=TJT|7L-|H9+*N9%in zTwJ1;%vVTyE&HrU!^|P}-Kn=01oQ4b?^dVwFDI>rq`&jB66Eu_J~z7du%daDW9gPZ z(PchTSc<1I$_(YN1C%vLS&o+WkE!Dyk)p0J>lrne2c|N#ZxAI)TLuDiHd?g)0w7cf z^$DJ=-MD}&!&9SH6+Ej-Jk3!oP7Dv*-!K8I9^h~(;`)~cL^i?|f&zk{`A)t;_k9^I z>ad+wQ^{S*rGS>i27t^C2?(_6Nr2i~eSil1X4TPfAaag@q;5$By(}=ma}$iR6Tq90 zv}+dGUS#z9aF4t2+Ga$#Ziq3rWHHZR506b&H{lO?ub@|O@F;2Vb0`Sr)I;5z+l9oO>$qxr~_roQjrme!p_`g z*w`~63~^P`CJE_}0Yjz=(;b={LweHX%mr z)=1`rf6|ZHkNz^BxvwO;pWc42H72o{b_7J|HUyC9C6)$6PE56{&T$zmro*r?2>SVk zax`IAxf45<3Jyk{GaZ0YKkY0)MkwxR!eb0L&rT)gLU zkJ={vHh{Vokjt|@4`i`-JnrhfTxQ?SV?SZB_~2zsTYuN0ru3zy_U!;x{2LE{uGnah zPuMU_WpRmRP<&tSuQd}QvX9*a*Smd1A6G}(BJ{(Oa_KX71p zJNQPhL?#(JJf0nB8M;}1=hRfw0Yfm06n6iW)c#FD2S~qT)n1TybvHdB7apWV(?6+i zc3Fa^`{X;<-rX2JN!Ig=Zo2BQ!1uYy$iF4V_((K;vQGX;I|v#jPMxqZ|L0})=t z{?f9giXNsHNM6A$g?C#xoPpXmpI}%#+`jH&8lRKU4=*6inq4Yd>dK9m-^)+fWH)U9 z4Od#58S_ErcR>f^`YUqx3poRwn8gT_QwvhCU-~*nsSAxw0Km&RpV5;l^&n<|7~ywB zp2zT2zl5<|fE-3=a$YUDnpn=~8jB{9j;bxR1hJg;U*;fON2#RiqbwBH{wK-;&Lhu* zf7jE}xvA(w-mxfEU=D{-8sb>PZJ=1<97pm)$Qxe%yx9~*z2{6FLIodwQh8Gyfa~i5 zD-qw1fj5v=zt|GMD9^n*gNXD9pS);pg15g4#iHfCciN_wMD^S$yrqMhk9)lnvma+; zyl4b;5(OQX04W-Srx!R1BBqB~kG76}49c@c2@%6{n)9||c0@uncu`ZYs^q!}WA}z& zBd|i~f9Ko(@zVKUx%A&>R302l6D|B5b*6J;-m9qOen9FPy_!dE_Dv?~APsPyz0PzC zP$ubVxCKvQdeY@q*bqlhaVn`|#zW`MEBRJcxSX!j%MDYkGZzzg1dCA_o^XEIured+ zfMLCl&yzS@_l+9`meNTk#{OVJh31cdZS~w*p5<7?0)>UW3Xylf^@*Nd~43Jr0+a3V0!fO;YqgHN-gub7_BOuWztitp1_w zW@;(#wIN@#ePJ9bJm z+084jt{Xk8wu-Z02lx+jiTCe8fGIf*sQ?%(mY90mUI!4W40d3;2Q7Av*h5dpT1r(5 zh2;FE;cXxk-r7g-Z?@`*tEMb~Tk|9Xo_~;F1L7Qfz5+VtISH|qDr(&R@u&t>4x1?S z0utV(s&A;@JX2s8jDN?re&RN#I2cNc^%XX;iW zh|p4J_wIq$ez!}#Y{}skba$I0146D*7qC_X8!FOmATGw<2*n73waiV?!MO8QjdYba zrF^aqX6`Y%FQP|DB)fX@Z2e3$|z)uOe4+MVtD&DfA#6+5EOv@1*k^Y|7wh zwTv>zAQUBDKYGG$b{sl921D;s?Wx8{ol|}2)N_q#hF``-!5|74M90M63-d=?@QckZ zt=(^G<$$sZz^7a0%V=<*MpKp2AdW%&en?806mx#G#WZ{*@%I#5@1jh{y7y40tqF_8mqBmK1- z#Siurr8k-3pacdyW0JYZo)|kKqk=JLXzyI@*srD0@Fdbf(Fz{9F`sHZoSSWLUgth- zG5PmOo+yKPFWy=g;@UAkWI*AKYBd^ym!;5{(@;qUzc z5GnpvpMaa4QDx@nu$DBR_w`m5Y8^3$tBC#u>Zxj2XJyB9|!cyyBy&sg6Unaf!|{-L~yptO=NP5Nw^` zpv)}*%bnxxN&>{!QZ#ww*wr5S%a(&u_dAz$z$N&iRi&Ye<^IF@`46T_S5P z!?S(M6u+IJ-dxydbQqfkn+6}O8;~yKp^^m|H9}f$42YiAL=({;@F_?_1@@Yhm7M7xkKnB~vx&~sqO|rh4MRI0dP?ilTvo;`kQ^|rO zsenpJHQE7Hq+fWZpODlXGuIKC3}edP%e)F z=h#!yd3y10SGMjJ-n!dJJ_MvBIe~H5PAeV!#*~?d;7(%AiuX18_Zs1|(>ko&yM?)D zzLT-Pa#>n*@H$D)>L}R$@#80;KM|%m1hbogL337_f9=g{Q^8$jaI;ryzcyTyvR=@l zWu?_Vmo^Lv-Y8kvwSZ71n~xUGmv&}C(jhWnM=q`~PbSHQ(Ur1I$`B*^uuC^E5xmzm zmQm7|egns7RK6Cy4o^;kZ08-p!(6({A;0D9e^%-XII7=z0L6aMJM5iU;RJuPm9Uin z9!1a=a7oCqx;ghjOSIZe+3Of^Hl?pUnGHK;rHY_cjv}W%&_7;V|DLBM`w8d-9)i0u zIelF_wNONl-K6?b&3-+Lqt*`K2K{Btp`sW)_4&cHy8)8IuD;&fA8XI;^sk5A)P#u6 zxNd_U2PgYp8Qi};%xB@m&B%qwL+6>I%Y6kGfx|*BGxvY9KrWNV_d--wJh&r|i^OG} z!uod`1nI1sXGL49y~TZdmHLa)8W7qH&#hlt^7F{dFYzg#`;=Hi{2>m zx3Mts=b(=onT#o;Yt}Xz&QLkvnRehxW!rI2!569XzTWt!zi~bnu+6mKE!uO{*ww)0 zmzJ#6L8}FuT_xaIrbR-~sE9>XA-SQ=s^$RRaiVEX(c(;hN+}pZ^cOE?C%%`&B!_la zy7%D8b@V8I?z1ZnY}KmVv&L3hWBz)#=Z)9Po)!VKP1k;=qh4Mw$yE0W6U2#OYOFdd z!leUsfR84J95)^%(uF=?(%nC!VYXFt^Uu-JI1)w}<1ly36x9=iOsg9eh+F_Nq68i? zUNb)}|9nJ$LCkC(xF)Zia{EUA-Q{W)M{O``DY{Yd3h>c_v5ughS(u|=ssSn|A9&>+ z_2qL#VhVa&?p!H){;{%p#A-_z(CPJq`0#12!E1QaaDVi8o^a}TOmU>9z)oWEPfb@~ zHAeWdG-rkP3V^3x-l_1La0e8weKqF2Lcp^wM>{Y7^G*NW(U||;nVNj%hV4I%9Rrv~ UH|(m|0Qh5e;{5T-qporP1Aja51ONa4 diff --git a/apps/pocket-remote/media/menu-root.png b/apps/pocket-remote/media/menu-root.png index a547c405de8cd2897bc92f6ae8a08cf776474fda..be4b2922beffa36edae680b636341a137fbf0f5c 100644 GIT binary patch literal 12348 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

-NB5(AW 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 diff --git a/apps/pocket-remote/media/menu-toggle.png b/apps/pocket-remote/media/menu-toggle.png index 0fa2575373bad6d39df99f47f9261723c8515582..0bd6bbf71140409ce3674d2df40b93ee0136997d 100644 GIT binary patch delta 10551 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 JxJwR^{|D6#UlafU delta 10193 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 literal 12789 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%0Dr>?L*VErU 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 literal 12565 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 MENU_DOT_EMOJI[p.row.icon]; - return ( - } - > - p.row.icon || (p.row.kind === "app" ? GLYPH.apps : GLYPH.dot)} - tone={() => (p.row.icon || p.row.kind === "app" ? "fg" : "dim")} - size="lg" - /> - - ); -} - function Row(p: { store: RemoteStore; row: SheetRow; i: number }) { - const hot = () => p.store.sheet()?.hot === p.i; + const dot = () => MENU_DOT_EMOJI[p.row.icon]; const trailing = (): { glyph: string; tone: Tone } | null => { if (p.row.checked) return { glyph: GLYPH.check, tone: "accent" }; if (p.row.kind === "menu" || (p.row.kind === "provider" && p.row.id === APPS_ROUTE)) { @@ -69,25 +58,36 @@ function Row(p: { store: RemoteStore; row: SheetRow; i: number }) { if (p.row.kind === "provider" || p.row.kind === "link") return { glyph: GLYPH.launch, tone: "dim" }; return null; }; + const metrics = rowMetrics(SHEET_LIST.w, SHEET_ROW_H, true); return ( - - - - - - - - {p.row.label} - - - - {(t) => ( - - t().glyph} tone={() => t().tone} size="base" /> - - )} + <> + (dot() ? "" : p.row.icon || (p.row.kind === "app" ? GLYPH.apps : GLYPH.dot))} + glyphTone={() => (p.row.icon || p.row.kind === "app" ? "fg" : "dim")} + label={() => p.row.label} + trailing={trailing} + hot={() => p.store.sheet()?.hot === p.i} + /> + + + + - + ); } diff --git a/apps/pocket-remote/names.ts b/apps/pocket-remote/names.ts new file mode 100644 index 000000000..e7cbcdaa5 --- /dev/null +++ b/apps/pocket-remote/names.ts @@ -0,0 +1,80 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/names.ts — what to call a window. +// +// A window's class is a program id, not a name: four terminals all read +// "foot", which told the eye nothing. What distinguishes windows to a person +// is their TITLE — the shell's directory, the file being edited, the page +// being read — so a tile leads with the title and names the program under +// it, and the program's name is prettified out of its class. + +/** Classes whose own spelling is not the name a person uses. */ +const KNOWN: Record = { + foot: "Foot", + footclient: "Foot", + ghostty: "Ghostty", + alacritty: "Alacritty", + kitty: "Kitty", + nvim: "Neovim", + neovide: "Neovide", + chromium: "Chromium", + "google-chrome": "Chrome", + "brave-browser": "Brave", + firefox: "Firefox", + zen: "Zen", + "microsoft-edge": "Edge", + code: "VS Code", + cursor: "Cursor", + zeditor: "Zed", + sublime_text: "Sublime Text", + nautilus: "Files", + thunar: "Files", + mpv: "mpv", + vlc: "VLC", + spotify: "Spotify", + signal: "Signal", + slack: "Slack", + discord: "Discord", + telegramdesktop: "Telegram", + "1password": "1Password", + localsend: "LocalSend", + steam: "Steam", + obsidian: "Obsidian", + "org.gnome.nautilus": "Files", + "com.mitchellh.ghostty": "Ghostty", +}; + +/** + * The program's name from a Wayland class: a known spelling, else the last + * component of a reverse-DNS id, capitalised, with separators turned into + * spaces. `org.gnome.Nautilus` becomes Files, `dev.zed.Zed` becomes Zed, + * `qutebrowser` becomes Qutebrowser. + */ +export function appName(windowClass: string): string { + const raw = windowClass.trim(); + if (!raw) return "window"; + const lower = raw.toLowerCase(); + if (KNOWN[lower]) return KNOWN[lower]!; + const tail = lower.includes(".") ? lower.slice(lower.lastIndexOf(".") + 1) : lower; + if (KNOWN[tail]) return KNOWN[tail]!; + // Keep the source's own capitalisation for the tail when it has some + // (`Nautilus`, `Zed`), otherwise capitalise the first letter. + const sourceTail = raw.includes(".") ? raw.slice(raw.lastIndexOf(".") + 1) : raw; + const spaced = sourceTail.replace(/[-_]+/g, " ").trim(); + if (!spaced) return raw; + return /[A-Z]/.test(spaced) ? spaced : spaced[0]!.toUpperCase() + spaced.slice(1); +} + +/** + * What a tile leads with, and what it says underneath: the title first when + * there is one worth reading, the program's name otherwise. The second line + * is always the program, so the same window reads the same way whichever + * line the eye lands on. + */ +export function windowLabels(windowClass: string, title: string): { lead: string; under: string } { + const name = appName(windowClass); + const clean = title.trim(); + if (!clean || clean.toLowerCase() === windowClass.trim().toLowerCase() || clean.toLowerCase() === name.toLowerCase()) { + return { lead: name, under: "" }; + } + return { lead: clean, under: name }; +} diff --git a/apps/pocket-remote/popup.tsx b/apps/pocket-remote/popup.tsx index c7aebb13c..7a8c3f27e 100644 --- a/apps/pocket-remote/popup.tsx +++ b/apps/pocket-remote/popup.tsx @@ -1,17 +1,16 @@ // SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/popup.tsx — the classic popup: one container of rows -// with hairlines between them, growing out of the point it answers. No -// caret: at this size a triangle cannot meet a rounded, bordered body -// without a visible seam, and the popup already reads as belonging to the -// finger that opened it. +// apps/pocket-remote/popup.tsx — the classic popup: one card of rows, +// growing out of the point it answers. Rows come from ui.tsx, so a popup's +// paddings are the sheet's paddings; no caret, because a triangle this small +// cannot meet a rounded, bordered card without a visible seam. import { createEffect, Index } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; +import { View } from "@pocketjs/framework/components"; import { jump } from "@pocketjs/framework/animation"; import type { NodeMirror } from "@pocketjs/framework/components"; -import { Icon, type Tone } from "./icons.tsx"; +import type { Tone } from "./icons.tsx"; import { type Popup, POPUP_PAD, POPUP_ROW_H } from "./layout.ts"; -import { themed } from "./theme.ts"; +import { Card, Row } from "./ui.tsx"; export interface PopupRow { glyph: string; @@ -19,7 +18,12 @@ export interface PopupRow { tone?: Tone; } -export function PopupBox(p: { place: () => Popup; rows: () => readonly PopupRow[]; hot: () => number | null; progress: () => number }) { +export function PopupBox(p: { + place: () => Popup; + rows: () => readonly PopupRow[]; + hot: () => number | null; + progress: () => number; +}) { let root: NodeMirror | null = null; let body: NodeMirror | null = null; createEffect(() => { @@ -46,37 +50,28 @@ export function PopupBox(p: { place: () => Popup; rows: () => readonly PopupRow[ root = node; }} > - { body = node; - themed("surfaceDark")(node); - themed("borderMuted")(node); }} > {(row, i) => ( - - - - - - - - - {row().label} - - - + row().glyph} + glyphTone={() => row().tone ?? "fg"} + label={() => row().label} + labelTone={row().tone === "danger" ? "danger" : "text"} + hot={() => p.hot() === i} + hairline={i > 0} + /> )} - + ); } diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts index f13db9368..18c106e72 100644 --- a/apps/pocket-remote/protocol.ts +++ b/apps/pocket-remote/protocol.ts @@ -12,8 +12,9 @@ import type { ActionId } from "./actions.ts"; export const REMOTE_APP = "pocket-remote"; export const REMOTE_PROTO = 2; -/** Title bytes kept per window in a snapshot. */ -export const TITLE_MAX = 28; +/** Title code points kept per window in a snapshot. A window's title is + * what tells two terminals apart, so it earns a few more than the class. */ +export const TITLE_MAX = 34; /** Windows carried per snapshot; Hyprland's `clients` beyond this are dropped * by focus history (oldest first) so the line stays under the poll cap. */ export const WINDOWS_MAX = 24; @@ -202,9 +203,14 @@ export type WindowOp = | { op: "move"; a: string; n: number } /** Put a floating window at monitor-relative logical px (a drag). */ | { op: "place"; a: string; x: number; y: number } + /** Grow or shrink by monitor px (a corner drag). Relative, like the + * keyboard's own resize bindings. */ + | { op: "resize"; a: string; dx: number; dy: number } /** Toggle floating / fullscreen on one window. */ | { op: "float"; a: string } - | { op: "full"; a: string }; + | { op: "full"; a: string } + /** Open another window of the same program. */ + | { op: "same"; a: string }; export type ClientWindow = { t: "win" } & WindowOp; diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx index 076ce1230..4beab59af 100644 --- a/apps/pocket-remote/stage.tsx +++ b/apps/pocket-remote/stage.tsx @@ -14,7 +14,18 @@ import { type ActionId, actionById, LAUNCHERS } from "./actions.ts"; import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; -import { LAUNCH_BAR, launchCellAt, launchCellRect, popupRowAt, STAGE, STRIP, SWIPE_PX, tabAt, within } from "./layout.ts"; +import { + LAUNCH_BAR, + launchCellAt, + launchCellRect, + popupRowAt, + STAGE, + STRIP, + SWIPE_PX, + tabAt, + within, +} from "./layout.ts"; +import { ICON_BOX, SPACE } from "./design.ts"; import { PopupBox, type PopupRow } from "./popup.tsx"; import type { RemoteStore, TileSlot } from "./store.ts"; import { themed } from "./theme.ts"; @@ -60,6 +71,15 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { + {/* the resize corner: three steps, the way a window's own grip reads */} + + + + + + + + {(id, i) => { const r = launchCellRect(i, LAUNCHERS.length); + // The icon-plus-label group, centred: a 24 px glyph, a gap, and + // room for the longest of the three labels. + const groupW = ICON_BOX + SPACE.lg + 62; + const group = { x: Math.round((r.w - groupW) / 2), w: groupW }; return ( - - - - - - - {actionById(id())?.label ?? id()} - + + {/* the icon and label sit as one group, centred in the cell */} + + + + + + + {actionById(id())?.label ?? id()} + + @@ -118,6 +145,7 @@ export function LaunchBar(p: { store: RemoteStore }) { const popupRows = (floating: boolean): PopupRow[] => [ { glyph: floating ? GLYPH.tile : GLYPH.float, label: floating ? "Tile" : "Float" }, { glyph: GLYPH.fullscreen, label: "Full screen" }, + { glyph: GLYPH.apps, label: "Open another" }, { glyph: GLYPH.close, label: "Close", tone: "danger" }, ]; @@ -174,12 +202,21 @@ export function TilePopup(p: { store: RemoteStore }) { // gestures // --------------------------------------------------------------------------- -type Target = { kind: "tile"; a: string } | { kind: "launch"; i: number } | { kind: "stage" } | { kind: "none" }; +type Target = + | { kind: "tile"; a: string } + | { kind: "grip"; a: string } + | { kind: "launch"; i: number } + | { kind: "stage" } + | { kind: "none" }; function stageTarget(store: RemoteStore, x: number, y: number): Target { const cell = launchCellAt(x, y, LAUNCHERS.length); if (cell !== null) return { kind: "launch", i: cell }; if (!within(x, y, STAGE)) return { kind: "none" }; + // The corner first: it overlaps the tile it belongs to, and on the stage + // it may also overlap the neighbour below and to the right. + const grip = store.gripAt(x, y); + if (grip) return { kind: "grip", a: grip }; const a = store.windowAt(x, y); if (a) return { kind: "tile", a }; return { kind: "stage" }; @@ -189,40 +226,56 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { let down: Target = { kind: "none" }; let swiping = false; let placing = false; - /** The contact that opened a tile's popup is still down: it now picks a - * row. One gesture — hold, slide, release — with lifting early leaving - * the popup up for a tap. */ + /** + * The contact that opened a tile's popup is still down: it now picks a + * row. One gesture — hold, slide, release — and lifting WITHOUT sliding + * leaves the popup up for a tap instead of running whatever the resting + * finger happens to cover, which on a 260 px stage is often a row (and + * the last row closes the window). + */ let picking = false; + let pickFrom = { x: 0, y: 0 }; + const PICK_SLOP = 12; + const slid = (c: { x: number; y: number }): boolean => + Math.abs(c.x - pickFrom.x) > PICK_SLOP || Math.abs(c.y - pickFrom.y) > PICK_SLOP; + /** A corner drag: the window is being resized. */ + let sizing = false; const reset = () => { store.pressRelease(); store.setDrag(null); swiping = false; placing = false; picking = false; + sizing = false; }; return { onDown: (c) => { down = stageTarget(store, c.x, c.y); picking = false; - store.pressDown(down.kind === "tile" ? `tile:${down.a}` : down.kind === "launch" ? `launch:${down.i}` : null); + sizing = false; + store.pressDown( + down.kind === "tile" || down.kind === "grip" ? `tile:${down.a}` : down.kind === "launch" ? `launch:${down.i}` : null, + ); }, onMove: (c) => { if (!picking) return; const popup = store.popup(); - if (popup) store.popupHover(popupRowAt(popup.place, c.x, c.y)); + if (popup) store.popupHover(slid(c) ? popupRowAt(popup.place, c.x, c.y) : null); }, onTap: () => { const t = down; store.pressRelease(); - if (t.kind === "tile") store.focusWindow(t.a); + if (t.kind === "tile" || t.kind === "grip") store.focusWindow(t.a); else if (t.kind === "launch") store.act(LAUNCHERS[t.i] as ActionId); down = { kind: "none" }; }, onLongPress: (c) => { + if (down.kind === "grip") return; // the corner is a drag, not a menu if (down.kind === "tile") { store.pressDown(null); store.openPopup(down.a, c.x, c.y); picking = true; + pickFrom = { x: c.x, y: c.y }; down = { kind: "none" }; } }, @@ -230,7 +283,11 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { if (picking) return; // the slide belongs to the popup, not the stage const t = down; store.pressDown(null); - if (t.kind === "tile" && store.isFloating(t.a)) { + if (t.kind === "grip") { + sizing = true; + store.resizeBegin(t.a); + store.resizeBy(c.fdx, c.fdy); + } else if (t.kind === "tile" && store.isFloating(t.a)) { placing = true; store.placeBegin(t.a, c.startX, c.startY); store.placeTo(c.x, c.y); @@ -243,7 +300,11 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { onPanMove: (c) => { if (picking) { const popup = store.popup(); - if (popup) store.popupHover(popupRowAt(popup.place, c.x, c.y)); + if (popup) store.popupHover(slid(c) ? popupRowAt(popup.place, c.x, c.y) : null); + return; + } + if (sizing) { + store.resizeBy(c.fdx, c.fdy); return; } if (placing) { @@ -265,15 +326,20 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { }, onUp: (c) => { if (picking) { - // Released on a row: run it. Released anywhere else: the popup stays + // Slid onto a row: run it. Lifted where it started: the popup stays // up, so the same choice can be made with a tap. const popup = store.popup(); - const row = popup ? popupRowAt(popup.place, c.x, c.y) : null; + const row = popup && slid(c) ? popupRowAt(popup.place, c.x, c.y) : null; if (row !== null) store.popupRun(row); else store.popupHover(null); reset(); return; } + if (sizing) { + store.resizeBy(0, 0, true); + reset(); + return; + } if (placing) { store.placeTo(c.x, c.y, true); reset(); @@ -293,6 +359,7 @@ export function stageHandlers(store: RemoteStore): GestureHandlers { }, onCancel: () => { if (placing) store.placeCancel(); + if (sizing) store.resizeCancel(); if (picking) store.popupHover(null); reset(); }, diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts index 3b11acb46..0bf632b7b 100644 --- a/apps/pocket-remote/store.ts +++ b/apps/pocket-remote/store.ts @@ -19,6 +19,7 @@ import type { NodeMirror } from "@pocketjs/framework/components"; import { createScroller, type Scroller } from "@pocketjs/framework/kinetics"; import { onFrame } from "@pocketjs/framework/lifecycle"; import { type ActionId, actionById } from "./actions.ts"; +import { windowLabels } from "./names.ts"; import type { KbLayer, KeyVariant } from "./keyboard-layout.ts"; import { approach, @@ -43,6 +44,8 @@ import { stripTabs, swapDirection, type Tab, + TILE_GRIP_MIN, + tileGripHit, TILE_SLOTS, TILE_TWO_LINES_H, tileRect, @@ -131,23 +134,33 @@ export interface TileSlot { node: NodeMirror | null; /** True while the slot is showing a window (free slots paint nothing). */ live: Accessor; + /** What the tile leads with: the window's title, or its program's name. */ label: Accessor; + /** The program's name, under the lead line (empty when the lead IS it). */ title: Accessor; /** Tall enough for class + title. */ twoLines: Accessor; focused: Accessor; floating: Accessor; + /** Big enough to carry the resize corner. */ + grip: Accessor; setLive(live: boolean): void; setLabel(label: string): void; setTitle(title: string): void; setTwoLines(two: boolean): void; setFocused(focused: boolean): void; setFloating(floating: boolean): void; + setGrip(grip: boolean): void; /** Motion targets, owned by the frame loop. */ target: Rect; targetAlpha: number; cur: TileView; dying: boolean; + /** Paint order among the tiles, written straight to the node: floating + * windows sit above tiled ones and the recently focused above their + * peers, the way the compositor stacks them. The pool assigns slots by + * first free index, so document order says nothing about depth. */ + z: number; } /** A tiled window being dragged onto another (swap) or onto a tab (move). */ @@ -396,6 +409,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const [twoLines, setTwoLines] = createSignal(false); const [focused, setFocused] = createSignal(false); const [floating, setFloating] = createSignal(false); + const [grip, setGrip] = createSignal(false); slots.push({ index: i, a: null, @@ -406,16 +420,19 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { twoLines, focused, floating, + grip, setLive, setLabel, setTitle, setTwoLines, setFocused, setFloating, + setGrip, target: { x: 0, y: 0, w: 0, h: 0 }, targetAlpha: 0, cur: { x: 0, y: 0, w: 0, h: 0, alpha: 0 }, dying: false, + z: 0, }); } const slotOf = (a: string): TileSlot | undefined => slots.find((s) => s.a === a); @@ -429,6 +446,14 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { jump(node, "height", Math.max(1, Math.round(c.h))); jump(node, "opacity", c.alpha); }; + /** zIndex is paint-only and not animatable, so it goes through the raw op + * rather than jump(). PROP.zIndex from contracts/spec/spec.ts, repeated + * here so the guest does not pull the spec module in; the unit test pins + * it to the contract. */ + const PROP_Z_INDEX = 31; + const paintZ = (slot: TileSlot) => { + if (slot.node) getOps().setProp(slot.node.id, PROP_Z_INDEX, slot.z); + }; /** A floating tile under the finger: its own geometry is the truth until * the daemon echoes the placement, so a snapshot must not yank it back. */ @@ -441,7 +466,8 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const shown = stageWindows(s); const seen = new Set(); batch(() => { - for (const win of shown) { + for (let index = 0; index < shown.length; index += 1) { + const win = shown[index]!; seen.add(win.a); const rect = tileRect(win, f); let slot = slotOf(win.a); @@ -456,11 +482,18 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { slot.dying = false; if (!(placing && placing.a === win.a)) slot.target = rect; slot.targetAlpha = 1; - slot.setLabel(win.c); - slot.setTitle(win.ti); - slot.setTwoLines(rect.h >= TILE_TWO_LINES_H && rect.w >= 56); + const labels = windowLabels(win.c, win.ti); + slot.setLabel(labels.lead); + slot.setTitle(labels.under); + slot.setTwoLines(labels.under !== "" && rect.h >= TILE_TWO_LINES_H && rect.w >= 56); slot.setFocused(win.a === s.focus); slot.setFloating(win.f === 1); + slot.setGrip(rect.w >= TILE_GRIP_MIN && rect.h >= TILE_GRIP_MIN); + // stageWindows is tiled-then-floating, each group most recently + // focused first: the compositor's own stacking, so later in the + // group means lower, and the focused window tops its group. + slot.z = (win.f === 1 ? 100 : 10) + (shown.length - index); + paintZ(slot); } for (const slot of slots) { if (slot.a !== null && !seen.has(slot.a)) { @@ -491,6 +524,14 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { return out; }; const isFloating = (a: string): boolean => state()?.win.find((w) => w.a === a)?.f === 1; + /** The window whose resize corner is under the point, topmost first. */ + const gripAt = (x: number, y: number): string | null => { + const tiles = tilesForHit(); + for (let i = tiles.length - 1; i >= 0; i -= 1) { + if (tileGripHit(x, y, tiles[i]!.rect)) return tiles[i]!.a; + } + return null; + }; // ---- senders ------------------------------------------------------------------- const send = (line: ClientLine) => { @@ -556,6 +597,44 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { say("full screen"); }; + /** + * A corner drag: grow or shrink the window. Deltas are stage px turned + * into monitor px and sent relative, so a tiled window moves its split + * and a floating one changes size — the same dispatcher the keyboard's + * own resize bindings use. The tile itself is not moved locally: the + * layout is the compositor's to compute, and its snapshot follows in a + * frame or two. + */ + let sizing: { a: string; dx: number; dy: number; sentAt: number } | null = null; + const resizeBegin = (a: string) => { + sizing = { a, dx: 0, dy: 0, sentAt: frameCount }; + focusWindow(a); + }; + const resizeBy = (stageDx: number, stageDy: number, final = false) => { + const f = fit(); + if (!sizing || !f) return; + sizing.dx += stageDx / f.s; + sizing.dy += stageDy / f.s; + if (!final && frameCount < sizing.sentAt + PLACE_SEND_EVERY) return; + const dx = Math.round(sizing.dx); + const dy = Math.round(sizing.dy); + if (dx !== 0 || dy !== 0) { + send({ t: "win", op: "resize", a: sizing.a, dx, dy }); + sizing.dx -= dx; + sizing.dy -= dy; + } + sizing.sentAt = frameCount; + if (final) sizing = null; + }; + const resizeCancel = () => { + sizing = null; + }; + /** Another window of the same program (the daemon resolves the class). */ + const openSame = (a: string) => { + send({ t: "win", op: "same", a }); + say("opening another"); + }; + /** Begin dragging a floating tile: remember where inside it the finger * landed so the tile does not jump to the fingertip. */ const placeBegin = (a: string, x: number, y: number) => { @@ -664,14 +743,15 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { if (p && p.hot !== hot) setPopup({ ...p, hot }); }; const closePopup = () => setPopup(null); - /** Rows: float / tile, full screen, close. */ + /** Rows: float / tile, full screen, open another, close. */ const popupRun = (row: number) => { const p = popup(); if (!p) return; closePopup(); if (row === 0) floatWindow(p.a); else if (row === 1) fullWindow(p.a); - else if (row === 2) closeWindow(p.a); + else if (row === 2) openSame(p.a); + else if (row === 3) closeWindow(p.a); }; const openCc = (ccMode: Cc["mode"], row: 0 | 1 | null = null, refX = 0) => { @@ -1004,6 +1084,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { const bindSlot = (slot: TileSlot) => (node: NodeMirror) => { slot.node = node; paintSlot(slot); + paintZ(slot); }; return { @@ -1032,6 +1113,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { slots, tilesForHit, windowAt: (x: number, y: number) => windowAt(x, y, tilesForHit()), + gripAt, isFloating, mode, setMode, @@ -1098,6 +1180,10 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { placeBegin, placeTo, placeCancel, + resizeBegin, + resizeBy, + resizeCancel, + openSame, setLevel, toggleMute, mediaOp, diff --git a/apps/pocket-remote/ui.tsx b/apps/pocket-remote/ui.tsx new file mode 100644 index 000000000..1cf18f02e --- /dev/null +++ b/apps/pocket-remote/ui.tsx @@ -0,0 +1,136 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +// apps/pocket-remote/ui.tsx — the drawn half of the design system: the card, +// the row, the hairline and the press tint every surface is assembled from. +// Geometry comes from design.ts; the class literals that have to spell a +// radius or a colour out live here, next to the primitive that owns them, +// because a baked class string cannot take a token as a value. +// +// Every list on the remote — a held tile's popup, the menu sheet, the +// control centre — uses Row, so their paddings are identical by +// construction rather than by hand. + +import { Show } from "solid-js"; +import { Text, View } from "@pocketjs/framework/components"; +import type { JSX } from "solid-js"; +import { type Box, rowMetrics } from "./design.ts"; +import { Icon, type Tone } from "./icons.tsx"; +import { themed } from "./theme.ts"; + +/** A raised surface. `popup` is the small radius, `card` the large one. */ +export function Card(p: { at: Box; variant?: "card" | "popup"; children?: JSX.Element; ref?: (node: import("@pocketjs/framework/components").NodeMirror) => void }) { + const bind = (node: import("@pocketjs/framework/components").NodeMirror) => { + themed("surfaceDark")(node); + themed("borderMuted")(node); + p.ref?.(node); + }; + return ( + + {p.children} + + ); +} + +/** The tint a target wears while a finger is on it. */ +export function PressTint(p: { at: Box; on: boolean; radius?: "row" | "popup" | "card" }) { + return ( + + + + ); +} + +export interface RowProps { + /** The row's own top, in its container. */ + y: number; + width: number; + height: number; + /** Leading glyph; "" leaves the box empty. */ + glyph: string | (() => string); + glyphTone?: Tone | (() => Tone); + label: string | (() => string); + labelTone?: "text" | "danger" | "dim"; + /** Trailing glyph (a chevron, a tick). */ + trailing?: () => { glyph: string; tone: Tone } | null; + /** Highlighted: a finger is on it, or it is the hot item of a slide. */ + hot?: () => boolean; + /** Draw the hairline above this row (every row but the first). */ + hairline?: boolean; +} + +/** + * One list row: leading glyph, label on the middle line, optional trailing + * glyph, a highlight and a hairline — all placed by rowMetrics, so a popup + * row and a sheet row line up with each other. + */ +export function Row(p: RowProps) { + const m = () => rowMetrics(p.width, p.height, p.trailing !== undefined); + const label = () => (typeof p.label === "function" ? p.label() : p.label); + return ( + + + + + + + + + + + + + {label()} + + + + {(t) => ( + + t().glyph} tone={() => t().tone} size="base" /> + + )} + + + ); +} diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index 7609bc86f..aebacfd4b 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -14,6 +14,8 @@ import { launchCellRect, MODE, MODE_HALF_W, + POPUP_PAD, + POPUP_ROW_H, SHEET_LIST, sheetRowRect, STAGE, @@ -37,7 +39,7 @@ const SNAPSHOT: HostState = { layout: "dwindle", win: [ { a: "0x55f90cb39300", c: "foot", ti: "evan@x1nano-omarchy:~", ws: 1, x: 12, y: 38, w: 701, h: 850 }, - { a: "0x55f90e41dd40", c: "chromium", ti: "ChatGPT - Chromium", ws: 1, x: 725, y: 38, w: 703, h: 850 }, + { a: "0x55f90e41dd40", c: "chromium", ti: "ChatGPT", ws: 1, x: 725, y: 38, w: 703, h: 850 }, ], }; @@ -143,10 +145,16 @@ describe("pocket-remote in the sim", () => { expect(store.vol()).toBeCloseTo(0.4); expect(store.wifi().ssid).toBe("Petite Auberge"); expect(store.media().st).toBe("paused"); - expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.label())).toEqual(["foot", "chromium"]); + // A tile leads with the window's title and names its program under it: + // four terminals used to read "foot" four times. + expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.label())).toEqual([ + "evan@x1nano-omarchy:~", + "ChatGPT", + ]); + expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.title())).toEqual(["Foot", "Chromium"]); const shown = texts(world.getTree()); - expect(shown).toContain("foot"); - expect(shown).toContain("chromium"); + expect(shown).toContain("evan@x1nano-omarchy:~"); + expect(shown).toContain("Chromium"); expect(shown).toContain("dwindle"); // Tabs are the fixed set Omarchy binds, not the two Hyprland reports. expect(store.tabs().map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); @@ -260,11 +268,11 @@ describe("pocket-remote in the sim", () => { for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); const popup = store.popup(); expect(popup?.a).toBe("0x55f90e41dd40"); - expect(popup!.place.h).toBe(TILE_POPUP_ROWS * 36 + 8); + expect(popup!.place.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 2 * POPUP_PAD); // No tree probe while a finger is down: the probe advances the world by // one touchless frame, which would end the hold being tested. // Slide onto the second row and release: one gesture, no second tap. - const row = { x: popup!.place.x + 40, y: popup!.place.y + 4 + 36 + 18 }; + const row = { x: popup!.place.x + 40, y: popup!.place.y + POPUP_PAD + POPUP_ROW_H + POPUP_ROW_H / 2 }; for (let i = 1; i <= 6; i += 1) { world.frame(0, undefined, [pack(Math.round(from.x + ((row.x - from.x) * i) / 6), Math.round(from.y + ((row.y - from.y) * i) / 6))]); } @@ -274,14 +282,15 @@ describe("pocket-remote in the sim", () => { expect(store.popup()).toBeNull(); expect(sent).toContainEqual({ t: "win", op: "full", a: "0x55f90e41dd40" }); - // Lifting without sliding leaves the popup up, and a later tap acts. + // Lifting without sliding leaves the popup up (whatever it covers), and + // a later tap acts. for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); world.frame(0, undefined, []); for (let i = 0; i < 10; i += 1) world.frame(0); expect(store.popup()).not.toBeNull(); expect(texts(world.getTree()).join(" ")).toContain("Full screen"); const place = store.popup()!.place; - tap(world, place.x + 40, place.y + 4 + 18); + tap(world, place.x + 40, place.y + POPUP_PAD + POPUP_ROW_H / 2); expect(store.popup()).toBeNull(); expect(sent).toContainEqual({ t: "win", op: "float", a: "0x55f90e41dd40" }); }); @@ -349,24 +358,66 @@ describe("pocket-remote in the sim", () => { expect(sent).toContainEqual({ t: "launch", app: "foot" }); }); - test("the key bubble follows the key being pressed", async () => { - const { world, store } = await connected(); + test("a tile's corner resizes the window, and its popup opens another", async () => { + const { world, store, sent } = await connected(); + const tile = store.slots.find((slot) => slot.a === "0x55f90e41dd40")!; + const grip = { x: Math.round(tile.cur.x + tile.cur.w - 6), y: Math.round(tile.cur.y + tile.cur.h - 6) }; + expect(store.gripAt(grip.x, grip.y)).toBe("0x55f90e41dd40"); + // Drag the corner left: the window is asked to shrink by monitor px. + world.frame(0, undefined, [pack(grip.x, grip.y)]); + for (let i = 1; i <= 8; i += 1) world.frame(0, undefined, [pack(grip.x - i * 6, grip.y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 6; i += 1) world.frame(0); + const resizes = sent.filter((line) => (line as { op?: string }).op === "resize") as { dx: number; dy: number }[]; + expect(resizes.length).toBeGreaterThan(0); + expect(resizes.reduce((sum, r) => sum + r.dx, 0)).toBeLessThan(-100); + // The focus follows the corner being grabbed, the way a resize does. + expect(sent).toContainEqual({ t: "win", op: "focus", a: "0x55f90e41dd40" }); + + // Its popup's third row opens another window of the same program. + const mid = { x: Math.round(tile.cur.x + tile.cur.w / 2), y: Math.round(tile.cur.y + tile.cur.h / 2) }; + for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(mid.x, mid.y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 10; i += 1) world.frame(0); + const place = store.popup()!.place; + expect(texts(world.getTree()).join(" ")).toContain("Open another"); + tap(world, place.x + 40, place.y + POPUP_PAD + POPUP_ROW_H * 2 + POPUP_ROW_H / 2); + expect(sent).toContainEqual({ t: "win", op: "same", a: "0x55f90e41dd40" }); + }); + + test("floating windows are stacked above the tiled ones", async () => { + const { store } = await connected(); + store.applyLine({ + t: "state", + mon: { w: 1440, h: 900, x: 0, y: 0 }, + ws: [{ id: 1, n: 3 }], + active: 1, + focus: "0xT1", + layout: "dwindle", + win: [ + { a: "0xT1", c: "foot", ti: "one", ws: 1, x: 0, y: 0, w: 720, h: 900 }, + { a: "0xF1", c: "mpv", ti: "float", ws: 1, x: 300, y: 300, w: 400, h: 300, f: 1 }, + { a: "0xT2", c: "foot", ti: "two", ws: 1, x: 720, y: 0, w: 720, h: 900 }, + ], + }); + const z = (a: string) => store.slots.find((slot) => slot.a === a)!.z; + expect(z("0xF1")).toBeGreaterThan(z("0xT1")); + expect(z("0xF1")).toBeGreaterThan(z("0xT2")); + // Within a group, the more recently focused sits higher. + expect(z("0xT1")).toBeGreaterThan(z("0xT2")); + }); + + test("the ball is on the stage only: the deck's bottom half is the trackpad", async () => { + const { world, store, sent } = await connected(); tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); expect(store.mode()).toBe("deck"); - const centres: number[] = []; - for (const label of ["h", "e"]) { - const key = keyboardKeys("lower").find((k) => k.def.label === label)!; - for (let i = 0; i < 5; i += 1) world.frame(0, undefined, [pack(key.x + key.w / 2, key.y + key.h / 2)]); - const bubble = brightCentre(world.render(), key.y - 40, key.y); - expect(bubble).not.toBeNull(); - expect(Math.abs(bubble! - (key.x + key.w / 2))).toBeLessThan(8); - centres.push(bubble!); - world.frame(0, undefined, []); - for (let i = 0; i < 14; i += 1) world.frame(0); - } - // It moved: one instance follows the pressed key rather than parking on - // the first one. - expect(Math.abs(centres[1]! - centres[0]!)).toBeGreaterThan(40); + // A touch where the ball would be moves the pointer instead. + const ball = store.ball(); + for (let i = 0; i < 6; i += 1) world.frame(0, undefined, [pack(ball.x + 22 + i * 5, ball.y + 22)]); + world.frame(0, undefined, []); + for (let i = 0; i < 4; i += 1) world.frame(0); + expect(store.sheet()).toBeNull(); + expect(sent.some((line) => (line as { t: string }).t === "ptr")).toBe(true); }); test("a hello that is still pending shows the approval screen", async () => { diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 6868ae0cf..8e56d7323 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -6,6 +6,7 @@ import { describe, expect, test } from "bun:test"; import { + PROP, SVC_POLL_BUF, WIRE_BEACON_MAGIC, WIRE_BEACON_PORT, @@ -17,9 +18,20 @@ import { WIRE_VERSION, } from "../contracts/spec/spec.ts"; import { ACTIONS, actionById, actionsOf, LAUNCHERS } from "../apps/pocket-remote/actions.ts"; +import { GUTTER, ICON_BOX, RADIUS, ROW_H, rowMetrics, SPACE } from "../apps/pocket-remote/design.ts"; +import { appName, windowLabels } from "../apps/pocket-remote/names.ts"; import { GLYPH } from "../apps/pocket-remote/glyphs.ts"; import * as wire from "../apps/pocket-remote/host/wire.ts"; -import { buildState, luaWindow, luaWorkspace, parseEvent, type HyprClient, type HyprMonitor, type HyprWorkspace } from "../apps/pocket-remote/host/hypr.ts"; +import { + buildState, + cleanTitle, + luaWindow, + luaWorkspace, + parseEvent, + type HyprClient, + type HyprMonitor, + type HyprWorkspace, +} from "../apps/pocket-remote/host/hypr.ts"; import { childrenOf, normalizeMenu, parentOf, parseMenuJsonc, stripJsonc } from "../apps/pocket-remote/host/menu-source.ts"; import { applicationDirectories, @@ -39,9 +51,9 @@ import { wtypeArgs, } from "../apps/pocket-remote/host/omarchy.ts"; import { - bubbleRect, chipAt, chipRects, + HALF_H, KEYBOARD, keyAt, keyboardKeys, @@ -74,12 +86,15 @@ import { MODE, placePopup, pointerGain, + POPUP_PAD, POPUP_ROW_H, + POPUP_W, popupRowAt, SCREEN_H, SCREEN_W, SHEET, SHEET_LIST, + SHEET_RADIUS, SHEET_ROW_H, sheetContentH, sheetMaxScroll, @@ -97,6 +112,9 @@ import { TAB_W, TAB_X0, tabAt, + TILE_GRIP, + tileGripHit, + tileGripRect, TILE_POPUP_ROWS, tileRect, trackDelta, @@ -340,9 +358,9 @@ describe("pocket-remote layout", () => { const below = placePopup(240, 60, TILE_POPUP_ROWS); expect(below.below).toBe(true); expect(below.y).toBeGreaterThan(60); - expect(below.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 8); + expect(below.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 2 * POPUP_PAD); // A hold-and-slide has to reach row zero without letting go. - expect(below.y + 4 + POPUP_ROW_H / 2 - 60).toBeLessThanOrEqual(32); + expect(below.y + POPUP_PAD + POPUP_ROW_H / 2 - 60).toBeLessThanOrEqual(32); const above = placePopup(240, 300, TILE_POPUP_ROWS); expect(above.below).toBe(false); expect(above.y + above.h).toBeLessThan(300); @@ -350,8 +368,8 @@ describe("pocket-remote layout", () => { expect(edge.x).toBeGreaterThanOrEqual(STAGE.x + 6); const far = placePopup(478, 60, TILE_POPUP_ROWS); expect(far.x + far.w).toBeLessThanOrEqual(SCREEN_W - 6); - expect(popupRowAt(below, below.x + 10, below.y + 4 + 10)).toBe(0); - expect(popupRowAt(below, below.x + 10, below.y + 4 + POPUP_ROW_H * 2 + 10)).toBe(2); + expect(popupRowAt(below, below.x + 10, below.y + POPUP_PAD + 10)).toBe(0); + expect(popupRowAt(below, below.x + 10, below.y + POPUP_PAD + POPUP_ROW_H * 3 + 10)).toBe(3); expect(popupRowAt(below, below.x - 1, below.y + 10)).toBeNull(); expect(popupRowAt(below, below.x + 10, below.y + below.h + 4)).toBeNull(); }); @@ -472,7 +490,7 @@ describe("pocket-remote hypr mirror", () => { test("reduces monitors, workspaces and clients to one snapshot", () => { const clients = [ client({}), - client({ address: "0x55f90e41dd40", class: "chromium", title: "ChatGPT - Chromium", at: [725, 38], size: [1423, 850], focusHistoryID: 1 }), + client({ address: "0x55f90e41dd40", class: "chromium", title: "ChatGPT — Chromium", at: [725, 38], size: [1423, 850], focusHistoryID: 1 }), client({ address: "0xdead", mapped: false }), client({ address: "0xbeef", workspace: { id: -98, name: "special:scratchpad" } }), ]; @@ -486,7 +504,7 @@ describe("pocket-remote hypr mirror", () => { expect(state.win[1]).toEqual({ a: "0x55f90e41dd40", c: "chromium", - ti: "ChatGPT - Chromium", + ti: "ChatGPT", ws: 1, x: 725, y: 38, @@ -725,6 +743,76 @@ describe("pocket-remote baked menu", () => { }); }); +describe("pocket-remote design system", () => { + test("every list row is laid out from the same tokens", () => { + const popup = rowMetrics(POPUP_W, ROW_H.popup, false); + const list = rowMetrics(SHEET_LIST.w, ROW_H.list, true); + // The leading gutter and the label offset are the same on both. + expect(popup.icon.x).toBe(GUTTER); + expect(list.icon.x).toBe(GUTTER); + expect(popup.label.x).toBe(list.label.x); + expect(popup.label.x).toBe(GUTTER + ICON_BOX + SPACE.lg); + // The icon box is centred on the row's own height. + expect(popup.icon.y * 2 + ICON_BOX).toBe(ROW_H.popup); + expect(list.icon.y * 2 + ICON_BOX).toBe(ROW_H.list); + // Highlights and hairlines are inset symmetrically. + for (const m of [popup, list]) { + expect(m.highlight.x * 2 + m.highlight.w).toBe(m === popup ? POPUP_W : SHEET_LIST.w); + expect(m.hairline.x * 2 + m.hairline.w).toBe(m === popup ? POPUP_W : SHEET_LIST.w); + expect(m.label.x + m.label.w).toBeLessThanOrEqual((m === popup ? POPUP_W : SHEET_LIST.w) - GUTTER); + } + // Only the row with a trailing glyph reserves room for one. + expect(popup.trailing).toBeNull(); + expect(list.trailing).not.toBeNull(); + expect(list.trailing!.x + ICON_BOX + GUTTER).toBe(SHEET_LIST.w); + expect(list.label.x + list.label.w).toBeLessThanOrEqual(list.trailing!.x); + // The tokens the popup and the sheet spell out agree with the geometry. + expect(POPUP_ROW_H).toBe(ROW_H.popup); + expect(SHEET_ROW_H).toBe(ROW_H.list); + expect(SHEET_RADIUS).toBe(RADIUS.card); + }); + + test("a window is named by its title, and its program by a readable name", () => { + expect(appName("foot")).toBe("Foot"); + expect(appName("org.gnome.Nautilus")).toBe("Files"); + expect(appName("dev.zed.Zed")).toBe("Zed"); + expect(appName("qutebrowser")).toBe("Qutebrowser"); + expect(appName("my-app_thing")).toBe("My app thing"); + expect(appName("")).toBe("window"); + // Four terminals used to read "foot" four times; now they read their + // own titles with the program underneath. + expect(windowLabels("foot", "evan@x1nano:~/code")).toEqual({ lead: "evan@x1nano:~/code", under: "Foot" }); + expect(windowLabels("foot", "")).toEqual({ lead: "Foot", under: "" }); + expect(windowLabels("foot", "foot")).toEqual({ lead: "Foot", under: "" }); + expect(windowLabels("chromium", "Chromium")).toEqual({ lead: "Chromium", under: "" }); + }); + + test("a title loses the program's own name from its tail", () => { + expect(cleanTitle("Omarchy Manual - Chromium", "chromium")).toBe("Omarchy Manual"); + expect(cleanTitle("layout.ts — Zed", "dev.zed.Zed")).toBe("layout.ts"); + expect(cleanTitle("main.rs | nvim", "nvim")).toBe("main.rs"); + expect(cleanTitle("Chromium", "chromium")).toBe("Chromium"); + expect(cleanTitle("evan@x1nano:~", "foot")).toBe("evan@x1nano:~"); + }); + + test("a tile's resize corner sits inside it and only on tiles big enough", () => { + const tile = { x: 100, y: 100, w: 120, h: 90 }; + const grip = tileGripRect(tile); + expect(grip.x + grip.w).toBe(tile.x + tile.w); + expect(grip.y + grip.h).toBe(tile.y + tile.h); + expect(grip.w).toBe(TILE_GRIP); + expect(tileGripHit(tile.x + tile.w - 4, tile.y + tile.h - 4, tile)).toBe(true); + expect(tileGripHit(tile.x + 10, tile.y + 10, tile)).toBe(false); + // Too small to carry one: the whole face stays focus and hold. + expect(tileGripHit(104, 104, { x: 100, y: 100, w: 40, h: 40 })).toBe(false); + }); + + test("the zIndex prop id the tiles write matches the contract", () => { + // store.ts repeats it so the guest does not import the spec module. + expect(PROP.zIndex).toBe(31); + }); +}); + describe("pocket-remote deck", () => { test("every layer fits over the trackpad and no two keys overlap", () => { for (const layer of ["lower", "upper", "sym"] as const) { @@ -748,6 +836,9 @@ describe("pocket-remote deck", () => { expect(labels).toContain("esc"); expect(labels).toContain("tab"); expect(labels).toContain("ctrl"); + // Omarchy's grammar lives on SUPER, so the deck carries it. + expect(labels).toContain("super"); + expect(labels).toContain("return"); } expect(TRACKPAD.y + TRACKPAD.h).toBeLessThanOrEqual(SCREEN_H); expect(TRACKPAD.h).toBeGreaterThanOrEqual(96); @@ -755,19 +846,40 @@ describe("pocket-remote deck", () => { expect(lower).toContain(","); expect(lower).toContain("."); expect(lower).toContain("'"); - const sym = keyboardKeys("sym").map((k) => k.def.label); - expect(sym).toContain("`"); - expect(sym).toContain("~"); + expect(keyboardKeys("sym").map((k) => k.def.label)).toContain("`"); const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; expect(keyAt("lower", f.x + 2, f.y + 2)).toBe(f); expect(keyAt("lower", f.x + f.w + 1, f.y + 2)).toBe(f); // the gap belongs to a key expect(keyAt("lower", 240, TRACKPAD.y + 10)).toBeNull(); }); + test("the arrows are a laptop's cluster: left, up over down, right", () => { + const keys = keyboardKeys("lower"); + const left = keys.find((k) => k.def.label === "←")!; + const up = keys.find((k) => k.def.label === "↑")!; + const downKey = keys.find((k) => k.def.label === "↓")!; + const right = keys.find((k) => k.def.label === "→")!; + // All four in the bottom row, in reading order. + for (const key of [left, up, downKey, right]) expect(key.row).toBe(4); + expect(left.x).toBeLessThan(up.x); + expect(up.x).toBeLessThan(right.x); + // Up and down share a column, half height each. + expect(up.x).toBe(downKey.x); + expect(up.w).toBe(downKey.w); + expect(up.h).toBe(HALF_H); + expect(downKey.y).toBeGreaterThan(up.y + up.h); + expect(downKey.y + downKey.h).toBe(left.y + left.h); + // The pair's own gap picks a side rather than sticking to one key. + expect(keyAt("lower", up.x + 4, up.y + 2)).toBe(up); + expect(keyAt("lower", downKey.x + 4, downKey.y + 2)).toBe(downKey); + expect(keyAt("lower", left.x + 4, left.y + 4)).toBe(left); + }); + test("keys become wire lines: text plain, keysyms under modifiers", () => { expect(keyToLine({ ch: "a" }, [])).toEqual({ t: "type", text: "a" }); expect(keyToLine({ ch: "a" }, ["ctrl"])).toEqual({ t: "key", k: "a", mods: ["ctrl"] }); expect(keyToLine({ ch: "." }, ["alt"])).toEqual({ t: "key", k: "period", mods: ["alt"] }); + expect(keyToLine({ key: "space" }, ["super"])).toEqual({ t: "key", k: "space", mods: ["super"] }); expect(keyToLine({ ch: "€" }, ["ctrl"])).toBeNull(); expect(keyToLine({ key: "Tab" }, [])).toEqual({ t: "key", k: "Tab" }); expect(keyToLine({ key: "Return" }, ["ctrl"])).toEqual({ t: "key", k: "Return", mods: ["ctrl"] }); @@ -776,7 +888,7 @@ describe("pocket-remote deck", () => { expect(keysymFor("Z")).toBeNull(); }); - test("held letters and digits offer variants as chips inside the screen; the bubble stays on screen", () => { + test("held letters and digits offer variants as chips inside the screen", () => { const keys = keyboardKeys("lower"); const x = keys.find((k) => k.def.label === "x")!; expect(x.def.variants!.map((v) => v.label)).toEqual(["^X", "⌥X"]); @@ -791,14 +903,10 @@ describe("pocket-remote deck", () => { } expect(chipAt(key, 2, chips[1]!.x + 5, chips[1]!.y + 5)).toBe(1); expect(chipAt(key, 2, key.x, key.y + key.h + 60)).toBeNull(); - const bubble = bubbleRect(key); - expect(bubble.x).toBeGreaterThanOrEqual(0); - expect(bubble.x + bubble.w).toBeLessThanOrEqual(SCREEN_W); } - // The top row's chips and bubble open below it. + // The top row's chips open below it. expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); - expect(bubbleRect(one).y).toBeGreaterThan(one.y); - expect(bubbleRect(x).y).toBeLessThan(x.y); + expect(chipRects(x, 2)[0]!.y).toBeLessThan(x.y); }); }); diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index 788415748..83b19e6a7 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -362,8 +362,8 @@ async function shots(outDir: string): Promise { // hold the floating tile: the popup const fit = store.fit()!; - const px = Math.round(fit.ox + (900 + 210) * fit.s); - const py = Math.round(fit.oy + (500 + 130) * fit.s); + const px = Math.round(fit.ox + (900 + 180) * fit.s); + const py = Math.round(fit.oy + (500 + 100) * fit.s); hold(px, py, 30); frames(12, [pack(px, py)]); shot("popup"); @@ -408,10 +408,6 @@ async function shots(outDir: string): Promise { frames(15); shot("deck"); const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; - frames(4, [pack(f.x + f.w / 2, f.y + f.h / 2)]); - shot("deck-key"); - frames(1); - frames(10); hold(f.x + f.w / 2, f.y + f.h / 2, 30); frames(12, [pack(f.x + f.w / 2, f.y + f.h / 2)]); shot("deck-variants"); From ab2d08270d20e0e9117f3d17886e4426a81f62fb Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 10:23:52 -0700 Subject: [PATCH 14/27] feat(pocket-remote): the arrows are one key, and the slide picks the direction MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four arrow keys sharing the width of two were each too small to hit on a 480 px panel. There is one arrow key now: pressing it fans a compass out over the trackpad — the deck's only empty place, so nothing that matters is covered — and the direction comes from the SLIDE, not from touching a chip, so there is nothing to aim at. - A flick sends exactly one press. Holding a direction repeats it after 0.37 s at about seven a second, which is what an arrow key is for and as fast as one key press per repeat over the wire should go. - Sliding through a direction on the way to another sends nothing: a compass that fired on the way would move the cursor where nobody asked. - A sticky modifier rides along for the whole hold, so ctrl then the compass is ctrl+Left and stays ctrl+Left while it repeats. - The pad's caption stands down while the legend is up, and the hint moves to the free half of the pad. - The key's face is a glyph (KeyDef.glyph), which the letter keys' Text path could not carry at 12 px. Space took the width back (3.75 units), and the half-height stacked-key support the old cluster needed is gone with it. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 16 +- apps/pocket-remote/deck.tsx | 150 +++++++++++++++--- .../fonts/SymbolsNerdFont-subset.otf | Bin 69784 -> 69972 bytes apps/pocket-remote/glyphs.ts | 2 + apps/pocket-remote/keyboard-layout.ts | 115 +++++++++----- apps/pocket-remote/media/deck-arrows.png | Bin 0 -> 15824 bytes apps/pocket-remote/media/deck-variants.png | Bin 15502 -> 15364 bytes apps/pocket-remote/media/deck.png | Bin 15023 -> 14883 bytes apps/pocket-remote/store.ts | 64 +++++++- tests/pocket-remote-sim.test.ts | 43 +++++ tests/pocket-remote.test.ts | 74 ++++++--- tools/pocket-remote.ts | 10 ++ 12 files changed, 381 insertions(+), 93 deletions(-) create mode 100644 apps/pocket-remote/media/deck-arrows.png diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 7de19747f..798796117 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -31,7 +31,7 @@ against a scripted desktop; the panel is 480x320. | ![the control centre](media/control-centre.png) | ![Omarchy's menu as a sheet](media/menu-root.png) | | ![the Trigger submenu](media/menu-trigger.png) | ![the machine's applications](media/menu-apps.png) | | ![the deck](media/deck.png) | ![a held key's variants](media/deck-variants.png) | -| ![an empty workspace](media/empty.png) | ![the connect screen](media/connect.png) | +| ![the arrow compass](media/deck-arrows.png) | ![an empty workspace](media/empty.png) | The stage is 260 px between the strip and the launch bar; the deck runs to the bottom edge. @@ -159,11 +159,11 @@ a centred icon sat visibly right of centre. **Geometry through the mirror, not the style object.** A `style` object is evaluated once, and Solid's `Show` keeps one instance while the value behind -it changes — so anything whose position follows live state (the key bubble -over the pressed key, a popup that re-records itself as the highlight moves, -a key whose row gains a column on the symbol layer) writes `insetL`/`insetT` -with `jump()` from an effect. The bubble parked on the first letter typed -until it did. +it changes — so anything whose position follows live state (a popup that +re-records itself as the highlight moves, a compass chip that arms, a key +whose row gains a column on the symbol layer) writes `insetL`/`insetT` with +`jump()` from an effect. The key preview bubble this replaced parked itself +on the first letter typed until it did. **A release is the commit, not the tap.** `onUp` arrives before `onTap` for one release, so a handler that clears its highlight in `onUp` leaves `onTap` @@ -295,8 +295,8 @@ touches in the view's rotated space. workspace, the ball opens the sheet, a submenu opens in place, the sheet scrolls and lists the machine's applications, holding a tile opens its popup and the same finger picks a row, the control centre opens and mutes, - the deck types a chord, the key bubble follows the key, and the trackpad - moves the pointer. (No tree probe while a finger is down: the probe + the deck types a chord, the arrow compass flicks once and repeats when + held, and the trackpad moves the pointer. (No tree probe while a finger is down: the probe advances the world by one touchless frame and would end the hold.) - `bun tools/pocket-remote.ts client 127.0.0.1:8623 --for 4` — a scripted device against a live daemon. diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx index 1a7319a94..22b28d6e3 100644 --- a/apps/pocket-remote/deck.tsx +++ b/apps/pocket-remote/deck.tsx @@ -24,8 +24,14 @@ import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; import { + ARROW_CHIP_H, + ARROW_CHIP_W, + arrowDirection, + arrowFanRects, chipAt, chipRects, + DIRECTION_GLYPH, + type Direction4, keyAt, keyboardKeys, type KeyAction, @@ -76,18 +82,23 @@ function Key(p: { store: RemoteStore; key: KeyRect }) { themed(() => (armed() ? "accentFill" : p.key.def.dark ? "surface" : "surfaceMuted"))(node); }} > - (armed() ? "textOnAccent" : "text"))} + (armed() ? "onAccent" : "fg")} size="xl" />} > - {p.key.def.label} - + (armed() ? "textOnAccent" : "text"))} + > + {p.key.def.label} + + @@ -127,6 +138,53 @@ function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; cou ); } +/** + * The arrow compass, drawn while its key is held: four chips in a diamond + * over the key, the armed one filled. A legend, not a set of targets — the + * direction comes from the slide, so a finger never has to reach a chip. + */ +function ArrowFan(p: { store: RemoteStore }) { + const fan = () => p.store.arrowFan()!; + const rects = () => arrowFanRects(fan().key); + const dirs: Direction4[] = ["u", "l", "r", "d"]; + return ( + <> + + {(dir) => { + const armed = () => fan().dir === dir(); + const r = () => rects()[dir()]; + let root: NodeMirror | null = null; + createEffect(() => { + if (!root) return; + jump(root, "insetL", r().x); + jump(root, "insetT", r().y); + jump(root, "scale", armed() ? 1.1 : 1); + jump(root, "opacity", armed() ? 1 : 0.85); + }); + return ( + { + root = node; + themed(() => (armed() ? "accentFill" : "fgFill"))(node); + }} + > + + {DIRECTION_GLYPH[dir()]} + + + ); + }} + + + ); +} + function Keyboard(p: { store: RemoteStore }) { const keys = () => keyboardKeys(p.store.kbLayer()); return ( @@ -169,19 +227,32 @@ function Trackpad(p: { store: RemoteStore }) { themed(() => (p.store.pressed() === "pad:drag" ? "borderAccent" : "borderMuted"))(node); }} > - - - - - - {target()} - - - - - {p.store.pressed() === "pad:drag" ? "dragging · lift to drop" : "tap · two fingers scroll · hold to drag"} - - + {/* The caption stands down while the compass's legend is up: the pad + is the only empty place on the deck and they were sharing it. */} + + + slide a direction · hold to repeat + + + } + > + + + + + + {target()} + + + + + {p.store.pressed() === "pad:drag" ? "dragging · lift to drop" : "tap · two fingers scroll · hold to drag"} + + + ); } @@ -192,6 +263,11 @@ export function Deck(p: { store: RemoteStore }) { + {/* after the pad: the compass's legend is drawn over it, and paint + order among absolute siblings is document order */} + + + ); @@ -209,6 +285,8 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { // for the rest of its life: scroll while they move, the right button if // they lift without moving. const pads = new Map(); + /** The compass key is down: this contact steers rather than types. */ + let steering = false; let twoFinger = false; let twoFingerMoved = false; let leader: number | null = null; @@ -226,6 +304,7 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { const press = (key: KeyRect) => { const act = key.def.act; + if ("pad" in act) return; // the compass acts on its own slide if ("layer" in act) { store.setKbLayer(act.layer); return; @@ -260,8 +339,16 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { const key = keyAt(store.kbLayer(), c.x, c.y); setDown(key); store.pressDown(key ? `key:${key.row}:${key.col}` : null); + if (key && "pad" in key.def.act) { + steering = true; + store.openArrows({ x: key.x, y: key.y, w: key.w, h: key.h }); + } }, onMove: (c) => { + if (steering) { + store.armArrow(arrowDirection(c.dx, c.dy)); + return; + } const pad = pads.get(c.id); if (pad) { if (c.fdx === 0 && c.fdy === 0) return; @@ -284,6 +371,7 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); }, onTap: (c) => { + if (steering) return; // the compass has already answered on release if (pads.has(c.id)) { // The tap resolves at the last finger's up (below); a two-finger // tap must not also click twice. @@ -295,6 +383,7 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { setDown(null); }, onLongPress: (c) => { + if (steering) return; // holding the compass is how it repeats const pad = pads.get(c.id); if (pad) { if (twoFinger || pad.moved || dragging) return; @@ -310,7 +399,7 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.openKeyFly({ key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); }, onPanStart: (c) => { - if (pads.has(c.id) || holding) return; + if (pads.has(c.id) || holding || steering) return; store.pressDown(null); setDown(null); }, @@ -335,6 +424,13 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { } return; } + if (steering) { + store.releaseArrows(); + steering = false; + setDown(null); + store.pressRelease(); + return; + } if (holding) { const chosen = store.keyRelease(); const key = down(); @@ -346,6 +442,10 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.pressRelease(); }, onCancel: (c) => { + if (steering) { + store.closeArrows(); + steering = false; + } if (pads.delete(c.id) && pads.size === 0) { if (dragging) store.dragButton(false); dragging = false; diff --git a/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf b/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf index 7a426fa2e910fb510f1c13b6a60f9fad6a263ba7..5a36ec3b3617cb960800ce57fd7f0f8fa0933892 100644 GIT binary patch delta 1899 zcmXw(ZBSHI7{~vYy%%{=4omrxC$XKxm_+(b0kF||f;qWDi2%%_j|#wix=8>Q z(0&1&OQBnU6K_B<1rs2deo+7x()>8h%p`?2$CBAzM5hVBVme0vQt8hGm>;R_6o9vA zp8%N8eJgNx=yo{G3t;EX6#-aE-x7dysGwK@$e?EnfP?0W5#VilHz{O$8GS?m-l4e? z1XxZ71YiYyQ2fK~J?0a#5lI|5|WYsgx*-=(<)1XxR-6M%K}B>`AZ zGcf{ir7S%HumMUBBhD}mQ@6p^h0&Jw2nO@KKCc04oH&E&A0{Ev; zdWQgPfifZlAfJ9g0JhRhjsPD*ISpn+fRE_S0j2dWHP9f=8_ShjNTyt<#e+EF!K;r zF99lPE;RwFph7hP*hjM<39z4Lp%LIKnlC0mHB?xd!0kK0#t#B;kiH@Ccz_B|5CAS! zIO~D{hiSh6)Itrj3g&^PhH+mBz&eQ-DggCRksKp1&jqV409<_7)E>jxA0p zE-Z;IsVtpedZ%oCxlvwN;jfCVo>cwMfz$*3gVPR0*VNWNQ+u-R?2*|=Zq!HDuRc2R zXyvizj(HnSH{5O18+{(%@y@1_rq-t0Csujuno~}`-!iTxujRZi+vhvA^&9VZTT)L? zY(;Bw+nV<9jxlEr`Sbm^1D~9of9~0HC(cjqEV&SQq2`kNa^;T?uXulI`?;`dN!OjL zb=NYxV}AMjdd&6K8%utj))V!c|7PUP+FKiMNBx<4r|s_Yzb@Xl_d5Ed?2nr zj@=dIo<_4fkYKp_9TM+PFy`49#PNRf(rz>6B*;6=2-o(U9Q#r}GTN|x|2RNi>e{{` fH$B6gDk0!mTr)dEgLnThZK4)rnd$0ejW5c5nOWI6kB`zQ(0vm`wa?B@e|6>}JY8;?&i2Sk&k4?@ zu5ihK2MToDkAVMPh#Q)eH{CsUi(v4o&TzS**nh=Zczk3`9gKszNJ5|@I?n$j|7T02 zJ|-y`9)n|y4xd(^F)&t5GuXLl8c)-EQq%$6m`CV7t~J-OjYv@x>*-!Fz}+U(sF4)b$ z?63y+7|2pb8+b$26A8>w-;#M6&sDVq0{*!c1M}1q2C~&Q18=Jr4QST9cmwaK10*~^ z7s}CKm<-og7x%PQ0t;0=nYTmZ_tf167O9#>@fXl}-y2wr>yls~SAEF95>*c*uvFDU z2rR>eyXay9AE^EXay8CVR~cBYt~2nFx>YLmo{v@CkibfHzX9!s=!Xq_s%rKGv^S#l zw*m#~E)#}A4Vnymrd~0i^^NW@pqq(_Gq76KCKUKw)m{)NR`n19Yt&l?O4LpRrMOt_ z5yAiOiOtpY#rjXYR@GAol&kv;e4%Rh3TPH$HPr&^ad80y8&qvVfsLv*n!uN;K3HHA zE`GX!3iX)L@@>}Og3(t3uIpF>U#Z#)0-Cn2%?2uQ-9rYpsajX@ztCJlHv`%;i8>b8 zfeU#C|2rb2^%v0ehyKAmsb5fy>v>krX{>JUhO95!w5noSMdRinn@hKZ zx4O!u+xl)Fy1l9@xhh@4>J<{#S<>r*;>qqzgu%e|;%jzHR z9Lql5z4hiv@0TfUNv8&#>io6o^tdyLXIjqYwNGl#J3sJz(}mLC=3g3eCHtzo+J0^R q?~T_7{rS^hkN$o5MsvsV$cR3p@*_PflQU|kCIkitYFE0zk--1ggNL91 diff --git a/apps/pocket-remote/glyphs.ts b/apps/pocket-remote/glyphs.ts index 98ecb1daa..1d9249046 100644 --- a/apps/pocket-remote/glyphs.ts +++ b/apps/pocket-remote/glyphs.ts @@ -81,6 +81,8 @@ export const GLYPH = { menu: "󰍜", /** U+F003B */ apps: "󰀻", + /** U+F0041 */ + arrows: "󰁁", /** U+F01C0 */ cursor: "󰇀", } as const; diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts index fce9b5351..8011a61ed 100644 --- a/apps/pocket-remote/keyboard-layout.ts +++ b/apps/pocket-remote/keyboard-layout.ts @@ -6,18 +6,23 @@ // handles; tests import this file bare (bun test cannot load the app's .tsx // through the Solid transform). // -// The arrows are a laptop's cluster, not two keys parked at the end of the -// letters: ← then ↑ over ↓ in one column, then →, at the bottom right where -// a hand expects them. A stacked pair shares its column, each key half the -// row's height. +// The arrows are ONE key. Four keys sharing the width of two were each too +// small to hit on a 480 px panel, so pressing the arrow key fans a compass +// out above it and the SLIDE picks the direction — no aiming, and holding a +// direction repeats it, which is what an arrow key is for. Vector, not +// target: the legend shows what is armed, the finger does not have to reach +// it. // // SUPER is a sticky modifier like ctrl and alt, so Omarchy's own bindings // are reachable from the deck: super then space opens its menu on the // laptop, super then 1..9 switches workspace. +import { GLYPH } from "./glyphs.ts"; import { type Rect, SCREEN_H, SCREEN_W, STRIP } from "./layout.ts"; import type { Modifier } from "./protocol.ts"; +const ARROWS_GLYPH = GLYPH.arrows; + export type KbLayer = "lower" | "upper" | "sym"; /** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ @@ -32,9 +37,6 @@ export const ROWS_TOP = STRIP.h + 4; export const ROW_PITCH = 36; export const KEY_H = 32; export const ROW_COUNT = 5; -/** Half-height keys (the stacked arrow pair) with a gap between them. */ -export const HALF_GAP = 2; -export const HALF_H = (KEY_H - HALF_GAP) / 2; /** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ const UNIT = 44; const TOP_UNIT = 40; @@ -43,11 +45,19 @@ export const KEYBOARD: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: ROWS_TOP - STR /** The trackpad fills what the keyboard leaves. */ export const TRACKPAD: Rect = { x: 4, y: KEYBOARD.y + KEYBOARD.h, w: SCREEN_W - 8, h: SCREEN_H - 4 - (KEYBOARD.y + KEYBOARD.h) }; +/** The four directions the compass key can send. */ +export type Direction4 = "u" | "d" | "l" | "r"; + +export const DIRECTION_KEYSYM: Record = { u: "Up", d: "Down", l: "Left", r: "Right" }; +export const DIRECTION_GLYPH: Record = { u: "↑", d: "↓", l: "←", r: "→" }; + export type KeyAction = | { ch: string } | { key: string } | { layer: KbLayer } - | { mod: Modifier }; + | { mod: Modifier } + /** The arrow compass: press, slide a direction, hold to repeat. */ + | { pad: true }; export interface KeyDef { label: string; @@ -57,9 +67,8 @@ export interface KeyDef { dark?: boolean; /** Hold-and-slide variants (letters and digits). */ variants?: KeyVariant[]; - /** Half-height, sharing a column with its partner: "top" comes first and - * does not advance the row, "bottom" sits under it and does. */ - stack?: "top" | "bottom"; + /** Drawn as a glyph rather than as its label's text. */ + glyph?: string; } /** Keysym names for the characters that need one (wtype -k). */ @@ -111,11 +120,8 @@ const bottomRow = (layer: KbLayer): KeyDef[] => [ { label: "alt", w: 1, act: { mod: "alt" }, dark: true }, { label: "super", w: 1, act: { mod: "super" }, dark: true }, { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, - { label: "space", w: 3, act: { key: "space" } }, - { label: "←", w: 0.75, act: { key: "Left" }, dark: true }, - { label: "↑", w: 0.75, act: { key: "Up" }, dark: true, stack: "top" }, - { label: "↓", w: 0.75, act: { key: "Down" }, dark: true, stack: "bottom" }, - { label: "→", w: 0.75, act: { key: "Right" }, dark: true }, + { label: "space", w: 3.75, act: { key: "space" } }, + { label: "arrows", w: 1.5, act: { pad: true }, dark: true, glyph: ARROWS_GLYPH }, ]; const ROWS: Record = { @@ -164,25 +170,15 @@ export interface KeyRect extends Rect { } function layoutRow(row: KeyDef[], r: number, unit: number): KeyRect[] { - const total = row.reduce((sum, key) => sum + (key.stack === "top" ? 0 : key.w), 0); + const total = row.reduce((sum, key) => sum + key.w, 0); let x = Math.round((SCREEN_W - total * unit) / 2); const y = ROWS_TOP + r * ROW_PITCH; - const out: KeyRect[] = []; - row.forEach((def, c) => { + return row.map((def, c) => { const w = Math.round(def.w * unit); - if (def.stack === "top") { - out.push({ x: x + 2, y, w: w - 4, h: HALF_H, def, row: r, col: c }); - return; // its partner shares the column - } - if (def.stack === "bottom") { - out.push({ x: x + 2, y: y + HALF_H + HALF_GAP, w: w - 4, h: HALF_H, def, row: r, col: c }); - x += w; - return; - } - out.push({ x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }); + const rect = { x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }; x += w; + return rect; }); - return out; } function layoutKeys(layer: KbLayer): KeyRect[] { @@ -199,19 +195,62 @@ export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { return LAYOUTS[layer]; } -/** - * The key under a point. The gaps between keys belong to their nearer - * neighbour so a finger never falls between two — except vertically inside - * a stacked pair, where the gap is the boundary between up and down. - */ +/** The key under a point, with the gaps between keys belonging to their + * nearer neighbour so a finger never falls between two. */ export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { for (const key of LAYOUTS[layer]) { - const slackY = key.def.stack ? 0 : 2; - if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - slackY && y < key.y + key.h + slackY) return key; + if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; } return null; } +// --------------------------------------------------------------------------- +// the arrow compass +// --------------------------------------------------------------------------- + +/** Travel before a slide counts as a direction. Below it, nothing is armed + * and a release sends nothing. */ +export const ARROW_DEAD_ZONE = 14; +export const ARROW_CHIP_W = 38; +export const ARROW_CHIP_H = 30; +const ARROW_CHIP_GAP = 4; +/** Frames a direction must be held before it starts repeating, and the + * frames between repeats after that. Each repeat is one key press on the + * laptop, so the rate is a walking pace rather than a keyboard's. */ +export const ARROW_HOLD_FRAMES = 22; +export const ARROW_REPEAT_FRAMES = 8; + +/** + * The compass's four chips as a diamond, drawn over the TRACKPAD rather than + * over the keys: the pad is the one empty place on the deck, so the legend + * covers nothing that matters and sits right under the thumb holding the + * key. It is a legend — the finger picks by direction, not by touching one — + * so only its association with the key matters, and that comes from being + * under it. + */ +export function arrowFanRects(key: Rect, pad: Rect = TRACKPAD): Record { + const spanW = 3 * ARROW_CHIP_W + 2 * ARROW_CHIP_GAP; + const stepX = ARROW_CHIP_W + ARROW_CHIP_GAP; + const stepY = ARROW_CHIP_H + ARROW_CHIP_GAP; + const cx = Math.max(pad.x + 4 + spanW / 2, Math.min(pad.x + pad.w - 4 - spanW / 2, key.x + key.w / 2)); + const cy = pad.y + pad.h / 2; + const at = (dx: number, dy: number): Rect => ({ + x: Math.round(cx - ARROW_CHIP_W / 2 + dx * stepX), + y: Math.round(cy - ARROW_CHIP_H / 2 + dy * stepY), + w: ARROW_CHIP_W, + h: ARROW_CHIP_H, + }); + return { u: at(0, -1), d: at(0, 1), l: at(-1, 0), r: at(1, 0) }; +} + +/** The direction a slide has chosen: the dominant axis once it is past the + * dead zone, or null while the finger has barely moved. */ +export function arrowDirection(dx: number, dy: number): Direction4 | null { + if (Math.abs(dx) < ARROW_DEAD_ZONE && Math.abs(dy) < ARROW_DEAD_ZONE) return null; + if (Math.abs(dx) >= Math.abs(dy)) return dx > 0 ? "r" : "l"; + return dy > 0 ? "d" : "u"; +} + /** Variant chip geometry: above the key, or below it for the top row. */ export const CHIP_W = 56; export const CHIP_H = 34; @@ -244,5 +283,5 @@ export function keyToLine( return k ? { t: "key", k, mods } : null; } if ("key" in act) return mods.length ? { t: "key", k: act.key, mods } : { t: "key", k: act.key }; - return null; + return null; // a layer switch, a modifier and the compass send nothing here } diff --git a/apps/pocket-remote/media/deck-arrows.png b/apps/pocket-remote/media/deck-arrows.png new file mode 100644 index 0000000000000000000000000000000000000000..cd0394dda78125cdefd46a122259f5b8bab534de GIT binary patch literal 15824 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/deck-variants.png b/apps/pocket-remote/media/deck-variants.png index 07518078aead8246afc8e5fa38798cf69e333245..9d2f7cdcbd60a6c53f727a743edb87ad09c8d773 100644 GIT binary patch literal 15364 zcmeIZXHZjb`!1S-n56d4l$h+@z?8$J)Z* z<|2~)o?#nuFqA*;ql6NrY(LZ7%gbv;Ek!F07LR94-Wz>4ao2QL4=$Z}G$cY^{8}uR zi4bInqrxGT1sNV0+mdx?N6w4W(s*!xo|uQcpcWbI6Z zA1q9LL$uj$Ajg7eHsdBn{t zKjAwhwB4QP@jf0b0FbwTF>=(+kk>`O(&06mx5KLW4#>J*hXPHYP{eTMT3<`K3sxZL zb=qn8jv-IA^o*bJZg+IKk%;{WOV0Kre7mlIkDTQ`x=^3^<2SKtJVa)&K5Tyay;PNS z>9LiU^XA}lwI&W&^=m(|TCT#XZ=uHbTi9l&Vl{`#?1Hd3*WDIE+Z$T^o2Ha|u0tWu zVKw7C?==TDu=^ft!0TufVwtq|+P1fdKwhte@|8>m{%3dy-@m z3kA2+USWDZLG`PXV3~#q@6-?M$TqwRvKr@sd0xD6ebCf3M?1I6Bx%*r@8VurK{zOI z!Fk6;7;)tA^Di>QS#hNwEmW z1sYgm-ipC8_2~gGd9p0QdH2NYrUXopnQDR^r{!pUSb<(bA4WDbzv)d~0yXZsGcG#D zJt`< z7l(H|UeXiIj%w+E*u7vUIv-R0iHXm$;Ci>o)W}bFJ1W6kTPCLd9ud$&fM&(IJ^$OW zOY)oF`aEek-hlFU_(L=GkRwUbxst5f+Wy#~&LCc)vaa{*x|7xAv=>#v35?yTK) zp7F9TuQ-B}rp%Ki(O^N~P4*;07OFAA0910iJ_P7;$2Q5eD;dF(AaQUmVGR>-*&EuU z16(3kIEoambD1umPH7K)?S>6C+|+-cH&$3PZHl&~#V@T>SBq%Z2V}3={tj$ zp80Y>h7{e_3M0Mm4IRVdo@G9!>gC`0vXA&>t_2^_uUhq`Z$P*Rwf%MR#G#Q0#XGTd z)h_HeTpHubA-NEKEU|5)bwG{iX(j>m3XG7&jJ*)?p{*E>w@)R|iCfD1#dhb%Lv1f^ zELt%LUiW-Hc^A1l#2%V_1YML~jQLfM+(o!9%g?jg=N;6heLi4l{a)|r#iETOzOFya z*P+uX7#4aOpxMyBQuOUUo|E$#bHyAkrEwnfRfAdrxQl6r&Og}m@EoLRh#G~WyDkvi zBpslO-J<8RPWwzz*5hjgC7}eC-_m64sxtJrb-RX@g06?zg>28<%x5$@=Jl}#4XDFd zVaHZX=9SttX8nCF5Z^#hJ|uiA$_(qEnbTtCW-YG%K8pS9*a$EB$^ z_w%VVh`90iUcLvoJZK^FHR$?XRGjTtxMMK!?KQ$96JVLDIl=#B?BCU33vY>GzS#?)XpI{noOXD+TetY8WcW8~F zM9yzBK699kiUiMr`R(0Ch`N65WX(IZ(s2S-XysP2^y*SCS0mGGqkz+efRw`8qWP6x zt{CTi*_bU0V-$_PrY>AoZ^u81W#fKWa>be@tf`!HRmI*wQGJwDU>*=3%u0?6G&Nv(w z`jrrld8~S@@Xt(8fxoc%F4B1`{2!zi1ai>6py>koUg2e; zemn>?MKheb`gf#^2Ez>`-HWziEdWB9g&%L=+a+hXz>{jCN;o9vPsm#Su z+ljo3FVa?PxIA2H*Poeh<$KP1CuEvgHfa$TGzrFp*M~TH&EW5K`Yxo95fr_I4)xb% zCDGWn+$_hJ5RQMw)7RXpHV?68vp0qb!*+|+=je}K$d?qsY*{o&#)l?|3vI-KVY?mA z+enj0F{>}(7f)3UMHwHnlGz0MrH?*QP8otEfC0>cAF0fU3vJ(WOb|Dasl#XP0>zOg zqMC+Glxy*}AUv}grX0B{%9x-*?ejpbLzMh($tHjPeC_N_q^=SA8=Nwx{-8>CFZ?Lo z%0~pfr;+A49V!^SNQ_>i;7#=bN@Fz!IeYmb(I%M=8}^gW9C)WI5Z_&0c4*#px+gt3 zFEDagCM}a1F_srnF74P6Xumt#R;rp;{F@KuG>Va$ccMU_EpZqxTWGgUcdAhFWFB2< zbjqg6%UpHxeXr#ia&X|MEwE6CL^2+<>UJjk(zJB;Pkued5 z&)ig7NoHVs8#K`gUH?e;GXDp&-KH$uLr0V3mP zX~b{pj~yC5NkKwjTxY-v#1C0_=INeP)-K@mkObD_tU$AwQ>}7knIGVpf-lbYHGaad z5kLHxwc%>x5D4DOH`vg045u}X^FBB)UEl6n$s8bu7tojr#Fx4emzZZpjgA$Aw+^IT z_q>A&zA-Jw3aEa50`M1N3me_gQc=dX?#JwmGwvPJo@FfGC)b8EesL~LVG3roe||~t)W*2_kDwk!s0QMC1eBlY4E~%) z-iAX@St$0y><6(#!rZyg_S+)p?XDXV2vb&eWo6@0H#?vrLE)LgYiAy--5=vKu63m? zO{&1wqan!#cnlVxwVA!L*8)58^$oBGVO#;+r=<>*K1TG4p_!61VdEt-A{tGcy0b%A z{)8vx$_@l5dSI(Pc8qc%MO|YG8a^`TDt@#~X~jlvOVqfFYdGF*t0Y+RTyE}Nfd~Y> zwa~Ll9Icy7mfM`*s55~_B%W4gTlxXXK*>3BPs5jLb2BnQ=nny< z_m<_G^LBB)5@;IU>TBM_YrvkcyXW{>F0pce>D5q!*?{>b+!4Z>$Yy4A5g-0~Y!JXo z`#3Lc!LwU8X+;UDfny6l@1g~S8mV=~n$8=PeF`x+gBQqX&*X-Ezb94;Fqtawe*Jk% z6Z`pcg0Z-;Dzm-VDAe(0Q0Q7MY*`+n(Me{RUFwT|m7#F4j#PMNSes5Ww3 zVxKLbIgfgX>_k13vgP2q3nzo{$v5qr2}wr+D*UD;SDrt=AMa2-d#J z7c+!E_03Bg_JsIk-sXGP8msMtlXqW_N%>--FSFw$_Q)l%=MK*43`WfMc|q*yiylP58(5>T%l!M-+(5o-Yea>x z!R?>eF&q^Y6>EA`FuK}L8mb|#)^U?ls-rK1FUk@!rp-lPja6{|G46E3cH9CyW_G|_ zVNW;MDRvXoVvmx` z4mJiUgCaiXa=866od}3jm!nbaVbgqUxo{t*4d$<>zHa^V>~^C4oz+b6*hc`iB~xzu zv(RbtAZ{s8&xn}YCdebBqjGV2PK`GyKBdc5yn5ZbYpL{-6E4yAC|Obi&4SAg47cE! zw_ccOuEPnVjl}I!fD(wUeByiJt`FtnqhF-eC{(>I4wJD+-4KsD+)mWjAEh!*;1uwS~NyG7oKpk_+7 zn@S~5rT-=T1Zhd=tZeWrS;K7{cp-I3>Zdmz|)E&lC*DE3{M|1O3PlyG65J+2L(nNaMRArt_7Haq~ z^uT_Z`{C5D2H{l3E@1u%BVnJ(Kfy4|>J>IzC_r(q4;b4{-7K@m&!CL$$NL?*s>b>+=WyD&wz%_w_%FB)YZCb5f zWu6j;>~^F;1B8zxdd@u6Gk78Gq_W*=3n7a2-G!5PTF5t~xID*=hY!ndk{L*i4X8@I zIec-Z65rkeh=mP3ksrLHTGN+u@oh)8mBa)}jGVmK7&`=;OAG7mpxy)VPG8x(^ydDS zf5b<8vQAvWvEh?qZ_rv=TZcF~Iht_;qFg%y&D3pnVlVhszYj&*kxmw7K@j9ZAHZygH$_8lb?lt=4#6;XtoF9C%mP_Zr7L?Y?8VjPWi6_lIoQof8!_}= z*g<@^*!Y@&@nMk?=x`;QysNTiBRZ+OzULP?B<`tgy8exoO$j1!j9B9)H zSpKtN$=8r|np@Wbes>)NVPe{>1J%-pc|TrgW(w#nOZWH4t`n%I*?ZGO-q$(IR@4mn zf+~yp5RZRhnZE%XwuaRGq9z7!bmVUlW&-h&>9m}75sY~;*lfHa#4gF^)^Aaj4!>xn z=127{gm#2pEkjsJ8zI|+{5o(Fr(g@G=sY@ufP-c=u2R5x4`JzzG_{7k@00EChY&AR zUnX?W0h#Q4Vp2i)N_wF&#kh9GuJJd3nP!(xos^lw?O*kp%o(`Gh8U=+Pj;wa&_EGtVp$Cs;j(^OTuu(t8Kc9Vr+vHbAD{Zl2_O2blkiy9Qz5YG2etVn7L_!c!INV{hp*?;vC0jAKctt+!(J zhMK?MK@36SJvqMP=j~{Hf{(lF;=IQfdQ7P0y68|9xEAl#>IQ%bZEugN8?eXMlxnbK zARAyJBJ8??$+?wNUmqj#NM$3}U=5lq_qGp4@bfaQAex z3NnyL+>36RO#{^B4<~G%YnA1H{Xh$efu0JW6FC`6#uJ>=6EcDe76yBRlAhV?Sq#*# zJ!9R-{@m&W)pN{#@ktoHZr;u^`va-^=4BM+bJq9CGzuO$4P20%6MLB zV=b#=aB4|3$6>dtsHe-)ZDjksL_mqNu3SYhli`HoMR2`7&+4PScOb=~i1CRpcAQU4 zr>b45c&GxckJm9mB~^#|?pfD_dLH~dS?#AejQ}3jn0C5~T80w77-Ckc`ss>NZi(jr zpo?|tf!oLEYoN(w##tF&WT&S(2lIS}!`Fl(PeaeyTHdQ^kuYXhg+6kA8FrZX^w}_z zqc;LsY+tQ=t^E_Ypy+u%=jJR#8IjYQ1W5eOk@#eEBcI*XnhCUKxbfy_HQ2X}*pce% z>D1!&JiPR)M47}+$4ukG>e+G;%Ot%>tIxio$_tmar6)^+ljKAMN{Z3<2JjKNz0W4l zs;7a9bZuaCF`&1ivsX%(GYOUCKJut{{w5Y=u$6H87d%;M&U1+lsvz6&`IJBhN~7DT z#9Gu8t}B9mO>c=5AT{mgcN;p}WS3#RLGtH=ZvX0n2Yd}~rrq>8#P)>jTyAEucLm2e zmmgi)s51_#pg@r0i_t-a9g%Q{5+R6E>Lk|;|F>8;>$C&W9AxA3vyooa`mD0ohv8rW zkcaJD?vK{(pDERWWNa9eGsR-J8isg2g}~Ud9;w!>E?LzVDk^{F2#c5GpzDEe)JYSd z&7FAZx{FSAxvTiba-_GFzwy?UBDsp79#uA3IfCcP%xjy#Y#f&Q_;mT9>O+lsPKrKW z+OOy_kvkcrL&ZAQJTDTy*C45n9q$U{Chs0KwoexlccV`rfgzIu30&4eQ~L`H65JX4 zQGp{zDXyA_v0?p2E!&%Y-S7I&D^Z6X2B40Ush4)86Hyi_Q?a@)&@?|9qg|X9%kdOk zTZ{|_D!zZ5F^+s4FCT4w%r3y@-Ot$H=9%a%3QD@&F`{c+iI4F2+qgeLLzy#yF+pjO zdU56|O~v0D!iiKMj1~%K`CEXv;>Yj-#6g>ydh3tofaX&9e`pG?o&nr%Kj#pMXS90p z_VAUCp5brYA6ipZuh``GtKZ{SmFXM#vh3AfMt`~re#{pq6Y(j<9*&yK$jjxkrAq51NboH z-MQj{sDD;CwFsLiEkYEF&lLqcJPAyGLd<%{F$;w)Nj7hl6JNniLVrq;{f6Zqz56we zAHECX4Rud@pHS5|Y)M;wD6Vl~`h`Fvrp?LL=li#l(>Yf6L^CNnii^YCMGt?e{E|M9ZFn;VVWrP9)w8y>yg->RAsxcJvT;NWkwSWO=Ew17t)s2&d zoD0dJ7twsnQKyjs9%FVep?*r;oU)O;N42}mD?<~jQkppVqe z_rZYX2O5kE;;gJ`=UPjLmpTsm33TIygT}5Dyz=Fq|p{aBgBGG(Jb{lD7AHOxDh=cDbDh4W!Cx7G-KCTYK zao>O(gN;)_7%27fOkbX?JmN9=z+pC(b@cOHT{ZT{bS}9iXt1Yyk3V$nN~lCKQ%`;O7EjDSo+>( z4-tsTZ$A?@zQOFB4*GJ+=vZ{x(ctUB#!SXF9TELCK9yt4+Oedu#A!)T;*~1;XNdI$ z@9p*Mjj7C&n!k!t@ApN2*MOBg^=|Xm|5Z62gFOE!U`=V}*p>{*5WZEyAxPD+^sK^6 zHVT`O8O&yXXkk!7qf-)X=;VEM?@QaP^K&LMr!Ikv)UDLZSsu6--8*LsL|T zd7NTb^@Ri)8JxApRVC(G{1|F5ieKxqQ(cWJ=WM|<^oOs_L!T_;^+0d#B!;ZZ5+<${ zR+(L3PcaYwNzwO7qyDk4CB9gRXnGg7ZGxCtMdt-f5V5l}ieTl*>+WZn-`!N0SCIT= z35I_qP1L`iYyhzS4j5+C;$>1U2PG*Z2k}Cm_%|&_MNEe!zqZo&^xZ~5w4p8u}4+7miJY`?shbEOSqCBX6VPA`k)Kb+KJYO z3@)J0K^4rbI^DP3S1P!7S)V1 zkSSeqK(tbA{Z6|uI+-T>GBT=eni}=>`^0d7d&J8(hdi6II*5dPC&c&@oFPb!3us4? z#{HN-$W>7CB^Dy^Az;ukgb+bIAoU)-5ZKQjF0*NrYd{An9?GWyW@?u57N~5U?OE+e z=7?L(7d45W+Vm-i(D3Q609b>EDav7FW5Ln-l1#YaKly(4JlXE?_|_jlxVAjP;YT(Q zL61>HXi?6|f^fZm!^FvUt@om-Dz{yU@A_S9K^{VDuUSrMP0iB%lgqy@%?xW>q*a)< zKEh#dAWQiSXEeJz07HEZmur=tTwU5Po)|Kr`)?q``CS2(yt;EM z{x1_H2(fK1par-?6;1y zBMGA~AIm`h#=$}VP^K7C2nFy2QFeWj&A*PsG(NT2kp$0dA5id4u;H;t9lmg{m?%ho zycj7nuqjVl5xKCEHrbIqU5<-9Tuo!_kZBthMl(DwHut0Re%zM8xK(bhLDPAtkqS_~ zQFbzD=VE6&=djC(fyUDuvc1WLXW;8hwv~3(HEzzIs@oZNpuwN$(gH2N1AYZ7m5*oS zhLML!FuR%1<(F#|byIfc1gESZ>w-U9sNdif_u5bV>(s5|O#+#4O zGGMNAixK_P2OSAK)dzKImBfAOgV5*dq@#3BSlgrBJ%8Ft>MHoTmlPVnV&9Er^1GYO z#XlADwhfeIAyja;nb8ZotpY6USH~ardCY{fCbD~5@KqlT)`g|F1Z>rj6zxpt+bB@g z?G(f`OOgMFi{lEq-PXH%n(l9pjEnb5-wWPt3B4`OvK=$(v6{T>H~D@zH0MODA3xUG zTo}dCOSkuraaMk5byVF9W}EHZSeT{0y{&nVQ8PfW`~maV6Fr*EUOR0aTGPD( zA8Aqbuhe-vo-)dt;xvic^{N9QDAae{Jgu0$6my!jAIvP zP&mQW&k6g9$77!R&iu}-d^y*r)JpG>heGJMi|pd2rL=w*s!)7d79S%L*Y6j(f}4#c z-Si*ui`Ounj|U_PW3^(38|cB?uJuoDKKG=wLA3MP9a^zb*_kv1Z%fz5)m7l$J&$6I zqmwRl*sPa4A=h{k6-&fW9B)ON6`94o-d~R7oW^r6 zIqEoib_6vk%R=hozFfZ7?YVt-gFi}_iB}P-EB%$X>$UGEJ-~ao(W!W_O`TKFT}VUAX}Ne2(_o(Yxr$yUTbzb<0nrh@LKA&AOC+0TqZlRXe+e-;@^SK8K=iO*+!Nc16ukDvTjmr7 zSY`uA*^iSB;@WcoBVL6&Np5$Jsy?443s!;I|vw@Ah?tQr! zMZA#x-PJiopYso&C(v}%8FB2z{!kZw&W5utv_4IThUz^bU9(0=bt@h! zXK`N3!5bY4iMMMXRi2*UsDRr-JlAh!3nO`a?Qt@jZ$v#$NnK+OcKi_okZ%v~G;qPc zpUT4b!)SeM$P-HHgNJeK^HTQNX%ajx>V>%VITAR>Al1Kje@qxvf>+ad0-26pKroz zvf(>trK@)o+fo&3$#-xfz+SsGD0zRG3a2!D-jBa$j4CDwUj$jVzZG+%gktfXB<2;B zD@ynCq@KiP>>(ZaDJ3R#q@1?nyPoqW9ABmZl;;@%S5r%1KwbaKsWbr1VLP z)Wh*>e!$#ej;+=D4~?+DTW5H-)#YOqki# zX*A4o&>Q^sp!<|T$zmNL#ZjCOx|M`WV{dYuc@+7lPH4NZgk$~fiM4V|DxE{S8OO2 zH2dAtVt@SUu5d5~7RB*w@V{Y^#s1lq_&@eD#h&Knjk5#3x2aIT2uV;x(u0B67m0@V zI``To=w9ttxz(+Yt=S-t)T+L%$qN5DPc5Bd{V8TMvM>ceiho^GIo<#WKKz<|S@(p3 zxN5);h0c!SLvD$7@H<`5@d%JYhqj@r4vQ~Pka1mJpgATxV&@8hH!UlY7TD{`H7l6VgOZinF$U3dsd>CskNAGMv|w-md_s;Vccm}1Uhbv$k&Mcn%IGVYZ0Ak9G+ zfChs=M%gH09tF}G-my5);%QjCC{FY$rtM>Dxq-%w+&9+|j9Z#JJ3-aYj{!>CxyuoFo z7K$y%*|N8UZNu29ZF!y8yDfV4_REje=5isa=H$mcJeXn1L|zZtcZAU0r$@o{T!FTd z11q+Wq>8U%SCAxgRid3kn| zo%T74_t`?d(Wl(r9@(7UCSikeyN38eqgFYRpw7T~)WY$tC=8fO@>dbxlq&H072h-0 zJV1xh>`F_?3+3y*!8Po}nd2A+DKB^Vxfn^tq5yY)nTtrKyNd?gCAhhLB1ZV!JAnT& zg}Lh`Lk>~uU3Z&fxP&FJvHsi~s>YVlH2gl;;KSj2gQ)Z;eUz-v(fiipjN^XY04(*; zCXl|G80Z124HWb1q;;+5pw1UP*4h6p-`(<6@60)0=C z%w$5~c6?ev)M&-=#-&ab&mo*!9X#f)e@REYbQ-Id=a1vwJmlXTme0SZ~u5`#-M`*{$Ha&(#@XVuqdrpBh-&EVKU1o9!!~pBa`# z<5SN8FtYb>Vqptq04{N3dIV8niN{$B%T?|fy_7rNJ3S^t=;a(LgnDK_2QWYXw|49k zQxGR}zG%*uC=tQmdL7XjLLp_sGcKlew4wEk*Up^kQmJi=xqvpXGrSe=Z;gm%PBc3k z>vGU*vnqEQSXlJh@xwlE_1WTAE|0!mQob)Qch2p35(X?nk+;vaF)Qfdyaf=(5J z$af*oxHhtLucYIifk&ksSDe8>7Eu)iP}=c_({B?g5B2(2CRMARnheaeG^_TRFV~xk zlM~&9N)Xf9*_C1m58Y74XF0%O2BklxAY-_~wcBs1I3AidHPZ9E0HnUvGjiB*q$}^= zI2v4ed*3I9-7p`_)geS<77~4I)IdXLgZfYw4~VsqdF^CS1l6&n^I_FYx9wCrHq1pd zU7Gl0Mrkti98+9U-{|Df)J+>W-pyKh@nAGr3(Mu81T5^xz1uyZVR}7Sm9iaTXbyKa zn1fmxExu-7CWZbw(${L--{wba4LEkY^T4B8`962fEbTBOKa0;;1nO+2C{POe7^?IL zq&Dmrtp`_8jBqdih@|Ift)=Bi6fJRf=NcdFnYt{1x{j9F=Fd$nOq_P4smN`L&&QNG z@RKRe_Qj-?kqzLyiB-R|=RNtRFn6Kk*(w1^XDs!cBCs%;(t4RSt}!Ru^MIm-XQapP z-9qjdT9_zTl-#+HHMQ!zq}5ToE{tsqMpUv&b)ZSip+f@DThGO@H=6UnToHFNpW!Lp zie|JvaQf;TcNV*zgar0E5EWd)!c7!gKjA<78X*4#$IbMhr^UknJ`8T912P6qn!j!%Iq|;9K+#3S{)_Erm7&nz{~uW_ZR(xoOQ~D#pd`v0mBu z!Xa+Id-dr!b$bo_5H!J~jzhNh((T&s1KlWvu%IXQ{$9!6sYoAzn`>%F)D^-GyL_h?hB0vdMbb$63_1An8Z)M6nF>x#-e=XC>TzKK_DI31I>JpfyzN;ihHf0f;zUF5vryC!KsQlF zOgMq=Fg^fd^{eRX43v<%VT9n>A{Ha*n@%!tGtt&##|wYhK~h!DG&~`DD<{?8c!Znj zPv9%QPwFa?12?7bXkCIs+WIGk`2CCCpN#l-TiyRl36N5Gb(-R9e_EjWLy3BNDF%7u z)u(?`rlb_ACy)$wpSm(^))Zl<&9GJG%HQ35f(&pRU?T3iqNU`t1+v^S$U1bkHZWAF z>A0tY+ zY*52WpR0#7M3gr^ezcYN>|gR0LYYoQFG?Sh@zoNS9SZoT>+p#4L`DAy7-=)ZsvOPs z{k@X?L0}D=p{FpqWEKbYd+_<+4X~%-y<&nf(}fA6CEmD*m_PW>-uyZB83s_?cTC*4YXQlJFE5#rLX2RQbrhe~Z z4{9#k_@23Bn?{4lKM}YqS3_)OW7<&HPFGdH=RAfqY+6byWqkR=iqg_$?-=WPM(g*`DTb z(Rw4kk<14Rldx`^n`@9hZ0D1{iB^SXd%!h*$|X-|m}gl3>@rMkin&M3u(3G|n;0H? zJS3-;!`z2bzWwMBRca10NPLV5%p2w(3&8tVi}3ckN5p2{C1zIbDKp4Vd8=0_9rSzd z1#UddM96>{UUW0FpTA~i;AS?5r~K?~>0tp`D^+l*EpT1^+EFbm_@{qEBpenp(sNy< zK%$PV_)4dB3}5Ba;Tq#9eDwDhx!ECWlL3d(t3M?7qu1l&N#$Zn-`7n7a!r?uCNyIJ zqffTq`oARA7zh?`5#LspsfMPN7s03Q9a5i1+prC}*n4W)IW_lO1wWh8Eqk0Y?|}_c zX0+#3H)eU>NA0wDMK<|HL9?Q4b1AG?-KgD#ul-OnGw4W{J>bi$qz+q)FDEK!x-%6%2?#S`yW zE@Oti-y<`*ni!28o3=ji8!9j+>jIb+yg6 zYPZs?`?W8W6yEq0;FT=EPknnqxtTK|rG;8U)g=xSH9cekkBmO@~HOZ`oy^R}0(^2d0)%z7t z=Gpt6+&~6bp>r4A7{9fca}1n3m>I^%cw3eiBF@Jg5M?$t{Rh=K;s&8{%Iq)WrP<>g zGG0(qn$@c2&x24!0o=DG62QF>_tcPnpKrO81y^!9WCE1bU2~0BmA^bJSxts1+%CcG zT(U@|k$JlWx>k(Ucmfz%dd26ITxqAiN3}9t9X@gdi{FrFei@CsYo+&j6kxvSG{#1pt#Lcn!VNvROMes3-HIEqNz9V1F$73|pBf z?%e6`KM2ip?iJ3&ws@3L32=13@yah+En)crJ?Ledy)TpX)b|MecZ)a1^S3)Z0m6#h`&ChpdA(2kSpMzH<)!6q0c| zr6>*;o-kl`<9(0Fw&ro^>57nS0~4P4(bm3&NLe5IPcsraiE@Wk^zq*NvcE9I)zPQC zXI}l2IRF28ysuD_C(}Qvaen?!kJbM-7M*Atf`2DpE&+=3`+weC{y!6+w6p!sR{w|S z{Ljtxf9rALrp5EY$k;WyQG|+$#lP=?QV7PYk8Z2lz}81oKi2knHg7Um{7XL1gj2bR zOG^dD(*1^kxsZ{^b`Lt#MSqUg3HhXuia+_L36}NxK{Oro`>YelY@=ai?%cAG_ zI*-6$8HH#1;s2$FuTprgXnnbJskRc}1Z!9a##clFU;KTS{5D5?`6`xM$~Jo|>U*-0 zX2##&3J>)G4CV;8vO>ltzWgq4h#$BqrC#tN)aM_L+Nz9HEO_Q7l4bclAnzu!^ZOTx zH%n->TN3{=$*%C>KQYe5xyu|BweH_{VY?_v(E|7m$?}(tcLPl!=pf^8(ZAo7{qOf} f%DAH$k2L`xQ;TmJ^9hu?8gcSj4W= literal 15502 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 Dt^yRF delta 13365 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μE@*u#FI5grN3RB|x)61Qu~365=?*!r2G<|( zSN+KE^-ka-m(HK48rM-Z(e^udb=t35gRER$XWK7v@FoT>r8x}Q2A1A_a7js|+zrQ@ z9bn2!j?6*ujH!{(17(E{ro?bjZ|-UOwvK6v93I(Lhie`y7ugaDL%JGJr!J|115nzR zt^o~BqP%TBLxgt^sjTD;Od9MO^H+*@9`ansNbsA&6*YLUqgR?Tw2&)Rk0}*j#YDW# zRlU7$V-7oc1t2#I#P(T8^i~&9lFn09H03*o(!DeyvzM3zo2?jg3rw8pBl~Q{!g&a$ z(4Y5?L@Z?ol?y7Q%kz6yQJ-`<=lyh$0-)-YWw@p|=v%y&U@Ld0cz##K3`GNbyG$Qp zS{=d*&hOPwZs)eI4=SZ5ZwSTvwMNz{?Lf&xJIF^xF*>nwi!*RBR-5y!4kL6h_+e!xr3a)2#6E~MaVy2MK!)X}x3s;8>@dlwJ00XT!@ zz?|1A@oO@u-^XB2wsB7Sztwkdjo@nCiBp)|l_?u`A!wY8C#Vvx#&^nhDwugh1ak8O zE4vq5hB3lR3-U3!m8dNm3(=EnJ`}px>OAN(CZAxtA7skwERH1_3Rc^5-s_57Sys*r zOyNO2a3854@Z!rv0bajDr>xHR+mT%Gvwx*Zx1rY&+r|JpqTQpVKVCGu^cQ8__EV69tSdKyYOoxN!$#% zm4kAd5LBPSHu+BvI7hox-EfFLL2Fedv;P`OV5b;!3!K;VzzqT2zt;DZ8&TY4dTM{( zHMzd#A z75QTBA~jh|m9HGZ|HJ+!@MWJAeBT+ki_W*kWx-40pM2x)9yBHYB?0_AXgvD*>tts~ zvUx29X1u3U8J|JnqghT~(1Vk=XHKf7YAYv$QcC>YCI4?TZgdB^tp;)v{Qu!tOu}gS ah`?DXj?wRIW=tURM_1cGtMnTD$^QfB(null); + const [arrowFan, setArrowFan] = createSignal(null); const [flyT, setFlyT] = createSignal(0); const [toast, setToast] = createSignal(""); const [frame, setFrame] = createSignal(0); @@ -851,6 +874,29 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { else menuRun(row.id); }; + /** The compass key went down: open the legend and take the sticky + * modifiers with it, so ctrl+Left is one gesture. */ + const openArrows = (key: Rect) => { + const mods = kbMods(); + if (mods.length) setKbMods([]); + setArrowFan({ key, dir: null, at: frameCount, fired: 0, mods }); + }; + /** The slide picked a direction. Changing direction restarts the hold, and + * nothing is sent on the way: sliding through a direction must not move + * the cursor. */ + const armArrow = (dir: Direction4 | null) => { + const fan = arrowFan(); + if (!fan || fan.dir === dir) return; + setArrowFan({ ...fan, dir, at: frameCount, fired: 0 }); + }; + /** Released: a flick that never repeated sends its one press. */ + const releaseArrows = () => { + const fan = arrowFan(); + setArrowFan(null); + if (fan && fan.dir && fan.fired === 0) typeKey(DIRECTION_KEYSYM[fan.dir], fan.mods); + }; + const closeArrows = () => setArrowFan(null); + const openKeyFly = (fly: KeyFly) => { setKeyFly(fly); setFlyT(0); @@ -1024,6 +1070,17 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setFlyT(easeProgress(flyT())); moved = true; } + const fan = arrowFan(); + if (fan) { + if (fan.dir) { + const held = frameCount - fan.at; + if (held >= ARROW_HOLD_FRAMES && (held - ARROW_HOLD_FRAMES) % ARROW_REPEAT_FRAMES === 0) { + typeKey(DIRECTION_KEYSYM[fan.dir], fan.mods); + setArrowFan({ ...fan, fired: fan.fired + 1 }); + } + } + moved = true; + } const c = cc(); if (c) { if (ccT() < 1) { @@ -1160,6 +1217,11 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { sheetArm, sheetTap, keyFly, + arrowFan, + openArrows, + armArrow, + releaseArrows, + closeArrows, flyT, openKeyFly, closeKeyFly, diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index aebacfd4b..3ef34e4c8 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -420,6 +420,49 @@ describe("pocket-remote in the sim", () => { expect(sent.some((line) => (line as { t: string }).t === "ptr")).toBe(true); }); + test("the arrow compass sends one press on a flick and repeats when held", async () => { + const { world, store, sent } = await connected(); + tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); + const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; + const from = { x: compass.x + compass.w / 2, y: compass.y + compass.h / 2 }; + + // A flick: press, slide right, release — exactly one Right. + world.frame(0, undefined, [pack(from.x, from.y)]); + expect(store.arrowFan()?.dir).toBeNull(); + for (let i = 1; i <= 4; i += 1) world.frame(0, undefined, [pack(from.x + i * 8, from.y)]); + expect(store.arrowFan()?.dir).toBe("r"); + // Nothing has been sent yet: sliding through a direction must not move + // the cursor. + expect(sent.filter((line) => (line as { t: string }).t === "key").length).toBe(0); + world.frame(0, undefined, []); + for (let i = 0; i < 4; i += 1) world.frame(0); + expect(store.arrowFan()).toBeNull(); + expect(sent.filter((line) => (line as { t: string }).t === "key")).toEqual([{ t: "key", k: "Right" }]); + + // Held down: the first press lands after the hold, then it repeats. + sent.length = 0; + world.frame(0, undefined, [pack(from.x, from.y)]); + for (let i = 0; i < 70; i += 1) world.frame(0, undefined, [pack(from.x, from.y - 30)]); + const ups = sent.filter((line) => (line as { k?: string }).k === "Up"); + expect(ups.length).toBeGreaterThan(3); + expect(ups.length).toBeLessThan(12); + world.frame(0, undefined, []); + for (let i = 0; i < 4; i += 1) world.frame(0); + // The release adds nothing to a hold that already repeated. + expect(sent.filter((line) => (line as { k?: string }).k === "Up").length).toBe(ups.length); + + // A sticky modifier rides along: ctrl then the compass is ctrl+Left. + sent.length = 0; + const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; + tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); + world.frame(0, undefined, [pack(from.x, from.y)]); + for (let i = 1; i <= 4; i += 1) world.frame(0, undefined, [pack(from.x - i * 8, from.y)]); + world.frame(0, undefined, []); + for (let i = 0; i < 4; i += 1) world.frame(0); + expect(sent).toContainEqual({ t: "key", k: "Left", mods: ["ctrl"] }); + expect(store.kbMods()).toEqual([]); + }); + test("a hello that is still pending shows the approval screen", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 8e56d7323..17a05930c 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -53,7 +53,14 @@ import { import { chipAt, chipRects, - HALF_H, + ARROW_CHIP_H, + ARROW_CHIP_W, + ARROW_DEAD_ZONE, + ARROW_HOLD_FRAMES, + ARROW_REPEAT_FRAMES, + arrowDirection, + arrowFanRects, + DIRECTION_KEYSYM, KEYBOARD, keyAt, keyboardKeys, @@ -839,6 +846,9 @@ describe("pocket-remote deck", () => { // Omarchy's grammar lives on SUPER, so the deck carries it. expect(labels).toContain("super"); expect(labels).toContain("return"); + // One arrow key, not four: the compass. + expect(labels.filter((label) => label === "arrows").length).toBe(1); + expect(labels).not.toContain("←"); } expect(TRACKPAD.y + TRACKPAD.h).toBeLessThanOrEqual(SCREEN_H); expect(TRACKPAD.h).toBeGreaterThanOrEqual(96); @@ -853,26 +863,48 @@ describe("pocket-remote deck", () => { expect(keyAt("lower", 240, TRACKPAD.y + 10)).toBeNull(); }); - test("the arrows are a laptop's cluster: left, up over down, right", () => { - const keys = keyboardKeys("lower"); - const left = keys.find((k) => k.def.label === "←")!; - const up = keys.find((k) => k.def.label === "↑")!; - const downKey = keys.find((k) => k.def.label === "↓")!; - const right = keys.find((k) => k.def.label === "→")!; - // All four in the bottom row, in reading order. - for (const key of [left, up, downKey, right]) expect(key.row).toBe(4); - expect(left.x).toBeLessThan(up.x); - expect(up.x).toBeLessThan(right.x); - // Up and down share a column, half height each. - expect(up.x).toBe(downKey.x); - expect(up.w).toBe(downKey.w); - expect(up.h).toBe(HALF_H); - expect(downKey.y).toBeGreaterThan(up.y + up.h); - expect(downKey.y + downKey.h).toBe(left.y + left.h); - // The pair's own gap picks a side rather than sticking to one key. - expect(keyAt("lower", up.x + 4, up.y + 2)).toBe(up); - expect(keyAt("lower", downKey.x + 4, downKey.y + 2)).toBe(downKey); - expect(keyAt("lower", left.x + 4, left.y + 4)).toBe(left); + test("the arrow compass is one wide key whose legend stays on screen", () => { + const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; + expect(compass.def.glyph).toBeTruthy(); + // Wider than a letter and in the bottom row, where a thumb sits. + expect(compass.w).toBeGreaterThan(60); + expect(compass.row).toBe(4); + expect(compass.x + compass.w).toBeLessThanOrEqual(SCREEN_W); + const fan = arrowFanRects(compass); + for (const dir of ["u", "d", "l", "r"] as const) { + const r = fan[dir]; + expect(r.w).toBe(ARROW_CHIP_W); + expect(r.h).toBe(ARROW_CHIP_H); + // The legend lives over the trackpad: the deck's one empty place. + expect(r.x).toBeGreaterThanOrEqual(TRACKPAD.x); + expect(r.x + r.w).toBeLessThanOrEqual(TRACKPAD.x + TRACKPAD.w); + expect(r.y).toBeGreaterThanOrEqual(TRACKPAD.y); + expect(r.y + r.h).toBeLessThanOrEqual(TRACKPAD.y + TRACKPAD.h); + } + // A diamond: up above down, left left of right, sharing centres. + expect(fan.u.y).toBeLessThan(fan.d.y); + expect(fan.l.x).toBeLessThan(fan.r.x); + expect(fan.u.x).toBe(fan.d.x); + expect(fan.l.y).toBe(fan.r.y); + // A key near the right edge still gets a legend inside the pad. + const atEdge = arrowFanRects({ x: SCREEN_W - 40, y: 200, w: 40, h: 32 }); + expect(atEdge.r.x + atEdge.r.w).toBeLessThanOrEqual(TRACKPAD.x + TRACKPAD.w); + }); + + test("the slide picks the direction, and a resting finger picks none", () => { + expect(arrowDirection(0, 0)).toBeNull(); + expect(arrowDirection(ARROW_DEAD_ZONE - 1, ARROW_DEAD_ZONE - 1)).toBeNull(); + expect(arrowDirection(30, 4)).toBe("r"); + expect(arrowDirection(-30, 4)).toBe("l"); + expect(arrowDirection(4, 30)).toBe("d"); + expect(arrowDirection(4, -30)).toBe("u"); + // The dominant axis wins a diagonal. + expect(arrowDirection(40, 30)).toBe("r"); + expect(arrowDirection(20, 40)).toBe("d"); + expect(DIRECTION_KEYSYM).toEqual({ u: "Up", d: "Down", l: "Left", r: "Right" }); + // A repeat is a walking pace: each one is a key press on the laptop. + expect(ARROW_HOLD_FRAMES).toBeGreaterThan(15); + expect(60 / ARROW_REPEAT_FRAMES).toBeLessThan(12); }); test("keys become wire lines: text plain, keysyms under modifiers", () => { diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index 83b19e6a7..2a1f89d56 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -412,6 +412,16 @@ async function shots(outDir: string): Promise { frames(12, [pack(f.x + f.w / 2, f.y + f.h / 2)]); shot("deck-variants"); frames(1); + frames(10); + // the arrow compass, mid-slide + const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; + const cx = compass.x + compass.w / 2; + const cy = compass.y + compass.h / 2; + frames(2, [pack(cx, cy)]); + for (let i = 1; i <= 4; i += 1) frames(2, [pack(Math.round(cx - i * 8), cy)]); + shot("deck-arrows"); + frames(1); + frames(10); // back to the stage, then an empty workspace: the launch bar is fixed, so // there is nothing on the stage but the hint. From 2cd2f3a4616cd072cf3233299fed7916b66e2464 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 12:38:26 -0700 Subject: [PATCH 15/27] =?UTF-8?q?feat(pocket-remote):=20a=20laptop's=20pal?= =?UTF-8?q?m=20rests=20=E2=80=94=20menu=20key,=20click=20button,=20narrowe?= =?UTF-8?q?r=20pad,=20d-pad=20=E2=80=94=20and=20typing=20that=20lands=20wh?= =?UTF-8?q?ere=20it=20aims?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The deck is the C surface read literally now. The trackpad no longer runs edge to edge; what a laptop leaves as palm rest carries the two things a hand wants beside a pad. - Left rest: Omarchy's menu key (the deck's way in, since the ball belongs to the stage) with the CLICK BUTTON under it. Holding the click button keeps the laptop's left button down, so the other finger's travel on the pad drags a selection — the last of the common interactions with no model here, and a laptop's own two-handed gesture rather than an invented one. - Right rest: a d-pad cross of four discrete keys. They fire on the press and repeat while held. The slide-a-direction compass is gone: a cross needs no gesture and nothing aimed at inside it. - Typing accuracy, two corrections rather than bigger keys: the hit regions TILE the keyboard (nearest key by edge distance, so the gaps belong to their neighbours instead of swallowing a press, which is what lets the keys be drawn with 6 px of air instead of 4), and the hit test moves a touch UP a few pixels before assigning it, because a press on a capacitive panel lands below where the eye aimed. A test walks every point over the rows and asserts none resolves to nothing. - ctrl-click works: a virtual pointer carries no modifier state, so the daemon has wtype hold the modifier for a moment and puts the pointer press inside that window. Same for a ctrl-drag with the click button. - The resize corner keeps its 18 px mark but answers a 34 px target that reaches past the tile's edge, lights up while it is dragged (with the tile's own border and face), and is left off tiles under 72 px. - The bottom keyboard row took the compass's width back as space and the two punctuation keys a terminal reaches for. Found on the way, and now written down: the engine draws a rounded box with a coloured border by filling the whole rounded rect with the BORDER colour and insetting the background over it, so a translucent fill inside a border reads as opaque. The held click button is an opaque accent key because of it. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/README.md | 9 +- apps/pocket-remote/deck.tsx | 349 +++++++++++--------- apps/pocket-remote/host/omarchy.ts | 25 ++ apps/pocket-remote/host/serve.ts | 38 ++- apps/pocket-remote/keyboard-layout.ts | 235 ++++++++----- apps/pocket-remote/layout.ts | 28 +- apps/pocket-remote/media/control-centre.png | Bin 15659 -> 15647 bytes apps/pocket-remote/media/deck-arrows.png | Bin 15824 -> 0 bytes apps/pocket-remote/media/deck-dpad.png | Bin 0 -> 16230 bytes apps/pocket-remote/media/deck-drag.png | Bin 0 -> 16032 bytes apps/pocket-remote/media/deck-variants.png | Bin 15364 -> 16552 bytes apps/pocket-remote/media/deck.png | Bin 14883 -> 16064 bytes apps/pocket-remote/media/menu-apps.png | Bin 11388 -> 11354 bytes apps/pocket-remote/media/menu-root.png | Bin 12348 -> 12319 bytes apps/pocket-remote/media/menu-toggle.png | Bin 13358 -> 13339 bytes apps/pocket-remote/media/menu-trigger.png | Bin 12896 -> 12873 bytes apps/pocket-remote/media/popup.png | Bin 13341 -> 13328 bytes apps/pocket-remote/media/stage.png | Bin 13021 -> 13011 bytes apps/pocket-remote/protocol.ts | 7 +- apps/pocket-remote/stage.tsx | 32 +- apps/pocket-remote/store.ts | 104 +++--- tests/pocket-remote-sim.test.ts | 108 ++++-- tests/pocket-remote.test.ts | 168 +++++++--- tools/pocket-remote.ts | 21 +- 24 files changed, 736 insertions(+), 388 deletions(-) delete mode 100644 apps/pocket-remote/media/deck-arrows.png create mode 100644 apps/pocket-remote/media/deck-dpad.png create mode 100644 apps/pocket-remote/media/deck-drag.png diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md index 798796117..823ffa1c4 100644 --- a/apps/pocket-remote/README.md +++ b/apps/pocket-remote/README.md @@ -88,10 +88,11 @@ after a day the strokes are made without looking. **Chords two ways**: sticky modifiers (tap ctrl, then the key; ctrl arms, paints itself, drops after one key) and hold-and-slide variants (hold `x` → `^X` `⌥X`, hold `1` → `F1` `^1`; release on the key itself types it - plain). The **trackpad** is a relative pointer with acceleration: one - finger moves, a tap clicks, two fingers scroll, a two-finger tap is the - right button, a hold picks something up and the button stays down until - the finger lifts. + plain). **The modifiers reach the pointer too**: ctrl then a tap is a + ctrl-click, and ctrl with the click button held is a ctrl-drag. The + **trackpad** is a relative pointer with acceleration: one finger moves, a + tap clicks, two fingers scroll, a two-finger tap is the right button, a + hold picks something up. - **The ball.** Omarchy's menu (SUPER+SPACE) has a handle that floats over everything and lives on a side edge. **Tap it and the menu opens as a sheet** in the middle of the screen: the same rows in the same order with diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx index 22b28d6e3..24c2a2fbe 100644 --- a/apps/pocket-remote/deck.tsx +++ b/apps/pocket-remote/deck.tsx @@ -1,20 +1,23 @@ // SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/deck.tsx — the deck: the laptop's C surface on the -// iPod. Five compact rows of keys over a trackpad, so typing and pointing -// need no mode of their own. Keys go straight to the desktop (wtype) as they -// are pressed; nothing is buffered on the device, so what the desktop shows -// is the truth. A pressed key rises and brightens — no character bubble: on -// a keyboard this compact it covered the row above, and on the top row it -// had to open downwards, which read as a different key lighting up. +// iPod. Five rows of keys, and under them the band a laptop uses the same +// way — Omarchy's menu key and the click button on the left rest, the +// trackpad in the middle, a d-pad cross on the right rest. +// +// Keys go straight to the desktop (wtype) as they are pressed; nothing is +// buffered on the device, so what the desktop shows is the truth. A pressed +// key rises and brightens; the hit regions tile the keyboard and correct for +// where a finger actually lands (keyboard-layout.ts). // // Chords two ways: sticky modifiers (tap ctrl, alt or super, then the key; -// the modifier arms, paints itself, drops after one key) and hold-and-slide -// variants (hold a letter and ^X ⌥X fan out above it; hold a digit for its -// F-key). SUPER is there because Omarchy's own grammar lives on it. +// it arms, paints itself, drops after one key) and hold-and-slide variants +// (hold a letter and ^X ⌥X fan out above it; hold a digit for its F-key). +// The modifiers reach the pointer too: ctrl then a click is a ctrl-click, +// and ctrl with the click key held is a ctrl-drag. // -// The trackpad is a relative pointer: one finger moves, tap clicks, two -// fingers scroll, a two-finger tap is the right button, and a hold picks -// something up — the button stays down until the finger lifts. +// The click key is the drag-select the pad could not model: hold it with one +// thumb and the laptop's left button stays down, so the other finger's +// travel on the pad drags a selection — a laptop's own two-handed gesture. import { createEffect, createSignal, Index, Show } from "solid-js"; import { Text, View } from "@pocketjs/framework/components"; @@ -24,23 +27,22 @@ import { GLYPH } from "./glyphs.ts"; import type { GestureHandlers } from "./handlers.ts"; import { Icon } from "./icons.tsx"; import { - ARROW_CHIP_H, - ARROW_CHIP_W, - arrowDirection, - arrowFanRects, chipAt, chipRects, + CLICK_KEY, + deckTargetAt, DIRECTION_GLYPH, type Direction4, - keyAt, + DPAD_KEYS, keyboardKeys, type KeyAction, type KeyDef, type KeyRect, keyToLine, + MENU_KEY, TRACKPAD, } from "./keyboard-layout.ts"; -import { pointerGain, type Rect, SCROLL_GAIN, stagger, within } from "./layout.ts"; +import { pointerGain, type Rect, SCROLL_GAIN, stagger } from "./layout.ts"; import type { RemoteStore } from "./store.ts"; import { themed } from "./theme.ts"; @@ -99,9 +101,6 @@ function Key(p: { store: RemoteStore; key: KeyRect }) { {p.key.def.label} - - - { @@ -138,53 +137,6 @@ function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; cou ); } -/** - * The arrow compass, drawn while its key is held: four chips in a diamond - * over the key, the armed one filled. A legend, not a set of targets — the - * direction comes from the slide, so a finger never has to reach a chip. - */ -function ArrowFan(p: { store: RemoteStore }) { - const fan = () => p.store.arrowFan()!; - const rects = () => arrowFanRects(fan().key); - const dirs: Direction4[] = ["u", "l", "r", "d"]; - return ( - <> - - {(dir) => { - const armed = () => fan().dir === dir(); - const r = () => rects()[dir()]; - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - jump(root, "insetL", r().x); - jump(root, "insetT", r().y); - jump(root, "scale", armed() ? 1.1 : 1); - jump(root, "opacity", armed() ? 1 : 0.85); - }); - return ( - { - root = node; - themed(() => (armed() ? "accentFill" : "fgFill"))(node); - }} - > - - {DIRECTION_GLYPH[dir()]} - - - ); - }} - - - ); -} - function Keyboard(p: { store: RemoteStore }) { const keys = () => keyboardKeys(p.store.kbLayer()); return ( @@ -202,9 +154,93 @@ function Keyboard(p: { store: RemoteStore }) { } // --------------------------------------------------------------------------- -// trackpad +// the band: menu, click, trackpad, d-pad // --------------------------------------------------------------------------- +function MenuButton(p: { store: RemoteStore }) { + return ( + { + themed("surface")(node); + themed("borderMuted")(node); + }} + > + + + + ); +} + +/** + * The click button: a tap is a click, and holding it keeps the laptop's left + * button down so the other finger's travel on the pad drags a selection. + * + * Held, it fills with the accent rather than tinting: a rounded node with a + * coloured border is drawn by filling the whole rounded box with the BORDER + * colour and insetting the background over it (engine draw.rs), so a + * translucent fill inside a border shows the border's colour through it. + */ +function ClickButton(p: { store: RemoteStore }) { + const held = () => p.store.clickHeld(); + return ( + { + themed(() => (held() ? "accentFill" : "surface"))(node); + themed(() => (held() ? "accentFill" : "borderMuted"))(node); + }} + > + (held() ? "textOnAccent" : "text"))} + > + {held() ? "held" : "click"} + + + + ); +} + +function DpadCross(p: { store: RemoteStore }) { + const dirs: Direction4[] = ["u", "l", "r", "d"]; + return ( + + {(dir) => { + const r = DPAD_KEYS[dir()]; + const down = () => p.store.dpad()?.dir === dir(); + return ( + { + themed(() => (down() ? "accentFill" : "surface"))(node); + themed(() => (down() ? "accentFill" : "borderMuted"))(node); + }} + > + (down() ? "textOnAccent" : "text"))} + > + {DIRECTION_GLYPH[dir()]} + + + ); + }} + + ); +} + function Trackpad(p: { store: RemoteStore }) { const target = () => { const c = p.store.focusClass(); @@ -212,10 +248,17 @@ function Trackpad(p: { store: RemoteStore }) { const prefix = mods.length ? `${mods.join(" + ")} + ` : ""; return c ? `${prefix}${c}` : `${prefix}no focused window`; }; + const hint = () => + p.store.clickHeld() + ? "held · slide to select" + : p.store.pressed() === "pad:drag" + ? "dragging · lift to drop" + : "tap · two fingers scroll"; + const lit = () => p.store.clickHeld() || p.store.pressed() === "pad:drag"; return ( { themed("surface")(node); - themed(() => (p.store.pressed() === "pad:drag" ? "borderAccent" : "borderMuted"))(node); + themed(() => (lit() ? "borderAccent" : "borderMuted"))(node); }} > - {/* The caption stands down while the compass's legend is up: the pad - is the only empty place on the deck and they were sharing it. */} - - - slide a direction · hold to repeat - - - } - > - - - - - - {target()} - - - - - {p.store.pressed() === "pad:drag" ? "dragging · lift to drop" : "tap · two fingers scroll · hold to drag"} - - - + + + + + + {target()} + + + + + {hint()} + + ); } @@ -262,12 +292,10 @@ export function Deck(p: { store: RemoteStore }) { + + - {/* after the pad: the compass's legend is drawn over it, and paint - order among absolute siblings is document order */} - - - + ); @@ -285,12 +313,14 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { // for the rest of its life: scroll while they move, the right button if // they lift without moving. const pads = new Map(); - /** The compass key is down: this contact steers rather than types. */ - let steering = false; let twoFinger = false; let twoFingerMoved = false; let leader: number | null = null; let dragging = false; + /** Contacts that own one of the band's buttons. */ + let clicker: number | null = null; + let steering: { id: number; dir: Direction4 } | null = null; + let menuing: number | null = null; const send = (act: KeyAction) => { const mods = store.kbMods(); @@ -304,7 +334,6 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { const press = (key: KeyRect) => { const act = key.def.act; - if ("pad" in act) return; // the compass acts on its own slide if ("layer" in act) { store.setKbLayer(act.layer); return; @@ -319,36 +348,47 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { if ("ch" in act && store.kbLayer() === "upper") store.setKbLayer("lower"); }; - const onPad = (x: number, y: number) => within(x, y, TRACKPAD); - return { onDown: (c) => { holding = false; - if (onPad(c.x, c.y)) { - setDown(null); - pads.set(c.id, { moved: false }); - if (pads.size >= 2) { - twoFinger = true; - twoFingerMoved = false; - } else { - leader = c.id; - } - store.pressDown(dragging ? "pad:drag" : "pad"); - return; - } - const key = keyAt(store.kbLayer(), c.x, c.y); - setDown(key); - store.pressDown(key ? `key:${key.row}:${key.col}` : null); - if (key && "pad" in key.def.act) { - steering = true; - store.openArrows({ x: key.x, y: key.y, w: key.w, h: key.h }); + const target = deckTargetAt(store.kbLayer(), c.x, c.y); + setDown(null); + switch (target.kind) { + case "pad": + pads.set(c.id, { moved: false }); + if (pads.size >= 2) { + twoFinger = true; + twoFingerMoved = false; + } else { + leader = c.id; + } + store.pressDown(dragging ? "pad:drag" : "pad"); + return; + case "menu": + menuing = c.id; + store.pressDown("deck:menu"); + return; + case "click": + // The button goes down with the finger: a tap is a click, and a + // hold leaves it down for the other finger to drag with. + clicker = c.id; + store.pressDown("deck:click"); + store.dragButton(true); + return; + case "dpad": + steering = { id: c.id, dir: target.dir }; + store.pressDown(`dpad:${target.dir}`); + store.dpadDown(target.dir); + return; + case "key": + setDown(target.key); + store.pressDown(`key:${target.key.row}:${target.key.col}`); + return; + default: + store.pressDown(null); } }, onMove: (c) => { - if (steering) { - store.armArrow(arrowDirection(c.dx, c.dy)); - return; - } const pad = pads.get(c.id); if (pad) { if (c.fdx === 0 && c.fdy === 0) return; @@ -371,10 +411,12 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); }, onTap: (c) => { - if (steering) return; // the compass has already answered on release - if (pads.has(c.id)) { - // The tap resolves at the last finger's up (below); a two-finger - // tap must not also click twice. + // The pad, the click key and the d-pad all answer on release. + if (pads.has(c.id) || clicker === c.id || steering?.id === c.id) return; + if (menuing === c.id) { + menuing = null; + store.pressRelease(); + store.openSheet(); return; } const key = down(); @@ -383,10 +425,10 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { setDown(null); }, onLongPress: (c) => { - if (steering) return; // holding the compass is how it repeats + if (clicker === c.id || steering?.id === c.id || menuing === c.id) return; const pad = pads.get(c.id); if (pad) { - if (twoFinger || pad.moved || dragging) return; + if (twoFinger || pad.moved || dragging || store.clickHeld()) return; dragging = true; store.dragButton(true); store.pressDown("pad:drag"); @@ -399,11 +441,24 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.openKeyFly({ key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); }, onPanStart: (c) => { - if (pads.has(c.id) || holding || steering) return; + if (pads.has(c.id) || holding || clicker === c.id || steering?.id === c.id) return; store.pressDown(null); setDown(null); + menuing = null; }, onUp: (c) => { + if (clicker === c.id) { + clicker = null; + store.dragButton(false); + store.pressRelease(); + return; + } + if (steering?.id === c.id) { + steering = null; + store.dpadUp(); + store.pressRelease(); + return; + } const pad = pads.get(c.id); if (pad) { pads.delete(c.id); @@ -413,7 +468,9 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { twoFinger = false; } else if (dragging) { store.dragButton(false); - } else if (!pad.moved && c.frames < 20) { + } else if (!pad.moved && c.frames < 20 && !store.clickHeld()) { + // With the click key's button already down, a tap on the pad + // would be a second press rather than a click. store.click("l"); } dragging = false; @@ -424,13 +481,6 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { } return; } - if (steering) { - store.releaseArrows(); - steering = false; - setDown(null); - store.pressRelease(); - return; - } if (holding) { const chosen = store.keyRelease(); const key = down(); @@ -442,10 +492,15 @@ export function deckHandlers(store: RemoteStore): GestureHandlers { store.pressRelease(); }, onCancel: (c) => { - if (steering) { - store.closeArrows(); - steering = false; + if (clicker === c.id) { + clicker = null; + store.dragButton(false); + } + if (steering?.id === c.id) { + steering = null; + store.dpadUp(); } + menuing = null; if (pads.delete(c.id) && pads.size === 0) { if (dragging) store.dragButton(false); dragging = false; diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts index fbdbdd329..57b6b5f04 100644 --- a/apps/pocket-remote/host/omarchy.ts +++ b/apps/pocket-remote/host/omarchy.ts @@ -266,6 +266,31 @@ export function typeText(text: string, log: Log): void { runDetached(["wtype", "--", clipped], log); } +/** + * Hold modifiers for `ms`, so a pointer click can happen inside them: a + * virtual pointer carries no modifier state of its own, and wtype's own + * process is the only thing on the machine that can keep one down (`-M` + * presses, `-s` sleeps, `-m` releases). Returns false for a modifier that + * is not allowed. + */ +export function holdModifiers(mods: readonly string[], ms: number, log: Log): boolean { + const unique = [...new Set(mods)]; + if (unique.length === 0) return false; + if (unique.some((m) => !MODIFIERS.has(m))) return false; + const hold = Math.max(50, Math.min(2000, Math.round(ms))); + runDetached( + [ + "wtype", + ...unique.flatMap((m) => ["-M", m]), + "-s", + String(hold), + ...unique.slice().reverse().flatMap((m) => ["-m", m]), + ], + log, + ); + return true; +} + export function pressKey(key: string, log: Log, mods: readonly string[] = []): boolean { const args = wtypeArgs(key, mods); if (!args) return false; diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts index 5cc65b621..48e002464 100644 --- a/apps/pocket-remote/host/serve.ts +++ b/apps/pocket-remote/host/serve.ts @@ -50,6 +50,7 @@ import { pressKey, appForClass, type AppIndex, + holdModifiers, readAppIndex, readLevels, readMedia, @@ -222,6 +223,16 @@ let apps: AppIndex = { apps: [], byClass: new Map() }; let menuEntries = loadMenu(); let menuBusy = false; const pointer = new Pointer(undefined, log); +/** How long a modifier is held around a pointer press, and how long the + * press waits for it to land. A press is one round trip on the same + * machine; 40 ms is generous and invisible. */ +const MODIFIER_HOLD_MS = 400; +const MODIFIER_DRAG_MS = 1500; +const MODIFIER_SETTLE_MS = 40; + +function modifiersOf(value: unknown): string[] { + return Array.isArray(value) ? value.filter((m): m is string => typeof m === "string") : []; +} let snapshotTimer: ReturnType | null = null; let snapshotBusy = false; let snapshotDirty = false; @@ -535,18 +546,39 @@ async function handle(conn: Conn, line: ClientLine): Promise { if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.move(dx, dy); return; } - case "click": - if (line.b === "l" || line.b === "r" || line.b === "m") pointer.click(line.b); + case "click": { + if (line.b !== "l" && line.b !== "r" && line.b !== "m") return; + const mods = modifiersOf(line.mods); + if (mods.length === 0) { + pointer.click(line.b); + return; + } + // The modifier has to be down while the button goes down, and the + // pointer cannot hold one: wtype keeps it for a moment and the click + // lands inside that window. + if (holdModifiers(mods, MODIFIER_HOLD_MS, log)) { + const button = line.b; + setTimeout(() => pointer.click(button), MODIFIER_SETTLE_MS); + } else { + pointer.click(line.b); + } return; + } case "scroll": { const dx = Number(line.dx); const dy = Number(line.dy); if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.scroll(dx, dy); return; } - case "drag": + case "drag": { + const mods = modifiersOf(line.mods); + if (line.on === 1 && mods.length && holdModifiers(mods, MODIFIER_DRAG_MS, log)) { + setTimeout(() => pointer.button("l", true), MODIFIER_SETTLE_MS); + return; + } pointer.button("l", line.on === 1); return; + } case "wifi": setWifi(line.on === 1, log); setTimeout(() => void refreshCc(), 1500); diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts index 8011a61ed..e764a2bcd 100644 --- a/apps/pocket-remote/keyboard-layout.ts +++ b/apps/pocket-remote/keyboard-layout.ts @@ -1,28 +1,39 @@ // SPDX-License-Identifier: GPL-3.0-or-later // apps/pocket-remote/keyboard-layout.ts — the deck's geometry and key table -// with no Solid in it: the keyboard's five rows over the trackpad (the -// laptop's C surface, upside up), keysym names, hold-and-slide variants, -// chip placement, and the key -> wire-line mapping. deck.tsx renders and -// handles; tests import this file bare (bun test cannot load the app's .tsx -// through the Solid transform). +// with no Solid in it: the keyboard's five rows, the palm-rest band under +// them (menu key, click key, trackpad, d-pad), keysym names, hold-and-slide +// variants, and the key -> wire-line mapping. deck.tsx renders and handles; +// tests import this file bare (bun test cannot load the app's .tsx through +// the Solid transform). // -// The arrows are ONE key. Four keys sharing the width of two were each too -// small to hit on a 480 px panel, so pressing the arrow key fans a compass -// out above it and the SLIDE picks the direction — no aiming, and holding a -// direction repeats it, which is what an arrow key is for. Vector, not -// target: the legend shows what is armed, the finger does not have to reach -// it. +// The band under the keyboard is a laptop's C surface read literally: the +// trackpad does not run edge to edge, and what a laptop leaves as palm rest +// carries the two things a hand wants beside a pad — Omarchy's menu on the +// left with the click button under it, a d-pad cross on the right. Four +// discrete arrow keys beat the slide-a-direction compass they replace: no +// gesture to learn and nothing to aim inside. +// +// TYPING ACCURACY. Two cheap, well-worn corrections, because the visual gaps +// a keyboard wants and the target sizes a finger wants are not the same +// thing: +// 1. Hit regions TILE the keyboard. A touch goes to the key whose +// rectangle it is nearest (zero inside), not to a rectangle it must +// land inside, so the gaps between keys belong to their neighbours +// instead of swallowing a press. Keys can then be drawn with generous +// gaps — 6 px here, up from 4 — without shrinking what a finger hits. +// 2. A downward BIAS correction. On a capacitive panel a press lands below +// where the eye aimed (the contact patch grows towards the palm), so +// the hit test moves the touch up a few pixels before assigning it. +// Both are what the platform keyboards do, and neither costs a frame. // // SUPER is a sticky modifier like ctrl and alt, so Omarchy's own bindings // are reachable from the deck: super then space opens its menu on the // laptop, super then 1..9 switches workspace. import { GLYPH } from "./glyphs.ts"; -import { type Rect, SCREEN_H, SCREEN_W, STRIP } from "./layout.ts"; +import { type Rect, SCREEN_H, SCREEN_W, STRIP, within } from "./layout.ts"; import type { Modifier } from "./protocol.ts"; -const ARROWS_GLYPH = GLYPH.arrows; - export type KbLayer = "lower" | "upper" | "sym"; /** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ @@ -32,32 +43,83 @@ export interface KeyVariant { mods: Modifier[]; } -/** Five rows of 32 px keys on a 36 px pitch, starting under the strip. */ +/** Five rows on a 36 px pitch: 30 px of key and 6 px of gap. */ export const ROWS_TOP = STRIP.h + 4; export const ROW_PITCH = 36; -export const KEY_H = 32; +export const KEY_H = 30; export const ROW_COUNT = 5; +/** Horizontal inset per key: 3 px a side, so 6 px between two keys. */ +const KEY_INSET = 3; /** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ const UNIT = 44; const TOP_UNIT = 40; -export const KEYBOARD: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: ROWS_TOP - STRIP.h + ROW_COUNT * ROW_PITCH }; -/** The trackpad fills what the keyboard leaves. */ -export const TRACKPAD: Rect = { x: 4, y: KEYBOARD.y + KEYBOARD.h, w: SCREEN_W - 8, h: SCREEN_H - 4 - (KEYBOARD.y + KEYBOARD.h) }; +export const KEYBOARD: Rect = { + x: 0, + y: STRIP.h, + w: SCREEN_W, + h: ROWS_TOP - STRIP.h + (ROW_COUNT - 1) * ROW_PITCH + KEY_H, +}; -/** The four directions the compass key can send. */ -export type Direction4 = "u" | "d" | "l" | "r"; +// --------------------------------------------------------------------------- +// the band under the keyboard: menu | click | trackpad | d-pad +// --------------------------------------------------------------------------- + +export const BAND: Rect = { + x: 0, + y: KEYBOARD.y + KEYBOARD.h + 4, + w: SCREEN_W, + h: SCREEN_H - (KEYBOARD.y + KEYBOARD.h + 4) - 4, +}; +/** Left rest: Omarchy's menu above, the click button below. */ +export const MENU_KEY: Rect = { x: 4, y: BAND.y, w: 72, h: Math.round(BAND.h / 2) - 3 }; +export const CLICK_KEY: Rect = { x: 4, y: MENU_KEY.y + MENU_KEY.h + 6, w: 72, h: BAND.h - MENU_KEY.h - 6 }; +/** The pad itself: narrower than the panel, like a laptop's. */ +export const TRACKPAD: Rect = { x: 82, y: BAND.y, w: 286, h: BAND.h }; +/** Right rest: the d-pad cross. */ +export const DPAD: Rect = { x: 374, y: BAND.y, w: 102, h: BAND.h }; +export type Direction4 = "u" | "d" | "l" | "r"; export const DIRECTION_KEYSYM: Record = { u: "Up", d: "Down", l: "Left", r: "Right" }; export const DIRECTION_GLYPH: Record = { u: "↑", d: "↓", l: "←", r: "→" }; -export type KeyAction = - | { ch: string } - | { key: string } - | { layer: KbLayer } - | { mod: Modifier } - /** The arrow compass: press, slide a direction, hold to repeat. */ - | { pad: true }; +const DPAD_KEY_W = 34; +const DPAD_KEY_H = Math.floor((DPAD.h - 8) / 3); + +/** The cross: up and down in the middle column, left and right beside it. */ +export const DPAD_KEYS: Record = (() => { + const cx = DPAD.x + Math.round(DPAD.w / 2); + const cy = DPAD.y + Math.round(DPAD.h / 2); + const midY = cy - Math.round(DPAD_KEY_H / 2); + const left = cx - Math.round(DPAD_KEY_W / 2); + return { + u: { x: left, y: midY - DPAD_KEY_H - 4, w: DPAD_KEY_W, h: DPAD_KEY_H }, + d: { x: left, y: midY + DPAD_KEY_H + 4, w: DPAD_KEY_W, h: DPAD_KEY_H }, + l: { x: left - DPAD_KEY_W - 3, y: midY, w: DPAD_KEY_W, h: DPAD_KEY_H }, + r: { x: left + DPAD_KEY_W + 3, y: midY, w: DPAD_KEY_W, h: DPAD_KEY_H }, + }; +})(); + +/** Frames a d-pad key must be held before it repeats, and the frames + * between repeats. Each repeat is one key press on the laptop, so the rate + * is a walking pace rather than a keyboard's. */ +export const ARROW_HOLD_FRAMES = 20; +export const ARROW_REPEAT_FRAMES = 7; + +/** Which d-pad key a point is on, with slack around the cross. */ +export function dpadAt(x: number, y: number): Direction4 | null { + for (const dir of ["u", "d", "l", "r"] as const) { + const r = DPAD_KEYS[dir]; + if (within(x, y, { x: r.x - 4, y: r.y - 4, w: r.w + 8, h: r.h + 8 })) return dir; + } + return null; +} + +// --------------------------------------------------------------------------- +// the keys +// --------------------------------------------------------------------------- + +export type KeyAction = { ch: string } | { key: string } | { layer: KbLayer } | { mod: Modifier }; export interface KeyDef { label: string; @@ -112,8 +174,8 @@ const TOP_ROW: KeyDef[] = [ /** Return closes the home row, where a keyboard puts it. */ const RETURN: KeyDef = { label: "return", w: 1.75, act: { key: "Return" }, dark: true }; -/** The bottom row: the layer switch, the modifiers, tab, space, and the - * arrow cluster. 10.25 units, the same width as the row above. */ +/** The bottom row: the layer switch, the modifiers, tab, space, and the two + * punctuation keys a terminal reaches for. The arrows are the d-pad now. */ const bottomRow = (layer: KbLayer): KeyDef[] => [ { label: layer === "sym" ? "abc" : "123", w: 1, act: { layer: layer === "sym" ? "lower" : "sym" }, dark: true }, { label: "ctrl", w: 1, act: { mod: "ctrl" }, dark: true }, @@ -121,7 +183,8 @@ const bottomRow = (layer: KbLayer): KeyDef[] => [ { label: "super", w: 1, act: { mod: "super" }, dark: true }, { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, { label: "space", w: 3.75, act: { key: "space" } }, - { label: "arrows", w: 1.5, act: { pad: true }, dark: true, glyph: ARROWS_GLYPH }, + { label: "-", w: 0.75, act: { ch: "-" } }, + { label: "/", w: 0.75, act: { ch: "/" } }, ]; const ROWS: Record = { @@ -175,7 +238,7 @@ function layoutRow(row: KeyDef[], r: number, unit: number): KeyRect[] { const y = ROWS_TOP + r * ROW_PITCH; return row.map((def, c) => { const w = Math.round(def.w * unit); - const rect = { x: x + 2, y, w: w - 4, h: KEY_H, def, row: r, col: c }; + const rect = { x: x + KEY_INSET, y, w: w - 2 * KEY_INSET, h: KEY_H, def, row: r, col: c }; x += w; return rect; }); @@ -195,60 +258,74 @@ export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { return LAYOUTS[layer]; } -/** The key under a point, with the gaps between keys belonging to their - * nearer neighbour so a finger never falls between two. */ -export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { - for (const key of LAYOUTS[layer]) { - if (x >= key.x - 2 && x < key.x + key.w + 2 && y >= key.y - 2 && y < key.y + key.h + 2) return key; - } - return null; -} - // --------------------------------------------------------------------------- -// the arrow compass +// hit testing // --------------------------------------------------------------------------- -/** Travel before a slide counts as a direction. Below it, nothing is armed - * and a release sends nothing. */ -export const ARROW_DEAD_ZONE = 14; -export const ARROW_CHIP_W = 38; -export const ARROW_CHIP_H = 30; -const ARROW_CHIP_GAP = 4; -/** Frames a direction must be held before it starts repeating, and the - * frames between repeats after that. Each repeat is one key press on the - * laptop, so the rate is a walking pace rather than a keyboard's. */ -export const ARROW_HOLD_FRAMES = 22; -export const ARROW_REPEAT_FRAMES = 8; +/** How far up the hit test moves a touch before assigning it: a press on a + * capacitive panel lands below where the eye aimed. */ +export const TOUCH_BIAS_Y = 3; +/** A row change is a worse mistake than a column change, so vertical + * distance counts for more when the nearest key is chosen. */ +const VERTICAL_WEIGHT = 1.7; +/** How far outside a key a touch may still be claimed by it. */ +const HIT_REACH = 16; + +/** Distance from a point to a rectangle's edge: zero inside it. */ +function edgeDistance(x: number, y: number, r: Rect): { dx: number; dy: number } { + return { + dx: Math.max(0, Math.abs(x - (r.x + r.w / 2)) - r.w / 2), + dy: Math.max(0, Math.abs(y - (r.y + r.h / 2)) - r.h / 2), + }; +} /** - * The compass's four chips as a diamond, drawn over the TRACKPAD rather than - * over the keys: the pad is the one empty place on the deck, so the legend - * covers nothing that matters and sits right under the thumb holding the - * key. It is a legend — the finger picks by direction, not by touching one — - * so only its association with the key matters, and that comes from being - * under it. + * The key a touch means. Hit regions tile the keyboard: the nearest key by + * edge distance wins, so the gaps between keys belong to their neighbours + * instead of swallowing the press. The touch is moved up by TOUCH_BIAS_Y + * first (see the note at the top of this file). */ -export function arrowFanRects(key: Rect, pad: Rect = TRACKPAD): Record { - const spanW = 3 * ARROW_CHIP_W + 2 * ARROW_CHIP_GAP; - const stepX = ARROW_CHIP_W + ARROW_CHIP_GAP; - const stepY = ARROW_CHIP_H + ARROW_CHIP_GAP; - const cx = Math.max(pad.x + 4 + spanW / 2, Math.min(pad.x + pad.w - 4 - spanW / 2, key.x + key.w / 2)); - const cy = pad.y + pad.h / 2; - const at = (dx: number, dy: number): Rect => ({ - x: Math.round(cx - ARROW_CHIP_W / 2 + dx * stepX), - y: Math.round(cy - ARROW_CHIP_H / 2 + dy * stepY), - w: ARROW_CHIP_W, - h: ARROW_CHIP_H, - }); - return { u: at(0, -1), d: at(0, 1), l: at(-1, 0), r: at(1, 0) }; +export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { + const ay = y - TOUCH_BIAS_Y; + // The reach must not spill into the band: those controls are fixed and a + // press on the pad is never a keystroke. + if (ay >= BAND.y) return null; + let best: KeyRect | null = null; + let bestScore = Infinity; + for (const key of LAYOUTS[layer]) { + const { dx, dy } = edgeDistance(x, ay, key); + if (dx > HIT_REACH || dy > HIT_REACH) continue; + const score = dx * dx + dy * dy * VERTICAL_WEIGHT; + if (score < bestScore) { + bestScore = score; + best = key; + } + } + return best; } -/** The direction a slide has chosen: the dominant axis once it is past the - * dead zone, or null while the finger has barely moved. */ -export function arrowDirection(dx: number, dy: number): Direction4 | null { - if (Math.abs(dx) < ARROW_DEAD_ZONE && Math.abs(dy) < ARROW_DEAD_ZONE) return null; - if (Math.abs(dx) >= Math.abs(dy)) return dx > 0 ? "r" : "l"; - return dy > 0 ? "d" : "u"; +/** What a touch on the deck means: the band's own controls first (they are + * fixed, and the keyboard's hit regions reach past its own edge), then a + * key. */ +export type DeckTarget = + | { kind: "menu" } + | { kind: "click" } + | { kind: "pad" } + | { kind: "dpad"; dir: Direction4 } + | { kind: "key"; key: KeyRect } + | { kind: "none" }; + +export function deckTargetAt(layer: KbLayer, x: number, y: number): DeckTarget { + if (y >= BAND.y - 2) { + if (within(x, y, MENU_KEY)) return { kind: "menu" }; + if (within(x, y, CLICK_KEY)) return { kind: "click" }; + if (within(x, y, TRACKPAD)) return { kind: "pad" }; + const dir = dpadAt(x, y); + if (dir) return { kind: "dpad", dir }; + return { kind: "none" }; + } + const key = keyAt(layer, x, y); + return key ? { kind: "key", key } : { kind: "none" }; } /** Variant chip geometry: above the key, or below it for the top row. */ @@ -283,5 +360,5 @@ export function keyToLine( return k ? { t: "key", k, mods } : null; } if ("key" in act) return mods.length ? { t: "key", k: act.key, mods } : { t: "key", k: act.key }; - return null; // a layer switch, a modifier and the compass send nothing here + return null; // a layer switch and a modifier send nothing here } diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts index f3918f105..59d7936e6 100644 --- a/apps/pocket-remote/layout.ts +++ b/apps/pocket-remote/layout.ts @@ -74,21 +74,35 @@ export const TILE_TWO_LINES_H = 40; /** Fixed pool of tile slots (protocol WINDOWS_MAX). */ export const TILE_SLOTS = 24; -/** The corner a drag resizes the window by. Tiles too small to carry it - * keep their whole face for focus and the hold. */ +/** The corner a drag resizes the window by: what it looks like, and how far + * around it a finger counts. The reach is what makes it usable — the mark + * is 18 px because a bigger one would cover the tile's own content, while + * the target it stands for is 34 px square. */ export const TILE_GRIP = 18; -export const TILE_GRIP_MIN = 52; +export const TILE_GRIP_REACH = 16; +/** Tiles smaller than this carry no corner: their whole face is worth more + * as focus and hold than as a resize handle. */ +export const TILE_GRIP_MIN = 72; export function tileGripRect(tile: Rect): Rect { return { x: tile.x + tile.w - TILE_GRIP, y: tile.y + tile.h - TILE_GRIP, w: TILE_GRIP, h: TILE_GRIP }; } -/** Whether the point is on a tile's resize corner, with a few px of slack - * outside the tile so the very corner is reachable. */ +/** The corner's touch target: the mark, grown by TILE_GRIP_REACH up and to + * the left and a little past the tile's own edge. */ +export function tileGripTarget(tile: Rect): Rect { + const grip = tileGripRect(tile); + return { + x: grip.x - TILE_GRIP_REACH, + y: grip.y - TILE_GRIP_REACH, + w: grip.w + TILE_GRIP_REACH + 4, + h: grip.h + TILE_GRIP_REACH + 4, + }; +} + export function tileGripHit(x: number, y: number, tile: Rect): boolean { if (tile.w < TILE_GRIP_MIN || tile.h < TILE_GRIP_MIN) return false; - const grip = tileGripRect(tile); - return within(x, y, { x: grip.x - 2, y: grip.y - 2, w: grip.w + 6, h: grip.h + 6 }); + return within(x, y, tileGripTarget(tile)); } /** One of the launch bar's equal cells. */ diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png index 61a8ab453011ee39716e1b16c8154f7c99902112..e99fb8446fea0db363ef20676778712e93aeeb01 100644 GIT binary patch literal 15647 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 w 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 literal 15659 zcmc(`XIN8R*Dkt}KmyW5dPnIkfb^~cqBKPXq=k;sr6VO2L8VI<>BT~oE;XVQ0YQ3~ zKpq6?ozTyUKJT~B`OZG&y7rI#BR{g%nq|#7#~Am0kFj3p>uOS5V7>qV0EO1g8+QQ! zf(3u7ByjMGO;`C-08rf4x}kQ@7qXW5JCSW9{nsG}`Q(qguRh$m`@UfC?z2%rx`!9E z?s3Im;35r==lK|B^p%@SnhVwj?_ivUOO2yY`c%?IQz1`TYY}xy-cz*J3T@)Oy^&d2 zhe+HK)q2)*%1D*07kpA13)3Y{GN~Eq_D_`+?|6C0`E7qcXlf1UmrM8i#vqzm%0G!# zR^`Z{`hi%2?HyrwuFA5o1^(xfFnn`qeQ3FMF(_ZRd1ukIO?h0V^hEu3#&=axqcdKo_p?fRA3@GqgaCNhUf>NyvNYX<_%gR<{z6ch`W#uGwrduXUU@}5Gp*(vt5vbCDP*f;Mv zR`)Vl`yL%Fyd7Ef};rquuq#FB(5G+oYRFA^k$%a(I`nS+BNd z<7f0lp-nAz>?e*v!a1W*m#Cs0UD6QnVQ2MSx67jU%s^3C&Blbm&582; z_uH0B_ke&6!}Hva0jn6f9Uut*J^0Qs`-#hy6AN#6K#%j{@Ia&ay+oO;vMaE46X_2r zA{n)sHEa*aRM#rAX)? z9A^W&tCjrNNU_?RN>6?iP>=$f9XlCS7W{e?t+NXYw{n)sQ1U^Br-|* zgAIZ}la-r&UU@a`J{Njtg2`E;N5@-H)Ta4RPkwZ|%=WQ|mW*xD)cxe`GBW1PcJKRu z?-YJ!d5x^~1$5Bb{%2Gu9X4vVziBh`EafsqG;u9Q&Ck;Tp@4TWlE*3j2M9hZ$%D5qSxh!^2=NId}3_J)}LN|7*SGB4&c^l z`ijM1SB9ANe`>tk))$p{DFKPjK&Yn0^qQi*Nilxt*FH}z%3bNvWfS!>m2|3t`d`nB zM@@&uDW{fl%w#H68V1Iy3{T?NWo^FXTX!;_zhx65#Tdozjk7OA__KN0rq2lvN}2`w znXaKs<PZ^;0JyPIYZS*2{N3SU7e2 zN0~b=%ezDt?QR{rcQ?X3F5dcj%DSx?6zeVQIL2nSBE0kg676omM5Rl1*N=tf4Pze# zU!UX)f!h-fNQp92Y4iXvpqfB@9UtSe7tdmB#*IGRe=qFJA~UkJPd?6-wG`j(jpnXx zf3n*|8jS-w&iy-HN{iT5%cq#bYlm`0rfk_#rJWB17tG+M4Cn-brmcN3ZoD#nJmdY; z;-ee$)kkJLL8*|NNiVhw)RHN%_3@wbx$H_+M*Prr4At4n$%V~YG8HY_8!y_<8NJ(F zZ&u!&7VeSO0!DkTH^skYd&qWsRxjd{4GE;pbw8Gl0|s|Ml%H6wlbVj5noyNgjhWC9NerRKd)m+{atYO#84X;qs`f&%wL*kte65uC5>sUBCAzG zc>N2JDMI3a^F5bWRnYpGkGrQ8W)Dv;NJ)E2?D(B@jeUV3vyPL~e{^#ADS4oJ2A|t( zUk^A^;T8GH)=a`_tN1B-()PXIGDr4}2zasH8A)lvr(ISg#OZv`nUAR|S?=<49=r&k z!J_^&Nz`&WsWUsg>jKuhbMWAcxO<}5)Lhz4=ynSZqiOri-%ATlZa1?xAFLCg7D*>I z{|<^_+@ZtIyJn@***M>DAg@=Tdu};T^oD_Y{Srn?u#t>;uX9F}nT?sbFgU!vmA{KBFc8JjE%}6x8!YZ0RDXw+E`0pUw)do%lQe>J%OXsJyU#?mVvC z(?}7}9NR#GWd$_GJnp)6Uo5DU=9VqfZt14=bb=t4<0AOI5b;AD!GW$e(k(A5oq)wa zy25B;Zhre`Vzu9o_+Q19BmXJpKTRAn`=MUBpxe>^ff?54k-Fr6cu$GLnx6&Zr_zz5 z*Cmiwy?rPSSNR$zUY*6}Y;%!bMN@V}>rn1msKUk~Nn+NXI+b3+A{xA4_xV0%tkXPN zP+2qWeqlf?wFR1A;aENW?pa>pmqPni{;D#n$wqVKk#vgPm9UcPZn4X`PE*R)ms(Z6 zljaE>aR;296jhZ?n89iwjGfDj7+d?#{6gkuVDKy?7D%EKYwd+6dH$Ip6Lm`(X=EXL z|J+nSOdyeXpFonMkv;tzspIcN*mRGhTOr79Rbzw9r$GYL8ch7f9~#F;eO{EM>Lm}b z#klKpgn7Q=m@{?n+hwa|8w^|H6p29SC$hG)nbP$KY*3`~S)9L)))?~i|;gwTsc<~qQR z(2mOJ+Gy#R+8F8B+F0pXQdk;b1gb9xv1C#QT zij&G#07N_OVv*D_pd4S}zLTr%YMoE$FBt4Ej#2*~Yk^)gsq?i)7(UiXA2-30l4%bUC+u;QybkgpLXRr#e* zxAPB~chFOQxSbDmt~b2IeuAqxdWhK^6?;-!MH~{FN8yyo7NeQ;2DVvhAN;;d?&Reb zaC-n=8i4x!^5YVd>QKxZ!u#$Y0aiCsQoW3bv6`)ir`YO%8LewO-D^F``wO^M)h3;zjLDQExG*Wws(cQr+A^4hNU%2H;(`Z=yVDa0B= zB>SLAbo?N{_0)nUe2c{v75pt4LLD(LiY#kV|JMOiD9bb61ow4<-sG-DNmCYL%%p5J0Sa6v4cZ z*kV}Gr(fnmUCiO8?T}A;wzkF4`jOT4w`%A9TC7=hUqejGR_Qroa!BA%LzBr`J_lK6 z=Q+Okykq~JVTyc@veE2vJ^$MoxsGxv)sj?!g>e97qguqJnqH%pB8<0sFus!fs`5s5 zpQI!GDg_!MLNu8Xr##Z-xydp?68$n-QK|yVpJ(=V@k3MHpS=bmK1<5l~e_fEhTZDlh_l%c2g`vvq z-H#evgYm~24;WM;|D9L6#u1VDw_CO<2^eG#xQ!u2(?(01Jtm6t`bYHs;FrU4jAt5*4%i3Ve0GeRFA zAJyrx1B;~|gYJbwDioNzR06Qz#6AjJE#A0o+kl50lI0gMZvxs`0KDq!?0O}E_sRZ> zD*ag%fUsG9R|Pei#xvplw|qe;C6j#;xuz;7ZMKc6IE9@*!&OeM5cZ3zT=6S2*#Ob< z6|;H&R7ZBg=;I_)))v3vy0350*EtR<`vGt2`buNTGKwIKujGI&CwiG%TFq3pfAp85KrL1UtqRhk{=)gc02tF8Xt_35$&pqR3(2j?Qp5WXro2bMKNSc+?f2SOFdgA z9oKP*Ve_p!K)pj|qSF=YlC|N-*@{4)$)aMX4%BV1CZeD*9q6NMy=)(pyRU?wSt@Ti z`GHe;k-`zYz`@eP9<*bTXZwQy>X!~SrKsLJA7|+(#kRPb%6ey2nqCBb(^Ckxfd_Mg z!84$@Vp-GdozqyySILnUTg;SekoX7JS?mp3;kW&(u_-I6L`fgXS1P_c_n+5pDXhr? zenKV`&T=Wm!l^g@gcby~1}|&&2~Q%Lq}zWEkohKrDp}IY2>y&RdbCLMM(c3iR;MV2D8Q$f<7-G>NGrXN2PQ?a_t^ z5!Cb6F71z|4TZ$R(2-9wVQes2J!8=q;BcfUGN{Z#Bt-zxW=&ly-H6{v*XItrnCf%V zyAqVb*414pQL0sD47+AxK^nkQ-o&b$I%gIA<3m3cve$VO*NBju&wH;@iU@yckcj1S zBQmu;@tN6w%G{GcLssCv>J4OF4BuB&CdRnWrS+nVU%YSho-NW<_6vG>lu}kqr|%_h zV{X{$fAD2?Bq-=7%y;VRmH;y&s|z%ZwgHr*(#fKIny0kt2`z(xa_*tCF?co*Ib8U(e)=~=n`>eP=Tz~O( zP4=iW3l+s&Z(Y_0nj60I@~t>N^Or$}$rK0#wmGuzeT)fZaqixjOtsD7Xl&?jujB0H zdU8QwmV2Zq)tepGiQ%GF??(Jri&g3}G@(WSLvSH0;j<{nT?SHPbC%F6D7mmOXW#z_4vo-WSZt9a7u3l2mf1#1l>jy}aRGRpa* zvD5ETN+ot~k}YIWd>}&dUbci@!bEjG*|zBe#2a4T(MYhy`EI#SdH0Z_j)Cb5C0#@b zZ27n8ajm7QFd?LvKI)z>hr z1PpV?Dr!w4&nJkT*&WK>FN((eKV3ci#qRtZ!uisfN8*^7M7IZ_x7AWvQ^G_uaKa2 zkREruzK5oiNY^B6_%&_Ti!I2Y6L_rTByL2fb1M*GfGfgL_HCj7qYP!2%a#f%%3sBO zKeP6j^H_|fO${pho{X8Z#lJsarzf7xx~XnP9y+erYkJQNST}3&x|QxLa^;dmSu69a z${si`B)XRx3#r&$04~-d+{|D|7iLfFeDJW+BPf%Lgqv>t7KVbPp@=g+R6&2q(EOtiRH)-QZK}@(7V6A=6Tswj2Vfxp9E}|2@cUlTse>P$dh9D} zUCXXt+B&I8%y-;s*f0_hGP41wrOiw9B~*Bs@faXH^UM85x8x5AvWCYGXh2ABEvU$n z1|T~FzlRO011pl@CLz6204_k^&@-E_G%@4Cv>P^Hvq)H2>^R{HNF`9(&+K8eK*|a{IXVsJjxL6y>mi#6l;#vq} zn?iEoYNc`;=dGh3*9TaLhs#ScV4gL&J0&GkJu=U9u8&Cr_Q^s3{AR-3wNi?xC zq!A%=i0(s3*`5q8u=Q*3D5Q|0&{u1};PktG?2%t>DKnGPf_8lrtBq@Amdsk1H#(Ae zw$(aa^0jKKq|=866YnXtct4%P>KzP2&1;qWw0VSr7!a|zEoeeiLHs%GLO*!mOnI(M zLKr!TegNvK6vhH6v-l;xJ1H;qF3o#9_lGlEjFr8)^3BOL>BWw}_UqnnBIJ=@0OTnoSu4C9~R`Pb0QjvjJ~1jPx|Bf^0Grt9|GSvw#Rg zR{`N~vIBwSnBR%jAhNS%2i_*HEVBq7F>^2&2v zcRGlfD*<$cG#Ol=fDT*A(nU>;H^i7DS-A$x$KWg+NYapyUTi-LKo-b(6@d9KQKqL%qN}jT!;}T!k0^k_+(cz2~aq#dVch2Wo59N z#&W8_-fv;+9bR&P|8f?@b?U&0$ei_haBTg|)|Lqn=Wng>$sHrl)k z=Ol^zix~-LCVhJrZVZ_oY3z{wFJM`i`dyqdsq&e}_Mu{8UmUpevIb{UoI>barGq9- z61e|mv}5*&UQxdhidE2-ba8&iuU4V8o?2+I8)to!p2(|P54a4Qw<*~Scg*5BcJ8AL zOe+{3l2-6MSDeb`fH<~o78v7Um3j7k_|{pQm);Y9=LB|77 zp!~oPfd01|G$73}&OeDE{$J|`oXynEJcJ-zY^t-K&ysGYFbzRc@+dw)E7r2 zqB6$t&P8|=*Cr8Wy(u7zARG8U=#3LMqV@$f3VyWN$q6$-olri21jWV!SRHg2z#Bj+ z5h|=r;&CyB7?N>;0h9=BL8$|yH2`10tLl}NUm-YpCqYxdqm2%xGPjXRm7_zDbF2il zS-_LpzB(3w$pME~{iGZ(MP>({a!gShXaqr|%AsPbA5ni+<{2qAN^D}u>)KT9Y(ZJ$ zSy{wUDwW>EuVph$+SJtCe4jUWiX&^iOevS2AC*rbU8akYTBTK|c)^wLxaSKVbyO;^ zMdtaw*vQ+~GlRslwF6~G=!8%3rV4j`a^ULE_Up@$D(CiIi(3rx(2axOli=6OaULI* zBSJ3Bz?Fz9eyeIfdla?`tb1voN4~tZa6MUn-KyPuvd3|wrx@<`cCy+}0=gbZ6ay{hWH{2G&%2EMdDJ-uv$)NFbP3_n}T&fbwbY6b*iNt^YJ*L(1#2b+B+){7fw@ z*PQ)K^A|;qmBoom>bJc0@v{4NY~_-D2D8egS!<(0Q+# z|Dw`<1H*1H7V3XPF#ZAxeO;ot?tHm!z||(f4?@n*y)&H4KjEP0=yJbSnLV1E)|O9a z@LKH)FXPHS-%pSBdY`cSE#LZcVE;yC3rMuMMLKazFBQ;H*#xAB8wWn9v5D-uV)9ws z(K{24S}oS=c-5WyYr!`+|>!Wm~Yn47?808}N7<`jC0?>eYj?>=Pkyjz<} z{7S-Gc%oXgM2Hsis<8GoYsC8813pC8 zjvw-*>sq#) zPcG@JF2#>A(OkEsCmuUh(*pV0)BIT9?P-Y)=Yjig_8IR#R2mx1fN%D_`11I4Gu)j~ zjY0XW1ROAf+6lozKau+HGUT`b9OskgPNdUeZ_k=1y;fN6Xq;eW&VJCKaboiriRK=o zND6=mW2x{>!fO*SLZ>D@b4Hd;FXJ--qh(qZ#Pp@=*Ee`?728kx4*~G5N!vu2kmgA7 zV(=wlwEKF6TJc_m*+9d8c0CP>#QJ{;45s^B8|=pI-k1jzO;@Wa02?a4*P4&#HXes% z#sD4eDA+jnBP9r{BndR;UmPV%W<-kJOd`Uz6s`=@+RutZ6<8p`p*kp*K*EEJ5N-TK z5bOq!fuKqz$2w0@y{r3qp6ot8L4qQw4T&Ma(!(#Kzr!M)kYSc$J9-`LFqSa<*Y{&Z zKqR1Bi*O>&5Ql+~OR+P@l?)A;X|yHQFcpzom_Ri#Hp6{O<}W)`-YsHlR)KvHaYj+H#-Zgq$jz^8POK{Q&hwrN`N zh+p4ZF(RC))!qWn=?i>;Z%y{dTyEsXerHd zrzz$GvcyT;7z$fba-PdBQe_!Ls8tq3 z@kv}|p*eMJ;%VW!mRH|hhL_+nh>+A?a;CnB_Hu*dbg6W?(i0u-jauKtEH)N}>xh7&c$^ zN|K=yVxSI>Iuj~?sAm#mmaI}(psQq?-O~7Cm{FyzaGd>jt;F`pk!N{-yuOG!OE?kg zgbEAM?xF;da7R?a$9b8`ThR#X!AmK>G=sSkZ>s$VIrDWPh>v?Qz<%t33c@QO((EPs=0LJ=QyC?ZPngGF!XOnS6Bm`MupR{oJFcgzFs%ILju;Fl3HL?h>!%>Hd~fOi5a z&hZSG@QOe9!|O{b6NqA8gE3egIFSpVVAEl|7~yiLs>g-D2!=k#ZWWeG#1+w`9#$#8 z(YFTR69Is;RDYV-e?aIT+}F4qCANZkpv}2igrVeEdNFxr(vA;n3*wZVqLXShCXoAr z*`jl0OlQ3C|9+Tf0Q8W_+Vu%;5VP{%Hs?giFX@9I6a?-!K^$kWaWdhHE_4X1ggDKg_WLQb>JoBxps&P)XZrxshg-zg(oj4`a`0aA zaj2XA9*oiKa}id^%I7MVHc7@7M7NFGm&81b$&Jmr< zy*H&PENJXC|Bx_kzyzTFzz$fPjJlT7T{HXpbYo6Bgf>(S7>`)D_r6Zs5H8ARX-j!& zHB_34@dGQ63hDbd+PpaPen<}!x76l9!NDBR6W!}Aq5!O+y!BMlYYx|+*P3}P?Q<$n zL`97O&lYv=Dr^(`TD-<%-t9Wnf+lEX1@R#EA|_lg_wh%nP4O#j5fxrnU@bfN9UY9$ z5UBSNAeOK?2#$zE)K&!0kcXZs9P-;~1WoZiC3bG>c!aJ0ocDE{+Js|RW9!M&n#Co@ z1eJz&xfEl?hcjX3vlt|dH;vSe3Mlb0APX-BHoxdr}?HS;ZYd3`8<)U={ zQAg4r20mIFT(vh3w$2ce*8Y$=rc@xkQGeY_?BQ+Tc05+t0V;U|SfMQ&Yr)OhZm%tEg%ty{$_aewWNevw^*z(b7nnOnqok=F~4{ju2HMdwBWXTZadUC{Ev>s zV~i1+oCX8Bhu)YxYM6Y&m3@0}y0XQ*pgLPF%u;G1Tz`l1m7A?fI9-5^lrR?|Q zR_fmUv1vU}xBfME?O6td7VR=ilm>qn18CSaTJEAu#-ZJfF1~LFk_v_z;?%>4Y|NRV zYs{gYoLy}nz?c1;As@HePHti2wQNsK=K1=v+S^YnOZ83-R=WrWZp$zQip5S1WE+k1 zS4!TWMfV!^2knVIiYD%Bt7+>|n38QlNr3G$N7?_rALRfAd+`T=0@&9a%g_lbI0 zuKd5vejFWvVCEhaMW9h`Hl<;2%HNQi_=$t3kZJq~?90eV0JX zb7Du{^8;F(CKYjj#$TIMJtg=ll1tDL6#S37Wejk4f}6LcDr3mgn2@gUrg|p+?cY~v zsX<<69y(S+g#@|wA3D2KcYA=&v@;DE3#Pi;Qa7bGV4!(HGPZl*nL&!IlCQRm^wW_V z#{7v@ncop+f8*wGQnvKcB@Ce;faD7z4PruFA<*ii3S>|@U2?{Tf+h;O_diVJ7mP)n zr5^iVeG-8_Tw?$(iU&Y%Okm*VIR<*iOdY|Hj1e za@YPZT|Fa3HPH_a8^+Ji3kiNl5QNGdMlpY4*|bu86Vpq<)GQA?L)3Okx7a+;D>sa%BI?vLQ%i^1T3eW5BM? zqh@AcHNs_<&5ZY?gHP{+AK8O{%ryzQvYZ7O2q>%1N{}(1-_|gNqtj0xDE!g^>iR=_ z!e@V8UmTuHIK6YQ9WfC0cyzTreH6@ZRk&mH_w6xgw+SXBXigbTTKr@|l6GF2ZtX^5 z4XKfJtg)3pdy0H&%rpUyi}Z7g7z$N3YfLE+u+(Kea1JJ*9vl(8*aY#~Z3a(Mh4QC2 zMV6=1o|?U#CkS4I<2@`+=D+xLP5?-;4;Cjo8re~K$*$RLVD~UkjfCcEUt?`FS;SlIuYKzCq4yZvfUkVI&Gbs4_X^&82qh=zJ|rky zNcx2@a4%TBu=vf3NxLEbfoKq7{c!?BNHvZ40fIIB5hzGda0_Ufvg-eUeUkQjj2qtc zxuW6lTs009gXfg$XBo?M1o?f+|GTq8a)B=JtFZ1ojLahd$RIfsLoQ zIC!hjHW8IGaeyHb4B#RY2#+nm}_a zc~!954jJ<3SZC-6JOE(vP%ni$p&Dh9HugK_HhvJXd;t0ST&lJRK|JoZV8K%Q3=CT0Vlw|!^xy%jwxfXzi34+S&`GBmtWTi6ZHqj{ zrI-w_ehTbhQ6lVF?=fKYx#N4}@X51c64VgnHK^(KJXq7eJQYjbMo*;j5)9-PUqit% z=O^E130{Qr?Q{fE!qQul7HA?R8AANnPdNPbjDU%Ow~D`Ge+JyXdYHGg>OhEr^$ReE z6^9+ho$o_yret6>_i`+I42BF+)St$o#GOmlQ?WjOnQ3M~Ie<3BFHJx5du+$$TfT5= zs`>m7yFh22Kc!ClkZRlNN7c^N?$e(3nS_2IcU7e*r%D?3_v?mF*14{sIX%y8*?g_( z%}rkTXyOW2|E$dvV$;RG$^4>gefRdOm`Q+qbACOC-&g$$E#Gj-#O>h)kJO7_>Cxep zL+~Ym!6}Z=u;21vStpp7<>`?z$QlR63|fouvjxGnhu7|8HWUoWY^Ipy zp3C#<2!n#PT>pSx+pi*=a=3{beH*?Roj&7i`O=wwmmKUyV`MO-^zq1RGo3bxk}uNZ z(xjL>(u!~Oyu7HGsr*4F8byVt#GWNvcc@)Yrb3w-+F^JAqn`>HS9;+lwNIQbxDAB| zYIJO5Ls0|Mhe9z31ekpLj0k{lj!PXB&y_}!s#3W^-OStrb&gVZ%zl(MyjkpBF@zQS z{DPO44P^Qh(_N?i;5fHTPtA^G=LBWqYAQTA*0$LDgOW^UOsJHkrAqk9^OYAXFIOA~ zTi?Ll?*59hjY^I6Br<2igstq~ST<=<|DH9~uRR``b92HLmJK22x_Q|^aB@a#!X9R- zH?--+jM1`gLAxfb{}Kiw;14V^Ni1VYGpJrA$+6%mK`8XD8}Wt+X{TUFF?$853q|tU zxqDw_dGs#iH6R^K!7t;Cy@JN!TJB@&=+Gu=jB)(wEotD=w1EbF#AdC>3AEr}#r#^W zD-oY90d>PUU&E`juiI5GS#ffszgxh%by#E(SUgJ^a_Z9sJXitpvOl(irApgE9~^p$ z&@3i1EG1vwfw({Gdl z|6#J>mwS2UxXaILs#&b)8l$lopLM#AU3WCd(~sDvvKE2Z*1ZcHIyYgP2K|9Q5?Xc# zEsEb}x5i(2>8TLfx$Iy{Jtr}8l+)X zwb*hGI4B?Qun!e+`yag@04_l%{J#@Jc{|X#w#BtFFkcrHwpVHbj9`Y~-}QoF@kAvb z<}wf%{Q&Ni-(&>%e+a&)g>@4bI!33B8_k5iMyU#7EJxK(k6`7J*alup8q6=YbP0P< zEjjDl*92HH!qovu;2A3#%unq)4OUxWxIN zu_mQK{=UxUkvglFPTPExY_EcZZ6BNnc^bFY?*TCQ(b<|MR^SD1!E@qaAo@RJ)_0l2 zFaZpQjMv$~8{+UCUG4k!Vc!+jqYK2QK-KHYp$_Q!C*V;vY;S?yewxbMs@$;^7!h)c zb;{Jsxl;h>Y|PCK8BqY=>Y?~m@dXN_oyN$e3i5|P3CQv901AKw2p59*cHj7&b^y~g zZeFwjV%d$uc=fjqVGUs!R`)6qmFb>^5)-lf*Q3nB8W5 zoZegKPGf+tne8^G>1bL7B`W%m_p{IXNpeRfI*&pdP6O^0!(;Lbpo!u>AFVFwa@>KU zx8B_esNGrIWJ9h4mz?$MKqR^=*OB>TGIj@WNhXZ~%VF=oGhsfCj-JgXF}G_WSLH%* z{>N5Q0T(G=)?lBj%2;$czX;p7JaN5Igx5HH$|`&A1+4)liqw#GM{1)hNl7i-?8mNV zZ6^jIT$OL)rNwXu6f}pQS7kCe1yEe@QwLYhJ88=ueh;-QFiAX#n0)bb6uIR-RGWVXZONo5m~QYc9ZZk^o>vo=`aS z-Hz#DDVoA%Jej(#iQ{kuNB|C^ZHASb4BxS za0+;f6JEX6!^`2P2_v9l5aQBO(zdS-OgH-K>zMjf7gn^C?X)b6KdNy;Sqs>j)$E{3 zy$%F`YyHi;mP8MTnnIEll_$5qVf2Q;q@p38*R|(TDIO+WUdt$6$>TxYQFrldTuMgmv;NAF^JVtXsN?Jv_jWpCD%45bx{BvkVNCEa z1m)SPcs%dJJr_$Ia(6T{U|B5x6x(H#T}|$jWE2}%$lBavT$_5H0GZjr80M{Qnrs|> z{%FhQiTxG%#*x1k+GG+`gJ$tegtV#V0 zmKU|@xEMTbMAi9KLUucgW!**icocCiH>tVbsjR1TV15sN)+z1JG(U~!SeYAsqIk1b z{S!XM%YWuocjbL)gzC&W*2f*d$)xmbOs&hCJO*z3xVhqiZYfXfnDoH@SUzk{r z4od*@6n9mM1P^jPn3Zf#Rc`aLlh9hu^NmK%jMIKzpcD7%B>NY`TENREB$)WnF@USn?iwV1ONZfwh_#SUb#(6S;%XX( zv?m{AH$U$PZCJ9U#q7mFVBPAmkt-3s_f9SV?R&#jBlx{b*~5(|oV#VJc#DmT9pY|7 z5l=pr+kCB5iRIyJ_s%?OA>&3z!DRo8+|31a&XLU}#QE0U21^3BWM|aW=Z(Cej6Scs zURA_IH*+ps#4O-B>=ahw+P+Nj3r_t%~SJQHbP0Tqi17+vER;(Px6xW(p%PRyZixMAwsJ> zy+i?)var^mw@idgxs6KpLL(ujvFDciN;!i45UNrpN5zPOW9Csc@bfkXCG%q7x#M&< z$5%cagu)h5fw#aEQ|WQa&IjM*V1IG@m*C$Ot~+QgSP?q6-->#mY$?nl`r zN7EQek&^X=iPABpCMu{hC6>}+WTm0SvMS5yHB#($fPOX}ael3q3@lx1YulFi8BRxq zuJ2fa4wt*XQX#q7&S!f!MY)Q7B2rn6O25Ok*=g%3Q+Xmg{d)tNSs%5sW>O)YqXLZX ziCEbK_xG6=1&5bx#nCvkUaw}d1~&AZs++9eO^}oa@4j6ZM@?(pGOG}QN<&Of8*>ta ze2$pA3mCY%(wr5}UmjnzDf<t)+ImEYM_t)BJZ*^T=+`_^~-9UpbYt8F4)qSL~K=P>NB?LlGLZ z9Gm=q4gyj@5QUl%Mo=`6a6f9xKi#VFUi_Ett_6#82LVM zNgnngM=cMRjXw;0`N_+mBpw!*W?7yjM zF#6oDR)t}5En}~FnMhMdy!r$nuk4UtJFDVZDhPqg^dv%!@Mq!8x^!pUmZc~gJ}gD< zVcD1$jA*O9mdJ{k7jcX77$|^6qRC6H#z{LCU)(n(Qk0+`3TxgIb!+rHyI~S@hQu+! zHjh!f%u-&~-A2i{k5PU%mjscU)$4b>x?UTUtR*Sz_4EO|!|7Hd6%2J9s$WKal+?BJ z4X-<$1SpHTCVWo&J=}b`{Jrb)*2M2krQ=L7Zz0}9GMgr;|Q!*=D#m{3?nj1dNt(5k6-Ka2vNxihG{W6LjLQ7eQ)FZtZhX@TM?&6sD4 zqUk29YCk)^3&P5#K8IUS;tBc*8-zxAu2vthwd2SIFFwv_r27~aRzqU2@+|lnb?vlN zj>{YF_Ev8L&n1WB>|zVJp|$q?`7|;IF9zq$-}YdKSOM#C!F}G_LU0?nGXj_Wu2xUU z3Me=LT{3hfs>GdU1D5O5lCd-b`RYPIH07i_@(LEa>3LU<16jD=e^!AJlB52L>}s}G zI)Wu6AN%5n4ZNJO7&<6Q9te8R_1$d^*0rzt)7ToYQS8}xLKFp}RTeOV7xN!Cu3U4Z zpScb&qc&ThZU)+;qrFmqxpZOM>4zdy#=!O6dxOg<>a47o6f|Eu%>~(nB=4WILp0%c zAbL-j>N=?=r56&q;~~fGT*e7ERhWZBX9n)KmM@e-?>?efPz@0#my8oz%WbArei~l` zE=w)=;xrdSA8GtnsGB~~nE{ylC1pKOyfP}Xh=z1}!m9Xm!Y>LTk4sIXn>ZO_I4N5S zMO&eglrfN-Y!QS+bR{$i$fqy&2QKG`N7=$PRp?H4EFsUJtQFJbg58f}cKHqSBkXaS zgT)R0_{w9W#7cLRc6R!3)|YMr%m4*m1IKJ*+Y|VPW)3s8saYFP2%vv{vx!rRg4`gs z?K`P8L*4p5jh%Wivn}B$r|wq;&1Zi+w&CbJ>1HDSIrA7mLojLtlvnoEInC_WgBdF&5}A z6gD!kh`Yi;4iEpzSu`~rUAfoM|DEO{uroL*zc5%hGMaq+5nVJBCgM)Z`_ho4Hympr zoE#X>R{DunsiaxllDyD0jCtJ*{DoolCRPMa+SoQD8$StjTi-$AC?v56rrO<7_EGtQ zFYYwQgM&tL)FYm;zTlvhqjpPbc2S>EEwO;|Qbsyti8^ym+#kBo|Z^4qn?d@;# z1RhI(b82*2^s)=f3+k_ENCcVj>ISbsbmhL{FZKB8Jo;?NWF_j|7p**9yVhd2ezQ`T zKbv)((<1EJ$Pe~kf`jYjVsjPAD|KRTiPq%LKXy4Ar2+FzE5_#4KJx;Hx^1cF0Z9Q7 zZxQ*zW+5Ll&Q{<3u&wY{kYAyyrm+_aWq}R%b3a5@&AC`aKsQnP+(s90j{Fmj#rPu@;fU! z&8o+;HSL_2KlxJg0aAZ}WCQURpddycK{ask`1#|9U@O4%*pxCC$(u@*WO;ZEgO?Tn z6y@puObnW`R|CAp1nOK@4R)kCB#ETs6i?AWB8>%iJ9$*tP&HL*upJ#yO0CTRt7 z@wZEiclLZI$@bv9aYO2ffZk3Md%>z;hibFl_5kU203j(udENQDVBKmzQRi*Gd3H1W za$bRA^t>vrW#Z)Jg3n%|f8UQIV{1foVqSNBC(D_;_9W$vjESc_`(6%VChWCe|6cFM z^#EdfnF-*xeP-)3Y=ur@F+25v!QRi;|GSC}By}|B9UEoh^wpuHzb_@Y%-W(5tVn7& z2c_U|WL#hv%%RI3L5pd#h2|n z^dp25V$q(1aG5NheSd@Dxt?>2gp3;v%Vg_j`qu+cEDKK{FACKImk?L{_TP`FBc}TK zKkK`a8+0k8$(&7`(Gx10OV@)xhykps-D@C%dmL9?E>>=RlyNJ4zxNzcA)92Y;$EoG zn(BuFRQ!oX6+ID4-)1-p9z?)gXBt~1_Dz_RbN$w3wlpyLSpS8& zO%dmrJw>X?+}QeyN%if3?<4Y3ArPU*7*+J{OGwwmw|yx%L4t>o(P8(!!_5_#U8Kn&Yc$)8uMK56UTe!kW5o!+^{MMk4I~j_E+mbJxPZ~x)UXtH+?e98%_jCl zTkqKnjZP)da!ah+eIJD~J9lnSa`Q0JEx=xs?E)Y7;gz;qC`G74OB}O-meb~c34^&G?QV}3R z;jg8&perLXLqZF(S%FOvR9!v*Cy8cQ$)YjBVh??%{*D2AYiKAToZkR&xpduf%Sh&q zda!QgbzO)PUgj&8-3YYfyD~Y&Y4E3CHqE3W*13D?luP5OClmMTRJYsKY;9?v#@~bA zpLX-zlQ+QMhD1yzZpC%c>u=j)r#Z`YaT>*YqPL8zA&Dj``w+#d7SlM+>=ph1$&IF>cp9)GK!zWKq8}q0(Ip07^&yhXZfRJa%!auq z_ySS6SsYMU6Hm{%;KNd2Z`$XSZO}z?m*EM_zCj~G*HEQQ2H6qu^ZaiaL8!1)$&iZ= zcVsD*{zTSYTeRK9kAbO;pKm67SbX~zePr%uI_Xh7%HhP^1H`wa1l;7OrfexlDiy{c z&aE#CP0JvRl-zU2IP{jXS<2sR=I%b(usJJMrYhFWg{?pRCG!+UmqVs>j$f;s@dUK; z8z5e#`HdUdVQE+PG_&>1zCr2ZltPUc$^l~cbzS_qM@blb&`a$RnMtiujsaCsrG}dv zV(;1#c|)`yPRE`<@T$n_%<|&y|KfBWKo15m8Y39G8bxkGUv#Z&JtaNFDUAsk%#~!b zKjxHp+*;ABYF3)oud3Z5XkRrK(S&{YsJCS+(qs<}Io2&!{4k>Ed`AZfLsMmaY(hS} zsjuUV-p-jbyXt-2#P|5GSlnd#6VDdGk5@04caq!BZkLeB**rnYp6V zyZXfaS0pEEw12qqz|G59fyH?fZzEX{bbF4KYWa~HX5U}~+U^uZ1N6f)Kzv|W#;A0k`jU>%gs*Xb@ZOIu>@!G%6!G zE}Fj{yKotC0qWMZ&D*Azd+PrQTRr44rZ(QojR}^3>wRC?I;-PziFG|f?7p+`$ho#VgJj8L*ep2f|S`YxQod`N{#6kKolG2iK^ghWPb5-aUH}^$q`-59j)-}90 zP>w)$rSm7pvg2*AW}_#)KKcQRhWnmOa27cm@0D=rS=6+svR(BBRno#UM<5iYi}qaT zTYfbzyk2KP64BbqBi&@-a&2d6uQRB2W0}NvR0N?+9DwKzEBbXKLL8s;_c#1+0`q*P z_%Kt{kM-E**}bGOz@6BT9bi`K;FkZNLEN@h^QJZCOA>@6U9)3RK@unCCuHO zvj?}RcMUj(jKjPRzpJK?_!wH@IJvwP{dvGP@FQVpiVg)_R1@U*2q@jZNbIgoszL0& zo5oFraC=OEfo?l<&Ewk3`(9$T19&5VuN*j7vNgIHBoz-A#CLBI;sRv8KY85)g-kjt z!aAceDpSjxNL3(**y?;0*1#YD@`%?v#9nl;5or$$<4bU|D!+cQ;go>L#7k$(IQivw z14N%j&Y{u*msdRMy8VgE5^)m6HEusxDo~e0zkB|WsBBVw%;n;mi<6xRXAdJ>?THty z-ZEP#lT$wF(bzV?f4zgrndIm@1?mwtNkMD6o|47@B^qQVi7?RvPT-5wDyNDMYX}Db ziGb&^6uVYtv@{|0vXjf|MeJ6XV=alTv{-FK_;XYiWse#|k7C=>ZgcboC#y&FesWYe zVO9#)NS8$usLRkympB)h@g(lpU_8~m5{tM95|`7 zuc{(9xGDhAQ442ay8&ku*8{}4Zz~D?c<$Vq<@^K+QJxdFWU03gO1X#;+S-bK(xsf?1 z1Mtzfz{HR=l?&gIpTD@!hmHv7S9p%P`*QIJF!4>d=SW2r=W0iuU9dV_=mJ zS@FGt3Om}X(~ua!hGOs|7y&M-8EhGpwNfr`9Vju@tdvzDCvX$@DHCP?vhW011Seg5 zNOMGoi^5bT-HM{kYeBTo%Zunb_L;13$E-P2lE|djOvmu&Fo8E2eQ_SRP9dsYq;sMjnobia z1t}jVnQmSfGDX_MN^Cwa`7&vkaiw41|0tt-`nZ+MV{SlP^ig@#cuUCJO#nRX*C^OrP!IQI&{0ze3?vX z4lI{v+Mz6q4nx?GAW%P?E#YJkzyXrABVun!b`|-NPv30<%&rSkR>)?D@Ma>mFoVt3 zjFw^|<-Vq)=oA;v#g-=Q(z}#Gio}QTJn3*zZRKq*nuXwm{s^2m^4>6Mw4SrT2o z&p%TO`(d>8AoIL;cDmWbJ0|;zB@o=yZ&Dn{K92zW&XBF32LXDc}(&(p8>> zJ-fvdYt{2HQs6&sl;i(1SQW$~Mc^+bD`>3`<59*tloUn5u>$&xhmtgBI<$qNi2a=X zo!7rIuW7Zjn7)x_mMGlroOaq@aQVs(;;NYW7bmxth4~HE&=z3GS)o!)^GUC>LOV;P zm~ATVk%}U@(rN15$F|dpjq&q@L{7~1876;1=&wwPr*{H+Ij|8M%_lQ3ax%YmO?X2V zA~y_Pn|bqf@s0SOA>*E*UjOruk~O>9RR(dcp6AR5qtfNNqb~rkl5YUtLhH$YKuAY| z{HW`)=f@u-FM3h|o&d+V?660v872R0A-IU*H)^99E*vF6nRD=Aq}ZNCM2(9L}>nObL(7{GuD)+@KBoEdvIaV^Ny zjBYAOtY>~w`N{fSG~sP_Nhq54aRz3zNOo5lj2K5ibyaZ&b;=Yt@qKT_0fEDt0qjVc z47Vy;IFbRGF-Cr3d%~DoNbNjm+uAW;cXeyx;X!~l#^NnzHyW9Wz+fhfUwWJFyWqCo znFSJ<`0b|%-W|jR3(7}7+mCSs5X*S`~ zHi$;&2pLNqxz?0A&w$n_SDo8p7G8eDw1kNc!-85lvfolWQ%R4%2eux8TU8F-z!p2t zPv$IZs&4rc`-}M>vbc^b?(Dl|R6pN)vy$RW+^y&6?%bd71qMt%FCmZ|Z(DK$M)4e~ z66V_)UX%EpifGK!R>AwO`xN4or)pm}eFvlLWe~H*DL5sEf5Qesul6dlo`l1Wox$ybeCE*G-we%<^ z@3cD3B(HyibY_-025`CoZucRKJov6%>aTn#6YM#I9>E3pS=ESSU~5aHbdo4WePW~chu#8{B8qv$Rr!ahVfz*G~$@uN5Az1uQLI020zn9 zzZ3$)h|A^jKrcuZ{xJ31 z?(lZ)*p&N3KU|o=hEk5RFxxm|j1cd3aHh_e3)BLdmj(r)J=pVA6!36Y_W}x5tsa5_ zwNeeKpZ6{1e3ZK0lTQPnkxl~C4Hq*hiY~@~UNC0s@=H(l^+a1ckJI0mD`)?5&h#}~ z$yJO^UW76QCw~r~y&|sN+zc~aK!I+4P*J}Bcn69r z0qbFNGn&E0(U<2D(w^5HjMs+3>CiirPImkKH4w(BroPes`*k<6vfTbd z1M6}!W0i1^Y%3LkIjLyoeQduRWlB9iwcuU+y|cXC_u8XCJFtGG4-1JY2*s-*Bad= z$1@ZlKK1XcN46vVUN@rcNFo11A7XYQPo+d2%u(7u>fQSC(HAjK_5Xr&lcMARFm_^w zFZ8_7Ht2NtgLxX`Z3%y4UW_a`fZ~BcgW=Xtz4t}HOfk7OFzguwguaAQ<$nNy)L!?+ ztYTi_+cOh{i%OsY&bRx&NT_Ch5Fy>;y7&JtLPF_r3@$t(;B*)|zX;rV(o3N=M^hIL zS0?qw*KKT9``4-xb9)phm_jH|&UCS6R0v#1UOty9S7lG?8VwyOXCind(D1 z_lGFTC18aX#B;+_EV>8qC+v{QpB!_vCx&tSO0%Edl6t>Qm;!zq53RFKHSsC%Z zAAtH*VP@p=Rs8vmdy}(dik@MGgn)kcBs?hA7eGxrzkS5{g zq`qab=&c4SFZ6&}D*YwRURQOp^47}PlIRIgcDpV>6kwNV zIN%3BK4B=7XE2K;dPQN#0-)3uxY@jeAF9cqkTh5Yk>}xM8oe&V>Ia^k!~-u+Y)Q&k z!1?IN?1E6$x!OUAgsB8bq0WS{zc1y$O+>ONr|~NLUcf1C%(E5T=uD}zF+;0n?D!LR zHAg`7v;l?Zj6inR{Y%CQo7X1nV8v+*$`l95Rdp6s48HRfK)LclI=Ii-qu-at%X90Vv6 zfYJcXZ5KXBXxZ_eEu!wPj%rqtsn=j)f&?(5AnoF$90fD;maw}gyI+6|oMwrZJp&WBI(h|VB| z^Yzl;YDkVMmJt%`6bl(`ko_Fzw~OJfT+B7VySynzoJ&;^Bng{a0CrX&8xfT3a@eE6Whnl z5QK0781vnGZAW43vw=lqJz;F+U@e(mxbed^$);=Vonf+$;0|-0_|_yd26`I`javqp zg$Hed1tm29V)@T2NXV(S4i5&FM%7$so}i@;J4hfnGea#qstba8Ti!9{g%wc$XoID^ zU@Oy4d&}UupWM?N)-)QTTO}_AG5^(f2c@qccXzv54F7f%odezBRG}Z{Ao0+n0}PK$j5@(dF6JB;G~=ze7g77P^>JCc;*Xb zDMw0-j$5x}?5Sz{1flAmMnDudY$q#Q3tP~H4{DQEuy?XpNL8%ZT$-&+?5j zagQca!3{8XVvAa-hO7gV3d*+9@^fYq`e7&BmYZF|P=U%oolx0VU-?!(gxxgCw3qqT zP5x(bqx^?F{x?@<%C`^NGY>lb@NZw%9Rxl7nh!pL*&|T=YFwl*Z?nA4V)Z?kr2qu8 zhI4JG@fJxHO+v{*+09nlr%Q;~Bd484x+r_ee`W6Ueh(TL+TLum>UFKdJv^1H==-wun?Xr;*pI+{#lJ` z5IHz^mUowU)E+--B^A8w7#V#K&q{vMSKjv50;ktPJjN^knuiy<`no_q=+yj>Oi zGekQH1cmb~DosRhL1Y1MSLwYqh7vrBYR71|!F5OEJ|gUy35c0SrNVzO^J6Cq-=jA) z{G;n2s{Thz6exsJ!I?yuL=Ll*AA+d3jv;06()d4>OH}ZeYA+8Hqe0>haDq%ni6{5| z89&m}&ga&2(k+R|o)+8LlFEFfzW8wR!{hNFv{mJYz6sZTxEEbt&JgBOEB<_)c(@cz zG)(a9QXpg4u`D*l5A9|7CtUiYqA1{XFf)^VgEwI8z4Do_Iv_4LpDcAgpx_KvLtjI( z^myYy0#_ z3b+H44}eeFB>NF#19vAz1_C#d0dVebg{gy#<#w3s&skA@#=Df9r2XZ({fRLpHDfV5 zNEeg9T|L_ERTOX@U_OO8ji^xr*{6GhE+}vRW}EodW|YPGfeJ4wtn&4=lfZs=M_|St zUX|SA)Khzw!p(t`)(#9}LEVBLsX^sd+#myl;*f6OD^JTs8jY39Dv}zKmfKwUlg7~p zh}&7OKT@?2c$h`}45p%Lrz;Mj?jRWBUYqDU1jEv1az3jd6SzDH^7xIn~XzErJ z_H94g;5xe7KoGI*(Hc>BacbhTPh^dwgsa%&?4#hG$-@POT zB#4!BVUhSRqkUuN z^+}Hp6q2pYa+4tvq=#bU-t1{xJ4#Gbm=z$5@SW-G*_erIe(n)28&*79v)tINxIp=d zzyr6+n6hQ)QST(hr)}JEFWhFNz%O16B*ig|Jkt*RdYVQu=u9+I(E+tm{7sa2#JSET z&_O<61IRw~IhwqCZN2ISjq+PnyK(DMwn)A`+6 z4e`T`ULUqNYh|sed2Ye+Bh$(&?9w~))h3-6Rb~Kra|Wc4BwC7&eu4(M6=A&~;Drb$ zaIr0X?hyc@6BdIm6fu@{@jTho2ZUN4H1A;IZ9Uwc-=^wRlNn=Kqh6e{n&hsX2UG6r z&W4`c_(m*Xi2%BD>WAfk&|~80xDL}^gB1sej}D+ecw6e;x%0U+d6`)d>Cp%s+7_)A zYc(x8xaC!|lg4*^KT;G0g<74^&b%JCJcs3X=RxMIRlw-<##-^J9=)9w$HS~W*xK%;RQ0H`KTpnO9g=fyB-qQ`s zVw!ZHHYc7+Zj$p{Ps{4NjuzpdL_feKE|fEyA@~h0p~_nCW#6kp^N+S5#{r#Zin(E> z*n6i|R=yE_iXuB)WauIJt_=>f@XVXmX4N*fE85y_f}qf9hEr?Iz>`QC6wGG5UMt^N zk>M}X+jM!6!ZrJfQFY7QlcQE5@QujfQK}^{d{1#6Nsg`_>aOxsaf(E4b$UF$)nf6B zof6}<{I7kw5AJ1nF(oGU-xYT}n=31=Nvz*;XWZ*t}=!?aBvBHS?8Yny>tlXz2$x44@^r`rL{rtxY zUcBWyb{8N#;+;2(Cv!Q(7VVRFSMDRM#x-!7${%jk4qO7Ih8QNK`Fk-#Of^(sg9~Xd zn#vUBRK_l~BmHUAVcrs#T&Dyb=1JMZ2?`*Xb}T2ns`126wPrT~j?<}JwG?hWtgFYs zLYn1vRDofZ!Nb`thLSr?8II3#%m` zp+)M$ln9V}7I*_$&dLcAW~c5V^o1u*UZ*xitBIJ0T)TGVr=dXZw54`c=Wx#_EMy*k zf97-&4d8dFG}ABDO&`p0`8R_n>i0u~yi99~B48O{rbwQ~$tlx{gJ{F_iNfn1L;}Z?O;f8UB?16Uf%Ky9QfH$=n%T{w{R^1K_N13EMPk0I_Q0bq_ zNaGZw!PlLWVu@?&ADul1k^q&(pogDs$}7Kl4qwctg_W4O;$nD0aw2-Zha}yBMD$&n zsWb?CCUz(^tbn8me6hXEv&pIKHXlRp@iSSxMHQ`>Q%{{XXg~~Q;la4<-?}fP;YF;* zPPJq>NQRvHz1WewFAV;aXiGXB?B4&WDy$gNNneh`I<>8Cx5I>BoPSI7F;FFYK(^s) z?%*^lgtUDwZ=Dx)f76cmETuNp!f#KE*<~Q+pF*_&X@L8IV17taQOR*+UAcq4*TVDG z&*wS}g~@Jz7q;1FGH@Z2iddiDqJjsn4Px_e>_7OsSWQK`XueQ)q%8eP^4<>FN6K%h z28Om=PO);!|CZr>H#qIRfH^(?+sr$fqBzjIe31LF80up z7*ooNPj51fzw>l|z^)_ar~!k(UC!TH$^Uo0@yk@M@@tLR-`ta$;CWzK-qoYByv3)` z(dt3Fy9ZZ}BYCOr9U7#TArr%eHi*9>4n_~i_QS;cVhQwaup!_jK=G&gPt6;$TQj5D z>9yvo4h)^Sc<$1?!Dm|;7(lMOjDX8=XoPlpc?q~a)WeQxI$ETdD_ zf92(FAbO(0#lwm=J1QI$YBG=B@OFMs7Jj^B&2LMV5 zWHK|(p8W6s@depY*YloQol^N2)ghQ=0ETo=kERyd!MiL{UQ?FYk>32zLsUW26?bnv zT1=kO{^>)DVSaky@Vvokxr}{x#z(*-7td2mLQ3S!oCdcs>u9yNb^IqC#-k2x1-6z%8p&fXFt=x6&?*Q?%Z(_h;3m(H| zT;e`)FVl?13bAPIlqSZmPra;m@@Rj1F=sFH3sSoF;Xg`L{(4gN23S_(Il81&U#54A zxclrhMGqiXEA%ZA~5EvAgW`2RCEhO2PK^rw8+;N3=adlvJgV_}s-)sEf{ zspO;g!{}v|S7b526<)_O8@ciA!JJe9#i8>VmLp%HSX&h5cd~q49){K5mX6`d2eA=? z*kcm)z~jk-;dL?Nk8u8RC~81(+n#nJN~S$qhzPbotoNvP+eTYIsJ5y_{TvI)D0UpO zp0M6~p{{eIJ9U3ydA|-}0q{9c>s+c@60KT)xCeF-+zR_MccJdx8vec2+?WyUO5w|)b^@K&RO}*IC|SL~oz zEiqf1Y0)9|0+M+lfS9{UxPpP#K2l0g5k=;Ghk1{=_e7cyE)T8Lb+)?Cm?M+}+{}aB z#&>dm-I=e_kxE2EEgLsQVdO%Q$ro&R#|g3tdOEALq8aJt2*|n_Un>1zMm^bsBHjH? z!MLeDEm*N`e*B7(kr&e?r_<|7ljm!*RzaJdVLoj%6S-^CSJ;D#noWo!jhm2HZVe|4 z-I4ExMdoUj-y7E$)bJZedW_v6h_uM=MtJT>Y`BlfB`nT>R97m~xM`Mh>{ASnuT#s+B_L+Z zH(ij?t{pJ<&ab5B&D(gkK*~2De4=n0*?GZ15Z!o7fAXH+={LD5lxqu~Gkj&@_dPR; zUC8ed`QaWTO9k(EKgM10r^WnWo$D2YA{Hc!UpxEFx0;5qHOUZ5%>`4s^UFbjrin`cme=tlatV=>TdoNyU-oYbBQBZ)<~E)H-)6Zd zA$JFSTK+jJi_{Jg8%oFVo$Eg|fLkn?Z_Ogwz57b#EM9#LM=!)h--F179D4S$ad*A@ zOnUTFLqMme^y>m;G_{fevLwFLBJlmSb}KW^Yo(SwuY4+6jLdzkw1)Zg?c*TDtH$pE z^96>UVt#FWb;buibmoeGbF*FZ=7`iN6~4T+Al!)HGXXYBZ zdH;~wj+4RS5R&TzIbk`zbRv-&&%3!B2kPKFJ0v^KEF#gGc4?>_1+B)050k?R*&Nj{&vi~z^OsIkBDP*B!u~Bx*goVV{@%V60!X5e#YNu*r#fMVZM3>M8lv5ju;Pa zu8F&?ws+0`2NbW7LGU_r=;4cGifm?TXEO^fA+&ij#5Kz4YZF1|E^q`cd`VjZ3QpnA z_56Er1P(ZApLRv?jW5rrT?=W1bzyUL-LW?!*zoRC!)>E0U1_T zJ1V^SWkQ*w4%QwW3p!#{_L)_{caWrwWTBK_@hWZw0SK^Hbfg*&X?bQzXVG@+unEOp zfE^jMcEBJTHNSI!F(K2%b4Ew>(g4DMF{LgDc^`82pqW(dDf<_YYdKC{*t&UG{|N~9 zAy+94*YB*qI%q%5{7p|9S@{0-;Cm=#!*{omW&KumV*OhmbM(CZw?Snw3@Q|KRx~YW zMNAai^H(|TWN2A{Xdq%D%YvfFP(AxUgzypWl{%+DC=l>?p=67E;EIUg!9HMv_ZN>& zO|^YyTZ3pYJ_A(~h@Kv=S$NihH((h3`+K-S835t=YuKq-*O9vs95Ll!AOI5^ev)78C4tuC--^dG+@pit+e86O|k0JUGmTmwOwKm#^q1D)fqi?HU z?Fo~THz{qlSEe!H8zHd?F5<*XH+j&KlZRDK{_n8->b=$F(t%ii>xVjxGzcx;Xf4L9 zhM`vgTK3m#>%3S+vA=JO3i@_z^%CNNy~$3+2@F=kByPN7s(AUQqoJVp{i9Dx8VrU2 z$!m(qR$gqik|z(sC9vSweNae!xc=|ZOA8EmEYCgaGwcXURmd*aZ?)qG4Y`NiEvPKtY)wFr|4L)7YXDCWd{i# rH8=|Z+Eh2G{$$^cSk6Gn{B&2#{V6Uj9s@hI0j+Ddt``0UfBJs`mm2K! diff --git a/apps/pocket-remote/media/deck-dpad.png b/apps/pocket-remote/media/deck-dpad.png new file mode 100644 index 0000000000000000000000000000000000000000..63bac229f8718986aecd63c0e8491b10a7fd12d1 GIT binary patch literal 16230 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�h5%$q_Yk-j6fi@Vw}mf6viX{ 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 A!vFvP literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/deck-drag.png b/apps/pocket-remote/media/deck-drag.png new file mode 100644 index 0000000000000000000000000000000000000000..aa0d8cb1e011e0150578d9f6d7dfa0afc17651b3 GIT binary patch literal 16032 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 literal 0 HcmV?d00001 diff --git a/apps/pocket-remote/media/deck-variants.png b/apps/pocket-remote/media/deck-variants.png index 9d2f7cdcbd60a6c53f727a743edb87ad09c8d773..9b9b10c545edb322618a2d5473a537220b7cda04 100644 GIT binary patch literal 16552 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 f%DAH$k2L`xQ;TmJ^9hu?8gcSj4W= diff --git a/apps/pocket-remote/media/deck.png b/apps/pocket-remote/media/deck.png index 8349216b5212191c67de1db42728ce8cde9d4305..e089d46d3560a88d728b82a06a72175b8028b8f3 100644 GIT binary patch literal 16064 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 MCDV%)7Z8#E3r)S{g8%>k literal 14883 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 UPI&?G;ZMLVojcdduR)&tKLx3czW@LL diff --git a/apps/pocket-remote/media/menu-apps.png b/apps/pocket-remote/media/menu-apps.png index d553bf039dd2339a76d7e4ecb899cb65a06c4bb3..546d918559e5804d936aa5d96845445a89410f11 100644 GIT binary patch literal 11354 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 NoiILLa?C0E{{eU*M4kWu literal 11388 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 diff --git a/apps/pocket-remote/media/menu-root.png b/apps/pocket-remote/media/menu-root.png index be4b2922beffa36edae680b636341a137fbf0f5c..ec6517469a1475fc27a6b11027f29c33c45a753f 100644 GIT binary patch literal 12319 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 X;q>~CZiYBWPXWD)1{VnDQ4#+GcOg6> literal 12348 zcmd6NXH=8hy6zW32puedf)o|SMMprY6tN+KQbI35UD6@aOMn211qGIX(u;~fLWx2M z#Xztj9YKl&NK|?Y(tGX~bnm_H9^;;0XPcjVNMCrLp zez|x7rCcpC7hC&Iv~POCrd7H!2;02;3fGIZt&h7Y5 zzTe+OPJ4NcRZ=KzUc{i}qQEfE@*MGB&(uQ#b+hs956BsO?=`J-@D?n?XbE}N^k#B^ z@+Z!Zg$*4E*o1}>BEe-z?oC-!z{&J76pPW?LST_xvcc6B; z3}}^ao($=J+R| zVEgKLGtqIr?a>0OC5PINOw>bjt~QktQe=^j_NuyG2^u7CI~mX`FyHy9 z_^V1y+Y+Bi-wPJ+ulUcNt|BVay{pMEyf07bbVUX4jldnP-T+FyR*4z7w}zd%jj#9X znhcYIlh|T!7B9@ojArg61^9(E2WhV#f}jlNhg3qygLQRME`y)b;L6Z>+PtN5?RMEL zk+)#-Yxv88$dmg3E+k2WeoEx-P2(Wyi)~_gSn+W{a4=w}E^4y1o!YD9*^y@H+0^9{ zEf0HQ$k3eR%1`!jk^=?@bdvjIKD@XNph9k0=E#m31!^iJZ;a|v3Eob9DPNzSq;5<5 z!&F)2*02s>^C9Ag);949#Cld7}K?@wcW{6}LG081QdKu~3Yl*diRuwSh zxi)1XgP#f2&*H}^@7r?EL-Fx{!51H;jwB5{@yoiojh4AzPPTU6q|hg1-M(P^2^JTV z7d~ix?097+AneHNzUN77rd{o+j5a&*rbA@mZ1a=pX_OpFubSeY#3Jc-7V^f*iN)hY zj>jGWxxQLO?FEb2XP@?xHx?w=yPLL-O`K;zX*8x#>TGnWX28I(#P#^(!4%4OPOfPl?4WC zf0iD)m&8K;hOYBydbGdLhbw(MMp>7S$EV+Qv%sSuqO6klMKcGB%iiqJlG*CTfP}9K za~=*dJjigRzMVmhy^-+hym^=Gx#zs(^$nkzN2`cV0vmoTdnYls~*k=)lZc=DD; zT5~=$*dt0jo3HZaQJx;F`cf~B5Q|aiKM?ILuba|E9aKbZ#Knu;@A5F# znk0>2&BAR0y%r$qAv&X6K}3T*k7Egb-S&pMQ>UL_Pw9YgRmh2idVDXZL1foznu+_@ zER|VjFK5}OBL0w=Riibe*%$bUUZE`2^uM{R8d<+-$&Hy#%5BLyZ}>oi_K^+s`f-5S z9BR8m-~72*dP{(YUig=ALwN!6htd>nliA*8r;*r&HxetJhX(hGV*;pUb{wZQBd#>v zFOk&S>HB_nX(3Y1_M!-BuU^gi$QfzN{3na61wwxny(?X=Izw%eI|T^U@Eri|GS&r? zGRgxy&LU)0wV?DmAi!L@mm6>YG zx@maC!^0lH)6MJLJu3x-_KpN4mAh+7v0LFolq0ec@rpU7>l$as4#ORL#%lYlj%ue2 z!dpA`^wQ(5+apkmkFKdiKVYdUkJMb8vKsdv??buu_LQ~Tl!;gPEG<5tx|X0(BTxUeABAf09h%-$@5>s9p9Z^LR?Q|71o?Y4IMe>fXg5FL_$VSGxhE5)e0&mZD5CJ$<&#JN z1fLWeF9UfMZ^)}9^!T6ux-jG_D}3&Q9nNy^Cf_KQ1OLjzz=3^ZdLTKr!dgtx> z%rbKF&oH}2onOKDKKGRb*vM(=NCQfuo15soH)?l2>_gDzl;$){>fs5jac)l3_0+GC z1?RzDD)I1SSO8cu#JL~n{BI?^3Pqn7Uxq3s`RsR{$mvoNe?@x7GIkZ*KN@q3wNBj0J6rY$wk#(JxG^Y$(?W%0r zHvDN@>tF;ulFNPY0DE1t!W{|OH8J!^2<4^V9SnVo7bC-pGMYZG{5m8fE&c2Dxy*j& z0nG@p_5-3BM9N^8+rr#A8PeQ@uJWd>d+JyAP*Y)~J1V%5U|(5``As%kt!x)KZR;w()}SanJmJXR2d&!+chR=nwIz26zdbO6sSp|U< zSKBq1Dk9EJOWr#!bHi#|v+#I=xt&*;6lR&H-0Uxv@3BOYh~C6<%FDwpUO`<;_bXTV zJgeQT2Ou^EeRT|l6Rig%L4GLL+H3}ZkDH0jL^N?$vf#!737BR?jdz6A>|kO!v^4&+ z#vs~<1U$T_PXKnD=sVQG%KGqy87yaC!}|Pl#tkZ?Wm?+r8mXZ-m7(*lW z)CPv~1pmxiB)_eTwDxOAiJ70z`l>)%WQNdL;QV_DF8126$Sey;0UgqNMz%q%nng2w zbMFzhY1`1Yk9h>Tco_^0nQv>o&Mpijr5d(^@%{yjW-eK2q%`ueXcI4pU?)xkm?F%< zXx`kTM?m0Y0wcJZpjG4H7d*2Dtq^!;5kC{406jsZV-(X*lmh%RaG&3AtmiX-llKc&8 zz{x1GI#`XV!Z0vXuCDk!-CvcxH`rdbZSZWLTO|Z=XY4eTyd-&)f9*WQjxns0bOLc3 zPz2;zY1unPgIi_N)?Px%s>w5$>0FNn+Z*BrosuG$7*Mdq;n9LwJlb$=Pol?~^;HMe zk-^h9aYNTO0mY`LBXM905U&y3`dsfxA_bOI&mk@6@vyjAC|T0!u>y!_zyZJtf|SEf zU76{|-fWw7cO>@fz-c2}3bw?Q{ocurjSm1`37;K_F3qsxQ)Z*<&VC7AG3vvUDS+yDzW z@S|x6zzx0)=)^rHFY9w>QH^22)!6JrH-9+3f%Tr2(2pKpbZ#LL}JrKi@G7 zKA*jvF#2LOqjAiSPP{zZO!=jng@>3E0)OsF@E&=wnjo9iOwx^57=7cldwg;~gXau_ zssMD>$Q;U~fSgs6-DPzD?p5C5&~8W<666~n7O!Hcg-|STvs%1q3iazv_7T$_^elcb z8Sxh|55Nj9Qd~29<*`l3a{BrbPP`}@x~9#qG(Q^k`RCA0*Biqv1aQ~lec3l+rm2*} zuKL!BCUo7fxd&;f_KH_>BHAi7h`v2_3PfXuu%dozd$G{nPGil%Ots z@cpjcRRoXLXGlNdd8iya*Mn$ZVKUY=iNe}_gJ6G2q)k~0=hzSw>>ob@2Y%`y#pWT- z;9Da>tFnE`h;!+DpA4&X{72Fdl=vKNpVBw0UN&CxZ*C1$cCV<6FloZKU_Dy+{KSJa z>hg`DQVwuKE%?6k2P0Bmj>f)7LK&a2?c!h1>hn(SIUl<8Q@I-Eq#0|Mvn6GBmb+^n zv5b?h${q$!r8@SoYg^+>A%|+Lx=mXRR`sh%W6?9Y0%Kd@XC{1hN0~SfqX4v**)4c2 z<%5QY2g~bTcR|2o4$fUbO-~+VTMait!Dsjhnkva+#tyZQh;F^-U8=TR;pU8S%U z-JAIjth+pBgBae_Tc3E%akheqFeH%=Ncx01C|39d`us<2Tj#x;bJGH)Ch*wrXwy_b!KKP%EJaiKaKaabR^vj*cu7x{;K+zQqTwDjvSHkxv`^I zb7iJlW~C*%G;iBGBbGFDD^yoo6Rv_`6JsYswFGlc-hJY@z_N=AEY=tVVmfzP(8?_X zkWJ;N!v+%S%OZ~u)p3ufOJGRI@{f*4#g;}#MYy=S^Kf$UE9GQaO1jx>~DXMC&J0A#I&urVk`g9D*dW*e<>)6%Is{2_h#+(%(|J z#BcH<5yYH`<>wBCqm|2imj}Eyj?l2zz5F&|J(9UFJ1?VbHIi}9{8Q@IjpN6KE@Jff z`Ob3xp7gxHZE+jTlv=oY^~5DyF2R_1_}JYN(TC+Ai^|_6Hd{o+rN1v%F$O^VbKteC#{g7HhE9i-gdUbtK%?%UqQklnkb4xuuuM z?Ifu;WFc^eX^@!_iQ@HZ+qk^xOYKLkISbvY*R7+h_yZ}h!I6^l!oGocLipjoWMc;SG=cvBH?aZwhuo8|ghRV62V*V1oi+tg#yvFW z0P*lT{Wg;nsqgaDzi}km4?}D1doi5-wLf>2G?}6X{3^SDI zTm9XpQ}*q`Fl3jVNLT`8)K1V_!E>gw0<0jJ1^HE7WIUb_p5!)tU}cBvqT$f@O+MNw zNd{9}febKRfQ&`MsO{NGevLI^^h_xEoDS&6B%Wn`2zD>z!7PWp(RtCVrm|)R9=^Ri z_y$nqdmD7tMG2)JhFBbpmaiJUaTVn;$T|4MT5De0<)Ngz~q#H6EcJ~~3&QucM z!TfM0ErVDhN(F7a(gp&$ua*lUi-z*9#n4q>UJt1kayzya?E||4y%u;O$=zx@MC}LygSoy*f0YS0PxErs1ebtaF?!pW| zq4HRV`K1hyp!s=OI0pqj+P|&E+>@`N$j0yHW1U?_juJB>qu0UAICHL{B8$pfi8acZ5di)BUT7(941ft?PqW3t-1$lJxxj z-t(4@R+#>o>HTBpB|4HBH@P7a%z)$vEMad#JcsRT7RKMq_w2|@Q_Ucmj)|j{9I2Y} z8Wyrez5yt?{70qJf)U5^A6N<8%ByD{x~n35>~BCDL}{@$o0ZJ1->3wabu+Q*p+{{- zUKg@DcDVSC4VcQFtQ)9F!|-FC0rnfIlJ+fbKgJ@Hx^w_;SBO{mH{6sJ0(JU_3G6a# zMu5y)=e=fw%Y#vp3LIapZeI$Wxp4w$56YBwXdBh6deZ%}pVVkU);qwirhpd3s8#U1 zVviHQJ`V-618-do(TX0)_%7~;3VhdL<3uzArU_V!RmYn7kIM*@9O04lHLt!wpV!iX zd|SI{(>Dy&TFstkae~w4>I^|}+6L5loQ7gY#zKd%6Yli&HjpmgBs705G3&jC12Z;> zvoybAPcY1RRf1oR+|@jBZFe6f>~@J_T#@he$2^zY?o6t2kMc`Koz!}ii>%WP_{ZDAY|7xlz14yuIcg0ujQ}k{6FPjy}BzZS&-0pEjQ@YYI4`E~$dXchF zTk{>hHjpO{GsM8a0+I706y)wz&H#FAq-AXCf?BajcIbyq>c5C#o(xT>quyg>CbIZN z%QHv>ftPH3KzZ^vAy6DNc}7o@pLkPNLRnXtAlzg zD=XGCf)3-8&G`0NgDxrz##W~~6N>x8V6yB5GRTHizQ~O@8xTL!(kMPo(^U7eV;3Dm z=ypsGFpUWqj0n_r7^q{Z(&|#wr$@33^j3%RnEB_?4`$XSL9OF(nwocgqUjWRq>Gr1 zCRj_`>u9ZQzf5263 z*Tay^6}0YK{8bmjKW2VL8>mE|ipe0dP{!qM5O_Md8< zXm7T9`^Mgi^vPX?neZ5T6l!WT;=Di#c-`A>FF8Rc;v;%%o$uy)KUZJ|vUGaGM1?s5 z{x_ht!>OQN$ovC+3{erChmq#Ty*7TQPUWx2mCZelb0YZBMKLhXD2?hWqrNYv^fOr5 zS%2!K{!9PvUz_5vwsAD?MC4B)GjDt703P)cxIW(3O^03JNGrMN05fcKQXlgm-5!NR ztu{QDxe1!ZK>v?-1;KkQMIrX?qZvN={+4?sV8#gS9iTYxrqu^5DdrYf7=PPaJ-Fp# zHZZQ$#ALn;@2q;tu(Z&RcR4{WkHZAmnfm7Y9bTIX&kMWL@|T1(|4VuwLRHqa#x8-g zBs!3?I2#1?R(CIc*xl39G_E=zm9u|33GeS=x&RURFotdkv9(mHhMDpvZdlQ~iHF_d z)xwK$Xaq;W_@ksayuXgzcV7Vl?g5wF7PD@!w)jteh%5svm!~5v@&vg`7YzCR`M#qr zl|ATHEVopW!hM%?B}mAG4}-~^izErLTWpiG(Tjt>UDRW8L=R<**+A?8A`4SVjkQPt46- zH*DC)z@3%jO}bS3RHMjmasdUk_7Q+tB)AF*t6hD%2|81TdV1`j)QZi8%qvjYKN96q zD$J^%Tw_mvfBD)+XfQ?tq|E>5rE&+J3cbmm&iTJ=S^ZZq^&eocAglhrM?AD2<1)6A z5#Ro8aFgk2fqHsai*uJo1GItZC$>(xhaUOZ+3rhh1CUXxZ$DgVW$NhXSGL-{_XRII zcGXFy?lN1@L(_wCV`6~$pGgYi$c!sbOSis;xiF0<8U(lu8}t{L2dRMheliww@WJtQ zh#pfQ?22MGTHE!-F;Gp9b-t@t^{Hn#m;$xZYs)P;Hi$55HV{7jMoB(xOc}_OpF5kN z-fUay4ga&DHgg3G7l`&%cCyGoET9;NpW;IzD%|kyCp3rVMvAPw-NyypQ*bF(WodCf z5zd;m=PkYVJ#5ivoGgEO5i5z%?qn4^AWHR$JwHaWx2x`1Jz^(KyJ)44d;A6E>zl3S zR6F86aVAk7feln$${g&~RSfB_1PP&>YyJnRLxr3LsY_LG>zo(j-gF=?e+YMYsVy`rr_h05>$ z2VmKgv2&7qwURLscP~nT9gN2r9M$cj zjqtTz4>d+c@(KbuRh>OyUEKmc#rJiqfPD;q#kR^XCZYZL`Tqf0_XQq8xY~~v| zy^N)|e(ufW17?}|YUD36sb$c~tq+ILDRx{%?9KVHjp*Y zvaEa%zOm#XSQwgfNN{dOxM?;?<@Rj+zROe)_r2-jsjZY95F7#IUY$<9{=Z@BsHJsz zIuYpKhq01JyJm;a`I?fpcY@MbtoccxpdMRmS`1XT)=L?TnC(^?AcD5UB8Y?oc`l$< z+q|PzN(pBv8*l=-ci5XsjymzkotV?|A*W+=x1}7;a-YE{0(I5>Fmg6v-+a0*+P@bN zL=S}_-Z@1qCV}-HJbifpL3&J^mL5SHbh4D=Vvl9n@x#fI=v?tiIC@vb@6*C`bLFu* zL|K+0zG+_MD$Q?&aP?~z#1%8@%qNmJ)mQuyssu?$k(FqOxs>EsPgGx zp}6*(rTg;-R+J%p1!iVoYA_wn2C5El_&eI21E(fFh&LBCmkh>!(eon@oqqmjQF&O^ zl!u9TIC*L1O3#;v9*8UvnDL#4mH zYM`C2n;6`1bh8ax0B(@Jm?oX(iO1FQ$M>xR6+tFJgN%(5eY zFHt@A`F4=|?_Dp=r2HhF3X*<$9OpQS7`3LNInMDwY2QAV1ZM1Pug4s+UFMIsg;;l) z+p9=<3hl#d4urv(Pg_Z8|vBs~s3qvA$_036|Z9#>-INU#~FtzVz97VE#oL=^oj`Ajr>xGfrv98)3Lb*0)Y)$V8+y^W zKq_OalZPA^XS+^6M_s`o3_{ko5?5Z3)3ZJN_|gpxG-eG#G(xr|`(=Jc96ezHv|O26 zhv#3Km05Pq2OL|3J}}3`i;+#|$_`iOP4s{H>eKeEvXVK=bCojn^TWJzB$zv zbw+35`bC#$PmctM=;GWW+*zmzJ=E<)zBX!i*h%==A%}f~F|QY0g|qd~4!RuSSwQqemrZf*Y2#L|HVkVqBWfs;`13f zT6seE6Tm}-Xkb~Fb(}RzqOg54%YYaW76|aLa8e_CY8<~UU1%9hZx(vl*;7MrMdE`M zXT{Tu5D#*Ne?MtlT*J342K+o(MJX-TrRPqs1#dhQ*sBr>TV4#{R)mjh@D>zmlqkZ$ ze=K3fKGfPnj^+;ilatwl4&LO&?c-r4uMLqi%Lg#g;n_z485lw4UioAa1j+w#G1AiS zpGp80Yy7w|azkG8J{tJzmxKj|sWf)u{~UPg7l^B`Nv_Xc06@shW%x|)7f-|X7T zwV-9Y0hO0OdEy!9l|ScK{VNrrS zFyRaKZ9tWhn(UQJwH2J)Cv|Y?v+9IEE?;n%Vm9X@f%c%~(_b;YtuP`4RyGEXxIEjR zTb(2nvo>ZeYe|EgD_*Dy&~DaKR0{Jl=i)Rr12j~2ucEh>zs5%ZSEPTL%lnhY&4TUx z5gLRbtzpF)1;Md%q(shYFM6~iedJk7t9cU_r109^f((L^!@Got>DJdjYs=5rXt}++ zOAu^35}sD$Op_K8revJ)LcWmS4j61$JWcuWmk$f^KDEwu3U#OX{lw$jC#!bz6alZa zp%?A6&9X)dcK69kRciX*}-{7dR}QlpKuWUIE5gYE&t7|l z$*XB)I=x530t0_8{jr9I298k^bA&Ry4l<%@xrl1|V(r3bTjF9cZ!_$-LsK7>6Rm!( zt1pS1QgkyfkU4(f5+Sg8T~)cjt*K2{`eX0&)szp?Es3JB3EU{Iu6%_Nf_GLK#?eE0 zET^!V6PPDwx6gYXJT|YCr6-)l9AT2%T@yWACqocl10XdvSB&#-CSSQ8!t%Zx;G<;3Qj` zj0W9?EIG+#{0=z^b^~5Qc;z1Pj&oXVM)-Zi)UdJ}(COYd>`;%3@>Ibp(cD)*(ADzw zgkKm*`Lum{CUxt~^~&Prsf0E}iBOhMUK#2#O{vi2D2y1SbqprMPu#qoj_Ha@-#o}) zre<=rzjUPdh05LAe8k{Ir$Vn2lD03GnDemAZZEm0ZO0VkYZC}b@@Cvbs347k1JG!5uM>Z zr7uo33|7RA8zv^qwUvp+v7)Lp==}aw7r?ewJyP1}+2aaogTF*dbjVe~VYZ=s8dx~8 zE%XVoD&eq;0=`bJz*;AVf>rUvDXO^#j^vQ=Q)ru-@GT2Yta_iWirTYpk5#Elh?3Nn zl>Pv#Ed>`hGXtNRLDsxyBT0X~0gBC&LNa0sND)0Mic|1X=cX^19}p|X_K3kuOA&)_ zX^0)NvMU?@Rc4p;=6+#MD&%d)NlVirDg2B1E}0{ycZ(R+=PBv79ze0bxE#Q}yIOQS zwH&W>bk6YSI8dnke$C~=$Ia^*4F}(x!nzMkW+WA>4p%qaNt-h}&^@ETeamcZLO2of zM7x|U-X5l-&&%`8g%ztb?Y=xf(G#<{TCqR>>P(x+-zfRq_!Q2yCi3E})ozuJ)f@dVVM$tM}Xfp*<)n~bC^|cM5W`k+ovi`k6>B{zRI=a1lS%@dNL{(t7 z(!X=7TgFAlq(VwNZ$C(H+vT%eu)S546#EduWLb%;z|mVE_x`3_zyYcTWl}L9Hsi)q zxU8Lf@Aqc_&!=e!AVPeA{kxbJ4?qR9ST1tzmHZI|0IbW0C4SfRunPv9!}37(!}eG` zR16?OLfQVNVC>AlvnTm~H6aLiU)~2Z~ zvC5SNVNOS_`avJEN@@b%qes$&4L(Ke)?iHTvheu1%$-lvR>FR-Tb-nc@0Y;l zeH&T(lQtLHJ|8F=6cfl`=l-Y*3A{Chk}q>jBJmj7s3=a3RqPGFTT<+5=3E_;|K5c< zyECUidKEF=9Q63PqkEaa^<-~q8@@p(+coHqAU}81pdf`4&J^+MyHq}!6SFC5r2Q&( z(}J?C4seSQIkmUE^1zBC$5(aOn!15=-hg`svFh6IL6S7G2m=AT+*lavvSjH116wl|91U)WYmVYZpd z;!R26YMGK&j~iaxdRdplIOa|o6X|@FHj?gH&ggB|3^ARh*M4YmoNs6JI`|ff<}QvX ztN90%x!%zVD{4%4V}sHL7+wHXjP`JM^Q803D~;=w?`7;Z3bRQHYL(JOjLhBT#)f9Z zefWfblO>dBSIZt8&Oqi+M&PX>{Nk6FLa3#GyooBS_*8E-|0zdTw@STLt044=t9WCgccRFL2(8OimLo=?wcXe{djglNMQOYjEcU?_AR0>7jiG2O2^~a^yd<4oaRg^)?sCy+gt!|&Ez&pN5{SiZC z4u%cIrCMkGz9q|jxJcd>-P(EwGh{QpG_!;w@7S8p4DM-zN90m=%O?%-x&gj+N>2eJGOGYi}tJ;topnQrQn@AV>V|RWs zwvR#P=N^Tk`A06rwm^r%yolQ>5v$^TnAUq?&762y#8Qb*(S2()I}mUfi}`AuT!@k^ zar3m~$dl^BZ`g@CU+6^KNY9q{AdvX6$0bC(a&5SX`eM6vzFXS$JG$sp9S^ypfTthu zU(Z?tWYwkmiY%H#q`=$_&N3eY-9kUCw~Gkg4z zZo@$5Vsr^@Cw&VGS(axrBnTg0X=F1L%!|Bgoe$(Qf{V7H??oMk=XTd;cK@!xzpLlH zt6jGArz5bXhRV|FU9WkWYI(LRqvktFa)1#+gUXm!y8e>rh2yO~E^^FNE*+TVp@866h__KQ?(p+*m`s2CpF6c@=>ipZQ*H zd&%^2j>7m!T~^P|`f{%jAfN`tVR)rOG5`>^@w zoR|1{Wy`me0*^_U=y3IRqI{_EAA86iJOBf#pFnO%ez#Kzv`jg~!)biHz``r9&dYn- zmno__pN*#%ioRkYLKICvPSNoKLsW(Y7T)v6+j-@apnQ#cQCj0TFxQi^HCUYbr=H5v zpPQ^z#|lWE|EWm8S?mLSXUWyZRutau>fqHf2q`Ny3jakbI%``+k6G~zkc>1HST$aF zl9o%eYCXONxt!_ncVC1NcZ83E_$VO*5}TNC6yHOV*DJe9vfH5KZXE7__9SgCt>1#XWXt<;@QL0K^`4!hrR`w{e`W zIEO--E;3snumW;`6Pp?~`XRUoOu7{SU{pZp2y*}+GowI`gtFLogtf6iUM496KpZ51-nCyDiW1!&Dm9gc1(GtF zT3$cMG~r{2(Z?UnsZIGWc!g;4h~6+bae}{ow~;x(RIs`eu$VJ2K5TLQDtcv>pK`(r zS@&WmjIn9i2Anz<0DWkYR6Ma_n_1N$vz-~GnJx}|g53n$gHem2C9bpUPmBlrmImBg zKC5V7Mj%vV$tMKrXjd|8`d=XOg3TxoGQ;}(XJDvZQJEtM;MFB7J53fl<$HR~PG`uS zX$>#Mj!JMm9m!pUt|{aq4XZB4YSTj}L(@}P7s{uL2SvYC&bQnpbar_5-Cm;43)uNI zxVLXn@W|;}q@JP?W;*j+Q24MGb8puC9tu0LHC%~BQ?vY49TMpEUcRqVoLeFf%!=q* zlUa&+w06|2)pmNzZaM~po0H=Q22*^@?bP)A@@_zS$8b-Fq)Dy)_!^zWIXeeFVysA* z@)*r&Y)Mtk1by1xw-(FKQ_;-aFCnZY(Q!|R43)-RpEkeK*@w(nlp%(KPJCa2hVxLa z!^<7AT+>M(E_eIi%v~T6t&C+f;5R>*)2o}=Qlj43+xokAcb>s*aZx-~lT{feTL z2XPQ-ms)l+vPXXO2q`b@WhMGSBHVw#3kkh}F2BRvyTA$9(qX_5>Y*;KdHPTGQ^P^l z=%%Pxt`;YVl$8(*CKX6(@cY^+S@zgw+9~$z*OBMtbseH6e7tm->Ivtoga%3JNkCI2>0MEY!yH9AU*A8!b+FbLZJoXle9&KQ2%If^#mBNzYiUEN;w4Fl{pc zHHEEHgn9nlL0&G%NiDh}SIT<(RawCs%n+&LG2BtzUZPLLeY{Cwg_xG0j!ZKjf9xh) z?2o&4wR6yvCRAQ^`1A$;MyYC!evfk+A(96{_{h@Wc@Bw#=qEtx+@{XP)5Q`eifz{3 znP`6I0FfNPTEoYV`VhyYKHLyQ`-}1Iq5J#2MG*j!x^>y=Q}nqfnnjswH8ueOaR}lK zaP0>_w3<|(q$lA@zL_TKx07C&HIv1Gu#tb$7f59PPY_m$o@uS&& z<_rw-9JL|xcX$OXrCIpCe{*D{cGb#G$6pfLWfv%0t6VpR!$xG- z_@xce?TbUmAZ<0}xX|@sm6k_w(|wGQTzNP}KSnF0ZO6hK7tY){LwhL64JFEWxa%^t zY9i#<5*_!l3OD8=NNn{0f!oZlvGuy$;$!QEP3G>p35p3ARU$g8ys2YAB6Phc6VHi4 zKZIsSyU#<`U*9!6J@eMtq%o0`)6=9%vOwv%duG`caGh(Na@9^q1e}c$Ul7d;)GeSeodT8DnmZ zSP7={pGG#@hpxu8h7U}}aJpp9b!!b2l&wTBF~dC@T)gCc0P&4%?pteSmO zQ>)3CEGK?W_RjVaz7~02s?FRV^L#J~qGm#U#M(+{>WmMtq5Iwielo57kbg1%llW+M=EenfxY!TkL44sMHpr(mERqkrf?vM|kj@~N z%@FQ5{1v~sQ7O=JLee(fAwz(t4>9qD5BVS!UO%}9R5)PJCxamxSXNTj6(a*9f>dIu z%b^B+RcYAz=UC0vNCWbyQTcv=B#HFKhpBaWV$Rq^G_1^{iO|Y)$r?GPX91wXx$;@T zJ=xpEYxAXGVz$27;>%CT%k6cbGsSz>7Gs^RxyE; z`v4If8Yrjc|IdNcb z2LERwi8SeekZeRdV$Uu+aE=Q@na7mp6M|}9pbx6zoQb}T?+_+6g~9@jcXJ#UYxmI_ zH=Dcm53WB)AE4;{hvgEhin^SPqpHhkB#hSF8B+HJORtR!>~R;w%BMu@ZM%x%y1_s5 z7qk(55wXyCdr#_%6A6L`Q@}M_8<%4iXrM9a?QR>E#AS4>F>r&_;uXF-?RcBEpZ1L9 zKcM)J3*BIleaw>5_+oDKK4a$B%rB-ZcX^MVS(70g_0Z)H;=lSsj_xJUBK;wtGHr*j z!cZRqD3K@QOuLXqkU~=HL-IA!1=ggO7kISOL4c*K?Hc+S8_BRlq%)63XAqYB{44hE zS8SEhqRDg^W=6FDxxIF!<)HRXkgHrMsG(bOk)gId2>}ETq34(0ZnE_7;(S11P83~+ zjz0uEzUhjLM#p=kHfX~=l-6s5m+rSoH|a@)O#O6Ez(7ZsntGhze^gLlRD=bq9+W<9 z-;kK5<@1PJfbDzaSD-!n6vTUFb266w1F65Yz63Zyb*$oW5f5K8hQD;~w7-1#l-%$S zH9ejFkl7z#yzq`QVE5a2b{p{PYmc+!mU(!QQRR%^VBLuU1XEp^!*yMerN`56-2BlMsI0+J=z8hU_-Y#x# zKxyAAH9b`SS;TdS>6UE$ZOt(+Vtd<=pYhUe+_PBQ#_ib0k7y>``|n=W1hC1lHFj!q zOuE7A;E8YI*ImWVsf%F9CSa%(hTFQEnr|qWD{Hz6jVyvM1yd|WBt9^J5{Izr=Co#xWzhm>sXS~)H4?AFRK4B7VRX!Tg3jy#j{ zts)mD^dl0VJ~hcDW8f8+eLjtxtZ5oh%S{J5Q_BybD(nQ`$!nlvE3a6;jl7KVU~%cN zcW!Vmd+o&tw9AyAwty@wRjImTeBRC9R$wY+V!$2=uOX=QpUtBRzfXMeb~93Th` zD!Ddx?AEr13;q_h8Sq6_nEzqPR|YmHIv6>QmCYDn2PqbSM+rC&2f9ZO_e-IE+N`E7 zy*UDr#YqL^k)k7n|EcxDY*bMhJs9v;aBgcYfK>MsGNHv=0cPLepLWUWm%xQ-NGPa( zyjuL980dITsrEo$WgQ2s{m;BY^K(w31EHA^y~!cyNq!xKcbf^9$1`a4SLO~YuqJ3J8kEs!7x-ZL7hag~MVyfTEDO&uhHX-bfwx9si>hRte zWxc@`?|CAbRp9RPx7#T`em8R`oU4o=EvSBwuJ$IIb0{oJU-{^u65HB{bBX0xR70g; z$vnhrw_wM)Kz|zT_2m3-lBO34f0<_D4-BOVX|sE3ez7$zO!*tH_&)2!l$0PSKU2ml zfV3d>aV1#zfSVU5ASagn?Ed_JsA^y<_7E7#4mDb=6R@u`?%n@wQ* zT!zy!q7g4TV>@|3d%u_t2!cz?PCa-MnIAG*8~G@w>o*HAu><1W4TuS*o7ijZ);Wgu z-N*-+V*L(Nh=UGHgUWfPKu%*Sf^+8p$?u0G=$p&g+J@nDvi7@(Cuz1<4#sh`fKYCv zwf&9!*P^>hZzIiq_e?UmloH~w7kW+ZaTDlpIiH@#GlHHJrNEbKEOE#ADZh?^7+&v@ zidv{UyXPf=R1Io8z^bXel4wv11|SJW)#Ejn-g#JF=vt}-!PmA@)7Seny!>bTEGZGP z)jlja>zA(Ob9yW@pc7R0N$I9ujjd*U#kCbkT0#*yT-1H*Sip=%9SsC}+(O^(yZQDn z6Cj|swdMt2f_7#1KrN|Z`IULMm;!Z?gZ28d+fWclcEV~^597Dp*n)$dO6Sf(hd{?B zF6vL9@5f8s%ef zqKmr-X)`0fg=;l*m&}+RxjGIXOy5Rj(N{cr7s=G4g5K&&zaYen2U+lk!QL1?Vyi!# zU-vTgfY}WJjuGSdv|Xodnk~i!6SI88OEs#qoP1jSddAEpyG%*?Omv}4uSHfW_)z%q6i4U zh1Vtr$(fcpx+ICfiD&bNc-gCm-4E#a5u%@%7iYO|nLX(Ai*)x>3c)btA?PNLPV#(P z|J>GS@*qXnJelVk?+up2=*V@z z@~Ax}9zN=YrIdDL8D@WV?a(M!;x&YoXIsihnrWw6J$DU}af?cxU(@XWj(GwkGd zCJwy4Z-p4~;UAa8d)T5Ji9N`ME}6iW9`*x#=wa0$o!%dyq2nV}UZFY~%*0#?*VT$d zI{Vu*%?-*4xn*U*;O&uOhjNbYlp5u|xB)@bM4%we+brYEWVECTO%GAO+OSQRM~Tkcmv6y!lS?p`swu2ss4@4IJl_6yH-V+I;F0PO zzGGo=!{4r9O~4>yYI0XW=Tp{x9y!)_5$~&j9thCXNUMLJ<@#>{u78g^{BP-MNdOT0 z)PyO>jJS8Gxh)_(`jQE-D>*A;I(xwp00fvws+nKgj~NRpl#!?tBu3HRNk$lj|5(9E zlKmG|(|*lWMHt}2CWvLz0Y)9v;!dn|AD&^&>pUSTS9P5N>eBp`HPPVpS;t#8kccZ8)4orF~i%xYe_4(^s;q;rGUh-&fonY$Ni84yVj``#-jr`6U(Jh~@ zS+jptO&_@pw2PF81DSQp_Ux9hV$}S{QloVtEW8*rN%Hnloy>S1{;k9FU;DHc^MI;_ zH-@#pYSaGv1%$|tBT_}ad?@(H0zoPi?!?NZ>ywSt80^MSy1TvQ5n&pW2z)6tlc^GJ50ESM_G<<$S0)UoD0Mp zr21u0os%o4+|3zGPkamX>M7UtPtGyTi+kUh#MJ<^x~^PT&G^%J-7Phw?z$u}IRC^e z{3QX$iuzz!;$MCxwY&q`lioD&tDsf!D@izN>7ONGk}EHuJP?I@Ya3@%!!rag(K((c z2oyl9ni@xvI*!1XrFhGI%9f&VZvao{zh|3SN)9MyMPBy#0up-OY_22I?)X&j+8+IC z04SWevDlV4AOlpD?>YSE_NbW+;E%+uo!%OtIEjCG0WZPyy*aKT><`JkZ#-<96ravM zx(Ily&;QTEI>&)bbXxec42`lKmbDsyJ zXC0%isJ~GZG;RLi59|Jus2LPT_S)sn{G51vz!$)Emp&x2X?zx3H> z`bE5p2717_=h@+z{QKG9wV7v}x~$z+dw`jh1k}6HPXWbn>Z9blEnjo&fLGC1reneT zHnBlO6)fqemjRe@UEVo(@57GBP0Gj*-@}8;Us5R+R`(_wd-g189X7zz;?|>oxg*n2 z@RGNHafkS2-GvKNMxwr_r(4ndkE@}ad;$n5ugwShd2YSjU z9*Bjjfg&@lE+W|J>=>?*pe9nM*Z1i!=w8ZB^LK8P(GB_toYZOi>d_J=34qDFe~=Px zJHEqopc%5F5iPda74E+DHN0@kXw3GwI_E#CARZDR@dI6bQ zKKU#5!<$TGA%`_HArZim*{O}y7~?3y6WuyUJ&hR00AfJrG?}4peUXb;!gQX)%2aq<{TD z{+)_UlY`#hB9}ovI5a3VEe&+CyiJR1D;nO8BYR;8)absc5VK|uLM3vz1aKGhQ~>xir0bN1-rK7j^`{i< zEF?i0DSLpA4DDqhBE$_+R-y?PwS&E#@2t;m)6Jq@$K@ zV_n*cS9J}G1c*E8W*0dDZ+G`Rfv6Z1_mHUnph&*D$Rc#eLXT9-U&V$U3$l^~O;*E{ zX?&p-ZtOlP3Uu^Vr#W;2_WByqg;hVzPkb5exymP3LsP1HKY>j3!53D~h~UP~zg>kJ zqYFSjYj%BQjpSqT8t}s5k)+q|V9VQJJPf*!GJdXGou9=|x^Fgz93Td#cX*creCOad zLrz6gr^nY!d5F-rI$qOrL%~3&*24>AkFU1!56NL|P(@&kCVP?daj;I<`%Mea3v+J{ z&%B;!iB^?^gK2|0r32;BRWVzkfr12mAlaI0*KAg(Nx zPBLgn%@zCelKut#yC6m~BZNWR=9Ga8J0G!wNa{Cem`79{BL_qTh)eCs6430{$kH+o zEAT45my-q2sN4SF=(aijvG+#@5NJ;EE(-@!NB3!(Epm$KGU+m)>N(D(O{-?yrWx(K zrV9%M?~!t)XMaxxFFkJ&2@Z#(wbmWw>z3J`#c~VqFzx0y;8nL`@zmAMc-})ASg*Ql z?c{p*!yVq1#X@cz*z(~LiFyY{sbgQ_mP@EF5j^$O$P=1bT0b+=_3KxUnZbEb4WJLB zm`w4L8!lbdF=k8JM}1LR7q_8#<=EXOTi1UIA;1fLreQOK$)6pkGFY#3abngw6QB1V z0%X`Hz{6vfl6ScYIDl) z)SM7tXj{2tP{k8#ZckOp`f5JuK>b9?L8{I?y?Hlop0Mot!ojx0YV3 zFgZ@!KDAi&U=Yj(SwcbLo?QwNtDYREfW==1Rj37%whd=BF}3+OqURHuEtsM7vd&Sl ztCU==t6{G6yx@pf@FXF} zuFCYy_P7NT^23S0FI(PPA$ER#_ZNXR;-$xMC2skG^3)XLWM4qlTE$2E>)qhl^g7xV zRjK;T9~f%SKAfO#$(=)^OJ8X&wpU0YkgC+BmA$)KJp0bGNE>*^-k$e~?UL+@F;-Y< z&_AcL*`)KBK8GuKyXHT`3P>t;Nm^BP zl}p9-BxemgrmL*$9BnoJNg_M)Px zO~JJebh`&-^}bD|8(3~`*zFuCvVHo zbyQ|@^5Ku%ev>6)?W}zbk3zR5fASSlsvbogL7G1v)pPu45mDplh9-TQz5VRc8xCDv zM>0o#%wHs$^$D5mV*79f8QCp9XQX%RXb|`EGj^tKkolxg1E>SO6 zgn_@9!wmeW4MI+)j)UL7XAe92F2HwBhZtt*+t0520gnpJJ_*Rcnq~f~`u+-HFZhlY zZXWPB0KHXUx>CjkJPAG0`T6E*wo%s8FBO@PlB}sps^`P#>`VSO0>K7LzW!>e*J=mm z)_>j(TCp8he)Eg><%aXmJlR*UyY8ZUYP7nY!4zuu6WM7UXkFK$vMiU30=>I4f;hRJ>mC2*|0;mwhY;IcfMs)kP!Px!|7y$yS90x~S zm5n&4Mih=+AGgGsEJH4rE!HBn+Vm7P{ESR_xDCtz^_CR}XZp%)br@hIyJspNIx}H{ zvPH0|R|H9nD%L0nkuOt{xa)knqnx@MV%m#_-t$08ZbufUH`h$%CWf^YW&LWXx?rX0 zksH~3sPjZjZ)EpB)IvW|8Soy>9y^uiqhxExN3EEy`@k~*cET{TAu&zi#l7QW_N*;A{zi7no{ zPF5~v6#+?_YO^QG{dYb41#h1Bu~!2cabYKjk~KMgfUn~NvlOYHr`5=^M|OW^m=kHm zZ2I&&(|FrQWtmZ#toEYBg8*-gx4r=K_$|g{X_daa>*>w;U0gj~A5xyFrdUbCf9g|y z@ytLfC)r~Z5EH{oJ_<<&?6m4~3!`SpADS|~VdXvX?5ldWe&#re6y}?2QCz-C$q8ue zt*fzd##jv%>Hqy_yzIoq(Ae%G(#k{Qr{#*@8WFzwmCkLBxiE|Oe)G?8vP)Pm5z!3& z+Vhe!Fv9lwxzz?TOFN3E;EP_-Pm?nFC-RUIS>6b_m@a$vaRb2nTccjw@=$Lrhc=yE zDZk>6>pV|Tv@#3gMH#n%+NkDP{AjVACyU|e3SniqV*wTL9b!SQv2QCLvjEroRNb4g zTg35n(_%UA1B9huAGN5=)uW?tb)RLF=#S#Kdp@YHPl@5*^4YfNaIZdN-zUxn8 zWB#10$xHiXS6O0WpG14D4&c8Rwv^*V!M4&}2W-lYucd#fn4ZC~lA14_g#WNy0R)1j zSEZp8v#8AO!KHU4E|BC<*hF1Z|7^*mdx{r3avARD<3y; zx6VEgsy&6lVz1y8=>23LyZOcY14+ zyn2R*pB2b{LBq;P1*B}A0}J{=>xPft0%fMJ&~^>ePE+e04~p*I(9Z6?{P^~0w2uXw z)Ls`nOnd_(s-ylmTND^h#kQJUP%gGR ze>`Bi?Pv#^Z?@K_J`Z$}xhD8i|nN;0|-o*x;OAvKAC41C*v3zMT&#R=g-J&kT-OP~MS8-NP!|7Y+B;hl% zCkq$*LZjr^v_3-aQAJK+I(s5a&2Yip^-04wcnoXmA!{2pTLtPIZFzRl%N@OSf;wZz zyIn_WfM!~3_#N>Qc@wkr`c6!FM}bS;Lt&$UKqftvs7%@|=B%p18~;qnqRet&41`s^ z**>VYi6Y9*@Q5nI?x#&1RC~pc#*Nf|@RmJ(2nO=wigqTT_W|JDC(9K8_{8GR61aca zHzZc~k&*hx3AW$Yd>QP3FK`_C`#OA69l*dg`S>n^v<>inn1KMt2+^3w5GIX_Yw`kA zK$GQ9?tLQv5d;A2D-!?E{Nr92Q1^G{obu(hlysC_b7(Yi;|^l~qqEiQgByjsCib&? zZ1PY7{9^bsToG17OaIaSd&d_cYccaDA##As5R2!q!Ko0>wkDBd`{TH>f!V&fmW+8V zF`HzNnGx>zdNeGXIWYe?_CeR8WtMkckXjadir)TU!@bu4z9o5pQsHqq+3vCp$%jw5 zSQ^Q|bSY!lo`H?cF5L+^tXyV zBSsKxzHe8|*nYlBR#3m%3hfZ6dYOZrmD)ZEYoE=twbPPv-|eeL4xC`B9Bpi%c1Y23 zs4d??8lo^0P;Ux6HD`_gLT5j{r6jdKwZERQ2XD+I9q_zNQl5!mEsx3w3A?@cvYS~l&>wJ9+r}MBun%6r)>g|} zjL9%`91kbgJ6aT$1%vnJ|MhOEOR5mNAIW@(gRXs ziS*p2u*7D8u4uj5ytebOFZOrO3Ii)K`KyWfdjnxxGbRzGt-ZKiS{0-3%L0V3r*Y`S zUuqEh0{~J2({^^rP^~g1fh;*%JRwQ}jR(Zfj)(3n_tO|F+w6&OXhm!F z#6>pZi8d#Q*G%1Ne?)T}>-_@1i=TV8hOI?ylK@{q=t!lF4pB5zAQ0ZtYNp#KQ^(Vx zYCf~c<}2_{M0wnx?XU_4o?DH#9WCJMsf=xhj`VEN(2QcJgFV*=W7qq}@K)2a;@lYg z5klIXd{s!~3U+VK{)K7CdwHrKl z3cwsxv&vZFD=m?)t;)N51_V^t4#9xMurCkHOC!XD)0%F0Zl7&H@GI`a)rV<_JXMCZ zT;O2I@i&IUr4*a^P;6x)ufPA)dP>I%-1s-Ln}UoW!{%H147p29b2n3$Q%ozdtIAqx zZjDcN^13e}B#f7|RF-4Kz}!+nlnS3%2Y@9Vfa~q~>qH+zwy4@Opww@lzvOsnqtsd} z`5AmH{ui(Jjo}h9$N%uieSkNv+jKfCvDE{gS(4=hE7MVC^^6JO)}i}6W4^c!$P=-!Dz)a+LHz&?1`KN z$15%ajzbJqE?^p?La#2e^uxa)me%wFi#?1=PEr_*3B13`K%$I;SXhx;&a)OzKMqLk z{xM9>pLBy)Nw@=xE#dosO$1p`A2N1+ylR7TCdBj8KScU+7P1e+p|O0xK*8L|4?yg3 z4-D9x&Pm{Y%{_vC|0lDBW_CahaN$tJL_G${ipi+pvQYuy6U;7x!elst>NC#MH}EZy8FX7-5G%^`We;&323Jm?@hSU>iEq z`E5Y9*rLjw2s==B8#=c7|e5EqB?{jN4ebBbsTC8YQE#NWxJMb**_hR5@gxJ6BF1&(o)9rrp6YC z7aOKg#Mc`wo-I8AEzjIulX|p5zm7c#VXoCfjs2nUV-j~gI8ZK#^T-w;XOg<=W21l1 z8R%DusKgzxIUc+dP#L_K%m4oK(oPZXd~xZenW6^&XYXzIP=$3_VxgyBxYQ8- zlN9E-%1^HbN_WG!pMPq{oyJ*zh^&}f9CQ1uA9Ub3D;U1)6UvxLTDYSpS-{~1O_J}D zdbV15yS2Y^Qp8@krxcTrNqc8FiVd%LV-v{vE~0q;LEIrlR{bX2;&5i#BabG}YRBBg z=e0x2E{hlR$t~^YFMYpxZZ3RSQ|hW)?r|by$2?MLJeaJr(FaVm6wE z_q{n|&E_drTthv-d{prBsLK7wM)BeXeud7*{tbadx~c#vlW9M6n(RWen7!T#pm`byn2y-Gh5$qsipA|9XeCs}s>4NasqS=E!sI16=@{+n? zMg(~B0YVo9>CQGbyW8@@%s|;X!{I*fS2<_%tK@QQ3P0CpM5A_|%5Y<}>$h+fNo4co z;zs@|LB1bFCWQ|KGu- z|MN)rU(#Z^GGOHO#z?QtrD%!VTt`8}beOUp0*tAQ_ZL2S;y)IbaR|DQNaQ?{i231a1G9>5+HN+}C7j8ZR#R zP?*qsCSSn%LfF=betXwq|C8;WX4EB>km-j@dzC{=KbiOpyjG!#wPOr=n|ur9zuEA- zL$!oDROX^&n%07T&IwZTzPoO?Nr4lc;Ol5V@D}IcAd*9o9BR1pmt7f8R;`vR@ zhu=n1)@zGUYbU{N^=_RB0ls_y;+{3vJAE{7EjJa34M}VaSwnRKW-jRYUmuI;rb+W2 z=3Vncao{oGATu{2`$d*CQSUOgN!_@;5@$eC_sG#pHrBiZUNH+powFK#;2C!C^=q)T zEDg7zzYHNEY^(N)WSnzIJ^`b9sPFoyQaFzBBR?GrQbkz&&wvtnw_@GpafwZ@-Jz(Z z-$NxoM{y8_#K-2<%QFi~ZfEiz8{g`e!mz4~^bf6fE(a&ybogV$WOz%tESJvh74de$ zvt@pZI)xqBV7p4T#|G1go)9y-e@Tb@b7FDJ^)1!)cPSYr>%}riCvCb(^m?IPVxqD? zb4&mMsA~gK*(WQ3Md%q`Lc~iHD<@urgGXOicQ z%)v`!y49LseP|P6<|({~)ckU`CS`42!7U(O7(ComHC{QEZa)7$pyx{6GYPlIB<+*e zh2(63VwomnwAX3K9S?rOP)F}gVDN{qm>FU|^j?8!So{JKJGA@9eao^+&&cX#?!E_5 zBXwg?1A(GLj3D!ub!jJSc}|uo5ADK$KSYW;8?qjpCb?3>N%i=i;;$hrGyJ3I8sCx2 zpr`eDjR-5x@v>}Nc={w3X>QA0Z9ooG51GCWiXu)z5)cCflyuwk7t3YTnF@8 zo5#I7#Xy-^bE{F??9=d+R?c@!dnB z_ATXdfW{2pFcKamh9LZffTU_^Jf~IPAwsq79liOUN1P_4X_q%KK%L!IL@{k3 z2;q76%l1N|y(~NS3R$5$g!j)hDP~Gwk7-G0$9_y(6 z)-}g4r=9Obcui!V?X-CI+XrdZ041I8^WVNrxZTEomZYPxtx!MTx_~4{{r$)!(J{)E z^ia#Es^Q}XYaOX!)s4Ko>darw_%D^5#%vgxS+;siY;XQorBmLzKfQlDLmcfOj(`IA z-@;Wh{jZOamjn5tkyFfVvV!peWiNA;RZlF79y-Bx5e0ye3~)?am#LUP%!JDWUb-DI zPh53YrQDWzfPF9JKI;k?QtTXsX?@aW2UtM23e?igVX?k&MxN97_KjsN)el&Sq0Q$` zfBXkiMHY};N zlU0N`0Eh zh#il~w~3MLNePj>T4`O&fdw?itNAynR@{54OwdYO1!^VYA?)!GpX7;Y6>%}`($zER;N{|Lct}ckehh524=KUK>p|&ZRWxI}3Rg!xQ zsRG(qj*g7uQ%9$nT z+`t^VTx0OQg>+`~fd9X=cVFYL;hDKmxZpXS`xlI6xNefL4|B}0RTGyA?Q9b;g^nzG zqK@MHay5({5n}%?TUX;VTjIAptSNH>YO=auEDmln=g{Pi*JqQ4m7tl{3zJg?dU zmTxZUhovzGtf0@G^CK(~t;TjyXIF$AOk$;dA3~gf+QmV_@Hxy=8`mb!O4RAjMN@kv zJZ|WV_imB-_gMxXwWdV?L*t6>sZw$8e6l)Szuy#~uBgg|fs|9OTErA3sbijtNp@*bLJX0We zG0a-ad>9VpZ?}#+2WmC~Qp}jraPK|@L^>^C_;C5yM~kaDU8Ali5B`XMK2%nieAZV2 zoJ7?r2+(yxYMJ+|Hti_{_+(#=^<{F%zAXTCU{qZB0066}N@m5b{tZeC0_-9v7hi*d zk-d+PIR>VI{~xgw0@@1@Ux4Qj6WhSFfE4(L*p(nEXHgU=w8X@8b-0ruC8M z|KsQJ1W=bZDU1Ijv%k+JRdQa?wML4Sa((t@E!W=O&W(F9V^=p=?!Uwo-Twf+6?m** zplZJFir}LsGiR8i~^(19VNA%I@aN=FwMsRG9vU-#pDcx#OMbtM!GZ$^bIf z5uWkwV4CZO#@^s+V#s!jf7177fX9K8}f?`#iBuBQ!kOyI$c06j! zWQLROj6i&)J&#UrmyD@~9zb8I^0~uzz(Lhc{@j7D9j{q)uEnZbtIR~kwHPMFHN8yF z-Yx2st{M(aEZi{5U&mY4uiK&)R{b+N`qoBY9kxx09n!27qYYdXc0t}NgR4?-{Pnm+ z##8W^h{L?w(zJk)RlaKAHg6ed5sa2mPn4tp|#7MXS$GZ6Z z5o>;GfY%=*FSo#qwvZ!Yvu;=pmzE7LdwHp73`Jk1}yX3cUhRMjJp2dWgOi z9sK_AjQPHL8Q;<}7c38WP613i2EU_otR--ZIA`paePLDSSj1EDoGv5Zfd#8J*Kntq zkz+-YwBp(p4$SG0dwnX8pnL{dX zS^^XhIwN3Mz#t3Uu76tjrb&spu|dtV^p(5rO*LPqHhO&rotp&bdd7WuyLe-i)#ycc zG3l+8+F9P~s&?-`AYz@9l%lPD!lVI_Q}FcRO1p5A?{&nypC)Dk1XV+FfENN{r9h1O zSEM9Gt<&nybiL~Nxqc$m_x6Dc>*5FRB226C#`<@n=6djE_{4UNYngsN>_xRLc5Ee% zIA;X=~(ZJ1Bw`Ew$v5y~(wVc9Uii4rX`-;zQ3| zlA)=|pZ@?YTR9cY#A5r#orMk@6D*lB_YT~CtmW$_=m|(Ak0=`DU(aXyB}DYTU&6Z5 zJ|lYy6yTwU-7?UVcN%)-@6T0apB->CO5Mrbh>F~2OE5C2D^_sm^rwXge6ZZ)>?$3s zt=_m^)EL4<8JLlS?e{_g^9^qOw=zDQ1(BOi0={wxjE-=+(A-!wdhxBr&gB1nmz~6)mG8 zztA?_`WgQsO(qpzW{LxsaTdVk;0Q0KH$6=DQ8C24JYdq|OfU}tN+g?Oi7dVfMeHA{ zuyzK9Y0V>jD$c}ca7Y|&%oH>BhXgD(@KBPODpxraj<6SKhE_!tgssxG@~McbZ+bw9 z)ZLZ-=RVQ^24QOTq|tZ*+W#=D)JNEE_Jt+^*Ey_!$EB+IdJYV$RCuv4hR0>yuK#PE z3nmcsd>R06*Zrh|FEarI#%G?FN1J-hfd|paHL6y%q8dM@GHO`~FK|Ovtfky0k_oh7 zG3np>dLw>UYgmAJk^j?*GaLa6^mRIuh=;%baHXi@;(LXO3}oxR zUZ%=P=} zKQQK4p{cf`9+1F?>)P@S?t(zxBJ12s)EJDaPv@dBi$A#|2c+Mdx zKXmtXCl0#FtXs}pzTf8!Fh%Ekk`mHh-}kUvl`cM_45G?KWvboL3V+aN;MX0=@3k?k z8ek>|mx$>(Oy85A{x&uDmZUJHp|(|A&c#Nkox&OOV?F^z$7uNjEUAIw>L4{d zx+EFIg;9Xa<*GQec56#w>gn8#mH?MG(}`#>&?O2VL@2m*7O=XIW$Woxx)TxZ0v$Dg zRAxhf9jNWA4<;_yWmxC07pH>YywH@*G>QP~340|lL+wg{CWa5=xT21St{c3uYygJQ zaN@gjY6!1jrEwQv=tl&WX09Yfu!hDw&vNB}jD5aiE-W5Uhd% z#z?{!qB2juh9RQUE?t{HcnuHW62H_eeUyeeAjO6|yjVa_CrDay*b^!7TAUj*x3dN9 zv)%9OgaXyDgK0>U8(D8Hp}R{xHi^?V(vmW&ZJxD!bHO@yM?Fpg!w-aAhF`I^TCb5k zX~ck8VW2!LOyWLMMC;pk5 ziW9?B@qX=768V|L{S`r}1b8sJbgn~@Z^eu=ikcJ2&l}u0P;P-m5@5wO&SqvYHaa1` zLPhlzpeC3e`<%0Z%uUX$jQ0VWYa#yVik*mLU3uoPC-M|yX z3>FC6rWBh42CdLKq0Kko?Oke;6MboUDRRFO3_P}P*a!2AeAc=X`;I7LW^h{1Z}pDd zwNPyq0)EabBKV%piP3xOavzX@<`e^&-;k4>X{Ua7kU#Klq) zr51xu2pyZa`LBn->WH*?-P#_R(^W`HhKGY&6%zMXP8r~Po8#31>KZKNMQc2~y)4&R z{ML;A%u`UwMXs1q>dWbqPHjEQ`2)d+6IR>%C*He*vnrca;0Z{*`=+8>SYuAd6%Yn^P#rwY5jBa!hn$>?RxFpat!ao`yX{L zlUN;Y7(Mus>f7)d6Ybx30CEC+_My32aa`lf-ghStlo1Iz-}4gPypdf^5fh$N$|+;< z6=?3aMN+~Bnp$Yk@>8pB0l&)VNdst-|J{0SqGVhtGkB+l>#1ip8--+UUs?Oxol>_N zJ!gaEBLDci-ajQOgLNukcWPqmk0%lAD_|}A!{Z90?c5{dWi1U^HhBZtL%)LW?qXp3 zIQ-#Tc$$7^dlT=@snJTf{baOPm#q5BuCXD~04Mr}4$Q)@IYym}H2s(iaZrehGFh^? z^tzc?t1gOnp;>I(QI@Jl2pVVc23&`#&$ViND(%(K#Hy<)b${LvE9=Ui74~nmMoesF z75dQFmWjp&OYgL{^s{AFxp?#JIcp5!G=>nOC)Y}a+#6&I(&RNK_gpQqPtG+(>BJhuz}D@XqFcxCs7l70S9upqz0=B~oTGTWnht*zqZ zd|~GO=w|~?0gU>D>rqK&o4in)s~AO|D4-A$e|5f-{@Da{Ro%^cFmx_>}p%l zdp5%NZDV78f7`h4O+Kv6!;l8v$Q#R7DO0NI!CYqQTX6dqe{_A*@gs+d)@SGwN9zyjnCQadxu8(={W zuY}7N$ToxfzQEop^Tz*9IW71!1mrPheJRs_g9LNzN1wmTeGXD}wVAsKqF%1laCApY YWX7k{#^<#%0Dj%LYWQc_6^Drb2JsVHSpWb4 diff --git a/apps/pocket-remote/media/menu-trigger.png b/apps/pocket-remote/media/menu-trigger.png index 519535b569ba40b7f2c485775bb027091da8086c..33a4128e2f91eccc469b036cfa9dc34cf93c3a6c 100644 GIT binary patch literal 12873 zcmeHtXH-*NyX{UwKn+cJ=~66+QU#`m5QYdvePIp;H<^+NCVb(SOi zM*sj|(Y|rj001Cl@LS^$BY5XQYjGd|$gyi*)im^jP}7JpMxT>sc7?a!>-D4c;YNQv zF}h~TZK(Nz+e3pjl1W|Q-GJvG^V}cbB(d{RPe$1uRbz@gYI{g4>uaBQv*TypDfW8~ z4iQ?){IZkPd<)IBzuf9pE{dg3f4@}CLkldfm)~e7edfe(m{nhzv%E9oUY}Gw*f3cf zGT_QCOMv+SY-EUPj}_av1|iS;_Z5Z-%ILA*n#$L>hDjRrt&(;Wa5Z<`FBpnQoCrHC zf9||xLV08bwqoC!IBe@ymp3%-ch@>?PPd|qws-XRGZ`4k0`3d$hw8F53WMXIw@#9! z;NLtm9hohL9u>MoTnyTOzs0*V*E|tXboXa3i=frp?jE;tIKh-K^u!}z|KOK1*+}Sq zT0>~Rq+cKu^H%tCZ&|P3;@zKb(UJ~80YzD2)2y2Kb?##Kkp^Qow6_HR^~$fatGikA zZL?z?`Jok)}k1=}?)#@cByIrYT&RMTP zzNO)2|FV1cQ~3DOoV6Lp@pfsZeezDmSfPA`%^JT&%j}$0#>k$#l|o`F+6=!Stk9>i z&(UGFqwF=dKq(J#x%Jk7;xv-G-+YmjzASjB=p;~dxIw^fJtf7MjVnT>WO||#P`%hN z(CNNU`CjzV$!$+s{=8hwVGJCHr?|;enrFJmOFGMyp&q580QWe4e{#($iQ1U!t~z3G zR-zDpN#LiM&FuEjO{G|aJRdCJfnG#v7aP8=fDqO`oBEW-r_6iT>QTBv^K6ObP9kL~ za-=nJZ}9T14DQXz#%fMnrUp zB{>ZOLj2VVVZrghg1~UU-sct9Z>sP6fI`>rO$KVGv)`4j9TO`as{BhC5rL0yoSoTA z4#0{F-g0VNW^vF9M<+HBt^y5pG-A&VF4r??OgB^EbquHS-lU$=;KBU(BqA zN#qBfQ&v=@BS2}kpde@--H$5X>?qtB(npXD)|4!pX_7yUVaTZlU)3tJlSb~MuV0|t zlB&|Rb@21%KWtm#${2Ctnd0wDZL~=P*xRBoLUzy%##AYc&)u}5FX3sUoIIuCVrTLT z;|qRteNbkx3HFsY9&oIU_H6Ooc;hKu?pkfuk{wLi+%#-K5vWj{+!O5Bx|n7)D&YFS z@)~s5E_c1ifK&#&ThH4aITELU=`)xq`V&dn%4)WK#VBCev$cFzYOTu`mh0~AawqnZ z^RPBaG$n4%ZY2IJ+y))$Bs1T~Ivq9bX8)|(LVZr9-ZnBCf+)9i9<2Ce-vmQ0;gj5@ zmRxfXqsgObi34XuVpPaqrJmfhmq?GF^~!#jWYwv1t}27f+m#wS zskrQx^%xe%Hha1XWL|V~f9(wS$hNH>%d^0*zpQw3N#?m4MN6rL$wqC%+5Yk!9io-j zM`KQr{r&IHR#!uH&29+PAJrKB_1!Z+Hha)(Z&v$3K5oFu@6P_T2H?<4%b~O5hT=2XVxAhf-(W z^@?)2dX&EJNVz$<%~*4{CUbf=AOkk2Lp0mS7^0ZpO5;8h)55H9*3%*XJ=4t&q8L{% z>0rj$m1We#(TczLNv^MkD9C8QBcD>;J6|RVNKTEmnXH|^_y$n+|EsmtWpW(;-D#?^ z#6(WG_-!XYVXfiMWf`@b=1xzG+Xq=`JM|x4ndomfGQN3#vL;iYEk1=$y#q>!6qli0 zr*6qUEreJsM$4Wz&&a1{2-~(k+mwCU>q8tnB^eThi`Cz{aG799`f@ZrV9-QOHByzS z^UKkS#b((eN#)Rb-n7g=fd%2D4prK~CF(b~2sNx=ZdDOIFVUp=PY&ibL`?BbGCL$g1_L-+GT zI9o{2RM&2j29nm(a5G5-amZPCx-(XH`Yc=VZIXJsla6w9q<5Z{fQ-JqgVHF}M#4u> z33}gk%2y>JrY1@NQd04-Hm$7jC6+2((zg-)93ljguZSLS@;-)X37}s9fGw0Cs(Ntw z(}8WA9IA8pDD3z3^Di(!8S@hJce6`u02z>mo?xUCcG#vWfPqyVdd>?nIfm)m3IMQ@ zPl)_}?*FDCV|WgU-0vPR_jz+$(28_-sAtVX9P6h2d#Wh ztDcuj8F6n=64&M6G!I&lasbe45u!^1{AqVW?t2&w;gn=&D2>Y}z&Tzd!JKXdS4`i3 zVduQTrpw4QnF**~DkCww4==3U*A9LZGokzPAZ-4>Fr$VfYK_RT(J2E>h@a==tJyiB zwU9TbNKdaFjI7R&fDUw%zXvk(j0Fxb-Y8pq*{_0Yt2I3ck%&7OqPf~&CPEl2alw9{ ziwm6oD|NQVJuEC37!$7faF77~7KUkg27<>njG=*J${6<=e?qPP?-+9l@e->XxY3u4 zOLRzNDZ4LWp{+aG?EmAlVQa^slwbWEReqHv3&ylWXjLGNC~% zzz<|7ZP;;T8m*o%@Z^?t0?~JSP$fn#BV;$UeqZ!C{i1`c4M$FyhVWvHt!^+GCU zc|DufDOf9XLqzbG~Ut{Z;hYDE&LS|)H+AbM;-R$BWbnAHF02)=% z?f^H27*ix)!I9X$3Pnm|~9wgPIR7%d@ zy43M(!L!obtf!*Gl@FbPk1hFOo3KA-|0U(GwG@f;=*7)9gPMLV#nBaT`ouJVf{u|c z1FWRCt8YQ4aZ+ii#h5GBwbG5I`_)$(1AiEpYOHjgpfvHc{1^s)NowCcV>jbnt!c)9 zk86U2Z3PPNT7wu1DawriTx%=$w|4hUm7~b!3qe6GZ1~fR;l+e8*3Fwh6%0~XV&0^G z&PdBy^mz?mX;+ApA(3im+z|}*bKH2;R<-yfbZ^nlVUwFb?m7RU6L9;HG>Z)?i#xf( zd^EiO13q4EAp~wAMN zYJ7uCrd<-s;6)W*FU|WE%K*1Dly48bh9sD|L3YSj_Fo0<=MJf#O-4~a;M3(6kgK5$ zoBqemrO}tpSj*ms-ZD-ROp60Nm_YKb4lf$pm0TKKr$aP1 zl0Pdiz@v#=wmhr932^Jh;cG?;YF=1Y4Vr7or}@gtsFi*LYa* z(1yli8O({&4#0fhH+9rffD#RA>N?$UU<=e&T;eoT~#6Za~4snf@- zPi3&AEb}+?D6+kRpwD0w9%j0G^scVDO5SKR8R>)z3K2btmx2WT_zgRA5MaCsD2n~H z&NBY`!ROsaF?MUoK1M?ZCC6(z8m-TsY5WZ_o*OTgav_#=nr;6xC6AeAu=b_ zp`E!nLmo`?3@wKGl-#tmDw8L|bnSG%oB>!fJ?UV(Og-p8h(AdxVqg5xfTyOZWgB-D zcgL}3=-hP{7I?}tvmkaJ*&PS8U{r(Z^pCI8KaATNO%e&$o&%FGClG zD%x&k{`O)V{9uIv4`=Jf&J>&~;75ykG_&?HBdJ5!`c}E;LKZ^A1){^sMyAcO`3q~vuwgh{2=hQhaL(0hQnDV`)7Ime5uHav3?wtvw z-JmpvmcsqUzt-eu`iev4TB0(fwsk(<`uLJ*2}6%5P6=>+8`tbjMR$2~BZ>2ac5UL$ z39hEY37EirVzd$iIVM-82j~U9K~%{^`U(ZYaD;r93VsZH_J?&qtwRzJG`}g41lwFq zx}~jEBqvd9b@oAXyTzL2P4vk{Vxt9eW3_EaXP?kaSx?yer(t_!vB&jhb{`=KTkSSk zY?EmWb!=*$?Lo_1(K9~pU_cJes-v7Oj1TA|KuuNk z+UOHul4mTu{yKIb$Np-8vzg2!t|LVdc4?z|fMTba(2f*sLXK6@*f9fflCx!F(~@V+ zSG`J-eQDY1^&zofQ(Qs2O zKw>iwFa-hMWtEu=Hkw1hyYJo|MsioIUm$DM6qPY9ZGO7^M&)8KvyUarhTj^9pzjJ+ z4gz;o_QYdRa{jGRse&SVh&je>RTpUrMP?|Ry;W-4>T3|6cDC!3B)^SF1XH^|M%Jbo zQx6@c{#mqU*^_dbN8pk%p66jd!Y0fFsGxl-)ifA&7>_Yvu;-677WwO?IlJ9qdcbE52j z11|jAfb!qa(8B|mP_6A#rG2>O_5JIQIurJ*%wS3b5U71D)Qfsj$)JZQF0ul(2}AdN zf9nro%*=Aj5QpPPdN5l`!`?&w%lwzY(0WcojL#144Bh25yY1-!9bI_>f(EWQiEMG1azARbl0BKLC0SA=QJoH{}HkGoh6eD;#N*~brO}%viCs3fY~ep@eC$mL%vGp zfOB>HS&8nqi0yAGq(qrUTJ;TZH`~orOboo_-PnXBDMC;glGB?eCpG7=b+=U5rwHKIh9C|id1#Q1oLbNXg?l@8kI}!P<;- zOl*zw@DFr+VIxawS|BjO0pDY{zOM*#{&Y-5j{MqEYCIFWzcj}-)5}B>qqv%4)yq6D zoGtz$J{3RYNi(Iub!**~Xxxd^68L?=>tj_w(ezHa&VKItWNp}$Pa@uIo8jlc4JQb* zkx(m*<-){89_dx`&pBad9FD}g`9p|N61gC$GZjQUX;iB~=%QN8 z?4nI5TMF_s5zjRvgq9%pKwJW0qhW0hq#7~XdRu{+d??cPlj-dby>eqLlFuEJRPK)2 zC2@yK>xoJYT^gTq5SC`Q1Zu}>P;jGQ-`W`Jg)v(t&k#CG&k3>nEvl8?2a_*Gj9Np` zpGx=eM+pn&#ZE@?d^kB1bgH3k0W?+6+9%rw%Yak!&GV}8aQ(hR=g5J{f_W2D4;9;M zjNpju2+72tg`JE!=+g365{l6##m5XO&N;ZT`ss`b7K#&md0U-h+SmW@j+e*?y2kWl z&a*lsT(_Us2}q^|PB|UbP&i$PS{D^mq?E^$o55`YUD|}k(qadGZXE|@M0+5)yZ%l< zm<%1hfGVp)=13IWM&)R`@8l7e@KnK*gA8I_suk1bhiy<5bKI3JgD0;oWZjNT6$S-L zW*t*apjQ3oXLOzU2=Gv2@1Dy(21WtoNl<=*%MY_bOmgOSi^*r*%1c_XKiE}=elri; z=HTl2=YL=FU>TNbO18qqrG$Bt*Vjk2t*-I4dJzu#XHNkkl<&VvE&UU?bwP)N-@Shg zhPlc9ZBB)t+lbeF{GTnac1#Sx`DpBcf}#xr@c_7vf(*@`K?ib10>tnt{hvWXOTWZ# zPCUNGQ;wcGAP9^*DDmXLFa8sYEJsf;${s)ia7^Rcfx!I{<{JqyNfzvimOY0U4ZNmt zU>^(vbpc(6z{eT}@rQzd_H6~@4xl&O&Zz}YO@xN`46roZ!TiANnlS&4w;&<%W>PVE zO#Qs0o0Y=%G%p~L=V1@ImkjEeo^@uVE$-60PNnmkuOTa^CHe31-vggH%4kC(AauPo zSHy4f+wj|fx4@Z1Q7n6|3k7$B5d4`^?(Zwca)RXq=qXh%1E8k$I0sCW;=WkyZJKFg zQ)#V%C{6l!A%G5#x3nC2@-IiPollDh(}n7lP;rFK>{h~rbgY`+{@wFW&p!oaq<1+} z;^S+K^DG3JwBW`Q9tC-(hd}YrTMa<&3I zSq$fj-!c%c>D7D8O2}8-D{6g5TMSW^2N2~@+kk2UZFWdq)UtQIRs>txdnGzmTs(BU zQ&e89%SZz~3&$K`U1&!{Xj1&+(io<}=wyvaumh)Ve#X$@Z#%h-2_ zk8VIBWvZ-#exxuYil01}9|6z9PYN5{8)IAN{Mz- zwvEf1T-W(`5|@lR7TYrq6&7;ba0dL4ICKJw1kQ>+g?QpUwcdX{^wsI zqy=WILah03s)6`=Ek*S?S{mNp>TbUKNMIk#9_YHKmY1} z4mWDDqDapBxHMUHNa6}0NHW)B>ceu&?UFO}vDym#T;N;dR>5Pzk{XyYx~XH7bfx2W zrnAi670vn@zVa;2lZ4*{KT20mJ3=1Ubw12JfY61)(MPv8z`Y!U19$uS1pD#(>{ya79=6{}TKDpKM5uf-EhymT!0+KsV@WTqO473o5+@(}4o0 z95;}mvM(lbjNn86_k$_AFddf#8g_mu{NpA_4`kLam^-N#Gc**iabCh)no3e~_W%G` z`dfN}c$rOhf|z4FL76ZRT=(k*+>4wp)^U>(Y|>g-UQT3K zYHu<+R55sW3I$d%K74)}CDs}O0w^kb&EHW{x?v^K^wRd*jTQQ+Knr4A6Nrye-L`03 zj{Kk`g{lo-SQljS8qqkAmPa2s31uRZrGJV*3MKtk=DXi6n>JPQWA0>B$4aXEZ-<-u zuiY#y47JJf-~R60hMs+M{kCOg7nqkGL9G(0y|>+qrSGF@^|S;8#qjnt#Wa-k#{LM! zXCWJyUzi&HRW?M0(Q(0wK9XanFxiz8yMyy!zIiLk^6)|4T!)@E14X}Xhjj2#aH$Tl z{{RV*49c!vdtEXdxV(t=o4)mfhyOIorC!?I&izn=R}Zcnn?t^aKftd+OVxzaiU&db zS@HTZlAh81f|2LvH%KVBGXP~IU|qFpbk88Z<{f;>+jv|YK={tiKYXyOGg&)W3*2(g zazWB6Ip3^~bOrcWq&*T5uQKboW#$W_yl0&!#Ya^W-yc9V>5#;@@@;I6Rt9p?ODh1O zffU&EQW*-tkqeZp>%G@^-%htgHTH4?3CXWSF^<(W32~a@S=jQ(+I=r~3n>k=b7;*% z&*_>+9ax@B(X_jHYi>N{#Oncrm3vI5ogh{O$``r?qx_s1X~T79esd8lHEZ)}A}zmO zf)u)Z^`(sdy4zGN1l(#z;_Kz^#F@lP@)lTBuSix-MBPa+UxW_FmrOMlji*59pa7hP zMSVAl&91QK8djXwsMZxpepe@t>Mj>U{iX-Ueoe0ipbg^Hc(5i)RZ_NP_pJse8;@%JYCcGq_&n5>6&MR$1{!czC?Fc% zVU%>Jk=gYK%WK?r8#z{duD%)4Flf zlnA&D*lOd&i37juHIV@r=0xUU0ZfZxr>F+jNLB926{h(mjr700p#!0&(Mf+F{y*^j zD`ES83eF=259|FZ|Gn(WE)YBFO*sB0AL>^Ys`3r&->EyJP18np*PGy9h zixdVv!Kzn5N&;Aq5Tt{!7~K9-D2NAineCMhQ3uiM#AXfq#QEwQCxJsCp|wUbwbBzI zC~jc*X*EL~eP6xab#~bT{lnyJ;H?j^w$?GDgCP4BUx|QS>6>_F z#s^zxCTA1blGSKJisszwaSXVc9K4m&X-;mWOz=|u)^cq|SD;CeXsCMK_9IZ3n!Jf< zKy)`qh|xV;5?H&d$+2e!B~Z4B1G7KwfaHz zo}y==frp@}`rUFJ)Pl-t1RYopr-FcM*bgefF`om?IhxU4@RA1F0c`=5&SP#~psakG z0)S!12(!%(?>@fZw~3MgYa!m6Ob{F0hI|w=(z3rRf<*${%d4xM2G?#BM2MU{C!yji z{{Y*E#&QO!Z|z(!3tIjBmWsCmxLfg^QuZ5pUT?m_>-WwWHMVocDJ&uL70xW|~oc>IqoUi0YXZ!S@fN^snmAY9hfz6_inxGyOw=0ft`|+@i z{>H#P&MLrcbl-8T_I}wE7vL75X5EMb3a9xye8lt)e*piSatutDVl2lfs)7cD3@~$n z{2q`TX}iPybh}`2K!g21#Gnm;=gAHafA^CYD|`E7?Mn&|tEgWgblvGq>j_vmx6 zuP0KodAxeaU&)hT!q@g2nOXl%zrX(b={E?6{}rW*at;D0QxW;)K{gH-w`RxmydN!c zKBsPAepjTl{_hk)G|B*9;j{Utgsyy(J+)|eot~+Ny*hxEwtrP|!9<(rFQ1m2csxzq z{Oxj#fy4rmN8;1gz$=gGZqomXgPE4LggCqFE4IvBHSffDSd)qt^g|+!W7@+HmdYQx zG^cP9sN%r1*srHdvW$7L(6eN4kD=|r!UO18{(3++FU8(AWi@>Sk8u3SC^>5$>)`d`Ioz^Z6K0oHDXrSPK&I+F@|o^D?^}rS_Gq($yn$N zjzk~>$V)HY&Hv(T%>9-13mi@6lv-wm(Lc-s#=|xwCsB-Rj&ozKX6n;o!uZdUW-;#0 zu)uUl39P&Q^jK|ZHMNCqYdoGhIJL0R!+;q(WTRo!40j=Jet7V9mzD z*o@TOzA-rm=aB{d2PT zjtEza)o*aX0!j#7D{yar6-@Cn-%Yi%J@1GJBPOCbaKna~9kU3oHuL%(OUHQad+ zc19!=tnt7zN7uyeSf82CikFkd_~@8hbxhQHcG2m9-y-uRlPB{%ASk#Lff-}A(H@!a zU0{;xa1GA>H8eURUJZYcx7Kbf^}D5zyqbi$DNgP_iB3qeej4QZ zjn+R+$G4DUQHMdqItLUnT5H=j(}88S@E6accVXo z`+<4MXuUwPDy;<$YSTl&5Y!rbcfFvot05xm7>2rBjYV@wHEwn*wN<(0QDbMFb_VH3 z45Trx{^^I;N$gph_sIzGd;}w50s_8Lf^36m-R@p%-F_##K`*r!Tx{M={%1a7DBUlT zqNKPaGryZ4-UbNL#{pWmzYLp&`s_ZhCxTlwY|!r?KBsh-!0CJ0&{Ee~{XU|~pd4qu z%1CgxiJo_Dl7fm^w4fl!u@wN4{SS63;v&QCN(tmhVd*`H;Z%9DOE&Y!6K5%u1&|wk zmW<=;J=@7^Y{Z=M47Aetj*eBLUH-Dsp3rwr1p-Xnx1# zxKgs7z{w_~XekAAM!G@xjHy2--*v4kw&xE?jM5kBq|YiL=9T4^@-0N=Y6<Qk))FsuvEaGf0-6JG9)W#>AN8H#i(au$elXCQJYc0AQ))s`2&5oyvVrbh+iDCGZuJvq`$T1BReInl6K?A0x(;L07H0!xD&{7R*OL9`|k{m}b5t+<~a+a(a*JnyxT zPP^ug8YoeWYV#Ebm8>u8w*Y=Y_nk|1LPM)x*Gbl}2>)_=Zc`=RXt)b4svw8xeAlP%QSYezF=s1D{_eeQY(>+u@1hty_#1k$mDHMr5t1G3*(k4;Vqy6d#l^fWQ30&u*?SK8Ng0zp?w02v7!N}8!lJwZv;PH}`y-$JL zAyc~bZD=%UaKpFmHq9KVs;8W*RYy8}WFU0eK-`8|g2J1;R5Vba3`Qr#LVODy^ zw;oZ$fkBDz6)k;;BC?%ku{s-5!B5yORM8HU7B65F0PHDOG>v+E)Qsl><(Kd*nKZe? z@20D+jc4cDC8nR1i@^t1ktxAnb@qe2s^9F;*rw$fo1na( zkHYvh_J>65Ce`UbA>f(H%bjl_tD!9Sx%XD+Kj|kaKS}=Q5B-}5FaOnv&6=#2P5ZEE YedQ;er=RD84icb!?e^88%QoTv0cH_#9smFU literal 12896 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 diff --git a/apps/pocket-remote/media/popup.png b/apps/pocket-remote/media/popup.png index fba3e6f62e6b6dfcd708053a32450dbf9e569ccb..da17d3cdedaa1c45ee68de5c01022fbb05fef0c6 100644 GIT binary patch literal 13328 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%0Dr>?L*VErU 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 literal 13021 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 diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts index 18c106e72..a10a92050 100644 --- a/apps/pocket-remote/protocol.ts +++ b/apps/pocket-remote/protocol.ts @@ -257,6 +257,9 @@ export interface ClientPointer { export interface ClientClick { t: "click"; b: "l" | "r" | "m"; + /** Held around the click: ctrl-click extends a selection, and a virtual + * pointer cannot carry a modifier on its own. */ + mods?: Modifier[]; } /** Two-finger scroll, in px of travel. */ @@ -266,10 +269,12 @@ export interface ClientScroll { dy: number; } -/** Hold the left button down (a long-press on the trackpad) and let go. */ +/** Hold the left button down (the click key, or a long-press on the pad) and + * let go. `mods` is held for as long as the button is. */ export interface ClientDrag { t: "drag"; on: 0 | 1; + mods?: Modifier[]; } export interface ClientWifi { diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx index 4beab59af..de5624d1f 100644 --- a/apps/pocket-remote/stage.tsx +++ b/apps/pocket-remote/stage.tsx @@ -38,6 +38,7 @@ const LAUNCH_GLYPH: Record = { function Tile(p: { store: RemoteStore; slot: TileSlot }) { const s = p.slot; + const sizing = () => p.store.resizing() === s.a; const dragged = () => p.store.drag()?.a === s.a; const over = () => p.store.drag()?.over === s.a; const held = () => p.store.popup()?.a === s.a; @@ -52,7 +53,9 @@ function Tile(p: { store: RemoteStore; slot: TileSlot }) { > - {/* the resize corner: three steps, the way a window's own grip reads */} + {/* The resize corner: two steps of an L, lit while it is being + dragged and while a finger is on its (much larger) target. */} - - - - - + + (sizing() ? "accentFill" : "fgDimFill"))} + /> + (sizing() ? "accentFill" : "fgDimFill"))} + /> + (sizing() ? "accentFill" : "fgDimFill"))} + /> + (sizing() ? "accentFill" : "fgDimFill"))} + /> (null); - const [arrowFan, setArrowFan] = createSignal(null); + const [dpad, setDpad] = createSignal(null); + /** The click key is held: the laptop's left button is down, and a finger + * on the pad is now dragging a selection. */ + const [clickHeld, setClickHeld] = createSignal(false); const [flyT, setFlyT] = createSignal(0); const [toast, setToast] = createSignal(""); const [frame, setFrame] = createSignal(0); @@ -629,8 +631,11 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { * frame or two. */ let sizing: { a: string; dx: number; dy: number; sentAt: number } | null = null; + /** The window under a corner drag, so its tile can say so. */ + const [resizing, setResizing] = createSignal(null); const resizeBegin = (a: string) => { sizing = { a, dx: 0, dy: 0, sentAt: frameCount }; + setResizing(a); focusWindow(a); }; const resizeBy = (stageDx: number, stageDy: number, final = false) => { @@ -647,10 +652,14 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { sizing.dy -= dy; } sizing.sentAt = frameCount; - if (final) sizing = null; + if (final) { + sizing = null; + setResizing(null); + } }; const resizeCancel = () => { sizing = null; + setResizing(null); }; /** Another window of the same program (the daemon resolves the class). */ const openSame = (a: string) => { @@ -739,8 +748,27 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { scrollDx += dx; scrollDy += dy; }; - const click = (b: "l" | "r" | "m") => send({ t: "click", b }); - const dragButton = (on: boolean) => send({ t: "drag", on: on ? 1 : 0 }); + /** A pointer click, with any sticky modifier held around it — ctrl-click + * extends a selection, and a virtual pointer cannot carry a modifier of + * its own, so the daemon holds it. */ + const click = (b: "l" | "r" | "m") => { + const mods = kbMods(); + if (mods.length) setKbMods([]); + send(mods.length ? { t: "click", b, mods } : { t: "click", b }); + }; + /** The left button down or up. Down takes the sticky modifiers with it and + * the daemon holds them until the button comes back up. */ + const dragButton = (on: boolean) => { + if (!on) { + setClickHeld(false); + send({ t: "drag", on: 0 }); + return; + } + const mods = kbMods(); + if (mods.length) setKbMods([]); + setClickHeld(true); + send(mods.length ? { t: "drag", on: 1, mods } : { t: "drag", on: 1 }); + }; /** Run a row of Omarchy's menu on the laptop. */ const menuRun = (id: string) => { @@ -874,28 +902,15 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { else menuRun(row.id); }; - /** The compass key went down: open the legend and take the sticky - * modifiers with it, so ctrl+Left is one gesture. */ - const openArrows = (key: Rect) => { + /** A d-pad key went down: one press now, then a repeat while it is held. + * A sticky modifier rides along for the whole hold. */ + const dpadDown = (dir: Direction4) => { const mods = kbMods(); if (mods.length) setKbMods([]); - setArrowFan({ key, dir: null, at: frameCount, fired: 0, mods }); - }; - /** The slide picked a direction. Changing direction restarts the hold, and - * nothing is sent on the way: sliding through a direction must not move - * the cursor. */ - const armArrow = (dir: Direction4 | null) => { - const fan = arrowFan(); - if (!fan || fan.dir === dir) return; - setArrowFan({ ...fan, dir, at: frameCount, fired: 0 }); - }; - /** Released: a flick that never repeated sends its one press. */ - const releaseArrows = () => { - const fan = arrowFan(); - setArrowFan(null); - if (fan && fan.dir && fan.fired === 0) typeKey(DIRECTION_KEYSYM[fan.dir], fan.mods); - }; - const closeArrows = () => setArrowFan(null); + setDpad({ dir, at: frameCount, mods }); + typeKey(DIRECTION_KEYSYM[dir], mods); + }; + const dpadUp = () => setDpad(null); const openKeyFly = (fly: KeyFly) => { setKeyFly(fly); @@ -1070,14 +1085,11 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { setFlyT(easeProgress(flyT())); moved = true; } - const fan = arrowFan(); - if (fan) { - if (fan.dir) { - const held = frameCount - fan.at; - if (held >= ARROW_HOLD_FRAMES && (held - ARROW_HOLD_FRAMES) % ARROW_REPEAT_FRAMES === 0) { - typeKey(DIRECTION_KEYSYM[fan.dir], fan.mods); - setArrowFan({ ...fan, fired: fan.fired + 1 }); - } + const held = dpad(); + if (held) { + const frames = frameCount - held.at; + if (frames >= ARROW_HOLD_FRAMES && (frames - ARROW_HOLD_FRAMES) % ARROW_REPEAT_FRAMES === 0) { + typeKey(DIRECTION_KEYSYM[held.dir], held.mods); } moved = true; } @@ -1217,11 +1229,10 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { sheetArm, sheetTap, keyFly, - arrowFan, - openArrows, - armArrow, - releaseArrows, - closeArrows, + dpad, + dpadDown, + dpadUp, + clickHeld, flyT, openKeyFly, closeKeyFly, @@ -1242,6 +1253,7 @@ export function createRemoteStore(svc: Svc | null = connectSvc()) { placeBegin, placeTo, placeCancel, + resizing, resizeBegin, resizeBy, resizeCancel, diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts index 3ef34e4c8..7d523c7d4 100644 --- a/tests/pocket-remote-sim.test.ts +++ b/tests/pocket-remote-sim.test.ts @@ -7,7 +7,7 @@ import { describe, expect, test } from "bun:test"; import { bootWorld } from "../hosts/sim/sim.ts"; import type { HostState } from "../apps/pocket-remote/protocol.ts"; -import { keyboardKeys, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts"; +import { CLICK_KEY, DPAD_KEYS, keyboardKeys, MENU_KEY, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts"; import { BALL_HOME, CC_BUTTON, @@ -407,62 +407,100 @@ describe("pocket-remote in the sim", () => { expect(z("0xT1")).toBeGreaterThan(z("0xT2")); }); - test("the ball is on the stage only: the deck's bottom half is the trackpad", async () => { - const { world, store, sent } = await connected(); + test("the ball is on the stage only: the deck's own controls own that space", async () => { + const { world, store } = await connected(); tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); expect(store.mode()).toBe("deck"); - // A touch where the ball would be moves the pointer instead. - const ball = store.ball(); - for (let i = 0; i < 6; i += 1) world.frame(0, undefined, [pack(ball.x + 22 + i * 5, ball.y + 22)]); + // A drag where the ball would be belongs to the deck: the ball itself + // does not move, because it is not on this screen. + const before = store.ball(); + for (let i = 0; i < 8; i += 1) { + world.frame(0, undefined, [pack(before.x + 22, Math.round(before.y + 22 - i * 6))]); + } world.frame(0, undefined, []); - for (let i = 0; i < 4; i += 1) world.frame(0); - expect(store.sheet()).toBeNull(); - expect(sent.some((line) => (line as { t: string }).t === "ptr")).toBe(true); + for (let i = 0; i < 6; i += 1) world.frame(0); + expect(store.ball()).toEqual(before); + expect(store.ballDragging()).toBe(false); }); - test("the arrow compass sends one press on a flick and repeats when held", async () => { + test("the d-pad fires at once and repeats while held, with the modifier riding along", async () => { const { world, store, sent } = await connected(); tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; - const from = { x: compass.x + compass.w / 2, y: compass.y + compass.h / 2 }; - - // A flick: press, slide right, release — exactly one Right. - world.frame(0, undefined, [pack(from.x, from.y)]); - expect(store.arrowFan()?.dir).toBeNull(); - for (let i = 1; i <= 4; i += 1) world.frame(0, undefined, [pack(from.x + i * 8, from.y)]); - expect(store.arrowFan()?.dir).toBe("r"); - // Nothing has been sent yet: sliding through a direction must not move - // the cursor. - expect(sent.filter((line) => (line as { t: string }).t === "key").length).toBe(0); + const right = DPAD_KEYS.r; + const at = { x: right.x + right.w / 2, y: right.y + right.h / 2 }; + + // A tap: exactly one Right, on the press. + world.frame(0, undefined, [pack(at.x, at.y)]); + expect(store.dpad()?.dir).toBe("r"); + expect(sent.filter((line) => (line as { t: string }).t === "key")).toEqual([{ t: "key", k: "Right" }]); world.frame(0, undefined, []); for (let i = 0; i < 4; i += 1) world.frame(0); - expect(store.arrowFan()).toBeNull(); - expect(sent.filter((line) => (line as { t: string }).t === "key")).toEqual([{ t: "key", k: "Right" }]); + expect(store.dpad()).toBeNull(); + expect(sent.filter((line) => (line as { t: string }).t === "key").length).toBe(1); - // Held down: the first press lands after the hold, then it repeats. + // Held: the first press, then repeats. sent.length = 0; - world.frame(0, undefined, [pack(from.x, from.y)]); - for (let i = 0; i < 70; i += 1) world.frame(0, undefined, [pack(from.x, from.y - 30)]); + const up = DPAD_KEYS.u; + for (let i = 0; i < 70; i += 1) world.frame(0, undefined, [pack(up.x + up.w / 2, up.y + up.h / 2)]); const ups = sent.filter((line) => (line as { k?: string }).k === "Up"); - expect(ups.length).toBeGreaterThan(3); - expect(ups.length).toBeLessThan(12); + expect(ups.length).toBeGreaterThan(4); + expect(ups.length).toBeLessThan(14); world.frame(0, undefined, []); for (let i = 0; i < 4; i += 1) world.frame(0); - // The release adds nothing to a hold that already repeated. - expect(sent.filter((line) => (line as { k?: string }).k === "Up").length).toBe(ups.length); - // A sticky modifier rides along: ctrl then the compass is ctrl+Left. + // A sticky modifier rides along: ctrl then left is ctrl+Left. sent.length = 0; const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); - world.frame(0, undefined, [pack(from.x, from.y)]); - for (let i = 1; i <= 4; i += 1) world.frame(0, undefined, [pack(from.x - i * 8, from.y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 4; i += 1) world.frame(0); + const left = DPAD_KEYS.l; + tap(world, left.x + left.w / 2, left.y + left.h / 2, 5); expect(sent).toContainEqual({ t: "key", k: "Left", mods: ["ctrl"] }); expect(store.kbMods()).toEqual([]); }); + test("the deck's menu key opens the sheet, and ctrl reaches the pointer", async () => { + const { world, store, sent } = await connected(); + tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); + expect(store.mode()).toBe("deck"); + + // ctrl then a tap on the pad: the click carries the modifier, because a + // virtual pointer cannot hold one itself. + const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; + tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); + expect(store.kbMods()).toEqual(["ctrl"]); + tap(world, TRACKPAD.x + 60, TRACKPAD.y + 50, 6); + expect(sent).toContainEqual({ t: "click", b: "l", mods: ["ctrl"] }); + expect(store.kbMods()).toEqual([]); + + // The click key holds the button down: the other finger drags a + // selection, and lifting the key ends it. + sent.length = 0; + world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); + for (let i = 0; i < 6; i += 1) world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); + expect(store.clickHeld()).toBe(true); + expect(sent).toContainEqual({ t: "drag", on: 1 }); + // A second finger on the pad moves the pointer while the button is down. + for (let i = 1; i <= 8; i += 1) { + world.frame(0, undefined, [ + pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20), + pack(TRACKPAD.x + 40 + i * 8, TRACKPAD.y + 40, 1), + ]); + } + expect(sent.some((line) => (line as { t: string }).t === "ptr")).toBe(true); + // Lifting the pad finger must not click while the button is held. + world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); + for (let i = 0; i < 3; i += 1) world.frame(0); + expect(sent.filter((line) => (line as { t: string }).t === "click").length).toBe(0); + world.frame(0, undefined, []); + for (let i = 0; i < 4; i += 1) world.frame(0); + expect(store.clickHeld()).toBe(false); + expect(sent).toContainEqual({ t: "drag", on: 0 }); + + // The menu key opens Omarchy's sheet from the deck. + tap(world, MENU_KEY.x + 30, MENU_KEY.y + 20); + expect(store.sheet()?.at).toBe("root"); + }); + test("a hello that is still pending shows the approval screen", async () => { const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts index 17a05930c..7ec2f8790 100644 --- a/tests/pocket-remote.test.ts +++ b/tests/pocket-remote.test.ts @@ -51,21 +51,24 @@ import { wtypeArgs, } from "../apps/pocket-remote/host/omarchy.ts"; import { - chipAt, - chipRects, - ARROW_CHIP_H, - ARROW_CHIP_W, - ARROW_DEAD_ZONE, ARROW_HOLD_FRAMES, ARROW_REPEAT_FRAMES, - arrowDirection, - arrowFanRects, + BAND, + chipAt, + chipRects, + CLICK_KEY, + deckTargetAt, DIRECTION_KEYSYM, + DPAD, + DPAD_KEYS, + dpadAt, KEYBOARD, keyAt, keyboardKeys, keysymFor, keyToLine, + MENU_KEY, + TOUCH_BIAS_Y, TRACKPAD, } from "../apps/pocket-remote/keyboard-layout.ts"; import { @@ -121,7 +124,9 @@ import { tabAt, TILE_GRIP, tileGripHit, + TILE_GRIP_MIN, tileGripRect, + tileGripTarget, TILE_POPUP_ROWS, tileRect, trackDelta, @@ -802,16 +807,24 @@ describe("pocket-remote design system", () => { expect(cleanTitle("evan@x1nano:~", "foot")).toBe("evan@x1nano:~"); }); - test("a tile's resize corner sits inside it and only on tiles big enough", () => { + test("a tile's resize corner is small ink with a large target", () => { const tile = { x: 100, y: 100, w: 120, h: 90 }; const grip = tileGripRect(tile); expect(grip.x + grip.w).toBe(tile.x + tile.w); expect(grip.y + grip.h).toBe(tile.y + tile.h); expect(grip.w).toBe(TILE_GRIP); + // The thing a finger has to hit is much bigger than the mark, and + // reaches a little past the tile's own edge. + const target = tileGripTarget(tile); + expect(Math.min(target.w, target.h)).toBeGreaterThanOrEqual(34); + expect(target.x).toBeLessThan(grip.x); + expect(target.x + target.w).toBeGreaterThan(tile.x + tile.w); expect(tileGripHit(tile.x + tile.w - 4, tile.y + tile.h - 4, tile)).toBe(true); + expect(tileGripHit(tile.x + tile.w - 28, tile.y + tile.h - 28, tile)).toBe(true); + expect(tileGripHit(tile.x + tile.w + 3, tile.y + tile.h + 3, tile)).toBe(true); expect(tileGripHit(tile.x + 10, tile.y + 10, tile)).toBe(false); // Too small to carry one: the whole face stays focus and hold. - expect(tileGripHit(104, 104, { x: 100, y: 100, w: 40, h: 40 })).toBe(false); + expect(tileGripHit(160, 160, { x: 100, y: 100, w: TILE_GRIP_MIN - 1, h: 200 })).toBe(false); }); test("the zIndex prop id the tiles write matches the contract", () => { @@ -821,7 +834,7 @@ describe("pocket-remote design system", () => { }); describe("pocket-remote deck", () => { - test("every layer fits over the trackpad and no two keys overlap", () => { + test("every layer fits above the band and no two keys overlap", () => { for (const layer of ["lower", "upper", "sym"] as const) { const keys = keyboardKeys(layer); expect(keys.length).toBeGreaterThan(40); @@ -829,7 +842,7 @@ describe("pocket-remote deck", () => { expect(key.x).toBeGreaterThanOrEqual(0); expect(key.x + key.w).toBeLessThanOrEqual(SCREEN_W); expect(key.y).toBeGreaterThanOrEqual(KEYBOARD.y); - expect(key.y + key.h).toBeLessThanOrEqual(TRACKPAD.y); + expect(key.y + key.h).toBeLessThanOrEqual(BAND.y); } for (let i = 0; i < keys.length; i += 1) { for (let j = i + 1; j < keys.length; j += 1) { @@ -846,12 +859,15 @@ describe("pocket-remote deck", () => { // Omarchy's grammar lives on SUPER, so the deck carries it. expect(labels).toContain("super"); expect(labels).toContain("return"); - // One arrow key, not four: the compass. - expect(labels.filter((label) => label === "arrows").length).toBe(1); + // The arrows live on the d-pad in the band, not among the keys. expect(labels).not.toContain("←"); + expect(labels).not.toContain("arrows"); + // A terminal's two punctuation keys are on the bottom row. + expect(labels).toContain("-"); + expect(labels).toContain("/"); } expect(TRACKPAD.y + TRACKPAD.h).toBeLessThanOrEqual(SCREEN_H); - expect(TRACKPAD.h).toBeGreaterThanOrEqual(96); + expect(TRACKPAD.h).toBeGreaterThanOrEqual(80); const lower = keyboardKeys("lower").map((k) => k.def.label); expect(lower).toContain(","); expect(lower).toContain("."); @@ -863,48 +879,80 @@ describe("pocket-remote deck", () => { expect(keyAt("lower", 240, TRACKPAD.y + 10)).toBeNull(); }); - test("the arrow compass is one wide key whose legend stays on screen", () => { - const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; - expect(compass.def.glyph).toBeTruthy(); - // Wider than a letter and in the bottom row, where a thumb sits. - expect(compass.w).toBeGreaterThan(60); - expect(compass.row).toBe(4); - expect(compass.x + compass.w).toBeLessThanOrEqual(SCREEN_W); - const fan = arrowFanRects(compass); + test("the band under the keyboard is a laptop's: menu, click, pad, d-pad", () => { + // Nothing overlaps, and the pad does not run edge to edge. + expect(MENU_KEY.x).toBeGreaterThan(0); + expect(MENU_KEY.y).toBe(BAND.y); + expect(CLICK_KEY.y).toBeGreaterThan(MENU_KEY.y + MENU_KEY.h); + expect(CLICK_KEY.y + CLICK_KEY.h).toBeLessThanOrEqual(BAND.y + BAND.h); + expect(TRACKPAD.x).toBeGreaterThan(MENU_KEY.x + MENU_KEY.w); + expect(DPAD.x).toBeGreaterThan(TRACKPAD.x + TRACKPAD.w); + expect(DPAD.x + DPAD.w).toBeLessThanOrEqual(SCREEN_W); + expect(BAND.y).toBeGreaterThanOrEqual(KEYBOARD.y + KEYBOARD.h); + expect(BAND.y + BAND.h).toBeLessThanOrEqual(SCREEN_H); + // Both rest buttons and every d-pad key clear the minimum target. + for (const r of [MENU_KEY, CLICK_KEY, DPAD_KEYS.u, DPAD_KEYS.d, DPAD_KEYS.l, DPAD_KEYS.r]) { + expect(Math.min(r.w, r.h)).toBeGreaterThanOrEqual(28); + } + // A cross: up over down, left beside right, sharing the middle. + expect(DPAD_KEYS.u.x).toBe(DPAD_KEYS.d.x); + expect(DPAD_KEYS.u.y).toBeLessThan(DPAD_KEYS.d.y); + expect(DPAD_KEYS.l.y).toBe(DPAD_KEYS.r.y); + expect(DPAD_KEYS.l.x).toBeLessThan(DPAD_KEYS.u.x); + expect(DPAD_KEYS.r.x).toBeGreaterThan(DPAD_KEYS.u.x); for (const dir of ["u", "d", "l", "r"] as const) { - const r = fan[dir]; - expect(r.w).toBe(ARROW_CHIP_W); - expect(r.h).toBe(ARROW_CHIP_H); - // The legend lives over the trackpad: the deck's one empty place. - expect(r.x).toBeGreaterThanOrEqual(TRACKPAD.x); - expect(r.x + r.w).toBeLessThanOrEqual(TRACKPAD.x + TRACKPAD.w); - expect(r.y).toBeGreaterThanOrEqual(TRACKPAD.y); - expect(r.y + r.h).toBeLessThanOrEqual(TRACKPAD.y + TRACKPAD.h); + const r = DPAD_KEYS[dir]; + expect(dpadAt(r.x + 2, r.y + 2)).toBe(dir); + expect(r.x).toBeGreaterThanOrEqual(DPAD.x - 4); + expect(r.x + r.w).toBeLessThanOrEqual(DPAD.x + DPAD.w + 4); + expect(r.y).toBeGreaterThanOrEqual(BAND.y - 4); + expect(r.y + r.h).toBeLessThanOrEqual(BAND.y + BAND.h + 4); } - // A diamond: up above down, left left of right, sharing centres. - expect(fan.u.y).toBeLessThan(fan.d.y); - expect(fan.l.x).toBeLessThan(fan.r.x); - expect(fan.u.x).toBe(fan.d.x); - expect(fan.l.y).toBe(fan.r.y); - // A key near the right edge still gets a legend inside the pad. - const atEdge = arrowFanRects({ x: SCREEN_W - 40, y: 200, w: 40, h: 32 }); - expect(atEdge.r.x + atEdge.r.w).toBeLessThanOrEqual(TRACKPAD.x + TRACKPAD.w); - }); - - test("the slide picks the direction, and a resting finger picks none", () => { - expect(arrowDirection(0, 0)).toBeNull(); - expect(arrowDirection(ARROW_DEAD_ZONE - 1, ARROW_DEAD_ZONE - 1)).toBeNull(); - expect(arrowDirection(30, 4)).toBe("r"); - expect(arrowDirection(-30, 4)).toBe("l"); - expect(arrowDirection(4, 30)).toBe("d"); - expect(arrowDirection(4, -30)).toBe("u"); - // The dominant axis wins a diagonal. - expect(arrowDirection(40, 30)).toBe("r"); - expect(arrowDirection(20, 40)).toBe("d"); - expect(DIRECTION_KEYSYM).toEqual({ u: "Up", d: "Down", l: "Left", r: "Right" }); + expect(dpadAt(TRACKPAD.x + 10, TRACKPAD.y + 10)).toBeNull(); + // One target for every touch on the deck. + expect(deckTargetAt("lower", MENU_KEY.x + 10, MENU_KEY.y + 10)).toEqual({ kind: "menu" }); + expect(deckTargetAt("lower", CLICK_KEY.x + 10, CLICK_KEY.y + 10)).toEqual({ kind: "click" }); + expect(deckTargetAt("lower", TRACKPAD.x + 40, TRACKPAD.y + 40)).toEqual({ kind: "pad" }); + expect(deckTargetAt("lower", DPAD_KEYS.l.x + 4, DPAD_KEYS.l.y + 4)).toEqual({ kind: "dpad", dir: "l" }); + const g = keyboardKeys("lower").find((k) => k.def.label === "g")!; + expect(deckTargetAt("lower", g.x + 4, g.y + 4)).toMatchObject({ kind: "key" }); + // The arrows are the d-pad's now: no arrow keys among the keys. + expect(keyboardKeys("lower").map((k) => k.def.label)).not.toContain("←"); // A repeat is a walking pace: each one is a key press on the laptop. expect(ARROW_HOLD_FRAMES).toBeGreaterThan(15); expect(60 / ARROW_REPEAT_FRAMES).toBeLessThan(12); + expect(DIRECTION_KEYSYM).toEqual({ u: "Up", d: "Down", l: "Left", r: "Right" }); + }); + + test("the keyboard's hit regions tile it, and correct for where a finger lands", () => { + const keys = keyboardKeys("lower"); + const g = keys.find((k) => k.def.label === "g")!; + const h = keys.find((k) => k.def.label === "h")!; + // Inside a key, obviously. + expect(keyAt("lower", g.x + 4, g.y + 4)).toBe(g); + // In the gap between two keys: the nearer one, not nothing. (The exact + // middle is a tie the iteration order breaks; a pixel either way is + // what a finger produces.) + expect(keyAt("lower", g.x + g.w + 2, g.y + 15)).toBe(g); + expect(keyAt("lower", h.x - 2, h.y + 15)).toBe(h); + // In the gap between two ROWS: whichever row is nearer, never null. + const below = keys.find((k) => k.def.label === "b")!; + const rowGapY = g.y + g.h + 2; + expect(keyAt("lower", g.x + 4, rowGapY)).not.toBeNull(); + expect(keyAt("lower", below.x + 4, below.y - 2)).not.toBeNull(); + // Every point over the keyboard's own rows resolves to a key. + for (let y = KEYBOARD.y + 6; y < KEYBOARD.y + KEYBOARD.h - 2; y += 5) { + for (let x = 20; x < SCREEN_W - 20; x += 7) { + expect(keyAt("lower", x, y)).not.toBeNull(); + } + } + // The bias is downward: a touch that low still lands on the key above, + // and one at a key's very top edge belongs to that key. + const bias = keyAt("lower", g.x + g.w / 2, g.y + g.h + TOUCH_BIAS_Y - 1); + expect(bias).toBe(g); + expect(TOUCH_BIAS_Y).toBeGreaterThan(0); + // Far from the keyboard: nothing. + expect(keyAt("lower", 240, BAND.y + 40)).toBeNull(); }); test("keys become wire lines: text plain, keysyms under modifiers", () => { @@ -940,6 +988,24 @@ describe("pocket-remote deck", () => { expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); expect(chipRects(x, 2)[0]!.y).toBeLessThan(x.y); }); + + test("keys are drawn with a visible gap while their targets stay large", () => { + const keys = keyboardKeys("lower"); + const row = keys.filter((k) => k.row === 2).sort((a, b) => a.x - b.x); + // Six pixels of ink between neighbours, up from four. + for (let i = 1; i < row.length; i += 1) { + expect(row[i]!.x - (row[i - 1]!.x + row[i - 1]!.w)).toBeGreaterThanOrEqual(6); + } + // And six between rows. + const above = keys.find((k) => k.row === 1)!; + expect(row[0]!.y - (above.y + above.h)).toBeGreaterThanOrEqual(6); + // The gaps are ink, not dead space: the row's own band resolves + // everywhere, including the seams. + for (const key of row) { + expect(keyAt("lower", key.x - 3, key.y + key.h / 2)).not.toBeNull(); + expect(keyAt("lower", key.x + key.w + 3, key.y + key.h / 2)).not.toBeNull(); + } + }); }); describe("pocket-remote wtype chords", () => { diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts index 2a1f89d56..9c28f9561 100644 --- a/tools/pocket-remote.ts +++ b/tools/pocket-remote.ts @@ -413,15 +413,20 @@ async function shots(outDir: string): Promise { shot("deck-variants"); frames(1); frames(10); - // the arrow compass, mid-slide - const compass = keyboardKeys("lower").find((k) => "pad" in k.def.act)!; - const cx = compass.x + compass.w / 2; - const cy = compass.y + compass.h / 2; - frames(2, [pack(cx, cy)]); - for (let i = 1; i <= 4; i += 1) frames(2, [pack(Math.round(cx - i * 8), cy)]); - shot("deck-arrows"); + // the band: the click key held while a finger drags on the pad + const { CLICK_KEY, DPAD_KEYS, TRACKPAD: PAD } = await import("../apps/pocket-remote/keyboard-layout.ts"); + frames(6, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); + for (let i = 1; i <= 6; i += 1) { + frames(2, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20), pack(PAD.x + 60 + i * 10, PAD.y + 50, 1)]); + } + shot("deck-drag"); frames(1); - frames(10); + frames(8); + // a d-pad key held + frames(6, [pack(DPAD_KEYS.l.x + 16, DPAD_KEYS.l.y + 14)]); + shot("deck-dpad"); + frames(1); + frames(8); // back to the stage, then an empty workspace: the launch bar is fixed, so // there is nothing on the stage but the hint. From 8063f67b3368a562522d935d1fcfa35ddd4b9241 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 12:51:15 -0700 Subject: [PATCH 16/27] refactor(ipodtouch4): take an app from another project, and move the iPod companion out to pocket-shell MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The app is a product, not a runtime demo, so it lives in the product repository with its own history — the same move apps/pocket-shell and apps/term made. What stays here is the runtime work it needed: - hosts/iphone2g/svcwire.c, the legacy Apple hosts' PKNT transport (dialler plus a listener for the cable), behind POCKET_SVC_WIRE. - The landscape presentation for a portrait panel, and the resolver's transposed native fill. - bake-font's fallbackTtfs and tools/build.ts reading an app's fonts.json, so an icon font can share the atlas with the text it labels; plus tools/font-subset.ts to cut one down to what an app spells. - tools/ipodtouch4.ts gains an EXTERNAL app mode: POCKETJS_IPODTOUCH4_APP_FILE names a descriptor beside the app's own sources (bundle, executable, URL scheme, receipt slug, whether it wants the wire) and the guest builds with --project-root pointed there. The toolchain, the sysroot, the linker and the deployment transaction stay in this repository; the app does not have to. Pocket Clear's own entry is untouched and its bundle stays byte-identical. Co-Authored-By: Claude Opus 4.8 --- apps/pocket-remote/LICENSE | 674 --------- apps/pocket-remote/README.md | 303 ---- apps/pocket-remote/actions.ts | 90 -- apps/pocket-remote/app.tsx | 116 -- apps/pocket-remote/ball.tsx | 75 - apps/pocket-remote/connect.tsx | 79 - apps/pocket-remote/control.tsx | 297 ---- apps/pocket-remote/deck.tsx | 518 ------- apps/pocket-remote/design.ts | 77 - apps/pocket-remote/fonts.json | 3 - .../pocket-remote/fonts/LICENSE-NerdFonts.txt | 126 -- .../fonts/SymbolsNerdFont-subset.otf | Bin 69972 -> 0 bytes apps/pocket-remote/glyphs.ts | 90 -- apps/pocket-remote/handlers.ts | 14 - apps/pocket-remote/host/hypr.ts | 307 ---- apps/pocket-remote/host/menu-source.ts | 160 --- apps/pocket-remote/host/omarchy.ts | 678 --------- apps/pocket-remote/host/pocket-remote.service | 23 - .../host/pointer/pocket-pointer.c | 114 -- .../wlr-virtual-pointer-unstable-v1.xml | 152 -- apps/pocket-remote/host/serve.ts | 838 ----------- apps/pocket-remote/host/wire.ts | 110 -- apps/pocket-remote/icons.tsx | 86 -- apps/pocket-remote/keyboard-layout.ts | 364 ----- apps/pocket-remote/layout.ts | 475 ------ apps/pocket-remote/main.tsx | 6 - apps/pocket-remote/media/connect.png | Bin 8371 -> 0 bytes apps/pocket-remote/media/control-centre.png | Bin 15647 -> 0 bytes apps/pocket-remote/media/deck-dpad.png | Bin 16230 -> 0 bytes apps/pocket-remote/media/deck-drag.png | Bin 16032 -> 0 bytes apps/pocket-remote/media/deck-variants.png | Bin 16552 -> 0 bytes apps/pocket-remote/media/deck.png | Bin 16064 -> 0 bytes apps/pocket-remote/media/empty.png | Bin 9942 -> 0 bytes apps/pocket-remote/media/menu-apps.png | Bin 11354 -> 0 bytes apps/pocket-remote/media/menu-root.png | Bin 12319 -> 0 bytes apps/pocket-remote/media/menu-toggle.png | Bin 13339 -> 0 bytes apps/pocket-remote/media/menu-trigger.png | Bin 12873 -> 0 bytes apps/pocket-remote/media/popup.png | Bin 13328 -> 0 bytes apps/pocket-remote/media/stage.png | Bin 13011 -> 0 bytes apps/pocket-remote/menu-sheet.tsx | 262 ---- apps/pocket-remote/menu-tree.ts | 60 - apps/pocket-remote/menu.ts | 354 ----- apps/pocket-remote/names.ts | 80 -- apps/pocket-remote/pocket.json | 24 - apps/pocket-remote/popup.tsx | 77 - apps/pocket-remote/protocol.ts | 337 ----- apps/pocket-remote/stage.tsx | 424 ------ apps/pocket-remote/store.ts | 1276 ----------------- apps/pocket-remote/strip.tsx | 220 --- apps/pocket-remote/theme.ts | 176 --- apps/pocket-remote/ui.tsx | 136 -- tests/pocket-remote-sim.test.ts | 515 ------- tests/pocket-remote.test.ts | 1019 ------------- tools/ipodtouch4.ts | 90 +- tools/pocket-remote.ts | 510 ------- tools/test.ts | 7 - 56 files changed, 69 insertions(+), 11273 deletions(-) delete mode 100644 apps/pocket-remote/LICENSE delete mode 100644 apps/pocket-remote/README.md delete mode 100644 apps/pocket-remote/actions.ts delete mode 100644 apps/pocket-remote/app.tsx delete mode 100644 apps/pocket-remote/ball.tsx delete mode 100644 apps/pocket-remote/connect.tsx delete mode 100644 apps/pocket-remote/control.tsx delete mode 100644 apps/pocket-remote/deck.tsx delete mode 100644 apps/pocket-remote/design.ts delete mode 100644 apps/pocket-remote/fonts.json delete mode 100644 apps/pocket-remote/fonts/LICENSE-NerdFonts.txt delete mode 100644 apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf delete mode 100644 apps/pocket-remote/glyphs.ts delete mode 100644 apps/pocket-remote/handlers.ts delete mode 100644 apps/pocket-remote/host/hypr.ts delete mode 100644 apps/pocket-remote/host/menu-source.ts delete mode 100644 apps/pocket-remote/host/omarchy.ts delete mode 100644 apps/pocket-remote/host/pocket-remote.service delete mode 100644 apps/pocket-remote/host/pointer/pocket-pointer.c delete mode 100644 apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml delete mode 100644 apps/pocket-remote/host/serve.ts delete mode 100644 apps/pocket-remote/host/wire.ts delete mode 100644 apps/pocket-remote/icons.tsx delete mode 100644 apps/pocket-remote/keyboard-layout.ts delete mode 100644 apps/pocket-remote/layout.ts delete mode 100644 apps/pocket-remote/main.tsx delete mode 100644 apps/pocket-remote/media/connect.png delete mode 100644 apps/pocket-remote/media/control-centre.png delete mode 100644 apps/pocket-remote/media/deck-dpad.png delete mode 100644 apps/pocket-remote/media/deck-drag.png delete mode 100644 apps/pocket-remote/media/deck-variants.png delete mode 100644 apps/pocket-remote/media/deck.png delete mode 100644 apps/pocket-remote/media/empty.png delete mode 100644 apps/pocket-remote/media/menu-apps.png delete mode 100644 apps/pocket-remote/media/menu-root.png delete mode 100644 apps/pocket-remote/media/menu-toggle.png delete mode 100644 apps/pocket-remote/media/menu-trigger.png delete mode 100644 apps/pocket-remote/media/popup.png delete mode 100644 apps/pocket-remote/media/stage.png delete mode 100644 apps/pocket-remote/menu-sheet.tsx delete mode 100644 apps/pocket-remote/menu-tree.ts delete mode 100644 apps/pocket-remote/menu.ts delete mode 100644 apps/pocket-remote/names.ts delete mode 100644 apps/pocket-remote/pocket.json delete mode 100644 apps/pocket-remote/popup.tsx delete mode 100644 apps/pocket-remote/protocol.ts delete mode 100644 apps/pocket-remote/stage.tsx delete mode 100644 apps/pocket-remote/store.ts delete mode 100644 apps/pocket-remote/strip.tsx delete mode 100644 apps/pocket-remote/theme.ts delete mode 100644 apps/pocket-remote/ui.tsx delete mode 100644 tests/pocket-remote-sim.test.ts delete mode 100644 tests/pocket-remote.test.ts delete mode 100644 tools/pocket-remote.ts diff --git a/apps/pocket-remote/LICENSE b/apps/pocket-remote/LICENSE deleted file mode 100644 index f288702d2..000000000 --- a/apps/pocket-remote/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/apps/pocket-remote/README.md b/apps/pocket-remote/README.md deleted file mode 100644 index 823ffa1c4..000000000 --- a/apps/pocket-remote/README.md +++ /dev/null @@ -1,303 +0,0 @@ -# Pocket Remote - -An Omarchy companion on the iPod touch 4: a landscape touch surface that -mirrors the desktop and drives it. **The iPod runs the PocketJS guest; a -small daemon on the Omarchy machine mirrors Hyprland into snapshots and runs -the same commands the keyboard bindings run.** Nothing on the wire is a -command string — the device names an action id or a row of Omarchy's own -menu, the daemon looks it up. - -Licensed under the GNU General Public License v3.0 or later (`LICENSE`). - -``` - iPod touch 4 (480x320 landscape) USB (usbmuxd) Omarchy machine - ┌────────────────────────────────┐ PKNT/TCP ┌──────────────────────────┐ - │ apps/pocket-remote (Solid) │◀───────────────▶│ host/serve.ts (Node) │ - │ hosts/iphone2g/svcwire.c │ or WiFi+beacon │ .socket.sock requests │ - └────────────────────────────────┘ │ .socket2.sock events │ - │ omarchy-* / wtype │ - │ pocket-pointer (wl) │ - └──────────────────────────┘ -``` - -## Screens - -Rendered in the headless sim by `bun tools/pocket-remote.ts shots media/` -against a scripted desktop; the panel is 480x320. - -| | | -|---|---| -| ![the stage](media/stage.png) | ![a held tile's popup](media/popup.png) | -| ![the control centre](media/control-centre.png) | ![Omarchy's menu as a sheet](media/menu-root.png) | -| ![the Trigger submenu](media/menu-trigger.png) | ![the machine's applications](media/menu-apps.png) | -| ![the deck](media/deck.png) | ![a held key's variants](media/deck-variants.png) | -| ![the arrow compass](media/deck-arrows.png) | ![an empty workspace](media/empty.png) | - -The stage is 260 px between the strip and the launch bar; the deck runs to -the bottom edge. - -## The screen - -``` -┌────────────────────────────────────────────────────────────────┐ -│ 1 2 3 4 5 [▦ | ⌨] dwindle ☰ │ strip 28 px -├────────────────────────────────────────────────────────────────┤ -│ │ -│ stage: live miniature of the focused monitor │ -│ tiles = windows, accent border = focus ┌──┐ │ 260 px -│ deck: five rows of keys over a trackpad │◎ │ │ -│ └──┘ │ -├────────────────────────────────────────────────────────────────┤ -│ >_ Terminal ◍ Browser ▤ Files │ bar 32 px -└────────────────────────────────────────────────────────────────┘ -``` - -Two verbs: **tap**, and **hold**. A hold either opens something under the -finger (a tile's popup, the control centre's sliders) or picks something up -(the ball, a floating window, a key's variants). Novices see the choices; -after a day the strokes are made without looking. - -- **Strip.** Workspace tabs on the left, the **mode switch** centred, the - layout badge and the **control centre**'s button at the end. The tabs are a - **fixed 1..N** (at least five, up to eight): Hyprland destroys an empty - workspace, so a list built from its snapshot shrank to whatever had windows - — while the numbers Omarchy binds (SUPER+1..0) stay addressable, and a tab - for a workspace that does not exist yet is how you get there. Tap switches; - hold a tab to bring the focused window along. The badge toggles the layout - (SUPER+L). -- **Launch bar.** Terminal, Browser, Files, fixed across the bottom of the - stage in three wide cells. Those three are what a remote is reached for, - and with them here an empty workspace needs no launchers of its own. The - deck has no bar: its bottom half is the trackpad. -- **Stage.** The focused monitor scaled to fit, every window a tile labelled - by class and title, the focused one bordered in the accent, floating - windows marked. **Tap focuses. Hold a tile** and a popup opens at the - finger — Float / Tile, Full screen, Close — the classic kind: one container - of rows with hairlines between them. **The finger that opened it picks a - row**: slide onto one and let go, one gesture; lift without sliding and the - popup stays up for a tap. **Drag a floating window and it moves**, on the - laptop, under the finger (Hyprland places it every third frame and on - release). Drag a tiled window onto another to swap them, onto a tab to - move it there. Swipe empty stage to step workspaces. -- **Deck.** The laptop's C surface on the iPod: five compact rows of keys - over a trackpad, so typing and pointing need no mode of their own. Keys go - straight to the desktop (`wtype`) as they are pressed; a pressed key rises, - brightens and shows its character in a bubble above the finger. Comma and - period sit beside the space bar, apostrophe after the letters, backtick on - the symbol layer; esc, tab, ctrl, alt and the arrows are always there. - **Chords two ways**: sticky modifiers (tap ctrl, then the key; ctrl arms, - paints itself, drops after one key) and hold-and-slide variants (hold `x` - → `^X` `⌥X`, hold `1` → `F1` `^1`; release on the key itself types it - plain). **The modifiers reach the pointer too**: ctrl then a tap is a - ctrl-click, and ctrl with the click button held is a ctrl-drag. The - **trackpad** is a relative pointer with acceleration: one finger moves, a - tap clicks, two fingers scroll, a two-finger tap is the right button, a - hold picks something up. -- **The ball.** Omarchy's menu (SUPER+SPACE) has a handle that floats over - everything and lives on a side edge. **Tap it and the menu opens as a - sheet** in the middle of the screen: the same rows in the same order with - the same glyphs, one column, scrolling — a menu reads as a list, and two - columns of eleven-character labels made the eye jump. A submenu opens in - place with its title and a back chevron; an action runs on the laptop and - the sheet goes away. A row's highlight is **armed on the down edge and - shown only once the finger has stayed put**, so landing to fling no longer - flashes a selection. **Apps lists the machine's own applications** (the - daemon reads the XDG desktop entries and pages them over; the row opens - that list here rather than on the laptop). **Hold the ball and it comes - along**; let go and it slides to the nearer edge at that height. It fades - while idle. -- **Control centre.** Under its button: Wi-Fi (tap toggles the radio), - a screenshot, nightlight, what is playing with its transport, then - brightness and volume as sliders. Levels follow the finger **relatively** — - touching a slider never jumps the level to the finger — and a tap on a - track nudges by a step. Opened by a tap it stays until a tap outside; - **hold the button and slide** down onto a slider to adjust and let go, and - it puts itself away. - -Every touch target answers a press with a tint that eases in and out — a -capacitive panel has no hover and the remote's own feedback is the only local -one; the action itself is confirmed on the desktop. A toast over the stage -names the last action. - -## Why these choices - -**A tiling desktop is addressable.** Workspaces have numbers, windows have -addresses, actions have names. That is why the stage has no cursor: the Siri -Remote needs a trackpad because tvOS is spatial; Omarchy is a namespace, and -a namespace wants direct targets. The stage is the one spatial element and it -is a picture of the real arrangement, not a proxy. The deck's trackpad exists -for the applications inside the windows, which are spatial. - -**The menu is Omarchy's, not a summary of it.** `menu.ts` is generated from -the machine's `omarchy-menu.jsonc` (`bun tools/pocket-remote.ts menu x1nano`) -and carries every row's id, parent, kind, label and glyph in the shell's -order. The daemon parses the same file live — the default plus the user's -extension — runs an action's command under `bash -lc` exactly as the shell -does, evaluates every `when` and `checked` in one bash run every thirty -seconds and after any action, and sends the hidden and the checked ids; the -device applies them to its static table. A row the device names has to exist -on the machine as well, so the wire still carries no command strings. - -**The remote wears the theme and its iconography.** The daemon reads Omarchy's -`colors.toml` and every themed node repaints through `jump()` on its mirror -when the palette changes (theme.ts); class literals carry Tokyo Night so the -first frame looks right before the daemon speaks. The icons are the Nerd Font -glyphs Omarchy's bar and menu draw: `fonts.json` names a 68 KiB subset of the -symbols face (`tools/font-subset.ts`) as a fallback for codepoints Inter does -not map, and the atlas baker takes those glyphs from it, so an icon is text — -it recolours with the theme and needs no rectangle art. - -**The panel's own two axes.** A View's main axis is horizontal and its -cross-axis default is stretch, so `justify-*` places a label across and -`items-center` is what puts it on the middle line; a fixed-size box without -it paints its text against the top edge. Icons are glyphs from an atlas baked -at the panel's density, which is also why the ball's mark is a glyph rather -than a ring of bordered Views — a stroked circle is rasterised at logical -size and looked soft at 2x. The subset's advances are normalised to each -glyph's ink (`tools/font-subset.ts`): a monospaced Nerd Font patch gives every -glyph one cell of advance while drawing the double-width icons across two, so -a centred icon sat visibly right of centre. - -**Geometry through the mirror, not the style object.** A `style` object is -evaluated once, and Solid's `Show` keeps one instance while the value behind -it changes — so anything whose position follows live state (a popup that -re-records itself as the highlight moves, a compass chip that arms, a key -whose row gains a column on the symbol layer) writes `insetL`/`insetT` with -`jump()` from an effect. The key preview bubble this replaced parked itself -on the first letter typed until it did. - -**A release is the commit, not the tap.** `onUp` arrives before `onTap` for -one release, so a handler that clears its highlight in `onUp` leaves `onTap` -with nothing to run — the popup's rows and the sheet's rows therefore act on -`onUp`. This is also what makes hold-and-slide and tap-then-tap the same code -path. - -**Motion is a pool, not a tree.** Tiles live in a fixed pool of 24 slots -(protocol `WINDOWS_MAX`) keyed by window address. A snapshot re-targets the -pool; the frame loop eases each slot toward its target and writes geometry -straight to the node mirror. A floating tile under the finger keeps its own -geometry until the daemon echoes the placement, so a snapshot cannot yank it -back mid-drag. - -**Optimistic where the desktop will agree.** Tapping a tab commits the new -active workspace locally before the daemon confirms. Level drags update -locally and send at most every three frames; host echoes are ignored for half -a second after a release so a slider never snaps back on the way. - -## Hyprland's request socket speaks Lua - -Hyprland 0.5x (the Lua-config generation Omarchy 4 runs) evaluates -`dispatch ` on `.socket.sock` as `hl.dispatch()`, so the old -`dispatch workspace 1` grammar fails with a Lua parse error — from `hyprctl` -too. **Every dispatcher is therefore a Lua constructor call** -(`hl.dsp.focus({ workspace = "1" })`, `hl.dsp.window.move({ window = -"address:0x…", x = 100, y = 200 })`), the same ones Omarchy's own bindings and -scripts use. The daemon builds window and workspace targets only from -validated pieces (`luaWindow`, `luaWorkspace`), so nothing off the wire can -reach the Lua evaluator as code. Placements arrive monitor-relative and get -the focused monitor's origin back on, because Hyprland places in layout -coordinates. - -## The pointer - -Hyprland has no dispatcher for a click and nothing in Omarchy's repositories -drives a pointer from a script, but Hyprland speaks `zwlr_virtual_pointer_v1`. -`host/pointer/pocket-pointer.c` is a client of that protocol and nothing -else: it reads one command per line (`m dx dy`, `b code state`, `s dy dx`, -`e`) and forwards them as pointer events. The daemon keeps one running and -restarts it if it dies. It is built on the Omarchy machine at deploy time -with `wayland-scanner` and `cc` against the vendored protocol XML — no -uinput, no root, no extra daemon. - -## The wire - -Spec ops 30–32 (`svcOpen`/`svcPoll`/`svcSend`) over the SVC WIRE (PKNT) TCP -transport, exactly the mailbox the PSP, Vita and 3DS companions speak. -`hosts/iphone2g/svcwire.c` is the legacy Apple hosts' transport — a port of -the 3DS one (non-blocking BSD sockets pumped once per guest frame, no -threads) — compiled in only when `POCKET_SVC_WIRE` is defined. - -Lines are JSON (`protocol.ts`, `REMOTE_PROTO` 2). Host → device: `hello`, -`auth`, `state`, `levels`, `theme`, `cc` (Wi-Fi and what is playing), `menu` -(hidden and checked ids), `apps` (one page of the application list), `toast`. -Device → host: `hello`, `act`, `ws`, `win` (focus, close, swap, move, place, -resize, float, full, same), `vol`, `bri`, `mute`, `media`, `type`, `key`, -`ptr`, `click`, `scroll`, `drag`, `wifi`, `menu`, `launch`. **A snapshot has -to fit one 8 KiB poll batch**, so titles are clipped to 34 code points (a -title is what tells two terminals apart, and the daemon strips the program's -own name off its tail first), windows to the 24 most recently focused, -coordinates are integers, and the application list arrives forty entries at a -time. Pointer motion is accumulated on the device and sent -at most once per frame. - -**The cable.** The device listens on port 8624. When the iPod is plugged into -the Omarchy machine, usbmuxd lists it and `iproxy` forwards a host port to -that listener; the daemon polls `idevice_id -l` every three seconds, forwards -a port per device and dials it. Same wire, roles of `connect()` reversed — the -device still speaks the hello first — no WiFi, no beacon, no firewall rule, -and **a device on the cable is trusted without a dialog: physical possession -is the pairing.** This needs the `usbmuxd` package on the machine. - -Discovery over WiFi is still there: the daemon (or the relay) broadcasts the -PKNT beacon once a second and the device connects to the datagram's source. - -## Trust - -The LAN is not a trust boundary. The daemon accepts commands only from -addresses in `~/.local/state/pocket-remote/allowed.json` or from the cable; a -new WiFi device is put on hold and `hyprland-dialog` asks on the desktop -whether to allow it. Until allowed, a device sees the mirror but every -command is dropped. The action vocabulary is closed (`actions.ts`); menu rows -are ids resolved against the machine's own menu file; typed text goes through -`wtype` capped at 256 characters per line; keysyms are a short allow-list; -pointer deltas are bounded. - -## Running it - -On the Omarchy machine (`ssh` alias `x1nano`; Node comes from mise): - -``` -bun tools/pocket-remote.ts deploy-host x1nano # copy the daemon, build the pointer helper, install + start the user unit -bun tools/pocket-remote.ts logs x1nano # journal tail -bun tools/pocket-remote.ts menu x1nano # regenerate menu.ts after an Omarchy update -bun tools/pocket-remote.ts shots out/ # render every screen in the headless sim -``` - -On the iPod, plugged into the Omarchy machine: - -``` -POCKETJS_IPODTOUCH4_APP=pocket-remote POCKETJS_IPODTOUCH4_VIA=x1nano bun ipodtouch4 deploy -POCKETJS_IPODTOUCH4_APP=pocket-remote POCKETJS_IPODTOUCH4_VIA=x1nano bun ipodtouch4 launch -``` - -`POCKETJS_IPODTOUCH4_VIA` runs device discovery and the `iproxy` tunnel on -the machine over ssh and jumps every ssh/scp to the device through it -(`ProxyJump`), so the deployment key and the pinned host key stay here. The -app coexists with Pocket Clear: its own bundle, executable, URL scheme and -receipt files (`tools/ipodtouch4.ts` `IPODTOUCH4_APPS`). - -## Landscape on a portrait panel - -The plan asks for 480x320 native. The host keeps the window at the panel's -own 320x480, rotates the content view a quarter turn about its centre (home -button on the right) and lets the CAEAGLLayer's drawable follow the view's -bounds, so GL renders 960x640 and UIKit's `locationInView:` already reports -touches in the view's rotated space. - -## Testing - -- `tests/pocket-remote.test.ts` — wire constants pinned to spec.ts, framing, - protocol clipping, the action table, layout arithmetic (stage, ball, popup, - control centre, sheet, deck), the Hyprland → snapshot reduction, the Omarchy - readers (levels, theme, network, MPRIS), the menu source parser against a - JSONC sample and the baked table, the deck's keyboard. -- `tests/pocket-remote-sim.test.ts` — the built bundle in the headless sim - over a fake svc channel: a snapshot becomes tiles, the strip switches - workspace, the ball opens the sheet, a submenu opens in place, the sheet - scrolls and lists the machine's applications, holding a tile opens its - popup and the same finger picks a row, the control centre opens and mutes, - the deck types a chord, the arrow compass flicks once and repeats when - held, and the trackpad moves the pointer. (No tree probe while a finger is down: the probe - advances the world by one touchless frame and would end the hold.) -- `bun tools/pocket-remote.ts client 127.0.0.1:8623 --for 4` — a scripted - device against a live daemon. diff --git a/apps/pocket-remote/actions.ts b/apps/pocket-remote/actions.ts deleted file mode 100644 index 692201f91..000000000 --- a/apps/pocket-remote/actions.ts +++ /dev/null @@ -1,90 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/actions.ts — the fixed vocabulary the remote's own -// controls ask the laptop for, in one table read by BOTH ends: the device -// renders labels from it, the daemon runs exactly the command it names and -// nothing else. The wire carries an action id, never a command string. -// -// Omarchy's menu is not in this table: the device carries the menu tree -// (menu.ts) and names a row by id; the daemon runs that row from its own -// parse of omarchy-menu.jsonc (host/menu-source.ts). This table is for the -// controls the remote draws itself — the strip, the control centre, the -// empty stage's launchers. -// -// Every command is the one Omarchy binds to the equivalent key -// (/usr/share/omarchy/default/hypr/bindings/*.lua, Omarchy 4.0), so the -// remote behaves exactly like the keyboard would. - -export type ActionGroup = "launch" | "workspace" | "toggle" | "capture" | "media"; - -export type ActionRun = - /** argv, spawned directly (no shell). */ - | { exec: string[] } - /** A Hyprland dispatcher as a Lua expression (Hyprland 0.5x's request - * socket takes `dispatch ` and evaluates `hl.dispatch()`; the - * old `dispatch workspace 1` grammar is gone). Constructors are the ones - * Omarchy's own bindings use. */ - | { dispatch: string }; - -export interface ActionDef { - id: ActionId; - label: string; - group: ActionGroup; - run: ActionRun; -} - -export type ActionId = - // launch - | "terminal" - | "browser" - | "files" - // workspace - | "wsPrev" - | "wsNext" - | "layout" - // toggle - | "nightlight" - // capture - | "screenshot" - // media - | "play" - | "next" - | "prev"; - -const omarchy = (...argv: string[]): ActionRun => ({ exec: argv }); -const dispatch = (line: string): ActionRun => ({ dispatch: line }); - -export const ACTIONS: readonly ActionDef[] = [ - // -- launch (SUPER + Return / B / F) ----------------------------------------- - { id: "terminal", label: "Terminal", group: "launch", run: omarchy("omarchy-launch-terminal") }, - { id: "browser", label: "Browser", group: "launch", run: omarchy("omarchy-launch-browser") }, - { id: "files", label: "Files", group: "launch", run: omarchy("omarchy-launch-nautilus") }, - - // -- workspace ------------------------------------------------------------- - { id: "wsPrev", label: "Previous", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e-1" })') }, - { id: "wsNext", label: "Next", group: "workspace", run: dispatch('hl.dsp.focus({ workspace = "e+1" })') }, - { id: "layout", label: "Layout", group: "workspace", run: omarchy("omarchy-hyprland-workspace-layout-toggle") }, - - // -- toggle ---------------------------------------------------------------- - { id: "nightlight", label: "Nightlight", group: "toggle", run: omarchy("omarchy-toggle-nightlight") }, - - // -- capture --------------------------------------------------------------- - { id: "screenshot", label: "Screenshot", group: "capture", run: omarchy("omarchy-capture-screenshot") }, - - // -- media ----------------------------------------------------------------- - { id: "play", label: "Play / pause", group: "media", run: omarchy("omarchy-shell", "media", "playPause") }, - { id: "next", label: "Next track", group: "media", run: omarchy("omarchy-shell", "media", "next") }, - { id: "prev", label: "Previous track", group: "media", run: omarchy("omarchy-shell", "media", "previous") }, -]; - -const BY_ID = new Map(ACTIONS.map((action) => [action.id, action])); - -export function actionById(id: string): ActionDef | undefined { - return BY_ID.get(id as ActionId); -} - -export function actionsOf(group: ActionGroup): ActionDef[] { - return ACTIONS.filter((action) => action.group === group); -} - -/** The empty stage's launch chips, in reading order. */ -export const LAUNCHERS: readonly ActionId[] = ["terminal", "browser", "files"]; diff --git a/apps/pocket-remote/app.tsx b/apps/pocket-remote/app.tsx deleted file mode 100644 index 57086dbab..000000000 --- a/apps/pocket-remote/app.tsx +++ /dev/null @@ -1,116 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/app.tsx — Pocket Remote: an Omarchy companion for the -// iPod touch. Landscape: the workspace strip on top with the mode switch -// centred and the control centre at its end; under it either the stage (a -// live miniature of the desktop you can touch, over a fixed launch bar) or -// the deck (keyboard over trackpad); a ball on one edge that opens -// Omarchy's menu as a sheet. The daemon on the Omarchy -// machine mirrors Hyprland into a snapshot and runs exactly the commands -// the keyboard would. See README.md for the design. - -import { Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { createGesture } from "@pocketjs/framework/gesture"; -import { Ball, ballHandlers } from "./ball.tsx"; -import { Connect } from "./connect.tsx"; -import { ccHandlers, ControlCentre } from "./control.tsx"; -import { Deck, deckHandlers } from "./deck.tsx"; -import type { GestureHandlers } from "./handlers.ts"; -import { ballHit, STRIP } from "./layout.ts"; -import { MenuSheet, sheetHandlers } from "./menu-sheet.tsx"; -import { LaunchBar, popupHandlers, Stage, stageHandlers, TilePopup } from "./stage.tsx"; -import { connectSvc, createRemoteStore, type Svc } from "./store.ts"; -import { Strip, stripHandlers } from "./strip.tsx"; -import { themed } from "./theme.ts"; - -/** The last action's name, briefly, over the top of the stage. */ -function Toast(p: { store: ReturnType }) { - return ( - - - - {p.store.toast()} - - - - ); -} - -export default function PocketRemote() { - // The headless sim (tests/pocket-remote-sim.test.ts) has no svc channel; - // it may install a fake one before the bundle runs to see what the remote - // would send, and reads the store back to feed host lines in. - const store = createRemoteStore((globalThis as { __pocketRemoteSvc?: Svc }).__pocketRemoteSvc ?? connectSvc()); - (globalThis as { __pocketRemote?: unknown }).__pocketRemote = store; - - const connected = () => store.link() === "up"; - // One recogniser for the whole screen. A tap single-fires on one owner, so - // the layers cannot be separate recognisers stacked over each other; - // instead each contact is routed at its down edge to the surface under it - // — the sheet, the control centre or a popup while one is up, the ball, - // the strip, then the stage or the deck — and every later callback for - // that contact follows the same route. - const strip = stripHandlers(store); - const stage = stageHandlers(store); - const popup = popupHandlers(store); - const control = ccHandlers(store); - const ball = ballHandlers(store); - const sheet = sheetHandlers(store); - const deck = deckHandlers(store); - const routes = new Map(); - const pick = (x: number, y: number): GestureHandlers => { - if (store.sheet()) return sheet; - if (store.cc()) return control; - if (store.popup()) return popup; - // A tile's resize corner wins where the ball overlaps it: the corner is - // 18 px and fixed to its window, the ball is 44 px and can be dragged. - if (store.mode() === "stage" && ballHit(x, y, store.ball()) && !store.gripAt(x, y)) return ball; - if (y < STRIP.h) return strip; - return store.mode() === "stage" ? stage : deck; - }; - createGesture({ - tapSlop: 8, - panSlop: 8, - longPressSeconds: 0.35, - onDown: (c) => { - if (!connected()) return; - const route = pick(c.x, c.y); - routes.set(c.id, route); - route.onDown?.(c); - }, - // Routes are not cleared on up: onUp and onTap both describe one - // release, and contact ids are reused only by a later onDown. - onMove: (c) => routes.get(c.id)?.onMove?.(c), - onTap: (c) => routes.get(c.id)?.onTap?.(c), - onLongPress: (c) => routes.get(c.id)?.onLongPress?.(c), - onPanStart: (c) => routes.get(c.id)?.onPanStart?.(c), - onPanMove: (c) => routes.get(c.id)?.onPanMove?.(c), - onUp: (c) => routes.get(c.id)?.onUp?.(c), - onCancel: (c) => routes.get(c.id)?.onCancel?.(c), - }); - - return ( - - }> - - }> - - - - - - {/* The ball belongs to the stage: on the deck it would sit on the - trackpad, and the deck has SUPER for Omarchy's own menu. */} - - - - - - - - - - - - ); -} diff --git a/apps/pocket-remote/ball.tsx b/apps/pocket-remote/ball.tsx deleted file mode 100644 index 30741b436..000000000 --- a/apps/pocket-remote/ball.tsx +++ /dev/null @@ -1,75 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/ball.tsx — the menu's handle: a translucent ball that -// floats over everything and lives on a side edge. Tap it and Omarchy's menu -// opens; hold it and it comes along with the finger, and when let go it -// slides to the nearer edge and stays at that height. It fades while idle so -// what is under it stays legible. -// -// The mark is a glyph, not drawn rings: a stroked circle built from bordered -// Views is rasterised at the panel's logical size and looked soft on a 2x -// panel, while the glyph comes out of an atlas baked at the panel's own -// density. - -import { createEffect } from "solid-js"; -import { View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon } from "./icons.tsx"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -export function Ball(p: { store: RemoteStore }) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const lifted = p.store.ballDragging() || p.store.pressed() === "ball"; - jump(root, "opacity", lifted ? 1 : 0.66); - jump(root, "scale", p.store.ballDragging() ? 1.12 : 1); - }); - return ( - { - root = node; - p.store.bindBall(node); - themed("surfaceDark")(node); - }} - > - - - - ); -} - -export function ballHandlers(store: RemoteStore): GestureHandlers { - return { - onDown: () => store.pressDown("ball"), - onTap: () => { - store.pressRelease(); - store.openSheet(); - }, - onLongPress: (c) => { - store.ballGrab(c.x, c.y); - }, - onMove: (c) => { - if (store.ballDragging()) store.ballDragTo(c.x, c.y); - }, - onPanStart: (c) => { - // A drag without the hold still moves it: the ball is meant to get - // out of the way. - if (!store.ballDragging()) store.ballGrab(c.startX, c.startY); - store.ballDragTo(c.x, c.y); - }, - onPanMove: (c) => store.ballDragTo(c.x, c.y), - onUp: () => { - store.ballRelease(); - store.pressRelease(); - }, - onCancel: () => { - store.ballRelease(); - store.pressRelease(); - }, - }; -} diff --git a/apps/pocket-remote/connect.tsx b/apps/pocket-remote/connect.tsx deleted file mode 100644 index 889391f33..000000000 --- a/apps/pocket-remote/connect.tsx +++ /dev/null @@ -1,79 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/connect.tsx — what the remote shows before it has a -// desktop to mirror: looking for the daemon's beacon, then waiting for the -// laptop to approve this device (the daemon puts a dialog on the desktop), -// then nothing — the desk takes over. A pulse keeps the screen visibly alive -// during the wait, which on a WiFi handheld can take a few seconds. - -import { createEffect, createSignal, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { onFrame } from "@pocketjs/framework/lifecycle"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -export function Connect(p: { store: RemoteStore }) { - const [phase, setPhase] = createSignal(0); - let frames = 0; - onFrame(() => { - frames += 1; - if (frames % 2 === 0) setPhase((frames / 2) % 60); - }); - let ring: NodeMirror | null = null; - createEffect(() => { - if (!ring) return; - const t = phase() / 60; - // A ring that grows and fades, once a second. - jump(ring, "scale", 1 + t * 0.7); - jump(ring, "opacity", 1 - t); - }); - const status = () => { - switch (p.store.link()) { - case "off": - return "this host has no network channel"; - case "search": - return "looking for your Omarchy desktop…"; - case "pending": - return `approve this remote on ${p.store.hostName() || "your laptop"}`; - case "denied": - return `${p.store.hostName() || "the laptop"} declined this remote`; - default: - return ""; - } - }; - return ( - - { - ring = node; - themed("borderAccent")(node); - }} - /> - - - - Pocket Remote - - - - - {status()} - - - - - - a dialog is on the laptop screen - - - - - - an Omarchy companion · PocketJS - - - - ); -} diff --git a/apps/pocket-remote/control.tsx b/apps/pocket-remote/control.tsx deleted file mode 100644 index 2ad3d84c7..000000000 --- a/apps/pocket-remote/control.tsx +++ /dev/null @@ -1,297 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/control.tsx — the control centre: a card under its -// button at the strip's right end (no caret: a triangle this small cannot -// meet a rounded, bordered card without a seam). Wi-Fi, a screenshot, nightlight, -// what is playing with its transport, then brightness and volume as -// sliders. Levels follow the finger relatively — touching a slider never -// jumps the level to the finger — and a tap on a track nudges by a step. -// Opened by a tap it stays until a tap outside; opened by a hold it follows -// that finger down onto a slider and puts itself away after the release. - -import { createEffect, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { GUTTER, ICON_BOX, SPACE } from "./design.ts"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon } from "./icons.tsx"; -import { - CC, - CC_BUTTON, - CC_ROW_H, - CC_ICON_W, - CC_ICON_X, - CC_MEDIA, - CC_MEDIA_BTN_W, - CC_MEDIA_BTN_X, - CC_NIGHT, - CC_ROW_Y, - CC_SHOT, - CC_TRACK_H, - CC_TRACK_W, - CC_TRACK_X, - CC_VALUE_X, - CC_WIFI, - ccHit, - clamp01, - trackDelta, - trackFill, - within, -} from "./layout.ts"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -/** A name too long for its box, with an ellipsis rather than a hard cut. */ -function clip(text: string, max: number): string { - const chars = Array.from(text); - return chars.length <= max ? text : `${chars.slice(0, max - 1).join("")}…`; -} - -function Slider(p: { store: RemoteStore; row: 0 | 1 }) { - const level = () => (p.row === 0 ? p.store.bri() : p.store.vol()); - const hot = () => p.store.cc()?.row === p.row; - let fill: NodeMirror | null = null; - createEffect(() => { - if (fill) jump(fill, "width", trackFill(level())); - }); - const glyph = () => { - if (p.row === 0) return GLYPH.brightness; - if (p.store.mute() || p.store.vol() === 0) return GLYPH.volumeOff; - return p.store.vol() < 0.5 ? GLYPH.volumeMid : GLYPH.volume; - }; - return ( - - (hot() ? "accentTint" : "surface"))} - > - (p.row === 1 && p.store.mute() ? "dim" : "fg")} size="lg" /> - - - - { - fill = node; - themed("accentFill")(node); - jump(node, "width", trackFill(level())); - }} - /> - - - (hot() ? "textAccent" : "textDim"))}> - {`${Math.round(level() * 100)}`} - - - - ); -} - -export function ControlCentre(p: { store: RemoteStore }) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const t = p.store.ccT(); - jump(root, "translateY", Math.round((1 - t) * -10)); - jump(root, "opacity", t); - }); - const wifi = () => p.store.wifi(); - const media = () => p.store.media(); - const pressed = (id: string) => p.store.pressed() === id; - return ( - { - root = node; - }} - > - { - themed("surfaceDark")(node); - themed("borderMuted")(node); - }} - > - {/* wifi */} - (wifi().on ? "accentFill" : "surface"))} - > - - (wifi().on ? GLYPH.wifi : GLYPH.wifiOff)} tone={() => (wifi().on ? "onAccent" : "dim")} size="xl" /> - - - (wifi().on ? "textOnAccent" : "text"))}> - Wi-Fi - - - - (wifi().on ? "textOnAccent" : "textDim"))}> - {wifi().on ? clip(wifi().ssid, 12) || "not connected" : "off"} - - - - - {/* screenshot */} - - - - - {/* nightlight */} - - - - - {/* now playing */} - - - (media().st === "playing" ? "accent" : "dim")} size="xl" /> - - - - {media().st === "none" ? "Nothing playing" : media().title || "Untitled"} - - - - - {media().st === "none" ? "" : media().artist} - - - - - - - - (media().st === "playing" ? GLYPH.pause : GLYPH.play)} tone="fg" size="2xl" /> - - - - - - - - - - - - - - slide onto a slider · release to close - - - - - ); -} - -/** While the control centre is up (sticky): tiles and buttons answer taps, - * tracks drag relatively, a touch anywhere else puts it away. */ -export function ccHandlers(store: RemoteStore): GestureHandlers { - let down: ReturnType | "button" | "outside" = null; - const pressIdFor = (hit: ReturnType): string | null => { - if (!hit) return null; - if (hit.kind === "icon") return `ccicon:${hit.row}`; - if (hit.kind === "track" || hit.kind === "card" || hit.kind === "media") return null; - return `cc:${hit.kind}`; - }; - return { - onDown: (c) => { - if (within(c.x, c.y, CC_BUTTON)) { - down = "button"; - store.pressDown("cc"); - return; - } - const hit = ccHit(c.x, c.y); - if (!hit) { - down = "outside"; - store.closeCc(); - return; - } - down = hit; - store.pressDown(pressIdFor(hit)); - if (hit.kind === "track") store.ccGrabTrack(hit.row, c.x); - }, - onTap: (c) => { - const t = down; - store.pressRelease(); - if (t === "button") { - store.closeCc(); - return; - } - if (!t || t === "outside") return; - switch (t.kind) { - case "wifi": - store.wifiToggle(); - break; - case "shot": - store.act("screenshot"); - break; - case "night": - store.act("nightlight"); - break; - case "prev": - case "play": - case "next": - store.mediaOp(t.kind); - break; - case "icon": - if (t.row === 1) store.toggleMute(); - break; - case "track": { - // A tap on the track nudges by the keyboard's own step. - const level = t.row === 0 ? store.bri() : store.vol(); - const knob = CC.x + CC_TRACK_X + trackFill(level); - store.setLevel(t.row === 0 ? "bri" : "vol", level + (c.x > knob ? 0.05 : -0.05), true); - store.ccReleased(); - break; - } - default: - break; - } - }, - onPanStart: () => { - if (!down || down === "button" || down === "outside" || down.kind !== "track") store.pressDown(null); - }, - onPanMove: (c) => { - const cc = store.cc(); - if (!cc || cc.row === null || !down || down === "button" || down === "outside" || down.kind !== "track") return; - store.setLevel(cc.row === 0 ? "bri" : "vol", clamp01(cc.refLevel + trackDelta(c.x - cc.refX))); - }, - onUp: () => { - const cc = store.cc(); - if (cc && cc.row !== null && down && down !== "button" && down !== "outside" && down.kind === "track") store.ccReleased(); - store.pressRelease(); - }, - onCancel: () => { - store.pressRelease(); - }, - }; -} - -export { CC_MEDIA_BTN_W }; diff --git a/apps/pocket-remote/deck.tsx b/apps/pocket-remote/deck.tsx deleted file mode 100644 index 24c2a2fbe..000000000 --- a/apps/pocket-remote/deck.tsx +++ /dev/null @@ -1,518 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/deck.tsx — the deck: the laptop's C surface on the -// iPod. Five rows of keys, and under them the band a laptop uses the same -// way — Omarchy's menu key and the click button on the left rest, the -// trackpad in the middle, a d-pad cross on the right rest. -// -// Keys go straight to the desktop (wtype) as they are pressed; nothing is -// buffered on the device, so what the desktop shows is the truth. A pressed -// key rises and brightens; the hit regions tile the keyboard and correct for -// where a finger actually lands (keyboard-layout.ts). -// -// Chords two ways: sticky modifiers (tap ctrl, alt or super, then the key; -// it arms, paints itself, drops after one key) and hold-and-slide variants -// (hold a letter and ^X ⌥X fan out above it; hold a digit for its F-key). -// The modifiers reach the pointer too: ctrl then a click is a ctrl-click, -// and ctrl with the click key held is a ctrl-drag. -// -// The click key is the drag-select the pad could not model: hold it with one -// thumb and the laptop's left button stays down, so the other finger's -// travel on the pad drags a selection — a laptop's own two-handed gesture. - -import { createEffect, createSignal, Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon } from "./icons.tsx"; -import { - chipAt, - chipRects, - CLICK_KEY, - deckTargetAt, - DIRECTION_GLYPH, - type Direction4, - DPAD_KEYS, - keyboardKeys, - type KeyAction, - type KeyDef, - type KeyRect, - keyToLine, - MENU_KEY, - TRACKPAD, -} from "./keyboard-layout.ts"; -import { pointerGain, type Rect, SCROLL_GAIN, stagger } from "./layout.ts"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -// --------------------------------------------------------------------------- -// keyboard -// --------------------------------------------------------------------------- - -function Key(p: { store: RemoteStore; key: KeyRect }) { - const id = () => `key:${p.key.row}:${p.key.col}`; - const armed = () => "mod" in p.key.def.act && p.store.kbMods().includes(p.key.def.act.mod); - let root: NodeMirror | null = null; - let glow: NodeMirror | null = null; - createEffect(() => { - const depth = p.store.pressed() === id() ? p.store.pressT() : 0; - if (root) jump(root, "scale", 1 + 0.07 * depth); - if (glow) jump(glow, "opacity", depth); - }); - // Geometry through the mirror, not the style object: the layer switch - // changes a row's key count, so the slot Index reuses keeps its node and - // has to be re-placed. - createEffect(() => { - if (!root) return; - jump(root, "insetL", p.key.x); - jump(root, "insetT", p.key.y); - jump(root, "width", p.key.w); - jump(root, "height", p.key.h); - }); - return ( - { - root = node; - themed(() => (armed() ? "accentFill" : p.key.def.dark ? "surface" : "surfaceMuted"))(node); - }} - > - (armed() ? "onAccent" : "fg")} size="xl" />} - > - (armed() ? "textOnAccent" : "text"))} - > - {p.key.def.label} - - - { - glow = node; - jump(node, "opacity", 0); - }} - /> - - ); -} - -function Chip(p: { store: RemoteStore; rect: Rect; label: string; i: number; count: number; hot: boolean }) { - let root: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const t = stagger(p.store.flyT(), p.i, p.count, 0.3); - jump(root, "translateY", Math.round((1 - t) * 10)); - jump(root, "opacity", t); - jump(root, "scale", p.hot ? 1.08 : 1); - }); - return ( - { - root = node; - themed(() => (p.hot ? "accentFill" : "fgFill"))(node); - }} - > - - {p.label} - - - ); -} - -function Keyboard(p: { store: RemoteStore }) { - const keys = () => keyboardKeys(p.store.kbLayer()); - return ( - <> - {(key) => } - - {(f) => ( - - {(rect, i) => } - - )} - - - ); -} - -// --------------------------------------------------------------------------- -// the band: menu, click, trackpad, d-pad -// --------------------------------------------------------------------------- - -function MenuButton(p: { store: RemoteStore }) { - return ( - { - themed("surface")(node); - themed("borderMuted")(node); - }} - > - - - - ); -} - -/** - * The click button: a tap is a click, and holding it keeps the laptop's left - * button down so the other finger's travel on the pad drags a selection. - * - * Held, it fills with the accent rather than tinting: a rounded node with a - * coloured border is drawn by filling the whole rounded box with the BORDER - * colour and insetting the background over it (engine draw.rs), so a - * translucent fill inside a border shows the border's colour through it. - */ -function ClickButton(p: { store: RemoteStore }) { - const held = () => p.store.clickHeld(); - return ( - { - themed(() => (held() ? "accentFill" : "surface"))(node); - themed(() => (held() ? "accentFill" : "borderMuted"))(node); - }} - > - (held() ? "textOnAccent" : "text"))} - > - {held() ? "held" : "click"} - - - - ); -} - -function DpadCross(p: { store: RemoteStore }) { - const dirs: Direction4[] = ["u", "l", "r", "d"]; - return ( - - {(dir) => { - const r = DPAD_KEYS[dir()]; - const down = () => p.store.dpad()?.dir === dir(); - return ( - { - themed(() => (down() ? "accentFill" : "surface"))(node); - themed(() => (down() ? "accentFill" : "borderMuted"))(node); - }} - > - (down() ? "textOnAccent" : "text"))} - > - {DIRECTION_GLYPH[dir()]} - - - ); - }} - - ); -} - -function Trackpad(p: { store: RemoteStore }) { - const target = () => { - const c = p.store.focusClass(); - const mods = p.store.kbMods(); - const prefix = mods.length ? `${mods.join(" + ")} + ` : ""; - return c ? `${prefix}${c}` : `${prefix}no focused window`; - }; - const hint = () => - p.store.clickHeld() - ? "held · slide to select" - : p.store.pressed() === "pad:drag" - ? "dragging · lift to drop" - : "tap · two fingers scroll"; - const lit = () => p.store.clickHeld() || p.store.pressed() === "pad:drag"; - return ( - { - themed("surface")(node); - themed(() => (lit() ? "borderAccent" : "borderMuted"))(node); - }} - > - - - - - - {target()} - - - - - {hint()} - - - - ); -} - -export function Deck(p: { store: RemoteStore }) { - return ( - - - - - - - - - - ); -} - -// --------------------------------------------------------------------------- -// gestures -// --------------------------------------------------------------------------- - -export function deckHandlers(store: RemoteStore): GestureHandlers { - const [down, setDown] = createSignal(null); - let holding = false; - - // Trackpad contacts, by id. A second finger makes the gesture two-finger - // for the rest of its life: scroll while they move, the right button if - // they lift without moving. - const pads = new Map(); - let twoFinger = false; - let twoFingerMoved = false; - let leader: number | null = null; - let dragging = false; - /** Contacts that own one of the band's buttons. */ - let clicker: number | null = null; - let steering: { id: number; dir: Direction4 } | null = null; - let menuing: number | null = null; - - const send = (act: KeyAction) => { - const mods = store.kbMods(); - const line = keyToLine(act, mods); - if (line) { - if (line.t === "type") store.typeText(line.text); - else store.typeKey(line.k, line.mods ?? []); - } - if (mods.length) store.setKbMods([]); - }; - - const press = (key: KeyRect) => { - const act = key.def.act; - if ("layer" in act) { - store.setKbLayer(act.layer); - return; - } - if ("mod" in act) { - const mods = store.kbMods(); - store.setKbMods(mods.includes(act.mod) ? mods.filter((m) => m !== act.mod) : [...mods, act.mod]); - return; - } - send(act); - // One-shot shift: the upper layer drops back after a character. - if ("ch" in act && store.kbLayer() === "upper") store.setKbLayer("lower"); - }; - - return { - onDown: (c) => { - holding = false; - const target = deckTargetAt(store.kbLayer(), c.x, c.y); - setDown(null); - switch (target.kind) { - case "pad": - pads.set(c.id, { moved: false }); - if (pads.size >= 2) { - twoFinger = true; - twoFingerMoved = false; - } else { - leader = c.id; - } - store.pressDown(dragging ? "pad:drag" : "pad"); - return; - case "menu": - menuing = c.id; - store.pressDown("deck:menu"); - return; - case "click": - // The button goes down with the finger: a tap is a click, and a - // hold leaves it down for the other finger to drag with. - clicker = c.id; - store.pressDown("deck:click"); - store.dragButton(true); - return; - case "dpad": - steering = { id: c.id, dir: target.dir }; - store.pressDown(`dpad:${target.dir}`); - store.dpadDown(target.dir); - return; - case "key": - setDown(target.key); - store.pressDown(`key:${target.key.row}:${target.key.col}`); - return; - default: - store.pressDown(null); - } - }, - onMove: (c) => { - const pad = pads.get(c.id); - if (pad) { - if (c.fdx === 0 && c.fdy === 0) return; - if (Math.abs(c.dx) > 3 || Math.abs(c.dy) > 3) pad.moved = true; - if (twoFinger) { - if (c.id === leader) { - store.scroll(c.fdx * SCROLL_GAIN, c.fdy * SCROLL_GAIN); - twoFingerMoved = true; - } - return; - } - const gain = pointerGain(Math.hypot(c.fdx, c.fdy)); - store.pointer(c.fdx * gain, c.fdy * gain); - return; - } - if (!holding) return; - const key = down(); - const f = store.keyFly(); - if (!key || !f) return; - store.keyHover(chipAt(key, f.variants.length, c.x, c.y)); - }, - onTap: (c) => { - // The pad, the click key and the d-pad all answer on release. - if (pads.has(c.id) || clicker === c.id || steering?.id === c.id) return; - if (menuing === c.id) { - menuing = null; - store.pressRelease(); - store.openSheet(); - return; - } - const key = down(); - store.pressRelease(); - if (key) press(key); - setDown(null); - }, - onLongPress: (c) => { - if (clicker === c.id || steering?.id === c.id || menuing === c.id) return; - const pad = pads.get(c.id); - if (pad) { - if (twoFinger || pad.moved || dragging || store.clickHeld()) return; - dragging = true; - store.dragButton(true); - store.pressDown("pad:drag"); - return; - } - const key = down(); - if (!key || !key.def.variants) return; - holding = true; - store.pressDown(null); - store.openKeyFly({ key: { x: key.x, y: key.y, w: key.w, h: key.h }, variants: key.def.variants, hot: null }); - }, - onPanStart: (c) => { - if (pads.has(c.id) || holding || clicker === c.id || steering?.id === c.id) return; - store.pressDown(null); - setDown(null); - menuing = null; - }, - onUp: (c) => { - if (clicker === c.id) { - clicker = null; - store.dragButton(false); - store.pressRelease(); - return; - } - if (steering?.id === c.id) { - steering = null; - store.dpadUp(); - store.pressRelease(); - return; - } - const pad = pads.get(c.id); - if (pad) { - pads.delete(c.id); - if (pads.size === 0) { - if (twoFinger) { - if (!twoFingerMoved) store.click("r"); - twoFinger = false; - } else if (dragging) { - store.dragButton(false); - } else if (!pad.moved && c.frames < 20 && !store.clickHeld()) { - // With the click key's button already down, a tap on the pad - // would be a second press rather than a click. - store.click("l"); - } - dragging = false; - leader = null; - store.pressRelease(); - } else if (c.id === leader) { - leader = pads.keys().next().value ?? null; - } - return; - } - if (holding) { - const chosen = store.keyRelease(); - const key = down(); - if (chosen) store.typeKey(chosen.k, chosen.mods); - else if (key && "ch" in key.def.act) send(key.def.act); // release on the key: plain - holding = false; - setDown(null); - } - store.pressRelease(); - }, - onCancel: (c) => { - if (clicker === c.id) { - clicker = null; - store.dragButton(false); - } - if (steering?.id === c.id) { - steering = null; - store.dpadUp(); - } - menuing = null; - if (pads.delete(c.id) && pads.size === 0) { - if (dragging) store.dragButton(false); - dragging = false; - twoFinger = false; - leader = null; - } - if (holding) store.closeKeyFly(); - holding = false; - store.pressRelease(); - setDown(null); - }, - }; -} - -export type { KeyDef }; diff --git a/apps/pocket-remote/design.ts b/apps/pocket-remote/design.ts deleted file mode 100644 index a1f80361b..000000000 --- a/apps/pocket-remote/design.ts +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/design.ts — the remote's design tokens and the row -// arithmetic every list is built from. One place, because the paddings had -// drifted: each surface had picked its own icon inset, label offset and -// highlight bleed, and side by side they read as sloppy. -// -// A class string reaches the device as one baked literal, so a token cannot -// be interpolated into a class — radii and sizes therefore live here as -// NUMBERS for `style` objects, and the literals that must spell a radius out -// live in ui.tsx next to the primitive that owns them. Anything measured in -// pixels belongs in this file; anything drawn belongs there. - -/** Spacing scale. Everything that separates two things uses one of these. */ -export const SPACE = { xs: 2, sm: 4, md: 6, lg: 8, xl: 12, xxl: 16 } as const; - -/** - * Corner radii, by the thing they belong to. The literals in ui.tsx spell - * these out; the numbers are here so geometry can reason about them (the - * sheet's header squares off its own bottom corners, for instance). - */ -export const RADIUS = { card: 14, popup: 10, row: 8, control: 7, chip: 9, tab: 6, tile: 4 } as const; - -/** Row heights, by the surface. A list row is 40; a menu popup's is 36. */ -export const ROW_H = { list: 40, popup: 36, bar: 32, slider: 36 } as const; - -/** The box every row's leading glyph is centred in. */ -export const ICON_BOX = 24; -/** A row's leading and trailing inset. */ -export const GUTTER = 10; -/** Gap between the icon box and the label. */ -export const ICON_GAP = SPACE.lg; -/** The highlight behind a pressed or hovered row, inset from its edges. */ -export const HIGHLIGHT_INSET = SPACE.sm; -/** A hairline between rows, inset from both ends. */ -export const HAIRLINE_INSET = GUTTER; -/** The smallest a finger is asked to hit. */ -export const TARGET_MIN = 28; - -export interface Box { - x: number; - y: number; - w: number; - h: number; -} - -export interface RowMetrics { - h: number; - /** Leading glyph box. */ - icon: Box; - /** The label, vertically centred by `items-center` on this box. */ - label: Box; - /** Trailing glyph box (a chevron, a tick), or null without one. */ - trailing: Box | null; - /** The pressed/hot highlight. */ - highlight: Box; - /** The hairline above the row (rows after the first draw it). */ - hairline: Box; -} - -/** - * One row's anatomy in a container `width` wide: leading icon, label, an - * optional trailing glyph, the highlight and the hairline — all from the - * same tokens, so two lists cannot disagree about their paddings. - */ -export function rowMetrics(width: number, h: number, trailing = false): RowMetrics { - const iconY = Math.round((h - ICON_BOX) / 2); - const labelX = GUTTER + ICON_BOX + ICON_GAP; - const trailingX = width - GUTTER - ICON_BOX; - return { - h, - icon: { x: GUTTER, y: iconY, w: ICON_BOX, h: ICON_BOX }, - label: { x: labelX, y: 0, w: (trailing ? trailingX - SPACE.md : width - GUTTER) - labelX, h }, - trailing: trailing ? { x: trailingX, y: iconY, w: ICON_BOX, h: ICON_BOX } : null, - highlight: { x: HIGHLIGHT_INSET, y: HIGHLIGHT_INSET / 2, w: width - 2 * HIGHLIGHT_INSET, h: h - HIGHLIGHT_INSET }, - hairline: { x: HAIRLINE_INSET, y: 0, w: width - 2 * HAIRLINE_INSET, h: 1 }, - }; -} diff --git a/apps/pocket-remote/fonts.json b/apps/pocket-remote/fonts.json deleted file mode 100644 index 96b3c4012..000000000 --- a/apps/pocket-remote/fonts.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "fallback": ["fonts/SymbolsNerdFont-subset.otf"] -} diff --git a/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt b/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt deleted file mode 100644 index d163912b3..000000000 --- a/apps/pocket-remote/fonts/LICENSE-NerdFonts.txt +++ /dev/null @@ -1,126 +0,0 @@ -# Nerd Fonts Licensing - -There are various sources used under various licenses: - -* Nerd Fonts source fonts, patched fonts, and folders with explict OFL SIL files are licensed under SIL OPEN FONT LICENSE Version 1.1 (see below). -* Nerd Fonts original source code files (such as `.sh`, `.py`, `font-patcher` and others) are licensed under the MIT License (MIT) (see below). -* Many other licenses are present in this project for even more detailed breakdown see: [License Audit](https://github.com/ryanoasis/nerd-fonts/blob/-/license-audit.md). - -## Source files not in folders containing an explicit license are using the MIT License (MIT) - -The MIT License (MIT) - -Copyright (c) 2014 Ryan L McIntyre - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - -## Various Fonts, Patched Fonts, SVGs, Glyph Fonts, and any files in a folder with explicit SIL OFL 1.1 License - -Copyright (c) 2014, Ryan L McIntyre (https://ryanlmcintyre.com). - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf b/apps/pocket-remote/fonts/SymbolsNerdFont-subset.otf deleted file mode 100644 index 5a36ec3b3617cb960800ce57fd7f0f8fa0933892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69972 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's codepoint from nerd-fonts glyphnames.json. - -export const GLYPH = { - /** U+F05A9 */ - wifi: "󰖩", - /** U+F05AA */ - wifiOff: "󰖪", - /** U+F057E */ - volume: "󰕾", - /** U+F0580 */ - volumeMid: "󰖀", - /** U+F0581 */ - volumeOff: "󰖁", - /** U+F00DF */ - brightness: "󰃟", - /** U+F075A */ - music: "󰝚", - /** U+F040A */ - play: "󰐊", - /** U+F03E4 */ - pause: "󰏤", - /** U+F04AD */ - next: "󰒭", - /** U+F04AE */ - prev: "󰒮", - /** U+F0100 */ - camera: "󰄀", - /** U+F030C */ - keyboard: "󰌌", - /** U+F056E */ - stage: "󰕮", - /** U+F0322 */ - deck: "󰌢", - /** U+F062E */ - tune: "󰘮", - /** U+F0156 */ - close: "󰅖", - /** U+F012C */ - check: "󰄬", - /** U+F0142 */ - chevronRight: "󰅂", - /** U+F0141 */ - chevronLeft: "󰅁", - /** U+F004D */ - back: "󰁍", - /** U+F0293 */ - fullscreen: "󰊓", - /** U+F0294 */ - fullscreenExit: "󰊔", - /** U+F05B2 */ - float: "󰖲", - /** U+F0570 */ - tile: "󰕰", - /** U+F0594 */ - night: "󰖔", - /** U+F03CC */ - launch: "󰏌", - /** U+F018D */ - terminal: "󰆍", - /** U+F059F */ - browser: "󰖟", - /** U+F024B */ - files: "󰉋", - /** U+F06A9 */ - robot: "󰚩", - /** U+F06B0 */ - update: "󰚰", - /** U+F0765 */ - dot: "󰝥", - /** U+F07F8 */ - trackpad: "󰟸", - /** U+F035C */ - menu: "󰍜", - /** U+F003B */ - apps: "󰀻", - /** U+F0041 */ - arrows: "󰁁", - /** U+F01C0 */ - cursor: "󰇀", -} as const; - -export type GlyphName = keyof typeof GLYPH; diff --git a/apps/pocket-remote/handlers.ts b/apps/pocket-remote/handlers.ts deleted file mode 100644 index cf7f94338..000000000 --- a/apps/pocket-remote/handlers.ts +++ /dev/null @@ -1,14 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/handlers.ts — the shape every surface implements. One -// recogniser covers the screen (app.tsx); each contact is routed at its down -// edge to the surface under it and every later callback for that contact -// follows the same route, so a sheet cannot steal a finger that began on -// the stage and a finger that began on the sheet cannot leak through it. - -import type { GestureContact } from "@pocketjs/framework/gesture"; - -export type GestureHandlers = { - [K in "onDown" | "onMove" | "onTap" | "onLongPress" | "onPanStart" | "onPanMove" | "onUp" | "onCancel"]?: ( - c: GestureContact, - ) => void; -}; diff --git a/apps/pocket-remote/host/hypr.ts b/apps/pocket-remote/host/hypr.ts deleted file mode 100644 index 98cc9ed7b..000000000 --- a/apps/pocket-remote/host/hypr.ts +++ /dev/null @@ -1,307 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/host/hypr.ts — Hyprland over its two Unix sockets: -// requests (`j/clients`, `dispatch ...`) on .socket.sock, the event stream -// on .socket2.sock. Plus the pure reduction from Hyprland's JSON to the -// remote's snapshot, which is what the tests exercise. - -import { connect, type Socket } from "node:net"; -import { readdirSync } from "node:fs"; -import { join } from "node:path"; -import { - clipTitle, - type HostState, - type Layout, - type WinInfo, - WINDOWS_MAX, - type WsInfo, -} from "../protocol.ts"; - -// --------------------------------------------------------------------------- -// Hyprland JSON shapes (the fields the daemon reads) -// --------------------------------------------------------------------------- - -export interface HyprMonitor { - id: number; - name: string; - width: number; - height: number; - scale: number; - x: number; - y: number; - focused: boolean; - activeWorkspace: { id: number; name: string }; - specialWorkspace?: { id: number; name: string }; -} - -export interface HyprWorkspace { - id: number; - name: string; - monitor: string; - monitorID?: number; - windows: number; - tiledLayout?: string; -} - -export interface HyprClient { - address: string; - mapped: boolean; - hidden: boolean; - at: [number, number]; - size: [number, number]; - workspace: { id: number; name: string }; - floating: boolean; - monitor: number; - class: string; - title: string; - initialClass: string; - pinned: boolean; - fullscreen: number; - focusHistoryID: number; -} - -export interface HyprActiveWindow { - address?: string; -} - -/** - * Reduce Hyprland's state to the remote's snapshot: the focused monitor's - * geometry in logical pixels, its active workspace, every ordinary workspace, - * and the windows — most recently focused first, clipped to WINDOWS_MAX so - * the line stays under the device's poll cap. - */ -/** - * A title as a person would read it: without the program's own name tacked - * on the end. Browsers and editors append " - Chromium", " — Zed", "- NVIM"; - * the tile already says which program it is. - */ -export function cleanTitle(title: string, windowClass: string): string { - let out = title.trim(); - const name = windowClass.trim(); - if (!name) return out; - const tail = name.includes(".") ? name.slice(name.lastIndexOf(".") + 1) : name; - for (const candidate of [name, tail]) { - if (!candidate) continue; - const pattern = new RegExp(`\\s*[-—–|]\\s*${candidate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}\\s*$`, "i"); - out = out.replace(pattern, ""); - } - return out.trim(); -} - -export function buildState( - monitors: HyprMonitor[], - workspaces: HyprWorkspace[], - clients: HyprClient[], - active: HyprActiveWindow | null, -): HostState { - const monitor = monitors.find((m) => m.focused) ?? monitors[0]; - const scale = monitor && monitor.scale > 0 ? monitor.scale : 1; - const monX = monitor?.x ?? 0; - const monY = monitor?.y ?? 0; - const mon = monitor - ? { w: Math.round(monitor.width / scale), h: Math.round(monitor.height / scale), x: monX, y: monY } - : { w: 1280, h: 800, x: 0, y: 0 }; - const activeWs = monitor?.activeWorkspace.id ?? 1; - const special = monitor?.specialWorkspace && monitor.specialWorkspace.id !== 0; - - const ws: WsInfo[] = workspaces - .filter((w) => w.id > 0) - .sort((a, b) => a.id - b.id) - .map((w) => ({ id: w.id, n: w.windows })); - - const layoutName = workspaces.find((w) => w.id === activeWs)?.tiledLayout; - const layout: Layout = layoutName === "scrolling" ? "scrolling" : "dwindle"; - - const win: WinInfo[] = clients - .filter((c) => c.mapped && !c.hidden && c.workspace.id > 0) - .sort((a, b) => a.focusHistoryID - b.focusHistoryID) - .slice(0, WINDOWS_MAX) - .map((c) => { - const windowClass = c.class || c.initialClass || "?"; - const info: WinInfo = { - a: c.address, - c: windowClass, - ti: clipTitle(cleanTitle(c.title || "", windowClass)), - ws: c.workspace.id, - x: Math.round(c.at[0] - monX), - y: Math.round(c.at[1] - monY), - w: Math.round(c.size[0]), - h: Math.round(c.size[1]), - }; - if (c.floating) info.f = 1; - if (c.fullscreen === 1 || c.fullscreen === 2) info.fs = c.fullscreen; - if (c.pinned) info.p = 1; - return info; - }); - - const state: HostState = { - t: "state", - mon, - ws, - active: activeWs, - focus: active?.address ?? null, - win, - layout, - }; - if (special) state.special = 1; - return state; -} - -// --------------------------------------------------------------------------- -// sockets -// --------------------------------------------------------------------------- - -/** Locate the running instance: $HYPRLAND_INSTANCE_SIGNATURE, else the one - * directory under $XDG_RUNTIME_DIR/hypr (a headless daemon has no session - * environment of its own). */ -export function hyprDirectory(env: NodeJS.ProcessEnv = process.env): string { - const runtime = env.XDG_RUNTIME_DIR ?? `/run/user/${process.getuid?.() ?? 1000}`; - const base = join(runtime, "hypr"); - const signature = env.HYPRLAND_INSTANCE_SIGNATURE; - if (signature) return join(base, signature); - const entries = readdirSync(base).filter((entry) => !entry.startsWith(".")); - if (entries.length === 0) throw new Error(`no Hyprland instance under ${base}`); - // Signatures end in __; the newest start time is the live one. - entries.sort((a, b) => Number(b.split("_")[1] ?? 0) - Number(a.split("_")[1] ?? 0)); - return join(base, entries[0]!); -} - -/** One request on .socket.sock; Hyprland answers and closes. */ -export function hyprRequest(directory: string, command: string, timeoutMs = 2000): Promise { - return new Promise((resolve, reject) => { - const chunks: Buffer[] = []; - const socket = connect(join(directory, ".socket.sock")); - const timer = setTimeout(() => { - socket.destroy(); - reject(new Error(`hyprctl ${command}: timeout`)); - }, timeoutMs); - socket.on("connect", () => socket.write(command)); - socket.on("data", (chunk: Buffer) => chunks.push(chunk)); - socket.on("error", (error) => { - clearTimeout(timer); - reject(error); - }); - socket.on("close", () => { - clearTimeout(timer); - resolve(Buffer.concat(chunks).toString("utf8")); - }); - }); -} - -export async function hyprJson(directory: string, command: string): Promise { - const text = await hyprRequest(directory, `j/${command}`); - return JSON.parse(text) as T; -} - -/** Run one dispatcher given as a Lua expression (`hl.dsp...`): the request - * socket evaluates `hl.dispatch()` and answers `ok`. */ -export async function hyprDispatch(directory: string, lua: string): Promise { - return hyprRequest(directory, `dispatch ${lua}`); -} - -/** Several dispatchers in one round trip, in order, as one Lua chunk. */ -export async function hyprBatch(directory: string, luaDispatchers: string[]): Promise { - return hyprRequest(directory, `eval ${luaDispatchers.map((d) => `hl.dispatch(${d})`).join(" ")}`); -} - -/** Lua for a window target by address (validated: `0x` + hex only). */ -export function luaWindow(address: string): string | null { - return /^0x[0-9a-f]+$/.test(address) ? `"address:${address}"` : null; -} - -/** Lua for a workspace target: an id, or a relative step `e+1`/`e-1`. */ -export function luaWorkspace(n: number, rel = false): string | null { - if (!Number.isInteger(n)) return null; - if (rel) return n === 0 ? null : `"e${n > 0 ? "+" : "-"}${Math.abs(n)}"`; - return n >= 1 && n <= 10 ? `"${n}"` : null; -} - -export async function snapshot(directory: string): Promise { - const [monitors, workspaces, clients, active] = await Promise.all([ - hyprJson(directory, "monitors"), - hyprJson(directory, "workspaces"), - hyprJson(directory, "clients"), - hyprJson(directory, "activewindow"), - ]); - return buildState(monitors, workspaces, clients, active && active.address ? active : null); -} - -/** Event names on .socket2.sock that change what the remote shows. */ -export const STATE_EVENTS = new Set([ - "workspace", - "workspacev2", - "focusedmon", - "focusedmonv2", - "activewindow", - "activewindowv2", - "fullscreen", - "openwindow", - "closewindow", - "movewindow", - "movewindowv2", - "changefloatingmode", - "createworkspace", - "createworkspacev2", - "destroyworkspace", - "destroyworkspacev2", - "activespecial", - "activespecialv2", - "windowtitle", - "windowtitlev2", - "pin", - "configreloaded", - "monitoradded", - "monitorremoved", -]); - -/** Parse one `EVENT>>DATA` line. */ -export function parseEvent(line: string): { name: string; data: string } | null { - const at = line.indexOf(">>"); - if (at < 0) return null; - return { name: line.slice(0, at), data: line.slice(at + 2) }; -} - -/** - * Subscribe to the event stream. `onEvent` fires per parsed line; the - * connection is re-established after a drop with a short backoff so a - * Hyprland restart does not orphan the daemon. - */ -export function watchEvents( - directory: string, - onEvent: (event: { name: string; data: string }) => void, - onStatus: (message: string) => void = () => {}, -): () => void { - let socket: Socket | null = null; - let stopped = false; - let pending = ""; - const open = () => { - if (stopped) return; - socket = connect(join(directory, ".socket2.sock")); - socket.on("connect", () => onStatus("events connected")); - socket.on("data", (chunk: Buffer) => { - pending += chunk.toString("utf8"); - let at: number; - while ((at = pending.indexOf("\n")) >= 0) { - const line = pending.slice(0, at); - pending = pending.slice(at + 1); - const event = parseEvent(line); - if (event) onEvent(event); - } - }); - const retry = () => { - if (stopped) return; - socket = null; - onStatus("events dropped, retrying"); - setTimeout(open, 1000); - }; - socket.on("error", retry); - socket.on("close", () => { - if (socket) retry(); - }); - }; - open(); - return () => { - stopped = true; - socket?.destroy(); - socket = null; - }; -} diff --git a/apps/pocket-remote/host/menu-source.ts b/apps/pocket-remote/host/menu-source.ts deleted file mode 100644 index c12d3edac..000000000 --- a/apps/pocket-remote/host/menu-source.ts +++ /dev/null @@ -1,160 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/host/menu-source.ts — Omarchy's menu definition, read -// the way Omarchy reads it. The menu is a JSONC object keyed by dotted ids -// (/usr/share/omarchy/default/omarchy/omarchy-menu.jsonc, extended by -// ~/.config/omarchy/extensions/omarchy-menu.jsonc); the dots define the -// tree, `action` makes a row an action, `target` a link, `provider` a -// runtime-listed submenu, anything else a submenu. `when` and `checked` are -// bash conditions the shell evaluates at open time. -// -// Two readers share this file: the daemon, which runs actions by id and -// evaluates the conditions, and `bun tools/pocket-remote.ts menu`, which -// bakes the tree into the device as apps/pocket-remote/menu.ts. Pure: no -// filesystem, so tests run it bare. - -export type MenuKind = "action" | "menu" | "link" | "provider"; - -export interface MenuEntry { - id: string; - /** "root" for a top-level row. */ - parent: string; - kind: MenuKind; - /** The icon glyph as written (a Nerd Font symbol, an emoji, or ""). */ - icon: string; - /** Font family the icon needs when it is not the menu font ("omarchy" - * for Omarchy's private logo font). */ - iconFont: string; - label: string; - /** Header shown when the submenu is open; defaults to label. */ - title: string; - /** Link rows: the submenu id they open. */ - target: string; - action: string; - provider: string; - when: string; - checked: string; -} - -/** The raw JSONC row, as Omarchy writes it. */ -export interface RawMenuRow { - icon?: string; - iconFont?: string; - label?: string; - title?: string; - target?: string; - action?: string; - provider?: string; - when?: string; - checked?: string; - aliases?: string[]; - description?: string; -} - -/** - * JSONC to JSON: comments and trailing commas go, strings are left alone - * (the menu's URLs carry `//` inside string literals). - */ -export function stripJsonc(text: string): string { - // Two string-aware passes: comments first, then the commas they may have - // been hiding in front of a closing bracket. - const withoutComments = scan(text, (source, i) => { - if (source[i] === "/" && source[i + 1] === "/") { - let j = i; - while (j < source.length && source[j] !== "\n") j += 1; - return { skipTo: j, emit: "" }; - } - if (source[i] === "/" && source[i + 1] === "*") { - const end = source.indexOf("*/", i + 2); - return { skipTo: end < 0 ? source.length : end + 2, emit: "" }; - } - return null; - }); - return scan(withoutComments, (source, i) => { - if (source[i] !== ",") return null; - let j = i + 1; - while (j < source.length && /\s/.test(source[j]!)) j += 1; - return source[j] === "}" || source[j] === "]" ? { skipTo: i + 1, emit: "" } : null; - }); -} - -/** Walk `text` outside of string literals; `rule` may replace a span. */ -function scan(text: string, rule: (source: string, i: number) => { skipTo: number; emit: string } | null): string { - let out = ""; - let i = 0; - const n = text.length; - while (i < n) { - const ch = text[i]!; - if (ch === '"') { - let j = i + 1; - while (j < n && text[j] !== '"') { - if (text[j] === "\\") j += 1; - j += 1; - } - out += text.slice(i, j + 1); - i = j + 1; - continue; - } - const hit = rule(text, i); - if (hit) { - out += hit.emit; - i = hit.skipTo; - continue; - } - out += ch; - i += 1; - } - return out; -} - -export function parseMenuJsonc(text: string): Record { - const parsed = JSON.parse(stripJsonc(text)) as unknown; - if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("omarchy-menu.jsonc: not an object"); - return parsed as Record; -} - -export function parentOf(id: string): string { - const dot = id.lastIndexOf("."); - return dot < 0 ? "root" : id.slice(0, dot); -} - -/** - * Layers in order (Omarchy's default file, then the user's extension): a row - * that reuses an id overrides the fields it names and keeps the rest; a new - * id is appended. Kind is inferred as the shell infers it. - */ -export function normalizeMenu(layers: readonly Record[]): MenuEntry[] { - const merged = new Map(); - for (const layer of layers) { - for (const [id, row] of Object.entries(layer)) { - if (!row || typeof row !== "object") continue; - merged.set(id, { ...(merged.get(id) ?? {}), ...row }); - } - } - const entries: MenuEntry[] = []; - for (const [id, row] of merged) { - const action = typeof row.action === "string" ? row.action : ""; - const target = typeof row.target === "string" ? row.target : ""; - const provider = typeof row.provider === "string" ? row.provider : ""; - const kind: MenuKind = action ? "action" : target ? "link" : provider ? "provider" : "menu"; - entries.push({ - id, - parent: parentOf(id), - kind, - icon: typeof row.icon === "string" ? row.icon : "", - iconFont: typeof row.iconFont === "string" ? row.iconFont : "", - label: typeof row.label === "string" ? row.label : id, - title: typeof row.title === "string" ? row.title : "", - target, - action, - provider, - when: typeof row.when === "string" ? row.when : "", - checked: typeof row.checked === "string" ? row.checked : "", - }); - } - return entries; -} - -/** Children of a row in source order — the order the shell shows them. */ -export function childrenOf(entries: readonly MenuEntry[], parent: string): MenuEntry[] { - return entries.filter((entry) => entry.parent === parent); -} diff --git a/apps/pocket-remote/host/omarchy.ts b/apps/pocket-remote/host/omarchy.ts deleted file mode 100644 index 57b6b5f04..000000000 --- a/apps/pocket-remote/host/omarchy.ts +++ /dev/null @@ -1,678 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/host/omarchy.ts — the Omarchy side of the daemon: run -// one whitelisted action, read and set the audio and display levels, read -// the theme palette, type text. Everything here shells out to the same -// commands Omarchy binds to its keys, so the OSD, the sink resolution and -// the theme machinery are Omarchy's own. - -import { type ChildProcess, execFile, spawn } from "node:child_process"; -import { existsSync, readdirSync, readFileSync } from "node:fs"; -import { homedir } from "node:os"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { promisify } from "node:util"; -import type { ActionDef } from "../actions.ts"; -import type { HostCc, ThemeColors } from "../protocol.ts"; -import { hyprDispatch } from "./hypr.ts"; -import { type MenuEntry, normalizeMenu, parseMenuJsonc } from "./menu-source.ts"; - -const execFileAsync = promisify(execFile); - -export interface Log { - (message: string): void; -} - -/** Fire-and-forget: the desktop command's output goes to the journal. */ -export function runDetached(argv: string[], log: Log): void { - const [command, ...args] = argv; - if (!command) return; - try { - const child = spawn(command, args, { stdio: "ignore", detached: true }); - child.on("error", (error) => log(`${command}: ${error.message}`)); - child.unref(); - } catch (error) { - log(`${command}: ${(error as Error).message}`); - } -} - -export async function runAction(action: ActionDef, hyprDir: string, log: Log): Promise { - if ("dispatch" in action.run) { - const reply = await hyprDispatch(hyprDir, action.run.dispatch); - if (reply.trim() !== "ok") log(`dispatch ${action.run.dispatch}: ${reply.trim().split("\n")[0]}`); - return; - } - runDetached(action.run.exec, log); -} - -// --------------------------------------------------------------------------- -// levels -// --------------------------------------------------------------------------- - -async function capture(command: string, args: string[]): Promise { - const { stdout } = await execFileAsync(command, args, { timeout: 3000 }); - return stdout; -} - -/** The sink Omarchy's own volume keys move (resolves through any DSP sink). */ -async function outputSink(): Promise { - try { - const sink = (await capture("omarchy-audio-output-sink", [])).trim(); - if (sink) return sink; - } catch { - // fall through - } - return "@DEFAULT_AUDIO_SINK@"; -} - -/** Parse `pactl get-sink-volume` (first channel's percentage). */ -export function parsePactlVolume(text: string): number | null { - const match = text.match(/(\d+)%/); - return match ? Number(match[1]) / 100 : null; -} - -/** Parse `brightnessctl -m`: device,class,current,percent%,max. */ -export function parseBrightnessctl(text: string): number | null { - const first = text.trim().split("\n")[0] ?? ""; - const fields = first.split(","); - const percent = fields[3]; - if (!percent) return null; - const value = Number(percent.replace("%", "")); - return Number.isFinite(value) ? value / 100 : null; -} - -export interface Levels { - vol: number; - mute: boolean; - bri: number; -} - -export async function readLevels(): Promise { - const sink = await outputSink(); - const [volumeText, muteText, brightnessText] = await Promise.all([ - capture("pactl", ["get-sink-volume", sink]).catch(() => ""), - capture("pactl", ["get-sink-mute", sink]).catch(() => ""), - capture("brightnessctl", ["-m"]).catch(() => ""), - ]); - return { - vol: parsePactlVolume(volumeText) ?? 0, - mute: /yes/.test(muteText), - bri: parseBrightnessctl(brightnessText) ?? 0, - }; -} - -/** - * Set the output volume to an absolute level through Omarchy's own script, - * which only knows relative steps: read, diff, step. That keeps the OSD and - * the DSP-sink resolution Omarchy's. - */ -export async function setVolume(level: number, log: Log): Promise { - const target = Math.round(Math.max(0, Math.min(1, level)) * 100); - const sink = await outputSink(); - const current = parsePactlVolume(await capture("pactl", ["get-sink-volume", sink]).catch(() => "")); - const from = current === null ? target : Math.round(current * 100); - const delta = target - from; - if (delta === 0) { - // Still show the OSD, so the laptop acknowledges the touch. - runDetached(["omarchy-audio-output-volume", "+0"], log); - return; - } - runDetached(["omarchy-audio-output-volume", delta > 0 ? `+${delta}` : `${delta}`], log); -} - -export function toggleMute(log: Log): void { - runDetached(["omarchy-audio-output-volume", "mute-toggle"], log); -} - -export function setBrightness(level: number, log: Log): void { - const target = Math.round(Math.max(0.01, Math.min(1, level)) * 100); - runDetached(["omarchy-brightness-display", `${target}%`], log); -} - -// --------------------------------------------------------------------------- -// theme -// --------------------------------------------------------------------------- - -const STATE_DIR = join(homedir(), ".local/state/omarchy/current"); - -export function currentThemeName(): string { - try { - return readFileSync(join(STATE_DIR, "theme.name"), "utf8").trim() || "tokyo-night"; - } catch { - return "tokyo-night"; - } -} - -/** Where a theme's files live: the user's own themes first, then Omarchy's. */ -export function themeDirectory(name: string, env: NodeJS.ProcessEnv = process.env): string | null { - const candidates = [ - join(homedir(), ".config/omarchy/themes", name), - join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "themes", name), - ]; - return candidates.find((dir) => existsSync(join(dir, "colors.toml"))) ?? null; -} - -export function themeList(env: NodeJS.ProcessEnv = process.env): string[] { - const names = new Set(); - for (const dir of [join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "themes"), join(homedir(), ".config/omarchy/themes")]) { - try { - for (const entry of readdirSync(dir)) { - if (existsSync(join(dir, entry, "colors.toml"))) names.add(entry); - } - } catch { - // missing directory - } - } - return [...names].sort(); -} - -/** Parse Omarchy's colors.toml: flat `key = "#rrggbb"` lines. */ -export function parseColorsToml(text: string): Record { - const out: Record = {}; - for (const raw of text.split("\n")) { - const line = raw.replace(/#[^"]*$/, (m) => (raw.includes('"') ? m : "")).trim(); - const match = raw.match(/^\s*([A-Za-z0-9_]+)\s*=\s*"?(#[0-9a-fA-F]{6})/); - if (match) out[match[1]!] = match[2]!.toLowerCase(); - void line; - } - return out; -} - -/** The remote's palette from a theme's colours, with Tokyo Night fallbacks - * for keys a theme leaves out. */ -export function paletteFrom(colors: Record): ThemeColors { - const pick = (keys: string[], fallback: string): string => { - for (const key of keys) if (colors[key]) return colors[key]!; - return fallback; - }; - return { - bg: pick(["background", "bg"], "#1a1b26"), - bgDark: pick(["dark_background", "dark_bg", "darker_background", "background"], "#13141c"), - fg: pick(["foreground", "fg"], "#a9b1d6"), - fgDim: pick(["dark_foreground", "dark_fg", "color8"], "#565f89"), - accent: pick(["accent", "blue", "color4"], "#7aa2f7"), - red: pick(["red", "color1"], "#f7768e"), - green: pick(["green", "color2"], "#9ece6a"), - yellow: pick(["yellow", "color3"], "#e0af68"), - blue: pick(["blue", "color4"], "#7aa2f7"), - magenta: pick(["magenta", "purple", "color5"], "#bb9af7"), - cyan: pick(["cyan", "color6"], "#449dab"), - muted: pick(["color8", "dark_foreground"], "#414868"), - }; -} - -export function readTheme(): { name: string; colors: ThemeColors; list: string[] } { - const name = currentThemeName(); - const dir = themeDirectory(name); - let colors: Record = {}; - if (dir) { - try { - colors = parseColorsToml(readFileSync(join(dir, "colors.toml"), "utf8")); - } catch { - colors = {}; - } - } - return { name, colors: paletteFrom(colors), list: themeList() }; -} - -export function themeStateDirectory(): string { - return STATE_DIR; -} - -export function setThemeByName(name: string, list: string[], log: Log): boolean { - if (!list.includes(name)) { - log(`theme ${name}: not installed`); - return false; - } - runDetached(["omarchy-theme-set", name], log); - return true; -} - -// --------------------------------------------------------------------------- -// typing -// --------------------------------------------------------------------------- - -/** Keysyms the remote may send: xkb names wtype understands. Letters, - * digits and a few punctuation names carry modifiers (ctrl+c, alt+.). */ -export const ALLOWED_KEYS: ReadonlySet = new Set([ - "Return", "BackSpace", "Tab", "ISO_Left_Tab", "Escape", "space", "Delete", "Insert", - "Left", "Right", "Up", "Down", "Home", "End", "Page_Up", "Page_Down", - ...Array.from({ length: 12 }, (_, i) => `F${i + 1}`), - ..."abcdefghijklmnopqrstuvwxyz0123456789".split(""), - "minus", "equal", "bracketleft", "bracketright", "semicolon", "apostrophe", "grave", - "backslash", "comma", "period", "slash", -]); - -const MODIFIERS: ReadonlySet = new Set(["ctrl", "alt", "shift", "super"]); - -/** wtype argv for one key with modifiers held around it: press mods, key, - * release mods in reverse. Null when the key or a modifier is not allowed. */ -export function wtypeArgs(key: string, mods: readonly string[] = []): string[] | null { - if (!ALLOWED_KEYS.has(key)) return null; - if (mods.some((m) => !MODIFIERS.has(m))) return null; - const unique = [...new Set(mods)]; - return [ - ...unique.flatMap((m) => ["-M", m]), - "-k", - key, - ...unique.slice().reverse().flatMap((m) => ["-m", m]), - ]; -} - -export function typeText(text: string, log: Log): void { - // wtype types its argument literally; cap it so a runaway line cannot - // flood the focused window. - const clipped = Array.from(text).slice(0, 256).join(""); - if (clipped.length === 0) return; - runDetached(["wtype", "--", clipped], log); -} - -/** - * Hold modifiers for `ms`, so a pointer click can happen inside them: a - * virtual pointer carries no modifier state of its own, and wtype's own - * process is the only thing on the machine that can keep one down (`-M` - * presses, `-s` sleeps, `-m` releases). Returns false for a modifier that - * is not allowed. - */ -export function holdModifiers(mods: readonly string[], ms: number, log: Log): boolean { - const unique = [...new Set(mods)]; - if (unique.length === 0) return false; - if (unique.some((m) => !MODIFIERS.has(m))) return false; - const hold = Math.max(50, Math.min(2000, Math.round(ms))); - runDetached( - [ - "wtype", - ...unique.flatMap((m) => ["-M", m]), - "-s", - String(hold), - ...unique.slice().reverse().flatMap((m) => ["-m", m]), - ], - log, - ); - return true; -} - -export function pressKey(key: string, log: Log, mods: readonly string[] = []): boolean { - const args = wtypeArgs(key, mods); - if (!args) return false; - runDetached(["wtype", ...args], log); - return true; -} - -// --------------------------------------------------------------------------- -// network (the control centre's Wi-Fi tile) -// --------------------------------------------------------------------------- - -/** Parse `omarchy-network-status`: `type\tssid\tsignal\tfreq`. */ -export function parseNetworkStatus(text: string): { type: string; ssid: string; sig: number } { - const [type = "", ssid = "", signal = ""] = text.trim().split("\n")[0]?.split("\t") ?? []; - const sig = Number(signal); - return { type: type || "disconnected", ssid, sig: Number.isFinite(sig) ? Math.max(0, Math.min(100, Math.round(sig))) : 0 }; -} - -/** Parse `nmcli -t radio wifi`: enabled / disabled. */ -export function parseRadio(text: string): boolean { - return /enabled/i.test(text); -} - -export async function readWifi(): Promise { - const [radio, status] = await Promise.all([ - capture("nmcli", ["-t", "radio", "wifi"]).catch(() => ""), - capture("omarchy-network-status", []).catch(() => ""), - ]); - const net = parseNetworkStatus(status); - const on = parseRadio(radio); - return { - on: on ? 1 : 0, - ssid: on && net.type === "wifi" ? net.ssid : net.type === "ethernet" ? "ethernet" : "", - sig: net.type === "wifi" ? net.sig : 0, - }; -} - -export function setWifi(on: boolean, log: Log): void { - runDetached(["nmcli", "radio", "wifi", on ? "on" : "off"], log); -} - -// --------------------------------------------------------------------------- -// now playing (MPRIS over the session bus, through busctl) -// --------------------------------------------------------------------------- - -/** MPRIS bus names out of `busctl --user --json=short list`. */ -export function parseMprisNames(json: string): string[] { - try { - const rows = JSON.parse(json) as { name?: unknown }[]; - return rows - .map((row) => (typeof row.name === "string" ? row.name : "")) - .filter((name) => name.startsWith("org.mpris.MediaPlayer2.")); - } catch { - return []; - } -} - -/** `busctl --json=short` encodes a variant as `{ type, data }`. */ -function variantData(value: unknown): unknown { - return value && typeof value === "object" && "data" in (value as Record) - ? (value as { data: unknown }).data - : value; -} - -/** Playback status and track out of `GetAll org.mpris.MediaPlayer2.Player`. */ -export function parseMprisPlayer(json: string): HostCc["media"] | null { - try { - const parsed = JSON.parse(json) as { data?: unknown[] }; - const props = variantData(parsed.data?.[0]) as Record | undefined; - if (!props || typeof props !== "object") return null; - const status = String(variantData(props.PlaybackStatus) ?? ""); - const metadata = (variantData(props.Metadata) ?? {}) as Record; - const title = variantData(metadata["xesam:title"]); - const artist = variantData(metadata["xesam:artist"]); - return { - st: status === "Playing" ? "playing" : status === "Paused" ? "paused" : "none", - title: typeof title === "string" ? title.slice(0, 60) : "", - artist: Array.isArray(artist) ? artist.filter((a): a is string => typeof a === "string").join(", ").slice(0, 60) : "", - }; - } catch { - return null; - } -} - -const NOTHING_PLAYING: HostCc["media"] = { st: "none", title: "", artist: "" }; - -/** The playing player, else the first paused one, else nothing. */ -export async function readMedia(): Promise { - const names = parseMprisNames(await capture("busctl", ["--user", "--json=short", "list"]).catch(() => "[]")); - let paused: HostCc["media"] | null = null; - for (const name of names) { - const player = parseMprisPlayer( - await capture("busctl", [ - "--user", "--json=short", "call", name, "/org/mpris/MediaPlayer2", - "org.freedesktop.DBus.Properties", "GetAll", "s", "org.mpris.MediaPlayer2.Player", - ]).catch(() => ""), - ); - if (!player) continue; - if (player.st === "playing") return player; - if (player.st === "paused" && !paused) paused = player; - } - return paused ?? NOTHING_PLAYING; -} - -// --------------------------------------------------------------------------- -// Omarchy's menu -// --------------------------------------------------------------------------- - -const MENU_ID = /^[a-z0-9][a-z0-9._-]*$/i; - -/** The menu as this machine defines it: Omarchy's default file, then the - * user's extension. */ -export function loadMenu(env: NodeJS.ProcessEnv = process.env): MenuEntry[] { - const layers = [ - join(env.OMARCHY_PATH ?? "/usr/share/omarchy", "default/omarchy/omarchy-menu.jsonc"), - join(homedir(), ".config/omarchy/extensions/omarchy-menu.jsonc"), - ] - .filter((path) => existsSync(path)) - .map((path) => parseMenuJsonc(readFileSync(path, "utf8"))); - return normalizeMenu(layers); -} - -/** Run one row the way the shell runs it: an action's command under bash, - * a provider or link summoned on the desktop. False for an unknown id. */ -export function runMenuEntry(entries: readonly MenuEntry[], id: string, log: Log): boolean { - if (!MENU_ID.test(id)) return false; - const entry = entries.find((candidate) => candidate.id === id); - if (!entry) return false; - if (entry.kind === "action" && entry.action) { - runDetached(["bash", "-lc", entry.action], log); - return true; - } - runDetached(["omarchy-menu", "summon", entry.kind === "link" && entry.target ? entry.target : entry.id], log); - return true; -} - -/** - * Evaluate every `when` and `checked` in one bash run, the way the shell - * does at open time. Returns the rows hidden by a failing `when` and the - * rows whose `checked` holds. - */ -export async function evaluateMenuConditions(entries: readonly MenuEntry[]): Promise<{ hide: string[]; check: string[] }> { - const lines: string[] = []; - for (const entry of entries) { - if (!MENU_ID.test(entry.id)) continue; - if (entry.when) lines.push(`if ( ${entry.when} ) >/dev/null 2>&1; then :; else printf 'w %s\\n' '${entry.id}'; fi`); - if (entry.checked) lines.push(`if ( ${entry.checked} ) >/dev/null 2>&1; then printf 'c %s\\n' '${entry.id}'; fi`); - } - if (lines.length === 0) return { hide: [], check: [] }; - const { stdout } = await execFileAsync("bash", ["-lc", lines.join("\n")], { timeout: 30_000, maxBuffer: 1 << 20 }); - const hide: string[] = []; - const check: string[] = []; - for (const line of stdout.split("\n")) { - const [kind, id] = line.split(" "); - if (!id || !MENU_ID.test(id)) continue; - if (kind === "w") hide.push(id); - else if (kind === "c") check.push(id); - } - return { hide: hide.sort(), check: check.sort() }; -} - -// --------------------------------------------------------------------------- -// applications (the menu's `apps` provider, which the shell lists at open) -// --------------------------------------------------------------------------- - -export interface AppEntry { - /** Desktop entry id, without `.desktop`. */ - i: string; - n: string; -} - -/** The `[Desktop Entry]` group's plain keys; later groups (actions) ignored. */ -export function parseDesktopEntry(text: string): Record { - const out: Record = {}; - let inEntry = false; - for (const raw of text.split("\n")) { - const line = raw.trim(); - if (line.startsWith("[")) { - inEntry = line === "[Desktop Entry]"; - continue; - } - if (!inEntry || !line || line.startsWith("#")) continue; - const at = line.indexOf("="); - if (at <= 0) continue; - const key = line.slice(0, at).trim(); - // Localised keys (Name[de]) are skipped: the remote shows one language. - if (key.includes("[")) continue; - out[key] = line.slice(at + 1).trim(); - } - return out; -} - -/** Whether an entry belongs in a launcher, and what to call it. */ -export function launchableName(entry: Record): string | null { - if ((entry.Type ?? "Application") !== "Application") return null; - if (entry.NoDisplay === "true" || entry.Hidden === "true") return null; - const name = entry.Name?.trim(); - return name ? name.slice(0, 40) : null; -} - -/** XDG application directories, in precedence order (the user's own first). */ -export function applicationDirectories(env: NodeJS.ProcessEnv = process.env): string[] { - const home = env.XDG_DATA_HOME ?? join(homedir(), ".local/share"); - const dirs = (env.XDG_DATA_DIRS ?? "/usr/local/share:/usr/share").split(":").filter(Boolean); - const seen = new Set(); - return [home, ...dirs, "/var/lib/flatpak/exports/share"] - .map((dir) => join(dir, "applications")) - .filter((dir) => (seen.has(dir) ? false : (seen.add(dir), true))); -} - -export interface AppIndex { - /** By display name, for the device's list. */ - apps: AppEntry[]; - /** Window class (lowercased) -> desktop entry id, for "open same". */ - byClass: Map; -} - -/** - * Every launchable application on the machine, plus an index from window - * class to entry so a window can be opened again. First directory to carry - * an id wins, which is XDG's own rule; the class index takes - * StartupWMClass first, then the entry id, then the executable's name — - * which is how a launcher recognises its own windows. - */ -export function readAppIndex(env: NodeJS.ProcessEnv = process.env): AppIndex { - const byId = new Map(); - const byClass = new Map(); - const claim = (key: string, id: string): void => { - const k = key.trim().toLowerCase(); - if (k && !byClass.has(k)) byClass.set(k, id); - }; - for (const dir of applicationDirectories(env)) { - let files: string[]; - try { - files = readdirSync(dir); - } catch { - continue; - } - for (const file of files) { - if (!file.endsWith(".desktop")) continue; - const id = file.slice(0, -".desktop".length); - if (byId.has(id)) continue; - let entry: Record; - try { - entry = parseDesktopEntry(readFileSync(join(dir, file), "utf8")); - } catch { - continue; - } - const name = launchableName(entry); - if (!name) continue; - byId.set(id, name); - if (entry.StartupWMClass) claim(entry.StartupWMClass, id); - claim(id, id); - const exec = entry.Exec?.split(/\s+/)[0]; - if (exec) claim(exec.slice(exec.lastIndexOf("/") + 1), id); - } - } - return { - apps: [...byId].map(([i, n]) => ({ i, n })).sort((a, b) => a.n.localeCompare(b.n)), - byClass, - }; -} - -/** The entry that would open another window of this class, if any. The - * class's last reverse-DNS component is tried too (org.gnome.Nautilus). */ -export function appForClass(index: AppIndex, windowClass: string): string | null { - const raw = windowClass.trim().toLowerCase(); - if (!raw) return null; - const tail = raw.includes(".") ? raw.slice(raw.lastIndexOf(".") + 1) : raw; - return index.byClass.get(raw) ?? index.byClass.get(tail) ?? null; -} - -const APP_ID = /^[A-Za-z0-9][A-Za-z0-9._+-]*$/; - -/** Launch one entry the way Omarchy launches applications: through uwsm, so - * the window lands in the session's own scope. */ -export function launchApp(id: string, log: Log): boolean { - if (!APP_ID.test(id)) return false; - runDetached(["uwsm-app", "--", `${id}.desktop`], log); - return true; -} - -// --------------------------------------------------------------------------- -// the pointer (host/pointer/pocket-pointer.c) -// --------------------------------------------------------------------------- - -const BUTTON_CODES = { l: 272, r: 273, m: 274 } as const; - -/** One long-lived virtual pointer, fed one command per line. Started on - * first use, restarted after it dies, silent about it beyond the log. */ -export class Pointer { - private child: ChildProcess | null = null; - private ready = false; - private queue: string[] = []; - private failedAt = 0; - private scrolling = false; - private scrollEnd: ReturnType | null = null; - private readonly binary: string; - private readonly log: Log; - - // No parameter properties: Node runs this file with type stripping, which - // erases annotations but cannot rewrite constructor(private x) syntax. - constructor(binary?: string, log?: Log) { - this.binary = binary ?? join(dirname(fileURLToPath(import.meta.url)), "pointer/pocket-pointer"); - this.log = log ?? (() => {}); - } - - available(): boolean { - return existsSync(this.binary); - } - - private start(): void { - if (this.child || Date.now() < this.failedAt) return; - if (!this.available()) { - if (!this.failedAt) this.log(`pointer: ${this.binary} is missing — redeploy with tools/pocket-remote.ts deploy-host`); - this.failedAt = Date.now() + 30_000; - return; - } - const child = spawn(this.binary, [], { stdio: ["pipe", "pipe", "pipe"] }); - this.child = child; - child.stdout?.on("data", (chunk: Buffer) => { - if (chunk.toString().includes("ready") && !this.ready) { - this.ready = true; - this.log("pointer: virtual pointer ready"); - for (const line of this.queue.splice(0)) child.stdin?.write(line); - } - }); - child.stderr?.on("data", (chunk: Buffer) => this.log(`pointer: ${chunk.toString().trim()}`)); - const gone = () => { - if (this.child === child) { - this.child = null; - this.ready = false; - this.failedAt = Date.now() + 2000; - } - }; - child.on("exit", (code) => { - if (code !== 0) this.log(`pointer: exited ${code}`); - gone(); - }); - child.on("error", (error) => { - this.log(`pointer: ${error.message}`); - gone(); - }); - } - - private write(line: string): void { - this.start(); - if (this.child && this.ready) this.child.stdin?.write(line); - else if (this.queue.length < 64) this.queue.push(line); - } - - move(dx: number, dy: number): void { - if (!Number.isFinite(dx) || !Number.isFinite(dy)) return; - this.write(`m ${dx.toFixed(2)} ${dy.toFixed(2)}\n`); - } - - button(b: "l" | "r" | "m", down: boolean): void { - this.write(`b ${BUTTON_CODES[b]} ${down ? 1 : 0}\n`); - } - - click(b: "l" | "r" | "m"): void { - this.button(b, true); - this.button(b, false); - } - - /** Finger scrolling: a stream of deltas, ended a moment after the last. */ - scroll(dx: number, dy: number): void { - if (!Number.isFinite(dx) || !Number.isFinite(dy)) return; - this.scrolling = true; - this.write(`s ${dy.toFixed(2)} ${dx.toFixed(2)}\n`); - if (this.scrollEnd) clearTimeout(this.scrollEnd); - this.scrollEnd = setTimeout(() => { - this.scrollEnd = null; - if (this.scrolling) { - this.scrolling = false; - this.write("e\n"); - } - }, 120); - } - - stop(): void { - this.child?.kill(); - this.child = null; - } -} diff --git a/apps/pocket-remote/host/pocket-remote.service b/apps/pocket-remote/host/pocket-remote.service deleted file mode 100644 index dfe28aa37..000000000 --- a/apps/pocket-remote/host/pocket-remote.service +++ /dev/null @@ -1,23 +0,0 @@ -# Pocket Remote daemon — a systemd user unit for the Omarchy machine. -# Installed by `bun tools/pocket-remote.ts deploy-host ` into -# ~/.config/systemd/user/, next to the daemon copy in ~/.local/share/pocket-remote. -# -# The user manager already carries the graphical session's environment under -# Omarchy (uwsm imports WAYLAND_DISPLAY, HYPRLAND_INSTANCE_SIGNATURE, OMARCHY_PATH -# and the mise shims into it), which is what hyprland-dialog, wtype and the -# omarchy-* scripts need. - -[Unit] -Description=Pocket Remote — Omarchy companion daemon -After=graphical-session.target -PartOf=graphical-session.target - -[Service] -Type=simple -ExecStart=%h/.local/share/mise/shims/node %h/.local/share/pocket-remote/host/serve.ts -Restart=on-failure -RestartSec=2 -Environment=NODE_NO_WARNINGS=1 - -[Install] -WantedBy=graphical-session.target diff --git a/apps/pocket-remote/host/pointer/pocket-pointer.c b/apps/pocket-remote/host/pointer/pocket-pointer.c deleted file mode 100644 index 267b59cf2..000000000 --- a/apps/pocket-remote/host/pointer/pocket-pointer.c +++ /dev/null @@ -1,114 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// pocket-pointer.c — a virtual pointer for the Pocket Remote daemon. -// -// The remote's trackpad needs a mouse the compositor believes in: relative -// motion, buttons, finger scrolling. Hyprland has no dispatcher for a click -// and nothing in Omarchy's repositories drives a pointer from a script, but -// Hyprland speaks zwlr_virtual_pointer_v1, so this is a client of that -// protocol and nothing else — no uinput, no root, no daemon of its own. -// -// It reads one command per line on stdin and forwards it as pointer events: -// -// m relative motion, logical px (fractions allowed) -// b <0|1> button release / press (272 left, 273 right, 274 middle) -// s finger scroll, in px of travel -// e the scroll gesture ended (axis_stop) -// -// It prints "ready" once the pointer exists, then says nothing. The daemon -// (host/serve.ts) keeps one running for as long as it lives and restarts it -// if it dies. Built on the Omarchy machine at deploy time by -// `bun tools/pocket-remote.ts deploy-host` with wayland-scanner and cc. - -#include -#include -#include -#include -#include -#include - -#include "wlr-virtual-pointer-unstable-v1-client-protocol.h" - -static struct zwlr_virtual_pointer_manager_v1 *manager; -static struct wl_seat *seat; - -static void registry_global(void *data, struct wl_registry *registry, uint32_t name, const char *interface, - uint32_t version) { - (void)data; - if (strcmp(interface, zwlr_virtual_pointer_manager_v1_interface.name) == 0) { - manager = wl_registry_bind(registry, name, &zwlr_virtual_pointer_manager_v1_interface, version < 2 ? version : 2); - } else if (strcmp(interface, wl_seat_interface.name) == 0 && !seat) { - seat = wl_registry_bind(registry, name, &wl_seat_interface, 1); - } -} - -static void registry_global_remove(void *data, struct wl_registry *registry, uint32_t name) { - (void)data; - (void)registry; - (void)name; -} - -static const struct wl_registry_listener registry_listener = {registry_global, registry_global_remove}; - -static uint32_t now_ms(void) { - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (uint32_t)(ts.tv_sec * 1000 + ts.tv_nsec / 1000000); -} - -int main(void) { - struct wl_display *display = wl_display_connect(NULL); - if (!display) { - fprintf(stderr, "pocket-pointer: no Wayland display (is WAYLAND_DISPLAY set?)\n"); - return 2; - } - struct wl_registry *registry = wl_display_get_registry(display); - wl_registry_add_listener(registry, ®istry_listener, NULL); - wl_display_roundtrip(display); - if (!manager) { - fprintf(stderr, "pocket-pointer: the compositor does not offer zwlr_virtual_pointer_manager_v1\n"); - return 3; - } - struct zwlr_virtual_pointer_v1 *pointer = zwlr_virtual_pointer_manager_v1_create_virtual_pointer(manager, seat); - wl_display_roundtrip(display); - printf("ready\n"); - fflush(stdout); - - char line[256]; - unsigned commands = 0; - while (fgets(line, sizeof line, stdin)) { - double a = 0; - double b = 0; - unsigned code = 0; - unsigned state = 0; - uint32_t t = now_ms(); - if (sscanf(line, "m %lf %lf", &a, &b) == 2) { - zwlr_virtual_pointer_v1_motion(pointer, t, wl_fixed_from_double(a), wl_fixed_from_double(b)); - zwlr_virtual_pointer_v1_frame(pointer); - } else if (sscanf(line, "b %u %u", &code, &state) == 2) { - zwlr_virtual_pointer_v1_button(pointer, t, code, - state ? WL_POINTER_BUTTON_STATE_PRESSED : WL_POINTER_BUTTON_STATE_RELEASED); - zwlr_virtual_pointer_v1_frame(pointer); - } else if (sscanf(line, "s %lf %lf", &a, &b) == 2) { - zwlr_virtual_pointer_v1_axis_source(pointer, WL_POINTER_AXIS_SOURCE_FINGER); - if (a != 0) zwlr_virtual_pointer_v1_axis(pointer, t, WL_POINTER_AXIS_VERTICAL_SCROLL, wl_fixed_from_double(a)); - if (b != 0) zwlr_virtual_pointer_v1_axis(pointer, t, WL_POINTER_AXIS_HORIZONTAL_SCROLL, wl_fixed_from_double(b)); - zwlr_virtual_pointer_v1_frame(pointer); - } else if (line[0] == 'e') { - zwlr_virtual_pointer_v1_axis_source(pointer, WL_POINTER_AXIS_SOURCE_FINGER); - zwlr_virtual_pointer_v1_axis_stop(pointer, t, WL_POINTER_AXIS_VERTICAL_SCROLL); - zwlr_virtual_pointer_v1_axis_stop(pointer, t, WL_POINTER_AXIS_HORIZONTAL_SCROLL); - zwlr_virtual_pointer_v1_frame(pointer); - } else { - continue; - } - wl_display_flush(display); - // The pointer never receives events, but the seat does; drain the - // socket now and then so the compositor's side cannot fill up. - if ((++commands & 63) == 0) wl_display_roundtrip(display); - } - - zwlr_virtual_pointer_v1_destroy(pointer); - wl_display_flush(display); - wl_display_disconnect(display); - return 0; -} diff --git a/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml b/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml deleted file mode 100644 index ea243e7c8..000000000 --- a/apps/pocket-remote/host/pointer/wlr-virtual-pointer-unstable-v1.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - Copyright © 2019 Josef Gajdusek - - Permission is hereby granted, free of charge, to any person obtaining a - copy of this software and associated documentation files (the "Software"), - to deal in the Software without restriction, including without limitation - the rights to use, copy, modify, merge, publish, distribute, sublicense, - and/or sell copies of the Software, and to permit persons to whom the - Software is furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice (including the next - paragraph) shall be included in all copies or substantial portions of the - Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - DEALINGS IN THE SOFTWARE. - - - - - This protocol allows clients to emulate a physical pointer device. The - requests are mostly mirror opposites of those specified in wl_pointer. - - - - - - - - - - The pointer has moved by a relative amount to the previous request. - - Values are in the global compositor space. - - - - - - - - - The pointer has moved in an absolute coordinate frame. - - Value of x can range from 0 to x_extent, value of y can range from 0 - to y_extent. - - - - - - - - - - - A button was pressed or released. - - - - - - - - - Scroll and other axis requests. - - - - - - - - - Indicates the set of events that logically belong together. - - - - - - Source information for scroll and other axis. - - - - - - - Stop notification for scroll and other axes. - - - - - - - - Discrete step information for scroll and other axes. - - This event allows the client to extend data normally sent using the axis - event with discrete value. - - - - - - - - - - - - - - - This object allows clients to create individual virtual pointer objects. - - - - - Creates a new virtual pointer. The optional seat is a suggestion to the - compositor. - - - - - - - - - - - - - Creates a new virtual pointer. The seat and the output arguments are - optional. If the seat argument is set, the compositor should assign the - input device to the requested seat. If the output argument is set, the - compositor should map the input device to the requested output. - - - - - - - diff --git a/apps/pocket-remote/host/serve.ts b/apps/pocket-remote/host/serve.ts deleted file mode 100644 index 48e002464..000000000 --- a/apps/pocket-remote/host/serve.ts +++ /dev/null @@ -1,838 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/host/serve.ts — the Omarchy-side daemon for Pocket -// Remote. Runs on the Omarchy machine as a user service: -// -// node serve.ts [--port 8622] [--beacon] [--no-usb] [--name ] -// -// Node >= 23.6 (native type stripping); Omarchy installs Node through mise, -// so `~/.local/share/mise/shims/node` is the interpreter the unit uses. -// -// What it does: listens for PKNT connections from the remote, mirrors -// Hyprland (one snapshot per change, debounced) plus the volume, brightness -// and theme to every connected device, and runs the commands the device asks -// for — never a command string off the wire, only ids from actions.ts. -// -// USB: when the device is plugged into this machine, usbmuxd (the usbmuxd -// package) lists it and iproxy can forward a host port to the device's -// listener (hosts/iphone2g/svcwire.c, port 8624). The daemon polls for -// devices, forwards a port per device and connects to it — the wire is the -// same, only who dials is reversed, and a device on the cable is trusted: -// physical possession is the pairing. -// -// Trust: the LAN is not a trust boundary. A device that has not been seen -// before is put on hold and a dialog appears on the desktop (hyprland-dialog) -// asking whether to allow it; the answer is remembered by address in -// ~/.local/state/pocket-remote/allowed.json. Until allowed, a device sees the -// mirror but its commands are dropped. - -import { createServer, Socket } from "node:net"; -import { createSocket } from "node:dgram"; -import { execFile, spawn, type ChildProcess } from "node:child_process"; -import { existsSync, mkdirSync, readFileSync, watch, writeFileSync } from "node:fs"; -import { homedir, hostname } from "node:os"; -import { join } from "node:path"; -import { actionById } from "../actions.ts"; -import { - type ClientLine, - type HostLine, - type HostState, - parseLines, - REMOTE_APP, - REMOTE_PROTO, -} from "../protocol.ts"; -import { hyprBatch, hyprDirectory, hyprDispatch, luaWindow, luaWorkspace, snapshot, STATE_EVENTS, watchEvents } from "./hypr.ts"; -import { - type AppEntry, - evaluateMenuConditions, - launchApp, - loadMenu, - Pointer, - pressKey, - appForClass, - type AppIndex, - holdModifiers, - readAppIndex, - readLevels, - readMedia, - readTheme, - readWifi, - runAction, - runMenuEntry, - setBrightness, - setVolume, - setWifi, - themeStateDirectory, - toggleMute, - typeText, -} from "./omarchy.ts"; -import { - encodeBeacon, - encodeCtrl, - encodeFrame, - encodeHelloAck, - FrameParser, - parseHello, - WIRE_BEACON_PORT, - WIRE_MSG, - WIRE_PORT, -} from "./wire.ts"; - -// --------------------------------------------------------------------------- -// options -// --------------------------------------------------------------------------- - -interface Options { - port: number; - beacon: boolean; - /** Look for devices on this machine's USB through usbmuxd. */ - usb: boolean; - name: string; - /** Skip the approval dialog (every device allowed) — for tests only. */ - trustAll: boolean; -} - -function parseOptions(argv: string[]): Options { - const options: Options = { port: WIRE_PORT, beacon: false, usb: true, name: hostname(), trustAll: false }; - for (let i = 0; i < argv.length; i += 1) { - const arg = argv[i]!; - if (arg === "--port") options.port = Number(argv[++i]); - else if (arg === "--beacon") options.beacon = true; - else if (arg === "--no-usb") options.usb = false; - else if (arg === "--name") options.name = argv[++i] ?? options.name; - else if (arg === "--trust-all") options.trustAll = true; - else if (arg === "--help" || arg === "-h") { - console.log("node serve.ts [--port 8622] [--beacon] [--no-usb] [--name ]"); - process.exit(0); - } - } - return options; -} - -const options = parseOptions(process.argv.slice(2)); -const log = (message: string) => console.log(`[remote] ${new Date().toISOString().slice(11, 19)} ${message}`); - -// --------------------------------------------------------------------------- -// allow list -// --------------------------------------------------------------------------- - -const STATE_HOME = join(homedir(), ".local/state/pocket-remote"); -const ALLOWED_PATH = join(STATE_HOME, "allowed.json"); - -function readAllowed(): Set { - try { - const parsed = JSON.parse(readFileSync(ALLOWED_PATH, "utf8")) as unknown; - return new Set(Array.isArray(parsed) ? parsed.filter((v): v is string => typeof v === "string") : []); - } catch { - return new Set(); - } -} - -function writeAllowed(allowed: Set): void { - mkdirSync(STATE_HOME, { recursive: true }); - writeFileSync(ALLOWED_PATH, JSON.stringify([...allowed].sort(), null, 2) + "\n"); -} - -const allowed = readAllowed(); -const denied = new Set(); -let dialogOpen: Promise | null = null; - -type Verdict = "allow" | "deny" | "timeout"; - -/** Ask on the desktop. One dialog at a time; a second device waits. A - * dialog nobody answers is not a refusal: the device stays pending and is - * asked again when it next connects. */ -function askApproval(address: string, device: string): Promise { - const run = () => - new Promise((resolve) => { - execFile( - "hyprland-dialog", - [ - "--title", - "Pocket Remote", - "--apptitle", - "A remote wants to control this desktop", - "--text", - `${device} at ${address} is asking to connect as a Pocket Remote. Allow it to switch workspaces, launch apps, change volume and type here?`, - "--buttons", - "Allow;Deny", - ], - { timeout: 120_000 }, - (error, stdout) => { - if (error) { - log(`dialog: ${error.message}`); - resolve("timeout"); - return; - } - const answer = stdout.trim().toLowerCase(); - resolve(answer.startsWith("allow") ? "allow" : answer.startsWith("deny") ? "deny" : "timeout"); - }, - ); - }); - const next: Promise = (dialogOpen ?? Promise.resolve("timeout")).then(run, run); - dialogOpen = next; - next.finally(() => { - if (dialogOpen === next) dialogOpen = null; - }); - return next; -} - -// --------------------------------------------------------------------------- -// connections -// --------------------------------------------------------------------------- - -interface Conn { - socket: Socket; - address: string; - parser: FrameParser; - hello: Uint8Array | null; - device: string; - auth: "ok" | "pending" | "denied"; - lastSeen: number; - /** Arrived over the cable (usbmuxd): allowed without a dialog. */ - trusted: boolean; -} - -const conns = new Set(); - -function sendLine(conn: Conn, line: HostLine): void { - try { - conn.socket.write(encodeCtrl(JSON.stringify(line))); - } catch (error) { - log(`send to ${conn.address}: ${(error as Error).message}`); - } -} - -function broadcast(line: HostLine): void { - for (const conn of conns) if (conn.hello === null) sendLine(conn, line); -} - -// --------------------------------------------------------------------------- -// mirror -// --------------------------------------------------------------------------- - -const hyprDir = hyprDirectory(); -let lastState: HostState | null = null; -let lastLevels: { vol: number; mute: boolean; bri: number } | null = null; -let theme = readTheme(); -/** The focused monitor's origin in layout px: a placement off the wire is - * monitor-relative and Hyprland wants layout coordinates. */ -let monitorOrigin = { x: 0, y: 0 }; -let lastCc: HostLine | null = null; -let lastMenu: { hide: string[]; check: string[] } | null = null; -let apps: AppIndex = { apps: [], byClass: new Map() }; -let menuEntries = loadMenu(); -let menuBusy = false; -const pointer = new Pointer(undefined, log); -/** How long a modifier is held around a pointer press, and how long the - * press waits for it to land. A press is one round trip on the same - * machine; 40 ms is generous and invisible. */ -const MODIFIER_HOLD_MS = 400; -const MODIFIER_DRAG_MS = 1500; -const MODIFIER_SETTLE_MS = 40; - -function modifiersOf(value: unknown): string[] { - return Array.isArray(value) ? value.filter((m): m is string => typeof m === "string") : []; -} -let snapshotTimer: ReturnType | null = null; -let snapshotBusy = false; -let snapshotDirty = false; - -async function refreshState(): Promise { - if (snapshotBusy) { - snapshotDirty = true; - return; - } - snapshotBusy = true; - try { - const state = await snapshot(hyprDir); - monitorOrigin = { x: state.mon.x ?? 0, y: state.mon.y ?? 0 }; - const text = JSON.stringify(state); - if (!lastState || JSON.stringify(lastState) !== text) { - lastState = state; - broadcast(state); - } - } catch (error) { - log(`snapshot: ${(error as Error).message}`); - } finally { - snapshotBusy = false; - if (snapshotDirty) { - snapshotDirty = false; - scheduleSnapshot(20); - } - } -} - -/** Debounce: Hyprland emits bursts (a window open is 4-5 events). */ -function scheduleSnapshot(delayMs = 30): void { - if (snapshotTimer) return; - snapshotTimer = setTimeout(() => { - snapshotTimer = null; - void refreshState(); - }, delayMs); -} - -async function refreshLevels(force = false): Promise { - try { - const levels = await readLevels(); - if ( - force || - !lastLevels || - Math.abs(levels.vol - lastLevels.vol) > 0.004 || - levels.mute !== lastLevels.mute || - Math.abs(levels.bri - lastLevels.bri) > 0.004 - ) { - lastLevels = levels; - const line: HostLine = { t: "levels", vol: levels.vol, bri: levels.bri }; - if (levels.mute) line.mute = 1; - broadcast(line); - } - } catch (error) { - log(`levels: ${(error as Error).message}`); - } -} - -/** The control centre's other half: the network and what is playing. */ -async function refreshCc(): Promise { - try { - const [wifi, media] = await Promise.all([readWifi(), readMedia()]); - const line: HostLine = { t: "cc", wifi, media }; - if (!lastCc || JSON.stringify(lastCc) !== JSON.stringify(line)) { - lastCc = line; - broadcast(line); - } - } catch (error) { - log(`cc: ${(error as Error).message}`); - } -} - -/** The menu's live conditions, the way the shell evaluates them at open: - * one bash run over every `when` and `checked`, here on a timer so the - * device's sheet never waits for it. */ -async function refreshMenu(): Promise { - if (menuBusy) return; - menuBusy = true; - try { - menuEntries = loadMenu(); - const result = await evaluateMenuConditions(menuEntries); - if (!lastMenu || JSON.stringify(lastMenu) !== JSON.stringify(result)) { - lastMenu = result; - broadcast({ t: "menu", hide: result.hide, check: result.check }); - log(`menu: ${menuEntries.length} rows, ${result.hide.length} hidden, ${result.check.length} checked`); - } - } catch (error) { - log(`menu: ${(error as Error).message}`); - } finally { - menuBusy = false; - } -} - -/** The application list, paged: one line has to fit the device's 8 KiB poll - * batch, and a hundred entries do not. */ -const APPS_PER_PAGE = 40; - -function appPages(apps: AppEntry[]): HostLine[] { - const pages: HostLine[] = []; - for (let at = 0; at < apps.length; at += APPS_PER_PAGE) { - const slice = apps.slice(at, at + APPS_PER_PAGE); - const page: HostLine = { t: "apps", seq: pages.length, a: slice }; - if (at + APPS_PER_PAGE < apps.length) page.more = 1; - pages.push(page); - } - if (pages.length === 0) pages.push({ t: "apps", seq: 0, a: [] }); - return pages; -} - -function refreshApps(): void { - try { - const next = readAppIndex(); - if (JSON.stringify(next.apps) === JSON.stringify(apps.apps)) { - apps = next; - return; - } - apps = next; - for (const page of appPages(apps.apps)) broadcast(page); - log(`apps: ${apps.apps.length} entries, ${apps.byClass.size} classes`); - } catch (error) { - log(`apps: ${(error as Error).message}`); - } -} - -function refreshTheme(): void { - const next = readTheme(); - if (JSON.stringify(next) === JSON.stringify(theme)) return; - theme = next; - broadcast({ t: "theme", name: theme.name, colors: theme.colors, list: theme.list }); - log(`theme -> ${theme.name}`); -} - -function sendMirror(conn: Conn): void { - sendLine(conn, { t: "theme", name: theme.name, colors: theme.colors, list: theme.list }); - if (lastLevels) { - const line: HostLine = { t: "levels", vol: lastLevels.vol, bri: lastLevels.bri }; - if (lastLevels.mute) line.mute = 1; - sendLine(conn, line); - } - if (lastState) sendLine(conn, lastState); - if (lastCc) sendLine(conn, lastCc); - if (lastMenu) sendLine(conn, { t: "menu", hide: lastMenu.hide, check: lastMenu.check }); - for (const page of appPages(apps.apps)) sendLine(conn, page); -} - -// --------------------------------------------------------------------------- -// commands -// --------------------------------------------------------------------------- - -async function dispatchLogged(lua: string): Promise { - const reply = await hyprDispatch(hyprDir, lua); - if (reply.trim() !== "ok") log(`dispatch ${lua}: ${reply.trim().split("\n")[0]}`); -} - -async function batchLogged(luaDispatchers: string[]): Promise { - const reply = await hyprBatch(hyprDir, luaDispatchers); - if (reply.trim() !== "ok") log(`batch ${luaDispatchers.join(" ")}: ${reply.trim().split("\n")[0]}`); -} - -async function handle(conn: Conn, line: ClientLine): Promise { - if (line.t === "hello") { - conn.device = typeof line.device === "string" ? line.device.slice(0, 40) : "device"; - if (line.proto !== REMOTE_PROTO) log(`${conn.address}: proto ${line.proto} (ours ${REMOTE_PROTO})`); - if (options.trustAll || conn.trusted || allowed.has(conn.address)) conn.auth = "ok"; - else if (denied.has(conn.address)) conn.auth = "denied"; - else conn.auth = "pending"; - sendLine(conn, { t: "hello", proto: REMOTE_PROTO, name: options.name, omarchy: omarchyVersion, auth: conn.auth }); - sendMirror(conn); - if (conn.auth !== "pending") log(`${conn.device} at ${conn.address}: ${conn.auth === "ok" ? "allowed" : "denied"}`); - if (conn.auth === "pending") { - log(`${conn.device} at ${conn.address} asks to connect — dialog on screen`); - const verdict = await askApproval(conn.address, conn.device); - if (verdict === "allow") { - allowed.add(conn.address); - writeAllowed(allowed); - conn.auth = "ok"; - } else if (verdict === "deny") { - denied.add(conn.address); - conn.auth = "denied"; - } - log(`${conn.address}: ${verdict}`); - if (conns.has(conn) && verdict !== "timeout") sendLine(conn, { t: "auth", auth: conn.auth }); - } - return; - } - if (conn.auth !== "ok") return; - - switch (line.t) { - case "act": { - const action = actionById(line.id); - if (!action) { - log(`${conn.address}: unknown action ${JSON.stringify(line.id)}`); - return; - } - await runAction(action, hyprDir, log); - scheduleSnapshot(); - if (action.group === "media" || action.id === "nightlight") setTimeout(() => void refreshLevels(), 300); - return; - } - case "ws": { - const target = luaWorkspace(Number(line.n), line.rel === 1); - if (!target) return; - await dispatchLogged(`hl.dsp.focus({ workspace = ${target} })`); - scheduleSnapshot(); - return; - } - case "win": { - const window = typeof line.a === "string" ? luaWindow(line.a) : null; - if (!window) return; - switch (line.op) { - case "focus": - await dispatchLogged(`hl.dsp.focus({ window = ${window} })`); - break; - case "close": - await dispatchLogged(`hl.dsp.window.close({ window = ${window} })`); - break; - case "swap": - if (!["l", "r", "u", "d"].includes(line.dir)) return; - await batchLogged([`hl.dsp.focus({ window = ${window} })`, `hl.dsp.window.swap({ direction = "${line.dir}" })`]); - break; - case "move": { - const target = luaWorkspace(Number(line.n)); - if (!target) return; - await dispatchLogged(`hl.dsp.window.move({ window = ${window}, workspace = ${target}, follow = false })`); - break; - } - case "place": { - // Monitor-relative logical px off the wire; Hyprland places in - // layout coordinates, so the focused monitor's origin goes back on. - const x = Number(line.x); - const y = Number(line.y); - if (!Number.isFinite(x) || !Number.isFinite(y) || Math.abs(x) > 20000 || Math.abs(y) > 20000) return; - await dispatchLogged( - `hl.dsp.window.move({ window = ${window}, x = ${Math.round(x + monitorOrigin.x)}, y = ${Math.round(y + monitorOrigin.y)} })`, - ); - break; - } - case "resize": { - // Relative, in monitor px: the same dispatcher Omarchy's own - // SUPER+arrow bindings use, so a tiled window moves its split and - // a floating one changes size. - const dx = Number(line.dx); - const dy = Number(line.dy); - if (!Number.isFinite(dx) || !Number.isFinite(dy) || Math.abs(dx) > 4000 || Math.abs(dy) > 4000) return; - if (Math.round(dx) === 0 && Math.round(dy) === 0) return; - await batchLogged([ - `hl.dsp.focus({ window = ${window} })`, - `hl.dsp.window.resize({ x = ${Math.round(dx)}, y = ${Math.round(dy)}, relative = true })`, - ]); - break; - } - case "float": - await dispatchLogged(`hl.dsp.window.float({ window = ${window}, action = "toggle" })`); - break; - case "full": - await batchLogged([`hl.dsp.focus({ window = ${window} })`, 'hl.dsp.window.fullscreen({ mode = "fullscreen" })']); - break; - case "same": { - // Another window of the same program: the class is resolved - // against the machine's own desktop entries. - const windowClass = lastState?.win.find((w) => w.a === line.a)?.c ?? ""; - const entry = appForClass(apps, windowClass); - if (!entry || !launchApp(entry, log)) { - log(`same: no launcher for ${JSON.stringify(windowClass)}`); - sendLine(conn, { t: "toast", text: `no launcher for ${windowClass}` }); - return; - } - log(`same: ${windowClass} -> ${entry}`); - break; - } - } - scheduleSnapshot(); - return; - } - case "vol": { - const v = Number(line.v); - if (!Number.isFinite(v)) return; - await setVolume(v, log); - setTimeout(() => void refreshLevels(), 150); - return; - } - case "bri": { - const v = Number(line.v); - if (!Number.isFinite(v)) return; - setBrightness(v, log); - setTimeout(() => void refreshLevels(), 300); - return; - } - case "mute": - toggleMute(log); - setTimeout(() => void refreshLevels(), 150); - return; - case "media": { - const action = actionById(line.op === "play" ? "play" : line.op === "next" ? "next" : "prev"); - if (action) await runAction(action, hyprDir, log); - return; - } - case "type": - if (typeof line.text === "string") typeText(line.text, log); - return; - case "key": { - const mods: string[] = Array.isArray(line.mods) ? (line.mods as unknown[]).filter((m): m is string => typeof m === "string") : []; - if (typeof line.k === "string" && !pressKey(line.k, log, mods)) { - log(`${conn.address}: key ${line.k}${mods.length ? `+${mods.join("+")}` : ""} not allowed`); - } - return; - } - case "ptr": { - const dx = Number(line.dx); - const dy = Number(line.dy); - if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.move(dx, dy); - return; - } - case "click": { - if (line.b !== "l" && line.b !== "r" && line.b !== "m") return; - const mods = modifiersOf(line.mods); - if (mods.length === 0) { - pointer.click(line.b); - return; - } - // The modifier has to be down while the button goes down, and the - // pointer cannot hold one: wtype keeps it for a moment and the click - // lands inside that window. - if (holdModifiers(mods, MODIFIER_HOLD_MS, log)) { - const button = line.b; - setTimeout(() => pointer.click(button), MODIFIER_SETTLE_MS); - } else { - pointer.click(line.b); - } - return; - } - case "scroll": { - const dx = Number(line.dx); - const dy = Number(line.dy); - if (Number.isFinite(dx) && Number.isFinite(dy) && Math.abs(dx) < 2000 && Math.abs(dy) < 2000) pointer.scroll(dx, dy); - return; - } - case "drag": { - const mods = modifiersOf(line.mods); - if (line.on === 1 && mods.length && holdModifiers(mods, MODIFIER_DRAG_MS, log)) { - setTimeout(() => pointer.button("l", true), MODIFIER_SETTLE_MS); - return; - } - pointer.button("l", line.on === 1); - return; - } - case "wifi": - setWifi(line.on === 1, log); - setTimeout(() => void refreshCc(), 1500); - setTimeout(() => void refreshCc(), 5000); - return; - case "launch": - if (typeof line.app !== "string" || !launchApp(line.app, log)) { - log(`${conn.address}: bad launch ${JSON.stringify(line.app)}`); - return; - } - log(`launch: ${line.app}`); - scheduleSnapshot(500); - return; - case "menu": - if (typeof line.id !== "string" || !runMenuEntry(menuEntries, line.id, log)) { - log(`${conn.address}: unknown menu row ${JSON.stringify(line.id)}`); - return; - } - log(`menu: ${line.id}`); - scheduleSnapshot(300); - setTimeout(() => void refreshMenu(), 2000); - setTimeout(() => void refreshLevels(), 500); - return; - } -} - -// --------------------------------------------------------------------------- -// server -// --------------------------------------------------------------------------- - -let omarchyVersion = ""; -execFile("omarchy-version", [], { timeout: 3000 }, (error, stdout) => { - if (!error) omarchyVersion = stdout.trim(); -}); - -/** Wire up one socket, whichever end dialled: the device speaks the hello - * first either way. */ -function attach(socket: Socket, address: string, trusted: boolean, onGone?: () => void): void { - const conn: Conn = { - socket, - address, - parser: new FrameParser(), - hello: new Uint8Array(0), - device: "device", - auth: "pending", - lastSeen: Date.now(), - trusted, - }; - socket.setNoDelay(true); - conns.add(conn); - log(`connection from ${address}`); - socket.on("data", (chunk: Buffer) => { - conn.lastSeen = Date.now(); - try { - let bytes = new Uint8Array(chunk); - if (conn.hello !== null) { - const merged = new Uint8Array(conn.hello.length + bytes.length); - merged.set(conn.hello); - merged.set(bytes, conn.hello.length); - const hello = parseHello(merged); - if (hello === null) { - conn.hello = merged; - return; - } - if (hello.app !== REMOTE_APP) throw new Error(`unknown app "${hello.app}"`); - conn.hello = null; - socket.write(encodeHelloAck()); - bytes = merged.slice(hello.consumed); - } - for (const frame of conn.parser.push(bytes)) { - if (frame.type === WIRE_MSG.pong) continue; - if (frame.type !== WIRE_MSG.ctrl) continue; // forward compatibility - const text = new TextDecoder().decode(frame.payload); - for (const line of parseLines(text)) { - handle(conn, line).catch((error) => log(`${address}: ${(error as Error).message}`)); - } - } - } catch (error) { - log(`dropping ${address}: ${(error as Error).message}`); - socket.destroy(); - } - }); - const gone = () => { - if (conns.delete(conn)) { - log(`${address} disconnected`); - onGone?.(); - } - }; - socket.on("close", gone); - socket.on("error", (error) => { - log(`${address}: ${error.message}`); - gone(); - }); -} - -const server = createServer((socket) => { - attach(socket, socket.remoteAddress?.replace(/^::ffff:/, "") ?? "?", false); -}); - -server.listen(options.port, "0.0.0.0", () => { - log(`listening on tcp ${options.port} (hyprland at ${hyprDir})`); -}); - -// ping every 2 s; drop after 10 s of silence (the wire's liveness rule) -let pingToken = 1; -setInterval(() => { - const now = Date.now(); - for (const conn of conns) { - if (now - conn.lastSeen > 10_000) { - log(`${conn.address} silent, dropping`); - conn.socket.destroy(); - conns.delete(conn); - continue; - } - const token = new Uint8Array(4); - new DataView(token.buffer).setUint32(0, pingToken++ >>> 0, true); - conn.socket.write(encodeFrame(WIRE_MSG.ping, token)); - } -}, 2000); - -// discovery beacon (off by default: on a firewalled box the relay beacons) -if (options.beacon) { - const udp = createSocket("udp4"); - const payload = encodeBeacon(REMOTE_APP, options.name, options.port); - udp.bind(() => { - udp.setBroadcast(true); - setInterval(() => udp.send(payload, WIRE_BEACON_PORT, "255.255.255.255", () => {}), 1000); - log(`beacon on udp ${WIRE_BEACON_PORT}`); - }); -} - -// --------------------------------------------------------------------------- -// usb (usbmuxd): forward a host port to each plugged device's listener and dial it -// --------------------------------------------------------------------------- - -/** hosts/iphone2g/svcwire.c POCKET_SVC_LISTEN_PORT. */ -const USB_DEVICE_PORT = 8624; -const USB_LOCAL_PORT_BASE = 8630; - -interface UsbLink { - udid: string; - localPort: number; - proxy: ChildProcess | null; - socket: Socket | null; - /** Earliest time to dial again after a failure. */ - retryAt: number; -} - -const usbLinks = new Map(); -let usbToolMissing = false; - -function listUsbDevices(): Promise { - return new Promise((resolve) => { - execFile("idevice_id", ["-l"], { timeout: 3000 }, (error, stdout) => { - if (error) { - const code = (error as NodeJS.ErrnoException).code; - if (!usbToolMissing) { - usbToolMissing = true; - log( - code === "ENOENT" - ? "usb: idevice_id not installed; the cable path is off (pacman -S usbmuxd libimobiledevice)" - : `usb: idevice_id failed (${error.message.trim().split("\n")[0]}); is usbmuxd installed and running?`, - ); - } - resolve([]); - return; - } - usbToolMissing = false; - resolve(stdout.split("\n").map((line) => line.trim()).filter((line) => /^[0-9a-f-]{20,}$/i.test(line))); - }); - }); -} - -function dialUsb(link: UsbLink): void { - if (link.socket || Date.now() < link.retryAt) return; - if (!link.proxy) { - const proxy = spawn("iproxy", ["-u", link.udid, `${link.localPort}:${USB_DEVICE_PORT}`], { stdio: "ignore" }); - proxy.on("exit", () => { - if (link.proxy === proxy) link.proxy = null; - }); - proxy.on("error", (error) => log(`usb ${link.udid.slice(0, 8)}: iproxy: ${error.message}`)); - link.proxy = proxy; - link.retryAt = Date.now() + 500; // let iproxy bind before dialling - return; - } - const socket = new Socket(); - link.socket = socket; - const label = `usb:${link.udid.slice(0, 8)}`; - const failed = () => { - if (link.socket === socket) link.socket = null; - link.retryAt = Date.now() + 2000; - }; - socket.once("error", failed); - socket.connect(link.localPort, "127.0.0.1", () => { - socket.removeListener("error", failed); - log(`usb ${link.udid.slice(0, 8)}: dialled the device's listener on ${USB_DEVICE_PORT}`); - attach(socket, label, true, failed); - }); -} - -function dropUsb(link: UsbLink): void { - link.socket?.destroy(); - link.socket = null; - link.proxy?.kill(); - link.proxy = null; -} - -async function pollUsb(): Promise { - const ids = await listUsbDevices(); - for (const udid of ids) { - if (!usbLinks.has(udid)) { - log(`usb: device ${udid.slice(0, 8)} on the cable`); - usbLinks.set(udid, { udid, localPort: USB_LOCAL_PORT_BASE + (usbLinks.size % 20), proxy: null, socket: null, retryAt: 0 }); - } - } - for (const [udid, link] of usbLinks) { - if (!ids.includes(udid)) { - log(`usb: device ${udid.slice(0, 8)} unplugged`); - dropUsb(link); - usbLinks.delete(udid); - continue; - } - dialUsb(link); - } -} - -if (options.usb) { - void pollUsb(); - setInterval(() => void pollUsb(), 3000); -} - -// mirror sources -watchEvents( - hyprDir, - (event) => { - if (STATE_EVENTS.has(event.name)) scheduleSnapshot(); - }, - log, -); -void refreshState(); -void refreshLevels(true); -void refreshCc(); -void refreshMenu(); -refreshApps(); -setInterval(() => void refreshLevels(), 1000); -setInterval(() => void refreshCc(), 3000); -setInterval(() => void refreshMenu(), 30_000); -setInterval(refreshApps, 60_000); -if (!pointer.available()) log("pointer: helper not built; the trackpad will be inert until the next deploy"); -setInterval(() => scheduleSnapshot(), 5000); // belt and braces for missed events -try { - const stateDir = themeStateDirectory(); - if (existsSync(stateDir)) watch(stateDir, () => setTimeout(refreshTheme, 500)); -} catch (error) { - log(`theme watch: ${(error as Error).message}`); -} -setInterval(refreshTheme, 10_000); diff --git a/apps/pocket-remote/host/wire.ts b/apps/pocket-remote/host/wire.ts deleted file mode 100644 index ffdfc1c59..000000000 --- a/apps/pocket-remote/host/wire.ts +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/host/wire.ts — the host side of the SVC WIRE (PKNT) -// protocol: framing, the device hello, the discovery beacon. Byte layouts -// come from contracts/spec/spec.ts "SVC WIRE protocol" and must stay -// bit-identical to engine/core/src/wire.rs and hosts/iphone2g/svcwire.c. -// -// The constants are repeated here rather than imported so the daemon can be -// copied to the Omarchy machine as one small directory with no repository -// around it; tests/pocket-remote.test.ts pins them to spec.ts. - -export const WIRE_MAGIC = 0x544e4b50; // 'PKNT' LE -export const WIRE_BEACON_MAGIC = 0x42444b50; // 'PKDB' LE -export const WIRE_VERSION = 1; -export const WIRE_HEADER_SIZE = 8; -export const WIRE_MAX_PAYLOAD = 256 * 1024; -export const WIRE_BEACON_PORT = 8621; -export const WIRE_PORT = 8622; -export const WIRE_MSG = { ping: 0x01, pong: 0x02, ctrl: 0x10 } as const; -/** One ctrl line may not exceed this (spec SVC_POLL_BUF). */ -export const SVC_POLL_BUF = 8192; - -export function encodeFrame(type: number, payload: Uint8Array): Uint8Array { - if (payload.length > WIRE_MAX_PAYLOAD) { - throw new Error(`frame payload ${payload.length} exceeds WIRE_MAX_PAYLOAD`); - } - const frame = new Uint8Array(WIRE_HEADER_SIZE + payload.length); - frame[0] = type; - frame[1] = 0; - new DataView(frame.buffer).setUint32(4, payload.length, true); - frame.set(payload, WIRE_HEADER_SIZE); - return frame; -} - -export function encodeCtrl(line: string): Uint8Array { - const bytes = new TextEncoder().encode(line); - if (bytes.length > SVC_POLL_BUF) throw new Error(`ctrl line ${bytes.length} bytes exceeds SVC_POLL_BUF`); - return encodeFrame(WIRE_MSG.ctrl, bytes); -} - -/** Once-a-second discovery datagram; the device connects to the SOURCE - * address of the datagram at the advertised TCP port. */ -export function encodeBeacon(app: string, name: string, tcpPort: number): Uint8Array { - const appBytes = new TextEncoder().encode(app); - const nameBytes = new TextEncoder().encode(name).slice(0, 32); - const datagram = new Uint8Array(8 + 1 + appBytes.length + 1 + nameBytes.length); - const view = new DataView(datagram.buffer); - view.setUint32(0, WIRE_BEACON_MAGIC, true); - datagram[4] = WIRE_VERSION; - datagram[5] = 0; - view.setUint16(6, tcpPort, true); - datagram[8] = appBytes.length; - datagram.set(appBytes, 9); - datagram[9 + appBytes.length] = nameBytes.length; - datagram.set(nameBytes, 10 + appBytes.length); - return datagram; -} - -/** The device's opening handshake. Returns the app id, or null while the - * buffer is still short of a full hello; throws on a malformed one. */ -export function parseHello(buffer: Uint8Array): { app: string; consumed: number } | null { - if (buffer.length < 7) return null; - const view = new DataView(buffer.buffer, buffer.byteOffset, buffer.byteLength); - if (view.getUint32(0, true) !== WIRE_MAGIC) throw new Error("bad hello magic"); - if (buffer[4] !== WIRE_VERSION) throw new Error(`unsupported wire version ${buffer[4]}`); - const appLength = buffer[6]!; - if (appLength === 0 || appLength > 64) throw new Error("bad hello app length"); - if (buffer.length < 7 + appLength) return null; - const app = new TextDecoder().decode(buffer.subarray(7, 7 + appLength)); - return { app, consumed: 7 + appLength }; -} - -export function encodeHelloAck(): Uint8Array { - const ack = new Uint8Array(8); - new DataView(ack.buffer).setUint32(0, WIRE_MAGIC, true); - ack[4] = WIRE_VERSION; - return ack; -} - -export interface Frame { - type: number; - payload: Uint8Array; -} - -/** Incremental frame reassembly over a byte stream. */ -export class FrameParser { - private buffer = new Uint8Array(0); - - push(chunk: Uint8Array): Frame[] { - const merged = new Uint8Array(this.buffer.length + chunk.length); - merged.set(this.buffer); - merged.set(chunk, this.buffer.length); - this.buffer = merged; - const frames: Frame[] = []; - for (;;) { - if (this.buffer.length < WIRE_HEADER_SIZE) break; - const view = new DataView(this.buffer.buffer, this.buffer.byteOffset); - const length = view.getUint32(4, true); - if (this.buffer[2] !== 0 || this.buffer[3] !== 0 || length > WIRE_MAX_PAYLOAD) { - throw new Error("bad frame header"); - } - if (this.buffer.length < WIRE_HEADER_SIZE + length) break; - frames.push({ - type: this.buffer[0]!, - payload: this.buffer.slice(WIRE_HEADER_SIZE, WIRE_HEADER_SIZE + length), - }); - this.buffer = this.buffer.slice(WIRE_HEADER_SIZE + length); - } - return frames; - } -} diff --git a/apps/pocket-remote/icons.tsx b/apps/pocket-remote/icons.tsx deleted file mode 100644 index 63e58f8f7..000000000 --- a/apps/pocket-remote/icons.tsx +++ /dev/null @@ -1,86 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/icons.tsx — an icon is a glyph. The remote's symbols -// come from the Nerd Font face fonts.json adds to the atlas (glyphs.ts names -// them), so they are text: they recolour with the theme like every label, -// and Omarchy's menu rows carry the very glyphs the shell shows. -// -// A class string reaches the device as one literal looked up in the baked -// table, so every size x tone pair is spelled out here rather than composed. - -import { Text } from "@pocketjs/framework/components"; -import { type Role, themed } from "./theme.ts"; - -export type Tone = "fg" | "dim" | "accent" | "onAccent" | "danger" | "ok" | "warn"; -export type Size = "sm" | "base" | "lg" | "xl" | "2xl"; - -const CLASS: Record> = { - sm: { - fg: "text-sm text-[#a9b1d6]", - dim: "text-sm text-[#565f89]", - accent: "text-sm text-[#7aa2f7]", - onAccent: "text-sm text-[#13141c]", - danger: "text-sm text-[#f7768e]", - ok: "text-sm text-[#9ece6a]", - warn: "text-sm text-[#e0af68]", - }, - base: { - fg: "text-base text-[#a9b1d6]", - dim: "text-base text-[#565f89]", - accent: "text-base text-[#7aa2f7]", - onAccent: "text-base text-[#13141c]", - danger: "text-base text-[#f7768e]", - ok: "text-base text-[#9ece6a]", - warn: "text-base text-[#e0af68]", - }, - lg: { - fg: "text-lg text-[#a9b1d6]", - dim: "text-lg text-[#565f89]", - accent: "text-lg text-[#7aa2f7]", - onAccent: "text-lg text-[#13141c]", - danger: "text-lg text-[#f7768e]", - ok: "text-lg text-[#9ece6a]", - warn: "text-lg text-[#e0af68]", - }, - xl: { - fg: "text-xl text-[#a9b1d6]", - dim: "text-xl text-[#565f89]", - accent: "text-xl text-[#7aa2f7]", - onAccent: "text-xl text-[#13141c]", - danger: "text-xl text-[#f7768e]", - ok: "text-xl text-[#9ece6a]", - warn: "text-xl text-[#e0af68]", - }, - "2xl": { - fg: "text-2xl text-[#a9b1d6]", - dim: "text-2xl text-[#565f89]", - accent: "text-2xl text-[#7aa2f7]", - onAccent: "text-2xl text-[#13141c]", - danger: "text-2xl text-[#f7768e]", - ok: "text-2xl text-[#9ece6a]", - warn: "text-2xl text-[#e0af68]", - }, -}; - -const ROLE: Record = { - fg: "text", - dim: "textDim", - accent: "textAccent", - onAccent: "textOnAccent", - danger: "textDanger", - ok: "textOk", - warn: "textWarn", -}; - -/** One glyph, coloured by tone, sized by the text scale. The parent centres - * it (a View with items-center justify-center). Tone and size may be - * functions for a glyph that changes with state. */ -export function Icon(p: { glyph: string | (() => string); tone?: Tone | (() => Tone); size?: Size }) { - const tone = () => (typeof p.tone === "function" ? p.tone() : (p.tone ?? "fg")); - const glyph = () => (typeof p.glyph === "function" ? p.glyph() : p.glyph); - const size = p.size ?? "base"; - return ( - ROLE[tone()])}> - {glyph()} - - ); -} diff --git a/apps/pocket-remote/keyboard-layout.ts b/apps/pocket-remote/keyboard-layout.ts deleted file mode 100644 index e764a2bcd..000000000 --- a/apps/pocket-remote/keyboard-layout.ts +++ /dev/null @@ -1,364 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/keyboard-layout.ts — the deck's geometry and key table -// with no Solid in it: the keyboard's five rows, the palm-rest band under -// them (menu key, click key, trackpad, d-pad), keysym names, hold-and-slide -// variants, and the key -> wire-line mapping. deck.tsx renders and handles; -// tests import this file bare (bun test cannot load the app's .tsx through -// the Solid transform). -// -// The band under the keyboard is a laptop's C surface read literally: the -// trackpad does not run edge to edge, and what a laptop leaves as palm rest -// carries the two things a hand wants beside a pad — Omarchy's menu on the -// left with the click button under it, a d-pad cross on the right. Four -// discrete arrow keys beat the slide-a-direction compass they replace: no -// gesture to learn and nothing to aim inside. -// -// TYPING ACCURACY. Two cheap, well-worn corrections, because the visual gaps -// a keyboard wants and the target sizes a finger wants are not the same -// thing: -// 1. Hit regions TILE the keyboard. A touch goes to the key whose -// rectangle it is nearest (zero inside), not to a rectangle it must -// land inside, so the gaps between keys belong to their neighbours -// instead of swallowing a press. Keys can then be drawn with generous -// gaps — 6 px here, up from 4 — without shrinking what a finger hits. -// 2. A downward BIAS correction. On a capacitive panel a press lands below -// where the eye aimed (the contact patch grows towards the palm), so -// the hit test moves the touch up a few pixels before assigning it. -// Both are what the platform keyboards do, and neither costs a frame. -// -// SUPER is a sticky modifier like ctrl and alt, so Omarchy's own bindings -// are reachable from the deck: super then space opens its menu on the -// laptop, super then 1..9 switches workspace. - -import { GLYPH } from "./glyphs.ts"; -import { type Rect, SCREEN_H, SCREEN_W, STRIP, within } from "./layout.ts"; -import type { Modifier } from "./protocol.ts"; - -export type KbLayer = "lower" | "upper" | "sym"; - -/** A held key's modifier variants (ctrl+x, alt+x, F-keys). */ -export interface KeyVariant { - label: string; - k: string; - mods: Modifier[]; -} - -/** Five rows on a 36 px pitch: 30 px of key and 6 px of gap. */ -export const ROWS_TOP = STRIP.h + 4; -export const ROW_PITCH = 36; -export const KEY_H = 30; -export const ROW_COUNT = 5; -/** Horizontal inset per key: 3 px a side, so 6 px between two keys. */ -const KEY_INSET = 3; -/** Letter rows: ten columns of 44 px. The top row: twelve of 40. */ -const UNIT = 44; -const TOP_UNIT = 40; - -export const KEYBOARD: Rect = { - x: 0, - y: STRIP.h, - w: SCREEN_W, - h: ROWS_TOP - STRIP.h + (ROW_COUNT - 1) * ROW_PITCH + KEY_H, -}; - -// --------------------------------------------------------------------------- -// the band under the keyboard: menu | click | trackpad | d-pad -// --------------------------------------------------------------------------- - -export const BAND: Rect = { - x: 0, - y: KEYBOARD.y + KEYBOARD.h + 4, - w: SCREEN_W, - h: SCREEN_H - (KEYBOARD.y + KEYBOARD.h + 4) - 4, -}; -/** Left rest: Omarchy's menu above, the click button below. */ -export const MENU_KEY: Rect = { x: 4, y: BAND.y, w: 72, h: Math.round(BAND.h / 2) - 3 }; -export const CLICK_KEY: Rect = { x: 4, y: MENU_KEY.y + MENU_KEY.h + 6, w: 72, h: BAND.h - MENU_KEY.h - 6 }; -/** The pad itself: narrower than the panel, like a laptop's. */ -export const TRACKPAD: Rect = { x: 82, y: BAND.y, w: 286, h: BAND.h }; -/** Right rest: the d-pad cross. */ -export const DPAD: Rect = { x: 374, y: BAND.y, w: 102, h: BAND.h }; - -export type Direction4 = "u" | "d" | "l" | "r"; -export const DIRECTION_KEYSYM: Record = { u: "Up", d: "Down", l: "Left", r: "Right" }; -export const DIRECTION_GLYPH: Record = { u: "↑", d: "↓", l: "←", r: "→" }; - -const DPAD_KEY_W = 34; -const DPAD_KEY_H = Math.floor((DPAD.h - 8) / 3); - -/** The cross: up and down in the middle column, left and right beside it. */ -export const DPAD_KEYS: Record = (() => { - const cx = DPAD.x + Math.round(DPAD.w / 2); - const cy = DPAD.y + Math.round(DPAD.h / 2); - const midY = cy - Math.round(DPAD_KEY_H / 2); - const left = cx - Math.round(DPAD_KEY_W / 2); - return { - u: { x: left, y: midY - DPAD_KEY_H - 4, w: DPAD_KEY_W, h: DPAD_KEY_H }, - d: { x: left, y: midY + DPAD_KEY_H + 4, w: DPAD_KEY_W, h: DPAD_KEY_H }, - l: { x: left - DPAD_KEY_W - 3, y: midY, w: DPAD_KEY_W, h: DPAD_KEY_H }, - r: { x: left + DPAD_KEY_W + 3, y: midY, w: DPAD_KEY_W, h: DPAD_KEY_H }, - }; -})(); - -/** Frames a d-pad key must be held before it repeats, and the frames - * between repeats. Each repeat is one key press on the laptop, so the rate - * is a walking pace rather than a keyboard's. */ -export const ARROW_HOLD_FRAMES = 20; -export const ARROW_REPEAT_FRAMES = 7; - -/** Which d-pad key a point is on, with slack around the cross. */ -export function dpadAt(x: number, y: number): Direction4 | null { - for (const dir of ["u", "d", "l", "r"] as const) { - const r = DPAD_KEYS[dir]; - if (within(x, y, { x: r.x - 4, y: r.y - 4, w: r.w + 8, h: r.h + 8 })) return dir; - } - return null; -} - -// --------------------------------------------------------------------------- -// the keys -// --------------------------------------------------------------------------- - -export type KeyAction = { ch: string } | { key: string } | { layer: KbLayer } | { mod: Modifier }; - -export interface KeyDef { - label: string; - /** Width in row units. */ - w: number; - act: KeyAction; - dark?: boolean; - /** Hold-and-slide variants (letters and digits). */ - variants?: KeyVariant[]; - /** Drawn as a glyph rather than as its label's text. */ - glyph?: string; -} - -/** Keysym names for the characters that need one (wtype -k). */ -const KEYSYM: Record = { - "-": "minus", "=": "equal", "[": "bracketleft", "]": "bracketright", ";": "semicolon", - "'": "apostrophe", "`": "grave", "\\": "backslash", ",": "comma", ".": "period", "/": "slash", -}; - -export function keysymFor(ch: string): string | null { - if (/^[a-z0-9]$/.test(ch)) return ch; - return KEYSYM[ch] ?? null; -} - -function letterVariants(ch: string): KeyVariant[] { - return [ - { label: `^${ch.toUpperCase()}`, k: ch, mods: ["ctrl"] }, - { label: `⌥${ch.toUpperCase()}`, k: ch, mods: ["alt"] }, - ]; -} - -function digitVariants(ch: string): KeyVariant[] { - const n = ch === "0" ? 10 : Number(ch); - return [ - { label: `F${n}`, k: `F${n}`, mods: [] }, - { label: `^${ch}`, k: ch, mods: ["ctrl"] }, - ]; -} - -const letters = (row: string): KeyDef[] => - [...row].map((ch) => ({ label: ch, w: 1, act: { ch }, variants: /^[a-z]$/.test(ch) ? letterVariants(ch) : undefined })); -const digits = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch }, variants: digitVariants(ch) })); -const chars = (row: string): KeyDef[] => [...row].map((ch) => ({ label: ch, w: 1, act: { ch } })); - -/** esc, the digits, backspace. Twelve columns of 40. */ -const TOP_ROW: KeyDef[] = [ - { label: "esc", w: 1, act: { key: "Escape" }, dark: true }, - ...digits("1234567890"), - { label: "⌫", w: 1, act: { key: "BackSpace" }, dark: true }, -]; - -/** Return closes the home row, where a keyboard puts it. */ -const RETURN: KeyDef = { label: "return", w: 1.75, act: { key: "Return" }, dark: true }; - -/** The bottom row: the layer switch, the modifiers, tab, space, and the two - * punctuation keys a terminal reaches for. The arrows are the d-pad now. */ -const bottomRow = (layer: KbLayer): KeyDef[] => [ - { label: layer === "sym" ? "abc" : "123", w: 1, act: { layer: layer === "sym" ? "lower" : "sym" }, dark: true }, - { label: "ctrl", w: 1, act: { mod: "ctrl" }, dark: true }, - { label: "alt", w: 1, act: { mod: "alt" }, dark: true }, - { label: "super", w: 1, act: { mod: "super" }, dark: true }, - { label: "tab", w: 1, act: { key: "Tab" }, dark: true }, - { label: "space", w: 3.75, act: { key: "space" } }, - { label: "-", w: 0.75, act: { ch: "-" } }, - { label: "/", w: 0.75, act: { ch: "/" } }, -]; - -const ROWS: Record = { - lower: [ - letters("qwertyuiop"), - [...letters("asdfghjkl"), RETURN], - [ - { label: "shift", w: 1.25, act: { layer: "upper" }, dark: true }, - ...letters("zxcvbnm"), - { label: ",", w: 0.75, act: { ch: "," } }, - { label: ".", w: 0.75, act: { ch: "." } }, - { label: "'", w: 1, act: { ch: "'" } }, - ], - bottomRow("lower"), - ], - upper: [ - chars("QWERTYUIOP"), - [...chars("ASDFGHJKL"), RETURN], - [ - { label: "shift", w: 1.25, act: { layer: "lower" }, dark: true }, - ...chars("ZXCVBNM"), - { label: "!", w: 0.75, act: { ch: "!" } }, - { label: "?", w: 0.75, act: { ch: "?" } }, - { label: '"', w: 1, act: { ch: '"' } }, - ], - bottomRow("upper"), - ], - sym: [ - chars("-/:;()$&@\""), - [...chars("[]{}#%^*+"), RETURN], - [ - { label: "shift", w: 1.25, act: { layer: "lower" }, dark: true }, - ...chars("_\\|~<>!"), - { label: "=", w: 0.75, act: { ch: "=" } }, - { label: "?", w: 0.75, act: { ch: "?" } }, - { label: "`", w: 1, act: { ch: "`" } }, - ], - bottomRow("sym"), - ], -}; - -export interface KeyRect extends Rect { - def: KeyDef; - row: number; - col: number; -} - -function layoutRow(row: KeyDef[], r: number, unit: number): KeyRect[] { - const total = row.reduce((sum, key) => sum + key.w, 0); - let x = Math.round((SCREEN_W - total * unit) / 2); - const y = ROWS_TOP + r * ROW_PITCH; - return row.map((def, c) => { - const w = Math.round(def.w * unit); - const rect = { x: x + KEY_INSET, y, w: w - 2 * KEY_INSET, h: KEY_H, def, row: r, col: c }; - x += w; - return rect; - }); -} - -function layoutKeys(layer: KbLayer): KeyRect[] { - return [...layoutRow(TOP_ROW, 0, TOP_UNIT), ...ROWS[layer].flatMap((row, r) => layoutRow(row, r + 1, UNIT))]; -} - -const LAYOUTS: Record = { - lower: layoutKeys("lower"), - upper: layoutKeys("upper"), - sym: layoutKeys("sym"), -}; - -export function keyboardKeys(layer: KbLayer): readonly KeyRect[] { - return LAYOUTS[layer]; -} - -// --------------------------------------------------------------------------- -// hit testing -// --------------------------------------------------------------------------- - -/** How far up the hit test moves a touch before assigning it: a press on a - * capacitive panel lands below where the eye aimed. */ -export const TOUCH_BIAS_Y = 3; -/** A row change is a worse mistake than a column change, so vertical - * distance counts for more when the nearest key is chosen. */ -const VERTICAL_WEIGHT = 1.7; -/** How far outside a key a touch may still be claimed by it. */ -const HIT_REACH = 16; - -/** Distance from a point to a rectangle's edge: zero inside it. */ -function edgeDistance(x: number, y: number, r: Rect): { dx: number; dy: number } { - return { - dx: Math.max(0, Math.abs(x - (r.x + r.w / 2)) - r.w / 2), - dy: Math.max(0, Math.abs(y - (r.y + r.h / 2)) - r.h / 2), - }; -} - -/** - * The key a touch means. Hit regions tile the keyboard: the nearest key by - * edge distance wins, so the gaps between keys belong to their neighbours - * instead of swallowing the press. The touch is moved up by TOUCH_BIAS_Y - * first (see the note at the top of this file). - */ -export function keyAt(layer: KbLayer, x: number, y: number): KeyRect | null { - const ay = y - TOUCH_BIAS_Y; - // The reach must not spill into the band: those controls are fixed and a - // press on the pad is never a keystroke. - if (ay >= BAND.y) return null; - let best: KeyRect | null = null; - let bestScore = Infinity; - for (const key of LAYOUTS[layer]) { - const { dx, dy } = edgeDistance(x, ay, key); - if (dx > HIT_REACH || dy > HIT_REACH) continue; - const score = dx * dx + dy * dy * VERTICAL_WEIGHT; - if (score < bestScore) { - bestScore = score; - best = key; - } - } - return best; -} - -/** What a touch on the deck means: the band's own controls first (they are - * fixed, and the keyboard's hit regions reach past its own edge), then a - * key. */ -export type DeckTarget = - | { kind: "menu" } - | { kind: "click" } - | { kind: "pad" } - | { kind: "dpad"; dir: Direction4 } - | { kind: "key"; key: KeyRect } - | { kind: "none" }; - -export function deckTargetAt(layer: KbLayer, x: number, y: number): DeckTarget { - if (y >= BAND.y - 2) { - if (within(x, y, MENU_KEY)) return { kind: "menu" }; - if (within(x, y, CLICK_KEY)) return { kind: "click" }; - if (within(x, y, TRACKPAD)) return { kind: "pad" }; - const dir = dpadAt(x, y); - if (dir) return { kind: "dpad", dir }; - return { kind: "none" }; - } - const key = keyAt(layer, x, y); - return key ? { kind: "key", key } : { kind: "none" }; -} - -/** Variant chip geometry: above the key, or below it for the top row. */ -export const CHIP_W = 56; -export const CHIP_H = 34; -export const CHIP_GAP = 6; -export function chipRects(key: Rect, count: number): Rect[] { - const total = count * CHIP_W + (count - 1) * CHIP_GAP; - let x = Math.round(key.x + key.w / 2 - total / 2); - x = Math.max(4, Math.min(SCREEN_W - 4 - total, x)); - const y = key.y >= ROWS_TOP + ROW_PITCH ? key.y - CHIP_H - 6 : key.y + key.h + 6; - return Array.from({ length: count }, (_, i) => ({ x: x + i * (CHIP_W + CHIP_GAP), y, w: CHIP_W, h: CHIP_H })); -} - -export function chipAt(key: Rect, count: number, x: number, y: number): number | null { - const rects = chipRects(key, count); - for (let i = 0; i < rects.length; i += 1) { - const r = rects[i]!; - if (x >= r.x - 4 && x < r.x + r.w + 4 && y >= r.y - 10 && y < r.y + r.h + 10) return i; - } - return null; -} - -/** What a key sends, as the store sees it. Exported for tests. */ -export function keyToLine( - act: KeyAction, - mods: Modifier[], -): { t: "type"; text: string } | { t: "key"; k: string; mods?: Modifier[] } | null { - if ("ch" in act) { - if (mods.length === 0) return { t: "type", text: act.ch }; - const k = keysymFor(act.ch.toLowerCase()); - return k ? { t: "key", k, mods } : null; - } - if ("key" in act) return mods.length ? { t: "key", k: act.key, mods } : { t: "key", k: act.key }; - return null; // a layer switch and a modifier send nothing here -} diff --git a/apps/pocket-remote/layout.ts b/apps/pocket-remote/layout.ts deleted file mode 100644 index 59d7936e6..000000000 --- a/apps/pocket-remote/layout.ts +++ /dev/null @@ -1,475 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/layout.ts — the screen's fixed geometry and the pure -// arithmetic behind it: where the strip and the stage sit on the 480x320 -// landscape panel, how a monitor is fitted into the stage, where the ball -// snaps, where a popup opens so it stays on screen, how the control centre -// and the menu sheet are laid out, how a finger on a slider becomes a level -// and a finger on the trackpad becomes pointer motion. No Solid here so -// tests can run it bare. - -import { RADIUS, ROW_H, SPACE } from "./design.ts"; -import type { Direction, HostState, WinInfo, WsInfo } from "./protocol.ts"; - -export const SCREEN_W = 480; -export const SCREEN_H = 320; - -export interface Rect { - x: number; - y: number; - w: number; - h: number; -} - -/** Stage: the live miniature of the desktop. Deck: keyboard over trackpad, - * the laptop's own C surface. */ -export type Mode = "stage" | "deck"; - -// --------------------------------------------------------------------------- -// strip -// --------------------------------------------------------------------------- - -/** The workspace strip across the top. */ -export const STRIP: Rect = { x: 0, y: 0, w: SCREEN_W, h: 28 }; -export const TAB_W = 24; -export const TAB_X0 = 6; -/** - * Workspaces are a FIXED set, not the ones that happen to exist: Omarchy - * binds SUPER+1..0, so those numbers are addressable whether or not - * Hyprland is currently keeping a workspace alive (it destroys an empty - * one, which left the strip showing "2 3" on a machine the user thinks of - * as having five desks). Five is the set in practice; the strip grows to - * whatever exists above that, up to what fits left of the mode switch. - */ -export const TAB_MIN = 5; -export const TAB_MAX = 8; -/** The mode switch: two halves, stage and deck. Centred on the bar. */ -export const MODE: Rect = { x: (SCREEN_W - 68) / 2, y: 3, w: 68, h: 22 }; -export const MODE_HALF_W = 34; -/** The active workspace's layout name; tapping toggles it (SUPER+L). */ -export const BADGE: Rect = { x: 326, y: 4, w: 62, h: 20 }; -/** The control centre button at the strip's right end. */ -export const CC_BUTTON: Rect = { x: 440, y: 2, w: 34, h: 24 }; - -// --------------------------------------------------------------------------- -// stage -// --------------------------------------------------------------------------- - -/** - * The launch bar across the bottom of the stage: terminal, browser, files. - * Fixed, because those three are what a remote is reached for and hunting - * for them in a menu is worse than the 32 px they cost — and with them here - * an empty workspace needs no launchers of its own. The deck has no bar: its - * bottom half is the trackpad. - */ -export const LAUNCH_BAR: Rect = { x: 0, y: SCREEN_H - 32, w: SCREEN_W, h: 32 }; - -/** Everything between the strip and the launch bar: the desktop miniature. - * The deck ignores the bar and runs to the bottom edge. */ -export const STAGE: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: LAUNCH_BAR.y - STRIP.h }; -export const DECK_AREA: Rect = { x: 0, y: STRIP.h, w: SCREEN_W, h: SCREEN_H - STRIP.h }; -/** Horizontal travel on empty stage that switches workspace. */ -export const SWIPE_PX = 48; -/** Tiles shorter than this drop their title line. */ -export const TILE_TWO_LINES_H = 40; -/** Fixed pool of tile slots (protocol WINDOWS_MAX). */ -export const TILE_SLOTS = 24; - -/** The corner a drag resizes the window by: what it looks like, and how far - * around it a finger counts. The reach is what makes it usable — the mark - * is 18 px because a bigger one would cover the tile's own content, while - * the target it stands for is 34 px square. */ -export const TILE_GRIP = 18; -export const TILE_GRIP_REACH = 16; -/** Tiles smaller than this carry no corner: their whole face is worth more - * as focus and hold than as a resize handle. */ -export const TILE_GRIP_MIN = 72; - -export function tileGripRect(tile: Rect): Rect { - return { x: tile.x + tile.w - TILE_GRIP, y: tile.y + tile.h - TILE_GRIP, w: TILE_GRIP, h: TILE_GRIP }; -} - -/** The corner's touch target: the mark, grown by TILE_GRIP_REACH up and to - * the left and a little past the tile's own edge. */ -export function tileGripTarget(tile: Rect): Rect { - const grip = tileGripRect(tile); - return { - x: grip.x - TILE_GRIP_REACH, - y: grip.y - TILE_GRIP_REACH, - w: grip.w + TILE_GRIP_REACH + 4, - h: grip.h + TILE_GRIP_REACH + 4, - }; -} - -export function tileGripHit(x: number, y: number, tile: Rect): boolean { - if (tile.w < TILE_GRIP_MIN || tile.h < TILE_GRIP_MIN) return false; - return within(x, y, tileGripTarget(tile)); -} - -/** One of the launch bar's equal cells. */ -export function launchCellRect(i: number, count: number): Rect { - const w = Math.floor(LAUNCH_BAR.w / count); - return { x: i * w, y: LAUNCH_BAR.y, w: i === count - 1 ? LAUNCH_BAR.w - i * w : w, h: LAUNCH_BAR.h }; -} - -export function launchCellAt(x: number, y: number, count: number): number | null { - if (!within(x, y, LAUNCH_BAR)) return null; - for (let i = 0; i < count; i += 1) if (within(x, y, launchCellRect(i, count))) return i; - return null; -} - -// --------------------------------------------------------------------------- -// the ball (the menu's handle: floats, snaps to a side edge) -// --------------------------------------------------------------------------- - -export const BALL = 44; -export const BALL_MARGIN = 6; -export const BALL_Y_MIN = STRIP.h + 6; -/** It never sits on the launch bar: those three targets are fixed and the - * ball would cover one of them. */ -export const BALL_Y_MAX = LAUNCH_BAR.y - BALL - 4; -/** - * Where it starts: the LEFT edge, low. The right edge is where a tile's - * resize corner lives — in a dwindle layout the rightmost window's corner - * lands under a right-edge ball exactly — and a handle that covers a - * control is worse than one on the hand's weaker side. It can be dragged - * anywhere either way. - */ -export const BALL_HOME = { x: BALL_MARGIN, y: BALL_Y_MAX }; - -/** Released anywhere, the ball goes to the nearer side edge and keeps its - * height, clamped under the strip. */ -export function ballSnap(x: number, y: number): { x: number; y: number } { - const left = x + BALL / 2 < SCREEN_W / 2; - return { - x: left ? BALL_MARGIN : SCREEN_W - BALL - BALL_MARGIN, - y: Math.max(BALL_Y_MIN, Math.min(BALL_Y_MAX, Math.round(y))), - }; -} - -export function ballHit(x: number, y: number, ball: { x: number; y: number }): boolean { - return within(x, y, { x: ball.x - 4, y: ball.y - 4, w: BALL + 8, h: BALL + 8 }); -} - -// --------------------------------------------------------------------------- -// popup (the classic one: a container of rows over the point it answers) -// --------------------------------------------------------------------------- - -export const POPUP_W = 184; -/** A held tile answers with four rows (stage.tsx). */ -export const TILE_POPUP_ROWS = 4; -export const POPUP_ROW_H = ROW_H.popup; -export const POPUP_PAD = SPACE.md; -/** Distance between the anchor point and the popup's near edge. Short: the - * popup opens under a held finger and the first row has to be reachable - * without letting go. */ -export const POPUP_GAP = 8; - -export interface Popup extends Rect { - /** The popup opened below its anchor rather than above it. */ - below: boolean; -} - -/** Place a popup of `rows` rows at an anchor point, inside `bounds`: below - * the anchor when there is room, above otherwise, centred on it and pushed - * in from the sides. */ -export function placePopup(anchorX: number, anchorY: number, rows: number, bounds: Rect = STAGE): Popup { - const w = POPUP_W; - const h = rows * POPUP_ROW_H + POPUP_PAD * 2; - const below = anchorY + POPUP_GAP + h <= bounds.y + bounds.h - 6; - const y = below ? anchorY + POPUP_GAP : anchorY - POPUP_GAP - h; - const x = Math.max(bounds.x + 6, Math.min(bounds.x + bounds.w - 6 - w, Math.round(anchorX - w / 2))); - return { x, y: Math.max(bounds.y + 6, y), w, h, below }; -} - -export function popupRowAt(p: Popup, x: number, y: number): number | null { - if (!within(x, y, p)) return null; - const i = Math.floor((y - p.y - POPUP_PAD) / POPUP_ROW_H); - const rows = Math.round((p.h - POPUP_PAD * 2) / POPUP_ROW_H); - return i >= 0 && i < rows ? i : null; -} - -// --------------------------------------------------------------------------- -// control centre (hangs from the strip's right end) -// --------------------------------------------------------------------------- - -export const CC: Rect = { x: SCREEN_W - 8 - 268, y: STRIP.h + 4, w: 268, h: 210 }; -/** Tiles, relative to the card. */ -export const CC_WIFI: Rect = { x: 10, y: 10, w: 130, h: 52 }; -export const CC_SHOT: Rect = { x: 148, y: 10, w: 54, h: 52 }; -export const CC_NIGHT: Rect = { x: 206, y: 10, w: 52, h: 52 }; -export const CC_MEDIA: Rect = { x: 10, y: 70, w: 248, h: 48 }; -export const CC_MEDIA_BTN_W = 36; -/** prev, play, next — the right end of the media row. */ -export const CC_MEDIA_BTN_X = [150, 186, 222] as const; -/** Slider rows: brightness, volume. */ -export const CC_ROW_Y = [126, 166] as const; -export const CC_ROW_H = 36; -export const CC_ICON_X = 10; -export const CC_ICON_W = 36; -export const CC_TRACK_X = 54; -export const CC_TRACK_W = 160; -export const CC_TRACK_H = 10; -export const CC_VALUE_X = 220; -/** Frames the card lingers after a hold-and-slide release. */ -export const CC_LINGER_FRAMES = 70; - -export type CcHit = - | { kind: "wifi" } - | { kind: "shot" } - | { kind: "night" } - | { kind: "media" } - | { kind: "prev" } - | { kind: "play" } - | { kind: "next" } - | { kind: "icon"; row: 0 | 1 } - | { kind: "track"; row: 0 | 1 } - | { kind: "card" } - | null; - -/** What is under a point on the control centre. */ -export function ccHit(x: number, y: number, card: Rect = CC): CcHit { - if (!within(x, y, card)) return null; - const lx = x - card.x; - const ly = y - card.y; - const inside = (r: Rect) => lx >= r.x && lx < r.x + r.w && ly >= r.y && ly < r.y + r.h; - if (inside(CC_WIFI)) return { kind: "wifi" }; - if (inside(CC_SHOT)) return { kind: "shot" }; - if (inside(CC_NIGHT)) return { kind: "night" }; - if (inside(CC_MEDIA)) { - const buttons = ["prev", "play", "next"] as const; - for (let i = 0; i < 3; i += 1) { - if (lx >= CC_MEDIA_BTN_X[i]! && lx < CC_MEDIA_BTN_X[i]! + CC_MEDIA_BTN_W) return { kind: buttons[i]! }; - } - return { kind: "media" }; - } - for (const row of [0, 1] as const) { - const top = CC_ROW_Y[row] - 3; - if (ly < top || ly >= top + CC_ROW_H + 6) continue; - if (lx >= CC_ICON_X && lx < CC_ICON_X + CC_ICON_W) return { kind: "icon", row }; - if (lx >= CC_TRACK_X - 8) return { kind: "track", row }; - } - return { kind: "card" }; -} - -/** The slider row a sliding finger is on: brightness above the midline - * between the rows, volume below; null while the finger is still up among - * the tiles. */ -export function ccRowAt(y: number, card: Rect = CC): 0 | 1 | null { - const ly = y - card.y; - if (ly < CC_ROW_Y[0] - 10) return null; - const mid = (CC_ROW_Y[0] + CC_ROW_Y[1] + CC_ROW_H) / 2; - return ly < mid ? 0 : 1; -} - -/** A horizontal drag of `dx` px changes a level by this (full track = 0..1). */ -export function trackDelta(dx: number): number { - return dx / CC_TRACK_W; -} - -/** Fill width for a level, in track px. */ -export function trackFill(level: number): number { - return Math.round(clamp01(level) * CC_TRACK_W); -} - -// --------------------------------------------------------------------------- -// the menu sheet (Omarchy's menu, centred, one column, scrolling) -// --------------------------------------------------------------------------- - -export const SHEET: Rect = { x: 68, y: 34, w: 344, h: 274 }; -export const SHEET_HEAD_H = 36; -export const SHEET_PAD = SPACE.lg; -export const SHEET_ROW_H = ROW_H.list; -export const SHEET_RADIUS = RADIUS.card; -/** The scrolling list's viewport. */ -export const SHEET_LIST: Rect = { - x: SHEET.x + SHEET_PAD, - y: SHEET.y + SHEET_HEAD_H, - w: SHEET.w - 2 * SHEET_PAD, - h: SHEET.h - SHEET_HEAD_H - SHEET_PAD, -}; -export const SHEET_BACK: Rect = { x: SHEET.x + 4, y: SHEET.y + 2, w: 44, h: 32 }; -export const SHEET_CLOSE: Rect = { x: SHEET.x + SHEET.w - 48, y: SHEET.y + 2, w: 44, h: 32 }; - -/** Row `i`, in LIST space (before the scroll offset). One column: a menu - * reads as a list, and two columns of eleven-character labels did not. */ -export function sheetRowRect(i: number): Rect { - return { x: 0, y: i * SHEET_ROW_H, w: SHEET_LIST.w, h: SHEET_ROW_H }; -} - -export function sheetContentH(count: number): number { - return count * SHEET_ROW_H; -} - -export function sheetMaxScroll(count: number): number { - return Math.max(0, sheetContentH(count) - SHEET_LIST.h); -} - -/** Row index under a screen point, given the list's scroll offset. */ -export function sheetRowAt(x: number, y: number, count: number, scroll: number): number | null { - if (!within(x, y, SHEET_LIST)) return null; - const i = Math.floor((y - SHEET_LIST.y + scroll) / SHEET_ROW_H); - return i >= 0 && i < count ? i : null; -} - -// --------------------------------------------------------------------------- -// trackpad -// --------------------------------------------------------------------------- - -/** Pointer gain by finger speed (px per frame on the pad): slow strokes are - * precise, fast ones cross the laptop's screen in one swipe. */ -export function pointerGain(speed: number): number { - return Math.max(1.2, Math.min(4, 1.2 + speed * 0.14)); -} - -/** Two-finger travel to scroll distance. */ -export const SCROLL_GAIN = 1.6; - -// --------------------------------------------------------------------------- -// helpers -// --------------------------------------------------------------------------- - -export function within(x: number, y: number, r: Rect): boolean { - return x >= r.x && x < r.x + r.w && y >= r.y && y < r.y + r.h; -} - -export function clamp01(v: number): number { - return v < 0 ? 0 : v > 1 ? 1 : v; -} - -// --------------------------------------------------------------------------- -// the desktop on the stage -// --------------------------------------------------------------------------- - -export interface Fit { - /** Monitor logical px -> stage px. */ - s: number; - /** Stage-space origin of the monitor's top-left. */ - ox: number; - oy: number; - /** The fitted monitor rectangle on screen. */ - rect: Rect; -} - -/** Fit a monitor into the stage preserving aspect, centred. */ -export function fitMonitor(mon: { w: number; h: number }, stage: Rect = STAGE): Fit { - const w = Math.max(1, mon.w); - const h = Math.max(1, mon.h); - const s = Math.min(stage.w / w, stage.h / h); - const fw = Math.round(w * s); - const fh = Math.round(h * s); - const ox = stage.x + Math.floor((stage.w - fw) / 2); - const oy = stage.y + Math.floor((stage.h - fh) / 2); - return { s, ox, oy, rect: { x: ox, y: oy, w: fw, h: fh } }; -} - -/** One window's tile on the stage, integer px, at least 8x8. */ -export function tileRect(win: WinInfo, fit: Fit): Rect { - const x = Math.round(fit.ox + win.x * fit.s); - const y = Math.round(fit.oy + win.y * fit.s); - const x2 = Math.round(fit.ox + (win.x + win.w) * fit.s); - const y2 = Math.round(fit.oy + (win.y + win.h) * fit.s); - return { x, y, w: Math.max(8, x2 - x), h: Math.max(8, y2 - y) }; -} - -/** Stage px back to the monitor's logical px (a dragged floating window). */ -export function stageToMonitor(x: number, y: number, fit: Fit): { x: number; y: number } { - return { x: Math.round((x - fit.ox) / fit.s), y: Math.round((y - fit.oy) / fit.s) }; -} - -/** Windows shown on the stage: the active workspace's, tiled first so a - * floating window paints over the tiling it covers. */ -export function stageWindows(state: HostState): WinInfo[] { - const tiled = state.win.filter((w) => w.ws === state.active && !w.f); - const floating = state.win.filter((w) => w.ws === state.active && w.f); - return [...tiled, ...floating]; -} - -/** The window whose tile contains the point, topmost (last painted) first. */ -export function windowAt( - x: number, - y: number, - tiles: readonly { a: string; rect: Rect }[], -): string | null { - for (let i = tiles.length - 1; i >= 0; i -= 1) { - if (within(x, y, tiles[i]!.rect)) return tiles[i]!.a; - } - return null; -} - -/** Direction from `from` to `to` by their centres — what `swapwindow` needs. */ -export function swapDirection(from: Rect, to: Rect): Direction { - const dx = to.x + to.w / 2 - (from.x + from.w / 2); - const dy = to.y + to.h / 2 - (from.y + from.h / 2); - if (Math.abs(dx) >= Math.abs(dy)) return dx >= 0 ? "r" : "l"; - return dy >= 0 ? "d" : "u"; -} - -// --------------------------------------------------------------------------- -// strip tabs -// --------------------------------------------------------------------------- - -export interface Tab { - id: number; - /** Window count (0 for the trailing empty tab). */ - n: number; - x: number; -} - -/** - * The strip's tabs: 1..N, contiguous, N at least TAB_MIN and at most - * TAB_MAX. Hyprland only reports the workspaces that exist — it destroys an - * empty one — so a list built from the snapshot alone shrank to whatever - * had windows. The numbers Omarchy binds are addressable regardless, and a - * tab for one that does not exist yet is exactly how you get there. - */ -export function stripTabs(ws: readonly WsInfo[], active: number): Tab[] { - let last = TAB_MIN; - for (const w of ws) if (w.id > last && w.id <= TAB_MAX) last = w.id; - if (active > last) last = Math.min(active, TAB_MAX); - const tabs = Array.from({ length: last }, (_, i) => ({ - id: i + 1, - n: ws.find((w) => w.id === i + 1)?.n ?? 0, - x: STRIP.x + TAB_X0 + i * TAB_W, - })); - // Omarchy binds ten workspaces but only TAB_MAX tabs fit beside the mode - // switch. Standing on one of the high ones, the last tab carries its - // number rather than leaving the strip with nothing lit. - if (active > TAB_MAX) { - tabs[tabs.length - 1] = { - id: active, - n: ws.find((w) => w.id === active)?.n ?? 0, - x: tabs[tabs.length - 1]!.x, - }; - } - return tabs; -} - -export function tabAt(x: number, tabs: readonly Tab[]): Tab | null { - for (const tab of tabs) if (x >= tab.x && x < tab.x + TAB_W) return tab; - return null; -} - -// --------------------------------------------------------------------------- -// motion -// --------------------------------------------------------------------------- - -/** Per-frame ease toward a target (the pocket-shell EASE), snapping when - * within half a pixel so idle frames settle to exact integers. */ -export const EASE = 0.35; -export function approach(current: number, target: number): number { - const next = current + (target - current) * EASE; - return Math.abs(target - next) < 0.5 ? target : next; -} - -/** Ease a 0..1 progress toward 1: fast start, soft landing. */ -export function easeProgress(t: number): number { - const next = t + (1 - t) * 0.28; - return next > 0.995 ? 1 : next; -} - -/** Stagger: item `i` of `count` runs its own 0..1 inside the shared progress. */ -export function stagger(t: number, i: number, count: number, spread = 0.5): number { - const start = count <= 1 ? 0 : (i / (count - 1)) * spread; - const span = 1 - spread; - return clamp01((t - start) / span); -} diff --git a/apps/pocket-remote/main.tsx b/apps/pocket-remote/main.tsx deleted file mode 100644 index 9cdf986df..000000000 --- a/apps/pocket-remote/main.tsx +++ /dev/null @@ -1,6 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// @title Pocket Remote -import PocketRemote from "./app.tsx"; -import { mount } from "@pocketjs/framework/solid"; - -mount(() => ); diff --git a/apps/pocket-remote/media/connect.png b/apps/pocket-remote/media/connect.png deleted file mode 100644 index b659b87b9823b061b8f97cff0afb812c94714cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8371 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 H;@W=!&JS+1 diff --git a/apps/pocket-remote/media/control-centre.png b/apps/pocket-remote/media/control-centre.png deleted file mode 100644 index e99fb8446fea0db363ef20676778712e93aeeb01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15647 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 w zjm`-G$tP~NQv_mj2lkaeL+lB(1*v)`*0)~_?*1^k-rvfQ&L~(erIMi8d z@vx(*?4eX(CI?ahVTjs?p*kQp@)5(>1y2AWNhs zFch=m?61vI9W5bjKTUsPDN>Gsy^s^I1b_UCHVMc6Hmq=IdqX}HDN5YEtX+2&iV`LD z+p>Q1M-2J(V_InqsXzggdxQW6W8M;cZ7qhXGGHOl0A|M&wz&9UAOV_}Xr461tUx!`1$Xq!OLuxtF?CqeZN{^!GyHUun}<Rc%>9~Ov>*24uS>FB{H$f1o8Tm1n zs*@2cGRCwoxabO9zjf0hyEApoXA^;)He@f9VL{xsEaLRMv%Nn?iV!a2htoa#@eU9A zi@zP@PoTGr9^~AKl9h!H7*dDp969bBK?r0|D%pBu9VC!xZs)IDGsff2`Etx(Z?K;( z&Mm;Vb$yQb9;)A(A5j~LECV=Bp`krF1Yrb7bv&ywe910xHu^nKdgr0Z*f93og&K1n zAXBzP9#-s#G1!mk|GhQLVLLE5w#E;U?H3PdPI^EaR2|BK;>?wUv8OMmtmnTgB~RWR z+c-^P<7ffcP>M9lU$aKcUsJfEey<~c-S$fjM``nKu}}zTJ(hfb>ETK1<&DRuB3^nl zq#Kg*nh;2m>x`T^jSOhkw~{^LNH57gTCn}ePLtx~swb3h{gWhE6O@5)7GP!3ZlcWx z8$$a{bzS;Z$Z!dzY_7Dl0Xk0F-WTE^WToC1lN}HI&W#BBtb)n=Rq2}1SQawUel)#_}{P6@N4xm;7B|@$}+lI3i4rFASw3@WYvKp z8{^lws`G}A4A+=zGs&~Wth{K4R8VghfRO$oofa@oNeWZ3q~Tc`15xuW)Qpn3o0#{cg~?d3+9 z|Ah+U94^klp=3P<2Zv5N_yVF7AxsbUu(~}62?A7V@Mqwloz5M#QqzhE8a2|0O3&82 zVH2g(7~D>{<047*31n^%k6H7H{-2tnX2AxEzj{}~-`s3@HG_d9RQ}=dSJMDU)iNS& zKpMR+6p}OkHX#a?^Q=$jpW<_s;)xUa#eeQEUxyx-qZ`8*QV2elqx}9~3--Se|EK~` zrSz`Z7D?VWebZIjxBs1XD1-z+A^w|dc;6vP2&{EKs8Av{%I6b}$2a5lTkh4zMo<5R z6-zsiAOAa%bL1!u)>56B_s(A>>vuFOLIS^D5O=`lCovS>%O=JLA1Ex4$}5Iih+iu&SX26Q6vXSPq^MAb zDc0QtI~l09u5;_!rX{g3Xft*8+P|KLb3k~bxicx- z=C&b}CrbF9KFHN@(&5Y84c;+tmGa-NyIlW% zgXG0N()>!5n8T2K_%*rG%C%~b=Knx~+c#Oape&Irfb2Ske!gc5XID+Q`l_>N|1Psd zDAa1vjF7!R$FglznfvgL>h9bA#eg@(f{^#+dO+huf%c;mC+KTq18hIk9=VWNOJ zgPmGT-;%>c_TH?z<&Pg8SrB3;tg@>TNLsZ9g$FDngoTwK3Fz+1W)sOnNNx*LR13yP zPQCS*k(ITRg$N}<0{fWCQl2NQVA(Xk!p}U`w)>wAQK62=xq1V%o20afax!yK%@PBu8RlupMM?lqU zu8grRGRX$l777KLj8XwNu^m#?NMF%#tj~Gu`&;5N^r*fFFpaT*;oKtpA=8L|R;OEz zWg0zWH3^UW3hS*1I(&PrB2XkiI}^g3WjoOhvTMwBB=-nN-~2i!PF6ZknpD)}_g)v& z_KsG34_P#oU1Tcm{4CU7U>B4EZY>-QRYcqk6LVB>U(-(8xYpw=#JyrE4vc^f8O-M&w{EROjP17N%ER)gcY3f=bgV zbWpa^mH1GBq_mB0flVLfexgKYP6~vI;}M5uxj*+WhVrN zXOi#9S(ODp_*IRkhpLp&>$=7y47aIika=Oh$Dg z%E}oegYeh`ekuJ@X$gt-RhEZAI~<&^C%C4C9`<3?OT0MOC{t8(cv080f?*=siC5@q zz{mXchs@bvQxxHLZjhY~Boc0cH4r)YTja$pKNjQ+wSz*RFp2*vSK?87U{r|-h-T!c z%nG-r7*D%DXfZX`6L?nn&)V#OwIduQsZCtP8?}!4(g3^`qbx#mqi3#<`^uj!k9Pbt++OqPk@nEA|h2y@)6!Ky*#hqv|ptLqXPCt#V%4NBU z7I%y4AkIil0gionKX#Clfgb8Gih)3jd&I?iHD5WA1Z`jFIPLUVF$&wDWS| zf-_=DdV$NFo8%!KzVfr6)VYe|{R@;nhC?AwUUd#*10aQ4(^d_48ZABY*#p9s5a^MX zj{TTFd{LXOkF0dhRpav=C=JWaxBCHJmj#ScH3nYzw$=RVHk<{D#l5TS_h8`KbgEm0 zbG>=|-VBL~wbs1c8$cpnGQycaw_{Edk6&0tpmoCQ{_qb!tUL|YB*g#Rc$(9GB!rxL zNsY|12fzTYD?200`MP5Od!mRm&8;;mRRXkaCE#=cT_(&cWQk33_$>`oK25tVG17;a zBv*YOZ+8{Kl0Tt{ywBxu82}QT>-`LCMX6DSZI7KB3{u?-v}Hud@sK5*6;>Ovoy8^D{^$y%9`DBg9fuZw4(x*SADP~+}2`6=Nym9*Zg$0 z+vnQu+)R}LM?c*(;6k&BTkAb=G@)*R`raHw-|a>G02I`YV-B{GTkeTClA->c zG3XTnvlv?whoMB&m^!xZL%gm4N+=YRNRKmOTZHVHu(TQi6#THE!}GbL6%m6RUS>(9 z&|ne_(;>~rkmztAh>kaEJcZ^!Ytd``*9yp>AOyCGBmui#3U-P}GOzX4Cm9*hP?Td& z)}p`EiT-W}Z#Uu!JUW$7AVk8{Gd$@s&Tv@TaqG^kBD$mYarrxatB{jt;7=04Ip`pY zzZMsUUJ`5nUWJE>jzZ${9_d>hvPT6uzk&7z7>O`a!<|9zDQayd=-hXJ-}*PfS~9O% zE>6yC^@BsFi_Qz0$&RBTH_=3BeseoYD2lQsciuBj5d;W#<$Vv7^VpD_=McE;*NY># zdyq@;y?_w(gjPc?oK8gE9Vd=XD#uNWwQ^FdVHbEh!^FLO+d~+kicfV%Wm+< z=SUe@qj@~lB9wafWDa4IxZyg=1i2GOMgjDExIjxT4$M5qThx`Xvcq%+GI`EsXXS9R z2?6|NjUI#$oPo53w4xLKnLp6IGWI=FuNN=*893yWeWPG$=;%z<6#kv74ZNsFB)^bb zW5#B+MB`TzS}3^JPQHfxnKQuFQA$68vRRT<^1Foyl%9O-PzP;fx$whMnvCPN9d-q@ zlfUm9iFujFaHwzZD%mKbhj^u^*j;WLEIzq?boHyHqn{3}9&<3Vd2m3XY8oTHqh zXK3yS|6Qo2wJ&Qne0X3*SB}rbwPe`&a1>gPnW`wc$f_xEG+wI3Q5*=`$xI)XPO;~y zYN#4=_8J?1d(VCKL)T_Pc6>T$y9thd$+yi7&CQx~r(@y!w5-HI&VH+Li>oEUpHJh3 z#)t-&rVSMg>qHJ$4PH+)&CUCp6GQv=oJFG)S5|tOAzHB&0X;lYN>^tAOCtrqKVM7n zlaatahLTifODdFZ+$81mVxi6Wds~GMGv#3U!}34(q1PgAL7L31e24t}KZVs>ARO{# zA1BKu|MR^SXef;0|66sv6(JRZhJ-A(h<`n51d^DH7i1EDOS7YANvMlWz>%(K+@qHM zDn>4sm|l+%hy|)}r=pPvjm<%R#~xy*UDOk&^Jo$jyogt(XD^YRb_SxuRd;@;_RAlC z_w0wV5^={<@+mKhxu)xhreVLZ*8uf{!y40EG0`RG>Xl@5(5tyUej(OwPxD3Mm*dKM z_k*LU_Y-CY2LtRSV$+GlhSg`!X!q0Y%2}~aI58R9fc7ImM04$Xz_A2#B%j9$0BP9p z9=pTwdtcWFJZ^IV1V3uX+ug7~kO5Zg)QSo`l!i^MCi;RV zycaUBov)~TR$e@EucD{=-~^D@^=0b@nFU#GUZulR&#{o-5x04u!4FWqEejoXh+j>U zoAD9oupo-P2pJ7-&3{hFxp?y_Z|e1jV#QED2BjThRF8EM$@LDtl@R-&PMQ>VksMdm z3446~S-YWC&o=6|8z$r}0w!SmGB$*t+KHh8?P2R|^`4n^%KPGV{u5D>6(1y(g%0;^ z)N>{SR>NlN-);{so%5i{ndU-E%jby_qk!?i>vsi;F{c(m73cAvB5eX+zb^!zr9s(Z zK1Si)d9!3ZqCBRxw9C!|DOpi~x;PiWr*?2{ad$N6%Yx*MqZ<{Y72+W&AC3pN7_W~K zuO~ud4+ikzzQnv(N!P=CDj@%0`ZHVoNveQo%H;BurQYz9%M^Mo`>&iZ`Av71#HQzL zf0TbYOr)JVesFy17k&M9F(0?hfTo^Dc+=;Yo321~{bY-An8PUx?&8_(BbRea0`+C8 zJMTq-#z9={o#T_c`h+OL>FSesr<+`3!liWWMjOIKi!HmhPd*$wbD_5}ClbZ(ggu=$ z%j=*5X778A0SMgjG6OMy%v6EDnzBA{UGKxTmmxArkPkCmH&9*@x~Z;r&~`jDJKyz% z<#`0LEdEA}g8Xr7utFs_!!vhNi7J_Y=R;ks+g{O#YLhlS#g`PJUR89GX{wqkJM){^OzJ5P~1yG(?X zm5DXiiU;L&tC5sAM`9B1r&m^|h_malm(`s1t4B^b1IS_W;~RBPlH9vm`{^K>N@ZP* ztAGui#xsxv8`o3$!WR8OEX>L#rTN#s8^PVY%n=xQH8@1o0PGBpy)vyR> zVNJ1I7b*$_n$GL8<%Y#49cpTbs+~kvXUQpKf_#`7MM$b8@|To` zTB{>zaLD?Ln`hf^0{JwhbAwN`j%4CH97L-SSWNeJ-1-C|T5SFql)8-&JJ#E~19t@> ziVpwpP9I7PdNFCS!gKdr8O!IwXG%2NpyE3Wr9dp$eR!VIdP|)YAfP&p|Ld1J|CbMW i{vU2jsVi_DstZhaC4o8Ym!J=y0ezjz7mBq|k^cjC*cM0t diff --git a/apps/pocket-remote/media/deck-dpad.png b/apps/pocket-remote/media/deck-dpad.png deleted file mode 100644 index 63bac229f8718986aecd63c0e8491b10a7fd12d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16230 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�h5%$q_Yk-j6fi@Vw}mf6viX{ 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 A!vFvP diff --git a/apps/pocket-remote/media/deck-drag.png b/apps/pocket-remote/media/deck-drag.png deleted file mode 100644 index aa0d8cb1e011e0150578d9f6d7dfa0afc17651b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16032 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 diff --git a/apps/pocket-remote/media/deck-variants.png b/apps/pocket-remote/media/deck-variants.png deleted file mode 100644 index 9b9b10c545edb322618a2d5473a537220b7cda04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16552 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 MCDV%)7Z8#E3r)S{g8%>k diff --git a/apps/pocket-remote/media/empty.png b/apps/pocket-remote/media/empty.png deleted file mode 100644 index 93f46a2262de48709f2fb70158ec21e7c05fb2fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9942 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 UE{t*hug0Z!)9|;V8;-yK2T|7$JOBUy diff --git a/apps/pocket-remote/media/menu-apps.png b/apps/pocket-remote/media/menu-apps.png deleted file mode 100644 index 546d918559e5804d936aa5d96845445a89410f11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11354 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 NoiILLa?C0E{{eU*M4kWu diff --git a/apps/pocket-remote/media/menu-root.png b/apps/pocket-remote/media/menu-root.png deleted file mode 100644 index ec6517469a1475fc27a6b11027f29c33c45a753f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12319 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 X;q>~CZiYBWPXWD)1{VnDQ4#+GcOg6> diff --git a/apps/pocket-remote/media/menu-toggle.png b/apps/pocket-remote/media/menu-toggle.png deleted file mode 100644 index d4a8dfcc88c072aab4ad9c604e55a7b0bf91ec63..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13339 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 YedQ;er=RD84icb!?e^88%QoTv0cH_#9smFU diff --git a/apps/pocket-remote/media/popup.png b/apps/pocket-remote/media/popup.png deleted file mode 100644 index da17d3cdedaa1c45ee68de5c01022fbb05fef0c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13328 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 diff --git a/apps/pocket-remote/menu-sheet.tsx b/apps/pocket-remote/menu-sheet.tsx deleted file mode 100644 index a5a93063f..000000000 --- a/apps/pocket-remote/menu-sheet.tsx +++ /dev/null @@ -1,262 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/menu-sheet.tsx — Omarchy's menu (SUPER + SPACE) as a -// sheet in the middle of the screen: the same rows in the same order with -// the same glyphs, one column, scrolling. A submenu opens in place with its -// title in the header and a back chevron; an action runs on the laptop and -// the sheet goes away. The `apps` provider is the exception the shell lists -// at open time, so the daemon sends the machine's applications and that row -// opens the list here; the other provider (Fonts) opens on the laptop. -// -// One column because a menu reads as a list: two columns of eleven-character -// labels made the eye jump, and Omarchy's own menu is a single column. - -import { createEffect, Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon, type Tone } from "./icons.tsx"; -import { - SHEET, - SHEET_BACK, - SHEET_CLOSE, - SHEET_HEAD_H, - SHEET_LIST, - SHEET_RADIUS, - SHEET_ROW_H, - sheetRowAt, - sheetRowRect, - within, -} from "./layout.ts"; -import { rowMetrics } from "./design.ts"; -import { MENU_DOT_EMOJI, menuTitle } from "./menu-tree.ts"; -import { APPS_ROUTE, type RemoteStore, type SheetRow } from "./store.ts"; -import { themed } from "./theme.ts"; -import { Row as UiRow } from "./ui.tsx"; - -/** Omarchy's update channels are coloured dots; the remote draws them as - * its own themed dots rather than baking four emoji. */ -function dotClass(tone: "ok" | "warn" | "danger"): string { - switch (tone) { - case "ok": - return "w-[10] h-[10] rounded-full bg-[#9ece6a]"; - case "warn": - return "w-[10] h-[10] rounded-full bg-[#e0af68]"; - default: - return "w-[10] h-[10] rounded-full bg-[#f7768e]"; - } -} - -function Row(p: { store: RemoteStore; row: SheetRow; i: number }) { - const dot = () => MENU_DOT_EMOJI[p.row.icon]; - const trailing = (): { glyph: string; tone: Tone } | null => { - if (p.row.checked) return { glyph: GLYPH.check, tone: "accent" }; - if (p.row.kind === "menu" || (p.row.kind === "provider" && p.row.id === APPS_ROUTE)) { - return { glyph: GLYPH.chevronRight, tone: "dim" }; - } - if (p.row.kind === "provider" || p.row.kind === "link") return { glyph: GLYPH.launch, tone: "dim" }; - return null; - }; - const metrics = rowMetrics(SHEET_LIST.w, SHEET_ROW_H, true); - return ( - <> - (dot() ? "" : p.row.icon || (p.row.kind === "app" ? GLYPH.apps : GLYPH.dot))} - glyphTone={() => (p.row.icon || p.row.kind === "app" ? "fg" : "dim")} - label={() => p.row.label} - trailing={trailing} - hot={() => p.store.sheet()?.hot === p.i} - /> - - - - - - - ); -} - -export function MenuSheet(p: { store: RemoteStore }) { - let veil: NodeMirror | null = null; - let card: NodeMirror | null = null; - let list: NodeMirror | null = null; - createEffect(() => { - const t = p.store.sheetT(); - if (veil) jump(veil, "opacity", t); - if (card) { - jump(card, "opacity", t); - jump(card, "scale", 0.94 + 0.06 * t); - } - }); - createEffect(() => { - if (!list) return; - const t = p.store.sheetListT(); - jump(list, "opacity", t); - jump(list, "translateX", Math.round((1 - t) * 20)); - jump(list, "translateY", -Math.round(p.store.sheetScroller.offset())); - }); - const sheet = () => p.store.sheet(); - const title = () => (sheet()?.at === APPS_ROUTE ? "Apps" : menuTitle(sheet()?.at ?? "root")); - const atRoot = () => (sheet()?.trail.length ?? 0) === 0; - const rows = () => p.store.sheetRows(); - return ( - <> - { - veil = node; - themed("surfaceVeil")(node); - }} - /> - { - card = node; - themed("surface")(node); - themed("borderMuted")(node); - }} - > - {/* Header. An overflow clip is a rectangular scissor, so a child - cannot inherit the card's rounded corners: the bar is a rounded - rect with its bottom half squared off by a plain one. */} - - - - (atRoot() ? GLYPH.menu : GLYPH.chevronLeft)} tone={() => (atRoot() ? "dim" : "fg")} size="xl" /> - - - - - {title()} - - - - - - - {/* the list: a clip over a canvas the scroller moves */} - - { - list = node; - }} - > - {(row, i) => } - - - - nothing here on this machine - - - - - - - - ); -} - -/** The sheet owns every contact while it is up: rows answer a release, the - * list pans and flings, the header goes back or closes, outside closes. A - * row's highlight is ARMED on the down edge and only shown once the finger - * has stayed put, so landing to fling no longer flashes a selection. */ -export function sheetHandlers(store: RemoteStore): GestureHandlers { - type Down = { kind: "row"; i: number } | { kind: "back" } | { kind: "close" } | { kind: "list" } | { kind: "outside" } | { kind: "card" }; - let down: Down = { kind: "card" }; - let panning = false; - const rowUnder = (x: number, y: number): number | null => sheetRowAt(x, y, store.sheetRows().length, store.sheetScroller.offset()); - return { - onDown: (c) => { - panning = false; - if (within(c.x, c.y, SHEET_BACK)) { - down = { kind: "back" }; - store.pressDown("sheet:back"); - return; - } - if (within(c.x, c.y, SHEET_CLOSE)) { - down = { kind: "close" }; - store.pressDown("sheet:close"); - return; - } - if (within(c.x, c.y, SHEET_LIST)) { - const i = rowUnder(c.x, c.y); - down = i === null ? { kind: "list" } : { kind: "row", i }; - store.sheetArm(i); - store.sheetScroller.stop(); - return; - } - if (!within(c.x, c.y, SHEET)) { - down = { kind: "outside" }; - store.closeSheet(); - return; - } - down = { kind: "card" }; - }, - onMove: (c) => { - // A finger sliding between rows without panning moves the highlight, - // so a hold-and-release lands where the eye is. - if (!panning && down.kind === "row") { - const i = rowUnder(c.x, c.y); - if (i !== null) down = { kind: "row", i }; - store.sheetArm(i); - } - }, - onUp: (c) => { - // onUp precedes onTap for one release, so the row runs here: reading - // the highlight in onTap would see it already cleared. - if (panning) { - store.sheetScroller.endDrag(-c.vy); - panning = false; - store.pressRelease(); - return; - } - const t = down; - store.pressRelease(); - store.sheetArm(null); - down = { kind: "card" }; - if (t.kind === "row") store.sheetTap(t.i); - else if (t.kind === "back") store.sheetBack(); - else if (t.kind === "close") store.closeSheet(); - }, - onPanStart: (c) => { - store.pressRelease(); - store.sheetArm(null); - if (down.kind === "row" || down.kind === "list") { - panning = true; - down = { kind: "list" }; - store.sheetScroller.beginDrag(); - store.sheetScroller.drag(-c.fdy); - } - }, - onPanMove: (c) => { - if (panning) store.sheetScroller.drag(-c.fdy); - }, - onCancel: () => { - if (panning) store.sheetScroller.endDrag(0); - panning = false; - store.pressRelease(); - store.sheetArm(null); - down = { kind: "card" }; - }, - }; -} diff --git a/apps/pocket-remote/menu-tree.ts b/apps/pocket-remote/menu-tree.ts deleted file mode 100644 index 08217e79d..000000000 --- a/apps/pocket-remote/menu-tree.ts +++ /dev/null @@ -1,60 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/menu-tree.ts — walking the baked menu (menu.ts) the way -// Omarchy's shell walks its own: children in source order, a submenu shown -// only while something under it is visible, a title that falls back to the -// label, "Go" at the root. The daemon's live conditions arrive as sets of -// ids (protocol HostMenu) and are applied here, so the table stays static. - -import { MENU, type MenuItem } from "./menu.ts"; - -export const MENU_ROOT = "root"; -/** What Omarchy titles its root menu. */ -export const MENU_ROOT_TITLE = "Go"; - -const BY_ID = new Map(); -const CHILDREN = new Map(); -for (const item of MENU) { - BY_ID.set(item.id, item); - const siblings = CHILDREN.get(item.parent); - if (siblings) siblings.push(item); - else CHILDREN.set(item.parent, [item]); -} - -export function menuItem(id: string): MenuItem | undefined { - return BY_ID.get(id); -} - -/** A row is visible unless its `when` failed; a submenu is visible only - * while one of its rows is (the shell's isVisible rule). */ -export function menuVisible(item: MenuItem, hidden: ReadonlySet, depth = 0): boolean { - if (hidden.has(item.id)) return false; - if (item.kind !== "menu" || depth > 8) return true; - const rows = CHILDREN.get(item.id) ?? []; - if (rows.length === 0) return true; - return rows.some((row) => menuVisible(row, hidden, depth + 1)); -} - -/** The rows of a submenu, in the shell's order, minus the hidden ones. */ -export function menuChildren(parent: string, hidden: ReadonlySet = new Set()): MenuItem[] { - return (CHILDREN.get(parent) ?? []).filter((item) => menuVisible(item, hidden)); -} - -export function menuTitle(id: string): string { - if (id === MENU_ROOT) return MENU_ROOT_TITLE; - const item = BY_ID.get(id); - return item ? item.title || item.label : id; -} - -/** The parent to go back to from a submenu. */ -export function menuParent(id: string): string { - return BY_ID.get(id)?.parent ?? MENU_ROOT; -} - -/** The four coloured-dot emoji Omarchy uses for its update channels; the - * remote draws these as themed dots rather than baking emoji. */ -export const MENU_DOT_EMOJI: Readonly> = { - "🟢": "ok", - "🟡": "warn", - "🟠": "warn", - "🔴": "danger", -}; diff --git a/apps/pocket-remote/menu.ts b/apps/pocket-remote/menu.ts deleted file mode 100644 index a4924ccd5..000000000 --- a/apps/pocket-remote/menu.ts +++ /dev/null @@ -1,354 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/menu.ts — GENERATED by `bun tools/pocket-remote.ts menu` -// from Omarchy 4.0.1-1's omarchy-menu.jsonc (sha256 42eafef634bb). Do not edit; -// regenerate against the machine after an Omarchy update. -// -// The device's copy of Omarchy's menu tree: every row's id, parent, kind, -// icon, label and title, in the shell's own order. Icons are the Nerd Font -// glyphs the file spells (written literally so the build's codepoint scan -// bakes them); rows whose icon lives in Omarchy's private logo font carry a -// Material stand-in. `when` and `checked` mark rows the daemon evaluates -// live — it sends the hidden and the checked ids, the table stays static. - -export type MenuKind = "action" | "menu" | "link" | "provider"; - -export interface MenuItem { - id: string; - /** "root" for a top-level row. */ - parent: string; - kind: MenuKind; - icon: string; - label: string; - /** Header when the submenu is open; defaults to label. */ - title?: string; - /** Visibility depends on a condition the daemon reports. */ - when?: true; - /** A tick depends on a condition the daemon reports. */ - checked?: true; -} - -export const MENU_OMARCHY_VERSION = "4.0.1-1"; -export const MENU_SOURCE_DIGEST = "42eafef634bb"; - -export const MENU: readonly MenuItem[] = [ - { id: "apps", parent: "root", kind: "provider", icon: "󰀻", label: "Apps" }, - { id: "learn", parent: "root", kind: "menu", icon: "󰧑", label: "Learn" }, - { id: "trigger", parent: "root", kind: "menu", icon: "󱓞", label: "Trigger" }, - { id: "style", parent: "root", kind: "menu", icon: "", label: "Style" }, - { id: "setup", parent: "root", kind: "menu", icon: "", label: "Setup" }, - { id: "install", parent: "root", kind: "menu", icon: "󰉉", label: "Install" }, - { id: "remove", parent: "root", kind: "menu", icon: "󰭌", label: "Remove" }, - { id: "update", parent: "root", kind: "menu", icon: "", label: "Update" }, - { id: "about", parent: "root", kind: "action", icon: "", label: "About" }, - { id: "system", parent: "root", kind: "menu", icon: "", label: "System" }, - { id: "system.screensaver", parent: "system", kind: "action", icon: "󱄄", label: "Screensaver" }, - { id: "system.lock", parent: "system", kind: "action", icon: "", label: "Lock" }, - { id: "system.suspend", parent: "system", kind: "action", icon: "󰒲", label: "Suspend", when: true }, - { id: "system.hibernate", parent: "system", kind: "action", icon: "󰤁", label: "Hibernate", when: true }, - { id: "system.logout", parent: "system", kind: "action", icon: "󰍃", label: "Logout" }, - { id: "system.reboot", parent: "system", kind: "action", icon: "󰜉", label: "Reboot" }, - { id: "system.shutdown", parent: "system", kind: "action", icon: "󰐥", label: "Shutdown" }, - { id: "learn.keybindings", parent: "learn", kind: "action", icon: "", label: "Keybindings" }, - { id: "learn.omarchy", parent: "learn", kind: "action", icon: "", label: "Omarchy" }, - { id: "learn.hyprland", parent: "learn", kind: "action", icon: "", label: "Hyprland" }, - { id: "learn.arch", parent: "learn", kind: "action", icon: "󰣇", label: "Arch" }, - { id: "learn.neovim", parent: "learn", kind: "action", icon: "", label: "Neovim" }, - { id: "learn.bash", parent: "learn", kind: "action", icon: "󱆃", label: "Bash" }, - { id: "learn.tmux-keybindings", parent: "learn", kind: "action", icon: "", label: "Tmux" }, - { id: "learn.herdr-keybindings", parent: "learn", kind: "action", icon: "", label: "Herdr" }, - { id: "learn.community", parent: "learn", kind: "action", icon: "󰙯", label: "Community" }, - { id: "trigger.emoji", parent: "trigger", kind: "action", icon: "", label: "Emoji" }, - { id: "trigger.reminder", parent: "trigger", kind: "menu", icon: "󰢌", label: "Reminder" }, - { id: "trigger.capture", parent: "trigger", kind: "menu", icon: "", label: "Capture" }, - { id: "trigger.capture.screenshot", parent: "trigger.capture", kind: "action", icon: "", label: "Screenshot" }, - { id: "trigger.capture.screenrecord.stop", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "Stop Screenrecording", when: true }, - { id: "trigger.capture.screenrecord", parent: "trigger.capture", kind: "menu", icon: "", label: "Screenrecord" }, - { id: "trigger.capture.text", parent: "trigger.capture", kind: "action", icon: "󰴑", label: "Text" }, - { id: "trigger.capture.qr", parent: "trigger.capture", kind: "action", icon: "󰐲", label: "QR Code" }, - { id: "trigger.capture.color", parent: "trigger.capture", kind: "action", icon: "󰃉", label: "Color" }, - { id: "trigger.capture.screenrecord.no-audio", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With no audio" }, - { id: "trigger.capture.screenrecord.desktop-audio", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop audio" }, - { id: "trigger.capture.screenrecord.microphone", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop + microphone audio" }, - { id: "trigger.capture.screenrecord.webcam", parent: "trigger.capture.screenrecord", kind: "action", icon: "", label: "With desktop + microphone audio + webcam", when: true }, - { id: "trigger.transcode", parent: "trigger", kind: "action", icon: "󰧸", label: "Transcode" }, - { id: "trigger.share", parent: "trigger", kind: "menu", icon: "", label: "Share" }, - { id: "trigger.toggle", parent: "trigger", kind: "menu", icon: "󰔎", label: "Toggle" }, - { id: "trigger.hardware", parent: "trigger", kind: "menu", icon: "", label: "Hardware" }, - { id: "trigger.tests", parent: "trigger", kind: "menu", icon: "󰓅", label: "Speed Test" }, - { id: "trigger.hardware.laptop-display", parent: "trigger.hardware", kind: "action", icon: "󰛧", label: "Laptop Display", when: true }, - { id: "trigger.hardware.mirror-display", parent: "trigger.hardware", kind: "action", icon: "󰍹", label: "Mirror Display", when: true }, - { id: "trigger.hardware.hybrid-gpu", parent: "trigger.hardware", kind: "action", icon: "", label: "Hybrid GPU", when: true }, - { id: "trigger.hardware.touchpad", parent: "trigger.hardware", kind: "action", icon: "󰟸", label: "Touchpad", when: true }, - { id: "trigger.hardware.touchpad-haptics", parent: "trigger.hardware", kind: "menu", icon: "󰌌", label: "Touchpad Haptics" }, - { id: "trigger.hardware.touchpad-haptics.low", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "low", when: true, checked: true }, - { id: "trigger.hardware.touchpad-haptics.mid", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "mid", when: true, checked: true }, - { id: "trigger.hardware.touchpad-haptics.high", parent: "trigger.hardware.touchpad-haptics", kind: "action", icon: "󰌌", label: "high", when: true, checked: true }, - { id: "trigger.hardware.touchscreen", parent: "trigger.hardware", kind: "action", icon: "󰆽", label: "Touchscreen", when: true }, - { id: "trigger.reminder.set", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Set one" }, - { id: "trigger.reminder.show", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Show all" }, - { id: "trigger.reminder.clear", parent: "trigger.reminder", kind: "action", icon: "󰢌", label: "Clear all" }, - { id: "trigger.share.clipboard", parent: "trigger.share", kind: "action", icon: "", label: "Clipboard" }, - { id: "trigger.share.file", parent: "trigger.share", kind: "action", icon: "", label: "File" }, - { id: "trigger.share.folder", parent: "trigger.share", kind: "action", icon: "", label: "Folder" }, - { id: "trigger.share.receive", parent: "trigger.share", kind: "action", icon: "󰥦", label: "Receive" }, - { id: "trigger.toggle.idle-lock", parent: "trigger.toggle", kind: "action", icon: "󰅶", label: "Stay Awake" }, - { id: "trigger.toggle.notifications", parent: "trigger.toggle", kind: "action", icon: "󰂛", label: "Notifications" }, - { id: "trigger.toggle.crash-capture", parent: "trigger.toggle", kind: "action", icon: "󱚡", label: "Crash Capture" }, - { id: "trigger.toggle.screensaver", parent: "trigger.toggle", kind: "action", icon: "󱄄", label: "Screensaver" }, - { id: "trigger.toggle.nightlight", parent: "trigger.toggle", kind: "action", icon: "󰔎", label: "Nightlight" }, - { id: "trigger.toggle.top-bar", parent: "trigger.toggle", kind: "action", icon: "󰍜", label: "Menu Bar" }, - { id: "trigger.toggle.battery-percentage", parent: "trigger.toggle", kind: "action", icon: "󰁹", label: "Battery Percentage", when: true }, - { id: "trigger.toggle.workspace-layout", parent: "trigger.toggle", kind: "action", icon: "󱂬", label: "Workspace Layout" }, - { id: "trigger.toggle.window-gaps", parent: "trigger.toggle", kind: "action", icon: "", label: "Window Gaps" }, - { id: "trigger.toggle.one-window-ratio", parent: "trigger.toggle", kind: "action", icon: "", label: "1-Window Ratio" }, - { id: "trigger.tests.network-speedtest", parent: "trigger.tests", kind: "action", icon: "󰓅", label: "Network Speed Test" }, - { id: "trigger.tests.disk-speedtest", parent: "trigger.tests", kind: "action", icon: "󰋊", label: "Disk Speed Test" }, - { id: "style.theme", parent: "style", kind: "action", icon: "󰸌", label: "Theme" }, - { id: "style.background", parent: "style", kind: "action", icon: "", label: "Background" }, - { id: "style.unlock", parent: "style", kind: "action", icon: "󰟵", label: "Unlock" }, - { id: "style.font", parent: "style", kind: "provider", icon: "", label: "Font" }, - { id: "style.bar", parent: "style", kind: "menu", icon: "󰍜", label: "Menu Bar" }, - { id: "style.bar.position", parent: "style.bar", kind: "menu", icon: "", label: "Position" }, - { id: "style.bar.transparency", parent: "style.bar", kind: "action", icon: "󰂵", label: "Transparency" }, - { id: "style.hyprland", parent: "style", kind: "action", icon: "", label: "Hyprland" }, - { id: "style.screensaver", parent: "style", kind: "menu", icon: "󱄄", label: "Screensaver" }, - { id: "style.about", parent: "style", kind: "menu", icon: "", label: "About" }, - { id: "style.bar.position.top", parent: "style.bar.position", kind: "action", icon: "󰁝", label: "Top" }, - { id: "style.bar.position.bottom", parent: "style.bar.position", kind: "action", icon: "󰁅", label: "Bottom" }, - { id: "style.bar.position.left", parent: "style.bar.position", kind: "action", icon: "󰁍", label: "Left" }, - { id: "style.bar.position.right", parent: "style.bar.position", kind: "action", icon: "󰁔", label: "Right" }, - { id: "style.about.text", parent: "style.about", kind: "action", icon: "", label: "Edit Text" }, - { id: "style.about.image", parent: "style.about", kind: "action", icon: "", label: "Set From Image" }, - { id: "style.about.default", parent: "style.about", kind: "action", icon: "", label: "Restore Default" }, - { id: "style.screensaver.text", parent: "style.screensaver", kind: "action", icon: "", label: "Edit Text" }, - { id: "style.screensaver.image", parent: "style.screensaver", kind: "action", icon: "", label: "Set From Image" }, - { id: "style.screensaver.default", parent: "style.screensaver", kind: "action", icon: "", label: "Restore Default" }, - { id: "setup.monitors", parent: "setup", kind: "action", icon: "󰍹", label: "Monitors" }, - { id: "setup.keybindings", parent: "setup", kind: "action", icon: "", label: "Keybindings", when: true }, - { id: "setup.input", parent: "setup", kind: "action", icon: "", label: "Input", when: true }, - { id: "setup.network", parent: "setup", kind: "menu", icon: "󰛳", label: "Network" }, - { id: "setup.network.dns", parent: "setup.network", kind: "menu", icon: "󰇖", label: "DNS" }, - { id: "setup.network.dns.dhcp", parent: "setup.network.dns", kind: "action", icon: "󰩟", label: "DHCP", checked: true }, - { id: "setup.network.dns.cloudflare", parent: "setup.network.dns", kind: "action", icon: "󰅟", label: "Cloudflare", checked: true }, - { id: "setup.network.dns.google", parent: "setup.network.dns", kind: "action", icon: "󰊭", label: "Google", checked: true }, - { id: "setup.network.dns.custom", parent: "setup.network.dns", kind: "action", icon: "", label: "Custom", checked: true }, - { id: "setup.network.qr", parent: "setup.network", kind: "action", icon: "󰐲", label: "QR Code", when: true }, - { id: "setup.default", parent: "setup", kind: "menu", icon: "", label: "Defaults" }, - { id: "setup.default.agent", parent: "setup.default", kind: "menu", icon: "󰚩", label: "Agent", title: "Default Agent" }, - { id: "setup.default.agent.claude", parent: "setup.default.agent", kind: "action", icon: "󰛄", label: "Claude", checked: true }, - { id: "setup.default.agent.codex", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Codex", checked: true }, - { id: "setup.default.agent.copilot", parent: "setup.default.agent", kind: "action", icon: "", label: "Copilot", checked: true }, - { id: "setup.default.agent.crush", parent: "setup.default.agent", kind: "action", icon: "󰋑", label: "Crush", checked: true }, - { id: "setup.default.agent.gemini", parent: "setup.default.agent", kind: "action", icon: "󰫢", label: "Gemini", checked: true }, - { id: "setup.default.agent.grok", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Grok", checked: true }, - { id: "setup.default.agent.omp", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "omp", checked: true }, - { id: "setup.default.agent.opencode", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "OpenCode", checked: true }, - { id: "setup.default.agent.pi", parent: "setup.default.agent", kind: "action", icon: "󰚩", label: "Pi", checked: true }, - { id: "setup.default.browser", parent: "setup.default", kind: "menu", icon: "", label: "Browser", title: "Default Browser" }, - { id: "setup.default.browser.chromium", parent: "setup.default.browser", kind: "action", icon: "", label: "Chromium", when: true, checked: true }, - { id: "setup.default.browser.chrome", parent: "setup.default.browser", kind: "action", icon: "󰊯", label: "Chrome", when: true, checked: true }, - { id: "setup.default.browser.brave", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Brave", when: true, checked: true }, - { id: "setup.default.browser.brave-origin", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Brave Origin", when: true, checked: true }, - { id: "setup.default.browser.edge", parent: "setup.default.browser", kind: "action", icon: "󰇩", label: "Edge", when: true, checked: true }, - { id: "setup.default.browser.firefox", parent: "setup.default.browser", kind: "action", icon: "", label: "Firefox", when: true, checked: true }, - { id: "setup.default.browser.zen", parent: "setup.default.browser", kind: "action", icon: "󰖟", label: "Zen", when: true, checked: true }, - { id: "setup.default.terminal", parent: "setup.default", kind: "menu", icon: "", label: "Terminal", title: "Default Terminal" }, - { id: "setup.default.terminal.alacritty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Alacritty", when: true, checked: true }, - { id: "setup.default.terminal.foot", parent: "setup.default.terminal", kind: "action", icon: "", label: "Foot", when: true, checked: true }, - { id: "setup.default.terminal.ghostty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Ghostty", when: true, checked: true }, - { id: "setup.default.terminal.kitty", parent: "setup.default.terminal", kind: "action", icon: "", label: "Kitty", when: true, checked: true }, - { id: "setup.default.editor", parent: "setup.default", kind: "menu", icon: "", label: "Editor", title: "Default Editor" }, - { id: "setup.default.editor.neovim", parent: "setup.default.editor", kind: "action", icon: "", label: "Neovim", when: true, checked: true }, - { id: "setup.default.editor.vscode", parent: "setup.default.editor", kind: "action", icon: "", label: "VSCode", when: true, checked: true }, - { id: "setup.default.editor.cursor", parent: "setup.default.editor", kind: "action", icon: "", label: "Cursor", when: true, checked: true }, - { id: "setup.default.editor.zed", parent: "setup.default.editor", kind: "action", icon: "", label: "Zed", when: true, checked: true }, - { id: "setup.default.editor.sublime", parent: "setup.default.editor", kind: "action", icon: "", label: "Sublime Text", when: true, checked: true }, - { id: "setup.default.editor.helix", parent: "setup.default.editor", kind: "action", icon: "", label: "Helix", when: true, checked: true }, - { id: "setup.default.editor.vim", parent: "setup.default.editor", kind: "action", icon: "", label: "Vim", when: true, checked: true }, - { id: "setup.default.editor.emacs", parent: "setup.default.editor", kind: "action", icon: "", label: "Emacs", when: true, checked: true }, - { id: "setup.plugin", parent: "setup", kind: "menu", icon: "󰐱", label: "Plugins" }, - { id: "setup.plugin.enable", parent: "setup.plugin", kind: "action", icon: "󰄬", label: "Enable Plugin" }, - { id: "setup.plugin.disable", parent: "setup.plugin", kind: "action", icon: "󰅖", label: "Disable Plugin" }, - { id: "setup.plugin.add", parent: "setup.plugin", kind: "action", icon: "󰖟", label: "Add Plugin" }, - { id: "setup.plugin.clone", parent: "setup.plugin", kind: "action", icon: "󰆏", label: "Clone Plugin" }, - { id: "setup.plugin.remove", parent: "setup.plugin", kind: "action", icon: "󰭌", label: "Remove Plugin", when: true }, - { id: "setup.security", parent: "setup", kind: "menu", icon: "", label: "Security" }, - { id: "setup.config", parent: "setup", kind: "menu", icon: "", label: "Config" }, - { id: "setup.security.fingerprint", parent: "setup.security", kind: "action", icon: "󰈷", label: "Fingerprint", when: true }, - { id: "setup.security.fido2", parent: "setup.security", kind: "action", icon: "", label: "Fido2" }, - { id: "setup.security.sshd", parent: "setup.security", kind: "action", icon: "󰣀", label: "SSHD" }, - { id: "setup.security.passwordless-sudo", parent: "setup.security", kind: "action", icon: "󰟵", label: "Passwordless Sudo" }, - { id: "setup.security.sudoless-docker", parent: "setup.security", kind: "action", icon: "󰡨", label: "Sudoless Docker", when: true }, - { id: "setup.config.hyprland", parent: "setup.config", kind: "action", icon: "", label: "Hyprland" }, - { id: "setup.config.hyprsunset", parent: "setup.config", kind: "action", icon: "", label: "Hyprsunset" }, - { id: "setup.config.xcompose", parent: "setup.config", kind: "action", icon: "󰞅", label: "XCompose" }, - { id: "setup.direct-boot", parent: "setup", kind: "action", icon: "", label: "Direct Boot" }, - { id: "setup.reset", parent: "setup", kind: "action", icon: "󰑓", label: "Reset Computer", when: true }, - { id: "install.package", parent: "install", kind: "action", icon: "󰣇", label: "Package" }, - { id: "install.aur", parent: "install", kind: "action", icon: "󰣇", label: "AUR" }, - { id: "install.webapp", parent: "install", kind: "action", icon: "", label: "Web App" }, - { id: "install.tui", parent: "install", kind: "action", icon: "", label: "TUI" }, - { id: "install.style", parent: "install", kind: "menu", icon: "", label: "Style" }, - { id: "install.style.theme", parent: "install.style", kind: "action", icon: "󰸌", label: "Theme" }, - { id: "install.style.background", parent: "install.style", kind: "action", icon: "", label: "Background" }, - { id: "install.style.font", parent: "install.style", kind: "menu", icon: "", label: "Font" }, - { id: "install.style.font.cascadia", parent: "install.style.font", kind: "action", icon: "", label: "Cascadia Mono" }, - { id: "install.style.font.meslo", parent: "install.style.font", kind: "action", icon: "", label: "Meslo LG Mono" }, - { id: "install.style.font.fira", parent: "install.style.font", kind: "action", icon: "", label: "Fira Code" }, - { id: "install.style.font.victor", parent: "install.style.font", kind: "action", icon: "", label: "Victor Code" }, - { id: "install.style.font.bitstream", parent: "install.style.font", kind: "action", icon: "", label: "Bitstream Vera Mono" }, - { id: "install.style.font.iosevka", parent: "install.style.font", kind: "action", icon: "", label: "Iosevka" }, - { id: "install.service", parent: "install", kind: "menu", icon: "", label: "Service" }, - { id: "install.development", parent: "install", kind: "menu", icon: "󰵮", label: "Development" }, - { id: "install.editor", parent: "install", kind: "menu", icon: "", label: "Editor" }, - { id: "install.terminal", parent: "install", kind: "menu", icon: "", label: "Terminal" }, - { id: "install.browser", parent: "install", kind: "menu", icon: "", label: "Browser" }, - { id: "install.ai", parent: "install", kind: "menu", icon: "󱚤", label: "AI" }, - { id: "install.gaming", parent: "install", kind: "menu", icon: "", label: "Gaming" }, - { id: "install.windows", parent: "install", kind: "action", icon: "󰍲", label: "Windows", when: true }, - { id: "install.preinstalls", parent: "install", kind: "action", icon: "󰏓", label: "Preinstalls", when: true }, - { id: "install.browser.chrome", parent: "install.browser", kind: "action", icon: "", label: "Chrome", when: true }, - { id: "install.browser.edge", parent: "install.browser", kind: "action", icon: "󰇩", label: "Edge", when: true }, - { id: "install.browser.brave", parent: "install.browser", kind: "action", icon: "", label: "Brave", when: true }, - { id: "install.browser.brave-origin", parent: "install.browser", kind: "action", icon: "", label: "Brave Origin", when: true }, - { id: "install.browser.firefox", parent: "install.browser", kind: "action", icon: "", label: "Firefox", when: true }, - { id: "install.browser.zen", parent: "install.browser", kind: "action", icon: "󰖟", label: "Zen", when: true }, - { id: "install.service.1password", parent: "install.service", kind: "action", icon: "󰢁", label: "1Password", when: true }, - { id: "install.service.dropbox", parent: "install.service", kind: "action", icon: "", label: "Dropbox", when: true }, - { id: "install.service.spotify", parent: "install.service", kind: "action", icon: "󰓇", label: "Spotify", when: true }, - { id: "install.service.signal", parent: "install.service", kind: "action", icon: "󰭹", label: "Signal", when: true }, - { id: "install.service.tailscale", parent: "install.service", kind: "action", icon: "", label: "Tailscale", when: true }, - { id: "install.service.nordvpn", parent: "install.service", kind: "action", icon: "󱇱", label: "NordVPN", when: true }, - { id: "install.service.once", parent: "install.service", kind: "action", icon: "󰏖", label: "ONCE", when: true }, - { id: "install.service.bitwarden", parent: "install.service", kind: "action", icon: "󰟵", label: "Bitwarden", when: true }, - { id: "install.service.chromium-account", parent: "install.service", kind: "action", icon: "", label: "Chromium Account", when: true }, - { id: "install.editor.vscode", parent: "install.editor", kind: "action", icon: "", label: "VSCode", when: true }, - { id: "install.editor.cursor", parent: "install.editor", kind: "action", icon: "", label: "Cursor", when: true }, - { id: "install.editor.zed", parent: "install.editor", kind: "action", icon: "", label: "Zed", when: true }, - { id: "install.editor.sublime", parent: "install.editor", kind: "action", icon: "", label: "Sublime Text", when: true }, - { id: "install.editor.helix", parent: "install.editor", kind: "action", icon: "", label: "Helix", when: true }, - { id: "install.editor.vim", parent: "install.editor", kind: "action", icon: "", label: "Vim", when: true }, - { id: "install.editor.emacs", parent: "install.editor", kind: "action", icon: "", label: "Emacs", when: true }, - { id: "install.terminal.alacritty", parent: "install.terminal", kind: "action", icon: "", label: "Alacritty", when: true }, - { id: "install.terminal.foot", parent: "install.terminal", kind: "action", icon: "", label: "Foot", when: true }, - { id: "install.terminal.ghostty", parent: "install.terminal", kind: "action", icon: "", label: "Ghostty", when: true }, - { id: "install.terminal.kitty", parent: "install.terminal", kind: "action", icon: "", label: "Kitty", when: true }, - { id: "install.ai.chatgpt", parent: "install.ai", kind: "action", icon: "󰚩", label: "ChatGPT Desktop", when: true }, - { id: "install.ai.dictation", parent: "install.ai", kind: "action", icon: "", label: "Dictation", when: true }, - { id: "install.ai.grok-bot", parent: "install.ai", kind: "action", icon: "󰚩", label: "Grok Bot", when: true }, - { id: "install.ai.lm-studio", parent: "install.ai", kind: "action", icon: "󰚩", label: "LM Studio", when: true }, - { id: "install.ai.ollama", parent: "install.ai", kind: "action", icon: "󰚩", label: "Ollama", when: true }, - { id: "install.gaming.steam", parent: "install.gaming", kind: "action", icon: "", label: "Steam", when: true }, - { id: "install.gaming.retroarch", parent: "install.gaming", kind: "action", icon: "󰯉", label: "RetroArch", when: true }, - { id: "install.gaming.minecraft", parent: "install.gaming", kind: "action", icon: "󰍳", label: "Minecraft", when: true }, - { id: "install.gaming.geforce-now", parent: "install.gaming", kind: "action", icon: "󰢹", label: "NVIDIA GeForce NOW", when: true }, - { id: "install.gaming.xbox-cloud", parent: "install.gaming", kind: "action", icon: "", label: "Xbox Cloud Gaming", when: true }, - { id: "install.gaming.xbox-controllers", parent: "install.gaming", kind: "action", icon: "󰂯", label: "Xbox Controllers", when: true }, - { id: "install.gaming.battlenet", parent: "install.gaming", kind: "action", icon: "", label: "Battle.net", when: true }, - { id: "install.gaming.lutris", parent: "install.gaming", kind: "action", icon: "", label: "Lutris", when: true }, - { id: "install.gaming.heroic", parent: "install.gaming", kind: "action", icon: "󱓟", label: "Heroic (Epic Games)", when: true }, - { id: "install.gaming.retro-launcher", parent: "install.gaming", kind: "action", icon: "󰯉", label: "RetroArch Game Launcher" }, - { id: "install.development.rails", parent: "install.development", kind: "action", icon: "󰫏", label: "Ruby on Rails", when: true }, - { id: "install.development.docker-dbs", parent: "install.development", kind: "action", icon: "", label: "Docker DB" }, - { id: "install.development.javascript", parent: "install.development", kind: "menu", icon: "", label: "JavaScript" }, - { id: "install.development.go", parent: "install.development", kind: "action", icon: "", label: "Go", when: true }, - { id: "install.development.php", parent: "install.development", kind: "menu", icon: "", label: "PHP" }, - { id: "install.development.python", parent: "install.development", kind: "action", icon: "", label: "Python", when: true }, - { id: "install.development.elixir", parent: "install.development", kind: "menu", icon: "", label: "Elixir" }, - { id: "install.development.zig", parent: "install.development", kind: "action", icon: "", label: "Zig", when: true }, - { id: "install.development.rust", parent: "install.development", kind: "action", icon: "", label: "Rust", when: true }, - { id: "install.development.java", parent: "install.development", kind: "action", icon: "", label: "Java", when: true }, - { id: "install.development.dotnet", parent: "install.development", kind: "action", icon: "", label: ".NET", when: true }, - { id: "install.development.ocaml", parent: "install.development", kind: "action", icon: "", label: "OCaml", when: true }, - { id: "install.development.clojure", parent: "install.development", kind: "action", icon: "", label: "Clojure", when: true }, - { id: "install.development.scala", parent: "install.development", kind: "action", icon: "", label: "Scala", when: true }, - { id: "install.development.javascript.node", parent: "install.development.javascript", kind: "action", icon: "", label: "Node.js", when: true }, - { id: "install.development.javascript.bun", parent: "install.development.javascript", kind: "action", icon: "", label: "Bun", when: true }, - { id: "install.development.javascript.deno", parent: "install.development.javascript", kind: "action", icon: "", label: "Deno", when: true }, - { id: "install.development.php.php", parent: "install.development.php", kind: "action", icon: "", label: "PHP", when: true }, - { id: "install.development.php.laravel", parent: "install.development.php", kind: "action", icon: "", label: "Laravel", when: true }, - { id: "install.development.php.symfony", parent: "install.development.php", kind: "action", icon: "", label: "Symfony", when: true }, - { id: "install.development.elixir.elixir", parent: "install.development.elixir", kind: "action", icon: "", label: "Elixir", when: true }, - { id: "install.development.elixir.phoenix", parent: "install.development.elixir", kind: "action", icon: "", label: "Phoenix", when: true }, - { id: "remove.package", parent: "remove", kind: "action", icon: "󰣇", label: "Package" }, - { id: "remove.webapp", parent: "remove", kind: "action", icon: "", label: "Web App", when: true }, - { id: "remove.tui", parent: "remove", kind: "action", icon: "", label: "TUI", when: true }, - { id: "remove.development", parent: "remove", kind: "menu", icon: "󰵮", label: "Development", title: "Remove" }, - { id: "remove.theme", parent: "remove", kind: "action", icon: "󰸌", label: "Theme" }, - { id: "remove.browser", parent: "remove", kind: "menu", icon: "", label: "Browser", title: "Remove" }, - { id: "remove.dictation", parent: "remove", kind: "action", icon: "", label: "Dictation", when: true }, - { id: "remove.gaming", parent: "remove", kind: "menu", icon: "", label: "Gaming", title: "Remove" }, - { id: "remove.service", parent: "remove", kind: "menu", icon: "", label: "Services", title: "Remove" }, - { id: "remove.windows", parent: "remove", kind: "action", icon: "󰍲", label: "Windows", when: true }, - { id: "remove.preinstalls", parent: "remove", kind: "action", icon: "󰏓", label: "Preinstalls", when: true }, - { id: "remove.security", parent: "remove", kind: "menu", icon: "", label: "Security", title: "Remove" }, - { id: "remove.security.fingerprint", parent: "remove.security", kind: "action", icon: "󰈷", label: "Fingerprint", when: true }, - { id: "remove.security.fido2", parent: "remove.security", kind: "action", icon: "", label: "Fido2", when: true }, - { id: "remove.security.sshd", parent: "remove.security", kind: "action", icon: "󰣀", label: "SSHD", when: true }, - { id: "remove.security.sudoless-docker", parent: "remove.security", kind: "action", icon: "󰡨", label: "Sudoless Docker", when: true }, - { id: "remove.browser.chrome", parent: "remove.browser", kind: "action", icon: "", label: "Chrome", when: true }, - { id: "remove.browser.edge", parent: "remove.browser", kind: "action", icon: "󰇩", label: "Edge", when: true }, - { id: "remove.browser.brave", parent: "remove.browser", kind: "action", icon: "", label: "Brave", when: true }, - { id: "remove.browser.brave-origin", parent: "remove.browser", kind: "action", icon: "", label: "Brave Origin", when: true }, - { id: "remove.browser.firefox", parent: "remove.browser", kind: "action", icon: "", label: "Firefox", when: true }, - { id: "remove.browser.zen", parent: "remove.browser", kind: "action", icon: "", label: "Zen", when: true }, - { id: "remove.service.dropbox", parent: "remove.service", kind: "action", icon: "", label: "Dropbox", when: true }, - { id: "remove.service.tailscale", parent: "remove.service", kind: "action", icon: "", label: "Tailscale", when: true }, - { id: "remove.gaming.steam", parent: "remove.gaming", kind: "action", icon: "", label: "Steam", when: true }, - { id: "remove.gaming.retroarch", parent: "remove.gaming", kind: "action", icon: "", label: "RetroArch", when: true }, - { id: "remove.gaming.minecraft", parent: "remove.gaming", kind: "action", icon: "󰍳", label: "Minecraft", when: true }, - { id: "remove.gaming.geforce-now", parent: "remove.gaming", kind: "action", icon: "󰢹", label: "NVIDIA GeForce NOW", when: true }, - { id: "remove.gaming.xbox-cloud", parent: "remove.gaming", kind: "action", icon: "", label: "Xbox Cloud Gaming", when: true }, - { id: "remove.gaming.xbox-controllers", parent: "remove.gaming", kind: "action", icon: "󰖺", label: "Xbox Controllers (󰂯)", when: true }, - { id: "remove.gaming.battlenet", parent: "remove.gaming", kind: "action", icon: "", label: "Battle.net", when: true }, - { id: "remove.gaming.lutris", parent: "remove.gaming", kind: "action", icon: "", label: "Lutris", when: true }, - { id: "remove.gaming.heroic", parent: "remove.gaming", kind: "action", icon: "󱓟", label: "Heroic (Epic Games)", when: true }, - { id: "remove.development.rails", parent: "remove.development", kind: "action", icon: "󰫏", label: "Ruby on Rails", when: true }, - { id: "remove.development.javascript", parent: "remove.development", kind: "menu", icon: "", label: "JavaScript", title: "Remove" }, - { id: "remove.development.go", parent: "remove.development", kind: "action", icon: "", label: "Go", when: true }, - { id: "remove.development.php", parent: "remove.development", kind: "menu", icon: "", label: "PHP", title: "Remove" }, - { id: "remove.development.python", parent: "remove.development", kind: "action", icon: "", label: "Python", when: true }, - { id: "remove.development.elixir", parent: "remove.development", kind: "menu", icon: "", label: "Elixir", title: "Remove" }, - { id: "remove.development.zig", parent: "remove.development", kind: "action", icon: "", label: "Zig", when: true }, - { id: "remove.development.rust", parent: "remove.development", kind: "action", icon: "", label: "Rust", when: true }, - { id: "remove.development.java", parent: "remove.development", kind: "action", icon: "", label: "Java", when: true }, - { id: "remove.development.dotnet", parent: "remove.development", kind: "action", icon: "", label: ".NET", when: true }, - { id: "remove.development.ocaml", parent: "remove.development", kind: "action", icon: "", label: "OCaml", when: true }, - { id: "remove.development.clojure", parent: "remove.development", kind: "action", icon: "", label: "Clojure", when: true }, - { id: "remove.development.scala", parent: "remove.development", kind: "action", icon: "", label: "Scala", when: true }, - { id: "remove.development.javascript.node", parent: "remove.development.javascript", kind: "action", icon: "", label: "Node.js", when: true }, - { id: "remove.development.javascript.bun", parent: "remove.development.javascript", kind: "action", icon: "", label: "Bun", when: true }, - { id: "remove.development.javascript.deno", parent: "remove.development.javascript", kind: "action", icon: "", label: "Deno", when: true }, - { id: "remove.development.php.php", parent: "remove.development.php", kind: "action", icon: "", label: "PHP", when: true }, - { id: "remove.development.php.laravel", parent: "remove.development.php", kind: "action", icon: "", label: "Laravel", when: true }, - { id: "remove.development.php.symfony", parent: "remove.development.php", kind: "action", icon: "", label: "Symfony", when: true }, - { id: "remove.development.elixir.elixir", parent: "remove.development.elixir", kind: "action", icon: "", label: "Elixir", when: true }, - { id: "remove.development.elixir.phoenix", parent: "remove.development.elixir", kind: "action", icon: "", label: "Phoenix", when: true }, - { id: "update.omarchy", parent: "update", kind: "action", icon: "󰚰", label: "Omarchy" }, - { id: "update.channel", parent: "update", kind: "menu", icon: "󰔫", label: "Channel" }, - { id: "update.config", parent: "update", kind: "menu", icon: "", label: "Config", title: "Reset to default" }, - { id: "update.themes", parent: "update", kind: "action", icon: "󰸌", label: "Extra Themes", when: true }, - { id: "update.process", parent: "update", kind: "menu", icon: "", label: "Process", title: "Restart" }, - { id: "update.hardware", parent: "update", kind: "menu", icon: "󰇅", label: "Hardware", title: "Restart" }, - { id: "update.firmware", parent: "update", kind: "action", icon: "", label: "Firmware" }, - { id: "update.password", parent: "update", kind: "menu", icon: "", label: "Password" }, - { id: "update.timezone", parent: "update", kind: "action", icon: "", label: "Timezone" }, - { id: "update.time", parent: "update", kind: "action", icon: "", label: "Time" }, - { id: "update.channel.stable", parent: "update.channel", kind: "action", icon: "🟢", label: "Stable", checked: true }, - { id: "update.channel.rc", parent: "update.channel", kind: "action", icon: "🟡", label: "RC", checked: true }, - { id: "update.channel.edge", parent: "update.channel", kind: "action", icon: "🟠", label: "Edge", checked: true }, - { id: "update.channel.dev", parent: "update.channel", kind: "action", icon: "🔴", label: "Dev", checked: true }, - { id: "update.process.hyprsunset", parent: "update.process", kind: "action", icon: "", label: "Hyprsunset" }, - { id: "update.process.shell", parent: "update.process", kind: "action", icon: "󰍜", label: "Shell" }, - { id: "update.config.hyprland", parent: "update.config", kind: "action", icon: "", label: "Hyprland" }, - { id: "update.config.hyprsunset", parent: "update.config", kind: "action", icon: "", label: "Hyprsunset" }, - { id: "update.config.plymouth", parent: "update.config", kind: "action", icon: "󱣴", label: "Plymouth" }, - { id: "update.config.tmux", parent: "update.config", kind: "action", icon: "", label: "Tmux" }, - { id: "update.config.shell", parent: "update.config", kind: "action", icon: "󰍜", label: "Shell" }, - { id: "update.hardware.audio", parent: "update.hardware", kind: "action", icon: "", label: "Audio" }, - { id: "update.hardware.wifi", parent: "update.hardware", kind: "action", icon: "󱚾", label: "Wi-Fi" }, - { id: "update.hardware.bluetooth", parent: "update.hardware", kind: "action", icon: "󰂯", label: "Bluetooth" }, - { id: "update.hardware.trackpad", parent: "update.hardware", kind: "action", icon: "󰟸", label: "Trackpad" }, - { id: "update.password.drive", parent: "update.password", kind: "action", icon: "", label: "Drive Encryption" }, - { id: "update.password.user", parent: "update.password", kind: "action", icon: "", label: "User" }, -]; diff --git a/apps/pocket-remote/names.ts b/apps/pocket-remote/names.ts deleted file mode 100644 index e7cbcdaa5..000000000 --- a/apps/pocket-remote/names.ts +++ /dev/null @@ -1,80 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/names.ts — what to call a window. -// -// A window's class is a program id, not a name: four terminals all read -// "foot", which told the eye nothing. What distinguishes windows to a person -// is their TITLE — the shell's directory, the file being edited, the page -// being read — so a tile leads with the title and names the program under -// it, and the program's name is prettified out of its class. - -/** Classes whose own spelling is not the name a person uses. */ -const KNOWN: Record = { - foot: "Foot", - footclient: "Foot", - ghostty: "Ghostty", - alacritty: "Alacritty", - kitty: "Kitty", - nvim: "Neovim", - neovide: "Neovide", - chromium: "Chromium", - "google-chrome": "Chrome", - "brave-browser": "Brave", - firefox: "Firefox", - zen: "Zen", - "microsoft-edge": "Edge", - code: "VS Code", - cursor: "Cursor", - zeditor: "Zed", - sublime_text: "Sublime Text", - nautilus: "Files", - thunar: "Files", - mpv: "mpv", - vlc: "VLC", - spotify: "Spotify", - signal: "Signal", - slack: "Slack", - discord: "Discord", - telegramdesktop: "Telegram", - "1password": "1Password", - localsend: "LocalSend", - steam: "Steam", - obsidian: "Obsidian", - "org.gnome.nautilus": "Files", - "com.mitchellh.ghostty": "Ghostty", -}; - -/** - * The program's name from a Wayland class: a known spelling, else the last - * component of a reverse-DNS id, capitalised, with separators turned into - * spaces. `org.gnome.Nautilus` becomes Files, `dev.zed.Zed` becomes Zed, - * `qutebrowser` becomes Qutebrowser. - */ -export function appName(windowClass: string): string { - const raw = windowClass.trim(); - if (!raw) return "window"; - const lower = raw.toLowerCase(); - if (KNOWN[lower]) return KNOWN[lower]!; - const tail = lower.includes(".") ? lower.slice(lower.lastIndexOf(".") + 1) : lower; - if (KNOWN[tail]) return KNOWN[tail]!; - // Keep the source's own capitalisation for the tail when it has some - // (`Nautilus`, `Zed`), otherwise capitalise the first letter. - const sourceTail = raw.includes(".") ? raw.slice(raw.lastIndexOf(".") + 1) : raw; - const spaced = sourceTail.replace(/[-_]+/g, " ").trim(); - if (!spaced) return raw; - return /[A-Z]/.test(spaced) ? spaced : spaced[0]!.toUpperCase() + spaced.slice(1); -} - -/** - * What a tile leads with, and what it says underneath: the title first when - * there is one worth reading, the program's name otherwise. The second line - * is always the program, so the same window reads the same way whichever - * line the eye lands on. - */ -export function windowLabels(windowClass: string, title: string): { lead: string; under: string } { - const name = appName(windowClass); - const clean = title.trim(); - if (!clean || clean.toLowerCase() === windowClass.trim().toLowerCase() || clean.toLowerCase() === name.toLowerCase()) { - return { lead: name, under: "" }; - } - return { lead: clean, under: name }; -} diff --git a/apps/pocket-remote/pocket.json b/apps/pocket-remote/pocket.json deleted file mode 100644 index 39c7d99e2..000000000 --- a/apps/pocket-remote/pocket.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "$schema": "https://pocketjs.dev/schema/pocket-2.json", - "pocket": 2, - "id": "dev.pocket-stack.remote", - "name": "pocket-remote", - "title": "Pocket Remote", - "version": "0.1.0", - "engine": { - "capabilities": { - "requires": ["input.touch", "text.glyphs.baked"] - } - }, - "app": { - "entry": "apps/pocket-remote/main.tsx", - "output": "pocket-remote-main", - "framework": "solid", - "viewport": { - "fixed": { - "logical": [480, 320], - "presentation": "native" - } - } - } -} diff --git a/apps/pocket-remote/popup.tsx b/apps/pocket-remote/popup.tsx deleted file mode 100644 index 7a8c3f27e..000000000 --- a/apps/pocket-remote/popup.tsx +++ /dev/null @@ -1,77 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/popup.tsx — the classic popup: one card of rows, -// growing out of the point it answers. Rows come from ui.tsx, so a popup's -// paddings are the sheet's paddings; no caret, because a triangle this small -// cannot meet a rounded, bordered card without a visible seam. - -import { createEffect, Index } from "solid-js"; -import { View } from "@pocketjs/framework/components"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import type { Tone } from "./icons.tsx"; -import { type Popup, POPUP_PAD, POPUP_ROW_H } from "./layout.ts"; -import { Card, Row } from "./ui.tsx"; - -export interface PopupRow { - glyph: string; - label: string; - tone?: Tone; -} - -export function PopupBox(p: { - place: () => Popup; - rows: () => readonly PopupRow[]; - hot: () => number | null; - progress: () => number; -}) { - let root: NodeMirror | null = null; - let body: NodeMirror | null = null; - createEffect(() => { - if (!root) return; - const t = p.progress(); - const place = p.place(); - jump(root, "opacity", t); - jump(root, "scale", 0.92 + 0.08 * t); - // Grows towards the finger: from the edge the anchor is on. - jump(root, "translateY", Math.round((1 - t) * (place.below ? -6 : 6))); - }); - createEffect(() => { - if (!body) return; - const place = p.place(); - jump(body, "insetL", place.x); - jump(body, "insetT", place.y); - jump(body, "width", place.w); - jump(body, "height", place.h); - }); - return ( - { - root = node; - }} - > - { - body = node; - }} - > - - {(row, i) => ( - row().glyph} - glyphTone={() => row().tone ?? "fg"} - label={() => row().label} - labelTone={row().tone === "danger" ? "danger" : "text"} - hot={() => p.hot() === i} - hairline={i > 0} - /> - )} - - - - ); -} diff --git a/apps/pocket-remote/protocol.ts b/apps/pocket-remote/protocol.ts deleted file mode 100644 index a10a92050..000000000 --- a/apps/pocket-remote/protocol.ts +++ /dev/null @@ -1,337 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/protocol.ts — the JSON lines the iPod and the Omarchy -// daemon exchange over the SVC WIRE (spec ops 30..32). One file, imported by -// both ends, so a field cannot drift between them. Every line is small: the -// device polls at most SVC_POLL_BUF (8192) bytes per frame and a state -// snapshot has to fit in one line, which is why titles are clipped and -// coordinates are integers. - -import type { ActionId } from "./actions.ts"; - -/** The svc app id: what the beacon advertises and the hello names. */ -export const REMOTE_APP = "pocket-remote"; -export const REMOTE_PROTO = 2; - -/** Title code points kept per window in a snapshot. A window's title is - * what tells two terminals apart, so it earns a few more than the class. */ -export const TITLE_MAX = 34; -/** Windows carried per snapshot; Hyprland's `clients` beyond this are dropped - * by focus history (oldest first) so the line stays under the poll cap. */ -export const WINDOWS_MAX = 24; - -export type Layout = "dwindle" | "scrolling"; -export type Direction = "l" | "r" | "u" | "d"; - -// --------------------------------------------------------------------------- -// host -> device -// --------------------------------------------------------------------------- - -export interface WinInfo { - /** Hyprland window address, the handle every window command names. */ - a: string; - /** Class (initialClass when the live one is empty). */ - c: string; - /** Title, clipped to TITLE_MAX. */ - ti: string; - /** Workspace id. */ - ws: number; - /** Geometry in the monitor's logical pixels, relative to the monitor. */ - x: number; - y: number; - w: number; - h: number; - /** Floating. */ - f?: 1; - /** Fullscreen mode: 1 = maximized, 2 = fullscreen. */ - fs?: 1 | 2; - /** Pinned. */ - p?: 1; -} - -export interface WsInfo { - id: number; - /** Window count. */ - n: number; -} - -export interface HostState { - t: "state"; - /** The focused monitor's logical size (pixels / scale) and, for the - * daemon's own use, its origin in layout px. */ - mon: { w: number; h: number; x?: number; y?: number }; - /** Ordinary workspaces (ids > 0), ascending. */ - ws: WsInfo[]; - /** Active workspace id on the focused monitor. */ - active: number; - /** Active window address, or null. */ - focus: string | null; - /** Windows on every ordinary workspace, most recently focused first. */ - win: WinInfo[]; - /** Tiling layout of the active workspace. */ - layout: Layout; - /** The scratchpad (special workspace) is showing. */ - special?: 1; -} - -export interface HostLevels { - t: "levels"; - /** Output volume 0..1 (may exceed 1 on boosted sinks; the device clamps). */ - vol: number; - mute?: 1; - /** Display brightness 0..1. */ - bri: number; -} - -/** The colours the device repaints itself with — Omarchy's colors.toml keys - * the remote uses, as #rrggbb. */ -export interface ThemeColors { - bg: string; - bgDark: string; - fg: string; - fgDim: string; - accent: string; - red: string; - green: string; - yellow: string; - blue: string; - magenta: string; - cyan: string; - /** color8 — the muted border/inactive tone. */ - muted: string; -} - -export interface HostTheme { - t: "theme"; - /** Theme slug, e.g. "tokyo-night". */ - name: string; - colors: ThemeColors; - /** Installed theme slugs, for the picker. */ - list: string[]; -} - -export interface HostHello { - t: "hello"; - proto: number; - /** The daemon host's display name (hostname). */ - name: string; - /** Omarchy version string, informational. */ - omarchy: string; - /** Whether this device may issue commands yet. "pending" means the daemon - * put an approval dialog on the laptop screen. */ - auth: "ok" | "pending" | "denied"; -} - -export interface HostAuth { - t: "auth"; - auth: "ok" | "pending" | "denied"; -} - -export interface HostToast { - t: "toast"; - text: string; -} - -/** What the control centre shows besides the levels: the network and - * whatever is playing. Sent on change. */ -export interface HostCc { - t: "cc"; - wifi: { - /** The radio is on. */ - on: 0 | 1; - /** Connected network, "" when none; "ethernet" links carry the device. */ - ssid: string; - /** Signal 0..100, 0 when unknown. */ - sig: number; - }; - media: { - st: "playing" | "paused" | "none"; - title: string; - artist: string; - }; -} - -/** The menu's live conditions: rows hidden by a failing `when`, rows whose - * `checked` holds. Full sets, sent when they change. */ -export interface HostMenu { - t: "menu"; - hide: string[]; - check: string[]; -} - -/** One page of the machine's application list (the menu's `apps` provider, - * which the shell lists at open time and the device cannot know). A page - * with `seq` 0 starts a new list; the last page has no `more`. Paged - * because the whole list does not fit one poll batch. */ -export interface HostApps { - t: "apps"; - seq: number; - more?: 1; - /** Desktop entry id (without `.desktop`) and display name. */ - a: { i: string; n: string }[]; -} - -export type HostLine = HostHello | HostAuth | HostState | HostLevels | HostTheme | HostToast | HostCc | HostMenu | HostApps; - -// --------------------------------------------------------------------------- -// device -> host -// --------------------------------------------------------------------------- - -export interface ClientHello { - t: "hello"; - proto: number; - /** Device description for the approval dialog, e.g. "iPod touch". */ - device: string; -} - -/** Run one whitelisted action (actions.ts). */ -export interface ClientAction { - t: "act"; - id: ActionId; -} - -export interface ClientWorkspace { - t: "ws"; - /** Workspace id, or a relative step when `rel` is set. */ - n: number; - rel?: 1; -} - -export type WindowOp = - | { op: "focus"; a: string } - | { op: "close"; a: string } - | { op: "swap"; a: string; dir: Direction } - | { op: "move"; a: string; n: number } - /** Put a floating window at monitor-relative logical px (a drag). */ - | { op: "place"; a: string; x: number; y: number } - /** Grow or shrink by monitor px (a corner drag). Relative, like the - * keyboard's own resize bindings. */ - | { op: "resize"; a: string; dx: number; dy: number } - /** Toggle floating / fullscreen on one window. */ - | { op: "float"; a: string } - | { op: "full"; a: string } - /** Open another window of the same program. */ - | { op: "same"; a: string }; - -export type ClientWindow = { t: "win" } & WindowOp; - -export interface ClientLevel { - t: "vol" | "bri"; - /** Absolute 0..1. */ - v: number; -} - -export interface ClientMute { - t: "mute"; -} - -export interface ClientMedia { - t: "media"; - op: "play" | "next" | "prev"; -} - -export interface ClientType { - t: "type"; - /** Literal text, typed into the focused window. */ - text: string; -} - -export type Modifier = "ctrl" | "alt" | "shift" | "super"; - -export interface ClientKey { - t: "key"; - /** An xkb keysym name: Return, BackSpace, Tab, Escape, space, Left, a, 1, - * F5... (host/omarchy.ts keeps the allow-list). */ - k: string; - /** Held around the key: ctrl+c is `{ k: "c", mods: ["ctrl"] }`. */ - mods?: Modifier[]; -} - -/** Trackpad: relative pointer motion in laptop-screen px (already - * accelerated on the device), at most one line per device frame. */ -export interface ClientPointer { - t: "ptr"; - dx: number; - dy: number; -} - -export interface ClientClick { - t: "click"; - b: "l" | "r" | "m"; - /** Held around the click: ctrl-click extends a selection, and a virtual - * pointer cannot carry a modifier on its own. */ - mods?: Modifier[]; -} - -/** Two-finger scroll, in px of travel. */ -export interface ClientScroll { - t: "scroll"; - dx: number; - dy: number; -} - -/** Hold the left button down (the click key, or a long-press on the pad) and - * let go. `mods` is held for as long as the button is. */ -export interface ClientDrag { - t: "drag"; - on: 0 | 1; - mods?: Modifier[]; -} - -export interface ClientWifi { - t: "wifi"; - on: 0 | 1; -} - -/** Run one row of Omarchy's menu by id (menu.ts / host/menu-source.ts): an - * action runs its command, a provider submenu opens on the desktop. */ -export interface ClientMenu { - t: "menu"; - id: string; -} - -/** Launch one application by desktop entry id, as listed by `apps`. */ -export interface ClientLaunch { - t: "launch"; - app: string; -} - -export type ClientLine = - | ClientHello - | ClientAction - | ClientWorkspace - | ClientWindow - | ClientLevel - | ClientMute - | ClientMedia - | ClientType - | ClientKey - | ClientPointer - | ClientClick - | ClientScroll - | ClientDrag - | ClientWifi - | ClientMenu - | ClientLaunch; - -/** Parse one wire batch (newline-separated JSON) into typed lines; malformed - * lines are skipped rather than allowed to wedge the reader. */ -export function parseLines(batch: string): T[] { - const out: T[] = []; - for (const line of batch.split("\n")) { - if (line === "") continue; - try { - const value = JSON.parse(line) as T; - if (value && typeof value === "object" && typeof (value as { t?: unknown }).t === "string") out.push(value); - } catch { - // skip - } - } - return out; -} - -/** Clip a title for the wire: TITLE_MAX code points, an ellipsis when cut. */ -export function clipTitle(title: string, max = TITLE_MAX): string { - const chars = Array.from(title.replace(/\s+/g, " ").trim()); - if (chars.length <= max) return chars.join(""); - return chars.slice(0, max - 1).join("") + "…"; -} diff --git a/apps/pocket-remote/stage.tsx b/apps/pocket-remote/stage.tsx deleted file mode 100644 index de5624d1f..000000000 --- a/apps/pocket-remote/stage.tsx +++ /dev/null @@ -1,424 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/stage.tsx — the live miniature of the focused monitor: -// tiles = windows, accent border = focus. Tap focuses. Hold a tile and a -// popup answers at the finger — float or tile it, take it full screen, -// close it — and the SAME finger picks a row: slide onto it and let go, one -// gesture, or lift and tap. Drag a tiled window onto another to swap them, -// onto a strip tab to move it there; drag a floating window and it moves, on -// the laptop, under the finger. Swipe empty stage to step workspaces; an -// empty workspace offers the launchers. - -import { Index, Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { type ActionId, actionById, LAUNCHERS } from "./actions.ts"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon } from "./icons.tsx"; -import { - LAUNCH_BAR, - launchCellAt, - launchCellRect, - popupRowAt, - STAGE, - STRIP, - SWIPE_PX, - tabAt, - within, -} from "./layout.ts"; -import { ICON_BOX, SPACE } from "./design.ts"; -import { PopupBox, type PopupRow } from "./popup.tsx"; -import type { RemoteStore, TileSlot } from "./store.ts"; -import { themed } from "./theme.ts"; - -const LAUNCH_GLYPH: Record = { - terminal: GLYPH.terminal, - browser: GLYPH.browser, - files: GLYPH.files, -}; - -function Tile(p: { store: RemoteStore; slot: TileSlot }) { - const s = p.slot; - const sizing = () => p.store.resizing() === s.a; - const dragged = () => p.store.drag()?.a === s.a; - const over = () => p.store.drag()?.over === s.a; - const held = () => p.store.popup()?.a === s.a; - return ( - - - - - {s.label()} - - - - {s.title()} - - - - - - - - {/* The resize corner: two steps of an L, lit while it is being - dragged and while a finger is on its (much larger) target. */} - - - (sizing() ? "accentFill" : "fgDimFill"))} - /> - (sizing() ? "accentFill" : "fgDimFill"))} - /> - (sizing() ? "accentFill" : "fgDimFill"))} - /> - (sizing() ? "accentFill" : "fgDimFill"))} - /> - - - - - ); -} - -/** - * The launch bar: terminal, browser, files, fixed across the bottom of the - * stage. Three equal cells, so the targets are wide even though the bar is - * short, and no hunting for the three things a remote is reached for. - */ -export function LaunchBar(p: { store: RemoteStore }) { - return ( - - - {(id, i) => { - const r = launchCellRect(i, LAUNCHERS.length); - // The icon-plus-label group, centred: a 24 px glyph, a gap, and - // room for the longest of the three labels. - const groupW = ICON_BOX + SPACE.lg + 62; - const group = { x: Math.round((r.w - groupW) / 2), w: groupW }; - return ( - - {/* the icon and label sit as one group, centred in the cell */} - - - - - - - {actionById(id())?.label ?? id()} - - - - - - - ); - }} - - - ); -} - -/** The rows a held tile answers with: what a window's own title bar would - * offer if it had one. TILE_POPUP_ROWS sizes the box. */ -const popupRows = (floating: boolean): PopupRow[] => [ - { glyph: floating ? GLYPH.tile : GLYPH.float, label: floating ? "Tile" : "Float" }, - { glyph: GLYPH.fullscreen, label: "Full screen" }, - { glyph: GLYPH.apps, label: "Open another" }, - { glyph: GLYPH.close, label: "Close", tone: "danger" }, -]; - -export function Stage(p: { store: RemoteStore }) { - const empty = () => { - const s = p.store.state(); - return !!s && !s.win.some((w) => w.ws === s.active); - }; - return ( - - - - - empty workspace - - - - - swipe for the next · the bar below launches - - - - {/* tiles are positioned in screen space; the stage origin is offset */} - - - {(slot) => ( - - - - )} - - - - ); -} - -/** The held tile's popup, drawn over everything on the stage. Its inputs are - * accessors: Show keeps one instance while the popup's own record changes - * (a moving highlight is a new record), so geometry read once would freeze. */ -export function TilePopup(p: { store: RemoteStore }) { - return ( - - p.store.popup()!.place} - rows={() => popupRows(p.store.popup()!.floating)} - hot={() => p.store.popup()?.hot ?? null} - progress={p.store.popupT} - /> - - ); -} - -// --------------------------------------------------------------------------- -// gestures -// --------------------------------------------------------------------------- - -type Target = - | { kind: "tile"; a: string } - | { kind: "grip"; a: string } - | { kind: "launch"; i: number } - | { kind: "stage" } - | { kind: "none" }; - -function stageTarget(store: RemoteStore, x: number, y: number): Target { - const cell = launchCellAt(x, y, LAUNCHERS.length); - if (cell !== null) return { kind: "launch", i: cell }; - if (!within(x, y, STAGE)) return { kind: "none" }; - // The corner first: it overlaps the tile it belongs to, and on the stage - // it may also overlap the neighbour below and to the right. - const grip = store.gripAt(x, y); - if (grip) return { kind: "grip", a: grip }; - const a = store.windowAt(x, y); - if (a) return { kind: "tile", a }; - return { kind: "stage" }; -} - -export function stageHandlers(store: RemoteStore): GestureHandlers { - let down: Target = { kind: "none" }; - let swiping = false; - let placing = false; - /** - * The contact that opened a tile's popup is still down: it now picks a - * row. One gesture — hold, slide, release — and lifting WITHOUT sliding - * leaves the popup up for a tap instead of running whatever the resting - * finger happens to cover, which on a 260 px stage is often a row (and - * the last row closes the window). - */ - let picking = false; - let pickFrom = { x: 0, y: 0 }; - const PICK_SLOP = 12; - const slid = (c: { x: number; y: number }): boolean => - Math.abs(c.x - pickFrom.x) > PICK_SLOP || Math.abs(c.y - pickFrom.y) > PICK_SLOP; - /** A corner drag: the window is being resized. */ - let sizing = false; - const reset = () => { - store.pressRelease(); - store.setDrag(null); - swiping = false; - placing = false; - picking = false; - sizing = false; - }; - return { - onDown: (c) => { - down = stageTarget(store, c.x, c.y); - picking = false; - sizing = false; - store.pressDown( - down.kind === "tile" || down.kind === "grip" ? `tile:${down.a}` : down.kind === "launch" ? `launch:${down.i}` : null, - ); - }, - onMove: (c) => { - if (!picking) return; - const popup = store.popup(); - if (popup) store.popupHover(slid(c) ? popupRowAt(popup.place, c.x, c.y) : null); - }, - onTap: () => { - const t = down; - store.pressRelease(); - if (t.kind === "tile" || t.kind === "grip") store.focusWindow(t.a); - else if (t.kind === "launch") store.act(LAUNCHERS[t.i] as ActionId); - down = { kind: "none" }; - }, - onLongPress: (c) => { - if (down.kind === "grip") return; // the corner is a drag, not a menu - if (down.kind === "tile") { - store.pressDown(null); - store.openPopup(down.a, c.x, c.y); - picking = true; - pickFrom = { x: c.x, y: c.y }; - down = { kind: "none" }; - } - }, - onPanStart: (c) => { - if (picking) return; // the slide belongs to the popup, not the stage - const t = down; - store.pressDown(null); - if (t.kind === "grip") { - sizing = true; - store.resizeBegin(t.a); - store.resizeBy(c.fdx, c.fdy); - } else if (t.kind === "tile" && store.isFloating(t.a)) { - placing = true; - store.placeBegin(t.a, c.startX, c.startY); - store.placeTo(c.x, c.y); - } else if (t.kind === "tile") { - store.setDrag({ a: t.a, x: c.x, y: c.y, over: null, overWs: null }); - } else { - swiping = true; - } - }, - onPanMove: (c) => { - if (picking) { - const popup = store.popup(); - if (popup) store.popupHover(slid(c) ? popupRowAt(popup.place, c.x, c.y) : null); - return; - } - if (sizing) { - store.resizeBy(c.fdx, c.fdy); - return; - } - if (placing) { - store.placeTo(c.x, c.y); - return; - } - const drag = store.drag(); - if (drag) { - const overA = within(c.x, c.y, STAGE) ? store.windowAt(c.x, c.y) : null; - const tab = c.y < STRIP.h ? tabAt(c.x, store.tabs()) : null; - store.setDrag({ - a: drag.a, - x: c.x, - y: c.y, - over: overA !== null && overA !== drag.a ? overA : null, - overWs: tab ? tab.id : null, - }); - } - }, - onUp: (c) => { - if (picking) { - // Slid onto a row: run it. Lifted where it started: the popup stays - // up, so the same choice can be made with a tap. - const popup = store.popup(); - const row = popup && slid(c) ? popupRowAt(popup.place, c.x, c.y) : null; - if (row !== null) store.popupRun(row); - else store.popupHover(null); - reset(); - return; - } - if (sizing) { - store.resizeBy(0, 0, true); - reset(); - return; - } - if (placing) { - store.placeTo(c.x, c.y, true); - reset(); - return; - } - const drag = store.drag(); - if (drag) { - if (drag.overWs !== null && drag.overWs !== store.state()?.active) store.moveWindow(drag.a, drag.overWs); - else if (drag.over !== null) store.swapWindows(drag.a, drag.over); - reset(); - return; - } - if (swiping && Math.abs(c.dx) >= SWIPE_PX && Math.abs(c.dx) > Math.abs(c.dy)) { - store.workspaceStep(c.dx < 0 ? 1 : -1); - } - reset(); - }, - onCancel: () => { - if (placing) store.placeCancel(); - if (sizing) store.resizeCancel(); - if (picking) store.popupHover(null); - reset(); - }, - }; -} - -/** While a tile's popup is up and no finger is mid-gesture on it: a row - * answers a release, a touch anywhere else puts the popup away. */ -export function popupHandlers(store: RemoteStore): GestureHandlers { - let outside = false; - return { - onDown: (c) => { - const popup = store.popup(); - if (!popup) return; - const row = popupRowAt(popup.place, c.x, c.y); - outside = row === null; - if (outside) { - store.closePopup(); - return; - } - store.popupHover(row); - store.pressDown(`popup:${row}`); - }, - onMove: (c) => { - const popup = store.popup(); - if (!popup || outside) return; - store.popupHover(popupRowAt(popup.place, c.x, c.y)); - }, - onUp: (c) => { - // The action runs here, not in onTap: onUp comes first for one - // release and clearing the highlight there left onTap with nothing. - const popup = store.popup(); - store.pressRelease(); - if (!popup || outside) return; - const row = popupRowAt(popup.place, c.x, c.y); - if (row !== null) store.popupRun(row); - else store.popupHover(null); - }, - onCancel: () => { - store.pressRelease(); - store.popupHover(null); - }, - }; -} diff --git a/apps/pocket-remote/store.ts b/apps/pocket-remote/store.ts deleted file mode 100644 index 27290d7c3..000000000 --- a/apps/pocket-remote/store.ts +++ /dev/null @@ -1,1276 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/store.ts — the remote's live state: the link to the -// daemon, the mirrored desktop (workspaces, windows, levels, theme, network, -// what is playing, the menu's live conditions), the tile slot pool that -// animates the stage, the ball, the popups (a tile's, the control centre, -// the menu sheet), the deck's keyboard state, and the senders every touch -// target calls. Everything the screen shows reads from here; nothing here -// knows about pixels except the motion owners — the tile pool, the ball and -// the entrance progresses — which write geometry straight to node mirrors. -// -// Reactivity is coarse on purpose: a snapshot replaces one signal, tiles -// live in a fixed pool of per-slot signals so a frame in which one window -// moves re-renders one node, and idle frames write nothing. - -import { batch, createMemo, createSignal, type Accessor } from "solid-js"; -import { getOps } from "@pocketjs/framework"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import { createScroller, type Scroller } from "@pocketjs/framework/kinetics"; -import { onFrame } from "@pocketjs/framework/lifecycle"; -import { type ActionId, actionById } from "./actions.ts"; -import { windowLabels } from "./names.ts"; -import { - ARROW_HOLD_FRAMES, - ARROW_REPEAT_FRAMES, - DIRECTION_KEYSYM, - type Direction4, - type KbLayer, - type KeyVariant, -} from "./keyboard-layout.ts"; - -import { - approach, - BALL, - BALL_HOME, - ballSnap, - CC_LINGER_FRAMES, - ccRowAt, - clamp01, - easeProgress, - type Fit, - fitMonitor, - type Mode, - placePopup, - type Popup, - TILE_POPUP_ROWS, - type Rect, - SHEET_LIST, - sheetMaxScroll, - stageToMonitor, - stageWindows, - stripTabs, - swapDirection, - type Tab, - TILE_GRIP_MIN, - tileGripHit, - tileGripTarget, - TILE_SLOTS, - TILE_TWO_LINES_H, - tileRect, - trackDelta, - windowAt, -} from "./layout.ts"; -import { MENU_ROOT, menuChildren, menuItem, menuParent } from "./menu-tree.ts"; -import type { MenuKind } from "./menu.ts"; -import { - type ClientLine, - type Direction, - type HostApps, - type HostCc, - type HostLine, - type HostState, - type Layout, - type Modifier, - parseLines, - REMOTE_APP, - REMOTE_PROTO, - type ThemeColors, -} from "./protocol.ts"; -import { isThemeColors, setTheme as paintTheme, TOKYO_NIGHT } from "./theme.ts"; - -// --------------------------------------------------------------------------- -// svc channel -// --------------------------------------------------------------------------- - -export interface Svc { - /** Non-blocking transport probe, once per frame; false until connected. */ - open(): boolean; - poll(): HostLine[]; - send(line: ClientLine): void; -} - -/** Null = this host has no svc channel (hosts/sim, goldens). */ -export function connectSvc(): Svc | null { - const ops = getOps(); - if (!ops.svcOpen || !ops.svcPoll || !ops.svcSend) return null; - const open = ops.svcOpen.bind(ops); - const poll = ops.svcPoll.bind(ops); - const send = ops.svcSend.bind(ops); - return { - open: () => open(REMOTE_APP), - poll() { - const batchText = poll(); - return batchText ? parseLines(batchText) : []; - }, - send(line) { - send(JSON.stringify(line)); - }, - }; -} - -function deviceName(): string { - const host = (getOps() as { __host?: string }).__host ?? ""; - if (host.startsWith("ipodtouch4")) return "iPod touch 4"; - if (host.startsWith("iphone4s")) return "iPhone 4S"; - if (host.startsWith("iphone2g")) return "iPhone"; - return "PocketJS"; -} - -// --------------------------------------------------------------------------- -// types -// --------------------------------------------------------------------------- - -/** off = no svc channel at all; search = looking for the daemon; pending = - * connected, waiting for the laptop to approve this device. */ -export type Link = "off" | "search" | "pending" | "denied" | "up"; - -export interface TileView { - x: number; - y: number; - w: number; - h: number; - /** 0..1, fades a tile in on open and out on close. */ - alpha: number; -} - -export interface TileSlot { - index: number; - /** Window address, or null while the slot is free. */ - a: string | null; - /** The tile's node, captured by ref; geometry and opacity are written to - * it directly by the frame loop (jump), never through Solid. */ - node: NodeMirror | null; - /** True while the slot is showing a window (free slots paint nothing). */ - live: Accessor; - /** What the tile leads with: the window's title, or its program's name. */ - label: Accessor; - /** The program's name, under the lead line (empty when the lead IS it). */ - title: Accessor; - /** Tall enough for class + title. */ - twoLines: Accessor; - focused: Accessor; - floating: Accessor; - /** Big enough to carry the resize corner. */ - grip: Accessor; - setLive(live: boolean): void; - setLabel(label: string): void; - setTitle(title: string): void; - setTwoLines(two: boolean): void; - setFocused(focused: boolean): void; - setFloating(floating: boolean): void; - setGrip(grip: boolean): void; - /** Motion targets, owned by the frame loop. */ - target: Rect; - targetAlpha: number; - cur: TileView; - dying: boolean; - /** Paint order among the tiles, written straight to the node: floating - * windows sit above tiled ones and the recently focused above their - * peers, the way the compositor stacks them. The pool assigns slots by - * first free index, so document order says nothing about depth. */ - z: number; -} - -/** A tiled window being dragged onto another (swap) or onto a tab (move). */ -export interface Drag { - a: string; - x: number; - y: number; - /** Tile under the finger (not the dragged one). */ - over: string | null; - /** Workspace tab under the finger. */ - overWs: number | null; -} - -/** A tile's popup: float/tile, full screen, close. */ -export interface TilePopup { - a: string; - place: Popup; - floating: boolean; - hot: number | null; -} - -/** - * The control centre. Opened sticky by a tap on its button (tap outside - * closes) or by hold-and-slide (the finger that opened it adjusts, release - * lingers then closes). - */ -export interface Cc { - mode: "sticky" | "hold"; - /** Slider row the finger is on (hold mode) or dragging (sticky mode). */ - row: 0 | 1 | null; - /** Finger x and level when the current row was entered — drags are relative. */ - refX: number; - refLevel: number; - /** Frame after which a released hold card closes. */ - until: number; -} - -/** The menu sheet: which submenu is open and how it was reached. */ -export interface Sheet { - /** The open submenu's id ("root" at the top). */ - at: string; - /** Ancestors, root first — what back returns to. */ - trail: string[]; - hot: number | null; -} - -/** The sheet's rows come from two places — the baked menu tree, and the - * machine's application list — so the view sees one shape. */ -export interface SheetRow { - id: string; - label: string; - /** The glyph the shell shows, or "" for a row that has none. */ - icon: string; - kind: MenuKind | "app"; - checked?: boolean; -} - -export interface AppEntry { - /** Desktop entry id, without `.desktop`. */ - i: string; - n: string; -} - -/** The menu's `apps` provider: the shell lists it at open time, so the - * device asks the daemon for it and shows the list itself. */ -export const APPS_ROUTE = "apps"; - -/** A held key's variant chips. */ -export interface KeyFly { - /** Screen-space rect of the held key. */ - key: Rect; - variants: KeyVariant[]; - hot: number | null; -} - -/** - * A d-pad key under a finger: it fires at once, then repeats while held. - * `mods` is the sticky modifier state the press consumed, kept for the whole - * hold so a held ctrl+Left stays ctrl+Left. - */ -export interface DpadHold { - dir: Direction4; - /** Frame the key went down. */ - at: number; - mods: Modifier[]; -} - -export interface Wifi { - on: boolean; - ssid: string; - sig: number; -} - -export interface Media { - st: "playing" | "paused" | "none"; - title: string; - artist: string; -} - -const TOAST_FRAMES = 150; -/** Frames a finger must stay on a row before it is highlighted. */ -const SHEET_PRESS_FRAMES = 7; -/** Frames between level sends while a slider is being dragged. */ -const LEVEL_SEND_EVERY = 3; -/** Frames after a slider release during which host echoes are ignored. */ -const LEVEL_ECHO_HOLD = 30; -/** Frames between placements while a floating tile is dragged. */ -const PLACE_SEND_EVERY = 3; - -export type RemoteStore = ReturnType; - -// --------------------------------------------------------------------------- -// store -// --------------------------------------------------------------------------- - -export function createRemoteStore(svc: Svc | null = connectSvc()) { - // ---- link ----------------------------------------------------------------- - const [link, setLink] = createSignal(svc ? "search" : "off"); - const [hostName, setHostName] = createSignal(""); - const [omarchy, setOmarchy] = createSignal(""); - let opened = false; - - // ---- mirrored desktop --------------------------------------------------------- - const [state, setState] = createSignal(null); - const [vol, setVol] = createSignal(0); - const [mute, setMute] = createSignal(false); - const [bri, setBri] = createSignal(0); - const [themeName, setThemeName] = createSignal("tokyo-night"); - const [themeList, setThemeList] = createSignal([]); - const [colors, setColors] = createSignal(TOKYO_NIGHT); - const [wifi, setWifi] = createSignal({ on: false, ssid: "", sig: 0 }); - const [media, setMedia] = createSignal({ st: "none", title: "", artist: "" }); - const [menuHidden, setMenuHidden] = createSignal>(new Set()); - const [menuChecked, setMenuChecked] = createSignal>(new Set()); - const [apps, setApps] = createSignal([]); - /** Pages arrive one line at a time; the list swaps in when the last lands. */ - let appPages: AppEntry[] = []; - - const tabs = createMemo(() => { - const s = state(); - return s ? stripTabs(s.ws, s.active) : []; - }); - const layout = createMemo(() => state()?.layout ?? "dwindle"); - const focusTitle = createMemo(() => { - const s = state(); - if (!s || !s.focus) return ""; - const win = s.win.find((w) => w.a === s.focus); - return win ? (win.ti || win.c) : ""; - }); - const focusClass = createMemo(() => { - const s = state(); - if (!s || !s.focus) return ""; - return s.win.find((w) => w.a === s.focus)?.c ?? ""; - }); - const fit = createMemo(() => { - const s = state(); - return s ? fitMonitor(s.mon) : null; - }); - - // ---- ui -------------------------------------------------------------------- - const [mode, setMode] = createSignal("stage"); - const [kbLayer, setKbLayer] = createSignal("lower"); - const [kbMods, setKbMods] = createSignal([]); - const [pressed, setPressed] = createSignal(null); - /** 0..1 eased press depth of the pressed target: attack on down, release - * after up. Keys scale and brighten by it, the bubble rides on it. */ - const [pressT, setPressT] = createSignal(0); - const [drag, setDrag] = createSignal(null); - const [popup, setPopup] = createSignal(null); - const [popupT, setPopupT] = createSignal(0); - const [cc, setCc] = createSignal(null); - const [ccT, setCcT] = createSignal(0); - const [sheet, setSheet] = createSignal(null); - /** A finger on a row, not yet a highlight: a list's press has to wait long - * enough to know the finger is not starting a scroll (the highlight - * flashed under every finger that landed to fling). */ - const [armed, setArmed] = createSignal<{ row: number; at: number } | null>(null); - const [sheetT, setSheetT] = createSignal(0); - /** Restarted on every route change: the list's own entrance. */ - const [sheetListT, setSheetListT] = createSignal(0); - const [keyFly, setKeyFly] = createSignal(null); - const [dpad, setDpad] = createSignal(null); - /** The click key is held: the laptop's left button is down, and a finger - * on the pad is now dragging a selection. */ - const [clickHeld, setClickHeld] = createSignal(false); - const [flyT, setFlyT] = createSignal(0); - const [toast, setToast] = createSignal(""); - const [frame, setFrame] = createSignal(0); - let toastUntil = 0; - let frameCount = 0; - let pressHeld = false; - - const say = (text: string) => { - setToast(text); - toastUntil = frameCount + TOAST_FRAMES; - }; - - /** The open route's rows: the machine's applications under the `apps` - * provider, this submenu's visible children anywhere else. */ - const sheetRows = createMemo(() => { - const s = sheet(); - if (!s) return []; - if (s.at === APPS_ROUTE) { - return apps().map((app) => ({ id: app.i, label: app.n, icon: "", kind: "app" as const })); - } - const checked = menuChecked(); - return menuChildren(s.at, menuHidden()).map((item) => ({ - id: item.id, - label: item.label, - icon: item.icon, - kind: item.kind, - checked: checked.has(item.id), - })); - }); - const sheetScroller: Scroller = createScroller({ - max: () => sheetMaxScroll(sheetRows().length), - extent: () => SHEET_LIST.h, - overscroll: 40, - }); - - // ---- the ball ---------------------------------------------------------------- - const [ball, setBall] = createSignal<{ x: number; y: number }>({ ...BALL_HOME }); - const [ballDragging, setBallDragging] = createSignal(false); - const ballCur = { x: BALL_HOME.x, y: BALL_HOME.y }; - let ballNode: NodeMirror | null = null; - let grab = { dx: 0, dy: 0 }; - const paintBall = () => { - if (!ballNode) return; - jump(ballNode, "insetL", Math.round(ballCur.x)); - jump(ballNode, "insetT", Math.round(ballCur.y)); - }; - const bindBall = (node: NodeMirror) => { - ballNode = node; - paintBall(); - }; - /** A held ball comes along with the finger from where it was grabbed. */ - const ballGrab = (x: number, y: number) => { - const b = ball(); - grab = { dx: x - b.x, dy: y - b.y }; - setBallDragging(true); - }; - const ballDragTo = (x: number, y: number) => { - if (!ballDragging()) return; - ballCur.x = x - grab.dx; - ballCur.y = y - grab.dy; - setBall({ x: ballCur.x, y: ballCur.y }); - paintBall(); - }; - /** Released: snap to the nearer edge (the frame loop eases it there). */ - const ballRelease = () => { - if (!ballDragging()) return; - setBallDragging(false); - setBall(ballSnap(ballCur.x, ballCur.y)); - }; - - // ---- tile pool --------------------------------------------------------------- - const slots: TileSlot[] = []; - for (let i = 0; i < TILE_SLOTS; i += 1) { - const [live, setLive] = createSignal(false); - const [label, setLabel] = createSignal(""); - const [title, setTitle] = createSignal(""); - const [twoLines, setTwoLines] = createSignal(false); - const [focused, setFocused] = createSignal(false); - const [floating, setFloating] = createSignal(false); - const [grip, setGrip] = createSignal(false); - slots.push({ - index: i, - a: null, - node: null, - live, - label, - title, - twoLines, - focused, - floating, - grip, - setLive, - setLabel, - setTitle, - setTwoLines, - setFocused, - setFloating, - setGrip, - target: { x: 0, y: 0, w: 0, h: 0 }, - targetAlpha: 0, - cur: { x: 0, y: 0, w: 0, h: 0, alpha: 0 }, - dying: false, - z: 0, - }); - } - const slotOf = (a: string): TileSlot | undefined => slots.find((s) => s.a === a); - const paintSlot = (slot: TileSlot) => { - const node = slot.node; - if (!node) return; - const c = slot.cur; - jump(node, "insetL", Math.round(c.x)); - jump(node, "insetT", Math.round(c.y)); - jump(node, "width", Math.max(1, Math.round(c.w))); - jump(node, "height", Math.max(1, Math.round(c.h))); - jump(node, "opacity", c.alpha); - }; - /** zIndex is paint-only and not animatable, so it goes through the raw op - * rather than jump(). PROP.zIndex from contracts/spec/spec.ts, repeated - * here so the guest does not pull the spec module in; the unit test pins - * it to the contract. */ - const PROP_Z_INDEX = 31; - const paintZ = (slot: TileSlot) => { - if (slot.node) getOps().setProp(slot.node.id, PROP_Z_INDEX, slot.z); - }; - - /** A floating tile under the finger: its own geometry is the truth until - * the daemon echoes the placement, so a snapshot must not yank it back. */ - let placing: { a: string; dx: number; dy: number; sentAt: number } | null = null; - - /** Re-target the pool from a snapshot: keep slots by address, fade new - * windows in where they belong, fade vanished ones out in place. */ - const retarget = (s: HostState) => { - const f = fitMonitor(s.mon); - const shown = stageWindows(s); - const seen = new Set(); - batch(() => { - for (let index = 0; index < shown.length; index += 1) { - const win = shown[index]!; - seen.add(win.a); - const rect = tileRect(win, f); - let slot = slotOf(win.a); - if (!slot) { - slot = slots.find((candidate) => candidate.a === null); - if (!slot) continue; // pool exhausted: WINDOWS_MAX guards this - slot.a = win.a; - slot.cur = { ...rect, alpha: 0 }; - paintSlot(slot); - slot.setLive(true); - } - slot.dying = false; - if (!(placing && placing.a === win.a)) slot.target = rect; - slot.targetAlpha = 1; - const labels = windowLabels(win.c, win.ti); - slot.setLabel(labels.lead); - slot.setTitle(labels.under); - slot.setTwoLines(labels.under !== "" && rect.h >= TILE_TWO_LINES_H && rect.w >= 56); - slot.setFocused(win.a === s.focus); - slot.setFloating(win.f === 1); - slot.setGrip(rect.w >= TILE_GRIP_MIN && rect.h >= TILE_GRIP_MIN); - // stageWindows is tiled-then-floating, each group most recently - // focused first: the compositor's own stacking, so later in the - // group means lower, and the focused window tops its group. - slot.z = (win.f === 1 ? 100 : 10) + (shown.length - index); - paintZ(slot); - } - for (const slot of slots) { - if (slot.a !== null && !seen.has(slot.a)) { - slot.dying = true; - slot.targetAlpha = 0; - } - } - }); - }; - - /** Replace the mirrored desktop and re-target the tiles in one step; the - * optimistic paths (a tap on the strip) go through here too, so the stage - * moves the instant the finger lifts, not when the daemon confirms. */ - const commit = (next: HostState) => { - setState(next); - retarget(next); - }; - - /** Current tile rectangles for hit testing, in paint order. */ - const tilesForHit = (): { a: string; rect: Rect }[] => { - const s = state(); - if (!s) return []; - const out: { a: string; rect: Rect }[] = []; - for (const win of stageWindows(s)) { - const slot = slotOf(win.a); - if (slot && !slot.dying) out.push({ a: win.a, rect: slot.target }); - } - return out; - }; - const isFloating = (a: string): boolean => state()?.win.find((w) => w.a === a)?.f === 1; - /** The window whose resize corner is under the point, topmost first. */ - const gripAt = (x: number, y: number): string | null => { - const tiles = tilesForHit(); - for (let i = tiles.length - 1; i >= 0; i -= 1) { - if (tileGripHit(x, y, tiles[i]!.rect)) return tiles[i]!.a; - } - return null; - }; - - // ---- senders ------------------------------------------------------------------- - const send = (line: ClientLine) => { - if (svc && link() === "up") svc.send(line); - }; - const act = (id: ActionId) => { - const def = actionById(id); - if (!def) return; - send({ t: "act", id }); - say(def.label); - }; - const workspace = (n: number) => { - const s = state(); - if (s && s.active !== n) commit({ ...s, active: n }); - send({ t: "ws", n }); - }; - const workspaceStep = (delta: 1 | -1) => { - const s = state(); - if (s) { - const ids = tabs().map((t) => t.id); - const at = ids.indexOf(s.active); - const next = ids[at + delta]; - if (next !== undefined) commit({ ...s, active: next }); - } - send({ t: "ws", n: delta, rel: 1 }); - }; - const focusWindow = (a: string) => { - const s = state(); - if (s && s.focus !== a) { - setState({ ...s, focus: a }); - for (const slot of slots) if (slot.a) slot.setFocused(slot.a === a); - } - send({ t: "win", op: "focus", a }); - }; - const closeWindow = (a: string) => { - send({ t: "win", op: "close", a }); - const slot = slotOf(a); - if (slot) { - slot.dying = true; - slot.targetAlpha = 0; - } - say("closed"); - }; - const swapWindows = (a: string, b: string) => { - const from = slotOf(a); - const to = slotOf(b); - if (!from || !to) return; - const dir: Direction = swapDirection(from.target, to.target); - send({ t: "win", op: "swap", a, dir }); - }; - const moveWindow = (a: string, n: number) => { - send({ t: "win", op: "move", a, n }); - const s = state(); - if (s) commit({ ...s, win: s.win.map((w) => (w.a === a ? { ...w, ws: n } : w)) }); - say(`moved to ${n}`); - }; - const floatWindow = (a: string) => { - send({ t: "win", op: "float", a }); - say(isFloating(a) ? "tiled" : "floating"); - }; - const fullWindow = (a: string) => { - send({ t: "win", op: "full", a }); - say("full screen"); - }; - - /** - * A corner drag: grow or shrink the window. Deltas are stage px turned - * into monitor px and sent relative, so a tiled window moves its split - * and a floating one changes size — the same dispatcher the keyboard's - * own resize bindings use. The tile itself is not moved locally: the - * layout is the compositor's to compute, and its snapshot follows in a - * frame or two. - */ - let sizing: { a: string; dx: number; dy: number; sentAt: number } | null = null; - /** The window under a corner drag, so its tile can say so. */ - const [resizing, setResizing] = createSignal(null); - const resizeBegin = (a: string) => { - sizing = { a, dx: 0, dy: 0, sentAt: frameCount }; - setResizing(a); - focusWindow(a); - }; - const resizeBy = (stageDx: number, stageDy: number, final = false) => { - const f = fit(); - if (!sizing || !f) return; - sizing.dx += stageDx / f.s; - sizing.dy += stageDy / f.s; - if (!final && frameCount < sizing.sentAt + PLACE_SEND_EVERY) return; - const dx = Math.round(sizing.dx); - const dy = Math.round(sizing.dy); - if (dx !== 0 || dy !== 0) { - send({ t: "win", op: "resize", a: sizing.a, dx, dy }); - sizing.dx -= dx; - sizing.dy -= dy; - } - sizing.sentAt = frameCount; - if (final) { - sizing = null; - setResizing(null); - } - }; - const resizeCancel = () => { - sizing = null; - setResizing(null); - }; - /** Another window of the same program (the daemon resolves the class). */ - const openSame = (a: string) => { - send({ t: "win", op: "same", a }); - say("opening another"); - }; - - /** Begin dragging a floating tile: remember where inside it the finger - * landed so the tile does not jump to the fingertip. */ - const placeBegin = (a: string, x: number, y: number) => { - const slot = slotOf(a); - if (!slot) return; - placing = { a, dx: x - slot.cur.x, dy: y - slot.cur.y, sentAt: 0 }; - }; - /** Move it: the tile follows the finger now; the laptop hears every third - * frame and on release. */ - const placeTo = (x: number, y: number, final = false) => { - if (!placing) return; - const slot = slotOf(placing.a); - const f = fit(); - if (!slot || !f) return; - const nx = x - placing.dx; - const ny = y - placing.dy; - slot.target = { ...slot.target, x: nx, y: ny }; - slot.cur = { ...slot.cur, x: nx, y: ny }; - paintSlot(slot); - if (final || frameCount >= placing.sentAt + PLACE_SEND_EVERY) { - const at = stageToMonitor(nx, ny, f); - send({ t: "win", op: "place", a: placing.a, x: at.x, y: at.y }); - placing.sentAt = frameCount; - } - if (final) placing = null; - }; - const placeCancel = () => { - placing = null; - const s = state(); - if (s) retarget(s); - }; - - let levelSendAt = 0; - let levelEchoHoldUntil = 0; - let pendingLevel: { rail: "vol" | "bri"; v: number } | null = null; - const setLevel = (rail: "vol" | "bri", v: number, final = false) => { - const value = clamp01(v); - if (rail === "vol") { - setVol(value); - if (value > 0) setMute(false); - } else setBri(value); - levelEchoHoldUntil = frameCount + LEVEL_ECHO_HOLD; - if (final || frameCount >= levelSendAt) { - send({ t: rail, v: Math.round(value * 100) / 100 }); - levelSendAt = frameCount + LEVEL_SEND_EVERY; - pendingLevel = null; - } else { - pendingLevel = { rail, v: value }; - } - }; - const toggleMute = () => { - setMute(!mute()); - send({ t: "mute" }); - }; - const mediaOp = (op: "play" | "next" | "prev") => { - send({ t: "media", op }); - const m = media(); - if (op === "play" && m.st !== "none") setMedia({ ...m, st: m.st === "playing" ? "paused" : "playing" }); - }; - const wifiToggle = () => { - const w = wifi(); - setWifi({ ...w, on: !w.on, ssid: w.on ? "" : w.ssid }); - send({ t: "wifi", on: w.on ? 0 : 1 }); - say(w.on ? "Wi-Fi off" : "Wi-Fi on"); - }; - const typeText = (text: string) => send({ t: "type", text }); - const typeKey = (k: string, mods: Modifier[] = []) => send(mods.length ? { t: "key", k, mods } : { t: "key", k }); - - /** Trackpad: motion and scroll accumulate and go out once per frame. */ - let ptrDx = 0; - let ptrDy = 0; - let scrollDx = 0; - let scrollDy = 0; - const pointer = (dx: number, dy: number) => { - ptrDx += dx; - ptrDy += dy; - }; - const scroll = (dx: number, dy: number) => { - scrollDx += dx; - scrollDy += dy; - }; - /** A pointer click, with any sticky modifier held around it — ctrl-click - * extends a selection, and a virtual pointer cannot carry a modifier of - * its own, so the daemon holds it. */ - const click = (b: "l" | "r" | "m") => { - const mods = kbMods(); - if (mods.length) setKbMods([]); - send(mods.length ? { t: "click", b, mods } : { t: "click", b }); - }; - /** The left button down or up. Down takes the sticky modifiers with it and - * the daemon holds them until the button comes back up. */ - const dragButton = (on: boolean) => { - if (!on) { - setClickHeld(false); - send({ t: "drag", on: 0 }); - return; - } - const mods = kbMods(); - if (mods.length) setKbMods([]); - setClickHeld(true); - send(mods.length ? { t: "drag", on: 1, mods } : { t: "drag", on: 1 }); - }; - - /** Run a row of Omarchy's menu on the laptop. */ - const menuRun = (id: string) => { - const item = menuItem(id); - if (!item) return; - send({ t: "menu", id }); - say(item.kind === "action" ? item.label : `${item.label} — on the laptop`); - }; - - /** Launch an application the daemon listed. */ - const launch = (id: string, label: string) => { - send({ t: "launch", app: id }); - say(label); - }; - - // ---- popups -------------------------------------------------------------------- - const openPopup = (a: string, x: number, y: number) => { - setPopup({ a, place: placePopup(x, y, TILE_POPUP_ROWS), floating: isFloating(a), hot: null }); - setPopupT(0); - }; - const popupHover = (hot: number | null) => { - const p = popup(); - if (p && p.hot !== hot) setPopup({ ...p, hot }); - }; - const closePopup = () => setPopup(null); - /** Rows: float / tile, full screen, open another, close. */ - const popupRun = (row: number) => { - const p = popup(); - if (!p) return; - closePopup(); - if (row === 0) floatWindow(p.a); - else if (row === 1) fullWindow(p.a); - else if (row === 2) openSame(p.a); - else if (row === 3) closeWindow(p.a); - }; - - const openCc = (ccMode: Cc["mode"], row: 0 | 1 | null = null, refX = 0) => { - setCc({ mode: ccMode, row, refX, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0, until: 0 }); - setCcT(0); - }; - const closeCc = () => setCc(null); - /** A finger sliding over the card: the slider row under it is adjusted - * relatively from where the finger entered the row. */ - const ccFollow = (x: number, y: number) => { - const c = cc(); - if (!c) return; - const row = ccRowAt(y); - if (c.row !== row) { - setCc({ ...c, row, refX: x, refLevel: row === 0 ? bri() : row === 1 ? vol() : 0 }); - return; - } - if (row === null) return; - setLevel(row === 0 ? "bri" : "vol", clamp01(c.refLevel + trackDelta(x - c.refX))); - }; - /** Release a held card: send the final level, linger, then close. */ - const ccReleased = () => { - const c = cc(); - if (!c) return; - if (c.row !== null) setLevel(c.row === 0 ? "bri" : "vol", c.row === 0 ? bri() : vol(), true); - if (c.mode === "hold") setCc({ ...c, row: null, until: frameCount + CC_LINGER_FRAMES }); - else setCc({ ...c, row: null }); - }; - /** Sticky mode: a drag begins on a track. */ - const ccGrabTrack = (row: 0 | 1, x: number) => { - const c = cc(); - if (c) setCc({ ...c, row, refX: x, refLevel: row === 0 ? bri() : vol() }); - }; - - const openSheet = () => { - setArmed(null); - setSheet({ at: MENU_ROOT, trail: [], hot: null }); - setSheetT(0); - setSheetListT(1); - sheetScroller.scrollTo(0, { immediate: true }); - }; - const closeSheet = () => { - setArmed(null); - setSheet(null); - }; - const sheetGo = (at: string, trail: string[]) => { - setArmed(null); - setSheet({ at, trail, hot: null }); - setSheetListT(0); - sheetScroller.stop(); - sheetScroller.scrollTo(0, { immediate: true }); - }; - const sheetPush = (id: string) => { - const s = sheet(); - if (s) sheetGo(id, [...s.trail, s.at]); - }; - const sheetBack = () => { - const s = sheet(); - if (!s) return; - if (s.trail.length === 0) { - closeSheet(); - return; - } - const trail = s.trail.slice(0, -1); - sheetGo(s.trail[s.trail.length - 1] ?? menuParent(s.at), trail); - }; - const sheetHover = (hot: number | null) => { - const s = sheet(); - if (s && s.hot !== hot) setSheet({ ...s, hot }); - }; - /** A finger landed on a row: highlight it, but only if it is still there - * SHEET_PRESS_FRAMES later. */ - const sheetArm = (row: number | null) => { - if (row === null) { - setArmed(null); - sheetHover(null); - return; - } - if (sheet()?.hot !== null && sheet()?.hot !== undefined) { - sheetHover(row); // already showing: follow the finger - return; - } - const a = armed(); - setArmed({ row, at: a ? a.at : frameCount }); - }; - /** A tapped row: a submenu opens here, the applications provider opens as - * a list here, anything else runs on the laptop and the sheet goes away. */ - const sheetTap = (i: number) => { - const row = sheetRows()[i]; - if (!row) return; - if (row.kind === "menu" || (row.kind === "provider" && row.id === APPS_ROUTE)) { - sheetPush(row.id); - return; - } - closeSheet(); - if (row.kind === "app") launch(row.id, row.label); - else menuRun(row.id); - }; - - /** A d-pad key went down: one press now, then a repeat while it is held. - * A sticky modifier rides along for the whole hold. */ - const dpadDown = (dir: Direction4) => { - const mods = kbMods(); - if (mods.length) setKbMods([]); - setDpad({ dir, at: frameCount, mods }); - typeKey(DIRECTION_KEYSYM[dir], mods); - }; - const dpadUp = () => setDpad(null); - - const openKeyFly = (fly: KeyFly) => { - setKeyFly(fly); - setFlyT(0); - }; - const closeKeyFly = () => setKeyFly(null); - const keyHover = (hot: number | null) => { - const f = keyFly(); - if (f && f.hot !== hot) setKeyFly({ ...f, hot }); - }; - /** Release: the chosen variant, or null for none. */ - const keyRelease = (): KeyVariant | null => { - const f = keyFly(); - if (!f) return null; - closeKeyFly(); - return f.hot !== null ? (f.variants[f.hot] ?? null) : null; - }; - - // ---- reducer --------------------------------------------------------------------- - const applyLine = (line: HostLine) => { - switch (line.t) { - case "hello": - setHostName(line.name); - setOmarchy(line.omarchy); - setLink(line.auth === "ok" ? "up" : line.auth === "pending" ? "pending" : "denied"); - break; - case "auth": - setLink(line.auth === "ok" ? "up" : line.auth === "pending" ? "pending" : "denied"); - break; - case "state": - commit(line); - break; - case "levels": - if (frameCount >= levelEchoHoldUntil && cc()?.row == null) { - setVol(clamp01(line.vol)); - setMute(line.mute === 1); - setBri(clamp01(line.bri)); - } - break; - case "theme": - if (isThemeColors(line.colors)) { - setColors(line.colors); - paintTheme(line.colors); - } - setThemeName(line.name); - if (Array.isArray(line.list)) setThemeList(line.list.filter((v): v is string => typeof v === "string")); - break; - case "cc": - applyCc(line); - break; - case "menu": - setMenuHidden(new Set(Array.isArray(line.hide) ? line.hide.filter((v): v is string => typeof v === "string") : [])); - setMenuChecked(new Set(Array.isArray(line.check) ? line.check.filter((v): v is string => typeof v === "string") : [])); - break; - case "apps": - applyApps(line); - break; - case "toast": - say(line.text); - break; - } - }; - /** One page of the application list; page 0 starts over, the page without - * `more` publishes what has arrived. */ - const applyApps = (line: HostApps) => { - if (line.seq === 0) appPages = []; - if (Array.isArray(line.a)) { - for (const entry of line.a) { - if (entry && typeof entry.i === "string" && typeof entry.n === "string") appPages.push({ i: entry.i, n: entry.n }); - } - } - if (line.more !== 1) setApps(appPages.slice()); - }; - - const applyCc = (line: HostCc) => { - if (line.wifi && typeof line.wifi === "object") { - setWifi({ - on: line.wifi.on === 1, - ssid: typeof line.wifi.ssid === "string" ? line.wifi.ssid : "", - sig: typeof line.wifi.sig === "number" ? line.wifi.sig : 0, - }); - } - if (line.media && typeof line.media === "object") { - const st = line.media.st; - setMedia({ - st: st === "playing" || st === "paused" ? st : "none", - title: typeof line.media.title === "string" ? line.media.title : "", - artist: typeof line.media.artist === "string" ? line.media.artist : "", - }); - } - }; - - // ---- frame loop ---------------------------------------------------------------------- - onFrame(() => { - frameCount += 1; - let moved = false; - - if (svc) { - const up = svc.open(); - if (up && !opened) { - opened = true; - svc.send({ t: "hello", proto: REMOTE_PROTO, device: deviceName() }); - } else if (!up && opened) { - opened = false; - setLink("search"); - setState(null); - for (const slot of slots) { - slot.dying = true; - slot.targetAlpha = 0; - } - } - if (up) for (const line of svc.poll()) applyLine(line); - } - - if (pendingLevel && frameCount >= levelSendAt) { - const { rail, v } = pendingLevel; - pendingLevel = null; - send({ t: rail, v: Math.round(v * 100) / 100 }); - levelSendAt = frameCount + LEVEL_SEND_EVERY; - } - if (ptrDx !== 0 || ptrDy !== 0) { - send({ t: "ptr", dx: Math.round(ptrDx * 10) / 10, dy: Math.round(ptrDy * 10) / 10 }); - ptrDx = 0; - ptrDy = 0; - } - if (scrollDx !== 0 || scrollDy !== 0) { - send({ t: "scroll", dx: Math.round(scrollDx), dy: Math.round(scrollDy) }); - scrollDx = 0; - scrollDy = 0; - } - - for (const slot of slots) { - if (slot.a === null) continue; - const c = slot.cur; - const t = slot.target; - const next: TileView = { - x: approach(c.x, t.x), - y: approach(c.y, t.y), - w: approach(c.w, t.w), - h: approach(c.h, t.h), - alpha: slot.targetAlpha === 0 ? Math.max(0, c.alpha - 0.12) : Math.min(1, c.alpha + 0.12), - }; - if (next.x !== c.x || next.y !== c.y || next.w !== c.w || next.h !== c.h || next.alpha !== c.alpha) { - slot.cur = next; - paintSlot(slot); - moved = true; - } - if (slot.dying && next.alpha <= 0) { - slot.a = null; - slot.dying = false; - slot.setLive(false); - } - } - - if (!ballDragging()) { - const b = ball(); - const nx = approach(ballCur.x, b.x); - const ny = approach(ballCur.y, b.y); - if (nx !== ballCur.x || ny !== ballCur.y) { - ballCur.x = nx; - ballCur.y = ny; - paintBall(); - moved = true; - } - } - - if (popup() && popupT() < 1) { - setPopupT(easeProgress(popupT())); - moved = true; - } - if (keyFly() && flyT() < 1) { - setFlyT(easeProgress(flyT())); - moved = true; - } - const held = dpad(); - if (held) { - const frames = frameCount - held.at; - if (frames >= ARROW_HOLD_FRAMES && (frames - ARROW_HOLD_FRAMES) % ARROW_REPEAT_FRAMES === 0) { - typeKey(DIRECTION_KEYSYM[held.dir], held.mods); - } - moved = true; - } - const c = cc(); - if (c) { - if (ccT() < 1) { - setCcT(easeProgress(ccT())); - moved = true; - } - if (c.mode === "hold" && c.row === null && c.until > 0 && frameCount >= c.until) setCc(null); - } - if (sheet()) { - const a = armed(); - if (a) { - if (frameCount - a.at >= SHEET_PRESS_FRAMES) { - setArmed(null); - sheetHover(a.row); - } - moved = true; - } - if (sheetT() < 1) { - setSheetT(easeProgress(sheetT())); - moved = true; - } - if (sheetListT() < 1) { - setSheetListT(easeProgress(sheetListT())); - moved = true; - } - sheetScroller.step(); - } - - // Press depth: a quick attack while held, a soft release after. - const target = pressHeld ? 1 : 0; - const depth = pressT(); - if (depth !== target) { - const next = target === 1 ? Math.min(1, depth + (1 - depth) * 0.55 + 0.02) : depth * 0.72; - if (next < 0.02 && target === 0) { - setPressT(0); - setPressed(null); - } else setPressT(next); - moved = true; - } - - if (toast() !== "" && frameCount >= toastUntil) setToast(""); - if (moved) setFrame(frameCount); - }); - - // ---- press feedback ---------------------------------------------------------------------- - const pressDown = (id: string | null) => { - pressHeld = id !== null; - setPressed(id); - if (id === null) setPressT(0); - }; - const pressRelease = () => { - // The depth eases back to zero and clears the target when it gets there, - // so a tap that lands and lifts inside one frame still shows. - pressHeld = false; - }; - - /** Ref for a tile slot's node: binds it and paints the current geometry. */ - const bindSlot = (slot: TileSlot) => (node: NodeMirror) => { - slot.node = node; - paintSlot(slot); - paintZ(slot); - }; - - return { - svc, - bindSlot, - link, - hostName, - omarchy, - state, - tabs, - layout, - fit, - focusTitle, - focusClass, - vol, - mute, - bri, - themeName, - themeList, - colors, - wifi, - media, - menuHidden, - menuChecked, - apps, - slots, - tilesForHit, - windowAt: (x: number, y: number) => windowAt(x, y, tilesForHit()), - gripAt, - isFloating, - mode, - setMode, - kbLayer, - setKbLayer, - kbMods, - setKbMods, - pressed, - pressT, - pressDown, - pressRelease, - drag, - setDrag, - ball, - ballDragging, - bindBall, - ballGrab, - ballDragTo, - ballRelease, - ballSize: BALL, - popup, - popupT, - openPopup, - popupHover, - popupRun, - closePopup, - cc, - ccT, - openCc, - closeCc, - ccFollow, - ccReleased, - ccGrabTrack, - sheet, - sheetT, - sheetListT, - sheetRows, - sheetScroller, - openSheet, - closeSheet, - sheetPush, - sheetBack, - sheetHover, - sheetArm, - sheetTap, - keyFly, - dpad, - dpadDown, - dpadUp, - clickHeld, - flyT, - openKeyFly, - closeKeyFly, - keyHover, - keyRelease, - toast, - say, - frame, - act, - workspace, - workspaceStep, - focusWindow, - closeWindow, - swapWindows, - moveWindow, - floatWindow, - fullWindow, - placeBegin, - placeTo, - placeCancel, - resizing, - resizeBegin, - resizeBy, - resizeCancel, - openSame, - setLevel, - toggleMute, - mediaOp, - wifiToggle, - typeText, - typeKey, - pointer, - scroll, - click, - dragButton, - menuRun, - launch, - applyLine, - send, - }; -} diff --git a/apps/pocket-remote/strip.tsx b/apps/pocket-remote/strip.tsx deleted file mode 100644 index 6e38f4c5b..000000000 --- a/apps/pocket-remote/strip.tsx +++ /dev/null @@ -1,220 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/strip.tsx — the top strip: the workspace tabs (a FIXED -// 1..N, because Omarchy binds those numbers whether or not Hyprland is -// keeping a workspace alive), the mode switch centred on the bar, the active -// layout's name, and the control centre's button at the end. -// -// Tap a tab to go there, hold one to bring the focused window along. Tap the -// control centre to open it sticky; hold it and slide down onto a slider to -// adjust and let go. - -import { Index } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import { GLYPH } from "./glyphs.ts"; -import type { GestureHandlers } from "./handlers.ts"; -import { Icon } from "./icons.tsx"; -import { BADGE, CC_BUTTON, MODE, MODE_HALF_W, STRIP, tabAt, within } from "./layout.ts"; -import type { RemoteStore } from "./store.ts"; -import { themed } from "./theme.ts"; - -export function Strip(p: { store: RemoteStore }) { - const tabs = () => p.store.tabs(); - const active = () => p.store.state()?.active ?? -1; - const layoutLabel = () => (p.store.layout() === "scrolling" ? "scrolling" : "dwindle"); - const stage = () => p.store.mode() === "stage"; - return ( - - - {(tab) => ( - - 0 - ? "absolute left-[1] top-0 w-[22] h-[24] rounded-[6] bg-[#414868]" - : "absolute left-[1] top-0 w-[22] h-[24] rounded-[6] bg-[#1a1b26]" - } - ref={themed(() => (tab().id === active() ? "accentFill" : tab().n > 0 ? "surfaceMuted" : "surface"))} - /> - 0 - ? "text-sm font-bold text-[#a9b1d6]" - : "text-sm text-[#565f89]" - } - ref={themed(() => (tab().id === active() ? "textOnAccent" : tab().n > 0 ? "text" : "textDim"))} - > - {tab().id === 10 ? "0" : `${tab().id}`} - - - - )} - - {/* layout badge */} - - - {layoutLabel()} - - - - {/* mode switch */} - - - - (stage() ? "fg" : "dim")} size="base" /> - - - (stage() ? "dim" : "fg")} size="base" /> - - - - {/* control centre */} - - - (p.store.cc() ? "accent" : "fg")} size="lg" /> - - - - ); -} - -type Target = - | { kind: "tab"; id: number } - | { kind: "badge" } - | { kind: "mode"; to: "stage" | "deck" } - | { kind: "cc" } - | { kind: "none" }; - -function stripTarget(store: RemoteStore, x: number, y: number): Target { - if (within(x, y, CC_BUTTON)) return { kind: "cc" }; - if (within(x, y, MODE)) return { kind: "mode", to: x < MODE.x + MODE_HALF_W ? "stage" : "deck" }; - if (within(x, y, BADGE)) return { kind: "badge" }; - const tab = tabAt(x, store.tabs()); - return tab ? { kind: "tab", id: tab.id } : { kind: "none" }; -} - -function pressId(t: Target): string | null { - switch (t.kind) { - case "tab": - return `tab:${t.id}`; - case "badge": - return "badge"; - case "mode": - return `mode:${t.to}`; - case "cc": - return "cc"; - default: - return null; - } -} - -/** The strip's touch handlers. A hold on the control centre's button turns - * the rest of that contact into a slide over the card. */ -export function stripHandlers(store: RemoteStore): GestureHandlers { - let down: Target = { kind: "none" }; - let sliding = false; - const reset = () => { - store.pressRelease(); - sliding = false; - }; - return { - onDown: (c) => { - down = stripTarget(store, c.x, c.y); - sliding = false; - store.pressDown(pressId(down)); - }, - onMove: (c) => { - if (sliding) store.ccFollow(c.x, c.y); - }, - onTap: () => { - const t = down; - store.pressRelease(); - switch (t.kind) { - case "tab": - store.workspace(t.id); - break; - case "badge": - store.act("layout"); - break; - case "mode": - store.setMode(t.to); - break; - case "cc": - if (store.cc()) store.closeCc(); - else store.openCc("sticky"); - break; - default: - break; - } - down = { kind: "none" }; - }, - onLongPress: (c) => { - const t = down; - if (t.kind === "tab") { - // Hold a tab: bring the focused window here and follow it. - const focus = store.state()?.focus; - store.pressDown(null); - if (focus) { - store.moveWindow(focus, t.id); - store.workspace(t.id); - } - down = { kind: "none" }; - } else if (t.kind === "cc") { - store.pressDown(null); - store.openCc("hold", null, c.x); - sliding = true; - } - }, - onPanStart: () => { - if (!sliding) store.pressDown(null); - }, - onUp: (c) => { - if (sliding) { - store.ccFollow(c.x, c.y); - store.ccReleased(); - } - reset(); - }, - onCancel: () => { - if (sliding) store.ccReleased(); - reset(); - }, - }; -} diff --git a/apps/pocket-remote/theme.ts b/apps/pocket-remote/theme.ts deleted file mode 100644 index 178de4cd2..000000000 --- a/apps/pocket-remote/theme.ts +++ /dev/null @@ -1,176 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/theme.ts — the remote wears the desktop's theme. Omarchy -// publishes its palette as colors.toml; the daemon forwards the keys the -// remote uses (protocol ThemeColors) whenever the theme changes, and every -// node that carries a themed colour re-paints through jump() on its -// NodeMirror. Class literals still carry Tokyo Night, Omarchy's default, so -// the first frame looks right before any theme line arrives. -// -// Why mirrors and not classes: a class string is a compile-time literal the -// device looks up in a baked table, so a colour that arrives at runtime can -// only reach a node as a prop write. Pressed states therefore live on -// separate overlay nodes (see desk.tsx) — a class flip on a themed node would -// re-apply the baked record over the runtime colour. - -import { createEffect, createSignal, type Accessor } from "solid-js"; -import { jump } from "@pocketjs/framework/animation"; -import type { NodeMirror } from "@pocketjs/framework/components"; -import type { ThemeColors } from "./protocol.ts"; - -export const TOKYO_NIGHT: ThemeColors = { - bg: "#1a1b26", - bgDark: "#13141c", - fg: "#a9b1d6", - fgDim: "#565f89", - accent: "#7aa2f7", - red: "#f7768e", - green: "#9ece6a", - yellow: "#e0af68", - blue: "#7aa2f7", - magenta: "#bb9af7", - cyan: "#449dab", - muted: "#414868", -}; - -/** What a themed node paints with which colour. */ -export type Role = - | "surface" // bgColor = bg - | "surfaceDark" // bgColor = bgDark - | "surfaceMuted" // bgColor = muted - | "surfaceMutedDim" // bgColor = muted at 50% - | "surfaceRaised" // bgColor = muted at 25% (a popup's body over the surface) - | "surfaceVeil" // bgColor = bgDark at 70% (behind a sheet) - | "accentFill" // bgColor = accent - | "accentTint" // bgColor = accent at 25% - | "dangerFill" // bgColor = red - | "okFill" // bgColor = green - | "text" // textColor = fg - | "textDim" // textColor = fgDim - | "textAccent" // textColor = accent - | "textOnAccent" // textColor = bgDark - | "textDanger" // textColor = red - | "textOk" // textColor = green - | "textWarn" // textColor = yellow - | "okFillDot" // bgColor = green (a status dot) - | "warnFill" // bgColor = yellow - | "fgFill" // bgColor = fg (icon strokes) - | "fgDimFill" // bgColor = fgDim - | "borderMuted" // borderColor = muted - | "borderFg" // borderColor = fg - | "borderAccent" // borderColor = accent - | "borderDanger"; // borderColor = red - -type Prop = "bgColor" | "textColor" | "borderColor"; - -function paint(role: Role, c: ThemeColors): [Prop, string] { - switch (role) { - case "surface": - return ["bgColor", c.bg]; - case "surfaceDark": - return ["bgColor", c.bgDark]; - case "surfaceMuted": - return ["bgColor", c.muted]; - case "surfaceMutedDim": - return ["bgColor", c.muted + "80"]; - case "surfaceRaised": - return ["bgColor", c.muted + "40"]; - case "surfaceVeil": - return ["bgColor", c.bgDark + "b3"]; - case "accentFill": - return ["bgColor", c.accent]; - case "accentTint": - return ["bgColor", c.accent + "40"]; - case "dangerFill": - return ["bgColor", c.red]; - case "okFill": - return ["bgColor", c.green]; - case "text": - return ["textColor", c.fg]; - case "textDim": - return ["textColor", c.fgDim]; - case "textAccent": - return ["textColor", c.accent]; - case "textOnAccent": - return ["textColor", c.bgDark]; - case "textDanger": - return ["textColor", c.red]; - case "textOk": - return ["textColor", c.green]; - case "textWarn": - return ["textColor", c.yellow]; - case "okFillDot": - return ["bgColor", c.green]; - case "warnFill": - return ["bgColor", c.yellow]; - case "fgFill": - return ["bgColor", c.fg]; - case "fgDimFill": - return ["bgColor", c.fgDim]; - case "borderMuted": - return ["borderColor", c.muted]; - case "borderFg": - return ["borderColor", c.fg]; - case "borderAccent": - return ["borderColor", c.accent]; - case "borderDanger": - return ["borderColor", c.red]; - } -} - -const [themeColorsSignal, setThemeColorsSignal] = createSignal(TOKYO_NIGHT); - -/** The live palette as a signal, for anything that derives from it. */ -export const themeColors: Accessor = themeColorsSignal; - -/** Paint one role onto one node with the given palette. */ -export function paintRole(node: NodeMirror, role: Role, colors: ThemeColors): void { - const [prop, value] = paint(role, colors); - jump(node, prop, value); -} - -/** - * A `ref` for a node that paints one themed colour. Repaints whenever the - * palette changes — and, because the effect runs after Solid's render pass, - * after any class flip on the same node, so a runtime colour always wins - * over the baked record. Pass a function for a role that changes with state - * (an active tab, a pressed key). - */ -export function themed(role: Role | (() => Role)): (node: NodeMirror) => void { - return (node) => { - createEffect(() => { - const colors = themeColors(); - const current = typeof role === "function" ? role() : role; - // The baked classes already carry Tokyo Night; painting it again on a - // static role would only cost a prop write per node at boot. - if (colors !== TOKYO_NIGHT || typeof role === "function") paintRole(node, current, colors); - }); - }; -} - -/** Repaint every themed node with a new palette. */ -export function setTheme(colors: ThemeColors): void { - setThemeColorsSignal(colors); -} - -export function currentTheme(): ThemeColors { - return themeColors(); -} - -/** Validate a palette off the wire: every key present and a #rrggbb colour. */ -export function isThemeColors(value: unknown): value is ThemeColors { - if (!value || typeof value !== "object") return false; - const keys: (keyof ThemeColors)[] = [ - "bg", "bgDark", "fg", "fgDim", "accent", "red", "green", "yellow", "blue", "magenta", "cyan", "muted", - ]; - const record = value as Record; - return keys.every((key) => typeof record[key] === "string" && /^#[0-9a-fA-F]{6}$/.test(record[key] as string)); -} - -/** Pretty theme name from its slug: "tokyo-night" -> "Tokyo Night". */ -export function themeTitle(slug: string): string { - return slug - .split("-") - .filter(Boolean) - .map((part) => part[0]!.toUpperCase() + part.slice(1)) - .join(" "); -} diff --git a/apps/pocket-remote/ui.tsx b/apps/pocket-remote/ui.tsx deleted file mode 100644 index 1cf18f02e..000000000 --- a/apps/pocket-remote/ui.tsx +++ /dev/null @@ -1,136 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/ui.tsx — the drawn half of the design system: the card, -// the row, the hairline and the press tint every surface is assembled from. -// Geometry comes from design.ts; the class literals that have to spell a -// radius or a colour out live here, next to the primitive that owns them, -// because a baked class string cannot take a token as a value. -// -// Every list on the remote — a held tile's popup, the menu sheet, the -// control centre — uses Row, so their paddings are identical by -// construction rather than by hand. - -import { Show } from "solid-js"; -import { Text, View } from "@pocketjs/framework/components"; -import type { JSX } from "solid-js"; -import { type Box, rowMetrics } from "./design.ts"; -import { Icon, type Tone } from "./icons.tsx"; -import { themed } from "./theme.ts"; - -/** A raised surface. `popup` is the small radius, `card` the large one. */ -export function Card(p: { at: Box; variant?: "card" | "popup"; children?: JSX.Element; ref?: (node: import("@pocketjs/framework/components").NodeMirror) => void }) { - const bind = (node: import("@pocketjs/framework/components").NodeMirror) => { - themed("surfaceDark")(node); - themed("borderMuted")(node); - p.ref?.(node); - }; - return ( - - {p.children} - - ); -} - -/** The tint a target wears while a finger is on it. */ -export function PressTint(p: { at: Box; on: boolean; radius?: "row" | "popup" | "card" }) { - return ( - - - - ); -} - -export interface RowProps { - /** The row's own top, in its container. */ - y: number; - width: number; - height: number; - /** Leading glyph; "" leaves the box empty. */ - glyph: string | (() => string); - glyphTone?: Tone | (() => Tone); - label: string | (() => string); - labelTone?: "text" | "danger" | "dim"; - /** Trailing glyph (a chevron, a tick). */ - trailing?: () => { glyph: string; tone: Tone } | null; - /** Highlighted: a finger is on it, or it is the hot item of a slide. */ - hot?: () => boolean; - /** Draw the hairline above this row (every row but the first). */ - hairline?: boolean; -} - -/** - * One list row: leading glyph, label on the middle line, optional trailing - * glyph, a highlight and a hairline — all placed by rowMetrics, so a popup - * row and a sheet row line up with each other. - */ -export function Row(p: RowProps) { - const m = () => rowMetrics(p.width, p.height, p.trailing !== undefined); - const label = () => (typeof p.label === "function" ? p.label() : p.label); - return ( - - - - - - - - - - - - - {label()} - - - - {(t) => ( - - t().glyph} tone={() => t().tone} size="base" /> - - )} - - - ); -} diff --git a/tests/pocket-remote-sim.test.ts b/tests/pocket-remote-sim.test.ts deleted file mode 100644 index 7d523c7d4..000000000 --- a/tests/pocket-remote-sim.test.ts +++ /dev/null @@ -1,515 +0,0 @@ -// Boots the built Pocket Remote bundle in the headless sim and drives it the -// way the daemon would: hello, theme, a Hyprland snapshot. No svc channel -// exists in the sim, so the app publishes its store as globalThis.__pocketRemote -// and the test feeds host lines straight into the reducer, then touches the -// screen through the real touch path. - -import { describe, expect, test } from "bun:test"; -import { bootWorld } from "../hosts/sim/sim.ts"; -import type { HostState } from "../apps/pocket-remote/protocol.ts"; -import { CLICK_KEY, DPAD_KEYS, keyboardKeys, MENU_KEY, TRACKPAD } from "../apps/pocket-remote/keyboard-layout.ts"; -import { - BALL_HOME, - CC_BUTTON, - launchCellRect, - MODE, - MODE_HALF_W, - POPUP_PAD, - POPUP_ROW_H, - SHEET_LIST, - sheetRowRect, - STAGE, - TAB_W, - TILE_POPUP_ROWS, -} from "../apps/pocket-remote/layout.ts"; -import type { RemoteStore } from "../apps/pocket-remote/store.ts"; - -const HZ = 60; - -function pack(x: number, y: number, id = 0): number { - return x > 511 || y > 511 ? (0x80000000 | (id << 20) | (y << 10) | x) >>> 0 : (id << 18) | (y << 9) | x; -} - -const SNAPSHOT: HostState = { - t: "state", - mon: { w: 1440, h: 900, x: 0, y: 0 }, - ws: [{ id: 1, n: 2 }, { id: 2, n: 0 }], - active: 1, - focus: "0x55f90cb39300", - layout: "dwindle", - win: [ - { a: "0x55f90cb39300", c: "foot", ti: "evan@x1nano-omarchy:~", ws: 1, x: 12, y: 38, w: 701, h: 850 }, - { a: "0x55f90e41dd40", c: "chromium", ti: "ChatGPT", ws: 1, x: 725, y: 38, w: 703, h: 850 }, - ], -}; - -/** The devtools tree: `{ i, t, c?, x?, k? }` — id, tag, class, text, kids. */ -function walk(node: unknown, visit: (n: Record) => void): void { - if (!node || typeof node !== "object") return; - const record = node as Record; - visit(record); - const kids = record.k; - if (Array.isArray(kids)) for (const child of kids) walk(child, visit); -} - -function texts(tree: unknown): string[] { - const out: string[] = []; - walk(tree, (n) => { - if (n.t === "#text" && typeof n.x === "string") out.push(n.x); - }); - return out; -} - -/** A connected remote over a fake svc channel: `sent` is what it asked - * the laptop for, in order. */ -async function connected(): Promise<{ world: Awaited>; store: RemoteStore; sent: unknown[] }> { - const sent: unknown[] = []; - const svc = { open: () => true, poll: () => [], send: (line: unknown) => sent.push(line) }; - const world = await bootWorld("pocket-remote-main", HZ, { __pocketRemoteSvc: svc }, undefined, { width: 480, height: 320 }); - const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote; - if (!store) throw new Error("the bundle did not publish its store"); - world.frame(0); - store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); - store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); - store.applyLine(SNAPSHOT); - for (let i = 0; i < 30; i += 1) world.frame(0); - sent.length = 0; - return { world, store, sent }; -} - -type World = Awaited>; - -const tap = (world: World, x: number, y: number, settle = 20) => { - world.frame(0, undefined, [pack(x, y)]); - world.frame(0, undefined, [pack(x, y)]); - world.frame(0, undefined, []); - for (let i = 0; i < settle; i += 1) world.frame(0); -}; - -/** Hold at one point, slide to another, release — the remote's second verb. */ -const holdSlide = (world: World, from: { x: number; y: number }, to: { x: number; y: number }, settle = 20) => { - for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); - for (let i = 1; i <= 6; i += 1) { - world.frame(0, undefined, [ - pack(Math.round(from.x + ((to.x - from.x) * i) / 6), Math.round(from.y + ((to.y - from.y) * i) / 6)), - ]); - } - world.frame(0, undefined, []); - for (let i = 0; i < settle; i += 1) world.frame(0); -}; - -/** The brightest run of pixels in a band, as a horizontal centre: the key - * bubble is a light chip over dark keys, so this finds where it sits. */ -function brightCentre(pixels: Uint8Array, top: number, bottom: number): number | null { - let sum = 0; - let count = 0; - for (let y = top; y < bottom; y += 1) { - for (let x = 0; x < 480; x += 1) { - const at = (y * 480 + x) * 4; - if (pixels[at]! > 180 && pixels[at + 1]! > 180 && pixels[at + 2]! > 180) { - sum += x; - count += 1; - } - } - } - return count > 40 ? sum / count : null; -} - -describe("pocket-remote in the sim", () => { - test("connects, mirrors a snapshot into tiles, and switches workspace from the strip", async () => { - const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); - const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote; - expect(store).toBeDefined(); - if (!store) return; - - world.frame(0); - expect(store.link()).toBe("off"); - expect(texts(world.getTree()).join(" ")).toContain("Pocket Remote"); - - store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); - store.applyLine({ - t: "theme", - name: "tokyo-night", - list: ["tokyo-night", "nord"], - colors: { - bg: "#1a1b26", bgDark: "#13141c", fg: "#a9b1d6", fgDim: "#565f89", accent: "#7aa2f7", - red: "#f7768e", green: "#9ece6a", yellow: "#e0af68", blue: "#7aa2f7", magenta: "#bb9af7", cyan: "#449dab", muted: "#414868", - }, - }); - store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); - store.applyLine({ t: "cc", wifi: { on: 1, ssid: "Petite Auberge", sig: 54 }, media: { st: "paused", title: "Blue in Green", artist: "Miles Davis" } }); - store.applyLine(SNAPSHOT); - for (let i = 0; i < 30; i += 1) world.frame(0); - - expect(store.link()).toBe("up"); - expect(store.vol()).toBeCloseTo(0.4); - expect(store.wifi().ssid).toBe("Petite Auberge"); - expect(store.media().st).toBe("paused"); - // A tile leads with the window's title and names its program under it: - // four terminals used to read "foot" four times. - expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.label())).toEqual([ - "evan@x1nano-omarchy:~", - "ChatGPT", - ]); - expect(store.slots.filter((slot) => slot.a !== null).map((slot) => slot.title())).toEqual(["Foot", "Chromium"]); - const shown = texts(world.getTree()); - expect(shown).toContain("evan@x1nano-omarchy:~"); - expect(shown).toContain("Chromium"); - expect(shown).toContain("dwindle"); - // Tabs are the fixed set Omarchy binds, not the two Hyprland reports. - expect(store.tabs().map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); - - // The tile pool settled: geometry landed inside the stage. - for (const slot of store.slots) { - if (slot.a === null) continue; - expect(slot.cur.x).toBeGreaterThanOrEqual(STAGE.x); - expect(slot.cur.x + slot.cur.w).toBeLessThanOrEqual(STAGE.x + STAGE.w + 1); - expect(slot.cur.alpha).toBe(1); - } - - // Tap workspace tab 2 on the strip: optimistic switch, tiles of ws 1 fade. - const x = store.tabs()[1]!.x + TAB_W / 2; - tap(world, x, 14); - expect(store.state()?.active).toBe(2); - expect(store.slots.filter((slot) => slot.a !== null).length).toBe(0); - const onEmpty = texts(world.getTree()).join(" "); - expect(onEmpty).toContain("empty workspace"); - // The launch bar is fixed: it was already there with the windows up. - expect(onEmpty).toContain("Terminal"); - - // Render a frame: the panel is 480x320 logical. - const pixels = world.render(); - expect(pixels.length).toBe(480 * 320 * 4); - }); - - test("the ball opens Omarchy's menu as a sheet, a submenu opens in place, back returns", async () => { - const { world, store, sent } = await connected(); - tap(world, BALL_HOME.x + 22, BALL_HOME.y + 22); - expect(store.sheet()?.at).toBe("root"); - let shown = texts(world.getTree()).join(" "); - expect(shown).toContain("Go"); - expect(shown).toContain("Trigger"); - expect(shown).toContain("System"); - // Trigger is the third root row: second column, second row. - const trigger = sheetRowRect(2); - tap(world, SHEET_LIST.x + trigger.x + 60, SHEET_LIST.y + trigger.y + 19); - expect(store.sheet()?.at).toBe("trigger"); - shown = texts(world.getTree()).join(" "); - expect(shown).toContain("Capture"); - expect(shown).not.toContain("Install"); - // A row with an action runs on the laptop and closes the sheet. - const rows = store.sheetRows(); - const emoji = rows.findIndex((row) => row.id === "trigger.emoji"); - expect(emoji).toBeGreaterThanOrEqual(0); - const r = sheetRowRect(emoji); - tap(world, SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 19); - expect(store.sheet()).toBeNull(); - expect(sent).toContainEqual({ t: "menu", id: "trigger.emoji" }); - // Hidden rows vanish from the sheet. - store.applyLine({ t: "menu", hide: ["trigger.emoji"], check: [] }); - store.openSheet(); - store.sheetPush("trigger"); - world.frame(0); - expect(store.sheetRows().map((row) => row.id)).not.toContain("trigger.emoji"); - store.sheetBack(); - expect(store.sheet()?.at).toBe("root"); - store.sheetBack(); - expect(store.sheet()).toBeNull(); - }); - - test("the control centre opens from the strip and a tap outside closes it", async () => { - const { world, store, sent } = await connected(); - tap(world, CC_BUTTON.x + CC_BUTTON.w / 2, CC_BUTTON.y + CC_BUTTON.h / 2); - expect(store.cc()?.mode).toBe("sticky"); - expect(texts(world.getTree()).join(" ")).toContain("Wi-Fi"); - // The volume icon mutes. - store.applyLine({ t: "levels", vol: 0.4, bri: 0.33 }); - tap(world, 204 + 28, 32 + 166 + 18); - expect(sent).toContainEqual({ t: "mute" }); - tap(world, 40, 300); - expect(store.cc()).toBeNull(); - }); - - test("the deck types through the wire and the trackpad moves the pointer", async () => { - const { world, store, sent } = await connected(); - tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - expect(store.mode()).toBe("deck"); - expect(texts(world.getTree()).join(" ")).toContain("space"); - const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; - tap(world, f.x + f.w / 2, f.y + f.h / 2); - expect(sent).toContainEqual({ t: "type", text: "f" }); - // ctrl then c: a chord. - const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; - tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); - const c = keyboardKeys("lower").find((k) => k.def.label === "c")!; - tap(world, c.x + c.w / 2, c.y + c.h / 2); - expect(sent).toContainEqual({ t: "key", k: "c", mods: ["ctrl"] }); - // A stroke across the trackpad. - const y = TRACKPAD.y + 50; - for (let i = 0; i < 12; i += 1) world.frame(0, undefined, [pack(100 + i * 6, y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 5; i += 1) world.frame(0); - const moves = sent.filter((line) => (line as { t: string }).t === "ptr") as { dx: number; dy: number }[]; - expect(moves.length).toBeGreaterThan(3); - expect(moves.reduce((sum, m) => sum + m.dx, 0)).toBeGreaterThan(60); - expect(sent).not.toContainEqual({ t: "click", b: "l" }); - // A tap on the trackpad clicks. - tap(world, 200, y); - expect(sent).toContainEqual({ t: "click", b: "l" }); - }); - - test("holding a tile opens its popup and the same finger picks a row", async () => { - const { world, store, sent } = await connected(); - const fit = store.fit()!; - // The right-hand window's tile, held in its middle. - const tile = store.slots.find((slot) => slot.a === "0x55f90e41dd40")!; - const from = { x: Math.round(tile.cur.x + tile.cur.w / 2), y: Math.round(tile.cur.y + tile.cur.h / 2) }; - expect(fit.rect.w).toBeGreaterThan(0); - for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); - const popup = store.popup(); - expect(popup?.a).toBe("0x55f90e41dd40"); - expect(popup!.place.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 2 * POPUP_PAD); - // No tree probe while a finger is down: the probe advances the world by - // one touchless frame, which would end the hold being tested. - // Slide onto the second row and release: one gesture, no second tap. - const row = { x: popup!.place.x + 40, y: popup!.place.y + POPUP_PAD + POPUP_ROW_H + POPUP_ROW_H / 2 }; - for (let i = 1; i <= 6; i += 1) { - world.frame(0, undefined, [pack(Math.round(from.x + ((row.x - from.x) * i) / 6), Math.round(from.y + ((row.y - from.y) * i) / 6))]); - } - expect(store.popup()?.hot).toBe(1); - world.frame(0, undefined, []); - for (let i = 0; i < 10; i += 1) world.frame(0); - expect(store.popup()).toBeNull(); - expect(sent).toContainEqual({ t: "win", op: "full", a: "0x55f90e41dd40" }); - - // Lifting without sliding leaves the popup up (whatever it covers), and - // a later tap acts. - for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(from.x, from.y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 10; i += 1) world.frame(0); - expect(store.popup()).not.toBeNull(); - expect(texts(world.getTree()).join(" ")).toContain("Full screen"); - const place = store.popup()!.place; - tap(world, place.x + 40, place.y + POPUP_PAD + POPUP_ROW_H / 2); - expect(store.popup()).toBeNull(); - expect(sent).toContainEqual({ t: "win", op: "float", a: "0x55f90e41dd40" }); - }); - - test("the launch bar starts an app from anywhere on the stage", async () => { - const { world, store, sent } = await connected(); - expect(texts(world.getTree()).join(" ")).toContain("Browser"); - const cell = launchCellRect(1, 3); - tap(world, cell.x + cell.w / 2, cell.y + cell.h / 2); - expect(sent).toContainEqual({ t: "act", id: "browser" }); - // The bar belongs to the stage: the deck's bottom half is the trackpad. - tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - expect(texts(world.getTree()).join(" ")).not.toContain("Files"); - }); - - test("the sheet is one column, scrolls, and lists the machine's applications", async () => { - const { world, store, sent } = await connected(); - store.applyLine({ t: "apps", seq: 0, more: 1, a: [{ i: "foot", n: "Foot" }, { i: "chromium", n: "Chromium" }] }); - store.applyLine({ t: "apps", seq: 1, a: [{ i: "org.gnome.Nautilus", n: "Files" }] }); - expect(store.apps().length).toBe(3); - - tap(world, BALL_HOME.x + 22, BALL_HOME.y + 22); - const root = store.sheetRows(); - expect(root.length).toBe(10); - // One column: every row shares an x and steps by one row height. - expect(sheetRowRect(1).x).toBe(sheetRowRect(0).x); - expect(sheetRowRect(1).y - sheetRowRect(0).y).toBe(sheetRowRect(0).h); - // A finger that lands to fling must not flash a row's highlight; one - // that stays put does highlight. (A release on a row navigates, so the - // sheet is reopened at the root afterwards.) - const onRow = { x: SHEET_LIST.x + 100, y: SHEET_LIST.y + 150 }; - world.frame(0, undefined, [pack(onRow.x, onRow.y)]); - world.frame(0, undefined, [pack(onRow.x, onRow.y)]); - expect(store.sheet()!.hot).toBeNull(); - for (let i = 0; i < 12; i += 1) world.frame(0, undefined, [pack(onRow.x, onRow.y)]); - expect(store.sheet()!.hot).toBe(3); - world.frame(0, undefined, []); - for (let i = 0; i < 12; i += 1) world.frame(0); - store.openSheet(); - for (let i = 0; i < 12; i += 1) world.frame(0); - expect(store.sheet()!.hot).toBeNull(); - - // Ten rows do not fit: a fling scrolls the list. - const listMid = { x: SHEET_LIST.x + 100, y: SHEET_LIST.y + 150 }; - world.frame(0, undefined, [pack(listMid.x, listMid.y)]); - for (let i = 1; i <= 8; i += 1) world.frame(0, undefined, [pack(listMid.x, listMid.y - i * 12)]); - world.frame(0, undefined, []); - for (let i = 0; i < 40; i += 1) world.frame(0); - expect(store.sheetScroller.offset()).toBeGreaterThan(20); - expect(store.sheet()).not.toBeNull(); - - // Apps opens on the device, not the laptop. - store.sheetScroller.scrollTo(0, { immediate: true }); - world.frame(0); - const appsAt = store.sheetRows().findIndex((row) => row.id === "apps"); - const r = sheetRowRect(appsAt); - tap(world, SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 20); - expect(store.sheet()?.at).toBe("apps"); - expect(store.sheetRows().map((row) => row.label)).toEqual(["Foot", "Chromium", "Files"]); - expect(texts(world.getTree()).join(" ")).toContain("Chromium"); - // Tapping one launches it and closes the sheet. - const first = sheetRowRect(0); - tap(world, SHEET_LIST.x + first.x + 60, SHEET_LIST.y + first.y + 20); - expect(store.sheet()).toBeNull(); - expect(sent).toContainEqual({ t: "launch", app: "foot" }); - }); - - test("a tile's corner resizes the window, and its popup opens another", async () => { - const { world, store, sent } = await connected(); - const tile = store.slots.find((slot) => slot.a === "0x55f90e41dd40")!; - const grip = { x: Math.round(tile.cur.x + tile.cur.w - 6), y: Math.round(tile.cur.y + tile.cur.h - 6) }; - expect(store.gripAt(grip.x, grip.y)).toBe("0x55f90e41dd40"); - // Drag the corner left: the window is asked to shrink by monitor px. - world.frame(0, undefined, [pack(grip.x, grip.y)]); - for (let i = 1; i <= 8; i += 1) world.frame(0, undefined, [pack(grip.x - i * 6, grip.y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 6; i += 1) world.frame(0); - const resizes = sent.filter((line) => (line as { op?: string }).op === "resize") as { dx: number; dy: number }[]; - expect(resizes.length).toBeGreaterThan(0); - expect(resizes.reduce((sum, r) => sum + r.dx, 0)).toBeLessThan(-100); - // The focus follows the corner being grabbed, the way a resize does. - expect(sent).toContainEqual({ t: "win", op: "focus", a: "0x55f90e41dd40" }); - - // Its popup's third row opens another window of the same program. - const mid = { x: Math.round(tile.cur.x + tile.cur.w / 2), y: Math.round(tile.cur.y + tile.cur.h / 2) }; - for (let i = 0; i < 30; i += 1) world.frame(0, undefined, [pack(mid.x, mid.y)]); - world.frame(0, undefined, []); - for (let i = 0; i < 10; i += 1) world.frame(0); - const place = store.popup()!.place; - expect(texts(world.getTree()).join(" ")).toContain("Open another"); - tap(world, place.x + 40, place.y + POPUP_PAD + POPUP_ROW_H * 2 + POPUP_ROW_H / 2); - expect(sent).toContainEqual({ t: "win", op: "same", a: "0x55f90e41dd40" }); - }); - - test("floating windows are stacked above the tiled ones", async () => { - const { store } = await connected(); - store.applyLine({ - t: "state", - mon: { w: 1440, h: 900, x: 0, y: 0 }, - ws: [{ id: 1, n: 3 }], - active: 1, - focus: "0xT1", - layout: "dwindle", - win: [ - { a: "0xT1", c: "foot", ti: "one", ws: 1, x: 0, y: 0, w: 720, h: 900 }, - { a: "0xF1", c: "mpv", ti: "float", ws: 1, x: 300, y: 300, w: 400, h: 300, f: 1 }, - { a: "0xT2", c: "foot", ti: "two", ws: 1, x: 720, y: 0, w: 720, h: 900 }, - ], - }); - const z = (a: string) => store.slots.find((slot) => slot.a === a)!.z; - expect(z("0xF1")).toBeGreaterThan(z("0xT1")); - expect(z("0xF1")).toBeGreaterThan(z("0xT2")); - // Within a group, the more recently focused sits higher. - expect(z("0xT1")).toBeGreaterThan(z("0xT2")); - }); - - test("the ball is on the stage only: the deck's own controls own that space", async () => { - const { world, store } = await connected(); - tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - expect(store.mode()).toBe("deck"); - // A drag where the ball would be belongs to the deck: the ball itself - // does not move, because it is not on this screen. - const before = store.ball(); - for (let i = 0; i < 8; i += 1) { - world.frame(0, undefined, [pack(before.x + 22, Math.round(before.y + 22 - i * 6))]); - } - world.frame(0, undefined, []); - for (let i = 0; i < 6; i += 1) world.frame(0); - expect(store.ball()).toEqual(before); - expect(store.ballDragging()).toBe(false); - }); - - test("the d-pad fires at once and repeats while held, with the modifier riding along", async () => { - const { world, store, sent } = await connected(); - tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - const right = DPAD_KEYS.r; - const at = { x: right.x + right.w / 2, y: right.y + right.h / 2 }; - - // A tap: exactly one Right, on the press. - world.frame(0, undefined, [pack(at.x, at.y)]); - expect(store.dpad()?.dir).toBe("r"); - expect(sent.filter((line) => (line as { t: string }).t === "key")).toEqual([{ t: "key", k: "Right" }]); - world.frame(0, undefined, []); - for (let i = 0; i < 4; i += 1) world.frame(0); - expect(store.dpad()).toBeNull(); - expect(sent.filter((line) => (line as { t: string }).t === "key").length).toBe(1); - - // Held: the first press, then repeats. - sent.length = 0; - const up = DPAD_KEYS.u; - for (let i = 0; i < 70; i += 1) world.frame(0, undefined, [pack(up.x + up.w / 2, up.y + up.h / 2)]); - const ups = sent.filter((line) => (line as { k?: string }).k === "Up"); - expect(ups.length).toBeGreaterThan(4); - expect(ups.length).toBeLessThan(14); - world.frame(0, undefined, []); - for (let i = 0; i < 4; i += 1) world.frame(0); - - // A sticky modifier rides along: ctrl then left is ctrl+Left. - sent.length = 0; - const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; - tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); - const left = DPAD_KEYS.l; - tap(world, left.x + left.w / 2, left.y + left.h / 2, 5); - expect(sent).toContainEqual({ t: "key", k: "Left", mods: ["ctrl"] }); - expect(store.kbMods()).toEqual([]); - }); - - test("the deck's menu key opens the sheet, and ctrl reaches the pointer", async () => { - const { world, store, sent } = await connected(); - tap(world, MODE.x + MODE_HALF_W + 17, MODE.y + 11); - expect(store.mode()).toBe("deck"); - - // ctrl then a tap on the pad: the click carries the modifier, because a - // virtual pointer cannot hold one itself. - const ctrl = keyboardKeys("lower").find((k) => k.def.label === "ctrl")!; - tap(world, ctrl.x + ctrl.w / 2, ctrl.y + ctrl.h / 2, 5); - expect(store.kbMods()).toEqual(["ctrl"]); - tap(world, TRACKPAD.x + 60, TRACKPAD.y + 50, 6); - expect(sent).toContainEqual({ t: "click", b: "l", mods: ["ctrl"] }); - expect(store.kbMods()).toEqual([]); - - // The click key holds the button down: the other finger drags a - // selection, and lifting the key ends it. - sent.length = 0; - world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); - for (let i = 0; i < 6; i += 1) world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); - expect(store.clickHeld()).toBe(true); - expect(sent).toContainEqual({ t: "drag", on: 1 }); - // A second finger on the pad moves the pointer while the button is down. - for (let i = 1; i <= 8; i += 1) { - world.frame(0, undefined, [ - pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20), - pack(TRACKPAD.x + 40 + i * 8, TRACKPAD.y + 40, 1), - ]); - } - expect(sent.some((line) => (line as { t: string }).t === "ptr")).toBe(true); - // Lifting the pad finger must not click while the button is held. - world.frame(0, undefined, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); - for (let i = 0; i < 3; i += 1) world.frame(0); - expect(sent.filter((line) => (line as { t: string }).t === "click").length).toBe(0); - world.frame(0, undefined, []); - for (let i = 0; i < 4; i += 1) world.frame(0); - expect(store.clickHeld()).toBe(false); - expect(sent).toContainEqual({ t: "drag", on: 0 }); - - // The menu key opens Omarchy's sheet from the deck. - tap(world, MENU_KEY.x + 30, MENU_KEY.y + 20); - expect(store.sheet()?.at).toBe("root"); - }); - - test("a hello that is still pending shows the approval screen", async () => { - const world = await bootWorld("pocket-remote-main", HZ, undefined, undefined, { width: 480, height: 320 }); - const store = (globalThis as { __pocketRemote?: RemoteStore }).__pocketRemote!; - store.applyLine({ t: "hello", proto: 2, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "pending" }); - world.frame(0); - expect(store.link()).toBe("pending"); - expect(texts(world.getTree()).join(" ")).toContain("approve this remote on x1nano-omarchy"); - store.applyLine({ t: "auth", auth: "ok" }); - world.frame(0); - expect(store.link()).toBe("up"); - }); -}); diff --git a/tests/pocket-remote.test.ts b/tests/pocket-remote.test.ts deleted file mode 100644 index 7ec2f8790..000000000 --- a/tests/pocket-remote.test.ts +++ /dev/null @@ -1,1019 +0,0 @@ -// Pocket Remote: the wire constants pinned to spec.ts, framing, protocol -// clipping, the action table's invariants, the layout arithmetic (stage, -// ball, popup, control centre, menu sheet, deck), the Hyprland -> snapshot -// reduction, the Omarchy readers (levels, theme, network, MPRIS), the menu -// source parser and the baked menu table, and the deck's keyboard. - -import { describe, expect, test } from "bun:test"; -import { - PROP, - SVC_POLL_BUF, - WIRE_BEACON_MAGIC, - WIRE_BEACON_PORT, - WIRE_HEADER_SIZE, - WIRE_MAGIC, - WIRE_MAX_PAYLOAD, - WIRE_MSG, - WIRE_PORT, - WIRE_VERSION, -} from "../contracts/spec/spec.ts"; -import { ACTIONS, actionById, actionsOf, LAUNCHERS } from "../apps/pocket-remote/actions.ts"; -import { GUTTER, ICON_BOX, RADIUS, ROW_H, rowMetrics, SPACE } from "../apps/pocket-remote/design.ts"; -import { appName, windowLabels } from "../apps/pocket-remote/names.ts"; -import { GLYPH } from "../apps/pocket-remote/glyphs.ts"; -import * as wire from "../apps/pocket-remote/host/wire.ts"; -import { - buildState, - cleanTitle, - luaWindow, - luaWorkspace, - parseEvent, - type HyprClient, - type HyprMonitor, - type HyprWorkspace, -} from "../apps/pocket-remote/host/hypr.ts"; -import { childrenOf, normalizeMenu, parentOf, parseMenuJsonc, stripJsonc } from "../apps/pocket-remote/host/menu-source.ts"; -import { - applicationDirectories, - evaluateMenuConditions, - launchableName, - launchApp, - paletteFrom, - parseDesktopEntry, - parseBrightnessctl, - parseColorsToml, - parseMprisNames, - parseMprisPlayer, - parseNetworkStatus, - parsePactlVolume, - parseRadio, - runMenuEntry, - wtypeArgs, -} from "../apps/pocket-remote/host/omarchy.ts"; -import { - ARROW_HOLD_FRAMES, - ARROW_REPEAT_FRAMES, - BAND, - chipAt, - chipRects, - CLICK_KEY, - deckTargetAt, - DIRECTION_KEYSYM, - DPAD, - DPAD_KEYS, - dpadAt, - KEYBOARD, - keyAt, - keyboardKeys, - keysymFor, - keyToLine, - MENU_KEY, - TOUCH_BIAS_Y, - TRACKPAD, -} from "../apps/pocket-remote/keyboard-layout.ts"; -import { - approach, - BADGE, - BALL, - BALL_HOME, - BALL_MARGIN, - BALL_Y_MAX, - BALL_Y_MIN, - ballHit, - ballSnap, - CC, - CC_BUTTON, - CC_ROW_Y, - CC_TRACK_W, - CC_TRACK_X, - ccHit, - ccRowAt, - easeProgress, - fitMonitor, - LAUNCH_BAR, - launchCellAt, - launchCellRect, - MODE, - placePopup, - pointerGain, - POPUP_PAD, - POPUP_ROW_H, - POPUP_W, - popupRowAt, - SCREEN_H, - SCREEN_W, - SHEET, - SHEET_LIST, - SHEET_RADIUS, - SHEET_ROW_H, - sheetContentH, - sheetMaxScroll, - sheetRowAt, - sheetRowRect, - STAGE, - stageToMonitor, - stageWindows, - stagger, - STRIP, - stripTabs, - swapDirection, - TAB_MAX, - TAB_MIN, - TAB_W, - TAB_X0, - tabAt, - TILE_GRIP, - tileGripHit, - TILE_GRIP_MIN, - tileGripRect, - tileGripTarget, - TILE_POPUP_ROWS, - tileRect, - trackDelta, - trackFill, - windowAt, -} from "../apps/pocket-remote/layout.ts"; -import { MENU, MENU_OMARCHY_VERSION } from "../apps/pocket-remote/menu.ts"; -import { MENU_DOT_EMOJI, MENU_ROOT, menuChildren, menuItem, menuParent, menuTitle, menuVisible } from "../apps/pocket-remote/menu-tree.ts"; -import { clipTitle, parseLines, REMOTE_PROTO, TITLE_MAX, WINDOWS_MAX, type HostState } from "../apps/pocket-remote/protocol.ts"; -import { isThemeColors, themeTitle, TOKYO_NIGHT } from "../apps/pocket-remote/theme.ts"; - -describe("pocket-remote wire", () => { - test("the daemon's copy of the PKNT constants matches spec.ts", () => { - expect(wire.WIRE_MAGIC).toBe(WIRE_MAGIC); - expect(wire.WIRE_BEACON_MAGIC).toBe(WIRE_BEACON_MAGIC); - expect(wire.WIRE_VERSION).toBe(WIRE_VERSION); - expect(wire.WIRE_HEADER_SIZE).toBe(WIRE_HEADER_SIZE); - expect(wire.WIRE_MAX_PAYLOAD).toBe(WIRE_MAX_PAYLOAD); - expect(wire.WIRE_BEACON_PORT).toBe(WIRE_BEACON_PORT); - expect(wire.WIRE_PORT).toBe(WIRE_PORT); - expect(WIRE_MSG).toMatchObject(wire.WIRE_MSG); - expect(wire.SVC_POLL_BUF).toBe(SVC_POLL_BUF); - expect(REMOTE_PROTO).toBe(2); - }); - - test("frames round-trip through the parser, hello parses incrementally", () => { - const parser = new wire.FrameParser(); - const a = wire.encodeCtrl('{"t":"ping"}'); - const b = wire.encodeFrame(WIRE_MSG.pong, new Uint8Array([1, 2, 3, 4])); - const joined = new Uint8Array(a.length + b.length); - joined.set(a); - joined.set(b, a.length); - const frames = [...parser.push(joined.subarray(0, 5)), ...parser.push(joined.subarray(5))]; - expect(frames.length).toBe(2); - expect(frames[0]!.type).toBe(WIRE_MSG.ctrl); - expect(new TextDecoder().decode(frames[0]!.payload)).toBe('{"t":"ping"}'); - expect(frames[1]!.type).toBe(WIRE_MSG.pong); - expect([...frames[1]!.payload]).toEqual([1, 2, 3, 4]); - - const hello = new Uint8Array(7 + 13); - new DataView(hello.buffer).setUint32(0, WIRE_MAGIC, true); - hello[4] = WIRE_VERSION; - hello[6] = 13; - hello.set(new TextEncoder().encode("pocket-remote"), 7); - expect(wire.parseHello(hello.subarray(0, 10))).toBeNull(); - expect(wire.parseHello(hello)).toEqual({ app: "pocket-remote", consumed: 20 }); - expect(() => wire.parseHello(new Uint8Array(8))).toThrow(/magic/); - expect(wire.encodeHelloAck().length).toBe(8); - }); - - test("beacon layout: magic, version, port, app, name", () => { - const beacon = wire.encodeBeacon("pocket-remote", "x1nano", 8622); - const view = new DataView(beacon.buffer); - expect(view.getUint32(0, true)).toBe(WIRE_BEACON_MAGIC); - expect(beacon[4]).toBe(WIRE_VERSION); - expect(view.getUint16(6, true)).toBe(8622); - expect(beacon[8]).toBe(13); - expect(new TextDecoder().decode(beacon.subarray(9, 22))).toBe("pocket-remote"); - expect(beacon[22]).toBe(6); - }); -}); - -describe("pocket-remote protocol", () => { - test("parseLines skips torn or foreign lines", () => { - const lines = parseLines<{ t: string }>('{"t":"a"}\n{"t":"b"\n\n{"x":1}\n{"t":"c"}'); - expect(lines.map((l) => l.t)).toEqual(["a", "c"]); - }); - - test("titles clip to TITLE_MAX code points with an ellipsis", () => { - expect(clipTitle("short")).toBe("short"); - const long = "x".repeat(TITLE_MAX + 5); - expect(Array.from(clipTitle(long)).length).toBe(TITLE_MAX); - expect(clipTitle(long).endsWith("…")).toBe(true); - expect(clipTitle(" a b\n c ")).toBe("a b c"); - }); - - test("a full snapshot of WINDOWS_MAX windows fits one poll batch", () => { - const state: HostState = { - t: "state", - mon: { w: 3840, h: 2160, x: 0, y: 0 }, - ws: Array.from({ length: 10 }, (_, i) => ({ id: i + 1, n: 3 })), - active: 10, - focus: "0x55f90cb39300", - layout: "scrolling", - special: 1, - win: Array.from({ length: WINDOWS_MAX }, (_, i) => ({ - a: `0x55f90cb3${(0x9300 + i).toString(16)}`, - c: "org.gnome.Nautilus.Something", - ti: "x".repeat(TITLE_MAX), - ws: (i % 10) + 1, - x: 1234, - y: 1234, - w: 3840, - h: 2160, - f: 1 as const, - fs: 2 as const, - p: 1 as const, - })), - }; - expect(JSON.stringify(state).length).toBeLessThan(SVC_POLL_BUF); - }); -}); - -describe("pocket-remote actions", () => { - test("ids are unique, every launcher exists, commands are argv or Lua", () => { - const ids = ACTIONS.map((a) => a.id); - expect(new Set(ids).size).toBe(ids.length); - for (const id of LAUNCHERS) expect(actionById(id)?.group).toBe("launch"); - expect(actionById("nope")).toBeUndefined(); - for (const action of ACTIONS) { - if ("exec" in action.run) { - expect(action.run.exec.length).toBeGreaterThan(0); - for (const word of action.run.exec) expect(word).not.toMatch(/[|;&$`]/); - } else { - // Hyprland 0.5x's socket evaluates `hl.dispatch()`: every - // dispatcher is a constructor call under hl.dsp, balanced. - expect(action.run.dispatch).toMatch(/^hl\.dsp\.[a-z_.]+\(.*\)$/); - expect((action.run.dispatch.match(/\(/g) ?? []).length).toBe((action.run.dispatch.match(/\)/g) ?? []).length); - } - } - expect(actionById("terminal")!.run).toEqual({ exec: ["omarchy-launch-terminal"] }); - expect(actionById("wsNext")!.run).toEqual({ dispatch: 'hl.dsp.focus({ workspace = "e+1" })' }); - expect(actionById("layout")!.run).toEqual({ exec: ["omarchy-hyprland-workspace-layout-toggle"] }); - expect(actionById("play")!.run).toEqual({ exec: ["omarchy-shell", "media", "playPause"] }); - expect(actionsOf("media").length).toBe(3); - }); -}); - -describe("pocket-remote layout", () => { - const mon = { w: 1440, h: 900 }; - - test("the three bands cover the screen; the mode switch is centred and clears the tabs", () => { - expect(STRIP.y).toBe(0); - expect(STAGE.y).toBe(STRIP.h); - expect(STAGE.y + STAGE.h).toBe(LAUNCH_BAR.y); - expect(LAUNCH_BAR.y + LAUNCH_BAR.h).toBe(SCREEN_H); - // Centred on the bar, and past the widest the tabs can grow. - expect(MODE.x).toBe(SCREEN_W - (MODE.x + MODE.w)); - expect(TAB_X0 + TAB_MAX * TAB_W).toBeLessThanOrEqual(MODE.x); - expect(MODE.x + MODE.w).toBeLessThanOrEqual(BADGE.x); - expect(BADGE.x + BADGE.w).toBeLessThanOrEqual(CC_BUTTON.x); - expect(CC_BUTTON.x + CC_BUTTON.w).toBeLessThanOrEqual(SCREEN_W); - for (const r of [BADGE, MODE, CC_BUTTON]) expect(r.y + r.h).toBeLessThanOrEqual(STRIP.h); - }); - - test("a 16:10 monitor fits the stage centred, preserving aspect", () => { - const fit = fitMonitor(mon); - expect(fit.rect.w).toBeLessThanOrEqual(STAGE.w); - expect(fit.rect.h).toBeLessThanOrEqual(STAGE.h); - expect(Math.abs(fit.rect.w / fit.rect.h - 1.6)).toBeLessThan(0.02); - expect(fit.rect.x + fit.rect.w / 2).toBeCloseTo(STAGE.x + STAGE.w / 2, -1); - expect(fit.rect.y + fit.rect.h / 2).toBeCloseTo(STAGE.y + STAGE.h / 2, -1); - }); - - test("tiles map window geometry to stage pixels, stay hit-testable and map back", () => { - const fit = fitMonitor(mon); - const left = tileRect({ a: "a", c: "foot", ti: "", ws: 1, x: 0, y: 0, w: 720, h: 900 }, fit); - const right = tileRect({ a: "b", c: "web", ti: "", ws: 1, x: 720, y: 0, w: 720, h: 900 }, fit); - expect(left.x).toBe(fit.rect.x); - expect(left.x + left.w).toBe(right.x); - expect(right.x + right.w).toBe(fit.rect.x + fit.rect.w); - const tiles = [{ a: "a", rect: left }, { a: "b", rect: right }]; - expect(windowAt(left.x + 5, left.y + 5, tiles)).toBe("a"); - expect(windowAt(right.x + 5, right.y + 5, tiles)).toBe("b"); - expect(windowAt(0, 0, tiles)).toBeNull(); - expect(swapDirection(left, right)).toBe("r"); - expect(swapDirection(right, left)).toBe("l"); - const back = stageToMonitor(right.x, right.y, fit); - expect(Math.abs(back.x - 720)).toBeLessThanOrEqual(2); - expect(Math.abs(back.y)).toBeLessThanOrEqual(2); - const tiny = tileRect({ a: "c", c: "x", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1 }, fit); - expect(tiny.w).toBeGreaterThanOrEqual(8); - }); - - test("floating windows paint after tiled ones on the active workspace only", () => { - const state: HostState = { - t: "state", - mon, - ws: [{ id: 1, n: 3 }], - active: 1, - focus: null, - layout: "dwindle", - win: [ - { a: "f", c: "", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1, f: 1 }, - { a: "t", c: "", ti: "", ws: 1, x: 0, y: 0, w: 1, h: 1 }, - { a: "o", c: "", ti: "", ws: 2, x: 0, y: 0, w: 1, h: 1 }, - ], - }; - expect(stageWindows(state).map((w) => w.a)).toEqual(["t", "f"]); - }); - - test("the strip's tabs are a fixed 1..N, whatever Hyprland currently keeps alive", () => { - // Hyprland destroys an empty workspace, so a snapshot can carry only 2 - // and 3 on a machine whose desks are 1..5. The numbers Omarchy binds - // are addressable regardless. - const tabs = stripTabs([{ id: 2, n: 1 }, { id: 3, n: 2 }], 2); - expect(tabs.map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); - expect(tabs.map((t) => t.n)).toEqual([0, 1, 2, 0, 0]); - expect(stripTabs([], 1).map((t) => t.id)).toEqual([1, 2, 3, 4, 5]); - // A workspace above the fixed set extends it, up to what fits. - expect(stripTabs([{ id: 7, n: 1 }], 1).map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7]); - // Ten are bound but eight fit: standing on 10, the last tab is 10. - const high = stripTabs([{ id: 10, n: 1 }], 10); - expect(high.length).toBe(TAB_MAX); - expect(high.map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7, 10]); - expect(high[TAB_MAX - 1]!.n).toBe(1); - expect(stripTabs([], 8).map((t) => t.id)).toEqual([1, 2, 3, 4, 5, 6, 7, 8]); - expect(tabAt(tabs[2]!.x + 3, tabs)!.id).toBe(3); - expect(tabAt(0, tabs)).toBeNull(); - expect(tabs[TAB_MIN - 1]!.x + TAB_W).toBeLessThanOrEqual(MODE.x); - }); - - test("the launch bar's three cells fill the width and hit-test", () => { - const rects = [0, 1, 2].map((i) => launchCellRect(i, 3)); - expect(rects[0]!.x).toBe(0); - expect(rects[2]!.x + rects[2]!.w).toBe(SCREEN_W); - expect(rects[1]!.x).toBe(rects[0]!.w); - for (const r of rects) { - expect(r.y).toBe(LAUNCH_BAR.y); - expect(r.w).toBeGreaterThanOrEqual(120); - } - expect(launchCellAt(rects[1]!.x + 10, LAUNCH_BAR.y + 10, 3)).toBe(1); - expect(launchCellAt(rects[1]!.x + 10, LAUNCH_BAR.y - 10, 3)).toBeNull(); - expect(launchCellAt(479, LAUNCH_BAR.y + 10, 3)).toBe(2); - }); - - test("the ball snaps to the nearer edge, keeps its height, stays off the strip and the launch bar", () => { - expect(BALL_HOME.x + BALL).toBeLessThanOrEqual(SCREEN_W); - expect(ballSnap(100, 150)).toEqual({ x: BALL_MARGIN, y: 150 }); - expect(ballSnap(300, 150)).toEqual({ x: SCREEN_W - BALL - BALL_MARGIN, y: 150 }); - expect(ballSnap(300, 0).y).toBe(BALL_Y_MIN); - expect(ballSnap(300, 900).y).toBe(BALL_Y_MAX); - expect(BALL_Y_MAX + BALL).toBeLessThanOrEqual(LAUNCH_BAR.y); - const ball = { x: 400, y: 200 }; - expect(ballHit(420, 220, ball)).toBe(true); - expect(ballHit(398, 220, ball)).toBe(true); // 4 px of slack - expect(ballHit(380, 220, ball)).toBe(false); - }); - - test("a popup opens below its anchor when there is room, above otherwise, stays on the stage, and its first row is a short slide away", () => { - const below = placePopup(240, 60, TILE_POPUP_ROWS); - expect(below.below).toBe(true); - expect(below.y).toBeGreaterThan(60); - expect(below.h).toBe(TILE_POPUP_ROWS * POPUP_ROW_H + 2 * POPUP_PAD); - // A hold-and-slide has to reach row zero without letting go. - expect(below.y + POPUP_PAD + POPUP_ROW_H / 2 - 60).toBeLessThanOrEqual(32); - const above = placePopup(240, 300, TILE_POPUP_ROWS); - expect(above.below).toBe(false); - expect(above.y + above.h).toBeLessThan(300); - const edge = placePopup(5, 60, TILE_POPUP_ROWS); - expect(edge.x).toBeGreaterThanOrEqual(STAGE.x + 6); - const far = placePopup(478, 60, TILE_POPUP_ROWS); - expect(far.x + far.w).toBeLessThanOrEqual(SCREEN_W - 6); - expect(popupRowAt(below, below.x + 10, below.y + POPUP_PAD + 10)).toBe(0); - expect(popupRowAt(below, below.x + 10, below.y + POPUP_PAD + POPUP_ROW_H * 3 + 10)).toBe(3); - expect(popupRowAt(below, below.x - 1, below.y + 10)).toBeNull(); - expect(popupRowAt(below, below.x + 10, below.y + below.h + 4)).toBeNull(); - }); - - test("the control centre hangs from its button and hit-tests its tiles, transport and sliders", () => { - expect(CC.x + CC.w).toBeLessThanOrEqual(SCREEN_W); - expect(CC.y).toBeGreaterThanOrEqual(STRIP.h); - expect(CC.y + CC.h).toBeLessThanOrEqual(SCREEN_H); - expect(CC_BUTTON.x + CC_BUTTON.w / 2).toBeGreaterThan(CC.x); - expect(ccHit(CC.x - 1, CC.y + 20)).toBeNull(); - expect(ccHit(CC.x + 20, CC.y + 30)).toEqual({ kind: "wifi" }); - expect(ccHit(CC.x + 160, CC.y + 30)).toEqual({ kind: "shot" }); - expect(ccHit(CC.x + 220, CC.y + 30)).toEqual({ kind: "night" }); - expect(ccHit(CC.x + 60, CC.y + 90)).toEqual({ kind: "media" }); - expect(ccHit(CC.x + 160, CC.y + 90)).toEqual({ kind: "prev" }); - expect(ccHit(CC.x + 200, CC.y + 90)).toEqual({ kind: "play" }); - expect(ccHit(CC.x + 240, CC.y + 90)).toEqual({ kind: "next" }); - expect(ccHit(CC.x + 20, CC.y + CC_ROW_Y[0] + 10)).toEqual({ kind: "icon", row: 0 }); - expect(ccHit(CC.x + 120, CC.y + CC_ROW_Y[0] + 10)).toEqual({ kind: "track", row: 0 }); - expect(ccHit(CC.x + 120, CC.y + CC_ROW_Y[1] + 10)).toEqual({ kind: "track", row: 1 }); - expect(ccHit(CC.x + 20, CC.y + CC_ROW_Y[1] + 10)).toEqual({ kind: "icon", row: 1 }); - expect(ccRowAt(CC.y + 30)).toBeNull(); - expect(ccRowAt(CC.y + CC_ROW_Y[0] + 5)).toBe(0); - expect(ccRowAt(CC.y + CC_ROW_Y[1] + 5)).toBe(1); - expect(trackDelta(CC_TRACK_W)).toBeCloseTo(1); - expect(trackDelta(-CC_TRACK_W / 4)).toBeCloseTo(-0.25); - expect(trackFill(0.4)).toBe(Math.round(0.4 * CC_TRACK_W)); - expect(trackFill(2)).toBe(CC_TRACK_W); - expect(CC_TRACK_X + CC_TRACK_W).toBeLessThan(CC.w); - }); - - test("the menu sheet is one column, is centred, scrolls what does not fit, and hit-tests through the scroll", () => { - expect(SHEET.x + SHEET.w).toBeLessThanOrEqual(SCREEN_W); - expect(SHEET.y + SHEET.h).toBeLessThanOrEqual(SCREEN_H); - expect(SHEET.x).toBe(SCREEN_W - (SHEET.x + SHEET.w)); // centred - expect(SHEET_LIST.y + SHEET_LIST.h).toBeLessThanOrEqual(SHEET.y + SHEET.h); - expect(sheetRowRect(0)).toEqual({ x: 0, y: 0, w: SHEET_LIST.w, h: SHEET_ROW_H }); - expect(sheetRowRect(1)).toMatchObject({ x: 0, y: SHEET_ROW_H }); - // Ten root rows in one column already scroll. - expect(sheetContentH(10)).toBeGreaterThan(SHEET_LIST.h); - expect(sheetMaxScroll(10)).toBe(sheetContentH(10) - SHEET_LIST.h); - expect(sheetMaxScroll(2)).toBe(0); - expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 10, 0)).toBe(0); - expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 3 * SHEET_ROW_H + 10, 10, 0)).toBe(3); - expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 10, 3 * SHEET_ROW_H)).toBe(3); - expect(sheetRowAt(SHEET_LIST.x + 10, SHEET_LIST.y + 10, 0, 0)).toBeNull(); - expect(sheetRowAt(SHEET.x + 2, SHEET_LIST.y + 10, 10, 0)).toBeNull(); - }); - - test("pointer gain grows with speed inside its bounds", () => { - expect(pointerGain(0)).toBe(1.2); - expect(pointerGain(5)).toBeGreaterThan(pointerGain(1)); - expect(pointerGain(100)).toBe(4); - }); - - test("entrance progress eases to one and staggers by index", () => { - let t = 0; - let frames = 0; - while (t < 1 && frames < 60) { - t = easeProgress(t); - frames += 1; - } - expect(t).toBe(1); - expect(frames).toBeLessThan(30); - expect(stagger(0, 0, 6)).toBe(0); - expect(stagger(1, 5, 6)).toBe(1); - expect(stagger(0.5, 0, 6)).toBe(1); - expect(stagger(0.5, 5, 6)).toBe(0); - }); - - test("approach eases and snaps within half a pixel", () => { - let v = 0; - for (let i = 0; i < 40; i += 1) v = approach(v, 100); - expect(v).toBe(100); - expect(approach(99.5, 100)).toBe(100); - expect(approach(0, 1)).toBeCloseTo(0.35); - }); -}); - -describe("pocket-remote hypr mirror", () => { - const monitors: HyprMonitor[] = [ - { - id: 0, - name: "eDP-1", - width: 2160, - height: 1350, - scale: 1.5, - x: 0, - y: 0, - focused: true, - activeWorkspace: { id: 1, name: "1" }, - specialWorkspace: { id: 0, name: "" }, - }, - ]; - const workspaces: HyprWorkspace[] = [ - { id: 1, name: "1", monitor: "eDP-1", windows: 2, tiledLayout: "dwindle" }, - { id: 2, name: "2", monitor: "eDP-1", windows: 0, tiledLayout: "scrolling" }, - { id: -98, name: "special:scratchpad", monitor: "eDP-1", windows: 1 }, - ]; - const client = (over: Partial): HyprClient => ({ - address: "0x55f90cb39300", - mapped: true, - hidden: false, - at: [12, 38], - size: [701, 850], - workspace: { id: 1, name: "1" }, - floating: false, - monitor: 0, - class: "foot", - title: "evan@x1nano-omarchy:~", - initialClass: "foot", - pinned: false, - fullscreen: 0, - focusHistoryID: 0, - ...over, - }); - - test("reduces monitors, workspaces and clients to one snapshot", () => { - const clients = [ - client({}), - client({ address: "0x55f90e41dd40", class: "chromium", title: "ChatGPT — Chromium", at: [725, 38], size: [1423, 850], focusHistoryID: 1 }), - client({ address: "0xdead", mapped: false }), - client({ address: "0xbeef", workspace: { id: -98, name: "special:scratchpad" } }), - ]; - const state = buildState(monitors, workspaces, clients, { address: "0x55f90cb39300" }); - expect(state.mon).toEqual({ w: 1440, h: 900, x: 0, y: 0 }); - expect(state.active).toBe(1); - expect(state.layout).toBe("dwindle"); - expect(state.ws).toEqual([{ id: 1, n: 2 }, { id: 2, n: 0 }]); - expect(state.focus).toBe("0x55f90cb39300"); - expect(state.win.map((w) => w.a)).toEqual(["0x55f90cb39300", "0x55f90e41dd40"]); - expect(state.win[1]).toEqual({ - a: "0x55f90e41dd40", - c: "chromium", - ti: "ChatGPT", - ws: 1, - x: 725, - y: 38, - w: 1423, - h: 850, - }); - expect(state.special).toBeUndefined(); - }); - - test("a second monitor's origin comes off its windows and rides along for placements", () => { - const right = [{ ...monitors[0]!, x: 2160, y: 100 }]; - const state = buildState(right, workspaces, [client({ at: [2160 + 12, 100 + 38] })], null); - expect(state.mon.x).toBe(2160); - expect(state.mon.y).toBe(100); - expect(state.win[0]).toMatchObject({ x: 12, y: 38 }); - }); - - test("marks floating, fullscreen and pinned windows and the special workspace", () => { - const shown = [{ ...monitors[0]!, activeWorkspace: { id: 2, name: "2" }, specialWorkspace: { id: -98, name: "special:scratchpad" } }]; - const state = buildState(shown, workspaces, [client({ floating: true, fullscreen: 2, pinned: true })], null); - expect(state.layout).toBe("scrolling"); - expect(state.special).toBe(1); - expect(state.focus).toBeNull(); - expect(state.win[0]).toMatchObject({ f: 1, fs: 2, p: 1 }); - }); - - test("keeps the most recently focused WINDOWS_MAX windows", () => { - const many = Array.from({ length: 40 }, (_, i) => client({ address: `0x${i}`, focusHistoryID: 39 - i })); - const state = buildState(monitors, workspaces, many, null); - expect(state.win.length).toBe(WINDOWS_MAX); - expect(state.win[0]!.a).toBe("0x39"); - }); - - test("window and workspace targets reach Lua only when well-formed", () => { - expect(luaWindow("0x55f90cb39300")).toBe('"address:0x55f90cb39300"'); - expect(luaWindow('0x1" }) os.exit() --')).toBeNull(); - expect(luaWindow("foot")).toBeNull(); - expect(luaWorkspace(3)).toBe('"3"'); - expect(luaWorkspace(0)).toBeNull(); - expect(luaWorkspace(11)).toBeNull(); - expect(luaWorkspace(1.5)).toBeNull(); - expect(luaWorkspace(1, true)).toBe('"e+1"'); - expect(luaWorkspace(-1, true)).toBe('"e-1"'); - expect(luaWorkspace(0, true)).toBeNull(); - }); - - test("parses socket2 event lines", () => { - expect(parseEvent("workspacev2>>2,2")).toEqual({ name: "workspacev2", data: "2,2" }); - expect(parseEvent("activewindow>>foot,evan@x1nano-omarchy:~")).toEqual({ name: "activewindow", data: "foot,evan@x1nano-omarchy:~" }); - expect(parseEvent("garbage")).toBeNull(); - }); -}); - -describe("pocket-remote omarchy readers", () => { - test("pactl and brightnessctl output", () => { - expect(parsePactlVolume("Volume: front-left: 26214 / 40% / -23.88 dB, front-right: 26214 / 40% / -23.88 dB")).toBeCloseTo(0.4); - expect(parsePactlVolume("")).toBeNull(); - expect(parseBrightnessctl("intel_backlight,backlight,6310,33%,19393\n")).toBeCloseTo(0.33); - expect(parseBrightnessctl("nonsense")).toBeNull(); - }); - - test("colors.toml becomes the remote's palette, with fallbacks", () => { - const toml = `accent = "#7aa2f7"\nbackground = "#1a1b26"\nforeground = "#a9b1d6"\n# comment\ncolor8 = "#414868"\ndark_foreground = "#565f89"\nred = "#F7768E"\n`; - const colors = parseColorsToml(toml); - expect(colors.accent).toBe("#7aa2f7"); - expect(colors.red).toBe("#f7768e"); - const palette = paletteFrom(colors); - expect(palette.accent).toBe("#7aa2f7"); - expect(palette.bg).toBe("#1a1b26"); - expect(palette.muted).toBe("#414868"); - expect(palette.green).toBe(TOKYO_NIGHT.green); // absent -> fallback - expect(isThemeColors(palette)).toBe(true); - expect(isThemeColors({ ...palette, accent: "blue" })).toBe(false); - expect(themeTitle("tokyo-night")).toBe("Tokyo Night"); - expect(themeTitle("osaka-jade")).toBe("Osaka Jade"); - }); - - test("network status and the radio", () => { - expect(parseNetworkStatus("wifi\tPetite Auberge\t54\t5560.0\n")).toEqual({ type: "wifi", ssid: "Petite Auberge", sig: 54 }); - expect(parseNetworkStatus("ethernet\tenp0s31f6\t\t\n")).toEqual({ type: "ethernet", ssid: "enp0s31f6", sig: 0 }); - expect(parseNetworkStatus("disconnected\t\t\t\n")).toEqual({ type: "disconnected", ssid: "", sig: 0 }); - expect(parseNetworkStatus("")).toEqual({ type: "disconnected", ssid: "", sig: 0 }); - expect(parseRadio("enabled\n")).toBe(true); - expect(parseRadio("disabled\n")).toBe(false); - }); - - test("MPRIS players and their properties out of busctl's JSON", () => { - const list = JSON.stringify([ - { name: "org.freedesktop.Notifications", pid: 1 }, - { name: "org.mpris.MediaPlayer2.spotify", pid: 2 }, - { name: ":1.42", pid: 3 }, - ]); - expect(parseMprisNames(list)).toEqual(["org.mpris.MediaPlayer2.spotify"]); - expect(parseMprisNames("nonsense")).toEqual([]); - const props = JSON.stringify({ - type: "a{sv}", - data: [ - { - PlaybackStatus: { type: "s", data: "Playing" }, - Metadata: { - type: "a{sv}", - data: { - "xesam:title": { type: "s", data: "Blue in Green" }, - "xesam:artist": { type: "as", data: ["Miles Davis", "Bill Evans"] }, - }, - }, - }, - ], - }); - expect(parseMprisPlayer(props)).toEqual({ st: "playing", title: "Blue in Green", artist: "Miles Davis, Bill Evans" }); - expect(parseMprisPlayer('{"type":"a{sv}","data":[{"PlaybackStatus":{"type":"s","data":"Stopped"}}]}')).toEqual({ st: "none", title: "", artist: "" }); - expect(parseMprisPlayer("")).toBeNull(); - }); -}); - -describe("pocket-remote applications", () => { - test("desktop entries are read the way a launcher reads them", () => { - const entry = parseDesktopEntry( - `[Desktop Entry]\n# a comment\nType=Application\nName=Files\nName[de]=Dateien\nExec=nautilus --new-window\nIcon=org.gnome.Nautilus\n\n[Desktop Action new-window]\nName=New Window\n`, - ); - expect(entry.Name).toBe("Files"); - expect(entry.Exec).toBe("nautilus --new-window"); - expect(entry["Name[de]"]).toBeUndefined(); - expect(launchableName(entry)).toBe("Files"); - expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Application\nName=X\nNoDisplay=true\n"))).toBeNull(); - expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Link\nName=X\n"))).toBeNull(); - expect(launchableName(parseDesktopEntry("[Desktop Entry]\nType=Application\n"))).toBeNull(); - }); - - test("the user's own directory comes first and flatpak's is included", () => { - const dirs = applicationDirectories({ HOME: "/home/evan", XDG_DATA_DIRS: "/usr/share:/usr/local/share" }); - expect(dirs[0]!.endsWith("/.local/share/applications")).toBe(true); - expect(dirs).toContain("/usr/share/applications"); - expect(dirs.some((dir) => dir.startsWith("/var/lib/flatpak"))).toBe(true); - expect(new Set(dirs).size).toBe(dirs.length); - }); - - test("only a well-formed desktop id may be launched", () => { - const said: string[] = []; - expect(launchApp("../../etc/passwd", (m) => said.push(m))).toBe(false); - expect(launchApp("foo; rm -rf /", (m) => said.push(m))).toBe(false); - expect(said).toEqual([]); - }); -}); - -describe("pocket-remote menu source", () => { - const jsonc = `{ - // Root Menu - "learn": {"icon":"󰧑","label":"Learn"}, - "learn.omarchy": {"icon":"","label":"Omarchy","action":"omarchy-launch-webapp 'https://omarchy.org/manual/'"}, - "apps": {"icon":"󰀻","label":"Apps","provider":"apps"}, /* trailing comma next */ - "system": {"icon":"","label":"System","aliases":["power-menu"]}, - "system.suspend": {"icon":"󰒲","label":"Suspend","when":"! omarchy-toggle-enabled suspend-off","action":"systemctl suspend"}, - "system.dns": {"icon":"","label":"DNS","checked":"[[ \\"$(omarchy-dns)\\" == \\"DHCP\\" ]]","action":"omarchy-dns DHCP",}, -}`; - - test("strips comments and trailing commas but leaves the URLs inside strings alone", () => { - const parsed = parseMenuJsonc(jsonc); - expect(Object.keys(parsed)).toEqual(["learn", "learn.omarchy", "apps", "system", "system.suspend", "system.dns"]); - expect(parsed["learn.omarchy"]!.action).toBe("omarchy-launch-webapp 'https://omarchy.org/manual/'"); - expect(parsed["system.dns"]!.checked).toBe('[[ "$(omarchy-dns)" == "DHCP" ]]'); - // A comment can hide a trailing comma: both go. - expect(JSON.parse(stripJsonc('{"a": "x // y", // c\n}'))).toEqual({ a: "x // y" }); - expect(JSON.parse(stripJsonc('["a", /* b */ "c",\n]'))).toEqual(["a", "c"]); - }); - - test("normalises rows the way the shell infers them, and later layers override", () => { - const entries = normalizeMenu([parseMenuJsonc(jsonc), { "system.suspend": { label: "Sleep" }, personal: { icon: "", label: "Personal" } }]); - expect(entries.map((e) => e.kind)).toEqual(["menu", "action", "provider", "menu", "action", "action", "menu"]); - expect(entries.find((e) => e.id === "system.suspend")).toMatchObject({ parent: "system", label: "Sleep", action: "systemctl suspend", when: "! omarchy-toggle-enabled suspend-off" }); - expect(parentOf("trigger.capture.screenrecord.stop")).toBe("trigger.capture.screenrecord"); - expect(parentOf("about")).toBe("root"); - expect(childrenOf(entries, "system").map((e) => e.id)).toEqual(["system.suspend", "system.dns"]); - expect(childrenOf(entries, "root").map((e) => e.id)).toEqual(["learn", "apps", "system", "personal"]); - }); - - test("runs an action under bash, summons anything else, refuses unknown ids", () => { - const entries = normalizeMenu([parseMenuJsonc(jsonc)]); - const ran: string[] = []; - // runMenuEntry spawns detached; here the id validation and lookup are what matter. - expect(runMenuEntry(entries, "nope", (m) => ran.push(m))).toBe(false); - expect(runMenuEntry(entries, 'x"; rm -rf /', (m) => ran.push(m))).toBe(false); - expect(ran).toEqual([]); - }); - - test("conditions are evaluated in one bash run and reported by id", async () => { - const entries = normalizeMenu([ - { - hidden: { label: "Hidden", when: "false", action: "true" }, - shown: { label: "Shown", when: "true", action: "true" }, - ticked: { label: "Ticked", checked: "[[ 1 == 1 ]]", action: "true" }, - plain: { label: "Plain", checked: "[[ 1 == 2 ]]", action: "true" }, - 'bad id"': { label: "Bad", when: "false", action: "true" }, - }, - ]); - const result = await evaluateMenuConditions(entries); - expect(result.hide).toEqual(["hidden"]); - expect(result.check).toEqual(["ticked"]); - }, 20_000); -}); - -describe("pocket-remote baked menu", () => { - test("the table is Omarchy's tree: unique ids, every parent present, the root in the shell's order", () => { - expect(MENU_OMARCHY_VERSION).toMatch(/^\d/); - const ids = new Set(MENU.map((item) => item.id)); - expect(ids.size).toBe(MENU.length); - for (const item of MENU) if (item.parent !== MENU_ROOT) expect(ids.has(item.parent)).toBe(true); - expect(menuChildren(MENU_ROOT).map((item) => item.label)).toEqual([ - "Apps", "Learn", "Trigger", "Style", "Setup", "Install", "Remove", "Update", "About", "System", - ]); - expect(menuItem("apps")?.kind).toBe("provider"); - expect(menuItem("about")?.kind).toBe("action"); - expect(menuTitle(MENU_ROOT)).toBe("Go"); - expect(menuTitle("setup.default.agent")).toBe("Default Agent"); - expect(menuParent("trigger.capture.screenshot")).toBe("trigger.capture"); - }); - - test("hidden rows disappear and take an emptied submenu with them", () => { - const hardware = menuChildren("trigger.hardware").map((item) => item.id); - expect(hardware).toContain("trigger.hardware.touchpad"); - const hidden = new Set(menuChildren("trigger.hardware").map((item) => item.id)); - expect(menuChildren("trigger.hardware", hidden)).toEqual([]); - expect(menuVisible(menuItem("trigger.hardware")!, hidden)).toBe(false); - expect(menuChildren("trigger", hidden).map((item) => item.id)).not.toContain("trigger.hardware"); - expect(menuChildren("trigger", new Set()).map((item) => item.id)).toContain("trigger.hardware"); - }); - - test("every icon is a glyph the atlas can carry, or one of the four channel dots", () => { - for (const item of MENU) { - if (!item.icon) continue; - const cp = item.icon.codePointAt(0)!; - const pua = (cp >= 0xe000 && cp <= 0xf8ff) || (cp >= 0xf0000 && cp <= 0xffffd); - expect(pua || item.icon in MENU_DOT_EMOJI).toBe(true); - } - for (const glyph of Object.values(GLYPH)) expect(glyph.codePointAt(0)!).toBeGreaterThanOrEqual(0xf0000); - }); -}); - -describe("pocket-remote design system", () => { - test("every list row is laid out from the same tokens", () => { - const popup = rowMetrics(POPUP_W, ROW_H.popup, false); - const list = rowMetrics(SHEET_LIST.w, ROW_H.list, true); - // The leading gutter and the label offset are the same on both. - expect(popup.icon.x).toBe(GUTTER); - expect(list.icon.x).toBe(GUTTER); - expect(popup.label.x).toBe(list.label.x); - expect(popup.label.x).toBe(GUTTER + ICON_BOX + SPACE.lg); - // The icon box is centred on the row's own height. - expect(popup.icon.y * 2 + ICON_BOX).toBe(ROW_H.popup); - expect(list.icon.y * 2 + ICON_BOX).toBe(ROW_H.list); - // Highlights and hairlines are inset symmetrically. - for (const m of [popup, list]) { - expect(m.highlight.x * 2 + m.highlight.w).toBe(m === popup ? POPUP_W : SHEET_LIST.w); - expect(m.hairline.x * 2 + m.hairline.w).toBe(m === popup ? POPUP_W : SHEET_LIST.w); - expect(m.label.x + m.label.w).toBeLessThanOrEqual((m === popup ? POPUP_W : SHEET_LIST.w) - GUTTER); - } - // Only the row with a trailing glyph reserves room for one. - expect(popup.trailing).toBeNull(); - expect(list.trailing).not.toBeNull(); - expect(list.trailing!.x + ICON_BOX + GUTTER).toBe(SHEET_LIST.w); - expect(list.label.x + list.label.w).toBeLessThanOrEqual(list.trailing!.x); - // The tokens the popup and the sheet spell out agree with the geometry. - expect(POPUP_ROW_H).toBe(ROW_H.popup); - expect(SHEET_ROW_H).toBe(ROW_H.list); - expect(SHEET_RADIUS).toBe(RADIUS.card); - }); - - test("a window is named by its title, and its program by a readable name", () => { - expect(appName("foot")).toBe("Foot"); - expect(appName("org.gnome.Nautilus")).toBe("Files"); - expect(appName("dev.zed.Zed")).toBe("Zed"); - expect(appName("qutebrowser")).toBe("Qutebrowser"); - expect(appName("my-app_thing")).toBe("My app thing"); - expect(appName("")).toBe("window"); - // Four terminals used to read "foot" four times; now they read their - // own titles with the program underneath. - expect(windowLabels("foot", "evan@x1nano:~/code")).toEqual({ lead: "evan@x1nano:~/code", under: "Foot" }); - expect(windowLabels("foot", "")).toEqual({ lead: "Foot", under: "" }); - expect(windowLabels("foot", "foot")).toEqual({ lead: "Foot", under: "" }); - expect(windowLabels("chromium", "Chromium")).toEqual({ lead: "Chromium", under: "" }); - }); - - test("a title loses the program's own name from its tail", () => { - expect(cleanTitle("Omarchy Manual - Chromium", "chromium")).toBe("Omarchy Manual"); - expect(cleanTitle("layout.ts — Zed", "dev.zed.Zed")).toBe("layout.ts"); - expect(cleanTitle("main.rs | nvim", "nvim")).toBe("main.rs"); - expect(cleanTitle("Chromium", "chromium")).toBe("Chromium"); - expect(cleanTitle("evan@x1nano:~", "foot")).toBe("evan@x1nano:~"); - }); - - test("a tile's resize corner is small ink with a large target", () => { - const tile = { x: 100, y: 100, w: 120, h: 90 }; - const grip = tileGripRect(tile); - expect(grip.x + grip.w).toBe(tile.x + tile.w); - expect(grip.y + grip.h).toBe(tile.y + tile.h); - expect(grip.w).toBe(TILE_GRIP); - // The thing a finger has to hit is much bigger than the mark, and - // reaches a little past the tile's own edge. - const target = tileGripTarget(tile); - expect(Math.min(target.w, target.h)).toBeGreaterThanOrEqual(34); - expect(target.x).toBeLessThan(grip.x); - expect(target.x + target.w).toBeGreaterThan(tile.x + tile.w); - expect(tileGripHit(tile.x + tile.w - 4, tile.y + tile.h - 4, tile)).toBe(true); - expect(tileGripHit(tile.x + tile.w - 28, tile.y + tile.h - 28, tile)).toBe(true); - expect(tileGripHit(tile.x + tile.w + 3, tile.y + tile.h + 3, tile)).toBe(true); - expect(tileGripHit(tile.x + 10, tile.y + 10, tile)).toBe(false); - // Too small to carry one: the whole face stays focus and hold. - expect(tileGripHit(160, 160, { x: 100, y: 100, w: TILE_GRIP_MIN - 1, h: 200 })).toBe(false); - }); - - test("the zIndex prop id the tiles write matches the contract", () => { - // store.ts repeats it so the guest does not import the spec module. - expect(PROP.zIndex).toBe(31); - }); -}); - -describe("pocket-remote deck", () => { - test("every layer fits above the band and no two keys overlap", () => { - for (const layer of ["lower", "upper", "sym"] as const) { - const keys = keyboardKeys(layer); - expect(keys.length).toBeGreaterThan(40); - for (const key of keys) { - expect(key.x).toBeGreaterThanOrEqual(0); - expect(key.x + key.w).toBeLessThanOrEqual(SCREEN_W); - expect(key.y).toBeGreaterThanOrEqual(KEYBOARD.y); - expect(key.y + key.h).toBeLessThanOrEqual(BAND.y); - } - for (let i = 0; i < keys.length; i += 1) { - for (let j = i + 1; j < keys.length; j += 1) { - const a = keys[i]!; - const b = keys[j]!; - const apart = a.x + a.w <= b.x || b.x + b.w <= a.x || a.y + a.h <= b.y || b.y + b.h <= a.y; - expect(apart).toBe(true); - } - } - const labels = keys.map((k) => k.def.label); - expect(labels).toContain("esc"); - expect(labels).toContain("tab"); - expect(labels).toContain("ctrl"); - // Omarchy's grammar lives on SUPER, so the deck carries it. - expect(labels).toContain("super"); - expect(labels).toContain("return"); - // The arrows live on the d-pad in the band, not among the keys. - expect(labels).not.toContain("←"); - expect(labels).not.toContain("arrows"); - // A terminal's two punctuation keys are on the bottom row. - expect(labels).toContain("-"); - expect(labels).toContain("/"); - } - expect(TRACKPAD.y + TRACKPAD.h).toBeLessThanOrEqual(SCREEN_H); - expect(TRACKPAD.h).toBeGreaterThanOrEqual(80); - const lower = keyboardKeys("lower").map((k) => k.def.label); - expect(lower).toContain(","); - expect(lower).toContain("."); - expect(lower).toContain("'"); - expect(keyboardKeys("sym").map((k) => k.def.label)).toContain("`"); - const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; - expect(keyAt("lower", f.x + 2, f.y + 2)).toBe(f); - expect(keyAt("lower", f.x + f.w + 1, f.y + 2)).toBe(f); // the gap belongs to a key - expect(keyAt("lower", 240, TRACKPAD.y + 10)).toBeNull(); - }); - - test("the band under the keyboard is a laptop's: menu, click, pad, d-pad", () => { - // Nothing overlaps, and the pad does not run edge to edge. - expect(MENU_KEY.x).toBeGreaterThan(0); - expect(MENU_KEY.y).toBe(BAND.y); - expect(CLICK_KEY.y).toBeGreaterThan(MENU_KEY.y + MENU_KEY.h); - expect(CLICK_KEY.y + CLICK_KEY.h).toBeLessThanOrEqual(BAND.y + BAND.h); - expect(TRACKPAD.x).toBeGreaterThan(MENU_KEY.x + MENU_KEY.w); - expect(DPAD.x).toBeGreaterThan(TRACKPAD.x + TRACKPAD.w); - expect(DPAD.x + DPAD.w).toBeLessThanOrEqual(SCREEN_W); - expect(BAND.y).toBeGreaterThanOrEqual(KEYBOARD.y + KEYBOARD.h); - expect(BAND.y + BAND.h).toBeLessThanOrEqual(SCREEN_H); - // Both rest buttons and every d-pad key clear the minimum target. - for (const r of [MENU_KEY, CLICK_KEY, DPAD_KEYS.u, DPAD_KEYS.d, DPAD_KEYS.l, DPAD_KEYS.r]) { - expect(Math.min(r.w, r.h)).toBeGreaterThanOrEqual(28); - } - // A cross: up over down, left beside right, sharing the middle. - expect(DPAD_KEYS.u.x).toBe(DPAD_KEYS.d.x); - expect(DPAD_KEYS.u.y).toBeLessThan(DPAD_KEYS.d.y); - expect(DPAD_KEYS.l.y).toBe(DPAD_KEYS.r.y); - expect(DPAD_KEYS.l.x).toBeLessThan(DPAD_KEYS.u.x); - expect(DPAD_KEYS.r.x).toBeGreaterThan(DPAD_KEYS.u.x); - for (const dir of ["u", "d", "l", "r"] as const) { - const r = DPAD_KEYS[dir]; - expect(dpadAt(r.x + 2, r.y + 2)).toBe(dir); - expect(r.x).toBeGreaterThanOrEqual(DPAD.x - 4); - expect(r.x + r.w).toBeLessThanOrEqual(DPAD.x + DPAD.w + 4); - expect(r.y).toBeGreaterThanOrEqual(BAND.y - 4); - expect(r.y + r.h).toBeLessThanOrEqual(BAND.y + BAND.h + 4); - } - expect(dpadAt(TRACKPAD.x + 10, TRACKPAD.y + 10)).toBeNull(); - // One target for every touch on the deck. - expect(deckTargetAt("lower", MENU_KEY.x + 10, MENU_KEY.y + 10)).toEqual({ kind: "menu" }); - expect(deckTargetAt("lower", CLICK_KEY.x + 10, CLICK_KEY.y + 10)).toEqual({ kind: "click" }); - expect(deckTargetAt("lower", TRACKPAD.x + 40, TRACKPAD.y + 40)).toEqual({ kind: "pad" }); - expect(deckTargetAt("lower", DPAD_KEYS.l.x + 4, DPAD_KEYS.l.y + 4)).toEqual({ kind: "dpad", dir: "l" }); - const g = keyboardKeys("lower").find((k) => k.def.label === "g")!; - expect(deckTargetAt("lower", g.x + 4, g.y + 4)).toMatchObject({ kind: "key" }); - // The arrows are the d-pad's now: no arrow keys among the keys. - expect(keyboardKeys("lower").map((k) => k.def.label)).not.toContain("←"); - // A repeat is a walking pace: each one is a key press on the laptop. - expect(ARROW_HOLD_FRAMES).toBeGreaterThan(15); - expect(60 / ARROW_REPEAT_FRAMES).toBeLessThan(12); - expect(DIRECTION_KEYSYM).toEqual({ u: "Up", d: "Down", l: "Left", r: "Right" }); - }); - - test("the keyboard's hit regions tile it, and correct for where a finger lands", () => { - const keys = keyboardKeys("lower"); - const g = keys.find((k) => k.def.label === "g")!; - const h = keys.find((k) => k.def.label === "h")!; - // Inside a key, obviously. - expect(keyAt("lower", g.x + 4, g.y + 4)).toBe(g); - // In the gap between two keys: the nearer one, not nothing. (The exact - // middle is a tie the iteration order breaks; a pixel either way is - // what a finger produces.) - expect(keyAt("lower", g.x + g.w + 2, g.y + 15)).toBe(g); - expect(keyAt("lower", h.x - 2, h.y + 15)).toBe(h); - // In the gap between two ROWS: whichever row is nearer, never null. - const below = keys.find((k) => k.def.label === "b")!; - const rowGapY = g.y + g.h + 2; - expect(keyAt("lower", g.x + 4, rowGapY)).not.toBeNull(); - expect(keyAt("lower", below.x + 4, below.y - 2)).not.toBeNull(); - // Every point over the keyboard's own rows resolves to a key. - for (let y = KEYBOARD.y + 6; y < KEYBOARD.y + KEYBOARD.h - 2; y += 5) { - for (let x = 20; x < SCREEN_W - 20; x += 7) { - expect(keyAt("lower", x, y)).not.toBeNull(); - } - } - // The bias is downward: a touch that low still lands on the key above, - // and one at a key's very top edge belongs to that key. - const bias = keyAt("lower", g.x + g.w / 2, g.y + g.h + TOUCH_BIAS_Y - 1); - expect(bias).toBe(g); - expect(TOUCH_BIAS_Y).toBeGreaterThan(0); - // Far from the keyboard: nothing. - expect(keyAt("lower", 240, BAND.y + 40)).toBeNull(); - }); - - test("keys become wire lines: text plain, keysyms under modifiers", () => { - expect(keyToLine({ ch: "a" }, [])).toEqual({ t: "type", text: "a" }); - expect(keyToLine({ ch: "a" }, ["ctrl"])).toEqual({ t: "key", k: "a", mods: ["ctrl"] }); - expect(keyToLine({ ch: "." }, ["alt"])).toEqual({ t: "key", k: "period", mods: ["alt"] }); - expect(keyToLine({ key: "space" }, ["super"])).toEqual({ t: "key", k: "space", mods: ["super"] }); - expect(keyToLine({ ch: "€" }, ["ctrl"])).toBeNull(); - expect(keyToLine({ key: "Tab" }, [])).toEqual({ t: "key", k: "Tab" }); - expect(keyToLine({ key: "Return" }, ["ctrl"])).toEqual({ t: "key", k: "Return", mods: ["ctrl"] }); - expect(keyToLine({ layer: "sym" }, [])).toBeNull(); - expect(keysymFor("/")).toBe("slash"); - expect(keysymFor("Z")).toBeNull(); - }); - - test("held letters and digits offer variants as chips inside the screen", () => { - const keys = keyboardKeys("lower"); - const x = keys.find((k) => k.def.label === "x")!; - expect(x.def.variants!.map((v) => v.label)).toEqual(["^X", "⌥X"]); - const one = keys.find((k) => k.def.label === "1")!; - expect(one.def.variants!.map((v) => v.k)).toEqual(["F1", "1"]); - for (const key of [x, one, keys.find((k) => k.def.label === "p")!]) { - const chips = chipRects(key, 2); - for (const chip of chips) { - expect(chip.x).toBeGreaterThanOrEqual(0); - expect(chip.x + chip.w).toBeLessThanOrEqual(SCREEN_W); - expect(chip.y).toBeGreaterThanOrEqual(STRIP.h); - } - expect(chipAt(key, 2, chips[1]!.x + 5, chips[1]!.y + 5)).toBe(1); - expect(chipAt(key, 2, key.x, key.y + key.h + 60)).toBeNull(); - } - // The top row's chips open below it. - expect(chipRects(one, 2)[0]!.y).toBeGreaterThan(one.y); - expect(chipRects(x, 2)[0]!.y).toBeLessThan(x.y); - }); - - test("keys are drawn with a visible gap while their targets stay large", () => { - const keys = keyboardKeys("lower"); - const row = keys.filter((k) => k.row === 2).sort((a, b) => a.x - b.x); - // Six pixels of ink between neighbours, up from four. - for (let i = 1; i < row.length; i += 1) { - expect(row[i]!.x - (row[i - 1]!.x + row[i - 1]!.w)).toBeGreaterThanOrEqual(6); - } - // And six between rows. - const above = keys.find((k) => k.row === 1)!; - expect(row[0]!.y - (above.y + above.h)).toBeGreaterThanOrEqual(6); - // The gaps are ink, not dead space: the row's own band resolves - // everywhere, including the seams. - for (const key of row) { - expect(keyAt("lower", key.x - 3, key.y + key.h / 2)).not.toBeNull(); - expect(keyAt("lower", key.x + key.w + 3, key.y + key.h / 2)).not.toBeNull(); - } - }); -}); - -describe("pocket-remote wtype chords", () => { - test("modifiers wrap the key and only allowed keysyms pass", () => { - expect(wtypeArgs("c", ["ctrl"])).toEqual(["-M", "ctrl", "-k", "c", "-m", "ctrl"]); - expect(wtypeArgs("Tab", ["ctrl", "shift"])).toEqual(["-M", "ctrl", "-M", "shift", "-k", "Tab", "-m", "shift", "-m", "ctrl"]); - expect(wtypeArgs("F5")).toEqual(["-k", "F5"]); - expect(wtypeArgs("rm -rf", ["ctrl"])).toBeNull(); - expect(wtypeArgs("c", ["hyper"])).toBeNull(); - }); -}); diff --git a/tools/ipodtouch4.ts b/tools/ipodtouch4.ts index 23c2e7753..9e44f2d3c 100644 --- a/tools/ipodtouch4.ts +++ b/tools/ipodtouch4.ts @@ -10,7 +10,7 @@ import { writeFileSync, } from "node:fs"; import { createServer } from "node:net"; -import { dirname, join } from "node:path"; +import { dirname, join, resolve as resolvePath } from "node:path"; import { fileURLToPath } from "node:url"; import { extractHostBuildInputs } from "../framework/src/manifest/host-build-inputs.ts"; import { @@ -62,8 +62,16 @@ const ACTION_NAME = "clear_gesture"; */ export interface IPodTouch4App { readonly id: string; - /** Repository-relative pocket.json. */ + /** pocket.json, relative to `root`. */ readonly manifest: string; + /** + * The project the app's sources live in. Absent for an app inside this + * repository; set for an EXTERNAL one, whose descriptor is read from a + * file (see selectIPodTouch4App) and whose build runs with + * `--project-root` pointed here — the same out-of-tree shape the 3DS + * pipeline uses. + */ + readonly root?: string; readonly bundleId: string; readonly bundleName: string; readonly executable: string; @@ -81,6 +89,19 @@ export interface IPodTouch4App { readonly keepAwake: boolean; } +/** The fields an external app's descriptor file must carry. */ +const EXTERNAL_FIELDS = [ + "id", + "manifest", + "bundleId", + "bundleName", + "executable", + "title", + "scheme", + "receiptSlug", + "actionName", +] as const; + export const IPODTOUCH4_APPS: Readonly> = { clear: { id: "clear", @@ -95,33 +116,60 @@ export const IPODTOUCH4_APPS: Readonly> = { svcWire: false, keepAwake: false, }, - "pocket-remote": { - id: "pocket-remote", - manifest: "apps/pocket-remote/pocket.json", - bundleId: "dev.pocket-stack.remote", - bundleName: "PocketJSRemote.app", - executable: "PocketJSRemote", - title: "Pocket Remote", - scheme: "pocketjs-remote", - receiptSlug: "pocketjs-remote", - actionName: "remote_action", - svcWire: true, - keepAwake: true, - }, }; -export function selectIPodTouch4App(name: string | undefined): IPodTouch4App { +/** + * Read an app that lives in another project: a JSON descriptor beside its + * sources carrying the fields above (`manifest` relative to the descriptor). + * The guest then builds with `--project-root` set to the descriptor's own + * directory, so a product repository can own its app and its history while + * the toolchain, the host and the deployment transaction stay here. + */ +export function readExternalIPodTouch4App(descriptorPath: string): IPodTouch4App { + const file = resolvePath(descriptorPath); + const parsed = JSON.parse(readFileSync(file, "utf8")) as Record; + for (const field of EXTERNAL_FIELDS) { + if (typeof parsed[field] !== "string" || (parsed[field] as string).trim() === "") { + throw new Error(`pocket ipodtouch4: ${file} is missing a string ${field}`); + } + } + const root = dirname(file); + const manifest = parsed.manifest as string; + if (!existsSync(join(root, manifest))) { + throw new Error(`pocket ipodtouch4: ${file} names a manifest that is not there: ${manifest}`); + } + return { + id: parsed.id as string, + root, + manifest, + bundleId: parsed.bundleId as string, + bundleName: parsed.bundleName as string, + executable: parsed.executable as string, + title: parsed.title as string, + scheme: parsed.scheme as string, + receiptSlug: parsed.receiptSlug as string, + actionName: parsed.actionName as string, + svcWire: parsed.svcWire === true, + keepAwake: parsed.keepAwake === true, + }; +} + +export function selectIPodTouch4App(name: string | undefined, descriptor?: string): IPodTouch4App { + if (descriptor?.trim()) return readExternalIPodTouch4App(descriptor.trim()); const key = name?.trim() || "clear"; const app = IPODTOUCH4_APPS[key]; if (!app) { throw new Error( - `pocket ipodtouch4: unknown app ${JSON.stringify(key)}; POCKETJS_IPODTOUCH4_APP must be one of ${Object.keys(IPODTOUCH4_APPS).join(", ")}`, + `pocket ipodtouch4: unknown app ${JSON.stringify(key)}; POCKETJS_IPODTOUCH4_APP must be one of ` + + `${Object.keys(IPODTOUCH4_APPS).join(", ")}, or POCKETJS_IPODTOUCH4_APP_FILE must name an external app's descriptor`, ); } return app; } -const APP = selectIPodTouch4App(process.env.POCKETJS_IPODTOUCH4_APP); +const APP = selectIPodTouch4App(process.env.POCKETJS_IPODTOUCH4_APP, process.env.POCKETJS_IPODTOUCH4_APP_FILE); +/** Where the app's own sources live: this repository, or another project. */ +const APP_ROOT = APP.root ?? REPOSITORY; /** * The machine the iPod is plugged into, when it is not this one: an ssh host * (alias) with usbmuxd + libimobiledevice. Device discovery and the iproxy @@ -298,7 +346,7 @@ function check(label: string, ok: boolean, detail: string): boolean { } function manifestPath(): string { - return join(REPOSITORY, APP.manifest); + return join(APP_ROOT, APP.manifest); } function planPath(): string { @@ -583,7 +631,7 @@ async function build(): Promise { mustRun("bun", [ "tools/build.ts", `--plan=${planPath()}`, - `--project-root=${REPOSITORY}`, + `--project-root=${APP_ROOT}`, `--outdir=${guestDirectory()}`, ]); const guestJavaScript = join(guestDirectory(), `${inputs.appOutput}.js`); @@ -1219,7 +1267,7 @@ function tunnel(): never { } function usage(): void { - console.log(`PocketJS iPod touch 4 tool (app: ${APP.id}; POCKETJS_IPODTOUCH4_APP=${Object.keys(IPODTOUCH4_APPS).join("|")}; POCKETJS_IPODTOUCH4_VIA=${VIA ? ` = ${VIA}` : ""}) + console.log(`PocketJS iPod touch 4 tool (app: ${APP.id}${APP.root ? ` from ${APP.root}` : ""}; POCKETJS_IPODTOUCH4_APP=${Object.keys(IPODTOUCH4_APPS).join("|")} or POCKETJS_IPODTOUCH4_APP_FILE=; POCKETJS_IPODTOUCH4_VIA=${VIA ? ` = ${VIA}` : ""}) bun ipodtouch4 doctor bun ipodtouch4 setup-sources diff --git a/tools/pocket-remote.ts b/tools/pocket-remote.ts deleted file mode 100644 index 9c28f9561..000000000 --- a/tools/pocket-remote.ts +++ /dev/null @@ -1,510 +0,0 @@ -// tools/pocket-remote.ts — operate the Pocket Remote daemon on an Omarchy -// machine from this Mac, and bridge the iPod to it when the machine's -// firewall is in the way. -// -// bun tools/pocket-remote.ts deploy-host copy the daemon, install the user unit, restart -// bun tools/pocket-remote.ts logs [-n 80] journal tail -// bun tools/pocket-remote.ts status unit status + listener -// bun tools/pocket-remote.ts relay ssh -L tunnel (local 8623) + LAN beacon from this Mac -// bun tools/pocket-remote.ts client a scripted device, for checking a daemon -// -// Why a relay: Omarchy ships ufw with incoming DROP (only ssh is open), so the -// iPod cannot reach tcp 8622 on the laptop directly. The relay forwards the -// wire over the ssh connection that IS allowed and answers the LAN beacon -// from the Mac, so the device connects to the Mac and the Mac to the laptop. -// Once `sudo ufw allow from to any port 8622 proto tcp` has been run on -// the laptop, start the daemon with --beacon instead and drop the relay. - -import { createSocket } from "node:dgram"; -import { connect } from "node:net"; -import { hostname } from "node:os"; -import { dirname, join } from "node:path"; -import { fileURLToPath } from "node:url"; -import { existsSync, readFileSync, writeFileSync } from "node:fs"; -import { normalizeMenu, parseMenuJsonc, type MenuEntry } from "../apps/pocket-remote/host/menu-source.ts"; -import { REMOTE_APP, REMOTE_PROTO, type ClientLine, type HostLine, parseLines } from "../apps/pocket-remote/protocol.ts"; -import { - encodeBeacon, - encodeCtrl, - encodeFrame, - FrameParser, - WIRE_BEACON_PORT, - WIRE_MAGIC, - WIRE_MSG, - WIRE_PORT, - WIRE_VERSION, -} from "../apps/pocket-remote/host/wire.ts"; - -const REPOSITORY = fileURLToPath(new URL("..", import.meta.url)); -const APP_DIR = join(REPOSITORY, "apps/pocket-remote"); -/** Files the daemon needs on the Omarchy machine (no repository there). */ -const HOST_FILES = [ - "LICENSE", - "protocol.ts", - "actions.ts", - "host/wire.ts", - "host/hypr.ts", - "host/omarchy.ts", - "host/menu-source.ts", - "host/serve.ts", - "host/pointer/pocket-pointer.c", - "host/pointer/wlr-virtual-pointer-unstable-v1.xml", -]; -const REMOTE_DIR = ".local/share/pocket-remote"; -const UNIT = "pocket-remote.service"; - -function run(cmd: string[], input?: string): string { - const result = Bun.spawnSync({ cmd, stdin: input === undefined ? "inherit" : Buffer.from(input), stdout: "pipe", stderr: "pipe" }); - if (result.exitCode !== 0) { - throw new Error(`${cmd.join(" ")} failed (${result.exitCode}):\n${result.stderr.toString().trim()}`); - } - return result.stdout.toString(); -} - -function ssh(host: string, command: string, input?: string): string { - return run(["ssh", "-o", "BatchMode=yes", host, command], input); -} - -async function deployHost(host: string): Promise { - // One tar over ssh: the six daemon files and the unit, into the user's home. - const tar = Bun.spawnSync({ - cmd: ["tar", "-cf", "-", "-C", APP_DIR, ...HOST_FILES, "host/pocket-remote.service"], - stdout: "pipe", - stderr: "pipe", - }); - if (tar.exitCode !== 0) throw new Error(tar.stderr.toString()); - const archive = Buffer.from(tar.stdout); - // The pointer helper is built on the machine: wayland-scanner turns the - // vendored protocol XML into a header and a stub, cc links them against - // libwayland-client. Both ship with Omarchy (base-devel, wayland). - const buildPointer = - `cd ~/${REMOTE_DIR}/host/pointer && ` + - "wayland-scanner client-header wlr-virtual-pointer-unstable-v1.xml wlr-virtual-pointer-unstable-v1-client-protocol.h && " + - "wayland-scanner private-code wlr-virtual-pointer-unstable-v1.xml wlr-virtual-pointer-unstable-v1-protocol.c && " + - "cc -O2 -o pocket-pointer pocket-pointer.c wlr-virtual-pointer-unstable-v1-protocol.c $(pkg-config --cflags --libs wayland-client) && cd ~"; - const install = - `set -eu; mkdir -p ~/${REMOTE_DIR} ~/.config/systemd/user; ` + - `tar -xf - -C ~/${REMOTE_DIR}; ` + - `cp ~/${REMOTE_DIR}/host/${UNIT} ~/.config/systemd/user/${UNIT}; ` + - `test -x ~/.local/share/mise/shims/node || { echo "node (mise) is missing on the host" >&2; exit 2; }; ` + - `if command -v wayland-scanner >/dev/null && command -v cc >/dev/null; then ${buildPointer}; else echo "no wayland-scanner/cc: the trackpad's pointer helper was not built" >&2; fi; ` + - `systemctl --user daemon-reload; systemctl --user enable ${UNIT} >/dev/null 2>&1 || true; systemctl --user reset-failed ${UNIT} >/dev/null 2>&1 || true; ` + - `systemctl --user restart ${UNIT}; sleep 1; systemctl --user is-active ${UNIT}`; - const result = Bun.spawnSync({ cmd: ["ssh", "-o", "BatchMode=yes", host, install], stdin: archive, stdout: "pipe", stderr: "pipe" }); - if (result.exitCode !== 0) throw new Error(`deploy failed (${result.exitCode}):\n${result.stderr.toString().trim()}`); - console.log(`deployed to ${host}:~/${REMOTE_DIR}; ${UNIT} ${result.stdout.toString().trim()}`); - console.log(ssh(host, `journalctl --user -u ${UNIT} -n 5 --no-pager -o cat`)); -} - -function logs(host: string, lines: number): void { - console.log(ssh(host, `journalctl --user -u ${UNIT} -n ${lines} --no-pager -o cat`)); -} - -function status(host: string): void { - console.log(ssh(host, `systemctl --user status ${UNIT} --no-pager 2>&1 | head -12; ss -ltn | grep -E ':${WIRE_PORT} ' || echo 'no listener on ${WIRE_PORT}'`)); -} - -/** The relay's local port: 8622 is often taken on a developer Mac (the - * pocket-youtube companion holds it), and the beacon carries the port. */ -const RELAY_PORT = 8623; - -/** ssh -L tunnel to the daemon + a beacon from this Mac naming this Mac. */ -async function relay(host: string, name: string, localPort: number): Promise { - const tunnel = Bun.spawn({ - cmd: ["ssh", "-o", "BatchMode=yes", "-o", "ExitOnForwardFailure=yes", "-o", "ServerAliveInterval=15", "-N", "-L", `0.0.0.0:${localPort}:127.0.0.1:${WIRE_PORT}`, host], - stdout: "inherit", - stderr: "inherit", - }); - const udp = createSocket("udp4"); - const payload = encodeBeacon(REMOTE_APP, name, localPort); - udp.bind(() => { - udp.setBroadcast(true); - setInterval(() => udp.send(payload, WIRE_BEACON_PORT, "255.255.255.255", () => {}), 1000); - console.log(`relay: tcp ${localPort} on this Mac -> ${host}:${WIRE_PORT} over ssh; beacon "${name}" on udp ${WIRE_BEACON_PORT}`); - }); - const stop = () => { - tunnel.kill(); - udp.close(); - process.exit(0); - }; - process.on("SIGINT", stop); - process.on("SIGTERM", stop); - const code = await tunnel.exited; - console.error(`relay: ssh tunnel exited (${code})`); - udp.close(); - process.exit(code === 0 ? 0 : 1); -} - -/** - * A scripted device: connect, hello, print what the daemon mirrors, run the - * lines given after `--` (JSON), then hang up. Verifies a daemon end to end - * without an iPod in hand. - */ -async function client(target: string, lines: string[], seconds: number): Promise { - const [hostName, portText] = target.split(":"); - const port = Number(portText ?? WIRE_PORT); - await new Promise((resolve, reject) => { - const socket = connect({ host: hostName, port }); - const parser = new FrameParser(); - let acked = false; - socket.on("connect", () => { - const app = new TextEncoder().encode(REMOTE_APP); - const hello = new Uint8Array(7 + app.length); - new DataView(hello.buffer).setUint32(0, WIRE_MAGIC, true); - hello[4] = WIRE_VERSION; - hello[6] = app.length; - hello.set(app, 7); - socket.write(hello); - }); - socket.on("data", (chunk: Buffer) => { - let bytes = new Uint8Array(chunk); - if (!acked) { - if (bytes.length < 8) return; - acked = true; - bytes = bytes.slice(8); - const helloLine: ClientLine = { t: "hello", proto: REMOTE_PROTO, device: `client on ${hostname()}` }; - socket.write(encodeCtrl(JSON.stringify(helloLine))); - setTimeout(() => { - for (const line of lines) socket.write(encodeCtrl(line)); - }, 400); - setTimeout(() => { - socket.end(); - resolve(); - }, seconds * 1000); - } - for (const frame of parser.push(bytes)) { - if (frame.type === WIRE_MSG.ping) { - socket.write(encodeFrame(WIRE_MSG.pong, frame.payload)); - continue; - } - if (frame.type !== WIRE_MSG.ctrl) continue; - for (const line of parseLines(new TextDecoder().decode(frame.payload))) { - const text = JSON.stringify(line); - console.log(text.length > 400 ? `${text.slice(0, 400)}… (${text.length} bytes)` : text); - } - } - }); - socket.on("error", reject); - }); -} - -// --------------------------------------------------------------------------- -// menu: bake Omarchy's menu tree into the device -// --------------------------------------------------------------------------- - -const MENU_DEFAULT_PATH = "/usr/share/omarchy/default/omarchy/omarchy-menu.jsonc"; -const MENU_OUT = join(APP_DIR, "menu.ts"); - -/** Glyphs for rows whose icon lives in Omarchy's private logo font, which - * the remote cannot carry: AI agents get the robot, the updater the update - * arrows, anything else a dot. */ -const ROBOT = "\u{F06A9}"; -const UPDATE = "\u{F06B0}"; -const DOT = "\u{F0765}"; - -function deviceIcon(entry: MenuEntry): string { - if (entry.iconFont === "omarchy") { - if (entry.id === "update.omarchy") return UPDATE; - if (entry.id.startsWith("setup.default.agent.") || entry.id.startsWith("install.ai.")) return ROBOT; - return DOT; - } - return entry.icon; -} - -/** - * Read omarchy-menu.jsonc from an Omarchy machine (or a local copy) and write - * apps/pocket-remote/menu.ts: every row's id, parent, kind, icon, label and - * title in the shell's own order, plus whether it carries a `when` or a - * `checked` condition (the daemon evaluates those live). The device shows - * this table; the daemon runs actions from its own live parse by id, so a row - * the device names has to exist on the machine as well. - */ -function bakeMenu(source: string, omarchyVersion: string | undefined): void { - let text: string; - let version = omarchyVersion ?? ""; - if (existsSync(source)) { - text = readFileSync(source, "utf8"); - } else { - text = ssh(source, `cat ${MENU_DEFAULT_PATH}`); - if (!version) version = ssh(source, "omarchy-version").trim(); - } - const entries = normalizeMenu([parseMenuJsonc(text)]); - const hasher = new Bun.CryptoHasher("sha256"); - hasher.update(text); - const digest = hasher.digest("hex").slice(0, 12); - const rows = entries.map((entry) => { - const fields = [ - `id: ${JSON.stringify(entry.id)}`, - `parent: ${JSON.stringify(entry.parent)}`, - `kind: ${JSON.stringify(entry.kind)}`, - `icon: ${JSON.stringify(deviceIcon(entry))}`, - `label: ${JSON.stringify(entry.label)}`, - ]; - if (entry.title) fields.push(`title: ${JSON.stringify(entry.title)}`); - if (entry.when) fields.push("when: true"); - if (entry.checked) fields.push("checked: true"); - return ` { ${fields.join(", ")} },`; - }); - const out = `// SPDX-License-Identifier: GPL-3.0-or-later -// apps/pocket-remote/menu.ts — GENERATED by \`bun tools/pocket-remote.ts menu\` -// from Omarchy ${version || "?"}'s omarchy-menu.jsonc (sha256 ${digest}). Do not edit; -// regenerate against the machine after an Omarchy update. -// -// The device's copy of Omarchy's menu tree: every row's id, parent, kind, -// icon, label and title, in the shell's own order. Icons are the Nerd Font -// glyphs the file spells (written literally so the build's codepoint scan -// bakes them); rows whose icon lives in Omarchy's private logo font carry a -// Material stand-in. \`when\` and \`checked\` mark rows the daemon evaluates -// live — it sends the hidden and the checked ids, the table stays static. - -export type MenuKind = "action" | "menu" | "link" | "provider"; - -export interface MenuItem { - id: string; - /** "root" for a top-level row. */ - parent: string; - kind: MenuKind; - icon: string; - label: string; - /** Header when the submenu is open; defaults to label. */ - title?: string; - /** Visibility depends on a condition the daemon reports. */ - when?: true; - /** A tick depends on a condition the daemon reports. */ - checked?: true; -} - -export const MENU_OMARCHY_VERSION = ${JSON.stringify(version)}; -export const MENU_SOURCE_DIGEST = ${JSON.stringify(digest)}; - -export const MENU: readonly MenuItem[] = [ -${rows.join("\n")} -]; -`; - writeFileSync(MENU_OUT, out); - const kinds = new Map(); - for (const entry of entries) kinds.set(entry.kind, (kinds.get(entry.kind) ?? 0) + 1); - console.log( - `wrote ${MENU_OUT}: ${entries.length} rows from Omarchy ${version || "?"} (${[...kinds].map(([k, n]) => `${n} ${k}`).join(", ")})`, - ); -} - -// --------------------------------------------------------------------------- -// shots: the screens, rendered in the headless sim -// --------------------------------------------------------------------------- - -/** - * Boot the built bundle in the sim, feed it a desktop the way the daemon - * would, walk it through its states and write each as a PNG. What the README - * shows, and what a change is checked against by eye before it is flashed. - */ -async function shots(outDir: string): Promise { - const { bootWorld } = await import("../hosts/sim/sim.ts"); - const { encodePNG } = await import("../tests/png.ts"); - const { STAGE, TAB_W, CC_BUTTON, MODE, MODE_HALF_W, SHEET_LIST, sheetRowRect, BALL_HOME } = await import("../apps/pocket-remote/layout.ts"); - const APPS = [ - "Chromium", "Files", "Foot", "GIMP", "Ghostty", "Localsend", "Neovim", "Nautilus", - "Signal", "Spotify", "Steam", "Text Editor", "Thunderbird", "Zed", - ].map((name) => ({ i: name.toLowerCase().replace(/ /g, "-"), n: name })); - const { keyboardKeys } = await import("../apps/pocket-remote/keyboard-layout.ts"); - type Store = import("../apps/pocket-remote/store.ts").RemoteStore; - const { mkdirSync } = await import("node:fs"); - mkdirSync(outDir, { recursive: true }); - - const world = await bootWorld("pocket-remote-main", 60, undefined, undefined, { width: 480, height: 320 }); - const store = (globalThis as { __pocketRemote?: Store }).__pocketRemote; - if (!store) throw new Error("the bundle did not publish its store"); - const pack = (x: number, y: number, id = 0): number => (id << 18) | (y << 9) | x; - const frames = (n: number, touches: number[] = []) => { - for (let i = 0; i < n; i += 1) world.frame(0, undefined, touches); - }; - const tap = (x: number, y: number) => { - frames(2, [pack(x, y)]); - frames(1); - }; - const hold = (x: number, y: number, n = 30) => { - frames(n, [pack(x, y)]); - }; - const shot = (name: string) => { - const pixels = world.render(); - writeFileSync(join(outDir, `${name}.png`), encodePNG(Buffer.from(pixels), 480, 320)); - console.log(` ${name}.png`); - }; - - frames(1); - shot("connect"); - store.applyLine({ t: "hello", proto: REMOTE_PROTO, name: "x1nano-omarchy", omarchy: "4.0.1-1", auth: "ok" }); - store.applyLine({ t: "levels", vol: 0.55, bri: 0.7 }); - store.applyLine({ - t: "cc", - wifi: { on: 1, ssid: "Petite Auberge", sig: 54 }, - media: { st: "playing", title: "Blue in Green", artist: "Miles Davis" }, - }); - store.applyLine({ t: "menu", hide: ["system.hibernate", "trigger.capture.screenrecord.stop"], check: ["setup.default.terminal.foot", "update.channel.stable"] }); - store.applyLine({ t: "apps", seq: 0, a: APPS }); - store.applyLine({ - t: "state", - mon: { w: 1440, h: 900 }, - ws: [{ id: 1, n: 3 }, { id: 2, n: 1 }, { id: 3, n: 0 }], - active: 1, - focus: "0x1", - layout: "dwindle", - win: [ - { a: "0x1", c: "foot", ti: "evan@x1nano-omarchy:~", ws: 1, x: 12, y: 38, w: 701, h: 850 }, - { a: "0x2", c: "chromium", ti: "Omarchy Manual", ws: 1, x: 725, y: 38, w: 703, h: 420 }, - { a: "0x3", c: "nautilus", ti: "Downloads", ws: 1, x: 725, y: 470, w: 703, h: 418 }, - { a: "0x4", c: "mpv", ti: "Blue in Green", ws: 1, x: 900, y: 500, w: 420, h: 260, f: 1 }, - { a: "0x5", c: "nvim", ti: "layout.ts", ws: 2, x: 12, y: 38, w: 1416, h: 850 }, - ], - }); - frames(40); - shot("stage"); - - // hold the floating tile: the popup - const fit = store.fit()!; - const px = Math.round(fit.ox + (900 + 180) * fit.s); - const py = Math.round(fit.oy + (500 + 100) * fit.s); - hold(px, py, 30); - frames(12, [pack(px, py)]); - shot("popup"); - frames(1); - tap(px, STAGE.y + 8); - frames(10); - - // the control centre, sticky - tap(CC_BUTTON.x + CC_BUTTON.w / 2, CC_BUTTON.y + CC_BUTTON.h / 2); - frames(20); - shot("control-centre"); - tap(40, 300); - frames(10); - - // the menu sheet: root, a submenu, the applications list - const tapRow = (id: string) => { - const at = store.sheetRows().findIndex((row) => row.id === id); - if (at < 0) throw new Error(`no sheet row ${id} (have ${store.sheetRows().map((r) => r.id).join(", ")})`); - const r = sheetRowRect(at); - tap(SHEET_LIST.x + r.x + 60, SHEET_LIST.y + r.y + 20 - store.sheetScroller.offset()); - }; - tap(BALL_HOME.x + 22, BALL_HOME.y + 22); - frames(20); - shot("menu-root"); - tapRow("trigger"); - frames(20); - shot("menu-trigger"); - tapRow("trigger.toggle"); - frames(20); - shot("menu-toggle"); - store.sheetBack(); - store.sheetBack(); - frames(20); - tapRow("apps"); - frames(20); - shot("menu-apps"); - tap(10, 300); - frames(10); - - // the deck, with a key held - tap(MODE.x + MODE_HALF_W + 17, MODE.y + 11); - frames(15); - shot("deck"); - const f = keyboardKeys("lower").find((k) => k.def.label === "f")!; - hold(f.x + f.w / 2, f.y + f.h / 2, 30); - frames(12, [pack(f.x + f.w / 2, f.y + f.h / 2)]); - shot("deck-variants"); - frames(1); - frames(10); - // the band: the click key held while a finger drags on the pad - const { CLICK_KEY, DPAD_KEYS, TRACKPAD: PAD } = await import("../apps/pocket-remote/keyboard-layout.ts"); - frames(6, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20)]); - for (let i = 1; i <= 6; i += 1) { - frames(2, [pack(CLICK_KEY.x + 30, CLICK_KEY.y + 20), pack(PAD.x + 60 + i * 10, PAD.y + 50, 1)]); - } - shot("deck-drag"); - frames(1); - frames(8); - // a d-pad key held - frames(6, [pack(DPAD_KEYS.l.x + 16, DPAD_KEYS.l.y + 14)]); - shot("deck-dpad"); - frames(1); - frames(8); - - // back to the stage, then an empty workspace: the launch bar is fixed, so - // there is nothing on the stage but the hint. - tap(MODE.x + 17, MODE.y + 11); - frames(10); - tap(6 + TAB_W * 4 + TAB_W / 2, 14); - frames(30); - shot("empty"); - console.log(`wrote ${outDir}`); -} - -function usage(): void { - console.log(`Pocket Remote host tool - - bun tools/pocket-remote.ts deploy-host - bun tools/pocket-remote.ts logs [-n N] - bun tools/pocket-remote.ts status - bun tools/pocket-remote.ts relay [--name ] [--local-port 8623] - bun tools/pocket-remote.ts client [--for seconds] [-- ...] - bun tools/pocket-remote.ts menu [--omarchy ] - bun tools/pocket-remote.ts shots render the screens in the headless sim`); -} - -async function main(args: string[]): Promise { - const [command, target] = args; - switch (command) { - case "deploy-host": - if (!target) throw new Error("deploy-host needs an ssh host"); - await deployHost(target); - break; - case "logs": { - if (!target) throw new Error("logs needs an ssh host"); - const at = args.indexOf("-n"); - logs(target, at >= 0 ? Number(args[at + 1]) : 40); - break; - } - case "status": - if (!target) throw new Error("status needs an ssh host"); - status(target); - break; - case "relay": { - if (!target) throw new Error("relay needs an ssh host"); - const at = args.indexOf("--name"); - const portAt = args.indexOf("--local-port"); - await relay( - target, - at >= 0 ? (args[at + 1] ?? hostname()) : `${target} via ${hostname().replace(/\.local$/, "")}`, - portAt >= 0 ? Number(args[portAt + 1]) : RELAY_PORT, - ); - break; - } - case "shots": - if (!target) throw new Error("shots needs an output directory"); - await shots(target); - break; - case "menu": { - if (!target) throw new Error("menu needs an ssh host or a path to omarchy-menu.jsonc"); - const at = args.indexOf("--omarchy"); - bakeMenu(target, at >= 0 ? args[at + 1] : undefined); - break; - } - case "client": { - if (!target) throw new Error("client needs host[:port]"); - const dash = args.indexOf("--"); - const forAt = args.indexOf("--for"); - const seconds = forAt >= 0 ? Number(args[forAt + 1]) : 3; - await client(target, dash >= 0 ? args.slice(dash + 1) : [], seconds); - break; - } - default: - usage(); - if (command && command !== "help" && command !== "--help") throw new Error(`unknown command ${command}`); - } -} - -if (import.meta.main) { - main(Bun.argv.slice(2)).catch((error) => { - console.error(error instanceof Error ? error.message : error); - process.exit(1); - }); -} diff --git a/tools/test.ts b/tools/test.ts index 1f5db97f8..ab6f5838e 100644 --- a/tools/test.ts +++ b/tools/test.ts @@ -54,7 +54,6 @@ const SUITE: readonly Stage[] = [ "tests/iphone4s-profile.test.ts", "tests/ipodtouch-profile.test.ts", "tests/ipodtouch4-profile.test.ts", - "tests/pocket-remote.test.ts", "tests/meizu-m8-profile.test.ts", "tests/blackberry-classic.test.ts", "tests/pocket-input.test.ts", @@ -139,12 +138,6 @@ const SUITE: readonly Stage[] = [ browser: true, tests: ["tests/sim.test.ts"], }, - { - name: "pocket-remote sim", - prep: [["bun", "tools/build.ts", "pocket-remote-main"]], - browser: true, - tests: ["tests/pocket-remote-sim.test.ts"], - }, { name: "deepzoom sim", prep: [["bun", "tools/build.ts", "zoomlab-main"]], From f4021eacaedd24fd148f3c39d4f2fc29e1c8869d Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Wed, 2 Sep 2026 12:52:53 -0700 Subject: [PATCH 17/27] fix(ipodtouch4): an external app's project root is its repository, not its descriptor's directory The manifest's own entry is written relative to the product repository (the 3DS pipeline's convention), so the descriptor names a projectRoot and the guest builds against that. Co-Authored-By: Claude Opus 4.8 --- tools/ipodtouch4.ts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/tools/ipodtouch4.ts b/tools/ipodtouch4.ts index 9e44f2d3c..62c895e04 100644 --- a/tools/ipodtouch4.ts +++ b/tools/ipodtouch4.ts @@ -120,10 +120,12 @@ export const IPODTOUCH4_APPS: Readonly> = { /** * Read an app that lives in another project: a JSON descriptor beside its - * sources carrying the fields above (`manifest` relative to the descriptor). - * The guest then builds with `--project-root` set to the descriptor's own - * directory, so a product repository can own its app and its history while - * the toolchain, the host and the deployment transaction stay here. + * sources carrying the fields above, plus an optional `projectRoot` + * (relative to the descriptor, default its own directory) that `manifest` + * and the manifest's own entry are resolved against. The guest then builds + * with `--project-root` set to it, so a product repository can own its app + * and its history while the toolchain, the host and the deployment + * transaction stay here. */ export function readExternalIPodTouch4App(descriptorPath: string): IPodTouch4App { const file = resolvePath(descriptorPath); @@ -133,10 +135,12 @@ export function readExternalIPodTouch4App(descriptorPath: string): IPodTouch4App throw new Error(`pocket ipodtouch4: ${file} is missing a string ${field}`); } } - const root = dirname(file); + // The project root is where the app's own manifest paths start from — the + // product repository, not necessarily the descriptor's directory. + const root = resolvePath(dirname(file), typeof parsed.projectRoot === "string" ? parsed.projectRoot : "."); const manifest = parsed.manifest as string; if (!existsSync(join(root, manifest))) { - throw new Error(`pocket ipodtouch4: ${file} names a manifest that is not there: ${manifest}`); + throw new Error(`pocket ipodtouch4: ${file} names a manifest that is not there: ${join(root, manifest)}`); } return { id: parsed.id as string, From ef1a72ebd86ac77e03120217a5c77cb63fa18028 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:17:08 -0700 Subject: [PATCH 18/27] feat(design): add classic Pocket icon studies --- tools/icon-study/README.md | 74 ++++++++++++++ tools/icon-study/artwork.ts | 41 ++++++++ tools/icon-study/assets/current-3ds.png | Bin 0 -> 2465 bytes tools/icon-study/assets/current-ios-v4.png | Bin 0 -> 7940 bytes tools/icon-study/bake.ts | 110 +++++++++++++++++++++ tools/icon-study/index.html | 56 +++++++++++ tools/icon-study/serve.ts | 17 ++++ 7 files changed, 298 insertions(+) create mode 100644 tools/icon-study/README.md create mode 100644 tools/icon-study/artwork.ts create mode 100644 tools/icon-study/assets/current-3ds.png create mode 100644 tools/icon-study/assets/current-ios-v4.png create mode 100644 tools/icon-study/bake.ts create mode 100644 tools/icon-study/index.html create mode 100644 tools/icon-study/serve.ts diff --git a/tools/icon-study/README.md b/tools/icon-study/README.md new file mode 100644 index 000000000..7d75d8177 --- /dev/null +++ b/tools/icon-study/README.md @@ -0,0 +1,74 @@ +# Classic Pocket icon study + +Four locally baked proposals for the iOS 6 SpringBoard and Nintendo 3DS +Homebrew Launcher. This study does not change the shipped host assets or +install anything on a device. + +```sh +bun tools/icon-study/bake.ts --smdh +bun tools/icon-study/serve.ts +``` + +Open . `PORT` overrides the loopback server's port. +The baker writes PNGs, SVGs, SMDHs, a contact sheet, and a SHA-256 manifest +under `dist/icon-study/`. The page lets reviewers switch proposals, preview +three desktop backgrounds, compare the old and proposed icons at enlarged +sizes, and download individual assets. The scene labels distinguish the +illustrated desktop and HBL surroundings from actual device captures. + +The `--smdh` option requires the locally installed +`devkitpro/devkitarm:latest` Docker image. It runs without networking and +uses `smdhtool` to package both optical sizes. Without the option, the page +labels its 3DS images as RGB PNG previews and hides the SMDH download. + +| Proposal | Treatment | +| --- | --- | +| A / Warm enamel | Plum enamel, warm gold outline, cream controls | +| B / Plum graphite | Quiet plum surface with a single silver-white mark | +| C / Brass badge | Warm gold surface with a dark plum mark | +| D / Quiet arcade | Muted yellow, pink, and cyan from the current brand | + +The iOS drawing mounts the geometry from `site/assets/favicon.svg`, recolored +for each proposal. One radial light replaces the old straight-sided gloss +shape. The outer trim uses one gradient with three stops. The baker emits +opaque 57, 114, and 512 px images; the 512 px file is a source-art preview. +The webpage supplies the display mask and outside shadow. A future installed +selection must retain `UIPrerenderedIcon`, update its versioned resource name, +and pass a fresh SpringBoard cache/visual check. + +The 3DS drawings align straight stroke edges to the 48 and 24 px grids. +Each size has its own geometry, spacing, and radii. They omit the iOS bevel, +glass, and shadow. The baker decodes the actual SMDH tiled RGB565 payload and +compares every candidate pixel against its input, allowing only the format's +5/6/5-bit quantization error. The page uses those decoded images when the +SMDH pass is enabled. + +## Baselines and format references + +- `assets/current-ios-v4.png` is the 118×120 Retina PNG produced by + `tools/iphone-classic-icon.ts` at commit `12bcb1b2` (Draft PR #354), copied + from that checkout's `dist/ipodtouch4/PocketJSiPodTouch4.app/`. It is the + user-reported v4 artwork, not a claim about the latest remote main. +- `assets/current-3ds.png` is the 48×48 `hosts/3ds/icon.png` from main at + `64fc0c07`. The baseline small SMDH icon uses smdhtool's automatic reduction; + proposals supply a separately drawn small icon. +- [Apple QA1686](https://developer.apple.com/library/archive/qa/qa1686/_index.html) + specifies 57×57 and 114×114 for the iPhone/iPod touch home screen on iOS 6.1 + and earlier. +- [devkitPro smdhtool](https://github.com/devkitPro/3dstools/blob/master/src/smdhtool.cpp) + accepts a 48×48 PNG and an optional 24×24 PNG, and packs tiled RGB565. + +## Validation scope + +The bake command checks output opacity and dimensions through fixed-size +canvas generation, SMDH magic/length, and every decoded candidate pixel. The +manifest records 20 PNG inputs and five packaged SMDH files when enabled. +The contact sheet contains native sizes and enlarged baked pixels for visual +inspection. The before/after panel also exposes nearest-neighbor inspection. + +These checks do not establish physical LCD color, the installed SpringBoard +mask/cache, or HBL's on-device rendering. A selected proposal still needs +integration into host packaging and physical visual acceptance. This initial +study was inspected through its rendered contact sheet and HTTP assets; +interactive browser validation was unavailable because no browser connection +was registered in the session. diff --git a/tools/icon-study/artwork.ts b/tools/icon-study/artwork.ts new file mode 100644 index 000000000..7040aebd9 --- /dev/null +++ b/tools/icon-study/artwork.ts @@ -0,0 +1,41 @@ +import { readFileSync } from "node:fs"; + +export const variants = [ + { id: "enamel", letter: "A", name: "温润珐琅", english: "Warm enamel", note: "细暖金边框,奶油色按键。保留老图标的温度,收掉三色之间的争抢。", top: "#40344c", bottom: "#191522", rim: "#b9a589", shell: "#edc675", dot: "#f5e8cb", bar: "#f5e8cb", gloss: .19 }, + { id: "graphite", letter: "B", name: "深紫磨砂", english: "Plum graphite", note: "深紫底与银白标志。只有一层柔光,四个方案里最安静。", top: "#393343", bottom: "#201b2b", rim: "#82798b", shell: "#e7e0ee", dot: "#e7e0ee", bar: "#e7e0ee", gloss: .07 }, + { id: "brass", letter: "C", name: "暖金徽章", english: "Brass badge", note: "把主页的黄色移到整块底面,以深紫标志压住亮度。像一枚小金属徽章。", top: "#e6c977", bottom: "#b18b41", rim: "#f1dbaa", shell: "#312638", dot: "#312638", bar: "#312638", gloss: .20 }, + { id: "arcade", letter: "D", name: "克制三色", english: "Quiet arcade", note: "保留黄、粉、青的品牌关系,降低饱和度;用连续柔光替换硬边高光。", top: "#3a304d", bottom: "#191424", rim: "#9b91a4", shell: "#efce77", dot: "#dc91ad", bar: "#83c6d0", gloss: .12 }, +] as const; +export type Variant = (typeof variants)[number]; + +// Mount the existing brand drawing; color studies never redraw its geometry. +const brand = readFileSync(new URL("../../site/assets/favicon.svg", import.meta.url), "utf8"); +const start = brand.indexOf(' ")) throw new Error("Pocket mark source changed"); +const mark = brand.slice(start, brand.indexOf("", start)); + +export function artwork(v: Variant, platform: "ios" | "3ds", size: number): string { + const ios = platform === "ios"; + const small = size === 24; + const body = ios + ? `${mark.replaceAll("#ffd23f", v.shell).replaceAll("#ff5f9e", v.dot).replaceAll("#3fd0e8", v.bar)}` + // At 24/48 px use integral stroke edges and slightly more space between + // the keys. These are optical-size drawings, not downscaled iOS artwork. + : small + ? `` + : ``; + const units = ios ? 114 : size; + return ` + + + + + + + ${ios ? ` + + + ` : ``} + ${body} + `; +} diff --git a/tools/icon-study/assets/current-3ds.png b/tools/icon-study/assets/current-3ds.png new file mode 100644 index 0000000000000000000000000000000000000000..265952aa9fc3f4d4b4f091c0c42c353b87eb1ba8 GIT binary patch literal 2465 zcmV;S310SzP)Px;OG!jQRA_YajX8rf zf57l2P{5#mszPsvDwU3>;>e#BhEKY}kG^i9o(IZ`J9}fz+X#LO6d$)p0G0(x38Vlq zAiWp^+CUT;qPV|3D%PA4f*B(yVz7Eb3ld=^SW-~P3WoBMlqay{U_!|V~8(y%1u3Z(UFd|Jnb zcE?az(|mh1;9r*lF5d`QTG7;-8m(cAiYN^qz6y+5l96m$iqj_@J~-`i;^#J{5sOSp zpsd99;o-(XVe5*tfhaaK+lJ-Un2T3KK0n{#{H1_KOB3s4odU{$o6AUX>V(7DQ!b}Z zx|ByHmL;e+H9yQptW`CwwkC+4Y>zK2yZ}c*Iwct?N)GO`7|Kg>X+hePi0+#6mjX8H zx=_1Veej)E>oq zvkuey6{ACv{bdUwT!eu6<(PKI&cT}luwu`C7551x$u3+o%=D>hJG!=Z^0PYtS3R_;?;nKN{nqKIjWeG zSW+Ozh9!lp#B&5f!0M*v&O$`3srydngG3ZVt(nNQx~UNo(w?B0lZ*~Y)WnD+mk~&r z1o?VXv$CNH!C2_ty0uBkN>N3<+KJ}W4XTBzRb zcQxBy|N?CNyo+6w-38qMiqzps{)N7+E^!CS|YeVkM@0H z4ULw;?MH*A zYv@+{#R&+&mXdwxJjV*-jJX+X*=rj}S(1{M2;kRH*iwQ4F(e|)}Btl~V-EQOGyn(oN^Vx#$ z;$i5gZt2elL=ttLmeT}a34tXf0@3pWX$-=qdykMXKx{PCu*3EG3M-u!?fChV&$9_&2z1PR ztIGGa2e`#ahMdGy=nAnJ`pi|Ax!c+#)Vg<sHo@J3y4l}tiaw-|r)uVu0jWs@9zQL7h1--3!N-LY=g%T$U z6BKN3mk(=W$SIG@)n)FrHd*O3pS$+zi-5tf(rNPb#sVNHd0A32+1l0-6~DoSjYU>F ztw(OK5e0m+u}EYz6J8Fn!-zUMW}#iJ!RqlzLPDI26n8j77x=f@HEnpN(% zYKX0JqDwBB=j?XGjiAk+mTz#ovBv&%@eva;#?XpGDt?2x>T*Kh3FadNC@X1pwh(KG zB2d+a#t)LMLV)WEvT1>3iCrzc!6Zql&zlOhrs6lKh8?a{D?28Y$yuR^X+>c#`8^Jn zglt;ixycd6fZs7}HVmq=rfGDW79k*?k&F*Z?EZ_#Ct@oA1Ujbn0_WHYN+XhdCQ*Ub zNw-#6jgc$snrb6y)-fCFk59YoFI%KsL91=Jd^2QzIYw(x#=xD0 zh%YY(9G+67y<~`c_FWfSB~$5J^ABf2aXh#tUvwj&>j;W@!Qm;Jv+ugR|0{=~oFoVh z%d48N<^t|4#ApLbn?wU&%>^8tR-{~)Jtd3LA&U=AdHmv_&A)GlT>By7$Hj(DV%( zHBGIVjCT5XVtPD`>Grl7Vhn4WhHAqg<>204x4OtEevU`Jz7Fn=_y!d|Uj(nnEeD7H f6L{VDpC|AiRgR_7daxFa00000NkvXXu0mjfZETc% literal 0 HcmV?d00001 diff --git a/tools/icon-study/assets/current-ios-v4.png b/tools/icon-study/assets/current-ios-v4.png new file mode 100644 index 0000000000000000000000000000000000000000..25aaa1c40f36c5dbb666e820ab32b55f271849d8 GIT binary patch literal 7940 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 u{2c&E5{hk`$z(D-I5;=}lz+eXB=A4E1J?[] = []; + +async function raster(svg: string, size: number) { + const scale = 4; + const image = await loadImage(Buffer.from(svg.replace(`width="${size}" height="${size}"`, `width="${size * scale}" height="${size * scale}"`))); + const big = createCanvas(size * scale, size * scale); + big.getContext("2d").drawImage(image, 0, 0); + const pixels = big.getContext("2d").getImageData(0, 0, big.width, big.height).data; + const canvas = createCanvas(size, size); + const ctx = canvas.getContext("2d"); + const result = ctx.createImageData(size, size); + for (let y = 0; y < size; y++) for (let x = 0; x < size; x++) { + for (let c = 0; c < 4; c++) { + let sum = 0; + for (let yy = 0; yy < scale; yy++) for (let xx = 0; xx < scale; xx++) sum += pixels[((y * scale + yy) * big.width + x * scale + xx) * 4 + c]; + result.data[(y * size + x) * 4 + c] = Math.round(sum / (scale * scale)); + } + if (result.data[(y * size + x) * 4 + 3] !== 255) throw new Error("Icon must be opaque"); + } + ctx.putImageData(result, 0, 0); + return canvas; +} + +for (const v of variants) for (const [platform, sizes] of [["ios", [57, 114, 512]], ["3ds", [24, 48]]] as const) { + for (const size of sizes) { + const svg = artwork(v, platform, size); + const name = `${v.id}-${platform}-${size}`; + writeFileSync(resolve(assets, `${name}.svg`), svg); + const canvas = await raster(svg, size); + const png = canvas.toBuffer("image/png"); + writeFileSync(resolve(assets, `${name}.png`), png); + receipt.push({ file: `${name}.png`, width: size, height: size, sha256: new Bun.CryptoHasher("sha256").update(png).digest("hex") }); + } +} +for (const name of ["current-ios-v4.png", "current-3ds.png"]) cpSync(resolve(import.meta.dir, "assets", name), resolve(assets, name)); + +// Package with the installed devkitPro tool, then decode its actual tiled +// RGB565 payload. The web gallery displays these readbacks, not an RGB mock. +const withSmdh = process.argv.includes("--smdh"); +if (withSmdh) { + const jobs = variants.map(v => [v.id, `${v.id}-3ds-48.png`, `${v.id}-3ds-24.png`]); + jobs.push(["current", "current-3ds.png", ""]); + for (const [id, large, small] of jobs) { + const args = ["docker", "run", "--rm", "--network=none", "-v", `${assets}:/art`, "devkitpro/devkitarm:latest", "/opt/devkitpro/tools/bin/smdhtool", "--create", "PocketJS", "Icon design study", "PocketJS", `/art/${large}`, `/art/${id}.smdh`]; + if (small) args.push(`/art/${small}`); + const result = Bun.spawnSync(args, { stdout: "pipe", stderr: "pipe" }); + if (result.exitCode !== 0) throw new Error(result.stderr.toString()); + const bytes = readFileSync(resolve(assets, `${id}.smdh`)); + if (bytes.length !== 0x36c0 || bytes.toString("ascii", 0, 4) !== "SMDH") throw new Error("Invalid SMDH"); + for (const size of [24, 48]) { + const offset = size === 24 ? 0x2040 : 0x24c0; + const canvas = createCanvas(size, size); + const ctx = canvas.getContext("2d"); + const out = ctx.createImageData(size, size); + for (let y = 0; y < size; y++) for (let x = 0; x < size; x++) { + const xx = x & 7, yy = y & 7; + const morton = (xx & 1) | ((yy & 1) << 1) | ((xx & 2) << 1) | ((yy & 2) << 2) | ((xx & 4) << 2) | ((yy & 4) << 3); + const tile = (Math.floor(y / 8) * (size / 8) + Math.floor(x / 8)) * 64; + const pixel = bytes.readUInt16LE(offset + (tile + morton) * 2); + const r = pixel >> 11, g = (pixel >> 5) & 63, b = pixel & 31; + out.data.set([(r << 3) | (r >> 2), (g << 2) | (g >> 4), (b << 3) | (b >> 2), 255], (y * size + x) * 4); + } + ctx.putImageData(out, 0, 0); + writeFileSync(resolve(assets, `${id}-smdh-${size}.png`), canvas.toBuffer("image/png")); + // A transposed tile or incorrect offset cannot pass this comparison. + if (id !== "current") { + const src = await loadImage(resolve(assets, `${id}-3ds-${size}.png`)); + const reference = createCanvas(size, size); + reference.getContext("2d").drawImage(src, 0, 0); + const original = reference.getContext("2d").getImageData(0, 0, size, size).data; + for (let i = 0; i < original.length; i += 4) { + if (Math.abs(original[i] - out.data[i]) > 7 || Math.abs(original[i + 1] - out.data[i + 1]) > 3 || Math.abs(original[i + 2] - out.data[i + 2]) > 7) throw new Error(`${id} SMDH pixel mismatch at ${i / 4}`); + } + } + } + receipt.push({ file: `${id}.smdh`, bytes: bytes.length, rgb565Readback: "passed", sha256: new Bun.CryptoHasher("sha256").update(bytes).digest("hex") }); + } +} +writeFileSync(resolve(output, "manifest.json"), JSON.stringify({ variants, smdh: withSmdh, receipt }, null, 2)); +cpSync(resolve(import.meta.dir, "index.html"), resolve(output, "index.html")); + +// Native-size and enlarged baked-pixel contact sheet for offline inspection. +const sheet = createCanvas(1280, 660); +const ctx = sheet.getContext("2d"); +ctx.fillStyle = "#f4f0e7"; ctx.fillRect(0, 0, 1280, 660); +ctx.fillStyle = "#241f2d"; ctx.font = "24px sans-serif"; ctx.fillText("POCKET / CLASSIC ICON STUDY", 32, 44); +for (const [i, v] of variants.entries()) { + const x = 32 + i * 312; + ctx.fillStyle = "#241f2d"; ctx.font = "20px sans-serif"; ctx.fillText(`${v.letter} / ${v.english}`, x, 90); + const ios = await loadImage(resolve(assets, `${v.id}-ios-114.png`)); + ctx.save(); ctx.beginPath(); ctx.roundRect(x, 114, 228, 228, 44); ctx.clip(); ctx.drawImage(ios, x, 114, 228, 228); ctx.restore(); + ctx.save(); ctx.beginPath(); ctx.roundRect(x, 378, 57, 57, 11); ctx.clip(); ctx.drawImage(ios, x, 378, 57, 57); ctx.restore(); + for (const [j, size] of [48, 24].entries()) { + const icon = await loadImage(resolve(assets, `${v.id}-${withSmdh ? "smdh" : "3ds"}-${size}.png`)); + ctx.drawImage(icon, x + 90 + j * 76, 384, size, size); + ctx.imageSmoothingEnabled = false; ctx.drawImage(icon, x + j * 140, 486, size * (j ? 4 : 2), size * (j ? 4 : 2)); ctx.imageSmoothingEnabled = true; + } + ctx.font = "13px sans-serif"; ctx.fillText("iOS 57pt HBL 48px 24px", x, 466); + ctx.fillText("Baked pixels / nearest-neighbour zoom", x, 618); +} +writeFileSync(resolve(output, "contact-sheet.png"), sheet.toBuffer("image/png")); +console.log(`Baked ${receipt.length} artifacts → ${output}`); diff --git a/tools/icon-study/index.html b/tools/icon-study/index.html new file mode 100644 index 000000000..b3541130c --- /dev/null +++ b/tools/icon-study/index.html @@ -0,0 +1,56 @@ + + + + +Pocket · 经典图标设计室 + +

ICON STUDY / 01
+
+
Classic hardware · a quieter pocket

熟悉的 Pocket,安静一点。

保留口袋里的那台小机器。减掉硬边高光和多余反射,让颜色与轮廓在旧屏幕上也能站得住。四个方向,点选后放进桌面看看。

iOS 6
×
NINTENDO 3DS
+ +
+
+ + + diff --git a/tools/icon-study/serve.ts b/tools/icon-study/serve.ts new file mode 100644 index 000000000..bdf85750a --- /dev/null +++ b/tools/icon-study/serve.ts @@ -0,0 +1,17 @@ +import { resolve, sep } from "node:path"; + +const root = resolve(import.meta.dir, "../../dist/icon-study"); +const port = Number(process.env.PORT ?? 4176); +const server = Bun.serve({ + hostname: "127.0.0.1", port, + async fetch(request) { + let pathname: string; + try { pathname = decodeURIComponent(new URL(request.url).pathname); } catch { return new Response("Bad URL", { status: 400 }); } + const path = resolve(root, `.${pathname === "/" ? "/index.html" : pathname}`); + if (!path.startsWith(root + sep)) return new Response("Forbidden", { status: 403 }); + const file = Bun.file(path); + if (!await file.exists()) return new Response("Not found", { status: 404 }); + return new Response(file, { headers: { "Cache-Control": "no-store" } }); + }, +}); +console.log(`Pocket icon study → ${server.url}`); From 4f549b99de967bd306c393b0a5a0360773bb6410 Mon Sep 17 00:00:00 2001 From: "Yifeng \"Evan\" Wang" <7312949+doodlewind@users.noreply.github.com> Date: Fri, 4 Sep 2026 18:24:41 -0700 Subject: [PATCH 19/27] feat(icons): ship the quiet arcade artwork on classic iOS and 3DS --- docs/IPHONE4S.md | 18 ++++---- hosts/3ds/Makefile | 7 ++- hosts/3ds/icon-small.png | Bin 0 -> 589 bytes hosts/3ds/icon-small.svg | 10 +++++ hosts/3ds/icon.png | Bin 2465 -> 1256 bytes hosts/3ds/icon.svg | 10 +++++ hosts/iphone2g/Icon.png | Bin 4175 -> 3567 bytes hosts/iphone4s/Icon.svg | 74 +++++++----------------------- hosts/iphone4s/Info.plist | 8 ++-- hosts/ipodtouch4/Info.plist | 8 ++-- tests/iphone2g-profile.test.ts | 24 +++++----- tests/iphone4s-profile.test.ts | 17 +++---- tools/device-icons.ts | 30 +++++++++++++ tools/icon-raster.ts | 26 +++++++++++ tools/icon-study/README.md | 5 ++- tools/icon-study/bake.ts | 22 +-------- tools/icon-study/index.html | 4 +- tools/iphone-classic-icon.ts | 79 ++++++++------------------------- tools/iphone4s.ts | 1 + tools/ipodtouch4.ts | 1 + 20 files changed, 160 insertions(+), 184 deletions(-) create mode 100644 hosts/3ds/icon-small.png create mode 100644 hosts/3ds/icon-small.svg create mode 100644 hosts/3ds/icon.svg create mode 100644 tools/device-icons.ts create mode 100644 tools/icon-raster.ts diff --git a/docs/IPHONE4S.md b/docs/IPHONE4S.md index 3adfa6b76..591667bc9 100644 --- a/docs/IPHONE4S.md +++ b/docs/IPHONE4S.md @@ -80,15 +80,15 @@ renderer, density 2, and a 640×960 drawable for the 320×480 logical viewport.* It fails instead of silently presenting the software rasterizer through a `CAEAGLLayer` when that contract cannot be established. -SpringBoard artwork uses `hosts/iphone2g/Icon.png` as its single source. -The 1× `PocketClassic-v3.png` is copied byte-for-byte. The Retina -`PocketClassic-v3@2x.png` is independently rasterized from -`hosts/iphone4s/Icon.svg` with 8× supersampling, retaining the original icon's -transparent rounded corners, chrome bevel, enamel face, Pocket mark, and curved -glass highlight without duplicating each 1× source pixel into a 2×2 block. The -versioned basename prevents SpringBoard from reusing artwork cached under an -older bundle resource name. `UIPrerenderedIcon` keeps iOS from adding a second -gloss treatment. +SpringBoard artwork is rasterized from `hosts/iphone4s/Icon.svg`. **The +versioned `PocketClassic-v5.png` and `PocketClassic-v5@2x.png` are opaque +57×57 and 114×114 images.** Both use 4× supersampling with exact area +averaging. The selected D artwork uses a plum surface, muted yellow/pink/cyan +mark, and continuous radial light. `UIPrerenderedIcon` prevents an additional +system gloss layer. The versioned basename invalidates the old icon cache. +The same vector produces the launch-screen mark. `bun tools/device-icons.ts` +also regenerates the separately masked iPhone 2G icon and the independent +48×48 / 24×24 3DS icons; `--check` verifies their committed PNG bytes. `deploy` verifies the exact device identity before opening a fresh UDID-scoped USB tunnel. It acquires and renews a device-side lease, uses diff --git a/hosts/3ds/Makefile b/hosts/3ds/Makefile index 7d7e74b36..93b7b92a0 100644 --- a/hosts/3ds/Makefile +++ b/hosts/3ds/Makefile @@ -49,6 +49,9 @@ OUT := $(POCKETJS_OUT_3DSX) # 3dsxtool reads the recovery guest out of a RomFS directory. ROMFS := $(BUILD)/romfs ICON ?= $(CURDIR)/icon.png +# Custom large icons keep smdhtool's automatic reduction unless their caller +# also supplies SMALL_ICON. The host default has a separate optical drawing. +SMALL_ICON ?= $(if $(filter $(CURDIR)/icon.png,$(ICON)),$(CURDIR)/icon-small.png,) CIA := $(POCKETJS_OUT_CIA) RSF := $(CURDIR)/app.rsf @@ -177,9 +180,9 @@ $(SMDH_STAMP).probe: | $(BUILD) @rm -f $(SMDH_STAMP).new $(SMDH_STAMP): $(SMDH_STAMP).probe ; -$(SMDH): $(ICON) $(SMDH_STAMP) | $(BUILD) +$(SMDH): $(ICON) $(SMALL_ICON) $(SMDH_STAMP) | $(BUILD) $(SMDHTOOL) --create "$$POCKETJS_SMDH_TITLE" "$$POCKETJS_SMDH_DESC" \ - "$$POCKETJS_SMDH_AUTHOR" $(ICON) $@ + "$$POCKETJS_SMDH_AUTHOR" $(ICON) $@ $(SMALL_ICON) $(OUT): $(ELF) $(SMDH) $(ROMFS)/app.pocket $(ROMFS_LAYOUT_STAMP) mkdir -p $(dir $(OUT)) diff --git a/hosts/3ds/icon-small.png b/hosts/3ds/icon-small.png new file mode 100644 index 0000000000000000000000000000000000000000..6f174f1f72b17beb5d4f2b8ad6572d420a0ebf38 GIT binary patch literal 589 zcmV-T0Px$_en%SR7i>4mC;L6aTLctmRl>m%|Zw%$=Gg0jQs%MAcLn4GsP zyw)C0zA?1i4I(C9kz?Cd0G5_lN{XDnF+k&i7E|og>p4cddil1L17N!&zdJ=+^v8}K z^3c<+05CX_U}`p5c1I-vJ*UpHyRP2w+Z6#A?dmNHu;HSw>Z`)nb-gUnLff!|!N&;>TN zxF&L@V;2c~2?aKH?4tKnuHSmOJ^s)Jd8DepbN6+7yaz%i@ZU6o+ bv+96f$19ofT5x8L00000NkvXXu0mjfNA3 + + + + + + + + + diff --git a/hosts/3ds/icon.png b/hosts/3ds/icon.png index 265952aa9fc3f4d4b4f091c0c42c353b87eb1ba8..7a5d6ac655f12190260c47b9dde7bc95539a5442 100644 GIT binary patch delta 1208 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 diff --git a/hosts/3ds/icon.svg b/hosts/3ds/icon.svg new file mode 100644 index 000000000..72704b030 --- /dev/null +++ b/hosts/3ds/icon.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/hosts/iphone2g/Icon.png b/hosts/iphone2g/Icon.png index 9b1fb6df7daa9db2abce880cd7242e49aa584251..d6cc776a97eaaa860d6e3fc10f4950c2447115dd 100644 GIT binary patch literal 3567 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 literal 4175 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 - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + diff --git a/hosts/iphone4s/Info.plist b/hosts/iphone4s/Info.plist index 8a01ef0d1..b5d526223 100644 --- a/hosts/iphone4s/Info.plist +++ b/hosts/iphone4s/Info.plist @@ -16,19 +16,19 @@ CFBundleName PocketJS iPhone 4S CFBundleIconFile - PocketClassic-v3.png + PocketClassic-v5.png CFBundleIconFiles - PocketClassic-v3 + PocketClassic-v5 CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion - 0.1.2 + 0.1.4 CFBundleShortVersionString - 0.1.2 + 0.1.4 CFBundleURLTypes diff --git a/hosts/ipodtouch4/Info.plist b/hosts/ipodtouch4/Info.plist index bf3c6bd26..939d29f2d 100644 --- a/hosts/ipodtouch4/Info.plist +++ b/hosts/ipodtouch4/Info.plist @@ -16,19 +16,19 @@ CFBundleName PocketJS iPod touch 4 CFBundleIconFile - PocketClassic-v3.png + PocketClassic-v5.png CFBundleIconFiles - PocketClassic-v3 + PocketClassic-v5 CFBundlePackageType APPL CFBundleSignature ???? CFBundleVersion - 0.1.0 + 0.1.4 CFBundleShortVersionString - 0.1.0 + 0.1.4 CFBundleURLTypes diff --git a/tests/iphone2g-profile.test.ts b/tests/iphone2g-profile.test.ts index 066d52d9a..1632933e9 100644 --- a/tests/iphone2g-profile.test.ts +++ b/tests/iphone2g-profile.test.ts @@ -1,6 +1,5 @@ import { describe, expect, test } from "bun:test"; import { createCanvas, loadImage } from "@napi-rs/canvas"; -import { createHash } from "node:crypto"; import { readFileSync } from "node:fs"; import { join } from "node:path"; import { fileURLToPath } from "node:url"; @@ -110,11 +109,8 @@ describe("private iPhone 2G build profile", () => { }); test("ships a precomposed skeuomorphic SpringBoard icon", async () => { - expect( - createHash("sha256").update(readFileSync(ICON_PATH)).digest("hex"), - ).toBe("c53fd02ab1148674d33d36efa9b1d2eecc518cbe325ea2a2a0d47e3c295b019b"); const image = await loadImage(ICON_PATH); - expect([image.width, image.height]).toEqual([59, 60]); + expect([image.width, image.height]).toEqual([57, 57]); const canvas = createCanvas(image.width, image.height); const context = canvas.getContext("2d"); context.drawImage(image, 0, 0); @@ -124,15 +120,17 @@ describe("private iPhone 2G build profile", () => { // SpringBoard on 1.x rounds nothing itself, so the artwork carries its own // corners: transparent outside them, opaque everywhere inside. expect(alphaAt(0, 0)).toBe(0); - expect(alphaAt(58, 0)).toBe(0); - expect(alphaAt(0, 59)).toBe(0); - expect(alphaAt(58, 59)).toBe(0); + expect(alphaAt(56, 0)).toBe(0); + expect(alphaAt(0, 56)).toBe(0); + expect(alphaAt(56, 56)).toBe(0); expect(alphaAt(29, 29)).toBe(255); - // The three layers the era treatment is made of, sampled in from the edge: - // chrome bezel, plum enamel, then the arcade-yellow shell of the mark. - expect(pixelAt(29, 2)).toEqual([215, 217, 220, 255]); - expect(pixelAt(29, 52)).toEqual([28, 21, 48, 255]); - expect(pixelAt(12, 30)).toEqual([255, 210, 63, 255]); + // The selected palette retains a clear yellow outline over plum. + const center = pixelAt(28, 48); + expect(center[2]).toBeGreaterThan(center[1]); + const shell = pixelAt(10, 29); + expect(shell[0]).toBeGreaterThan(200); + expect(shell[1]).toBeGreaterThan(170); + expect(shell[2]).toBeLessThan(150); }); test("the ES 1.1 pipeline enables the fixed-function state ES 2 gets from its shader", () => { diff --git a/tests/iphone4s-profile.test.ts b/tests/iphone4s-profile.test.ts index fbeb3c44c..bee20f77e 100644 --- a/tests/iphone4s-profile.test.ts +++ b/tests/iphone4s-profile.test.ts @@ -18,7 +18,6 @@ import { IPHONE4S_TOOLCHAIN } from "../tools/iphone4s-toolchain.ts"; import { bakeClassicIPhoneArtwork, IPHONE_CLASSIC_ICON_FILE, - IPHONE_CLASSIC_ICON_SOURCE, IPHONE_CLASSIC_RETINA_ICON_FILE, } from "../tools/iphone-classic-icon.ts"; import { @@ -196,16 +195,15 @@ describe("private iPhone 4S profile", () => { } }); - test("keeps the iPhone 2G icon byte-exact and independently rasterizes its Retina reconstruction", async () => { + test("bakes opaque square iOS icons at native sizes without pixel duplication", async () => { const output = mkdtempSync(join(tmpdir(), "pocket-iphone4s-artwork-")); try { await bakeClassicIPhoneArtwork(output); - expect(readFileSync(join(output, IPHONE_CLASSIC_ICON_FILE))).toEqual(readFileSync(IPHONE_CLASSIC_ICON_SOURCE)); const one = await loadImage(join(output, IPHONE_CLASSIC_ICON_FILE)); const two = await loadImage(join(output, IPHONE_CLASSIC_RETINA_ICON_FILE)); - expect([one.width, one.height]).toEqual([59, 60]); - expect([two.width, two.height]).toEqual([118, 120]); + expect([one.width, one.height]).toEqual([57, 57]); + expect([two.width, two.height]).toEqual([114, 114]); const oneCanvas = createCanvas(one.width, one.height); const twoCanvas = createCanvas(two.width, two.height); oneCanvas.getContext("2d").drawImage(one, 0, 0); @@ -221,11 +219,14 @@ describe("private iPhone 4S profile", () => { } } expect(twoPixels).not.toEqual(expected); - let antialiasedAlphaPixels = 0; for (let index = 3; index < twoPixels.length; index += 4) { - if (twoPixels[index] > 0 && twoPixels[index] < 255) antialiasedAlphaPixels += 1; + expect(twoPixels[index]).toBe(255); + } + for (const filename of ["Default@2x.png", "Default-568h@2x.png"]) { + const launch = await loadImage(join(output, filename)); + expect(launch.width).toBe(640); + expect(launch.height).toBe(filename === "Default@2x.png" ? 960 : 1136); } - expect(antialiasedAlphaPixels).toBeGreaterThan(100); } finally { rmSync(output, { recursive: true, force: true }); } diff --git a/tools/device-icons.ts b/tools/device-icons.ts new file mode 100644 index 000000000..09e5fdf9a --- /dev/null +++ b/tools/device-icons.ts @@ -0,0 +1,30 @@ +import { readFileSync, writeFileSync } from "node:fs"; +import { resolve } from "node:path"; +import { rasterizeIconSvg } from "./icon-raster.ts"; + +// Committed host PNGs are generated inputs for the legacy and devkitPro +// build systems. Keep both 3DS optical sizes independent all the way to SMDH. +const root = resolve(import.meta.dir, ".."); +const check = process.argv.includes("--check"); +for (const [source, target, size] of [ + ["hosts/iphone4s/Icon.svg", "hosts/iphone2g/Icon.png", 57], + ["hosts/3ds/icon.svg", "hosts/3ds/icon.png", 48], + ["hosts/3ds/icon-small.svg", "hosts/3ds/icon-small.png", 24], +] as const) { + const svg = readFileSync(resolve(root, source), "utf8"); + const canvas = await rasterizeIconSvg(svg, size); + if (target === "hosts/iphone2g/Icon.png") { + // Older SpringBoard versions need the corners in the asset itself. + const context = canvas.getContext("2d"); + context.globalCompositeOperation = "destination-in"; + context.beginPath(); + context.roundRect(0, 0, size, size, 11); + context.fill(); + } + const png = canvas.toBuffer("image/png"); + const path = resolve(root, target); + if (check) { + if (!png.equals(readFileSync(path))) throw new Error(`${target} is stale; run bun tools/device-icons.ts`); + } else writeFileSync(path, png); + console.log(`${check ? "verified" : "wrote"} ${target} (${size}×${size})`); +} diff --git a/tools/icon-raster.ts b/tools/icon-raster.ts new file mode 100644 index 000000000..df69295b2 --- /dev/null +++ b/tools/icon-raster.ts @@ -0,0 +1,26 @@ +import { createCanvas, loadImage } from "@napi-rs/canvas"; + +/** Rasterize vector artwork once, then average exact sample areas. */ +export async function rasterizeIconSvg(svg: string, width: number, height = width) { + const scale = 4; + const sized = svg.replace(/(]*\bwidth=")[^"]+("[^>]*\bheight=")[^"]+"/, `$1${width * scale}$2${height * scale}"`); + if (sized === svg) throw new Error("Icon SVG must declare width and height"); + const image = await loadImage(Buffer.from(sized)); + if (image.width !== width * scale || image.height !== height * scale) throw new Error("Unexpected icon raster dimensions"); + const big = createCanvas(width * scale, height * scale); + big.getContext("2d").drawImage(image, 0, 0); + const pixels = big.getContext("2d").getImageData(0, 0, big.width, big.height).data; + const canvas = createCanvas(width, height); + const ctx = canvas.getContext("2d"); + const result = ctx.createImageData(width, height); + for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) { + for (let c = 0; c < 4; c++) { + let sum = 0; + for (let yy = 0; yy < scale; yy++) for (let xx = 0; xx < scale; xx++) sum += pixels[((y * scale + yy) * big.width + x * scale + xx) * 4 + c]; + result.data[(y * width + x) * 4 + c] = Math.round(sum / (scale * scale)); + } + if (result.data[(y * width + x) * 4 + 3] !== 255) throw new Error("Icon artwork must be opaque"); + } + ctx.putImageData(result, 0, 0); + return canvas; +} diff --git a/tools/icon-study/README.md b/tools/icon-study/README.md index 7d75d8177..43c049444 100644 --- a/tools/icon-study/README.md +++ b/tools/icon-study/README.md @@ -1,8 +1,9 @@ # Classic Pocket icon study Four locally baked proposals for the iOS 6 SpringBoard and Nintendo 3DS -Homebrew Launcher. This study does not change the shipped host assets or -install anything on a device. +Homebrew Launcher. Proposal D is selected for the host assets. The study +commands only regenerate the comparison page; `bun tools/device-icons.ts` +regenerates the committed host PNGs from their host-owned SVGs. ```sh bun tools/icon-study/bake.ts --smdh diff --git a/tools/icon-study/bake.ts b/tools/icon-study/bake.ts index f4f6fd19a..3de39145f 100644 --- a/tools/icon-study/bake.ts +++ b/tools/icon-study/bake.ts @@ -1,3 +1,4 @@ +import { rasterizeIconSvg as raster } from "../icon-raster.ts"; import { createCanvas, loadImage } from "@napi-rs/canvas"; import { cpSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; import { resolve } from "node:path"; @@ -8,27 +9,6 @@ mkdirSync(resolve(output, "assets"), { recursive: true }); const assets = resolve(output, "assets"); const receipt: Record[] = []; -async function raster(svg: string, size: number) { - const scale = 4; - const image = await loadImage(Buffer.from(svg.replace(`width="${size}" height="${size}"`, `width="${size * scale}" height="${size * scale}"`))); - const big = createCanvas(size * scale, size * scale); - big.getContext("2d").drawImage(image, 0, 0); - const pixels = big.getContext("2d").getImageData(0, 0, big.width, big.height).data; - const canvas = createCanvas(size, size); - const ctx = canvas.getContext("2d"); - const result = ctx.createImageData(size, size); - for (let y = 0; y < size; y++) for (let x = 0; x < size; x++) { - for (let c = 0; c < 4; c++) { - let sum = 0; - for (let yy = 0; yy < scale; yy++) for (let xx = 0; xx < scale; xx++) sum += pixels[((y * scale + yy) * big.width + x * scale + xx) * 4 + c]; - result.data[(y * size + x) * 4 + c] = Math.round(sum / (scale * scale)); - } - if (result.data[(y * size + x) * 4 + 3] !== 255) throw new Error("Icon must be opaque"); - } - ctx.putImageData(result, 0, 0); - return canvas; -} - for (const v of variants) for (const [platform, sizes] of [["ios", [57, 114, 512]], ["3ds", [24, 48]]] as const) { for (const size of sizes) { const svg = artwork(v, platform, size); diff --git a/tools/icon-study/index.html b/tools/icon-study/index.html index b3541130c..36b7b7f2b 100644 --- a/tools/icon-study/index.html +++ b/tools/icon-study/index.html @@ -33,9 +33,9 @@

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%0AQF=~sgsP(H^6t#;Id(%>T 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 Y43|-+2@*noQV39dp(0!M+$iwB0PsJVtpET3 diff --git a/tests/goldens/3ds/pocket-shell-applets.90.png b/tests/goldens/3ds/pocket-shell-applets.90.png deleted file mode 100644 index 8fb98953e64df7c6481bfe24fa481a2d4063e71e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26511 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 YP>0s^Qol_sHvqowsOzeIRIv*AA8$Bz4*&oF diff --git a/tests/goldens/3ds/pocket-shell.112.auxiliary.png b/tests/goldens/3ds/pocket-shell.112.auxiliary.png deleted file mode 100644 index dad9031e53496b2ebb8684882c82336003829226..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22888 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 IhPdee1FGe6_W%F@ diff --git a/tests/goldens/3ds/pocket-shell.112.png b/tests/goldens/3ds/pocket-shell.112.png deleted file mode 100644 index 31a8f406985dd5994f0ab834413679a8b37eaad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18362 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%0D>!E~=sLJ(%Us{_oXyS&XXN{?Q})UHY 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

@v>O;B#nOo40 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.176.png b/tests/goldens/3ds/pocket-shell.176.png new file mode 100644 index 0000000000000000000000000000000000000000..31a8f406985dd5994f0ab834413679a8b37eaad9 GIT binary patch literal 18362 zcmYIvcRZW#_r69DJN72_rfRPWg4nY~OYN$vRn(?YBX;ao?XA?_t5(rcYPa^DRkfAk z_h>)w-}j%q@)FOJ=RWs2*SW6i+=6mqT zD0`YNyD{H16aDySvf41q!tmg%)6dx&{|%oZbD^is+xhEJvg)nPOOhW-5+C@l`#C>+ zzJ(LqUU72i{3yH@(P2mOZ1PE+n@_~Ek*^9CtRowBGC%t4gf19=oO(+8zbN{Sf(?}6 zR5+dQ3I`fCEttMvuz{L09PE(Jnr3|%nAgdeUbCy0S?W<)SH&jC|ES8jN>&G*b{^JVC8iuvYa^kvSAMhdwkQ zYwpUbN!$IYUg!Syvr?*vvd}tzWa;)}lb&M7SFon-5Nmfkqgsy`W%Q7XCRb|qYRO26*7-nhSmWex{(rP4kjk$S}z{$w{N{#R9V{m zvK#~!W(8NPTvkoTo16L?R_3b6NfxV#9uM)u#zkeOFFtM+;wv&`&%-l?V zO7_8J-Drl3CKX#e?1Cx-t`Q&Iu5&z7esOj0k$-B#34wlgxpVxUifpR~x96Um(Gzy< z$zpaSgVz9CBZ2Mph@S(WdqQulJQN8-;=s0{ytkT&A=WdKuN}9a&eXqN!^-Y9&hW2! zXdj?XV=jsz9|_HZSI(}zH%_J0|5kLll*7s1|;HkK$ktJ6dyhp2J) z8kwxWTP5^JS~mHK{@{b?iCUd6PCwa~(HW$VJ9+@Z6Ca`;%f z%w`>eKGtmc*LR(cCm(g?93x!QWtTJrEPfBozJIkK>zaoqdhs)@(tjhfG%j*$>PL$r zg4CC?s; zB4A6Wxlq{Z$I6g$t>e_O$GweW$A>Sd`q$Uxt?fw}+az7V*1GnlY?!FIzPml0)3fX$ zFO375+m!dV?+U;vm$@-0Y{@9Q_-68Woq?YThDLZKL!-*v3;Z&FGBe#onC|$@GX?2{ z_ik)S4+r4O{~B$Gvhy;d%ad$97MMF+mW=elgr|kA-6lSK^rz$DW^YqVk3B;2+Y7yj zGMX-CjwyD+2A}gQj>I4inLYdKCG0|Y!l#)p4(EOo@$!Z`E%$W%X5Lhc%FZ7%_4%AQ z1RgTUI<>i&GP{M7Up$(0rXRX7O}NEC-FS#~a|V8CXi` z&4thD;-q9rcBAo}sd;%3R3}w9Oq_HG)%3oL0 zZH7rfAL$0}Kp}`c+Y#UILhj}lwVjL2{zfeNvZKijJ#lRW2X&`ZO`JF8dy<6`*;i$Of$GD+{Cwv?PT}k zKG-$zf&((g4ltiGpa3&D!>8J0wx=lpgTcAt7m-0O84Cbe7S(x*;; z{>W&s7z%u#So?B_f$3@@V3?A8bKbM<><1T9a)QCPR5kOx9ZkLKjxt_?TEU{zx8kVH zUHs9Pz&92frGm09adK^TX4}Ba9>kDbl78ja^SeprZ)TQsS}LS9m}b;IN5WyCu4w0NIVu5*+?5uE*1UV zJN}->a|E1((eBxY?R%XcB#T(d_4I=S0;8PT+xAHv21SFWu11wne`=qJuUXvV#Ljg#i)CQk7`O>>4keue$Dd=hOSiwh@)eT{e|op z5i}6o&VA+;dRhwotoXDpZwT(-09n7tL-2E}&+I1Ce8_QqMpKgyHZ|dLKiE3I>+vna z^HKZJQylhvt4# zyHvl&se(5|hHik&7JhFqE@zxQwQ{_82@OjNgMe3{?*;u3PfKlPFucU^s!zXb8y8ci zM89+U?DX(ZsLFq;UeWCfMLvphJoY5e5N7-YR8>?{?+dYwqA&U`%3HWM?Su4BB}cL{ z=%J6=ggI*QdjeT=JipG-4pd^7G!kd72nZnIf>CY+oY)O+P!$X%^(x50az;a<;Ind! zAsqBBuTKh>BlwnEdQRxAgXioRLVef-{h=#G-#U4ZK9;?847w)wYe}hSzOPr@Te655 z|B20!-`EqK<`br^{==F39fzg!`)a)84SO#V!-eSG(=71zxZ}#jRXH4Egyg1&3+C94 zLx$+dz_{hCRAnD*E&@l~Y$_QuWP3%0#zwW@eaVS|lgO?e;H@1P@4XSTtENURUY?u; zy0;*sSVJfLj`gF&j%-ZRyGGf`ifU69lGkpPOEtJ}$tdn>x}y<-VHz3lX7~(ECNSad z+n;q|A06HsppRHCReL4P??oSmmf5AWoIH?5ZC*UsM9*Deqzl60%ST-%R@A<_smf|_ zynCus z1QRtQ6&jx17CK~=ar5x;=;-zPaPWffG&@Kj^23z+Bj=LJMecN|IvjEHh`cX&Epng9 zAh~4e?NPTp%}9fh8&g_znO|ZX-{n4hR$YA zPSED9eB`|WzeB&uR+GNh_f1qSsCRJLOUI103XO0XHylNxsLqexW*%o&>9N zo8#?I|G>w`TfM-x6}-ev z${F)=xzgiGQTEJ$W08ZjVNXBfL&ne1Pkg9GWY4oCYSd~5PVPWnU(*3~$RY=}X-?g4 zX>Z-E6S}KCv)v4%)2)=%nI?m5kz%7n7J$jZ%mzI*$U~{xgwl=;OYBEYvDpkSw$Ez-rWI>s4TNlHUwSSX|nU2AiLQUcuX0a;btNF0#L_pPfGOr z<>~8VN=etZl!KpRAqZ7g9cx}Ci%IS~TcsHIY%YcX!EWVsrPIeo>EUzq{j=KJb+h$k z_@%TP`l(s&qdo=s2i#6^Qjs#JnR4$>kZ%3R6_1VQDCf(zq;R@;fv8g@Mv|b(vQgLA z#-oL0j(seUenuX7Xq4PLUb5sNzI$wsmR%_#x|?G`RfZZGyzqCQ?y)gj^Kw^1I7s4< z-R7`nIkQUqZhsfY#y~Q(hORVWx5V55)48t@+X&b|r*Df3Q%BEyo&6O*{3VB+2ye=#A z^;r3++8O~VhBg$-PIk}oik!$WNU59j^z+Ce#LoRHZ5P?ihZa?-=ELg8 zABiOgX1m%Q2>P>>P?2DCa92N!3$LNLyE?i%g0fyFcb;YfpNi=y2_=ZbY0EmQhvcT? zEl89nZ@HZ$X5{->nYP#8=8YjHtiCO=9%6g%B7N_nc!5mJ;-I$h?lbK026$|KeLv53#nasmdl5ID}-qL09S#TvdtW8ZxMC%$Hakam%2bLdMT@$RMo_@a-m*N1 zR^ZKG4EEqdzI9i8DS;2Sf2vw#eYuosUFD0<*khmm-F{tAI!_wNyXm`1Gk)AZ%&Cw! zMEWvIBTz~9E@X(XK4`PA_EK3P;SZ+#&+RkR>c#jz*)RF+vwkm!8MRL7PhL-U`Z^jo z7jjQ(7T=Bso-mA`xc&0{G_@J2`?8P2qChYUY>^|F_2-WH74I+3Pc$XRV~d0d!(;2i z{yGOd<|n4VOh4Hduj&7CP(0kYtMVo5B7c>_V{4~$TVc{bOed4&qx@LQ~1bvl|^zzY&CzUW-gpCg^;^C7&PB<)<#nAg%hBa>3mJsWwu zDH%jG&-0sM+Jm`O@xa&jk8X#>*h9Z;}Jgwwr0TA zkv$I0Tu_g%VREabRmct@%=3_C9x`4DcZ>IIBiErda1)pSlm?~sZC)3G zYK-$Mj=lJ#+a9uHqv!5vsjsR(nPkEmn#YEjtaqfniz{x7HwfwBJbq`pG!X_WsLXZV zBw~5>4nTD-KFM;9++KAP*ofD2t$xtf!y5Pz#1@6qmErY;z<;Zf6)J+6woh-%9kRS7 z0R7n^84YLDA<%btCl2YM#fojt5%niBVrp!CpDN_^U1;87a#~RDF!Ox;ORdd@;&xQQ z<~#ZDFKe?n)f^nvku@gya=+fq*T8f4R%thEDg!oXo#sRY=Dj?apv6AM&t}wGE@DTA zGQDA_Ra~9OnoEJASkki5*`9C8)JQ?LYN}?%jeCH7irC>{W*7;(!>{b2F&U%pvQ5u2*2_-?c?(+5HB(hMizvcJ zflE=r#+rj#!${?Rq{C%*U(b&C<(SG?=3Bo46N$E8O8ay(OR;bAplu{(^Yd!PkHj?s zUe(mvOtJ1?rI|#^c*RBaW3xGYc&>-$XoTye2xE@u!NIXiZ1BEzCxDxGdnPu#J!FNv z^nqfni%Zn&UDP`|Sg*&GxNj&v{XT0aM2KIq8?D1gGgc*+5^8pvbgb&pI1@d^Pmw3h zjph*Rg?{bjdqF|_1v8N;YLv?~C;=^j2t&X3@oI`3fuIP56$#&&H+_h3QhZB#+k>u) z1*PG}r5CKPr`or=dq4EdcQ5mX2AynsMg5;O;du}g;{A(mgt-0-xm855%-2Z~xL;8hJ0az^LNfsBj`&Z%8B1Q zyaEEHQFw4lXiP%VIZ1%uU~eL1)JOx0hR>#`Q2Nd8940x1~r>uz-oW4PRD*0BBn-8L}0DDh?-qe-DOcK8aK4yF*&S8y)%$C)jSc z+6}}j@Qh+6qFLFdOCA@4*Q)>{&VLULz|xvZRUW_PvuVTn2y{z>QKqp$uLPtB$gq^L z=K@e_MNT%}e(V(%4EE@K^xc=2(WM69YPr^@w_z681mMekl~~={#Nvk@N$k-4bd0Z( zuZCdMQ40NG$MbFZl!*=2t`0zLu8L^W;IcsxJhLblxd_(kCrxDo`$PgSZ+Rkdw%)^L zY9O|aCTxm0xxEUv%TXd^$8^Ahhg)`}<8*;ajQB|GO`LWZd1bI2zksSlSS-jJ>sW}? zjI?3i9}3A+V|AWXQ=;{fME>r|Q}SZMk6bFCyMMZT`RxAfv^}FW z$|I2?u+27sWzJM0yHAo@zKg6hk(;5KKvT7FK-d#<92{6qM!;?T^vIewB&suf?o`Pi z7|Fjz6Q=Nc2~MJNYbwnQO!W7-yZf@=f#~X0S+<9bTv3g3qHl4!s2WmaD>$iE(25o_eu@@gpS{PA?M_gKG zAb`k5 zH$#!_+`7&J(ZU2j_}#$d0ZXEe3bHi4E2inJ+t=~i*N=srer7kly*AP6 zd%ip4%d{bXdXoBJvc~JF3CY4zopv2*(0ODK^|w>J0V|)P%bwGizN|H=ic#-fZZ>j8 z!hqilqh9DCU%|dCG(`=VI^~i@21&=#E7~T{fWvh>65u?!@=uBym^5u5u52%QD?#Py8#Nv3wjQJ zP7JSizkQf$-^YGzzvWey5gWzw=);`LTW8Sz^zifjcbcyQuQhd}e4r75gBldb%!A;2 zyPo&@yNzL`@;(nH@~hreiM8`oR`h@(+7E5`s89mxR%IyyQ27V&zA}1Y`s%AaibKFs zEE-ncC?D>Y*r(gsoN4ePd0i35*;o+vb?FC#6#1rP>(YDs09n|?zHE-|V(3g@uDg*w zq#kDZr?%FqbPjLRg1{bZDC~y@J^k7sK8Mgz}K_dFYp^s5zC5vy4 zgNQO+2yE}=$)Of&wgrALRkfG3r;kZg3BeyIWfc|fY%c6gij)QwnlNYF$;H$`5C!(> zkc4Wt8C`$j6N(YM`p`=f-?FyYD2Bg*P{dijH>n5&;-u4GOPCvE$}}WfO=&@y#ErQd z3+MZ8dQ<+43e_A^0j~EfQ<0RQ&gUIh!($chq<5rZ{>atuBuNk)FeP_5D(sU^XFldX zHo^O-3wtzURsrIr;>08x&~iI5#;pi^#MyI7|M7`JZ&WX9Uu$!Q1!<6FRr zNXiLxW`0qi&r_pgnTgFk2l<3!PLTn{L6c`?YPU=t(S*)RXD3dKNu5hnG0Tv)B~BQ^ zWzOO9DGfzqUDW8AK+vDNKeF1~fwcjf{BLbgkrdtn9UiD@a{*<>uXmcsl<4Jg*GwJK z3dqmbCQxr@>|9r%>Y2_}$N5?;~ zKhb{BV@jAVJiqJLhaw>ym@yQ>BxgpB7~1GVdYlv{TzdDbi?V|m9UE4b!=_wLXShx% zUaf6Q7Nb8qDopske)QS%_9M>{1CV}~RNnrt4uUyx5nV6cK|hyQIOG9py=Je;kl&{C z#%12swCcsxEd;(Bw;jK5py}^6pk0hd*~!ROYQ>QVjI~j?dswt;q0+Yp#`e3Tf{TNA z09bqqdSi_$OFan<+C#ccyn{oDt<$-;FKY=Asl7Jc10K#&+>OE{s6ii>ZgoZiYUEMq zpwS*JoY@+B`SqP5J{hFDZ&9fNTLTtHOquU?Wf?n^Du6**`&7bng)Ix4`xbwzrELB- z46Ug&fthVcW9}TcPh7vdwBGUJIfQUJGJQAGWdN+e*HqFU&CrFINw=eDO)G|KU1YKINNjcX-eG z!NMX7dWygPC9BP>q%^LCrd6RunW8IALEWNt&*9*;*OSPEwESQ7C~M*0ua8c8u_Uq zy{U5LTpLw9(g?GT&YUgy=To}^-Popn#$)Q3p^bG;wT4m&~c$r zQ2FD(XFEC`$8i95vi))*0UmN)jej3xlmyIAm9iblG-F{sP zF?1qbi@Y=#d29-jPAUp7<$zZBG5Fy3v@;WOoRc&bg74@LwkhH~pA2o`rUoZ}`|gPA z3}p(RQMk|`1TziH=Xfk$60$)(#<7?vWW@h)d6>L=g)j>B`9{+I(DSK@nu??pE^@_6 zX7Ux5k$t$&H?DQ7mTzH^nUy3m4go5+b{3|5=BDg1<&F0; zq5&);WFW0ES+|!9ahHZWTLvoO;al&p?;rjkOEe}JXqQix@R%X>leS{eIrue$n_}Dt zSD`!yyqUNew|hJ9wtU~bbK2f1ar%DhB9Gs*v+n&!a=T`MCW;-JqG^X?jYMp;Z}~L4 z_zJy*dnCcb`1zqs9^kW$V$!nvG9b6@ACqj*eDv3pHf^j*(Ou8Mil3pI$EH@CBm9`IO4jstcb?&43z;KcMnWo|q$ZeYXWa_=y zUfKi7&C%izIAAZ(zB`DANKes7r$lx%+MS zihvJVR(g$_oHfxKVpY-vLDG)XSGFsj(M@I-f40m$;9NYg%$$VaOJ4-}D+ z8Vsw1z=P;%I_N-;c+N>cS=_(K=Uw;y16|M7O~kmI$7h|AY}l*KP2@fUjP;r3@Yssz zm3W>_&*@ge=v22HC$2Ec5=f>MQ5o%v{m~$n`lS?&u|Ce(6Xm{kV#KYdW?cOedPC=D z_e%QI6v{D#fs&K@+*aQBh+X0OxV1{=_C6p)nGYz_<&%VO>w6EAA&)W`DMH~!;5*y^ zUKnn_qX(7P<+cu4wdM3mJ0K+wJMRFY81O6-6x2f!GVrLDC9|qWT9?72rGFWXK7A)=}+~s7;A& z5m$z|2Nj?u7hlwn_Ip~Z79ZTt1oFM0h*tmCzi@KhtsmhdM%gd)TpsLei zDd6zP`kWf+`j!=g7qe-8OYAS~f=2SG$IADKdq!Qy;mby`fUf$CZi0hz^WA#6pdF$8 zR87=79T7cci+`%hRAZ4{KydAP%&G2g|HPZae z@XReqTOASpAUG0dxVy_H{| zh43*p;c8(zJ9q4to0t^uo)E9s!SIYX%h?J4M@#5E7ei9v?=W4~C|CJMsh}oKW5DWT z@COG!lz?!Ft$sAxRx16+VE8~Ih9+#Mj!cABDA%?b9uTWJTLPX71cs@hXe2BVJ=GG1 z|CM3lB}Oo(8*&)GxqCy{wcgGfUY(&S7@SU)7)1PPk~L3QRBYf9~+4P z7Ef~rSp0K@66|UUHS2jtkyO4K?uY9I=#X+}EtH%@ozf6MtkgDe^sn{8;uJl>)?=nLVmOn}zCxnl=e^&ZjyScR2meDW^@gc~KR5T_g|je3pN zleSD9FjiQqVh>QT!xx9VWT8Z6LE?nAOi8?kw@{43WK6>&5eysP%o&rPk60^5Yn1o{ zfO+A-*fzjsNjA3X&)5V%{+5B3C)ItwJz>hFVxQB`=!$`?qP%8#z@znTzlgjgr9!C! z-iVTbn&gY(#iipjsk{j|#_E+|b5%+Xt$mK+`)Ty%&|iuhkqu;Q(B_HAEVydnMTi_U z6#V-xz*Ovpq#&z9j3XJ+1N^qnmkXs)4e)${bW4K&x25M9s(d!%A0i=M|m!G9x=*$k1>wyO2-If zC^!?b9qi8L{e_ntnho%VQ+lJ_7tj(Ugx_^n!rHUIX=(c*dkkl8{KhW|{5&BRu6)Sq z74XO`qy5x`t0@LJxt*XTjnQ$pon)cx$A00hf^v(1Qo zOj`Q&3Bh$c7GcQFd>AdZkLghFoe|CZo1G7-x7r!n`Z|O)#O!$IlJd0NWAD7TG{t(u zK{{9ipHx&7y+@8d3m12!LgW6un5>`wKKfC;(#GEKSkug*$BP%CKck1o4l54Ttv)i; zP`Z3hU`-IPORG*wzN5aIMT59hrn`%KkF5W_d+>6QB`$zHUJQz`ji19~d3}dRzpAKY z#4EM9TT&hBMAbC&+&yNB@lI+MhijmRamvwm{F17|R~wGbzF^!|VLjL4c*V*m0cqhK^H zC7KCo>;ELBH{8Ii*sRLY3u;aSiTi8g^nl_IOt$**ea;9FDvUbhBH%7Ei1GFVn*KW@ zm;4EGBT zz*9D>-b}FF6!!1itoZphre>$NbY9pxP}SOP)noH2nu2cGK>HzCy#rKD5)6mtfQ0*5 z!YLzLr4bj*i_J;)|6A)se8Cu#sm$1$g0T!!nTeE~L?^oV_B3JcP&)!!9?nIj)kw2a z(5*N|vw|9#aH7BM#4rGr{&Q%wWJuusi^mQH?3zvW0(LXiNwW%?>RDL9fTr{4mM}1f zMb=FF-QY)$kp)bN_Py!n+Q&R|={X^`k2yF2^iWw1+vLDBvO>-2eZ{&!OTIN^;M@?a zaG)m=M3^psnjRAL;QzfI!HwCCEsX~&Hu5K+^=~$_lGY_7l;jp+4 z5E;L?-IH2gN&u5PY7nA& zwkarGv<#bhmA^lJ^(Kc>o9Mt3W)|Tn8Ct*wy%7pPvrd5%scKRojg^Ca8Ad@S5OPJz z1cxELr`G}nXBr-V`*v24x4P>CO{=Yc{KO0eiRi%Ac1UB^7#*}6wSbvJk$KSwv3N^6 z1gja^EZ(t-gptJ}eO+jqhe4UKmmXy#&*G|{4+2)3H@s9`%E{KlYw`$_c1?1gZB&PvZQQx(@?=0Q+0u_Db*ij3;_6}BFP+DrT2x^gu$P4K z{LjA-fXRRZN3c@VFc232j*fBIoGsXLFZ&|@NtJ$9bN$d z*cKl+cev+0hi2fA`Y$<`rVknZ9*gA8dfp;q9aWSQ%{ubfgs^(9f2Im z7(8uV_wp@?ZD71Wln&CIR&VI{OH(}1cd@5fZpEi>RUKRx@&U%84K&Msh6<74I6;Dx z-4&KOTsho-MTCHg+OdJFy}Hz3+NR1d86Y)2&RK%og8vqo6+Xv(4BjIZ0!KD9{Mo_R zMM`Sp#TZQ2oq~~=9R-4a1xtk5JmBf)_)3ecP+rXe#?6hOspr_4Ob;n-We=&7kpGrk z2rpy9=Yq;%xAAJW#h9+#d+9(&&!UCj2yJ4UvSvcY2pT-~h`+=1o2{DZFY`Ag1?}H3 z0a36j!yQUTF+DaqmNY6?#pibAA7yS!N(g5nUvHVjBT*joH``7pGC_m9EPM^eN3@ZO z;RYA!ang$>Ie*r;L+R3mJt-=N0=hl`A*u`qvnc5_mW-mcSi8@j0*3WYO)zp`Vzbr_ z;OR0C0>6hlRQy3!p%h2%lR>>)d|QXdJSt=9UCWVXc`-gOZ0}My1!sJdh9 zeVOM;duHpDlm8fii4X@78|ImE80DK@BD;J&SmM?dhjw4WU!bfe8T^q|uzCeFD|(QK z%IGt6NZ$lbj3(aN!?le!8p)_I6JhwI<@QCn{`Mdr}Z%Xrd3` zZUTI@t-@$qL;ekv3<4lt*|N29)yn%u&=)a zDdMdS%ewo>D}o-Wm?=O67wrc(gSGeGl94ankcSrDGHH6JFY49H_aLFeU6Ft|cg;fb zFgrc0z|Rj-1r&PzJ4%OLErFM!l?gYMBYqdx8r_Y-1C+#bt1fC}7ay4*h;E+(QjVZ$ z5FO#jeF=Bv6QHpdRT zV+BVdd;FLTw& zTh>1i8leX}CU+D4hy~iJ`=m_MkGPJ0Ntnd%2{g(#*oVQ0ojV_Ap4Hxn7a&ozP_z#G zoN-Fv<;1S-cX5f?Lob0@rkAn`3~#;8EiM=iqhiLs@gp!exhm|KzU+lL?~l9>JwL+v zR{r*--<0>4WH7;qv-@270Eb@9nD9O9f-+;+Q&5R07}R*XNy(*H(c>;5|3S5t z5;a=OTzsD z+!d161EE&h>#up3{eYWPYJ9=4A5D&af%nL=KZJ#c%JcW_C53oBg=Ct8UrgBgr(NWW zX_#j4u?80m%7QHd=!hc-SkfTm_OerNBL2ric$z39s_fO@@43JU=`}%`~(muHNucd7hB0hB|p(zQR^MRqD4Ae&uX>7iq zylDdfer-}0rEkKaDM@?}5L5MDF-ARk1mlhodk9M_7n%+?@X%Koui>T23 zde-hhfA}5iW^(f$sDYOn<^`M)lSDDqa5iBUt}7`r(J1=Xrw|kiCTT#lyqvr(t2S7Z?(1H8eI@j&$+Y3AFP-SX- z_5e;E2$-y23h>6B6K93usERv4(ui)f2c5{$Bcw^iH!;4|C4T6kQ0w#=9&nC?S0~Y* z31AZR&OH?Dy!0&UZ$>w(JO2usO0WT1E(t+|((-n}CXL^wB2DI#GkIzh>j}8w7`344Cv)M!zb4%iHTJs`3|Yzx2vUC**$0p^TBR zdq%4dxmg_C7|c22J4$fg_}MG9FqFaX zMl8A7bjgcq_OY&)7VKC5w{NU!u(y1C7`pZhS%85#^(4L$6{CAwI1(lmBf;^cRz%S) z9mV;NA@+ktXunJH{+h+j#L2xeeddtFF9al%SE}f?owOj$^hCaj0m1*`sRj#e*$0N? za(bV=i<6k-2txpO=C3$1xvs?^73tj~C;DO@{swsTO`q$TX>yb_>Y4lA*%>f)1rlN5 zv5U-yQ2_jE`GIrK3LnU!V@!(J;bmipp~+3S!r%mPRpQLMB78r4Nl-64fCC(eKgugJ zP41lKBVlq@6lf*&e}ZKRf{;(9Mz>VqF=BfG!(Yqm+P{qYJps7Kh+qI0XfA)TyM02)MQ&!XXm^g+wU_kbW^_PwXSde|t$35IQ8W^Wv86{8MkFSttz0>|^`0H^xK zHP?gzw}ycC+#E~6+Gy_46h5dno1)H&^%?DW0$eM8JmxupBcLjPNG%t_2PrgGO--ae z^%%osQXnD2UCRV!-7zNS4l}_~McY8*ylHQDwHkQ^E}!)XdD6R-fXMm@HC20((Li%h zDR)ElCneLv`>3{F;*9`a85alY$&_O9bK#z-!5|B27{>Bc=|=b!ds>=3;^7}^e<%90 z12zCgah`$U)Lpy+qpO4MhCZwC`WLqyWj8l3l7_a z;Gi@QA0DF%2nW=SLJ-JDdoTKhf!(b zSI5wO7PkYmrrN;!gnB#bzkZKDs)xgo5*dwqstx%c`F*W$TlX;UP>EWJ9*T62eg4Jt z*589Z!0N_n2sysCRRTX6Q=^L<28ckb`20(IwRIlxJDT6u%is|=^ZM_%SxIxJXnIEY z>Ebv)+I(rlss4ls^}g3X{K}6TZ1&nL2Tk*AUBByRPjFhmoX*g_M(02 zPs;dUfU^KbBeCT2_Z-tShBUzxyc?3hz%@A2B#Y0n=m`TL%t-j7K5#&wi>hf72UM+X zs`d|tZi5XPaX$swhs3Vl|L;pdM>(eLqu}p0_Zc;E5|93>lGWGr5T}?{ha8^Xd zEpTonL4MF)$Ui0lG$Z9y$Rp|hg3hf&Cpn^RLc5bimIQ;A0vf^$C7BDS{FlyZuyw&Q zR~E!E@-RTuqf!nw*^&Za}bl0Vu2BLF^%d6CzQTKK9AqJTAHMk<*O9Cu9M(FVNbf}$#KsQkIo z<1QL>Fu-Ag0F$$-H@eZs+OO>%;IGjX9h?KUA`1`-!emoCGPIUG0MU1yDN#HT9uwHw zur&+38;r&oGE{_@#|`I{l8K61&c8A)@iU zwp(FwouLo#xNs9eoJ6vJHx=+l#v8*ks!U$iR6ano4*)tYfEk4X9zDXbmNkx)3+LwF zf=x-MP$s%-OoVsP&dF-Cpj^_w7QoXL<~UBA7bvvReQY(@jp&Glk1zTF>|2=wHPmIW z#dibYv&5s`eHjKO#9?wbqV%sa;ce~xrl!bcQ+1=0g;1puv&T5WB2WlWs6IZo$%u0$fnTDS$C&b|0&b>?%`09R9^@#JXpnNVf$Xrey>+Jf zy!Pr&1C4Ev#&?T=wE96sMFWG^_r1kq-`-t#ZLei`NHAcs;3vBB8AE86GWD>}KqkzJj_5JuldjE{;vY3V9PDCn z@!dslrmu5~(;|=m?k(m-|Kxgqa{thJ|APUK-$fm%92WVLy03(hcXi(?97=!6^Z0Jx zY0sIJlcLsHgaiD7fl@r^XJUfx*MclOmelkD&33H2T#aW@ECo>?&d5H6muzV+DkqSR zj(s4y3)j6qU_Yv@czLQhucmv+cgFH5$Z*AGv2Fb9o8Km{1@<+k&+E)Tp1-mZyv7pS zZ_TUdp7+X@EWKS+;JDWLa4q=DB_XI_;o^ku(}%Bnfp~vvR+)@~Nd6=)Ml4*a`7V1c z2>r%8&)7qaB{Yn<1hM>S%l?TMq~@vMUAiiG^iTmD#P1_2zofQE3B0)EF8mSk&RcbP zGUoFO_tVbSzQU~_?YQet79%cyDASW#V*@Yk7wZzHzODq4TqQ7{9vY8TT!Q|DuCks_ zSOgoZ-`_I6I!#V6eqwKB+IKe^&gSGa@Ep!`ndOGcaf@G4(V*T1*?de13&F|=qsP-f zdodlz)L*ABWY_HtIIKIM~B^IcAwt0JXP+Tk_`0mT2B@wDnRziBN^#p z8Hr=C?S(VPa_F9y&vxN*A$Y5PH>ORwYWQ&8c*jG&T6EHrf6PQVcsa&FL#%*z{bM(pCq@W`fRewQ1r@I>}uoh{>#x96UV(}jf&iwSp7>RNnVuOXh>k69s( z@x1sH-)yFb|1Vhsru^|6M!nC%DoG$t9h*akXTMmnu~dPSBNDH5-R60HM-@8dK%%i# zbSvQqq`fSGsO7Bd7WOM{QfY~}b$->7#Kywuc*<$@3F@s+P^{iKqYY7Bm)6upxtWfW*X`~*^}peig8r~Od>L_GhQ_({E}kyT0{P7-lm z&hdNk8%&8*HzKJNPTz0euPFB~ax{4$@^Fe4isWIJg`YgUI!aq7T-;XTt`|?Q8P)0Q z*VdIPCHs1!v#*pu93*0jKY&2AHjZtUC6IC@Vi$pv7`!Cm^u2D|aiX!r&Nk3*b&Fm+ zXapV+o>#^8m4?&raoevFq!_eQcm0l{_wu)x(MRdu6^0~&fkx;ZJ%!$hH&*AEC_$Lm zj+dI=>y)xmPrGx7JiG*gc|smOf9%};;oBqiQvUfnMi+G@2*Pa{w{@JhEtaj6JgliK z2t+Msl#O2|p|A|rDMKLT|Cr*AQGIrkiL<=iB9kBll}=D8xpt635>@(_W06g~e5nPL zhu*P!M@wFjkzEw-0x2~T3DQ}&`@Anr7H$IZPr+46Eah$^$nviHs|mxv+OZh&(Eq{u z$fMDSJQQl&LrFssYm$+NZ~x-l$y=imkM>wsM#t_ZhoH*_5s%i%my6f_D2Ws<$gz;R8hKms59VDczVMOCrW4Y-eX zQMm2D^>e_ASB?OJR91&E5J!plrKZY}ijz#d8nZ(*p@h-yDh<0lqLfIy`Z$aOcts0N z%dF)$mLw`SVYn@$M;Z>(v2EO}QVGK;b)^fWE2unN`mexeRh2-!MI@u8izBGqEK$N5 q1>(35+E|EN`btT~yi>1r{{IJvyJm}XC|T?P000045kT#=IQloUw;2|=WhQo5TENxIJEAfP!$jssL=spdh7K z5}ChBPc0$^UcXz*`(UWacm9%z?}uLXV1k)eH64e%rkRq{V1l7qT2I4T?(V!Bd-+sZ z>wuqAiKhQtL;KQw>b0BtrRrFkC}GPs`HI-qu(`VW*p_d=y+FtD=Z-5Cvl#E4l7BoC zRIdIndnF<)Ogt^n!n%@GVOS41_qA@`_JTUEoLl=LH`^#Q>i7=lH+U49IT9 zSw23A4mE!T^o5H_PHhZHFO97i{_G8xIb{VgysfqRI^!QJ!Ys8@No(YaeA2f7>bv)* zQ+O>zk2&%KioCxo=&WJ{!vAT=+ht13{v750N*KKP28{AI{s2WE(-#*W#9?)ZO=Jmf z@2xxm($e&a$hq3oaaI&Kq4okTX3o1=v*#)!*-{!_I}2?Ef@ifPc{QR<0%xu z^}7=Nm4PIn?SYWcV5^=T@eI=bw@0*MfP9f^XFvEic z(AjR}1Io(qTIHWeHuOegm@l=^-$xic^zc`xT=p3*?s8rZsvn{a7H$D+@ovJ_s|1PZ za3e4AYqfq14tl>6!KN2kk**mF&HCbi=x6(u(|hN+PV+4fA;8OTg%vzbW&**omUGe$ zasBd5F7)Box%ou=Q@g8m3ML>&9}?gUPcxBv5b+&*f;t%sxa5A;2qXx1T*>`K#V7u0 z{`$~&q+}`zT!%LN)3aBH-(D3g$L_&g2hhWX1m8q7wcdS{yIvG72X8o-)(9t50J zl@>iRiLY@9L6U&wuKfN6>U#LYTGJn+i!vG%Z8=L=&grZ>6z-5n__t6*I~RK=TY_2; zm=AI(Us&CGq2l-nNr(*PA%@FEM6O6$6E!N9A2@N)wBP~P4@kO%?(;W=s$EC^K+N7@ zxFi>~!r(D0xbiCyB900cFJ3Y^p|THS60t-PYUCd>{i#0oBl)MuaQE{!B~G|R4}dTG zIwZ-_=ZX$TdgeleU>EFzk+nCAw3CuU^PLC0fWTSAPs&vyn}_y(f%JtdYdmXwtrhV7 z0ho!^<$dZw`Jkhx_Aa9zRlQ2yUCj~u!}jj}?jIk_UojvJrx{F-Pz{o7-Y#`839?7d z#Ghv70%q!TX9Q9_|E?{Jt+8%!4`oQB_x~Z-cm&j9z``<)^nz-v;wgkREUeN$~BO3~n3m2adNj9A>dP#>( zC*TgKK^e$PWg9BM(qKW_ME%m+C0KR)-|q%w6Y5?HQBX=9;AT;!qeU$Q2mPaukceil zaF^=Ho9Z0<4M@P- z0joXn9T|uMQA_(TVlAW)k_LCv_z$3Y2qq;xWk?9L!$eVl`@@AKYpd`KY53qkyJ{PJHg-KXdcs+cMoC$$2)RRW+H@t*qlo3EwC_~WWbUn-*$p0Uj!Dw)0 zpfVhg#|dI6J=jy&DqCo>HHU@Zp&nVz-}IuNI3G8xl}ik>Y{D;Uj_lkeR+@%g zIcwClh*jG+biTis(L9#i7!w|F{?#F%DmJL}$@kqLmsR&>|0o#kNrsG5jR$6Dy&Ow$ zI*d^Lpjpd)O+w6cb5X1yE{baz#g!6d;jq^(Mi%bN`yli5ajpI=zOEr~N5cT|?J_|s zy*MtC<}KMB4nhRXQv&XYLmUIkz zctbuIiPRy7E3IjBL(DHM7%P;!m)+lk9go^=c;_SqDvMkkxzhMakZ~5EMtp=wX^e2s z(l0sbg%)}o;r)*g6N1X;^g|xD)XnAh&qI#vHJl1J6A90i2<9K`XUez|pR<=&n}~Ph z6cf<{3X$BDfLZs>Tznu?bcjncQSzcI?uSmdfM~yp^XB&FrWN=dY-LYt@C}-5U`~ZiZfQbk2787KxH@D}t*eoV5bWB%96YCkJ`P<<7$^6S(L_7| zOUaVFD4k$DjN%ipnz=xW)RCDjhIKqYbQmnz*oEVP)L!Sf)IJ}?Z+a?B-L`+jq>pdPz2wX?oILyO+pP`nyc&bDGm4Xpbv@2BD;1oX z5y8iA^aJX_pxNgI20%S6%H>W{8`=THSoDCb54bzuLZvvdTi=rTs{urJL_mJ11O|hQ z+5wBy!fqTyE?DR1A=RSG%m_PBC-`cUt;a+XfycgCP z(N&#L+HstPEWNRju4cYAmF<;0Fbzm!kl+R_{)%@+4#@+yTLbf(F}OhoDX0P+s2Ix? z2YN0i{GgWe0+kyx4CZkPv`r=X@2-I;oSqHF;qrbBI_b0`^g??7L)IX@&!o%U>vNkw z<|&!UJ~{uA)ZQ=TU3Ru+p2W#~m3FtMDz}$2_-IpC6GSZ`)rJ_Yl9Hogfmq-k=hEU! zw{BoNcs_3#WoqTzU7Y?+1U!R@$@k8{s`w(M{ULMN7d09iW}>gY`JTUq3lXW9r+F*mZPty82-b2CT4Q&|hPk~WD zY?Gcu`nyO|&#%0vjprz=Xo;gQiwG~4aaBo+5a;2F-&4_{e{r-@Y z-h0DN$w}X1eOJB-kNahx$9#QFBl8MA&he`J&kex3>*(S3=<9r+7fQyn+xWjiyEH7J zeS^!#dM&EuS*v(NmcK!0;HBgoLcfY|FiiG^#LJPt*S>;D5(}!cAFrlHVgsZY z@xPRxw zR<2(B#C3$^?~ZUkXmBZ1PY~llb8(Tq-o0MB(RMlK(#Z`CLd4(&(uJ=$Yh<=-0yGW4Y;bQq5-(t^=auND_m8%CJZoCmD$D_2qb-W$7~9d?ix!?UD#?BJaiFgicM85xJirIRhp_FD(X zQQE6=uxlJ@MC({m&T-brOxc*Kc`iGKi;C9N0h*J*_OlwbmrUf=3Q3D0fiGa0pUNOF zm*{Ns4Y6SJ-wtwTQ#sgdxmFqofN9;WxBe*6%-(0U?W69-7kcv($L2hceM^oe#P)1v zcNq$s`P@5@;m<-5Tu&5riieDg&zdNuo|Da}~Wj<@kGfY>G2t|$+ zvY{B0(*EXZAomHpIwRZiD&8hUv9FTM&nl*>TSsf|K)Fc@pMo5)qo86qll@c#cNBtt z&a$2YjoLA30=eOy%Z|Zni8IHj(JBslHL7RR{xWE{pr82S*M1T@?=()=PyM2Jq@4W3 z?iwak%A4r{iQjWX1)KGM3J!ps6<(s6admA4xQx;4Ywv2j5 z^wI~6&iYW$Pw}Ah1o=Rz>YemEMEAlQZQaFQ5!i*HAbj@irWwyOq32=qTN150)9Q?> zRF!`~B%Exaxt<$Wnhs2SH);b=IZnb|19_I1@m$}{^mg?_J%ywtxZ)aez?SPTzV66N>RR>yukDx#TnU6V5mdgzdlkeGnjt~r zCZqv>DFWj^clEy-o_$R9d_b6NOmtDbaJs1l;9gJk1kgggV;IKvAs+a036`36G!xF9 z<>I`~=qf3wT-r@BYm{d%Jr5pJbs&Y?>jF96_*`ScIUHafe*Bm@id6#ndqferCumaq zXC?CY49MiRKXJ+QBc=dV!fU$r%}#5jVWGsHv;%NnLY@e8C@AJ=EAD8vn%=}pWe}4A z3(<*WNK)<|gP?4Oih_)(k0);}x?f>@UKEqx+%KNe6$Hv*_qn=kwgtIWO3s1Nr7>sEix=cIBns@Pb3&0n`VwO^iB>Wu*zl0$HVfDvyxeRb znj2IZ<$?VZw3RFmzM*LCvwc1d(-{8UiwU^Ls}|JgRZh}6!_<%{Ois>>9QgU>CM^%Y zlMhhc8-kJ0u_zwb^mekw+nuo%oZUSLSY6go%MPL{q#J){lx+F^76iO*WQM#4EfV{;WGw8S@P($EJpaeo3Ewe$~OtMf~KT> zss0baF$UR&iMk}aqtFOcgpWs64b$lRFATl#+M64%Mbbb5&2n{7sq&xt3`v>M66fv@ z{?b(jNva)AM`}L6z|cV9sl^}T&q|Y`zxFBl;?lKz!jYrG9K$msA;Nl<)O*y_;&hT? zT?XM}5HtOMn~uq+K`Nqc&lX2OY5Mg8Cb<`xBOo(H!^~e--+pOs3Lh@zHN7tSJcZBP zuQO*_fh#R!0&@iz$OE08!(Uls3tAtaWBs@4mLdr-pHJU>^`50stm2=EV zV@&&<+30aOV#llrxQdoYTv^DO=(5^E#-XN?NyUKecR-Ie!VSc;0*e0jiVk@Jjp2)X z;kQ$LIQqLV_Cc*5m9N3Sl<`A;nvFOL!C7*6Jb}?URpdtFEHlGUxftZu~g3 z%4>AoBkCO|Hfq%Jsl-cDl%rgw4opT0R%H6@neB**dByElA^3gFV`*8K6WDcS1a1M; zhc$&4VN+PBr*n)5KHyAt91|f(Gy8>bO00xR@ICZp}VNo|)Kt?tHV}umtf; zk2nD*ffz;#G}N9vqEq}8cZB`;22A1g4;=Z$7MJwba*Z9We@Z z9vJKjZUDAqViwV?!H%=#zc86V$F0-y_|nf+Nb2xX=@;mbNg1i1A1s3MZl~Dh9wWW( z(|Wbsdts;nXVE)~;$|@qiexVFEFA(_r6kcRj!kBgeX%~QHx-t+nFdCkLDH#lL9 zoyp*zZ_(FfFQ;H;a$lvkBxmBDX z5#^C7F2Fl`^6c!h$}6J}GKoOU_nKvUuX80KR=xDpFVUkIZnhSvL_0@Cxep>Q2wF7Q zSh<+p!pjf&DB}S%6X!CHfp&xL{z-K)ZrCE?t>}t-;$8-N`30ZHD+$TR>-W3FuKSIE zT1g<9$oN$|qd?$M&RbrPf+a2nTFhqg4uZ;Dtc-h zOraj8W}WOC1f(SVOIFW8l^ukio}~FQ-~}6qkc8uxi=D)rU|t?JU7x>HA7KY_@R%$< zJ;g=6Ssxl0!<6&u;~HTN4MF9}{*L-lHRHmmi)9#Xu=IA{p34$zyBer9-R@Acq7tNO zq2n1<=NO2drYWu=MrLEboWp5tWIL3Ti@?k(d2on<*Z#J5*VJ+KyC*Z8M4xcnZZXiJ z*C?Ib{ziEk;9fRp0spro+p4fd!!NUqsb_h<`)4XBy!~`pjSq%T7hK8=%kZfG3}~~I(2KBRQ2}+23E;I zvn+s7@&ZptIIBaC94(c=tn3u0#+xl`#;?z=X6rOr_bI%s#AWEX;uXs)c114jVE;9$WEQ1cqWI2p&Tn$nOM%8i5}Wu$gi$K-)R6mreE}(Z!J|Tdtr1$kA{w>bom4?sM26MX3artq<0KF>=lOYvl|mCyq&` zG7d|6MG-dntzghYZ5dwq-$E)Y8-W-zv4D*SgiUfn?%$?Y*UU!UvA1B+sKOV7qZiD@ zuIZ8ffgKw<0gkgK?0aZF4Hwy8HSN~o)CqabJ0aauxI2%)R?kWkNXs-3&<^AFGN5=4 z@ZJk-qPHqiy7_LtG<5#j+drNcYfYNw($swBPvZzBKfP*aXhpF&us``%m8|& zthw6xc~GWYpN8-ude#Ad^!f2RLCnN9I169yf%@_=ws+*EXG9ob4GzKh)>+D-clQKP z3hQ`;LLDT)*nm0)3IkutmrEPWKoKOYu*T_lCzvEzALG)quyXwKvIql-q&Bir>ez{Q z5s;EHdZ$p)-}7l77UOA7jGn~>;^4CoX@^E7cr98JMntY>yCq@@nuMS}67cj~{~e!l zcO#`WfK&@HBTYBr>SM0+b zps4CHpzw&PhzoFLQ5eUyP+0*Y8mUaViDXQ9+s%{H_3VxJ0JH@bAh!|pAzyOD{>=!6 zl_xB9e@wr(E3j%nc5v-16y$_Le`*366BNOf+ompIsZa%G>a@k*UjQEWXTaA|b|+vh zgI@>4uzMZB%cF-@W_^EyDGg)E^;|rsj)9WITKndZ7U%-Zv{vlkaf}{c)|Ao6nTq(} z9F{0S6FtlbnkY;8n%MH6G`wiS!Slc2GT`Iw6wkwflsi1I$rF+dJ_5N061bjr*KFngAc^7@!|YP>F*lXCk^g&Jj0?xW|4hegW&vo@%%&|A$T#5`^$5 zmrQ`vAWX=QBO`)8*6;cO%Jd(2cZ<)lUJ~@;*jJKf`O9!`-3@}inQtSYhvYO^*x&r~ z0;Ff2)1v>n$%%uJKZHzIe?zFlCjN#E+BBK=qWimF|1gy~z(t#ui?u=xmD@jg^8UEE z%1JW|;DUSh@(j!JlE;)i!}}s;{K{YXP9b`clP;XVA+jV~ht{N_jzg>rV&;A#eKIXH>|hmS`OcL&v3K!< z7=oq#M`BR}l_-_4V6QQ1S&wKEU$BDCL}W$3THn@B|74)XZU}6O0I;ClbRj@{2k26o@~86pd|hz+I!vEtJpOZLKK0g;csl-G$*(?2>yOiog-aTt9rGHz2~h(ns8 zb7o8j6aBwpb(OJ1n3$75ip_K zG@?0cAWL+=mVg>5T=uC0d&c;JOZu&pKy{>sOUGXUoH%4oRQZ>OuuY6 zKR1zuZZYpKYA&eqvr)Wtd&JtO7Yzw5CIj@~dIK?(N7?7CuN9xSe2O58T$Kx>I3RS< z`OC4)|A2i$AeCDAkuLbcR3sy#?hkgqi3{(skb#YNGUdB{yB_ENs}3BGH;X8NfF|h zQ}rhXUvQ?HhmC^kzl84vZb`!5JnJY91$-Rip)%mrsPDU*jJQAWyJc+VzeCY>d&*V< zfE>Np^3zX+;y37;mN|-*vbS5q4)q7$6KZbNlzy)Q4#qQLj2Rs|Unf3tMI?t!JiLOM zi~$n09aOoR2q?#h%_68ey7T3T9fh;!a3;y4`1M0P+RH5FDXm25=yT15*M!*LP zy|^sM+u`w=<5SVA7z{QK#XaY6ub5JGl2_`}Qv(y_FzNSDxw+@~6l&bbG3;e#vtFR2 z#xN>CuSCMo$XO@&^dr8e5C!|8)Li`Kq3tI_8#BYSObrB27FJzd*iuCE!TZ3=BSZcW zRXX}qD}DG#6$URaCc|^q=RD8hzgYZ^ep4p6L@^mMc2>NRg4$Ur(l*&Nd+!GQ5Hl73 zE>K-~L#s1Zn4SlcKcKqZ1X@UG-@dbMO4CkO*2sS8B*StP>gV7g)!l6_^2jq3?#d{4mwBA zvL@i+m5C{k17o(VOT|Y20TK84mTuno*DC9pZF z(ecbktQ%qkb5ED9ZFu8H*YxN66_!w5hFBrUTHRLc4bYx*?kldjT6N$k07bUh^D|sp zAsvl20bfcHMS#PJ}L8X$s`6$qR1%U5%P zLp<%?GrbSl!!(`$rfQy%=<*w3BXZLNf-xOISNX++_r_b#)Bm{xi9;BQ<`ik>?;`k! zInH1maO6a@C2-cKwcXTdr7Vi#Uvu4y!V4UGUAS$V&&!>k9A+3={{w)LhN9pV)OZ-C zqE|W?&)mN7cAHTLwLf8T3yfjd3eI|GoP@Dfs%6h(33xiPzv%u4Wc|o_9fU)x72V>|XIa0?wS~uPE zb2CL`LW983+15yv2Y*5OKoKjci#yZ=r=yhLwW*VXf|l!-wa)Y&RgCDzT!(uwEzY6D zh>Uefm366ysLZ!9&gL!)=U^PqA$_qB`{!7m7XB(Y@IQdHFF%e z8D01|Oq+uhB(&(u727>Q5T^yp2UKaYFi^vC@3DjIS+D`;^Q9LA%3Nr{>SBV9a?lGd zYUI$(Toh1BiFEPNURU^Zl%g#JRYMHKgU1bxAK?nI8r$az{Y0OmGa919LHJxyGB3v% z?<>*YISZg01G8xMGnui31DMkhm&YPOOi8bSDVg`FX?aENF35xsjpv(KHM#K{+N!j9 z_H4V4X5x`B19iYqlA)+u4|?JuAKe~A!cQ*rwKf#>l%jbxahiIfkYr##fWpYiS~&lM zLc;MAE_d>@&pphGT5kOPA4x*EgZsFU+azFQk23mbq0-F zY!iGBltEe8H1Umi`2w%q)_PAHGsNX&dF0^TlT#mE8espwpH=17U){ouLhBFqfUS%2 zh$h4Sp4hgMwUBZvhOFyF<7w;!Empu!1FE;b>Lt(F*XA*Bh!I2v%ac1(|FvfIKUWoaeq7hTDbFqx zbVh)hJ~TJ`mqE(g;3NOAp8JpQ&tbFXH9@5ZoLSm7BzW94y!`K=8-DNJ2!>@~>4a)| zj1jj6P8h*s$C$SKy*U@8NNDi{xW#|f(%aOmYQ?%o%N{g})g*iTCH34x(ktBv5;OGQ zVkW-y_CUG$$%9(9zI7?P%JX};s%8pAp=fyw4YE1E>I>mP$4~>@E z1X`h2Hco(d{1j*!Xd86%JzYzcx)OKl4oq!R8-p5R=+0<7hrA$%;v#h6yFxTTZMQKP zeRpWSHeTMnb~gK;$WIyu)Xd_{6XIJjxvvZjelWaaB^z>9P~%t#eJ9o^4+f&lMP{^s z#9rvk0B{Yg6ZBF{lQ@rs!VixYt?t7KciIKgd zCmzQBuhW)2^=TxXt-!_R?1?=$b1c1sk++XvQgtxK~$rCbl zVY1&Ja7bUJDq@MOyCZ2lmo4zZ+=PR!_HLTj7%Tkc@3z$+3OrBC0@%2W{SkpnJ{9fH zjRH;=)^@Cn$v>yB^S!w0sg5i07#v$ya3KDiPHH}P+Hvx(>7e^-D@TCTLr=*vnSrt1 z-lF~D%E$M)Vg2VDpyR8@{g|5luQWxhR`*3Ja;2xeJZW);v`i0cRvbue(aqKO`K}3k z+}2}wMj<2!FEY2p>Gg$0Go3(qaJ#j&v=n*_6OD-rMvX|Z2<#LA`{jF0qPLmLp31xE z>;)!NW%+LdvLP&cV)Da(g(A-TLEFPi&txztmYr{$oQ}suu?JkprE;ZzOE7RP{^NC8 zA7pac9v5x8+pfZW@l{7np+HaW{9D30Nf1#8P$d}jOuf-#D_^*$Y3DT?BUFgalWx-z z#2P@&*<)`tdoj?a1`@;%*3xZodvN;O7I449R0;5MK=6!j{|NWIxRl@oUH^8ti(mYA z9GKdx{%tLmelmF|kSUJ2b2A6hKy!i-+RJ;HBWZI z$oE_HDkj2{l1a#2bhUnc0M2C*`)G!rqP_ae`BY8CXTpv`oC6d)t%76NLyhYn#&<|;Udn?}`$9BGLL+~fhgVn1T@E2V;RK~hvwx4{ z0YwdQw_Um&U`JRM4MmDYoygv1D13Dw@RtdaxXf7>S;$yskO`%{qsmXpq=2{P8B* zY(jf`iW_7KH*yq9I;6Lde&5wWtzOB zxaffONFR%IbIYf&lJ1&!{koX`%!(UFX&N(_Pu-F`+r)p*$KZgn4q%_LcEh8{H`61v zP))DWj(MnnR-5zIyY}&Sv2H=T9=c&Ig@mntx96rneCQJk$HD@&CHCcqbg8%%r!QaI zFU{BFxC7Xnd@QJWWKrZ3;8Ij^R)Kzy7JBXk^nbv*24Z_C$-Dt!kQx8|x))zsw;^8p zu7TRUTrvzf|3)3=t8HIX>8KoZFudvF+(I2~sCd!#x5v+UZg-xv?ZCU56Qwi`!F!^- z-st$fkR3{LZz9yPW-_5%lh=?V$AQekmtAa`EW>wdZbL}@g}Sob2k7?kBK8^Lf(4Q6Jx}0Tzu5q+cat z!IjFm_KKeGYcrjFl)cb3pxN(Y9HgLGLaaus-x_p)h55_ACpWj?d_;9q)b5rlYl>T# zj<{|rv7ol-TS2RoHc6rUxm6NUnxW2eSkQCmvg%6!?@fjDaL8yh!qaA`_>f;DTh_eY zaGQr;w7EBCt_&m7t+DNubejvZn<^8#+K7)jrNX`Ex-SD0l^bXqGi0 zcCN>*6&EZx_j+iSG&0@}e>%ds?HuU7lzr4dKfJ-9hj*>PlhXa~&xa~=$Ik-KU%p;H z3O0BGH3Ul8@5&%iul%0=CL9!#EqN2#@XE(RXsz&5P`B2~Ek@(hE2eYrX88uZGg|=c zZ9YSNe`ok$9`e{ta{yTQ-L)0jm~<}xxi=)awoxN%xdkmrWVi|S z-8#Pt=YMze&9~fWTX4A#)Sh_7{&V(~|MJ8QRaU5?q6MiC-X4kcGp~t!22_a047wwqAcNDM%paW;%k<&LJ*7Cg zk*&!z^%r?RTGq^BGvE^5)+OoEhOfB`-+56vxgO)Q2K|lG%BEH)+-rj`jZxvHQafA< zDc!~MOE31KP5;#}&a@Qt$zy(Vho9!HG_8TuYGVG6lQNIrPX;u?JAQ$t zpF9fu7a<^?9{hOx$kVS1jLOxVgS(+BNGN{q>C9GW0e8U3bThT;f9X7__sm*W1I%`> zUj^AJr<)P*;Br!jc`byX%1yK*3kbfB$^f~N-Zu0S0eTDSjil43*-Q;jz>QPCm{u;| z9oL`|A02BvdqDq1pFi>i#L;W4IBBJ=*eWca{0CuquRzc1COO-FM~Q1`MAWcLm_5Th zSEcnlmlVluEce?++hP8~=EX+>)uW$9sON9wYbS#lP_#+}>jq(DjbY9K*=OWC=!9zk zIS)(NtmkSX&ZldKg|>~*s;~>v7D;MkivX|_2PD-)`(qg%7x$m}Po$Q59iMkS1aJI1l7`EjRBLVZthh z-fR{Tbb93;wh3?)AK|*W$TQ$!r%t-W4egb+D0iS0DybY;^W1#>VfoSOe%#>vF$^LA z+y4(>uCSd#Efc+OM5^Fk5wT&&Zuagg#-_Q~lHr@(5VMCHiOa1N-oA`l(7J#2S+7c4 z?hv6IK}VF2stE<=9S_Br6?05H;&?ViWKNH`fMuHY3xf^q`?vlcn@3@?8XRE5=LG8# zR=Spk0U(i7fTtGGjUhK9oigILJaJoS0B6p&J$Ew*PzH8I`*Wk%Duyd7 zC|J*%6+9rHja&DWab$gLos(-lr=4aV8{`8Te(n^HCNp}DrT&C6)EBqBDnWc{?*lV` za|N>R%I_M;H^HLEw&e3Alhmq)451yXoDH{s90G#Fxdkq!LAzW$<}Nyn*Pzkxiye4$cO!D_Ij_altw;KsyyhWEtf32^S-=n+o!X>I)Rq$Vn9vs8q7G=UV(4%%NIUC&Cn zij9pZkCW9Z`M--vNf!>+Tionh7-qIu%tvQ51#&QOp@H=bMY@AJiXFE~rvAHv%YMdI+nl$%$UW`mNZ{f<5eQ`4<^ zOOrsAs6)uM`54YPYQ~g+G>6j9*L^8^_N-U~w8U=QymD`E8?bwoQhrh%$CX!1Lhg!- zqit|X`|Jw)}Gunh@+prqM(U|a2tBR4nbw$?Ifqx)gDutp3 zH-5EXMIFyL1^@_?Y-EH55-kAYyVjPjm9x~rnt6@s{&iiRTa=)>RDAf8>faGfIeclQ zOz|ab(NI&IXApPML+_2~JT2YcGLW>)fY*Gy@76|SOh1jjYCYm2ALm03a zWQ{~5DQ}o_8s1pQ%vz>cu9-aBQsk_raox>Nd2Hdv$zO$u%l)JHKph5^#;`k2m1Z^W zR@!n89D}gZ0|z|9B>orgcN~v^_6^H-KzXR9e!4(+Wp zfX&m1n72kh&ZmK_76P8!s_sL2YludZ6oyO-HQuX`|K~zL(nmITY7CUTR2% zhBs*T(IvcMM=H)wt+t%#KgsehVdJU+l%sCb=?PSFB zT`uQ}PB5Y__d*;er4hzJG`?a*Kavmt*!Pwbpu%S`XTGxK(PZbXU{`G!%B79fYJ761 z%A=W%AdD}PEFYjHt9yRCM{;1D?#WV3Rk6 zJ7HP)5|SgtKe0s~{!^ficJB^uOJ7b%%X#s+R@9bjkK*8vOOllh2pd~oa|!4?9-0D? zWom&mM5UYqDS^J7N^h*JQe#E^R01pgKs#ZIO#;Cy0qDkslCi`A9xYHyn}ZiGXu_&3 zw6}RDjfb5sCvDv#O(0{G8F9!6Tzq#8BEu8Rt)!*GFAl00z}94pa1ERXZGOpe{EeYW zo($!}bH9)qL?rm$+@N_Iw&LqD3akcC`A%z@#6$UMStjAx;rUKiI!>mS|weD|>Qdk7~3 zl^gOcV?>L1)NSaB`(EJ~TajC>9a$|-mVM=${{8&D4fG#qznBgEOQFxTyop(dDU%;i zDwD&OrhkhmULm-uW-*%6^NtLP>CvmM0uj7S{*Phzo^jw|PiK4287T=bKEm;5gK5Dg zJP4#%V1n=g%5Ng@pVxVYA8p~z8qM#Me?DnOC#rqVviz>Jls*@k(oyj;?-y2At;_(a z*y%@*Wb61`1rJs?7`=fg2Kzim7 zs97O)JF%1h39KmNn;h?snjB}Z_cU4E3%Wn9-?S*7l8>Owf!HtD^-Ei|u$@=6Ab!x%t(F$v8+NLI@A5x~f z6ig)N%4{jWzNm^|nam}wp=^21V4;_DJ;N?(9KzS8@l*J=`-}9F^3mU4E10(r*hT24S!gpyo;(wR zZ?sL)W?8UT`U}Nz@l=sEF28~=>tNHKM$6C-7Ynisf076kiHGK20WCWFGb8Ih@ zC_Q?%ScHi-3(U~e)|}nHx{jHl34Vd!E~GmNHJ<)^y~lRo+6dZ)=t>zF{}o!ywgg$z z1p|d>EUZFm8G);dKDNJmAO@p`nN~Hy5a}Yw2m7z$l0)}@FNqszP04)c>?G{RaRTDV zEXd)U1&Y$Dd&DE7vo;XrX2~)I?OUefk#rLT1`igi!*SMIllBS;dI&>k=OAbCc=Fhd zDs5%c=hwN0dA88U*f=#WF;f$lcD*ShcAa|NYpqH-1SW(tZZoM>{OmEz%CLBaU*X~! zqt zodvWsqAzef@Q-brM3hay{&+|cA&>ah2S?usIG#&z`%UlE{WY-t5em9<-@$%^?K^?d z7d_qvakMAjebBzAe-)ZrhMKRlxl&>!1IGQ$N&P%PJRk&wMf4R*ZIq)3M&_Kz4{ew% zP9|p|6+*}KIEEA7KKP+ zNVQPoi;5u2Xu;A4cSKAscq#T1wzY^Ww^vlY5AgTmD8CJW6;Zf?EqnYKDE$dyUPsR9 znGjGJvGljJGuY~^&~lBfJ{Wvqr4-(VrF#ieXE5`Zj^b8T1tf{P27MbU{3_5OPxqH# zk&Q%LQ$o9dd~_k}taB8r)#)olTmQ|HiSzppWlt!h+dbLNDDFx(tV4Aeg(s#La_z^; zZ)>{H^%$}nn7<2LgG%c}@WYqNM%=nbI!5i=M#Kr|xAq*;sxEnHvNEWo!ch0%EL+f9 zWfr*scYmS1MUq^R+P)hu4~WVy$sPY|IJ;{UCX|y$U+vf7*uWlr(GY>;LDjhBterb` z^~zUUkCxbbp#N=eb`|M6@E4S;u90Pw@WT0g% z>Zmm^n|{-*U-Aj=@}+!q$(h3B2YWto)lLsjl-lK|?`18~h`?4l9xthIO!VEdP8lf+ zF!F}(g717M9Dy58E3GPPlQN5R^KoiwdkWtSjP2%u^b9K|HsL+Hol7DjBUm8d6(;Og~Q|V!YqUAUkz2Ohg+<)=;ipA)znezfgYi~Udr7T1QO&lHLGla zJYJa*Vf5jM&Qd(M*ODn%o=nWDdHgt*$K5Z#TjrvrS9Ad}FG#{w1`!aGtr5F070x+~ zdTWy3T7{C2V-Ubackhubl}{{>(b!vkmAWXRjIozOpGMQW`#Zo6ZtcP+MaPF*geO3c zl-A}Y4e`(;M+aRbY!SCr-5Nd>l_Y3u9oIT1&ZRV3tmK#8-sU)Pi}n>24@;?=hvwL7 zo0biF$^C5|Dw7In?%I0_^z3}xh6S5Z&Pfjd8jukz zX-EjcMj1aMDQH~qy11sQpVxrrorCoFux^WYwgj|>Hv6{(GMpdygCEf?q_MCJD&DCl z{G337ABr0sF@}93tp`n>;sgi%PbKFa)%i#3@WxpBpM9YsjCr20*E*^^tNud zzwAZX2Eg|s_R+eer>xK^gEo-kQ&vW7Z5ZsCKEJX_)f-y&w#|h$gQpibODSsI5w*8= z(&s(Yj<2%UP;`_`xqiDF0DlhaL`Z;sZb9o_M`KG|Y~Ff>!=sSUXtpHP=joG63}90e zW!GVAko_QoZxoJY*A>M&Ai9$Ftt_c8mv_I$G%wu$9Q09IJ9GW3N2mw(t5QQUoIJ-yuQs|zx>Swq1RYkH+p_7`AA8sxA%KF8;bWkEnY{&)v}hVrNpZ-1VG}m ziXY;SSl&kVm19nmK^E$39V@1hPmhzGBjWW*9I5Bs1|l+eFT>_TzFEbZV=nuP*_k3b zuY(0L&kgm6+R4srKLOaa;WCxbrJIMoic30GfUy<_$y#7x}G9#!IOU?DpGf zE#X(c^fEY?R|HW`Dy z`?;I#pn{R>{f8BnPp8+1SPr?u0R4%%i0EKkxfRc9Uu)*hV^O}O5P+KJ za}nsC2_w&}dZ*9Hj-XkJ>R!qq39|H)nMxg9(UAB(?3=3uxX#x&Cf}T!li{!wFW0N& zQNJm`I1F^Hh1@JZ^IU)Yt-Rj0kUitQslx$U2}m(N#vN7!d(BcxvJ*<-fG~)}ueJkT zju=5Y$M7`TQu6UK1s~vDQ0u#j|4talUi@F%M&sCQ@1WIMERLAP zE^+UvE5t%9i~=(_+TA(tkNr$B<~8qTgZkoGaSc9jF2#Ae(4PBHE=1?l#J?AU`q zEvt{}%8@*OZPR_d>CjF6Zy{ewv-mwopVi7?Q{lf;X!VpX4srg+#E4?06s_DvqB`v) zUxx6Q5Vn3)UI=UNAemk_%BvHBILB6kfNt_ubq3~cphZ~k^FUkYd`8}z=uUX$#Vm$f zw{rGf-XvbSU}y21vTpj#)bDn?@1AzA+_n!lrq~D;wEg*hZvWQF`b)!E-KRnqptz25 z7h1Zy?Js2QXg80gPKkuJpY}saWrFkU*ZS_Z!biprS)v5I5ZX<`QNpP{`0wG=IKc3x z$!}1P^LJ=960kJ@`oTrV*qe1thAk$)DxAzc4;r zS?W%~-RZM&F?oL{TqqtFAvCjmzTT)S(BGzY@k<-zPaig9cPrDdWuvLfOHbY{0!JC! z&fhf%VQPdW;oAbhN=exTcB0<-C5}*vqG7$&jjJLWHcsb$){Pq`B%;$AFLmau@*hz8 z!|N-ILB=;S@#&2&*$qxnad3%GN&ri%8j~9()Ua|Ry!dS4MYt8AdYBz+e{}o|NJHks zo6kqn@v>br<5cTx{-|>d>f$~%@ma7_LSG`VY$P@=&x`+&qA8zdo}1Hr$(UFywp|OC z@_$_OwM+c0V>6lqd6%3euAN#3+tULGrw0Hn(dKof2xKndO)Km)=WnbO~t>LX9M;z6kdR(!n3h=k^eg22jA`z^x<*3Rzw%p>GDiI-yt3ykK zN`?-%gc^Qv%S&=jp$uJ|*D5cUXCOrE(+HO4zUMQb-?x6nR&V{Wf*O51I&I61A zUBC=_!M6U$z13N-XUIoE39kC8(RSQAXMA`TXO=e{v$IA0;7?)-x2ETRa{f}nR-HU8 zYQ(YjZFSeeBZ34$d5bdjwq=1tmY`|k7CVn!L*~lIm#**^GL1?7yd^b_fTAl`d%%N3 zI`M3t(RjLI=8_D1pYIbrv&A* zcW}HW0U|kUa!a#W9`^Y5LSw>>8g-7(ZEy30+;|>Xcm0Y@_6!PxI;yM&DqA;#W!cb4 zOJ4Db-Pm7wJ}7cX_{Fv5tKjBd;UH~xSashWedCY0Et_7x!RF>d+%lZK?&SENPc&qa zhLUpsqM((KabI$`;S8Ii*=7+N$8}Nc-~DelNnu0Qvlh>YORP=R(OVrL^u_60B{TT= z4!4@`$nM-3d67Z%b(X(K@_X^*%6!G8e*O|!_AfE-EK81d#-J6H5_R(xI_T>`9kYaS z*y+2p?t+$EZ;`dLh`kcJ=L*|TwrrwYj5?wIHQ6Q9+WarUNZ+`x`y8wwuf5V(R9R2b zqA+A_{im8JWpJ&f@|)D=sQG*CziB6;Yu{fnMlbs6{jRqcj#OxPU2bR7$A+%B@*<2) zkw;fW?DgjZeVg0`7Hr6w^KRt z*5FWxJj{@lF3JiF%oe4xM+soTU%)?(v2q=zKk~WR;l@7zX%W|>Q+VD!Zu(m4K05R$ zZ;{!%b-G;3#v)|N64&S@>4g*`*7I11*}XV&evG?aEO#GUBOx?9e|*R=KolOHc>G}u zZ>C9~3|tnB$@uuL`R68uV3!6!ML~=e zHWpjs3HM|lS9vcdCyIsr%e9lgM{?YS^Nn3{b%q$O4Lu=Uorxw$acPn1Up|n0;biKG zk{D}m%SXarGg+I4Zk)W}C^+`n-i8{1lb|8-vB?Qs;)IR=7UJ<`5(uW-cYr^;+aZ?i zIkn6Jwgj;!y;$)#6-}MTWr3&NovMHHc4-u8Z}R82GZK8UTj7t0>qB=&Yn2juVQegp zke&z4bh?r+T;V23`P21;!Nx!xIRdOelPdX~RYpeFu z=#^7LPhF-2Q85jLDYbu`dQ{Ai5Y*i}j(I((w(qX*-JY$~HVt{_ZiLi0*Gf@xD9`J5 z{J)?2P`7=X`DW+h?GMU3!~2IfrQxcZ$4YS8Lm=vvs*IM{N+ zQ(w~Rs7VIf91!L}`wRVH)SgwXsI3ZxQte-8JsJ}8yqnn+Ka$8E_8LI>*Z7P$nK$l% z8qiXvNj--dE|&p50c@?#k>P4~xt&Kc5|y1<8+G8BKd6HI$8^7(i>OA@el2xY(rdBTu%8ZStj(1>x(^{WK`7}XN> z`iuGXEt<%C1!hvV*p9Dg=iSAo&n+8rxzOCLeARBkrm53|@`qy_dT%{JiH69M8hRAM z5qL}_yR{hK&njH|{$t*31WU*FUvwD<2{uLH2+jx#4i-R$?|+Mu9&cjKlg0*)DAiVHKE0b4SsiF??M2W`l81 ze9(m6dwX}Mm6WB}~giOKfT;Vxz>TaZ~AtFE6mx%sl3~+T1j_Q`c`Pw2%Rn@)6_xcm1U;6K;Cv>O`Dw1zAGMV^`LzIdBSCk8P%-gJv-hp{B>aHPk2%|TFq?VB z_E#8wi^0>gPp$L@CAseq4aQQZ8)OnUdV4n5YWr=DSoJAS#^D(yv{%LzP-Jg`=Gl&5(JwfB_g7$d?u##lC(F>szvUz-qBA|gY__PvJe#)ebyo>{hCq5TQq z@xmy>k-bj65z8O4?MRpt@r841WHdwoN8{CDbo=9F5HtffpQm5pjswE{lIZOMJNoB< z{bYmIsWWcEn1eo?24WM}u0MRBdfX1X(cR5*uE_Be(a~t=v2JIfW(XF2yGJOb#ZY$`MifN&bdlYRf3ODmzKk9o}St_7({k?l2w=51NruT{!NOyK;lRP%LQBVCTJIC+0pVQf!oVHCO1`g__A zzVNnuV~L=D*aTS;qVr+332ZRE{%`CPwwl{M&=OZe`V1lB_q2vBc2*miFD}^C8cmWK zcQrG1b=e^P)VT(K)BrpewcCsmaM#)uA=>-O4|41=X2^KAlryz=>fk1}1CndERYzpQ)|`t)0-4#Y zZ#uX2B8J&k(5gLBo~0c^OSkqLo74@|CXM>s3Ylv`+@x;Y-mw$L1<#LUP=ig=L~R>a z7vzcilpHHX>-<&ACjY^9^KBcFX-DnKTUTBkHkjMuzLDz5rBxfXlc&hOXmJ;AI(RaCM(Q_6ZAhippJW6aUlZd`TGAN5!(S5YDCFR+LKq`=r~Tnmn(jZ(k0!V0?$6hH@Zth?TBuoLd)=gtB)X=1 z$UO!QLlaxC+0jm|F#tyGWmG#aux0|u^+;04omny0oj=N?=VSXFU#NqR@CQ>92JfXR zR_j8=IGsTzjm#DP#e=W(_kbe9s;)BfE9VMg(`A0ZPQB_JbF1Ap zbwXydq5vm&u$W)mWwK4B>aNe>cFW&9wzMM!C*(j;n5h@<3X$|8!O3ixZPHvMkwLRb zYn>Ah>Nu;Zrb<1xZ=Zg(OQDNBArgfcgtRw#6}I~UIBAT*k-KrOW)`>u_^G8?el;9^ znvyt%i4-O1YN5%N{q|2&}P2^(vl{HyL$HUXEofeJ*$QyaPw#J z>dg7h+e?IUwm?Tu2nDY$p5xLfWSxSjxh>g@&NPgbrb%kTDxQ99J>$!&AU7W#boKXzrd z{4ou~Oyw6p$1o@C9QH;e5))VEb3FYG7n;t`2Qc0+$19AVSD|P!ZAv-qYTJ0m@?66V z7JYy25M+F#sxYn?wNq~@JRejHuhp&9W+h3T&_hdqF~(UN0kNS#56Si>C_UP4*Xhmc zQ_71IGqA@Wd<0`9ZIRX_fj?6;AH=d#yEz8AIQR#+;EoM?WTI#qOVbFV(ZYnNe=H$} zd60zlJtS25>r`!!eh3FcLW$74jsm z@n01u5+~jwY-%jsHkw!FX11)60kSoByl!=Xv(nNKK+@uYN%2k}87W^>RM_>+W2_mp zK655VC{bKnUc6?anzo@jsz?oA1U?lagT1mr9vBWR?NvEZElTTlvVeMxOTWGYg531w zET9Na1LlJg41Ev*kOXx5*VdY`d0tm})E>u)yN6TgJnj71R zm$eQMF-_Z49ox^T4x;){e61Jd4I$BrM|#+|+yl_&1ADhK{G!NO4?|a|N4a!e4xI2C zD(hd38|53U+7ZT9HYU*BMTB{)O<%0^lz1VsKsut_f*JY@y-Dh%cZunPbYNb4>TkV>%$2=jF z6t|30%8Zfu%(I#{$95-=2a4O{(kdx0>6afDIM2)gk4@cd)K6Zp03HBG!|(^MeYu*( zFwDqFW8}K%Bu8t8o6?)Q= zr^PJ#tp_o5AEmxmSUqmDpffSIa8_z>5ach;wnyQ@q)WWh=9K$Vr1gQSbN|dXXzeBA&x_!4<2Q-YVpxgrBsI$@uAA?nb#W{gVfQfA#Ml`27YAl6AL~ z0v9%H>>p|9&3vKF`5HKYL|%qj*L_B)kXm;1HE8;XAnnULx7a$?6`#&t&IpFyyR$!& z)BI7IZ&JXkcu?*9`FakGqX4Tf1yyJYqw^52@a zT9~NAKF&ED^&hz6CE(9J&e8qJuag_7U^DJ9dyuFLD2|TEYZU7unTU;Fa<+t9)|_=y z-@A0`z8$Wq4ynYaU27l{VNTo-i z?%Y8pLe1)b%5jOI@0DmS6Bdy@2Rn^^!47MGn@c&enRQ5JU22mPPy2Bn`Y~x>Vh||G zpl3?ABu3efTMTn;Yl0^R7b6gllWszbzRJ^*s|A<+nJpE+521P`vL&poY}TZBd%2qb z8IJfzXo_PwZGt_+?{I-^V2Y^>^Uo%gt{Ff+lgN@SoOt-3wbT3Sb*%4k{*r zDrEo{GUxuVHuJWT02T?%j{I2RAZQ}?-&)kHT(!^O)!`gM51D#n&$A~0g@V|h!C`yG zr#S67v%osAAC*!7EOGeU=te0@j$NX%sZs!YKhX8*s0Bxrqrw^3oK@p(I66lLZnmqB z-EP9|<0o4iNF9o5Y-`5>biTR*a&zW@#HGWh=Mw2^z>Cel2N{q7h}d5LMot11U=R`y z5E+=gH23E~{C|%6N;sP3)XxGok|jp07V(w91}+1XTsK8cE^N^iXxalQ!&SQ72V3{L zD1rc%j7AZ%*>&!!idf|j^PVo3SM-ZY0OBP*UI4@AM$nbP2J@VRiApvDNC2+}LE7tR z4u9hop#y+E*PqzUJkTta@?l4_qoKfR^|$0--I)aj+*os!kDKlPa_bsWaB9K25B^O!Nf>uP-WD1RWZXJ@R zc8b}PeFT#+v^6-D3{br4lIX=;B$0Z%Z{__{dSaF;Hru0P+%`8~zUnM9= zjZIZjdX_~$6~LB4FF{#8DpAJ=%VLx*@4ol+r2a9835$2uJ&%jQ@cRw!iv)0n%xNpc zjRfD*$FJ2!IoGg=%uiW0Cc<8LA$gT>1~WOEOJRqpyByqvDb*1LN-YB)SD~C3*VEkH zNqw(h)rol-X|S4fAk7$ie||I-7u@csM0Bh6G;*u+K-)0eJa;p~uAS*ITJSl_M)q?^ z2w&3lBrE1DX3X2en_HOfa%zmjo1izpirY%5LbxwE&X z)9Y#%87hAlImP_xS8rWcx#GVY`Z#aTw9>jJOKN3F#+xOr?<;F>{S%6p=Q+u(@OnZo zIq+<5HLc8wB$`pzxc<)i>Gl8ip*F=x9nA@2v^hfQUb5di!R9~{kscdHQZ=QvA>(Op zmCgM5B!z0eAhjiELZV)@o&i1H8}`2D$A0tnfbb#lrILC|uxW~MWBG(e$=7Uz;f6%- z4Qe*A$LSqE{*!fnRv)gR!4=I`DjX%k_0`hfu*>Lz+8xP0!5(G%TIjm(jk$a)0QtIqeIM{^h z+UE@NJE|s2GV;#Yi{2W5%r&ih#MdI)>O;7%irNSgIwtJ?)L%%evD?hc$u)EPa`Mj6&b>Ph68;HdB z?UEImLEc!0VgE!f-~ALI*5|~JTsY@%Z3$Xr})L0 zD@&9U$!W%ckMs9U?{u8{^-cGk=CrjIj_X9ZSXVi(&S2%(0?CMHgulypTK%`KaH>pU z{vy|~zWB9`r6EsAMI|1XQEu~hDSLEg@;M)611_weMl#1|sj|N5p`st>*NTmNefBxf zrf>9DVce+kh^fgOf=a(lY#g;S?c$MUrDf8FFLZ%V9Y%5@fR_NlkV%aI^|_&K&HX^u zIDzgy-RkgWEJSJX_$YideMJThIuzmlO*2_drunZRW+;_qpGz-pieCZ}2sdIEG2()w-}j%q@)FOJ=RWs2*SW6i+=6mqT zD0`YNyD{H16aDySvf41q!tmg%)6dx&{|%oZbD^is+xhEJvg)nPOOhW-5+C@l`#C>+ zzJ(LqUU72i{3yH@(P2mOZ1PE+n@_~Ek*^9CtRowBGC%t4gf19=oO(+8zbN{Sf(?}6 zR5+dQ3I`fCEttMvuz{L09PE(Jnr3|%nAgdeUbCy0S?W<)SH&jC|ES8jN>&G*b{^JVC8iuvYa^kvSAMhdwkQ zYwpUbN!$IYUg!Syvr?*vvd}tzWa;)}lb&M7SFon-5Nmfkqgsy`W%Q7XCRb|qYRO26*7-nhSmWex{(rP4kjk$S}z{$w{N{#R9V{m zvK#~!W(8NPTvkoTo16L?R_3b6NfxV#9uM)u#zkeOFFtM+;wv&`&%-l?V zO7_8J-Drl3CKX#e?1Cx-t`Q&Iu5&z7esOj0k$-B#34wlgxpVxUifpR~x96Um(Gzy< z$zpaSgVz9CBZ2Mph@S(WdqQulJQN8-;=s0{ytkT&A=WdKuN}9a&eXqN!^-Y9&hW2! zXdj?XV=jsz9|_HZSI(}zH%_J0|5kLll*7s1|;HkK$ktJ6dyhp2J) z8kwxWTP5^JS~mHK{@{b?iCUd6PCwa~(HW$VJ9+@Z6Ca`;%f z%w`>eKGtmc*LR(cCm(g?93x!QWtTJrEPfBozJIkK>zaoqdhs)@(tjhfG%j*$>PL$r zg4CC?s; zB4A6Wxlq{Z$I6g$t>e_O$GweW$A>Sd`q$Uxt?fw}+az7V*1GnlY?!FIzPml0)3fX$ zFO375+m!dV?+U;vm$@-0Y{@9Q_-68Woq?YThDLZKL!-*v3;Z&FGBe#onC|$@GX?2{ z_ik)S4+r4O{~B$Gvhy;d%ad$97MMF+mW=elgr|kA-6lSK^rz$DW^YqVk3B;2+Y7yj zGMX-CjwyD+2A}gQj>I4inLYdKCG0|Y!l#)p4(EOo@$!Z`E%$W%X5Lhc%FZ7%_4%AQ z1RgTUI<>i&GP{M7Up$(0rXRX7O}NEC-FS#~a|V8CXi` z&4thD;-q9rcBAo}sd;%3R3}w9Oq_HG)%3oL0 zZH7rfAL$0}Kp}`c+Y#UILhj}lwVjL2{zfeNvZKijJ#lRW2X&`ZO`JF8dy<6`*;i$Of$GD+{Cwv?PT}k zKG-$zf&((g4ltiGpa3&D!>8J0wx=lpgTcAt7m-0O84Cbe7S(x*;; z{>W&s7z%u#So?B_f$3@@V3?A8bKbM<><1T9a)QCPR5kOx9ZkLKjxt_?TEU{zx8kVH zUHs9Pz&92frGm09adK^TX4}Ba9>kDbl78ja^SeprZ)TQsS}LS9m}b;IN5WyCu4w0NIVu5*+?5uE*1UV zJN}->a|E1((eBxY?R%XcB#T(d_4I=S0;8PT+xAHv21SFWu11wne`=qJuUXvV#Ljg#i)CQk7`O>>4keue$Dd=hOSiwh@)eT{e|op z5i}6o&VA+;dRhwotoXDpZwT(-09n7tL-2E}&+I1Ce8_QqMpKgyHZ|dLKiE3I>+vna z^HKZJQylhvt4# zyHvl&se(5|hHik&7JhFqE@zxQwQ{_82@OjNgMe3{?*;u3PfKlPFucU^s!zXb8y8ci zM89+U?DX(ZsLFq;UeWCfMLvphJoY5e5N7-YR8>?{?+dYwqA&U`%3HWM?Su4BB}cL{ z=%J6=ggI*QdjeT=JipG-4pd^7G!kd72nZnIf>CY+oY)O+P!$X%^(x50az;a<;Ind! zAsqBBuTKh>BlwnEdQRxAgXioRLVef-{h=#G-#U4ZK9;?847w)wYe}hSzOPr@Te655 z|B20!-`EqK<`br^{==F39fzg!`)a)84SO#V!-eSG(=71zxZ}#jRXH4Egyg1&3+C94 zLx$+dz_{hCRAnD*E&@l~Y$_QuWP3%0#zwW@eaVS|lgO?e;H@1P@4XSTtENURUY?u; zy0;*sSVJfLj`gF&j%-ZRyGGf`ifU69lGkpPOEtJ}$tdn>x}y<-VHz3lX7~(ECNSad z+n;q|A06HsppRHCReL4P??oSmmf5AWoIH?5ZC*UsM9*Deqzl60%ST-%R@A<_smf|_ zynCus z1QRtQ6&jx17CK~=ar5x;=;-zPaPWffG&@Kj^23z+Bj=LJMecN|IvjEHh`cX&Epng9 zAh~4e?NPTp%}9fh8&g_znO|ZX-{n4hR$YA zPSED9eB`|WzeB&uR+GNh_f1qSsCRJLOUI103XO0XHylNxsLqexW*%o&>9N zo8#?I|G>w`TfM-x6}-ev z${F)=xzgiGQTEJ$W08ZjVNXBfL&ne1Pkg9GWY4oCYSd~5PVPWnU(*3~$RY=}X-?g4 zX>Z-E6S}KCv)v4%)2)=%nI?m5kz%7n7J$jZ%mzI*$U~{xgwl=;OYBEYvDpkSw$Ez-rWI>s4TNlHUwSSX|nU2AiLQUcuX0a;btNF0#L_pPfGOr z<>~8VN=etZl!KpRAqZ7g9cx}Ci%IS~TcsHIY%YcX!EWVsrPIeo>EUzq{j=KJb+h$k z_@%TP`l(s&qdo=s2i#6^Qjs#JnR4$>kZ%3R6_1VQDCf(zq;R@;fv8g@Mv|b(vQgLA z#-oL0j(seUenuX7Xq4PLUb5sNzI$wsmR%_#x|?G`RfZZGyzqCQ?y)gj^Kw^1I7s4< z-R7`nIkQUqZhsfY#y~Q(hORVWx5V55)48t@+X&b|r*Df3Q%BEyo&6O*{3VB+2ye=#A z^;r3++8O~VhBg$-PIk}oik!$WNU59j^z+Ce#LoRHZ5P?ihZa?-=ELg8 zABiOgX1m%Q2>P>>P?2DCa92N!3$LNLyE?i%g0fyFcb;YfpNi=y2_=ZbY0EmQhvcT? zEl89nZ@HZ$X5{->nYP#8=8YjHtiCO=9%6g%B7N_nc!5mJ;-I$h?lbK026$|KeLv53#nasmdl5ID}-qL09S#TvdtW8ZxMC%$Hakam%2bLdMT@$RMo_@a-m*N1 zR^ZKG4EEqdzI9i8DS;2Sf2vw#eYuosUFD0<*khmm-F{tAI!_wNyXm`1Gk)AZ%&Cw! zMEWvIBTz~9E@X(XK4`PA_EK3P;SZ+#&+RkR>c#jz*)RF+vwkm!8MRL7PhL-U`Z^jo z7jjQ(7T=Bso-mA`xc&0{G_@J2`?8P2qChYUY>^|F_2-WH74I+3Pc$XRV~d0d!(;2i z{yGOd<|n4VOh4Hduj&7CP(0kYtMVo5B7c>_V{4~$TVc{bOed4&qx@LQ~1bvl|^zzY&CzUW-gpCg^;^C7&PB<)<#nAg%hBa>3mJsWwu zDH%jG&-0sM+Jm`O@xa&jk8X#>*h9Z;}Jgwwr0TA zkv$I0Tu_g%VREabRmct@%=3_C9x`4DcZ>IIBiErda1)pSlm?~sZC)3G zYK-$Mj=lJ#+a9uHqv!5vsjsR(nPkEmn#YEjtaqfniz{x7HwfwBJbq`pG!X_WsLXZV zBw~5>4nTD-KFM;9++KAP*ofD2t$xtf!y5Pz#1@6qmErY;z<;Zf6)J+6woh-%9kRS7 z0R7n^84YLDA<%btCl2YM#fojt5%niBVrp!CpDN_^U1;87a#~RDF!Ox;ORdd@;&xQQ z<~#ZDFKe?n)f^nvku@gya=+fq*T8f4R%thEDg!oXo#sRY=Dj?apv6AM&t}wGE@DTA zGQDA_Ra~9OnoEJASkki5*`9C8)JQ?LYN}?%jeCH7irC>{W*7;(!>{b2F&U%pvQ5u2*2_-?c?(+5HB(hMizvcJ zflE=r#+rj#!${?Rq{C%*U(b&C<(SG?=3Bo46N$E8O8ay(OR;bAplu{(^Yd!PkHj?s zUe(mvOtJ1?rI|#^c*RBaW3xGYc&>-$XoTye2xE@u!NIXiZ1BEzCxDxGdnPu#J!FNv z^nqfni%Zn&UDP`|Sg*&GxNj&v{XT0aM2KIq8?D1gGgc*+5^8pvbgb&pI1@d^Pmw3h zjph*Rg?{bjdqF|_1v8N;YLv?~C;=^j2t&X3@oI`3fuIP56$#&&H+_h3QhZB#+k>u) z1*PG}r5CKPr`or=dq4EdcQ5mX2AynsMg5;O;du}g;{A(mgt-0-xm855%-2Z~xL;8hJ0az^LNfsBj`&Z%8B1Q zyaEEHQFw4lXiP%VIZ1%uU~eL1)JOx0hR>#`Q2Nd8940x1~r>uz-oW4PRD*0BBn-8L}0DDh?-qe-DOcK8aK4yF*&S8y)%$C)jSc z+6}}j@Qh+6qFLFdOCA@4*Q)>{&VLULz|xvZRUW_PvuVTn2y{z>QKqp$uLPtB$gq^L z=K@e_MNT%}e(V(%4EE@K^xc=2(WM69YPr^@w_z681mMekl~~={#Nvk@N$k-4bd0Z( zuZCdMQ40NG$MbFZl!*=2t`0zLu8L^W;IcsxJhLblxd_(kCrxDo`$PgSZ+Rkdw%)^L zY9O|aCTxm0xxEUv%TXd^$8^Ahhg)`}<8*;ajQB|GO`LWZd1bI2zksSlSS-jJ>sW}? zjI?3i9}3A+V|AWXQ=;{fME>r|Q}SZMk6bFCyMMZT`RxAfv^}FW z$|I2?u+27sWzJM0yHAo@zKg6hk(;5KKvT7FK-d#<92{6qM!;?T^vIewB&suf?o`Pi z7|Fjz6Q=Nc2~MJNYbwnQO!W7-yZf@=f#~X0S+<9bTv3g3qHl4!s2WmaD>$iE(25o_eu@@gpS{PA?M_gKG zAb`k5 zH$#!_+`7&J(ZU2j_}#$d0ZXEe3bHi4E2inJ+t=~i*N=srer7kly*AP6 zd%ip4%d{bXdXoBJvc~JF3CY4zopv2*(0ODK^|w>J0V|)P%bwGizN|H=ic#-fZZ>j8 z!hqilqh9DCU%|dCG(`=VI^~i@21&=#E7~T{fWvh>65u?!@=uBym^5u5u52%QD?#Py8#Nv3wjQJ zP7JSizkQf$-^YGzzvWey5gWzw=);`LTW8Sz^zifjcbcyQuQhd}e4r75gBldb%!A;2 zyPo&@yNzL`@;(nH@~hreiM8`oR`h@(+7E5`s89mxR%IyyQ27V&zA}1Y`s%AaibKFs zEE-ncC?D>Y*r(gsoN4ePd0i35*;o+vb?FC#6#1rP>(YDs09n|?zHE-|V(3g@uDg*w zq#kDZr?%FqbPjLRg1{bZDC~y@J^k7sK8Mgz}K_dFYp^s5zC5vy4 zgNQO+2yE}=$)Of&wgrALRkfG3r;kZg3BeyIWfc|fY%c6gij)QwnlNYF$;H$`5C!(> zkc4Wt8C`$j6N(YM`p`=f-?FyYD2Bg*P{dijH>n5&;-u4GOPCvE$}}WfO=&@y#ErQd z3+MZ8dQ<+43e_A^0j~EfQ<0RQ&gUIh!($chq<5rZ{>atuBuNk)FeP_5D(sU^XFldX zHo^O-3wtzURsrIr;>08x&~iI5#;pi^#MyI7|M7`JZ&WX9Uu$!Q1!<6FRr zNXiLxW`0qi&r_pgnTgFk2l<3!PLTn{L6c`?YPU=t(S*)RXD3dKNu5hnG0Tv)B~BQ^ zWzOO9DGfzqUDW8AK+vDNKeF1~fwcjf{BLbgkrdtn9UiD@a{*<>uXmcsl<4Jg*GwJK z3dqmbCQxr@>|9r%>Y2_}$N5?;~ zKhb{BV@jAVJiqJLhaw>ym@yQ>BxgpB7~1GVdYlv{TzdDbi?V|m9UE4b!=_wLXShx% zUaf6Q7Nb8qDopske)QS%_9M>{1CV}~RNnrt4uUyx5nV6cK|hyQIOG9py=Je;kl&{C z#%12swCcsxEd;(Bw;jK5py}^6pk0hd*~!ROYQ>QVjI~j?dswt;q0+Yp#`e3Tf{TNA z09bqqdSi_$OFan<+C#ccyn{oDt<$-;FKY=Asl7Jc10K#&+>OE{s6ii>ZgoZiYUEMq zpwS*JoY@+B`SqP5J{hFDZ&9fNTLTtHOquU?Wf?n^Du6**`&7bng)Ix4`xbwzrELB- z46Ug&fthVcW9}TcPh7vdwBGUJIfQUJGJQAGWdN+e*HqFU&CrFINw=eDO)G|KU1YKINNjcX-eG z!NMX7dWygPC9BP>q%^LCrd6RunW8IALEWNt&*9*;*OSPEwESQ7C~M*0ua8c8u_Uq zy{U5LTpLw9(g?GT&YUgy=To}^-Popn#$)Q3p^bG;wT4m&~c$r zQ2FD(XFEC`$8i95vi))*0UmN)jej3xlmyIAm9iblG-F{sP zF?1qbi@Y=#d29-jPAUp7<$zZBG5Fy3v@;WOoRc&bg74@LwkhH~pA2o`rUoZ}`|gPA z3}p(RQMk|`1TziH=Xfk$60$)(#<7?vWW@h)d6>L=g)j>B`9{+I(DSK@nu??pE^@_6 zX7Ux5k$t$&H?DQ7mTzH^nUy3m4go5+b{3|5=BDg1<&F0; zq5&);WFW0ES+|!9ahHZWTLvoO;al&p?;rjkOEe}JXqQix@R%X>leS{eIrue$n_}Dt zSD`!yyqUNew|hJ9wtU~bbK2f1ar%DhB9Gs*v+n&!a=T`MCW;-JqG^X?jYMp;Z}~L4 z_zJy*dnCcb`1zqs9^kW$V$!nvG9b6@ACqj*eDv3pHf^j*(Ou8Mil3pI$EH@CBm9`IO4jstcb?&43z;KcMnWo|q$ZeYXWa_=y zUfKi7&C%izIAAZ(zB`DANKes7r$lx%+MS zihvJVR(g$_oHfxKVpY-vLDG)XSGFsj(M@I-f40m$;9NYg%$$VaOJ4-}D+ z8Vsw1z=P;%I_N-;c+N>cS=_(K=Uw;y16|M7O~kmI$7h|AY}l*KP2@fUjP;r3@Yssz zm3W>_&*@ge=v22HC$2Ec5=f>MQ5o%v{m~$n`lS?&u|Ce(6Xm{kV#KYdW?cOedPC=D z_e%QI6v{D#fs&K@+*aQBh+X0OxV1{=_C6p)nGYz_<&%VO>w6EAA&)W`DMH~!;5*y^ zUKnn_qX(7P<+cu4wdM3mJ0K+wJMRFY81O6-6x2f!GVrLDC9|qWT9?72rGFWXK7A)=}+~s7;A& z5m$z|2Nj?u7hlwn_Ip~Z79ZTt1oFM0h*tmCzi@KhtsmhdM%gd)TpsLei zDd6zP`kWf+`j!=g7qe-8OYAS~f=2SG$IADKdq!Qy;mby`fUf$CZi0hz^WA#6pdF$8 zR87=79T7cci+`%hRAZ4{KydAP%&G2g|HPZae z@XReqTOASpAUG0dxVy_H{| zh43*p;c8(zJ9q4to0t^uo)E9s!SIYX%h?J4M@#5E7ei9v?=W4~C|CJMsh}oKW5DWT z@COG!lz?!Ft$sAxRx16+VE8~Ih9+#Mj!cABDA%?b9uTWJTLPX71cs@hXe2BVJ=GG1 z|CM3lB}Oo(8*&)GxqCy{wcgGfUY(&S7@SU)7)1PPk~L3QRBYf9~+4P z7Ef~rSp0K@66|UUHS2jtkyO4K?uY9I=#X+}EtH%@ozf6MtkgDe^sn{8;uJl>)?=nLVmOn}zCxnl=e^&ZjyScR2meDW^@gc~KR5T_g|je3pN zleSD9FjiQqVh>QT!xx9VWT8Z6LE?nAOi8?kw@{43WK6>&5eysP%o&rPk60^5Yn1o{ zfO+A-*fzjsNjA3X&)5V%{+5B3C)ItwJz>hFVxQB`=!$`?qP%8#z@znTzlgjgr9!C! z-iVTbn&gY(#iipjsk{j|#_E+|b5%+Xt$mK+`)Ty%&|iuhkqu;Q(B_HAEVydnMTi_U z6#V-xz*Ovpq#&z9j3XJ+1N^qnmkXs)4e)${bW4K&x25M9s(d!%A0i=M|m!G9x=*$k1>wyO2-If zC^!?b9qi8L{e_ntnho%VQ+lJ_7tj(Ugx_^n!rHUIX=(c*dkkl8{KhW|{5&BRu6)Sq z74XO`qy5x`t0@LJxt*XTjnQ$pon)cx$A00hf^v(1Qo zOj`Q&3Bh$c7GcQFd>AdZkLghFoe|CZo1G7-x7r!n`Z|O)#O!$IlJd0NWAD7TG{t(u zK{{9ipHx&7y+@8d3m12!LgW6un5>`wKKfC;(#GEKSkug*$BP%CKck1o4l54Ttv)i; zP`Z3hU`-IPORG*wzN5aIMT59hrn`%KkF5W_d+>6QB`$zHUJQz`ji19~d3}dRzpAKY z#4EM9TT&hBMAbC&+&yNB@lI+MhijmRamvwm{F17|R~wGbzF^!|VLjL4c*V*m0cqhK^H zC7KCo>;ELBH{8Ii*sRLY3u;aSiTi8g^nl_IOt$**ea;9FDvUbhBH%7Ei1GFVn*KW@ zm;4EGBT zz*9D>-b}FF6!!1itoZphre>$NbY9pxP}SOP)noH2nu2cGK>HzCy#rKD5)6mtfQ0*5 z!YLzLr4bj*i_J;)|6A)se8Cu#sm$1$g0T!!nTeE~L?^oV_B3JcP&)!!9?nIj)kw2a z(5*N|vw|9#aH7BM#4rGr{&Q%wWJuusi^mQH?3zvW0(LXiNwW%?>RDL9fTr{4mM}1f zMb=FF-QY)$kp)bN_Py!n+Q&R|={X^`k2yF2^iWw1+vLDBvO>-2eZ{&!OTIN^;M@?a zaG)m=M3^psnjRAL;QzfI!HwCCEsX~&Hu5K+^=~$_lGY_7l;jp+4 z5E;L?-IH2gN&u5PY7nA& zwkarGv<#bhmA^lJ^(Kc>o9Mt3W)|Tn8Ct*wy%7pPvrd5%scKRojg^Ca8Ad@S5OPJz z1cxELr`G}nXBr-V`*v24x4P>CO{=Yc{KO0eiRi%Ac1UB^7#*}6wSbvJk$KSwv3N^6 z1gja^EZ(t-gptJ}eO+jqhe4UKmmXy#&*G|{4+2)3H@s9`%E{KlYw`$_c1?1gZB&PvZQQx(@?=0Q+0u_Db*ij3;_6}BFP+DrT2x^gu$P4K z{LjA-fXRRZN3c@VFc232j*fBIoGsXLFZ&|@NtJ$9bN$d z*cKl+cev+0hi2fA`Y$<`rVknZ9*gA8dfp;q9aWSQ%{ubfgs^(9f2Im z7(8uV_wp@?ZD71Wln&CIR&VI{OH(}1cd@5fZpEi>RUKRx@&U%84K&Msh6<74I6;Dx z-4&KOTsho-MTCHg+OdJFy}Hz3+NR1d86Y)2&RK%og8vqo6+Xv(4BjIZ0!KD9{Mo_R zMM`Sp#TZQ2oq~~=9R-4a1xtk5JmBf)_)3ecP+rXe#?6hOspr_4Ob;n-We=&7kpGrk z2rpy9=Yq;%xAAJW#h9+#d+9(&&!UCj2yJ4UvSvcY2pT-~h`+=1o2{DZFY`Ag1?}H3 z0a36j!yQUTF+DaqmNY6?#pibAA7yS!N(g5nUvHVjBT*joH``7pGC_m9EPM^eN3@ZO z;RYA!ang$>Ie*r;L+R3mJt-=N0=hl`A*u`qvnc5_mW-mcSi8@j0*3WYO)zp`Vzbr_ z;OR0C0>6hlRQy3!p%h2%lR>>)d|QXdJSt=9UCWVXc`-gOZ0}My1!sJdh9 zeVOM;duHpDlm8fii4X@78|ImE80DK@BD;J&SmM?dhjw4WU!bfe8T^q|uzCeFD|(QK z%IGt6NZ$lbj3(aN!?le!8p)_I6JhwI<@QCn{`Mdr}Z%Xrd3` zZUTI@t-@$qL;ekv3<4lt*|N29)yn%u&=)a zDdMdS%ewo>D}o-Wm?=O67wrc(gSGeGl94ankcSrDGHH6JFY49H_aLFeU6Ft|cg;fb zFgrc0z|Rj-1r&PzJ4%OLErFM!l?gYMBYqdx8r_Y-1C+#bt1fC}7ay4*h;E+(QjVZ$ z5FO#jeF=Bv6QHpdRT zV+BVdd;FLTw& zTh>1i8leX}CU+D4hy~iJ`=m_MkGPJ0Ntnd%2{g(#*oVQ0ojV_Ap4Hxn7a&ozP_z#G zoN-Fv<;1S-cX5f?Lob0@rkAn`3~#;8EiM=iqhiLs@gp!exhm|KzU+lL?~l9>JwL+v zR{r*--<0>4WH7;qv-@270Eb@9nD9O9f-+;+Q&5R07}R*XNy(*H(c>;5|3S5t z5;a=OTzsD z+!d161EE&h>#up3{eYWPYJ9=4A5D&af%nL=KZJ#c%JcW_C53oBg=Ct8UrgBgr(NWW zX_#j4u?80m%7QHd=!hc-SkfTm_OerNBL2ric$z39s_fO@@43JU=`}%`~(muHNucd7hB0hB|p(zQR^MRqD4Ae&uX>7iq zylDdfer-}0rEkKaDM@?}5L5MDF-ARk1mlhodk9M_7n%+?@X%Koui>T23 zde-hhfA}5iW^(f$sDYOn<^`M)lSDDqa5iBUt}7`r(J1=Xrw|kiCTT#lyqvr(t2S7Z?(1H8eI@j&$+Y3AFP-SX- z_5e;E2$-y23h>6B6K93usERv4(ui)f2c5{$Bcw^iH!;4|C4T6kQ0w#=9&nC?S0~Y* z31AZR&OH?Dy!0&UZ$>w(JO2usO0WT1E(t+|((-n}CXL^wB2DI#GkIzh>j}8w7`344Cv)M!zb4%iHTJs`3|Yzx2vUC**$0p^TBR zdq%4dxmg_C7|c22J4$fg_}MG9FqFaX zMl8A7bjgcq_OY&)7VKC5w{NU!u(y1C7`pZhS%85#^(4L$6{CAwI1(lmBf;^cRz%S) z9mV;NA@+ktXunJH{+h+j#L2xeeddtFF9al%SE}f?owOj$^hCaj0m1*`sRj#e*$0N? za(bV=i<6k-2txpO=C3$1xvs?^73tj~C;DO@{swsTO`q$TX>yb_>Y4lA*%>f)1rlN5 zv5U-yQ2_jE`GIrK3LnU!V@!(J;bmipp~+3S!r%mPRpQLMB78r4Nl-64fCC(eKgugJ zP41lKBVlq@6lf*&e}ZKRf{;(9Mz>VqF=BfG!(Yqm+P{qYJps7Kh+qI0XfA)TyM02)MQ&!XXm^g+wU_kbW^_PwXSde|t$35IQ8W^Wv86{8MkFSttz0>|^`0H^xK zHP?gzw}ycC+#E~6+Gy_46h5dno1)H&^%?DW0$eM8JmxupBcLjPNG%t_2PrgGO--ae z^%%osQXnD2UCRV!-7zNS4l}_~McY8*ylHQDwHkQ^E}!)XdD6R-fXMm@HC20((Li%h zDR)ElCneLv`>3{F;*9`a85alY$&_O9bK#z-!5|B27{>Bc=|=b!ds>=3;^7}^e<%90 z12zCgah`$U)Lpy+qpO4MhCZwC`WLqyWj8l3l7_a z;Gi@QA0DF%2nW=SLJ-JDdoTKhf!(b zSI5wO7PkYmrrN;!gnB#bzkZKDs)xgo5*dwqstx%c`F*W$TlX;UP>EWJ9*T62eg4Jt z*589Z!0N_n2sysCRRTX6Q=^L<28ckb`20(IwRIlxJDT6u%is|=^ZM_%SxIxJXnIEY z>Ebv)+I(rlss4ls^}g3X{K}6TZ1&nL2Tk*AUBByRPjFhmoX*g_M(02 zPs;dUfU^KbBeCT2_Z-tShBUzxyc?3hz%@A2B#Y0n=m`TL%t-j7K5#&wi>hf72UM+X zs`d|tZi5XPaX$swhs3Vl|L;pdM>(eLqu}p0_Zc;E5|93>lGWGr5T}?{ha8^Xd zEpTonL4MF)$Ui0lG$Z9y$Rp|hg3hf&Cpn^RLc5bimIQ;A0vf^$C7BDS{FlyZuyw&Q zR~E!E@-RTuqf!nw*^&Za}bl0Vu2BLF^%d6CzQTKK9AqJTAHMk<*O9Cu9M(FVNbf}$#KsQkIo z<1QL>Fu-Ag0F$$-H@eZs+OO>%;IGjX9h?KUA`1`-!emoCGPIUG0MU1yDN#HT9uwHw zur&+38;r&oGE{_@#|`I{l8K61&c8A)@iU zwp(FwouLo#xNs9eoJ6vJHx=+l#v8*ks!U$iR6ano4*)tYfEk4X9zDXbmNkx)3+LwF zf=x-MP$s%-OoVsP&dF-Cpj^_w7QoXL<~UBA7bvvReQY(@jp&Glk1zTF>|2=wHPmIW z#dibYv&5s`eHjKO#9?wbqV%sa;ce~xrl!bcQ+1=0g;1puv&T5WB2WlWs6IZo$%u0$fnTDS$C&b|0&b>?%`09R9^@#JXpnNVf$Xrey>+Jf zy!Pr&1C4Ev#&?T=wE96sMFWG^_r1kq-`-t#ZLei`NHAcs;3vBB8AE86GWD>}KqkzJj_5JuldjE{;vY3V9PDCn z@!dslrmu5~(;|=m?k(m-|Kxgqa{thJ|APUK-$fm%92WVLy03(hcXi(?97=!6^Z0Jx zY0sIJlcLsHgaiD7fl@r^XJUfx*MclOmelkD&33H2T#aW@ECo>?&d5H6muzV+DkqSR zj(s4y3)j6qU_Yv@czLQhucmv+cgFH5$Z*AGv2Fb9o8Km{1@<+k&+E)Tp1-mZyv7pS zZ_TUdp7+X@EWKS+;JDWLa4q=DB_XI_;o^ku(}%Bnfp~vvR+)@~Nd6=)Ml4*a`7V1c z2>r%8&)7qaB{Yn<1hM>S%l?TMq~@vMUAiiG^iTmD#P1_2zofQE3B0)EF8mSk&RcbP zGUoFO_tVbSzQU~_?YQet79%cyDASW#V*@Yk7wZzHzODq4TqQ7{9vY8TT!Q|DuCks_ zSOgoZ-`_I6I!#V6eqwKB+IKe^&gSGa@Ep!`ndOGcaf@G4(V*T1*?de13&F|=qsP-f zdodlz)L*ABWY_HtIIKIM~B^IcAwt0JXP+Tk_`0mT2B@wDnRziBN^#p z8Hr=C?S(VPa_F9y&vxN*A$Y5PH>ORwYWQ&8c*jG&T6EHrf6PQVcsa&FL#%*z{bM(pCq@W`fRewQ1r@I>}uoh{>#x96UV(}jf&iwSp7>RNnVuOXh>k69s( z@x1sH-)yFb|1Vhsru^|6M!nC%DoG$t9h*akXTMmnu~dPSBNDH5-R60HM-@8dK%%i# zbSvQqq`fSGsO7Bd7WOM{QfY~}b$->7#Kywuc*<$@3F@s+P^{iKqYY7Bm)6upxtWfW*X`~*^}peig8r~Od>L_GhQ_({E}kyT0{P7-lm z&hdNk8%&8*HzKJNPTz0euPFB~ax{4$@^Fe4isWIJg`YgUI!aq7T-;XTt`|?Q8P)0Q z*VdIPCHs1!v#*pu93*0jKY&2AHjZtUC6IC@Vi$pv7`!Cm^u2D|aiX!r&Nk3*b&Fm+ zXapV+o>#^8m4?&raoevFq!_eQcm0l{_wu)x(MRdu6^0~&fkx;ZJ%!$hH&*AEC_$Lm zj+dI=>y)xmPrGx7JiG*gc|smOf9%};;oBqiQvUfnMi+G@2*Pa{w{@JhEtaj6JgliK z2t+Msl#O2|p|A|rDMKLT|Cr*AQGIrkiL<=iB9kBll}=D8xpt635>@(_W06g~e5nPL zhu*P!M@wFjkzEw-0x2~T3DQ}&`@Anr7H$IZPr+46Eah$^$nviHs|mxv+OZh&(Eq{u z$fMDSJQQl&LrFssYm$+NZ~x-l$y=imkM>wsM#t_ZhoH*_5s%i%my6f_D2Ws<$gz;R8hKms59VDczVMOCrW4Y-eX zQMm2D^>e_ASB?OJR91&E5J!plrKZY}ijz#d8nZ(*p@h-yDh<0lqLfIy`Z$aOcts0N z%dF)$mLw`SVYn@$M;Z>(v2EO}QVGK;b)^fWE2unN`mexeRh2-!MI@u8izBGqEK$N5 q1>(35+E|EN`btT~yi>1r{{IJvyJm}XC|T?P0000lHTY2#6_8#;Iw&0kLJ?39 zkgl}Qq(h{4AHVnhcx%?oy0h-Ad*;sEvd`Y_lG6?~@ zx_SzIB?~M-wm9HC2#z{dMM#z zwp;1ILS0jXPd;sXt93RxZY@`b274efw7)0i`ubSdjnfW@WVm>{5ubfyGnvzSm|94h z09|~7`&*RN<4C{K+2H>MPnr)qo8{{2 z2Jyc^ImD0-?4r{yb23aHoZ~?&QNdn1ReAp3Z&^RD1t92hd}G}{^mt`G@!!6pldBt- z78NiL`W1R9x_&ZcWiY64^e$k2AjRO{@N5^Cd6r`Dgy;m<>fn#N^|!KwGywbFxp*dp zD|630OlKzi7o7H)=_7xR4}3a3o>CMD3Oyu-oknE;OS@!$tMs3I=rh_eFQE|2ayQO| z0g&Zv@cov*tAXn$i$}Z^7#tVI-4x_!cf^3j?ilv86Ck_UKZJD8=gC0(4wq;vz`1v& zV6Pjy)vZFc;Rq&LpS^4C$(QTC0czOWyvyo+e)juMZqq-~T^{M@V|!|hEvMa*;^&tB z7i_<6ZGs)1iP`$g(6NPj*VxeHobZ|Rl+B?<27^SmY#g2vyJRkP=;tU@P z&a9l>9WVf)F6Dr59{D3WOz^UEsF`dvKKt^0^|qJQacRIwO6zX$)@)I%tlzx$g$75) zn^`z!8`*aHljfkc^|GAHe$KNE=o1P$k(H6h(C_*mT`qQm)Sv7Rm$sFpSo~`CtpllV zoE6gI%mFqJ9Q%JG*Lx?#qz#5bPrWsp^?TXQJ+``a@gm;msH{yX|- z5J5@UjhH)0SszJk&7HXDwmMTYtzrjGrW7xEGC8>qXWIUXwooe>zf*v!9A5_hTbi@S zL4c0K)WMy9Rvt$3Nc8lIuyu<0^Gc zm3uH!I-~D@;Tus0uSZ~nm4pxt*~cDX=wqreiul=d+!=&~?gC6s=M^u@qLG)du*Gn1 zgkY1-LmFXdYBw0w`cwe}JU2-=D?EYeC4zCx;0WSTgl_2BCZ13Y#rP$)-^1mn?ML)Q zZ94_7*j=D>V^yN$ltM`Fwb_71g0$ooNoA0(K^#W|PB-~~bd!;85gATnYr zWY?zfU@LzK_(f$t6=bPcGXhft5QK!I3$rJRL-VAXQMFSs$CUpj66cJM^PNAJChxFB zMk4_RtShkseJyH;xkDFv4R{$%@K)3hK-k#)>ja}VZhvy4!%+3G-UQlD+T9(fIHiF` zAp8?Nh)&ts1FRROs2xvXpchJpH9AJA95La7pRukO3Api(o12w1{P~x_#;q^@H$P9V7dt-C~oCiKvS7ZWEQ}R#` zl?=I3wzjXIRr`htPCO3*2OHk@LCSWPD63?EpVEJWP{~ErCIT24 zs9g$%39|Ze?7pL#3p-^3 z3nk%e36P$P|NU%mQJ{T#;{y5y)XN09UZ{sr3 zHG99QRmMgLKSy`gT2oa%#`fUab8b)4m_cG_y?+kHAMWm4*oKsJM!^AHudN}J$JH-y z83QSADONF`O}+UxY;yN{ySu+#=;j`M$Gw{fMnFnu<(8~cJLpBsD;VljdIKndsH_lP&++4I<&Yzj4fvT z)~7^^Tl5ZjP0vq8EU87;<(iw* z%%Flzvsr+=pr}Zj-3-R!J668HFi-ObWnw6g{@X;Q!L%Yj*M9ljiF&^oov7eUy1#Qq zer;zb@~zq-b6eR(@EprWNBaT!vIZ?dT&G!`tpOexXQm#r2IRO-a1|3d!BU(IG|7a! zb>3afmh~&Yyb_6q6)6wKmv#QUHjxU7){6D*@dd zZYF%|2TH3fcA>%x+1jgvk)4AU(MK;kgqkb+U`|KSRXfr~W(;Y>u4CIO+t{d3i&N^H z?tfb#j1L(;`qR)GH)RKG!n=me-=Zho5kW?FIrQy4xSlAQDObT=!cr1HSlBD{)S?Ghx4HLiPMJ3*xtUu#T>6V1PDU zSzWe(oD(F7*jdsdD2FwM9%LP1$A0%b;7|xh#*} zhTB!V?!x#GViby2GKJ|mnw{UlB_iz7B%NQaIy1{%Tl3gRU9TUziUs{?XOWIB>ZLO? zyT#F&)b8T@31gj?p8)yl&9JCNc`)YuOZ-v1@l(GN@djleQnIJrZ1Fi5H}h5Cf^M~B z;|7Qy6z&Pg6~hQkr~*OVa0~Kd3euur6*S-;X%95Ga>_?~2F&_iu89H*kThvzkoq@Y z4Kl#gSb6wO(;bjYp0n9O5xC*M6~JHoq?}sWDgf3h0$74q8$$Jfy#8-?34%=Flw=r{ z-j*>%BX@sLs>lnnR4*C zbVBFAS8K}BV<3+C@Ib}wg#>{DHIV4Er{gSOmD7n`#O4=LMhny+A(=^g+*=3u|LiS=B5Vm~w6 z&c^Bi)TaxDC`1qsR%Qo?a9kvI3`kW$ab9=#rThJe^{cFw07GZtoKRva}ZR)Sv zyvsADwgH>=jKe|^$H!1(S)p6tuOoTD2_X>g@o*6p9j{~`4=4=h5pkOm$H$agyDWM1JdWK zO_v{LTz)Oj&W9oofnzZ}(uk<-_3pK|RM9k$A*|EiOe4GFgQz*f=Wh21`9n2H z!(iZ#U{#YKJQF?L+?=v)mbs2El0~knQbF3V)$$Bcw&d1*#F0|;_NFq4vQfcHXN<^5 ziE)?be}n|uKZQ-@Z=k)&dO?$VBsOb2w-BOTeV)9}rmadBk$D@6hoPmK*o1-xK+F{p zO$z39t=J+ZczFv7JQ57TJOwqFfeHF*UjgQD8^5yW{6K7HA_^C@A1TyA6O>o;v~)N* zJF=F)<~|}C6C+$o2V3-o5FX!M1enOp*OlELInVHQfTFAoBXcRg@Dh!z?yo))p!4vp zc^{R$$<*Utu>^O zqHY)AlfmLjk3?C31r<4u>73Qw-<*@=eH|X3(Kb`}!;GQHNZE^EZev5ek&6-63}HpD zV2N}4ll#W<6u_)$bERAP>_oO?nuo<(BWn*AK;DG94HQi}YYttsXHB@~!pz%wn98X{ zt_L+n;Gp&|Q5+PwMY_R6(eqMX;6gMNd9Re5<9s_TpR!U95(QOb33w800g^LYx3$+S z=U*BoZ7gM1UD`&W7>6IOm4cI^35d34MjZ7tKlCQ*kK+Qy*xTYpP(Q8*wBVUm!@ywu zptbJ~<%C7j3uY(l&t3wf+Khx1e2%UP#6ujOQ$z<)-vxLHp8OX;Haqa$rWnzvBh5@3 z&KxkTXW){9iP1wbuCJYw8oNL-s2f0B6ncB4z&F#z6{wgQj0E~YJs4(0plGiE5~4Wl z(ZQzQpxM{DLSnt+VsG)7y}q}@RPlKFd>k~d4#f1SAuy}I!GbhqQS?BI4Zre`Yh04b zqfqsAGRv-gohD84;z|h4!hG^w=P1~LpI=rih^pN|v)sFG^p06GcUa6={a`n_-U z?lUwVTdj<6G#PgXz@6IHF$f{p_7#U&aS`q7??%VN7~5s;FKn)l8vp0^I728q-e6|Ae7-qL8ND9 zG<(p3@15qdHfvxNZ)$k_wlm6I2&7xaR0i!Z@vLWtw-3Fbz??r$7W1Od)0uj69Q5#` z6!37Qj;B`{>vGvtugr5FdbMp>kQJeNrLlqjF@fKj2(?k#wGWjXQXZqa zqr2#UpN~#6ZsM&OfIkOz2#Q2{)nm^`!cGiq@+G$wTNMYtZuzOGGaSdmqHR)`7cWJC zEB_Zl9MyfP=qhx7;jwhPiov+wyt|Ts`?I8xW(ysM7IXep+p~U= zCt5`G9__G44;R_B(x`98Y}=VM0sFdcFsuK>EIQUQJPwh5F$KPlyTS$}`THk+L`s+> z;pZeJe7HlrBb%uegi7ts(mU+NC1)TB75Xmf5>QFa=IB` z`q7l8icO1P__xX!jDjP>sR8vUYxDmi9~nBtvjydc*#>16(%@i0A5DGbfec=4d7!%Z z%a)i90&^MgAXMJ+=a|1N8Bd$3?7^02=CcRA* z))s>{kFn4HcM%zQG`{Z03&DJQ5=AsdhJDaWg$$9|Fl%7}32mT^rmGNO_Q8!56vNTk z03GLb|F}|)c9hF6tWsKH*pJ*lP4c<-jowgpr@k|k{_+N$DqAbAM7JNbM)aBq@nzHf zkBYTbSYinod}i`#7%-Rp0i}7wF8mB}_>g-Q&Mgtw6MQG|~2}%EEzGx~ky*e;YG3 z8)e)#Of3puFC&y8gfk->pj){!MX;OdVS>kRv2wl0Kwo2gW5srPW(nMg##oovEhkG0 zc&*@dsR5R&qPNJQ#QbK}Y|fMlJ`GQ}4aN9#;K{MxbO;OA5)i$1sG|w$A*s4)wAO!{ z6;NQm;s=RjPYnHr7>Ow8PbwWz#H}q>X+B!q5n>boC!Swp3f} z4jc|lTABmOI3vbi{3w8A6h3z%$62m=%Uvvde#LZu$PQ2?8{d0pob4R}-k9F>_7*ID zS_*EpjZopd9x;+%75g@9;kl77A2#K75g6by{b@w}+|=?S#n|AnZ~^tFfxpi!hULQo z;e)THGGiZN5)ge!FdYst&#qvBJxL0s8Mdx)!1G>2*BD*UV}bW@*B@ZtdJd1 zD;*#shrIP2f_lK_^``G=@r~ub`wu#k+?prGk!%_fZvZdMECG1wDP&Dnt6d ztCpL=QSWTm=4|3qKbq5AT>Eo|^u0j^@>TgL%@knY>NJJj;zBHFWb^wU)So?B;s!l%U9Dia^(I<@~K9T-dhWdCFpp$um1GG&o*ww^nY5_wZx@1yJjc`gV2|I&A_qXw%J9nowfZ|O zsBVz3j@>}HMlTgasdzBkosTVxDY|39-%LuW^CivtY>;WnYE%x{pZ|D9)bl|I(i9XJ z-++no6YnT_#0>eq_9$Bjy6J1$z{v@`IJN_By!UCZk+U-J}h&9^CG)T>RBj7zgt5K=+4tJ%M z;ZZej(8ta*+e719bC*qeRD|-UYCGgtCiIwbQN`kDb|HazDg=0Q@wucu+2lDR;xy@9^gJAu4g$8Y&f} zH(ax4=K@5gWDxr_R*ya-l{H_#0|?A&HV$ z_*wR~-pu9V$5Lby&|(fzVhsuB1Go&K#3F7cDis>knRg2fyEogJ#{Ab%-G}$e=V3TC zqnDdoEjzbrvkPfDjigM{|>{LMiEHSJX=|sxUiR`gpDMk2TBX<*;#UcFO>@r5Rj^7xsGO zC@2Apv-L|=ibO*CGRS@JjB4K>|45GN2QY2bO`o0aL}a7wi`cLpOZ8;-9LJB~G5&9W zUK{n$&Xz#mJu!MY)nxn=D)_2b07v6&l?dS6A@uN5PbHM_lqni$yG!!F;>-vrKQi7g zWC^XXkse0x1k$18alw=r7=vT`63h|0cz4AkB*f2-;~6Kk@{(WGxS8UOabj_-q{&g8$UtYd%KYlKEZYFN396`RkC^!hgU;)H55CSaWZUHsSbwnSa>j6le8!mLc z{m8B3h2LHJ4wPub+*%VaaGXVE{d4*LcXX%Dt|eS-Mx8*DSM`2Ox{7fwjH_!rw64Nw6HN1_B9oCKtL6yAwgk z1G{p2jV34;Asy$Vx-gqIpkoJ*lG(BE9M+$<2S;*HV7nV}$^_3aq6GD|Fg_J-SjbNs zVbIQrntj}>Ykgh+R7OTEjCA4|*^pEom^uQMvIbn6 zoa=*pz&oW!Lixha918(Pdrq7w{ytz?3dcB11JRgfh(WEPO`keQike{q*y^WajO+yK zh3D#i^)RlWM`9_cJHD+vNQ3knQoWu;KN<{^fVYByN-|)wJoh%xK~GL_Rs*F4%54Ru z1po@Oa*q=0%OnzA?^bOzjk6k+pAzohA(vA)v1TgfEDDg4xd%9Xv^H1=HVDG7cO%q4 z?wn){WdqaAG}-d{TqZwv3`Pc0is8g&vs(!nZo)wNYZ&C?jwSG-!Q}^tg)^Vx{Fx!- zdXz1dry$hKjJy*Jj(w6^v>2!ni-Nq!+7M0W@;u@#Z zi5sWHOi{?WRq@ju+$b--TxeSNEq21?2iAQ69e>NeQkARBmuiOrFN4J*gv2e@S#^+YCj!K1~`-G^<&QYNY%a}+D7Q_@7N*hUf&9iDSQ;qf} zK8DgO3w%FW+dpZ2G=^!AZUMdw08(T$*q_`F^==Ghcw640y3)eRs9z?q|F3tKErf~Y zTM0z&5~>>R+Q{puew+jLQ|u1ytbQp`RlKH7&U)H98}_1#Lzz?AooA12Mlf>wd7B~e zR+-svv2Z(0wgUz>uwtNt_y>TU@x7hX3oGo{HNZ+rpG%HLroXKXv;PH2a2y_mc+>|j zI4l4++^UEakm1KaAEO0bi`$3anQpk2j&Vk>2yQ-06YEojMPp~O-$>NRn+dj8>8ieS zh97_9Iha4VI)$;gYH;%tBP8I?VRxF;%P%|nUQF>h7cP^Y=ZaT2d^g^Z^HCAxbC?|6 zWvGP6fuy8PXhi3(Y%`5qhjJt5444FBmLt|bhqg&~fbuKSW{^wqf)5Z?SSLs%sr!H_c4kpo@wf~WTeQIf1G z?SUiQFQ`CaX&5c{h%0E54I(^>@CEj z8jAaYNpf16_kjTYGdW>7)bWix-h`Sbz}qL!89)*Ob1%36s}cl81B(+cr`C(S5oW2b zgnO98!5PVlyLD^5GevjwY%sILcl>`;@T-6!d3~BdwRNQ(^%-q|ofB8Ohj$VVEvhTm z;^~ck$3FaUTNwK7Po&Mhtx7!q#d}~$nR(sF5jVg4j zKI8%9`gzw*r%b0)!lyiE)#KW9JlZ#U@)g_1(jGynLi)O#vR7YgtkVM?Z18jNnNCQF zz#A+_Yz(8`Efu_vOv?E{>sa)q^MJGH!!|}hu&mTAP&*bvs#8n;)05_b3jy4ulu!{+#;BTOz7n|?xRUCuFEP^dApsC&%Xz-OZ-Tk&W3b^HNvu3K6@H%TLxMPm|`iv za}Zt0Lo#`=AH9mUeW=G;+}7b&<0Wtpo>l@>JqCAi@`0l#g9|ktp&+DFa|W}>bePTT z>$s;`^%15jPoz#&L5T0OOQ%|%a)9TyI7{HB@O8JIRh<><1=^)FFuI5z3j5jAZh|t3u(H6|PB2UI z|3U4?OF2?RBBZ&XGp8NbQO2s@toZ@b_X{mDxCtdL;=li(Hf1A7kZyRE?yy2I$t-SK z7YGWbIW7TErvC9)JsJpO#O(N-VP;&oie`MkM0H@&&9%tK+1jqv3$0IVM6t&Ro7ad4 z^uzSHjVG7X>F>b94Ow*<{}a?_E!`}od}A=1`WoUXu6+7+HR9|+It-^t2`Rhv&mjEbC~!opS6NemUp+}9u3sqmc?Xi zA{&&s_8S^_u3Ytj_nSa*Ko~>;KsVWpcY~-A>@obPpI&y?zH7MTMhemGmt)D(U`S_9s|8!7g}f)H)rG>T%8$}R{$ z#vI<|o2Xf8s#aTvyCpz}VepR8%Hf!GNE^^vx_9Q}>t;3MwxyfFB}zjWI|;50aMRry z;3{Gh_)QTfScSxmF;HT-u7UW2{4Afu{v~mI#)qLHxjr$Mx0}9LI8vadeb5eopDEN@ z7N4z~9F^yq#4-+o<(g^h7qL+)Z4TZFPn4F|*h1n0O{vfS9FCRy8F26^k7cdT)i^x8d&XCozT7C<+jQ%VVK9L`xLqVRfxrbNv!F zmZh(2?&`cAq{h}j_Yh5s&7F8u_~om+E#Z8G zAN?c3b7(S)&Euz6VIF|uT?$O)XBh%4$GAD6a&S;nK}T&d3haxuN;kzdCAI*wn&HOR5&v^5G4Hq)La!?L_I^UTvt$# z={T7aVCgZBCxPr!BTy3>Nqe{PZ1^lFhPSG-=E&+I$^~!mxk^2B2JSU18!rf8zG_1kF%-M@CntSs565N_Ly7ApR zpRtd#Ckaj1l}}AU2dWU#{(<{5n}e<7quL7d;3p8|_<_un)7h@(dTo8E%GP#E;kZ%u zNDi2})#FSayS#2e)!R(d>V_F>EVB$elN_r)qZu13^*z{i4y>e-HE>I11kDYD7?4stY4NV8JDaFG2hY?g1Dl5?SS#&e-My06m_fBg_W9X&gKlnjk z+ivhdH(Og-$nm105!dCZ``Q*Qt_nF0+C&Q|li-TyOr}-a`H7(gm+Aj52S-0#GHh*I z%Th>s1lPN@`81`hqCFx}S(MF_?P8pcQj zF(-QkI-N~tHI?MnSCZKXi&fC)iTPc z$T}jFTXh^T|83YZj*+hpEZJ^55ja@L>@ijI<=i+x(LsT^DTbf#_APK9{Ds zH@f3!s+K-0O3WGkdss3GIzKzJnOVeU#E#4CsJcsyV-I4FG>|_3?*O0oxQmv71=z#3 z?Qi$UJR^g{sS_bdh4)jA*L+(G!_+z_jzX8u))oI9t33jyXIs-UB{3g28szKA>ZyU2 zibUnapb1iSHVjwDl|%0DMLI~8(Y*zqWCqMuj%rZ2BK8+_2rA_598?0L&AjkaM}4-> zjT^K$R}ju@s%L#UkV~fgJL-DqZsXwUPLi9yqj3c7aJX!Ng{R*H1CAk*AT)ROp8Azz zFvnJ`RKNNg5&LgFJbUC8DNrEq2JldL>8U|xl`tUFrq0}m>1GyXLSP`IuzU!i{UeCj z^t;go6D>#stvcTb-B?+lZ4oNr`nNwPVpuvETqMDPt%td|H^8jOiU= zT`gywG$kp`SoJ;hwV})T*#2?8K3{wd@#2pPF$)EL3_M4BV{XYRb4@>EKE<&z;s)Rt zL~L$|hwH@&zd&Tq-MjFn5Y+Je(d+{C6UiZ)z4n6vglQIC-Q zzjI?i()LZ5P$AhQZVWS616?63?t)P56VfTbqz4Bv>m3aap;Vmy9}-hM z^-%ECEIMz#C~&>0etPk+NXJ8e~PW_Lw%tNe;69hJ>5LjLVp$Vl&3h)y)FT5Lm@5Dy8#{3 z47;xwhioaSQ3P1_-07jNH~=y?uA>6l$JzsMtTnI=otdq$fRllhD;yWul|;S%PuK;| zXlVjF{o{VAda+6K&z!>)xO{7MvJr4Hp?LYob<$sD3KuseN)eU_(QB5+ajdU#j42~{ z;gdK>hOEamaE@CXpOkW_6+uqbC&lI>gYtg;K$Y8ylW$(M%vs5bR_uyew-}|)Pr@hG z&F^RjW#Whyg1}5g*`>V7k8JNVGjh#tuON?iY?`!rj_5FV3za`E;NGs<7Br}20_TQV zPHvq52y74ngUc%IGfhrF+bcrrh!G@XiZF{_Po`d3@s$Jr%O(X=t5y8<0Rg^7jHU1D z*%sVO9Pv&?fiZ5Iq$vNyg>w3O0>!;9O(u z#*-j@3vutq(IZd=GUQ21mg~=Qusk(^-5cts`(*y;wso%-gk<~YQeBeSZ&C<%V~8R5 z)@>-*>OFf%7e}21`fDw35AI6A&E0&K?ulO#2$U)qRMv|~ilenGDJlWjC6Rlr(Tsjw zw|5_Lo&>Pq8U!Sszflr`mKPG$*dCY2C>Y;8optQZ&C2^-^AKRyK=4QOYb97uXS+L? z73CJ_Fn_~;dE4A5ldoTJu{`pxr`Ft9QO#c&;SwexJUyhcgyBXHKS)C2E}Vck&~>ai zw#(im_kt!lBMx2fOMF}=mig3L~3aR2~Yi%r2()AdR@4)~*OfPzEf-T3Ad`3Ge_-#ns z#20EQ!EFR$55X9Uj>;|_e_YH(90I1ZWc4EU;6BeCg6^Fjn`%9se#34{+4*-LLT2-< zm*qQVNwCW0x1i!RHBSqZhRuFaho)%&H9u>ylU1}a^B6lb4ia>TVUEIgd8YKv*s=)s zVcuWq@YS;I-IQ%wCYqsMM~oCtIV|{mgV}K_{J>v&n^fNj4IZUv7?C*L+7!Uq&DIe| z-wo=HdZ(@QSuUOiw@^UtGc6K#f80VhgO(4wXAHH4-8>Wd=prxnyXIu~4<>bmdq*Zx zc$C{?MSW(Sb7NrWic&rZ{^VAHjJ#*#72@LU--$J5VK_$_QM%@TNf@MQpZ=S+V@KF; z#6Yd76(7^|Hg{?@QMmru0DK3pJkcvR;%vJ0ciq#lH51FmyAPA~kd-uzijLjP3XYJt zGqPnNOIBX15N7>jhUurUPAOtfyPsYv#t2U+SHV^X7rFT+Mm|XTl2FdqCcEdWqQv(u zOpqzcv-g+b6G>B`;u#R<+M8s}_kp|-!-Vr!iSZ15&hGI7M+K0&Pax$RhmRqoj;8gz zjN6sdRh8^~Kbq7U!@dgr#@>W;bETW#6w1Pm9-N?iGoQ}i-+O)cuw8$)-i^$Si=~!Y z0Qg%QJKvpfoiF}BH=zMCeWE9mOxXyVt_3=}?XN&R)4qFX1YSt&a2)hoP*`sQUgi9Y z`sZo0(F*P#>os`D>0BsP{xcD(6Z8X#Po}I*x*D&tr{xKUq=>ld%Q$^K#w#{dN@5;UY!XkT* z7ae9alN63}jxE4`d(y+&#PR}at@QePv(@_1~)Fk+VCV0k^ksKNC($+j4ZCV$+<1NX? zx)6Z5My5fn3~K@-?)QeM=Pa@i7p8t%1{!m7mTN){cB;-Lq# zrA+)_N0Wzg9Kq306J~UW2#zQM7C95cEOA#CM?~D~DK({J8V{%bTq27UFFbx;+z!hr z8_e8_%;*$`zlJp9&hARd!3fA0gD2SI*IfbeJ)PT*6kjNB<3o5nOPi;bj| z-1#`ZVlW@;dH?uVQ!C$u8pGnbTt#A3i@v6(0weSDuy2{!`oM{`u0r>4M+P4 z(P%Pse=abiw@-p*;0SYfW)s<< zQm-TI8*(jDKJ`aqts6&fv8EVG+``bd!!DaAZex~ihjHzAQO@dlTJbIR)t}5K{XcIK z?!Kx&i;J?^Y>p8HOcC9H9$3dkY9muZA^kiVGCnRZSXO*LDR>8#9j@@E{yMUg`c*_P z5KXAG=s96fA<7W*NsHWKSRC)>4;8D$%V8H`swhGs?NZ)FBtAw~UIS1CvK^Vfnf>P} z3z4YKlIi+@jBJ<=QuDAi5vUdE!F{S35a_t~$8qMD<7)cO=k7OkKfKtUMHinakIGnI zt#U$u?0q15#;8$r(POuDpG|S?Nbf1kUsrIO%j)5qwlC)41wWc+CAvY3Hc|8L<`HV_ z$6qWgBHvk3Pv{|B%()y-K2&#UDP5Bu;r2LucN>iP2r5_(PmG{7d+BIlGi$-S6O++N zHNO&0yMc5piaYSM+pa1z{AHEGya7FtIqmR+1Oh~n(z{(Y&b8Cl=r@NgZ)O0JR5Hl= zNzrYUBuJvpUL+kz&FXLOd@mcPpG-Pq=Jo9Rzd0m~z2m+#$I?86;r>?FA5U9}ol{_O z%ROR1!N6ch77w76%#EbMWISj4Y8KYW7UzX$3}OtI2_9z}lu-fUrn%Sket}^scJ*!p zG+n7f(y+*BGJVAGsp_f%m|!`qlhi(>OfjsKuVg`bE3M=L{V6ykLl{C(6bqu7d!Ko5 zS1r=qjxsr1+lWw`&N6n9|1qdPKhy19$DAA;(Kv*%!52QdN)YhY&$JpkAd`LAch(EU z%vhj;ewh$QsS0V~h@p*FOyzoj{v%@h(P5OhfI~x0RYAhfQK~<5HfikwOv*z+_1NfV zjjyJ9uY>Nj3guPKcLkHnrBJFeGER9gpD_y7P>CHJe6sO*8xm>z4+B&ENS!1e-aBKn z#1yhO{wVvg$cC^hZ4E3(WU}h1k6M7VluY}$=`8$J|Mji@n-0x?yb+{bx#TA%U+&-^ z#cA^UhJCKy=jhvq^v_uS0pDY*sI2&16o!eBWBxwe%C-@kL3UBGa)J;IQO7 zyo)5fQcePsoL1EP*5IivL9){hkCv5azBMT9J#j(4)T0c5n2>5G;?H=Ji<_!@uatma zS^_5q1`5ZIR^N=BP|+wTp8p5*r^u?z^Pk62Mhd5TN2P(I`^5n4h7hepxZdPi@n4~` zUzY*LX-6}C%hBHu-?yX0nQ(mVw7Ys!8k!ksSIm=vH_i8XPV)}g<3>+3sP#DS+gibN zBhg&}4=KKu$x_u_n|flV72ub&r=f$5F_(ZOLR3X~Q?Ze=S3K~>76cm+2mPx&82v#z zOvpFNd~`m|m$>e0Zz51FHDM4{4$_Vh!?PF*bwz#KxL8I-47E zP^tYv{MunJ*mmD$+)GN8_}qYf>FpxwmM!UYEz|1Pkc_uitWIdh^gSoO-?>;8#1`_~ zq-`0ugIb>;?Ne#n>`T+PkQWqq2%zqR^OVP>uAP*USRRJ4h`$!6^8xM)*#=j0+n zuo4-*DkvK++jSW~=>XB|{9?<&9felD$Ms(A3~fsM^?*?$K!GqG*7SiR2ZU~FDa=)y z=Yb6JMP!j#WtS|5SFRqPAH0#{5&?pVtWg_xbyYZ=XmQ&LC>$*0*%F>?PCDbdGX=BA z2oPz!h0PM7;?9`{(bcPQaCwFPW&yLW1SeD>T5VYq*`Ce2kLU4&UP<4F+FE9>`g9Ml z>Fpl)%jf+PjBxh|k76fW%c*IHn1!v?o%%s>%rLfk2W5Mi4N)ILp`b)E_H7ew0X7F# z4ykqGKzpCM(s@s6e|6MyWC(+!R95YDDpgc1ax(3@k(Kl^>h|*iwcB^KOD8$HQ=+lK z+y}2+ufi);dKTi*EByN&37D%a!(33&8SpzgDfS5uLb)%Ruvh977Li1_l05$j0E6To z$gQ>2Hzo2`D@1RI4VZJExUTaxP9Y^1NDr6p%OcoSChVVq#Bk5y^HhJ}`6BL{i8TeQ=`FS9R?MVRE2W^WN2or}!*(i) zT+yxPDtk-OW4S1{xWQAX2WN$B zT2=So#rL947nX;3NKgB68OGzLd(GUdo8&EzdOC;-kX+A*KaXXVhD|f@oiCidMm+W^ z7t8B&FNQo@FS}V<;}?O!muOPnkW;+*3y9_~i4z~2 zn71+y;Ni%){@c5kaW$8;&6|W1r=A3hPNKto!QL>Y`#W_nqzKJ%Xn z0bdVZelY>Uq)?LE$F{(A_Prsa7d|g$9fGqd6&i2)ztQvFIBW1Kpr&DEh`Z~3Dp9u_ zlJFZeuwy?wV;u>%q=;4d-f2f6N1pJNbWJI>MYpRXu>)meL>5!CEgW&3Jd@JGVO5>k zGW)hv@1uGtCRtTYmH8{ou(Z5dOkH&w_(Ks-CYTP*eGKL@{m9q+ur*V5Iw4WKcv(x`h8fMVxs&RPFo6&n(Osj45O{ zri~Dy7`veeWqq=*$u34rD%%)aJt1XHhLlRmR#~$QLYcBJ2^ssogcuC-o1W+Q{eEBb z&-FUz%(>6G&wXF7`@XKv^>##xY^ZL8B|XrU=ev^?LBclQ=Te8o=z4mW1m#n|XnlR# zFNY#LM|fXBa<^>Ac}Bu7#}2v!etD=c4&pZ~0J#L9KdrXyC<|`?IcSp@L8`I(geM zxYeNTEd1dLmi(y3;`XIr4N-CkNrRyJ^zdz$naTkj?MBgdr2K3?Z!V_w8{3R*lWq zYaFb+`Z1$-x7pNv%K;m&3zEHYv2s(u7x)Xq~Vtkvdt>3m$T5G z2qG3O0XzTQoS&R`_T?aq`!x@m?a6YxZ6Ys8~b!&&eq?J586`dN*Mhi&!A9_`9T*b3>T%WM)|vMBvYqVg&OF26YqVo4WzzJpQMa!j z4XnyVxKt_l`&A=F@aAjY7PiowMZsnOx&{KyF*=?!BC5Ew{>^P}t-JeHo?z8znv!B` zFaIn$0YQtH#CuEWGy(Z~^H^YXI%05oHAwJAy5jfsRg0f5mcvSumYrX(j#g9c$Uzyt zkYqj6tP5(nxh104FkUVB_lHb{7^1+!TG*A}AEz;RTLFw#i(t6-U;WydV1RHXE(%Q` z2>~e(KXzgf08ojuuxtikTpHbZ`)G|*fLnveD-Y2powhC2?~iIw`J9EiEeuF~I&Mxkl#oT+ zzH8Nwq8mJ|0=OUOoD!Ly5TQC8QSL2utjXyYG5e}~M-l3E>H`n*X7nkMiFCata>7#t zBdqJ5;d2oqzbbq8u@^qox&8tfSGaY&#AcACT8t?HgS2m7=0b?olg+ynzx9cYyG}>gs%6m%c5Pa9-X#SQm2ip;eHuuKvLR+~thlTEB?plpkXX@2tJnNhLIM}#`!%jR6<@}ncu4E5 zhXcYf;6y;dSArv^!$eDO-l!>HBtA|y;>YTA(tD#i*Pmi1SB<7v4o}EA`?2%qkLejp zeLMSG9>oK3PRQ*Q{YA6U4?VypQKF#f*3jKe(mMh1hiY|-2DZvviSh3n$Nj+cOV5#0 z9KyIu2FudLozAbaI^WM3mw?)SrY$Y{Tw4H&hV{rwxsN$76;ZeWvrYxqSYXQ4(;aRV zd$pT;cf>W-t1|0v1wKd56J5sm^KJ2^ROe@(X7?5y6ey72a)PwS-Ww_#8AU1E31)ea z^Zo2D{PaM$&&BcKpIr3zCZD#l3klS3!1qFsHg^|)dEc2L%BH*dqiD`*H8ebk9=ovL zv=UrAG|rp|2C z38V4S%`cq#f&jinrNk2=;SElnnt-;N+sy>XrfQP{uoL(i^0jr&O-4bal7}S(>;Qnl zw>N-v<@5OX>BXN-ui73Et_gjzdb?hVEe0J;Mz3x?dcq4BLq3l}cKd%*mY%exNzKWI+d5dLDo; z&)!15?SXypO~oatKGCw@b8}A*J(~prj89ioiqiPUewVRglrU`-?r==#A>yDWkdHqV z9b57`f~Yl z3_|%*iB+YwwR>J^l*B>0M~rf>Yd7Z2O^X;PWgJBBv&{HF0uuV!jt(>}1b9iQX&zKm zH`OaQ#>@bFBIJ&;wb%V_ck zc!gph9C<7Rjok&4(M9n~3EUBZkD3D1#L^!UqW$I;SQ~{DRwa$vm(#7P6f>%CnO1Qz zc5S_@mk`w2VmtS6^R}D5ER@R6j^<9hKQ0%K&hHn?o8?KE`CIMcu=X+^HwR4P0Z8BNNQXy63)%oy!LvQRqYRibnglJpFrlLp&E}%u5J4_Lwqop=KUgaE)T#-nb0_Fppm{+**5wsl- z-1uTVIk4uIh5$=mREuey3bmt1R_mm$um?pr6FQc8QNn^25`RPl-D(s{@&{r{vsxAB zG13!|15%OK!oL6+ZNJw<8TN8rI9UHJ_d&zaCT!6#x84VHL-6k_KiT}Y0`%`y1;jo_ zCTqJKj+qd342^>ZMC+}&Mt{x632@>d6i87HJLWpn5D=9C+yyH2T?R$x9B6raKj3g; zWwBk6!%u(dT6b%o>2Jpy14aok{A5=y=zF(^-I$23nqvl{z!6r-QrVXz^c&>6j2J@bqL?+h;tBN2pnoo=0=*Ja^IRgHzuerIt zU){Qgnxd}V!pyO`*bonibelWtZVS&}#wRiMsK6gN)9hLuWg6psNl@LmDdeHx_g?Rg3D4eE@k}@Tcsa_3|R(k^?qfyjIqBW<$;ugSI)51izFnMeGXwx*e&}Q zcgr!{1>8baui~7(?t_=TtI)DFPLLVcHB^5(E*Y*ZvqygQM0xyU)V$&-Tz3Ho%@@3-AfUq7WWRH{rZ^0LxB|Q;R&h$$WmMF~9af7ViN}F*% zb3#CSl#IIQPi!;^FfoPLUjXvjm6$=LdUzzob{*HbD`&{zp zWYsP2lE6wegX=tp%T##W&54|-SB74`o>Ai+Jng27BM}i=tewvwsHTv;yqY5EY*jO6 z^LYT^iYmSuKu8eswpO}d=zj63f{b*j8J7%^_W!|g1f-ras3mx~1bA%gLlW4*Vp^(9VYqe?sQv3a-+%~@R50%8g8O+HqYd3H+FH5!_NJpE4 zea!V@PB$jION!rhiZ|R!!zCTeAmW?*%Xu-U97Va_Ougv2sk}K!)rqdw$1_*j}kiyHQSfJ8th0td!PLtb+ohyB;g zM`8I%P|{!QEIJW^_!@N_^@nPt;{!E}m57o^i(;LS!T*rjrq;Pb9u#ds$`9!5C z%vx?cne5v2o!&NNtxw4-HE|bvhjHWJ&ui1A-&)dq6Q{()GZU8ue6BB2$E4V1kvwWs zLcx1!&Q>bUj2HJZqFg&(t<+_2mKWHsq;yCD;8jA>LPq&7d0SY;Fzs#6HMr?2w zD4TE(E=ru8Sh}C)>C_Q18BJ=ypk;jbIvTKHZMDX;=IPq=qHY_9LW_2)^$xUtcZ4A3 z*J{(#OFV9qrjrH62x;p)^E>EI2j42m8k0Bi{#A~n8xNtg64jr+`Y>GW1 z-%yHd=RQ4#FOt|FNE_~m2y^GEpHwc}F1WX+a5~EyI4VecS--w(FtlqguRTB_;DcPn zC@}(0Go1GO{m^FEKk_*r2nw{z`}lW2v%7`3LlmQqa&%|vxnMqSO4>< z&3clWo41_s$hjn16@5)lONuXSCmx0F>Dh1krO+31on}Y-{cP55HtaYq;%a-;s@-4J zFn4$U;$v?il&*J>wz&PH7hOeU(aGXTJcCbGVFP+JJcNnCLRx3d6!K8r1o~R{ zvO>P!J0wbv=Q|9}#LPoZfRb}zvOLrB!AWI1G*V>XylA&3MGF&9Z*(g{u2ddjkCmG# zk!5azV#8_C$YED;vo(9QS6w^wl@m*x1D4%Eck7OnZA(t8B9;0j6n zfDR7*@Hd#qzSpvmwjNh_1O3v`6G?nTjfw}o)f_c3f~kZF0!KeQ#Yc&>fO(inRpGLL z-VP_(%}?v>8*j^)}D|F`mk*pe?-e*cM9jRm#!i=Vai!H?!Mn+G6&JG*@5@IBv$B7xVIWs9&dG}ru?ieZ0_T~ zuW2+WNQKn6vCuE^-eteIDjOH!JCt1<6r&kX>uK>*VzspP&-hgf0`i$1W;z(Lfz!X1 zX=s$c;z+O*AD%ayEtk5DYOJ5rYm96Im&!)g2PJ$ncpJvgti`-Q0B-9%vq0o@P zQ+M0z`=9w^2%P)}vgROkF&xGV^fo^t?tDs*f>NNAdjd@?*4xP|>~TW3H;+rjQY`Vj z|8U$SKnnl$Z^-|dnE&~-1;7$>QG$hLON%;mmc(e1XFM}98vMug<$O|1X4PJ)uzW8I z$a$D`Ay!X4_2LTp8Z>wF>&D8H@5p* z+k&}Z5NU2)dV0ytVvyPTrDAt(wa%%^s*H5q6`j(~OiSr3blx4+HXmbz6sEh_e{aig z?>rBxDi1Oky*2*u$B)~#jt(DLHz*ovBbUuG%jKE*%JeE1=gAHxPyL-&|JcD}YbD<} z6=Z!CndtCelI4wUYZ7+gZ_rc06jm3A|n#NaFB7}v?anRe-KAVJ_*8CEi&`56kB#$M&wrHTv$kY z#bF>E;2QmE3!%Mnri+y`dosxGqC|;{5bsytKrc~PP^lq6(qi%)B(l3Aq98!3i}HP7 zWF-7b_<;)Z@+knroqrif_&A`k8Rt$Lpx+1%te^I50mV6tSFNKVADs6FnI$#9W~_q+ zvjI93C><3lC}FNJCBexgRFBRNZwT$f00_xRk$$=Zsc0Ou_= z;#I=5U4oNYjS8|+ti{QEn~eG8*I*aNL>cCv+t3uIB@@}i*Fl$hUCGPyrTRr@#Ri6Q zkiOYQyw3)zyu5Y$)?x~tTV}5%u3${}&9q97`LKmn(Q8U$6cvT!X`C z(0hHG_IC6^nF^_Px3z77;Sew(`7@Q~z!H1c-CLbBta9!RBe&irznacTScpj2V6-AA zi=A~vtffQbYvhA5OJ9*rPikdxeLmB$*dg=+^G#P|##U3!L3V(nv~1|i(4N|I>-4dG zku9ZmhMU%SRi^1{)W!M2B}m6=D`)O$KYQy^bk!D~+qHpSC+mD=MIfi`XJS07@L(+U zYH>=ciWFLAQ6)PZrxm(SE}MFi3(-ywCXXMusM!_2`0%`=L0$Fh_nKOw!3fF7*@O6w7EQICcTO+??hKro4f~>h!#cm?_i+_Q z5T)MWVaR7mcoHObd?mW%&8wU&d5zTi;Icj9B6v26$CH<|ua`&CjUN)! z*#P10tR@BEmE5+@An4tT`sBlWiZp*!KYRK4(Lo!ZVr*pV|D;U+(xu zuSVjsK1k=Yl($R2dLl_Pb;ItF2sz^Snef!7Xs#$0J{pgN%&w6WvtvMik_6Sg&N zXavg>jNv-7rz6lC?C1d}=4n`0J2NoE@TLg;K-SwxQ$_sl%SFdEPks*hS~f?BBj6+E z?%q<}R?Rn`V)f=JBR!kA_I_R-orLAaie_!ZK^!Ls0c#eoa2bdR)6I;E1<)tO!N&7z zjH}zAS>$|HF=P{@koxD-rFX-44wj#+96eNHl2<#vWoFfNV*Fj;l=_U#rrNRd3Sz0= zNS#aS3yk=6(l(?-(jn+=w5*JEDe{dZO}xh}D`)I6XVm!B#xF+;Xj9`&#OrbQNh(2E zz~>E)+Y~j$97*RI={;hkt1KyN!?yTco>Yw2v1*f`%-f?Vu zxSHwKy~wpjBmlhhn2o2?*)PQi2YR;~_dvzSf#!4Z+T=`6&?=jvqDXG zOk z%IR=$IN*v5r6IvKmGr&$`K#o&st!-=JmXla z=}!9VbS%4cvZGg`YS8L*SKamVC+6d4JJM;M%E7N4Rqc=PCBJ>lyc9gEdeREz=e6!L z*sI~3s)s4C3^buJt=5v?IOh{c7%1b7NQC(0_yqbf*7DOa{Pt#bcSL&U{zlx-T@WQh z#7O@1Ixqfynj`Oo|BK6}q1E$S3UI}ad76Ovx&=$C72)=w$MdA>n!E91P=WxM{P`@#CrIWzCb2OrcwZTw7}(x{TF z*kQx(g%Jz|j|-mlnG`>p2=Wg5%XLY|hIk+6!yz*5u_(4RF8k=1!z3?&*LH2hNbMTP zP1_kBc+dsjYCZ=|)b6`HciBY9+xI@Aa_^jToltO-`K$(B`hNM;@bs^@H0O2EdoCxL zE^Htu7m9^r>P47i&?5WH{cd~uh!KUONTDK{TJ&WfH8&3z+W!@EmF-oc;Lw|3L#(etbe6GZ%{PgvU+}@*| znuuOuf5GYRi88^c$4=SezCuORD1R}xfacFENAX@A#^eW?HcQpJJd z`PZG3C&L0WESy)Qkc5+6LuS+Pk{D-!!y2i|z3PDuZ@+7(1fjKCv`8N$Z=b!0UEVWJiOEUcHx2jJ2~JVZ3WHFD^2u4L%)U-GXJd2kz7uoo)a8!@oSyY}@C0 z%fwJ}rsG18>no^>khypee*cQSahtt)+NsA+1)F|+2x}a`3N^O6C(NH1Uj+7%D?N-W z34~1tT{&8j){X;Od?*&=kBKQAsxvJ1u8<9U~Kt1cGzO$9HH%oZ>-&DKP0BQmH5YgQPxrqA8#++7AIQyPKVTJL7{ z&0X@$Uz@>W(+1+OCEu&Di0;BP7z=VvZ@W6?w4Y$li{-WlZo6GbUl*z?j?S+LFcX30 z%7(Vri(G+)GlS9}KQhUdZ90XJk$l3!T|4wV)zbjXb;xn^^of#&Ob>L-!UDnid z)uY!gvyN>6%6q@K1|kBFBzvunnkp9`=L*NTziN3|Q*LaVyQY5o26gEAF{a%2#^EcT z-_!*GV<8rq@BLoUP8|Z%wYIOf(@u{oov&EkvpOFKh74r*JsxP`edDpdN%f-HRg)xi zG2hfSR$SmZ@lU#lEctrNg%yGwb#>Tewf>~Sx!UTl3w9c$ixObj3!D7C)WaoH8r%u) zZ@36{{#?K9i=VvS2qa`;OmXi-#H@!2_E*p52v@(63%jH5L~ddk%gqL4R-vr_g>igF z!3iHMH~$C9RWpm_laqy^S$HnE$S!|7pPNIGViz1t*|<{J6F}^Q#T+cg2MVpG`)r4? zCXEcepW6t#th~nciWo-%t%Olela4%#+$FAgF~p<>hok<&#QOdOiwK{)Y!JV7ZKjydBg&Ooj|tX3ViLg>4I8#)h*qjg zpSy!s0MPMj%oJl9?`yBB$XNEqzV#}oYqpN~YlJMiEsf*(~5%qccUfAKofq~od{?_7P z(uowu^XDM=cqTvtkeHHtdzKNDIgwf^uA1P;4Nf?g6BohV==}5L*bh=Gkw%(K>1Bxp zR9A1sR~MQ~m~-25@YF<**mvjIX;?p=^I9zm4uIy&7h}!Xk%K+vW2N~#JM4?>tC!`V za>dY&oDkdJM+&lE$rDLvSqMUz5zcc8-TRmiCB381#f8LrL5u%hX#R7lgk=JLlt;T; zBd+zkac>At&|CtnA+w{iXi>I3P9bYT*76;@{Std}vG1LERHw{RlbC(>S8~K5UPJ*p z5EfR<8 zr)_0c$6zl6uAO|~12M*(jd6C-Hd!Eik;1EBn`b=45Uh8!o`j`8 z3bSuuv1N)HKkgN93D;Y>5s z9nu7@PJs2<+udCEr+O@qrQ%02m#*57x}tI{XI19C3pUvs_%<@i=c;9$AWg_3>(2R{ z^I(zejwY&C+gY37u~9DfK-zw zLcz023QfNAbDC{06yjLS2})QbOT_AA)2zn}noYL2Y>T>t?>o6hwbX(K1>(!!o4rdY zl`A*C_^eR&qnU@dGa`6#Q?~$1Z`{OKiioxu13&W*S$P*mO5vg(tt|%iUqluPndsxFvx93`Wqdl70WcN`KmzCQ5zn<= z@FEWU+-kS>eq1lBUA6}GJiw$BE+VoS0>9yHkwXu{jKTC@d=iIo$-V3a#TJNNb8P+f z`qk4FRxRH1&pdJM-s$X$(aP;)+r2Fl1o9(I8>JbKHZwkq|L9SR>Z|J$sn6$z=EN)S z#98Og+*3KPbsh6iY|(EE!Q-W~U+sI(x|WDfu?R)Dc49joeXNg~JqQ4BwO?7;4Yj&H^F=X_VmwQBFf0n{lq;s<*R!*wUhi~WW6jE9$ zh8&zM*=1I2VKV2-w$-D>d@IL)vp6BZ$<|vU0cnRMe0kadXt_e}wl3o8_jH5j zUft2pxpy&DqZ@{6u0f_$*TbR2Z0chi#A;;MJn8&C0c zpmxewwy=(h0k~^=JvXj~VgDJ&6+fB}gF^2ro{rMQ6qYN-kZAJA%JHF5_%EcGhIx6A zrH=9W*Zl9nMo%JdDWKx}sa=CVsYy7!ww0Jb;!Yak$*{adGMB{-c2RsNwW2+`^C_Dd ziru!Twr{)G#@+~oMc#|J+>RQqFa2l1aE_e(-Gey?oi;ax(ECdXg&$r(Xgk{sIoMvt zY0SK#USI`UI}+~92j7?EZk;yp;U*?;E)2&C(F;M%RITvh>!Nq*@mg`V36va^nc-YW zdIZ7%ANjo~Jne6=%kf)wmXXUb=_MaTJOyspN-hAnS)ul=S%hV5MQufj74Er#kpyXX z$9Fssn8c5!R24GM$UFG_Y6*#NZaM`zcJE$s_Qy|atY#W2!?Cn_Dq?rpQm9%iwj@n- z$>9;W2!NtmnleH^)%4X$>NO-i1LYhBf`QbRSt7d8Ar=c8O>RDjg?D||#^879=bo0g zh>sa#3x`SLJZ)7EKz!%gW>ta@wyWE&vqER3bxky@*#Qj6Yra2zf#0(GkTUlgeH`@f(uK8dL&U)3$fg7{uWm^lFcWN(s@(B#hc@4h1mswmuhUfm>L!ga5f3|PE zbEMQTts4?(g-8t!6kl`j$0Ij4`mtZl3s~?>LFJd$D7-^96tk# zy;{8UP7oI!xl_IzT=?cHdEk(O?M~Vrz6BiWtfHQ%0&5TNA_E4U;;|@7c0TFpr?+tl zRB`>hT}wJrtOx_{1bg$TW#N0zQnGvWi9}UkTOw^ul;KmHWF8;y^NuVjh3Wg=k9?-L9CCK+={M; zEh+i@qRsLORLgK*Q`%*Jd4FZfw!2z+kpF|M;p5@fZo}VM59L;@ANaFYc71py64q?l zEUdIm;XX4M_SL2i->lu^@f5S2T8Cw;W3cyexc&LfG3o1GWg3&$9)VP?Wg1oT8LF`a z=6wHx&$l0Ru4$M?Zl2nFRBXP0d90M6gPf%fre+8F-OZqf)lw(l`e#GWz+0DM9=}&( z<1VD9cN6*|&IIfJjb`_SooTS02plj=5eE7Oi_IcTp@*z>Te8{8utVF*{aXk5mHX@Y zU$10ylqnB8JvN;0h=!i=PV9=W!t6UcmF`tv$Q+R8D5(cDL;eMR(d_@-e7^gnZ|G4o z`9ISyv!Ay5RGY1a&v$1(&%^}@4Lc9SWZ?oOhjr@ak8@_l>MoO-ACCs@<>my&_+A2M zm@lxQ9wpL$w;DIK`vyiYxDNz#0^c{C#bujO9lja<2R@)4{@21%VVf*YB^IUGg8asZA;!E89=51PTn3ubEvi9)#os;+i)1 z`x(#5`+}7J?Kg)j!Pn1M>m2*fRU6})4ygN&2U7#*gZh=v*;n1Z?BoQURrmX;Hbyip zz3KNJO7-8JKG3|RJ=@8dxp#H4le0rr_4sO)t4VTL;cG~?w-gn!D)as=lz(aIyhQE8 zeU%xkR<`9Fob8-~1B|Hf+(d{!JeeUDO;F6Nz>AwG86+(aRO)wuW`gz z*1O)2CBf!BvgE&aCjSI4_rH1V9i>z6G6q@OXg2!f)9>Yp+(VapH2TKcuD9N*%lRe+ z`v8vbmz-~M4X21p5J%bv}?AlfPW!%3-gbwfOG5&MvcHW%lon?9jI24Lc8~;O(g( zd8!riE`CUY=Pygj`Czk|849!)j4QwDXB^{8zGqv>33dIWGasxNx@z8I0gDBHeF_x#J&=A8q9SS8dYzn z`uWy%*inoU97IwYACJFLUj{?A1o~5d4VuG{;R;8KXh2Jjre4(30ZVu4%8tF{<(gPt z^oV(HE8L5?VfyHNN6E3(imP>6`AUsVVHZBFge|ag1-Zy@st%FRPT95@{SbZO`rR``|f#8);aXwiZ@CXCK6D= zwku3hZsZj^xaIwrZO8I>M*I2sb{Q$#l)`5q|`%w=Ay{P#CUKnU5s`|z={(-AMK z6)Ykb{!gyNF66Vr3&eqO^ANDm-~R1)$yC#2hl%w3d{~|jk~v@W{ntjBPeXfV&-jfhj!uX(CnB?6mM-)y!W!7`pCPbxSouS0|SPPAlTOYd;4;u;O2vS_k$ z5J{HO+Zk}Q;?eQem}A{n0H9=$xh$uqw&2Giao}tV%&xSxe?bvBorktKaxVC!we?M7 z!0Jr<2>_2I?_=diRkhhgTYJ+(FT71IKe3?APfq2~APcT+z?>kCCo#u>DV!adM@B-K z&4Ci|b7EeKfiep8{FkePxdG=MHN?QK^f_C zlR^N8;lGA9KNwghfq`d&Y2d6WjSL>jAeKFr1{VB1kXA#^Omu5aXC_4QY4vdbWonu@ zY!-dn9D>iTcT`10YN!MAar7@3kOahbhOfycOWkKNCQAs3#f!0;P!XZ_DC}z)yMmFw zpt;~(7#cFIOHe{?rq0iK0th!DK1w7!M3u^s`V)u*4akit;7e%WYc^s|dHJoaCuDWa z49Fks8@~nckVP&WSzQr8PI2y+8cjzBmmgM`g%F4IbZ$o)57IoPOJ zU*MI<4G+Z}zt?Ra{oZt<;IY+ox`>d7;9WSh%PNb63sZ1VU~ zs-=m=YU|)`T#*9Aada-!os6ljxc|iu$x5+RTIVoO5+%~-&qJKK-~FpdP+Qr#sbgz* zi!%;5uhGy5C&jX`;V2ufwNvjvtoWg9e@1>nD9N#`EZ63(ScLA+mI$NyUEu+rM<51$ z6mT4XpupqIuyjP9bmru;apU^_B6#5crK0&95Kw$6SLv;Z?5~Dt6dMY9H4#+t>UcWi!_)kv%r0kf|>sGoa6CB5|s2eV>pIn2N>a7G~IV`C+0kD zw}=_svH%Q{aPPL;8uR6&yk_z<56hc>ivr2o5a)pl)kw|tLlbX;m!7!%-3PeB+klpb zJTZI!{sMW7lSA@Ms<|w~ZU{G5*U%zn<4l283@)uVuTpHRWag_G$xTyfZ@_eH?K>&f1ZjYQ&j3F3Gd z-win)Tp?7q%dSTE;#B**HS45h6#I!$h5d)dCt4ILAj(uZp!?yZw6^yj$jyd_&x*(~ zigRDU?I2pxNZqBP{&)}!z4SA|v(C*aLnH!e@y?D}ch@Fw!WbyyD!%}3KgrqGUJte- zeL1UkK{#-OBDGQ(kzuKE4(^~luk=zC&TnmuiD0?xKM=+`u_`BPGyVF~O1Em&#mmoY zHo5t6&nzvozmN}RP7E}se(p<&E;aG+l~F)D*`YT&M`Gkh!Ue58vI}&`x&o-;KT;d~ zX+U8;o{z7-w_^1DixDWxU_{=j@%X{MqadN4xqoe^Aw_*J-MeXJ+|Gc(NV91x#A9V< zH)Xg?Q2DH(_WGdqvkWDdW`w<iXR#3av28MH;jVmAj zg~WFIKf#^M)3HO;!Cia9ORHLG=>|4 zJ!Ipf(kp_ztcXkv!}o4%0Bv4hQ*0<^M5=zTrMe^;aBblxd;LT&?^kG26$vi7fLyCG zSX){ahG@D<92mMW65|wEDTxNah->&EiJi`*2B}K1!18YtWYUiMk-_*%t@WcW7j zw`;3i99K}-c*M9?x-ROE6;~{G;J9#@OOr&a_$VJZZ*D^mLZIa0}2~~g=^8bBYq53^sy)rUXON02Wsi38k?Z@CXNo1o{6IM30Rk664oU)NLh@0 zYnS8SNBhr7FeK0%eA^fBBI&Ar5d+d8uUaVYdm{O(Z3aYX_#C&3H#N0+7Z{G}z7gix zEvtsCFR@O?R6i^kRs-?ycZ$Z}_W>o!{!XJq_J!lWgmq9gVx5vrQQ>AYy%h0+xs1Li z2jx!(XiSKyObVAi%?7yAe4K2pi7e5$&-VCN<^!spMLPN?Zg>tgz1U^~vLafN`fWLw zWbM&wJzt*xe`;~Nc3c7<3|&ld6FuxwE!hBqNk#@bC_c#m#(({Uz#}^;%;zkyWw2({ zHFesW`qtKLH~rglFWJ@YFP5*#cSf0ogMl`y8|7*09o(H-PV@ecuMJY+Ex0;FtvU8) z%E5fjA7pva{fa-#YrHJOiVaF@t{*H!>G0wg*Ttb9AsqJ|=5v6XO}pPdq>;~hT=AcM zuJ~i1PZe+OkNhfX#-Ns7NsPf7aZw} z6c_9AzI(DZfsjo4e(y#ATYwINY`Lds!3X1=Aet z%F*j@8gTdM%;;RRQT#WsJD>2LZQ7&9#bdK$t3G4*dItH6=F`U&&IhZb?`Msiztv?_ zAH>P^Y1Yj=XWC=27nP6IZGW#*zb)tRbKG-tpdvLo6NCn6E~Vk!m)Gka?9YADC;xco zfCNhd(80@wcc<(K56;{d4n0P!hL~g662>6MzXtnfv^&Jw@DLvFZDmeQWn!sMN(}pp z1v^3`JA>d%dJ_LY9u`il3xA8DYq`8MA*aC*_4))RCGs^@-xK9%(*e@-do^55W*0ol zGW2G=3wHO?4M<&FeI|VmHp>%smGrq$rA5SJ6Zp-L91cmakN9;7Ak_wrZh2zN$9(AQs<#ya!k9@ZcFzlNfVeGl3X?&YfS9c}ZL zNQJi@ThH3z@TD9a$9*)_$)rfJVL0?!G}|^M*&7GZZ4nmu3|I~KPO z05V>3;d0|}9@?W!7ux8`hcF;oY%K14*`sDb<3R)r8F>v(Ml!g7HiYYTv}N}uDmVGx zlRFZt-O&D=w7BF;s+qXMwYG%vNM5nBO^pGlQ->ipXS%+AfW#g2{p$CV9Q|~kY z?`!RbBilc=w9RD?w5{R=#*n4SRn$G62q;^$dM@y4qYeF_k5moTkrwm*Aup6WG+;1N zwI(Ppt}p3HSW8==4Br3O(YwUD(#?~a$^KN@`gC{%HNxH%iCO{qF-SZ%yFA%T?pyv> z{_yr=A4I23z9#5nxc;5DWbpt`RRO|p-suY)4kM0^m1aU}iIHI4-a@{`9HEUnUh)EW znCYNtQ{)t_6m@4Or%~@aO_l(~xVDtEPDVNg)SxRJaO}wdDtx}-ZI7UU4NK!1c8A;+R z3UxGEn(pFIqt-b5I}O#i{D*7YQdV%zQGAk^Dv620(Pl{@&{DgHs0lKSRdlK5fbz!~ z%%NyIJ6!_uZc-vCM1xx(ZC-Wo%td0oQcHfbd_m3ydi*Q%Zi<{ae%z{j@nAVl)QnYv z1J;nphjUR}Ja9cDf`_+^4=8~syoDfbJf`B$mK-`(iW~{AyJgOTO$QU^!h4aWKWJt> zqiG%w`Z!@N?w+tjmwyu!=t0UuZ*GI&D#qnmh^yUUXj|llI;MNyCAuY^1fEA1&T?fT zwRMqr93kg#V((_$no7%sMq)uIktBZFw-p@CKhu;Y%s|Xjvc2=_EJPx9z!MnS=2H_} zVw@#c@8og#>{G$o`gbpjn^+?H;*$$~&JBcC>v32iAAvCn-@1-DWYVxsxvL)51J`Ut z*>qN_sUsf>qF;+}>AV3+Y{WY^gY#TTa{$UcP$mS0m`$5ad!(6JkJij=ga;+84;$t^ z_e0i4&<>pktrnbaO_oIj} z=dUaJK;E?bg$Oj96}%HnQT0qUn*+a+qukTCZ6t^C<*(lF1qS~)w;u;hu{>oV_nZw}-HPCKdraql=KFnfCI>1%6 zhB-aN5h?6t7|@ZPg_}J)%D0*UcaoR7`1?1vonQY|l0l|0yZ)$JxINedKljuBrxC5! zS>j-PHEQc@>8G-h%)w=|Y_sS@gkOklw2`e%14it3JDOskC_Ba*607?8%dZMQDi zaGL%i%6^=v?!6>Vw!)2W_HfSmUjHq}n6d*_OF#CGC>kpE=dss1G!bn{r8HtJ{Km}Z zbhK)m_H!F23*mP{6Be!HL(Tqnu0A7q)Ot(FJ z8V$JasMVoJc_? z`oDfiBA=DQw}&BVc#E%<$P=`4d7W;`Wn+Us}JID?>pGNxK?W0z+iEKU_-( zc7M=Vh17hqSgdh%_NgnC6HeE)CzwO|yAq>w1ZVd?PsS$2+>HB!obmnH^4Kh;p~omw z{dDD9Tn+8E#t8WhG@p=L0k2`e!QHUTs)MnAJqIWM&hFflp4*}UJZyG8BXCG1VP9JRJ@ zWQr*ket>(H%!u3!z_h(5fp6cK6+mO1Lb60aM1AjGBT#9m)3Elr%OH6sI~8lZ#&-Z!&XM9;Z4s+8Y&j&i`A51^R=j?Jr7~tbsd&YiC5Zzzn(?J(#Q5XOO@2c^B zuYb9|B_9k54xW=UG0_*}!6yFj!7vZ5N=`XNmIbVK{p-MR2eR;oKT!nA7Taz^n}mSf zWur`wd=QDs%it=x*z{ zw3}mcrvKcl1g4L=OJ0Q#XCFdCLP?(pPcyd2c(tK}uPbr1RsjMkqMLZoi* zlYNl$>~0@$|JS=JH)tt(8h3Tf@vlyw5?>mM~B9U|ih zX-gvG`@ZW~|RIlN6b(_i8zR2Z*YbW;)2so+uzYX--u#{?2+TYESMO=?#3uJv!t9`*ZlNX zKQ0_R;C^WwGL-y$E{z8MHU@_53VJV!fo%6BcN+ZUa~zkcKw$X)P%f#H#CPgOB8;N` zv7sXalso|jrTGa<9ze;`JIPYBbWM(1)FKvlV+4^L(Y(b`=N0vYJunG?qpPfMajLB= z1zxf|dSBAysDdf^R=AgzV``LdlA|N5i-mw*^z-w661p24wjb1VX4#&Ra&L(3EVkU`g`dV1l%dM2H{Enx{nl+!y;oB!S2PI5F) zTTEQ!EZ$gTlgT>?tN?hnYEa=D_|>{PZ(|>_kPQeXQ^KABy*Cn4d9Lb{LtRLQbiOrI zC0jHcsj};JsDE24A~@n16xpM8PsWW1fhyMV+8QfsU-hzX_*&ol@^BPEO9tDAeq3Cm z)g(aaScFdxGCExd+Bdk`F8SJm9YN1z7_6C7U`Y7F^O9EYAY3*H8BD3ZuGV^r;>JAw zn1}o{!Fj5B7K1|zK=hcI;?@XQNVIg{NB3oe|Ld82@Od&!5(@X-e?1@_0lhn8EK~66 z`dCL91MUm?N5Ihx*Jv}}knrzw(XN_l>Xjm#MMKJPJ21Fqxi}RS4vFDXV-8Oy|1<<8 zSANlEzEGoRmqzSM_U>{eNp<1EL3{5R#*47w7K3_JkoLR<|ddDo&3vqgeMVRXigveY3O#+<@PAh|R>$BrG$_B-i%7 zD$Ke!cYKjK=5^CkVyGq8@kS|3F&|I2VVzZs062uQq!m#=M%5ay?_r3I!y0PtwN5Z0 zXPfAwc#_*@bw0|L3{-XAI%rjOJeVSCBhRs6nF#$HK?s1Ez4c?b*a^>kB@)4!Kdvo>dCy{tS}E_ujRMUUYSl*mVh@Jb4au&k8wPW@(?iIyo9SW1Pdx zRqV^I345zb3e-YzzYgEpf3*#J&?xw9Jw!JKNIG3)W#qK|f6K$uH6~N>`vXlFc_x`PUc5#{j|_q>gdioSZ9c5s z)CLkIl6`+ZqqQh^*&)sS==_YR%tgx+h8_FZ|0o5MPEeo;)@k`h6cyFj?gZbGs)Vp> zZ{i=8OwC|SmlzvFGf(=PH!@R9s-K>YP~aL)MyM38T*5K~Tw;nj3_kU=eXCSr0l?W} z07$A-bjplXKSvs{F3f+}Z!Lfi4VF-L&1Aan!Cn4QFuLG90^<%W7>){Pcn_)-|G$Qw zqjnhcLGV5b0l786t#IDrEu(gz@_ZWar(xvpfNZLI-xv z&U~WSJMBWpog1$#J_z-ujy^K7lhBxXE_~kLQl|QKXUyyoi1E;$hir6<|47 z<dh;ikR;Iw~Wh!TG>-_by=c)f*B)3l3}u40N8&AX2=m3@)ZE##9{wYmTI>%$v! z+_T%q$!VOhSOribv0Ds1w&-$)4&OGa`VoGtgP_h?* z$C`Dt1&%IY-6lN<5M{vh@}be{K$VjIgx5?%ms=b> zS~|j8xPHOVPC|3$`OR}7AHKLq&+tG5WQu#8yBCncgDwjHnVQSB1b&(%W0 zLsb!i9$Qt6zPmY8jWsoDqDm|Rg6Kr1zl$$eL@y#vy8qZV_&dj01&!PTPD6C}HvF6N z-BEYyKkwBsY5uBru}Zo3FLAq>=z)8j60R%ky2a-Bla=mCA)74exJ`dDjET+sEm=L3 z4z6(ULjpD8+n=pKrwZLKgJ!h#rFE)y?`E|GNHGIskN-@eux?)OGyToqo5~qQ9V|HM zup9JdF#m0nVVC#d%7%TQp~y5`HoRvL{ha7at>0(5Q$FVZ*9Bi^bzoOm>irGpinjqH zsPg^yirlmRe!98)NI>IRQ2sObm2q@vD^50nq2*u+Pw3%W3N}}YMK0}YMBP8ULDAx9 z36kmnSiZf6oO*$GRN5tvud&Eg0Fg!3EA~g0y*Mtj75|_=Lc~6s}(Yg{k9GWpiH)fXT&f=X){GEp5$>a?iik2 z+DiXtyf5j^8h1mZoke0IaR(|~tVRfj0H6Jxb~O-*&({BT|8sJ{465pwI|e1PBq*yy zZc4KreZj+BS6aia(TjhT>KYa-{^Vm1gx_$dq+kI;p=#}5dB@h`E1k1ZWa9v^MBgY@ zZ<>ojL>APb#@4BM{&wHkVd=sb`0Vgvk9k)!sZg<6c@Mr+HPIIxB!8LG`}nDe1c$x> zil@xzF!GrHMr5sVvq4dra(+?8k4uL3`^V8xI?}GcC4NQ$L_dM02Q?jkBtvX`eM>n! zHFM4#s+u1P{SXDVXA5D$29&mglW_u=W0EeNhwA zQnz-d+!lvYH2y3YVq?f9G&F&xh`y8%K1{a%TFo$I>>Twx^uL7bqVoe1>Z#)-h^~D3 z-F?y;M}knhO%PMT)L0Wu{mJu1{$Tz{TqV~3IuIEeexUXN6#u(?&SHd=T2{k1zRaP=Q>HM`0wf&9vDfTNoLJ)PYe?5MZnQB`=C~~>pq^&a(pE@K{`r&aMu4oA zeMO}yRpJ}D?^@WE(0uuP5FZ&0J7Qa;&~1}>2%Ga!^1lutDVTMKI9cK~Buo3f+;%9k z)>v%<{OU*r>%&Ayay@%n3D5brv~Bb@erV%$oA<2x&k8)Uc=5xBwC@zT&hz)o{Owmx znI0bqBi>h1*bMT-8ZhTnwn;|Dm)H-z1Nrwlvm?t~X_-+@@c`0lnx8G$5>9Cid=#a> zg`Z$BC#w0M@8_qkjq@`49_jxha>~jJ74~Mq1RKyDKjB;<>XX`qgHM9?+$!wWP4_5o zrwh`K2ISxDTS$yd1BD#(jy?I@D9OVNz01+?>V=_y@qQxHV-I1EcSKhvcw&8+bC$+! zcA#+%GO>SAz3eiQSj!478D$cLc5L>%k1ptIvoxV&`K~c0~ol99tFE zcN_+?1=ZAoJqy_4Fv1`cVgE<>^iv@}ABItt(4*Ej_S8}nuBEPro))J}V!!I}$b2)l z>AbKT%ioRn9~9drGi7ZwAcaQ1L$eA)JGwhhyd-I+LudcV0#p@-;z;SRm- zqKO2+x{;pyew%;)Bc@iifAa+Vi0jWW`n8Nl!Cy~{GV%qj|M`{a%-xVjdg1SSHb}(L z2F!N9sN-XV#3BQ_xGqIwtl7|cEzj+&qxw8e2V0};At!F)Z4E$o1>RB@S9;tzW5t0C z21m-x4K&{Uw9Rk01(JJE`MP@GH_~^MBgR9RHCP2l(GaiY9L2P4l1CbF&4dPd;3i#>4kMVJ1J)HW2ik)wxjTEkclM}wEX_TN!Zg~DtN6qGCE-7#CU~Y zIDPeJTHZZ@eSlAsllVf5NY=jlNCUU~>=>IOzhd{vFILx&=ny;F>ZWy@^(e<9uU>Jq zN~AvWw!24WuK=3Ce2X@I;I;O>#wd~VEu&9f`fp2Tyj4sKb`qVQNds#ia&JRoS#L$m z;lOdc1hu&gBnL^P2f(2#EVniZL^yo1CVV>EC!2DWG@q3Nmx(Y%M-W_h8sb!3c0Pok*bG4XJu>c1P$BK@3 z?sh?Gk3+G0Y)aiL!l&(b+vFVFCs0rt>I5^tffm z&H7O4L)nw+xV3G?p;AFBz=jBon)eF)SGh^#AZeR&JWU4Jo`fuH-)GKUqbY%ww5&2X0* zUV~t~34SVy@!<@g9o+x6EOfuAl=DgW32}UeFpjaeagmlqFO88lFLJl>35OD4!;ids zmxD~V--bh1#zY4!%rbBMD|F49wweIP`G9zsX)Ak3M?HODPW>jG>%zIum;JQrtk1U2 z@SQBkPsIhc;x`zud>Uj-;ua$>dC+wQK=A9AtN#IM5DB7d?!!|9iYs=?_`ERqh5=UG zKB2kt9_`i*i$GDH7oM|xpME4PBa)b~?E!l{VFrU%q8tK0G~V(xE?RPZtB(GVv12f3 zGfJ++W!06NF$wnE-29Ncg?JSGdoZeOq{N_vsL@KJf71S;hD&M5Y}->W z*2d|-(Mai4hyH3}$Dbgv2jW6kT6Qxp zY}dFmFL?KVcCucG4MN|)!0v`_v$Grt$G>B^KN1G25c$uF2>yDDASLoJ659)ikWF zWB;~&$ajVoy6VKtM@SJBdEKUR@ZEXiT4h1>f19)7m*Qaq!pO@N;KkO{b8?ZfTeME{Eu7dup`!-R8cG}gsw?BtwL zVv9iQueqaSmHfYjY`sWtJH{Vp*}_dkIJ&6$cpeRY;e9N#)MX@c-_NBvQ^LWk$@WpI z3D-I)1+E2f^|H|6ruVYo91$t}7?WP$F*d z4Q%{xy(1poXLAtD@IC%JEfX@Tld3<6kY0l!Nt#-t6FnSR{m&2Cx;1$7S%oY)`j>8t_p9b7j?M1+zK|E?1`i2=1k zGpX0!g#KVICoVl37&xm+o@9pPF)_Kiu;^nbBR!(A4Y2K2`LDBgMTs`4;6;!L+7G1h z6cpc!-R&RRNxXns-ywbwRQ)0*l?V`1gB`8`cYT=T(iE-s!B3CU$bDlP*^En;)rk7-N5RsH{n#-#BM)o)J^Tdde4C_B*( zbKH3*`i8;PD$KehG5=o;R~^vg_q{g;8!=MJ5hIk3v{KTO91}lZ zxs7b-+?#g+s?_t|u5HhGQ{wu=l2Vy?fGQj?*j>!GdGwdVb=y#5BW^hxmQ^8GtLity zoT6L`Rg)-_1fVV^@W!+N+h@Z^spqK2t^*Xo<%V=Ti7B6eJ)OB`vUVeqZ&Z_7zVcCygD(3dyLnGN7mZ-%HXBCAA@Vj=}6EE zKXV<~P-miL#oMF|MsFxu5H^n_h*8oh_D~v2uN3=o7~eR+buz|<1j>3{exx$;GQ=62 z_SgJqeT*4mj7nA3P{Q@;8yj5RpX7oBMRFxxG&yc2)Mq6tP250SbXhz`htEwOroFtnCWQqNSB;7N-h zzB>lObM?}k^bq|96_n4s@d-05F-f zqKm(ka`6S2ZNXG9{sQObH!F>NrP_{W$)NhYyec9mg=?+bIj`YRi7=K8ptxyfJMA>sX zs<_SxmF|gsucIq=4x-fYWH2E3$tEM&iOQX+z4;qW)$4pjqz%PJ8jr6tgfkoM5#rB9 z9!iJd#zX=!<8i;11$k)kang+b+@PJ-S5UP5HQrY03YeAw6k60|l4Vi^1Vh`OD1RiN zo*GcrUzQwQ60PKN3x^HMENzQ`m;vwt@;5Q=8z@ZyPOS{iNotTo97;(+JC=|?u=>6q z3r#3+uKwFiq8t5miCbZMoVV23UQQ*$Wqq{-L@D?uN{N*D_YA;MOv-jRJn|V~yX8?E zX@(wsbdBqGJ30e&Viq{*F+8UI$~~wWIyZXiE~4oF4|fTkuF?`>ARong2}Kt*KEb_V ze*M+h$RxUs0aZg$vh8u7UJ^zh?k^Z~3+j|j0A6AnZ!VI){xCl+NF%V}jsGaH z)YnkH4MJgEYaMHzAb>dNtiYLFDDr?HYRs3#Eirc0tI;DdF)u={nyUgGD_!h+_)=_y z>27nU=Jy{4{3x5dax`UaE^}D@K3w=6b0!aXWfN`Sfm zjHe8&w~X1?!$NLX?^mG}G5>Z%$@b$jrDvQEB0Xu$_}%|VEE+?jj6xX6Epj+s@eu;% zk}LaM2tCQ25VroJwla2GyZ3_>3z;}2hINbpFPobo7Mv;|s{)1NTiGY9Ia0k>Tf86nWwAX*o68TWH-5+UtLRS?|7DfyjJwnxR)j26;Hv1&l#tV<>27f07 z-CU!@fv<(0RU8|q8NJ^?JXa3 zZp&w7ZcD!U>plQ3mnZpznfsF+nF#avQu72bTH8O|e2wQN1oV^F63Y}OcIjYDCmtyI?&C-7J=klTELo{y? z7HLO7z+M;CS;&h6(2L-5AZ1_H4Doq%avIi#r&|G(kg#rxk8OeF(AUQycJ{l7w6p{O zORDn#p&kJ4L{UHeCOjWTS5X5!=mG)Cj$HwI#iy1xZOsOe^>2@XNvq69DIsQEACoL*}@1>lEct@$g0V+nATi*%12vbXk zb%1EiOaRPl+nmPORWUFW>>MU53Z|L2S*bQwk_&U_hk%N}>R$7vLu0qX@N_J?cHNb! zIo_5IDz3xb0k)4rhGKvDf}<3{WW;0yOa-@rWBk1KU=1O z6fA0HB!L2idkxNdWoDYAM?{uz)+WJ}TV%74ga>{lgsh`kHUi)YL-$Ht^0Q?7p=7EY z#z*qS4B$L|zmvnwFK|J!q_yYaR9dSZzfGd2>N(%G`m{$e-V-owVHdp0*pnF?(?2?`eB@6mDyQ)y4b|fWTCxN%mcCr4+(> zkU1htz-c;M^P&D8&dCMcwhnpzL-vLIBcu~j@BS@1C91e&rvY4jh1}3JK9JhF@CwH( za(O-*iaDautq}Wbu3uFHcDJP<34CI<_N7m+8}+}_0PA|56q?k(X*AMFkfVY^-C&nX zGiH<2cU6!@9fSl?pMlu9>W?%#X0ZcN+FyV5&s7aT$^qRH`x2EbGD_UX-?AXcDq%Wl z)Z@$%Pbr_j#OR$Mrjm*4ABAJVY#TaozGrC^&jUv)KI3fKBqm+&T6p@8ztJN{n0zda z|IPXrg!n_|oe<$MD1S9(|w$RGQFh z6?&*^s1vz5uy`R1kP`AnEX!usf~cyv6^0P}ssPPR{T|7AThW(EnEOnD+qyGfi7Kkg zqS_@wn|16akefHBQhBLJfEQz=m>ukR0AB_qb0wgTmuesqXDf%2AHN02QhOmq;3!NK zxR;Yn`D;v*7lxI~x_RkP@tCQK)ky7d;}1v6RWyI<7!4;p^3f}-#6u%cjS>BJUg zul*5bZUXxL4KRk-et>7M-WYe>A}>3{u9@p&oC(Xsj)ceDM%~>p&&2+O^)j)^iMizc zZwlBYMtsLI34{Vd3Ci=q8ax|N1-Jo0x&m`3- z4NYK#J** z+{sM*kKs&F)8xY3y@s1>@b*y$bwb*h0TU(p_iGpZ16eSRdFAzrP}H|SGSU@@A}|c1 z0(=BS-*(4w4z0y~@_fKtQ$4{8u59Cu{sjjkk?0pblb~>VSnopExawc>$BcwilhK|5 z?Iyqiq*K#qz9DBA&3LX(q|%{uQ3s-fMFUoD8xWHMVNX~h2+p32zch>~kXw%GDx;As zhzywn8YQ0|qBJ6WP$&UI8C4~H=bj|N(Mkun_oFF{`Jc&r0TXzB7SJA56v~59Khvny z$83A6t#~PU&UkSrTt%7`0fdgBaNn^#YH>m>lvdysfHQr2PCuEm~YN%o|B5b3S6p8OAoTw3D#a@2y zzwn`>);>21o`H#S!AkAjnh_zEA)FBj77(D1^4_3`(V1A|eGHOPMAKWgUjE%^(yYL$ z#a16ZjAMz{lUZ^FvX~Na)vw(FdsBN#cs%3`#|}GGkH0}lcfbk}$m;J)dr`>{&(E@wmcD>lzds8`=~kekkY3YUsE$B!_Na~Su{)mP_=mK}(k75) z*Z?#neye#smi9$E(;`!BEG3O>kq4_tKddKZ4NAJ$eR4)TXeJW?j~Ge;?3%CPeiYvM zBs}cS`}iub68rYc+vQ|o(dWGsEzlR13b7e(t$`J2nZ>7a-`$AmTC7B7(S~21B|~Z2 zw0~(OOIxj!y%K)=gbgzc?KSf0D|M-TKOTxEO+-x!37mZ2qgo9lbd@_6FMm+g?1G5%49CdZmOftn%K3~JEW0}n@TE9A7!=w@iQaD024y3+H&Y5iB9wyjA> z;Z%#5J7Ag-8OfmcbkNVP3bX=^=4+a`eA5#o>OBs<4`)T-J3PQ$2Q@M8 zY&?1U_DmNnlz{?StW+#(WTzVg##$?KT|G7AXUyA1hq2v6SVn@H@!`|-m;Je;pmw=V z(dr%!ceCl>*_$*7r15&JhQmqh-bdH&hDya9%rh~a7MJT6q1kfK9Jid3_Sxd}4~>=S z^C4M(NV+2^Y2&rBILtD8X2ie6Uy5kU4)Dg0zK{DTreh3B6lY_F`7pNI?=oTegO(w4 zl96f(a)7Fh49ebiv{^UKxtG$ZPMyshhOdYIHq>UVv5{|Q3Fk+u9g-sxK*c*)V{67B#27EtRc{_XI59slLgr^9P?E6Sq+ItX>lk{yWS$b}G$NQaqW~nr4(qVT@ zLgxd~F^m&evk0c;yxbMhHQ;9%`Sd5_+&$e#*E4!(7JMX;)A1$G1%*+&6U-?ACj#rt zi&0*d>Rx2`cmg=Ojy^n#%+}-;<0anxJTj`Zg2yjBb?lu;t+QcEm6vwwYOBn5%UKC4 zSj$g>d9YMG++jA_@IpsmZ(8+3@*50=osiB*six2{|nrWc0Mo2K3n0e6pkSzkOB5CcshJS(4}JLsQ@{eIAk^ANf`?j(xle_YzTNLbgAQuzZ{H#IU2cLBn$wpL2gyvKT0*v!Fzv zL>55(Gs9)_&OXmp=kNaN2wCZfh5@}28sriM@F`J-Ncy|zoAw`yJCnP0ts{>z_>b7i zMOy?``(8f!crRSaQjDXxq2d&={92ZsmEv%x$}#oWyV|xn-99w2oN+i(N6pF0!#PuX zw_?;8=_jD;uK8%mT3bs>oZ|*j)Cl_P8(M#)&jtDZk*d=0IUA+i(I=f?jj&eobFD(* zk>AuxUt@nC_nMEhahwDcw&qL)Q=Xa@w&sPzD+b?zaGVQlo_gUw>AcOJ3WA*O=>)6F zR44}Dm8l3yKMlTe`cfxYv+janU$Iajhm9lb0_PpD@xXJyO(~dW?d8Og%*a;cDe=r% zBM0???99IZ$QJh0?8k-dzKm)!$EC~K`EifpIm65`8D3J!EFTfXaY~uHu5hyMdCsfA zvi7xbg*q!f{8R*Z1ZAXRY(V~iHE@tav6XHuWwqpz^fX_m6+I)2YDLWmpUDPJawuI2 zPrTnx3MM+A(@{_}-*Ld(t@6vCi%uN88@VJq7~glhgr64aT)w^-e5-I}jd#^N7sThd6_+)-Z zfoTnfACRXu%NG7~b~LVV>4b-5x5Sq>LYoyP{@^uQL4m@7tBe=0^Y^VGLXoHJr|*I( znk6Uv@ft0pfs%oJjB{F-%UfBO>}zKG@t5qUGcf`a8Zg{E-IO&q~ z@_^{t9>2R!<12$67q^Rr#)nnv#(AeNcr#lg7`#o(xBbQv7_Y0ZNdLaiG8mw0te93; z^29v=5!$t2aHoqX@{H1JOqYe&te=_&(*aAIKSuk|v*?o3ko0~5MGZ`m8Y3gba+n(* z3*%so{10kDU8UQYe<1V;Vn7DRv%X_*K{9g3=0KF z4L&HaGJ7gE-mLsoPDAV~!oH90Q0p+_AZn?7ylPS+vD^FQ)IF$-{h-01U{9=JYjf?G zc|0Y2ZXv2weQ563J*kd@M?Y0>i_?a|KnPP0f89C%U6|i{g#;~!RG0qhBe2S%CDNaU zveMtL2dH0$7dX80({NdV({gSo3U}wux8LT*DEI_|!tP@~qm0Q!NqQ_i)wJ4Y}IsC?84QdrUM5rDu!h+~q?2 zj~F@^{CEIOEnHTYeIwxB@rQSrD}8gTX3hg(Qgfy`sq%WQZ>sIwvq|&Fr&=>&CC>rH!+f#c@zNt!Mqw?Y0F$g*M@lVjF$4x`}qy zVI9=Crc5-0RkNs#42M7fNPR2R>8jCM9JhwA+cOdoqED0>p!nmOVP#)WSSIXwj~o+A zX;tRP9=cZ8m7C+}F5Qo%57O{PYAWMSTX4L{?g8HoIe5Za3G1|e(gYjZe{9Gh#34fe zZM$|*wQEiG;P0~IrnjC<;xO_H*?VE?+FLx7(rFDf8}DQoX*w>etX^C$%C=^^CfQ0L z=T3h6JC@tM3eYy&@hNCm2^btA!BzS@jfF<;12;XilZI-6FJ~GLSe(9oR7Y;tj*7V- zk0pam5D;{#nz%!1>?aNgy8FrCZPYEhAPL_IZx!)Tysc&~CAs7R@($+qII>$YUEdT%j literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.3.auxiliary.png b/tests/goldens/3ds/pocket-shell.3.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..e29beeecf4931a9044feafc63a9e6ff1017035be GIT binary patch literal 33433 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.3.png b/tests/goldens/3ds/pocket-shell.3.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbf18c9db04014f51e27abb5d24e6d5785564f6 GIT binary patch literal 63310 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.48.auxiliary.png b/tests/goldens/3ds/pocket-shell.48.auxiliary.png new file mode 100644 index 0000000000000000000000000000000000000000..06eaa9a1e59e6848656d2ad3299c534a34eabb24 GIT binary patch literal 24546 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.48.png b/tests/goldens/3ds/pocket-shell.48.png new file mode 100644 index 0000000000000000000000000000000000000000..dbf1b4467858043986376c70e23c8309b61230a7 GIT binary patch literal 24289 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.60.png b/tests/goldens/3ds/pocket-shell.60.png new file mode 100644 index 0000000000000000000000000000000000000000..a1c95cdffe354ffbdbbd6aa5d26845714bbc6b7d GIT binary patch literal 24592 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 literal 0 HcmV?d00001 diff --git a/tests/goldens/3ds/pocket-shell.84.png b/tests/goldens/3ds/pocket-shell.84.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2b5f8a32d9b697eed887126568739199d57430 GIT binary patch literal 24414 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