@sudobility/sudojo_lib 0.0.81 → 0.0.84

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) 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.d.ts +20 -8
  15. package/dist/hooks/useGameTimer.d.ts.map +1 -1
  16. package/dist/hooks/useGameTimer.js +24 -13
  17. package/dist/hooks/useGameTimer.js.map +1 -1
  18. package/dist/hooks/useHint.js.map +1 -1
  19. package/dist/hooks/useLearning.js.map +1 -1
  20. package/dist/hooks/useLevelGame.js.map +1 -1
  21. package/dist/hooks/useLevels.js.map +1 -1
  22. package/dist/hooks/useLocalStorage.js.map +1 -1
  23. package/dist/hooks/useSudoku.js.map +1 -1
  24. package/dist/hooks/useTechniques.js.map +1 -1
  25. package/dist/index.js.map +1 -1
  26. package/dist/stores/gamePlayStore.d.ts +1 -1
  27. package/dist/stores/gamePlayStore.d.ts.map +1 -1
  28. package/dist/stores/gamePlayStore.js +18 -2
  29. package/dist/stores/gamePlayStore.js.map +1 -1
  30. package/dist/test/setup.js.map +1 -1
  31. package/dist/types/currentGame.d.ts +6 -0
  32. package/dist/types/currentGame.d.ts.map +1 -1
  33. package/dist/types/currentGame.js.map +1 -1
  34. package/dist/types/display.js.map +1 -1
  35. package/dist/types/game.js.map +1 -1
  36. package/dist/types/gamePersistence.js.map +1 -1
  37. package/dist/types/index.js.map +1 -1
  38. package/dist/types/progress.js.map +1 -1
  39. package/dist/types/settings.js.map +1 -1
  40. package/dist/types/subscription.js.map +1 -1
  41. package/dist/types/sudoku.js.map +1 -1
  42. package/dist/utils/board.js.map +1 -1
  43. package/dist/utils/digitDisplay.js.map +1 -1
  44. package/dist/utils/hintExplanation.d.ts.map +1 -1
  45. package/dist/utils/hintExplanation.js +2 -0
  46. package/dist/utils/hintExplanation.js.map +1 -1
  47. package/dist/utils/i18nKeys.js.map +1 -1
  48. package/dist/utils/index.js.map +1 -1
  49. package/dist/utils/localizedHint.js.map +1 -1
  50. package/dist/utils/progress.js.map +1 -1
  51. package/dist/utils/subscription.js.map +1 -1
  52. package/dist/utils/sudokuPresenter.js.map +1 -1
  53. package/dist/utils/sudokuScrambler.d.ts +1 -1
  54. package/dist/utils/sudokuScrambler.d.ts.map +1 -1
  55. package/dist/utils/sudokuScrambler.js +17 -6
  56. package/dist/utils/sudokuScrambler.js.map +1 -1
  57. package/dist/utils/technique.js.map +1 -1
  58. package/dist/utils/theme.js.map +1 -1
  59. package/dist/utils/time.js.map +1 -1
  60. package/dist/utils/validation.js.map +1 -1
  61. package/package.json +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,2BAA2B;AAC3B,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;IAChB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;IAChB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;IACnB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC;AACF,MAAM,CAAC,YAAY,GAAG,gBAAuB,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE;IAChD,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,oBAAoB;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE;IACnD,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,uBAAuB;CAC/B,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;IAC1C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;QACvB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;QACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;KACvB,CAAC,CAAC;CACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../src/test/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE5B,2BAA2B;AAC3B,MAAM,gBAAgB,GAAG;IACvB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;IAChB,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE;IAChB,UAAU,EAAE,EAAE,CAAC,EAAE,EAAE;IACnB,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE;CACf,CAAC;AACF,MAAM,CAAC,YAAY,GAAG,gBAAuB,CAAC;AAE9C,8BAA8B;AAC9B,MAAM,oBAAoB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACrC,MAAM,uBAAuB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAExC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,kBAAkB,EAAE;IAChD,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,oBAAoB;CAC5B,CAAC,CAAC;AAEH,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE;IACnD,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,uBAAuB;CAC/B,CAAC,CAAC;AAEH,yBAAyB;AACzB,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE;IAC1C,QAAQ,EAAE,IAAI;IACd,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,KAAK;QACZ,QAAQ,EAAE,IAAI;QACd,WAAW,EAAE,EAAE,CAAC,EAAE,EAAE;QACpB,cAAc,EAAE,EAAE,CAAC,EAAE,EAAE;QACvB,gBAAgB,EAAE,EAAE,CAAC,EAAE,EAAE;QACzB,mBAAmB,EAAE,EAAE,CAAC,EAAE,EAAE;QAC5B,aAAa,EAAE,EAAE,CAAC,EAAE,EAAE;KACvB,CAAC,CAAC;CACJ,CAAC,CAAC","sourcesContent":["import { vi } from 'vitest';\n\n// Mock window.localStorage\nconst localStorageMock = {\n getItem: vi.fn(),\n setItem: vi.fn(),\n removeItem: vi.fn(),\n clear: vi.fn(),\n};\nglobal.localStorage = localStorageMock as any;\n\n// Mock window event listeners\nconst addEventListenerMock = vi.fn();\nconst removeEventListenerMock = vi.fn();\n\nObject.defineProperty(window, 'addEventListener', {\n writable: true,\n value: addEventListenerMock,\n});\n\nObject.defineProperty(window, 'removeEventListener', {\n writable: true,\n value: removeEventListenerMock,\n});\n\n// Mock window.matchMedia\nObject.defineProperty(window, 'matchMedia', {\n writable: true,\n value: vi.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: vi.fn(),\n removeListener: vi.fn(),\n addEventListener: vi.fn(),\n removeEventListener: vi.fn(),\n dispatchEvent: vi.fn(),\n })),\n});\n"]}
@@ -13,6 +13,10 @@ export interface CurrentGameMeta {
13
13
  levelId?: string;
14
14
  /** Level title for display */
15
15
  levelTitle?: string;
16
+ /** Board UUID for the puzzle */
17
+ boardUuid?: string;
18
+ /** Techniques bitset for the puzzle */
19
+ techniques?: number | null;
16
20
  }
17
21
  /** Current game state stored in Zustand */
