• v0.10.3: A actually fires, drawer paths clip from the head
    release / Build Windows .zip (push) Canceled after 0s

    LastSkywalker released this 2026-06-01 06:05:21 +03:00 | 34 commits to main since this release

    Two follow-ups on v0.10.2:

    1. A button on gamepad-focused element didn't click. v0.10.2 set
      data-gs-focused for the visual ring AND called .focus(), but the
      click handler still read document.activeElement to find the
      target — and WebView2 sometimes leaves activeElement at
      right after a programmatic .focus() on a button (timing /
      stacking-context quirk). The visual ring was right, the click
      target was wrong.

      Fix: track the focused element in a focusedRef ourselves
      (ShellSettingsPage + GameDrawer). setGamepadFocus updates the
      ref alongside the attribute + .focus() call, and the A handler
      reads focusedRef.current directly — no more reliance on the
      browser's activeElement. moveFocus also prefers focusedRef
      so a stale activeElement can't jump the cursor back.

      Bonus: A now also toggles checkbox/radio inputs (previously
      skipped along with text inputs). Settings has the gs-check
      pack-toggle and gs-radio rows; the user expectation is "A on
      the focused row toggles it", and .click() on a checkbox does
      exactly that. Text/number/select still skipped because A there
      would be a no-op.

      Enter (keyboard) mirrors A for the same controls, so a
      keyboard-only user gets the same activation semantics.

    2. GameDrawer rows overflowed wide on long file paths.
      v0.10.0 fixed the horizontal scrollbar with overflow-x-hidden,
      but the inner content still grew past the right edge and got
      chopped — losing the END of paths is dumb (the meaningful part
      is the file name, not "C:\Program Files (x86)\SteamLibrary…").

      New .truncate-start utility (style.css): direction:rtl +
      unicode-bidi:plaintext + text-overflow:ellipsis — keeps the
      text rendered LTR for ASCII paths but reverses the truncation
      axis so the head gets eaten with "…" and the tail (game
      folder + filename) stays visible.

      Applied to install rootPath / exePath, save-loc path, snapshot
      archivePath. Chips rows above the paths got flex-wrap so a
      stack of badges can't push the layout wide either. Drawer
      max-width bumped 3xl → 4xl for headroom alongside the action
      buttons on the right.

    Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com

    Downloads