Files
punktfunk/clients/shared
enricobuehler aec6ccf887 feat(clients/apple): the shell's push/pop becomes the console's spring, and the contract is pinned
The fourth slice of the console-UI parity port (design/apple-console-ui-parity.md, PR-4):

- `ConsoleContract.swift` (PunktfunkShared): `ConsoleMotion` — the vectors' `motion_spring`
  numbers (response 0.42, damping 0.88, slide 36, scales 0.985/0.96, reveal 0.4, interruptible)
  — and `GpSettingsTab`, moved out of the executable target so `ConsoleVectorsTests` can reach
  both. `testTabNamesMatchTheSharedVectors` (this client's trailing About is its own; the
  desktop's Input is `desktop_only`) and `testMotionMatchesTheSharedVectors` (the v2 block) join
  the palette test; the vectors' v1 `$deprecated` note now names Android as the last v1 reader.
- `GamepadShellMotion.screen` is `.spring(0.42, 0.88)` — the console's `springs::NAV` — instead
  of the 0.26 s ease-out-cubic; Reduce Motion crossfades on the desktop's `REDUCED_NAV`
  (0.22, 1.0) with no slide and no scale, instead of snapping.
- Interruptible: while a push is in flight no layer owns the controller, so a zero-size
  `MidPushBackCatcher` takes B alone and clears the trigger that raised the top screen — the same
  spring carries it back down, the way the desktop retargets its NAV spring to 0. A and the rest
  stay dropped until the spring has passed 0.85 of its travel (`inputOpensAfter`, 0.20 s), not
  until a tween has finished (0.28 s): the wall is gone, the double-tap protection stays.
- The library layer's place stack rides the same spring and the same reduce-motion crossfade.
2026-08-18 11:36:56 +02:00
..