@sudobility/sudojo_lib 0.0.81 → 0.0.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/authProviders.js.map +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useBoardEntry.js.map +1 -1
- package/dist/hooks/useDailyGame.js.map +1 -1
- package/dist/hooks/useGame.js.map +1 -1
- package/dist/hooks/useGamePersistence.js.map +1 -1
- package/dist/hooks/useGamePlay.d.ts +2 -2
- package/dist/hooks/useGamePlay.d.ts.map +1 -1
- package/dist/hooks/useGamePlay.js +3 -2
- package/dist/hooks/useGamePlay.js.map +1 -1
- package/dist/hooks/useGameSession.js.map +1 -1
- package/dist/hooks/useGameTeaching.js.map +1 -1
- package/dist/hooks/useGameTimer.d.ts +20 -8
- package/dist/hooks/useGameTimer.d.ts.map +1 -1
- package/dist/hooks/useGameTimer.js +24 -13
- package/dist/hooks/useGameTimer.js.map +1 -1
- package/dist/hooks/useHint.js.map +1 -1
- package/dist/hooks/useLearning.js.map +1 -1
- package/dist/hooks/useLevelGame.js.map +1 -1
- package/dist/hooks/useLevels.js.map +1 -1
- package/dist/hooks/useLocalStorage.js.map +1 -1
- package/dist/hooks/useSudoku.js.map +1 -1
- package/dist/hooks/useTechniques.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/stores/gamePlayStore.d.ts +1 -1
- package/dist/stores/gamePlayStore.d.ts.map +1 -1
- package/dist/stores/gamePlayStore.js +18 -2
- package/dist/stores/gamePlayStore.js.map +1 -1
- package/dist/test/setup.js.map +1 -1
- package/dist/types/currentGame.d.ts +6 -0
- package/dist/types/currentGame.d.ts.map +1 -1
- package/dist/types/currentGame.js.map +1 -1
- package/dist/types/display.js.map +1 -1
- package/dist/types/game.js.map +1 -1
- package/dist/types/gamePersistence.js.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/progress.js.map +1 -1
- package/dist/types/settings.js.map +1 -1
- package/dist/types/subscription.js.map +1 -1
- package/dist/types/sudoku.js.map +1 -1
- package/dist/utils/board.js.map +1 -1
- package/dist/utils/digitDisplay.js.map +1 -1
- package/dist/utils/hintExplanation.d.ts.map +1 -1
- package/dist/utils/hintExplanation.js +2 -0
- package/dist/utils/hintExplanation.js.map +1 -1
- package/dist/utils/i18nKeys.js.map +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/localizedHint.js.map +1 -1
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/subscription.js.map +1 -1
- package/dist/utils/sudokuPresenter.js.map +1 -1
- package/dist/utils/sudokuScrambler.d.ts +1 -1
- package/dist/utils/sudokuScrambler.d.ts.map +1 -1
- package/dist/utils/sudokuScrambler.js +17 -6
- package/dist/utils/sudokuScrambler.js.map +1 -1
- package/dist/utils/technique.js.map +1 -1
- package/dist/utils/theme.js.map +1 -1
- package/dist/utils/time.js.map +1 -1
- package/dist/utils/validation.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authProviders.js","sourceRoot":"","sources":["../../src/config/authProviders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,qDAAqD;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,IAAI;CACtB,CAAC"}
|
|
1
|
+
{"version":3,"file":"authProviders.js","sourceRoot":"","sources":["../../src/config/authProviders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,qDAAqD;AACrD,MAAM,CAAC,MAAM,sBAAsB,GAAwB;IACzD,SAAS,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,IAAI;CACtB,CAAC","sourcesContent":["/**\n * Shared auth provider configuration\n *\n * Single source of truth for which authentication providers are enabled\n * across all Sudojo apps (web and mobile).\n */\n\n/** Available authentication provider types */\nexport type AuthProviderType = 'google' | 'apple' | 'email';\n\n/** Configuration for enabled auth providers */\nexport interface AuthProvidersConfig {\n /** Which providers to enable */\n providers: AuthProviderType[];\n /** Enable anonymous sign-in fallback */\n enableAnonymous?: boolean;\n}\n\n/** Default auth providers config used by all apps */\nexport const DEFAULT_AUTH_PROVIDERS: AuthProvidersConfig = {\n providers: ['google', 'email'],\n enableAnonymous: true,\n};\n"]}
|
package/dist/config/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["export type { AuthProviderType, AuthProvidersConfig } from './authProviders';\nexport { DEFAULT_AUTH_PROVIDERS } from './authProviders';\n"]}
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlD,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ9D,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQ7D,sBAAsB;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMvE,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,2CAA2C;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlD,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ9D,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQ7D,sBAAsB;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMvE,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,2CAA2C;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOhD,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC","sourcesContent":["/**\n * Hook exports for Sudojo library\n */\n\n// Levels hooks\nexport { useLevel, useLevels } from './useLevels';\nexport type {\n UseLevelOptions,\n UseLevelResult,\n UseLevelsOptions,\n UseLevelsResult,\n} from './useLevels';\n\n// Techniques hooks\nexport { useTechnique, useTechniques } from './useTechniques';\nexport type {\n UseTechniqueOptions,\n UseTechniqueResult,\n UseTechniquesOptions,\n UseTechniquesResult,\n} from './useTechniques';\n\n// Learning hooks\nexport { useLearning, useLearningItem } from './useLearning';\nexport type {\n UseLearningItemOptions,\n UseLearningItemResult,\n UseLearningOptions,\n UseLearningResult,\n} from './useLearning';\n\n// Game hooks (legacy)\nexport { useGame } from './useGame';\nexport type { UseGameOptions, UseGameResult } from './useGame';\n\n// Teaching hooks\nexport { useGameTeaching } from './useGameTeaching';\nexport type {\n UseGameTeachingOptions,\n UseGameTeachingResult,\n} from './useGameTeaching';\n\n// Sudoku hooks (ported from renderable)\nexport { useSudoku } from './useSudoku';\nexport type { UseSudokuOptions, UseSudokuResult } from './useSudoku';\n\n// Game fetching hooks (with auth/subscription handling)\nexport { useLevelGame } from './useLevelGame';\nexport type {\n UseLevelGameOptions,\n UseLevelGameResult,\n GameFetchStatus,\n} from './useLevelGame';\n\nexport { useDailyGame } from './useDailyGame';\nexport type { UseDailyGameOptions, UseDailyGameResult } from './useDailyGame';\n\n// Game timer hook\nexport { useGameTimer } from './useGameTimer';\nexport type { UseGameTimerOptions, UseGameTimerResult } from './useGameTimer';\n\n// Game persistence hooks\nexport { useGamePersistence, useAutoSave } from './useGamePersistence';\nexport type {\n UseGamePersistenceOptions,\n UseGamePersistenceResult,\n} from './useGamePersistence';\n\n// Local storage hook\nexport { useLocalStorage } from './useLocalStorage';\n\n// Hint hook\nexport { useHint } from './useHint';\nexport type {\n UseHintOptions,\n UseHintResult,\n HintBoardData,\n HintReceivedData,\n HintAccessError,\n} from './useHint';\n\n// Game play hook (current game management)\nexport { useGamePlay } from './useGamePlay';\nexport type { UseGamePlayOptions, UseGamePlayResult } from './useGamePlay';\n\n// Board entry hook\nexport { useBoardEntry } from './useBoardEntry';\nexport type {\n UseBoardEntryOptions,\n UseBoardEntryReturn,\n ValidatedPuzzle,\n} from './useBoardEntry';\n\n// Game session hook\nexport { useGameSession } from './useGameSession';\nexport type {\n UseGameSessionOptions,\n GameSessionResult,\n GameFinishResult,\n} from './useGameSession';\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBoardEntry.js","sourceRoot":"","sources":["../../src/hooks/useBoardEntry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useBoardEntry.js","sourceRoot":"","sources":["../../src/hooks/useBoardEntry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for managing Sudoku board entry mode state\n * Allows users to enter given clues for a custom puzzle\n */\n\nimport { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { SudokuCell } from '../types';\nimport { useSolverValidate } from '@sudobility/sudojo_client';\nimport type { NetworkClient } from '@sudobility/types';\n\nexport interface ValidatedPuzzle {\n puzzle: string;\n solution: string;\n}\n\nexport interface UseBoardEntryOptions {\n networkClient: NetworkClient;\n baseUrl: string;\n token: string;\n}\n\nexport interface UseBoardEntryReturn {\n /** 81 cells with given values only */\n cells: SudokuCell[];\n /** Currently selected cell index */\n selectedIndex: number | null;\n /** Whether validation is in progress */\n isValidating: boolean;\n /** Validation error message key */\n validationError: string | null;\n /** Validated puzzle data (puzzle + solution) */\n validatedPuzzle: ValidatedPuzzle | null;\n /** Select a cell by index */\n selectCell: (index: number) => void;\n /** Set a given value at the selected cell */\n setGiven: (value: number) => void;\n /** Erase the selected cell */\n erase: () => void;\n /** Get the puzzle as an 81-character string */\n getPuzzleString: () => string;\n /** Trigger validation */\n validate: () => void;\n /** Reset to empty board */\n reset: () => void;\n /** Number of clues entered */\n clueCount: number;\n /** Set cells from an 81-character puzzle string */\n setCellsFromPuzzle: (puzzle: string) => void;\n}\n\n/**\n * Create an empty 81-cell board for entry mode\n */\nfunction createEmptyBoard(): SudokuCell[] {\n return Array.from({ length: 81 }, (_, index) => ({\n index,\n solution: null,\n given: null,\n input: null,\n pencilmarks: null,\n }));\n}\n\n/**\n * Convert cells to 81-character puzzle string\n * '0' for empty, '1'-'9' for given values\n */\nfunction cellsToPuzzleString(cells: SudokuCell[]): string {\n return cells.map(cell => cell.given?.toString() ?? '0').join('');\n}\n\n/**\n * Count the number of non-empty cells (clues)\n */\nfunction countClues(cells: SudokuCell[]): number {\n return cells.filter(cell => cell.given !== null).length;\n}\n\n/**\n * Create a board from an 81-character puzzle string\n * '0' or '.' for empty, '1'-'9' for given values\n */\nfunction puzzleStringToCells(puzzle: string): SudokuCell[] {\n if (puzzle.length !== 81) {\n return createEmptyBoard();\n }\n\n return Array.from({ length: 81 }, (_, index) => {\n const char = puzzle.charAt(index);\n const value = parseInt(char, 10);\n const given = value >= 1 && value <= 9 ? value : null;\n\n return {\n index,\n solution: null,\n given,\n input: null,\n pencilmarks: null,\n };\n });\n}\n\nexport function useBoardEntry({\n networkClient,\n baseUrl,\n token,\n}: UseBoardEntryOptions): UseBoardEntryReturn {\n const [cells, setCells] = useState<SudokuCell[]>(createEmptyBoard);\n const [selectedIndex, setSelectedIndex] = useState<number | null>(null);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [validatedPuzzle, setValidatedPuzzle] =\n useState<ValidatedPuzzle | null>(null);\n const [shouldValidate, setShouldValidate] = useState(false);\n\n // Compute puzzle string for validation\n const puzzleString = useMemo(() => cellsToPuzzleString(cells), [cells]);\n const clueCount = useMemo(() => countClues(cells), [cells]);\n\n // Use the solver validate hook\n const { data: validateData, isLoading: isValidating } = useSolverValidate(\n networkClient,\n baseUrl,\n token,\n { original: puzzleString },\n {\n enabled: shouldValidate && clueCount >= 17,\n retry: false,\n }\n );\n\n // Track whether we've already processed this validation result\n const processedDataRef = useRef<typeof validateData | null>(null);\n\n // Handle validation result\n useEffect(() => {\n if (!shouldValidate || isValidating) return;\n if (!validateData) return;\n // Avoid re-processing the same result\n if (processedDataRef.current === validateData) return;\n processedDataRef.current = validateData;\n\n // ValidateData has board.solution\n const solution = validateData.data?.board?.solution;\n if (validateData.success && solution) {\n setValidatedPuzzle({\n puzzle: puzzleString,\n solution,\n });\n setValidationError(null);\n } else if (validateData.error) {\n // Validation failed with specific error\n const errorMsg = validateData.error.toLowerCase();\n if (errorMsg.includes('multiple') || errorMsg.includes('not unique')) {\n setValidationError('enter.errors.multipleSolutions');\n } else if (\n errorMsg.includes('cannot solve') ||\n errorMsg.includes('no solution')\n ) {\n setValidationError('enter.errors.noSolution');\n } else {\n setValidationError('enter.errors.validationFailed');\n }\n setValidatedPuzzle(null);\n } else {\n // Unexpected response - success but no solution\n console.error('Unexpected validation response:', validateData);\n setValidationError('enter.errors.validationFailed');\n setValidatedPuzzle(null);\n }\n setShouldValidate(false);\n }, [validateData, shouldValidate, isValidating, puzzleString]);\n\n // Select a cell\n const selectCell = useCallback((index: number) => {\n if (index >= 0 && index < 81) {\n setSelectedIndex(index);\n }\n }, []);\n\n // Set a given value at the selected cell\n const setGiven = useCallback(\n (value: number) => {\n if (selectedIndex === null || value < 1 || value > 9) return;\n\n setCells(prevCells => {\n const newCells = [...prevCells];\n const existing = newCells[selectedIndex];\n if (existing) {\n newCells[selectedIndex] = { ...existing, given: value };\n }\n return newCells;\n });\n\n // Clear validation state when board changes\n setValidationError(null);\n setValidatedPuzzle(null);\n },\n [selectedIndex]\n );\n\n // Erase the selected cell\n const erase = useCallback(() => {\n if (selectedIndex === null) return;\n\n setCells(prevCells => {\n const newCells = [...prevCells];\n const existing = newCells[selectedIndex];\n if (existing) {\n newCells[selectedIndex] = { ...existing, given: null };\n }\n return newCells;\n });\n\n // Clear validation state when board changes\n setValidationError(null);\n setValidatedPuzzle(null);\n }, [selectedIndex]);\n\n // Get puzzle string\n const getPuzzleString = useCallback(() => {\n return puzzleString;\n }, [puzzleString]);\n\n // Trigger validation\n const validate = useCallback(() => {\n // Check minimum clues\n if (clueCount < 17) {\n setValidationError('enter.errors.notEnoughClues');\n return;\n }\n\n // Clear previous state and trigger validation\n setValidationError(null);\n setValidatedPuzzle(null);\n setShouldValidate(true);\n }, [clueCount]);\n\n // Reset to empty board\n const reset = useCallback(() => {\n setCells(createEmptyBoard());\n setSelectedIndex(null);\n setValidationError(null);\n setValidatedPuzzle(null);\n setShouldValidate(false);\n }, []);\n\n // Set cells from puzzle string\n const setCellsFromPuzzle = useCallback((puzzle: string) => {\n setCells(puzzleStringToCells(puzzle));\n setSelectedIndex(null);\n setValidationError(null);\n setValidatedPuzzle(null);\n setShouldValidate(false);\n }, []);\n\n return {\n cells,\n selectedIndex,\n isValidating,\n validationError,\n validatedPuzzle,\n selectCell,\n setGiven,\n erase,\n getPuzzleString,\n validate,\n reset,\n clueCount,\n setCellsFromPuzzle,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDailyGame.js","sourceRoot":"","sources":["../../src/hooks/useDailyGame.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useDailyGame.js","sourceRoot":"","sources":["../../src/hooks/useDailyGame.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for fetching and managing today's daily puzzle\n * Handles auth and subscription status with automatic refresh\n */\n\nimport { useEffect, useMemo, useRef } from 'react';\nimport type { Daily } from '@sudobility/sudojo_types';\nimport type { NetworkClient } from '@sudobility/types';\nimport { useSudojoTodayDaily } from '@sudobility/sudojo_client';\nimport type { GameFetchStatus } from './useLevelGame';\n\n/** Extended API response with action field from Sudojo API */\ninterface SudojoApiResponse<T> {\n success: boolean;\n data?: T;\n error?: string | null | undefined;\n message?: string;\n action?: {\n type: string;\n options?: string[];\n };\n}\n\n/** Check if response indicates auth is required */\nfunction isAuthRequired(\n response: SudojoApiResponse<unknown> | undefined,\n error: unknown\n): boolean {\n if (\n response?.success === false &&\n response.action?.type === 'auth_required'\n ) {\n return true;\n }\n if (error && typeof error === 'object') {\n const err = error as { message?: string };\n if (err.message?.includes('Account required')) return true;\n }\n return false;\n}\n\n/** Check if response indicates subscription is required */\nfunction isSubscriptionRequired(\n response: SudojoApiResponse<unknown> | undefined,\n error: unknown\n): boolean {\n if (\n response?.success === false &&\n response.action?.type === 'subscription_required'\n ) {\n return true;\n }\n if (error && typeof error === 'object') {\n const err = error as { message?: string };\n if (\n err.message?.includes('Daily limit reached') ||\n err.message?.includes('subscription')\n ) {\n return true;\n }\n }\n return false;\n}\n\nexport interface UseDailyGameOptions {\n /** Network client for API calls */\n networkClient: NetworkClient;\n /** Base URL for the Sudojo API */\n baseUrl: string;\n /** Access token for authentication */\n token: string;\n /** Whether subscription is currently active */\n subscriptionActive?: boolean;\n /** Whether to enable the query */\n enabled?: boolean;\n}\n\nexport interface UseDailyGameResult {\n /** Today's daily puzzle */\n daily: Daily | null;\n /** The date string for this daily (YYYY-MM-DD) */\n dailyDate: string | null;\n /** Current status of the game fetch */\n status: GameFetchStatus;\n /** Whether data is loading */\n isLoading: boolean;\n /** Error if fetch failed */\n error: Error | null;\n /** Refetch the daily puzzle */\n refetch: () => void;\n}\n\n/**\n * Hook for fetching today's daily puzzle\n *\n * Automatically refetches when auth token or subscription status changes.\n * Returns status indicating whether auth or subscription is required.\n *\n * @param options - Hook options\n * @returns Daily puzzle data and status\n *\n * @example\n * ```tsx\n * function DailyPage() {\n * const { daily, dailyDate, status, refetch } = useDailyGame({\n * networkClient,\n * config,\n * auth,\n * subscriptionActive: subscription.isActive,\n * });\n *\n * if (status === 'loading') return <Loading />;\n * if (status === 'auth_required') return <AuthRequired onLogin={openAuthModal} />;\n * if (status === 'subscription_required') return <SubscriptionPaywall onSuccess={refetch} />;\n * if (status === 'error') return <Error />;\n *\n * return <SudokuGame puzzle={daily.board} solution={daily.solution} />;\n * }\n * ```\n */\nexport function useDailyGame(options: UseDailyGameOptions): UseDailyGameResult {\n const {\n networkClient,\n baseUrl,\n token,\n subscriptionActive = false,\n enabled: _enabled = true,\n } = options;\n\n // Track previous state to detect changes\n const prevStateRef = useRef({\n authToken: token,\n subscriptionActive,\n });\n\n // Note: useSudojoTodayDaily doesn't support enabled option directly\n // We handle enabled by conditionally using the data\n const { data, isLoading, error, refetch } = useSudojoTodayDaily(\n networkClient,\n baseUrl,\n token\n );\n\n // Determine status based on response\n const status = useMemo((): GameFetchStatus => {\n if (isLoading) return 'loading';\n if (isAuthRequired(data, error)) return 'auth_required';\n if (isSubscriptionRequired(data, error)) return 'subscription_required';\n if (error) return 'error';\n if (data?.success && data.data) return 'success';\n return 'loading';\n }, [isLoading, data, error]);\n\n const daily = useMemo(() => {\n if (data?.success && data.data) {\n return data.data;\n }\n return null;\n }, [data]);\n\n const dailyDate = useMemo((): string | null => {\n if (daily?.date) {\n const dateStr = new Date(daily.date).toISOString().split('T')[0];\n return dateStr ?? null;\n }\n return null;\n }, [daily]);\n\n // Auto-refresh when auth token or subscription status changes\n useEffect(() => {\n const prev = prevStateRef.current;\n const authChanged = prev.authToken !== token;\n const subscriptionChanged = !prev.subscriptionActive && subscriptionActive;\n\n if (authChanged || subscriptionChanged) {\n refetch();\n }\n\n // Update ref for next comparison\n prevStateRef.current = { authToken: token, subscriptionActive };\n }, [token, subscriptionActive, refetch]);\n\n return {\n daily,\n dailyDate,\n status,\n isLoading,\n error: error ?? (data?.error ? new Error(data.error) : null),\n refetch: () => refetch(),\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGame.js","sourceRoot":"","sources":["../../src/hooks/useGame.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGame.js","sourceRoot":"","sources":["../../src/hooks/useGame.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Main game state management hook for Sudoku gameplay\n */\n\nimport { useCallback, useMemo, useReducer } from 'react';\nimport type { GameBoard, GameMove, GameSettings, GameState } from '../types';\nimport { DEFAULT_GAME_SETTINGS } from '../types';\nimport type { ScrambleConfig } from '@sudobility/sudojo_types';\nimport {\n DEFAULT_SCRAMBLE_CONFIG,\n noScramble,\n scrambleBoard,\n} from '@sudobility/sudojo_types';\nimport {\n cloneBoard,\n createGameBoard,\n getBoardStateString,\n getPencilmarksString,\n} from '../utils/board';\nimport {\n autoRemovePencilmarks,\n clearHighlights,\n isGameComplete,\n isValueCorrect,\n updateCellErrors,\n updateCellHighlights,\n} from '../utils/validation';\n\n// ============================================================================\n// Action Types\n// ============================================================================\n\ntype GameAction =\n | {\n type: 'LOAD_BOARD';\n puzzle: string;\n solution: string;\n scramble: boolean;\n scrambleConfig?: ScrambleConfig;\n boardUuid?: string;\n levelUuid?: string;\n }\n | { type: 'SELECT_CELL'; row: number; column: number }\n | { type: 'DESELECT_CELL' }\n | { type: 'SET_VALUE'; value: number }\n | { type: 'CLEAR_VALUE' }\n | { type: 'TOGGLE_PENCILMARK'; value: number }\n | { type: 'SET_PENCILMARKS'; values: number[] }\n | { type: 'CLEAR_PENCILMARKS' }\n | { type: 'UNDO' }\n | { type: 'REDO' }\n | { type: 'UPDATE_SETTINGS'; settings: Partial<GameSettings> }\n | { type: 'PAUSE' }\n | { type: 'RESUME' }\n | { type: 'RESET' }\n | { type: 'TICK'; seconds: number }\n | { type: 'SET_HINT_MODE'; enabled: boolean }\n // Enter mode actions\n | { type: 'START_ENTERING' }\n | { type: 'SET_GIVEN_VALUE'; value: number }\n | { type: 'CLEAR_GIVEN_VALUE' }\n | { type: 'FINISH_ENTERING'; puzzle: string; solution: string }\n | { type: 'SET_ERROR'; message: string }\n | { type: 'CLEAR_ERROR' };\n\n// ============================================================================\n// Initial State\n// ============================================================================\n\nconst createEmptyBoard = (): GameBoard => {\n const board: GameBoard = [];\n for (let row = 0; row < 9; row++) {\n const rowCells = [];\n for (let col = 0; col < 9; col++) {\n rowCells.push({\n row,\n column: col,\n value: null,\n isClue: false,\n isError: false,\n pencilmarks: new Set<number>(),\n isSelected: false,\n isHighlighted: false,\n isSameValue: false,\n });\n }\n board.push(rowCells);\n }\n return board;\n};\n\nconst createInitialState = (): GameState => ({\n board: createEmptyBoard(),\n originalPuzzle: '',\n solution: '',\n scrambledPuzzle: '',\n scrambledSolution: '',\n digitMapping: new Map(),\n undoStack: [],\n redoStack: [],\n selectedCell: null,\n settings: { ...DEFAULT_GAME_SETTINGS },\n status: 'idle',\n mistakeCount: 0,\n maxMistakes: 3,\n elapsedTime: 0,\n hintMode: false,\n boardUuid: null,\n levelUuid: null,\n entering: false,\n errorMessage: null,\n});\n\n// ============================================================================\n// Reducer\n// ============================================================================\n\nfunction gameReducer(state: GameState, action: GameAction): GameState {\n switch (action.type) {\n case 'LOAD_BOARD': {\n const {\n puzzle,\n solution,\n scramble,\n scrambleConfig,\n boardUuid,\n levelUuid,\n } = action;\n\n // Apply scrambling if requested\n const scrambleResult = scramble\n ? scrambleBoard(\n puzzle,\n solution,\n scrambleConfig ?? DEFAULT_SCRAMBLE_CONFIG\n )\n : noScramble(puzzle, solution);\n\n // Create the game board from scrambled puzzle\n const board = createGameBoard(\n scrambleResult.puzzle,\n scrambleResult.solution\n );\n\n return {\n ...createInitialState(),\n // Preserve settings and maxMistakes from current state\n settings: state.settings,\n maxMistakes: state.maxMistakes,\n board,\n originalPuzzle: puzzle,\n solution,\n scrambledPuzzle: scrambleResult.puzzle,\n scrambledSolution: scrambleResult.solution,\n digitMapping: scrambleResult.digitMapping,\n status: 'playing',\n boardUuid: boardUuid ?? null,\n levelUuid: levelUuid ?? null,\n };\n }\n\n case 'SELECT_CELL': {\n const { row, column } = action;\n let newBoard = cloneBoard(state.board);\n\n newBoard = updateCellHighlights(\n newBoard,\n row,\n column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n\n return {\n ...state,\n board: newBoard,\n selectedCell: { row, column },\n };\n }\n\n case 'DESELECT_CELL': {\n return {\n ...state,\n board: clearHighlights(state.board),\n selectedCell: null,\n };\n }\n\n case 'SET_VALUE': {\n if (!state.selectedCell || state.status !== 'playing') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.isClue) return state;\n\n const { value } = action;\n if (value < 1 || value > 9) return state;\n\n // Check if this is a mistake\n const isCorrect = isValueCorrect(\n state.scrambledSolution,\n row,\n column,\n value\n );\n const isMistake = !isCorrect && state.settings.showErrors;\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: cell.value,\n newValue: value,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(), // Clear pencilmarks when setting value\n type: 'value',\n };\n\n // Clone and update board\n let newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.value = value;\n newCell.pencilmarks = new Set();\n newCell.isError = isMistake;\n }\n\n // Auto-remove pencilmarks from related cells\n if (state.settings.autoRemovePencilmarks) {\n newBoard = autoRemovePencilmarks(newBoard, row, column, value);\n }\n\n // Update highlights\n newBoard = updateCellHighlights(\n newBoard,\n row,\n column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n\n // Check for completion\n const complete = isGameComplete(newBoard, state.scrambledSolution);\n const newMistakeCount = state.mistakeCount + (isMistake ? 1 : 0);\n const gameOver =\n state.maxMistakes > 0 && newMistakeCount >= state.maxMistakes;\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [], // Clear redo stack on new move\n mistakeCount: newMistakeCount,\n status: complete ? 'completed' : gameOver ? 'failed' : state.status,\n };\n }\n\n case 'CLEAR_VALUE': {\n if (!state.selectedCell || state.status !== 'playing') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.isClue || cell.value === null) return state;\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: cell.value,\n newValue: null,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(cell.pencilmarks),\n type: 'value',\n };\n\n // Clone and update board\n let newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.value = null;\n newCell.isError = false;\n }\n\n // Update highlights\n newBoard = updateCellHighlights(\n newBoard,\n row,\n column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n };\n }\n\n case 'TOGGLE_PENCILMARK': {\n if (!state.selectedCell || state.status !== 'playing') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.isClue || cell.value !== null) return state;\n\n const { value } = action;\n if (value < 1 || value > 9) return state;\n\n const newPencilmarks = new Set(cell.pencilmarks);\n if (newPencilmarks.has(value)) {\n newPencilmarks.delete(value);\n } else {\n newPencilmarks.add(value);\n }\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: null,\n newValue: null,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(newPencilmarks),\n type: 'pencilmark',\n };\n\n // Clone and update board\n const newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.pencilmarks = newPencilmarks;\n }\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n };\n }\n\n case 'SET_PENCILMARKS': {\n if (!state.selectedCell || state.status !== 'playing') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.isClue || cell.value !== null) return state;\n\n const newPencilmarks = new Set(\n action.values.filter(v => v >= 1 && v <= 9)\n );\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: null,\n newValue: null,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(newPencilmarks),\n type: 'pencilmark',\n };\n\n // Clone and update board\n const newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.pencilmarks = newPencilmarks;\n }\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n };\n }\n\n case 'CLEAR_PENCILMARKS': {\n if (!state.selectedCell || state.status !== 'playing') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.isClue || cell.pencilmarks.size === 0) return state;\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: cell.value,\n newValue: cell.value,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(),\n type: 'pencilmark',\n };\n\n // Clone and update board\n const newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.pencilmarks = new Set();\n }\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n };\n }\n\n case 'UNDO': {\n if (\n state.undoStack.length === 0 ||\n (state.status !== 'playing' && state.status !== 'entering')\n )\n return state;\n\n const move = state.undoStack[state.undoStack.length - 1];\n if (!move) return state;\n\n // Clone and restore previous state\n let newBoard = cloneBoard(state.board);\n const cell = newBoard[move.row]?.[move.column];\n if (cell) {\n cell.value = move.previousValue;\n cell.pencilmarks = new Set(move.previousPencilmarks);\n cell.isError = false; // Clear error on undo\n // In entering mode, update isClue based on whether cell has value\n if (state.status === 'entering') {\n cell.isClue = move.previousValue !== null;\n }\n }\n\n // Update errors based on settings (only in playing mode)\n if (state.status === 'playing') {\n newBoard = updateCellErrors(\n newBoard,\n state.scrambledSolution,\n state.settings.showErrors\n );\n }\n\n // Update highlights if there's a selected cell\n if (state.selectedCell) {\n newBoard = updateCellHighlights(\n newBoard,\n state.selectedCell.row,\n state.selectedCell.column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n }\n\n return {\n ...state,\n board: newBoard,\n undoStack: state.undoStack.slice(0, -1),\n redoStack: [...state.redoStack, move],\n };\n }\n\n case 'REDO': {\n if (\n state.redoStack.length === 0 ||\n (state.status !== 'playing' && state.status !== 'entering')\n )\n return state;\n\n const move = state.redoStack[state.redoStack.length - 1];\n if (!move) return state;\n\n // Clone and restore next state\n let newBoard = cloneBoard(state.board);\n const cell = newBoard[move.row]?.[move.column];\n if (cell) {\n cell.value = move.newValue;\n cell.pencilmarks = new Set(move.newPencilmarks);\n // In entering mode, update isClue based on whether cell has value\n if (state.status === 'entering') {\n cell.isClue = move.newValue !== null;\n }\n }\n\n // Update errors based on settings (only in playing mode)\n if (state.status === 'playing') {\n newBoard = updateCellErrors(\n newBoard,\n state.scrambledSolution,\n state.settings.showErrors\n );\n }\n\n // Update highlights if there's a selected cell\n if (state.selectedCell) {\n newBoard = updateCellHighlights(\n newBoard,\n state.selectedCell.row,\n state.selectedCell.column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n }\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: state.redoStack.slice(0, -1),\n };\n }\n\n case 'UPDATE_SETTINGS': {\n const newSettings = { ...state.settings, ...action.settings };\n\n // If showErrors changed, update error states\n let newBoard = state.board;\n if (action.settings.showErrors !== undefined) {\n newBoard = updateCellErrors(\n cloneBoard(state.board),\n state.scrambledSolution,\n newSettings.showErrors\n );\n }\n\n // If highlight settings changed and there's a selected cell, update highlights\n if (\n (action.settings.highlightRelatedCells !== undefined ||\n action.settings.highlightSameNumbers !== undefined) &&\n state.selectedCell\n ) {\n newBoard = updateCellHighlights(\n newBoard === state.board ? cloneBoard(state.board) : newBoard,\n state.selectedCell.row,\n state.selectedCell.column,\n newSettings.highlightRelatedCells,\n newSettings.highlightSameNumbers\n );\n }\n\n return {\n ...state,\n board: newBoard,\n settings: newSettings,\n };\n }\n\n case 'PAUSE': {\n if (state.status !== 'playing') return state;\n return { ...state, status: 'paused' };\n }\n\n case 'RESUME': {\n if (state.status !== 'paused') return state;\n return { ...state, status: 'playing' };\n }\n\n case 'RESET': {\n if (!state.scrambledPuzzle) return state;\n\n const newBoard = createGameBoard(\n state.scrambledPuzzle,\n state.scrambledSolution\n );\n\n return {\n ...state,\n board: newBoard,\n undoStack: [],\n redoStack: [],\n selectedCell: null,\n status: 'playing',\n mistakeCount: 0,\n elapsedTime: 0,\n hintMode: false,\n };\n }\n\n case 'TICK': {\n if (state.status !== 'playing') return state;\n return { ...state, elapsedTime: action.seconds };\n }\n\n case 'SET_HINT_MODE': {\n return { ...state, hintMode: action.enabled };\n }\n\n // ========================================================================\n // Enter Mode Actions\n // ========================================================================\n\n case 'START_ENTERING': {\n // Create empty board for entering mode\n const emptyBoard = createEmptyBoard();\n return {\n ...createInitialState(),\n settings: state.settings,\n maxMistakes: state.maxMistakes,\n board: emptyBoard,\n status: 'entering',\n entering: true,\n errorMessage: null,\n };\n }\n\n case 'SET_GIVEN_VALUE': {\n if (!state.selectedCell || state.status !== 'entering') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell) return state;\n\n const { value } = action;\n if (value < 1 || value > 9) return state;\n\n // Create move for undo (reuse existing move structure)\n const move: GameMove = {\n row,\n column,\n previousValue: cell.value,\n newValue: value,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(),\n type: 'value',\n };\n\n // Clone and update board - in enter mode, values become \"clues\"\n let newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.value = value;\n newCell.isClue = true; // Mark as given/clue\n newCell.pencilmarks = new Set();\n newCell.isError = false;\n }\n\n // Update highlights\n newBoard = updateCellHighlights(\n newBoard,\n row,\n column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n errorMessage: null,\n };\n }\n\n case 'CLEAR_GIVEN_VALUE': {\n if (!state.selectedCell || state.status !== 'entering') return state;\n\n const { row, column } = state.selectedCell;\n const cell = state.board[row]?.[column];\n if (!cell || cell.value === null) return state;\n\n // Create move for undo\n const move: GameMove = {\n row,\n column,\n previousValue: cell.value,\n newValue: null,\n previousPencilmarks: new Set(cell.pencilmarks),\n newPencilmarks: new Set(),\n type: 'value',\n };\n\n // Clone and update board\n let newBoard = cloneBoard(state.board);\n const newCell = newBoard[row]?.[column];\n if (newCell) {\n newCell.value = null;\n newCell.isClue = false;\n newCell.isError = false;\n }\n\n // Update highlights\n newBoard = updateCellHighlights(\n newBoard,\n row,\n column,\n state.settings.highlightRelatedCells,\n state.settings.highlightSameNumbers\n );\n\n return {\n ...state,\n board: newBoard,\n undoStack: [...state.undoStack, move],\n redoStack: [],\n errorMessage: null,\n };\n }\n\n case 'FINISH_ENTERING': {\n if (state.status !== 'entering') return state;\n\n const { puzzle, solution } = action;\n\n // Create board from validated puzzle and solution\n const board = createGameBoard(puzzle, solution);\n\n return {\n ...state,\n board,\n originalPuzzle: puzzle,\n solution,\n scrambledPuzzle: puzzle,\n scrambledSolution: solution,\n digitMapping: new Map(),\n undoStack: [],\n redoStack: [],\n selectedCell: null,\n status: 'playing',\n entering: false,\n mistakeCount: 0,\n elapsedTime: 0,\n hintMode: false,\n errorMessage: null,\n };\n }\n\n case 'SET_ERROR': {\n return { ...state, errorMessage: action.message };\n }\n\n case 'CLEAR_ERROR': {\n return { ...state, errorMessage: null };\n }\n\n default:\n return state;\n }\n}\n\n// ============================================================================\n// Hook Interface\n// ============================================================================\n\nexport interface UseGameOptions {\n /** Maximum mistakes allowed (0 = unlimited) */\n maxMistakes?: number;\n /** Initial settings */\n initialSettings?: Partial<GameSettings>;\n}\n\nexport interface UseGameResult {\n /** Current game state */\n state: GameState;\n /** Whether the game is active (playing or paused) */\n isActive: boolean;\n /** Whether the game is complete */\n isComplete: boolean;\n /** Whether the game failed (too many mistakes) */\n isFailed: boolean;\n /** Whether in entering mode */\n isEntering: boolean;\n /** Can undo */\n canUndo: boolean;\n /** Can redo */\n canRedo: boolean;\n\n // Actions\n /** Load a new board */\n loadBoard: (\n puzzle: string,\n solution: string,\n options?: {\n scramble?: boolean;\n scrambleConfig?: ScrambleConfig;\n boardUuid?: string;\n levelUuid?: string;\n }\n ) => void;\n /** Select a cell */\n selectCell: (row: number, column: number) => void;\n /** Deselect the current cell */\n deselectCell: () => void;\n /** Set a value in the selected cell */\n setValue: (value: number) => void;\n /** Clear the value in the selected cell */\n clearValue: () => void;\n /** Toggle a pencilmark in the selected cell */\n togglePencilmark: (value: number) => void;\n /** Set pencilmarks in the selected cell */\n setPencilmarks: (values: number[]) => void;\n /** Clear pencilmarks in the selected cell */\n clearPencilmarks: () => void;\n /** Undo the last move */\n undo: () => void;\n /** Redo the last undone move */\n redo: () => void;\n /** Update game settings */\n updateSettings: (settings: Partial<GameSettings>) => void;\n /** Pause the game */\n pause: () => void;\n /** Resume the game */\n resume: () => void;\n /** Reset the game to initial state */\n reset: () => void;\n /** Update elapsed time */\n tick: (seconds: number) => void;\n /** Set hint mode */\n setHintMode: (enabled: boolean) => void;\n\n // Enter mode actions\n /** Start entering mode with empty board */\n startEntering: () => void;\n /** Set a given value in enter mode (marks cell as clue) */\n setGivenValue: (value: number) => void;\n /** Clear a given value in enter mode */\n clearGivenValue: () => void;\n /** Finish entering and transition to playing mode */\n finishEntering: (puzzle: string, solution: string) => void;\n /** Set an error message */\n setError: (message: string) => void;\n /** Clear the error message */\n clearError: () => void;\n /** Get the entered puzzle string (81 chars) */\n getEnteredPuzzle: () => string;\n\n // Computed values for solver integration\n /** Get current board state as string (for solver API) */\n getBoardString: () => string;\n /** Get pencilmarks as string (for solver API) */\n getPencilmarksString: () => string;\n /** Get the original (unscrambled) puzzle string */\n getOriginalPuzzle: () => string;\n}\n\n/**\n * Main hook for managing Sudoku game state\n *\n * @param options - Hook options\n * @returns Game state and actions\n *\n * @example\n * ```tsx\n * function GameScreen() {\n * const {\n * state,\n * loadBoard,\n * selectCell,\n * setValue,\n * isComplete,\n * } = useGame({ maxMistakes: 3 });\n *\n * useEffect(() => {\n * // Load a puzzle from the API\n * loadBoard(puzzle, solution, { scramble: true });\n * }, []);\n *\n * if (isComplete) {\n * return <Congratulations />;\n * }\n *\n * return (\n * <Board\n * cells={state.board}\n * onCellPress={(row, col) => selectCell(row, col)}\n * />\n * );\n * }\n * ```\n */\nexport function useGame(options: UseGameOptions = {}): UseGameResult {\n const { maxMistakes = 3, initialSettings } = options;\n\n const [state, dispatch] = useReducer(gameReducer, undefined, () => {\n const initial = createInitialState();\n initial.maxMistakes = maxMistakes;\n if (initialSettings) {\n initial.settings = { ...initial.settings, ...initialSettings };\n }\n return initial;\n });\n\n // Memoized computed values\n const isActive = useMemo(\n () => state.status === 'playing' || state.status === 'paused',\n [state.status]\n );\n\n const isComplete = useMemo(\n () => state.status === 'completed',\n [state.status]\n );\n\n const isFailed = useMemo(() => state.status === 'failed', [state.status]);\n\n const isEntering = useMemo(() => state.status === 'entering', [state.status]);\n\n const canUndo = useMemo(\n () =>\n state.undoStack.length > 0 &&\n (state.status === 'playing' || state.status === 'entering'),\n [state.undoStack.length, state.status]\n );\n\n const canRedo = useMemo(\n () =>\n state.redoStack.length > 0 &&\n (state.status === 'playing' || state.status === 'entering'),\n [state.redoStack.length, state.status]\n );\n\n // Actions\n const loadBoard = useCallback(\n (\n puzzle: string,\n solution: string,\n opts?: {\n scramble?: boolean;\n scrambleConfig?: ScrambleConfig;\n boardUuid?: string;\n levelUuid?: string;\n }\n ) => {\n const action: GameAction = {\n type: 'LOAD_BOARD',\n puzzle,\n solution,\n scramble: opts?.scramble ?? true,\n };\n if (opts?.scrambleConfig !== undefined) {\n (action as { scrambleConfig?: ScrambleConfig }).scrambleConfig =\n opts.scrambleConfig;\n }\n if (opts?.boardUuid !== undefined) {\n (action as { boardUuid?: string }).boardUuid = opts.boardUuid;\n }\n if (opts?.levelUuid !== undefined) {\n (action as { levelUuid?: string }).levelUuid = opts.levelUuid;\n }\n dispatch(action);\n },\n []\n );\n\n const selectCell = useCallback((row: number, column: number) => {\n dispatch({ type: 'SELECT_CELL', row, column });\n }, []);\n\n const deselectCell = useCallback(() => {\n dispatch({ type: 'DESELECT_CELL' });\n }, []);\n\n const setValue = useCallback((value: number) => {\n dispatch({ type: 'SET_VALUE', value });\n }, []);\n\n const clearValue = useCallback(() => {\n dispatch({ type: 'CLEAR_VALUE' });\n }, []);\n\n const togglePencilmark = useCallback((value: number) => {\n dispatch({ type: 'TOGGLE_PENCILMARK', value });\n }, []);\n\n const setPencilmarks = useCallback((values: number[]) => {\n dispatch({ type: 'SET_PENCILMARKS', values });\n }, []);\n\n const clearPencilmarks = useCallback(() => {\n dispatch({ type: 'CLEAR_PENCILMARKS' });\n }, []);\n\n const undo = useCallback(() => {\n dispatch({ type: 'UNDO' });\n }, []);\n\n const redo = useCallback(() => {\n dispatch({ type: 'REDO' });\n }, []);\n\n const updateSettings = useCallback((settings: Partial<GameSettings>) => {\n dispatch({ type: 'UPDATE_SETTINGS', settings });\n }, []);\n\n const pause = useCallback(() => {\n dispatch({ type: 'PAUSE' });\n }, []);\n\n const resume = useCallback(() => {\n dispatch({ type: 'RESUME' });\n }, []);\n\n const reset = useCallback(() => {\n dispatch({ type: 'RESET' });\n }, []);\n\n const tick = useCallback((seconds: number) => {\n dispatch({ type: 'TICK', seconds });\n }, []);\n\n const setHintMode = useCallback((enabled: boolean) => {\n dispatch({ type: 'SET_HINT_MODE', enabled });\n }, []);\n\n // Enter mode actions\n const startEntering = useCallback(() => {\n dispatch({ type: 'START_ENTERING' });\n }, []);\n\n const setGivenValue = useCallback((value: number) => {\n dispatch({ type: 'SET_GIVEN_VALUE', value });\n }, []);\n\n const clearGivenValue = useCallback(() => {\n dispatch({ type: 'CLEAR_GIVEN_VALUE' });\n }, []);\n\n const finishEntering = useCallback((puzzle: string, solution: string) => {\n dispatch({ type: 'FINISH_ENTERING', puzzle, solution });\n }, []);\n\n const setError = useCallback((message: string) => {\n dispatch({ type: 'SET_ERROR', message });\n }, []);\n\n const clearError = useCallback(() => {\n dispatch({ type: 'CLEAR_ERROR' });\n }, []);\n\n // Get entered puzzle string (for validation API)\n const getEnteredPuzzle = useCallback(() => {\n // Convert board to 81-char puzzle string\n // Empty cells are '0', filled cells are their digit\n let puzzle = '';\n for (let row = 0; row < 9; row++) {\n for (let col = 0; col < 9; col++) {\n const cell = state.board[row]?.[col];\n puzzle += cell?.value ?? 0;\n }\n }\n return puzzle;\n }, [state.board]);\n\n // Computed values for solver integration\n const getBoardString = useCallback(() => {\n return getBoardStateString(state.board);\n }, [state.board]);\n\n const getPencilmarksStringValue = useCallback(() => {\n return getPencilmarksString(state.board);\n }, [state.board]);\n\n const getOriginalPuzzle = useCallback(() => {\n return state.scrambledPuzzle;\n }, [state.scrambledPuzzle]);\n\n return {\n state,\n isActive,\n isComplete,\n isFailed,\n isEntering,\n canUndo,\n canRedo,\n loadBoard,\n selectCell,\n deselectCell,\n setValue,\n clearValue,\n togglePencilmark,\n setPencilmarks,\n clearPencilmarks,\n undo,\n redo,\n updateSettings,\n pause,\n resume,\n reset,\n tick,\n setHintMode,\n // Enter mode\n startEntering,\n setGivenValue,\n clearGivenValue,\n finishEntering,\n setError,\n clearError,\n getEnteredPuzzle,\n // Solver integration\n getBoardString,\n getPencilmarksString: getPencilmarksStringValue,\n getOriginalPuzzle,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGamePersistence.js","sourceRoot":"","sources":["../../src/hooks/useGamePersistence.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGamePersistence.js","sourceRoot":"","sources":["../../src/hooks/useGamePersistence.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for persisting game state to localStorage\n *\n * Saves game progress automatically so users can resume where they left off\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type {\n GamePersistenceKey,\n SavedGameState,\n} from '../types/gamePersistence';\nimport { getGameStorageKey } from '../types/gamePersistence';\n\nexport interface UseGamePersistenceOptions {\n /** Puzzle identifier */\n puzzleKey: GamePersistenceKey | null;\n /** Whether auto-save is enabled */\n autoSave?: boolean;\n /** Debounce delay in ms for auto-save */\n debounceMs?: number;\n}\n\nexport interface UseGamePersistenceResult {\n /** Load saved game state */\n loadGame: () => SavedGameState | null;\n /** Save current game state */\n saveGame: (state: Omit<SavedGameState, 'savedAt'>) => void;\n /** Clear saved game state */\n clearGame: () => void;\n /** Check if saved game exists */\n hasSavedGame: () => boolean;\n}\n\n/**\n * Hook for persisting individual game progress\n *\n * @param options - Hook options\n * @returns Functions to load, save, and clear game state\n *\n * @example\n * ```tsx\n * const { loadGame, saveGame, clearGame } = useGamePersistence({\n * puzzleKey: { type: 'daily', id: '2024-01-15' },\n * autoSave: true,\n * });\n *\n * // On mount, try to restore saved state\n * useEffect(() => {\n * const saved = loadGame();\n * if (saved) {\n * // Restore game state\n * }\n * }, []);\n *\n * // Save after each move\n * useEffect(() => {\n * saveGame({ inputString, pencilmarksString, isPencilMode });\n * }, [inputString, pencilmarksString, isPencilMode]);\n * ```\n */\nexport function useGamePersistence({\n puzzleKey,\n}: UseGamePersistenceOptions): UseGamePersistenceResult {\n const storageKey = puzzleKey ? getGameStorageKey(puzzleKey) : null;\n\n const loadGame = useCallback((): SavedGameState | null => {\n if (!storageKey) return null;\n\n try {\n const item = window.localStorage.getItem(storageKey);\n if (!item) return null;\n return JSON.parse(item) as SavedGameState;\n } catch (error) {\n console.warn('Error loading saved game:', error);\n return null;\n }\n }, [storageKey]);\n\n const saveGame = useCallback(\n (state: Omit<SavedGameState, 'savedAt'>) => {\n if (!storageKey) return;\n\n try {\n const savedState: SavedGameState = {\n ...state,\n savedAt: new Date().toISOString(),\n };\n window.localStorage.setItem(storageKey, JSON.stringify(savedState));\n } catch (error) {\n console.warn('Error saving game:', error);\n }\n },\n [storageKey]\n );\n\n const clearGame = useCallback(() => {\n if (!storageKey) return;\n\n try {\n window.localStorage.removeItem(storageKey);\n } catch (error) {\n console.warn('Error clearing saved game:', error);\n }\n }, [storageKey]);\n\n const hasSavedGame = useCallback((): boolean => {\n if (!storageKey) return false;\n\n try {\n return window.localStorage.getItem(storageKey) !== null;\n } catch {\n return false;\n }\n }, [storageKey]);\n\n return {\n loadGame,\n saveGame,\n clearGame,\n hasSavedGame,\n };\n}\n\n/**\n * Hook that auto-saves game state with debouncing\n *\n * @param puzzleKey - Key identifying the puzzle\n * @param getCurrentState - Function to get current game state\n * @param dependencies - Dependencies that trigger save\n * @param debounceMs - Debounce delay in ms (default: 1000)\n */\nexport function useAutoSave(\n puzzleKey: GamePersistenceKey | null,\n getCurrentState: () => Omit<SavedGameState, 'savedAt'> | null,\n dependencies: unknown[],\n debounceMs: number = 1000\n): void {\n const { saveGame } = useGamePersistence({ puzzleKey });\n const timeoutRef = useRef<ReturnType<typeof globalThis.setTimeout> | null>(\n null\n );\n\n useEffect(() => {\n if (!puzzleKey) return;\n\n // Clear any pending save\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n }\n\n // Schedule new save\n timeoutRef.current = globalThis.setTimeout(() => {\n const state = getCurrentState();\n if (state) {\n saveGame(state);\n }\n }, debounceMs);\n\n return () => {\n if (timeoutRef.current) {\n globalThis.clearTimeout(timeoutRef.current);\n }\n };\n }, [puzzleKey, saveGame, debounceMs, ...dependencies]);\n}\n\n// Re-export types for convenience\nexport type { SavedGameState, GamePersistenceKey };\n"]}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* startGame('daily', puzzle, solution, { dailyDate: '2024-01-15' });
|
|
14
14
|
*
|
|
15
15
|
* // Update progress (debounced)
|
|
16
|
-
* updateProgress(inputString, pencilmarksString, isPencilMode, elapsedTime);
|
|
16
|
+
* updateProgress(inputString, pencilmarksString, isPencilMode, autoPencilmarks, elapsedTime);
|
|
17
17
|
*
|
|
18
18
|
* // Clear on completion
|
|
19
19
|
* clearGame();
|
|
@@ -34,7 +34,7 @@ export interface UseGamePlayResult {
|
|
|
34
34
|
/** Start a new game */
|
|
35
35
|
startGame: (source: GameSource, puzzle: string, solution: string, meta?: CurrentGameMeta) => void;
|
|
36
36
|
/** Update progress (debounced internally) */
|
|
37
|
-
updateProgress: (inputString: string, pencilmarksString: string, isPencilMode: boolean, elapsedTime: number) => void;
|
|
37
|
+
updateProgress: (inputString: string, pencilmarksString: string, isPencilMode: boolean, autoPencilmarks: boolean, elapsedTime: number) => void;
|
|
38
38
|
/** Clear current game (call on completion) */
|
|
39
39
|
clearGame: () => void;
|
|
40
40
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGamePlay.d.ts","sourceRoot":"","sources":["../../src/hooks/useGamePlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB;IACvB,SAAS,EAAE,CACT,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,eAAe,KACnB,IAAI,CAAC;IACV,6CAA6C;IAC7C,cAAc,EAAE,CACd,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,OAAO,EACrB,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,8CAA8C;IAC9C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,
|
|
1
|
+
{"version":3,"file":"useGamePlay.d.ts","sourceRoot":"","sources":["../../src/hooks/useGamePlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,QAAQ,EACR,UAAU,EACX,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,kBAAkB;IACjC,+CAA+C;IAC/C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,yDAAyD;IACzD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,WAAW,EAAE,WAAW,GAAG,IAAI,CAAC;IAChC,qCAAqC;IACrC,cAAc,EAAE,OAAO,CAAC;IACxB,uBAAuB;IACvB,SAAS,EAAE,CACT,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,eAAe,KACnB,IAAI,CAAC;IACV,6CAA6C;IAC7C,cAAc,EAAE,CACd,WAAW,EAAE,MAAM,EACnB,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,OAAO,EACrB,eAAe,EAAE,OAAO,EACxB,WAAW,EAAE,MAAM,KAChB,IAAI,CAAC;IACV,8CAA8C;IAC9C,SAAS,EAAE,MAAM,IAAI,CAAC;CACvB;AAED,wBAAgB,WAAW,CACzB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAiGnB"}
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* startGame('daily', puzzle, solution, { dailyDate: '2024-01-15' });
|
|
14
14
|
*
|
|
15
15
|
* // Update progress (debounced)
|
|
16
|
-
* updateProgress(inputString, pencilmarksString, isPencilMode, elapsedTime);
|
|
16
|
+
* updateProgress(inputString, pencilmarksString, isPencilMode, autoPencilmarks, elapsedTime);
|
|
17
17
|
*
|
|
18
18
|
* // Clear on completion
|
|
19
19
|
* clearGame();
|
|
@@ -40,11 +40,12 @@ export function useGamePlay(options = {}) {
|
|
|
40
40
|
// Throttled update — saves at most every autoSaveDelay ms.
|
|
41
41
|
// Unlike debounce, throttle ensures periodic saves even when called
|
|
42
42
|
// continuously (e.g. every second from the game timer).
|
|
43
|
-
const updateProgress = useCallback((inputString, pencilmarksString, isPencilMode, elapsedTime) => {
|
|
43
|
+
const updateProgress = useCallback((inputString, pencilmarksString, isPencilMode, autoPencilmarks, elapsedTime) => {
|
|
44
44
|
pendingUpdate.current = [
|
|
45
45
|
inputString,
|
|
46
46
|
pencilmarksString,
|
|
47
47
|
isPencilMode,
|
|
48
|
+
autoPencilmarks,
|
|
48
49
|
elapsedTime,
|
|
49
50
|
];
|
|
50
51
|
// Only start a new timer if one isn't already running (throttle)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGamePlay.js","sourceRoot":"","sources":["../../src/hooks/useGamePlay.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"useGamePlay.js","sourceRoot":"","sources":["../../src/hooks/useGamePlay.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for managing the current game\n *\n * Provides a clean API for starting, updating, and clearing the current game.\n * The `slot` option selects which independent store slot to use ('daily' or 'play'),\n * keeping the returned function signatures identical to before.\n *\n * @example\n * ```tsx\n * const { currentGame, startGame, updateProgress, clearGame } = useGamePlay({ slot: 'daily' });\n *\n * // Start a new game\n * startGame('daily', puzzle, solution, { dailyDate: '2024-01-15' });\n *\n * // Update progress (debounced)\n * updateProgress(inputString, pencilmarksString, isPencilMode, autoPencilmarks, elapsedTime);\n *\n * // Clear on completion\n * clearGame();\n * ```\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport { useGamePlayStore } from '../stores/gamePlayStore';\nimport type {\n CurrentGame,\n CurrentGameMeta,\n GameSlot,\n GameSource,\n} from '../types/currentGame';\n\nexport interface UseGamePlayOptions {\n /** Which game slot to use (default: 'play') */\n slot?: GameSlot;\n /** Debounce delay for auto-save in ms (default: 2000) */\n autoSaveDelay?: number;\n}\n\nexport interface UseGamePlayResult {\n /** Current game state (null if none) */\n currentGame: CurrentGame | null;\n /** Whether there's an active game */\n hasCurrentGame: boolean;\n /** Start a new game */\n startGame: (\n source: GameSource,\n puzzle: string,\n solution: string,\n meta?: CurrentGameMeta\n ) => void;\n /** Update progress (debounced internally) */\n updateProgress: (\n inputString: string,\n pencilmarksString: string,\n isPencilMode: boolean,\n autoPencilmarks: boolean,\n elapsedTime: number\n ) => void;\n /** Clear current game (call on completion) */\n clearGame: () => void;\n}\n\nexport function useGamePlay(\n options: UseGamePlayOptions = {}\n): UseGamePlayResult {\n const { slot = 'play', autoSaveDelay = 2000 } = options;\n\n // Select the correct slot from the store\n const currentGame = useGamePlayStore(s =>\n slot === 'daily' ? s.dailyGame : s.playGame\n );\n\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const pendingUpdate = useRef<\n [string, string, boolean, boolean, number] | null\n >(null);\n\n // Curry slot into startGame so callers keep the same signature\n const startGame = useCallback(\n (\n source: GameSource,\n puzzle: string,\n solution: string,\n meta?: CurrentGameMeta\n ) => {\n useGamePlayStore\n .getState()\n .startGame(slot, source, puzzle, solution, meta);\n },\n [slot]\n );\n\n // Curry slot into clearGame\n const clearGame = useCallback(() => {\n useGamePlayStore.getState().clearGame(slot);\n }, [slot]);\n\n // Throttled update — saves at most every autoSaveDelay ms.\n // Unlike debounce, throttle ensures periodic saves even when called\n // continuously (e.g. every second from the game timer).\n const updateProgress = useCallback(\n (\n inputString: string,\n pencilmarksString: string,\n isPencilMode: boolean,\n autoPencilmarks: boolean,\n elapsedTime: number\n ) => {\n pendingUpdate.current = [\n inputString,\n pencilmarksString,\n isPencilMode,\n autoPencilmarks,\n elapsedTime,\n ];\n\n // Only start a new timer if one isn't already running (throttle)\n if (!timeoutRef.current) {\n timeoutRef.current = setTimeout(() => {\n if (pendingUpdate.current) {\n useGamePlayStore\n .getState()\n .updateProgress(slot, ...pendingUpdate.current);\n pendingUpdate.current = null;\n }\n timeoutRef.current = null;\n }, autoSaveDelay);\n }\n },\n [slot, autoSaveDelay]\n );\n\n // Flush pending updates on unmount and beforeunload\n useEffect(() => {\n const flush = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n }\n if (pendingUpdate.current) {\n useGamePlayStore\n .getState()\n .updateProgress(slot, ...pendingUpdate.current);\n pendingUpdate.current = null;\n }\n };\n\n window.addEventListener('beforeunload', flush);\n return () => {\n window.removeEventListener('beforeunload', flush);\n flush();\n };\n }, [slot]);\n\n return {\n currentGame,\n hasCurrentGame: currentGame !== null,\n startGame,\n updateProgress,\n clearGame,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGameSession.js","sourceRoot":"","sources":["../../src/hooks/useGameSession.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGameSession.js","sourceRoot":"","sources":["../../src/hooks/useGameSession.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for managing game sessions with gamification\n *\n * Handles:\n * - Starting game sessions on the server\n * - Finishing game sessions and receiving rewards\n * - Tracking achievement results for display\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport {\n useSudojoPlayFinish,\n useSudojoPlayStart,\n} from '@sudobility/sudojo_client';\nimport type {\n GameFinishResponse,\n GameStartRequest,\n} from '@sudobility/sudojo_types';\nimport type { NetworkClient } from '@sudobility/types';\n\nexport interface UseGameSessionOptions {\n networkClient: NetworkClient;\n baseUrl: string;\n token: string | null;\n userId: string | null;\n}\n\nexport interface GameSessionResult {\n /** Whether a server session was started */\n sessionStarted: boolean;\n /** Session ID from server (if started) */\n sessionId?: string;\n}\n\nexport interface GameFinishResult {\n /** The full response from the server */\n response?: GameFinishResponse;\n /** Whether the user leveled up */\n leveledUp: boolean;\n /** New badges earned */\n newBadges: Array<{\n badgeKey: string;\n title: string;\n description: string | null;\n }>;\n /** Total points earned */\n totalPointsEarned: number;\n}\n\nexport function useGameSession({\n networkClient,\n baseUrl,\n token,\n userId,\n}: UseGameSessionOptions) {\n const [isStarting, setIsStarting] = useState(false);\n const [isFinishing, setIsFinishing] = useState(false);\n const sessionIdRef = useRef<string | null>(null);\n\n const playStartMutation = useSudojoPlayStart(networkClient, baseUrl);\n const playFinishMutation = useSudojoPlayFinish(networkClient, baseUrl);\n\n /**\n * Start a game session on the server\n * Only works if user is authenticated\n */\n const startSession = useCallback(\n async (data: GameStartRequest): Promise<GameSessionResult> => {\n // Skip if not authenticated\n if (!userId || !token) {\n return { sessionStarted: false };\n }\n\n setIsStarting(true);\n try {\n const response = await playStartMutation.mutateAsync({\n token,\n data,\n });\n\n if (response.success && response.data) {\n sessionIdRef.current = response.data.sessionId;\n return {\n sessionStarted: true,\n sessionId: response.data.sessionId,\n };\n }\n\n return { sessionStarted: false };\n } catch (error) {\n console.error('Failed to start game session:', error);\n return { sessionStarted: false };\n } finally {\n setIsStarting(false);\n }\n },\n [userId, token, playStartMutation]\n );\n\n /**\n * Finish the game session and get rewards\n * Only works if user is authenticated and session was started\n */\n const finishSession = useCallback(\n async (elapsedTime: number): Promise<GameFinishResult> => {\n // Skip if not authenticated\n if (!userId || !token) {\n return {\n leveledUp: false,\n newBadges: [],\n totalPointsEarned: 0,\n };\n }\n\n setIsFinishing(true);\n try {\n const response = await playFinishMutation.mutateAsync({\n token,\n data: { elapsedTime },\n });\n\n sessionIdRef.current = null;\n\n if (response.success && response.data) {\n return {\n response: response.data,\n leveledUp: !!response.data.level,\n newBadges: response.data.badges ?? [],\n totalPointsEarned: response.data.points.totalPoints,\n };\n }\n\n return {\n leveledUp: false,\n newBadges: [],\n totalPointsEarned: 0,\n };\n } catch (error) {\n console.error('Failed to finish game session:', error);\n return {\n leveledUp: false,\n newBadges: [],\n totalPointsEarned: 0,\n };\n } finally {\n setIsFinishing(false);\n }\n },\n [userId, token, playFinishMutation]\n );\n\n /**\n * Check if user is authenticated (can use gamification)\n */\n const isAuthenticated = !!userId && !!token;\n\n return {\n startSession,\n finishSession,\n isStarting,\n isFinishing,\n isAuthenticated,\n sessionId: sessionIdRef.current,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGameTeaching.js","sourceRoot":"","sources":["../../src/hooks/useGameTeaching.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useGameTeaching.js","sourceRoot":"","sources":["../../src/hooks/useGameTeaching.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook for integrating the Sudoku solver for teaching and hints\n */\n\nimport { useCallback, useMemo, useState } from 'react';\nimport type { NetworkClient } from '@sudobility/types';\nimport type {\n BaseResponse,\n SolveData,\n SolverHintStep,\n} from '@sudobility/sudojo_types';\nimport { createSudojoClient } from '@sudobility/sudojo_client';\nimport type { GameHint, TeachingState } from '../types';\n\nexport interface UseGameTeachingOptions {\n /** Network client for API calls */\n networkClient: NetworkClient;\n /** Base URL for the Sudojo API */\n baseUrl: string;\n /** Access token for authentication */\n token: string;\n}\n\nexport interface UseGameTeachingResult {\n /** Current teaching state */\n teachingState: TeachingState;\n /** Get a hint for the current board state */\n getHint: (\n originalPuzzle: string,\n userBoard: string,\n options?: { autoPencilmarks?: boolean; pencilmarks?: string }\n ) => Promise<void>;\n /** Apply the current hint to the board (returns the action to perform) */\n applyHint: () => GameHint | null;\n /** Move to the next step in a multi-step hint */\n nextStep: () => void;\n /** Move to the previous step in a multi-step hint */\n previousStep: () => void;\n /** Clear the current hint */\n clearHint: () => void;\n /** Whether a hint is available */\n hasHint: boolean;\n /** Whether there are more steps in the current hint */\n hasMoreSteps: boolean;\n /** Whether we can go to previous step */\n hasPreviousStep: boolean;\n}\n\n/**\n * Converts a solver SolverHintStep to our GameHint format\n */\nfunction convertHintStep(step: SolverHintStep): GameHint {\n return {\n title: step.title,\n text: step.text,\n cells:\n step.cells?.map(cell => {\n const action: {\n select?: number;\n addPencilmarks?: number[];\n removePencilmarks?: number[];\n } = {};\n if (cell.actions.select) {\n action.select = parseInt(cell.actions.select, 10);\n }\n if (cell.actions.add) {\n action.addPencilmarks = cell.actions.add\n .split('')\n .map(d => parseInt(d, 10));\n }\n if (cell.actions.remove) {\n action.removePencilmarks = cell.actions.remove\n .split('')\n .map(d => parseInt(d, 10));\n }\n return {\n row: cell.row,\n column: cell.column,\n color: cell.color,\n ...(Object.keys(action).length > 0 ? { action } : {}),\n };\n }) ?? [],\n areas:\n step.areas?.map(area => ({\n type: area.type,\n index: area.index,\n color: area.color,\n })) ?? [],\n };\n}\n\n/**\n * Hook for teaching/hint functionality using the solver API\n *\n * @param options - Hook options\n * @returns Teaching state and actions\n *\n * @example\n * ```tsx\n * function GameWithHints() {\n * const game = useGame();\n * const { teachingState, getHint, applyHint } = useGameTeaching({\n * networkClient,\n * baseUrl: 'https://api.sudojo.com',\n * token: 'user-access-token',\n * });\n *\n * const handleGetHint = async () => {\n * await getHint(\n * game.getOriginalPuzzle(),\n * game.getBoardString(),\n * { autoPencilmarks: game.state.settings.autoPencilmarks }\n * );\n * };\n *\n * const handleApplyHint = () => {\n * const hint = applyHint();\n * if (hint) {\n * // Apply the hint actions to the game\n * for (const cell of hint.cells) {\n * if (cell.action?.select) {\n * game.selectCell(cell.row, cell.column);\n * game.setValue(cell.action.select);\n * }\n * }\n * }\n * };\n *\n * return (\n * <div>\n * <Board cells={game.state.board} />\n * <button onClick={handleGetHint}>Get Hint</button>\n * {teachingState.currentHint && (\n * <div>\n * <h3>{teachingState.currentHint.title}</h3>\n * <p>{teachingState.currentHint.text}</p>\n * <button onClick={handleApplyHint}>Apply</button>\n * </div>\n * )}\n * </div>\n * );\n * }\n * ```\n */\nexport function useGameTeaching(\n options: UseGameTeachingOptions\n): UseGameTeachingResult {\n const { networkClient, baseUrl, token } = options;\n\n const [teachingState, setTeachingState] = useState<TeachingState>({\n isActive: false,\n currentHint: null,\n currentStep: 0,\n totalSteps: 0,\n isLoading: false,\n error: null,\n });\n\n // Store all hint steps for multi-step hints\n const [allSteps, setAllSteps] = useState<GameHint[]>([]);\n\n // Create Sudojo client\n const client = useMemo(() => {\n return createSudojoClient(networkClient, baseUrl);\n }, [networkClient, baseUrl]);\n\n const getHint = useCallback(\n async (\n originalPuzzle: string,\n userBoard: string,\n hintOptions?: { autoPencilmarks?: boolean; pencilmarks?: string }\n ) => {\n setTeachingState(prev => ({\n ...prev,\n isLoading: true,\n error: null,\n }));\n\n try {\n const solveOptions: {\n original: string;\n user: string;\n autoPencilmarks?: boolean;\n pencilmarks?: string;\n } = {\n original: originalPuzzle,\n user: userBoard,\n };\n if (hintOptions?.autoPencilmarks !== undefined) {\n solveOptions.autoPencilmarks = hintOptions.autoPencilmarks;\n }\n if (hintOptions?.pencilmarks !== undefined) {\n solveOptions.pencilmarks = hintOptions.pencilmarks;\n }\n const response: BaseResponse<SolveData> = await client.solverSolve(\n token,\n solveOptions\n );\n\n if (!response.success || !response.data?.hints?.steps?.length) {\n const errorMessage =\n response.error ?? 'No hints available for the current state';\n setTeachingState(prev => ({\n ...prev,\n isLoading: false,\n error: errorMessage,\n isActive: false,\n currentHint: null,\n currentStep: 0,\n totalSteps: 0,\n }));\n setAllSteps([]);\n return;\n }\n\n const hintSteps = response.data.hints.steps;\n const convertedSteps = hintSteps.map(convertHintStep);\n\n if (convertedSteps.length === 0) {\n setTeachingState(prev => ({\n ...prev,\n isLoading: false,\n error: 'No hints available',\n isActive: false,\n currentHint: null,\n currentStep: 0,\n totalSteps: 0,\n }));\n setAllSteps([]);\n return;\n }\n\n setAllSteps(convertedSteps);\n setTeachingState({\n isActive: true,\n currentHint: convertedSteps[0] ?? null,\n currentStep: 0,\n totalSteps: convertedSteps.length,\n isLoading: false,\n error: null,\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : 'Failed to get hint';\n setTeachingState(prev => ({\n ...prev,\n isLoading: false,\n error: errorMessage,\n isActive: false,\n currentHint: null,\n currentStep: 0,\n totalSteps: 0,\n }));\n setAllSteps([]);\n }\n },\n [client, token]\n );\n\n const applyHint = useCallback((): GameHint | null => {\n return teachingState.currentHint;\n }, [teachingState.currentHint]);\n\n const nextStep = useCallback(() => {\n if (teachingState.currentStep < teachingState.totalSteps - 1) {\n const nextStepIndex = teachingState.currentStep + 1;\n setTeachingState(prev => ({\n ...prev,\n currentStep: nextStepIndex,\n currentHint: allSteps[nextStepIndex] ?? null,\n }));\n }\n }, [teachingState.currentStep, teachingState.totalSteps, allSteps]);\n\n const previousStep = useCallback(() => {\n if (teachingState.currentStep > 0) {\n const prevStepIndex = teachingState.currentStep - 1;\n setTeachingState(prev => ({\n ...prev,\n currentStep: prevStepIndex,\n currentHint: allSteps[prevStepIndex] ?? null,\n }));\n }\n }, [teachingState.currentStep, allSteps]);\n\n const clearHint = useCallback(() => {\n setTeachingState({\n isActive: false,\n currentHint: null,\n currentStep: 0,\n totalSteps: 0,\n isLoading: false,\n error: null,\n });\n setAllSteps([]);\n }, []);\n\n const hasHint = useMemo(\n () => teachingState.isActive && teachingState.currentHint !== null,\n [teachingState.isActive, teachingState.currentHint]\n );\n\n const hasMoreSteps = useMemo(\n () => teachingState.currentStep < teachingState.totalSteps - 1,\n [teachingState.currentStep, teachingState.totalSteps]\n );\n\n const hasPreviousStep = useMemo(\n () => teachingState.currentStep > 0,\n [teachingState.currentStep]\n );\n\n return {\n teachingState,\n getHint,\n applyHint,\n nextStep,\n previousStep,\n clearHint,\n hasHint,\n hasMoreSteps,\n hasPreviousStep,\n };\n}\n"]}
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Game Timer Hook - Track elapsed time during gameplay
|
|
3
|
+
*
|
|
4
|
+
* Uses a ref for elapsed seconds to avoid re-rendering the parent
|
|
5
|
+
* component every second. Components that need to display the time
|
|
6
|
+
* should use their own interval to read from elapsedRef.
|
|
3
7
|
*/
|
|
8
|
+
import type { RefObject } from 'react';
|
|
4
9
|
export interface UseGameTimerResult {
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
|
|
10
|
+
/** Ref holding the current elapsed seconds (does not trigger re-renders) */
|
|
11
|
+
elapsedRef: RefObject<number>;
|
|
12
|
+
/** Get current elapsed seconds */
|
|
13
|
+
getElapsedSeconds: () => number;
|
|
9
14
|
/** Whether the timer is running */
|
|
10
15
|
isRunning: boolean;
|
|
11
|
-
/** Start the timer */
|
|
16
|
+
/** Start the timer (resets to 0) */
|
|
12
17
|
start: () => void;
|
|
13
18
|
/** Pause the timer */
|
|
14
19
|
pause: () => void;
|
|
@@ -28,15 +33,22 @@ export interface UseGameTimerOptions {
|
|
|
28
33
|
/**
|
|
29
34
|
* Hook for game timer functionality
|
|
30
35
|
*
|
|
36
|
+
* Elapsed time is tracked in a ref to avoid causing re-renders every second.
|
|
37
|
+
* Use `elapsedRef` in display components that manage their own update interval.
|
|
38
|
+
* Use `getElapsedSeconds()` to read the current time in event handlers.
|
|
39
|
+
*
|
|
31
40
|
* @param options - Timer options
|
|
32
41
|
* @returns Timer state and controls
|
|
33
42
|
*
|
|
34
43
|
* @example
|
|
35
44
|
* ```tsx
|
|
36
|
-
* const {
|
|
45
|
+
* const { elapsedRef, getElapsedSeconds, isRunning, stop } = useGameTimer({ autoStart: true });
|
|
46
|
+
*
|
|
47
|
+
* // Pass to self-updating GameTimer component:
|
|
48
|
+
* <GameTimer elapsedRef={elapsedRef} isRunning={isRunning} />
|
|
37
49
|
*
|
|
38
|
-
* //
|
|
39
|
-
*
|
|
50
|
+
* // Read time in handlers:
|
|
51
|
+
* const finalTime = stop();
|
|
40
52
|
* ```
|
|
41
53
|
*/
|
|
42
54
|
export declare function useGameTimer(options?: UseGameTimerOptions): UseGameTimerResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useGameTimer.d.ts","sourceRoot":"","sources":["../../src/hooks/useGameTimer.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"useGameTimer.d.ts","sourceRoot":"","sources":["../../src/hooks/useGameTimer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAGvC,MAAM,WAAW,kBAAkB;IACjC,4EAA4E;IAC5E,UAAU,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC9B,kCAAkC;IAClC,iBAAiB,EAAE,MAAM,MAAM,CAAC;IAChC,mCAAmC;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,oCAAoC;IACpC,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,sBAAsB;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,uBAAuB;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,sBAAsB;IACtB,KAAK,EAAE,MAAM,IAAI,CAAC;IAClB,mDAAmD;IACnD,IAAI,EAAE,MAAM,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IAClC,gCAAgC;IAChC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAC1B,OAAO,GAAE,mBAAwB,GAChC,kBAAkB,CA4DpB"}
|