@connectorvol/chess-widgets 8.0.0 → 9.0.0

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 (47) hide show
  1. package/dist/constants/default-board-appearance-settings.d.ts +9 -0
  2. package/dist/constants/default-board-appearance-settings.js +30 -0
  3. package/dist/constants/editable-board-settings.d.ts +3 -21
  4. package/dist/constants/editable-board-settings.js +24 -19
  5. package/dist/game-analyzer/GameAnalyzer.svelte +38 -19
  6. package/dist/game-analyzer/gameAnalyzer.svelte.js +9 -7
  7. package/dist/game-analyzer/types.d.ts +10 -2
  8. package/dist/index.d.ts +9 -1
  9. package/dist/index.js +6 -0
  10. package/dist/position-editor/EditPanel.svelte +9 -6
  11. package/dist/puzzle/puzzleCreatedPayload.d.ts +17 -0
  12. package/dist/puzzle/puzzleData.d.ts +4 -0
  13. package/dist/puzzle/puzzleData.js +10 -0
  14. package/dist/puzzle/puzzlePreviewConstants.d.ts +4 -0
  15. package/dist/puzzle/puzzlePreviewConstants.js +4 -0
  16. package/dist/puzzle/puzzlePreviewPathNags.d.ts +6 -0
  17. package/dist/puzzle/puzzlePreviewPathNags.js +35 -0
  18. package/dist/puzzle/puzzleSolverForkAnnotations.d.ts +2 -4
  19. package/dist/puzzle/puzzleSolverForkAnnotations.js +13 -22
  20. package/dist/puzzle/puzzleStepPreviewSolver.d.ts +13 -1
  21. package/dist/puzzle/puzzleStepPreviewSolver.js +69 -9
  22. package/dist/puzzle/syncPuzzleBranchNags.d.ts +14 -0
  23. package/dist/puzzle/syncPuzzleBranchNags.js +125 -0
  24. package/dist/puzzle-creation/OpeningTagHoverPreview.svelte +81 -0
  25. package/dist/puzzle-creation/OpeningTagHoverPreview.svelte.d.ts +11 -0
  26. package/dist/puzzle-creation/PuzzleBoardTreeViewerPane.svelte +104 -32
  27. package/dist/puzzle-creation/PuzzleBoardTreeViewerPane.svelte.d.ts +16 -2
  28. package/dist/puzzle-creation/PuzzleCreationWizard.svelte +192 -202
  29. package/dist/puzzle-creation/PuzzleCreationWizard.svelte.d.ts +47 -3
  30. package/dist/puzzle-creation/PuzzlePgnBoardTreeEditor.svelte +485 -76
  31. package/dist/puzzle-creation/PuzzleWizardTagsStep.svelte +36 -0
  32. package/dist/puzzle-creation/PuzzleWizardTagsStep.svelte.d.ts +12 -0
  33. package/dist/puzzle-creation/StepMoves.svelte +38 -18
  34. package/dist/puzzle-creation/StepMoves.svelte.d.ts +2 -1
  35. package/dist/puzzle-creation/StepPosition.svelte +15 -9
  36. package/dist/puzzle-creation/StepPreview.svelte +23 -10
  37. package/dist/puzzle-creation/StepPreview.svelte.d.ts +2 -0
  38. package/dist/puzzle-creation/StepTags.svelte +270 -0
  39. package/dist/puzzle-creation/StepTags.svelte.d.ts +19 -0
  40. package/dist/puzzle-creation/buildPuzzleWizardBoardSettings.d.ts +9 -0
  41. package/dist/puzzle-creation/buildPuzzleWizardBoardSettings.js +19 -0
  42. package/dist/puzzle-creation/createPuzzleLineEditingBoard.d.ts +10 -3
  43. package/dist/puzzle-creation/createPuzzleLineEditingBoard.js +15 -11
  44. package/dist/puzzle-creation/puzzleWizardState.d.ts +35 -0
  45. package/dist/puzzle-creation/puzzleWizardState.js +37 -0
  46. package/dist/puzzle-creation/types.d.ts +35 -5
  47. package/package.json +20 -17
@@ -1,6 +1,6 @@
1
- import { CHESSBOARD_THEMES, createBoardApi, DEFAULT_BOARD_SETTINGS, Draggable, } from "@connectorvol/chessboard";
1
+ import { CHESSBOARD_THEMES, createBoardApi, DEFAULT_DESIGN_SETTINGS, Draggable, } from "@connectorvol/chessboard";
2
2
  import { Color } from "@connectorvol/shared";
