1package app23import (4 "github.com/FelineStateMachine/puzzletea/registry"5 sessionflow "github.com/FelineStateMachine/puzzletea/session"6 "github.com/FelineStateMachine/puzzletea/store"7 "github.com/FelineStateMachine/puzzletea/ui"89 tea "charm.land/bubbletea/v2"10)1112func (m model) handleGameSelectEnter() (tea.Model, tea.Cmd) {13 entry, ok := selectedCategoryEntry(m.nav.gameSelectList.SelectedItem())14 if !ok {15 return m, nil16 }17 m.nav.selectedCategory = entry18 m.nav.modeSelectList = ui.InitList(buildModeDisplayItems(entry), entry.Definition.Name+" - Select Mode")19 m.nav.modeSelectList.SetSize(min(m.width, 64), min(m.height, ui.ListHeight(m.nav.modeSelectList)))20 m.state = modeSelectView21 return m, nil22}2324func (m model) handleModeSelectEnter() (tea.Model, tea.Cmd) {25 item := unwrapModeDisplayItem(m.nav.modeSelectList.SelectedItem())26 mode, ok := item.(registry.ModeEntry)27 if !ok {28 return m, nil29 }30 m.nav.selectedModeTitle = mode.Definition.Title31 cmd := newSessionController(&m).startSpawn(mode.Spawner, spawnRequest{32 source: spawnSourceNormal,33 name: sessionflow.GenerateUniqueName(m.store),34 gameType: m.nav.selectedCategory.Definition.Name,35 modeTitle: m.nav.selectedModeTitle,36 run: store.NormalRunMetadata(),37 returnState: modeSelectView,38 exitState: mainMenuView,39 })40 return m, cmd41}4243func (m model) handleContinueEnter() (tea.Model, tea.Cmd) {44 idx := m.cont.table.Cursor()45 if idx < 0 || idx >= len(m.cont.games) {46 return m, nil47 }48 rec := m.cont.games[idx]49 m, _ = m.importAndActivateRecord(rec)50 return m, nil51}5253func (m model) persistCompletionIfSolved() model {54 newSessionController(&m).persistCompletionIfSolved()55 return m56}