@lichess-org/chessground 9.2.3

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 (87) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +110 -0
  3. package/assets/chessground.base.css +224 -0
  4. package/assets/chessground.brown.css +62 -0
  5. package/assets/chessground.cburnett.css +37 -0
  6. package/dist/anim.d.ts +17 -0
  7. package/dist/anim.js +99 -0
  8. package/dist/anim.js.map +1 -0
  9. package/dist/api.d.ts +28 -0
  10. package/dist/api.js +98 -0
  11. package/dist/api.js.map +1 -0
  12. package/dist/autoPieces.d.ts +3 -0
  13. package/dist/autoPieces.js +38 -0
  14. package/dist/autoPieces.js.map +1 -0
  15. package/dist/board.d.ts +25 -0
  16. package/dist/board.js +331 -0
  17. package/dist/board.js.map +1 -0
  18. package/dist/chessground.d.ts +7 -0
  19. package/dist/chessground.js +63 -0
  20. package/dist/chessground.js.map +1 -0
  21. package/dist/chessground.min.js +1 -0
  22. package/dist/config.d.ts +87 -0
  23. package/dist/config.js +64 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/drag.d.ts +20 -0
  26. package/dist/drag.js +208 -0
  27. package/dist/drag.js.map +1 -0
  28. package/dist/draw.d.ts +65 -0
  29. package/dist/draw.js +90 -0
  30. package/dist/draw.js.map +1 -0
  31. package/dist/drop.d.ts +5 -0
  32. package/dist/drop.js +31 -0
  33. package/dist/drop.js.map +1 -0
  34. package/dist/events.d.ts +4 -0
  35. package/dist/events.js +72 -0
  36. package/dist/events.js.map +1 -0
  37. package/dist/explosion.d.ts +3 -0
  38. package/dist/explosion.js +18 -0
  39. package/dist/explosion.js.map +1 -0
  40. package/dist/fen.d.ts +4 -0
  41. package/dist/fen.js +79 -0
  42. package/dist/fen.js.map +1 -0
  43. package/dist/premove.d.ts +6 -0
  44. package/dist/premove.js +57 -0
  45. package/dist/premove.js.map +1 -0
  46. package/dist/render.d.ts +4 -0
  47. package/dist/render.js +235 -0
  48. package/dist/render.js.map +1 -0
  49. package/dist/state.d.ts +100 -0
  50. package/dist/state.js +92 -0
  51. package/dist/state.js.map +1 -0
  52. package/dist/svg.d.ts +8 -0
  53. package/dist/svg.js +348 -0
  54. package/dist/svg.js.map +1 -0
  55. package/dist/sync.d.ts +8 -0
  56. package/dist/sync.js +27 -0
  57. package/dist/sync.js.map +1 -0
  58. package/dist/types.d.ts +94 -0
  59. package/dist/types.js +5 -0
  60. package/dist/types.js.map +1 -0
  61. package/dist/util.d.ts +20 -0
  62. package/dist/util.js +89 -0
  63. package/dist/util.js.map +1 -0
  64. package/dist/wrap.d.ts +3 -0
  65. package/dist/wrap.js +90 -0
  66. package/dist/wrap.js.map +1 -0
  67. package/package.json +58 -0
  68. package/src/anim.ts +139 -0
  69. package/src/api.ts +187 -0
  70. package/src/autoPieces.ts +47 -0
  71. package/src/board.ts +371 -0
  72. package/src/chessground.ts +67 -0
  73. package/src/config.ts +165 -0
  74. package/src/drag.ts +223 -0
  75. package/src/draw.ts +154 -0
  76. package/src/drop.ts +36 -0
  77. package/src/events.ts +86 -0
  78. package/src/explosion.ts +19 -0
  79. package/src/fen.ts +78 -0
  80. package/src/premove.ts +76 -0
  81. package/src/render.ts +262 -0
  82. package/src/state.ts +199 -0
  83. package/src/svg.ts +441 -0
  84. package/src/sync.ts +36 -0
  85. package/src/types.ts +110 -0
  86. package/src/util.ts +105 -0
  87. package/src/wrap.ts +111 -0
