Add account components 386-405; Reduce setting, PinInput Cmd+V

Twenty account components: SettingsList, OptionCycler, KeyBindings,
ControllerMap, ProfileCard, CharacterCreator, LoginForm, PasswordGrid,
SessionList, LanguagePicker, PalettePicker, VolumeMixer,
DifficultySelect, AccessibilityOptions, AccountSwitcher, PlayerSelect,
TwoFactor, About, PatchNotes and FeedbackForm.

The components never check credentials, and no secret reaches the log:
LoginForm reports Submitted and the caller counts Failures; each new
failure clears the password, refocuses it, shakes the form and names no
field. TwoFactor builds on input.PinInput and drains an epoch-aligned
period bar. PalettePicker draws each tile in its own palette on a
pixel.Pad grid.

pixel.Settings.Reduce stills motion like the system preference, the
micro font gains '?', display.Face draws avatar faces anywhere, and
input.PinInput pastes on Cmd+V as native hosts send it.
This commit is contained in:
ZacharyZhang-NY committed 2026-10-12 08:21:39 -04:00
1 parent 51af14709d
commit c745b082a9
38 files changed
+2788 -13

No files matched your search

+3 -1
View File
@@ -24,6 +24,8 @@ type Settings struct {
Now func() time.Time
// Inert controls take no input, as under a busy veil.
Inert bool
// Reduce stills motion, as the system preference does.
Reduce bool
}
// Kit is one frame's settings, captured by components.
@@ -92,7 +94,7 @@ func K(c *ui.Context) Kit {
if s.Now != nil {
now = s.Now()
}
return Kit{pal: s.Palette, dot: float32(s.Dot), locale: s.Locale, now: now, clock: s.Now, reduce: c.Preferences().ReduceMotion}
return Kit{pal: s.Palette, dot: float32(s.Dot), locale: s.Locale, now: now, clock: s.Now, reduce: c.Preferences().ReduceMotion || s.Reduce}
}
func frameOf(c *ui.Context) *frame {