react-chessboard-ui 0.1.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.
@@ -0,0 +1,383 @@
1
+ export declare type FigureType = 'pawn' | 'bishop' | 'knigts' | 'rook' | 'queen' | 'king';
2
+ export declare type FigureColor = 'white' | 'black';
3
+ export declare type CellPos = [number, number];
4
+ export interface Figure {
5
+ type: FigureType;
6
+ color: FigureColor;
7
+ touched?: boolean;
8
+ position?: CellPos;
9
+ }
10
+ export declare type CellColor = 'white' | 'black';
11
+ export interface Cell {
12
+ figure?: Figure;
13
+ beated?: boolean;
14
+ }
15
+ export interface ChessBoardConfig {
16
+ cellWhiteBg: string;
17
+ cellBlackBg: string;
18
+ cellSelectedBg: string;
19
+ cellSize: number;
20
+ figures: {
21
+ black: {
22
+ [figureType: string]: string;
23
+ };
24
+ white: {
25
+ [figureType: string]: string;
26
+ };
27
+ };
28
+ }
29
+ export interface MoveNotation {
30
+ move: string;
31
+ figure: Figure;
32
+ stateFEN: string;
33
+ }
34
+ export declare type MoveDirection = 'top' | 'right' | 'bottom' | 'left' | 'top-right' | 'bottom-right' | 'bottom-left' | 'top-left';
35
+ export declare type MoveType = 'move' | 'beat' | 'check' | 'double-check' | 'mat' | 'transform' | '0-0' | '0-0-0';
36
+ export declare type GameResultType = 'mat' | 'pat' | 'draw' | 'timeout' | 'surrender' | undefined;
37
+ export interface GameResult {
38
+ resultType: GameResultType;
39
+ winColor?: FigureColor;
40
+ }
41
+ export declare type PawnMoveType = 'first' | 'default' | 'attack';
42
+ export interface MoveByPawn {
43
+ pos: CellPos;
44
+ typeMove: PawnMoveType;
45
+ }
46
+ export interface MoveData {
47
+ from: CellPos;
48
+ to: CellPos;
49
+ figure: Figure;
50
+ type?: MoveType;
51
+ FEN?: string;
52
+ timeWhite?: number;
53
+ timeBlack?: number;
54
+ }
55
+ export interface BeatedCountsData {
56
+ pawn: number;
57
+ knigts: number;
58
+ bishop: number;
59
+ rook: number;
60
+ queen: number;
61
+ }
62
+ export declare type CastlingType = '0-0' | '0-0-0';
63
+ export declare type OnCheckPossible = (state: Cell[][], figurePos: CellPos, targetPos: CellPos) => boolean;
64
+ declare const FIGURES_COUNTS: {
65
+ PAWNS_COUNT: number;
66
+ KNIGHTS_COUNT: number;
67
+ BISHOPS_COUNT: number;
68
+ ROOKS_COUNT: number;
69
+ QUEENS_COUNT: number;
70
+ KINGS_COUNT: number;
71
+ };
72
+ export declare class JSChessEngine {
73
+ /**
74
+ * Возвращает возможные ходы фигуры
75
+ * @param state состояние доски
76
+ * @param param1 позиция фигуры, которой хотим сыграть
77
+ * @param linesWithCheck линии по которым есть шах на союзного короля
78
+ * @param revese перевернута ли доска
79
+ */
80
+ static getNextMoves: (state: Cell[][], [i, j]: CellPos, linesWithCheck: CellPos[][], revese?: boolean) => CellPos[];
81
+ /**
82
+ * Возвращает первернутое состояние доски
83
+ * @param state состояние доски
84
+ */
85
+ static reverseChessBoard: (state: Cell[][]) => Cell[][];
86
+ /**
87
+ * Обновляет данные хода для того чтобы
88
+ * можно было применить ход к перевернутой доске
89
+ * @param moveData данные хода
90
+ * @param boardSize размер доски
91
+ */
92
+ static reverseMove: (moveData: MoveData, boardSize: number) => MoveData;
93
+ /**
94
+ * Возвращет перевернутое значение для начала и конца хода фигуры
95
+ * Использовать при подсветке хода если доска перевернута
96
+ * @param moveVector Координаты начала и конца хода фигуры
97
+ * @param boardSize размер доски
98
+ */
99
+ static reverseMoveVector: (moveVector: CellPos[], boardSize?: number) => number[][];
100
+ /**
101
+ * Проверка на то что позиция находится в пределах доски
102
+ * @param state состояние доски
103
+ * @param pos проверяемая позиция
104
+ */
105
+ static checkInBorderBoard: (state: Cell[][], pos: CellPos) => boolean;
106
+ /**
107
+ * Возвращает цвет фигуры
108
+ * @param state состояние доски
109
+ * @param pos позиция фигуры
110
+ */
111
+ static getFigureColor: (state: Cell[][], pos: CellPos) => FigureColor;
112
+ /**
113
+ * Возвращает тип фигры
114
+ * @param state состояние доски
115
+ * @param pos позиция фигуры
116
+ */
117
+ static getFigureType: (state: Cell[][], pos: CellPos) => FigureType;
118
+ /**
119
+ * Проверка находится ли в указанной клетке вражеская фигура
120
+ * @param state состояние доски
121
+ * @param pos положение фигуры союзного цвета
122
+ * @param target положение фигуры - цели
123
+ */
124
+ static checkEnemy: (state: Cell[][], pos: CellPos, target: CellPos) => boolean;
125
+ /**
126
+ * Проверка находится ли в указанной клетке союзная фигура
127
+ * @param state состояние доски
128
+ * @param pos положение фигуры союзного цвета
129
+ * @param target положение фигуры - цели
130
+ */
131
+ static checkTeammate: (state: Cell[][], pos: CellPos, target: CellPos) => boolean;
132
+ /**
133
+ * Проверка на то что фигура-цель вражеский король
134
+ * @param state состояние доски
135
+ * @param pos положение фигуры союзного цвета
136
+ * @param target положение фигуры - цели
137
+ */
138
+ static checkEnemyKing: (state: Cell[][], pos: CellPos, target: CellPos) => boolean;
139
+ /**
140
+ * Проверяет битая ли клетка, клетка становится битой после того
141
+ * как пешка сделает ход на две клетки веперед
142
+ * @param state состояние доски
143
+ * @param target позиция проверяемой клетки
144
+ */
145
+ static checkBeatedCell: (state: Cell[][], target: CellPos) => boolean;
146
+ /**
147
+ * Возвращает есть ли фигура в указаной позиции
148
+ * @param state состояние доски
149
+ * @param pos проверяемая позиция
150
+ * @returns
151
+ */
152
+ static hasFigure: (state: Cell[][], pos: CellPos) => boolean;
153
+ /**
154
+ * Проверяет дальнобойная ли фигура
155
+ * слон, ладья или ферзь
156
+ * @param state состояние доски
157
+ * @param figurePos позиция фигуры
158
+ */
159
+ static checkFigureIsLongRange: (state: Cell[][], figurePos: CellPos) => boolean;
160
+ /**
161
+ * Возвращает количество вражеских которые можно атаковать (кроме короля) фигур из массива позиций
162
+ * @param state состояние доски
163
+ * @param figurePos позиция фигуры
164
+ * @param positions проверяемые позиции
165
+ */
166
+ static getCountEnemys: (state: Cell[][], figurePos: CellPos, positions: CellPos[]) => number;
167
+ /**
168
+ * Возвращает позицию союзного короля
169
+ * @param state состояние доски
170
+ * @param figurePos позиция фигуры
171
+ */
172
+ static getTeammateKingPos: (state: Cell[][], figurePos: CellPos) => CellPos;
173
+ /**
174
+ * Возвращает все клетки с вражескими фигурами
175
+ * @param state состояние доски
176
+ * @param pos позиция союзной фигуры
177
+ */
178
+ static getAllEnemysPositions: (state: Cell[][], pos: CellPos) => CellPos[];
179
+ /**
180
+ * Возвращает позиции фигур-союзников по цвету
181
+ * @param state состояние доски
182
+ * @param color цвет по которому ищем фигуры-союзники
183
+ */
184
+ static getAllTeammatesPositionsByColor: (state: Cell[][], color: FigureColor) => CellPos[];
185
+ /**
186
+ * Полная проверка возможности хода для фигур: pawn, knigt, bishop, rook, queen
187
+ * @param state состояния доски
188
+ * @param pos положение фигуры союзного цвета
189
+ * @param target позиция клетки - цели
190
+ * @returns
191
+ */
192
+ static checkPossibleMoveTo: (state: Cell[][], pos: CellPos, target: CellPos) => boolean;
193
+ /**
194
+ * Прооверяет возможность атаки клетки
195
+ * Если в клетке вражеская фигура, считает ее атакованной
196
+ * Необходима для проверки нахождения вражеского короля за атакованной фигурой
197
+ * @param state состояние доски
198
+ * @param figurePos позиция фигураы
199
+ * @param target клетака под атакой
200
+ */
201
+ static checkPossibleAttackTo: (state: Cell[][], figurePos: CellPos, target: CellPos) => boolean;
202
+ /**
203
+ * Проверка находится ли поле под атакой вражеской фигуры
204
+ * (Используется для расчета возможных ходов для короля)
205
+ * @param state состояние доски
206
+ * @param pos позиция фигуры
207
+ * @param target проверяемая клетка
208
+ */
209
+ static checkAttackedCell: (state: Cell[][], pos: CellPos, target: CellPos) => boolean;
210
+ /**
211
+ * Проверяет атакованные поля вражеской пешкой
212
+ * (используется для получения возможных ходово для короля)
213
+ * @param state состояние доски
214
+ * @param pos текущая позиция пешки
215
+ * @param target клетка - цель
216
+ */
217
+ static checkAttackedCellByPawn: (state: Cell[][], pos: CellPos, target: MoveByPawn) => boolean;
218
+ /**
219
+ * Проверяет находится ли позиция между атакованным королем
220
+ * и атакующей фигурой
221
+ * @param state состояние доски
222
+ * @param pos проверяемая позиция
223
+ * @param kingPos позиция союзного короля
224
+ * @param attackerPos позиция атакующей фигуры
225
+ */
226
+ static checkPosBetweenAttckerAndKing: (state: Cell[][], pos: CellPos, kingPos: CellPos, attackerPos: CellPos) => boolean;
227
+ /**
228
+ * Корректирует возможные ходы фигуры в зависимости от того находится ли
229
+ * фигура под атакой и стоит ли на линии атаки король за фигурой
230
+ * @param state состояние доски
231
+ * @param figurePos позиция фигуры
232
+ * @param possibleMoves возможные ходы фигуры
233
+ * @param linesWithCheck массив линий по которым есть шах на союзного короля
234
+ */
235
+ static correctionPossibleMoves: (state: Cell[][], figurePos: CellPos, possibleMoves: CellPos[], linesWithCheck: CellPos[][]) => CellPos[];
236
+ /**
237
+ * Возвращает всю атакованную линию дальнобойной фигурой
238
+ * @param state состояние доски
239
+ * @param figurePos позиция фигуры
240
+ * @param direction направление атаки
241
+ */
242
+ static getFullAttackedLine: (state: Cell[][], figurePos: CellPos, direction: MoveDirection) => CellPos[];
243
+ /**
244
+ * Возвращает все атакованные врагом позиции
245
+ * используется для проверки ходов короля
246
+ * @param state состояние доски
247
+ * @param figurePos позиция фигуры
248
+ * @param reverse перевернута ли доска
249
+ */
250
+ static getAllAttckedPostionsByEnemys: (state: Cell[][], figurePos: CellPos, reverse: boolean) => CellPos[];
251
+ /**
252
+ * Возвращает возможные позиция для движения по диагонали
253
+ * для Слона и Ферзя
254
+ * @param state состояние доски
255
+ * @param figurePos текущая позиция фигуры
256
+ */
257
+ static calcDiagonalMoves: (state: Cell[][], figurePos: CellPos, onCheckPossible?: OnCheckPossible, onCheckFigureInCell?: OnCheckPossible) => CellPos[];
258
+ /**
259
+ * Возвращает возможные позиция для движения по горизонтали и вертикали
260
+ * для Ладьи и Ферзя
261
+ * @param state состяние доски
262
+ * @param figurePos
263
+ * @returns
264
+ */
265
+ static calcHorizontalAndVerticalMoves: (state: Cell[][], figurePos: CellPos, onCheckPossible?: OnCheckPossible, onCheckFigureInCell?: OnCheckPossible) => CellPos[];
266
+ /**
267
+ * Возвращает возможные ходы для коня
268
+ * @param state состояние доски
269
+ * @param figurePos текущая позиция фигуры
270
+ * @returns
271
+ */
272
+ static calcKnigtsMoves: (state: Cell[][], figurePos: CellPos, onCheckPossible?: OnCheckPossible) => CellPos[];
273
+ /**
274
+ * Проверяет возможность пешки пойти на клетку - цель
275
+ * @param state состояние доски
276
+ * @param pos текущая позиция пешки
277
+ * @param target клетка - цель
278
+ * @param pawnColor цвет пешки вычисленный заранее
279
+ * @param reverse перевернута ли доска
280
+ */
281
+ static checkPossiblePawnMoveToPos: (state: Cell[][], pos: CellPos, target: MoveByPawn, pawnColor: FigureColor, reverse: boolean) => boolean;
282
+ /**
283
+ * Возвращает возможные позиции для пешки
284
+ * @param state состояние доски
285
+ * @param figurePos текущее положение пешки
286
+ * @param revese перевернута ли доска
287
+ * @returns
288
+ */
289
+ static calcPawnMoves: (state: Cell[][], figurePos: CellPos, revese: boolean, onCheckPossible?: typeof JSChessEngine.checkPossiblePawnMoveToPos | typeof JSChessEngine.checkAttackedCellByPawn) => CellPos[];
290
+ /**
291
+ * Проверяет возможна ли рокеровка
292
+ * @param state состояние доски
293
+ * @param kingPos позиция короля
294
+ * @param reverse перевенута ли доска
295
+ */
296
+ static checkPossibleCastling: (state: Cell[][], kingPos: CellPos, castlingPath: CellPos[], reverse: boolean) => boolean;
297
+ /**
298
+ * Возвращает возможные ходы для короля
299
+ * @param state состояние доски
300
+ * @param figurePos позиция короля
301
+ * @returns
302
+ */
303
+ static calcKingMoves: (state: Cell[][], figurePos: CellPos, reverse: boolean, onlyAttacks?: boolean) => CellPos[];
304
+ static getNextMovesPawn: (state: Cell[][], figurePos: CellPos, reverse: boolean) => CellPos[];
305
+ static getNextMovesBishop: (state: Cell[][], figurePos: CellPos) => CellPos[];
306
+ static getNextMovesKnigts: (state: Cell[][], figurePos: CellPos) => CellPos[];
307
+ static getNextMovesRook: (state: Cell[][], figurePos: CellPos) => CellPos[];
308
+ static getNextMovesQueen: (state: Cell[][], figurePos: CellPos) => CellPos[];
309
+ static getNextMovesKing: (state: Cell[][], figurePos: CellPos, reverse: boolean) => CellPos[];
310
+ /**
311
+ * Возвращает линии по которым есть шах вражескому королю
312
+ * @param state состояние доски
313
+ * @param activeColor цвет фигур, которые сделали ход
314
+ */
315
+ static getLinesWithCheck: (state: Cell[][], activeColor: FigureColor, reverse?: boolean) => CellPos[][];
316
+ /**
317
+ * Принимает данные о фигуре, которой сыграли
318
+ * затем обновляет и возвращает новое состояние доски
319
+ * !!! Какой-то старнный эффект если не использовать мап
320
+ * !!! Как будто происходит мутация состояния
321
+ * @param state состояние доски
322
+ * @param currentFigure фигура, которой сыграли
323
+ * @param targetPos позиция на которую перемещаем фигуру
324
+ * @param prevPos начальная позиция фигуры
325
+ * @param reverse перевернута ли доска
326
+ */
327
+ static changeState: (state: Cell[][], currentFigure: Figure, targetPos: CellPos, prevPos: CellPos, reverse: boolean) => {
328
+ updatedCells: Cell[][];
329
+ attackedPos?: CellPos;
330
+ };
331
+ /**
332
+ * Обновляет состояние с превращение пешки в фигуру
333
+ * @param state состояние доски
334
+ * @param fromPos с какой клетки сделан ход
335
+ * @param targetPos на какую клетку сделали ход
336
+ * @param transformFigure в какую фигуру превратить пешку
337
+ */
338
+ static transformPawnToFigure: (state: Cell[][], fromPos: CellPos, targetPos: CellPos, transformFigure: Figure) => Cell[][];
339
+ /**
340
+ * Возвращает плоский массив полей с фигурами
341
+ * @param state состояние доски
342
+ */
343
+ static getFieldsWithFigures: (state: Cell[][]) => Cell[];
344
+ /**
345
+ * Возвращает результат игры
346
+ * mat - Мат
347
+ * pat - Пат
348
+ * undefined - игра продолжается
349
+ * @param state состояние доски
350
+ * @param linesWithCheck линии по которым есть шахом
351
+ * @param activeColor активный цвет
352
+ */
353
+ static getGameResult: (state: Cell[][], linesWithCheck: CellPos[][], activeColor: FigureColor, reverse: boolean) => GameResult | undefined;
354
+ /**
355
+ * Возвращает количество фигур указанного типа
356
+ * @param flatState Обработанное состояние - одномерный массив клеток с фигурами одного цвета
357
+ * @param figureType тип фигуры
358
+ */
359
+ static getFiguresCountByType: (flatState: Cell[], figureType: FigureType) => number;
360
+ /**
361
+ * Возвращает информацию о количестве съеденных фигур одного цвета
362
+ * @param state состояние доски
363
+ * @param color цвет съеденных фигур
364
+ */
365
+ static getBeatedFigures: (state: Cell[][], color: FigureColor, countsConfig?: typeof FIGURES_COUNTS) => BeatedCountsData;
366
+ /**
367
+ * По последним шести позициям - трем ходам
368
+ * определяет было ли повторение позиций
369
+ * если да, то это ничья,
370
+ * Определить троекратное повторение
371
+ * можно по последним 8ми ходам
372
+ * поэтому нужно брать на сравнение массив
373
+ * length - 8
374
+ * @param fenMoves история ходов в формате FEN
375
+ */
376
+ static detectDrawByRepeatMoves(fenMoves: string[]): boolean;
377
+ /**
378
+ * Проверяет является ли ход рокеровкой
379
+ * @param move данные хода
380
+ */
381
+ static getCastlingType(move: MoveData): CastlingType | undefined;
382
+ }
383
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { Cell } from "../JSChessEngine";
2
+ export declare const INITIAL_CELLS: Cell[][];
3
+ export declare const STATE_CELLS_WITHOUT_LONG_CASTLINGS: Cell[][];
@@ -0,0 +1,49 @@
1
+ import { Cell, Figure } from './JSChessEngine';
2
+ export declare const LETTERS: string[];
3
+ export declare const FIGURES_LATTERS_NOTATIONS: {
4
+ white: {
5
+ pawn: string;
6
+ knigts: string;
7
+ bishop: string;
8
+ rook: string;
9
+ queen: string;
10
+ king: string;
11
+ };
12
+ black: {
13
+ pawn: string;
14
+ knigts: string;
15
+ bishop: string;
16
+ rook: string;
17
+ queen: string;
18
+ king: string;
19
+ };
20
+ };
21
+ export declare const LETTER_TO_FIGURE_MAP: {
22
+ [key: string]: Figure;
23
+ };
24
+ export declare const ALL_FIGURES: Figure[];
25
+ export declare const CHESS_BOARD_CONFIG: {
26
+ cellWhiteBg: string;
27
+ cellBlackBg: string;
28
+ cellSelectedBg: string;
29
+ cellSize: number;
30
+ figures: {
31
+ white: {
32
+ pawn: string;
33
+ bishop: string;
34
+ knigts: string;
35
+ rook: string;
36
+ queen: string;
37
+ king: string;
38
+ };
39
+ black: {
40
+ pawn: string;
41
+ bishop: string;
42
+ knigts: string;
43
+ rook: string;
44
+ queen: string;
45
+ king: string;
46
+ };
47
+ };
48
+ };
49
+ export declare const INITIAL_CELLS: Cell[][];
@@ -0,0 +1,3 @@
1
+ export * from './JSChessEngine';
2
+ export * from './FEN.utils';
3
+ export * from './chess.consts';
package/dist/index.css ADDED
@@ -0,0 +1,132 @@
1
+ ._3XI6H {
2
+ position: relative;
3
+ width: -moz-fit-content;
4
+ width: fit-content;
5
+ }
6
+
7
+ ._2SyRK {
8
+ position: absolute;
9
+ top: 0;
10
+ right: 0;
11
+ bottom: 0;
12
+ left: 0;
13
+ z-index: 1;
14
+ }
15
+
16
+ ._3OVc8 {
17
+ position: absolute;
18
+ top: 0;
19
+ right: 0;
20
+ bottom: 0;
21
+ left: 0;
22
+ z-index: 10;
23
+ cursor: pointer;
24
+ }
25
+
26
+ ._G0IIl {
27
+ cursor: grabbing;
28
+ }
29
+
30
+ ._3THn5 {
31
+ position: absolute;
32
+ top: 0;
33
+ right: 0;
34
+ bottom: 0;
35
+ left: 0;
36
+ z-index: 5;
37
+ }
38
+
39
+ ._3vcXe {
40
+ box-sizing: border-box;
41
+ }
42
+
43
+ ._2yJs1 {}
44
+
45
+ ._27yHq {
46
+ display: flex;
47
+ justify-content: center;
48
+ align-items: center;
49
+ }
50
+
51
+ ._UYGA_ {
52
+ border-radius: 100%;
53
+ opacity: 0.8;
54
+ }
55
+
56
+ ._2XKSc {
57
+ display: flex;
58
+ }
59
+
60
+ ._ssFQn {}
61
+
62
+ ._1407I {}
63
+
64
+ ._19mE- {
65
+ position: absolute;
66
+ display: flex;
67
+ justify-content: center;
68
+ align-items: center;
69
+ transition: all .15s ease-out;
70
+ }
71
+
72
+ ._3u_-s {
73
+ transition: none;
74
+ }
75
+
76
+ ._3SfMJ {
77
+ opacity: .4;
78
+ }
79
+
80
+ ._1cIvE {
81
+ opacity: 0;
82
+ transform: rotate(-90deg);
83
+ }
84
+
85
+ ._Zly-L {}
86
+
87
+ ._31pmr {}
88
+
89
+ ._12Bbd {
90
+ position: absolute;
91
+ width: 20px;
92
+ height: 100px;
93
+ opacity: 0.5;
94
+ z-index: 1;
95
+ }
96
+
97
+ ._1BC3I {
98
+ position: absolute;
99
+ bottom: -45px;
100
+ left: -5px;
101
+ width: 0;
102
+ height: 0;
103
+ border-top: 30px solid transparent;
104
+ border-bottom: 30px solid transparent;
105
+ border-left: 30px solid;
106
+ transform: rotate(90deg);
107
+ }
108
+
109
+ ._13OXq {
110
+ display: flex;
111
+ justify-content: center;
112
+ }
113
+
114
+ ._16zCe {
115
+ background-position: center;
116
+ background-size: cover;
117
+ cursor: pointer;
118
+ }
119
+
120
+ ._1ZGj2 {
121
+ z-index: 101;
122
+ position: absolute;
123
+ top: 0;
124
+ right: 0;
125
+ bottom: 0;
126
+ left: 0;
127
+ -webkit-backdrop-filter: blur(4px);
128
+ backdrop-filter: blur(4px);
129
+ display: flex;
130
+ justify-content: center;
131
+ align-items: center;
132
+ }
@@ -0,0 +1,2 @@
1
+ export * from './ChessBoard';
2
+ export * from './JSChessEngine';