feat(guide): Enhance guide navigation with dynamic sections, tooltips, and improved content loading

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
Claude Code 2026-04-01 06:23:50 -07:00
parent 83301c2701
commit 00e0704413

View file

@ -2,12 +2,27 @@ import { lazy, Suspense, useState, useCallback, useMemo, type ReactElement } fro
import { Routes, Route, Navigate, useSearchParams } from 'react-router-dom'
import styled from 'styled-components'
import { ThemeProvider } from '@lilith/ui-theme'
import { GuideDataProvider, type GuideDataContextValue } from '@magic-civ/guide-engine'
import { GuideLayout } from '@/components/layout/GuideLayout'
import { WelcomeModal } from '@/components/welcome/WelcomeModal'
import { EncyclopediaModal } from '@/components/EncyclopediaModal'
import { usePlayerPreferences, type PlayerPreferences, type ColorMode, type FontSize, FONT_SIZE_PX } from '@/hooks/usePlayerPreferences'
import { PreferencesProvider, usePreferences, usePreferencesReroll, type ConcreteRace, type ConcreteGender } from '@/contexts/PreferencesContext'
import { getThemeForPreferences } from '@/theme/fantasy-theme'
import {
techTierMap, allTerrains, allKeywords, climateSpec, climateParams, hydrologyParams,
allEventCategories, crossTriggers, weatherEvents, leyChanneling,
qualityUpThreshold, qualityDownThreshold, mountainRainShadowBlock,
windBands, terrainModifiers,
} from '@/data/engine'
import {
allUnits, allSpells, allBuildings, allWonders, allRaces,
allResources, allImprovements, allGovernments, allEras, allVictories,
promotionsData, infusionConfig, infusionTrees, disciplinesData,
allTechs, allItems, allMapTypes,
allEncyclopediaEntries, encyclopediaCategories,
playerBuildings, npcBuildings,
} from '@/data/game'
// The Map
const TerrainPage = lazy(() => import('@/pages/TerrainPage'))
@ -73,6 +88,47 @@ const DevSpritesPage = lazy(() => import('@/pages/DevSpritesPage'))
const DEFAULT_PREFS: PlayerPreferences = { race: 'random', gender: 'random', name: '', colorMode: 'dark', dyslexicFont: false, fontSize: 'md' }
const guideData: GuideDataContextValue = {
packId: 'age-of-dwarves',
packName: 'Age of Dwarves',
races: allRaces,
units: allUnits,
buildings: allBuildings,
spells: allSpells,
techs: allTechs,
keywords: allKeywords,
terrains: allTerrains,
resources: allResources,
improvements: allImprovements,
governments: allGovernments,
eras: allEras,
victories: allVictories,
mapTypes: allMapTypes,
items: allItems,
encyclopediaEntries: allEncyclopediaEntries,
encyclopediaCategories,
promotionsData,
disciplinesData,
infusionConfig,
infusionTrees,
playerWonders: allWonders,
playerBuildings,
npcBuildings,
climateSpec,
climateParams,
hydrologyParams,
weatherEvents,
windBands,
qualityUpThreshold,
qualityDownThreshold,
mountainRainShadowBlock,
allEventCategories,
crossTriggers,
leyChanneling,
terrainModifiers,
techTierMap,
}
export default function App(): ReactElement {
const { preferences, isFirstVisit, save } = usePlayerPreferences()
const [searchParams] = useSearchParams()
@ -165,21 +221,25 @@ export default function App(): ReactElement {
if (noGui) {
return (
<PreferencesProvider preferences={activePrefs}>
<RaceThemeProvider colorMode={activePrefs.colorMode} dyslexicFont={activePrefs.dyslexicFont}>
<NoGuiShell>{routes}</NoGuiShell>
<EncyclopediaModal />
</RaceThemeProvider>
</PreferencesProvider>
<GuideDataProvider data={guideData}>
<PreferencesProvider preferences={activePrefs}>
<RaceThemeProvider colorMode={activePrefs.colorMode} dyslexicFont={activePrefs.dyslexicFont}>
<NoGuiShell>{routes}</NoGuiShell>
<EncyclopediaModal />
</RaceThemeProvider>
</PreferencesProvider>
</GuideDataProvider>
)
}
return (
<PreferencesProvider preferences={activePrefs}>
<AppShell save={save} showWelcome={showWelcome} setShowWelcome={setShowWelcome} preferences={activePrefs}>
{routes}
</AppShell>
</PreferencesProvider>
<GuideDataProvider data={guideData}>
<PreferencesProvider preferences={activePrefs}>
<AppShell save={save} showWelcome={showWelcome} setShowWelcome={setShowWelcome} preferences={activePrefs}>
{routes}
</AppShell>
</PreferencesProvider>
</GuideDataProvider>
)
}