18
22
  export interface CurrentGame {
@@ -30,6 +34,8 @@ export interface CurrentGame {
30
34
  pencilmarksString: string;
31
35
  /** Whether pencil mode was active */
32
36
  isPencilMode: boolean;
37
+ /** Whether auto pencilmarks were enabled */
38
+ autoPencilmarks: boolean;
33
39
  /** Elapsed time in seconds */
34
40
  elapsedTime: number;
35
41
  /** When the game was started (ISO string) */
@@ -1 +1 @@
1
- {"version":3,"file":"currentGame.d.ts","sourceRoot":"","sources":["../../src/types/currentGame.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExC,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"currentGame.d.ts","sourceRoot":"","sources":["../../src/types/currentGame.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,iCAAiC;AACjC,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,CAAC;AAEvD,uCAAuC;AACvC,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAExC,+CAA+C;AAC/C,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,uBAAuB;IACvB,MAAM,EAAE,UAAU,CAAC;IACnB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,0BAA0B;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,iBAAiB,EAAE,MAAM,CAAC;IAC1B,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,4CAA4C;IAC5C,eAAe,EAAE,OAAO,CAAC;IACzB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"currentGame.js","sourceRoot":"","sources":["../../src/types/currentGame.ts"],"names":[],"mappings":"AAAA;;GAEG"}
1
+ {"version":3,"file":"currentGame.js","sourceRoot":"","sources":["../../src/types/currentGame.ts"],"names":[],"mappings":"AAAA;;GAEG","sourcesContent":["/**\n * Types for the current game feature\n */\n\n/** Source of the current game */\nexport type GameSource = 'daily' | 'level' | 'entered';\n\n/** Which store slot a game lives in */\nexport type GameSlot = 'daily' | 'play';\n\n/** Metadata for navigation back to the game */\nexport interface CurrentGameMeta {\n /** For daily games - the date string (YYYY-MM-DD) */\n dailyDate?: string;\n /** For level games - the level UUID */\n levelId?: string;\n /** Level title for display */\n levelTitle?: string;\n /** Board UUID for the puzzle */\n boardUuid?: string;\n /** Techniques bitset for the puzzle */\n techniques?: number | null;\n}\n\n/** Current game state stored in Zustand */\nexport interface CurrentGame {\n /** Game source type */\n source: GameSource;\n /** Original puzzle string (81 chars) */\n puzzle: string;\n /** Solution string (81 chars) */\n solution: string;\n /** Navigation metadata */\n meta: CurrentGameMeta;\n /** User's current input (81 chars, '0' = empty) */\n inputString: string;\n /** User's pencilmarks (comma-separated format) */\n pencilmarksString: string;\n /** Whether pencil mode was active */\n isPencilMode: boolean;\n /** Whether auto pencilmarks were enabled */\n autoPencilmarks: boolean;\n /** Elapsed time in seconds */\n elapsedTime: number;\n /** When the game was started (ISO string) */\n startedAt: string;\n /** When last updated (ISO string) */\n updatedAt: string;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/types/display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAN,IAAY,UAiBX;AAjBD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,mDAAqC,CAAA;IACrC,uCAAyB,CAAA;IACzB,2DAA6C,CAAA;IAC7C,yDAA2C,CAAA;IAC3C,6DAA+C,CAAA;IAC/C,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,qDAAuC,CAAA;IACvC,6BAAe,CAAA;IACf,mCAAqB,CAAA;AACvB,CAAC,EAjBW,UAAU,KAAV,UAAU,QAiBrB;AAED,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAN,IAAY,WAeX;AAfD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,0BAAW,CAAA;IACX,8BAAe,CAAA;IACf,uCAAwB,CAAA;IACxB,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,oDAAqC,CAAA;IACrC,oCAAqB,CAAA;AACvB,CAAC,EAfW,WAAW,KAAX,WAAW,QAetB;AAwJD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,gBAAgB,EAAE,SAAS;IAC3B,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,WAAW;IACrC,KAAK,EAAE,WAAW;IAClB,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,WAAW;IAC5B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,WAAW;IACzB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,gBAAgB,EAAE,WAAW;IAC7B,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,WAAW;IACrC,KAAK,EAAE,WAAW;IAClB,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,WAAW;IAC5B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,WAAW;IACzB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;CACnB,CAAC"}
1
+ {"version":3,"file":"display.js","sourceRoot":"","sources":["../../src/types/display.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,gFAAgF;AAChF,sCAAsC;AACtC,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAN,IAAY,UAiBX;AAjBD,WAAY,UAAU;IACpB,2BAAa,CAAA;IACb,6BAAe,CAAA;IACf,6BAAe,CAAA;IACf,iDAAmC,CAAA;IACnC,+CAAiC,CAAA;IACjC,mDAAqC,CAAA;IACrC,uCAAyB,CAAA;IACzB,2DAA6C,CAAA;IAC7C,yDAA2C,CAAA;IAC3C,6DAA+C,CAAA;IAC/C,mCAAqB,CAAA;IACrB,iCAAmB,CAAA;IACnB,iCAAmB,CAAA;IACnB,qDAAuC,CAAA;IACvC,6BAAe,CAAA;IACf,mCAAqB,CAAA;AACvB,CAAC,EAjBW,UAAU,KAAV,UAAU,QAiBrB;AAED,gFAAgF;AAChF,kDAAkD;AAClD,gFAAgF;AAEhF;;GAEG;AACH,MAAM,CAAN,IAAY,WAeX;AAfD,WAAY,WAAW;IACrB,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,8BAAe,CAAA;IACf,gCAAiB,CAAA;IACjB,gCAAiB,CAAA;IACjB,0BAAW,CAAA;IACX,8BAAe,CAAA;IACf,uCAAwB,CAAA;IACxB,8BAAe,CAAA;IACf,4BAAa,CAAA;IACb,gCAAiB,CAAA;IACjB,oDAAqC,CAAA;IACrC,oCAAqB,CAAA;AACvB,CAAC,EAfW,WAAW,KAAX,WAAW,QAetB;AAwJD;;GAEG;AACH,MAAM,CAAC,MAAM,YAAY,GAAmB;IAC1C,gBAAgB,EAAE,SAAS;IAC3B,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,WAAW;IACrC,KAAK,EAAE,WAAW;IAClB,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,WAAW;IAC5B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,WAAW;IACzB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,WAAW,GAAmB;IACzC,gBAAgB,EAAE,WAAW;IAC7B,yBAAyB,EAAE,WAAW;IACtC,wBAAwB,EAAE,WAAW;IACrC,KAAK,EAAE,WAAW;IAClB,cAAc,EAAE,WAAW;IAC3B,aAAa,EAAE,WAAW;IAC1B,eAAe,EAAE,WAAW;IAC5B,UAAU,EAAE,WAAW;IACvB,WAAW,EAAE,WAAW;IACxB,YAAY,EAAE,WAAW;IACzB,YAAY,EAAE,WAAW;IACzB,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,WAAW;IACzB,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,WAAW;CACnB,CAAC","sourcesContent":["/**\n * Display types for Sudoku rendering\n *\n * Matches Kotlin renderable types exactly\n */\n\n// =============================================================================\n// Theme Color (matches ThemeColor.kt)\n// =============================================================================\n\n/**\n * Theme colors for the UI - matches Kotlin ThemeColor enum\n */\nexport enum ThemeColor {\n NONE = 'NONE',\n CLEAR = 'CLEAR',\n LABEL = 'LABEL',\n LABEL_SECONDARY = 'LABEL_SECONDARY',\n LABEL_TERTIARY = 'LABEL_TERTIARY',\n LABEL_QUATERNARY = 'LABEL_QUATERNARY',\n BACKGROUND = 'BACKGROUND',\n BACKGROUND_SECONDARY = 'BACKGROUND_SECONDARY',\n BACKGROUND_TERTIARY = 'BACKGROUND_TERTIARY',\n BACKGROUND_QUATERNARY = 'BACKGROUND_QUATERNARY',\n SELECTED = 'SELECTED',\n SUCCESS = 'SUCCESS',\n WARNING = 'WARNING',\n WARNING_SECONDARY = 'WARNING_SECONDARY',\n ERROR = 'ERROR',\n DISABLED = 'DISABLED',\n}\n\n// =============================================================================\n// Sudoku Color (matches SudokuColor in Shared.kt)\n// =============================================================================\n\n/**\n * Sudoku-specific colors - matches Kotlin SudokuColor enum\n */\nexport enum SudokuColor {\n NONE = 'none',\n CLEAR = 'clear',\n BLUE = 'blue',\n GREEN = 'green',\n YELLOW = 'yellow',\n ORANGE = 'orange',\n RED = 'red',\n WHITE = 'white',\n LIGHT_GRAY = 'lightgray',\n BLACK = 'black',\n GRAY = 'gray',\n ACTION = 'action',\n SECONDARY_ACTION = 'secondary-action',\n DISABLED = 'disabled',\n}\n\n// =============================================================================\n// Hint Types (matches Hint.kt)\n// =============================================================================\n\n/**\n * Area type for highlighting - matches HintArea.Type\n */\nexport type HintAreaType = 'row' | 'column' | 'block';\n\n/**\n * Highlighted area in a hint - matches HintArea\n */\nexport interface HintArea {\n type: HintAreaType;\n color: SudokuColor | null;\n index: number;\n}\n\n/**\n * Actions to perform on a cell - matches HintCellActions\n */\nexport interface HintCellActions {\n select: number | null;\n unselect: number | null;\n add: number[] | null;\n remove: number[] | null;\n highlight: number[] | null;\n}\n\n/**\n * Cell display information in a hint - matches HintCell\n */\nexport interface HintCell {\n index: number;\n color: SudokuColor | null;\n fill: boolean;\n actions?: HintCellActions;\n}\n\n/**\n * A single hint step - matches HintStep\n */\nexport interface HintStep {\n title: string;\n text: string;\n areas?: HintArea[] | null;\n cells?: HintCell[] | null;\n links?: DisplayLink[] | null;\n groups?: DisplayCellGroup[] | null;\n digit?: number | null;\n}\n\n// =============================================================================\n// Link Types (for chain visualization)\n// =============================================================================\n\n/**\n * Link type for chain visualization\n */\nexport type LinkType = 'strong' | 'weak';\n\n/**\n * A link between two cells in a chain (display format)\n */\nexport interface DisplayLink {\n /** Start cell index (0-80) */\n fromIndex: number;\n /** End cell index (0-80) */\n toIndex: number;\n /** Link type: \"strong\" (solid line) or \"weak\" (dashed line) */\n type: LinkType;\n /** The digit this link applies to (1-9) */\n digit: number;\n}\n\n// =============================================================================\n// Cell Group Types (for pattern visualization)\n// =============================================================================\n\n/**\n * A group of cells for pattern visualization (display format)\n */\nexport interface DisplayCellGroup {\n /** Group name (e.g., \"ALS A\", \"Conjugate Pair\", \"UR Corner\") */\n name: string;\n /** Theme color for the group */\n color: ThemeColor;\n /** Array of cell indices (0-80) */\n cellIndices: number[];\n}\n\n// =============================================================================\n// Cell Display State\n// =============================================================================\n\n/**\n * Complete display state for a single cell\n */\nexport interface CellDisplayState {\n /** Cell index (0-80) */\n index: number;\n /** Background color */\n backgroundColor: ThemeColor;\n /** Border color (null for no border) */\n borderColor: ThemeColor | null;\n /** Text color */\n textColor: ThemeColor | null;\n /** The digit to display (1-9) or null */\n digit: number | null;\n /** Whether this is a given (original) digit */\n isGiven: boolean;\n /** Pencilmarks to display */\n pencilmarks: PencilmarkDisplayState[];\n}\n\n/**\n * Display state for a single pencilmark\n */\nexport interface PencilmarkDisplayState {\n /** The digit (1-9) */\n digit: number;\n /** Color of the pencilmark */\n color: ThemeColor | null;\n}\n\n// =============================================================================\n// Color Palette\n// =============================================================================\n\n/**\n * UI color palette - matches UIColorType from sudojo-web\n */\nexport interface UIColorPalette {\n systemBackground: string;\n secondarySystemBackground: string;\n tertiarySystemBackground: string;\n label: string;\n secondaryLabel: string;\n tertiaryLabel: string;\n quaternaryLabel: string;\n systemBlue: string;\n systemGreen: string;\n systemOrange: string;\n systemPurple: string;\n systemRed: string;\n systemYellow: string;\n systemGray: string;\n clear: string;\n}\n\n/**\n * Light mode color palette - matches sudojo-web UIColorLight\n */\nexport const UIColorLight: UIColorPalette = {\n systemBackground: '#FFFFFF',\n secondarySystemBackground: '#F2F2F7FF',\n tertiarySystemBackground: '#FFFFFFFF',\n label: '#000000FF',\n secondaryLabel: '#3C3C4399',\n tertiaryLabel: '#3C3C434D',\n quaternaryLabel: '#3C3C432E',\n systemBlue: '#007AFFFF',\n systemGreen: '#34C759FF',\n systemOrange: '#FF9500FF',\n systemPurple: '#AF52DEFF',\n systemRed: '#FF3B30FF',\n systemYellow: '#FFCC00FF',\n systemGray: '#8E8E93FF',\n clear: '#00000000',\n};\n\n/**\n * Dark mode color palette - matches sudojo-web UIColorDark\n */\nexport const UIColorDark: UIColorPalette = {\n systemBackground: '#000000FF',\n secondarySystemBackground: '#1C1C1EFF',\n tertiarySystemBackground: '#2C2C2EFF',\n label: '#FFFFFFFF',\n secondaryLabel: '#EBEBF599',\n tertiaryLabel: '#EBEBF54D',\n quaternaryLabel: '#EBEBF52E',\n systemBlue: '#0A84FFFF',\n systemGreen: '#30D158FF',\n systemOrange: '#FF9F0AFF',\n systemPurple: '#BF5AF2FF',\n systemRed: '#FF453AFF',\n systemYellow: '#FFD60AFF',\n systemGray: '#8E8E93FF',\n clear: '#00000000',\n};\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * Game state types for Sudojo\n */\n\n/**\n * Represents a single cell in the Sudoku grid\n */\nexport interface CellState {\n /** Row index (0-8) */\n row: number;\n /** Column index (0-8) */\n column: number;\n /** The current value (1-9) or null if empty */\n value: number | null;\n /** Whether this cell is an original clue (cannot be modified) */\n isClue: boolean;\n /** Whether this cell has an error (wrong value) */\n isError: boolean;\n /** Pencilmarks (candidate digits) for this cell */\n pencilmarks: Set<number>;\n /** Whether this cell is currently selected */\n isSelected: boolean;\n /** Whether this cell is highlighted (same row/col/block as selected) */\n isHighlighted: boolean;\n /** Whether this cell has the same value as selected cell */\n isSameValue: boolean;\n}\n\n/**\n * A 9x9 grid of cells\n */\nexport type GameBoard = CellState[][];\n\n/**\n * A single move in the game (for undo/redo)\n */\nexport interface GameMove {\n /** The row of the cell */\n row: number;\n /** The column of the cell */\n column: number;\n /** Previous value (null if was empty) */\n previousValue: number | null;\n /** New value (null if cleared) */\n newValue: number | null;\n /** Previous pencilmarks */\n previousPencilmarks: Set<number>;\n /** New pencilmarks */\n newPencilmarks: Set<number>;\n /** Type of move */\n type: 'value' | 'pencilmark';\n}\n\n/**\n * Game settings\n */\nexport interface GameSettings {\n /** Whether to highlight errors immediately */\n showErrors: boolean;\n /** Whether to highlight same numbers */\n highlightSameNumbers: boolean;\n /** Whether to highlight related cells (same row/col/block) */\n highlightRelatedCells: boolean;\n /** Whether to auto-remove pencilmarks when placing a value */\n autoRemovePencilmarks: boolean;\n /** Whether to use auto pencilmarks */\n autoPencilmarks: boolean;\n}\n\n/**\n * Default game settings\n */\nexport const DEFAULT_GAME_SETTINGS: GameSettings = {\n showErrors: true,\n highlightSameNumbers: true,\n highlightRelatedCells: true,\n autoRemovePencilmarks: true,\n autoPencilmarks: false,\n};\n\n/**\n * Game status\n */\nexport type GameStatus =\n | 'idle'\n | 'entering'\n | 'playing'\n | 'paused'\n | 'completed'\n | 'failed';\n\n/**\n * The complete game state\n */\nexport interface GameState {\n /** The current board state */\n board: GameBoard;\n /** The original puzzle string (81 chars) */\n originalPuzzle: string;\n /** The solution string (81 chars) */\n solution: string;\n /** The scrambled puzzle string (81 chars) */\n scrambledPuzzle: string;\n /** The scrambled solution string (81 chars) */\n scrambledSolution: string;\n /** Scramble mapping for digits (original -> scrambled) */\n digitMapping: Map<number, number>;\n /** Undo stack */\n undoStack: GameMove[];\n /** Redo stack */\n redoStack: GameMove[];\n /** Currently selected cell position */\n selectedCell: { row: number; column: number } | null;\n /** Game settings */\n settings: GameSettings;\n /** Current game status */\n status: GameStatus;\n /** Number of mistakes made */\n mistakeCount: number;\n /** Maximum mistakes allowed (0 = unlimited) */\n maxMistakes: number;\n /** Time elapsed in seconds */\n elapsedTime: number;\n /** Whether hint mode is active */\n hintMode: boolean;\n /** Board UUID (if loaded from server) */\n boardUuid: string | null;\n /** Level UUID (if associated with a level) */\n levelUuid: string | null;\n /** Whether in board entering mode (entering original puzzle) */\n entering: boolean;\n /** Error message (e.g., validation error during enter mode) */\n errorMessage: string | null;\n}\n\n/**\n * Position in the grid\n */\nexport interface CellPosition {\n row: number;\n column: number;\n}\n\n/**\n * Hint information from the solver\n */\nexport interface GameHint {\n /** Technique name */\n title: string;\n /** Explanation text */\n text: string;\n /** Cells involved in this hint */\n cells: Array<{\n row: number;\n column: number;\n color: string;\n action?: {\n select?: number;\n addPencilmarks?: number[];\n removePencilmarks?: number[];\n };\n }>;\n /** Areas involved (rows, columns, blocks) */\n areas: Array<{\n type: 'row' | 'column' | 'block';\n index: number;\n color: string;\n }>;\n}\n\n/**\n * Teaching state for step-by-step solving\n */\nexport interface TeachingState {\n /** Whether teaching mode is active */\n isActive: boolean;\n /** Current hint being shown */\n currentHint: GameHint | null;\n /** Index of current step in multi-step hint */\n currentStep: number;\n /** Total number of steps in current hint */\n totalSteps: number;\n /** Whether loading hints */\n isLoading: boolean;\n /** Error message if hint loading failed */\n error: string | null;\n}\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * Game persistence types for saving/loading game state\n */\n\n/** Saved game state */\nexport interface SavedGameState {\n /** User input string (81 chars, 0 = empty) */\n inputString: string;\n /** Pencilmarks string (comma-separated per cell) */\n pencilmarksString: string;\n /** Whether pencil mode was active */\n isPencilMode: boolean;\n /** Last saved timestamp */\n savedAt: string;\n}\n\n/** Key for identifying a game to persist */\nexport interface GamePersistenceKey {\n /** Type of puzzle */\n type: 'daily' | 'level';\n /** Unique identifier (date for daily, levelId for level) */\n id: string;\n}\n\n/** Storage key prefix for game persistence */\nexport const GAME_STORAGE_PREFIX = 'sudojo_game_';\n\n/**\n * Generate storage key for a game\n *\n * @param key - Game persistence key\n * @returns Storage key string\n */\nexport function getGameStorageKey(key: GamePersistenceKey): string {\n return `${GAME_STORAGE_PREFIX}${key.type}_${key.id}`;\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAc/C,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;AAiBlB,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAeH,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAC;AAc/C,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;AAiBlB,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","sourcesContent":["/**\n * Type exports for Sudojo library\n */\n\n// Legacy game types (useGame hook)\nexport type {\n CellPosition,\n CellState,\n GameBoard,\n GameHint,\n GameMove,\n GameSettings,\n GameState,\n GameStatus,\n TeachingState,\n} from './game';\n\nexport { DEFAULT_GAME_SETTINGS } from './game';\n\n// Sudoku types (useSudoku hook - ported from renderable)\nexport type {\n SudokuCell,\n SudokuBoard,\n SudokuPlay,\n SudokuPlaySettings,\n SudokuAppSettings,\n SudokuGameState,\n SudokuDisplay,\n PlayingSource,\n} from './sudoku';\n\nexport {\n DEFAULT_PLAY_SETTINGS,\n DEFAULT_APP_SETTINGS,\n createEmptyCell,\n createEmptyBoard,\n cellHasError,\n rowOf,\n columnOf,\n blockOf,\n cellIndex,\n getRowIndices,\n getColumnIndices,\n getBlockIndices,\n getRelatedIndices,\n} from './sudoku';\n\n// Display types (for rendering - matches Kotlin renderable)\nexport type {\n HintArea,\n HintCell,\n HintCellActions,\n HintStep as DisplayHintStep,\n CellDisplayState,\n PencilmarkDisplayState,\n UIColorPalette,\n // Link and group types for chain visualization\n LinkType,\n DisplayLink,\n DisplayCellGroup,\n} from './display';\n\nexport { ThemeColor, SudokuColor, UIColorLight, UIColorDark } from './display';\n\n// Progress types (for user progress tracking)\nexport type { CompletedPuzzle, GameStats, UserProgress } from './progress';\nexport { DEFAULT_PROGRESS, PROGRESS_STORAGE_KEY } from './progress';\n\n// Settings types (for app settings)\nexport type { DigitDisplay, AppSettings } from './settings';\nexport { DEFAULT_SETTINGS, SETTINGS_STORAGE_KEY } from './settings';\n\n// Subscription types (for subscription management)\nexport type { Product, Subscription } from './subscription';\nexport { DEFAULT_SUBSCRIPTION } from './subscription';\n\n// Game persistence types (for saving/loading game state)\nexport type { SavedGameState, GamePersistenceKey } from './gamePersistence';\nexport { GAME_STORAGE_PREFIX, getGameStorageKey } from './gamePersistence';\n\n// Current game types (for current game feature)\nexport type {\n GameSource,\n CurrentGameMeta,\n CurrentGame,\n GameSlot,\n} from './currentGame';\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * Progress tracking types and domain models\n */\n\n/** Record of a completed puzzle */\nexport interface CompletedPuzzle {\n /** Puzzle identifier */\n id: string;\n /** Type of puzzle */\n type: 'daily' | 'level';\n /** Completion timestamp */\n completedAt: string;\n /** Time to complete in seconds (optional) */\n timeSeconds?: number;\n}\n\n/** Game statistics */\nexport interface GameStats {\n /** Best time in seconds for daily puzzles */\n bestDailyTime: number | null;\n /** Best time in seconds for level puzzles */\n bestLevelTime: number | null;\n /** Average time in seconds */\n averageTime: number | null;\n /** Total time played in seconds */\n totalTimePlayed: number;\n}\n\n/** User progress data */\nexport interface UserProgress {\n /** List of completed puzzles */\n completedPuzzles: CompletedPuzzle[];\n /** Current daily streak */\n dailyStreak: number;\n /** Last daily completion date (YYYY-MM-DD) */\n lastDailyDate: string | null;\n /** Total puzzles completed */\n totalCompleted: number;\n /** Game statistics */\n stats: GameStats;\n}\n\n/** Default progress state */\nexport const DEFAULT_PROGRESS: UserProgress = {\n completedPuzzles: [],\n dailyStreak: 0,\n lastDailyDate: null,\n totalCompleted: 0,\n stats: {\n bestDailyTime: null,\n bestLevelTime: null,\n averageTime: null,\n totalTimePlayed: 0,\n },\n};\n\n/** Storage key for progress data */\nexport const PROGRESS_STORAGE_KEY = 'sudojo-progress';\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * App settings types and domain models\n */\n\n/** Display format for Sudoku digits */\nexport type DigitDisplay = 'numeric' | 'kanji' | 'emojis';\n\n/** Application settings */\nexport interface AppSettings {\n /** Show errors when input doesn't match solution */\n showErrors: boolean;\n /** Generate symmetrical puzzles */\n symmetrical: boolean;\n /** Digit display format */\n display: DigitDisplay;\n}\n\n/** Default application settings */\nexport const DEFAULT_SETTINGS: AppSettings = {\n showErrors: true,\n symmetrical: true,\n display: 'numeric',\n};\n\n/** Storage key for settings */\nexport const SETTINGS_STORAGE_KEY = 'sudojo-settings';\n"]}
@@ -1 +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"}
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","sourcesContent":["/**\n * Subscription types and domain models\n */\n\n/** Subscription product information */\nexport interface Product {\n identifier: string;\n productId?: string;\n price: string;\n priceString: string;\n title: string;\n description: string;\n period?: string;\n introPrice?: string;\n introPricePeriod?: string;\n freeTrialPeriod?: string;\n}\n\n/** User subscription status */\nexport interface Subscription {\n isActive: boolean;\n expirationDate?: Date;\n purchaseDate?: Date;\n productIdentifier?: string;\n willRenew?: boolean;\n}\n\n/** Default inactive subscription */\nexport const DEFAULT_SUBSCRIPTION: Subscription = {\n isActive: false,\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"sudoku.js","sourceRoot":"","sources":["../../src/types/sudoku.ts"],"names":[],"mappings":"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"}
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.d.ts","sourceRoot":"","sources":["../../src/utils/hintExplanation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+ItD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,cAAc,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAgFR;AAqzBD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,cAAc,EACpB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAuBR"}
1
+ {"version":3,"file":"hintExplanation.d.ts","sourceRoot":"","sources":["../../src/utils/hintExplanation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAkB,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AA+ItD;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,cAAc,EACpB,WAAW,CAAC,EAAE,MAAM,EACpB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAgFR;AAqzBD;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,cAAc,EACpB,YAAY,CAAC,EAAE,YAAY,GAC1B,MAAM,CAwBR"}
@@ -811,6 +811,8 @@ function generateGenericExplanation(hint, selectCells, removeCells) {
811
811
  */
812
812
  export function getHintActionSummary(hint, digitDisplay) {
813
813
  _display = digitDisplay ?? 'numeric';
814
+ if (!hint.cells)
815
+ return '';
814
816
  const selectCells = getSelectCells(hint);
815
817
  const removeCells = getRemoveCells(hint);
816
818
  if (selectCells.length > 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"hintExplanation.js","sourceRoot":"","sources":["../../src/utils/hintExplanation.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjE,oFAAoF;AACpF,IAAI,QAAQ,GAAiB,SAAS,CAAC;AAEvC,8BAA8B;AAC9B,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC;AAED,yBAAyB;AACzB,SAAS,QAAQ,CAAC,KAA0C;IAC1D,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC3D,CAAC;AAED,iDAAiD;AACjD,yDAAyD;AACzD,SAAS,WAAW,CAAC,CAAkB;IACrC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,GAAG;QAAE,OAAO,GAAG,CAAC;IACnC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,eAAe,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,QAAQ,CAAC,CAAC;IACpD,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,+DAA+D;AAC/D,SAAS,YAAY,CAAC,MAAyB;IAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAC/B,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;QAC1C,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;IACvD,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,IAAI,GAAG;SACX,IAAI,EAAE;SACN,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;SACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AACnB,CAAC;AAED,uDAAuD;AACvD,SAAS,kBAAkB,CAAC,MAA0B;IACpD,IAAI,CAAC,MAAM;QAAE,OAAO,GAAG,CAAC;IACxB,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG;YAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,sDAAsD;AACtD,SAAS,cAAc,CAAC,MAA0B;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED,sCAAsC;AACtC,SAAS,QAAQ,CAAC,GAAW,EAAE,GAAW;IACxC,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3D,CAAC;AAED,uCAAuC;AACvC,SAAS,eAAe,CACtB,KAA0C;IAE1C,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAE5C,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;IACzE,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC;IAC5E,CAAC;IAED,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAC/D,CAAC;IACF,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,KAAK,EAAE,EAAE,CAAC;IACjE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,0DAA0D;AAC1D,gFAAgF;AAChF,SAAS,cAAc,CACrB,IAAoB;IAEpB,OAAO,IAAI,CAAC,KAAK;SACd,MAAM,CACL,CAAC,CAAiB,EAAE,EAAE,CACpB,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,GAAG,CAC1E;SACA,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;QAC3B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,GAAG,EAAE,CAAC,CAAC,MAAM;QACb,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;KACxB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,uDAAuD;AACvD,sEAAsE;AACtE,SAAS,cAAc,CACrB,IAAoB;IAEpB,OAAO,IAAI,CAAC,KAAK;SACd,MAAM,CACL,CAAC,CAAiB,EAAE,EAAE,CACpB,CAAC,CAAC,OAAO,CAAC,MAAM;QAChB,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,EAAE;QACvB,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAC9C;SACA,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;QAC3B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,GAAG,EAAE,CAAC,CAAC,MAAM;QACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM;KACzB,CAAC,CAAC,CAAC;AACR,CAAC;AAED,2DAA2D;AAC3D,yEAAyE;AACzE,SAAS,iBAAiB,CACxB,IAAoB;IAEpB,OAAO,IAAI,CAAC,KAAK;SACd,MAAM,CACL,CAAC,CAAiB,EAAE,EAAE,CACpB,CAAC,CAAC,OAAO,CAAC,SAAS;QACnB,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,EAAE;QAC1B,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,CACjD;SACA,GAAG,CAAC,CAAC,CAAiB,EAAE,EAAE,CAAC,CAAC;QAC3B,GAAG,EAAE,CAAC,CAAC,GAAG;QACV,GAAG,EAAE,CAAC,CAAC,MAAM;QACb,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,SAAS;KAC5B,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,IAAoB,EACpB,WAAoB,EACpB,YAA2B;IAE3B,QAAQ,GAAG,YAAY,IAAI,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,cAAc,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAE/C,QAAQ,WAAW,EAAE,CAAC;QACpB,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE7C,KAAK,WAAW,CAAC,aAAa;YAC5B,OAAO,mBAAmB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAEhD,KAAK,WAAW,CAAC,YAAY;YAC3B,OAAO,kBAAkB,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAE/C,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE9D,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7D,KAAK,WAAW,CAAC,iBAAiB;YAChC,OAAO,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEpE,KAAK,WAAW,CAAC,aAAa;YAC5B,OAAO,mBAAmB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEhE,KAAK,WAAW,CAAC,YAAY;YAC3B,OAAO,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE/D,KAAK,WAAW,CAAC,WAAW;YAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE9D,KAAK,WAAW,CAAC,UAAU;YACzB,OAAO,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7D,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEzD,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7D,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7D,KAAK,WAAW,CAAC,OAAO;YACtB,OAAO,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE1D,KAAK,WAAW,CAAC,aAAa;YAC5B,OAAO,kBAAkB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE/D,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,gBAAgB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE7D,KAAK,WAAW,CAAC,gBAAgB;YAC/B,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEnE,KAAK,WAAW,CAAC,gBAAgB;YAC/B,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEnE,KAAK,WAAW,CAAC,QAAQ;YACvB,OAAO,cAAc,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE3D,KAAK,WAAW,CAAC,SAAS;YACxB,OAAO,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE5D,KAAK,WAAW,CAAC,kBAAkB;YACjC,OAAO,uBAAuB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEpE,KAAK,WAAW,CAAC,gBAAgB;YAC/B,OAAO,sBAAsB,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAEnE,KAAK,WAAW,CAAC,SAAS,CAAC;QAC3B,KAAK,WAAW,CAAC,MAAM;YACrB,OAAO,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC;QAE5D;YACE,OAAO,0BAA0B,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;IACtE,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,WAA+D;IAE/D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAE/C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,IAAI,EAAE,CAAC;QACT,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK;YAAE,SAAS,GAAG,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;aACxD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;YAAE,SAAS,GAAG,UAAU,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;aACnE,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO;YAAE,SAAS,GAAG,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IACxE,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CACL,GAAG,SAAS,qCAAqC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU;YACvF,wBAAwB,KAAK,mBAAmB,CACjD,CAAC;IACJ,CAAC;IAED,OAAO,CACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,wCAAwC;QAC5E,SAAS,KAAK,QAAQ,CACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,IAAoB,EACpB,WAA+D;IAE/D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAE/C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAC7B,IAAI,SAAiB,CAAC;IACtB,IAAI,IAAI,EAAE,CAAC;QACT,SAAS;YACP,IAAI,CAAC,IAAI,KAAK,KAAK;gBACjB,CAAC,CAAC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;gBACzB,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;oBACtB,CAAC,CAAC,UAAU,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;oBAC5B,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;IACpC,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,SAAS,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IACtD,CAAC;IAED,OAAO,CACL,MAAM,SAAS,WAAW,KAAK,6BAA6B,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI;QAC5F,oDAAoD,KAAK,0BAA0B,SAAS,CAAC,WAAW,EAAE,IAAI;QAC9G,SAAS,KAAK,QAAQ,CACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAoB,EACpB,WAA+D;IAE/D,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAE/C,MAAM,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC5B,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,CACL,QAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,iCAAiC,KAAK,IAAI;QAC9E,2FAA2F;QAC3F,SAAS,KAAK,QAAQ,CACvB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;IAE/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1D,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CACvD,CAAC;IAEF,IAAI,WAAW,GAAG,MAAM,SAAS,YAAY,UAAU,uBAAuB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAClG,WAAW,IAAI,0EAA0E,CAAC;IAC1F,WAAW,IAAI,SAAS,UAAU,8BAA8B,CAAC;IAEjE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACvB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,WAAW,IAAI,kCAAkC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;IAC5G,CAAC;SAAM,CAAC;QACN,WAAW,IAAI,qCAAqC,CAAC;IACvD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,oBAAoB,CAAC;IAEtD,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IAE3E,IAAI,WAAW,GAAG,SAAS,QAAQ,CAAC,KAAK,CAAC,yBAAyB,UAAU,6BAA6B,CAAC;IAC3G,WAAW,IAAI,yFAAyF,CAAC;IACzG,WAAW,IAAI,SAAS,UAAU,2BAA2B,CAAC;IAE9D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW;aAC1B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;aACpE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC1C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,UAAU,wBAAwB,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;QACnH,CAAC;aAAM,CAAC;YACN,WAAW,IAAI,uDAAuD,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACvB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAC7B,MAAM,WAAW,GAAG,WAAW,CAC7B,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAC9C,CAAC;IAEF,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC;IACtD,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAC3B,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAC/D,CAAC;IAEF,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,eAAe,GAAG,SAAS,CAAC,KAAK,CACrC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,KAAK,CACtC,CAAC;IAEF,IAAI,WAAW,GAAG,EAAE,CAAC;IAErB,IAAI,SAAS,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,CAAC;QACtC,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,OAAO;gBACtB,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE;gBACxB,CAAC,CAAC,UAAU,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC9B,WAAW,GAAG,MAAM,QAAQ,WAAW,WAAW,6BAA6B,KAAK,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACpH,WAAW,IAAI,iBAAiB,WAAW,mCAAmC,CAAC;YAC/E,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,WAAW,IAAI,aAAa,WAAW,8BAA8B,KAAK,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;YACxG,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,OAAO;gBACtB,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE;gBACxB,CAAC,CAAC,UAAU,KAAK,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAC9B,WAAW,GAAG,YAAY,KAAK,WAAW,WAAW,uBAAuB,QAAQ,WAAW,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;YACpH,WAAW,IAAI,oBAAoB,WAAW,kCAAkC,CAAC;YACjF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,WAAW,IAAI,aAAa,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,OAAO,QAAQ,kBAAkB,KAAK,GAAG,CAAC;YAC/G,CAAC;QACH,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,WAAW,GAAG,SAAS,WAAW,qBAAqB,KAAK,CAAC,GAAG,GAAG,CAAC,oBAAoB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC5G,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,WAAW,GAAG,SAAS,WAAW,wBAAwB,KAAK,CAAC,GAAG,GAAG,CAAC,oBAAoB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC/G,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;QACzE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,uCAAuC,WAAW,IAAI,CAAC;QACrE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,WAAW,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;QACzE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,mBAAmB,CAC1B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;IAE/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAE5D,IAAI,WAAW,GAAG,MAAM,SAAS,YAAY,YAAY,6BAA6B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1G,WAAW,IAAI,gFAAgF,CAAC;IAChG,WAAW,IAAI,SAAS,YAAY,8BAA8B,CAAC;IAEnE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,WAAW;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;aACnE,OAAO,CAAC,CAAC,CAAC,EAAE;YACX,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACL,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,WAAW,IAAI,kCAAkC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;QAC5G,CAAC;aAAM,CAAC;YACN,WAAW,IAAI,qCAAqC,CAAC;QACvD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,WAAW,IAAI,qCAAqC,CAAC;IACvD,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAE3D,IAAI,WAAW,GAAG,SAAS,QAAQ,CAAC,KAAK,CAAC,yCAAyC,YAAY,IAAI,CAAC;IACpG,WAAW,IAAI,2EAA2E,CAAC;IAC3F,WAAW,IAAI,SAAS,YAAY,2BAA2B,CAAC;IAEhE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAC7D,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,YAAY,wBAAwB,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC5J,CAAC;aAAM,CAAC;YACN,WAAW,IAAI,0CAA0C,CAAC;QAC5D,CAAC;IACH,CAAC;SAAM,CAAC;QACN,WAAW,IAAI,0CAA0C,CAAC;IAC5D,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CACxB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;IAE/C,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IACvC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAE1D,IAAI,WAAW,GAAG,MAAM,SAAS,YAAY,UAAU,6BAA6B,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACxG,WAAW,IAAI,0DAA0D,CAAC;IAE1E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,WAAW;aACR,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC;aACnE,OAAO,CAAC,CAAC,CAAC,EAAE;YACX,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACL,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACxB,WAAW,IAAI,kCAAkC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,oBAAoB,CAAC;QAC5G,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,aAAa,CAAC;IAE/C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC;IAEzD,IAAI,WAAW,GAAG,SAAS,QAAQ,CAAC,KAAK,CAAC,yCAAyC,UAAU,IAAI,CAAC;IAClG,WAAW,IAAI,wDAAwD,CAAC;IAExE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAClC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAC7D,CAAC;QACF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,WAAW,IAAI,aAAa,UAAU,wBAAwB,SAAS,CAAC,WAAW,EAAE,KAAK,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;QAC1J,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CACnB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,MAAM,UAAU,GACd,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,EAAE,CAAC;IACrB,IAAI,UAAU,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,WAAW,GAAG,0BAA0B,KAAK,IAAI,CAAC;QAClD,WAAW,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,4BAA4B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/I,WAAW,IAAI,gCAAgC,KAAK,qCAAqC,CAAC;IAC5F,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,0BAA0B,KAAK,IAAI,CAAC;QAClD,WAAW,IAAI,cAAc,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,yBAAyB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAC/I,WAAW,IAAI,gCAAgC,KAAK,qCAAqC,CAAC;IAC5F,CAAC;IAED,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,6BAA6B,KAAK,IAAI,CAAC;IACzD,WAAW,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,6BAA6B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1I,WAAW,IAAI,+BAA+B,KAAK,8CAA8C,CAAC;IAElG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,uCAAuC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACjG,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,6BAA6B,KAAK,IAAI,CAAC;IACzD,WAAW,IAAI,WAAW,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,6BAA6B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC1I,WAAW,IAAI,+BAA+B,KAAK,+BAA+B,CAAC;IAEnF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,uCAAuC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACjG,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CACvB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,sCAAsC,KAAK,IAAI,CAAC;IAClE,WAAW,IAAI,eAAe,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,2BAA2B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC5I,WAAW,IAAI,wCAAwC,KAAK,2BAA2B,CAAC;IAExF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CACpB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GACV,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,GAAG,CAAC;IAEV,IAAI,WAAW,GAAG,yBAAyB,CAAC;IAC5C,WAAW,IAAI,qCAAqC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACxE,WAAW,IAAI,yEAAyE,MAAM,IAAI,CAAC;IACnG,WAAW,IAAI,+CAA+C,MAAM,gDAAgD,MAAM,IAAI,CAAC;IAC/H,WAAW,IAAI,eAAe,MAAM,oCAAoC,CAAC;IAEzE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,WAAW,IAAI,aAAa,MAAM,oCAAoC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IAC/F,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,MAAM,GACV,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,GAAG,CAAC;IAEV,IAAI,WAAW,GAAG,0BAA0B,CAAC;IAC7C,WAAW,IAAI,oFAAoF,CAAC;IACpG,WAAW,IAAI,UAAU,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IAC7C,WAAW,IAAI,aAAa,MAAM,uCAAuC,CAAC;IAC1E,WAAW,IAAI,mCAAmC,MAAM,IAAI,CAAC;IAE7D,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,WAAW,IAAI,aAAa,MAAM,mCAAmC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IAC9F,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc;SACzB,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC1C,MAAM,SAAS,GACb,WAAW,CAAC,MAAM,GAAG,CAAC;QACpB,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACzD,CAAC,CAAC,GAAG,CAAC;IAEV,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACrC,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,2BAA2B,CAAC;IAC9C,WAAW,IAAI,cAAc,QAAQ,CAAC,KAAK,CAAC,kCAAkC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;IACtH,WAAW,IAAI,mCAAmC,SAAS,IAAI,CAAC;IAEhE,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,WAAW,IAAI,aAAa,SAAS,yCAAyC,SAAS,oBAAoB,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACpI,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CACzB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,2BAA2B,KAAK,IAAI,CAAC;IACvD,WAAW,IAAI,oCAAoC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI;SACnG,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;SACf,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IACrB,WAAW,IAAI,uEAAuE,CAAC;IACvF,WAAW,IAAI,8EAA8E,CAAC;IAE9F,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,8BAA8B,KAAK,IAAI,CAAC;IAC1D,WAAW,IAAI,0CAA0C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7F,WAAW,IAAI,uDAAuD,CAAC;IACvE,WAAW,IAAI,uDAAuD,KAAK,eAAe,CAAC;IAE3F,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,8BAA8B,KAAK,IAAI,CAAC;IAC1D,WAAW,IAAI,0CAA0C,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAC7F,WAAW,IAAI,iCAAiC,CAAC;IAEjD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED,SAAS,sBAAsB,CAC7B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEjD,MAAM,KAAK,GAAG,WAAW,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAErE,IAAI,WAAW,GAAG,uCAAuC,KAAK,IAAI,CAAC;IACnE,WAAW,IAAI,qCAAqC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC;IAEpG,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,WAAW,IAAI,aAAa,KAAK,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IACnE,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,uBAAuB,CAC9B,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,KAAK,EAAE,IAAI,IAAI,oBAAoB,CAAC;IAEtD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;QACzB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC;IAChC,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC;IAE9B,IAAI,WAAW,GAAG,8BAA8B,SAAS,IAAI,CAAC;IAC9D,WAAW,IAAI,SAAS,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,mBAAmB,MAAM,gBAAgB,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC;IAC9H,WAAW,IAAI,2EAA2E,CAAC;IAC3F,WAAW,IAAI,iBAAiB,CAAC,+BAA+B,CAAC,UAAU,CAAC;IAE5E,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,WAAW,IAAI,aAAa,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IAClG,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CACtB,IAAoB,EACpB,cAAmE,EACnE,WAAgE;IAEhE,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC;IAEhD,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpE,IAAI,WAAW,GAAG,8BAA8B,CAAC;IACjD,WAAW,IAAI,oEAAoE,CAAC;IACpF,WAAW,IAAI,kBAAkB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;IACrD,WAAW,IAAI,0FAA0F,CAAC;IAE1G,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;QACrC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;QACH,MAAM,SAAS,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrE,WAAW,IAAI,aAAa,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC;IAClG,CAAC;IAED,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACH,SAAS,0BAA0B,CACjC,IAAoB,EACpB,WAA+D,EAC/D,WAAgE;IAEhE,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEtB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAChC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAC5D,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,UAAU,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,YAAY,GAAG,WAAW,CAAC,GAAG,CAClC,CAAC,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAChE,CAAC;QACF,IAAI,YAAY,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,cAAc,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvD,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,6BAA6B,WAAW,CAAC,MAAM,SAAS,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAoB,EACpB,YAA2B;IAE3B,QAAQ,GAAG,YAAY,IAAI,SAAS,CAAC;IACrC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IAEzC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,CAAC;gBAAE,OAAO,eAAe,CAAC;YAC/B,OAAO,SAAS,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;QACtE,CAAC;QACD,OAAO,mBAAmB,WAAW,CAAC,MAAM,QAAQ,CAAC;IACvD,CAAC;IAED,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;QACpC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACtB,KAAK,MAAM,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC;gBAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QACH,OAAO,aAAa,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,QAAQ,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAChI,CAAC;IAED,OAAO,qBAAqB,CAAC;AAC/B,CAAC"}
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"]}