@connectorvol/chess-widgets 7.0.3 → 8.0.1
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/game-analyzer/GameAnalyzer.svelte +71 -56
- package/dist/game-analyzer/gameAnalyzer.svelte.js +3 -3
- package/dist/game-analyzer/types.d.ts +1 -1
- package/dist/puzzle/puzzleCreatedPayload.js +1 -1
- package/dist/puzzle-creation/PuzzlePgnBoardTreeEditor.svelte +1 -3
- package/dist/puzzle-creation/StepPreview.svelte +1 -1
- package/dist/puzzle-creation/StepPreview.svelte.d.ts +1 -1
- package/dist/puzzle-creation/createPuzzleLineEditingBoard.d.ts +2 -2
- package/dist/puzzle-creation/createPuzzleLineEditingBoard.js +3 -4
- package/dist/puzzle-creation/types.d.ts +2 -2
- package/package.json +10 -10
|
@@ -1,68 +1,83 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
|
|
2
|
+
import type { TGameAnalyzerProps } from "./types.js";
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
import { Chessboard } from "@connectorvol/chessboard";
|
|
5
|
+
import { TreeViewer, TreeViewerPanelManager } from "@connectorvol/tree";
|
|
6
|
+
import { Game } from "./gameAnalyzer.svelte.js";
|
|
7
|
+
import { untrack } from "svelte";
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
let {
|
|
10
|
+
pgn,
|
|
11
|
+
onChangePGN,
|
|
12
|
+
boardTheme,
|
|
13
|
+
boardAppearanceSettings,
|
|
14
|
+
editMode = true,
|
|
15
|
+
class: className,
|
|
16
|
+
}: TGameAnalyzerProps = $props();
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
))
|
|
18
|
+
let game = $derived(
|
|
19
|
+
new Game(
|
|
20
|
+
untrack(() => pgn),
|
|
21
|
+
{
|
|
22
|
+
...boardAppearanceSettings,
|
|
23
|
+
},
|
|
24
|
+
"chess",
|
|
25
|
+
boardTheme,
|
|
26
|
+
),
|
|
27
|
+
);
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
29
|
+
let boardSize = $derived(
|
|
30
|
+
game.chessboard.getBoard().settingsService.boardSize,
|
|
31
|
+
);
|
|
32
|
+
let isAutoSize = $derived(boardSize === "auto");
|
|
33
|
+
|
|
34
|
+
function handleChangeDirty(_setIsDirty: (value: boolean) => void) {
|
|
35
|
+
console.log("handleChangeDirty");
|
|
36
|
+
const exported = game.exportPgn();
|
|
37
|
+
onChangePGN?.(exported);
|
|
38
|
+
}
|
|
36
39
|
</script>
|
|
37
40
|
|
|
38
41
|
<div class={["mx-4 lg:container lg:mx-auto gap-4", className]}>
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
42
|
+
<div class="flex justify-center relative lg:gap-4 flex-col lg:flex-row">
|
|
43
|
+
<div
|
|
44
|
+
class={[
|
|
45
|
+
"w-full",
|
|
46
|
+
isAutoSize ? "lg:w-2/5" : "lg:w-auto lg:min-w-[3.75rem]",
|
|
47
|
+
]}
|
|
48
|
+
style={!isAutoSize && typeof boardSize === "number"
|
|
49
|
+
? `flex-basis: ${boardSize}rem;`
|
|
50
|
+
: ""}
|
|
51
|
+
>
|
|
52
|
+
<Chessboard facade={game.chessboard} />
|
|
53
|
+
</div>
|
|
44
54
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
55
|
+
<div
|
|
56
|
+
class={[
|
|
57
|
+
"w-full flex lg:flex-col flex-col-reverse h-full",
|
|
58
|
+
isAutoSize ? "lg:w-3/5" : "lg:flex-1 lg:min-w-[20rem]",
|
|
59
|
+
]}
|
|
60
|
+
>
|
|
61
|
+
<div class="h-full">
|
|
62
|
+
<TreeViewer
|
|
63
|
+
className="h-[calc(100dvh-8rem)]"
|
|
64
|
+
chessTree={game.chessTree}
|
|
65
|
+
onSelectNode={game.onSelectNode}
|
|
66
|
+
onDeleteVariant={game.onDeleteVariant}
|
|
67
|
+
setChessFen={game.setChessFen}
|
|
68
|
+
setChessboardFen={game.setChessboardFen}
|
|
69
|
+
pieceSet={game.chessboard.chessSet}
|
|
70
|
+
{editMode}
|
|
71
|
+
onChangeDirty={handleChangeDirty}
|
|
72
|
+
/>
|
|
73
|
+
</div>
|
|
59
74
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
75
|
+
<TreeViewerPanelManager
|
|
76
|
+
className="flex w-full justify-center select-none col-span-1 my-4"
|
|
77
|
+
chessTree={game.chessTree}
|
|
78
|
+
setChessFen={game.setChessFen}
|
|
79
|
+
setChessboardFen={game.setChessboardFen}
|
|
80
|
+
/>
|
|
81
|
+
</div>
|
|
66
82
|
</div>
|
|
67
|
-
</div>
|
|
68
83
|
</div>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Color, calculatePly, generateId } from "@connectorvol/shared";
|
|
2
|
-
import { CHESSBOARD_THEMES, createBoardApi,
|
|
2
|
+
import { CHESSBOARD_THEMES, createBoardApi, Draggable, syncMoveEvaluationNagBadge, } from "@connectorvol/chessboard";
|
|
3
3
|
import { PgnOps } from "@connectorvol/chessops/pgnOps.svelte";
|
|
4
4
|
import { transformPgnToChessNode, createPgnFromTree } from "@connectorvol/tree";
|
|
5
5
|
import { ChessTree } from "@connectorvol/tree";
|
|
@@ -12,7 +12,7 @@ export class Game {
|
|
|
12
12
|
boardSettings;
|
|
13
13
|
variant;
|
|
14
14
|
boardTheme;
|
|
15
|
-
constructor(pgn, chessBoardSettings
|
|
15
|
+
constructor(pgn, chessBoardSettings, variant = "chess", boardTheme) {
|
|
16
16
|
this.boardSettings = chessBoardSettings;
|
|
17
17
|
this.variant = variant;
|
|
18
18
|
this.boardTheme = boardTheme ?? CHESSBOARD_THEMES.blue;
|
|
@@ -59,7 +59,7 @@ export class Game {
|
|
|
59
59
|
this.chessboard.setNodeMarkers(this.chessTree.currentNode.data.parsedFirstComment?.shapes);
|
|
60
60
|
},
|
|
61
61
|
beforePieceMove: (from, to, promotion) => {
|
|
62
|
-
const { san, ply, fullMoves, move: lastMove } = this.chess.makeMove({
|
|
62
|
+
const { san, ply, fullMoves, move: lastMove, } = this.chess.makeMove({
|
|
63
63
|
from,
|
|
64
64
|
to,
|
|
65
65
|
promotion,
|
|
@@ -23,7 +23,7 @@ export interface TGameAnalyzerProps {
|
|
|
23
23
|
/**
|
|
24
24
|
* Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`).
|
|
25
25
|
*/
|
|
26
|
-
boardAppearanceSettings
|
|
26
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
27
27
|
/**
|
|
28
28
|
* Возвращает признак режима правки дерева (по умолчанию `true`).
|
|
29
29
|
*/
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { INITIAL_FEN } from "@connectorvol/chessops/fen";
|
|
2
|
-
import { makePgn, parsePgn
|
|
2
|
+
import { makePgn, parsePgn } from "@connectorvol/chessops/pgn";
|
|
3
3
|
/**
|
|
4
4
|
* Представляет разбор полного PGN из дерева задачи на FEN и чистую строку ходов.
|
|
5
5
|
*/
|
|
@@ -12,7 +12,6 @@
|
|
|
12
12
|
import {
|
|
13
13
|
CHESSBOARD_THEMES,
|
|
14
14
|
createBoardApi,
|
|
15
|
-
DEFAULT_BOARD_SETTINGS,
|
|
16
15
|
Draggable,
|
|
17
16
|
syncMoveEvaluationNagBadge,
|
|
18
17
|
} from "@connectorvol/chessboard";
|
|
@@ -389,8 +388,7 @@
|
|
|
389
388
|
createBoardApi({
|
|
390
389
|
fen: INITIAL_FEN,
|
|
391
390
|
settings: {
|
|
392
|
-
...
|
|
393
|
-
...(boardAppearanceSettings ?? {}),
|
|
391
|
+
...boardAppearanceSettings,
|
|
394
392
|
boardSize: 38,
|
|
395
393
|
isResizable: false,
|
|
396
394
|
orientation: Color.WHITE,
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
/** Возвращает тему оформления шахматной доски (по умолчанию `CHESSBOARD_THEMES.blue`). */
|
|
31
31
|
boardTheme?: ChessboardTheme;
|
|
32
32
|
/** Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`). */
|
|
33
|
-
boardAppearanceSettings
|
|
33
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
const props: Props = $props();
|
|
@@ -16,7 +16,7 @@ interface Props {
|
|
|
16
16
|
/** Возвращает тему оформления шахматной доски (по умолчанию `CHESSBOARD_THEMES.blue`). */
|
|
17
17
|
boardTheme?: ChessboardTheme;
|
|
18
18
|
/** Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`). */
|
|
19
|
-
boardAppearanceSettings
|
|
19
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
20
20
|
}
|
|
21
21
|
declare const StepPreview: import("svelte").Component<Props, {}, "">;
|
|
22
22
|
type StepPreview = ReturnType<typeof StepPreview>;
|
|
@@ -10,7 +10,7 @@ export declare function sideToMoveFromFullFen(fullFen: string): Color;
|
|
|
10
10
|
* Представляет создание API доски для интерактивного построения линии (как в мастере задач):
|
|
11
11
|
* ориентация и перетаскивание по стороне хода, фиксированный размер доски.
|
|
12
12
|
*/
|
|
13
|
-
export declare function createPuzzleLineEditingBoardApi(fullFen: string, actions: IChessBoardActions, opts
|
|
13
|
+
export declare function createPuzzleLineEditingBoardApi(fullFen: string, actions: IChessBoardActions, opts: {
|
|
14
14
|
boardTheme?: ChessboardTheme;
|
|
15
|
-
boardAppearanceSettings
|
|
15
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
16
16
|
}): import("@connectorvol/chessboard").BoardApi;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CHESSBOARD_THEMES, createBoardApi,
|
|
1
|
+
import { CHESSBOARD_THEMES, createBoardApi, Draggable, } from "@connectorvol/chessboard";
|
|
2
2
|
import { Color } from "@connectorvol/shared";
|
|
3
3
|
import { DEFAULT_EDITABLE_BOARD_SETTINGS } from "../constants/editable-board-settings.js";
|
|
4
4
|
/**
|
|
@@ -12,13 +12,12 @@ export function sideToMoveFromFullFen(fullFen) {
|
|
|
12
12
|
* Представляет создание API доски для интерактивного построения линии (как в мастере задач):
|
|
13
13
|
* ориентация и перетаскивание по стороне хода, фиксированный размер доски.
|
|
14
14
|
*/
|
|
15
|
-
export function createPuzzleLineEditingBoardApi(fullFen, actions, opts
|
|
15
|
+
export function createPuzzleLineEditingBoardApi(fullFen, actions, opts) {
|
|
16
16
|
const side = sideToMoveFromFullFen(fullFen);
|
|
17
|
-
const { boardSize: _boardSize, orientation: _orientation, draggable: _draggable, ...appearanceSettings } =
|
|
17
|
+
const { boardSize: _boardSize, orientation: _orientation, draggable: _draggable, ...appearanceSettings } = opts.boardAppearanceSettings;
|
|
18
18
|
return createBoardApi({
|
|
19
19
|
fen: fullFen,
|
|
20
20
|
settings: {
|
|
21
|
-
...DEFAULT_BOARD_SETTINGS,
|
|
22
21
|
...appearanceSettings,
|
|
23
22
|
boardSize: DEFAULT_EDITABLE_BOARD_SETTINGS.boardSize,
|
|
24
23
|
isResizable: false,
|
|
@@ -40,7 +40,7 @@ export interface TPuzzlePgnBoardTreeEditorProps {
|
|
|
40
40
|
/**
|
|
41
41
|
* Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`).
|
|
42
42
|
*/
|
|
43
|
-
boardAppearanceSettings
|
|
43
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
44
44
|
/**
|
|
45
45
|
* Возвращает дополнительные классы Tailwind для корневого контейнера раскладки.
|
|
46
46
|
*/
|
|
@@ -65,5 +65,5 @@ export interface TPuzzleCreationWizardProps {
|
|
|
65
65
|
/**
|
|
66
66
|
* Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`).
|
|
67
67
|
*/
|
|
68
|
-
boardAppearanceSettings
|
|
68
|
+
boardAppearanceSettings: TChessboardAppearanceSettings;
|
|
69
69
|
}
|
package/package.json
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@connectorvol/chess-widgets",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "8.0.1",
|
|
4
4
|
"private": false,
|
|
5
|
-
"publishConfig": {
|
|
6
|
-
"access": "public"
|
|
7
|
-
},
|
|
8
5
|
"files": [
|
|
9
6
|
"dist",
|
|
10
7
|
"!dist/**/*.test.*",
|
|
@@ -25,6 +22,9 @@
|
|
|
25
22
|
"require": "./dist/index.js"
|
|
26
23
|
}
|
|
27
24
|
},
|
|
25
|
+
"publishConfig": {
|
|
26
|
+
"access": "public"
|
|
27
|
+
},
|
|
28
28
|
"scripts": {
|
|
29
29
|
"start": "vite",
|
|
30
30
|
"dev": "vite",
|
|
@@ -42,10 +42,10 @@
|
|
|
42
42
|
"test:e2e:ui": "node node_modules/@playwright/test/cli.js test --ui"
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@connectorvol/chessboard": "
|
|
46
|
-
"@connectorvol/chessops": "
|
|
47
|
-
"@connectorvol/shared": "
|
|
48
|
-
"@connectorvol/tree": "
|
|
45
|
+
"@connectorvol/chessboard": "8.0.1",
|
|
46
|
+
"@connectorvol/chessops": "8.0.1",
|
|
47
|
+
"@connectorvol/shared": "8.0.1",
|
|
48
|
+
"@connectorvol/tree": "8.0.1",
|
|
49
49
|
"bits-ui": "2.16.4",
|
|
50
50
|
"clsx": "^2.1.1",
|
|
51
51
|
"svelte-toolbelt": "^0.10.6",
|
|
@@ -54,8 +54,8 @@
|
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@ianvs/prettier-plugin-sort-imports": "4.5.1",
|
|
57
|
-
"@playwright/test": "1.54.1",
|
|
58
57
|
"@lucide/svelte": "^1.16.0",
|
|
58
|
+
"@playwright/test": "1.54.1",
|
|
59
59
|
"@sveltejs/adapter-static": "3.0.10",
|
|
60
60
|
"@sveltejs/kit": "2.48.0",
|
|
61
61
|
"@sveltejs/package": "2.4.0",
|
|
@@ -77,4 +77,4 @@
|
|
|
77
77
|
"@lucide/svelte": "^1.16.0",
|
|
78
78
|
"svelte": "^5.53.12"
|
|
79
79
|
}
|
|
80
|
-
}
|
|
80
|
+
}
|