91 lines
3.1 KiB
TypeScript
91 lines
3.1 KiB
TypeScript
import { Modal } from "./Modal";
|
||
|
||
export function HelpDialog({
|
||
open,
|
||
onClose,
|
||
}: {
|
||
open: boolean;
|
||
onClose: () => void;
|
||
}) {
|
||
return (
|
||
<Modal open={open} title="Sudoku Tools help" onClose={onClose} wide>
|
||
<div className="help-grid">
|
||
<section>
|
||
<h3>Five complementary workspaces</h3>
|
||
<p>
|
||
<strong>Play</strong> keeps values, two kinds of notes, colours,
|
||
history and elapsed time. <strong>Set</strong> edits clues and
|
||
constraints. <strong>Generate</strong> constructs and rates bounded,
|
||
seedable variants. <strong>Solve</strong> explains logical steps and
|
||
can verify uniqueness. <strong>Helpers</strong> answers focused
|
||
questions without changing the board.
|
||
</p>
|
||
</section>
|
||
<section>
|
||
<h3>Keyboard</h3>
|
||
<dl className="shortcut-list">
|
||
<div>
|
||
<dt>Arrow keys</dt>
|
||
<dd>Move the active cell</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Shift + arrows</dt>
|
||
<dd>Extend the selection</dd>
|
||
</div>
|
||
<div>
|
||
<dt>1–9 / A–G</dt>
|
||
<dd>Enter the selected symbol</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Z / X / C / V</dt>
|
||
<dd>Value, corner, centre or colour mode</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Backspace</dt>
|
||
<dd>Erase in the current mode</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Ctrl/⌘ + Z/Y</dt>
|
||
<dd>Undo or redo</dd>
|
||
</div>
|
||
<div>
|
||
<dt>Ctrl/⌘ + click</dt>
|
||
<dd>Highlight every placed copy of that digit</dd>
|
||
</div>
|
||
</dl>
|
||
</section>
|
||
<section>
|
||
<h3>Hints and solutions</h3>
|
||
<p>
|
||
Candidate legality is computed independently from handwritten notes.
|
||
Logical deductions report their premises, affected houses,
|
||
placements and eliminations. Exact search is separately labelled; it
|
||
proves feasibility or uniqueness but is not presented as a human
|
||
explanation.
|
||
</p>
|
||
</section>
|
||
<section>
|
||
<h3>Generation and ratings</h3>
|
||
<p>
|
||
Generation runs in a worker with explicit time and search limits. A
|
||
requested level guides clue removal; the reported rating is then
|
||
calculated independently from logical techniques, clue load and
|
||
bounded exact-search evidence. A limit never becomes a false
|
||
uniqueness claim.
|
||
</p>
|
||
</section>
|
||
<section>
|
||
<h3>Import and privacy</h3>
|
||
<p>
|
||
Files, text, solving and generation stay in this browser. Compact
|
||
grids, project JSON, share fragments and supported f-puzzles data
|
||
are decoded locally. SudokuPad short IDs need its server and are
|
||
intentionally rejected. Review an export before sharing: titles,
|
||
authors, rules, solutions and progress may be included.
|
||
</p>
|
||
</section>
|
||
</div>
|
||
</Modal>
|
||
);
|
||
}
|