@sudobility/sudojo_lib 0.0.83 → 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.
Files changed (53) hide show
  1. package/dist/config/authProviders.js.map +1 -1
  2. package/dist/config/index.js.map +1 -1
  3. package/dist/hooks/index.js.map +1 -1
  4. package/dist/hooks/useBoardEntry.js.map +1 -1
  5. package/dist/hooks/useDailyGame.js.map +1 -1
  6. package/dist/hooks/useGame.js.map +1 -1
  7. package/dist/hooks/useGamePersistence.js.map +1 -1
  8. package/dist/hooks/useGamePlay.d.ts +2 -2
  9. package/dist/hooks/useGamePlay.d.ts.map +1 -1
  10. package/dist/hooks/useGamePlay.js +3 -2
  11. package/dist/hooks/useGamePlay.js.map +1 -1
  12. package/dist/hooks/useGameSession.js.map +1 -1
  13. package/dist/hooks/useGameTeaching.js.map +1 -1
  14. package/dist/hooks/useGameTimer.js.map +1 -1
  15. package/dist/hooks/useHint.js.map +1 -1
  16. package/dist/hooks/useLearning.js.map +1 -1
  17. package/dist/hooks/useLevelGame.js.map +1 -1
  18. package/dist/hooks/useLevels.js.map +1 -1
  19. package/dist/hooks/useLocalStorage.js.map +1 -1
  20. package/dist/hooks/useSudoku.js.map +1 -1
  21. package/dist/hooks/useTechniques.js.map +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/stores/gamePlayStore.d.ts +1 -1
  24. package/dist/stores/gamePlayStore.d.ts.map +1 -1
  25. package/dist/stores/gamePlayStore.js +18 -2
  26. package/dist/stores/gamePlayStore.js.map +1 -1
  27. package/dist/test/setup.js.map +1 -1
  28. package/dist/types/currentGame.d.ts +6 -0
  29. package/dist/types/currentGame.d.ts.map +1 -1
  30. package/dist/types/currentGame.js.map +1 -1
  31. package/dist/types/display.js.map +1 -1
  32. package/dist/types/game.js.map +1 -1
  33. package/dist/types/gamePersistence.js.map +1 -1
  34. package/dist/types/index.js.map +1 -1
  35. package/dist/types/progress.js.map +1 -1
  36. package/dist/types/settings.js.map +1 -1
  37. package/dist/types/subscription.js.map +1 -1
  38. package/dist/types/sudoku.js.map +1 -1
  39. package/dist/utils/board.js.map +1 -1
  40. package/dist/utils/digitDisplay.js.map +1 -1
  41. package/dist/utils/hintExplanation.js.map +1 -1
  42. package/dist/utils/i18nKeys.js.map +1 -1
  43. package/dist/utils/index.js.map +1 -1
  44. package/dist/utils/localizedHint.js.map +1 -1
  45. package/dist/utils/progress.js.map +1 -1
  46. package/dist/utils/subscription.js.map +1 -1
  47. package/dist/utils/sudokuPresenter.js.map +1 -1
  48. package/dist/utils/sudokuScrambler.js.map +1 -1
  49. package/dist/utils/technique.js.map +1 -1
  50. package/dist/utils/theme.js.map +1 -1
  51. package/dist/utils/time.js.map +1 -1
  52. package/dist/utils/validation.js.map +1 -1
  53. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"sudoku.js","sourceRoot":"","sources":["../../src/types/sudoku.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAuBH;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,KAAa;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AAC/B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAa;IACpC,OAAO,KAAK,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,KAAa;IACnC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/C,OAAO,MAAM,GAAG,CAAC,GAAG,MAAM,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACnD,OAAO,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC;AAC1B,CAAC;AAgGD,gFAAgF;AAChF,WAAW;AACX,gFAAgF;AAEhF,MAAM,CAAC,MAAM,qBAAqB,GAAuB;IACvD,aAAa,EAAE,KAAK;IACpB,eAAe,EAAE,KAAK;CACvB,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAsB;IACrD,UAAU,EAAE,IAAI;IAChB,gBAAgB,EAAE,IAAI;IACtB,WAAW,EAAE,KAAK;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,OAAO;QACL,KAAK;QACL,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;QACX,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,IAAI;KAClB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC/D,SAAS,EAAE,KAAK;QAChB,QAAQ,EAAE,KAAK;QACf,aAAa,EAAE,IAAI;KACpB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,CAAC,+BAA+B;IACtE,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,CAAC,gCAAgC;IACvE,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,CAAC,yBAAyB;IACnE,OAAO,IAAI,CAAC,KAAK,KAAK,IAAI,CAAC,QAAQ,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,UAAU,GAAG,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QACpB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7B,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,KAAK,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,UAAU,EAAE,GAAG,YAAY,CAAC,CAAC,CAAC;IAC5E,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,yBAAyB;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC"}
