@sudobility/sudojo_lib 0.0.201 → 0.0.203
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/adminApi.d.ts +34 -0
- package/dist/admin/adminApi.d.ts.map +1 -0
- package/dist/admin/adminApi.js +59 -0
- package/dist/admin/adminApi.js.map +1 -0
- package/dist/admin/boardRules.d.ts +75 -0
- package/dist/admin/boardRules.d.ts.map +1 -0
- package/dist/admin/boardRules.js +127 -0
- package/dist/admin/boardRules.js.map +1 -0
- package/dist/admin/boardStrings.d.ts +55 -0
- package/dist/admin/boardStrings.d.ts.map +1 -0
- package/dist/admin/boardStrings.js +99 -0
- package/dist/admin/boardStrings.js.map +1 -0
- package/dist/admin/examples.d.ts +58 -0
- package/dist/admin/examples.d.ts.map +1 -0
- package/dist/admin/examples.js +104 -0
- package/dist/admin/examples.js.map +1 -0
- package/dist/admin/extraction.d.ts +87 -0
- package/dist/admin/extraction.d.ts.map +1 -0
- package/dist/admin/extraction.js +141 -0
- package/dist/admin/extraction.js.map +1 -0
- package/dist/admin/index.d.ts +32 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +22 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/jobs.d.ts +108 -0
- package/dist/admin/jobs.d.ts.map +1 -0
- package/dist/admin/jobs.js +435 -0
- package/dist/admin/jobs.js.map +1 -0
- package/dist/admin/regenerateHints.d.ts +16 -0
- package/dist/admin/regenerateHints.d.ts.map +1 -0
- package/dist/admin/regenerateHints.js +43 -0
- package/dist/admin/regenerateHints.js.map +1 -0
- package/dist/admin/types.d.ts +42 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +21 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/admin/useAdminJob.d.ts +28 -0
- package/dist/admin/useAdminJob.d.ts.map +1 -0
- package/dist/admin/useAdminJob.js +99 -0
- package/dist/admin/useAdminJob.js.map +1 -0
- package/dist/admin/useAdminStats.d.ts +46 -0
- package/dist/admin/useAdminStats.d.ts.map +1 -0
- package/dist/admin/useAdminStats.js +91 -0
- package/dist/admin/useAdminStats.js.map +1 -0
- package/dist/admin/useBoardGenerator.d.ts +29 -0
- package/dist/admin/useBoardGenerator.d.ts.map +1 -0
- package/dist/admin/useBoardGenerator.js +38 -0
- package/dist/admin/useBoardGenerator.js.map +1 -0
- package/dist/admin/useBoardTechniquesUpdater.d.ts +14 -0
- package/dist/admin/useBoardTechniquesUpdater.d.ts.map +1 -0
- package/dist/admin/useBoardTechniquesUpdater.js +28 -0
- package/dist/admin/useBoardTechniquesUpdater.js.map +1 -0
- package/dist/admin/useExampleCreator.d.ts +29 -0
- package/dist/admin/useExampleCreator.d.ts.map +1 -0
- package/dist/admin/useExampleCreator.js +58 -0
- package/dist/admin/useExampleCreator.js.map +1 -0
- package/dist/admin/useSingleBoardExtractor.d.ts +18 -0
- package/dist/admin/useSingleBoardExtractor.d.ts.map +1 -0
- package/dist/admin/useSingleBoardExtractor.js +19 -0
- package/dist/admin/useSingleBoardExtractor.js.map +1 -0
- package/dist/admin/useTechniqueExtractor.d.ts +26 -0
- package/dist/admin/useTechniqueExtractor.d.ts.map +1 -0
- package/dist/admin/useTechniqueExtractor.js +37 -0
- package/dist/admin/useTechniqueExtractor.js.map +1 -0
- package/dist/context/SudojoApiContext.d.ts +58 -0
- package/dist/context/SudojoApiContext.d.ts.map +1 -0
- package/dist/context/SudojoApiContext.js +52 -0
- package/dist/context/SudojoApiContext.js.map +1 -0
- package/dist/context/SudojoApiProvider.d.ts +21 -0
- package/dist/context/SudojoApiProvider.d.ts.map +1 -0
- package/dist/context/SudojoApiProvider.js +15 -0
- package/dist/context/SudojoApiProvider.js.map +1 -0
- package/dist/context/index.d.ts +3 -0
- package/dist/context/index.d.ts.map +1 -1
- package/dist/context/index.js +2 -0
- package/dist/context/index.js.map +1 -1
- package/dist/hooks/index.d.ts +24 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +22 -0
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useBoardEntry.d.ts +65 -5
- package/dist/hooks/useBoardEntry.d.ts.map +1 -1
- package/dist/hooks/useBoardEntry.js +124 -27
- package/dist/hooks/useBoardEntry.js.map +1 -1
- package/dist/hooks/useBoardScan.d.ts +27 -0
- package/dist/hooks/useBoardScan.d.ts.map +1 -0
- package/dist/hooks/useBoardScan.js +27 -0
- package/dist/hooks/useBoardScan.js.map +1 -0
- package/dist/hooks/useCommunities.d.ts +6 -4
- package/dist/hooks/useCommunities.d.ts.map +1 -1
- package/dist/hooks/useCommunities.js +6 -1
- package/dist/hooks/useCommunities.js.map +1 -1
- package/dist/hooks/useCompletionTrigger.d.ts +23 -0
- package/dist/hooks/useCompletionTrigger.d.ts.map +1 -0
- package/dist/hooks/useCompletionTrigger.js +39 -0
- package/dist/hooks/useCompletionTrigger.js.map +1 -0
- package/dist/hooks/useDailyGame.d.ts +11 -6
- package/dist/hooks/useDailyGame.d.ts.map +1 -1
- package/dist/hooks/useDailyGame.js +20 -61
- package/dist/hooks/useDailyGame.js.map +1 -1
- package/dist/hooks/useDeleteAccount.d.ts +72 -0
- package/dist/hooks/useDeleteAccount.d.ts.map +1 -0
- package/dist/hooks/useDeleteAccount.js +71 -0
- package/dist/hooks/useDeleteAccount.js.map +1 -0
- package/dist/hooks/useEnteredGameSession.d.ts +73 -0
- package/dist/hooks/useEnteredGameSession.d.ts.map +1 -0
- package/dist/hooks/useEnteredGameSession.js +155 -0
- package/dist/hooks/useEnteredGameSession.js.map +1 -0
- package/dist/hooks/useGameSession.d.ts +8 -4
- package/dist/hooks/useGameSession.d.ts.map +1 -1
- package/dist/hooks/useGameSession.js +4 -1
- package/dist/hooks/useGameSession.js.map +1 -1
- package/dist/hooks/useGameTeaching.d.ts.map +1 -1
- package/dist/hooks/useGameTeaching.js +11 -13
- package/dist/hooks/useGameTeaching.js.map +1 -1
- package/dist/hooks/useHint.d.ts +7 -7
- package/dist/hooks/useHint.d.ts.map +1 -1
- package/dist/hooks/useHint.js +18 -9
- package/dist/hooks/useHint.js.map +1 -1
- package/dist/hooks/useIsSiteAdmin.d.ts +39 -0
- package/dist/hooks/useIsSiteAdmin.d.ts.map +1 -0
- package/dist/hooks/useIsSiteAdmin.js +31 -0
- package/dist/hooks/useIsSiteAdmin.js.map +1 -0
- package/dist/hooks/useLearning.d.ts +8 -8
- package/dist/hooks/useLearning.d.ts.map +1 -1
- package/dist/hooks/useLearning.js +5 -2
- package/dist/hooks/useLearning.js.map +1 -1
- package/dist/hooks/useLevelGame.d.ts +7 -7
- package/dist/hooks/useLevelGame.d.ts.map +1 -1
- package/dist/hooks/useLevelGame.js +13 -49
- package/dist/hooks/useLevelGame.js.map +1 -1
- package/dist/hooks/useLevels.d.ts +8 -8
- package/dist/hooks/useLevels.d.ts.map +1 -1
- package/dist/hooks/useLevels.js +7 -3
- package/dist/hooks/useLevels.js.map +1 -1
- package/dist/hooks/usePracticeGame.d.ts +53 -0
- package/dist/hooks/usePracticeGame.d.ts.map +1 -0
- package/dist/hooks/usePracticeGame.js +72 -0
- package/dist/hooks/usePracticeGame.js.map +1 -0
- package/dist/hooks/usePuzzleDistribution.d.ts +2 -0
- package/dist/hooks/usePuzzleDistribution.d.ts.map +1 -1
- package/dist/hooks/usePuzzleDistribution.js +4 -14
- package/dist/hooks/usePuzzleDistribution.js.map +1 -1
- package/dist/hooks/usePuzzleProgress.d.ts +37 -0
- package/dist/hooks/usePuzzleProgress.d.ts.map +1 -0
- package/dist/hooks/usePuzzleProgress.js +48 -0
- package/dist/hooks/usePuzzleProgress.js.map +1 -0
- package/dist/hooks/usePuzzleSession.d.ts +215 -0
- package/dist/hooks/usePuzzleSession.d.ts.map +1 -0
- package/dist/hooks/usePuzzleSession.js +358 -0
- package/dist/hooks/usePuzzleSession.js.map +1 -0
- package/dist/hooks/useResumeGame.d.ts +70 -0
- package/dist/hooks/useResumeGame.d.ts.map +1 -0
- package/dist/hooks/useResumeGame.js +123 -0
- package/dist/hooks/useResumeGame.js.map +1 -0
- package/dist/hooks/useStrategies.d.ts +39 -0
- package/dist/hooks/useStrategies.d.ts.map +1 -0
- package/dist/hooks/useStrategies.js +34 -0
- package/dist/hooks/useStrategies.js.map +1 -0
- package/dist/hooks/useSudoku.d.ts +5 -0
- package/dist/hooks/useSudoku.d.ts.map +1 -1
- package/dist/hooks/useSudoku.js +7 -1
- package/dist/hooks/useSudoku.js.map +1 -1
- package/dist/hooks/useTechniqueByPath.d.ts +46 -0
- package/dist/hooks/useTechniqueByPath.d.ts.map +1 -0
- package/dist/hooks/useTechniqueByPath.js +47 -0
- package/dist/hooks/useTechniqueByPath.js.map +1 -0
- package/dist/hooks/useTechniqueExample.d.ts +60 -0
- package/dist/hooks/useTechniqueExample.d.ts.map +1 -0
- package/dist/hooks/useTechniqueExample.js +63 -0
- package/dist/hooks/useTechniqueExample.js.map +1 -0
- package/dist/hooks/useTechniques.d.ts +8 -8
- package/dist/hooks/useTechniques.d.ts.map +1 -1
- package/dist/hooks/useTechniques.js +9 -21
- package/dist/hooks/useTechniques.js.map +1 -1
- package/dist/index.d.ts +418 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +276 -10
- package/dist/index.js.map +1 -1
- package/dist/types/currentGame.d.ts +9 -1
- package/dist/types/currentGame.d.ts.map +1 -1
- package/dist/types/currentGame.js.map +1 -1
- package/dist/utils/auth.d.ts +6 -0
- package/dist/utils/auth.d.ts.map +1 -1
- package/dist/utils/auth.js +8 -0
- package/dist/utils/auth.js.map +1 -1
- package/dist/utils/community.d.ts +64 -0
- package/dist/utils/community.d.ts.map +1 -0
- package/dist/utils/community.js +66 -0
- package/dist/utils/community.js.map +1 -0
- package/dist/utils/date.d.ts +37 -0
- package/dist/utils/date.d.ts.map +1 -0
- package/dist/utils/date.js +68 -0
- package/dist/utils/date.js.map +1 -0
- package/dist/utils/entityTranslate.d.ts +120 -0
- package/dist/utils/entityTranslate.d.ts.map +1 -0
- package/dist/utils/entityTranslate.js +146 -0
- package/dist/utils/entityTranslate.js.map +1 -0
- package/dist/utils/gameFetchStatus.d.ts +74 -0
- package/dist/utils/gameFetchStatus.d.ts.map +1 -0
- package/dist/utils/gameFetchStatus.js +118 -0
- package/dist/utils/gameFetchStatus.js.map +1 -0
- package/dist/utils/gamification.d.ts +36 -0
- package/dist/utils/gamification.d.ts.map +1 -0
- package/dist/utils/gamification.js +33 -0
- package/dist/utils/gamification.js.map +1 -0
- package/dist/utils/hintAccess.d.ts +64 -0
- package/dist/utils/hintAccess.d.ts.map +1 -0
- package/dist/utils/hintAccess.js +57 -0
- package/dist/utils/hintAccess.js.map +1 -0
- package/dist/utils/index.d.ts +31 -10
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +20 -9
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/language.d.ts +123 -0
- package/dist/utils/language.d.ts.map +1 -0
- package/dist/utils/language.js +95 -0
- package/dist/utils/language.js.map +1 -0
- package/dist/utils/localizedHint.d.ts +60 -0
- package/dist/utils/localizedHint.d.ts.map +1 -1
- package/dist/utils/localizedHint.js +90 -0
- package/dist/utils/localizedHint.js.map +1 -1
- package/dist/utils/progress.d.ts +10 -1
- package/dist/utils/progress.d.ts.map +1 -1
- package/dist/utils/progress.js +24 -0
- package/dist/utils/progress.js.map +1 -1
- package/dist/utils/scannedBoard.d.ts +79 -0
- package/dist/utils/scannedBoard.d.ts.map +1 -0
- package/dist/utils/scannedBoard.js +96 -0
- package/dist/utils/scannedBoard.js.map +1 -0
- package/dist/utils/shareUrl.d.ts +38 -15
- package/dist/utils/shareUrl.d.ts.map +1 -1
- package/dist/utils/shareUrl.js +75 -26
- package/dist/utils/shareUrl.js.map +1 -1
- package/dist/utils/subscription.d.ts +118 -0
- package/dist/utils/subscription.d.ts.map +1 -1
- package/dist/utils/subscription.js +212 -0
- package/dist/utils/subscription.js.map +1 -1
- package/dist/utils/sudokuPresenter.d.ts +42 -0
- package/dist/utils/sudokuPresenter.d.ts.map +1 -1
- package/dist/utils/sudokuPresenter.js +114 -1
- package/dist/utils/sudokuPresenter.js.map +1 -1
- package/dist/utils/sudokuScrambler.d.ts +8 -0
- package/dist/utils/sudokuScrambler.d.ts.map +1 -1
- package/dist/utils/sudokuScrambler.js +12 -0
- package/dist/utils/sudokuScrambler.js.map +1 -1
- package/dist/utils/technique.d.ts +112 -1
- package/dist/utils/technique.d.ts.map +1 -1
- package/dist/utils/technique.js +293 -1
- package/dist/utils/technique.js.map +1 -1
- package/dist/utils/techniqueBitmask.d.ts +31 -0
- package/dist/utils/techniqueBitmask.d.ts.map +1 -0
- package/dist/utils/techniqueBitmask.js +53 -0
- package/dist/utils/techniqueBitmask.js.map +1 -0
- package/dist/utils/techniqueExample.d.ts +42 -0
- package/dist/utils/techniqueExample.d.ts.map +1 -0
- package/dist/utils/techniqueExample.js +57 -0
- package/dist/utils/techniqueExample.js.map +1 -0
- package/dist/utils/theme.d.ts +2 -0
- package/dist/utils/theme.d.ts.map +1 -1
- package/dist/utils/theme.js +2 -0
- package/dist/utils/theme.js.map +1 -1
- package/package.json +7 -7
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin: extract one board's techniques, or find a technique example in it.
|
|
3
|
+
*/
|
|
4
|
+
import { useCallback, useRef } from 'react';
|
|
5
|
+
import { useAdminApi } from './adminApi';
|
|
6
|
+
import { extractBoardTechniques, } from './extraction';
|
|
7
|
+
export function useSingleBoardExtractor(options) {
|
|
8
|
+
const api = useAdminApi(options.networkClient, options.baseUrl);
|
|
9
|
+
const getTokenRef = useRef(options.getToken);
|
|
10
|
+
getTokenRef.current = options.getToken;
|
|
11
|
+
const extract = useCallback(async (original, desiredTechnique) => {
|
|
12
|
+
const token = await getTokenRef.current();
|
|
13
|
+
if (!token)
|
|
14
|
+
return { error: 'Not authenticated' };
|
|
15
|
+
return extractBoardTechniques(opts => api.solve(token, opts), original, desiredTechnique);
|
|
16
|
+
}, [api]);
|
|
17
|
+
return { extract };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=useSingleBoardExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useSingleBoardExtractor.js","sourceRoot":"","sources":["../../src/admin/useSingleBoardExtractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAEL,sBAAsB,GACvB,MAAM,cAAc,CAAC;AAkBtB,MAAM,UAAU,uBAAuB,CACrC,OAAuC;IAEvC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEvC,MAAM,OAAO,GAAG,WAAW,CACzB,KAAK,EACH,QAAgB,EAChB,gBAA8B,EACG,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,KAAK;YAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;QAClD,OAAO,sBAAsB,CAC3B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,EAC9B,QAAQ,EACR,gBAAgB,CACjB,CAAC;IACJ,CAAC,EACD,CAAC,GAAG,CAAC,CACN,CAAC;IAEF,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC","sourcesContent":["/**\n * Admin: extract one board's techniques, or find a technique example in it.\n */\n\nimport type { TechniqueId } from '@sudobility/sudojo_types';\nimport { useCallback, useRef } from 'react';\nimport { useAdminApi } from './adminApi';\nimport {\n type BoardExtractionOutcome,\n extractBoardTechniques,\n} from './extraction';\nimport type { AdminJobOptions } from './types';\n\nexport type UseSingleBoardExtractorOptions = AdminJobOptions;\n\nexport interface UseSingleBoardExtractorResult {\n /**\n * Walk `original` with /solve. Without `desiredTechnique`: the accumulated\n * `{ techniques, level }`. With it: `{ type: 'found', … }` at the first\n * matching hint, else the accumulated result. `{ error }` on invalid\n * pencilmarks, a 400, no token, or after 200 steps.\n */\n extract: (\n original: string,\n desiredTechnique?: TechniqueId\n ) => Promise<BoardExtractionOutcome>;\n}\n\nexport function useSingleBoardExtractor(\n options: UseSingleBoardExtractorOptions\n): UseSingleBoardExtractorResult {\n const api = useAdminApi(options.networkClient, options.baseUrl);\n const getTokenRef = useRef(options.getToken);\n getTokenRef.current = options.getToken;\n\n const extract = useCallback(\n async (\n original: string,\n desiredTechnique?: TechniqueId\n ): Promise<BoardExtractionOutcome> => {\n const token = await getTokenRef.current();\n if (!token) return { error: 'Not authenticated' };\n return extractBoardTechniques(\n opts => api.solve(token, opts),\n original,\n desiredTechnique\n );\n },\n [api]\n );\n\n return { extract };\n}\n"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin: fill in the techniques bitmask and level of boards that lack them.
|
|
3
|
+
*/
|
|
4
|
+
import type { AdminJobOptions, AdminJobState } from './types';
|
|
5
|
+
export type UseTechniqueExtractorOptions = AdminJobOptions;
|
|
6
|
+
export interface UseTechniqueExtractorResult extends AdminJobState {
|
|
7
|
+
/** Boards saved by the current/last run. */
|
|
8
|
+
extractedCount: number;
|
|
9
|
+
/**
|
|
10
|
+
* Start extracting. `testWithFrontend`: walk each board with /solve and
|
|
11
|
+
* compare with /validate (stops on a mismatch) instead of trusting
|
|
12
|
+
* /validate. Resolves with the number saved when the run ends.
|
|
13
|
+
*/
|
|
14
|
+
start: (options: {
|
|
15
|
+
testWithFrontend: boolean;
|
|
16
|
+
}) => Promise<number>;
|
|
17
|
+
/** Stop now: shows "Stopped" and ignores the board in flight. */
|
|
18
|
+
cancel: () => void;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Process boards without techniques until none are left, `cancel()`, or a
|
|
22
|
+
* critical error. Board counts refresh on their own (each save invalidates
|
|
23
|
+
* sudojo_client's `boards` queries).
|
|
24
|
+
*/
|
|
25
|
+
export declare function useTechniqueExtractor(options: UseTechniqueExtractorOptions): UseTechniqueExtractorResult;
|
|
26
|
+
//# sourceMappingURL=useTechniqueExtractor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTechniqueExtractor.d.ts","sourceRoot":"","sources":["../../src/admin/useTechniqueExtractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAG9D,MAAM,MAAM,4BAA4B,GAAG,eAAe,CAAC;AAE3D,MAAM,WAAW,2BAA4B,SAAQ,aAAa;IAChE,4CAA4C;IAC5C,cAAc,EAAE,MAAM,CAAC;IACvB;;;;OAIG;IACH,KAAK,EAAE,CAAC,OAAO,EAAE;QAAE,gBAAgB,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACnE,iEAAiE;IACjE,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,4BAA4B,GACpC,2BAA2B,CAiC7B"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Admin: fill in the techniques bitmask and level of boards that lack them.
|
|
3
|
+
*/
|
|
4
|
+
import { useCallback, useRef, useState } from 'react';
|
|
5
|
+
import { useAdminApi } from './adminApi';
|
|
6
|
+
import { runTechniqueExtraction } from './jobs';
|
|
7
|
+
import { useAdminJob } from './useAdminJob';
|
|
8
|
+
/**
|
|
9
|
+
* Process boards without techniques until none are left, `cancel()`, or a
|
|
10
|
+
* critical error. Board counts refresh on their own (each save invalidates
|
|
11
|
+
* sudojo_client's `boards` queries).
|
|
12
|
+
*/
|
|
13
|
+
export function useTechniqueExtractor(options) {
|
|
14
|
+
const api = useAdminApi(options.networkClient, options.baseUrl);
|
|
15
|
+
const job = useAdminJob();
|
|
16
|
+
const [extractedCount, setExtractedCount] = useState(0);
|
|
17
|
+
const getTokenRef = useRef(options.getToken);
|
|
18
|
+
getTokenRef.current = options.getToken;
|
|
19
|
+
const { run, cancel: cancelJob } = job;
|
|
20
|
+
const start = useCallback(async ({ testWithFrontend }) => {
|
|
21
|
+
setExtractedCount(0);
|
|
22
|
+
const count = await run(api, () => getTokenRef.current(), (ctx, isLive) => {
|
|
23
|
+
ctx.onProgress('Starting extraction...');
|
|
24
|
+
return runTechniqueExtraction(ctx, {
|
|
25
|
+
testWithFrontend,
|
|
26
|
+
onBoardExtracted: () => {
|
|
27
|
+
if (isLive())
|
|
28
|
+
setExtractedCount(n => n + 1);
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
return count ?? 0;
|
|
33
|
+
}, [api, run]);
|
|
34
|
+
const cancel = useCallback(() => cancelJob(true), [cancelJob]);
|
|
35
|
+
return { ...job.state, extractedCount, start, cancel };
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=useTechniqueExtractor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useTechniqueExtractor.js","sourceRoot":"","sources":["../../src/admin/useTechniqueExtractor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,QAAQ,CAAC;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAiB5C;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAqC;IAErC,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,WAAW,EAAE,CAAC;IAC1B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxD,MAAM,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7C,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;IAEvC,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,GAAG,CAAC;IAEvC,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,EAAE,EAAE,gBAAgB,EAAiC,EAAE,EAAE;QAC5D,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,KAAK,GAAG,MAAM,GAAG,CACrB,GAAG,EACH,GAAG,EAAE,CAAC,WAAW,CAAC,OAAO,EAAE,EAC3B,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;YACd,GAAG,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC;YACzC,OAAO,sBAAsB,CAAC,GAAG,EAAE;gBACjC,gBAAgB;gBAChB,gBAAgB,EAAE,GAAG,EAAE;oBACrB,IAAI,MAAM,EAAE;wBAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAC9C,CAAC;aACF,CAAC,CAAC;QACL,CAAC,CACF,CAAC;QACF,OAAO,KAAK,IAAI,CAAC,CAAC;IACpB,CAAC,EACD,CAAC,GAAG,EAAE,GAAG,CAAC,CACX,CAAC;IAEF,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAE/D,OAAO,EAAE,GAAG,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzD,CAAC","sourcesContent":["/**\n * Admin: fill in the techniques bitmask and level of boards that lack them.\n */\n\nimport { useCallback, useRef, useState } from 'react';\nimport { useAdminApi } from './adminApi';\nimport { runTechniqueExtraction } from './jobs';\nimport type { AdminJobOptions, AdminJobState } from './types';\nimport { useAdminJob } from './useAdminJob';\n\nexport type UseTechniqueExtractorOptions = AdminJobOptions;\n\nexport interface UseTechniqueExtractorResult extends AdminJobState {\n /** Boards saved by the current/last run. */\n extractedCount: number;\n /**\n * Start extracting. `testWithFrontend`: walk each board with /solve and\n * compare with /validate (stops on a mismatch) instead of trusting\n * /validate. Resolves with the number saved when the run ends.\n */\n start: (options: { testWithFrontend: boolean }) => Promise<number>;\n /** Stop now: shows \"Stopped\" and ignores the board in flight. */\n cancel: () => void;\n}\n\n/**\n * Process boards without techniques until none are left, `cancel()`, or a\n * critical error. Board counts refresh on their own (each save invalidates\n * sudojo_client's `boards` queries).\n */\nexport function useTechniqueExtractor(\n options: UseTechniqueExtractorOptions\n): UseTechniqueExtractorResult {\n const api = useAdminApi(options.networkClient, options.baseUrl);\n const job = useAdminJob();\n const [extractedCount, setExtractedCount] = useState(0);\n const getTokenRef = useRef(options.getToken);\n getTokenRef.current = options.getToken;\n\n const { run, cancel: cancelJob } = job;\n\n const start = useCallback(\n async ({ testWithFrontend }: { testWithFrontend: boolean }) => {\n setExtractedCount(0);\n const count = await run(\n api,\n () => getTokenRef.current(),\n (ctx, isLive) => {\n ctx.onProgress('Starting extraction...');\n return runTechniqueExtraction(ctx, {\n testWithFrontend,\n onBoardExtracted: () => {\n if (isLive()) setExtractedCount(n => n + 1);\n },\n });\n }\n );\n return count ?? 0;\n },\n [api, run]\n );\n\n const cancel = useCallback(() => cancelJob(true), [cancelJob]);\n\n return { ...job.state, extractedCount, start, cancel };\n}\n"]}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SudojoApiContext
|
|
3
|
+
*
|
|
4
|
+
* Optional React context that supplies the API connection (network client,
|
|
5
|
+
* base URL, auth token) to sudojo_lib hooks. Apps wrap their tree with
|
|
6
|
+
* SudojoApiProvider once; hooks whose options carry `networkClient` /
|
|
7
|
+
* `baseUrl` / `token` may then omit them. Explicit options always win over
|
|
8
|
+
* the context, so existing callers keep working unchanged.
|
|
9
|
+
*/
|
|
10
|
+
import type { NetworkClient } from '@sudobility/types';
|
|
11
|
+
/** The API connection the provider supplies. */
|
|
12
|
+
export interface SudojoApiValue {
|
|
13
|
+
/** Network client for API calls */
|
|
14
|
+
networkClient: NetworkClient;
|
|
15
|
+
/** Base URL for the Sudojo API */
|
|
16
|
+
baseUrl: string;
|
|
17
|
+
/** Firebase ID token, or null/undefined when signed out */
|
|
18
|
+
token?: string | null | undefined;
|
|
19
|
+
}
|
|
20
|
+
/** Optional API connection fields a hook's options may carry. */
|
|
21
|
+
export interface SudojoApiOptions {
|
|
22
|
+
/** Network client for API calls (default: SudojoApiProvider's) */
|
|
23
|
+
networkClient?: NetworkClient | undefined;
|
|
24
|
+
/** Base URL for the Sudojo API (default: SudojoApiProvider's) */
|
|
25
|
+
baseUrl?: string | undefined;
|
|
26
|
+
/** Access token (default: SudojoApiProvider's, else '') */
|
|
27
|
+
token?: string | null | undefined;
|
|
28
|
+
}
|
|
29
|
+
/** An API connection with every field resolved. */
|
|
30
|
+
export interface ResolvedSudojoApi {
|
|
31
|
+
networkClient: NetworkClient;
|
|
32
|
+
baseUrl: string;
|
|
33
|
+
/** The token, '' when there is none */
|
|
34
|
+
token: string;
|
|
35
|
+
}
|
|
36
|
+
declare const SudojoApiContext: import("react").Context<SudojoApiValue | null>;
|
|
37
|
+
/**
|
|
38
|
+
* The API connection from the nearest SudojoApiProvider.
|
|
39
|
+
* @throws Error when there is no SudojoApiProvider above
|
|
40
|
+
*/
|
|
41
|
+
export declare function useSudojoApi(): SudojoApiValue;
|
|
42
|
+
/** The API connection from the nearest SudojoApiProvider, or null. */
|
|
43
|
+
export declare function useOptionalSudojoApi(): SudojoApiValue | null;
|
|
44
|
+
/**
|
|
45
|
+
* Merge explicit options over the provider's connection (pure; no hooks).
|
|
46
|
+
* `token` falls back to the provider only when the option is undefined, so an
|
|
47
|
+
* explicit null or '' means "no token".
|
|
48
|
+
* @throws Error when neither supplies networkClient and baseUrl
|
|
49
|
+
*/
|
|
50
|
+
export declare function resolveSudojoApi(options: SudojoApiOptions, context: SudojoApiValue | null, hookName?: string): ResolvedSudojoApi;
|
|
51
|
+
/**
|
|
52
|
+
* Resolve a hook's API connection: explicit options first, then the
|
|
53
|
+
* SudojoApiProvider.
|
|
54
|
+
* @throws Error when neither supplies networkClient and baseUrl
|
|
55
|
+
*/
|
|
56
|
+
export declare function useResolvedSudojoApi(options: SudojoApiOptions, hookName?: string): ResolvedSudojoApi;
|
|
57
|
+
export { SudojoApiContext };
|
|
58
|
+
//# sourceMappingURL=SudojoApiContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SudojoApiContext.d.ts","sourceRoot":"","sources":["../../src/context/SudojoApiContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,mCAAmC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,iEAAiE;AACjE,MAAM,WAAW,gBAAgB;IAC/B,kEAAkE;IAClE,aAAa,CAAC,EAAE,aAAa,GAAG,SAAS,CAAC;IAC1C,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACnC;AAED,mDAAmD;AACnD,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAC;CACf;AAED,QAAA,MAAM,gBAAgB,gDAA6C,CAAC;AAEpE;;;GAGG;AACH,wBAAgB,YAAY,IAAI,cAAc,CAQ7C;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,IAAI,cAAc,GAAG,IAAI,CAE5D;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,cAAc,GAAG,IAAI,EAC9B,QAAQ,SAAoB,GAC3B,iBAAiB,CAWnB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,gBAAgB,EACzB,QAAQ,CAAC,EAAE,MAAM,GAChB,iBAAiB,CAGnB;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SudojoApiContext
|
|
3
|
+
*
|
|
4
|
+
* Optional React context that supplies the API connection (network client,
|
|
5
|
+
* base URL, auth token) to sudojo_lib hooks. Apps wrap their tree with
|
|
6
|
+
* SudojoApiProvider once; hooks whose options carry `networkClient` /
|
|
7
|
+
* `baseUrl` / `token` may then omit them. Explicit options always win over
|
|
8
|
+
* the context, so existing callers keep working unchanged.
|
|
9
|
+
*/
|
|
10
|
+
import { createContext, useContext } from 'react';
|
|
11
|
+
const SudojoApiContext = createContext(null);
|
|
12
|
+
/**
|
|
13
|
+
* The API connection from the nearest SudojoApiProvider.
|
|
14
|
+
* @throws Error when there is no SudojoApiProvider above
|
|
15
|
+
*/
|
|
16
|
+
export function useSudojoApi() {
|
|
17
|
+
const value = useContext(SudojoApiContext);
|
|
18
|
+
if (!value) {
|
|
19
|
+
throw new Error('useSudojoApi: no SudojoApiProvider above this component. Wrap the app in <SudojoApiProvider> or pass networkClient/baseUrl explicitly.');
|
|
20
|
+
}
|
|
21
|
+
return value;
|
|
22
|
+
}
|
|
23
|
+
/** The API connection from the nearest SudojoApiProvider, or null. */
|
|
24
|
+
export function useOptionalSudojoApi() {
|
|
25
|
+
return useContext(SudojoApiContext);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Merge explicit options over the provider's connection (pure; no hooks).
|
|
29
|
+
* `token` falls back to the provider only when the option is undefined, so an
|
|
30
|
+
* explicit null or '' means "no token".
|
|
31
|
+
* @throws Error when neither supplies networkClient and baseUrl
|
|
32
|
+
*/
|
|
33
|
+
export function resolveSudojoApi(options, context, hookName = 'sudojo_lib hook') {
|
|
34
|
+
const networkClient = options.networkClient ?? context?.networkClient;
|
|
35
|
+
const baseUrl = options.baseUrl ?? context?.baseUrl;
|
|
36
|
+
if (!networkClient || baseUrl === undefined) {
|
|
37
|
+
throw new Error(`${hookName}: networkClient and baseUrl are required. Pass them in the options or wrap the app in <SudojoApiProvider>.`);
|
|
38
|
+
}
|
|
39
|
+
const token = options.token !== undefined ? options.token : (context?.token ?? null);
|
|
40
|
+
return { networkClient, baseUrl, token: token ?? '' };
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve a hook's API connection: explicit options first, then the
|
|
44
|
+
* SudojoApiProvider.
|
|
45
|
+
* @throws Error when neither supplies networkClient and baseUrl
|
|
46
|
+
*/
|
|
47
|
+
export function useResolvedSudojoApi(options, hookName) {
|
|
48
|
+
const context = useContext(SudojoApiContext);
|
|
49
|
+
return resolveSudojoApi(options, context, hookName);
|
|
50
|
+
}
|
|
51
|
+
export { SudojoApiContext };
|
|
52
|
+
//# sourceMappingURL=SudojoApiContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SudojoApiContext.js","sourceRoot":"","sources":["../../src/context/SudojoApiContext.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AA+BlD,MAAM,gBAAgB,GAAG,aAAa,CAAwB,IAAI,CAAC,CAAC;AAEpE;;;GAGG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,wIAAwI,CACzI,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,oBAAoB;IAClC,OAAO,UAAU,CAAC,gBAAgB,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAyB,EACzB,OAA8B,EAC9B,QAAQ,GAAG,iBAAiB;IAE5B,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,EAAE,aAAa,CAAC;IACtE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,EAAE,OAAO,CAAC;IACpD,IAAI,CAAC,aAAa,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CACb,GAAG,QAAQ,4GAA4G,CACxH,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;IACzE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;AACxD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAyB,EACzB,QAAiB;IAEjB,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,CAAC,CAAC;IAC7C,OAAO,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AACtD,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC","sourcesContent":["/**\n * SudojoApiContext\n *\n * Optional React context that supplies the API connection (network client,\n * base URL, auth token) to sudojo_lib hooks. Apps wrap their tree with\n * SudojoApiProvider once; hooks whose options carry `networkClient` /\n * `baseUrl` / `token` may then omit them. Explicit options always win over\n * the context, so existing callers keep working unchanged.\n */\n\nimport { createContext, useContext } from 'react';\nimport type { NetworkClient } from '@sudobility/types';\n\n/** The API connection the provider supplies. */\nexport interface SudojoApiValue {\n /** Network client for API calls */\n networkClient: NetworkClient;\n /** Base URL for the Sudojo API */\n baseUrl: string;\n /** Firebase ID token, or null/undefined when signed out */\n token?: string | null | undefined;\n}\n\n/** Optional API connection fields a hook's options may carry. */\nexport interface SudojoApiOptions {\n /** Network client for API calls (default: SudojoApiProvider's) */\n networkClient?: NetworkClient | undefined;\n /** Base URL for the Sudojo API (default: SudojoApiProvider's) */\n baseUrl?: string | undefined;\n /** Access token (default: SudojoApiProvider's, else '') */\n token?: string | null | undefined;\n}\n\n/** An API connection with every field resolved. */\nexport interface ResolvedSudojoApi {\n networkClient: NetworkClient;\n baseUrl: string;\n /** The token, '' when there is none */\n token: string;\n}\n\nconst SudojoApiContext = createContext<SudojoApiValue | null>(null);\n\n/**\n * The API connection from the nearest SudojoApiProvider.\n * @throws Error when there is no SudojoApiProvider above\n */\nexport function useSudojoApi(): SudojoApiValue {\n const value = useContext(SudojoApiContext);\n if (!value) {\n throw new Error(\n 'useSudojoApi: no SudojoApiProvider above this component. Wrap the app in <SudojoApiProvider> or pass networkClient/baseUrl explicitly.'\n );\n }\n return value;\n}\n\n/** The API connection from the nearest SudojoApiProvider, or null. */\nexport function useOptionalSudojoApi(): SudojoApiValue | null {\n return useContext(SudojoApiContext);\n}\n\n/**\n * Merge explicit options over the provider's connection (pure; no hooks).\n * `token` falls back to the provider only when the option is undefined, so an\n * explicit null or '' means \"no token\".\n * @throws Error when neither supplies networkClient and baseUrl\n */\nexport function resolveSudojoApi(\n options: SudojoApiOptions,\n context: SudojoApiValue | null,\n hookName = 'sudojo_lib hook'\n): ResolvedSudojoApi {\n const networkClient = options.networkClient ?? context?.networkClient;\n const baseUrl = options.baseUrl ?? context?.baseUrl;\n if (!networkClient || baseUrl === undefined) {\n throw new Error(\n `${hookName}: networkClient and baseUrl are required. Pass them in the options or wrap the app in <SudojoApiProvider>.`\n );\n }\n const token =\n options.token !== undefined ? options.token : (context?.token ?? null);\n return { networkClient, baseUrl, token: token ?? '' };\n}\n\n/**\n * Resolve a hook's API connection: explicit options first, then the\n * SudojoApiProvider.\n * @throws Error when neither supplies networkClient and baseUrl\n */\nexport function useResolvedSudojoApi(\n options: SudojoApiOptions,\n hookName?: string\n): ResolvedSudojoApi {\n const context = useContext(SudojoApiContext);\n return resolveSudojoApi(options, context, hookName);\n}\n\nexport { SudojoApiContext };\n"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SudojoApiProvider
|
|
3
|
+
*
|
|
4
|
+
* Supplies the API connection (network client, base URL, token) to
|
|
5
|
+
* sudojo_lib hooks, so callers can omit those options. Optional: hooks still
|
|
6
|
+
* accept them explicitly, and explicit values win.
|
|
7
|
+
*/
|
|
8
|
+
import React from 'react';
|
|
9
|
+
import type { NetworkClient } from '@sudobility/types';
|
|
10
|
+
interface SudojoApiProviderProps {
|
|
11
|
+
/** Network client for API calls */
|
|
12
|
+
networkClient: NetworkClient;
|
|
13
|
+
/** Base URL for the Sudojo API */
|
|
14
|
+
baseUrl: string;
|
|
15
|
+
/** Firebase ID token, or null/undefined when signed out */
|
|
16
|
+
token?: string | null | undefined;
|
|
17
|
+
children: React.ReactNode;
|
|
18
|
+
}
|
|
19
|
+
export declare function SudojoApiProvider({ networkClient, baseUrl, token, children, }: SudojoApiProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=SudojoApiProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SudojoApiProvider.d.ts","sourceRoot":"","sources":["../../src/context/SudojoApiProvider.tsx"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD,UAAU,sBAAsB;IAC9B,mCAAmC;IACnC,aAAa,EAAE,aAAa,CAAC;IAC7B,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,2DAA2D;IAC3D,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,OAAO,EACP,KAAK,EACL,QAAQ,GACT,EAAE,sBAAsB,2CAUxB"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SudojoApiProvider
|
|
4
|
+
*
|
|
5
|
+
* Supplies the API connection (network client, base URL, token) to
|
|
6
|
+
* sudojo_lib hooks, so callers can omit those options. Optional: hooks still
|
|
7
|
+
* accept them explicitly, and explicit values win.
|
|
8
|
+
*/
|
|
9
|
+
import { useMemo } from 'react';
|
|
10
|
+
import { SudojoApiContext } from './SudojoApiContext';
|
|
11
|
+
export function SudojoApiProvider({ networkClient, baseUrl, token, children, }) {
|
|
12
|
+
const value = useMemo(() => ({ networkClient, baseUrl, token }), [networkClient, baseUrl, token]);
|
|
13
|
+
return (_jsx(SudojoApiContext.Provider, { value: value, children: children }));
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=SudojoApiProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SudojoApiProvider.js","sourceRoot":"","sources":["../../src/context/SudojoApiProvider.tsx"],"names":[],"mappings":";AAAA;;;;;;GAMG;AAEH,OAAc,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAYtD,MAAM,UAAU,iBAAiB,CAAC,EAChC,aAAa,EACb,OAAO,EACP,KAAK,EACL,QAAQ,GACe;IACvB,MAAM,KAAK,GAAG,OAAO,CACnB,GAAG,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACzC,CAAC,aAAa,EAAE,OAAO,EAAE,KAAK,CAAC,CAChC,CAAC;IACF,OAAO,CACL,KAAC,gBAAgB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YACpC,QAAQ,GACiB,CAC7B,CAAC;AACJ,CAAC","sourcesContent":["/**\n * SudojoApiProvider\n *\n * Supplies the API connection (network client, base URL, token) to\n * sudojo_lib hooks, so callers can omit those options. Optional: hooks still\n * accept them explicitly, and explicit values win.\n */\n\nimport React, { useMemo } from 'react';\nimport type { NetworkClient } from '@sudobility/types';\nimport { SudojoApiContext } from './SudojoApiContext';\n\ninterface SudojoApiProviderProps {\n /** Network client for API calls */\n networkClient: NetworkClient;\n /** Base URL for the Sudojo API */\n baseUrl: string;\n /** Firebase ID token, or null/undefined when signed out */\n token?: string | null | undefined;\n children: React.ReactNode;\n}\n\nexport function SudojoApiProvider({\n networkClient,\n baseUrl,\n token,\n children,\n}: SudojoApiProviderProps) {\n const value = useMemo(\n () => ({ networkClient, baseUrl, token }),\n [networkClient, baseUrl, token]\n );\n return (\n <SudojoApiContext.Provider value={value}>\n {children}\n </SudojoApiContext.Provider>\n );\n}\n"]}
|
package/dist/context/index.d.ts
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
export { useEntitlementContext, EntitlementContext, } from './EntitlementContext';
|
|
2
2
|
export { EntitlementProvider } from './EntitlementProvider';
|
|
3
|
+
export type { SudojoApiValue, SudojoApiOptions, ResolvedSudojoApi, } from './SudojoApiContext';
|
|
4
|
+
export { SudojoApiContext, useSudojoApi, useOptionalSudojoApi, resolveSudojoApi, useResolvedSudojoApi, } from './SudojoApiContext';
|
|
5
|
+
export { SudojoApiProvider } from './SudojoApiProvider';
|
|
3
6
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC"}
|
package/dist/context/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export { useEntitlementContext, EntitlementContext, } from './EntitlementContext';
|
|
2
2
|
export { EntitlementProvider } from './EntitlementProvider';
|
|
3
|
+
export { SudojoApiContext, useSudojoApi, useOptionalSudojoApi, resolveSudojoApi, useResolvedSudojoApi, } from './SudojoApiContext';
|
|
4
|
+
export { SudojoApiProvider } from './SudojoApiProvider';
|
|
3
5
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC","sourcesContent":["export {\n useEntitlementContext,\n EntitlementContext,\n} from './EntitlementContext';\nexport { EntitlementProvider } from './EntitlementProvider';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAM5D,OAAO,EACL,gBAAgB,EAChB,YAAY,EACZ,oBAAoB,EACpB,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC","sourcesContent":["export {\n useEntitlementContext,\n EntitlementContext,\n} from './EntitlementContext';\nexport { EntitlementProvider } from './EntitlementProvider';\nexport type {\n SudojoApiValue,\n SudojoApiOptions,\n ResolvedSudojoApi,\n} from './SudojoApiContext';\nexport {\n SudojoApiContext,\n useSudojoApi,\n useOptionalSudojoApi,\n resolveSudojoApi,\n useResolvedSudojoApi,\n} from './SudojoApiContext';\nexport { SudojoApiProvider } from './SudojoApiProvider';\n"]}
|
package/dist/hooks/index.d.ts
CHANGED
|
@@ -31,7 +31,9 @@ export type { UseGamePlayOptions, UseGamePlayResult } from './useGamePlay';
|
|
|
31
31
|
export { useContinueGame } from './useContinueGame';
|
|
32
32
|
export type { UseContinueGameOptions, UseContinueGameResult, ContinueTarget, } from './useContinueGame';
|
|
33
33
|
export { useBoardEntry } from './useBoardEntry';
|
|
34
|
-
export type { UseBoardEntryOptions, UseBoardEntryReturn, ValidatedPuzzle, } from './useBoardEntry';
|
|
34
|
+
export type { UseBoardEntryOptions, UseBoardEntryReturn, ValidatedPuzzle, BoardEntryPlayState, } from './useBoardEntry';
|
|
35
|
+
export { useBoardScan } from './useBoardScan';
|
|
36
|
+
export type { UseBoardScanOptions, UseBoardScanReturn } from './useBoardScan';
|
|
35
37
|
export { useGameSession } from './useGameSession';
|
|
36
38
|
export type { UseGameSessionOptions, GameSessionResult, GameFinishResult, } from './useGameSession';
|
|
37
39
|
export { useLevelEnabled, useTechniqueEnabled } from './useEntitlement';
|
|
@@ -48,4 +50,25 @@ export { useRegeneratePracticeHints } from './usePractices';
|
|
|
48
50
|
export type { UseRegeneratePracticeHintsOptions, UseRegeneratePracticeHintsResult, } from './usePractices';
|
|
49
51
|
export { useProgressReporter } from './useProgressReporter';
|
|
50
52
|
export type { UseProgressReporterOptions, ProgressUpdateCallback, } from './useProgressReporter';
|
|
53
|
+
export { useCompletionTrigger } from './useCompletionTrigger';
|
|
54
|
+
export { useStrategies } from './useStrategies';
|
|
55
|
+
export type { UseStrategiesOptions, UseStrategiesResult, } from './useStrategies';
|
|
56
|
+
export { usePracticeGame } from './usePracticeGame';
|
|
57
|
+
export type { UsePracticeGameOptions, UsePracticeGameResult, } from './usePracticeGame';
|
|
58
|
+
export { useIsRealUser, useIsSiteAdmin } from './useIsSiteAdmin';
|
|
59
|
+
export type { UseIsSiteAdminOptions, UseIsSiteAdminResult, } from './useIsSiteAdmin';
|
|
60
|
+
export { useTechniqueByPath } from './useTechniqueByPath';
|
|
61
|
+
export type { UseTechniqueByPathOptions, UseTechniqueByPathResult, } from './useTechniqueByPath';
|
|
62
|
+
export { useTechniqueExample, useTechniqueWalkthrough, } from './useTechniqueExample';
|
|
63
|
+
export type { TechniqueExampleSourceKind, UseTechniqueExampleOptions, UseTechniqueExampleResult, } from './useTechniqueExample';
|
|
64
|
+
export { usePuzzleProgress } from './usePuzzleProgress';
|
|
65
|
+
export type { UsePuzzleProgressOptions, UsePuzzleProgressResult, } from './usePuzzleProgress';
|
|
66
|
+
export { useDeleteAccount } from './useDeleteAccount';
|
|
67
|
+
export type { DeleteAccountOutcome, DeleteAccountProviderTokens, UseDeleteAccountOptions, UseDeleteAccountResult, } from './useDeleteAccount';
|
|
68
|
+
export { getResumeGame, useResumeGame } from './useResumeGame';
|
|
69
|
+
export type { PuzzleSessionSource, ResumeGameSource, UseResumeGameOptions, UseResumeGameResult, } from './useResumeGame';
|
|
70
|
+
export { usePuzzleSession } from './usePuzzleSession';
|
|
71
|
+
export type { ActivePuzzle, PuzzleGameProps, SessionPuzzleInput, UsePuzzleSessionOptions, UsePuzzleSessionResult, } from './usePuzzleSession';
|
|
72
|
+
export { useEnteredGameSession } from './useEnteredGameSession';
|
|
73
|
+
export type { UseEnteredGameSessionOptions, UseEnteredGameSessionResult, } from './useEnteredGameSession';
|
|
51
74
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAClD,YAAY,EACV,eAAe,EACf,cAAc,EACd,gBAAgB,EAChB,eAAe,GAChB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EACV,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG/D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAGrE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EACV,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAG9E,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvE,YAAY,EACV,yBAAyB,EACzB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,cAAc,GACf,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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"}
|
package/dist/hooks/index.js
CHANGED
|
@@ -32,6 +32,8 @@ export { useGamePlay } from './useGamePlay';
|
|
|
32
32
|
export { useContinueGame } from './useContinueGame';
|
|
33
33
|
// Board entry hook
|
|
34
34
|
export { useBoardEntry } from './useBoardEntry';
|
|
35
|
+
// Board scan (OCR) hook
|
|
36
|
+
export { useBoardScan } from './useBoardScan';
|
|
35
37
|
// Game session hook
|
|
36
38
|
export { useGameSession } from './useGameSession';
|
|
37
39
|
// Entitlement access hooks
|
|
@@ -50,4 +52,24 @@ export { emitHintAction, reportHintStatus, onHintStatus, useHintActionListener,
|
|
|
50
52
|
export { useRegeneratePracticeHints } from './usePractices';
|
|
51
53
|
// Progress reporting (shared across web and RN SudokuGame)
|
|
52
54
|
export { useProgressReporter } from './useProgressReporter';
|
|
55
|
+
// Completion latch (shared across web, RN and extension game components)
|
|
56
|
+
export { useCompletionTrigger } from './useCompletionTrigger';
|
|
57
|
+
// Strategies
|
|
58
|
+
export { useStrategies } from './useStrategies';
|
|
59
|
+
// Practice game (random practice with auth/subscription states)
|
|
60
|
+
export { usePracticeGame } from './usePracticeGame';
|
|
61
|
+
// User status
|
|
62
|
+
export { useIsRealUser, useIsSiteAdmin } from './useIsSiteAdmin';
|
|
63
|
+
// Technique lookup and worked example
|
|
64
|
+
export { useTechniqueByPath } from './useTechniqueByPath';
|
|
65
|
+
export { useTechniqueExample, useTechniqueWalkthrough, } from './useTechniqueExample';
|
|
66
|
+
// Puzzle progress (completed puzzles, streak, stats)
|
|
67
|
+
export { usePuzzleProgress } from './usePuzzleProgress';
|
|
68
|
+
// Account deletion
|
|
69
|
+
export { useDeleteAccount } from './useDeleteAccount';
|
|
70
|
+
// Play screen session orchestration (resume, save, server session, completion)
|
|
71
|
+
export { getResumeGame, useResumeGame } from './useResumeGame';
|
|
72
|
+
export { usePuzzleSession } from './usePuzzleSession';
|
|
73
|
+
// Entered puzzle save/resume (after useBoardEntry validates)
|
|
74
|
+
export { useEnteredGameSession } from './useEnteredGameSession';
|
|
53
75
|
//# sourceMappingURL=index.js.map
|
package/dist/hooks/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAe;AACf,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAQlD,mBAAmB;AACnB,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAQ9D,oBAAoB;AACpB,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,iBAAiB;AACjB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAQ7D,sBAAsB;AACtB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,iBAAiB;AACjB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,wCAAwC;AACxC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGxC,wDAAwD;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAO9C,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,kBAAkB;AAClB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,yBAAyB;AACzB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAMvE,qBAAqB;AACrB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,YAAY;AACZ,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,2CAA2C;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAG5C,2DAA2D;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAOpD,mBAAmB;AACnB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/hooks/index.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Hook exports for Sudojo library\n */\n\n// Levels hooks\nexport { useLevel, useLevels } from './useLevels';\nexport type {\n UseLevelOptions,\n UseLevelResult,\n UseLevelsOptions,\n UseLevelsResult,\n} from './useLevels';\n\n// Techniques hooks\nexport { useTechnique, useTechniques } from './useTechniques';\nexport type {\n UseTechniqueOptions,\n UseTechniqueResult,\n UseTechniquesOptions,\n UseTechniquesResult,\n} from './useTechniques';\n\n// Communities hooks\nexport { useCommunities } from './useCommunities';\nexport type {\n UseCommunitiesOptions,\n UseCommunitiesResult,\n} from './useCommunities';\n\n// Learning hooks\nexport { useLearning, useLearningItem } from './useLearning';\nexport type {\n UseLearningItemOptions,\n UseLearningItemResult,\n UseLearningOptions,\n UseLearningResult,\n} from './useLearning';\n\n// Game hooks (legacy)\nexport { useGame } from './useGame';\nexport type { UseGameOptions, UseGameResult } from './useGame';\n\n// Teaching hooks\nexport { useGameTeaching } from './useGameTeaching';\nexport type {\n UseGameTeachingOptions,\n UseGameTeachingResult,\n} from './useGameTeaching';\n\n// Sudoku hooks (ported from renderable)\nexport { useSudoku } from './useSudoku';\nexport type { UseSudokuOptions, UseSudokuResult } from './useSudoku';\n\n// Game fetching hooks (with auth/subscription handling)\nexport { useLevelGame } from './useLevelGame';\nexport type {\n UseLevelGameOptions,\n UseLevelGameResult,\n GameFetchStatus,\n} from './useLevelGame';\n\nexport { useDailyGame } from './useDailyGame';\nexport type { UseDailyGameOptions, UseDailyGameResult } from './useDailyGame';\n\n// Game timer hook\nexport { useGameTimer } from './useGameTimer';\nexport type { UseGameTimerOptions, UseGameTimerResult } from './useGameTimer';\n\n// Game persistence hooks\nexport { useGamePersistence, useAutoSave } from './useGamePersistence';\nexport type {\n UseGamePersistenceOptions,\n UseGamePersistenceResult,\n} from './useGamePersistence';\n\n// Local storage hook\nexport { useLocalStorage } from './useLocalStorage';\n\n// Hint hook\nexport { useHint } from './useHint';\nexport type {\n UseHintOptions,\n UseHintResult,\n HintBoardData,\n HintReceivedData,\n HintAccessError,\n} from './useHint';\n\n// Game play hook (current game management)\nexport { useGamePlay } from './useGamePlay';\nexport type { UseGamePlayOptions, UseGamePlayResult } from './useGamePlay';\n\n// Continue game hook (shared \"Continue Last Sudoku\" logic)\nexport { useContinueGame } from './useContinueGame';\nexport type {\n UseContinueGameOptions,\n UseContinueGameResult,\n ContinueTarget,\n} from './useContinueGame';\n\n// Board entry hook\nexport { useBoardEntry } from './useBoardEntry';\nexport type {\n UseBoardEntryOptions,\n UseBoardEntryReturn,\n ValidatedPuzzle,\n BoardEntryPlayState,\n} from './useBoardEntry';\n\n// Board scan (OCR) hook\nexport { useBoardScan } from './useBoardScan';\nexport type { UseBoardScanOptions, UseBoardScanReturn } from './useBoardScan';\n\n// Game session hook\nexport { useGameSession } from './useGameSession';\nexport type {\n UseGameSessionOptions,\n GameSessionResult,\n GameFinishResult,\n} from './useGameSession';\n\n// Entitlement access hooks\nexport { useLevelEnabled, useTechniqueEnabled } from './useEntitlement';\n\n// Display level hook\nexport { useDisplayLevel } from './useDisplayLevel';\nexport type { UseDisplayLevelResult } from './useDisplayLevel';\n\n// Puzzle distribution hook\nexport { usePuzzleDistribution } from './usePuzzleDistribution';\n\n// Hint step tracker (shared across web and RN game screens)\nexport { useHintStepTracker } from './useHintStepTracker';\nexport type { UseHintStepTrackerResult } from './useHintStepTracker';\n\n// Auto-hint orchestration (shared across web and RN SudokuGame)\nexport { useAutoHint } from './useAutoHint';\nexport type { UseAutoHintOptions } from './useAutoHint';\n\n// Hint action events (external control of hint UI via deep links)\nexport {\n emitHintAction,\n reportHintStatus,\n onHintStatus,\n useHintActionListener,\n} from './useHintAction';\nexport type { HintActionStatus } from './useHintAction';\n\n// Admin practice operations\nexport { useRegeneratePracticeHints } from './usePractices';\nexport type {\n UseRegeneratePracticeHintsOptions,\n UseRegeneratePracticeHintsResult,\n} from './usePractices';\n\n// Progress reporting (shared across web and RN SudokuGame)\nexport { useProgressReporter } from './useProgressReporter';\nexport type {\n UseProgressReporterOptions,\n ProgressUpdateCallback,\n} from './useProgressReporter';\n\n// Completion latch (shared across web, RN and extension game components)\nexport { useCompletionTrigger } from './useCompletionTrigger';\n\n// Strategies\nexport { useStrategies } from './useStrategies';\nexport type {\n UseStrategiesOptions,\n UseStrategiesResult,\n} from './useStrategies';\n\n// Practice game (random practice with auth/subscription states)\nexport { usePracticeGame } from './usePracticeGame';\nexport type {\n UsePracticeGameOptions,\n UsePracticeGameResult,\n} from './usePracticeGame';\n\n// User status\nexport { useIsRealUser, useIsSiteAdmin } from './useIsSiteAdmin';\nexport type {\n UseIsSiteAdminOptions,\n UseIsSiteAdminResult,\n} from './useIsSiteAdmin';\n\n// Technique lookup and worked example\nexport { useTechniqueByPath } from './useTechniqueByPath';\nexport type {\n UseTechniqueByPathOptions,\n UseTechniqueByPathResult,\n} from './useTechniqueByPath';\nexport {\n useTechniqueExample,\n useTechniqueWalkthrough,\n} from './useTechniqueExample';\nexport type {\n TechniqueExampleSourceKind,\n UseTechniqueExampleOptions,\n UseTechniqueExampleResult,\n} from './useTechniqueExample';\n\n// Puzzle progress (completed puzzles, streak, stats)\nexport { usePuzzleProgress } from './usePuzzleProgress';\nexport type {\n UsePuzzleProgressOptions,\n UsePuzzleProgressResult,\n} from './usePuzzleProgress';\n\n// Account deletion\nexport { useDeleteAccount } from './useDeleteAccount';\nexport type {\n DeleteAccountOutcome,\n DeleteAccountProviderTokens,\n UseDeleteAccountOptions,\n UseDeleteAccountResult,\n} from './useDeleteAccount';\n\n// Play screen session orchestration (resume, save, server session, completion)\nexport { getResumeGame, useResumeGame } from './useResumeGame';\nexport type {\n PuzzleSessionSource,\n ResumeGameSource,\n UseResumeGameOptions,\n UseResumeGameResult,\n} from './useResumeGame';\nexport { usePuzzleSession } from './usePuzzleSession';\nexport type {\n ActivePuzzle,\n PuzzleGameProps,\n SessionPuzzleInput,\n UsePuzzleSessionOptions,\n UsePuzzleSessionResult,\n} from './usePuzzleSession';\n\n// Entered puzzle save/resume (after useBoardEntry validates)\nexport { useEnteredGameSession } from './useEnteredGameSession';\nexport type {\n UseEnteredGameSessionOptions,\n UseEnteredGameSessionResult,\n} from './useEnteredGameSession';\n"]}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import type { SudokuCell } from '../types';
|
|
6
6
|
import type { NetworkClient } from '@sudobility/types';
|
|
7
|
+
import { type ScannedBoard } from '../utils/scannedBoard';
|
|
7
8
|
export interface ValidatedPuzzle {
|
|
8
9
|
puzzle: string;
|
|
9
10
|
solution: string;
|
|
@@ -13,9 +14,26 @@ export interface ValidatedPuzzle {
|
|
|
13
14
|
difficultyScore?: number | undefined;
|
|
14
15
|
}
|
|
15
16
|
export interface UseBoardEntryOptions {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
/** Network client for API calls (default: SudojoApiProvider) */
|
|
18
|
+
networkClient?: NetworkClient | undefined;
|
|
19
|
+
/** Base URL for the Sudojo API (default: SudojoApiProvider) */
|
|
20
|
+
baseUrl?: string | undefined;
|
|
21
|
+
/** Access token (default: SudojoApiProvider) */
|
|
22
|
+
token?: string | null | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* What the game should apply once the entered puzzle is validated: the
|
|
26
|
+
* scanned player digits and/or the entry pencilmarks. Pass the fields to the
|
|
27
|
+
* game as initialInput / initialPencilmarks / initialAutoPencilmarks (or to
|
|
28
|
+
* useSudoku's applyHintData).
|
|
29
|
+
*/
|
|
30
|
+
export interface BoardEntryPlayState {
|
|
31
|
+
/** 81-char player input ('0' = none). '0'.repeat(81) when only pencilmarks exist */
|
|
32
|
+
input?: string;
|
|
33
|
+
/** 81 comma-separated pencilmark entries */
|
|
34
|
+
pencilmarks?: string;
|
|
35
|
+
/** Whether the pencilmarks were auto-filled */
|
|
36
|
+
autopencil?: boolean;
|
|
19
37
|
}
|
|
20
38
|
export interface UseBoardEntryReturn {
|
|
21
39
|
/** 81 cells with given values only */
|
|
@@ -42,8 +60,50 @@ export interface UseBoardEntryReturn {
|
|
|
42
60
|
reset: () => void;
|
|
43
61
|
/** Number of clues entered */
|
|
44
62
|
clueCount: number;
|
|
45
|
-
/** Set cells from an 81-character puzzle string */
|
|
63
|
+
/** Set cells from an 81-character puzzle string (clears pencilmarks and scanned input) */
|
|
46
64
|
setCellsFromPuzzle: (puzzle: string) => void;
|
|
65
|
+
/** Per-cell entry pencilmarks (81 sorted digit arrays; [] = none) */
|
|
66
|
+
pencilmarks: number[][];
|
|
67
|
+
/** Whether the pencilmarks were auto-filled (from a scan) */
|
|
68
|
+
autopencil: boolean;
|
|
69
|
+
/** Whether any cell has pencilmarks */
|
|
70
|
+
hasPencilmarks: boolean;
|
|
71
|
+
/** Pencilmarks as 81 comma-separated entries (e.g. "12,,9,...") */
|
|
72
|
+
pencilmarksString: string;
|
|
73
|
+
/** Toggle a pencilmark digit on the selected cell (ignored on givens) */
|
|
74
|
+
togglePencilmark: (digit: number) => void;
|
|
75
|
+
/** `cells` with the entry pencilmarks merged in, for display */
|
|
76
|
+
displayCells: SudokuCell[];
|
|
77
|
+
/** Whether digit input goes to pencilmarks instead of givens */
|
|
78
|
+
isPencilMode: boolean;
|
|
79
|
+
/** Toggle pencil mode */
|
|
80
|
+
togglePencilMode: () => void;
|
|
81
|
+
/** Set pencil mode */
|
|
82
|
+
setPencilMode: (on: boolean) => void;
|
|
83
|
+
/**
|
|
84
|
+
* Route a digit: in pencil mode toggle a pencilmark, otherwise set a given
|
|
85
|
+
* (web/RN entry keypad behavior).
|
|
86
|
+
*/
|
|
87
|
+
enterDigit: (value: number) => void;
|
|
88
|
+
/**
|
|
89
|
+
* Set a given at the selected cell, or erase it when the cell already holds
|
|
90
|
+
* that digit (extension keypad behavior).
|
|
91
|
+
*/
|
|
92
|
+
toggleGiven: (value: number) => void;
|
|
93
|
+
/** Whether Validate may run (enough clues and not already validating) */
|
|
94
|
+
canValidate: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Load a scanned board: givens from `original`, pencilmarks and autopencil
|
|
97
|
+
* from the scan, and the player's digits as `scannedInput`.
|
|
98
|
+
*/
|
|
99
|
+
applyScan: (scanned: ScannedBoard) => void;
|
|
100
|
+
/** The scanned player digits (81 chars), or null when the scan had none */
|
|
101
|
+
scannedInput: string | null;
|
|
102
|
+
/**
|
|
103
|
+
* What the game should apply once validated (scanned input and/or entry
|
|
104
|
+
* pencilmarks), or undefined when there is nothing to restore.
|
|
105
|
+
*/
|
|
106
|
+
initialPlayState: BoardEntryPlayState | undefined;
|
|
47
107
|
}
|
|
48
|
-
export declare function useBoardEntry(
|
|
108
|
+
export declare function useBoardEntry(options?: UseBoardEntryOptions): UseBoardEntryReturn;
|
|
49
109
|
//# sourceMappingURL=useBoardEntry.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBoardEntry.d.ts","sourceRoot":"","sources":["../../src/hooks/useBoardEntry.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useBoardEntry.d.ts","sourceRoot":"","sources":["../../src/hooks/useBoardEntry.ts"],"names":[],"mappings":"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"}
|