3
- import { DEFAULT_EDITABLE_BOARD_SETTINGS } from "../constants/editable-board-settings.js";
3
+ import { buildPuzzleWizardBoardSettings } from "./buildPuzzleWizardBoardSettings.js";
4
4
  /**
5
5
  * Представляет определение стороны хода по полному FEN.
6
6
  */
@@ -11,21 +11,25 @@ export function sideToMoveFromFullFen(fullFen) {
11
11
  /**
12
12
  * Представляет создание API доски для интерактивного построения линии (как в мастере задач):
13
13
  * ориентация и перетаскивание по стороне хода, фиксированный размер доски.
14
+ * Возвращает пару `{ api, design }` — `design` следует передать в `<Chessboard design={...} />`,
15
+ * чтобы доска разделяла снимок с превью/настройками через контекст.
14
16
  */
15
- export function createPuzzleLineEditingBoardApi(fullFen, actions, opts = {}) {
17
+ export function createPuzzleLineEditingBoardApi(fullFen, actions, opts) {
16
18
  const side = sideToMoveFromFullFen(fullFen);
17
- const { boardSize: _boardSize, orientation: _orientation, draggable: _draggable, ...appearanceSettings } = (opts.boardAppearanceSettings ?? {});
18
- return createBoardApi({
19
+ const { play, design } = buildPuzzleWizardBoardSettings(opts.boardAppearanceSettings);
20
+ const api = createBoardApi({
19
21
  fen: fullFen,
20
- settings: {
21
- ...DEFAULT_BOARD_SETTINGS,
22
- ...appearanceSettings,
23
- boardSize: DEFAULT_EDITABLE_BOARD_SETTINGS.boardSize,
24
- isResizable: false,
22
+ playSettings: {
23
+ ...play,
25
24
  orientation: side,
26
25
  draggable: side === Color.WHITE ? Draggable.WHITE : Draggable.BLACK,
27
26
  },
28
27
  actions,
29
- theme: opts.boardTheme ?? CHESSBOARD_THEMES.blue,
30
28
  });
29
+ const finalDesign = {
30
+ ...DEFAULT_DESIGN_SETTINGS,
31
+ ...design,
32
+ theme: opts.boardTheme ?? CHESSBOARD_THEMES.blue,
33
+ };
34
+ return { api, design: finalDesign };
31
35
  }
@@ -0,0 +1,35 @@
1
+ import { type PuzzleData } from "../puzzle/puzzleData.js";
2
+ import type { TPuzzleTags } from "../puzzle/puzzleCreatedPayload.js";
3
+ import type { TWizardStep } from "@connectorvol/shared";
4
+ /**
5
+ * Представляет базовый state мастера: поля, которые используют шаги 1–3.
6
+ */
7
+ export type TPuzzleWizardCoreState = {
8
+ /** Возвращает данные задачи (FEN и главная линия SAN). */
9
+ puzzleData: PuzzleData;
10
+ /** Возвращает PGN дерева решения для превью на шаге 3. */
11
+ solutionPgn: string;
12
+ };
13
+ /**
14
+ * Представляет расширенный state мастера с полем тегов для шага `PuzzleWizardTagsStep`.
15
+ */
16
+ export type TPuzzleWizardState = TPuzzleWizardCoreState & {
17
+ /** Возвращает выбранные теги задачи. */
18
+ puzzleTags: TPuzzleTags;
19
+ };
20
+ /** Возвращает базовые шаги мастера: позиция, ходы, превью. */
21
+ export declare const PUZZLE_WIZARD_CORE_STEPS: readonly TWizardStep[];
22
+ /** Возвращает описание опционального шага выбора тегов. */
23
+ export declare const PUZZLE_WIZARD_TAGS_STEP: TWizardStep;
24
+ /**
25
+ * Представляет создание базового state мастера из seed FEN.
26
+ */
27
+ export declare function createInitialPuzzleWizardCoreState(seedFen: string | undefined): TPuzzleWizardCoreState;
28
+ /**
29
+ * Представляет создание расширенного state мастера с тегами из seed FEN.
30
+ */
31
+ export declare function createInitialPuzzleWizardState(seedFen: string | undefined): TPuzzleWizardState;
32
+ /**
33
+ * Представляет нормализацию входного FEN (пустая строка трактуется как отсутствие значения).
34
+ */
35
+ export declare function puzzleWizardSeedFen(prop: string | undefined): string | undefined;
@@ -0,0 +1,37 @@
1
+ import { createInitialPuzzleData, } from "../puzzle/puzzleData.js";
2
+ /** Возвращает базовые шаги мастера: позиция, ходы, превью. */
3
+ export const PUZZLE_WIZARD_CORE_STEPS = [
4
+ { id: "position", title: "Позиция" },
5
+ { id: "moves", title: "Ходы" },
6
+ { id: "preview", title: "Превью" },
7
+ ];
8
+ /** Возвращает описание опционального шага выбора тегов. */
9
+ export const PUZZLE_WIZARD_TAGS_STEP = {
10
+ id: "tags",
11
+ title: "Теги",
12
+ };
13
+ /**
14
+ * Представляет создание базового state мастера из seed FEN.
15
+ */
16
+ export function createInitialPuzzleWizardCoreState(seedFen) {
17
+ return {
18
+ puzzleData: createInitialPuzzleData(seedFen),
19
+ solutionPgn: "",
20
+ };
21
+ }
22
+ /**
23
+ * Представляет создание расширенного state мастера с тегами из seed FEN.
24
+ */
25
+ export function createInitialPuzzleWizardState(seedFen) {
26
+ return {
27
+ ...createInitialPuzzleWizardCoreState(seedFen),
28
+ puzzleTags: { tactics: [] },
29
+ };
30
+ }
31
+ /**
32
+ * Представляет нормализацию входного FEN (пустая строка трактуется как отсутствие значения).
33
+ */
34
+ export function puzzleWizardSeedFen(prop) {
35
+ const t = prop?.trim();
36
+ return t ? t : undefined;
37
+ }
@@ -1,9 +1,15 @@
1
+ import type { Snippet } from "svelte";
1
2
  import type { TPuzzleCreatedPayload } from "../puzzle/puzzleCreatedPayload.js";
2
- import type { ChessBoardSettings, ChessboardTheme } from "@connectorvol/chessboard";
3
+ import type { TWizardStep, TWizardStepContext } from "@connectorvol/shared";
4
+ import type { TPuzzleWizardCoreState } from "./puzzleWizardState.js";
5
+ import type { ChessboardTheme, TChessBoardDesignSettings, TChessBoardPlaySettings } from "@connectorvol/chessboard";
3
6
  /**
4
7
  * Представляет тип визуальных настроек шахматной доски для мастера создания задачи.
5
8
  */
6
- export type TChessboardAppearanceSettings = Omit<Partial<ChessBoardSettings>, "boardSize" | "orientation" | "draggable">;
9
+ export type TChessboardAppearanceSettings = {
10
+ play?: Omit<TChessBoardPlaySettings, "boardSize" | "orientation" | "draggable">;
11
+ design?: Partial<TChessBoardDesignSettings>;
12
+ };
7
13
  /**
8
14
  * Представляет исход решения или ошибки в превью задачи для колбэка `onOutcome`.
9
15
  */
@@ -41,6 +47,14 @@ export interface TPuzzlePgnBoardTreeEditorProps {
41
47
  * Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`).
42
48
  */
43
49
  boardAppearanceSettings?: TChessboardAppearanceSettings;
50
+ /**
51
+ * Возвращает начальный размер доски в rem (применяется только при создании API доски).
52
+ */
53
+ boardSize?: number;
54
+ /**
55
+ * Возвращает колбэк после завершения изменения размера доски перетаскиванием ручки resize.
56
+ */
57
+ onResizeAction?: (size: number) => void;
44
58
  /**
45
59
  * Возвращает дополнительные классы Tailwind для корневого контейнера раскладки.
46
60
  */
@@ -49,11 +63,19 @@ export interface TPuzzlePgnBoardTreeEditorProps {
49
63
  /**
50
64
  * Представляет свойства компонента мастера создания шахматной задачи.
51
65
  */
52
- export interface TPuzzleCreationWizardProps {
66
+ export type TPuzzleCreationWizardProps<S extends TPuzzleWizardCoreState = TPuzzleWizardCoreState> = {
53
67
  /**
54
- * Возвращает функцию, вызываемую при завершении мастера с FEN и строкой ходов.
68
+ * Возвращает общий state визарда (двухсторонняя привязка; инициализация и сброс — на стороне родителя).
69
+ */
70
+ wizardState: S;
71
+ /**
72
+ * Возвращает функцию, вызываемую при завершении мастера с FEN и строкой ходов (шаг 3 без доп. шагов).
55
73
  */
56
74
  onPuzzleCreated: (payload: TPuzzleCreatedPayload) => void;
75
+ /**
76
+ * Возвращает колбэк завершения с финальным state (вызывается из `wizard.done()` на доп. шагах).
77
+ */
78
+ onDone?: (state: S) => void;
57
79
  /**
58
80
  * Возвращает начальный полный FEN для шага 1; если не задан — пустая доска.
59
81
  */
@@ -66,4 +88,12 @@ export interface TPuzzleCreationWizardProps {
66
88
  * Возвращает дополнительные визуальные настройки шахматной доски (кроме `boardSize`, `orientation`, `draggable`).
67
89
  */
68
90
  boardAppearanceSettings?: TChessboardAppearanceSettings;
69
- }
91
+ /**
92
+ * Возвращает дополнительные шаги после превью (для индикатора прогресса и навигации).
93
+ */
94
+ additionalSteps?: readonly TWizardStep[];
95
+ /**
96
+ * Возвращает snippet содержимого дополнительных шагов (вызывается при `currentStep > 3`).
97
+ */
98
+ additionalStep?: Snippet<[TWizardStepContext<S>]>;
99
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@connectorvol/chess-widgets",
3
- "version": "8.0.0",
3
+ "version": "9.0.0",
4
4
  "private": false,
5
5
  "files": [
6
6
  "dist",
@@ -29,7 +29,7 @@
29
29
  "start": "vite",
30
30
  "dev": "vite",
31
31
  "build": "vite build",
32
- "preview": "vite preview",
32
+ "preview": "bun build/index.js",
33
33
  "package": "svelte-kit sync && svelte-package && bun pm pack",
34
34
  "publish": "bun publish --access public",
35
35
  "prepublishOnly": "bun pm pack",
@@ -37,27 +37,28 @@
37
37
  "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
38
38
  "format": "oxfmt --write . && prettier --write \"**/*.svelte\"",
39
39
  "prettier": "prettier --write \"**/*.svelte\"",
40
- "test": "",
40
+ "test": "vitest run",
41
41
  "test:e2e": "node node_modules/@playwright/test/cli.js test",
42
42
  "test:e2e:ui": "node node_modules/@playwright/test/cli.js test --ui"
43
43
  },
44
44
  "dependencies": {
45
- "@connectorvol/chessboard": "8.0.0",
46
- "@connectorvol/chessops": "8.0.0",
47
- "@connectorvol/shared": "8.0.0",
48
- "@connectorvol/tree": "8.0.0",
45
+ "@connectorvol/chessboard": "9.0.0",
46
+ "@connectorvol/chessops": "9.0.0",
47
+ "@connectorvol/shared": "9.0.0",
48
+ "@connectorvol/tree": "9.0.0",
49
49
  "bits-ui": "2.16.4",
50
- "clsx": "^2.1.1",
51
- "svelte-toolbelt": "^0.10.6",
50
+ "clsx": "2.1.1",
51
+ "svelte-toolbelt": "0.10.6",
52
52
  "tailwind-merge": "3.3.1",
53
- "tailwind-variants": "^3.2.2"
53
+ "tailwind-variants": "3.2.2"
54
54
  },
55
55
  "devDependencies": {
56
+ "@connectorvol/chess-shadcn": "9.0.0",
56
57
  "@ianvs/prettier-plugin-sort-imports": "4.5.1",
57
- "@lucide/svelte": "^1.16.0",
58
- "@playwright/test": "1.54.1",
59
- "@sveltejs/adapter-static": "3.0.10",
60
- "@sveltejs/kit": "2.48.0",
58
+ "@lucide/svelte": "1.21.0",
59
+ "@testing-library/svelte": "5.3.1",
60
+ "@vitest/coverage-v8": "3.2.4",
61
+ "@sveltejs/kit": "2.49.1",
61
62
  "@sveltejs/package": "2.4.0",
62
63
  "@sveltejs/vite-plugin-svelte": "7.0.0",
63
64
  "@tailwindcss/forms": "0.5.10",
@@ -65,16 +66,18 @@
65
66
  "@tailwindcss/typography": "0.5.16",
66
67
  "@tailwindcss/vite": "4.1.11",
67
68
  "autoprefixer": "10.4.21",
68
- "svelte-check": "4.3.2",
69
+ "svelte-adapter-bun": "^1.0.1",
70
+ "svelte-check": "4.6.0",
69
71
  "tailwindcss": "4.1.11",
70
72
  "tw-animate-css": "1.4.0",
71
73
  "typescript": "6.0.2",
74
+ "vitest": "4.0.17",
72
75
  "vite": "8.0.7",
73
76
  "vite-plugin-checker": "0.12.0",
74
77
  "vite-plugin-svelte-checker": "0.1.2"
75
78
  },
76
79
  "peerDependencies": {
77
- "@lucide/svelte": "^1.16.0",
78
- "svelte": "^5.53.12"
80
+ "@lucide/svelte": "1.21.0",
81
+ "svelte": "5.56.3"
79
82
  }
80
83
  }