@sudobility/sudojo_lib 0.0.4

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 (141) hide show
  1. package/dist/hooks/index.d.ts +27 -0
  2. package/dist/hooks/index.d.ts.map +1 -0
  3. package/dist/hooks/index.js +27 -0
  4. package/dist/hooks/index.js.map +1 -0
  5. package/dist/hooks/useDailyGame.d.ts +64 -0
  6. package/dist/hooks/useDailyGame.d.ts.map +1 -0
  7. package/dist/hooks/useDailyGame.js +120 -0
  8. package/dist/hooks/useDailyGame.js.map +1 -0
  9. package/dist/hooks/useGame.d.ts +104 -0
  10. package/dist/hooks/useGame.d.ts.map +1 -0
  11. package/dist/hooks/useGame.js +546 -0
  12. package/dist/hooks/useGame.js.map +1 -0
  13. package/dist/hooks/useGamePersistence.d.ts +63 -0
  14. package/dist/hooks/useGamePersistence.d.ts.map +1 -0
  15. package/dist/hooks/useGamePersistence.js +124 -0
  16. package/dist/hooks/useGamePersistence.js.map +1 -0
  17. package/dist/hooks/useGameTeaching.d.ts +89 -0
  18. package/dist/hooks/useGameTeaching.d.ts.map +1 -0
  19. package/dist/hooks/useGameTeaching.js +230 -0
  20. package/dist/hooks/useGameTeaching.js.map +1 -0
  21. package/dist/hooks/useGameTimer.d.ts +43 -0
  22. package/dist/hooks/useGameTimer.d.ts.map +1 -0
  23. package/dist/hooks/useGameTimer.js +68 -0
  24. package/dist/hooks/useGameTimer.js.map +1 -0
  25. package/dist/hooks/useHint.d.ts +105 -0
  26. package/dist/hooks/useHint.d.ts.map +1 -0
  27. package/dist/hooks/useHint.js +179 -0
  28. package/dist/hooks/useHint.js.map +1 -0
  29. package/dist/hooks/useLearning.d.ts +100 -0
  30. package/dist/hooks/useLearning.d.ts.map +1 -0
  31. package/dist/hooks/useLearning.js +127 -0
  32. package/dist/hooks/useLearning.js.map +1 -0
  33. package/dist/hooks/useLevelGame.d.ts +68 -0
  34. package/dist/hooks/useLevelGame.d.ts.map +1 -0
  35. package/dist/hooks/useLevelGame.js +128 -0
  36. package/dist/hooks/useLevelGame.js.map +1 -0
  37. package/dist/hooks/useLevels.d.ts +93 -0
  38. package/dist/hooks/useLevels.d.ts.map +1 -0
  39. package/dist/hooks/useLevels.js +98 -0
  40. package/dist/hooks/useLevels.js.map +1 -0
  41. package/dist/hooks/useLocalStorage.d.ts +26 -0
  42. package/dist/hooks/useLocalStorage.d.ts.map +1 -0
  43. package/dist/hooks/useLocalStorage.js +75 -0
  44. package/dist/hooks/useLocalStorage.js.map +1 -0
  45. package/dist/hooks/useSudoku.d.ts +125 -0
  46. package/dist/hooks/useSudoku.d.ts.map +1 -0
  47. package/dist/hooks/useSudoku.js +655 -0
  48. package/dist/hooks/useSudoku.js.map +1 -0
  49. package/dist/hooks/useTechniques.d.ts +92 -0
  50. package/dist/hooks/useTechniques.d.ts.map +1 -0
  51. package/dist/hooks/useTechniques.js +108 -0
  52. package/dist/hooks/useTechniques.js.map +1 -0
  53. package/dist/index.d.ts +42 -0
  54. package/dist/index.d.ts.map +1 -0
  55. package/dist/index.js +64 -0
  56. package/dist/index.js.map +1 -0
  57. package/dist/test/setup.d.ts +2 -0
  58. package/dist/test/setup.d.ts.map +1 -0
  59. package/dist/test/setup.js +35 -0
  60. package/dist/test/setup.js.map +1 -0
  61. package/dist/types/display.d.ts +142 -0
  62. package/dist/types/display.d.ts.map +1 -0
  63. package/dist/types/display.js +94 -0
  64. package/dist/types/display.js.map +1 -0
  65. package/dist/types/game.d.ts +201 -0
  66. package/dist/types/game.d.ts.map +1 -0
  67. package/dist/types/game.js +26 -0
  68. package/dist/types/game.js.map +1 -0
  69. package/dist/types/gamePersistence.d.ts +31 -0
  70. package/dist/types/gamePersistence.d.ts.map +1 -0
  71. package/dist/types/gamePersistence.js +15 -0
  72. package/dist/types/gamePersistence.js.map +1 -0
  73. package/dist/types/index.d.ts +18 -0
  74. package/dist/types/index.d.ts.map +1 -0
  75. package/dist/types/index.js +11 -0
  76. package/dist/types/index.js.map +1 -0
  77. package/dist/types/progress.d.ts +43 -0
  78. package/dist/types/progress.d.ts.map +1 -0
  79. package/dist/types/progress.js +19 -0
  80. package/dist/types/progress.js.map +1 -0
  81. package/dist/types/settings.d.ts +19 -0
  82. package/dist/types/settings.d.ts.map +1 -0
  83. package/dist/types/settings.js +12 -0
  84. package/dist/types/settings.js.map +1 -0
  85. package/dist/types/subscription.d.ts +27 -0
  86. package/dist/types/subscription.d.ts.map +1 -0
  87. package/dist/types/subscription.js +8 -0
  88. package/dist/types/subscription.js.map +1 -0
  89. package/dist/types/sudoku.d.ts +147 -0
  90. package/dist/types/sudoku.d.ts.map +1 -0
  91. package/dist/types/sudoku.js +125 -0
  92. package/dist/types/sudoku.js.map +1 -0
  93. package/dist/utils/auth.d.ts +25 -0
  94. package/dist/utils/auth.d.ts.map +1 -0
  95. package/dist/utils/auth.js +47 -0
  96. package/dist/utils/auth.js.map +1 -0
  97. package/dist/utils/board.d.ts +116 -0
  98. package/dist/utils/board.d.ts.map +1 -0
  99. package/dist/utils/board.js +291 -0
  100. package/dist/utils/board.js.map +1 -0
  101. package/dist/utils/index.d.ts +18 -0
  102. package/dist/utils/index.d.ts.map +1 -0
  103. package/dist/utils/index.js +23 -0
  104. package/dist/utils/index.js.map +1 -0
  105. package/dist/utils/progress.d.ts +44 -0
  106. package/dist/utils/progress.d.ts.map +1 -0
  107. package/dist/utils/progress.js +104 -0
  108. package/dist/utils/progress.js.map +1 -0
  109. package/dist/utils/scramble.d.ts +35 -0
  110. package/dist/utils/scramble.d.ts.map +1 -0
  111. package/dist/utils/scramble.js +270 -0
  112. package/dist/utils/scramble.js.map +1 -0
  113. package/dist/utils/subscription.d.ts +82 -0
  114. package/dist/utils/subscription.d.ts.map +1 -0
  115. package/dist/utils/subscription.js +117 -0
  116. package/dist/utils/subscription.js.map +1 -0
  117. package/dist/utils/sudokuPresenter.d.ts +62 -0
  118. package/dist/utils/sudokuPresenter.d.ts.map +1 -0
  119. package/dist/utils/sudokuPresenter.js +403 -0
  120. package/dist/utils/sudokuPresenter.js.map +1 -0
  121. package/dist/utils/sudokuScrambler.d.ts +61 -0
  122. package/dist/utils/sudokuScrambler.d.ts.map +1 -0
  123. package/dist/utils/sudokuScrambler.js +223 -0
  124. package/dist/utils/sudokuScrambler.js.map +1 -0
  125. package/dist/utils/technique.d.ts +41 -0
  126. package/dist/utils/technique.d.ts.map +1 -0
  127. package/dist/utils/technique.js +106 -0
  128. package/dist/utils/technique.js.map +1 -0
  129. package/dist/utils/theme.d.ts +31 -0
  130. package/dist/utils/theme.d.ts.map +1 -0
  131. package/dist/utils/theme.js +40 -0
  132. package/dist/utils/theme.js.map +1 -0
  133. package/dist/utils/time.d.ts +22 -0
  134. package/dist/utils/time.d.ts.map +1 -0
  135. package/dist/utils/time.js +41 -0
  136. package/dist/utils/time.js.map +1 -0
  137. package/dist/utils/validation.d.ts +107 -0
  138. package/dist/utils/validation.d.ts.map +1 -0
  139. package/dist/utils/validation.js +248 -0
  140. package/dist/utils/validation.js.map +1 -0
  141. package/package.json +79 -0
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Game state types for Sudojo
3
+ */
4
+ /**
5
+ * Represents a single cell in the Sudoku grid
6
+ */
7
+ export interface CellState {
8
+ /** Row index (0-8) */
9
+ row: number;
10
+ /** Column index (0-8) */
11
+ column: number;
12
+ /** The current value (1-9) or null if empty */
13
+ value: number | null;
14
+ /** Whether this cell is an original clue (cannot be modified) */
15
+ isClue: boolean;
16
+ /** Whether this cell has an error (wrong value) */
17
+ isError: boolean;
18
+ /** Pencilmarks (candidate digits) for this cell */
19
+ pencilmarks: Set<number>;
20
+ /** Whether this cell is currently selected */
21
+ isSelected: boolean;
22
+ /** Whether this cell is highlighted (same row/col/block as selected) */
23
+ isHighlighted: boolean;
24
+ /** Whether this cell has the same value as selected cell */
25
+ isSameValue: boolean;
26
+ }
27
+ /**
28
+ * A 9x9 grid of cells
29
+ */
30
+ export type GameBoard = CellState[][];
31
+ /**
32
+ * A single move in the game (for undo/redo)
33
+ */
34
+ export interface GameMove {
35
+ /** The row of the cell */
36
+ row: number;
37
+ /** The column of the cell */
38
+ column: number;
39
+ /** Previous value (null if was empty) */
40
+ previousValue: number | null;
41
+ /** New value (null if cleared) */
42
+ newValue: number | null;
43
+ /** Previous pencilmarks */
44
+ previousPencilmarks: Set<number>;
45
+ /** New pencilmarks */
46
+ newPencilmarks: Set<number>;
47
+ /** Type of move */
48
+ type: 'value' | 'pencilmark';
49
+ }
50
+ /**
51
+ * Game settings
52
+ */
53
+ export interface GameSettings {
54
+ /** Whether to highlight errors immediately */
55
+ showErrors: boolean;
56
+ /** Whether to highlight same numbers */
57
+ highlightSameNumbers: boolean;
58
+ /** Whether to highlight related cells (same row/col/block) */
59
+ highlightRelatedCells: boolean;
60
+ /** Whether to auto-remove pencilmarks when placing a value */
61
+ autoRemovePencilmarks: boolean;
62
+ /** Whether to use auto pencilmarks */
63
+ autoPencilmarks: boolean;
64
+ }
65
+ /**
66
+ * Default game settings
67
+ */
68
+ export declare const DEFAULT_GAME_SETTINGS: GameSettings;
69
+ /**
70
+ * Game status
71
+ */
72
+ export type GameStatus = 'idle' | 'playing' | 'paused' | 'completed' | 'failed';
73
+ /**
74
+ * The complete game state
75
+ */
76
+ export interface GameState {
77
+ /** The current board state */
78
+ board: GameBoard;
79
+ /** The original puzzle string (81 chars) */
80
+ originalPuzzle: string;
81
+ /** The solution string (81 chars) */
82
+ solution: string;
83
+ /** The scrambled puzzle string (81 chars) */
84
+ scrambledPuzzle: string;
85
+ /** The scrambled solution string (81 chars) */
86
+ scrambledSolution: string;
87
+ /** Scramble mapping for digits (original -> scrambled) */
88
+ digitMapping: Map<number, number>;
89
+ /** Undo stack */
90
+ undoStack: GameMove[];
91
+ /** Redo stack */
92
+ redoStack: GameMove[];
93
+ /** Currently selected cell position */
94
+ selectedCell: {
95
+ row: number;
96
+ column: number;
97
+ } | null;
98
+ /** Game settings */
99
+ settings: GameSettings;
100
+ /** Current game status */
101
+ status: GameStatus;
102
+ /** Number of mistakes made */
103
+ mistakeCount: number;
104
+ /** Maximum mistakes allowed (0 = unlimited) */
105
+ maxMistakes: number;
106
+ /** Time elapsed in seconds */
107
+ elapsedTime: number;
108
+ /** Whether hint mode is active */
109
+ hintMode: boolean;
110
+ /** Board UUID (if loaded from server) */
111
+ boardUuid: string | null;
112
+ /** Level UUID (if associated with a level) */
113
+ levelUuid: string | null;
114
+ }
115
+ /**
116
+ * Position in the grid
117
+ */
118
+ export interface CellPosition {
119
+ row: number;
120
+ column: number;
121
+ }
122
+ /**
123
+ * Scramble configuration
124
+ */
125
+ export interface ScrambleConfig {
126
+ /** Whether to scramble rows within blocks */
127
+ scrambleRows: boolean;
128
+ /** Whether to scramble columns within blocks */
129
+ scrambleColumns: boolean;
130
+ /** Whether to scramble row blocks (groups of 3 rows) */
131
+ scrambleRowBlocks: boolean;
132
+ /** Whether to scramble column blocks (groups of 3 columns) */
133
+ scrambleColumnBlocks: boolean;
134
+ /** Whether to scramble digit mapping (1-9 -> 1-9) */
135
+ scrambleDigits: boolean;
136
+ /** Whether to rotate the board (0, 90, 180, 270 degrees) */
137
+ rotate: boolean;
138
+ /** Whether to mirror the board */
139
+ mirror: boolean;
140
+ }
141
+ /**
142
+ * Default scramble configuration (all enabled)
143
+ */
144
+ export declare const DEFAULT_SCRAMBLE_CONFIG: ScrambleConfig;
145
+ /**
146
+ * Result of scrambling a board
147
+ */
148
+ export interface ScrambleResult {
149
+ /** The scrambled puzzle string */
150
+ puzzle: string;
151
+ /** The scrambled solution string */
152
+ solution: string;
153
+ /** The digit mapping used (original -> scrambled) */
154
+ digitMapping: Map<number, number>;
155
+ /** The reverse digit mapping (scrambled -> original) */
156
+ reverseDigitMapping: Map<number, number>;
157
+ }
158
+ /**
159
+ * Hint information from the solver
160
+ */
161
+ export interface GameHint {
162
+ /** Technique name */
163
+ title: string;
164
+ /** Explanation text */
165
+ text: string;
166
+ /** Cells involved in this hint */
167
+ cells: Array<{
168
+ row: number;
169
+ column: number;
170
+ color: string;
171
+ action?: {
172
+ select?: number;
173
+ addPencilmarks?: number[];
174
+ removePencilmarks?: number[];
175
+ };
176
+ }>;
177
+ /** Areas involved (rows, columns, blocks) */
178
+ areas: Array<{
179
+ type: 'row' | 'column' | 'block';
180
+ index: number;
181
+ color: string;
182
+ }>;
183
+ }
184
+ /**
185
+ * Teaching state for step-by-step solving
186
+ */
187
+ export interface TeachingState {
188
+ /** Whether teaching mode is active */
189
+ isActive: boolean;
190
+ /** Current hint being shown */
191
+ currentHint: GameHint | null;
192
+ /** Index of current step in multi-step hint */
193
+ currentStep: number;
194
+ /** Total number of steps in current hint */
195
+ totalSteps: number;
196
+ /** Whether loading hints */
197
+ isLoading: boolean;
198
+ /** Error message if hint loading failed */
199
+ error: string | null;
200
+ }
201
+ //# sourceMappingURL=game.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../src/types/game.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Game state types for Sudojo
3
+ */
4
+ /**
5
+ * Default game settings
6
+ */
7
+ export const DEFAULT_GAME_SETTINGS = {
8
+ showErrors: true,
9
+ highlightSameNumbers: true,
10
+ highlightRelatedCells: true,
11
+ autoRemovePencilmarks: true,
12
+ autoPencilmarks: false,
13
+ };
14
+ /**
15
+ * Default scramble configuration (all enabled)
16
+ */
17
+ export const DEFAULT_SCRAMBLE_CONFIG = {
18
+ scrambleRows: true,
19
+ scrambleColumns: true,
20
+ scrambleRowBlocks: true,
21
+ scrambleColumnBlocks: true,
22
+ scrambleDigits: true,
23
+ rotate: true,
24
+ mirror: true,
25
+ };
26
+ //# sourceMappingURL=game.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"game.js","sourceRoot":"","sources":["../../src/types/game.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmEH;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAiB;IACjD,UAAU,EAAE,IAAI;IAChB,oBAAoB,EAAE,IAAI;IAC1B,qBAAqB,EAAE,IAAI;IAC3B,qBAAqB,EAAE,IAAI;IAC3B,eAAe,EAAE,KAAK;CACvB,CAAC;AA2EF;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAmB;IACrD,YAAY,EAAE,IAAI;IAClB,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,IAAI;IACvB,oBAAoB,EAAE,IAAI;IAC1B,cAAc,EAAE,IAAI;IACpB,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;CACb,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Game persistence types for saving/loading game state
3
+ */
4
+ /** Saved game state */
5
+ export interface SavedGameState {
6
+ /** User input string (81 chars, 0 = empty) */
7
+ inputString: string;
8
+ /** Pencilmarks string (comma-separated per cell) */
9
+ pencilmarksString: string;
10
+ /** Whether pencil mode was active */
11
+ isPencilMode: boolean;
12
+ /** Last saved timestamp */
13
+ savedAt: string;
14
+ }
15
+ /** Key for identifying a game to persist */
16
+ export interface GamePersistenceKey {
17
+ /** Type of puzzle */
18
+ type: 'daily' | 'level';
19
+ /** Unique identifier (date for daily, levelId for level) */
20
+ id: string;
21
+ }
22
+ /** Storage key prefix for game persistence */
23
+ export declare const GAME_STORAGE_PREFIX = "sudojo_game_";
24
+ /**
25
+ * Generate storage key for a game
26
+ *
27
+ * @param key - Game persistence key
28
+ * @returns Storage key string
29
+ */
30
+ export declare function getGameStorageKey(key: GamePersistenceKey): string;
31
+ //# sourceMappingURL=gamePersistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamePersistence.d.ts","sourceRoot":"","sources":["../../src/types/gamePersistence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uBAAuB;AACvB,MAAM,WAAW,cAAc;IAC7B,8CAA8C;IAC9C,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,4CAA4C;AAC5C,MAAM,WAAW,kBAAkB;IACjC,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,8CAA8C;AAC9C,eAAO,MAAM,mBAAmB,iBAAiB,CAAC;AAElD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAEjE"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Game persistence types for saving/loading game state
3
+ */
4
+ /** Storage key prefix for game persistence */
5
+ export const GAME_STORAGE_PREFIX = 'sudojo_game_';
6
+ /**
7
+ * Generate storage key for a game
8
+ *
9
+ * @param key - Game persistence key
10
+ * @returns Storage key string
11
+ */
12
+ export function getGameStorageKey(key) {
13
+ return `${GAME_STORAGE_PREFIX}${key.type}_${key.id}`;
14
+ }
15
+ //# sourceMappingURL=gamePersistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gamePersistence.js","sourceRoot":"","sources":["../../src/types/gamePersistence.ts"],"names":[],"mappings":"AAAA;;GAEG;AAsBH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,mBAAmB,GAAG,cAAc,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAuB;IACvD,OAAO,GAAG,mBAAmB,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC;AACvD,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Type exports for Sudojo library
3
+ */
4
+ export type { CellPosition, CellState, GameBoard, GameHint, GameMove, GameSettings, GameState, GameStatus, ScrambleConfig, ScrambleResult, TeachingState, } from './game';
5
+ export { DEFAULT_GAME_SETTINGS, DEFAULT_SCRAMBLE_CONFIG } from './game';
6
+ export type { SudokuCell, SudokuBoard, SudokuPlay, SudokuPlaySettings, SudokuAppSettings, SudokuGameState, SudokuDisplay, PlayingSource, } from './sudoku';
7
+ export { DEFAULT_PLAY_SETTINGS, DEFAULT_APP_SETTINGS, createEmptyCell, createEmptyBoard, cellHasError, rowOf, columnOf, blockOf, cellIndex, getRowIndices, getColumnIndices, getBlockIndices, getRelatedIndices, } from './sudoku';
8
+ export type { HintArea, HintCell, HintCellActions, HintStep as DisplayHintStep, CellDisplayState, PencilmarkDisplayState, UIColorPalette, } from './display';
9
+ export { ThemeColor, SudokuColor, UIColorLight, UIColorDark } from './display';
10
+ export type { CompletedPuzzle, GameStats, UserProgress } from './progress';
11
+ export { DEFAULT_PROGRESS, PROGRESS_STORAGE_KEY } from './progress';
12
+ export type { DigitDisplay, AppSettings } from './settings';
13
+ export { DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY } from './settings';
14
+ export type { Product, Subscription } from './subscription';
15
+ export { DEFAULT_SUBSCRIPTION } from './subscription';
16
+ export type { SavedGameState, GamePersistenceKey } from './gamePersistence';
17
+ export { GAME_STORAGE_PREFIX, getGameStorageKey } from './gamePersistence';
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,UAAU,EACV,cAAc,EACd,cAAc,EACd,aAAa,GACd,MAAM,QAAQ,CAAC;AAEhB,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAGxE,YAAY,EACV,UAAU,EACV,WAAW,EACX,UAAU,EACV,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,EACf,aAAa,EACb,aAAa,GACd,MAAM,UAAU,CAAC;AAElB,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAGlB,YAAY,EACV,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,QAAQ,IAAI,eAAe,EAC3B,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAG/E,YAAY,EAAE,eAAe,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGpE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAGpE,YAAY,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAGtD,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Type exports for Sudojo library
3
+ */
4
+ export { DEFAULT_GAME_SETTINGS, DEFAULT_SCRAMBLE_CONFIG } from './game';
5
+ export { DEFAULT_PLAY_SETTINGS, DEFAULT_APP_SETTINGS, createEmptyCell, createEmptyBoard, cellHasError, rowOf, columnOf, blockOf, cellIndex, getRowIndices, getColumnIndices, getBlockIndices, getRelatedIndices, } from './sudoku';
6
+ export { ThemeColor, SudokuColor, UIColorLight, UIColorDark } from './display';
7
+ export { DEFAULT_PROGRESS, PROGRESS_STORAGE_KEY } from './progress';
8
+ export { DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY } from './settings';
9
+ export { DEFAULT_SUBSCRIPTION } from './subscription';
10
+ export { GAME_STORAGE_PREFIX, getGameStorageKey } from './gamePersistence';
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAiBH,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,QAAQ,CAAC;AAcxE,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,KAAK,EACL,QAAQ,EACR,OAAO,EACP,SAAS,EACT,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAalB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAI/E,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIpE,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAItD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Progress tracking types and domain models
3
+ */
4
+ /** Record of a completed puzzle */
5
+ export interface CompletedPuzzle {
6
+ /** Puzzle identifier */
7
+ id: string;
8
+ /** Type of puzzle */
9
+ type: 'daily' | 'level';
10
+ /** Completion timestamp */
11
+ completedAt: string;
12
+ /** Time to complete in seconds (optional) */
13
+ timeSeconds?: number;
14
+ }
15
+ /** Game statistics */
16
+ export interface GameStats {
17
+ /** Best time in seconds for daily puzzles */
18
+ bestDailyTime: number | null;
19
+ /** Best time in seconds for level puzzles */
20
+ bestLevelTime: number | null;
21
+ /** Average time in seconds */
22
+ averageTime: number | null;
23
+ /** Total time played in seconds */
24
+ totalTimePlayed: number;
25
+ }
26
+ /** User progress data */
27
+ export interface UserProgress {
28
+ /** List of completed puzzles */
29
+ completedPuzzles: CompletedPuzzle[];
30
+ /** Current daily streak */
31
+ dailyStreak: number;
32
+ /** Last daily completion date (YYYY-MM-DD) */
33
+ lastDailyDate: string | null;
34
+ /** Total puzzles completed */
35
+ totalCompleted: number;
36
+ /** Game statistics */
37
+ stats: GameStats;
38
+ }
39
+ /** Default progress state */
40
+ export declare const DEFAULT_PROGRESS: UserProgress;
41
+ /** Storage key for progress data */
42
+ export declare const PROGRESS_STORAGE_KEY = "sudojo-progress";
43
+ //# sourceMappingURL=progress.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.d.ts","sourceRoot":"","sources":["../../src/types/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;IACxB,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,sBAAsB;AACtB,MAAM,WAAW,SAAS;IACxB,6CAA6C;IAC7C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,6CAA6C;IAC7C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,8BAA8B;IAC9B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,mCAAmC;IACnC,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,yBAAyB;AACzB,MAAM,WAAW,YAAY;IAC3B,gCAAgC;IAChC,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,2BAA2B;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,8BAA8B;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,sBAAsB;IACtB,KAAK,EAAE,SAAS,CAAC;CAClB;AAED,6BAA6B;AAC7B,eAAO,MAAM,gBAAgB,EAAE,YAW9B,CAAC;AAEF,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,oBAAoB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Progress tracking types and domain models
3
+ */
4
+ /** Default progress state */
5
+ export const DEFAULT_PROGRESS = {
6
+ completedPuzzles: [],
7
+ dailyStreak: 0,
8
+ lastDailyDate: null,
9
+ totalCompleted: 0,
10
+ stats: {
11
+ bestDailyTime: null,
12
+ bestLevelTime: null,
13
+ averageTime: null,
14
+ totalTimePlayed: 0,
15
+ },
16
+ };
17
+ /** Storage key for progress data */
18
+ export const PROGRESS_STORAGE_KEY = 'sudojo-progress';
19
+ //# sourceMappingURL=progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress.js","sourceRoot":"","sources":["../../src/types/progress.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwCH,6BAA6B;AAC7B,MAAM,CAAC,MAAM,gBAAgB,GAAiB;IAC5C,gBAAgB,EAAE,EAAE;IACpB,WAAW,EAAE,CAAC;IACd,aAAa,EAAE,IAAI;IACnB,cAAc,EAAE,CAAC;IACjB,KAAK,EAAE;QACL,aAAa,EAAE,IAAI;QACnB,aAAa,EAAE,IAAI;QACnB,WAAW,EAAE,IAAI;QACjB,eAAe,EAAE,CAAC;KACnB;CACF,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * App settings types and domain models
3
+ */
4
+ /** Display format for Sudoku digits */
5
+ export type DigitDisplay = 'numeric' | 'kanji' | 'emojis';
6
+ /** Application settings */
7
+ export interface AppSettings {
8
+ /** Show errors when input doesn't match solution */
9
+ showErrors: boolean;
10
+ /** Generate symmetrical puzzles */
11
+ symmetrical: boolean;
12
+ /** Digit display format */
13
+ display: DigitDisplay;
14
+ }
15
+ /** Default application settings */
16
+ export declare const DEFAULT_SETTINGS: AppSettings;
17
+ /** Storage key for settings */
18
+ export declare const SETTINGS_STORAGE_KEY = "sudojo-settings";
19
+ //# sourceMappingURL=settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.d.ts","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uCAAuC;AACvC,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE1D,2BAA2B;AAC3B,MAAM,WAAW,WAAW;IAC1B,oDAAoD;IACpD,UAAU,EAAE,OAAO,CAAC;IACpB,mCAAmC;IACnC,WAAW,EAAE,OAAO,CAAC;IACrB,2BAA2B;IAC3B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,mCAAmC;AACnC,eAAO,MAAM,gBAAgB,EAAE,WAI9B,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,oBAAoB,oBAAoB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * App settings types and domain models
3
+ */
4
+ /** Default application settings */
5
+ export const DEFAULT_SETTINGS = {
6
+ showErrors: true,
7
+ symmetrical: true,
8
+ display: 'numeric',
9
+ };
10
+ /** Storage key for settings */
11
+ export const SETTINGS_STORAGE_KEY = 'sudojo-settings';
12
+ //# sourceMappingURL=settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.js","sourceRoot":"","sources":["../../src/types/settings.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,mCAAmC;AACnC,MAAM,CAAC,MAAM,gBAAgB,GAAgB;IAC3C,UAAU,EAAE,IAAI;IAChB,WAAW,EAAE,IAAI;IACjB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Subscription types and domain models
3
+ */
4
+ /** Subscription product information */
5
+ export interface Product {
6
+ identifier: string;
7
+ productId?: string;
8
+ price: string;
9
+ priceString: string;
10
+ title: string;
11
+ description: string;
12
+ period?: string;
13
+ introPrice?: string;
14
+ introPricePeriod?: string;
15
+ freeTrialPeriod?: string;
16
+ }
17
+ /** User subscription status */
18
+ export interface Subscription {
19
+ isActive: boolean;
20
+ expirationDate?: Date;
21
+ purchaseDate?: Date;
22
+ productIdentifier?: string;
23
+ willRenew?: boolean;
24
+ }
25
+ /** Default inactive subscription */
26
+ export declare const DEFAULT_SUBSCRIPTION: Subscription;
27
+ //# sourceMappingURL=subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.d.ts","sourceRoot":"","sources":["../../src/types/subscription.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,uCAAuC;AACvC,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,+BAA+B;AAC/B,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,CAAC,EAAE,IAAI,CAAC;IACtB,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,oCAAoC;AACpC,eAAO,MAAM,oBAAoB,EAAE,YAElC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Subscription types and domain models
3
+ */
4
+ /** Default inactive subscription */
5
+ export const DEFAULT_SUBSCRIPTION = {
6
+ isActive: false,
7
+ };
8
+ //# sourceMappingURL=subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"subscription.js","sourceRoot":"","sources":["../../src/types/subscription.ts"],"names":[],"mappings":"AAAA;;GAEG;AAyBH,oCAAoC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAiB;IAChD,QAAQ,EAAE,KAAK;CAChB,CAAC"}
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Sudoku game types - ported from renderable/sudokuschool
3
+ *
4
+ * Uses flat 81-cell array (indexed 0-80) matching Kotlin implementation
5
+ */
6
+ /**
7
+ * A single cell in the Sudoku board (indexed 0-80)
8
+ * Matches Kotlin: Cell(index, solution, given, input, pencilmarks)
9
+ */
10
+ export interface SudokuCell {
11
+ /** Cell index (0-80) */
12
+ index: number;
13
+ /** The correct solution value (1-9, or null if not provided) */
14
+ solution: number | null;
15
+ /** The given/clue value (1-9, or null if empty) */
16
+ given: number | null;
17
+ /** User-entered value (1-9, or null if empty) */
18
+ input: number | null;
19
+ /** Pencil marks (candidate digits 1-9, or null) - matches Kotlin Array<Int>? */
20
+ pencilmarks: number[] | null;
21
+ }
22
+ /**
23
+ * Get row index (0-8) from cell index (0-80)
24
+ */
25
+ export declare function rowOf(index: number): number;
26
+ /**
27
+ * Get column index (0-8) from cell index (0-80)
28
+ */
29
+ export declare function columnOf(index: number): number;
30
+ /**
31
+ * Get block index (0-8) from cell index (0-80)
32
+ */
33
+ export declare function blockOf(index: number): number;
34
+ /**
35
+ * Get cell index from row and column
36
+ */
37
+ export declare function cellIndex(row: number, column: number): number;
38
+ /**
39
+ * The Sudoku board containing all 81 cells
40
+ */
41
+ export interface SudokuBoard {
42
+ /** Array of 81 cells (indexed 0-80) */
43
+ cells: SudokuCell[];
44
+ /** Whether the game is completed (all inputs match solutions) */
45
+ completed: boolean;
46
+ /** Whether the board is in manual entry mode */
47
+ entering: boolean;
48
+ /** Error message for manual entry validation */
49
+ enteringError: string | null;
50
+ }
51
+ /**
52
+ * Display modes for Sudoku digits
53
+ */
54
+ export type SudokuDisplay = 'NUMERIC' | 'KANJI' | 'COLORS' | 'EMOJIS';
55
+ /**
56
+ * Session settings (can change during play)
57
+ */
58
+ export interface SudokuPlaySettings {
59
+ /** Whether pencil marking mode is active */
60
+ pencilmarking: boolean;
61
+ /** Whether auto-pencilmarks were generated */
62
+ autoPencilmarks: boolean;
63
+ }
64
+ /**
65
+ * App-level settings (persisted)
66
+ */
67
+ export interface SudokuAppSettings {
68
+ /** Show errors when input doesn't match solution */
69
+ showErrors: boolean;
70
+ /** Enable UI animations */
71
+ enableAnimations: boolean;
72
+ /** Generate symmetrical puzzles */
73
+ symmetrical: boolean;
74
+ /** Digit display mode */
75
+ display: SudokuDisplay;
76
+ }
77
+ /**
78
+ * Current play state
79
+ */
80
+ export interface SudokuPlay {
81
+ /** The game board */
82
+ board: SudokuBoard;
83
+ /** Session settings */
84
+ settings: SudokuPlaySettings;
85
+ /** Currently selected cell index (0-80, or null) */
86
+ selectedIndex: number | null;
87
+ }
88
+ /**
89
+ * Source of the puzzle
90
+ */
91
+ export type PlayingSource = 'DAILY' | 'CHALLENGE' | 'LEVEL' | 'ENTERED';
92
+ /**
93
+ * Full game state including source information
94
+ */
95
+ export interface SudokuGameState {
96
+ /** Current play state */
97
+ play: SudokuPlay | null;
98
+ /** Original puzzle string (before scrambling) */
99
+ originalPuzzle: string;
100
+ /** Original solution string (before scrambling) */
101
+ originalSolution: string;
102
+ /** Puzzle source */
103
+ source: PlayingSource;
104
+ /** Level UUID if from a level */
105
+ levelUuid: string | null;
106
+ /** Board UUID if applicable */
107
+ boardUuid: string | null;
108
+ /** Undo history stack */
109
+ history: SudokuPlay[];
110
+ /** App settings */
111
+ appSettings: SudokuAppSettings;
112
+ /** Digit mapping from scrambling (original -> scrambled) */
113
+ digitMapping: Map<number, number>;
114
+ /** Reverse digit mapping (scrambled -> original) */
115
+ reverseDigitMapping: Map<number, number>;
116
+ }
117
+ export declare const DEFAULT_PLAY_SETTINGS: SudokuPlaySettings;
118
+ export declare const DEFAULT_APP_SETTINGS: SudokuAppSettings;
119
+ /**
120
+ * Create an empty cell
121
+ */
122
+ export declare function createEmptyCell(index: number): SudokuCell;
123
+ /**
124
+ * Create an empty board (81 empty cells)
125
+ */
126
+ export declare function createEmptyBoard(): SudokuBoard;
127
+ /**
128
+ * Check if a cell has an error (input doesn't match solution)
129
+ */
130
+ export declare function cellHasError(cell: SudokuCell): boolean;
131
+ /**
132
+ * Get all cell indices in the same row
133
+ */
134
+ export declare function getRowIndices(index: number): number[];
135
+ /**
136
+ * Get all cell indices in the same column
137
+ */
138
+ export declare function getColumnIndices(index: number): number[];
139
+ /**
140
+ * Get all cell indices in the same block
141
+ */
142
+ export declare function getBlockIndices(index: number): number[];
143
+ /**
144
+ * Get all related cell indices (same row, column, or block)
145
+ */
146
+ export declare function getRelatedIndices(index: number): number[];
147
+ //# sourceMappingURL=sudoku.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sudoku.d.ts","sourceRoot":"","sources":["../../src/types/sudoku.ts"],"names":[],"mappings":"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"}