@connectorvol/tree 1.1.0 → 1.2.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 (114) hide show
  1. package/package.json +30 -29
  2. package/dist/(classes)/chessTree.svelte.d.ts +0 -51
  3. package/dist/(classes)/chessTree.svelte.js +0 -160
  4. package/dist/(components)/ImportToPgn.svelte +0 -16
  5. package/dist/(components)/ImportToPgn.svelte.d.ts +0 -7
  6. package/dist/(components)/Move.svelte +0 -285
  7. package/dist/(components)/Move.svelte.d.ts +0 -14
  8. package/dist/(components)/MoveWithIcon.svelte +0 -48
  9. package/dist/(components)/MoveWithIcon.svelte.d.ts +0 -14
  10. package/dist/(components)/PieceIcon.svelte +0 -44
  11. package/dist/(components)/PieceIcon.svelte.d.ts +0 -15
  12. package/dist/(components)/TreeViewer.svelte +0 -82
  13. package/dist/(components)/TreeViewer.svelte.d.ts +0 -17
  14. package/dist/(components)/TreeViewerPanelManager.svelte +0 -246
  15. package/dist/(components)/TreeViewerPanelManager.svelte.d.ts +0 -13
  16. package/dist/(constants)/png.d.ts +0 -11
  17. package/dist/(constants)/png.js +0 -126
  18. package/dist/(models)/chessTreeNode.d.ts +0 -15
  19. package/dist/(models)/chessTreeNode.js +0 -1
  20. package/dist/(models)/pgnNodeCustomData.d.ts +0 -10
  21. package/dist/(models)/pgnNodeCustomData.js +0 -1
  22. package/dist/(utils)/context.d.ts +0 -13
  23. package/dist/(utils)/context.js +0 -17
  24. package/dist/(utils)/createPgnFromTree.d.ts +0 -2
  25. package/dist/(utils)/createPgnFromTree.js +0 -5
  26. package/dist/(utils)/parseSanMove.d.ts +0 -27
  27. package/dist/(utils)/parseSanMove.js +0 -84
  28. package/dist/(utils)/scrollToActiveMove.d.ts +0 -7
  29. package/dist/(utils)/scrollToActiveMove.js +0 -72
  30. package/dist/(utils)/scrollToStart.d.ts +0 -6
  31. package/dist/(utils)/scrollToStart.js +0 -46
  32. package/dist/(utils)/transformNag.d.ts +0 -1
  33. package/dist/(utils)/transformNag.js +0 -34
  34. package/dist/(utils)/transformPgnToChessNode.d.ts +0 -7
  35. package/dist/(utils)/transformPgnToChessNode.js +0 -56
  36. package/dist/components/ui/button/button.svelte +0 -82
  37. package/dist/components/ui/button/button.svelte.d.ts +0 -64
  38. package/dist/components/ui/button/index.d.ts +0 -2
  39. package/dist/components/ui/button/index.js +0 -4
  40. package/dist/components/ui/button-group/button-group-separator.svelte +0 -20
  41. package/dist/components/ui/button-group/button-group-separator.svelte.d.ts +0 -13
  42. package/dist/components/ui/button-group/button-group-text.svelte +0 -30
  43. package/dist/components/ui/button-group/button-group-text.svelte.d.ts +0 -11
  44. package/dist/components/ui/button-group/button-group.svelte +0 -46
  45. package/dist/components/ui/button-group/button-group.svelte.d.ts +0 -26
  46. package/dist/components/ui/button-group/index.d.ts +0 -4
  47. package/dist/components/ui/button-group/index.js +0 -6
  48. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte +0 -38
  49. package/dist/components/ui/context-menu/context-menu-checkbox-item.svelte.d.ts +0 -9
  50. package/dist/components/ui/context-menu/context-menu-content.svelte +0 -25
  51. package/dist/components/ui/context-menu/context-menu-content.svelte.d.ts +0 -7
  52. package/dist/components/ui/context-menu/context-menu-group-heading.svelte +0 -21
  53. package/dist/components/ui/context-menu/context-menu-group-heading.svelte.d.ts +0 -7
  54. package/dist/components/ui/context-menu/context-menu-group.svelte +0 -7
  55. package/dist/components/ui/context-menu/context-menu-group.svelte.d.ts +0 -4
  56. package/dist/components/ui/context-menu/context-menu-item.svelte +0 -27
  57. package/dist/components/ui/context-menu/context-menu-item.svelte.d.ts +0 -8
  58. package/dist/components/ui/context-menu/context-menu-label.svelte +0 -24
  59. package/dist/components/ui/context-menu/context-menu-label.svelte.d.ts +0 -8
  60. package/dist/components/ui/context-menu/context-menu-radio-group.svelte +0 -16
  61. package/dist/components/ui/context-menu/context-menu-radio-group.svelte.d.ts +0 -4
  62. package/dist/components/ui/context-menu/context-menu-radio-item.svelte +0 -31
  63. package/dist/components/ui/context-menu/context-menu-radio-item.svelte.d.ts +0 -4
  64. package/dist/components/ui/context-menu/context-menu-separator.svelte +0 -17
  65. package/dist/components/ui/context-menu/context-menu-separator.svelte.d.ts +0 -4
  66. package/dist/components/ui/context-menu/context-menu-shortcut.svelte +0 -20
  67. package/dist/components/ui/context-menu/context-menu-shortcut.svelte.d.ts +0 -5
  68. package/dist/components/ui/context-menu/context-menu-sub-content.svelte +0 -20
  69. package/dist/components/ui/context-menu/context-menu-sub-content.svelte.d.ts +0 -4
  70. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte +0 -29
  71. package/dist/components/ui/context-menu/context-menu-sub-trigger.svelte.d.ts +0 -8
  72. package/dist/components/ui/context-menu/context-menu-trigger.svelte +0 -7
  73. package/dist/components/ui/context-menu/context-menu-trigger.svelte.d.ts +0 -4
  74. package/dist/components/ui/context-menu/index.d.ts +0 -16
  75. package/dist/components/ui/context-menu/index.js +0 -19
  76. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -41
  77. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte.d.ts +0 -9
  78. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -27
  79. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte.d.ts +0 -7
  80. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +0 -22
  81. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte.d.ts +0 -8
  82. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte +0 -7
  83. package/dist/components/ui/dropdown-menu/dropdown-menu-group.svelte.d.ts +0 -4
  84. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -27
  85. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +0 -8
  86. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +0 -24
  87. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte.d.ts +0 -8
  88. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +0 -16
  89. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte.d.ts +0 -4
  90. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +0 -31
  91. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte.d.ts +0 -4
  92. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -17
  93. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte.d.ts +0 -4
  94. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +0 -20
  95. package/dist/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte.d.ts +0 -5
  96. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +0 -20
  97. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte.d.ts +0 -4
  98. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +0 -29
  99. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte.d.ts +0 -7
  100. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -7
  101. package/dist/components/ui/dropdown-menu/dropdown-menu-trigger.svelte.d.ts +0 -4
  102. package/dist/components/ui/dropdown-menu/index.js +0 -17
  103. package/dist/components/ui/separator/index.d.ts +0 -2
  104. package/dist/components/ui/separator/index.js +0 -4
  105. package/dist/components/ui/separator/separator.svelte +0 -21
  106. package/dist/components/ui/separator/separator.svelte.d.ts +0 -4
  107. package/dist/components/ui/sonner/index.d.ts +0 -1
  108. package/dist/components/ui/sonner/index.js +0 -1
  109. package/dist/components/ui/sonner/sonner.svelte +0 -13
  110. package/dist/components/ui/sonner/sonner.svelte.d.ts +0 -4
  111. package/dist/index.d.ts +0 -8
  112. package/dist/index.js +0 -7
  113. package/dist/utils.d.ts +0 -12
  114. package/dist/utils.js +0 -5
