@lichess-org/chessground 9.8.3 → 9.8.5

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.
@@ -8,6 +8,7 @@ export function render(state, autoPieceEl) {
8
8
  shape: s,
9
9
  hash: hash(s),
10
10
  current: false,
11
+ pendingErase: false,
11
12
  };
12
13
  });
13
14
  syncShapes(autoPieceShapes, autoPieceEl, shape => renderShape(state, shape, state.dom.bounds()));
@@ -1 +1 @@
1
- {"version":3,"file":"autoPieces.js","sourceRoot":"","sources":["../src/autoPieces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,IAAI,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7G,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAuB,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,UAAU,MAAM,CAAC,KAAY,EAAE,WAAwB;IAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,eAAe,GAAoB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE;QACvE,OAAO;YACL,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACb,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,OAAO,GAAY,QAAQ,CAAC,KAAK,CAAC,EACtC,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAsC,CAAC;IAC/E,OAAO,EAAE,EAAE,CAAC;QACV,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC9E,EAAE,GAAG,EAAE,CAAC,WAAuC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAiB,EAAE,MAAuB;IACxF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IAEjC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAiB,CAAC;IACtE,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;IACxB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEpG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,SAAoB,EAAQ,EAAE,CAC1C,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
1
+ {"version":3,"file":"autoPieces.js","sourceRoot":"","sources":["../src/autoPieces.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,cAAc,IAAI,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC7G,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGtC,OAAO,EAAuB,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,UAAU,MAAM,CAAC,KAAY,EAAE,WAAwB;IAC3D,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IAClF,MAAM,eAAe,GAAoB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE;QACvE,OAAO;YACL,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YACb,OAAO,EAAE,KAAK;YACd,YAAY,EAAE,KAAK;SACpB,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,UAAU,CAAC,eAAe,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACnG,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAY;IACxC,MAAM,OAAO,GAAY,QAAQ,CAAC,KAAK,CAAC,EACtC,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,IAAI,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,EAAE,UAAsC,CAAC;IAC/E,OAAO,EAAE,EAAE,CAAC;QACV,iBAAiB,CAAC,EAAE,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QAC9E,EAAE,GAAG,EAAE,CAAC,WAAuC,CAAC;IAClD,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAY,EAAE,EAAE,KAAK,EAAE,IAAI,EAAiB,EAAE,MAAuB;IACxF,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;IACxB,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC;IAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IACjC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC;IAEjC,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,KAAK,EAAE,CAAiB,CAAC;IACtE,OAAO,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IACrB,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;IACxB,iBAAiB,CAAC,OAAO,EAAE,wBAAwB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAEpG,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,IAAI,GAAG,CAAC,SAAoB,EAAQ,EAAE,CAC1C,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC"}
@@ -1 +1 @@
1
- var Qe=["white","black"];var W=["a","b","c","d","e","f","g","h"],j=["1","2","3","4","5","6","7","8"];var Je=[...j].reverse(),Q=W.flatMap(e=>j.map(o=>e+o)),M=e=>e.every(o=>o>=0&&o<=7)?Q[8*e[0]+e[1]]:void 0,L=e=>M(e),f=e=>[e.charCodeAt(0)-97,e.charCodeAt(1)-49];var Ce=Q.map(f),eo=Q.map((e,o)=>({key:e,pos:Ce[o]}));function oo(e){let o,r=()=>(o===void 0&&(o=e()),o);return r.clear=()=>{o=void 0},r}var ro=()=>{let e;return{start(){e=performance.now()},cancel(){e=void 0},stop(){if(!e)return 0;let o=performance.now()-e;return e=void 0,o}}},U=e=>e==="white"?"black":"white",F=(e,o)=>(e[0]-o[0])**2+(e[1]-o[1])**2,z=(e,o)=>e.role===o.role&&e.color===o.color,no=(e,o)=>e[0]===o[0]&&e[1]===o[1],G=e=>(o,r)=>[(r?o[0]:7-o[0])*e.width/8,(r?7-o[1]:o[1])*e.height/8],k=(e,o)=>{e.style.transform=`translate(${o[0]}px,${o[1]}px)`},De=(e,o,r=1)=>{e.style.transform=`translate(${o[0]}px,${o[1]}px) scale(${r})`},Y=(e,o)=>{e.style.visibility=o?"visible":"hidden"},T=e=>{if(e.clientX||e.clientX===0)return[e.clientX,e.clientY];if(e.targetTouches?.[0])return[e.targetTouches[0].clientX,e.targetTouches[0].clientY]},le=e=>e.button===2,C=(e,o)=>{let r=document.createElement(e);return o&&(r.className=o),r};function de(e,o,r){let n=f(e);return o||(n[0]=7-n[0],n[1]=7-n[1]),[r.left+r.width*n[0]/8+r.width/16,r.top+r.height*(7-n[1])/8+r.height/16]}var K=(e,o)=>Math.abs(e-o),J=(e,o,r,n)=>K(e,r)*K(o,n)===2,ue=(e,o,r,n)=>e===r!=(o===n),pe=(e,o,r,n)=>K(e,r)===K(o,n)&&e!==r,fe=(e,o,r,n)=>ue(e,o,r,n)||pe(e,o,r,n),Ke=(e,o,r,n)=>Math.max(K(e,r),K(o,n))===1,xe=(e,o,r,n,t)=>K(e,r)===1&&n===o+(t?1:-1),Ee=(e,o,r,n,t)=>{let i=t?1:-1;return e===r&&(n===o+i||n===o+2*i&&(t?o<=1:o>=6))},ee=(e,o,r,n)=>{let t=r-e,i=n-o;if(t&&i&&Math.abs(t)!==Math.abs(i))return[];let a=Math.sign(t),l=Math.sign(i),d=[],s=e+a,c=o+l;for(;s!==r||c!==n;)d.push([s,c]),s+=a,c+=l;return d.map(M).filter(u=>u!==void 0)},to=e=>{let o=f(e),r=[];return o[0]>0&&r.push([o[0]-1,o[1]]),o[0]<7&&r.push([o[0]+1,o[1]]),r.map(M).filter(n=>n!==void 0)},oe=(e,o)=>{let r=f(e);return r[1]+=o,M(r)};var Z=e=>e.friendlies.has(e.dest.key),ar=e=>e.enemies.has(e.dest.key),io=(e,o,r)=>ee(...e,...o).some(n=>r.has(n)),ao=(e,o,r)=>{let n=r.enemies.get(e);if(n?.role!=="pawn")return!1;let t=n.color==="white"?1:-1,i=f(e),a=f(o);return Ee(...i,...a,n.color==="white")&&!io(i,[a[0],a[1]+t],r.allPieces)},sr=(e,o,r)=>{let n=r.enemies.get(e);return n?.role==="pawn"&&xe(...f(e),...f(o),n.color==="white")&&(r.friendlies.has(o)||me(oe(o,n.color==="white"?-1:1),r.friendlies,r.enemies,r.lastMove))},cr=e=>[...e.enemies.keys()].some(o=>ao(o,e.dest.key,e)),Ae=(e,o)=>{let r=e.dest.pos;return[...e.enemies].some(([n,t])=>{let i=f(n);return!o?.includes(t.role)&&(t.role==="pawn"&&xe(...i,...r,t.color==="white")||t.role==="knight"&&J(...i,...r)||t.role==="bishop"&&pe(...i,...r)||t.role==="rook"&&ue(...i,...r)||t.role==="queen"&&fe(...i,...r)||t.role==="king"&&Ke(...i,...r))&&(!["bishop","rook","queen"].includes(t.role)||!io(i,r,e.allPieces))})},ge=e=>Z(e)&&(me(e.dest.key,e.friendlies,e.enemies,e.lastMove)||Ae(e)),me=(e,o,r,n)=>{if(!e||n&&e!==n[1])return!1;let t=f(e),i=o.get(e);return i?.role==="pawn"&&t[1]===(i.color==="white"?3:4)&&(!n||K(f(n[0])[1],t[1])===2)&&[1,-1].some(a=>{let l=M([t[0]+a,t[1]]);return!!l&&r.get(l)?.role==="pawn"})},lr=(e,o)=>{if(e.unrestrictedPremoves)return!0;let r=ee(...e.orig.pos,...e.dest.pos);o&&r.push(e.dest.key);let n=r.filter(a=>e.friendlies.has(a));if(!n.length)return!0;let t=n[0],i=oe(t,e.color==="white"?-1:1);return n.length===1&&me(t,e.friendlies,e.enemies,e.lastMove)&&!!i&&!r.includes(i)},dr=(e,o)=>{if(e.unrestrictedPremoves)return!0;let r=ee(...e.orig.pos,...e.dest.pos);o&&r.push(e.dest.key);let n=r.filter(c=>e.enemies.has(c));if(n.length>1)return!1;if(!n.length)return!0;let t=n[0],i=e.enemies.get(t);if(!i||i.role!=="pawn")return!0;let a=i.color==="white"?1:-1,l=oe(t,a),d=l?[...to(l).filter(c=>sr(t,c,e)),...[l,oe(l,a)].filter(c=>!!c).filter(c=>ao(t,c,e))]:[],s=[...r,e.orig.key];return d.some(c=>!s.includes(c))},Ne=(e,o)=>lr(e,o)&&dr(e,o),ur=e=>{let o=e.color==="white"?1:-1;return K(e.orig.pos[0],e.dest.pos[0])>1?!1:K(e.orig.pos[0],e.dest.pos[0])?e.dest.pos[1]!==e.orig.pos[1]+o?!1:e.unrestrictedPremoves||ar(e)?!0:Z(e)?Ae(e):cr(e)||me(M([e.dest.pos[0],e.dest.pos[1]+o]),e.friendlies,e.enemies,e.lastMove)||Ae(e,["pawn"]):Ee(...e.orig.pos,...e.dest.pos,e.color==="white")&&Ne(e,!0)},pr=e=>J(...e.orig.pos,...e.dest.pos)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),so=e=>pe(...e.orig.pos,...e.dest.pos)&&Ne(e,!1)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),co=e=>ue(...e.orig.pos,...e.dest.pos)&&Ne(e,!1)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),fr=e=>so(e)||co(e),gr=e=>Ke(...e.orig.pos,...e.dest.pos)&&(e.unrestrictedPremoves||!Z(e)||ge(e))||e.canCastle&&e.orig.pos[1]===e.dest.pos[1]&&e.orig.pos[1]===(e.color==="white"?0:7)&&(e.orig.pos[0]===4&&(e.dest.pos[0]===2&&e.rookFilesFriendlies.includes(0)||e.dest.pos[0]===6&&e.rookFilesFriendlies.includes(7))||e.rookFilesFriendlies.includes(e.dest.pos[0]))&&(e.unrestrictedPremoves||ee(...e.orig.pos,e.dest.pos[0]>e.orig.pos[0]?7:1,e.dest.pos[1]).map(o=>e.allPieces.get(o)).every(o=>!o||z(o,{role:"rook",color:e.color}))),mr={pawn:ur,knight:pr,bishop:so,rook:co,queen:fr,king:gr};function He(e,o){let r=e.pieces,n=e.premovable.castle,t=!!e.premovable.unrestrictedPremoves,i=r.get(o);if(!i||i.color===e.turnColor)return[];let a=i.color,l=new Map([...r].filter(([p,m])=>m.color===a)),d=new Map([...r].filter(([p,m])=>m.color===U(a))),s={key:o,pos:f(o)},c=p=>mr[i.role](p)&&e.premovable.additionalPremoveRequirements(p),u={orig:s,role:i.role,allPieces:r,friendlies:l,enemies:d,unrestrictedPremoves:t,color:a,canCastle:n,rookFilesFriendlies:Array.from(r).filter(([p,m])=>p[1]===(a==="white"?"1":"8")&&m.color===a&&m.role==="rook").map(([p])=>f(p)[0]),lastMove:e.lastMove};return eo.filter(p=>c({...u,dest:p})).map(p=>p.key)}function S(e,...o){e&&setTimeout(()=>e(...o),1)}function lo(e){e.orientation=U(e.orientation),e.animation.current=e.draggable.current=e.selected=void 0}function uo(e,o){for(let[r,n]of o)n?e.pieces.set(r,n):e.pieces.delete(r)}function po(e,o){if(e.check=void 0,o===!0&&(o=e.turnColor),o)for(let[r,n]of e.pieces)n.role==="king"&&n.color===o&&(e.check=r)}function br(e,o,r,n){E(e),e.premovable.current=[o,r],S(e.premovable.events.set,o,r,n)}function x(e){e.premovable.current&&(e.premovable.current=void 0,S(e.premovable.events.unset))}function hr(e,o,r){x(e),e.predroppable.current={role:o,key:r},S(e.predroppable.events.set,o,r)}function E(e){let o=e.predroppable;o.current&&(o.current=void 0,S(o.events.unset))}function vr(e,o,r){if(!e.autoCastle)return!1;let n=e.pieces.get(o);if(!n||n.role!=="king")return!1;let t=f(o),i=f(r);if(t[1]!==0&&t[1]!==7||t[1]!==i[1])return!1;t[0]===4&&!e.pieces.has(r)&&(i[0]===6?r=L([7,i[1]]):i[0]===2&&(r=L([0,i[1]])));let a=e.pieces.get(r);return!a||a.color!==n.color||a.role!=="rook"?!1:(e.pieces.delete(o),e.pieces.delete(r),t[0]<i[0]?(e.pieces.set(L([6,i[1]]),n),e.pieces.set(L([5,i[1]]),a)):(e.pieces.set(L([2,i[1]]),n),e.pieces.set(L([3,i[1]]),a)),!0)}function qe(e,o,r){let n=e.pieces.get(o),t=e.pieces.get(r);if(o===r||!n)return!1;let i=t&&t.color!==n.color?t:void 0;return r===e.selected&&P(e),S(e.events.move,o,r,i),vr(e,o,r)||(e.pieces.set(r,n),e.pieces.delete(o)),e.lastMove=[o,r],e.check=void 0,S(e.events.change),i||!0}function be(e,o,r,n){if(e.pieces.has(r))if(n)e.pieces.delete(r);else return!1;return S(e.events.dropNewPiece,o,r),e.pieces.set(r,o),e.lastMove=[r],e.check=void 0,S(e.events.change),e.movable.dests=void 0,e.turnColor=U(e.turnColor),!0}function fo(e,o,r){let n=qe(e,o,r);return n&&(e.movable.dests=void 0,e.turnColor=U(e.turnColor),e.animation.current=void 0),n}function Te(e,o,r){if(ve(e,o,r)){let n=fo(e,o,r);if(n){let t=e.hold.stop();P(e);let i={premove:!1,ctrlKey:e.stats.ctrlKey,holdTime:t};return n!==!0&&(i.captured=n),S(e.movable.events.after,o,r,i),!0}}else if(wr(e,o,r))return br(e,o,r,{ctrlKey:e.stats.ctrlKey}),P(e),!0;return P(e),!1}function he(e,o,r,n){let t=e.pieces.get(o);t&&(yr(e,o,r)||n)?(e.pieces.delete(o),be(e,t,r,n),S(e.movable.events.afterNewPiece,t.role,r,{premove:!1,predrop:!1})):t&&Pr(e,o,r)?hr(e,t.role,r):(x(e),E(e)),e.pieces.delete(o),P(e)}function ne(e,o,r){if(S(e.events.select,o),e.selected){if(e.selected===o&&!e.draggable.enabled){P(e),e.hold.cancel();return}else if((e.selectable.enabled||r)&&e.selected!==o&&Te(e,e.selected,o)){e.stats.dragged=!1;return}}(e.selectable.enabled||e.draggable.enabled)&&(go(e,o)||Re(e,o))&&(Be(e,o),e.hold.start())}function Be(e,o){e.selected=o,Re(e,o)?e.premovable.customDests||(e.premovable.dests=He(e,o)):e.premovable.dests=void 0}function P(e){e.selected=void 0,e.premovable.dests=void 0,e.hold.cancel()}function go(e,o){let r=e.pieces.get(o);return!!r&&(e.movable.color==="both"||e.movable.color===r.color&&e.turnColor===r.color)}var ve=(e,o,r)=>o!==r&&go(e,o)&&(e.movable.free||!!e.movable.dests?.get(o)?.includes(r));function yr(e,o,r){let n=e.pieces.get(o);return!!n&&(o===r||!e.pieces.has(r))&&(e.movable.color==="both"||e.movable.color===n.color&&e.turnColor===n.color)}function Re(e,o){let r=e.pieces.get(o);return!!r&&e.premovable.enabled&&e.movable.color===r.color&&e.turnColor!==r.color}var wr=(e,o,r)=>o!==r&&Re(e,o)&&(e.premovable.customDests?.get(o)??He(e,o)).includes(r);function Pr(e,o,r){let n=e.pieces.get(o),t=e.pieces.get(r);return!!n&&(!t||t.color!==e.movable.color)&&e.predroppable.enabled&&(n.role!=="pawn"||r[1]!=="1"&&r[1]!=="8")&&e.movable.color===n.color&&e.turnColor!==n.color}function mo(e,o){let r=e.pieces.get(o);return!!r&&e.draggable.enabled&&(e.movable.color==="both"||e.movable.color===r.color&&(e.turnColor===r.color||e.premovable.enabled))}function bo(e){let o=e.premovable.current;if(!o)return!1;let r=o[0],n=o[1],t=!1;if(ve(e,r,n)){let i=fo(e,r,n);if(i){let a={premove:!0};i!==!0&&(a.captured=i),S(e.movable.events.after,r,n,a),t=!0}}return x(e),t}function ho(e,o){let r=e.predroppable.current,n=!1;if(!r)return!1;if(o(r)){let t={role:r.role,color:e.movable.color};be(e,t,r.key)&&(S(e.movable.events.afterNewPiece,r.role,r.key,{premove:!1,predrop:!0}),n=!0)}return E(e),n}function te(e){x(e),E(e),P(e)}function Oe(e){e.movable.color=e.movable.dests=e.animation.current=void 0,te(e)}function A(e,o,r){let n=Math.floor(8*(e[0]-r.left)/r.width);o||(n=7-n);let t=7-Math.floor(8*(e[1]-r.top)/r.height);return o||(t=7-t),n>=0&&n<8&&t>=0&&t<8?M([n,t]):void 0}function vo(e,o,r,n){let t=f(e),i=Ce.filter(s=>no(t,s)||fe(t[0],t[1],s[0],s[1])||J(t[0],t[1],s[0],s[1])),l=i.map(s=>de(L(s),r,n)).map(s=>F(o,s)),[,d]=l.reduce((s,c,u)=>s[0]<c?s:[c,u],[l[0],0]);return M(i[d])}var h=e=>e.orientation==="white";var Le="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",Sr={p:"pawn",r:"rook",n:"knight",b:"bishop",q:"queen",k:"king"},Mr={pawn:"p",rook:"r",knight:"n",bishop:"b",queen:"q",king:"k"};function ye(e){e==="start"&&(e=Le);let o=new Map,r=7,n=0;for(let t of e)switch(t){case" ":case"[":return o;case"/":if(--r,r<0)return o;n=0;break;case"~":{let i=M([n-1,r]),a=i&&o.get(i);a&&(a.promoted=!0);break}default:{let i=t.charCodeAt(0);if(i<57)n+=i-48;else{let a=t.toLowerCase(),l=M([n,r]);l&&o.set(l,{role:Sr[a],color:t===a?"black":"white"}),++n}}}return o}function yo(e){return Je.map(o=>W.map(r=>{let n=e.get(r+o);if(n){let t=Mr[n.role];return n.color==="white"&&(t=t.toUpperCase()),n.promoted&&(t+="~"),t}else return"1"}).join("")).join("/").replace(/1{2,}/g,o=>o.length.toString())}function Fe(e,o){o.animation&&(Ge(e.animation,o.animation),(e.animation.duration||0)<70&&(e.animation.enabled=!1))}function we(e,o){if(o.movable?.dests&&(e.movable.dests=void 0),o.drawable?.autoShapes&&(e.drawable.autoShapes=[]),Ge(e,o),o.fen&&(e.pieces=ye(o.fen),e.drawable.shapes=o.drawable?.shapes||[]),"check"in o&&po(e,o.check||!1),"lastMove"in o&&!o.lastMove?e.lastMove=void 0:o.lastMove&&(e.lastMove=o.lastMove),e.selected&&Be(e,e.selected),Fe(e,o),!e.movable.rookCastle&&e.movable.dests){let r=e.movable.color==="white"?"1":"8",n="e"+r,t=e.movable.dests.get(n),i=e.pieces.get(n);if(!t||!i||i.role!=="king")return;e.movable.dests.set(n,t.filter(a=>!(a==="a"+r&&t.includes("c"+r))&&!(a==="h"+r&&t.includes("g"+r))))}}function Ge(e,o){for(let r in o)r==="__proto__"||r==="constructor"||!Object.prototype.hasOwnProperty.call(o,r)||(Object.prototype.hasOwnProperty.call(e,r)&&wo(e[r])&&wo(o[r])?Ge(e[r],o[r]):e[r]=o[r])}function wo(e){if(typeof e!="object"||e===null)return!1;let o=Object.getPrototypeOf(e);return o===Object.prototype||o===null}var R=(e,o)=>o.animation.enabled?Kr(e,o):O(e,o);function O(e,o){let r=e(o);return o.dom.redraw(),r}var We=(e,o)=>({key:e,pos:f(e),piece:o}),Cr=(e,o)=>o.sort((r,n)=>F(e.pos,r.pos)-F(e.pos,n.pos))[0];function Dr(e,o){let r=new Map,n=[],t=new Map,i=[],a=[],l=new Map,d,s,c;for(let[u,p]of e)l.set(u,We(u,p));for(let u of Q)d=o.pieces.get(u),s=l.get(u),d?s?z(d,s.piece)||(i.push(s),a.push(We(u,d))):a.push(We(u,d)):s&&i.push(s);for(let u of a)s=Cr(u,i.filter(p=>z(u.piece,p.piece))),s&&(c=[s.pos[0]-u.pos[0],s.pos[1]-u.pos[1]],r.set(u.key,c.concat(c)),n.push(s.key));for(let u of i)n.includes(u.key)||t.set(u.key,u.piece);return{anims:r,fadings:t}}function Po(e,o){let r=e.animation.current;if(r===void 0){e.dom.destroyed||e.dom.redrawNow();return}let n=1-(o-r.start)*r.frequency;if(n<=0)e.animation.current=void 0,e.dom.redrawNow();else{let t=xr(n);for(let i of r.plan.anims.values())i[2]=i[0]*t,i[3]=i[1]*t;e.dom.redrawNow(!0),requestAnimationFrame((i=performance.now())=>Po(e,i))}}function Kr(e,o){let r=new Map(o.pieces),n=e(o),t=Dr(r,o);if(t.anims.size||t.fadings.size){let i=o.animation.current&&o.animation.current.start;o.animation.current={start:performance.now(),frequency:1/o.animation.duration,plan:t},i||Po(o,performance.now())}else o.dom.redraw();return n}var xr=e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1;var Er=["green","red","blue","yellow"];function So(e,o){if(o.touches&&o.touches.length>1)return;o.stopPropagation(),o.preventDefault(),o.ctrlKey?P(e):te(e);let r=T(o),n=A(r,h(e),e.dom.bounds());n&&(e.drawable.current={orig:n,pos:r,brush:Ar(o),snapToValidMove:e.drawable.defaultSnapToValidMove},Mo(e))}function Mo(e){requestAnimationFrame(()=>{let o=e.drawable.current;if(o){let r=A(o.pos,h(e),e.dom.bounds());r||(o.snapToValidMove=!1);let n=o.snapToValidMove?vo(o.orig,o.pos,h(e),e.dom.bounds()):r;n!==o.mouseSq&&(o.mouseSq=n,o.dest=n!==o.orig?n:void 0,e.dom.redrawNow()),Mo(e)}})}function ko(e,o){e.drawable.current&&(e.drawable.current.pos=T(o))}function Co(e){let o=e.drawable.current;o&&(o.mouseSq&&Nr(e.drawable,o),ze(e))}function ze(e){e.drawable.current&&(e.drawable.current=void 0,e.dom.redraw())}function Do(e){e.drawable.shapes.length&&(e.drawable.shapes=[],e.dom.redraw(),Ko(e.drawable))}function Ar(e){let o=(e.shiftKey||e.ctrlKey)&&le(e),r=e.altKey||e.metaKey||e.getModifierState?.("AltGraph");return Er[(o?1:0)+(r?2:0)]}function Nr(e,o){let r=t=>t.orig===o.orig&&t.dest===o.dest,n=e.shapes.find(r);n&&(e.shapes=e.shapes.filter(t=>!r(t))),(!n||n.brush!==o.brush)&&e.shapes.push({orig:o.orig,dest:o.dest,brush:o.brush}),Ko(e)}function Ko(e){e.onChange&&e.onChange(e.shapes)}function xo(e,o){if(!(e.trustAllEvents||o.isTrusted)||o.buttons!==void 0&&o.buttons>1||o.touches&&o.touches.length>1)return;let r=e.dom.bounds(),n=T(o),t=A(n,h(e),r);if(!t)return;let i=e.pieces.get(t),a=e.selected;if(!a&&e.drawable.enabled&&(e.drawable.eraseOnMovablePieceClick||!i||i.color!==e.turnColor)&&Do(e),o.cancelable!==!1&&(!o.touches||e.blockTouchScroll||i||a||qr(e,n)))o.preventDefault();else if(o.touches)return;let l=!!e.premovable.current,d=!!e.predroppable.current;e.stats.ctrlKey=o.ctrlKey,e.selected&&ve(e,e.selected,t)?R(u=>ne(u,t),e):ne(e,t);let s=e.selected===t,c=qo(e,t);if(i&&c&&s&&mo(e,t)){e.draggable.current={orig:t,piece:i,origPos:n,pos:n,started:e.draggable.autoDistance&&e.stats.dragged,element:c,previouslySelected:a,originTarget:o.target,keyHasChanged:!1},c.cgDragging=!0,c.classList.add("dragging");let u=e.dom.elements.ghost;u&&(u.className=`ghost ${i.color} ${i.role}`,k(u,G(r)(f(t),h(e))),Y(u,!0)),$e(e)}else l&&x(e),d&&E(e);e.dom.redraw()}function qr(e,o){let r=h(e),n=e.dom.bounds(),t=Math.pow(e.touchIgnoreRadius*n.width/16,2)*2;for(let i of e.pieces.keys()){let a=de(i,r,n);if(F(a,o)<=t)return!0}return!1}function Eo(e,o,r,n){let t="a0";e.pieces.set(t,o),e.dom.redraw();let i=T(r);e.draggable.current={orig:t,piece:o,origPos:i,pos:i,started:!0,element:()=>qo(e,t),originTarget:r.target,newPiece:!0,force:!!n,keyHasChanged:!1},$e(e)}function $e(e){requestAnimationFrame(()=>{let o=e.draggable.current;if(!o)return;e.animation.current?.plan.anims.has(o.orig)&&(e.animation.current=void 0);let r=e.pieces.get(o.orig);if(!r||!z(r,o.piece))$(e);else if(!o.started&&F(o.pos,o.origPos)>=Math.pow(e.draggable.distance,2)&&(o.started=!0),o.started){if(typeof o.element=="function"){let t=o.element();if(!t)return;t.cgDragging=!0,t.classList.add("dragging"),o.element=t}let n=e.dom.bounds();k(o.element,[o.pos[0]-n.left-n.width/16,o.pos[1]-n.top-n.height/16]),o.keyHasChanged||=o.orig!==A(o.pos,h(e),n)}$e(e)})}function Ao(e,o){e.draggable.current&&(!o.touches||o.touches.length<2)&&(e.draggable.current.pos=T(o))}function No(e,o){let r=e.draggable.current;if(!r)return;if(o.type==="touchend"&&o.cancelable!==!1&&o.preventDefault(),o.type==="touchend"&&r.originTarget!==o.target&&!r.newPiece){e.draggable.current=void 0;return}x(e),E(e);let n=T(o)||r.pos,t=A(n,h(e),e.dom.bounds());t&&r.started&&r.orig!==t?r.newPiece?he(e,r.orig,t,r.force):(e.stats.ctrlKey=o.ctrlKey,Te(e,r.orig,t)&&(e.stats.dragged=!0)):r.newPiece?e.pieces.delete(r.orig):e.draggable.deleteOnDropOff&&!t&&(e.pieces.delete(r.orig),S(e.events.change)),(r.orig===r.previouslySelected||r.keyHasChanged)&&(r.orig===t||!t)?P(e):e.selectable.enabled||P(e),Ho(e),e.draggable.current=void 0,e.dom.redraw()}function $(e){let o=e.draggable.current;o&&(o.newPiece&&e.pieces.delete(o.orig),e.draggable.current=void 0,P(e),Ho(e),e.dom.redraw())}function Ho(e){let o=e.dom.elements;o.ghost&&Y(o.ghost,!1)}function qo(e,o){let r=e.dom.elements.board.firstChild;for(;r;){if(r.cgKey===o&&r.tagName==="PIECE")return r;r=r.nextSibling}}function Bo(e,o){e.exploding={stage:1,keys:o},e.dom.redraw(),setTimeout(()=>{To(e,2),setTimeout(()=>To(e,void 0),120)},120)}function To(e,o){e.exploding&&(o?e.exploding.stage=o:e.exploding=void 0,e.dom.redraw())}function Ro(e,o){function r(){lo(e),o()}return{set(n){n.orientation&&n.orientation!==e.orientation&&r(),Fe(e,n),(n.fen?R:O)(t=>we(t,n),e)},state:e,getFen:()=>yo(e.pieces),toggleOrientation:r,setPieces(n){R(t=>uo(t,n),e)},selectSquare(n,t){n?R(i=>ne(i,n,t),e):e.selected&&(P(e),e.dom.redraw())},move(n,t){R(i=>qe(i,n,t),e)},newPiece(n,t){R(i=>be(i,n,t),e)},playPremove(){if(e.premovable.current){if(R(bo,e))return!0;e.dom.redraw()}return!1},playPredrop(n){if(e.predroppable.current){let t=ho(e,n);return e.dom.redraw(),t}return!1},cancelPremove(){O(x,e)},cancelPredrop(){O(E,e)},cancelMove(){O(n=>{te(n),$(n)},e)},stop(){O(n=>{Oe(n),$(n)},e)},explode(n){Bo(e,n)},setAutoShapes(n){O(t=>t.drawable.autoShapes=n,e)},setShapes(n){O(t=>t.drawable.shapes=n.slice(),e)},getKeyAtDomPos(n){return A(n,h(e),e.dom.bounds())},redrawAll:o,dragNewPiece(n,t,i){Eo(e,n,t,i)},destroy(){Oe(e),e.dom.unbind&&e.dom.unbind(),e.dom.destroyed=!0}}}function Oo(){return{pieces:ye(Le),orientation:"white",turnColor:"white",coordinates:!0,coordinatesOnSquares:!1,ranksPosition:"right",autoCastle:!0,viewOnly:!1,disableContextMenu:!1,addPieceZIndex:!1,blockTouchScroll:!1,touchIgnoreRadius:1,pieceKey:!1,trustAllEvents:!1,highlight:{lastMove:!0,check:!0},animation:{enabled:!0,duration:200},movable:{free:!0,color:"both",showDests:!0,events:{},rookCastle:!0},premovable:{enabled:!0,showDests:!0,castle:!0,additionalPremoveRequirements:e=>!0,events:{}},predroppable:{enabled:!1,events:{}},draggable:{enabled:!0,distance:3,autoDistance:!0,showGhost:!0,deleteOnDropOff:!1},dropmode:{active:!1},selectable:{enabled:!0},stats:{dragged:!("ontouchstart"in window)},events:{},drawable:{enabled:!0,visible:!0,defaultSnapToValidMove:!0,eraseOnMovablePieceClick:!0,shapes:[],autoShapes:[],brushes:{green:{key:"g",color:"#15781B",opacity:1,lineWidth:10},red:{key:"r",color:"#882020",opacity:1,lineWidth:10},blue:{key:"b",color:"#003088",opacity:1,lineWidth:10},yellow:{key:"y",color:"#e68f00",opacity:1,lineWidth:10},paleBlue:{key:"pb",color:"#003088",opacity:.4,lineWidth:15},paleGreen:{key:"pg",color:"#15781B",opacity:.4,lineWidth:15},paleRed:{key:"pr",color:"#882020",opacity:.4,lineWidth:15},paleGrey:{key:"pgr",color:"#4a4a4a",opacity:.35,lineWidth:15},purple:{key:"purple",color:"#68217a",opacity:.65,lineWidth:10},pink:{key:"pink",color:"#ee2080",opacity:.5,lineWidth:10},white:{key:"white",color:"white",opacity:1,lineWidth:10},paleWhite:{key:"pwhite",color:"white",opacity:.6,lineWidth:10}},prevSvgHash:""},hold:ro()}}function Fo(){let e=y("defs"),o=w(y("filter"),{id:"cg-filter-blur"});return o.appendChild(w(y("feGaussianBlur"),{stdDeviation:"0.013"})),e.appendChild(o),e}function Go(e,o){let r=e.drawable,n=r.current,t=n&&n.mouseSq?n:void 0,i=new Map,a=e.dom.bounds(),l=r.autoShapes.filter(c=>!c.piece);for(let c of r.shapes.concat(l).concat(t?[t]:[])){if(!c.dest)continue;let u=i.get(c.dest)??new Set,p=Se(Pe(f(c.orig),e.orientation),a),m=Se(Pe(f(c.dest),e.orientation),a);u.add(je(p,m)),i.set(c.dest,u)}let d=[];for(let c of r.shapes.concat(l))d.push({shape:c,current:!1,hash:Vo(c,Ie(c.dest,i),!1,a)});t&&d.push({shape:t,current:!0,hash:Vo(t,Ie(t.dest,i),!0,a)});let s=d.map(c=>c.hash).join(";");s!==e.drawable.prevSvgHash&&(e.drawable.prevSvgHash=s,Br(r,d,o),Rr(d,o,c=>Lr(e,c,r.brushes,i,a)))}function Br(e,o,r){for(let n of[r.shapes,r.shapesBelow]){let t=n.querySelector("defs"),i=o.filter(s=>n===r.shapesBelow==!!s.shape.below),a=new Map;for(let s of i.filter(c=>c.shape.dest&&c.shape.brush)){let c=Wo(e.brushes[s.shape.brush],s.shape.modifiers),{key:u,color:p}=zo(s.shape);u&&p&&a.set(u,{key:u,color:p,opacity:1,lineWidth:1}),a.set(c.key,c)}let l=new Set,d=t.firstElementChild;for(;d;)l.add(d.getAttribute("cgKey")),d=d.nextElementSibling;for(let[s,c]of a.entries())l.has(s)||t.appendChild(Wr(c))}}function Rr(e,o,r){for(let[n,t]of[[o.shapes,o.custom],[o.shapesBelow,o.customBelow]]){let[i,a]=[n,t].map(s=>s.querySelector("g")),l=e.filter(s=>n===o.shapesBelow==!!s.shape.below),d=new Map;for(let s of l)d.set(s.hash,!1);for(let s of[i,a]){let c=[],u=s.firstElementChild,p;for(;u;)p=u.getAttribute("cgHash"),d.has(p)?d.set(p,!0):c.push(u),u=u.nextElementSibling;for(let m of c)s.removeChild(m)}for(let s of l.filter(c=>!d.get(c.hash)))for(let c of r(s))c.isCustom?a.appendChild(c.el):i.appendChild(c.el)}}function Vo({orig:e,dest:o,brush:r,piece:n,modifiers:t,customSvg:i,label:a,below:l},d,s,c){return[c.width,c.height,s,e,o,r,d&&"-",n&&Or(n),t&&Vr(t),i&&`custom-${Lo(i.html)},${i.center?.[0]??"o"}`,a&&`label-${Lo(a.text)}`,l&&"below"].filter(u=>u).join(",")}function Or(e){return[e.color,e.role,e.scale].filter(o=>o).join(",")}function Vr(e){return[e.lineWidth,e.hilite].filter(o=>o).join(",")}function Lo(e){let o=0;for(let r=0;r<e.length;r++)o=(o<<5)-o+e.charCodeAt(r)>>>0;return o.toString()}function Lr(e,{shape:o,current:r,hash:n},t,i,a){let l=Se(Pe(f(o.orig),e.orientation),a),d=o.dest?Se(Pe(f(o.dest),e.orientation),a):l,s=o.brush&&Wo(t[o.brush],o.modifiers),c=i.get(o.dest),u=[];if(s){let p=w(y("g"),{cgHash:n});u.push({el:p}),l[0]!==d[0]||l[1]!==d[1]?p.appendChild(Gr(o,s,l,d,r,Ie(o.dest,i))):p.appendChild(Fr(t[o.brush],l,r,a))}if(o.label){let p=o.label;p.fill??=o.brush&&t[o.brush].color;let m=o.brush?void 0:"tr";u.push({el:zr(p,n,l,d,c,m),isCustom:!0})}if(o.customSvg){let p=o.customSvg.center??"orig",[m,v]=p==="label"?Io(l,d,c).map(B=>B-.5):p==="dest"?d:l,g=w(y("g"),{transform:`translate(${m},${v})`,cgHash:n});g.innerHTML=`<svg width="1" height="1" viewBox="0 0 100 100">${o.customSvg.html}</svg>`,u.push({el:g,isCustom:!0})}return u}function Fr(e,o,r,n){let t=$r(),i=(n.width+n.height)/(4*Math.max(n.width,n.height));return w(y("circle"),{stroke:e.color,"stroke-width":t[r?0:1],fill:"none",opacity:$o(e,r),cx:o[0],cy:o[1],r:i-t[1]/2})}function Gr(e,o,r,n,t,i){function a(s){let c=jr(i&&!t),u=n[0]-r[0],p=n[1]-r[1],m=Math.atan2(p,u),v=Math.cos(m)*c,g=Math.sin(m)*c,B=zo(e);return w(y("line"),{stroke:s?B.color:o.color,"stroke-width":Ir(o,t)*(s?1.14:1),"stroke-linecap":"round","marker-end":`url(#arrowhead-${s?B.key:o.key})`,opacity:e.modifiers?.hilite?1:$o(o,t),x1:r[0],y1:r[1],x2:n[0]-v,y2:n[1]-g})}if(!e.modifiers?.hilite)return a(!1);let l=w(y("g"),{opacity:o.opacity}),d=w(y("g"),{filter:"url(#cg-filter-blur)"});return d.appendChild(Ur(r,n)),d.appendChild(a(!0)),l.appendChild(d),l.appendChild(a(!1)),l}function Wr(e){let o=w(y("marker"),{id:"arrowhead-"+e.key,orient:"auto",overflow:"visible",markerWidth:4,markerHeight:4,refX:e.key.startsWith("hilite")?1.86:2.05,refY:2});return o.appendChild(w(y("path"),{d:"M0,0 V4 L3,2 Z",fill:e.color})),o.setAttribute("cgKey",e.key),o}function zr(e,o,r,n,t,i){let l=.4*.75**e.text.length,d=Io(r,n,t),s=i==="tr"?.4:0,c=w(y("g"),{transform:`translate(${d[0]+s},${d[1]-s})`,cgHash:o});c.appendChild(w(y("circle"),{r:.4/2,"fill-opacity":i?1:.8,"stroke-opacity":i?1:.7,"stroke-width":.03,fill:e.fill??"#666",stroke:"white"}));let u=w(y("text"),{"font-size":l,"font-family":"Noto Sans","text-anchor":"middle",fill:"white",y:.13*.75**e.text.length});return u.innerHTML=e.text,c.appendChild(u),c}function Pe(e,o){return o==="white"?e:[7-e[0],7-e[1]]}function Ie(e,o){return(e&&o.has(e)&&o.get(e).size>1)===!0}function y(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function w(e,o){for(let r in o)Object.prototype.hasOwnProperty.call(o,r)&&e.setAttribute(r,o[r]);return e}function Wo(e,o){return o?{color:e.color,opacity:Math.round(e.opacity*10)/10,lineWidth:Math.round(o.lineWidth||e.lineWidth),key:[e.key,o.lineWidth].filter(r=>r).join("")}:e}function $r(){return[3/64,4/64]}function Ir(e,o){return(e.lineWidth||10)*(o?.85:1)/64}function zo(e){let o=e.modifiers?.hilite;return{key:o&&`hilite-${o.replace("#","")}`,color:o}}function $o(e,o){return(e.opacity||1)*(o?.9:1)}function jr(e){return(e?20:10)/64}function Se(e,o){let r=Math.min(1,o.width/o.height),n=Math.min(1,o.height/o.width);return[(e[0]-3.5)*r,(3.5-e[1])*n]}function Ur(e,o){let r={from:[Math.floor(Math.min(e[0],o[0])),Math.floor(Math.min(e[1],o[1]))],to:[Math.ceil(Math.max(e[0],o[0])),Math.ceil(Math.max(e[1],o[1]))]};return w(y("rect"),{x:r.from[0],y:r.from[1],width:r.to[0]-r.from[0],height:r.to[1]-r.from[1],fill:"none",stroke:"none"})}function je(e,o,r=!0){let n=Math.atan2(o[1]-e[1],o[0]-e[0])+Math.PI;return r?(Math.round(n*8/Math.PI)+16)%16:n}function Zr(e,o){return Math.sqrt([e[0]-o[0],e[1]-o[1]].reduce((r,n)=>r+n*n,0))}function Io(e,o,r){let n=Zr(e,o),t=je(e,o,!1);if(r&&(n-=33/64,r.size>1)){n-=10/64;let i=je(e,o);(r.has((i+1)%16)||r.has((i+15)%16))&&i&1&&(n-=.4)}return[e[0]-Math.cos(t)*n,e[1]-Math.sin(t)*n].map(i=>i+.5)}function Uo(e,o){e.innerHTML="",e.classList.add("cg-wrap");for(let c of Qe)e.classList.toggle("orientation-"+c,o.orientation===c);e.classList.toggle("manipulable",!o.viewOnly);let r=C("cg-container");e.appendChild(r);let n=C("cg-board");r.appendChild(n);let t,i,a,l,d;if(o.drawable.visible&&([t,i]=["cg-shapes-below","cg-shapes"].map(c=>jo(c,!0)),[a,l]=["cg-custom-below","cg-custom-svgs"].map(c=>jo(c,!1)),d=C("cg-auto-pieces"),r.appendChild(t),r.appendChild(a),r.appendChild(i),r.appendChild(l),r.appendChild(d)),o.coordinates){let c=o.orientation==="black"?" black":"",u=o.ranksPosition==="left"?" left":"";if(o.coordinatesOnSquares){let p=o.orientation==="white"?m=>m+1:m=>8-m;W.forEach((m,v)=>r.appendChild(Ue(j.map(g=>m+g),"squares rank"+p(v)+c+u)))}else r.appendChild(Ue(j,"ranks"+c+u)),r.appendChild(Ue(W,"files"+c))}let s;return o.draggable.enabled&&o.draggable.showGhost&&(s=C("piece","ghost"),Y(s,!1),r.appendChild(s)),{board:n,container:r,wrap:e,ghost:s,shapes:i,shapesBelow:t,custom:l,customBelow:a,autoPieces:d}}function jo(e,o){let r=w(y("svg"),{class:e,viewBox:o?"-4 -4 8 8":"-3.5 -3.5 8 8",preserveAspectRatio:"xMidYMid slice"});return o&&r.appendChild(Fo()),r.appendChild(y("g")),r}function Ue(e,o){let r=C("coords",o),n;for(let t of e)n=C("coord"),n.textContent=t,r.appendChild(n);return r}function Zo(e,o){if(!e.dropmode.active)return;x(e),E(e);let r=e.dropmode.piece;if(r){e.pieces.set("a0",r);let n=T(o),t=n&&A(n,h(e),e.dom.bounds());t&&he(e,"a0",t)}e.dom.redraw()}function Xo(e,o){let r=e.dom.elements.board;if("ResizeObserver"in window&&new ResizeObserver(o).observe(e.dom.elements.wrap),(e.disableContextMenu||e.drawable.enabled)&&r.addEventListener("contextmenu",t=>t.preventDefault()),e.viewOnly)return;let n=Xr(e);r.addEventListener("touchstart",n,{passive:!1}),r.addEventListener("mousedown",n,{passive:!1})}function Qo(e,o){let r=[];if("ResizeObserver"in window||r.push(ie(document.body,"chessground.resize",o)),!e.viewOnly){let n=_o(e,Ao,ko),t=_o(e,No,Co);for(let a of["touchmove","mousemove"])r.push(ie(document,a,n));for(let a of["touchend","mouseup"])r.push(ie(document,a,t));let i=()=>e.dom.bounds.clear();r.push(ie(document,"scroll",i,{capture:!0,passive:!0})),r.push(ie(window,"resize",i,{passive:!0}))}return()=>r.forEach(n=>n())}function ie(e,o,r,n){return e.addEventListener(o,r,n),()=>e.removeEventListener(o,r,n)}var Xr=e=>o=>{e.draggable.current?$(e):e.drawable.current?ze(e):o.shiftKey||le(o)?e.drawable.enabled&&So(e,o):e.viewOnly||(e.dropmode.active?Zo(e,o):xo(e,o))},_o=(e,o,r)=>n=>{e.drawable.current?e.drawable.enabled&&r(e,n):e.viewOnly||o(e,n)};function Jo(e){let o=h(e),r=G(e.dom.bounds()),n=e.dom.elements.board,t=e.pieces,i=e.animation.current,a=i?i.plan.anims:new Map,l=i?i.plan.fadings:new Map,d=e.draggable.current,s=Yr(e),c=new Set,u=new Set,p=new Map,m=new Map,v,g,B,I,D,_,Me,N,ke,se;for(g=n.firstChild;g;){if(v=g.cgKey,or(g))if(B=t.get(v),D=a.get(v),_=l.get(v),I=g.cgPiece,g.cgDragging&&(!d||d.orig!==v)&&(g.classList.remove("dragging"),k(g,r(f(v),o)),g.cgDragging=!1),!_&&g.cgFading&&(g.cgFading=!1,g.classList.remove("fading")),B){if(D&&g.cgAnimating&&I===ae(B)){let b=f(v);b[0]+=D[2],b[1]+=D[3],g.classList.add("anim"),k(g,r(b,o))}else g.cgAnimating&&(g.cgAnimating=!1,g.classList.remove("anim"),k(g,r(f(v),o)),e.addPieceZIndex&&(g.style.zIndex=Ze(f(v),o)));I===ae(B)&&(!_||!g.cgFading)?c.add(v):_&&I===ae(_)?(g.classList.add("fading"),g.cgFading=!0):_e(p,I,g)}else _e(p,I,g);else if(rr(g)){let b=g.className;s.get(v)===b?u.add(v):_e(m,b,g)}g=g.nextSibling}for(let[b,X]of s)if(!u.has(b)){ke=m.get(X),se=ke&&ke.pop();let H=r(f(b),o);if(se)se.cgKey=b,k(se,H);else{let q=C("square",X);q.cgKey=b,k(q,H),n.insertBefore(q,n.firstChild)}}for(let[b,X]of t)if(D=a.get(b),!c.has(b))if(Me=p.get(ae(X)),N=Me&&Me.pop(),N){N.cgKey=b,N.cgFading&&(N.classList.remove("fading"),N.cgFading=!1);let H=f(b);e.addPieceZIndex&&(N.style.zIndex=Ze(H,o)),D&&(N.cgAnimating=!0,N.classList.add("anim"),H[0]+=D[2],H[1]+=D[3]),k(N,r(H,o))}else{let H=ae(X),q=C("piece",H),ce=f(b);q.cgPiece=H,q.cgKey=b,D&&(q.cgAnimating=!0,ce[0]+=D[2],ce[1]+=D[3]),k(q,r(ce,o)),e.addPieceZIndex&&(q.style.zIndex=Ze(ce,o)),n.appendChild(q)}for(let b of p.values())Yo(e,b);for(let b of m.values())Yo(e,b)}function er(e){let o=h(e),r=G(e.dom.bounds()),n=e.dom.elements.board.firstChild;for(;n;)(or(n)&&!n.cgAnimating||rr(n))&&k(n,r(f(n.cgKey),o)),n=n.nextSibling}function Xe(e){let o=e.dom.elements.wrap.getBoundingClientRect(),r=e.dom.elements.container,n=o.height/o.width,t=Math.floor(o.width*window.devicePixelRatio/8)*8/window.devicePixelRatio,i=t*n;r.style.width=t+"px",r.style.height=i+"px",e.dom.bounds.clear(),e.addDimensionsCssVarsTo?.style.setProperty("---cg-width",t+"px"),e.addDimensionsCssVarsTo?.style.setProperty("---cg-height",i+"px")}var or=e=>e.tagName==="PIECE",rr=e=>e.tagName==="SQUARE";function Yo(e,o){for(let r of o)e.dom.elements.board.removeChild(r)}function Ze(e,o){let n=e[1];return`${o?10-n:3+n}`}var ae=e=>`${e.color} ${e.role}`;function Yr(e){let o=new Map;if(e.lastMove&&e.highlight.lastMove)for(let t of e.lastMove)V(o,t,"last-move");if(e.check&&e.highlight.check&&V(o,e.check,"check"),e.selected&&(V(o,e.selected,"selected"),e.movable.showDests)){let t=e.movable.dests?.get(e.selected);if(t)for(let a of t)V(o,a,"move-dest"+(e.pieces.has(a)?" oc":""));let i=e.premovable.customDests?.get(e.selected)??e.premovable.dests;if(i)for(let a of i)V(o,a,"premove-dest"+(e.pieces.has(a)?" oc":""))}let r=e.premovable.current;if(r)for(let t of r)V(o,t,"current-premove");else e.predroppable.current&&V(o,e.predroppable.current.key,"current-premove");let n=e.exploding;if(n)for(let t of n.keys)V(o,t,"exploding"+n.stage);return e.highlight.custom&&e.highlight.custom.forEach((t,i)=>{V(o,i,t)}),o}function V(e,o,r){let n=e.get(o);n?e.set(o,`${n} ${r}`):e.set(o,r)}function _e(e,o,r){let n=e.get(o);n?n.push(r):e.set(o,[r])}function nr(e,o,r){let n=new Map,t=[];for(let l of e)n.set(l.hash,!1);let i=o.firstElementChild,a;for(;i;)a=i.getAttribute("cgHash"),n.has(a)?n.set(a,!0):t.push(i),i=i.nextElementSibling;for(let l of t)o.removeChild(l);for(let l of e)n.get(l.hash)||o.appendChild(r(l))}function tr(e,o){let n=e.drawable.autoShapes.filter(t=>t.piece).map(t=>({shape:t,hash:en(t),current:!1}));nr(n,o,t=>Jr(e,t,e.dom.bounds()))}function ir(e){let o=h(e),r=G(e.dom.bounds()),n=e.dom.elements.autoPieces?.firstChild;for(;n;)De(n,r(f(n.cgKey),o),n.cgScale),n=n.nextSibling}function Jr(e,{shape:o,hash:r},n){let t=o.orig,i=o.piece?.role,a=o.piece?.color,l=o.piece?.scale,d=C("piece",`${i} ${a}`);return d.setAttribute("cgHash",r),d.cgKey=t,d.cgScale=l,De(d,G(n)(f(t),h(e)),l),d}var en=e=>[e.orig,e.piece?.role,e.piece?.color,e.piece?.scale].join(",");function ot({el:e,config:o}){return rn(e,o)}function rn(e,o){let r=Oo();we(r,o||{});function n(){let t="dom"in r?r.dom.unbind:void 0,i=Uo(e,r),a=oo(()=>i.board.getBoundingClientRect()),l=c=>{Jo(s),i.autoPieces&&tr(s,i.autoPieces),!c&&i.shapes&&Go(s,i)},d=()=>{Xe(s),er(s),i.autoPieces&&ir(s)},s=r;return s.dom={elements:i,bounds:a,redraw:nn(l),redrawNow:l,unbind:t},s.drawable.prevSvgHash="",Xe(s),l(!1),Xo(s,d),t||(s.dom.unbind=Qo(s,d)),s.events.insert&&s.events.insert(i),s}return Ro(n(),n)}function nn(e){let o=!1;return()=>{o||(o=!0,requestAnimationFrame(()=>{e(),o=!1}))}}export{rn as Chessground,ot as initModule};
1
+ var eo=["white","black"];var z=["a","b","c","d","e","f","g","h"],j=["1","2","3","4","5","6","7","8"];var no=[...j].reverse(),Q=z.flatMap(e=>j.map(o=>e+o)),M=e=>e.every(o=>o>=0&&o<=7)?Q[8*e[0]+e[1]]:void 0,F=e=>M(e),f=e=>[e.charCodeAt(0)-97,e.charCodeAt(1)-49];var De=Q.map(f),ro=Q.map((e,o)=>({key:e,pos:De[o]}));function Ke(e){let o,n=()=>(o===void 0&&(o=e()),o);return n.clear=()=>{o=void 0},n}var to=()=>{let e;return{start(){e=performance.now()},cancel(){e=void 0},stop(){if(!e)return 0;let o=performance.now()-e;return e=void 0,o}}},U=e=>e==="white"?"black":"white",G=(e,o)=>(e[0]-o[0])**2+(e[1]-o[1])**2,$=(e,o)=>e.role===o.role&&e.color===o.color,io=(e,o)=>e[0]===o[0]&&e[1]===o[1],W=e=>(o,n)=>[(n?o[0]:7-o[0])*e.width/8,(n?7-o[1]:o[1])*e.height/8],k=(e,o)=>{e.style.transform=`translate(${o[0]}px,${o[1]}px)`},xe=(e,o,n=1)=>{e.style.transform=`translate(${o[0]}px,${o[1]}px) scale(${n})`},Y=(e,o)=>{e.style.visibility=o?"visible":"hidden"},B=e=>{if(e.clientX||e.clientX===0)return[e.clientX,e.clientY];if(e.targetTouches?.[0])return[e.targetTouches[0].clientX,e.targetTouches[0].clientY]},ln=Ke(()=>!("ontouchstart"in window)&&["macintosh","firefox"].every(e=>navigator.userAgent.toLowerCase().includes(e))),le=e=>e.button===2&&!(e.ctrlKey&&ln()),C=(e,o)=>{let n=document.createElement(e);return o&&(n.className=o),n};function de(e,o,n){let r=f(e);return o||(r[0]=7-r[0],r[1]=7-r[1]),[n.left+n.width*r[0]/8+n.width/16,n.top+n.height*(7-r[1])/8+n.height/16]}var x=(e,o)=>Math.abs(e-o),J=(e,o,n,r)=>x(e,n)*x(o,r)===2,ue=(e,o,n,r)=>e===n!=(o===r),pe=(e,o,n,r)=>x(e,n)===x(o,r)&&e!==n,fe=(e,o,n,r)=>ue(e,o,n,r)||pe(e,o,n,r),Ee=(e,o,n,r)=>Math.max(x(e,n),x(o,r))===1,Ae=(e,o,n,r,t)=>x(e,n)===1&&r===o+(t?1:-1),Ne=(e,o,n,r,t)=>{let i=t?1:-1;return e===n&&(r===o+i||r===o+2*i&&(t?o<=1:o>=6))},ee=(e,o,n,r)=>{let t=n-e,i=r-o;if(t&&i&&Math.abs(t)!==Math.abs(i))return[];let a=Math.sign(t),u=Math.sign(i),d=[],s=e+a,c=o+u;for(;s!==n||c!==r;)d.push([s,c]),s+=a,c+=u;return d.map(M).filter(l=>l!==void 0)},ao=e=>{let o=f(e),n=[];return o[0]>0&&n.push([o[0]-1,o[1]]),o[0]<7&&n.push([o[0]+1,o[1]]),n.map(M).filter(r=>r!==void 0)},oe=(e,o)=>{let n=f(e);return n[1]+=o,M(n)};var Z=e=>e.friendlies.has(e.dest.key),dn=e=>e.enemies.has(e.dest.key),so=(e,o,n)=>ee(...e,...o).some(r=>n.has(r)),co=(e,o,n)=>{let r=n.enemies.get(e);if(r?.role!=="pawn")return!1;let t=r.color==="white"?1:-1,i=f(e),a=f(o);return Ne(...i,...a,r.color==="white")&&!so(i,[a[0],a[1]+t],n.allPieces)},un=(e,o,n)=>{let r=n.enemies.get(e);return r?.role==="pawn"&&Ae(...f(e),...f(o),r.color==="white")&&(n.friendlies.has(o)||me(oe(o,r.color==="white"?-1:1),n.friendlies,n.enemies,n.lastMove))},pn=e=>[...e.enemies.keys()].some(o=>co(o,e.dest.key,e)),He=(e,o)=>{let n=e.dest.pos;return[...e.enemies].some(([r,t])=>{let i=f(r);return!o?.includes(t.role)&&(t.role==="pawn"&&Ae(...i,...n,t.color==="white")||t.role==="knight"&&J(...i,...n)||t.role==="bishop"&&pe(...i,...n)||t.role==="rook"&&ue(...i,...n)||t.role==="queen"&&fe(...i,...n)||t.role==="king"&&Ee(...i,...n))&&(!["bishop","rook","queen"].includes(t.role)||!so(i,n,e.allPieces))})},ge=e=>Z(e)&&(me(e.dest.key,e.friendlies,e.enemies,e.lastMove)||He(e)),me=(e,o,n,r)=>{if(!e||r&&e!==r[1])return!1;let t=f(e),i=o.get(e);return i?.role==="pawn"&&t[1]===(i.color==="white"?3:4)&&(!r||x(f(r[0])[1],t[1])===2)&&[1,-1].some(a=>{let u=M([t[0]+a,t[1]]);return!!u&&n.get(u)?.role==="pawn"})},fn=(e,o)=>{if(e.unrestrictedPremoves)return!0;let n=ee(...e.orig.pos,...e.dest.pos);o&&n.push(e.dest.key);let r=n.filter(a=>e.friendlies.has(a));if(!r.length)return!0;let t=r[0],i=oe(t,e.color==="white"?-1:1);return r.length===1&&me(t,e.friendlies,e.enemies,e.lastMove)&&!!i&&!n.includes(i)},gn=(e,o)=>{if(e.unrestrictedPremoves)return!0;let n=ee(...e.orig.pos,...e.dest.pos);o&&n.push(e.dest.key);let r=n.filter(c=>e.enemies.has(c));if(r.length>1)return!1;if(!r.length)return!0;let t=r[0],i=e.enemies.get(t);if(!i||i.role!=="pawn")return!0;let a=i.color==="white"?1:-1,u=oe(t,a),d=u?[...ao(u).filter(c=>un(t,c,e)),...[u,oe(u,a)].filter(c=>!!c).filter(c=>co(t,c,e))]:[],s=[...n,e.orig.key];return d.some(c=>!s.includes(c))},qe=(e,o)=>fn(e,o)&&gn(e,o),mn=e=>{let o=e.color==="white"?1:-1;return x(e.orig.pos[0],e.dest.pos[0])>1?!1:x(e.orig.pos[0],e.dest.pos[0])?e.dest.pos[1]!==e.orig.pos[1]+o?!1:e.unrestrictedPremoves||dn(e)?!0:Z(e)?He(e):pn(e)||me(M([e.dest.pos[0],e.dest.pos[1]+o]),e.friendlies,e.enemies,e.lastMove)||He(e,["pawn"]):Ne(...e.orig.pos,...e.dest.pos,e.color==="white")&&qe(e,!0)},bn=e=>J(...e.orig.pos,...e.dest.pos)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),lo=e=>pe(...e.orig.pos,...e.dest.pos)&&qe(e,!1)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),uo=e=>ue(...e.orig.pos,...e.dest.pos)&&qe(e,!1)&&(e.unrestrictedPremoves||!Z(e)||ge(e)),hn=e=>lo(e)||uo(e),vn=e=>Ee(...e.orig.pos,...e.dest.pos)&&(e.unrestrictedPremoves||!Z(e)||ge(e))||e.canCastle&&e.orig.pos[1]===e.dest.pos[1]&&e.orig.pos[1]===(e.color==="white"?0:7)&&(e.orig.pos[0]===4&&(e.dest.pos[0]===2&&e.rookFilesFriendlies.includes(0)||e.dest.pos[0]===6&&e.rookFilesFriendlies.includes(7))||e.rookFilesFriendlies.includes(e.dest.pos[0]))&&(e.unrestrictedPremoves||ee(...e.orig.pos,e.dest.pos[0]>e.orig.pos[0]?7:1,e.dest.pos[1]).map(o=>e.allPieces.get(o)).every(o=>!o||$(o,{role:"rook",color:e.color}))),yn={pawn:mn,knight:bn,bishop:lo,rook:uo,queen:hn,king:vn};function Te(e,o){let n=e.pieces,r=e.premovable.castle,t=!!e.premovable.unrestrictedPremoves,i=n.get(o);if(!i||i.color===e.turnColor)return[];let a=i.color,u=new Map([...n].filter(([p,m])=>m.color===a)),d=new Map([...n].filter(([p,m])=>m.color===U(a))),s={key:o,pos:f(o)},c=p=>yn[i.role](p)&&e.premovable.additionalPremoveRequirements(p),l={orig:s,role:i.role,allPieces:n,friendlies:u,enemies:d,unrestrictedPremoves:t,color:a,canCastle:r,rookFilesFriendlies:Array.from(n).filter(([p,m])=>p[1]===(a==="white"?"1":"8")&&m.color===a&&m.role==="rook").map(([p])=>f(p)[0]),lastMove:e.lastMove};return ro.filter(p=>c({...l,dest:p})).map(p=>p.key)}function S(e,...o){e&&setTimeout(()=>e(...o),1)}function po(e){e.orientation=U(e.orientation),e.animation.current=e.draggable.current=e.selected=void 0}function fo(e,o){for(let[n,r]of o)r?e.pieces.set(n,r):e.pieces.delete(n)}function go(e,o){if(e.check=void 0,o===!0&&(o=e.turnColor),o)for(let[n,r]of e.pieces)r.role==="king"&&r.color===o&&(e.check=n)}function wn(e,o,n,r){A(e),e.premovable.current=[o,n],S(e.premovable.events.set,o,n,r)}function E(e){e.premovable.current&&(e.premovable.current=void 0,S(e.premovable.events.unset))}function Pn(e,o,n){E(e),e.predroppable.current={role:o,key:n},S(e.predroppable.events.set,o,n)}function A(e){let o=e.predroppable;o.current&&(o.current=void 0,S(o.events.unset))}function Sn(e,o,n){if(!e.autoCastle)return!1;let r=e.pieces.get(o);if(!r||r.role!=="king")return!1;let t=f(o),i=f(n);if(t[1]!==0&&t[1]!==7||t[1]!==i[1])return!1;t[0]===4&&!e.pieces.has(n)&&(i[0]===6?n=F([7,i[1]]):i[0]===2&&(n=F([0,i[1]])));let a=e.pieces.get(n);return!a||a.color!==r.color||a.role!=="rook"?!1:(e.pieces.delete(o),e.pieces.delete(n),t[0]<i[0]?(e.pieces.set(F([6,i[1]]),r),e.pieces.set(F([5,i[1]]),a)):(e.pieces.set(F([2,i[1]]),r),e.pieces.set(F([3,i[1]]),a)),!0)}function Be(e,o,n){let r=e.pieces.get(o),t=e.pieces.get(n);if(o===n||!r)return!1;let i=t&&t.color!==r.color?t:void 0;return n===e.selected&&P(e),S(e.events.move,o,n,i),Sn(e,o,n)||(e.pieces.set(n,r),e.pieces.delete(o)),e.lastMove=[o,n],e.check=void 0,S(e.events.change),i||!0}function be(e,o,n,r){if(e.pieces.has(n))if(r)e.pieces.delete(n);else return!1;return S(e.events.dropNewPiece,o,n),e.pieces.set(n,o),e.lastMove=[n],e.check=void 0,S(e.events.change),e.movable.dests=void 0,e.turnColor=U(e.turnColor),!0}function mo(e,o,n){let r=Be(e,o,n);return r&&(e.movable.dests=void 0,e.turnColor=U(e.turnColor),e.animation.current=void 0),r}function Re(e,o,n){if(ve(e,o,n)){let r=mo(e,o,n);if(r){let t=e.hold.stop();P(e);let i={premove:!1,ctrlKey:e.stats.ctrlKey,holdTime:t};return r!==!0&&(i.captured=r),S(e.movable.events.after,o,n,i),!0}}else if(kn(e,o,n))return wn(e,o,n,{ctrlKey:e.stats.ctrlKey}),P(e),!0;return P(e),!1}function he(e,o,n,r){let t=e.pieces.get(o);t&&(Mn(e,o,n)||r)?(e.pieces.delete(o),be(e,t,n,r),S(e.movable.events.afterNewPiece,t.role,n,{premove:!1,predrop:!1})):t&&Cn(e,o,n)?Pn(e,t.role,n):(E(e),A(e)),e.pieces.delete(o),P(e)}function re(e,o,n){if(S(e.events.select,o),e.selected){if(e.selected===o&&!e.draggable.enabled){P(e),e.hold.cancel();return}else if((e.selectable.enabled||n)&&e.selected!==o&&Re(e,e.selected,o)){e.stats.dragged=!1;return}}(e.selectable.enabled||e.draggable.enabled)&&(bo(e,o)||Ve(e,o))&&(Oe(e,o),e.hold.start())}function Oe(e,o){e.selected=o,Ve(e,o)?e.premovable.customDests||(e.premovable.dests=Te(e,o)):e.premovable.dests=void 0}function P(e){e.selected=void 0,e.premovable.dests=void 0,e.hold.cancel()}function bo(e,o){let n=e.pieces.get(o);return!!n&&(e.movable.color==="both"||e.movable.color===n.color&&e.turnColor===n.color)}var ve=(e,o,n)=>o!==n&&bo(e,o)&&(e.movable.free||!!e.movable.dests?.get(o)?.includes(n));function Mn(e,o,n){let r=e.pieces.get(o);return!!r&&(o===n||!e.pieces.has(n))&&(e.movable.color==="both"||e.movable.color===r.color&&e.turnColor===r.color)}function Ve(e,o){let n=e.pieces.get(o);return!!n&&e.premovable.enabled&&e.movable.color===n.color&&e.turnColor!==n.color}var kn=(e,o,n)=>o!==n&&Ve(e,o)&&(e.premovable.customDests?.get(o)??Te(e,o)).includes(n);function Cn(e,o,n){let r=e.pieces.get(o),t=e.pieces.get(n);return!!r&&(!t||t.color!==e.movable.color)&&e.predroppable.enabled&&(r.role!=="pawn"||n[1]!=="1"&&n[1]!=="8")&&e.movable.color===r.color&&e.turnColor!==r.color}function ho(e,o){let n=e.pieces.get(o);return!!n&&e.draggable.enabled&&(e.movable.color==="both"||e.movable.color===n.color&&(e.turnColor===n.color||e.premovable.enabled))}function vo(e){let o=e.premovable.current;if(!o)return!1;let n=o[0],r=o[1],t=!1;if(ve(e,n,r)){let i=mo(e,n,r);if(i){let a={premove:!0};i!==!0&&(a.captured=i),S(e.movable.events.after,n,r,a),t=!0}}return E(e),t}function yo(e,o){let n=e.predroppable.current,r=!1;if(!n)return!1;if(o(n)){let t={role:n.role,color:e.movable.color};be(e,t,n.key)&&(S(e.movable.events.afterNewPiece,n.role,n.key,{premove:!1,predrop:!0}),r=!0)}return A(e),r}function te(e){E(e),A(e),P(e)}function Le(e){e.movable.color=e.movable.dests=e.animation.current=void 0,te(e)}function N(e,o,n){let r=Math.floor(8*(e[0]-n.left)/n.width);o||(r=7-r);let t=7-Math.floor(8*(e[1]-n.top)/n.height);return o||(t=7-t),r>=0&&r<8&&t>=0&&t<8?M([r,t]):void 0}function wo(e,o,n,r){let t=f(e),i=De.filter(s=>io(t,s)||fe(t[0],t[1],s[0],s[1])||J(t[0],t[1],s[0],s[1])),u=i.map(s=>de(F(s),n,r)).map(s=>G(o,s)),[,d]=u.reduce((s,c,l)=>s[0]<c?s:[c,l],[u[0],0]);return M(i[d])}var v=e=>e.orientation==="white";var Ge="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR",Dn={p:"pawn",r:"rook",n:"knight",b:"bishop",q:"queen",k:"king"},Kn={pawn:"p",rook:"r",knight:"n",bishop:"b",queen:"q",king:"k"};function ye(e){e==="start"&&(e=Ge);let o=new Map,n=7,r=0;for(let t of e)switch(t){case" ":case"[":return o;case"/":if(--n,n<0)return o;r=0;break;case"~":{let i=M([r-1,n]),a=i&&o.get(i);a&&(a.promoted=!0);break}default:{let i=t.charCodeAt(0);if(i<57)r+=i-48;else{let a=t.toLowerCase(),u=M([r,n]);u&&o.set(u,{role:Dn[a],color:t===a?"black":"white"}),++r}}}return o}function Po(e){return no.map(o=>z.map(n=>{let r=e.get(n+o);if(r){let t=Kn[r.role];return r.color==="white"&&(t=t.toUpperCase()),r.promoted&&(t+="~"),t}else return"1"}).join("")).join("/").replace(/1{2,}/g,o=>o.length.toString())}function We(e,o){o.animation&&(ze(e.animation,o.animation),(e.animation.duration||0)<70&&(e.animation.enabled=!1))}function we(e,o){if(o.movable?.dests&&(e.movable.dests=void 0),o.drawable?.autoShapes&&(e.drawable.autoShapes=[]),ze(e,o),o.fen&&(e.pieces=ye(o.fen),e.drawable.shapes=o.drawable?.shapes||[]),"check"in o&&go(e,o.check||!1),"lastMove"in o&&!o.lastMove?e.lastMove=void 0:o.lastMove&&(e.lastMove=o.lastMove),e.selected&&Oe(e,e.selected),We(e,o),!e.movable.rookCastle&&e.movable.dests){let n=e.movable.color==="white"?"1":"8",r="e"+n,t=e.movable.dests.get(r),i=e.pieces.get(r);if(!t||!i||i.role!=="king")return;e.movable.dests.set(r,t.filter(a=>!(a==="a"+n&&t.includes("c"+n))&&!(a==="h"+n&&t.includes("g"+n))))}}function ze(e,o){for(let n in o)n==="__proto__"||n==="constructor"||!Object.prototype.hasOwnProperty.call(o,n)||(Object.prototype.hasOwnProperty.call(e,n)&&So(e[n])&&So(o[n])?ze(e[n],o[n]):e[n]=o[n])}function So(e){if(typeof e!="object"||e===null)return!1;let o=Object.getPrototypeOf(e);return o===Object.prototype||o===null}var O=(e,o)=>o.animation.enabled?Nn(e,o):V(e,o);function V(e,o){let n=e(o);return o.dom.redraw(),n}var $e=(e,o)=>({key:e,pos:f(e),piece:o}),En=(e,o)=>o.sort((n,r)=>G(e.pos,n.pos)-G(e.pos,r.pos))[0];function An(e,o){let n=new Map,r=[],t=new Map,i=[],a=[],u=new Map,d,s,c;for(let[l,p]of e)u.set(l,$e(l,p));for(let l of Q)d=o.pieces.get(l),s=u.get(l),d?s?$(d,s.piece)||(i.push(s),a.push($e(l,d))):a.push($e(l,d)):s&&i.push(s);for(let l of a)s=En(l,i.filter(p=>$(l.piece,p.piece))),s&&(c=[s.pos[0]-l.pos[0],s.pos[1]-l.pos[1]],n.set(l.key,c.concat(c)),r.push(s.key));for(let l of i)r.includes(l.key)||t.set(l.key,l.piece);return{anims:n,fadings:t}}function Mo(e,o){let n=e.animation.current;if(n===void 0){e.dom.destroyed||e.dom.redrawNow();return}let r=1-(o-n.start)*n.frequency;if(r<=0)e.animation.current=void 0,e.dom.redrawNow();else{let t=Hn(r);for(let i of n.plan.anims.values())i[2]=i[0]*t,i[3]=i[1]*t;e.dom.redrawNow(!0),requestAnimationFrame((i=performance.now())=>Mo(e,i))}}function Nn(e,o){let n=new Map(o.pieces),r=e(o),t=An(n,o);if(t.anims.size||t.fadings.size){let i=o.animation.current&&o.animation.current.start;o.animation.current={start:performance.now(),frequency:1/o.animation.duration,plan:t},i||Mo(o,performance.now())}else o.dom.redraw();return r}var Hn=e=>e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1;var qn=["green","red","blue","yellow"];function ko(e,o){if(o.touches&&o.touches.length>1)return;o.stopPropagation(),o.preventDefault(),o.ctrlKey?P(e):te(e);let n=B(o),r=N(n,v(e),e.dom.bounds());r&&(e.drawable.current={orig:r,pos:n,brush:Tn(o),snapToValidMove:e.drawable.defaultSnapToValidMove},Co(e))}function Co(e){requestAnimationFrame(()=>{let o=e.drawable.current;if(o){let n=N(o.pos,v(e),e.dom.bounds());n||(o.snapToValidMove=!1);let r=o.snapToValidMove?wo(o.orig,o.pos,v(e),e.dom.bounds()):n;r!==o.mouseSq&&(o.mouseSq=r,o.dest=r!==o.orig?r:void 0,e.dom.redrawNow()),Co(e)}})}function Do(e,o){e.drawable.current&&(e.drawable.current.pos=B(o))}function Ko(e){let o=e.drawable.current;o&&(o.mouseSq&&Bn(e.drawable,o),Ie(e))}function Ie(e){e.drawable.current&&(e.drawable.current=void 0,e.dom.redraw())}function xo(e){e.drawable.shapes.length&&(e.drawable.shapes=[],e.dom.redraw(),Eo(e.drawable))}var Pe=(e,o)=>e.orig===o.orig&&e.dest===o.dest,je=(e,o)=>e.brush===o.brush;function Tn(e){let o=(e.shiftKey||e.ctrlKey)&&le(e),n=e.altKey||e.metaKey||e.getModifierState?.("AltGraph");return qn[(o?1:0)+(n?2:0)]}function Bn(e,o){let n=e.shapes.find(r=>Pe(r,o));n&&(e.shapes=e.shapes.filter(r=>!Pe(r,o))),(!n||!je(n,o))&&e.shapes.push({orig:o.orig,dest:o.dest,brush:o.brush}),Eo(e)}function Eo(e){e.onChange&&e.onChange(e.shapes)}function Ao(e,o){if(!(e.trustAllEvents||o.isTrusted)||o.buttons!==void 0&&o.buttons>1||o.touches&&o.touches.length>1)return;let n=e.dom.bounds(),r=B(o),t=N(r,v(e),n);if(!t)return;let i=e.pieces.get(t),a=e.selected;if(!a&&e.drawable.enabled&&(e.drawable.eraseOnMovablePieceClick||!i||i.color!==e.turnColor)&&xo(e),o.cancelable!==!1&&(!o.touches||e.blockTouchScroll||i||a||On(e,r)))o.preventDefault();else if(o.touches)return;let u=!!e.premovable.current,d=!!e.predroppable.current;e.stats.ctrlKey=o.ctrlKey,e.selected&&ve(e,e.selected,t)?O(l=>re(l,t),e):re(e,t);let s=e.selected===t,c=Bo(e,t);if(i&&c&&s&&ho(e,t)){e.draggable.current={orig:t,piece:i,origPos:r,pos:r,started:e.draggable.autoDistance&&e.stats.dragged,element:c,previouslySelected:a,originTarget:o.target,keyHasChanged:!1},c.cgDragging=!0,c.classList.add("dragging");let l=e.dom.elements.ghost;l&&(l.className=`ghost ${i.color} ${i.role}`,k(l,W(n)(f(t),v(e))),Y(l,!0)),Ue(e)}else u&&E(e),d&&A(e);e.dom.redraw()}function On(e,o){let n=v(e),r=e.dom.bounds(),t=Math.pow(e.touchIgnoreRadius*r.width/16,2)*2;for(let i of e.pieces.keys()){let a=de(i,n,r);if(G(a,o)<=t)return!0}return!1}function No(e,o,n,r){let t="a0";e.pieces.set(t,o),e.dom.redraw();let i=B(n);e.draggable.current={orig:t,piece:o,origPos:i,pos:i,started:!0,element:()=>Bo(e,t),originTarget:n.target,newPiece:!0,force:!!r,keyHasChanged:!1},Ue(e)}function Ue(e){requestAnimationFrame(()=>{let o=e.draggable.current;if(!o)return;e.animation.current?.plan.anims.has(o.orig)&&(e.animation.current=void 0);let n=e.pieces.get(o.orig);if(!n||!$(n,o.piece))I(e);else if(!o.started&&G(o.pos,o.origPos)>=Math.pow(e.draggable.distance,2)&&(o.started=!0),o.started){if(typeof o.element=="function"){let t=o.element();if(!t)return;t.cgDragging=!0,t.classList.add("dragging"),o.element=t}let r=e.dom.bounds();k(o.element,[o.pos[0]-r.left-r.width/16,o.pos[1]-r.top-r.height/16]),o.keyHasChanged||=o.orig!==N(o.pos,v(e),r)}Ue(e)})}function Ho(e,o){e.draggable.current&&(!o.touches||o.touches.length<2)&&(e.draggable.current.pos=B(o))}function qo(e,o){let n=e.draggable.current;if(!n)return;if(o.type==="touchend"&&o.cancelable!==!1&&o.preventDefault(),o.type==="touchend"&&n.originTarget!==o.target&&!n.newPiece){e.draggable.current=void 0;return}E(e),A(e);let r=B(o)||n.pos,t=N(r,v(e),e.dom.bounds());t&&n.started&&n.orig!==t?n.newPiece?he(e,n.orig,t,n.force):(e.stats.ctrlKey=o.ctrlKey,Re(e,n.orig,t)&&(e.stats.dragged=!0)):n.newPiece?e.pieces.delete(n.orig):e.draggable.deleteOnDropOff&&!t&&(e.pieces.delete(n.orig),S(e.events.change)),(n.orig===n.previouslySelected||n.keyHasChanged)&&(n.orig===t||!t)?P(e):e.selectable.enabled||P(e),To(e),e.draggable.current=void 0,e.dom.redraw()}function I(e){let o=e.draggable.current;o&&(o.newPiece&&e.pieces.delete(o.orig),e.draggable.current=void 0,P(e),To(e),e.dom.redraw())}function To(e){let o=e.dom.elements;o.ghost&&Y(o.ghost,!1)}function Bo(e,o){let n=e.dom.elements.board.firstChild;for(;n;){if(n.cgKey===o&&n.tagName==="PIECE")return n;n=n.nextSibling}}function Oo(e,o){e.exploding={stage:1,keys:o},e.dom.redraw(),setTimeout(()=>{Ro(e,2),setTimeout(()=>Ro(e,void 0),120)},120)}function Ro(e,o){e.exploding&&(o?e.exploding.stage=o:e.exploding=void 0,e.dom.redraw())}function Vo(e,o){function n(){po(e),o()}return{set(r){r.orientation&&r.orientation!==e.orientation&&n(),We(e,r),(r.fen?O:V)(t=>we(t,r),e)},state:e,getFen:()=>Po(e.pieces),toggleOrientation:n,setPieces(r){O(t=>fo(t,r),e)},selectSquare(r,t){r?O(i=>re(i,r,t),e):e.selected&&(P(e),e.dom.redraw())},move(r,t){O(i=>Be(i,r,t),e)},newPiece(r,t){O(i=>be(i,r,t),e)},playPremove(){if(e.premovable.current){if(O(vo,e))return!0;e.dom.redraw()}return!1},playPredrop(r){if(e.predroppable.current){let t=yo(e,r);return e.dom.redraw(),t}return!1},cancelPremove(){V(E,e)},cancelPredrop(){V(A,e)},cancelMove(){V(r=>{te(r),I(r)},e)},stop(){V(r=>{Le(r),I(r)},e)},explode(r){Oo(e,r)},setAutoShapes(r){V(t=>t.drawable.autoShapes=r,e)},setShapes(r){V(t=>t.drawable.shapes=r.slice(),e)},getKeyAtDomPos(r){return N(r,v(e),e.dom.bounds())},redrawAll:o,dragNewPiece(r,t,i){No(e,r,t,i)},destroy(){Le(e),e.dom.unbind&&e.dom.unbind(),e.dom.destroyed=!0}}}function Lo(){return{pieces:ye(Ge),orientation:"white",turnColor:"white",coordinates:!0,coordinatesOnSquares:!1,ranksPosition:"right",autoCastle:!0,viewOnly:!1,disableContextMenu:!1,addPieceZIndex:!1,blockTouchScroll:!1,touchIgnoreRadius:1,pieceKey:!1,trustAllEvents:!1,highlight:{lastMove:!0,check:!0},animation:{enabled:!0,duration:200},movable:{free:!0,color:"both",showDests:!0,events:{},rookCastle:!0},premovable:{enabled:!0,showDests:!0,castle:!0,additionalPremoveRequirements:e=>!0,events:{}},predroppable:{enabled:!1,events:{}},draggable:{enabled:!0,distance:3,autoDistance:!0,showGhost:!0,deleteOnDropOff:!1},dropmode:{active:!1},selectable:{enabled:!0},stats:{dragged:!("ontouchstart"in window)},events:{},drawable:{enabled:!0,visible:!0,defaultSnapToValidMove:!0,eraseOnMovablePieceClick:!0,shapes:[],autoShapes:[],brushes:{green:{key:"g",color:"#15781B",opacity:1,lineWidth:10},red:{key:"r",color:"#882020",opacity:1,lineWidth:10},blue:{key:"b",color:"#003088",opacity:1,lineWidth:10},yellow:{key:"y",color:"#e68f00",opacity:1,lineWidth:10},paleBlue:{key:"pb",color:"#003088",opacity:.4,lineWidth:15},paleGreen:{key:"pg",color:"#15781B",opacity:.4,lineWidth:15},paleRed:{key:"pr",color:"#882020",opacity:.4,lineWidth:15},paleGrey:{key:"pgr",color:"#4a4a4a",opacity:.35,lineWidth:15},purple:{key:"purple",color:"#68217a",opacity:.65,lineWidth:10},pink:{key:"pink",color:"#ee2080",opacity:.5,lineWidth:10},white:{key:"white",color:"white",opacity:1,lineWidth:10},paleWhite:{key:"pwhite",color:"white",opacity:.6,lineWidth:10}},prevSvgHash:""},hold:to()}}function Wo(){let e=y("defs"),o=w(y("filter"),{id:"cg-filter-blur"});return o.appendChild(w(y("feGaussianBlur"),{stdDeviation:"0.013"})),e.appendChild(o),e}function zo(e,o){let n=e.drawable,r=n.current,t=r&&r.mouseSq?r:void 0,i=new Map,a=e.dom.bounds(),u=n.autoShapes.filter(l=>!l.piece);for(let l of n.shapes.concat(u).concat(t?[t]:[])){if(!l.dest)continue;let p=i.get(l.dest)??new Set,m=Me(Se(f(l.orig),e.orientation),a),b=Me(Se(f(l.dest),e.orientation),a);p.add(_e(m,b)),i.set(l.dest,p)}let d=[],s=t?n.shapes.findIndex(l=>Pe(l,t)&&je(l,t)):-1;for(let[l,p]of n.shapes.concat(u).entries()){let m=s!==-1&&s===l;d.push({shape:p,current:!1,pendingErase:m,hash:Fo(p,Ze(p.dest,i),!1,a,m)})}t&&s===-1&&d.push({shape:t,current:!0,hash:Fo(t,Ze(t.dest,i),!0,a,!1),pendingErase:!1});let c=d.map(l=>l.hash).join(";");c!==e.drawable.prevSvgHash&&(e.drawable.prevSvgHash=c,Ln(n,d,o),Fn(d,o,l=>zn(e,l,n.brushes,i,a)))}function Ln(e,o,n){for(let r of[n.shapes,n.shapesBelow]){let t=r.querySelector("defs"),i=o.filter(s=>r===n.shapesBelow==!!s.shape.below),a=new Map;for(let s of i.filter(c=>c.shape.dest&&c.shape.brush)){let c=$o(e.brushes[s.shape.brush],s.shape.modifiers),{key:l,color:p}=Io(s.shape);l&&p&&a.set(l,{key:l,color:p,opacity:1,lineWidth:1}),a.set(c.key,c)}let u=new Set,d=t.firstElementChild;for(;d;)u.add(d.getAttribute("cgKey")),d=d.nextElementSibling;for(let[s,c]of a.entries())u.has(s)||t.appendChild(jn(c))}}function Fn(e,o,n){for(let[r,t]of[[o.shapes,o.custom],[o.shapesBelow,o.customBelow]]){let[i,a]=[r,t].map(s=>s.querySelector("g")),u=e.filter(s=>r===o.shapesBelow==!!s.shape.below),d=new Map;for(let s of u)d.set(s.hash,!1);for(let s of[i,a]){let c=[],l=s.firstElementChild,p;for(;l;)p=l.getAttribute("cgHash"),d.has(p)?d.set(p,!0):c.push(l),l=l.nextElementSibling;for(let m of c)s.removeChild(m)}for(let s of u.filter(c=>!d.get(c.hash)))for(let c of n(s))c.isCustom?a.appendChild(c.el):i.appendChild(c.el)}}function Fo({orig:e,dest:o,brush:n,piece:r,modifiers:t,customSvg:i,label:a,below:u},d,s,c,l){return[c.width,c.height,s,l&&"pendingErase",e,o,n,d&&"-",r&&Gn(r),t&&Wn(t),i&&`custom-${Go(i.html)},${i.center?.[0]??"o"}`,a&&`label-${Go(a.text)}`,u&&"below"].filter(p=>p).join(",")}function Gn(e){return[e.color,e.role,e.scale].filter(o=>o).join(",")}function Wn(e){return[e.lineWidth,e.hilite].filter(o=>o).join(",")}function Go(e){let o=0;for(let n=0;n<e.length;n++)o=(o<<5)-o+e.charCodeAt(n)>>>0;return o.toString()}function zn(e,{shape:o,current:n,pendingErase:r,hash:t},i,a,u){let d=Me(Se(f(o.orig),e.orientation),u),s=o.dest?Me(Se(f(o.dest),e.orientation),u):d,c=o.brush&&$o(i[o.brush],o.modifiers),l=a.get(o.dest),p=[];if(c){let m=w(y("g"),{cgHash:t});p.push({el:m}),d[0]!==s[0]||d[1]!==s[1]?m.appendChild(In(o,c,d,s,n,Ze(o.dest,a),r)):m.appendChild($n(i[o.brush],d,n,u,r))}if(o.label){let m=o.label;m.fill??=o.brush&&i[o.brush].color;let b=o.brush?void 0:"tr";p.push({el:Un(m,t,d,s,l,b),isCustom:!0})}if(o.customSvg){let m=o.customSvg.center??"orig",[b,g]=m==="label"?Uo(d,s,l).map(D=>D-.5):m==="dest"?s:d,R=w(y("g"),{transform:`translate(${b},${g})`,cgHash:t});R.innerHTML=`<svg width="1" height="1" viewBox="0 0 100 100">${o.customSvg.html}</svg>`,p.push({el:R,isCustom:!0})}return p}function $n(e,o,n,r,t){let i=Zn(),a=(r.width+r.height)/(4*Math.max(r.width,r.height));return w(y("circle"),{stroke:e.color,"stroke-width":i[n?0:1],fill:"none",opacity:jo(e,n,t),cx:o[0],cy:o[1],r:a-i[1]/2})}function In(e,o,n,r,t,i,a){function u(c){let l=Xn(i&&!t),p=r[0]-n[0],m=r[1]-n[1],b=Math.atan2(m,p),g=Math.cos(b)*l,R=Math.sin(b)*l,D=Io(e);return w(y("line"),{stroke:c?D.color:o.color,"stroke-width":_n(o,t)*(c?1.14:1),"stroke-linecap":"round","marker-end":`url(#arrowhead-${c?D.key:o.key})`,opacity:e.modifiers?.hilite&&!a?1:jo(o,t,a),x1:n[0],y1:n[1],x2:r[0]-g,y2:r[1]-R})}if(!e.modifiers?.hilite)return u(!1);let d=w(y("g"),{opacity:o.opacity}),s=w(y("g"),{filter:"url(#cg-filter-blur)"});return s.appendChild(Qn(n,r)),s.appendChild(u(!0)),d.appendChild(s),d.appendChild(u(!1)),d}function jn(e){let o=w(y("marker"),{id:"arrowhead-"+e.key,orient:"auto",overflow:"visible",markerWidth:4,markerHeight:4,refX:e.key.startsWith("hilite")?1.86:2.05,refY:2});return o.appendChild(w(y("path"),{d:"M0,0 V4 L3,2 Z",fill:e.color})),o.setAttribute("cgKey",e.key),o}function Un(e,o,n,r,t,i){let u=.4*.75**e.text.length,d=Uo(n,r,t),s=i==="tr"?.4:0,c=w(y("g"),{transform:`translate(${d[0]+s},${d[1]-s})`,cgHash:o});c.appendChild(w(y("circle"),{r:.4/2,"fill-opacity":i?1:.8,"stroke-opacity":i?1:.7,"stroke-width":.03,fill:e.fill??"#666",stroke:"white"}));let l=w(y("text"),{"font-size":u,"font-family":"Noto Sans","text-anchor":"middle",fill:"white",y:.13*.75**e.text.length});return l.innerHTML=e.text,c.appendChild(l),c}function Se(e,o){return o==="white"?e:[7-e[0],7-e[1]]}function Ze(e,o){return(e&&o.has(e)&&o.get(e).size>1)===!0}function y(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}function w(e,o){for(let n in o)Object.prototype.hasOwnProperty.call(o,n)&&e.setAttribute(n,o[n]);return e}function $o(e,o){return o?{color:e.color,opacity:Math.round(e.opacity*10)/10,lineWidth:Math.round(o.lineWidth||e.lineWidth),key:[e.key,o.lineWidth].filter(n=>n).join("")}:e}function Zn(){return[3/64,4/64]}function _n(e,o){return(e.lineWidth||10)*(o?.85:1)/64}function Io(e){let o=e.modifiers?.hilite;return{key:o&&`hilite-${o.replace("#","")}`,color:o}}function jo(e,o,n){return(e.opacity||1)*(n?.6:o?.9:1)}function Xn(e){return(e?20:10)/64}function Me(e,o){let n=Math.min(1,o.width/o.height),r=Math.min(1,o.height/o.width);return[(e[0]-3.5)*n,(3.5-e[1])*r]}function Qn(e,o){let n={from:[Math.floor(Math.min(e[0],o[0])),Math.floor(Math.min(e[1],o[1]))],to:[Math.ceil(Math.max(e[0],o[0])),Math.ceil(Math.max(e[1],o[1]))]};return w(y("rect"),{x:n.from[0],y:n.from[1],width:n.to[0]-n.from[0],height:n.to[1]-n.from[1],fill:"none",stroke:"none"})}function _e(e,o,n=!0){let r=Math.atan2(o[1]-e[1],o[0]-e[0])+Math.PI;return n?(Math.round(r*8/Math.PI)+16)%16:r}function Yn(e,o){return Math.sqrt([e[0]-o[0],e[1]-o[1]].reduce((n,r)=>n+r*r,0))}function Uo(e,o,n){let r=Yn(e,o),t=_e(e,o,!1);if(n&&(r-=33/64,n.size>1)){r-=10/64;let i=_e(e,o);(n.has((i+1)%16)||n.has((i+15)%16))&&i&1&&(r-=.4)}return[e[0]-Math.cos(t)*r,e[1]-Math.sin(t)*r].map(i=>i+.5)}function _o(e,o){e.innerHTML="",e.classList.add("cg-wrap");for(let c of eo)e.classList.toggle("orientation-"+c,o.orientation===c);e.classList.toggle("manipulable",!o.viewOnly);let n=C("cg-container");e.appendChild(n);let r=C("cg-board");n.appendChild(r);let t,i,a,u,d;if(o.drawable.visible&&([t,i]=["cg-shapes-below","cg-shapes"].map(c=>Zo(c,!0)),[a,u]=["cg-custom-below","cg-custom-svgs"].map(c=>Zo(c,!1)),d=C("cg-auto-pieces"),n.appendChild(t),n.appendChild(a),n.appendChild(i),n.appendChild(u),n.appendChild(d)),o.coordinates){let c=o.orientation==="black"?" black":"",l=o.ranksPosition==="left"?" left":"";if(o.coordinatesOnSquares){let p=o.orientation==="white"?m=>m+1:m=>8-m;z.forEach((m,b)=>n.appendChild(Xe(j.map(g=>m+g),"squares rank"+p(b)+c+l)))}else n.appendChild(Xe(j,"ranks"+c+l)),n.appendChild(Xe(z,"files"+c))}let s;return o.draggable.enabled&&o.draggable.showGhost&&(s=C("piece","ghost"),Y(s,!1),n.appendChild(s)),{board:r,container:n,wrap:e,ghost:s,shapes:i,shapesBelow:t,custom:u,customBelow:a,autoPieces:d}}function Zo(e,o){let n=w(y("svg"),{class:e,viewBox:o?"-4 -4 8 8":"-3.5 -3.5 8 8",preserveAspectRatio:"xMidYMid slice"});return o&&n.appendChild(Wo()),n.appendChild(y("g")),n}function Xe(e,o){let n=C("coords",o),r;for(let t of e)r=C("coord"),r.textContent=t,n.appendChild(r);return n}function Xo(e,o){if(!e.dropmode.active)return;E(e),A(e);let n=e.dropmode.piece;if(n){e.pieces.set("a0",n);let r=B(o),t=r&&N(r,v(e),e.dom.bounds());t&&he(e,"a0",t)}e.dom.redraw()}function Yo(e,o){let n=e.dom.elements.board;if("ResizeObserver"in window&&new ResizeObserver(o).observe(e.dom.elements.wrap),(e.disableContextMenu||e.drawable.enabled)&&n.addEventListener("contextmenu",t=>t.preventDefault()),e.viewOnly)return;let r=er(e);n.addEventListener("touchstart",r,{passive:!1}),n.addEventListener("mousedown",r,{passive:!1})}function Jo(e,o){let n=[];if("ResizeObserver"in window||n.push(ie(document.body,"chessground.resize",o)),!e.viewOnly){let r=Qo(e,Ho,Do),t=Qo(e,qo,Ko);for(let a of["touchmove","mousemove"])n.push(ie(document,a,r));for(let a of["touchend","mouseup"])n.push(ie(document,a,t));let i=()=>e.dom.bounds.clear();n.push(ie(document,"scroll",i,{capture:!0,passive:!0})),n.push(ie(window,"resize",i,{passive:!0}))}return()=>n.forEach(r=>r())}function ie(e,o,n,r){return e.addEventListener(o,n,r),()=>e.removeEventListener(o,n,r)}var er=e=>o=>{e.draggable.current?I(e):e.drawable.current?Ie(e):o.shiftKey||le(o)?e.drawable.enabled&&ko(e,o):e.viewOnly||(e.dropmode.active?Xo(e,o):Ao(e,o))},Qo=(e,o,n)=>r=>{e.drawable.current?e.drawable.enabled&&n(e,r):e.viewOnly||o(e,r)};function on(e){let o=v(e),n=W(e.dom.bounds()),r=e.dom.elements.board,t=e.pieces,i=e.animation.current,a=i?i.plan.anims:new Map,u=i?i.plan.fadings:new Map,d=e.draggable.current,s=nr(e),c=new Set,l=new Set,p=new Map,m=new Map,b,g,R,D,K,_,ke,H,Ce,se;for(g=r.firstChild;g;){if(b=g.cgKey,rn(g))if(R=t.get(b),K=a.get(b),_=u.get(b),D=g.cgPiece,g.cgDragging&&(!d||d.orig!==b)&&(g.classList.remove("dragging"),k(g,n(f(b),o)),g.cgDragging=!1),!_&&g.cgFading&&(g.cgFading=!1,g.classList.remove("fading")),R){if(K&&g.cgAnimating&&D===ae(R)){let h=f(b);h[0]+=K[2],h[1]+=K[3],g.classList.add("anim"),k(g,n(h,o))}else g.cgAnimating&&(g.cgAnimating=!1,g.classList.remove("anim"),k(g,n(f(b),o)),e.addPieceZIndex&&(g.style.zIndex=Qe(f(b),o)));D===ae(R)&&(!_||!g.cgFading)?c.add(b):_&&D===ae(_)?(g.classList.add("fading"),g.cgFading=!0):Ye(p,D,g)}else Ye(p,D,g);else if(tn(g)){let h=g.className;s.get(b)===h?l.add(b):Ye(m,h,g)}g=g.nextSibling}for(let[h,X]of s)if(!l.has(h)){Ce=m.get(X),se=Ce&&Ce.pop();let q=n(f(h),o);if(se)se.cgKey=h,k(se,q);else{let T=C("square",X);T.cgKey=h,k(T,q),r.insertBefore(T,r.firstChild)}}for(let[h,X]of t)if(K=a.get(h),!c.has(h))if(ke=p.get(ae(X)),H=ke&&ke.pop(),H){H.cgKey=h,H.cgFading&&(H.classList.remove("fading"),H.cgFading=!1);let q=f(h);e.addPieceZIndex&&(H.style.zIndex=Qe(q,o)),K&&(H.cgAnimating=!0,H.classList.add("anim"),q[0]+=K[2],q[1]+=K[3]),k(H,n(q,o))}else{let q=ae(X),T=C("piece",q),ce=f(h);T.cgPiece=q,T.cgKey=h,K&&(T.cgAnimating=!0,ce[0]+=K[2],ce[1]+=K[3]),k(T,n(ce,o)),e.addPieceZIndex&&(T.style.zIndex=Qe(ce,o)),r.appendChild(T)}for(let h of p.values())en(e,h);for(let h of m.values())en(e,h)}function nn(e){let o=v(e),n=W(e.dom.bounds()),r=e.dom.elements.board.firstChild;for(;r;)(rn(r)&&!r.cgAnimating||tn(r))&&k(r,n(f(r.cgKey),o)),r=r.nextSibling}function Je(e){let o=e.dom.elements.wrap.getBoundingClientRect(),n=e.dom.elements.container,r=o.height/o.width,t=Math.floor(o.width*window.devicePixelRatio/8)*8/window.devicePixelRatio,i=t*r;n.style.width=t+"px",n.style.height=i+"px",e.dom.bounds.clear(),e.addDimensionsCssVarsTo?.style.setProperty("---cg-width",t+"px"),e.addDimensionsCssVarsTo?.style.setProperty("---cg-height",i+"px")}var rn=e=>e.tagName==="PIECE",tn=e=>e.tagName==="SQUARE";function en(e,o){for(let n of o)e.dom.elements.board.removeChild(n)}function Qe(e,o){let r=e[1];return`${o?10-r:3+r}`}var ae=e=>`${e.color} ${e.role}`;function nr(e){let o=new Map;if(e.lastMove&&e.highlight.lastMove)for(let t of e.lastMove)L(o,t,"last-move");if(e.check&&e.highlight.check&&L(o,e.check,"check"),e.selected&&(L(o,e.selected,"selected"),e.movable.showDests)){let t=e.movable.dests?.get(e.selected);if(t)for(let a of t)L(o,a,"move-dest"+(e.pieces.has(a)?" oc":""));let i=e.premovable.customDests?.get(e.selected)??e.premovable.dests;if(i)for(let a of i)L(o,a,"premove-dest"+(e.pieces.has(a)?" oc":""))}let n=e.premovable.current;if(n)for(let t of n)L(o,t,"current-premove");else e.predroppable.current&&L(o,e.predroppable.current.key,"current-premove");let r=e.exploding;if(r)for(let t of r.keys)L(o,t,"exploding"+r.stage);return e.highlight.custom&&e.highlight.custom.forEach((t,i)=>{L(o,i,t)}),o}function L(e,o,n){let r=e.get(o);r?e.set(o,`${r} ${n}`):e.set(o,n)}function Ye(e,o,n){let r=e.get(o);r?r.push(n):e.set(o,[n])}function an(e,o,n){let r=new Map,t=[];for(let u of e)r.set(u.hash,!1);let i=o.firstElementChild,a;for(;i;)a=i.getAttribute("cgHash"),r.has(a)?r.set(a,!0):t.push(i),i=i.nextElementSibling;for(let u of t)o.removeChild(u);for(let u of e)r.get(u.hash)||o.appendChild(n(u))}function sn(e,o){let r=e.drawable.autoShapes.filter(t=>t.piece).map(t=>({shape:t,hash:tr(t),current:!1,pendingErase:!1}));an(r,o,t=>rr(e,t,e.dom.bounds()))}function cn(e){let o=v(e),n=W(e.dom.bounds()),r=e.dom.elements.autoPieces?.firstChild;for(;r;)xe(r,n(f(r.cgKey),o),r.cgScale),r=r.nextSibling}function rr(e,{shape:o,hash:n},r){let t=o.orig,i=o.piece?.role,a=o.piece?.color,u=o.piece?.scale,d=C("piece",`${i} ${a}`);return d.setAttribute("cgHash",n),d.cgKey=t,d.cgScale=u,xe(d,W(r)(f(t),v(e)),u),d}var tr=e=>[e.orig,e.piece?.role,e.piece?.color,e.piece?.scale].join(",");function ut({el:e,config:o}){return ar(e,o)}function ar(e,o){let n=Lo();we(n,o||{});function r(){let t="dom"in n?n.dom.unbind:void 0,i=_o(e,n),a=Ke(()=>i.board.getBoundingClientRect()),u=c=>{on(s),i.autoPieces&&sn(s,i.autoPieces),!c&&i.shapes&&zo(s,i)},d=()=>{Je(s),nn(s),i.autoPieces&&cn(s)},s=n;return s.dom={elements:i,bounds:a,redraw:sr(u),redrawNow:u,unbind:t},s.drawable.prevSvgHash="",Je(s),u(!1),Yo(s,d),t||(s.dom.unbind=Jo(s,d)),s.events.insert&&s.events.insert(i),s}return Vo(r(),r)}function sr(e){let o=!1;return()=>{o||(o=!0,requestAnimationFrame(()=>{e(),o=!1}))}}export{ar as Chessground,ut as initModule};
package/dist/draw.d.ts CHANGED
@@ -64,3 +64,5 @@ export declare function move(state: State, e: cg.MouchEvent): void;
64
64
  export declare function end(state: State): void;