package/dist/drop.js ADDED
@@ -0,0 +1,31 @@
1
+ import * as board from './board.js';
2
+ import * as util from './util.js';
3
+ import { cancel as dragCancel } from './drag.js';
4
+ export function setDropMode(s, piece) {
5
+ s.dropmode = {
6
+ active: true,
7
+ piece,
8
+ };
9
+ dragCancel(s);
10
+ }
11
+ export function cancelDropMode(s) {
12
+ s.dropmode = {
13
+ active: false,
14
+ };
15
+ }
16
+ export function drop(s, e) {
17
+ if (!s.dropmode.active)
18
+ return;
19
+ board.unsetPremove(s);
20
+ board.unsetPredrop(s);
21
+ const piece = s.dropmode.piece;
22
+ if (piece) {
23
+ s.pieces.set('a0', piece);
24
+ const position = util.eventPosition(e);
25
+ const dest = position && board.getKeyAtDomPos(position, board.whitePov(s), s.dom.bounds());
26
+ if (dest)
27
+ board.dropNewPiece(s, 'a0', dest);
28
+ }
29
+ s.dom.redraw();
30
+ }
31
+ //# sourceMappingURL=drop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"drop.js","sourceRoot":"","sources":["../src/drop.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,UAAU,WAAW,CAAC,CAAQ,EAAE,KAAgB;IACpD,CAAC,CAAC,QAAQ,GAAG;QACX,MAAM,EAAE,IAAI;QACZ,KAAK;KACN,CAAC;IACF,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,CAAQ;IACrC,CAAC,CAAC,QAAQ,GAAG;QACX,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,CAAQ,EAAE,CAAgB;IAC7C,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM;QAAE,OAAO;IAE/B,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtB,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAEtB,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;IAE/B,IAAI,KAAK,EAAE,CAAC;QACV,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,QAAQ,IAAI,KAAK,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QAC3F,IAAI,IAAI;YAAE,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,CAAC,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;AACjB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { State } from './state.js';
2
+ import * as cg from './types.js';
3
+ export declare function bindBoard(s: State, onResize: () => void): void;
4
+ export declare function bindDocument(s: State, onResize: () => void): cg.Unbind;
package/dist/events.js ADDED
@@ -0,0 +1,72 @@
1
+ import * as drag from './drag.js';
2
+ import * as draw from './draw.js';
3
+ import { drop } from './drop.js';
4
+ import { isRightButton } from './util.js';
5
+ export function bindBoard(s, onResize) {
6
+ const boardEl = s.dom.elements.board;
7
+ if ('ResizeObserver' in window)
8
+ new ResizeObserver(onResize).observe(s.dom.elements.wrap);
9
+ if (s.disableContextMenu || s.drawable.enabled) {
10
+ boardEl.addEventListener('contextmenu', e => e.preventDefault());
11
+ }
12
+ if (s.viewOnly)
13
+ return;
14
+ // Cannot be passive, because we prevent touch scrolling and dragging of
15
+ // selected elements.
16
+ const onStart = startDragOrDraw(s);
17
+ boardEl.addEventListener('touchstart', onStart, {
18
+ passive: false,
19
+ });
20
+ boardEl.addEventListener('mousedown', onStart, {
21
+ passive: false,
22
+ });
23
+ }
24
+ // returns the unbind function
25
+ export function bindDocument(s, onResize) {
26
+ const unbinds = [];
27
+ // Old versions of Edge and Safari do not support ResizeObserver. Send
28
+ // chessground.resize if a user action has changed the bounds of the board.
29
+ if (!('ResizeObserver' in window))
30
+ unbinds.push(unbindable(document.body, 'chessground.resize', onResize));
31
+ if (!s.viewOnly) {
32
+ const onmove = dragOrDraw(s, drag.move, draw.move);
33
+ const onend = dragOrDraw(s, drag.end, draw.end);
34
+ for (const ev of ['touchmove', 'mousemove'])
35
+ unbinds.push(unbindable(document, ev, onmove));
36
+ for (const ev of ['touchend', 'mouseup'])
37
+ unbinds.push(unbindable(document, ev, onend));
38
+ const onScroll = () => s.dom.bounds.clear();
39
+ unbinds.push(unbindable(document, 'scroll', onScroll, { capture: true, passive: true }));
40
+ unbinds.push(unbindable(window, 'resize', onScroll, { passive: true }));
41
+ }
42
+ return () => unbinds.forEach(f => f());
43
+ }
44
+ function unbindable(el, eventName, callback, options) {
45
+ el.addEventListener(eventName, callback, options);
46
+ return () => el.removeEventListener(eventName, callback, options);
47
+ }
48
+ const startDragOrDraw = (s) => e => {
49
+ if (s.draggable.current)
50
+ drag.cancel(s);
51
+ else if (s.drawable.current)
52
+ draw.cancel(s);
53
+ else if (e.shiftKey || isRightButton(e)) {
54
+ if (s.drawable.enabled)
55
+ draw.start(s, e);
56
+ }
57
+ else if (!s.viewOnly) {
58
+ if (s.dropmode.active)
59
+ drop(s, e);
60
+ else
61
+ drag.start(s, e);
62
+ }
63
+ };
64
+ const dragOrDraw = (s, withDrag, withDraw) => e => {
65
+ if (s.drawable.current) {
66
+ if (s.drawable.enabled)
67
+ withDraw(s, e);
68
+ }
69
+ else if (!s.viewOnly)
70
+ withDrag(s, e);
71
+ };
72
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { State } from './state.js';
2
+ import { Key } from './types.js';
3
+ export declare function explosion(state: State, keys: Key[]): void;
@@ -0,0 +1,18 @@
1
+ export function explosion(state, keys) {
2
+ state.exploding = { stage: 1, keys };
3
+ state.dom.redraw();
4
+ setTimeout(() => {
5
+ setStage(state, 2);
6
+ setTimeout(() => setStage(state, undefined), 120);
7
+ }, 120);
8
+ }
9
+ function setStage(state, stage) {
10
+ if (state.exploding) {
11
+ if (stage)
12
+ state.exploding.stage = stage;
13
+ else
14
+ state.exploding = undefined;
15
+ state.dom.redraw();
16
+ }
17
+ }
18
+ //# sourceMappingURL=explosion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explosion.js","sourceRoot":"","sources":["../src/explosion.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,IAAW;IACjD,KAAK,CAAC,SAAS,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;IACrC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACnB,UAAU,CAAC,GAAG,EAAE;QACd,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACnB,UAAU,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;IACpD,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC;AAED,SAAS,QAAQ,CAAC,KAAY,EAAE,KAAyB;IACvD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,IAAI,KAAK;YAAE,KAAK,CAAC,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC;;YACpC,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
package/dist/fen.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ import * as cg from './types.js';
2
+ export declare const initial: cg.FEN;
3
+ export declare function read(fen: cg.FEN): cg.Pieces;
4
+ export declare function write(pieces: cg.Pieces): cg.FEN;
package/dist/fen.js ADDED
@@ -0,0 +1,79 @@
1
+ import { pos2key, invRanks } from './util.js';
2
+ import * as cg from './types.js';
3
+ export const initial = 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR';
4
+ const roles = {
5
+ p: 'pawn',
6
+ r: 'rook',
7
+ n: 'knight',
8
+ b: 'bishop',
9
+ q: 'queen',
10
+ k: 'king',
11
+ };
12
+ const letters = {
13
+ pawn: 'p',
14
+ rook: 'r',
15
+ knight: 'n',
16
+ bishop: 'b',
17
+ queen: 'q',
18
+ king: 'k',
19
+ };
20
+ export function read(fen) {
21
+ if (fen === 'start')
22
+ fen = initial;
23
+ const pieces = new Map();
24
+ let row = 7, col = 0;
25
+ for (const c of fen) {
26
+ switch (c) {
27
+ case ' ':
28
+ case '[':
29
+ return pieces;
30
+ case '/':
31
+ --row;
32
+ if (row < 0)
33
+ return pieces;
34
+ col = 0;
35
+ break;
36
+ case '~': {
37
+ const piece = pieces.get(pos2key([col - 1, row]));
38
+ if (piece)
39
+ piece.promoted = true;
40
+ break;
41
+ }
42
+ default: {
43
+ const nb = c.charCodeAt(0);
44
+ if (nb < 57)
45
+ col += nb - 48;
46
+ else {
47
+ const role = c.toLowerCase();
48
+ pieces.set(pos2key([col, row]), {
49
+ role: roles[role],
50
+ color: c === role ? 'black' : 'white',
51
+ });
52
+ ++col;
53
+ }
54
+ }
55
+ }
56
+ }
57
+ return pieces;
58
+ }
59
+ export function write(pieces) {
60
+ return invRanks
61
+ .map(y => cg.files
62
+ .map(x => {
63
+ const piece = pieces.get((x + y));
64
+ if (piece) {
65
+ let p = letters[piece.role];
66
+ if (piece.color === 'white')
67
+ p = p.toUpperCase();
68
+ if (piece.promoted)
69
+ p += '~';
70
+ return p;
71
+ }
72
+ else
73
+ return '1';
74
+ })
75
+ .join(''))
76
+ .join('/')
77
+ .replace(/1{2,}/g, s => s.length.toString());
78
+ }
79
+ //# sourceMappingURL=fen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fen.js","sourceRoot":"","sources":["../src/fen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import * as cg from './types.js';
2
+ type Mobility = (x1: number, y1: number, x2: number, y2: number) => boolean;
3
+ export declare const knight: Mobility;
4
+ export declare const queen: Mobility;
5
+ export declare function premove(pieces: cg.Pieces, key: cg.Key, canCastle: boolean): cg.Key[];
6
+ export {};
@@ -0,0 +1,57 @@
1
+ import * as util from './util.js';
2
+ const diff = (a, b) => Math.abs(a - b);
3
+ const pawn = (color) => (x1, y1, x2, y2) => diff(x1, x2) < 2 &&
4
+ (color === 'white'
5
+ ? // allow 2 squares from first two ranks, for horde
6
+ y2 === y1 + 1 || (y1 <= 1 && y2 === y1 + 2 && x1 === x2)
7
+ : y2 === y1 - 1 || (y1 >= 6 && y2 === y1 - 2 && x1 === x2));
8
+ export const knight = (x1, y1, x2, y2) => {
9
+ const xd = diff(x1, x2);
10
+ const yd = diff(y1, y2);
11
+ return (xd === 1 && yd === 2) || (xd === 2 && yd === 1);
12
+ };
13
+ const bishop = (x1, y1, x2, y2) => {
14
+ return diff(x1, x2) === diff(y1, y2);
15
+ };
16
+ const rook = (x1, y1, x2, y2) => {
17
+ return x1 === x2 || y1 === y2;
18
+ };
19
+ export const queen = (x1, y1, x2, y2) => {
20
+ return bishop(x1, y1, x2, y2) || rook(x1, y1, x2, y2);
21
+ };
22
+ const king = (color, rookFiles, canCastle) => (x1, y1, x2, y2) => (diff(x1, x2) < 2 && diff(y1, y2) < 2) ||
23
+ (canCastle &&
24
+ y1 === y2 &&
25
+ y1 === (color === 'white' ? 0 : 7) &&
26
+ ((x1 === 4 && ((x2 === 2 && rookFiles.includes(0)) || (x2 === 6 && rookFiles.includes(7)))) ||
27
+ rookFiles.includes(x2)));
28
+ function rookFilesOf(pieces, color) {
29
+ const backrank = color === 'white' ? '1' : '8';
30
+ const files = [];
31
+ for (const [key, piece] of pieces) {
32
+ if (key[1] === backrank && piece.color === color && piece.role === 'rook') {
33
+ files.push(util.key2pos(key)[0]);
34
+ }
35
+ }
36
+ return files;
37
+ }
38
+ export function premove(pieces, key, canCastle) {
39
+ const piece = pieces.get(key);
40
+ if (!piece)
41
+ return [];
42
+ const pos = util.key2pos(key), r = piece.role, mobility = r === 'pawn'
43
+ ? pawn(piece.color)
44
+ : r === 'knight'
45
+ ? knight
46
+ : r === 'bishop'
47
+ ? bishop
48
+ : r === 'rook'
49
+ ? rook
50
+ : r === 'queen'
51
+ ? queen
52
+ : king(piece.color, rookFilesOf(pieces, piece.color), canCastle);
53
+ return util.allPos
54
+ .filter(pos2 => (pos[0] !== pos2[0] || pos[1] !== pos2[1]) && mobility(pos[0], pos[1], pos2[0], pos2[1]))
55
+ .map(util.pos2key);
56
+ }
57
+ //# sourceMappingURL=premove.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"premove.js","sourceRoot":"","sources":["../src/premove.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAKlC,MAAM,IAAI,GAAG,CAAC,CAAS,EAAE,CAAS,EAAU,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAE/D,MAAM,IAAI,GACR,CAAC,KAAe,EAAY,EAAE,CAC9B,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CACjB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC;IAChB,CAAC,KAAK,KAAK,OAAO;QAChB,CAAC,CAAC,kDAAkD;YAClD,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1D,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAElE,MAAM,CAAC,MAAM,MAAM,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACjD,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAC1D,CAAC,CAAC;AAEF,MAAM,MAAM,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAC1C,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AACvC,CAAC,CAAC;AAEF,MAAM,IAAI,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IACxC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,KAAK,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;IAChD,OAAO,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,MAAM,IAAI,GACR,CAAC,KAAe,EAAE,SAAmB,EAAE,SAAkB,EAAY,EAAE,CACvE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CACjB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;IACtC,CAAC,SAAS;QACR,EAAE,KAAK,EAAE;QACT,EAAE,KAAK,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzF,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAEjC,SAAS,WAAW,CAAC,MAAiB,EAAE,KAAe;IACrD,MAAM,QAAQ,GAAG,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAC/C,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QAClC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,MAAiB,EAAE,GAAW,EAAE,SAAkB;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAC3B,CAAC,GAAG,KAAK,CAAC,IAAI,EACd,QAAQ,GACN,CAAC,KAAK,MAAM;QACV,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;QACnB,CAAC,CAAC,CAAC,KAAK,QAAQ;YACd,CAAC,CAAC,MAAM;YACR,CAAC,CAAC,CAAC,KAAK,QAAQ;gBACd,CAAC,CAAC,MAAM;gBACR,CAAC,CAAC,CAAC,KAAK,MAAM;oBACZ,CAAC,CAAC,IAAI;oBACN,CAAC,CAAC,CAAC,KAAK,OAAO;wBACb,CAAC,CAAC,KAAK;wBACP,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC,CAAC;IAC/E,OAAO,IAAI,CAAC,MAAM;SACf,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;SACxG,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACvB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { State } from './state.js';
2
+ export declare function render(s: State): void;
3
+ export declare function renderResized(s: State): void;
4
+ export declare function updateBounds(s: State): void;
package/dist/render.js ADDED
@@ -0,0 +1,235 @@
1
+ import { key2pos, createEl, posToTranslate as posToTranslateFromBounds, translate } from './util.js';
2
+ import { whitePov } from './board.js';
3
+ // ported from https://github.com/lichess-org/lichobile/blob/master/src/chessground/render.ts
4
+ // in case of bugs, blame @veloce
5
+ export function render(s) {
6
+ const asWhite = whitePov(s), posToTranslate = posToTranslateFromBounds(s.dom.bounds()), boardEl = s.dom.elements.board, pieces = s.pieces, curAnim = s.animation.current, anims = curAnim ? curAnim.plan.anims : new Map(), fadings = curAnim ? curAnim.plan.fadings : new Map(), curDrag = s.draggable.current, squares = computeSquareClasses(s), samePieces = new Set(), sameSquares = new Set(), movedPieces = new Map(), movedSquares = new Map(); // by class name
7
+ let k, el, pieceAtKey, elPieceName, anim, fading, pMvdset, pMvd, sMvdset, sMvd;
8
+ // walk over all board dom elements, apply animations and flag moved pieces
9
+ el = boardEl.firstChild;
10
+ while (el) {
11
+ k = el.cgKey;
12
+ if (isPieceNode(el)) {
13
+ pieceAtKey = pieces.get(k);
14
+ anim = anims.get(k);
15
+ fading = fadings.get(k);
16
+ elPieceName = el.cgPiece;
17
+ // if piece not being dragged anymore, remove dragging style
18
+ if (el.cgDragging && (!curDrag || curDrag.orig !== k)) {
19
+ el.classList.remove('dragging');
20
+ translate(el, posToTranslate(key2pos(k), asWhite));
21
+ el.cgDragging = false;
22
+ }
23
+ // remove fading class if it still remains
24
+ if (!fading && el.cgFading) {
25
+ el.cgFading = false;
26
+ el.classList.remove('fading');
27
+ }
28
+ // there is now a piece at this dom key
29
+ if (pieceAtKey) {
30
+ // continue animation if already animating and same piece
31
+ // (otherwise it could animate a captured piece)
32
+ if (anim && el.cgAnimating && elPieceName === pieceNameOf(pieceAtKey)) {
33
+ const pos = key2pos(k);
34
+ pos[0] += anim[2];
35
+ pos[1] += anim[3];
36
+ el.classList.add('anim');
37
+ translate(el, posToTranslate(pos, asWhite));
38
+ }
39
+ else if (el.cgAnimating) {
40
+ el.cgAnimating = false;
41
+ el.classList.remove('anim');
42
+ translate(el, posToTranslate(key2pos(k), asWhite));
43
+ if (s.addPieceZIndex)
44
+ el.style.zIndex = posZIndex(key2pos(k), asWhite);
45
+ }
46
+ // same piece: flag as same
47
+ if (elPieceName === pieceNameOf(pieceAtKey) && (!fading || !el.cgFading)) {
48
+ samePieces.add(k);
49
+ }
50
+ // different piece: flag as moved unless it is a fading piece
51
+ else {
52
+ if (fading && elPieceName === pieceNameOf(fading)) {
53
+ el.classList.add('fading');
54
+ el.cgFading = true;
55
+ }
56
+ else {
57
+ appendValue(movedPieces, elPieceName, el);
58
+ }
59
+ }
60
+ }
61
+ // no piece: flag as moved
62
+ else {
63
+ appendValue(movedPieces, elPieceName, el);
64
+ }
65
+ }
66
+ else if (isSquareNode(el)) {
67
+ const cn = el.className;
68
+ if (squares.get(k) === cn)
69
+ sameSquares.add(k);
70
+ else
71
+ appendValue(movedSquares, cn, el);
72
+ }
73
+ el = el.nextSibling;
74
+ }
75
+ // walk over all squares in current set, apply dom changes to moved squares
76
+ // or append new squares
77
+ for (const [sk, className] of squares) {
78
+ if (!sameSquares.has(sk)) {
79
+ sMvdset = movedSquares.get(className);
80
+ sMvd = sMvdset && sMvdset.pop();
81
+ const translation = posToTranslate(key2pos(sk), asWhite);
82
+ if (sMvd) {
83
+ sMvd.cgKey = sk;
84
+ translate(sMvd, translation);
85
+ }
86
+ else {
87
+ const squareNode = createEl('square', className);
88
+ squareNode.cgKey = sk;
89
+ translate(squareNode, translation);
90
+ boardEl.insertBefore(squareNode, boardEl.firstChild);
91
+ }
92
+ }
93
+ }
94
+ // walk over all pieces in current set, apply dom changes to moved pieces
95
+ // or append new pieces
96
+ for (const [k, p] of pieces) {
97
+ anim = anims.get(k);
98
+ if (!samePieces.has(k)) {
99
+ pMvdset = movedPieces.get(pieceNameOf(p));
100
+ pMvd = pMvdset && pMvdset.pop();
101
+ // a same piece was moved
102
+ if (pMvd) {
103
+ // apply dom changes
104
+ pMvd.cgKey = k;
105
+ if (pMvd.cgFading) {
106
+ pMvd.classList.remove('fading');
107
+ pMvd.cgFading = false;
108
+ }
109
+ const pos = key2pos(k);
110
+ if (s.addPieceZIndex)
111
+ pMvd.style.zIndex = posZIndex(pos, asWhite);
112
+ if (anim) {
113
+ pMvd.cgAnimating = true;
114
+ pMvd.classList.add('anim');
115
+ pos[0] += anim[2];
116
+ pos[1] += anim[3];
117
+ }
118
+ translate(pMvd, posToTranslate(pos, asWhite));
119
+ }
120
+ // no piece in moved obj: insert the new piece
121
+ // assumes the new piece is not being dragged
122
+ else {
123
+ const pieceName = pieceNameOf(p), pieceNode = createEl('piece', pieceName), pos = key2pos(k);
124
+ pieceNode.cgPiece = pieceName;
125
+ pieceNode.cgKey = k;
126
+ if (anim) {
127
+ pieceNode.cgAnimating = true;
128
+ pos[0] += anim[2];
129
+ pos[1] += anim[3];
130
+ }
131
+ translate(pieceNode, posToTranslate(pos, asWhite));
132
+ if (s.addPieceZIndex)
133
+ pieceNode.style.zIndex = posZIndex(pos, asWhite);
134
+ boardEl.appendChild(pieceNode);
135
+ }
136
+ }
137
+ }
138
+ // remove any element that remains in the moved sets
139
+ for (const nodes of movedPieces.values())
140
+ removeNodes(s, nodes);
141
+ for (const nodes of movedSquares.values())
142
+ removeNodes(s, nodes);
143
+ }
144
+ export function renderResized(s) {
145
+ const asWhite = whitePov(s), posToTranslate = posToTranslateFromBounds(s.dom.bounds());
146
+ let el = s.dom.elements.board.firstChild;
147
+ while (el) {
148
+ if ((isPieceNode(el) && !el.cgAnimating) || isSquareNode(el)) {
149
+ translate(el, posToTranslate(key2pos(el.cgKey), asWhite));
150
+ }
151
+ el = el.nextSibling;
152
+ }
153
+ }
154
+ export function updateBounds(s) {
155
+ var _a, _b;
156
+ const bounds = s.dom.elements.wrap.getBoundingClientRect();
157
+ const container = s.dom.elements.container;
158
+ const ratio = bounds.height / bounds.width;
159
+ const width = (Math.floor((bounds.width * window.devicePixelRatio) / 8) * 8) / window.devicePixelRatio;
160
+ const height = width * ratio;
161
+ container.style.width = width + 'px';
162
+ container.style.height = height + 'px';
163
+ s.dom.bounds.clear();
164
+ (_a = s.addDimensionsCssVarsTo) === null || _a === void 0 ? void 0 : _a.style.setProperty('---cg-width', width + 'px');
165
+ (_b = s.addDimensionsCssVarsTo) === null || _b === void 0 ? void 0 : _b.style.setProperty('---cg-height', height + 'px');
166
+ }
167
+ const isPieceNode = (el) => el.tagName === 'PIECE';
168
+ const isSquareNode = (el) => el.tagName === 'SQUARE';
169
+ function removeNodes(s, nodes) {
170
+ for (const node of nodes)
171
+ s.dom.elements.board.removeChild(node);
172
+ }
173
+ function posZIndex(pos, asWhite) {
174
+ const minZ = 3;
175
+ const rank = pos[1];
176
+ const z = asWhite ? minZ + 7 - rank : minZ + rank;
177
+ return `${z}`;
178
+ }
179
+ const pieceNameOf = (piece) => `${piece.color} ${piece.role}`;
180
+ function computeSquareClasses(s) {
181
+ var _a, _b, _c;
182
+ const squares = new Map();
183
+ if (s.lastMove && s.highlight.lastMove)
184
+ for (const k of s.lastMove) {
185
+ addSquare(squares, k, 'last-move');
186
+ }
187
+ if (s.check && s.highlight.check)
188
+ addSquare(squares, s.check, 'check');
189
+ if (s.selected) {
190
+ addSquare(squares, s.selected, 'selected');
191
+ if (s.movable.showDests) {
192
+ const dests = (_a = s.movable.dests) === null || _a === void 0 ? void 0 : _a.get(s.selected);
193
+ if (dests)
194
+ for (const k of dests) {
195
+ addSquare(squares, k, 'move-dest' + (s.pieces.has(k) ? ' oc' : ''));
196
+ }
197
+ const pDests = (_c = (_b = s.premovable.customDests) === null || _b === void 0 ? void 0 : _b.get(s.selected)) !== null && _c !== void 0 ? _c : s.premovable.dests;
198
+ if (pDests)
199
+ for (const k of pDests) {
200
+ addSquare(squares, k, 'premove-dest' + (s.pieces.has(k) ? ' oc' : ''));
201
+ }
202
+ }
203
+ }
204
+ const premove = s.premovable.current;
205
+ if (premove)
206
+ for (const k of premove)
207
+ addSquare(squares, k, 'current-premove');
208
+ else if (s.predroppable.current)
209
+ addSquare(squares, s.predroppable.current.key, 'current-premove');
210
+ const o = s.exploding;
211
+ if (o)
212
+ for (const k of o.keys)
213
+ addSquare(squares, k, 'exploding' + o.stage);
214
+ if (s.highlight.custom) {
215
+ s.highlight.custom.forEach((v, k) => {
216
+ addSquare(squares, k, v);
217
+ });
218
+ }
219
+ return squares;
220
+ }
221
+ function addSquare(squares, key, klass) {
222
+ const classes = squares.get(key);
223
+ if (classes)
224
+ squares.set(key, `${classes} ${klass}`);
225
+ else
226
+ squares.set(key, klass);
227
+ }
228
+ function appendValue(map, key, value) {
229
+ const arr = map.get(key);
230
+ if (arr)
231
+ arr.push(value);
232
+ else
233
+ map.set(key, [value]);
234
+ }
235
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}