@@ -1,14 +0,0 @@
1
- import type { PieceSet } from "@connectorvol/shared";
2
- interface Props {
3
- /** SAN нотация хода */
4
- san: string;
5
- /** Номер полухода */
6
- ply: number;
7
- /** Размер иконки в пикселях */
8
- iconSize?: number;
9
- /** Набор фигур*/
10
- pieceSet?: PieceSet;
11
- }
12
- declare const MoveWithIcon: import("svelte").Component<Props, {}, "">;
13
- type MoveWithIcon = ReturnType<typeof MoveWithIcon>;
14
- export default MoveWithIcon;
@@ -1,44 +0,0 @@
1
- <script lang="ts">
2
- import type { PieceSet } from "@connectorvol/shared";
3
-
4
- import { Color, DEFAULT_PIECE_SET, PieceType } from "@connectorvol/shared";
5
-
6
- interface Props {
7
- /** Тип фигуры */
8
- pieceType: PieceType;
9
- /** Цвет фигуры */
10
- color: Color;
11
- /** Размер иконки в пикселях */
12
- size?: number;
13
- /** Набор фигур*/
14
- pieceSet?: PieceSet;
15
- }
16
-
17
- const {
18
- pieceType,
19
- color,
20
- size = 16,
21
- pieceSet = DEFAULT_PIECE_SET,
22
- }: Props = $props();
23
- </script>
24
-
25
- <span
26
- class={{
27
- "inline-block translate-x-[1px] translate-y-[2px] self-baseline": true,
28
- }}
29
- style="width: {size}px; height: {size}px;"
30
- >
31
- {#if pieceType === PieceType.PAWN}
32
- {@render pieceSet.pawn(color)}
33
- {:else if pieceType === PieceType.KNIGHT}
34
- {@render pieceSet.knight(color)}
35
- {:else if pieceType === PieceType.BISHOP}
36
- {@render pieceSet.bishop(color)}
37
- {:else if pieceType === PieceType.ROOK}
38
- {@render pieceSet.rook(color)}
39
- {:else if pieceType === PieceType.QUEEN}
40
- {@render pieceSet.queen(color)}
41
- {:else if pieceType === PieceType.KING}
42
- {@render pieceSet.king(color)}
43
- {/if}
44
- </span>
@@ -1,15 +0,0 @@
1
- import type { PieceSet } from "@connectorvol/shared";
2
- import { Color, PieceType } from "@connectorvol/shared";
3
- interface Props {
4
- /** Тип фигуры */
5
- pieceType: PieceType;
6
- /** Цвет фигуры */
7
- color: Color;
8
- /** Размер иконки в пикселях */
9
- size?: number;
10
- /** Набор фигур*/
11
- pieceSet?: PieceSet;
12
- }
13
- declare const PieceIcon: import("svelte").Component<Props, {}, "">;
14
- type PieceIcon = ReturnType<typeof PieceIcon>;
15
- export default PieceIcon;
@@ -1,82 +0,0 @@
1
- <script lang="ts">
2
- import type { ClassValue } from "svelte/elements";
3
- import { ChessTree } from "../(classes)/chessTree.svelte.js";
4
-
5
- import Move from "./Move.svelte";
6
- import { initGameContext } from "../(utils)/context.js";
7
- import type { PieceSet } from "@connectorvol/shared";
8
-
9
- type Props = {
10
- chessTree: ChessTree;
11
- className?: ClassValue;
12
- onSelectNode: () => void;
13
- onDeleteVariant: () => void;
14
- setChessFen: (fen: string) => void;
15
- setChessboardFen: (animationTime?: number) => void;
16
- pieceSet: PieceSet;
17
- /** Возвращает true, если клик по ходу переключает текущий узел и доску. По умолчанию true. */
18
- selectable?: boolean;
19
- };
20
-
21
- const {
22
- className,
23
- onSelectNode,
24
- onDeleteVariant,
25
- setChessFen,
26
- setChessboardFen,
27
- chessTree,
28
- pieceSet,
29
- selectable = true,
30
- }: Props = $props();
31
-
32
- initGameContext(
33
- chessTree,
34
- onSelectNode,
35
- onDeleteVariant,
36
- setChessFen,
37
- setChessboardFen,
38
- selectable
39
- );
40
- </script>
41
-
42
- {#snippet comment(text: string)}
43
- <div
44
- class={{
45
- "col-span-3 flex flex-col p-8 select-text": true,
46
- }}
47
- >
48
- {#each text.split("\n") as line, index}
49
- {#if index > 0}<br />{/if}{line}
50
- {/each}
51
- </div>
52
- {/snippet}
53
-
54
- <div
55
- id="tree-viewer-container"
56
- class={[
57
- "flex-1 relative overflow-auto border border-gray-300 rounded-l-sm shadow-sm ",
58
- className,
59
- ]}
60
- role="region"
61
- aria-label="Chess move tree"
62
- oncontextmenu={(e) => e.preventDefault()}
63
- >
64
- <div
65
- class={{
66
- "grid flex-1 grid-cols-[60px_1fr_1fr] divide-x divide-y divide-gray-300 select-none ": true,
67
- }}
68
- >
69
- {#if chessTree.rootNode.comments}
70
- {#each chessTree.rootNode.comments as firstComment}
71
- {@render comment(firstComment)}
72
- {/each}
73
- {/if}
74
- <Move
75
- chessNode={chessTree.rootNode.moves}
76
- depth={1}
77
- needSpace={false}
78
- parentNode={null}
79
- {pieceSet}
80
- />
81
- </div>
82
- </div>
@@ -1,17 +0,0 @@
1
- import type { ClassValue } from "svelte/elements";
2
- import { ChessTree } from "../(classes)/chessTree.svelte.js";
3
- import type { PieceSet } from "@connectorvol/shared";
4
- type Props = {
5
- chessTree: ChessTree;
6
- className?: ClassValue;
7
- onSelectNode: () => void;
8
- onDeleteVariant: () => void;
9
- setChessFen: (fen: string) => void;
10
- setChessboardFen: (animationTime?: number) => void;
11
- pieceSet: PieceSet;
12
- /** Возвращает true, если клик по ходу переключает текущий узел и доску. По умолчанию true. */
13
- selectable?: boolean;
14
- };
15
- declare const TreeViewer: import("svelte").Component<Props, {}, "">;
16
- type TreeViewer = ReturnType<typeof TreeViewer>;
17
- export default TreeViewer;
@@ -1,246 +0,0 @@
1
- <script lang="ts">
2
- import ArrowLeft from "@lucide/svelte/icons/arrow-left";
3
- import ArrowRight from "@lucide/svelte/icons/arrow-right";
4
- import ListStart from "@lucide/svelte/icons/list-start";
5
- import ListEnd from "@lucide/svelte/icons/list-end";
6
- import PlayButtonIcon from "@lucide/svelte/icons/circle-play";
7
- import StopButtonIcon from "@lucide/svelte/icons/circle-stop";
8
- import * as Button from "../components/ui/button/index.js";
9
- import * as ButtonGroup from "../components/ui/button-group/index.js";
10
-
11
- import { scrollToActiveMoveIfNeeded } from "../(utils)/scrollToActiveMove.js";
12
- import { scrollToStart } from "../(utils)/scrollToStart.js";
13
- import type { Snippet } from "svelte";
14
- import type { ChessTree } from "../(classes)/chessTree.svelte.js";
15
- import type { ClassValue } from "clsx";
16
-
17
- type Props = {
18
- chessTree: ChessTree;
19
- className?: ClassValue;
20
- setChessFen: (fen: string) => void;
21
- setChessboardFen: (animationTime?: number) => void;
22
- extraActions?: Snippet;
23
- };
24
-
25
- const {
26
- extraActions,
27
- chessTree,
28
- setChessFen,
29
- setChessboardFen,
30
- className,
31
- }: Props = $props();
32
-
33
- // Состояние подсветки кнопок
34
- let highlightedButtons = $state({
35
- previous: false,
36
- next: false,
37
- start: false,
38
- end: false,
39
- });
40
-
41
- // Состояние автопроигрывания
42
- let isPlaying = $state(false);
43
- let playInterval: ReturnType<typeof setInterval> | null = $state(null);
44
-
45
- const selectPreviousNode = () => {
46
- const parentNode = chessTree.getCurrentNodeParent();
47
- if (parentNode) {
48
- chessTree.currentNode = parentNode;
49
- setChessFen(parentNode.data.fen);
50
- }
51
- setChessboardFen();
52
- setTimeout(() => scrollToActiveMoveIfNeeded(), 50);
53
- };
54
-
55
- const selectNextNode = (animationTime: number = 0) => {
56
- const childId = chessTree.currentNode?.children?.[0]?.id;
57
- if (childId) {
58
- const childNode = chessTree.currentNode.children[0];
59
- chessTree.currentNode = childNode;
60
- setChessFen(childNode.data.fen);
61
- }
62
- setChessboardFen(animationTime);
63
- setTimeout(() => scrollToActiveMoveIfNeeded(), 50);
64
- };
65
-
66
- /**
67
- * Представляет функцию для перехода к началу главной линии (корневому узлу)
68
- */
69
- const stepToStart = () => {
70
- chessTree.currentNode = chessTree.rootNode.moves;
71
- setChessFen(chessTree.rootNode.moves.data.fen);
72
- setChessboardFen();
73
- highlightButton("start");
74
- setTimeout(() => scrollToStart(), 50);
75
- };
76
-
77
- /**
78
- * Представляет функцию для перехода к концу главной линии
79
- * Идет по первым дочерним узлам до тех пор, пока не достигнет листа
80
- */
81
- const stepToEnd = () => {
82
- let currentNode = chessTree.currentNode;
83
-
84
- // Идем по первым дочерним узлам (главная линия) до конца
85
- while (currentNode.children && currentNode.children.length > 0) {
86
- currentNode = currentNode.children[0];
87
- }
88
-
89
- chessTree.currentNode = currentNode;
90
- setChessFen(currentNode.data.fen);
91
- setChessboardFen();
92
- highlightButton("end");
93
- setTimeout(() => scrollToActiveMoveIfNeeded(), 50);
94
- };
95
-
96
- // Функция для подсветки кнопки на 1 секунду
97
- const highlightButton = (button: "previous" | "next" | "start" | "end") => {
98
- highlightedButtons[button] = true;
99
- setTimeout(() => {
100
- highlightedButtons[button] = false;
101
- }, 100);
102
- };
103
-
104
- /**
105
- * Представляет функцию для запуска автопроигрывания ходов
106
- */
107
- const startAutoPlay = () => {
108
- if (isPlaying || !chessTree.currentNode?.children?.length) return;
109
-
110
- isPlaying = true;
111
- playInterval = setInterval(() => {
112
- // Проверяем, есть ли следующий ход
113
- const hasNextNode = chessTree.currentNode?.children?.length > 0;
114
- if (hasNextNode) {
115
- selectNextNode(1000);
116
- } else {
117
- // Если достигли конца партии, останавливаем автопроигрывание
118
- stopAutoPlay();
119
- }
120
- }, 1000);
121
- };
122
-
123
- /**
124
- * Представляет функцию для остановки автопроигрывания ходов
125
- */
126
- const stopAutoPlay = () => {
127
- isPlaying = false;
128
- if (playInterval !== null) {
129
- clearInterval(playInterval);
130
- playInterval = null;
131
- }
132
- };
133
-
134
- /**
135
- * Представляет функцию-переключатель для автопроигрывания
136
- */
137
- const toggleAutoPlay = () => {
138
- if (isPlaying) {
139
- stopAutoPlay();
140
- } else {
141
- startAutoPlay();
142
- }
143
- };
144
-
145
- const onKeyDown = (e: KeyboardEvent) => {
146
- if (e.key === "ArrowUp") {
147
- stepToStart();
148
- e.preventDefault();
149
- } else if (e.key === "ArrowDown") {
150
- stepToEnd();
151
- e.preventDefault();
152
- } else if (e.key === "ArrowLeft") {
153
- selectPreviousNode();
154
- highlightButton("previous");
155
- e.preventDefault();
156
- } else if (e.key === "ArrowRight") {
157
- selectNextNode();
158
- highlightButton("next");
159
- e.preventDefault();
160
- } else if (e.key === " ") {
161
- toggleAutoPlay();
162
- e.preventDefault();
163
- }
164
- };
165
-
166
- // Очистка интервала при размонтировании компонента
167
- $effect(() => {
168
- return () => {
169
- if (playInterval !== null) {
170
- clearInterval(playInterval);
171
- }
172
- };
173
- });
174
- </script>
175
-
176
- <div class={[className]}>
177
- <ButtonGroup.Root>
178
- <ButtonGroup.Root class="hidden sm:flex"></ButtonGroup.Root>
179
- <ButtonGroup.Root>
180
- <Button.Root
181
- variant="outline"
182
- size="icon"
183
- aria-label="Previous Move"
184
- onclick={selectPreviousNode}
185
- class={{
186
- "bg-primary text-white": highlightedButtons.previous,
187
- "cursor-pointer": true,
188
- }}
189
- >
190
- <ArrowLeft />
191
- </Button.Root>
192
- <Button.Root
193
- variant="outline"
194
- size="icon"
195
- aria-label="Go to Start"
196
- onclick={stepToStart}
197
- class={{
198
- "bg-primary text-white": highlightedButtons.start,
199
- }}
200
- >
201
- <ListStart />
202
- </Button.Root>
203
- <Button.Root
204
- variant={isPlaying ? "default" : "outline"}
205
- size="icon"
206
- aria-label={isPlaying ? "Stop Auto Play" : "Start Auto Play"}
207
- onclick={toggleAutoPlay}
208
- class={{
209
- "bg-primary text-white": isPlaying,
210
- }}
211
- >
212
- {#if isPlaying}
213
- <StopButtonIcon />
214
- {:else}
215
- <PlayButtonIcon />
216
- {/if}
217
- </Button.Root>
218
- <Button.Root
219
- variant="outline"
220
- size="icon"
221
- aria-label="Go to End"
222
- onclick={stepToEnd}
223
- class={{
224
- "bg-primary text-white": highlightedButtons.end,
225
- }}
226
- >
227
- <ListEnd />
228
- </Button.Root>
229
- <Button.Root
230
- variant="outline"
231
- size="icon"
232
- aria-label="Next Move"
233
- onclick={() => selectNextNode()}
234
- class={{
235
- "bg-primary text-white": highlightedButtons.next,
236
- }}
237
- >
238
- <ArrowRight />
239
- </Button.Root>
240
- </ButtonGroup.Root>
241
- <ButtonGroup.Root class="hidden sm:flex"></ButtonGroup.Root>
242
- </ButtonGroup.Root>
243
- {@render extraActions?.()}
244
- </div>
245
-
246
- <svelte:window onkeydown={onKeyDown} />
@@ -1,13 +0,0 @@
1
- import type { Snippet } from "svelte";
2
- import type { ChessTree } from "../(classes)/chessTree.svelte.js";
3
- import type { ClassValue } from "clsx";
4
- type Props = {
5
- chessTree: ChessTree;
6
- className?: ClassValue;
7
- setChessFen: (fen: string) => void;
8
- setChessboardFen: (animationTime?: number) => void;
9
- extraActions?: Snippet;
10
- };
11
- declare const TreeViewerPanelManager: import("svelte").Component<Props, {}, "">;
12
- type TreeViewerPanelManager = ReturnType<typeof TreeViewerPanelManager>;
13
- export default TreeViewerPanelManager;
@@ -1,11 +0,0 @@
1
- /**
2
- * https://lichess.org/study/dnp96Pfx/N9EOybPh
3
- */
4
- export declare const PGN = "\n[Event \"Rated blitz tournament https://lichess.org/tournament/spring25\"]\n[Site \"https://lichess.org/oj3PlZ6Q\"]\n[Date \"2025.04.26\"]\n[White \"Ceburashka\"]\n[Black \"littleplotkin\"]\n[Result \"1-0\"]\n[WhiteElo \"2356\"]\n[BlackElo \"2767\"]\n[BlackTitle \"IM\"]\n[TimeControl \"300+0\"]\n[Variant \"Standard\"]\n[Termination \"Normal\"]\n[Annotator \"https://lichess.org/@/NaSil\"]\n[GameId \"oj3PlZ6Q\"]\n[ECO \"B33\"]\n[Opening \"Sicilian Defense: Lasker-Pelikan Variation\"]\n[StudyName \"Game Of The Month - April 2025\"]\n[ChapterName \"Ceburashka - littleplotkin\"]\n[ChapterURL \"https://lichess.org/study/dnp96Pfx/N9EOybPh\"]\n[Orientation \"white\"]\n\n{ A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!\n\nCongratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.\n\nEnjoy! }\n1. e4 { [%clk 0:05:00] } 1... c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } 2... Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } 3... cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } 4... Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } 5... e5 { [%clk 0:02:27] } (5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. }) 6. Ndb5! { This move is almost the only respectable move in this position and yet one of the most instructive maneuvers in the Sicilian Defense, at least for me!\nIf you see this move for the first time, you might wonder why White wants their opponent to play 6...d6 while their knight will eventually get kicked away and end up on the edge of the board, namely on the a3 square. In order to understand what is going on we should check the alternatives. } { [%cal Gb5d6] [%clk 0:04:52] } (6. Nb3 Bb4! $10 { [%cal Gd6d5,Gd7d5,Rd7d6] }) (6. Nf3 Bb4! $10 { After Black develops their so called \"bad bishop\", they can eventually play ...d6 or even the desired ...d5 if possible. The reason behind 6. Ndb5 is to keep Bf8 behind the pawn chain after 6...d6. }) (6. Nde2!? { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } 6... Bc5! { Black is ready to play ...d6 next with an active \"bad bishop\". } { [%cal Gd8b6] } (6... Bb4 7. a3! { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] }) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] }) (6. Nf5!? { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5! { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6! $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. }) 6... Bc5!? { An obscure sideline in the Sveshnikov Sicilian, also known as Lasker-Pelikan Variation of the Sicilian Defense, which will eventually transpose into the ...e6 Sicilian noted at the 5th move above. It might be a practical choice in blitz to get out of opening theory as early as possible. } { [%clk 0:02:26] } (6... d6 { is by far the main line. } { [%csl Rf8] } 7. Bg5 (7. Nd5 { a modern approach which became popular after Fabiano Caruana used it in the World Chess Championship match against Magnus Carlsen in 2018. }) 7... a6 8. Na3 { [%csl Gd5][%cal Ga3c4,Rc4e3] } 8... b5 { It seems that White has ended up with their knight on the a3-square, losing 2 tempos playing with it. However, Black only made pawn moves in the meantime, and White might eventually target the a6-b5 pawn chain, creating weaknesses in Black's camp, by playing a4 or c4. } { [%csl Ra3,Gc4][%cal Gb5b4] }) 7. Nd6+ { Even if this move looks like the most obvious follow-up, Stockfish considers } { [%clk 0:04:50] } (7. Be3! { as the best move, since our beloved silicon monster can clearly foresee and evaluate the following sequence in White's favor. } 7... d6! (7... Bxe3 8. Nd6+ { This intermediate move is the point of the previous move. } 8... Ke7 9. fxe3 $18 { Stockfish considers this position as winning because Black's king remains in the center and the White forces will join the action in a couple of moves. } { [%csl Re7,Rf7][%cal Gf1c4,Gd1d2,Ge1c1] }) 8. Bxc5 dxc5 9. Qxd8+ Kxd8 10. O-O-O+ { White has a clear initiative in this queenless middlegame position. For example: } 10... Ke7 11. Nd5+! $146 { Yes, a novelty! An important shot creating a very strong passer as an attacking unit against Black's king. It requires a precise follow-up as White's d6-pawn might be weak if White's initiative fizzles out. } 11... Nxd5 12. exd5 Nd4 13. d6+ Kd8 { Otherwise White will play Nc7, c3, and d7, winning. } (13... Kf6 14. Nc7 { Showcasing the strength of the passed d-pawn with the following sequence. } 14... Rb8 15. c3 Ne6 16. d7 Nxc7 17. d8=B+ { I like how Stockfish considers promoting the pawn into a bishop is equal to promoting it into a queen. } 17... Rxd8 18. Rxd8 $18) 14. Re1 $36 { A rather forced and interesting line. I hope I could try this line in practice if I have the chance to play against this line, and I would like to encourage the readers to do so as well! } { [%cal Gf2f4,Bb5d4,Be1e7] }) 7... Ke7! { A bold move but the only one, as after } { [%clk 0:02:25] } (7... Bxd6?! 8. Qxd6 $16 { White is much better with the blockade over the d6 and d5 squares and the bishop pair. Stockfish already considers this position as winning for White. }) 8. Nf5+ { [%clk 0:04:49] } (8. Nxc8+ { Logical to capture the valuable bishop at the cost of spending a few tempos with the knight in doing so. } 8... Rxc8 9. Bc4 Kf8 10. O-O h6 { [%csl Gg5][%cal Yc1g5] } 11. Kh1 { [%cal Gf2f4,Rc5g1] } 11... Ne7 12. f4 $40 { White has the bishop pair and Black's king is in a somewhat uncomfortable situation. } { [%csl Rf8][%cal Gf1f7,Gc4f7] }) 8... Kf8 { [%clk 0:02:24] } 9. Bg5 { It's a very well-known idea to exchange the pieces controlling the d5-square. We transposed back into the line mentioned at the 5th move. At the expense of developing their dark-squared bishop outside of the pawn chain, Black lost their castling rights. } { [%csl Gd5] [%clk 0:04:43] } 9... h6 { [%clk 0:02:17] } (9... d6 { This is sort of the \"main\" line according to the Masters Database. One recent example from GM practice: } { [%csl Yf5,Be6][%cal Gc8e6] } 10. Ne3 { [%csl Bd5][%cal Be3d5,Bc3d5] } 10... h6 11. Bxf6 { White gave up their \"good bishop\" in order to increase control over the d5-square. } 11... Qxf6 12. Bc4 { [%csl Gd5,Gc4,Gc3,Ge3,Gd1][%cal Ye3d5,Yc3d5,Bc4d5,Bd1d5] } 12... Be6 (12... Bxe3? 13. fxe3 $40 { [%cal Gf1f7,Yh1f1,Bd1d6] }) 13. O-O Kg8 { [%cal Bg8h7] } 14. Ncd5 Qd8 (14... Bxd5 15. Nxd5 Qd8 16. c3 Kh7 $16 { White has the better structure, better minor pieces, and a safer king in this middlegame with opposite-colored bishops. }) 15. c3 $14 { Huschenbeth, N. - Rakotomaharo, Fy Antenaina, 1-0, FIDE World Cup 2023, https://lichess.org/b4xGV3WX } { [%csl Yd4] }) 10. Bxf6 { [%clk 0:04:37] } 10... Qxf6 { [%clk 0:02:15] } 11. Nd5 { [%clk 0:04:27] } 11... Qd8 { [%clk 0:02:10] } 12. c3 { White will try to put pressure on Black's d-pawn and control the d5-square. Meanwhile, Black will try to play around those squares on the queenside with the minority attack (a5, b5, b4) or go for kingside play by means of ...f5. The latter plan is harder to achieve compared to the usual Sicilian Svehnikov due to Black's king position. } { [%csl Gd4,Yc6][%cal Bb2b4,Gc3d4] [%clk 0:04:20] } 12... a5 { Preventing b2-b4 but weakening the b5-square in doing so, which might make it more difficult to arrange the minority attack (b7-b5) on the queenside. } { [%csl Gb4,Rb5] [%clk 0:02:06] } 13. Qd2! { The most aggresive idea and probably the best one! White would still be better in case of } { [%cal Ge1c1] [%clk 0:04:18] } (13. Bc4 d6 14. O-O g6 15. Nfe3 Kg7 $14 { but Black's task might be relatively easier preparing the usual Sveshnikov counterplay with ...f5. }) 13... d6 { [%clk 0:02:04] } 14. O-O-O { It was a very good decision by White to create an opposite-sides castling situation, which forces both players to play on the opposite wings. } { [%clk 0:03:57] } 14... g6 { [%cal Bg6f5,Gf8g7] [%clk 0:02:00] } (14... Bxf5 15. exf5 { Black logically tries to avoid this exchange because White would dominate the light squares and have a favorable attacking position due to the fact that \"opposite-colored bishops favor the attacker\". } { [%csl Rf8][%cal Gf5f6,Gf2f4,Gf1c4,Gg2g4] }) 15. Nfe3 { [%clk 0:03:56] } 15... Be6 { [%clk 0:01:58] } 16. Kb1 { [%clk 0:03:52] } 16... Kg7 { The game has developed very logically up to this point. It seems that Black should act on the queenside, while White can attack on the kingside. } { [%cal Gb7b5,Gb5b4,Gf2f4,Gh2h4] [%clk 0:01:54] } 17. f3 { A rather slow approach in a situation where every tempo is very important. This move makes the f4-push less attractive and this loss of time might give Black the upper hand with their queenside initiative. A more aggressive pawn thrust might have been } { [%clk 0:03:47] } (17. h4 { [%csl Gh5][%cal Gh4h5] } 17... Rb8 { [%csl Gb5][%cal Gb7b5] } (17... h5 18. g3 { [%csl Gf4][%cal Gf2f4] } 18... Rb8 { [%cal Gb7b5] } 19. f4 $40 { Showcasing that White might have needed the f4-push as in the game. } { [%cal Gf4f5] }) 18. h5 b5 (18... g5 19. Nf5+ $40) 19. f4 $13 { Anything is possible in this messy position. } { [%cal Gf4f5] }) 17... a4 { Even though Black should push the queenside pawns to open up lines against White's king, Black's last move makes it more difficult to achieve the b5-b4 push after White's next move. } { [%clk 0:01:51] } (17... Rb8! { would be more direct. } { [%cal Gb7b5] }) 18. a3 { Securing the b4-square and making it impossible for Black to play ...b5-b4, but weakening the light squares as well. } { [%csl Rb4][%cal Rb7b5,Rb5b4] [%clk 0:03:45] } 18... Qa5 { [%clk 0:01:47] } (18... Bxe3! { Stockfish suggests this move, intending counterplay on the light squares, and eventually preparing ...d6-d5. } 19. Nxe3 (19. Qxe3 Ra5 20. Bc4 Ne7 { [%csl Gd5][%cal Ra5d5,Ye7d5,Be6d5] }) 19... Bb3 20. Re1 { [%csl Gc4][%cal Gf1c4] } 20... Na5! $132 $40 { This is a very instructive concept! Black gains more control over the light squares, preventing Bc4 and preparing the ...d5-push. } { [%csl Yc4,Gd5][%cal Bd6d5,Ga8c8,Gc8c5,Gd8d7,Gd7e6,Gh8d8] }) 19. Bc4 { [%clk 0:03:44] } 19... b5 { [%clk 0:01:45] } 20. Ba2 { [%clk 0:03:42] } 20... Rhd8 { [%clk 0:01:43] } 21. h4! { It's time to attack as White has secured the central squares and stopped Black's offensive on the queenside. } { [%clk 0:03:37] } 21... Qa7 { [%clk 0:01:36] } 22. Rde1 { [%clk 0:03:18] } (22. h5 { would be more direct. } { [%cal Yd2h6,Bh1h6] }) 22... Ne7 { Black feels they have no choice but to remove the monster on d5. } { [%clk 0:01:32] } 23. f4 { In hindsight, Black might use this moment to give up their strategically bad bishop for one of White's knights. } { [%csl Gh5,Gf5][%cal Gf4f5,Gh4h5] [%clk 0:03:08] } (23. h5 g5 { Hence the text move as White is intending to play h5 on the next move without allowing ...g5. }) 23... exf4 { [%clk 0:01:25] } (23... Bxe3 { As on the 18th move, Black can get rid of the dark-squared bishop. } 24. Nxe3 Bxa2+ 25. Kxa2 exf4 26. Nc2 { [%cal Gd2f4] } (26. Nd5? Nxd5 27. Qxd5 Qc5 $17) 26... Qc5 $14 { With a series of exchanges, Black managed to get rid of White's active minor pieces, reduced White's attacking potential, and eventually centralized their queen. Black can put up a good fight in this complicated position. } { [%cal Gc5e5] }) 24. Nxf4 { [%clk 0:03:07] } 24... Bxa2+ { [%clk 0:01:24] } 25. Kxa2 { [%clk 0:03:06] } 25... Re8 { [%cal Ge8e4] [%clk 0:01:15] } (25... Bxe3! { It was the last call to make this exchange! } 26. Rxe3 $14 { Even though White is structurally better and has a safer king, Black has nice control over the central squares. } { [%csl Ge5,Gc5,Yd5] }) 26. Ned5! { The right knight! } { [%clk 0:02:52] } (26. Nfd5 Bxe3! { The text move avoids this exchange. }) 26... Nxd5 { [%clk 0:01:13] } 27. Nxd5 { Now this position looks like a nice illustration of a good knight vs. bad bishop scenario. Even though Black's bishop is not such a bad piece, it has little to do in terms of attacking or defensive purposes. Meanwhile, White's knight is a monster! } { [%csl Bc5,Gd5] [%clk 0:02:49] } 27... Re6 { Black targets the weak pawn on e4 by doubling the rooks and brings pieces closer to their own king. } { [%csl Ge4][%cal Ra8e8,Ge6e4] [%clk 0:01:09] } 28. Rhf1! { The move itself might not deserve an exclamation mark, but this is the first move of the killer rook! } { [%clk 0:02:46] } 28... Rae8 { [%clk 0:01:07] } 29. h5! { Always a useful strategy: softening up the squares around the opponent's king. White sacrifices the e4-pawn to open up lines. } { [%clk 0:02:37] } 29... g5 { Black decides to keep things closed. } { [%csl Rf5] [%clk 0:01:06] } (29... Rxe4 30. Rxe4 Rxe4 31. hxg6 fxg6 32. Qd3! { [%csl Gf6,Gf3][%cal Gf1f6,Rd3g6,Yd3f3] } 32... Re6 33. Qf3! $40 { White doesn't feel the pawn deficit as their attack is very strong. } { [%cal Gf3f8] }) 30. Rf5! { White immediately seizes the opportunity to exploit the weakness created by Black's previous move. White wants to double the rooks on the f-file and targets the g5-pawn. } { [%csl Gf1,Gg5][%cal Ge1f1] [%clk 0:02:19] } 30... Rxe4? { Black's position was critical and this is the losing move! } { [%clk 0:00:55] } (30... Re5! { Preventing White's next move would be better. }) 31. Rxg5+!! { A nice illustration of the queen and knight tandem as an attacking unit. } { [%clk 0:02:07] } 31... Kf8 $7 { [%clk 0:00:43] } (31... hxg5 32. Qxg5+ Kf8 (32... Kh7 33. Nf6+ Kh8 34. Qh6#) 33. Qh6+ Kg8 34. Nf6#) 32. Rg8+! { Not the only move but a classy one! } { [%clk 0:01:23] } 32... Kxg8 { [%clk 0:00:41] } 33. Qxh6 { Even though this move doesn't come with check, it's still devastating! } { [%csl Gf6][%cal Gd5f6] [%clk 0:01:22] } 33... f5 { The only move that doesn't loose material immediately. } { [%clk 0:00:33] } (33... R8e6 34. Qg5+ Kf8 (34... Kh7 35. Rxe4 $18 { [%cal Gd5f6] }) 35. Rxe4 Rxe4 36. Qh6+ Ke8 37. Nf6+ Ke7 38. Nxe4 $18) 34. Rxe4 { [%clk 0:01:09] } 34... Rxe4 { [%clk 0:00:31] } (34... fxe4 35. Nf6+ Kf7 36. Qg6+ Ke7 37. Nxe8 $18 e3 38. h6 { Even this is winning. Although Black queens the pawn first, White wins due to the exposed king. } 38... e2 39. h7 e1=Q 40. h8=Q $18) 35. Nf6+ { [%clk 0:01:02] } 35... Kf7 { [%clk 0:00:29] } 36. Qg6+ { [%clk 0:01:02] } 36... Ke7 { [%clk 0:00:26] } 37. h6 { [%clk 0:00:50] } (37. Nxe4 fxe4 38. h6 $18 { Stockfish claims White is winning as Black's bishop cannot control the h8-square in time. }) 37... Re6 { [%clk 0:00:22] } (37... Qa8 38. h7 Rh4 39. Qg7+ Ke6 40. Qg8+ $18) 38. Nd5+ { [%clk 0:00:42] } 38... Kd7 { [%clk 0:00:21] } 39. Qf7+ { [%clk 0:00:39] } 39... Kc6 { [%clk 0:00:21] } 40. Qxe6 $18 { And rest is a matter of technique as the famous saying goes... } { [%clk 0:00:38] } 40... Qh7 { [%clk 0:00:21] } 41. Ne7+ { [%clk 0:00:37] } 41... Kb6 { [%clk 0:00:20] } 42. Nxf5 { [%clk 0:00:36] } 42... Qh8 { [%clk 0:00:17] } 43. Nxd6 { [%clk 0:00:32] } 43... Bxd6 { The knight is eliminated by the bishop, but 25 moves too late. } { [%clk 0:00:16] } 44. Qxd6+ { Queen endgames are known to be very difficult, but this is easily winning for White! } { [%clk 0:00:32] } 44... Ka5 { [%clk 0:00:16] } 45. Qe6 { [%clk 0:00:32] } 45... Qf8 { [%clk 0:00:14] } (45... Qh7 46. g4 $18) 46. h7 { [%clk 0:00:30] } 46... Qg7 { [%clk 0:00:14] } 47. Qg8 { 1-0 Black resigns. } { [%clk 0:00:29] } 1-0\n";
5
- /**
6
- * https://lichess.org/study/dnp96Pfx/N9EOybPh
7
- */
8
- export declare const PGN_small = "\n[Variant \"From Position\"]\n[FEN \"rnbqkbnr/pppppppp/8/8/3PP3/8/PP3PPP/RNBQKBNR w KQkq - 0 1\"]\n\n1. e5 d6\n";
9
- export declare const PGN_bad = "[Event \"Rated blitz tournament https://lichess.org/tournament/spring25\"]\n[Site \"https://lichess.org/oj3PlZ6Q\"]\n[Date \"2025.04.26\"]\n[Round \"?\"]\n[White \"Ceburashka\"]\n[Black \"littleplotkin\"]\n[Result \"1-0\"]\n[WhiteElo \"2356\"]\n[BlackElo \"2767\"]\n[BlackTitle \"IM\"]\n[TimeControl \"300+0\"]\n[Variant \"Standard\"]\n[Termination \"Normal\"]\n[Annotator \"https://lichess.org/@/NaSil\"]\n[GameId \"oj3PlZ6Q\"]\n[ECO \"B33\"]\n[Opening \"Sicilian Defense: Lasker-Pelikan Variation\"]\n[StudyName \"Game Of The Month - April 2025\"]\n[ChapterName \"Ceburashka - littleplotkin\"]\n[ChapterURL \"https://lichess.org/study/dnp96Pfx/N9EOybPh\"]\n[Orientation \"white\"]\n\n{ A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!\n\nCongratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.\n\nEnjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) 6. Nb3 ( 6. Nf3 Bb4 $1 $10 { After Black develops their so called \"bad bishop\", they can eventually play ...d6 or even the desired ...d5 if possible. The reason behind 6. Ndb5 is to keep Bf8 behind the pawn chain after 6...d6. } ) ( 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } 6... Bc5 $1 { Black is ready to play ...d6 next with an active \"bad bishop\". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } ) ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bb4 $1 $10 { [%cal Gd6d5,Gd7d5,Rd7d6] } 1-0\n";
10
- export declare const PGN_bad_2 = "\n[Event \"Rated blitz tournament https://lichess.org/tournament/spring25\"]\n[Site \"https://lichess.org/oj3PlZ6Q\"]\n[Date \"2025.04.26\"]\n[Round \"?\"]\n[White \"Ceburashka\"]\n[Black \"littleplotkin\"]\n[Result \"1-0\"]\n[WhiteElo \"2356\"]\n[BlackElo \"2767\"]\n[BlackTitle \"IM\"]\n[TimeControl \"300+0\"]\n[Variant \"Standard\"]\n[Termination \"Normal\"]\n[Annotator \"https://lichess.org/@/NaSil\"]\n[GameId \"oj3PlZ6Q\"]\n[ECO \"B33\"]\n[Opening \"Sicilian Defense: Lasker-Pelikan Variation\"]\n[StudyName \"Game Of The Month - April 2025\"]\n[ChapterName \"Ceburashka - littleplotkin\"]\n[ChapterURL \"https://lichess.org/study/dnp96Pfx/N9EOybPh\"]\n[Orientation \"white\"]\n\n{ A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!\n\nCongratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.\n\nEnjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bc5 $1 { Black is ready to play ...d6 next with an active \"bad bishop\". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } 1-0";
11
- export declare const PGN_bad_3 = "[Event \"Rated blitz tournament https://lichess.org/tournament/spring25\"]\n[Site \"https://lichess.org/oj3PlZ6Q\"]\n[Date \"2025.04.26\"]\n[Round \"?\"]\n[White \"Ceburashka\"]\n[Black \"littleplotkin\"]\n[Result \"1-0\"]\n[WhiteElo \"2356\"]\n[BlackElo \"2767\"]\n[BlackTitle \"IM\"]\n[TimeControl \"300+0\"]\n[Variant \"Standard\"]\n[Termination \"Normal\"]\n[Annotator \"https://lichess.org/@/NaSil\"]\n[GameId \"oj3PlZ6Q\"]\n[ECO \"B33\"]\n[Opening \"Sicilian Defense: Lasker-Pelikan Variation\"]\n[StudyName \"Game Of The Month - April 2025\"]\n[ChapterName \"Ceburashka - littleplotkin\"]\n[ChapterURL \"https://lichess.org/study/dnp96Pfx/N9EOybPh\"]\n[Orientation \"white\"]\n\n{ A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!\n\nCongratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.\n\nEnjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Be7 ( 6... Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) ) 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bc5 $1 { Black is ready to play ...d6 next with an active \"bad bishop\". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } 1-0\n";
@@ -1,126 +0,0 @@
1
- /**
2
- * https://lichess.org/study/dnp96Pfx/N9EOybPh
3
- */
4
- export const PGN = `
5
- [Event "Rated blitz tournament https://lichess.org/tournament/spring25"]
6
- [Site "https://lichess.org/oj3PlZ6Q"]
7
- [Date "2025.04.26"]
8
- [White "Ceburashka"]
9
- [Black "littleplotkin"]
10
- [Result "1-0"]
11
- [WhiteElo "2356"]
12
- [BlackElo "2767"]
13
- [BlackTitle "IM"]
14
- [TimeControl "300+0"]
15
- [Variant "Standard"]
16
- [Termination "Normal"]
17
- [Annotator "https://lichess.org/@/NaSil"]
18
- [GameId "oj3PlZ6Q"]
19
- [ECO "B33"]
20
- [Opening "Sicilian Defense: Lasker-Pelikan Variation"]
21
- [StudyName "Game Of The Month - April 2025"]
22
- [ChapterName "Ceburashka - littleplotkin"]
23
- [ChapterURL "https://lichess.org/study/dnp96Pfx/N9EOybPh"]
24
- [Orientation "white"]
25
-
26
- { A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!
27
-
28
- Congratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.
29
-
30
- Enjoy! }
31
- 1. e4 { [%clk 0:05:00] } 1... c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } 2... Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } 3... cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } 4... Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } 5... e5 { [%clk 0:02:27] } (5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. }) 6. Ndb5! { This move is almost the only respectable move in this position and yet one of the most instructive maneuvers in the Sicilian Defense, at least for me!
32
- If you see this move for the first time, you might wonder why White wants their opponent to play 6...d6 while their knight will eventually get kicked away and end up on the edge of the board, namely on the a3 square. In order to understand what is going on we should check the alternatives. } { [%cal Gb5d6] [%clk 0:04:52] } (6. Nb3 Bb4! $10 { [%cal Gd6d5,Gd7d5,Rd7d6] }) (6. Nf3 Bb4! $10 { After Black develops their so called "bad bishop", they can eventually play ...d6 or even the desired ...d5 if possible. The reason behind 6. Ndb5 is to keep Bf8 behind the pawn chain after 6...d6. }) (6. Nde2!? { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } 6... Bc5! { Black is ready to play ...d6 next with an active "bad bishop". } { [%cal Gd8b6] } (6... Bb4 7. a3! { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] }) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] }) (6. Nf5!? { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5! { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6! $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. }) 6... Bc5!? { An obscure sideline in the Sveshnikov Sicilian, also known as Lasker-Pelikan Variation of the Sicilian Defense, which will eventually transpose into the ...e6 Sicilian noted at the 5th move above. It might be a practical choice in blitz to get out of opening theory as early as possible. } { [%clk 0:02:26] } (6... d6 { is by far the main line. } { [%csl Rf8] } 7. Bg5 (7. Nd5 { a modern approach which became popular after Fabiano Caruana used it in the World Chess Championship match against Magnus Carlsen in 2018. }) 7... a6 8. Na3 { [%csl Gd5][%cal Ga3c4,Rc4e3] } 8... b5 { It seems that White has ended up with their knight on the a3-square, losing 2 tempos playing with it. However, Black only made pawn moves in the meantime, and White might eventually target the a6-b5 pawn chain, creating weaknesses in Black's camp, by playing a4 or c4. } { [%csl Ra3,Gc4][%cal Gb5b4] }) 7. Nd6+ { Even if this move looks like the most obvious follow-up, Stockfish considers } { [%clk 0:04:50] } (7. Be3! { as the best move, since our beloved silicon monster can clearly foresee and evaluate the following sequence in White's favor. } 7... d6! (7... Bxe3 8. Nd6+ { This intermediate move is the point of the previous move. } 8... Ke7 9. fxe3 $18 { Stockfish considers this position as winning because Black's king remains in the center and the White forces will join the action in a couple of moves. } { [%csl Re7,Rf7][%cal Gf1c4,Gd1d2,Ge1c1] }) 8. Bxc5 dxc5 9. Qxd8+ Kxd8 10. O-O-O+ { White has a clear initiative in this queenless middlegame position. For example: } 10... Ke7 11. Nd5+! $146 { Yes, a novelty! An important shot creating a very strong passer as an attacking unit against Black's king. It requires a precise follow-up as White's d6-pawn might be weak if White's initiative fizzles out. } 11... Nxd5 12. exd5 Nd4 13. d6+ Kd8 { Otherwise White will play Nc7, c3, and d7, winning. } (13... Kf6 14. Nc7 { Showcasing the strength of the passed d-pawn with the following sequence. } 14... Rb8 15. c3 Ne6 16. d7 Nxc7 17. d8=B+ { I like how Stockfish considers promoting the pawn into a bishop is equal to promoting it into a queen. } 17... Rxd8 18. Rxd8 $18) 14. Re1 $36 { A rather forced and interesting line. I hope I could try this line in practice if I have the chance to play against this line, and I would like to encourage the readers to do so as well! } { [%cal Gf2f4,Bb5d4,Be1e7] }) 7... Ke7! { A bold move but the only one, as after } { [%clk 0:02:25] } (7... Bxd6?! 8. Qxd6 $16 { White is much better with the blockade over the d6 and d5 squares and the bishop pair. Stockfish already considers this position as winning for White. }) 8. Nf5+ { [%clk 0:04:49] } (8. Nxc8+ { Logical to capture the valuable bishop at the cost of spending a few tempos with the knight in doing so. } 8... Rxc8 9. Bc4 Kf8 10. O-O h6 { [%csl Gg5][%cal Yc1g5] } 11. Kh1 { [%cal Gf2f4,Rc5g1] } 11... Ne7 12. f4 $40 { White has the bishop pair and Black's king is in a somewhat uncomfortable situation. } { [%csl Rf8][%cal Gf1f7,Gc4f7] }) 8... Kf8 { [%clk 0:02:24] } 9. Bg5 { It's a very well-known idea to exchange the pieces controlling the d5-square. We transposed back into the line mentioned at the 5th move. At the expense of developing their dark-squared bishop outside of the pawn chain, Black lost their castling rights. } { [%csl Gd5] [%clk 0:04:43] } 9... h6 { [%clk 0:02:17] } (9... d6 { This is sort of the "main" line according to the Masters Database. One recent example from GM practice: } { [%csl Yf5,Be6][%cal Gc8e6] } 10. Ne3 { [%csl Bd5][%cal Be3d5,Bc3d5] } 10... h6 11. Bxf6 { White gave up their "good bishop" in order to increase control over the d5-square. } 11... Qxf6 12. Bc4 { [%csl Gd5,Gc4,Gc3,Ge3,Gd1][%cal Ye3d5,Yc3d5,Bc4d5,Bd1d5] } 12... Be6 (12... Bxe3? 13. fxe3 $40 { [%cal Gf1f7,Yh1f1,Bd1d6] }) 13. O-O Kg8 { [%cal Bg8h7] } 14. Ncd5 Qd8 (14... Bxd5 15. Nxd5 Qd8 16. c3 Kh7 $16 { White has the better structure, better minor pieces, and a safer king in this middlegame with opposite-colored bishops. }) 15. c3 $14 { Huschenbeth, N. - Rakotomaharo, Fy Antenaina, 1-0, FIDE World Cup 2023, https://lichess.org/b4xGV3WX } { [%csl Yd4] }) 10. Bxf6 { [%clk 0:04:37] } 10... Qxf6 { [%clk 0:02:15] } 11. Nd5 { [%clk 0:04:27] } 11... Qd8 { [%clk 0:02:10] } 12. c3 { White will try to put pressure on Black's d-pawn and control the d5-square. Meanwhile, Black will try to play around those squares on the queenside with the minority attack (a5, b5, b4) or go for kingside play by means of ...f5. The latter plan is harder to achieve compared to the usual Sicilian Svehnikov due to Black's king position. } { [%csl Gd4,Yc6][%cal Bb2b4,Gc3d4] [%clk 0:04:20] } 12... a5 { Preventing b2-b4 but weakening the b5-square in doing so, which might make it more difficult to arrange the minority attack (b7-b5) on the queenside. } { [%csl Gb4,Rb5] [%clk 0:02:06] } 13. Qd2! { The most aggresive idea and probably the best one! White would still be better in case of } { [%cal Ge1c1] [%clk 0:04:18] } (13. Bc4 d6 14. O-O g6 15. Nfe3 Kg7 $14 { but Black's task might be relatively easier preparing the usual Sveshnikov counterplay with ...f5. }) 13... d6 { [%clk 0:02:04] } 14. O-O-O { It was a very good decision by White to create an opposite-sides castling situation, which forces both players to play on the opposite wings. } { [%clk 0:03:57] } 14... g6 { [%cal Bg6f5,Gf8g7] [%clk 0:02:00] } (14... Bxf5 15. exf5 { Black logically tries to avoid this exchange because White would dominate the light squares and have a favorable attacking position due to the fact that "opposite-colored bishops favor the attacker". } { [%csl Rf8][%cal Gf5f6,Gf2f4,Gf1c4,Gg2g4] }) 15. Nfe3 { [%clk 0:03:56] } 15... Be6 { [%clk 0:01:58] } 16. Kb1 { [%clk 0:03:52] } 16... Kg7 { The game has developed very logically up to this point. It seems that Black should act on the queenside, while White can attack on the kingside. } { [%cal Gb7b5,Gb5b4,Gf2f4,Gh2h4] [%clk 0:01:54] } 17. f3 { A rather slow approach in a situation where every tempo is very important. This move makes the f4-push less attractive and this loss of time might give Black the upper hand with their queenside initiative. A more aggressive pawn thrust might have been } { [%clk 0:03:47] } (17. h4 { [%csl Gh5][%cal Gh4h5] } 17... Rb8 { [%csl Gb5][%cal Gb7b5] } (17... h5 18. g3 { [%csl Gf4][%cal Gf2f4] } 18... Rb8 { [%cal Gb7b5] } 19. f4 $40 { Showcasing that White might have needed the f4-push as in the game. } { [%cal Gf4f5] }) 18. h5 b5 (18... g5 19. Nf5+ $40) 19. f4 $13 { Anything is possible in this messy position. } { [%cal Gf4f5] }) 17... a4 { Even though Black should push the queenside pawns to open up lines against White's king, Black's last move makes it more difficult to achieve the b5-b4 push after White's next move. } { [%clk 0:01:51] } (17... Rb8! { would be more direct. } { [%cal Gb7b5] }) 18. a3 { Securing the b4-square and making it impossible for Black to play ...b5-b4, but weakening the light squares as well. } { [%csl Rb4][%cal Rb7b5,Rb5b4] [%clk 0:03:45] } 18... Qa5 { [%clk 0:01:47] } (18... Bxe3! { Stockfish suggests this move, intending counterplay on the light squares, and eventually preparing ...d6-d5. } 19. Nxe3 (19. Qxe3 Ra5 20. Bc4 Ne7 { [%csl Gd5][%cal Ra5d5,Ye7d5,Be6d5] }) 19... Bb3 20. Re1 { [%csl Gc4][%cal Gf1c4] } 20... Na5! $132 $40 { This is a very instructive concept! Black gains more control over the light squares, preventing Bc4 and preparing the ...d5-push. } { [%csl Yc4,Gd5][%cal Bd6d5,Ga8c8,Gc8c5,Gd8d7,Gd7e6,Gh8d8] }) 19. Bc4 { [%clk 0:03:44] } 19... b5 { [%clk 0:01:45] } 20. Ba2 { [%clk 0:03:42] } 20... Rhd8 { [%clk 0:01:43] } 21. h4! { It's time to attack as White has secured the central squares and stopped Black's offensive on the queenside. } { [%clk 0:03:37] } 21... Qa7 { [%clk 0:01:36] } 22. Rde1 { [%clk 0:03:18] } (22. h5 { would be more direct. } { [%cal Yd2h6,Bh1h6] }) 22... Ne7 { Black feels they have no choice but to remove the monster on d5. } { [%clk 0:01:32] } 23. f4 { In hindsight, Black might use this moment to give up their strategically bad bishop for one of White's knights. } { [%csl Gh5,Gf5][%cal Gf4f5,Gh4h5] [%clk 0:03:08] } (23. h5 g5 { Hence the text move as White is intending to play h5 on the next move without allowing ...g5. }) 23... exf4 { [%clk 0:01:25] } (23... Bxe3 { As on the 18th move, Black can get rid of the dark-squared bishop. } 24. Nxe3 Bxa2+ 25. Kxa2 exf4 26. Nc2 { [%cal Gd2f4] } (26. Nd5? Nxd5 27. Qxd5 Qc5 $17) 26... Qc5 $14 { With a series of exchanges, Black managed to get rid of White's active minor pieces, reduced White's attacking potential, and eventually centralized their queen. Black can put up a good fight in this complicated position. } { [%cal Gc5e5] }) 24. Nxf4 { [%clk 0:03:07] } 24... Bxa2+ { [%clk 0:01:24] } 25. Kxa2 { [%clk 0:03:06] } 25... Re8 { [%cal Ge8e4] [%clk 0:01:15] } (25... Bxe3! { It was the last call to make this exchange! } 26. Rxe3 $14 { Even though White is structurally better and has a safer king, Black has nice control over the central squares. } { [%csl Ge5,Gc5,Yd5] }) 26. Ned5! { The right knight! } { [%clk 0:02:52] } (26. Nfd5 Bxe3! { The text move avoids this exchange. }) 26... Nxd5 { [%clk 0:01:13] } 27. Nxd5 { Now this position looks like a nice illustration of a good knight vs. bad bishop scenario. Even though Black's bishop is not such a bad piece, it has little to do in terms of attacking or defensive purposes. Meanwhile, White's knight is a monster! } { [%csl Bc5,Gd5] [%clk 0:02:49] } 27... Re6 { Black targets the weak pawn on e4 by doubling the rooks and brings pieces closer to their own king. } { [%csl Ge4][%cal Ra8e8,Ge6e4] [%clk 0:01:09] } 28. Rhf1! { The move itself might not deserve an exclamation mark, but this is the first move of the killer rook! } { [%clk 0:02:46] } 28... Rae8 { [%clk 0:01:07] } 29. h5! { Always a useful strategy: softening up the squares around the opponent's king. White sacrifices the e4-pawn to open up lines. } { [%clk 0:02:37] } 29... g5 { Black decides to keep things closed. } { [%csl Rf5] [%clk 0:01:06] } (29... Rxe4 30. Rxe4 Rxe4 31. hxg6 fxg6 32. Qd3! { [%csl Gf6,Gf3][%cal Gf1f6,Rd3g6,Yd3f3] } 32... Re6 33. Qf3! $40 { White doesn't feel the pawn deficit as their attack is very strong. } { [%cal Gf3f8] }) 30. Rf5! { White immediately seizes the opportunity to exploit the weakness created by Black's previous move. White wants to double the rooks on the f-file and targets the g5-pawn. } { [%csl Gf1,Gg5][%cal Ge1f1] [%clk 0:02:19] } 30... Rxe4? { Black's position was critical and this is the losing move! } { [%clk 0:00:55] } (30... Re5! { Preventing White's next move would be better. }) 31. Rxg5+!! { A nice illustration of the queen and knight tandem as an attacking unit. } { [%clk 0:02:07] } 31... Kf8 $7 { [%clk 0:00:43] } (31... hxg5 32. Qxg5+ Kf8 (32... Kh7 33. Nf6+ Kh8 34. Qh6#) 33. Qh6+ Kg8 34. Nf6#) 32. Rg8+! { Not the only move but a classy one! } { [%clk 0:01:23] } 32... Kxg8 { [%clk 0:00:41] } 33. Qxh6 { Even though this move doesn't come with check, it's still devastating! } { [%csl Gf6][%cal Gd5f6] [%clk 0:01:22] } 33... f5 { The only move that doesn't loose material immediately. } { [%clk 0:00:33] } (33... R8e6 34. Qg5+ Kf8 (34... Kh7 35. Rxe4 $18 { [%cal Gd5f6] }) 35. Rxe4 Rxe4 36. Qh6+ Ke8 37. Nf6+ Ke7 38. Nxe4 $18) 34. Rxe4 { [%clk 0:01:09] } 34... Rxe4 { [%clk 0:00:31] } (34... fxe4 35. Nf6+ Kf7 36. Qg6+ Ke7 37. Nxe8 $18 e3 38. h6 { Even this is winning. Although Black queens the pawn first, White wins due to the exposed king. } 38... e2 39. h7 e1=Q 40. h8=Q $18) 35. Nf6+ { [%clk 0:01:02] } 35... Kf7 { [%clk 0:00:29] } 36. Qg6+ { [%clk 0:01:02] } 36... Ke7 { [%clk 0:00:26] } 37. h6 { [%clk 0:00:50] } (37. Nxe4 fxe4 38. h6 $18 { Stockfish claims White is winning as Black's bishop cannot control the h8-square in time. }) 37... Re6 { [%clk 0:00:22] } (37... Qa8 38. h7 Rh4 39. Qg7+ Ke6 40. Qg8+ $18) 38. Nd5+ { [%clk 0:00:42] } 38... Kd7 { [%clk 0:00:21] } 39. Qf7+ { [%clk 0:00:39] } 39... Kc6 { [%clk 0:00:21] } 40. Qxe6 $18 { And rest is a matter of technique as the famous saying goes... } { [%clk 0:00:38] } 40... Qh7 { [%clk 0:00:21] } 41. Ne7+ { [%clk 0:00:37] } 41... Kb6 { [%clk 0:00:20] } 42. Nxf5 { [%clk 0:00:36] } 42... Qh8 { [%clk 0:00:17] } 43. Nxd6 { [%clk 0:00:32] } 43... Bxd6 { The knight is eliminated by the bishop, but 25 moves too late. } { [%clk 0:00:16] } 44. Qxd6+ { Queen endgames are known to be very difficult, but this is easily winning for White! } { [%clk 0:00:32] } 44... Ka5 { [%clk 0:00:16] } 45. Qe6 { [%clk 0:00:32] } 45... Qf8 { [%clk 0:00:14] } (45... Qh7 46. g4 $18) 46. h7 { [%clk 0:00:30] } 46... Qg7 { [%clk 0:00:14] } 47. Qg8 { 1-0 Black resigns. } { [%clk 0:00:29] } 1-0
33
- `;
34
- /**
35
- * https://lichess.org/study/dnp96Pfx/N9EOybPh
36
- */
37
- export const PGN_small = `
38
- [Variant "From Position"]
39
- [FEN "rnbqkbnr/pppppppp/8/8/3PP3/8/PP3PPP/RNBQKBNR w KQkq - 0 1"]
40
-
41
- 1. e5 d6
42
- `;
43
- export const PGN_bad = `[Event "Rated blitz tournament https://lichess.org/tournament/spring25"]
44
- [Site "https://lichess.org/oj3PlZ6Q"]
45
- [Date "2025.04.26"]
46
- [Round "?"]
47
- [White "Ceburashka"]
48
- [Black "littleplotkin"]
49
- [Result "1-0"]
50
- [WhiteElo "2356"]
51
- [BlackElo "2767"]
52
- [BlackTitle "IM"]
53
- [TimeControl "300+0"]
54
- [Variant "Standard"]
55
- [Termination "Normal"]
56
- [Annotator "https://lichess.org/@/NaSil"]
57
- [GameId "oj3PlZ6Q"]
58
- [ECO "B33"]
59
- [Opening "Sicilian Defense: Lasker-Pelikan Variation"]
60
- [StudyName "Game Of The Month - April 2025"]
61
- [ChapterName "Ceburashka - littleplotkin"]
62
- [ChapterURL "https://lichess.org/study/dnp96Pfx/N9EOybPh"]
63
- [Orientation "white"]
64
-
65
- { A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!
66
-
67
- Congratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.
68
-
69
- Enjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) 6. Nb3 ( 6. Nf3 Bb4 $1 $10 { After Black develops their so called "bad bishop", they can eventually play ...d6 or even the desired ...d5 if possible. The reason behind 6. Ndb5 is to keep Bf8 behind the pawn chain after 6...d6. } ) ( 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } 6... Bc5 $1 { Black is ready to play ...d6 next with an active "bad bishop". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } ) ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bb4 $1 $10 { [%cal Gd6d5,Gd7d5,Rd7d6] } 1-0
70
- `;
71
- export const PGN_bad_2 = `
72
- [Event "Rated blitz tournament https://lichess.org/tournament/spring25"]
73
- [Site "https://lichess.org/oj3PlZ6Q"]
74
- [Date "2025.04.26"]
75
- [Round "?"]
76
- [White "Ceburashka"]
77
- [Black "littleplotkin"]
78
- [Result "1-0"]
79
- [WhiteElo "2356"]
80
- [BlackElo "2767"]
81
- [BlackTitle "IM"]
82
- [TimeControl "300+0"]
83
- [Variant "Standard"]
84
- [Termination "Normal"]
85
- [Annotator "https://lichess.org/@/NaSil"]
86
- [GameId "oj3PlZ6Q"]
87
- [ECO "B33"]
88
- [Opening "Sicilian Defense: Lasker-Pelikan Variation"]
89
- [StudyName "Game Of The Month - April 2025"]
90
- [ChapterName "Ceburashka - littleplotkin"]
91
- [ChapterURL "https://lichess.org/study/dnp96Pfx/N9EOybPh"]
92
- [Orientation "white"]
93
-
94
- { A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!
95
-
96
- Congratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.
97
-
98
- Enjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bc5 $1 { Black is ready to play ...d6 next with an active "bad bishop". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } 1-0`;
99
- export const PGN_bad_3 = `[Event "Rated blitz tournament https://lichess.org/tournament/spring25"]
100
- [Site "https://lichess.org/oj3PlZ6Q"]
101
- [Date "2025.04.26"]
102
- [Round "?"]
103
- [White "Ceburashka"]
104
- [Black "littleplotkin"]
105
- [Result "1-0"]
106
- [WhiteElo "2356"]
107
- [BlackElo "2767"]
108
- [BlackTitle "IM"]
109
- [TimeControl "300+0"]
110
- [Variant "Standard"]
111
- [Termination "Normal"]
112
- [Annotator "https://lichess.org/@/NaSil"]
113
- [GameId "oj3PlZ6Q"]
114
- [ECO "B33"]
115
- [Opening "Sicilian Defense: Lasker-Pelikan Variation"]
116
- [StudyName "Game Of The Month - April 2025"]
117
- [ChapterName "Ceburashka - littleplotkin"]
118
- [ChapterURL "https://lichess.org/study/dnp96Pfx/N9EOybPh"]
119
- [Orientation "white"]
120
-
121
- { A high level clash where IM littleplotkin playing Black berserked and played with half their time, thus seeking complications starting from the early opening stage of the game. The 2025 April Game Of The Month witnesses a very instructive attacking game played in the Sveshnikov Sicilian with many deep points!
122
-
123
- Congratulations to Ceburashka on combining nice strategic play with a cute attacking finish in one of the typical structures of the Sicilian Defense.
124
-
125
- Enjoy! } 1. e4 { [%clk 0:05:00] } c5 { [%clk 0:02:30] } 2. Nf3 { [%clk 0:04:59] } Nc6 { [%clk 0:02:29] } 3. d4 { [%clk 0:04:59] } cxd4 { [%clk 0:02:29] } 4. Nxd4 { [%clk 0:04:58] } Nf6 { [%clk 0:02:27] } 5. Nc3 { [%clk 0:04:53] } e5 { [%clk 0:02:27] } ( 5... e6 6. Ndb5 Be7 ( 6... Bc5 { Please compare this line with the game continuation. } 7. Nd6+ Ke7 8. Bf4 e5 9. Nf5+ Kf8 10. Bg5 { with a transposition to our game. } ) ) 6. Nde2 $5 { A rare approach which gained some popularity recently. White takes the sting out of 6...Bb4 with this move, but } ( 6. Nf5 $5 { White prevents Black's dark-squared bishop from developing and invites a forcing sequence. } 6... d5 $1 { [%cal Rc8f5] } 7. exd5 Bxf5 8. dxc6 bxc6 $1 $13 { with a messy theoretical battle where Black's position is OK according to theory. Piece activity fully compensates the pawn weaknesses in Black's camp. } ) 6... Bc5 $1 { Black is ready to play ...d6 next with an active "bad bishop". } { [%cal Gd8b6] } ( 6... Bb4 7. a3 $1 { the point of 5.Nde2 } { [%cal Ge2c3,Rb4c3] } ) 7. Ng3 { This rather fresh approach was seen in GM practice, but Black doesn't have a lot to worry about so far. } { [%csl Rd3,Rc4][%cal Gf1d3,Rd3c4] } 1-0
126
- `;