1
+ {"version":3,"file":"sudoku.js","sourceRoot":"","sources":["../../src/types/sudoku.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Sudoku game types - ported from renderable/sudokuschool\n *\n * Uses flat 81-cell array (indexed 0-80) matching Kotlin implementation\n */\n\n// =============================================================================\n// Cell Types\n// =============================================================================\n\n/**\n * A single cell in the Sudoku board (indexed 0-80)\n * Matches Kotlin: Cell(index, solution, given, input, pencilmarks)\n */\nexport interface SudokuCell {\n /** Cell index (0-80) */\n index: number;\n /** The correct solution value (1-9, or null if not provided) */\n solution: number | null;\n /** The given/clue value (1-9, or null if empty) */\n given: number | null;\n /** User-entered value (1-9, or null if empty) */\n input: number | null;\n /** Pencil marks (candidate digits 1-9, or null) - matches Kotlin Array<Int>? */\n pencilmarks: number[] | null;\n}\n\n/**\n * Get row index (0-8) from cell index (0-80)\n */\nexport function rowOf(index: number): number {\n return Math.floor(index / 9);\n}\n\n/**\n * Get column index (0-8) from cell index (0-80)\n */\nexport function columnOf(index: number): number {\n return index % 9;\n}\n\n/**\n * Get block index (0-8) from cell index (0-80)\n */\nexport function blockOf(index: number): number {\n const blockY = Math.floor(rowOf(index) / 3);\n const blockX = Math.floor(columnOf(index) / 3);\n return blockY * 3 + blockX;\n}\n\n/**\n * Get cell index from row and column\n */\nexport function cellIndex(row: number, column: number): number {\n return row * 9 + column;\n}\n\n// =============================================================================\n// Board Types\n// =============================================================================\n\n/**\n * The Sudoku board containing all 81 cells\n */\nexport interface SudokuBoard {\n /** Array of 81 cells (indexed 0-80) */\n cells: SudokuCell[];\n /** Whether the game is completed (all inputs match solutions) */\n completed: boolean;\n /** Whether the board is in manual entry mode */\n entering: boolean;\n /** Error message for manual entry validation */\n enteringError: string | null;\n}\n\n// =============================================================================\n// Play/Game State Types\n// =============================================================================\n\n/**\n * Display modes for Sudoku digits\n */\nexport type SudokuDisplay = 'NUMERIC' | 'KANJI' | 'COLORS' | 'EMOJIS';\n\n/**\n * Session settings (can change during play)\n */\nexport interface SudokuPlaySettings {\n /** Whether pencil marking mode is active */\n pencilmarking: boolean;\n /** Whether auto-pencilmarks were generated */\n autoPencilmarks: boolean;\n}\n\n/**\n * App-level settings (persisted)\n */\nexport interface SudokuAppSettings {\n /** Show errors when input doesn't match solution */\n showErrors: boolean;\n /** Enable UI animations */\n enableAnimations: boolean;\n /** Generate symmetrical puzzles */\n symmetrical: boolean;\n /** Digit display mode */\n display: SudokuDisplay;\n}\n\n/**\n * Current play state\n */\nexport interface SudokuPlay {\n /** The game board */\n board: SudokuBoard;\n /** Session settings */\n settings: SudokuPlaySettings;\n /** Currently selected cell index (0-80, or null) */\n selectedIndex: number | null;\n}\n\n/**\n * Source of the puzzle\n */\nexport type PlayingSource = 'DAILY' | 'CHALLENGE' | 'LEVEL' | 'ENTERED';\n\n/**\n * Full game state including source information\n */\nexport interface SudokuGameState {\n /** Current play state */\n play: SudokuPlay | null;\n /** Original puzzle string (before scrambling) */\n originalPuzzle: string;\n /** Original solution string (before scrambling) */\n originalSolution: string;\n /** Puzzle source */\n source: PlayingSource;\n /** Level UUID if from a level */\n levelUuid: string | null;\n /** Board UUID if applicable */\n boardUuid: string | null;\n /** Undo history stack */\n history: SudokuPlay[];\n /** App settings */\n appSettings: SudokuAppSettings;\n /** Digit mapping from scrambling (original -> scrambled) */\n digitMapping: Map<number, number>;\n /** Reverse digit mapping (scrambled -> original) */\n reverseDigitMapping: Map<number, number>;\n}\n\n// =============================================================================\n// Defaults\n// =============================================================================\n\nexport const DEFAULT_PLAY_SETTINGS: SudokuPlaySettings = {\n pencilmarking: false,\n autoPencilmarks: false,\n};\n\nexport const DEFAULT_APP_SETTINGS: SudokuAppSettings = {\n showErrors: true,\n enableAnimations: true,\n symmetrical: false,\n display: 'NUMERIC',\n};\n\n// =============================================================================\n// Helper Functions\n// =============================================================================\n\n/**\n * Create an empty cell\n */\nexport function createEmptyCell(index: number): SudokuCell {\n return {\n index,\n solution: null,\n given: null,\n input: null,\n pencilmarks: null,\n };\n}\n\n/**\n * Create an empty board (81 empty cells)\n */\nexport function createEmptyBoard(): SudokuBoard {\n return {\n cells: Array.from({ length: 81 }, (_, i) => createEmptyCell(i)),\n completed: false,\n entering: false,\n enteringError: null,\n };\n}\n\n/**\n * Check if a cell has an error (input doesn't match solution)\n */\nexport function cellHasError(cell: SudokuCell): boolean {\n if (cell.given !== null) return false; // Clue cells can't have errors\n if (cell.input === null) return false; // Empty cells can't have errors\n if (cell.solution === null) return false; // No solution to compare\n return cell.input !== cell.solution;\n}\n\n/**\n * Get all cell indices in the same row\n */\nexport function getRowIndices(index: number): number[] {\n const row = rowOf(index);\n return Array.from({ length: 9 }, (_, col) => row * 9 + col);\n}\n\n/**\n * Get all cell indices in the same column\n */\nexport function getColumnIndices(index: number): number[] {\n const col = columnOf(index);\n return Array.from({ length: 9 }, (_, row) => row * 9 + col);\n}\n\n/**\n * Get all cell indices in the same block\n */\nexport function getBlockIndices(index: number): number[] {\n const blockIndex = blockOf(index);\n const blockX = blockIndex % 3;\n const blockY = Math.floor(blockIndex / 3);\n const indices: number[] = [];\n for (let i = 0; i < 9; i++) {\n const cellX = i % 3;\n const cellY = Math.floor(i / 3);\n const x = blockX * 3 + cellX;\n const y = blockY * 3 + cellY;\n indices.push(y * 9 + x);\n }\n return indices;\n}\n\n/**\n * Get all related cell indices (same row, column, or block)\n */\nexport function getRelatedIndices(index: number): number[] {\n const rowIndices = getRowIndices(index);\n const colIndices = getColumnIndices(index);\n const blockIndices = getBlockIndices(index);\n const allIndices = new Set([...rowIndices, ...colIndices, ...blockIndices]);\n allIndices.delete(index); // Remove the cell itself\n return Array.from(allIndices);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/utils/board.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"board.js","sourceRoot":"","sources":["../../src/utils/board.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Board utilities for parsing, stringifying, and manipulating Sudoku boards\n */\n\nimport type { CellState, GameBoard } from '../types';\nimport {\n BLOCK_SIZE,\n BOARD_SIZE,\n parseBoardString,\n} from '@sudobility/sudojo_types';\n\n/**\n * Creates an initial GameBoard from puzzle and solution strings\n * @param puzzle - 81-character puzzle string\n * @param solution - 81-character solution string\n * @returns GameBoard with initialized cell states\n */\nexport function createGameBoard(puzzle: string, solution: string): GameBoard {\n const puzzleArray = parseBoardString(puzzle);\n // Validate solution string (will throw if invalid)\n parseBoardString(solution);\n\n const board: GameBoard = [];\n for (let row = 0; row < BOARD_SIZE; row++) {\n const rowArray: CellState[] = [];\n for (let col = 0; col < BOARD_SIZE; col++) {\n const puzzleValue = puzzleArray[row]?.[col] ?? 0;\n const isClue = puzzleValue !== 0;\n rowArray.push({\n row,\n column: col,\n value: isClue ? puzzleValue : null,\n isClue,\n isError: false,\n pencilmarks: new Set<number>(),\n isSelected: false,\n isHighlighted: false,\n isSameValue: false,\n });\n }\n board.push(rowArray);\n }\n return board;\n}\n\n/**\n * Gets the current board state as a string (user's current progress)\n * @param board - GameBoard\n * @returns 81-character string representing current state\n */\nexport function getBoardStateString(board: GameBoard): string {\n let result = '';\n for (let row = 0; row < BOARD_SIZE; row++) {\n for (let col = 0; col < BOARD_SIZE; col++) {\n const cell = board[row]?.[col];\n result += cell?.value?.toString() ?? '0';\n }\n }\n return result;\n}\n\n/**\n * Gets the pencilmarks as a comma-separated string for the solver API\n * @param board - GameBoard\n * @returns Comma-separated string of pencilmarks for each cell\n */\nexport function getPencilmarksString(board: GameBoard): string {\n const pencilmarks: string[] = [];\n for (let row = 0; row < BOARD_SIZE; row++) {\n for (let col = 0; col < BOARD_SIZE; col++) {\n const cell = board[row]?.[col];\n if (cell && cell.pencilmarks.size > 0) {\n const sorted = Array.from(cell.pencilmarks).sort((a, b) => a - b);\n pencilmarks.push(sorted.join(''));\n } else {\n pencilmarks.push('');\n }\n }\n }\n return pencilmarks.join(',');\n}\n\n/**\n * Gets the block index (0-8) for a cell position\n * @param row - Row index (0-8)\n * @param col - Column index (0-8)\n * @returns Block index (0-8)\n */\nexport function getBlockIndex(row: number, col: number): number {\n const blockRow = Math.floor(row / BLOCK_SIZE);\n const blockCol = Math.floor(col / BLOCK_SIZE);\n return blockRow * BLOCK_SIZE + blockCol;\n}\n\n/**\n * Gets all cells in the same row\n * @param row - Row index (0-8)\n * @returns Array of {row, column} positions\n */\nexport function getRowCells(\n row: number\n): Array<{ row: number; column: number }> {\n const cells: Array<{ row: number; column: number }> = [];\n for (let col = 0; col < BOARD_SIZE; col++) {\n cells.push({ row, column: col });\n }\n return cells;\n}\n\n/**\n * Gets all cells in the same column\n * @param col - Column index (0-8)\n * @returns Array of {row, column} positions\n */\nexport function getColumnCells(\n col: number\n): Array<{ row: number; column: number }> {\n const cells: Array<{ row: number; column: number }> = [];\n for (let row = 0; row < BOARD_SIZE; row++) {\n cells.push({ row, column: col });\n }\n return cells;\n}\n\n/**\n * Gets all cells in the same block\n * @param blockIndex - Block index (0-8)\n * @returns Array of {row, column} positions\n */\nexport function getBlockCells(\n blockIndex: number\n): Array<{ row: number; column: number }> {\n const cells: Array<{ row: number; column: number }> = [];\n const blockRow = Math.floor(blockIndex / BLOCK_SIZE);\n const blockCol = blockIndex % BLOCK_SIZE;\n const startRow = blockRow * BLOCK_SIZE;\n const startCol = blockCol * BLOCK_SIZE;\n\n for (let r = 0; r < BLOCK_SIZE; r++) {\n for (let c = 0; c < BLOCK_SIZE; c++) {\n cells.push({ row: startRow + r, column: startCol + c });\n }\n }\n return cells;\n}\n\n/**\n * Gets all related cells (same row, column, or block)\n * @param row - Row index\n * @param col - Column index\n * @returns Array of {row, column} positions (excluding the cell itself)\n */\nexport function getRelatedCells(\n row: number,\n col: number\n): Array<{ row: number; column: number }> {\n const related = new Map<string, { row: number; column: number }>();\n\n // Add row cells\n for (const cell of getRowCells(row)) {\n if (cell.row !== row || cell.column !== col) {\n related.set(`${cell.row},${cell.column}`, cell);\n }\n }\n\n // Add column cells\n for (const cell of getColumnCells(col)) {\n if (cell.row !== row || cell.column !== col) {\n related.set(`${cell.row},${cell.column}`, cell);\n }\n }\n\n // Add block cells\n const blockIndex = getBlockIndex(row, col);\n for (const cell of getBlockCells(blockIndex)) {\n if (cell.row !== row || cell.column !== col) {\n related.set(`${cell.row},${cell.column}`, cell);\n }\n }\n\n return Array.from(related.values());\n}\n\n/**\n * Checks if a value is valid for a cell position (not checking solution, just Sudoku rules)\n * @param board - GameBoard\n * @param row - Row index\n * @param col - Column index\n * @param value - Value to check (1-9)\n * @returns true if the value doesn't conflict with existing values\n */\nexport function isValidPlacement(\n board: GameBoard,\n row: number,\n col: number,\n value: number\n): boolean {\n if (value < 1 || value > 9) {\n return false;\n }\n\n // Check row\n for (let c = 0; c < BOARD_SIZE; c++) {\n if (c !== col && board[row]?.[c]?.value === value) {\n return false;\n }\n }\n\n // Check column\n for (let r = 0; r < BOARD_SIZE; r++) {\n if (r !== row && board[r]?.[col]?.value === value) {\n return false;\n }\n }\n\n // Check block\n const blockStartRow = Math.floor(row / BLOCK_SIZE) * BLOCK_SIZE;\n const blockStartCol = Math.floor(col / BLOCK_SIZE) * BLOCK_SIZE;\n for (let r = blockStartRow; r < blockStartRow + BLOCK_SIZE; r++) {\n for (let c = blockStartCol; c < blockStartCol + BLOCK_SIZE; c++) {\n if ((r !== row || c !== col) && board[r]?.[c]?.value === value) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n/**\n * Clones a GameBoard (deep copy)\n * @param board - GameBoard to clone\n * @returns New GameBoard with copied values\n */\nexport function cloneBoard(board: GameBoard): GameBoard {\n return board.map(row =>\n row.map(cell => ({\n ...cell,\n pencilmarks: new Set(cell.pencilmarks),\n }))\n );\n}\n\n/**\n * Gets all empty cells in the board\n * @param board - GameBoard\n * @returns Array of {row, column} positions\n */\nexport function getEmptyCells(\n board: GameBoard\n): Array<{ row: number; column: number }> {\n const emptyCells: Array<{ row: number; column: number }> = [];\n for (let row = 0; row < BOARD_SIZE; row++) {\n for (let col = 0; col < BOARD_SIZE; col++) {\n if (board[row]?.[col]?.value === null) {\n emptyCells.push({ row, column: col });\n }\n }\n }\n return emptyCells;\n}\n\n/**\n * Counts the number of filled cells\n * @param board - GameBoard\n * @returns Number of filled cells\n */\nexport function countFilledCells(board: GameBoard): number {\n let count = 0;\n for (let row = 0; row < BOARD_SIZE; row++) {\n for (let col = 0; col < BOARD_SIZE; col++) {\n if (board[row]?.[col]?.value !== null) {\n count++;\n }\n }\n }\n return count;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"digitDisplay.js","sourceRoot":"","sources":["../../src/utils/digitDisplay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,YAAY,GAAG;IACnB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACK,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,SAAuB,SAAS;IAEhC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD;YACE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"digitDisplay.js","sourceRoot":"","sources":["../../src/utils/digitDisplay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,YAAY,GAAG;IACnB,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;IACH,GAAG;CACK,CAAC;AAEX,MAAM,YAAY,GAAG;IACnB,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;CACI,CAAC;AAEX;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAa,EACb,SAAuB,SAAS;IAEhC,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IAEjD,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,OAAO,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD,KAAK,QAAQ;YACX,OAAO,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAClD;YACE,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;AACH,CAAC","sourcesContent":["/**\n * Digit display mapping for different display formats.\n * Used by both sudojo_app (web) and sudojo_app_rn (React Native).\n */\n\nimport type { DigitDisplay } from '../types/settings';\n\nconst KANJI_DIGITS = [\n '一',\n '二',\n '三',\n '四',\n '五',\n '六',\n '七',\n '八',\n '九',\n] as const;\n\nconst EMOJI_DIGITS = [\n '🍎',\n '🍊',\n '🍋',\n '🍏',\n '🫐',\n '🍇',\n '🍑',\n '🌽',\n '🍓',\n] as const;\n\n/**\n * Convert a digit (1-9) to its display string based on the display format.\n *\n * @param digit - A number 1-9\n * @param format - The display format ('numeric', 'kanji', or 'emojis')\n * @returns The display string for the digit\n */\nexport function displayDigit(\n digit: number,\n format: DigitDisplay = 'numeric'\n): string {\n if (digit < 1 || digit > 9) return String(digit);\n\n switch (format) {\n case 'kanji':\n return KANJI_DIGITS[digit - 1] ?? String(digit);\n case 'emojis':\n return EMOJI_DIGITS[digit - 1] ?? String(digit);\n default:\n return String(digit);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"hintExplanation.js","sourceRoot":"","sources":["../../src/utils/hintExplanation.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hintExplanation.js","sourceRoot":"","sources":["../../src/utils/hintExplanation.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Generate detailed hint explanations based on the hint payload\n * Similar to tutorial explanations but for live hints\n *\n * Each explanation is designed to teach the user WHY the technique works,\n * not just WHAT to do.\n */\n\nimport type { SolverHintCell, SolverHintStep } from '@sudobility/sudojo_types';\nimport { TechniqueId } from '@sudobility/sudojo_types';\nimport type { DigitDisplay } from '../types/settings';\nimport { displayDigit as mapDigitDisplay } from './digitDisplay';\n\n// Module-level display format, set by public entry points before calling internals.\nlet _display: DigitDisplay = 'numeric';\n\n// Cell notation (R1C1 format)\nfunction cellName(row: number, col: number): string {\n return `R${row + 1}C${col + 1}`;\n}\n\n// Format a list of cells\nfunction cellList(cells: Array<{ row: number; col: number }>): string {\n return cells.map(c => cellName(c.row, c.col)).join(', ');\n}\n\n// Format digit(s) - only valid Sudoku digits 1-9\n// Uses module-level _display set by public entry points.\nfunction formatDigit(d: string | number): string {\n const s = String(d);\n if (s < '1' || s > '9') return '?';\n if (_display !== 'numeric') {\n return mapDigitDisplay(parseInt(s, 10), _display);\n }\n return s;\n}\n\n// Format multiple digits as set - only valid Sudoku digits 1-9\nfunction formatDigits(digits: string | string[]): string {\n const arr = Array.isArray(digits)\n ? digits.filter(d => d >= '1' && d <= '9')\n : digits.split('').filter(d => d >= '1' && d <= '9');\n if (arr.length === 0) return '';\n if (arr.length === 1) return formatDigit(arr[0] ?? '');\n return `{${arr\n .sort()\n .map(d => formatDigit(d))\n .join(', ')}}`;\n}\n\n// Extract first valid Sudoku digit (1-9) from a string\nfunction getFirstValidDigit(digits: string | undefined): string {\n if (!digits) return '?';\n for (const d of digits) {\n if (d >= '1' && d <= '9') return d;\n }\n return '?';\n}\n\n// Extract all valid Sudoku digits (1-9) from a string\nfunction getValidDigits(digits: string | undefined): string[] {\n if (!digits) return [];\n return digits.split('').filter(d => d >= '1' && d <= '9');\n}\n\n// Get block number (1-9) from row/col\nfunction getBlock(row: number, col: number): number {\n return Math.floor(row / 3) * 3 + Math.floor(col / 3) + 1;\n}\n\n// Determine the common house for cells\nfunction findCommonHouse(\n cells: Array<{ row: number; col: number }>\n): { type: 'row' | 'col' | 'block'; index: number; name: string } | null {\n const first = cells[0];\n if (cells.length < 2 || !first) return null;\n\n const sameRow = cells.every(c => c.row === first.row);\n if (sameRow) {\n return { type: 'row', index: first.row, name: `Row ${first.row + 1}` };\n }\n\n const sameCol = cells.every(c => c.col === first.col);\n if (sameCol) {\n return { type: 'col', index: first.col, name: `Column ${first.col + 1}` };\n }\n\n const sameBlock = cells.every(\n c => getBlock(c.row, c.col) === getBlock(first.row, first.col)\n );\n if (sameBlock) {\n const block = getBlock(first.row, first.col);\n return { type: 'block', index: block, name: `Block ${block}` };\n }\n\n return null;\n}\n\n// Extract cells that have select action (digit placement)\n// Note: select: \"0\" means no selection (placeholder), only 1-9 are valid digits\nfunction getSelectCells(\n hint: SolverHintStep\n): Array<{ row: number; col: number; digit: string }> {\n return hint.cells\n .filter(\n (c: SolverHintCell) =>\n c.actions.select && c.actions.select !== '' && c.actions.select !== '0'\n )\n .map((c: SolverHintCell) => ({\n row: c.row,\n col: c.column,\n digit: c.actions.select,\n }));\n}\n\n// Extract cells that have remove action (eliminations)\n// Note: Filter out cells where remove only contains \"0\" (placeholder)\nfunction getRemoveCells(\n hint: SolverHintStep\n): Array<{ row: number; col: number; digits: string }> {\n return hint.cells\n .filter(\n (c: SolverHintCell) =>\n c.actions.remove &&\n c.actions.remove !== '' &&\n getValidDigits(c.actions.remove).length > 0\n )\n .map((c: SolverHintCell) => ({\n row: c.row,\n col: c.column,\n digits: c.actions.remove,\n }));\n}\n\n// Extract cells that have highlight action (pattern cells)\n// Note: Filter out cells where highlight only contains \"0\" (placeholder)\nfunction getHighlightCells(\n hint: SolverHintStep\n): Array<{ row: number; col: number; digits: string }> {\n return hint.cells\n .filter(\n (c: SolverHintCell) =>\n c.actions.highlight &&\n c.actions.highlight !== '' &&\n getValidDigits(c.actions.highlight).length > 0\n )\n .map((c: SolverHintCell) => ({\n row: c.row,\n col: c.column,\n digits: c.actions.highlight,\n }));\n}\n\n/**\n * Generate detailed explanation for a hint\n *\n * @param hint - The hint step data\n * @param techniqueId - The technique ID (from SolverHints.technique)\n * @param digitDisplay - Optional digit display format\n */\nexport function generateDetailedExplanation(\n hint: SolverHintStep,\n techniqueId?: number,\n digitDisplay?: DigitDisplay\n): string {\n _display = digitDisplay ?? 'numeric';\n const selectCells = getSelectCells(hint);\n const removeCells = getRemoveCells(hint);\n const highlightCells = getHighlightCells(hint);\n\n switch (techniqueId) {\n case TechniqueId.FULL_HOUSE:\n return explainFullHouse(hint, selectCells);\n\n case TechniqueId.HIDDEN_SINGLE:\n return explainHiddenSingle(hint, selectCells);\n\n case TechniqueId.NAKED_SINGLE:\n return explainNakedSingle(hint, selectCells);\n\n case TechniqueId.HIDDEN_PAIR:\n return explainHiddenPair(hint, highlightCells, removeCells);\n\n case TechniqueId.NAKED_PAIR:\n return explainNakedPair(hint, highlightCells, removeCells);\n\n case TechniqueId.LOCKED_CANDIDATES:\n return explainLockedCandidates(hint, highlightCells, removeCells);\n\n case TechniqueId.HIDDEN_TRIPLE:\n return explainHiddenTriple(hint, highlightCells, removeCells);\n\n case TechniqueId.NAKED_TRIPLE:\n return explainNakedTriple(hint, highlightCells, removeCells);\n\n case TechniqueId.HIDDEN_QUAD:\n return explainHiddenQuad(hint, highlightCells, removeCells);\n\n case TechniqueId.NAKED_QUAD:\n return explainNakedQuad(hint, highlightCells, removeCells);\n\n case TechniqueId.X_WING:\n return explainXWing(hint, highlightCells, removeCells);\n\n case TechniqueId.SWORDFISH:\n return explainSwordfish(hint, highlightCells, removeCells);\n\n case TechniqueId.JELLYFISH:\n return explainJellyfish(hint, highlightCells, removeCells);\n\n case TechniqueId.XY_WING:\n return explainXYWing(hint, highlightCells, removeCells);\n\n case TechniqueId.FINNED_X_WING:\n return explainFinnedXWing(hint, highlightCells, removeCells);\n\n case TechniqueId.SQUIRMBAG:\n return explainSquirmbag(hint, highlightCells, removeCells);\n\n case TechniqueId.FINNED_SWORDFISH:\n return explainFinnedSwordfish(hint, highlightCells, removeCells);\n\n case TechniqueId.FINNED_JELLYFISH:\n return explainFinnedJellyfish(hint, highlightCells, removeCells);\n\n case TechniqueId.XYZ_WING:\n return explainXYZWing(hint, highlightCells, removeCells);\n\n case TechniqueId.WXYZ_WING:\n return explainWXYZWing(hint, highlightCells, removeCells);\n\n case TechniqueId.ALMOST_LOCKED_SETS:\n return explainAlmostLockedSets(hint, highlightCells, removeCells);\n\n case TechniqueId.FINNED_SQUIRMBAG:\n return explainFinnedSquirmbag(hint, highlightCells, removeCells);\n\n case TechniqueId.ALS_CHAIN:\n case TechniqueId.ALS_XZ:\n return explainALSChain(hint, highlightCells, removeCells);\n\n default:\n return generateGenericExplanation(hint, selectCells, removeCells);\n }\n}\n\n/**\n * Full House: The last empty cell in a house.\n */\nfunction explainFullHouse(\n hint: SolverHintStep,\n selectCells: Array<{ row: number; col: number; digit: string }>\n): string {\n if (selectCells.length !== 1) return hint.text;\n\n const cell = selectCells[0];\n if (!cell) return hint.text;\n const digit = formatDigit(cell.digit);\n\n const area = hint.areas?.[0];\n let houseName = '';\n if (area) {\n if (area.type === 'row') houseName = `Row ${area.index + 1}`;\n else if (area.type === 'column') houseName = `Column ${area.index + 1}`;\n else if (area.type === 'block') houseName = `Block ${area.index + 1}`;\n }\n\n if (houseName) {\n return (\n `${houseName} has 8 cells filled, leaving only ${cellName(cell.row, cell.col)} empty. ` +\n `The missing digit is ${digit} — place it here.`\n );\n }\n\n return (\n `Cell ${cellName(cell.row, cell.col)} is the only empty cell in its house. ` +\n `Place ${digit} here.`\n );\n}\n\n/**\n * Hidden Single: A digit that can only go in one cell within a house.\n */\nfunction explainHiddenSingle(\n hint: SolverHintStep,\n selectCells: Array<{ row: number; col: number; digit: string }>\n): string {\n if (selectCells.length !== 1) return hint.text;\n\n const cell = selectCells[0];\n if (!cell) return hint.text;\n const digit = formatDigit(cell.digit);\n\n const area = hint.areas?.[0];\n let houseName: string;\n if (area) {\n houseName =\n area.type === 'row'\n ? `Row ${area.index + 1}`\n : area.type === 'column'\n ? `Column ${area.index + 1}`\n : `Block ${area.index + 1}`;\n } else {\n houseName = `Block ${getBlock(cell.row, cell.col)}`;\n }\n\n return (\n `In ${houseName}, digit ${digit} can only go in one cell: ${cellName(cell.row, cell.col)}. ` +\n `Even though this cell may have other candidates, ${digit} has no other place in ${houseName.toLowerCase()}. ` +\n `Place ${digit} here.`\n );\n}\n\n/**\n * Naked Single: A cell with only one candidate remaining.\n */\nfunction explainNakedSingle(\n hint: SolverHintStep,\n selectCells: Array<{ row: number; col: number; digit: string }>\n): string {\n if (selectCells.length !== 1) return hint.text;\n\n const cell = selectCells[0];\n if (!cell) return hint.text;\n const digit = formatDigit(cell.digit);\n\n return (\n `Cell ${cellName(cell.row, cell.col)} has only one candidate left: ${digit}. ` +\n `All other digits are eliminated by numbers already placed in its row, column, and block. ` +\n `Place ${digit} here.`\n );\n}\n\n/**\n * Hidden Pair: Two digits that can only appear in exactly two cells within a house.\n */\nfunction explainHiddenPair(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 2) return hint.text;\n\n const cells = highlightCells\n .slice(0, 2)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their house';\n\n const hiddenDigits = new Set<string>();\n highlightCells.slice(0, 2).forEach(c => {\n for (const d of getValidDigits(c.digits)) hiddenDigits.add(d);\n });\n const pairDigits = formatDigits(Array.from(hiddenDigits));\n\n const eliminations = removeCells.filter(c =>\n cells.some(hc => hc.row === c.row && hc.col === c.col)\n );\n\n let explanation = `In ${houseName}, digits ${pairDigits} can ONLY appear in ${cellList(cells)}. `;\n explanation += `These form a Hidden Pair — the pair is \"hidden\" among other candidates. `;\n explanation += `Since ${pairDigits} must occupy these 2 cells, `;\n\n if (eliminations.length > 0) {\n const elimDigits = new Set<string>();\n eliminations.forEach(e => {\n for (const d of getValidDigits(e.digits)) elimDigits.add(d);\n });\n explanation += `eliminate the other candidates ${formatDigits(Array.from(elimDigits))} from these cells.`;\n } else {\n explanation += `other candidates can be eliminated.`;\n }\n\n return explanation;\n}\n\n/**\n * Naked Pair: Two cells in a house that contain exactly the same two candidates.\n */\nfunction explainNakedPair(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 2) return hint.text;\n\n const cells = highlightCells\n .slice(0, 2)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their shared house';\n\n const pairDigits = formatDigits(getValidDigits(highlightCells[0]?.digits));\n\n let explanation = `Cells ${cellList(cells)} both contain exactly ${pairDigits} as their only candidates. `;\n explanation += `This is a Naked Pair — the pair is \"naked\" because these cells show only these digits. `;\n explanation += `Since ${pairDigits} must go in these cells, `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells\n .filter(c => !cells.some(pc => pc.row === c.row && pc.col === c.col))\n .map(c => ({ row: c.row, col: c.col }));\n if (elimCells.length > 0) {\n explanation += `eliminate ${pairDigits} from other cells in ${houseName.toLowerCase()}: ${cellList(elimCells)}.`;\n } else {\n explanation += `they can be eliminated from other cells in the house.`;\n }\n }\n\n return explanation;\n}\n\n/**\n * Locked Candidates (Pointing/Claiming)\n */\nfunction explainLockedCandidates(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 2) return hint.text;\n\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const first = cells[0];\n if (!first) return hint.text;\n const lockedDigit = formatDigit(\n getFirstValidDigit(highlightCells[0]?.digits)\n );\n\n const sameRow = cells.every(c => c.row === first.row);\n const sameCol = cells.every(c => c.col === first.col);\n const sameBlock = cells.every(\n c => getBlock(c.row, c.col) === getBlock(first.row, first.col)\n );\n\n const block = getBlock(first.row, first.col);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n const elimInSameBlock = elimCells.every(\n c => getBlock(c.row, c.col) === block\n );\n\n let explanation = '';\n\n if (sameBlock && (sameRow || sameCol)) {\n if (elimInSameBlock) {\n const lineName = sameRow\n ? `Row ${first.row + 1}`\n : `Column ${first.col + 1}`;\n explanation = `In ${lineName}, digit ${lockedDigit} can only appear in Block ${block} (cells ${cellList(cells)}). `;\n explanation += `This \"claims\" ${lockedDigit} for this line within the block. `;\n if (elimCells.length > 0) {\n explanation += `Eliminate ${lockedDigit} from other cells in Block ${block}: ${cellList(elimCells)}.`;\n }\n } else {\n const lineName = sameRow\n ? `Row ${first.row + 1}`\n : `Column ${first.col + 1}`;\n explanation = `In Block ${block}, digit ${lockedDigit} can only appear in ${lineName} (cells ${cellList(cells)}). `;\n explanation += `This \"points\" to ${lockedDigit} being restricted to this line. `;\n if (elimCells.length > 0) {\n explanation += `Eliminate ${lockedDigit} from ${cellList(elimCells)} in ${lineName} outside Block ${block}.`;\n }\n }\n } else if (sameRow) {\n explanation = `Digit ${lockedDigit} is locked to Row ${first.row + 1} in these cells: ${cellList(cells)}. `;\n if (elimCells.length > 0) {\n explanation += `Eliminate ${lockedDigit} from ${cellList(elimCells)}.`;\n }\n } else if (sameCol) {\n explanation = `Digit ${lockedDigit} is locked to Column ${first.col + 1} in these cells: ${cellList(cells)}. `;\n if (elimCells.length > 0) {\n explanation += `Eliminate ${lockedDigit} from ${cellList(elimCells)}.`;\n }\n } else {\n explanation = `Locked Candidates pattern for digit ${lockedDigit}. `;\n if (elimCells.length > 0) {\n explanation += `Eliminate ${lockedDigit} from ${cellList(elimCells)}.`;\n }\n }\n\n return explanation;\n}\n\n/**\n * Hidden Triple: Three digits that can only appear in exactly three cells within a house.\n */\nfunction explainHiddenTriple(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 3) return hint.text;\n\n const cells = highlightCells\n .slice(0, 3)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their house';\n\n const hiddenDigits = new Set<string>();\n highlightCells.slice(0, 3).forEach(c => {\n for (const d of getValidDigits(c.digits)) hiddenDigits.add(d);\n });\n const tripleDigits = formatDigits(Array.from(hiddenDigits));\n\n let explanation = `In ${houseName}, digits ${tripleDigits} can ONLY appear in cells ${cellList(cells)}. `;\n explanation += `This is a Hidden Triple — these 3 digits are \"hidden\" among other candidates. `;\n explanation += `Since ${tripleDigits} must occupy these 3 cells, `;\n\n if (removeCells.length > 0) {\n const elimDigits = new Set<string>();\n removeCells\n .filter(c => cells.some(hc => hc.row === c.row && hc.col === c.col))\n .forEach(e => {\n for (const d of getValidDigits(e.digits)) elimDigits.add(d);\n });\n if (elimDigits.size > 0) {\n explanation += `eliminate the other candidates ${formatDigits(Array.from(elimDigits))} from these cells.`;\n } else {\n explanation += `other candidates can be eliminated.`;\n }\n } else {\n explanation += `other candidates can be eliminated.`;\n }\n\n return explanation;\n}\n\n/**\n * Naked Triple: Three cells in a house that together contain only three candidates total.\n */\nfunction explainNakedTriple(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 3) return hint.text;\n\n const cells = highlightCells\n .slice(0, 3)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their house';\n\n const nakedDigits = new Set<string>();\n highlightCells.slice(0, 3).forEach(c => {\n for (const d of getValidDigits(c.digits)) nakedDigits.add(d);\n });\n const tripleDigits = formatDigits(Array.from(nakedDigits));\n\n let explanation = `Cells ${cellList(cells)} together contain only the candidates ${tripleDigits}. `;\n explanation += `This is a Naked Triple — these 3 cells share only 3 digits between them. `;\n explanation += `Since ${tripleDigits} must go in these cells, `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells.filter(\n c => !cells.some(nc => nc.row === c.row && nc.col === c.col)\n );\n if (elimCells.length > 0) {\n explanation += `eliminate ${tripleDigits} from other cells in ${houseName.toLowerCase()}: ${cellList(elimCells.map(c => ({ row: c.row, col: c.col })))}.`;\n } else {\n explanation += `they can be eliminated from other cells.`;\n }\n } else {\n explanation += `they can be eliminated from other cells.`;\n }\n\n return explanation;\n}\n\n/**\n * Hidden Quad: Four digits that can only appear in exactly four cells within a house.\n */\nfunction explainHiddenQuad(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const cells = highlightCells\n .slice(0, 4)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their house';\n\n const hiddenDigits = new Set<string>();\n highlightCells.slice(0, 4).forEach(c => {\n for (const d of getValidDigits(c.digits)) hiddenDigits.add(d);\n });\n const quadDigits = formatDigits(Array.from(hiddenDigits));\n\n let explanation = `In ${houseName}, digits ${quadDigits} can ONLY appear in cells ${cellList(cells)}. `;\n explanation += `This is a Hidden Quad — 4 digits restricted to 4 cells. `;\n\n if (removeCells.length > 0) {\n const elimDigits = new Set<string>();\n removeCells\n .filter(c => cells.some(hc => hc.row === c.row && hc.col === c.col))\n .forEach(e => {\n for (const d of getValidDigits(e.digits)) elimDigits.add(d);\n });\n if (elimDigits.size > 0) {\n explanation += `Eliminate the other candidates ${formatDigits(Array.from(elimDigits))} from these cells.`;\n }\n }\n\n return explanation;\n}\n\n/**\n * Naked Quad: Four cells in a house that together contain only four candidates total.\n */\nfunction explainNakedQuad(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const cells = highlightCells\n .slice(0, 4)\n .map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their house';\n\n const nakedDigits = new Set<string>();\n highlightCells.slice(0, 4).forEach(c => {\n for (const d of getValidDigits(c.digits)) nakedDigits.add(d);\n });\n const quadDigits = formatDigits(Array.from(nakedDigits));\n\n let explanation = `Cells ${cellList(cells)} together contain only the candidates ${quadDigits}. `;\n explanation += `This is a Naked Quad — 4 cells sharing only 4 digits. `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells.filter(\n c => !cells.some(nc => nc.row === c.row && nc.col === c.col)\n );\n if (elimCells.length > 0) {\n explanation += `Eliminate ${quadDigits} from other cells in ${houseName.toLowerCase()}: ${cellList(elimCells.map(c => ({ row: c.row, col: c.col })))}.`;\n }\n }\n\n return explanation;\n}\n\n/**\n * X-Wing: A 2x2 fish pattern.\n */\nfunction explainXWing(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const cols = [...new Set(cells.map(c => c.col))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n const elimInCols =\n elimCells.length > 0 && elimCells.every(c => cols.includes(c.col));\n\n let explanation = '';\n if (elimInCols || rows.length === 2) {\n explanation = `X-Wing found for digit ${digit}. `;\n explanation += `In Rows ${rows.map(r => r + 1).join(' and ')}, digit ${digit} appears only in Columns ${cols.map(c => c + 1).join(' and ')}. `;\n explanation += `This forms a rectangle where ${digit} must occupy two opposite corners. `;\n } else {\n explanation = `X-Wing found for digit ${digit}. `;\n explanation += `In Columns ${cols.map(c => c + 1).join(' and ')}, digit ${digit} appears only in Rows ${rows.map(r => r + 1).join(' and ')}. `;\n explanation += `This forms a rectangle where ${digit} must occupy two opposite corners. `;\n }\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Swordfish: A 3x3 fish pattern.\n */\nfunction explainSwordfish(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 6) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const cols = [...new Set(cells.map(c => c.col))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Swordfish found for digit ${digit}. `;\n explanation += `In Rows ${rows.map(r => r + 1).join(', ')}, digit ${digit} is restricted to Columns ${cols.map(c => c + 1).join(', ')}. `;\n explanation += `This 3×3 fish pattern means ${digit} must appear once per row in these columns. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from other cells in these columns: ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Jellyfish: A 4x4 fish pattern.\n */\nfunction explainJellyfish(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 8) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const cols = [...new Set(cells.map(c => c.col))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Jellyfish found for digit ${digit}. `;\n explanation += `In Rows ${rows.map(r => r + 1).join(', ')}, digit ${digit} is restricted to Columns ${cols.map(c => c + 1).join(', ')}. `;\n explanation += `This 4×4 fish pattern locks ${digit} within these intersections. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from other cells in these columns: ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Squirmbag: A 5x5 fish pattern.\n */\nfunction explainSquirmbag(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 10) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const cols = [...new Set(cells.map(c => c.col))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Squirmbag (5-fish) found for digit ${digit}. `;\n explanation += `Across Rows ${rows.map(r => r + 1).join(', ')}, digit ${digit} is confined to Columns ${cols.map(c => c + 1).join(', ')}. `;\n explanation += `This rare 5×5 fish pattern restricts ${digit} to these intersections. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * XY-Wing: Three cells forming a bent pattern with bivalve cells.\n */\nfunction explainXYWing(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 3) return hint.text;\n\n const cells = highlightCells\n .slice(0, 3)\n .map(c => ({ row: c.row, col: c.col }));\n const zDigit =\n removeCells.length > 0\n ? formatDigit(getFirstValidDigit(removeCells[0]?.digits))\n : '?';\n\n let explanation = `XY-Wing pattern found. `;\n explanation += `Three cells form a \"bent triple\": ${cellList(cells)}. `;\n explanation += `The pivot cell sees both wing cells, and each wing contains the digit ${zDigit}. `;\n explanation += `If the pivot takes one value, one wing gets ${zDigit}. If it takes the other, the other wing gets ${zDigit}. `;\n explanation += `Either way, ${zDigit} must appear in one of the wings. `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n explanation += `Eliminate ${zDigit} from cells that see both wings: ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * XYZ-Wing: Similar to XY-Wing but pivot has 3 candidates (XYZ).\n */\nfunction explainXYZWing(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 3) return hint.text;\n\n const cells = highlightCells\n .slice(0, 3)\n .map(c => ({ row: c.row, col: c.col }));\n const zDigit =\n removeCells.length > 0\n ? formatDigit(getFirstValidDigit(removeCells[0]?.digits))\n : '?';\n\n let explanation = `XYZ-Wing pattern found. `;\n explanation += `The pivot cell has 3 candidates (XYZ), and two wing cells each have 2 candidates. `;\n explanation += `Cells: ${cellList(cells)}. `;\n explanation += `The digit ${zDigit} appears in all three pattern cells. `;\n explanation += `One of these cells MUST contain ${zDigit}. `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n explanation += `Eliminate ${zDigit} from cells that see all three: ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * WXYZ-Wing: Four cells with four candidates total (WXYZ).\n */\nfunction explainWXYZWing(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const cells = highlightCells\n .slice(0, 4)\n .map(c => ({ row: c.row, col: c.col }));\n const elimDigit =\n removeCells.length > 0\n ? formatDigit(getFirstValidDigit(removeCells[0]?.digits))\n : '?';\n\n const allDigits = new Set<string>();\n highlightCells.slice(0, 4).forEach(c => {\n for (const d of getValidDigits(c.digits)) allDigits.add(d);\n });\n\n let explanation = `WXYZ-Wing pattern found. `;\n explanation += `Four cells ${cellList(cells)} contain exactly 4 candidates: ${formatDigits(Array.from(allDigits))}. `;\n explanation += `One of these cells must contain ${elimDigit}. `;\n\n if (removeCells.length > 0) {\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n explanation += `Eliminate ${elimDigit} from cells that see all instances of ${elimDigit} in the pattern: ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Finned X-Wing\n */\nfunction explainFinnedXWing(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const cols = [...new Set(cells.map(c => c.col))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Finned X-Wing for digit ${digit}. `;\n explanation += `An X-Wing pattern exists in Rows ${rows.map(r => r + 1).join(' and ')}, Columns ${cols\n .slice(0, 2)\n .map(c => c + 1)\n .join(' and ')}, `;\n explanation += `but with an extra \"fin\" candidate that breaks the perfect rectangle. `;\n explanation += `The fin limits eliminations to cells that see both the pattern and the fin. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\nfunction explainFinnedSwordfish(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 6) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Finned Swordfish for digit ${digit}. `;\n explanation += `A Swordfish pattern exists across Rows ${rows.map(r => r + 1).join(', ')}, `;\n explanation += `but with an extra \"fin\" that restricts eliminations. `;\n explanation += `Only cells seeing both the pattern and fin can have ${digit} eliminated. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\nfunction explainFinnedJellyfish(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 8) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Finned Jellyfish for digit ${digit}. `;\n explanation += `A Jellyfish pattern exists across Rows ${rows.map(r => r + 1).join(', ')}, `;\n explanation += `with an extra \"fin\" candidate. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\nfunction explainFinnedSquirmbag(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 10) return hint.text;\n\n const digit = formatDigit(getFirstValidDigit(highlightCells[0]?.digits));\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const rows = [...new Set(cells.map(c => c.row))].sort((a, b) => a - b);\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `Finned Squirmbag (5-fish) for digit ${digit}. `;\n explanation += `A rare 5-fish pattern across Rows ${rows.map(r => r + 1).join(', ')}, with a fin. `;\n\n if (elimCells.length > 0) {\n explanation += `Eliminate ${digit} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Almost Locked Sets (ALS)\n */\nfunction explainAlmostLockedSets(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 2) return hint.text;\n\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n const house = findCommonHouse(cells);\n const houseName = house?.name || 'their shared house';\n\n const alsDigits = new Set<string>();\n highlightCells.forEach(c => {\n for (const d of getValidDigits(c.digits)) alsDigits.add(d);\n });\n\n const n = highlightCells.length;\n const nPlus1 = alsDigits.size;\n\n let explanation = `Almost Locked Set (ALS) in ${houseName}. `;\n explanation += `Cells ${cellList(cells)} (${n} cells) contain ${nPlus1} candidates: ${formatDigits(Array.from(alsDigits))}. `;\n explanation += `Since there's one \"extra\" candidate, if ANY digit is removed externally, `;\n explanation += `the remaining ${n} candidates lock into these ${n} cells. `;\n\n if (removeCells.length > 0) {\n const elimDigits = new Set<string>();\n removeCells.forEach(c => {\n for (const d of getValidDigits(c.digits)) elimDigits.add(d);\n });\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n explanation += `Eliminate ${formatDigits(Array.from(elimDigits))} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * ALS-Chain (ALS-XZ)\n */\nfunction explainALSChain(\n hint: SolverHintStep,\n highlightCells: Array<{ row: number; col: number; digits: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n if (highlightCells.length < 4) return hint.text;\n\n const cells = highlightCells.map(c => ({ row: c.row, col: c.col }));\n\n let explanation = `ALS-XZ (ALS-Chain) pattern. `;\n explanation += `Two Almost Locked Sets share a Restricted Common Candidate (RCC). `;\n explanation += `Pattern cells: ${cellList(cells)}. `;\n explanation += `The RCC can only be true in one ALS, which forces the other ALS to become fully locked. `;\n\n if (removeCells.length > 0) {\n const elimDigits = new Set<string>();\n removeCells.forEach(c => {\n for (const d of getValidDigits(c.digits)) elimDigits.add(d);\n });\n const elimCells = removeCells.map(c => ({ row: c.row, col: c.col }));\n explanation += `Eliminate ${formatDigits(Array.from(elimDigits))} from ${cellList(elimCells)}.`;\n }\n\n return explanation;\n}\n\n/**\n * Generic explanation for unknown or unsupported techniques.\n */\nfunction generateGenericExplanation(\n hint: SolverHintStep,\n selectCells: Array<{ row: number; col: number; digit: string }>,\n removeCells: Array<{ row: number; col: number; digits: string }>\n): string {\n const parts: string[] = [];\n\n parts.push(hint.text);\n\n if (selectCells.length > 0) {\n const placements = selectCells.map(\n c => `${formatDigit(c.digit)} in ${cellName(c.row, c.col)}`\n );\n parts.push(`Place: ${placements.join(', ')}.`);\n }\n\n if (removeCells.length > 0) {\n const eliminations = removeCells.map(\n c => `${formatDigits(c.digits)} from ${cellName(c.row, c.col)}`\n );\n if (eliminations.length <= 5) {\n parts.push(`Eliminate: ${eliminations.join('; ')}.`);\n } else {\n parts.push(`Eliminate candidates from ${removeCells.length} cells.`);\n }\n }\n\n return parts.join(' ');\n}\n\n/**\n * Get a summary of the hint action (what to do)\n */\nexport function getHintActionSummary(\n hint: SolverHintStep,\n digitDisplay?: DigitDisplay\n): string {\n _display = digitDisplay ?? 'numeric';\n if (!hint.cells) return '';\n const selectCells = getSelectCells(hint);\n const removeCells = getRemoveCells(hint);\n\n if (selectCells.length > 0) {\n if (selectCells.length === 1) {\n const c = selectCells[0];\n if (!c) return 'Place a digit';\n return `Place ${formatDigit(c.digit)} in ${cellName(c.row, c.col)}`;\n }\n return `Place digits in ${selectCells.length} cells`;\n }\n\n if (removeCells.length > 0) {\n const allDigits = new Set<string>();\n removeCells.forEach(c => {\n for (const d of getValidDigits(c.digits)) allDigits.add(d);\n });\n return `Eliminate ${formatDigits(Array.from(allDigits))} from ${removeCells.length} cell${removeCells.length > 1 ? 's' : ''}`;\n }\n\n return 'Apply the technique';\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"i18nKeys.js","sourceRoot":"","sources":["../../src/utils/i18nKeys.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,OAAO,SAAS,UAAU,OAAO,CAAC;AACpC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,oBAAoB,CAClC,CAAoB,EACpB,UAAkB,EAClB,QAAiB;IAEjB,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,SAAS,UAAU,QAAQ,CAAC;AACrC,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,qBAAqB,CACnC,CAAoB,EACpB,UAAkB,EAClB,QAAiB;IAEjB,OAAO,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,UAAU,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,sBAAsB,CACpC,CAAoB,EACpB,WAAmB,EACnB,QAAiB;IAEjB,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,IAAI,QAAQ,CAAC;AACpC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,yBAAyB,CACvC,CAAoB,EACpB,IAAY,EACZ,QAAiB;IAEjB,OAAO,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC"}
1
+ {"version":3,"file":"i18nKeys.js","sourceRoot":"","sources":["../../src/utils/i18nKeys.ts"],"names":[],"mappings":"AAEA,wEAAwE;AACxE,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,OAAO,SAAS,UAAU,OAAO,CAAC;AACpC,CAAC;AAED,yDAAyD;AACzD,MAAM,UAAU,oBAAoB,CAClC,CAAoB,EACpB,UAAkB,EAClB,QAAiB;IAEjB,OAAO,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,OAAO,SAAS,UAAU,QAAQ,CAAC;AACrC,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,qBAAqB,CACnC,CAAoB,EACpB,UAAkB,EAClB,QAAiB;IAEjB,OAAO,CAAC,CAAC,eAAe,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC7C,OAAO,UAAU,WAAW,EAAE,CAAC;AACjC,CAAC;AAED,gCAAgC;AAChC,MAAM,UAAU,sBAAsB,CACpC,CAAoB,EACpB,WAAmB,EACnB,QAAiB;IAEjB,OAAO,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACvE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY;IAC1C,OAAO,cAAc,IAAI,QAAQ,CAAC;AACpC,CAAC;AAED,mCAAmC;AACnC,MAAM,UAAU,yBAAyB,CACvC,CAAoB,EACpB,IAAY,EACZ,QAAiB;IAEjB,OAAO,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import type { TranslateFunction } from './localizedHint';\n\n/** Get i18n key for a belt name. e.g. getBeltKey(1) → \"belts.1.name\" */\nexport function getBeltKey(levelIndex: number): string {\n return `belts.${levelIndex}.name`;\n}\n\n/** Get localized belt name using translation function */\nexport function getLocalizedBeltName(\n t: TranslateFunction,\n levelIndex: number,\n fallback?: string\n): string {\n return t(getBeltKey(levelIndex), { defaultValue: fallback ?? '' });\n}\n\n/** Get i18n key for a belt label. e.g. getBeltLabelKey(1) → \"belts.1.label\" */\nexport function getBeltLabelKey(levelIndex: number): string {\n return `belts.${levelIndex}.label`;\n}\n\n/** Get localized \"X Belt\" string */\nexport function getLocalizedBeltLabel(\n t: TranslateFunction,\n levelIndex: number,\n fallback?: string\n): string {\n return t(getBeltLabelKey(levelIndex), { defaultValue: fallback ?? '' });\n}\n\n/** Get i18n key for a level title. e.g. getLevelKey(3) → \"levels.3\" */\nexport function getLevelKey(levelNumber: number): string {\n return `levels.${levelNumber}`;\n}\n\n/** Get localized level title */\nexport function getLocalizedLevelTitle(\n t: TranslateFunction,\n levelNumber: number,\n fallback?: string\n): string {\n return t(getLevelKey(levelNumber), { defaultValue: fallback ?? '' });\n}\n\n/**\n * Get i18n key for a technique name by path slug.\n * e.g. getTechniqueKey(\"full-house\") → \"techniques.full-house.title\"\n */\nexport function getTechniqueKey(path: string): string {\n return `techniques.${path}.title`;\n}\n\n/** Get localized technique name */\nexport function getLocalizedTechniqueName(\n t: TranslateFunction,\n path: string,\n fallback?: string\n): string {\n return t(getTechniqueKey(path), { defaultValue: fallback ?? '' });\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,mDAAmD;AACnD,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,aAAa,IAAI,mBAAmB,EACpC,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,yBAAyB;AACzB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,6BAA6B;AAC7B,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qBAAqB;AACrB,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,8CAA8C;AAC9C,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,eAAe,EACf,WAAW,EACX,gBAAgB,GACjB,MAAM,SAAS,CAAC;AAEjB,mDAAmD;AACnD,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,aAAa,EACb,iBAAiB,EACjB,qBAAqB,EACrB,aAAa,EACb,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,cAAc,CAAC;AAOtB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,aAAa,IAAI,mBAAmB,EACpC,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,gBAAgB,EAChB,yBAAyB,EACzB,iBAAiB,EACjB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAE3B,iBAAiB;AACjB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAE/C,qBAAqB;AACrB,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,YAAY,CAAC;AAIpB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,sBAAsB,GACvB,MAAM,SAAS,CAAC;AAEjB,yBAAyB;AACzB,OAAO,EACL,uBAAuB,EACvB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,yBAAyB,GAC1B,MAAM,gBAAgB,CAAC;AAExB,sBAAsB;AACtB,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,6BAA6B;AAC7B,OAAO,EACL,2BAA2B,EAC3B,oBAAoB,GACrB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,qBAAqB;AACrB,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,sBAAsB,EACtB,eAAe,EACf,yBAAyB,GAC1B,MAAM,YAAY,CAAC;AAEpB,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["/**\n * Utility exports for Sudojo library\n */\n\n// Board utilities (legacy - for useGame hook)\nexport {\n cloneBoard,\n countFilledCells,\n createGameBoard,\n getBlockCells,\n getBlockIndex,\n getBoardStateString,\n getColumnCells,\n getEmptyCells,\n getPencilmarksString,\n getRelatedCells,\n getRowCells,\n isValidPlacement,\n} from './board';\n\n// Validation utilities (legacy - for useGame hook)\nexport {\n autoRemovePencilmarks,\n clearHighlights,\n countMistakes,\n getIncorrectCells,\n getProgressPercentage,\n isBoardFilled,\n isCellCorrect,\n isGameComplete,\n isValueCorrect,\n updateCellErrors,\n updateCellHighlights,\n validateGameState,\n} from './validation';\n\n// Sudoku scrambler utilities (for useSudoku hook - ported from renderable)\nexport type {\n ScramblerProtocol,\n ScrambleResult as SudokuScrambleResult,\n} from './sudokuScrambler';\nexport {\n Scrambler,\n NonScrambler,\n scrambleBoard as scrambleSudokuBoard,\n parsePuzzleString,\n cellsToPuzzleString,\n cellsToStateString,\n cellsToInputString,\n cellsToPencilmarksString,\n} from './sudokuScrambler';\n\n// Sudoku presenter (for rendering - matches Kotlin renderable)\nexport type { PresentBoardOptions } from './sudokuPresenter';\nexport {\n presentBoard,\n calculateCellHints,\n themeColorToCSS,\n getColorPalette,\n getCellsWithDigit,\n getSelectedDigit,\n computeSelectedDigitCells,\n convertSolverLink,\n convertSolverCellGroup,\n sudokuColorToTheme,\n} from './sudokuPresenter';\n\n// Time utilities\nexport { formatTime, parseTime } from './time';\n\n// Progress utilities\nexport {\n calculateStats,\n calculateStreak,\n isPuzzleCompleted,\n getCompletedLevelIds,\n getCompletedDailyDates,\n} from './progress';\n\n// Theme utilities\nexport type { ThemePreference, ResolvedTheme } from './theme';\nexport {\n THEME_STORAGE_KEY,\n getSystemTheme,\n resolveTheme,\n isValidThemePreference,\n} from './theme';\n\n// Subscription utilities\nexport {\n convertPackageToProduct,\n parseCustomerInfo,\n getPeriodDisplayName,\n isBestValuePlan,\n getRevenueCatErrorMessage,\n} from './subscription';\n\n// Technique utilities\nexport { getTechniqueIconUrl } from './technique';\n\n// Hint explanation utilities\nexport {\n generateDetailedExplanation,\n getHintActionSummary,\n} from './hintExplanation';\n\n// Localized hint utilities\nexport type { TranslateFunction } from './localizedHint';\nexport { getLocalizedHintText } from './localizedHint';\n\n// i18n key utilities\nexport {\n getBeltKey,\n getLocalizedBeltName,\n getBeltLabelKey,\n getLocalizedBeltLabel,\n getLevelKey,\n getLocalizedLevelTitle,\n getTechniqueKey,\n getLocalizedTechniqueName,\n} from './i18nKeys';\n\n// Digit display utilities\nexport { displayDigit } from './digitDisplay';\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"localizedHint.js","sourceRoot":"","sources":["../../src/utils/localizedHint.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,SAAS,qBAAqB,CAAC,MAAgB;IAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAAoB,EACpB,IAAoB,EACpB,YAAoB,EAAE;IAEtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;IAChD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAEtC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE7C,4EAA4E;IAC5E,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC"}
1
+ {"version":3,"file":"localizedHint.js","sourceRoot":"","sources":["../../src/utils/localizedHint.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,SAAS,qBAAqB,CAAC,MAAgB;IAC7C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,CAAoB,EACpB,IAAoB,EACpB,YAAoB,EAAE;IAEtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;IAChD,MAAM,aAAa,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,SAAS,GAAG,SAAS,CAAC;IAEtC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IAE7C,4EAA4E;IAC5E,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC","sourcesContent":["import type { SolverHintStep } from '@sudobility/sudojo_types';\n\n/**\n * A translation function that takes a key and interpolation values.\n * Compatible with i18next's `t` function.\n */\nexport type TranslateFunction = (\n key: string,\n values?: Record<string, string>\n) => string;\n\n/**\n * Convert localization values array to i18next interpolation object.\n * values: [\"3\", \"R1C5\"] → { value1: \"3\", value2: \"R1C5\" }\n */\nfunction valuesToInterpolation(values: string[]): Record<string, string> {\n const result: Record<string, string> = {};\n values.forEach((value, index) => {\n result[`value${index + 1}`] = value;\n });\n return result;\n}\n\n/**\n * Get localized text for a hint step using a provided translation function.\n * Returns the translated text with interpolated values,\n * or falls back to step.text if localization is unavailable.\n *\n * @param t - Translation function (e.g. from `useTranslation('hints')`)\n * @param step - The hint step containing localization data\n * @param keyPrefix - Optional prefix to prepend to the string key (e.g. 'hints.')\n */\nexport function getLocalizedHintText(\n t: TranslateFunction,\n step: SolverHintStep,\n keyPrefix: string = ''\n): string {\n if (!step.localization?.stringKey) {\n return step.text;\n }\n\n const { stringKey, values } = step.localization;\n const interpolation = valuesToInterpolation(values);\n const fullKey = keyPrefix + stringKey;\n\n const translated = t(fullKey, interpolation);\n\n // If translation returns the key itself (missing translation), use fallback\n if (translated === fullKey) {\n return step.text;\n }\n\n return translated;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,gBAAmC,EACnC,OAAgB;IAEhB,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CACjC,CAAC;IAEF,uBAAuB;IACvB,MAAM,eAAe,GACnB,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAEjB,yBAAyB;IACzB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,+BAA+B;IAC/B,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CACL,CAAC,CAAC,EAAkD,EAAE,CACpD,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CACpD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CACL,CAAC,CAAC,EAAkD,EAAE,CACpD,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CACpD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAE3B,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,OAAO;QACL,aAAa;QACb,aAAa;QACb,WAAW;QACX,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,gBAAmC,EACnC,aAA4B;IAE5B,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,4DAA4D;IAC5D,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACd,IAAI,EAAE;SACN,OAAO,EAAE,CAAC;IAEb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,GACb,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,WAAW,KAAK,SAAS;YAAE,MAAM;QACrC,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC;YACT,kBAAkB;YAClB,MAAM,WAAW,GAAS,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,IAAI,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,gBAAmC,EACnC,IAAuB,EACvB,EAAU;IAEV,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAAmC;IAEnC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAAmC;IAEnC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC"}
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/utils/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAC5B,gBAAmC,EACnC,OAAgB;IAEhB,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAC7C,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,SAAS,CACjC,CAAC;IAEF,uBAAuB;IACvB,MAAM,eAAe,GACnB,eAAe,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;QACjE,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;IAEjB,yBAAyB;IACzB,MAAM,KAAK,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,WAAW,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE3E,+BAA+B;IAC/B,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CACL,CAAC,CAAC,EAAkD,EAAE,CACpD,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CACpD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAC3B,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CACL,CAAC,CAAC,EAAkD,EAAE,CACpD,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,KAAK,SAAS,CACpD;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;IAE3B,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7E,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,OAAO;QACL,aAAa;QACb,aAAa;QACb,WAAW;QACX,eAAe;KAChB,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAC7B,gBAAmC,EACnC,aAA4B;IAE5B,IAAI,CAAC,aAAa;QAAE,OAAO,CAAC,CAAC;IAE7B,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9E,4DAA4D;IAC5D,IAAI,aAAa,KAAK,KAAK,IAAI,aAAa,KAAK,SAAS,EAAE,CAAC;QAC3D,OAAO,CAAC,CAAC;IACX,CAAC;IAED,yBAAyB;IACzB,MAAM,UAAU,GAAG,gBAAgB;SAChC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC;SAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACd,IAAI,EAAE;SACN,OAAO,EAAE,CAAC;IAEb,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,WAAW,GACb,aAAa,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAE9C,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,IAAI,WAAW,KAAK,SAAS;YAAE,MAAM;QACrC,IAAI,IAAI,KAAK,WAAW,EAAE,CAAC;YACzB,MAAM,EAAE,CAAC;YACT,kBAAkB;YAClB,MAAM,WAAW,GAAS,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC;YAChD,WAAW,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;YAC/C,WAAW,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACxD,CAAC;aAAM,IAAI,IAAI,GAAG,WAAW,EAAE,CAAC;YAC9B,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,iBAAiB,CAC/B,gBAAmC,EACnC,IAAuB,EACvB,EAAU;IAEV,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,oBAAoB,CAClC,gBAAmC;IAEnC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CACpC,gBAAmC;IAEnC,OAAO,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACzE,CAAC","sourcesContent":["/**\n * Progress calculation utilities\n */\n\nimport type { CompletedPuzzle, GameStats } from '../types/progress';\n\n/**\n * Calculate game statistics from completed puzzles\n *\n * @param completedPuzzles - Array of completed puzzle records\n * @param newTime - Optional new time to include in calculations\n * @returns Computed game statistics\n */\nexport function calculateStats(\n completedPuzzles: CompletedPuzzle[],\n newTime?: number\n): GameStats {\n const puzzlesWithTime = completedPuzzles.filter(\n p => p.timeSeconds !== undefined\n );\n\n // Calculate total time\n const totalTimePlayed =\n puzzlesWithTime.reduce((sum, p) => sum + (p.timeSeconds ?? 0), 0) +\n (newTime ?? 0);\n\n // Calculate average time\n const count = puzzlesWithTime.length + (newTime !== undefined ? 1 : 0);\n const averageTime = count > 0 ? Math.round(totalTimePlayed / count) : null;\n\n // Calculate best times by type\n const dailyTimes = completedPuzzles\n .filter(\n (p): p is CompletedPuzzle & { timeSeconds: number } =>\n p.type === 'daily' && p.timeSeconds !== undefined\n )\n .map(p => p.timeSeconds);\n const levelTimes = completedPuzzles\n .filter(\n (p): p is CompletedPuzzle & { timeSeconds: number } =>\n p.type === 'level' && p.timeSeconds !== undefined\n )\n .map(p => p.timeSeconds);\n\n const bestDailyTime = dailyTimes.length > 0 ? Math.min(...dailyTimes) : null;\n const bestLevelTime = levelTimes.length > 0 ? Math.min(...levelTimes) : null;\n\n return {\n bestDailyTime,\n bestLevelTime,\n averageTime,\n totalTimePlayed,\n };\n}\n\n/**\n * Calculate daily streak based on completions\n *\n * @param completedPuzzles - Array of completed puzzle records\n * @param lastDailyDate - Date of last daily completion (YYYY-MM-DD)\n * @returns Current streak count\n */\nexport function calculateStreak(\n completedPuzzles: CompletedPuzzle[],\n lastDailyDate: string | null\n): number {\n if (!lastDailyDate) return 0;\n\n const today = new Date().toISOString().split('T')[0];\n const yesterday = new Date(Date.now() - 86400000).toISOString().split('T')[0];\n\n // If last daily wasn't today or yesterday, streak is broken\n if (lastDailyDate !== today && lastDailyDate !== yesterday) {\n return 0;\n }\n\n // Count consecutive days\n const dailyDates = completedPuzzles\n .filter(p => p.type === 'daily')\n .map(p => p.id)\n .sort()\n .reverse();\n\n let streak = 0;\n let currentDate: string | undefined =\n lastDailyDate === today ? today : yesterday;\n\n for (const date of dailyDates) {\n if (currentDate === undefined) break;\n if (date === currentDate) {\n streak++;\n // Go back one day\n const previousDay: Date = new Date(currentDate);\n previousDay.setDate(previousDay.getDate() - 1);\n currentDate = previousDay.toISOString().split('T')[0];\n } else if (date < currentDate) {\n break;\n }\n }\n\n return streak;\n}\n\n/**\n * Check if a specific puzzle is completed\n *\n * @param completedPuzzles - Array of completed puzzle records\n * @param type - Puzzle type to check\n * @param id - Puzzle ID to check\n * @returns Whether the puzzle is completed\n */\nexport function isPuzzleCompleted(\n completedPuzzles: CompletedPuzzle[],\n type: 'daily' | 'level',\n id: string\n): boolean {\n return completedPuzzles.some(p => p.type === type && p.id === id);\n}\n\n/**\n * Get completed level IDs\n *\n * @param completedPuzzles - Array of completed puzzle records\n * @returns Array of completed level IDs\n */\nexport function getCompletedLevelIds(\n completedPuzzles: CompletedPuzzle[]\n): string[] {\n return completedPuzzles.filter(p => p.type === 'level').map(p => p.id);\n}\n\n/**\n * Get completed daily dates\n *\n * @param completedPuzzles - Array of completed puzzle records\n * @returns Array of completed daily dates (YYYY-MM-DD)\n */\nexport function getCompletedDailyDates(\n completedPuzzles: CompletedPuzzle[]\n): string[] {\n return completedPuzzles.filter(p => p.type === 'daily').map(p => p.id);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/utils/subscription.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/utils/subscription.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Subscription utilities\n *\n * These functions work with RevenueCat SDK types to convert to our domain models.\n * The RevenueCat types are passed as generics to avoid direct SDK dependency.\n */\n\nimport type { Product, Subscription } from '../types/subscription';\n\n/** RevenueCat Package shape (simplified) */\ninterface RevenueCatPackage {\n identifier: string;\n rcBillingProduct?: {\n identifier?: string;\n title?: string;\n description?: string;\n currentPrice?: {\n amountMicros?: number;\n formattedPrice?: string;\n };\n normalPeriodDuration?: string;\n defaultSubscriptionOption?: {\n introPrice?: {\n price?: {\n formattedPrice?: string;\n };\n periodDuration?: string;\n };\n trial?: {\n periodDuration?: string;\n };\n };\n };\n}\n\n/** RevenueCat CustomerInfo entitlement shape */\ninterface RevenueCatEntitlement {\n expirationDate?: number | null;\n latestPurchaseDate?: number | null;\n productIdentifier?: string;\n willRenew?: boolean;\n}\n\n/** RevenueCat CustomerInfo shape (simplified) */\ninterface RevenueCatCustomerInfo {\n entitlements: {\n active: Record<string, RevenueCatEntitlement>;\n };\n}\n\n/**\n * Convert RevenueCat package to our Product interface\n *\n * @param pkg - RevenueCat package\n * @returns Product object\n */\nexport function convertPackageToProduct(pkg: RevenueCatPackage): Product {\n const product = pkg.rcBillingProduct;\n const subscriptionOption = product?.defaultSubscriptionOption;\n\n const result: Product = {\n identifier: pkg.identifier,\n price: product?.currentPrice?.amountMicros\n ? (product.currentPrice.amountMicros / 1000000).toFixed(2)\n : '0',\n priceString: product?.currentPrice?.formattedPrice ?? '$0',\n title: product?.title ?? pkg.identifier,\n description: product?.description ?? '',\n };\n\n if (product?.identifier !== undefined) {\n result.productId = product.identifier;\n }\n if (product?.normalPeriodDuration !== undefined) {\n result.period = product.normalPeriodDuration;\n }\n if (subscriptionOption?.introPrice?.price?.formattedPrice !== undefined) {\n result.introPrice = subscriptionOption.introPrice.price.formattedPrice;\n }\n if (subscriptionOption?.introPrice?.periodDuration !== undefined) {\n result.introPricePeriod = subscriptionOption.introPrice.periodDuration;\n }\n if (subscriptionOption?.trial?.periodDuration !== undefined) {\n result.freeTrialPeriod = subscriptionOption.trial.periodDuration;\n }\n\n return result;\n}\n\n/**\n * Parse RevenueCat CustomerInfo into our Subscription interface\n *\n * @param customerInfo - RevenueCat customer info\n * @returns Subscription object\n */\nexport function parseCustomerInfo(\n customerInfo: RevenueCatCustomerInfo\n): Subscription {\n const hasActiveEntitlement =\n Object.keys(customerInfo.entitlements.active).length > 0;\n const activeEntitlement = Object.values(customerInfo.entitlements.active)[0];\n\n if (hasActiveEntitlement && activeEntitlement) {\n const subscription: Subscription = { isActive: true };\n\n if (activeEntitlement.expirationDate != null) {\n subscription.expirationDate = new Date(activeEntitlement.expirationDate);\n }\n if (activeEntitlement.latestPurchaseDate != null) {\n subscription.purchaseDate = new Date(\n activeEntitlement.latestPurchaseDate\n );\n }\n if (activeEntitlement.productIdentifier !== undefined) {\n subscription.productIdentifier = activeEntitlement.productIdentifier;\n }\n if (activeEntitlement.willRenew !== undefined) {\n subscription.willRenew = activeEntitlement.willRenew;\n }\n\n return subscription;\n }\n\n return { isActive: false };\n}\n\n/**\n * Get display name for subscription period\n *\n * @param period - ISO 8601 duration string (e.g., \"P1M\", \"P1Y\")\n * @returns Human-readable period name\n */\nexport function getPeriodDisplayName(period: string | undefined): string {\n if (!period) return '';\n\n const periodMap: Record<string, string> = {\n P1W: 'Weekly',\n P1M: 'Monthly',\n P3M: 'Quarterly',\n P6M: 'Semi-Annual',\n P1Y: 'Annual',\n P12M: 'Annual',\n };\n\n return periodMap[period] ?? period;\n}\n\n/**\n * Check if a plan is the \"best value\" (typically annual plans)\n *\n * @param period - ISO 8601 duration string\n * @returns Whether this is typically the best value option\n */\nexport function isBestValuePlan(period: string | undefined): boolean {\n return period === 'P1Y' || period === 'P12M';\n}\n\n/**\n * Get RevenueCat purchase error message\n *\n * @param errorCode - RevenueCat error code\n * @returns User-friendly error message\n */\nexport function getRevenueCatErrorMessage(errorCode: number): string {\n switch (errorCode) {\n case 1:\n return 'Purchase cancelled';\n case 2:\n return 'Store problem occurred. Please try again later.';\n case 3:\n return 'Purchase not allowed on this device';\n case 7:\n return 'Network error. Please check your connection.';\n default:\n return 'Purchase failed. Please try again.';\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sudokuPresenter.js","sourceRoot":"","sources":["../../src/utils/sudokuPresenter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sudokuPresenter.js","sourceRoot":"","sources":["../../src/utils/sudokuPresenter.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Sudoku presenter - port of renderable/SudokuPresenter.kt\n *\n * Handles all display logic for the Sudoku board including:\n * - Cell background colors based on selection state\n * - Cell border colors for selected cells\n * - Text colors (given, input, hint actions)\n * - Hint visualization (areas, cells)\n * - Pencilmark coloring\n */\n\nimport type { SudokuCell } from '../types/sudoku';\nimport { blockOf, columnOf, rowOf } from '../types/sudoku';\nimport {\n type CellDisplayState,\n type DisplayCellGroup,\n type DisplayLink,\n type HintCell,\n type HintStep,\n type PencilmarkDisplayState,\n SudokuColor,\n ThemeColor,\n UIColorDark,\n UIColorLight,\n type UIColorPalette,\n} from '../types/display';\n\n// =============================================================================\n// Block Definition (matches PlayBoard.blocks)\n// =============================================================================\n\n/**\n * Block class - matches Kotlin Block class\n */\nclass Block {\n readonly index: number;\n readonly cellIndices: number[];\n\n constructor(index: number) {\n this.index = index;\n const blockRow = Math.floor(index / 3);\n const blockCol = index % 3;\n this.cellIndices = [];\n for (let r = 0; r < 3; r++) {\n for (let c = 0; c < 3; c++) {\n const row = blockRow * 3 + r;\n const col = blockCol * 3 + c;\n this.cellIndices.push(row * 9 + col);\n }\n }\n }\n}\n\n/**\n * Row class - matches Kotlin Row class\n */\nclass Row {\n readonly index: number;\n readonly cellIndices: number[];\n\n constructor(index: number) {\n this.index = index;\n this.cellIndices = Array.from({ length: 9 }, (_, col) => index * 9 + col);\n }\n}\n\n/**\n * Column class - matches Kotlin Column class\n */\nclass Column {\n readonly index: number;\n readonly cellIndices: number[];\n\n constructor(index: number) {\n this.index = index;\n this.cellIndices = Array.from({ length: 9 }, (_, row) => row * 9 + index);\n }\n}\n\n// =============================================================================\n// Color Conversion (matches CellPresenter.colorOf)\n// =============================================================================\n\n/**\n * Convert SudokuColor to ThemeColor - matches CellPresenter.colorOf\n */\nfunction sudokuColorToTheme(\n sudokuColor: SudokuColor | null\n): ThemeColor | null {\n switch (sudokuColor) {\n case SudokuColor.BLUE:\n return ThemeColor.SELECTED;\n case SudokuColor.GREEN:\n return ThemeColor.SUCCESS;\n case SudokuColor.YELLOW:\n return ThemeColor.WARNING_SECONDARY;\n case SudokuColor.ORANGE:\n return ThemeColor.WARNING;\n case SudokuColor.RED:\n return ThemeColor.ERROR;\n case SudokuColor.WHITE:\n return ThemeColor.BACKGROUND;\n case SudokuColor.LIGHT_GRAY:\n return ThemeColor.BACKGROUND_SECONDARY;\n case SudokuColor.BLACK:\n return ThemeColor.LABEL;\n case SudokuColor.GRAY:\n return ThemeColor.LABEL_SECONDARY;\n case SudokuColor.CLEAR:\n return ThemeColor.CLEAR;\n default:\n return null;\n }\n}\n\n/**\n * Convert ThemeColor to actual CSS color - matches RendererColor.color\n */\nexport function themeColorToCSS(\n palette: UIColorPalette,\n themeColor: ThemeColor | null\n): string | null {\n switch (themeColor) {\n case ThemeColor.NONE:\n case ThemeColor.CLEAR:\n return palette.clear;\n case ThemeColor.SELECTED:\n return palette.systemPurple;\n case ThemeColor.SUCCESS:\n return palette.systemBlue;\n case ThemeColor.WARNING_SECONDARY:\n return palette.systemYellow;\n case ThemeColor.WARNING:\n return palette.systemOrange;\n case ThemeColor.ERROR:\n return palette.systemRed;\n case ThemeColor.BACKGROUND:\n return palette.systemBackground;\n case ThemeColor.BACKGROUND_SECONDARY:\n return palette.secondarySystemBackground;\n case ThemeColor.LABEL:\n return palette.label;\n case ThemeColor.LABEL_SECONDARY:\n return palette.secondaryLabel;\n case ThemeColor.DISABLED:\n return palette.systemGray;\n default:\n return null;\n }\n}\n\n/**\n * Get the color palette for the current theme\n */\nexport function getColorPalette(isDarkMode: boolean): UIColorPalette {\n return isDarkMode ? UIColorDark : UIColorLight;\n}\n\n// =============================================================================\n// Hint Processing (matches BoardPresenter.calculateCellHints)\n// =============================================================================\n\n/**\n * Process hint areas and cells into a map of cell hints\n * Matches BoardPresenter.calculateCellHints\n */\nexport function calculateCellHints(\n hintStep: HintStep | null\n): Map<number, HintCell> | null {\n if (!hintStep) return null;\n\n const hintsCell = new Map<number, HintCell>();\n\n // Process areas first\n hintStep.areas?.forEach(area => {\n let cellIndices: number[];\n\n switch (area.type) {\n case 'block':\n cellIndices = new Block(area.index).cellIndices;\n break;\n case 'row':\n cellIndices = new Row(area.index).cellIndices;\n break;\n case 'column':\n cellIndices = new Column(area.index).cellIndices;\n break;\n }\n\n cellIndices.forEach(index => {\n hintsCell.set(index, {\n index,\n color: area.color,\n fill: true, // Areas always use fill\n });\n });\n });\n\n // Process cells (overrides areas)\n hintStep.cells?.forEach(cell => {\n hintsCell.set(cell.index, cell);\n });\n\n return hintsCell;\n}\n\n// =============================================================================\n// Cell Color Logic (matches BlockPresenter.color)\n// =============================================================================\n\ninterface CellColorResult {\n backgroundColor: ThemeColor;\n borderColor: ThemeColor | null;\n}\n\n/**\n * Determine background and border colors for a cell\n * Matches BlockPresenter.color exactly\n */\nfunction getCellColors(\n cellIndex: number,\n cellBlockIndex: number,\n cellRowIndex: number,\n cellColumnIndex: number,\n cellHasValue: boolean,\n selectedIndex: number | null,\n selectedBlockIndex: number | null,\n selectedRowIndex: number | null,\n selectedColumnIndex: number | null,\n selectedDigitCells: Set<number> | null\n): CellColorResult {\n // Default background based on block (checkerboard pattern)\n const defaultBackgroundColor =\n cellBlockIndex % 2 === 0\n ? ThemeColor.BACKGROUND_SECONDARY\n : ThemeColor.BACKGROUND;\n\n if (selectedIndex === null) {\n return { backgroundColor: defaultBackgroundColor, borderColor: null };\n }\n\n if (selectedDigitCells !== null) {\n // Digit highlighting mode\n if (selectedDigitCells.has(cellIndex)) {\n // Highlighted cells (have the same digit)\n return { backgroundColor: ThemeColor.SELECTED, borderColor: null };\n }\n\n // Check if this cell is \"impossible\" (in same row/col/block as highlighted cells)\n let isImpossible = cellHasValue;\n if (!isImpossible) {\n for (const highlightedIndex of selectedDigitCells) {\n const hRow = rowOf(highlightedIndex);\n const hCol = columnOf(highlightedIndex);\n const hBlock = blockOf(highlightedIndex);\n if (\n cellRowIndex === hRow ||\n cellColumnIndex === hCol ||\n cellBlockIndex === hBlock\n ) {\n isImpossible = true;\n break;\n }\n }\n }\n\n if (isImpossible) {\n return { backgroundColor: ThemeColor.LABEL_SECONDARY, borderColor: null };\n }\n\n // Possible cells\n return { backgroundColor: defaultBackgroundColor, borderColor: null };\n }\n\n // Normal selection mode\n if (selectedIndex === cellIndex) {\n // Selected cell: default background + SELECTED border\n return {\n backgroundColor: defaultBackgroundColor,\n borderColor: ThemeColor.SELECTED,\n };\n }\n\n if (\n selectedBlockIndex === cellBlockIndex ||\n selectedRowIndex === cellRowIndex ||\n selectedColumnIndex === cellColumnIndex\n ) {\n // Same row, column or block: SELECTED background\n return { backgroundColor: ThemeColor.SELECTED, borderColor: null };\n }\n\n // Other cells\n return { backgroundColor: defaultBackgroundColor, borderColor: null };\n}\n\n// =============================================================================\n// Cell Text Logic (matches CellPresenter.present)\n// =============================================================================\n\ninterface CellTextResult {\n digit: number | null;\n textColor: ThemeColor | null;\n isGiven: boolean;\n}\n\n/**\n * Determine what digit and color to display in a cell\n * Matches CellPresenter.present logic\n */\nfunction getCellText(\n cell: SudokuCell,\n showErrors: boolean,\n hintCell: HintCell | null\n): CellTextResult {\n // Hint select action takes priority\n if (hintCell?.actions?.select != null) {\n return {\n digit: hintCell.actions.select,\n textColor: ThemeColor.SELECTED,\n isGiven: false,\n };\n }\n\n // Hint unselect action (wrong digit to remove)\n if (hintCell?.actions?.unselect != null) {\n return {\n digit: hintCell.actions.unselect,\n textColor: ThemeColor.ERROR,\n isGiven: false,\n };\n }\n\n // User input\n if (cell.input !== null) {\n let textColor: ThemeColor;\n if (showErrors) {\n textColor =\n cell.input === cell.solution ? ThemeColor.SUCCESS : ThemeColor.ERROR;\n } else {\n textColor = ThemeColor.LABEL_SECONDARY;\n }\n return { digit: cell.input, textColor, isGiven: false };\n }\n\n // Given (original)\n if (cell.given !== null) {\n return { digit: cell.given, textColor: ThemeColor.LABEL, isGiven: true };\n }\n\n return { digit: null, textColor: null, isGiven: false };\n}\n\n// =============================================================================\n// Pencilmark Logic (matches CellPresenter.present pencilmark section)\n// =============================================================================\n\n/**\n * Get pencilmark display states\n * Matches CellPresenter.present pencilmark logic\n */\nfunction getPencilmarks(\n cell: SudokuCell,\n hintCell: HintCell | null\n): PencilmarkDisplayState[] {\n const cellPencilmarks = cell.pencilmarks\n ? new Set(cell.pencilmarks)\n : new Set<number>();\n const adding = hintCell?.actions?.add ? new Set(hintCell.actions.add) : null;\n const removing = hintCell?.actions?.remove\n ? new Set(hintCell.actions.remove)\n : null;\n const highlighting = hintCell?.actions?.highlight\n ? new Set(hintCell.actions.highlight)\n : null;\n\n const result: PencilmarkDisplayState[] = [];\n\n for (let pencilmark = 1; pencilmark <= 9; pencilmark++) {\n let color: ThemeColor | null = null;\n\n if (highlighting?.has(pencilmark)) {\n color = ThemeColor.SELECTED;\n } else if (adding?.has(pencilmark)) {\n color = ThemeColor.SUCCESS;\n } else if (removing?.has(pencilmark)) {\n color = ThemeColor.ERROR;\n } else if (cellPencilmarks.has(pencilmark)) {\n color = ThemeColor.LABEL_SECONDARY;\n }\n\n if (color !== null) {\n result.push({ digit: pencilmark, color });\n }\n }\n\n return result;\n}\n\n// =============================================================================\n// Main Presenter Function\n// =============================================================================\n\nexport interface PresentBoardOptions {\n /** The 81 cells of the board */\n cells: SudokuCell[];\n /** Currently selected cell index (0-80) or null */\n selectedIndex: number | null;\n /** Whether to show errors (compare input vs solution) */\n showErrors: boolean;\n /** Current hint step (if any) */\n hintStep?: HintStep | null;\n /** Set of cell indices with the selected digit (for digit highlighting) */\n selectedDigitCells?: Set<number> | null;\n}\n\n/**\n * Generate display states for all cells\n * This is the main presenter function that matches the Kotlin renderable behavior\n */\nexport function presentBoard(options: PresentBoardOptions): CellDisplayState[] {\n const {\n cells,\n selectedIndex,\n showErrors,\n hintStep = null,\n selectedDigitCells = null,\n } = options;\n\n // Calculate hint cell map\n const cellHints = calculateCellHints(hintStep);\n\n // Get selected cell properties (if any)\n const _selectedCell = selectedIndex !== null ? cells[selectedIndex] : null;\n void _selectedCell; // Reserved for future use\n const selectedBlockIndex =\n selectedIndex !== null ? blockOf(selectedIndex) : null;\n const selectedRowIndex = selectedIndex !== null ? rowOf(selectedIndex) : null;\n const selectedColumnIndex =\n selectedIndex !== null ? columnOf(selectedIndex) : null;\n\n // Generate display state for each cell\n return cells.map((cell, index) => {\n const cellBlockIndex = blockOf(index);\n const cellRowIndex = rowOf(index);\n const cellColumnIndex = columnOf(index);\n const cellHasValue = cell.input !== null || cell.given !== null;\n\n // Get hint for this cell\n const hintCell = cellHints?.get(index) ?? null;\n\n // Get base colors\n const { backgroundColor, borderColor } = getCellColors(\n index,\n cellBlockIndex,\n cellRowIndex,\n cellColumnIndex,\n cellHasValue,\n selectedIndex,\n selectedBlockIndex,\n selectedRowIndex,\n selectedColumnIndex,\n selectedDigitCells\n );\n\n // Apply hint colors if present\n let finalBgColor = backgroundColor;\n let finalBorderColor = borderColor;\n\n if (hintCell) {\n if (hintCell.fill) {\n // Hint uses fill: override background\n const hintBgColor = sudokuColorToTheme(hintCell.color);\n if (hintBgColor !== null) {\n finalBgColor = hintBgColor;\n }\n } else {\n // Hint uses border\n const hintBdrColor = sudokuColorToTheme(\n hintCell.color ?? SudokuColor.BLUE\n );\n if (hintBdrColor !== null) {\n finalBorderColor = hintBdrColor;\n }\n }\n }\n\n // Get text info\n const { digit, textColor, isGiven } = getCellText(\n cell,\n showErrors,\n hintCell\n );\n\n // Get pencilmarks if no digit\n const pencilmarks = digit === null ? getPencilmarks(cell, hintCell) : [];\n\n return {\n index,\n backgroundColor: finalBgColor,\n borderColor: finalBorderColor,\n textColor,\n digit,\n isGiven,\n pencilmarks,\n };\n });\n}\n\n// =============================================================================\n// Utility: Get cells with a specific digit\n// =============================================================================\n\n/**\n * Get indices of cells that contain a specific digit (given or input)\n * Used for digit highlighting mode\n */\nexport function getCellsWithDigit(\n cells: SudokuCell[],\n digit: number\n): Set<number> {\n const result = new Set<number>();\n cells.forEach((cell, index) => {\n if (cell.given === digit || cell.input === digit) {\n result.add(index);\n }\n });\n return result;\n}\n\n/**\n * Get the selected digit for digit highlighting mode\n * Matches Kotlin SudokuInteractor.selectedDigit logic:\n * - If selected cell has a given value: return given\n * - If selected cell has a CORRECT input (input === solution): return input\n * - Otherwise: return null (no digit highlighting)\n */\nexport function getSelectedDigit(\n cells: SudokuCell[],\n selectedIndex: number | null\n): number | null {\n if (selectedIndex === null) return null;\n\n const cell = cells[selectedIndex];\n if (!cell) return null;\n\n // Given value takes priority\n if (cell.given !== null) {\n return cell.given;\n }\n\n // Only correct input triggers digit highlighting\n if (cell.input !== null && cell.input === cell.solution) {\n return cell.input;\n }\n\n return null;\n}\n\n/**\n * Compute selectedDigitCells based on selected cell\n * Returns Set of cell indices that have the same digit as selected cell\n * Returns null if selected cell doesn't have a highlightable digit\n */\nexport function computeSelectedDigitCells(\n cells: SudokuCell[],\n selectedIndex: number | null\n): Set<number> | null {\n const selectedDigit = getSelectedDigit(cells, selectedIndex);\n if (selectedDigit === null) return null;\n return getCellsWithDigit(cells, selectedDigit);\n}\n\n// =============================================================================\n// Link and Group Conversion\n// =============================================================================\n\n/**\n * Convert a solver link to display link format\n * Converts row/col coordinates to flat cell index\n */\nexport function convertSolverLink(link: {\n fromRow: number;\n fromCol: number;\n toRow: number;\n toCol: number;\n type: 'strong' | 'weak';\n digit: number;\n}): DisplayLink {\n return {\n fromIndex: link.fromRow * 9 + link.fromCol,\n toIndex: link.toRow * 9 + link.toCol,\n type: link.type,\n digit: link.digit,\n };\n}\n\n/**\n * Convert a solver cell group to display format\n * Converts row/col pairs to flat cell indices and SolverColor to ThemeColor\n */\nexport function convertSolverCellGroup(group: {\n name: string;\n color: string;\n cells: number[][];\n}): DisplayCellGroup {\n // Map solver color string to SudokuColor enum\n const sudokuColor = Object.values(SudokuColor).find(\n c => c.toLowerCase() === group.color.toLowerCase()\n ) as SudokuColor | undefined;\n\n return {\n name: group.name,\n color:\n sudokuColorToTheme(sudokuColor ?? SudokuColor.BLUE) ??\n ThemeColor.SELECTED,\n cellIndices: group.cells.map(cell => (cell[0] ?? 0) * 9 + (cell[1] ?? 0)),\n };\n}\n\n/**\n * Export sudokuColorToTheme for external use\n */\nexport { sudokuColorToTheme };\n"]}