65
65
  export declare function cancel(state: State): void;
66
66
  export declare function clear(state: State): void;
67
+ export declare const sameEndpoints: (s1: DrawShape, s2: DrawShape) => boolean;
68
+ export declare const sameColor: (s1: DrawShape, s2: DrawShape) => boolean;
package/dist/draw.js CHANGED
@@ -64,17 +64,18 @@ export function clear(state) {
64
64
  onChange(state.drawable);
65
65
  }
66
66
  }
67
+ export const sameEndpoints = (s1, s2) => s1.orig === s2.orig && s1.dest === s2.dest;
68
+ export const sameColor = (s1, s2) => s1.brush === s2.brush;
67
69
  function eventBrush(e) {
68
70
  const modA = (e.shiftKey || e.ctrlKey) && isRightButton(e);
69
71
  const modB = e.altKey || e.metaKey || e.getModifierState?.('AltGraph');
70
72
  return brushes[(modA ? 1 : 0) + (modB ? 2 : 0)];
71
73
  }
72
74
  function addShape(drawable, cur) {
73
- const sameShape = (s) => s.orig === cur.orig && s.dest === cur.dest;
74
- const similar = drawable.shapes.find(sameShape);
75
+ const similar = drawable.shapes.find(s => sameEndpoints(s, cur));
75
76
  if (similar)
76
- drawable.shapes = drawable.shapes.filter(s => !sameShape(s));
77
- if (!similar || similar.brush !== cur.brush)
77
+ drawable.shapes = drawable.shapes.filter(s => !sameEndpoints(s, cur));
78
+ if (!similar || !sameColor(similar, cur))
78
79
  drawable.shapes.push({
79
80
  orig: cur.orig,
80
81
  dest: cur.dest,
package/dist/draw.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"draw.js","sourceRoot":"","sources":["../src/draw.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"draw.js","sourceRoot":"","sources":["../src/draw.ts"],"names":[],"mappings":"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"}
package/dist/svg.js CHANGED
@@ -1,4 +1,5 @@
1
1
  import { key2pos } from './util.js';
2
+ import { sameEndpoints, sameColor, } from './draw.js';
2
3
  export { createElement, setAttributes };
3
4
  export function createDefs() {
4
5
  const defs = createElement('defs');
@@ -17,18 +18,22 @@ export function renderSvg(state, els) {
17
18
  dests.set(s.dest, sources);
18
19
  }
19
20
  const shapes = [];
20
- for (const s of d.shapes.concat(nonPieceAutoShapes)) {
21
+ const pendingEraseIdx = cur ? d.shapes.findIndex(s => sameEndpoints(s, cur) && sameColor(s, cur)) : -1;
22
+ for (const [idx, s] of d.shapes.concat(nonPieceAutoShapes).entries()) {
23
+ const isPendingErase = pendingEraseIdx !== -1 && pendingEraseIdx === idx;
21
24
  shapes.push({
22
25
  shape: s,
23
26
  current: false,
24
- hash: shapeHash(s, isShort(s.dest, dests), false, bounds),
27
+ pendingErase: isPendingErase,
28
+ hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase),
25
29
  });
26
30
  }
27
- if (cur)
31
+ if (cur && pendingEraseIdx === -1)
28
32
  shapes.push({
29
33
  shape: cur,
30
34
  current: true,
31
- hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds),
35
+ hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false),
36
+ pendingErase: false,
32
37
  });
33
38
  const fullHash = shapes.map(sc => sc.hash).join(';');
34
39
  if (fullHash === state.drawable.prevSvgHash)
@@ -97,12 +102,13 @@ function syncShapes(shapes, els, renderShape) {
97
102
  }
98
103
  }
99
104
  }
100
- function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds) {
105
+ function shapeHash({ orig, dest, brush, piece, modifiers, customSvg, label, below }, shorten, current, bounds, pendingErase) {
101
106
  // a shape and an overlay svg share a lifetime and have the same cgHash attribute
102
107
  return [
103
108
  bounds.width,
104
109
  bounds.height,
105
110
  current,
111
+ pendingErase && 'pendingErase',
106
112
  orig,
107
113
  dest,
108
114
  brush,
@@ -130,15 +136,15 @@ function textHash(s) {
130
136
  }
131
137
  return h.toString();
132
138
  }
133
- function renderShape(state, { shape, current, hash }, brushes, dests, bounds) {
139
+ function renderShape(state, { shape, current, pendingErase, hash }, brushes, dests, bounds) {
134
140
  const from = pos2user(orient(key2pos(shape.orig), state.orientation), bounds), to = shape.dest ? pos2user(orient(key2pos(shape.dest), state.orientation), bounds) : from, brush = shape.brush && makeCustomBrush(brushes[shape.brush], shape.modifiers), slots = dests.get(shape.dest), svgs = [];
135
141
  if (brush) {
136
142
  const el = setAttributes(createElement('g'), { cgHash: hash });
137
143
  svgs.push({ el });
138
144
  if (from[0] !== to[0] || from[1] !== to[1])
139
- el.appendChild(renderArrow(shape, brush, from, to, current, isShort(shape.dest, dests)));
145
+ el.appendChild(renderArrow(shape, brush, from, to, current, isShort(shape.dest, dests), pendingErase));
140
146
  else
141
- el.appendChild(renderCircle(brushes[shape.brush], from, current, bounds));
147
+ el.appendChild(renderCircle(brushes[shape.brush], from, current, bounds, pendingErase));
142
148
  }
143
149
  if (shape.label) {
144
150
  const label = shape.label;
@@ -155,19 +161,19 @@ function renderShape(state, { shape, current, hash }, brushes, dests, bounds) {
155
161
  }
156
162
  return svgs;
157
163
  }
158
- function renderCircle(brush, at, current, bounds) {
164
+ function renderCircle(brush, at, current, bounds, pendingErase) {
159
165
  const widths = circleWidth(), radius = (bounds.width + bounds.height) / (4 * Math.max(bounds.width, bounds.height));
160
166
  return setAttributes(createElement('circle'), {
161
167
  stroke: brush.color,
162
168
  'stroke-width': widths[current ? 0 : 1],
163
169
  fill: 'none',
164
- opacity: opacity(brush, current),
170
+ opacity: opacity(brush, current, pendingErase),
165
171
  cx: at[0],
166
172
  cy: at[1],
167
173
  r: radius - widths[1] / 2,
168
174
  });
169
175
  }
170
- function renderArrow(s, brush, from, to, current, shorten) {
176
+ function renderArrow(s, brush, from, to, current, shorten, pendingErase) {
171
177
  function renderLine(isHilite) {
172
178
  const m = arrowMargin(shorten && !current), dx = to[0] - from[0], dy = to[1] - from[1], angle = Math.atan2(dy, dx), xo = Math.cos(angle) * m, yo = Math.sin(angle) * m;
173
179
  const hilite = hiliteOf(s);
@@ -176,7 +182,7 @@ function renderArrow(s, brush, from, to, current, shorten) {
176
182
  'stroke-width': lineWidth(brush, current) * (isHilite ? 1.14 : 1),
177
183
  'stroke-linecap': 'round',
178
184
  'marker-end': `url(#arrowhead-${isHilite ? hilite.key : brush.key})`,
179
- opacity: s.modifiers?.hilite ? 1 : opacity(brush, current),
185
+ opacity: s.modifiers?.hilite && !pendingErase ? 1 : opacity(brush, current, pendingErase),
180
186
  x1: from[0],
181
187
  y1: from[1],
182
188
  x2: to[0] - xo,
@@ -270,8 +276,8 @@ function hiliteOf(shape) {
270
276
  const hilite = shape.modifiers?.hilite;
271
277
  return { key: hilite && `hilite-${hilite.replace('#', '')}`, color: hilite };
272
278
  }
273
- function opacity(brush, current) {
274
- return (brush.opacity || 1) * (current ? 0.9 : 1);
279
+ function opacity(brush, current, pendingErase) {
280
+ return (brush.opacity || 1) * (pendingErase ? 0.6 : current ? 0.9 : 1);
275
281
  }
276
282
  function arrowMargin(shorten) {
277
283
  return (shorten ? 20 : 10) / 64;
package/dist/svg.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
package/dist/sync.d.ts CHANGED
@@ -2,6 +2,7 @@ import { DrawShape } from './draw';
2
2
  export interface SyncableShape {
3
3
  shape: DrawShape;
4
4
  current: boolean;
5
+ pendingErase: boolean;
5
6
  hash: Hash;
6
7
  }
7
8
  export type Hash = string;
package/dist/sync.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAUA,sCAAsC;AACtC,MAAM,UAAU,UAAU,CACxB,MAAuB,EACvB,IAA8B,EAC9B,WAA+D;IAE/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,EAAE,UAAU;IACvC,QAAQ,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,EAAE,GAA2B,IAAI,CAAC,iBAA+B,EACnE,MAAmB,CAAC;IACtB,OAAO,EAAE,EAAE,CAAC;QACV,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAS,CAAC;QAC3C,4CAA4C;QAC5C,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,eAAe;;YACV,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,EAAE,GAAG,EAAE,CAAC,kBAA4C,CAAC;IACvD,CAAC;IACD,oBAAoB;IACpB,KAAK,MAAM,EAAE,IAAI,QAAQ;QAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChD,wCAAwC;IACxC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../src/sync.ts"],"names":[],"mappings":"AAWA,sCAAsC;AACtC,MAAM,UAAU,UAAU,CACxB,MAAuB,EACvB,IAA8B,EAC9B,WAA+D;IAE/D,MAAM,WAAW,GAAG,IAAI,GAAG,EAAE,EAAE,UAAU;IACvC,QAAQ,GAAiB,EAAE,CAAC;IAC9B,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzD,IAAI,EAAE,GAA2B,IAAI,CAAC,iBAA+B,EACnE,MAAmB,CAAC;IACtB,OAAO,EAAE,EAAE,CAAC;QACV,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAS,CAAC;QAC3C,4CAA4C;QAC5C,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC3D,eAAe;;YACV,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvB,EAAE,GAAG,EAAE,CAAC,kBAA4C,CAAC;IACvD,CAAC;IACD,oBAAoB;IACpB,KAAK,MAAM,EAAE,IAAI,QAAQ;QAAE,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAChD,wCAAwC;IACxC,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
package/dist/util.js CHANGED
@@ -67,7 +67,9 @@ export const eventPosition = (e) => {
67
67
  return [e.targetTouches[0].clientX, e.targetTouches[0].clientY];
68
68
  return; // touchend has no position!
69
69
  };
70
- export const isRightButton = (e) => e.button === 2;
70
+ const isFireMac = memo(() => !('ontouchstart' in window) &&
71
+ ['macintosh', 'firefox'].every(x => navigator.userAgent.toLowerCase().includes(x)));
72
+ export const isRightButton = (e) => e.button === 2 && !(e.ctrlKey && isFireMac());
71
73
  export const createEl = (tagName, className) => {
72
74
  const el = document.createElement(tagName);
73
75
  if (className)
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lichess-org/chessground",
3
- "version": "9.8.3",
3
+ "version": "9.8.5",
4
4
  "//": "version is managed by the build system",
5
5
  "description": "lichess.org chess ui",
6
6
  "type": "module",
package/src/autoPieces.ts CHANGED
@@ -12,6 +12,7 @@ export function render(state: State, autoPieceEl: HTMLElement): void {
12
12
  shape: s,
13
13
  hash: hash(s),
14
14
  current: false,
15
+ pendingErase: false,
15
16
  };
16
17
  });
17
18
 
package/src/draw.ts CHANGED
@@ -131,6 +131,10 @@ export function clear(state: State): void {
131
131
  }
132
132
  }
133
133
 
134
+ export const sameEndpoints = (s1: DrawShape, s2: DrawShape) => s1.orig === s2.orig && s1.dest === s2.dest;
135
+
136
+ export const sameColor = (s1: DrawShape, s2: DrawShape) => s1.brush === s2.brush;
137
+
134
138
  function eventBrush(e: cg.MouchEvent): cg.BrushColor {
135
139
  const modA = (e.shiftKey || e.ctrlKey) && isRightButton(e);
136
140
  const modB = e.altKey || e.metaKey || e.getModifierState?.('AltGraph');
@@ -138,10 +142,9 @@ function eventBrush(e: cg.MouchEvent): cg.BrushColor {
138
142
  }
139
143
 
140
144
  function addShape(drawable: Drawable, cur: DrawCurrent): void {
141
- const sameShape = (s: DrawShape) => s.orig === cur.orig && s.dest === cur.dest;
142
- const similar = drawable.shapes.find(sameShape);
143
- if (similar) drawable.shapes = drawable.shapes.filter(s => !sameShape(s));
144
- if (!similar || similar.brush !== cur.brush)
145
+ const similar = drawable.shapes.find(s => sameEndpoints(s, cur));
146
+ if (similar) drawable.shapes = drawable.shapes.filter(s => !sameEndpoints(s, cur));
147
+ if (!similar || !sameColor(similar, cur))
145
148
  drawable.shapes.push({
146
149
  orig: cur.orig,
147
150
  dest: cur.dest,
package/src/svg.ts CHANGED
@@ -1,6 +1,15 @@
1
1
  import { State } from './state.js';
2
2
  import { key2pos } from './util.js';
3
- import { Drawable, DrawShape, DrawShapePiece, DrawBrush, DrawBrushes, DrawModifiers } from './draw.js';
3
+ import {
4
+ Drawable,
5
+ DrawShape,
6
+ DrawShapePiece,
7
+ DrawBrush,
8
+ DrawBrushes,
9
+ DrawModifiers,
10
+ sameEndpoints,
11
+ sameColor,
12
+ } from './draw.js';
4
13
  import { SyncableShape, Hash } from './sync.js';
5
14
  import * as cg from './types.js';
6
15
 
@@ -54,18 +63,23 @@ export function renderSvg(state: State, els: cg.Elements): void {
54
63
  }
55
64
  const shapes: SyncableShape[] = [];
56
65
 
57
- for (const s of d.shapes.concat(nonPieceAutoShapes)) {
66
+ const pendingEraseIdx = cur ? d.shapes.findIndex(s => sameEndpoints(s, cur) && sameColor(s, cur)) : -1;
67
+
68
+ for (const [idx, s] of d.shapes.concat(nonPieceAutoShapes).entries()) {
69
+ const isPendingErase = pendingEraseIdx !== -1 && pendingEraseIdx === idx;
58
70
  shapes.push({
59
71
  shape: s,
60
72
  current: false,
61
- hash: shapeHash(s, isShort(s.dest, dests), false, bounds),
73
+ pendingErase: isPendingErase,
74
+ hash: shapeHash(s, isShort(s.dest, dests), false, bounds, isPendingErase),
62
75
  });
63
76
  }
64
- if (cur)
77
+ if (cur && pendingEraseIdx === -1)
65
78
  shapes.push({
66
79
  shape: cur,
67
80
  current: true,
68
- hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds),
81
+ hash: shapeHash(cur, isShort(cur.dest, dests), true, bounds, false),
82
+ pendingErase: false,
69
83
  });
70
84
 
71
85
  const fullHash = shapes.map(sc => sc.hash).join(';');
@@ -141,12 +155,14 @@ function shapeHash(
141
155
  shorten: boolean,
142
156
  current: boolean,
143
157
  bounds: DOMRectReadOnly,
158
+ pendingErase: boolean,
144
159
  ): Hash {
145
160
  // a shape and an overlay svg share a lifetime and have the same cgHash attribute
146
161
  return [
147
162
  bounds.width,
148
163
  bounds.height,
149
164
  current,
165
+ pendingErase && 'pendingErase',
150
166
  orig,
151
167
  dest,
152
168
  brush,
@@ -180,7 +196,7 @@ function textHash(s: string): Hash {
180
196
 
181
197
  function renderShape(
182
198
  state: State,
183
- { shape, current, hash }: SyncableShape,
199
+ { shape, current, pendingErase, hash }: SyncableShape,
184
200
  brushes: DrawBrushes,
185
201
  dests: ArrowDests,
186
202
  bounds: DOMRectReadOnly,
@@ -196,8 +212,8 @@ function renderShape(
196
212
  svgs.push({ el });
197
213
 
198
214
  if (from[0] !== to[0] || from[1] !== to[1])
199
- el.appendChild(renderArrow(shape, brush, from, to, current, isShort(shape.dest, dests)));
200
- else el.appendChild(renderCircle(brushes[shape.brush!], from, current, bounds));
215
+ el.appendChild(renderArrow(shape, brush, from, to, current, isShort(shape.dest, dests), pendingErase));
216
+ else el.appendChild(renderCircle(brushes[shape.brush!], from, current, bounds, pendingErase));
201
217
  }
202
218
  if (shape.label) {
203
219
  const label = shape.label;
@@ -221,6 +237,7 @@ function renderCircle(
221
237
  at: cg.NumberPair,
222
238
  current: boolean,
223
239
  bounds: DOMRectReadOnly,
240
+ pendingErase: boolean,
224
241
  ): SVGElement {
225
242
  const widths = circleWidth(),
226
243
  radius = (bounds.width + bounds.height) / (4 * Math.max(bounds.width, bounds.height));
@@ -228,7 +245,7 @@ function renderCircle(
228
245
  stroke: brush.color,
229
246
  'stroke-width': widths[current ? 0 : 1],
230
247
  fill: 'none',
231
- opacity: opacity(brush, current),
248
+ opacity: opacity(brush, current, pendingErase),
232
249
  cx: at[0],
233
250
  cy: at[1],
234
251
  r: radius - widths[1] / 2,
@@ -242,6 +259,7 @@ function renderArrow(
242
259
  to: cg.NumberPair,
243
260
  current: boolean,
244
261
  shorten: boolean,
262
+ pendingErase: boolean,
245
263
  ): SVGElement {
246
264
  function renderLine(isHilite: boolean) {
247
265
  const m = arrowMargin(shorten && !current),
@@ -256,7 +274,7 @@ function renderArrow(
256
274
  'stroke-width': lineWidth(brush, current) * (isHilite ? 1.14 : 1),
257
275
  'stroke-linecap': 'round',
258
276
  'marker-end': `url(#arrowhead-${isHilite ? hilite.key : brush.key})`,
259
- opacity: s.modifiers?.hilite ? 1 : opacity(brush, current),
277
+ opacity: s.modifiers?.hilite && !pendingErase ? 1 : opacity(brush, current, pendingErase),
260
278
  x1: from[0],
261
279
  y1: from[1],
262
280
  x2: to[0] - xo,
@@ -375,8 +393,8 @@ function hiliteOf(shape: DrawShape): { key?: string; color?: string } {
375
393
  return { key: hilite && `hilite-${hilite.replace('#', '')}`, color: hilite };
376
394
  }
377
395
 
378
- function opacity(brush: DrawBrush, current: boolean): number {
379
- return (brush.opacity || 1) * (current ? 0.9 : 1);
396
+ function opacity(brush: DrawBrush, current: boolean, pendingErase: boolean): number {
397
+ return (brush.opacity || 1) * (pendingErase ? 0.6 : current ? 0.9 : 1);
380
398
  }
381
399
 
382
400
  function arrowMargin(shorten: boolean): number {
package/src/sync.ts CHANGED
@@ -3,6 +3,7 @@ import { DrawShape } from './draw';
3
3
  export interface SyncableShape {
4
4
  shape: DrawShape;
5
5
  current: boolean;
6
+ pendingErase: boolean;
6
7
  hash: Hash;
7
8
  }
8
9
 
package/src/util.ts CHANGED
@@ -86,7 +86,13 @@ export const eventPosition = (e: cg.MouchEvent): cg.NumberPair | undefined => {
86
86
  return; // touchend has no position!
87
87
  };
88
88
 
89
- export const isRightButton = (e: cg.MouchEvent): boolean => e.button === 2;
89
+ const isFireMac = memo(
90
+ () =>
91
+ !('ontouchstart' in window) &&
92
+ ['macintosh', 'firefox'].every(x => navigator.userAgent.toLowerCase().includes(x)),
93
+ );
94
+
95
+ export const isRightButton = (e: cg.MouchEvent): boolean => e.button === 2 && !(e.ctrlKey && isFireMac());
90
96
 
91
97
  export const createEl = (tagName: string, className?: string): HTMLElement => {
92
98
  const el = document.createElement(tagName);