@lichess-org/chessground 9.8.5 → 9.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/chessground.min.js +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/premove.js +12 -139
- package/dist/premove.js.map +1 -1
- package/dist/render.js +22 -25
- package/dist/render.js.map +1 -1
- package/dist/state.d.ts +0 -1
- package/dist/state.js.map +1 -1
- package/dist/svg.d.ts +1 -1
- package/dist/svg.js +36 -56
- package/dist/svg.js.map +1 -1
- package/dist/types.d.ts +0 -2
- package/dist/wrap.js +8 -7
- package/dist/wrap.js.map +1 -1
- package/package.json +1 -1
- package/src/config.ts +1 -1
- package/src/premove.ts +13 -185
- package/src/render.ts +23 -28
- package/src/state.ts +1 -2
- package/src/svg.ts +45 -48
- package/src/types.ts +0 -2
- package/src/wrap.ts +11 -7
package/dist/svg.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { key2pos } from './util.js';
|
|
2
2
|
import { sameEndpoints, sameColor, } from './draw.js';
|
|
3
|
+
const angleSlotVals = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
|
|
3
4
|
export { createElement, setAttributes };
|
|
4
5
|
export function createDefs() {
|
|
5
6
|
const defs = createElement('defs');
|
|
@@ -14,7 +15,7 @@ export function renderSvg(state, els) {
|
|
|
14
15
|
if (!s.dest)
|
|
15
16
|
continue;
|
|
16
17
|
const sources = dests.get(s.dest) ?? new Set(), from = pos2user(orient(key2pos(s.orig), state.orientation), bounds), to = pos2user(orient(key2pos(s.dest), state.orientation), bounds);
|
|
17
|
-
sources.add(moveAngle(from, to));
|
|
18
|
+
sources.add(angleToSlot(moveAngle(from, to)));
|
|
18
19
|
dests.set(s.dest, sources);
|
|
19
20
|
}
|
|
20
21
|
const shapes = [];
|
|
@@ -25,14 +26,14 @@ export function renderSvg(state, els) {
|
|
|
25
26
|
shape: s,
|
|
26
27
|
current: false,
|
|
27
28
|
pendingErase: isPendingErase,
|
|
28
|
-
hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase),
|
|
29
|
+
hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase, angleCount(s.dest, dests)),
|
|
29
30
|
});
|
|
30
31
|
}
|
|
31
32
|
if (cur && pendingEraseIdx === -1)
|
|
32
33
|
shapes.push({
|
|
33
34
|
shape: cur,
|
|
34
35
|
current: true,
|
|
35
|
-
hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false),
|
|
36
|
+
hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false, angleCount(cur.dest, dests)),
|
|
36
37
|
pendingErase: false,
|
|
37
38
|
});
|
|
38
39
|
const fullHash = shapes.map(sc => sc.hash).join(';');
|
|
@@ -102,13 +103,14 @@ function syncShapes(shapes, els, renderShape) {
|
|
|
102
103
|
}
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
|
-
function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds, pendingErase) {
|
|
106
|
+
function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds, pendingErase, angleCountOfDest) {
|
|
106
107
|
// a shape and an overlay svg share a lifetime and have the same cgHash attribute
|
|
107
108
|
return [
|
|
108
109
|
bounds.width,
|
|
109
110
|
bounds.height,
|
|
110
111
|
current,
|
|
111
112
|
pendingErase && 'pendingErase',
|
|
113
|
+
angleCountOfDest,
|
|
112
114
|
orig,
|
|
113
115
|
dest,
|
|
114
116
|
brush,
|
|
@@ -122,12 +124,8 @@ function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, belo
|
|
|
122
124
|
.filter(x => x)
|
|
123
125
|
.join(',');
|
|
124
126
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
}
|
|
128
|
-
function modifiersHash(m) {
|
|
129
|
-
return [m.lineWidth, m.hilite].filter(x => x).join(',');
|
|
130
|
-
}
|
|
127
|
+
const pieceHash = (piece) => [piece.color, piece.role, piece.scale].filter(x => x).join(',');
|
|
128
|
+
const modifiersHash = (m) => [m.lineWidth, m.hilite].filter(x => x).join(',');
|
|
131
129
|
function textHash(s) {
|
|
132
130
|
// Rolling hash with base 31 (cf. https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript)
|
|
133
131
|
let h = 0;
|
|
@@ -240,15 +238,13 @@ function renderLabel(label, hash, from, to, slots, corner) {
|
|
|
240
238
|
g.appendChild(labelEl);
|
|
241
239
|
return g;
|
|
242
240
|
}
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
return document.createElementNS('http://www.w3.org/2000/svg', tagName);
|
|
251
|
-
}
|
|
241
|
+
const orient = (pos, color) => (color === 'white' ? pos : [7 - pos[0], 7 - pos[1]]);
|
|
242
|
+
const mod = (n, m) => ((n % m) + m) % m;
|
|
243
|
+
const rotateAngleSlot = (slot, steps) => mod(slot + steps, 16);
|
|
244
|
+
const anyTwoCloserThan90Degrees = (slots) => [...slots].some(slot => [-3, -2, -1, 1, 2, 3].some(i => slots.has(rotateAngleSlot(slot, i))));
|
|
245
|
+
const isShort = (dest, dests) => !!dest && dests.has(dest) && anyTwoCloserThan90Degrees(dests.get(dest));
|
|
246
|
+
const createElement = (tagName) => document.createElementNS('http://www.w3.org/2000/svg', tagName);
|
|
247
|
+
const angleCount = (dest, dests) => dest && dests.has(dest) ? dests.get(dest).size : 0;
|
|
252
248
|
function setAttributes(el, attrs) {
|
|
253
249
|
for (const key in attrs) {
|
|
254
250
|
if (Object.prototype.hasOwnProperty.call(attrs, key))
|
|
@@ -256,32 +252,22 @@ function setAttributes(el, attrs) {
|
|
|
256
252
|
}
|
|
257
253
|
return el;
|
|
258
254
|
}
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
function circleWidth() {
|
|
270
|
-
return [3 / 64, 4 / 64];
|
|
271
|
-
}
|
|
272
|
-
function lineWidth(brush, current) {
|
|
273
|
-
return ((brush.lineWidth || 10) * (current ? 0.85 : 1)) / 64;
|
|
274
|
-
}
|
|
255
|
+
const makeCustomBrush = (base, modifiers) => !modifiers
|
|
256
|
+
? base
|
|
257
|
+
: {
|
|
258
|
+
color: base.color,
|
|
259
|
+
opacity: Math.round(base.opacity * 10) / 10,
|
|
260
|
+
lineWidth: Math.round(modifiers.lineWidth || base.lineWidth),
|
|
261
|
+
key: [base.key, modifiers.lineWidth].filter(x => x).join(''),
|
|
262
|
+
};
|
|
263
|
+
const circleWidth = () => [3 / 64, 4 / 64];
|
|
264
|
+
const lineWidth = (brush, current) => ((brush.lineWidth || 10) * (current ? 0.85 : 1)) / 64;
|
|
275
265
|
function hiliteOf(shape) {
|
|
276
266
|
const hilite = shape.modifiers?.hilite;
|
|
277
267
|
return { key: hilite && `hilite-${hilite.replace('#', '')}`, color: hilite };
|
|
278
268
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
}
|
|
282
|
-
function arrowMargin(shorten) {
|
|
283
|
-
return (shorten ? 20 : 10) / 64;
|
|
284
|
-
}
|
|
269
|
+
const opacity = (brush, current, pendingErase) => (brush.opacity || 1) * (pendingErase ? 0.6 : current ? 0.9 : 1);
|
|
270
|
+
const arrowMargin = (shorten) => (shorten ? 20 : 10) / 64;
|
|
285
271
|
function pos2user(pos, bounds) {
|
|
286
272
|
const xScale = Math.min(1, bounds.width / bounds.height);
|
|
287
273
|
const yScale = Math.min(1, bounds.height / bounds.width);
|
|
@@ -303,13 +289,9 @@ function filterBox(from, to) {
|
|
|
303
289
|
stroke: 'none',
|
|
304
290
|
});
|
|
305
291
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
}
|
|
310
|
-
function dist(from, to) {
|
|
311
|
-
return Math.sqrt([from[0] - to[0], from[1] - to[1]].reduce((acc, x) => acc + x * x, 0));
|
|
312
|
-
}
|
|
292
|
+
const angleToSlot = (angle) => mod(Math.round((angle * 8) / Math.PI), 16);
|
|
293
|
+
const moveAngle = (from, to) => Math.atan2(to[1] - from[1], to[0] - from[0]) + Math.PI;
|
|
294
|
+
const dist = (from, to) => Math.sqrt([from[0] - to[0], from[1] - to[1]].reduce((acc, x) => acc + x * x, 0));
|
|
313
295
|
/*
|
|
314
296
|
try to place label at the junction of the destination shaft and arrowhead. if there's more than
|
|
315
297
|
1 arrow pointing to a square, the arrow shortens by 10 / 64 units so the label must move as well.
|
|
@@ -321,17 +303,15 @@ function dist(from, to) {
|
|
|
321
303
|
function labelCoords(from, to, slots) {
|
|
322
304
|
let mag = dist(from, to);
|
|
323
305
|
//if (mag === 0) return [from[0], from[1]];
|
|
324
|
-
const angle = moveAngle(from, to
|
|
306
|
+
const angle = moveAngle(from, to);
|
|
325
307
|
if (slots) {
|
|
326
308
|
mag -= 33 / 64; // reduce by arrowhead length
|
|
327
|
-
if (slots
|
|
309
|
+
if (anyTwoCloserThan90Degrees(slots)) {
|
|
328
310
|
mag -= 10 / 64; // reduce by shortening factor
|
|
329
|
-
const slot =
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
// and by label size for the knight if another arrow is within pi / 8.
|
|
334
|
-
}
|
|
311
|
+
const slot = angleToSlot(angle);
|
|
312
|
+
// reduce by label size for the knight if another arrow is within pi / 8:
|
|
313
|
+
if (slot & 1 && [-1, 1].some(s => slots.has(rotateAngleSlot(slot, s))))
|
|
314
|
+
mag -= 0.4;
|
|
335
315
|
}
|
|
336
316
|
}
|
|
337
317
|
return [from[0] - Math.cos(angle) * mag, from[1] - Math.sin(angle) * mag].map(c => c + 0.5);
|
package/dist/svg.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAOL,aAAa,EACb,SAAS,GACV,MAAM,WAAW,CAAC;AA0BnB,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC;AAExC,MAAM,UAAU,UAAU;IACxB,MAAM,IAAI,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAChF,MAAM,CAAC,WAAW,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,CAAC,EAAE,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;IAC9F,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAY,EAAE,GAAgB;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,EACtB,IAAI,GAAG,CAAC,CAAC,OAAO,EAChB,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,IAAkB,CAAC,CAAC,CAAC,SAAS,EAC5D,KAAK,GAAe,IAAI,GAAG,EAAE,EAC7B,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,EAC3B,kBAAkB,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAE1E,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;QAC7E,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,SAAS;QACtB,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,EAC5C,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EACnE,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACjC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC7B,CAAC;IACD,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,GAAG,CAAC,IAAI,SAAS,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvG,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACrE,MAAM,cAAc,GAAG,eAAe,KAAK,CAAC,CAAC,IAAI,eAAe,KAAK,GAAG,CAAC;QACzE,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,CAAC;YACR,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,cAAc;YAC5B,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IACD,IAAI,GAAG,IAAI,eAAe,KAAK,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC;YACV,KAAK,EAAE,GAAG;YACV,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,SAAS,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC;YACnE,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IAEL,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACrD,IAAI,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,WAAW;QAAE,OAAO;IAEpD,KAAK,CAAC,QAAQ,CAAC,WAAW,GAAG,QAAQ,CAAC;IACtC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACzB,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,2CAA2C;AAC3C,SAAS,QAAQ,CAAC,CAAW,EAAE,MAAuB,EAAE,GAAgB;IACtE,KAAK,MAAM,QAAQ,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;QACrD,MAAM,MAAM,GAAG,QAAS,CAAC,aAAa,CAAC,MAAM,CAAe,CAAC;QAC7D,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,OAAO,GAAkB,IAAI,GAAG,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;YACrE,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,KAAM,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YAC5E,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACzC,IAAI,GAAG,IAAI,KAAK;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;QAC5B,IAAI,EAAE,GAA2B,MAAM,CAAC,iBAA+B,CAAC;QACxE,OAAO,EAAE,EAAE,CAAC;YACV,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YACxC,EAAE,GAAG,EAAE,CAAC,kBAA4C,CAAC;QACvD,CAAC;QACD,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;YAC7C,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACnE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CACjB,MAAuB,EACvB,GAAgB,EAChB,WAA4C;IAE5C,KAAK,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI;QACjC,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC;QACxB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,WAAW,CAAC;KACnC,EAAE,CAAC;QACF,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAG,CAAC,aAAa,CAAC,GAAG,CAAe,CAAC,CAAC;QAChG,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,QAAQ,KAAK,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACzF,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAE9B,KAAK,MAAM,EAAE,IAAI,SAAS;YAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAiB,EAAE,CAAC;YAClC,IAAI,EAAE,GAA2B,IAAI,CAAC,iBAA+B,EACnE,MAAmB,CAAC;YACtB,OAAO,EAAE,EAAE,CAAC;gBACV,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAS,CAAC;gBAC3C,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;oBAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;;oBACtD,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACvB,EAAE,GAAG,EAAE,CAAC,kBAA4C,CAAC;YACvD,CAAC;YACD,KAAK,MAAM,EAAE,IAAI,QAAQ;gBAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,wCAAwC;QACxC,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YACjE,KAAK,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;gBAClC,IAAI,GAAG,CAAC,QAAQ;oBAAE,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;;oBACzC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAChB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,EAAa,EAC3E,OAAgB,EAChB,OAAgB,EAChB,MAAuB,EACvB,YAAqB;IAErB,iFAAiF;IACjF,OAAO;QACL,MAAM,CAAC,KAAK;QACZ,MAAM,CAAC,MAAM;QACb,OAAO;QACP,YAAY,IAAI,cAAc;QAC9B,IAAI;QACJ,IAAI;QACJ,KAAK;QACL,OAAO,IAAI,GAAG;QACd,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC;QACzB,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC;QACrC,SAAS,IAAI,UAAU,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE;QACjF,KAAK,IAAI,SAAS,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACxC,KAAK,IAAI,OAAO;KACjB;SACE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SACd,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED,SAAS,SAAS,CAAC,KAAqB;IACtC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,CAAgB;IACrC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,wHAAwH;IACxH,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED,SAAS,WAAW,CAClB,KAAY,EACZ,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAiB,EACrD,OAAoB,EACpB,KAAiB,EACjB,MAAuB;IAEvB,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,EAC3E,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EACzF,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,EAC7E,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAC7B,IAAI,GAAU,EAAE,CAAC;IAEnB,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAElB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACxC,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;;YACpG,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,KAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IAChG,CAAC;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,KAAK,CAAC,IAAI,KAAV,KAAK,CAAC,IAAI,GAAK,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAC;QACzD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACvF,CAAC;IACD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,IAAI,MAAM,CAAC;QAC5C,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GACV,EAAE,KAAK,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9F,MAAM,EAAE,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAClG,EAAE,CAAC,SAAS,GAAG,mDAAmD,KAAK,CAAC,SAAS,CAAC,IAAI,QAAQ,CAAC;QAC/F,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CACnB,KAAgB,EAChB,EAAiB,EACjB,OAAgB,EAChB,MAAuB,EACvB,YAAqB;IAErB,MAAM,MAAM,GAAG,WAAW,EAAE,EAC1B,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACxF,OAAO,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QAC5C,MAAM,EAAE,KAAK,CAAC,KAAK;QACnB,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,IAAI,EAAE,MAAM;QACZ,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;QAC9C,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACT,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QACT,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC;KAC1B,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAClB,CAAY,EACZ,KAAgB,EAChB,IAAmB,EACnB,EAAiB,EACjB,OAAgB,EAChB,OAAgB,EAChB,YAAqB;IAErB,SAAS,UAAU,CAAC,QAAiB;QACnC,MAAM,CAAC,GAAG,WAAW,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,EACxC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACpB,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EACpB,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAC1B,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EACxB,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;YAC1C,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK;YAC7C,cAAc,EAAE,SAAS,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACjE,gBAAgB,EAAE,OAAO;YACzB,YAAY,EAAE,kBAAkB,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG;YACpE,OAAO,EAAE,CAAC,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC;YACzF,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACX,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YACX,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YACd,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;SACf,CAAC,CAAC;IACL,CAAC;IACD,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;IAEnD,MAAM,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACxE,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACtF,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IACzC,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACtC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACjC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,YAAY,CAAC,KAAgB;IACpC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACpD,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,GAAG;QAC5B,MAAM,EAAE,MAAM;QACd,QAAQ,EAAE,SAAS;QACnB,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,IAAI,EAAE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI;QAClD,IAAI,EAAE,CAAC;KACR,CAAC,CAAC;IACH,MAAM,CAAC,WAAW,CAChB,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QACnC,CAAC,EAAE,gBAAgB;QACnB,IAAI,EAAE,KAAK,CAAC,KAAK;KAClB,CAAC,CACH,CAAC;IACF,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAClB,KAAsC,EACtC,IAAY,EACZ,IAAmB,EACnB,EAAiB,EACjB,KAAkB,EAClB,MAAa;IAEb,MAAM,SAAS,GAAG,GAAG,EACnB,QAAQ,GAAG,SAAS,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,EAChD,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,EACjC,SAAS,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EACrC,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,GAAG,CAAC,EAAE;QACpC,SAAS,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG;QACjE,MAAM,EAAE,IAAI;KACb,CAAC,CAAC;IACL,CAAC,CAAC,WAAW,CACX,aAAa,CAAC,aAAa,CAAC,QAAQ,CAAC,EAAE;QACrC,CAAC,EAAE,SAAS,GAAG,CAAC;QAChB,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QAClC,gBAAgB,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;QACpC,cAAc,EAAE,IAAI;QACpB,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,MAAM;QAC1B,MAAM,EAAE,OAAO;KAChB,CAAC,CACH,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QACnD,WAAW,EAAE,QAAQ;QACrB,aAAa,EAAE,WAAW;QAC1B,aAAa,EAAE,QAAQ;QACvB,IAAI,EAAE,OAAO;QACb,CAAC,EAAE,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM;KACpC,CAAC,CAAC;IACH,OAAO,CAAC,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC/B,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,MAAM,CAAC,GAAW,EAAE,KAAe;IAC1C,OAAO,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,OAAO,CAAC,IAAwB,EAAE,KAAiB;IAC1D,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,QAAQ,CAAC,eAAe,CAAC,4BAA4B,EAAE,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,aAAa,CAAC,EAAc,EAAE,KAA6B;IAClE,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC;YAAE,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;IACzF,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,eAAe,CAAC,IAAe,EAAE,SAAoC;IAC5E,OAAO,CAAC,SAAS;QACf,CAAC,CAAC,IAAI;QACN,CAAC,CAAC;YACE,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,GAAG,EAAE;YAC3C,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC;YAC5D,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7D,CAAC;AACR,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;AAC1B,CAAC;AAED,SAAS,SAAS,CAAC,KAAgB,EAAE,OAAgB;IACnD,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,IAAI,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AAC/D,CAAC;AAED,SAAS,QAAQ,CAAC,KAAgB;IAChC,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC;IACvC,OAAO,EAAE,GAAG,EAAE,MAAM,IAAI,UAAU,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC/E,CAAC;AAED,SAAS,OAAO,CAAC,KAAgB,EAAE,OAAgB,EAAE,YAAqB;IACxE,OAAO,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,SAAS,QAAQ,CAAC,GAAW,EAAE,MAAuB;IACpD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,SAAS,SAAS,CAAC,IAAmB,EAAE,EAAiB;IACvD,qFAAqF;IACrF,iFAAiF;IACjF,MAAM,GAAG,GAAG;QACV,IAAI,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC/E,CAAC;IACF,OAAO,aAAa,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;QAC1C,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACd,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,IAAI,EAAE,MAAM;QACZ,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,IAAmB,EAAE,EAAiB,EAAE,MAAM,GAAG,IAAI;IACtE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;IACrE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AACxE,CAAC;AAED,SAAS,IAAI,CAAC,IAAmB,EAAE,EAAiB;IAClD,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAC1F,CAAC;AAED;;;;;;;EAOE;AAEF,SAAS,WAAW,CAAC,IAAmB,EAAE,EAAiB,EAAE,KAAkB;IAC7E,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACzB,2CAA2C;IAC3C,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;IACzC,IAAI,KAAK,EAAE,CAAC;QACV,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,6BAA6B;QAC7C,IAAI,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YACnB,GAAG,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC,8BAA8B;YAC9C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC;gBAC9D,IAAI,IAAI,GAAG,CAAC;oBAAE,GAAG,IAAI,GAAG,CAAC;gBACzB,sEAAsE;YACxE,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAC3E,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,GAAG,CACI,CAAC;AACrB,CAAC"}
|
|
1
|
+
{"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -106,9 +106,7 @@ export type MobilityContext = {
|
|
|
106
106
|
allPieces: Pieces;
|
|
107
107
|
friendlies: Pieces;
|
|
108
108
|
enemies: Pieces;
|
|
109
|
-
unrestrictedPremoves: boolean;
|
|
110
109
|
color: Color;
|
|
111
|
-
canCastle: boolean;
|
|
112
110
|
rookFilesFriendlies: number[];
|
|
113
111
|
lastMove: Key[] | undefined;
|
|
114
112
|
};
|
package/dist/wrap.js
CHANGED
|
@@ -47,11 +47,11 @@ export function renderWrap(element, s) {
|
|
|
47
47
|
const ranksPositionClass = s.ranksPosition === 'left' ? ' left' : '';
|
|
48
48
|
if (s.coordinatesOnSquares) {
|
|
49
49
|
const rankN = s.orientation === 'white' ? i => i + 1 : i => 8 - i;
|
|
50
|
-
files.forEach((f, i) => container.appendChild(renderCoords(ranks.map(r => f + r), 'squares rank' + rankN(i) + orientClass + ranksPositionClass)));
|
|
50
|
+
files.forEach((f, i) => container.appendChild(renderCoords(ranks.map(r => f + r), 'squares rank' + rankN(i) + orientClass + ranksPositionClass, i % 2 === 0 ? 'black' : 'white')));
|
|
51
51
|
}
|
|
52
52
|
else {
|
|
53
|
-
container.appendChild(renderCoords(ranks, 'ranks' +
|
|
54
|
-
container.appendChild(renderCoords(files, 'files'
|
|
53
|
+
container.appendChild(renderCoords(ranks, 'ranks' + ranksPositionClass, s.ranksPosition === 'right' ? 'white' : 'black'));
|
|
54
|
+
container.appendChild(renderCoords(files, 'files', 'black'));
|
|
55
55
|
}
|
|
56
56
|
}
|
|
57
57
|
let ghost;
|
|
@@ -73,14 +73,15 @@ function svgContainer(cls, isShapes) {
|
|
|
73
73
|
svg.appendChild(createSVG('g'));
|
|
74
74
|
return svg;
|
|
75
75
|
}
|
|
76
|
-
function renderCoords(elems, className) {
|
|
76
|
+
function renderCoords(elems, className, firstColor) {
|
|
77
77
|
const el = createEl('coords', className);
|
|
78
78
|
let f;
|
|
79
|
-
|
|
80
|
-
|
|
79
|
+
elems.forEach((elem, i) => {
|
|
80
|
+
const light = i % 2 === (firstColor === 'white' ? 0 : 1);
|
|
81
|
+
f = createEl('coord', `coord-${light ? 'light' : 'dark'}`);
|
|
81
82
|
f.textContent = elem;
|
|
82
83
|
el.appendChild(f);
|
|
83
|
-
}
|
|
84
|
+
});
|
|
84
85
|
return el;
|
|
85
86
|
}
|
|
86
87
|
//# sourceMappingURL=wrap.js.map
|
package/dist/wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"wrap.js","sourceRoot":"","sources":["../src/wrap.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/config.ts
CHANGED
|
@@ -13,6 +13,7 @@ export interface Config {
|
|
|
13
13
|
selected?: cg.Key; // square currently selected "a1"
|
|
14
14
|
coordinates?: boolean; // include coords attributes
|
|
15
15
|
coordinatesOnSquares?: boolean; // include coords attributes on every square
|
|
16
|
+
ranksPosition?: cg.RanksPosition; // render rank coords on the right (default) or the left
|
|
16
17
|
autoCastle?: boolean; // immediately complete the castle by moving the rook after king move
|
|
17
18
|
viewOnly?: boolean; // don't bind events: the user will never be able to move pieces around
|
|
18
19
|
disableContextMenu?: boolean; // because who needs a context menu on a chessboard
|
|
@@ -47,7 +48,6 @@ export interface Config {
|
|
|
47
48
|
castle?: boolean; // whether to allow king castle premoves
|
|
48
49
|
dests?: cg.Key[]; // premove destinations for the current selection
|
|
49
50
|
customDests?: cg.Dests; // use custom valid premoves. {"a2" ["a3" "a4"] "b1" ["a3" "c3"]}
|
|
50
|
-
unrestrictedPremoves?: boolean; // if falsy, the positions of friendly pieces will be used to trim premove options
|
|
51
51
|
additionalPremoveRequirements?: cg.Mobility;
|
|
52
52
|
events?: {
|
|
53
53
|
set?: (orig: cg.Key, dest: cg.Key, metadata?: cg.SetPremoveMetadata) => void; // called after the premove has been set
|
package/src/premove.ts
CHANGED
|
@@ -3,204 +3,33 @@ import * as cg from './types.js';
|
|
|
3
3
|
import { HeadlessState } from './state.js';
|
|
4
4
|
import { Mobility, MobilityContext } from './types.js';
|
|
5
5
|
|
|
6
|
-
const
|
|
6
|
+
const pawn: Mobility = (ctx: MobilityContext) =>
|
|
7
|
+
util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) <= 1 &&
|
|
8
|
+
(util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) === 1
|
|
9
|
+
? ctx.dest.pos[1] === ctx.orig.pos[1] + (ctx.color === 'white' ? 1 : -1)
|
|
10
|
+
: util.pawnDirAdvance(...ctx.orig.pos, ...ctx.dest.pos, ctx.color === 'white'));
|
|
7
11
|
|
|
8
|
-
const
|
|
12
|
+
const knight: Mobility = (ctx: MobilityContext) => util.knightDir(...ctx.orig.pos, ...ctx.dest.pos);
|
|
9
13
|
|
|
10
|
-
const
|
|
11
|
-
util.squaresBetween(...orig, ...dest).some(s => pieces.has(s));
|
|
14
|
+
const bishop: Mobility = (ctx: MobilityContext) => util.bishopDir(...ctx.orig.pos, ...ctx.dest.pos);
|
|
12
15
|
|
|
13
|
-
const
|
|
14
|
-
const piece = ctx.enemies.get(pawnStart);
|
|
15
|
-
if (piece?.role !== 'pawn') return false;
|
|
16
|
-
const step = piece.color === 'white' ? 1 : -1;
|
|
17
|
-
const startPos = util.key2pos(pawnStart);
|
|
18
|
-
const destPos = util.key2pos(dest);
|
|
19
|
-
return (
|
|
20
|
-
util.pawnDirAdvance(...startPos, ...destPos, piece.color === 'white') &&
|
|
21
|
-
!anyPieceBetween(startPos, [destPos[0], destPos[1] + step], ctx.allPieces)
|
|
22
|
-
);
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
const canEnemyPawnCaptureOnSquare = (pawnStart: cg.Key, dest: cg.Key, ctx: MobilityContext): boolean => {
|
|
26
|
-
const enemyPawn = ctx.enemies.get(pawnStart);
|
|
27
|
-
return (
|
|
28
|
-
enemyPawn?.role === 'pawn' &&
|
|
29
|
-
util.pawnDirCapture(...util.key2pos(pawnStart), ...util.key2pos(dest), enemyPawn.color === 'white') &&
|
|
30
|
-
(ctx.friendlies.has(dest) ||
|
|
31
|
-
canBeCapturedBySomeEnemyEnPassant(
|
|
32
|
-
util.squareShiftedVertically(dest, enemyPawn.color === 'white' ? -1 : 1),
|
|
33
|
-
ctx.friendlies,
|
|
34
|
-
ctx.enemies,
|
|
35
|
-
ctx.lastMove,
|
|
36
|
-
))
|
|
37
|
-
);
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
const canSomeEnemyPawnAdvanceToDest = (ctx: MobilityContext): boolean =>
|
|
41
|
-
[...ctx.enemies.keys()].some(key => canEnemyPawnAdvanceToSquare(key, ctx.dest.key, ctx));
|
|
42
|
-
|
|
43
|
-
const isDestControlledByEnemy = (ctx: MobilityContext, pieceRolesExclude?: cg.Role[]): boolean => {
|
|
44
|
-
const square: cg.Pos = ctx.dest.pos;
|
|
45
|
-
return [...ctx.enemies].some(([key, piece]) => {
|
|
46
|
-
const piecePos = util.key2pos(key);
|
|
47
|
-
return (
|
|
48
|
-
!pieceRolesExclude?.includes(piece.role) &&
|
|
49
|
-
((piece.role === 'pawn' && util.pawnDirCapture(...piecePos, ...square, piece.color === 'white')) ||
|
|
50
|
-
(piece.role === 'knight' && util.knightDir(...piecePos, ...square)) ||
|
|
51
|
-
(piece.role === 'bishop' && util.bishopDir(...piecePos, ...square)) ||
|
|
52
|
-
(piece.role === 'rook' && util.rookDir(...piecePos, ...square)) ||
|
|
53
|
-
(piece.role === 'queen' && util.queenDir(...piecePos, ...square)) ||
|
|
54
|
-
(piece.role === 'king' && util.kingDirNonCastling(...piecePos, ...square))) &&
|
|
55
|
-
(!['bishop', 'rook', 'queen'].includes(piece.role) || !anyPieceBetween(piecePos, square, ctx.allPieces))
|
|
56
|
-
);
|
|
57
|
-
});
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
const isFriendlyOnDestAndAttacked = (ctx: MobilityContext): boolean =>
|
|
61
|
-
isDestOccupiedByFriendly(ctx) &&
|
|
62
|
-
(canBeCapturedBySomeEnemyEnPassant(ctx.dest.key, ctx.friendlies, ctx.enemies, ctx.lastMove) ||
|
|
63
|
-
isDestControlledByEnemy(ctx));
|
|
64
|
-
|
|
65
|
-
const canBeCapturedBySomeEnemyEnPassant = (
|
|
66
|
-
potentialSquareOfFriendlyPawn: cg.Key | undefined,
|
|
67
|
-
friendlies: cg.Pieces,
|
|
68
|
-
enemies: cg.Pieces,
|
|
69
|
-
lastMove?: cg.Key[],
|
|
70
|
-
): boolean => {
|
|
71
|
-
if (!potentialSquareOfFriendlyPawn || (lastMove && potentialSquareOfFriendlyPawn !== lastMove[1]))
|
|
72
|
-
return false;
|
|
73
|
-
const pos = util.key2pos(potentialSquareOfFriendlyPawn);
|
|
74
|
-
const friendly = friendlies.get(potentialSquareOfFriendlyPawn);
|
|
75
|
-
return (
|
|
76
|
-
friendly?.role === 'pawn' &&
|
|
77
|
-
pos[1] === (friendly.color === 'white' ? 3 : 4) &&
|
|
78
|
-
(!lastMove || util.diff(util.key2pos(lastMove[0])[1], pos[1]) === 2) &&
|
|
79
|
-
[1, -1].some(delta => {
|
|
80
|
-
const k = util.pos2key([pos[0] + delta, pos[1]]);
|
|
81
|
-
return !!k && enemies.get(k)?.role === 'pawn';
|
|
82
|
-
})
|
|
83
|
-
);
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
const isPathClearEnoughOfFriendliesForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean => {
|
|
87
|
-
if (ctx.unrestrictedPremoves) return true;
|
|
88
|
-
const squaresBetween = util.squaresBetween(...ctx.orig.pos, ...ctx.dest.pos);
|
|
89
|
-
if (isPawnAdvance) squaresBetween.push(ctx.dest.key);
|
|
90
|
-
const squaresOfFriendliesBetween = squaresBetween.filter(s => ctx.friendlies.has(s));
|
|
91
|
-
if (!squaresOfFriendliesBetween.length) return true;
|
|
92
|
-
const firstSquareOfFriendliesBetween = squaresOfFriendliesBetween[0];
|
|
93
|
-
const nextSquare = util.squareShiftedVertically(
|
|
94
|
-
firstSquareOfFriendliesBetween,
|
|
95
|
-
ctx.color === 'white' ? -1 : 1,
|
|
96
|
-
);
|
|
97
|
-
return (
|
|
98
|
-
squaresOfFriendliesBetween.length === 1 &&
|
|
99
|
-
canBeCapturedBySomeEnemyEnPassant(
|
|
100
|
-
firstSquareOfFriendliesBetween,
|
|
101
|
-
ctx.friendlies,
|
|
102
|
-
ctx.enemies,
|
|
103
|
-
ctx.lastMove,
|
|
104
|
-
) &&
|
|
105
|
-
!!nextSquare &&
|
|
106
|
-
!squaresBetween.includes(nextSquare)
|
|
107
|
-
);
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
const isPathClearEnoughOfEnemiesForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean => {
|
|
111
|
-
if (ctx.unrestrictedPremoves) return true;
|
|
112
|
-
const squaresBetween = util.squaresBetween(...ctx.orig.pos, ...ctx.dest.pos);
|
|
113
|
-
if (isPawnAdvance) squaresBetween.push(ctx.dest.key);
|
|
114
|
-
const squaresOfEnemiesBetween = squaresBetween.filter(s => ctx.enemies.has(s));
|
|
115
|
-
if (squaresOfEnemiesBetween.length > 1) return false;
|
|
116
|
-
if (!squaresOfEnemiesBetween.length) return true;
|
|
117
|
-
const enemySquare = squaresOfEnemiesBetween[0];
|
|
118
|
-
const enemy = ctx.enemies.get(enemySquare);
|
|
119
|
-
if (!enemy || enemy.role !== 'pawn') return true;
|
|
120
|
-
|
|
121
|
-
const enemyStep = enemy.color === 'white' ? 1 : -1;
|
|
122
|
-
const squareAbove = util.squareShiftedVertically(enemySquare, enemyStep);
|
|
123
|
-
const enemyPawnDests: cg.Key[] = squareAbove
|
|
124
|
-
? [
|
|
125
|
-
...util.adjacentSquares(squareAbove).filter(s => canEnemyPawnCaptureOnSquare(enemySquare, s, ctx)),
|
|
126
|
-
...[squareAbove, util.squareShiftedVertically(squareAbove, enemyStep)]
|
|
127
|
-
.filter(s => !!s)
|
|
128
|
-
.filter(s => canEnemyPawnAdvanceToSquare(enemySquare, s, ctx)),
|
|
129
|
-
]
|
|
130
|
-
: [];
|
|
131
|
-
const badSquares = [...squaresBetween, ctx.orig.key];
|
|
132
|
-
return enemyPawnDests.some(square => !badSquares.includes(square));
|
|
133
|
-
};
|
|
134
|
-
|
|
135
|
-
const isPathClearEnoughForPremove = (ctx: MobilityContext, isPawnAdvance: boolean): boolean =>
|
|
136
|
-
isPathClearEnoughOfFriendliesForPremove(ctx, isPawnAdvance) &&
|
|
137
|
-
isPathClearEnoughOfEnemiesForPremove(ctx, isPawnAdvance);
|
|
138
|
-
|
|
139
|
-
const pawn: Mobility = (ctx: MobilityContext) => {
|
|
140
|
-
const step = ctx.color === 'white' ? 1 : -1;
|
|
141
|
-
if (util.diff(ctx.orig.pos[0], ctx.dest.pos[0]) > 1) return false;
|
|
142
|
-
if (!util.diff(ctx.orig.pos[0], ctx.dest.pos[0]))
|
|
143
|
-
return (
|
|
144
|
-
util.pawnDirAdvance(...ctx.orig.pos, ...ctx.dest.pos, ctx.color === 'white') &&
|
|
145
|
-
isPathClearEnoughForPremove(ctx, true)
|
|
146
|
-
);
|
|
147
|
-
if (ctx.dest.pos[1] !== ctx.orig.pos[1] + step) return false;
|
|
148
|
-
if (ctx.unrestrictedPremoves || isDestOccupiedByEnemy(ctx)) return true;
|
|
149
|
-
if (isDestOccupiedByFriendly(ctx)) return isDestControlledByEnemy(ctx);
|
|
150
|
-
else
|
|
151
|
-
return (
|
|
152
|
-
canSomeEnemyPawnAdvanceToDest(ctx) ||
|
|
153
|
-
canBeCapturedBySomeEnemyEnPassant(
|
|
154
|
-
util.pos2key([ctx.dest.pos[0], ctx.dest.pos[1] + step]),
|
|
155
|
-
ctx.friendlies,
|
|
156
|
-
ctx.enemies,
|
|
157
|
-
ctx.lastMove,
|
|
158
|
-
) ||
|
|
159
|
-
isDestControlledByEnemy(ctx, ['pawn'])
|
|
160
|
-
);
|
|
161
|
-
};
|
|
162
|
-
|
|
163
|
-
const knight: Mobility = (ctx: MobilityContext) =>
|
|
164
|
-
util.knightDir(...ctx.orig.pos, ...ctx.dest.pos) &&
|
|
165
|
-
(ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
|
|
166
|
-
|
|
167
|
-
const bishop: Mobility = (ctx: MobilityContext) =>
|
|
168
|
-
util.bishopDir(...ctx.orig.pos, ...ctx.dest.pos) &&
|
|
169
|
-
isPathClearEnoughForPremove(ctx, false) &&
|
|
170
|
-
(ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
|
|
171
|
-
|
|
172
|
-
const rook: Mobility = (ctx: MobilityContext) =>
|
|
173
|
-
util.rookDir(...ctx.orig.pos, ...ctx.dest.pos) &&
|
|
174
|
-
isPathClearEnoughForPremove(ctx, false) &&
|
|
175
|
-
(ctx.unrestrictedPremoves || !isDestOccupiedByFriendly(ctx) || isFriendlyOnDestAndAttacked(ctx));
|
|
16
|
+
const rook: Mobility = (ctx: MobilityContext) => util.rookDir(...ctx.orig.pos, ...ctx.dest.pos);
|
|
176
17
|
|
|
177
18
|
const queen: Mobility = (ctx: MobilityContext) => bishop(ctx) || rook(ctx);
|
|
178
19
|
|
|
179
20
|
const king: Mobility = (ctx: MobilityContext) =>
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
(ctx.canCastle &&
|
|
183
|
-
ctx.orig.pos[1] === ctx.dest.pos[1] &&
|
|
21
|
+
util.kingDirNonCastling(...ctx.orig.pos, ...ctx.dest.pos) ||
|
|
22
|
+
(ctx.orig.pos[1] === ctx.dest.pos[1] &&
|
|
184
23
|
ctx.orig.pos[1] === (ctx.color === 'white' ? 0 : 7) &&
|
|
185
24
|
((ctx.orig.pos[0] === 4 &&
|
|
186
25
|
((ctx.dest.pos[0] === 2 && ctx.rookFilesFriendlies.includes(0)) ||
|
|
187
26
|
(ctx.dest.pos[0] === 6 && ctx.rookFilesFriendlies.includes(7)))) ||
|
|
188
|
-
ctx.rookFilesFriendlies.includes(ctx.dest.pos[0]))
|
|
189
|
-
(ctx.unrestrictedPremoves ||
|
|
190
|
-
/* The following checks if no non-rook friendly piece is in the way between the king and its castling destination.
|
|
191
|
-
Note that for the Chess960 edge case of Kb1 "long castling", the check passes even if there is a piece in the way
|
|
192
|
-
on c1. But this is fine, since premoving from b1 to a1 as a normal move would have already returned true. */
|
|
193
|
-
util
|
|
194
|
-
.squaresBetween(...ctx.orig.pos, ctx.dest.pos[0] > ctx.orig.pos[0] ? 7 : 1, ctx.dest.pos[1])
|
|
195
|
-
.map(s => ctx.allPieces.get(s))
|
|
196
|
-
.every(p => !p || util.samePiece(p, { role: 'rook', color: ctx.color }))));
|
|
27
|
+
ctx.rookFilesFriendlies.includes(ctx.dest.pos[0])));
|
|
197
28
|
|
|
198
29
|
const mobilityByRole = { pawn, knight, bishop, rook, queen, king };
|
|
199
30
|
|
|
200
31
|
export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
|
|
201
|
-
const pieces = state.pieces
|
|
202
|
-
canCastle = state.premovable.castle,
|
|
203
|
-
unrestrictedPremoves = !!state.premovable.unrestrictedPremoves;
|
|
32
|
+
const pieces = state.pieces;
|
|
204
33
|
const piece = pieces.get(key);
|
|
205
34
|
if (!piece || piece.color === state.turnColor) return [];
|
|
206
35
|
const color = piece.color,
|
|
@@ -215,9 +44,7 @@ export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
|
|
|
215
44
|
allPieces: pieces,
|
|
216
45
|
friendlies: friendlies,
|
|
217
46
|
enemies: enemies,
|
|
218
|
-
unrestrictedPremoves: unrestrictedPremoves,
|
|
219
47
|
color: color,
|
|
220
|
-
canCastle: canCastle,
|
|
221
48
|
rookFilesFriendlies: Array.from(pieces)
|
|
222
49
|
.filter(
|
|
223
50
|
([k, p]) => k[1] === (color === 'white' ? '1' : '8') && p.color === color && p.role === 'rook',
|
|
@@ -225,5 +52,6 @@ export function premove(state: HeadlessState, key: cg.Key): cg.Key[] {
|
|
|
225
52
|
.map(([k]) => util.key2pos(k)[0]),
|
|
226
53
|
lastMove: state.lastMove,
|
|
227
54
|
};
|
|
55
|
+
// todo - remove more properties from MobilityContext that aren't used in this file, and adjust as needed in lila.
|
|
228
56
|
return util.allPosAndKey.filter(dest => mobility({ ...partialCtx, dest })).map(pk => pk.key);
|
|
229
57
|
}
|