UNPKG

shogiground

Version:
3 lines (2 loc) 45.2 kB
"use strict";var Shogiground=(()=>{var Be=Object.defineProperty;var Dn=Object.getOwnPropertyDescriptor;var Cn=Object.getOwnPropertyNames;var Hn=Object.prototype.hasOwnProperty;var Mn=(e,o)=>{for(var n in o)Be(e,n,{get:o[n],enumerable:!0})},xn=(e,o,n,r)=>{if(o&&typeof o=="object"||typeof o=="function")for(let t of Cn(o))!Hn.call(e,t)&&t!==n&&Be(e,t,{get:()=>o[t],enumerable:!(r=Dn(o,t))||r.enumerable});return e};var En=e=>xn(Be({},"__esModule",{value:!0}),e);var ur={};Mn(ur,{default:()=>pr});var Q=["sente","gote"],Le=["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"],je=["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p"],Se=Array.prototype.concat(...je.map(e=>Le.map(o=>o+e)));var oe=e=>Se[e[0]+16*e[1]],M=e=>e.length>2?[e.charCodeAt(1)-39,e.charCodeAt(2)-97]:[e.charCodeAt(0)-49,e.charCodeAt(1)-97];function we(e){let o,n=()=>(o===void 0&&(o=e()),o);return n.clear=()=>{o=void 0},n}function b(e,...o){e&&setTimeout(()=>e(...o),1)}var z=e=>e==="sente"?"gote":"sente",S=e=>e==="sente",ne=(e,o)=>{let n=e[0]-o[0],r=e[1]-o[1];return n*n+r*r},v=(e,o)=>e.role===o.role&&e.color===o.color,So=(e,o,n,r,t)=>[(n?o.files-1-e[0]:e[0])*r,(n?e[1]:o.ranks-1-e[1])*t],wo=(e,o)=>{let n=o.width/e.files,r=o.height/e.ranks;return(t,i)=>So(t,e,i,n,r)},fe=e=>(o,n)=>So(o,e,n,100,100),Fe=(e,o,n)=>{e.style.transform=`translate(${o[0]}px,${o[1]}px) scale(${n}`},X=(e,o,n,r)=>{e.style.transform=`translate(${o[0]*n}%,${o[1]*n}%) scale(${r||n})`},O=(e,o)=>{e.style.display=o?"":"none"},q=e=>{var o;if(e.clientX||e.clientX===0)return[e.clientX,e.clientY];if((o=e.targetTouches)!=null&&o[0])return[e.targetTouches[0].clientX,e.targetTouches[0].clientY]},re=e=>e.buttons===2||e.button===2,Do=e=>e.buttons===4||e.button===1,P=(e,o)=>{let n=document.createElement(e);return o&&(n.className=o),n};function g(e){return`${e.color} ${e.role}`}function De(e){return e.tagName==="PIECE"}function Co(e){return e.tagName==="SQ"}function Ho(e,o,n,r){let t=M(e);return o&&(t[0]=n.files-1-t[0],t[1]=n.ranks-1-t[1]),[r.left+r.width*t[0]/n.files+r.width/(n.files*2),r.top+r.height*(n.ranks-1-t[1])/n.ranks+r.height/(n.ranks*2)]}function Ve(e,o,n){let r=M(e),t=n.files-1-r[0]+r[1]*n.files;return o||(t=n.files*n.ranks-1-t),t}function _(e,o){return e.left<=o[0]&&e.top<=o[1]&&e.left+e.width>o[0]&&e.top+e.height>o[1]}function Y(e,o,n,r){let t=Math.floor(n.files*(e[0]-r.left)/r.width);o&&(t=n.files-1-t);let i=Math.floor(n.ranks*(e[1]-r.top)/r.height);return o||(i=n.ranks-1-i),t>=0&&t<n.files&&i>=0&&i<n.ranks?oe([t,i]):void 0}function Ce(e,o,n){for(let r of Q)for(let t of o){let i={color:r,role:t},s=n.get(g(i));if(s&&_(s,e))return i}}function te(e,o,n,r,t){let i=t.width/r.files,s=t.height/r.ranks;if(!i||!s)return;let a=(e-t.left)/i;n&&(a=r.files-1-a);let d=(o-t.top)/s;return n||(d=r.ranks-1-d),[a,d]}function Z(e,o,n=1){let r=e.hands.handMap.get(o.color),t=(e.hands.roles.includes(o.role)?o.role:e.promotion.unpromotesTo(o.role))||o.role;r&&e.hands.roles.includes(t)&&r.set(t,(r.get(t)||0)+n)}function J(e,o,n=1){let r=e.hands.handMap.get(o.color),t=(e.hands.roles.includes(o.role)?o.role:e.promotion.unpromotesTo(o.role))||o.role,i=r==null?void 0:r.get(t);r&&i&&r.set(t,Math.max(i-n,0))}function ie(e,o){var r;o.classList.toggle("promotion",!!e.promotion.current);let n=o.firstElementChild;for(;n;){let t=n.firstElementChild,i={role:t.sgRole,color:t.sgColor},s=((r=e.hands.handMap.get(i.color))==null?void 0:r.get(i.role))||0,a=!!e.selectedPiece&&v(i,e.selectedPiece)&&!e.droppable.spare;n.classList.toggle("selected",(e.activeColor==="both"||e.activeColor===e.turnColor)&&a),n.classList.toggle("preselected",e.activeColor!=="both"&&e.activeColor!==e.turnColor&&a),n.classList.toggle("last-dest",e.highlight.lastDests&&!!e.lastPiece&&v(i,e.lastPiece)),n.classList.toggle("drawing",!!e.drawable.piece&&v(e.drawable.piece,i)),n.classList.toggle("current-pre",!!e.predroppable.current&&v(e.predroppable.current.piece,i)),n.dataset.nb=s.toString(),n=n.nextElementSibling}}function Mo(e){e.orientation=z(e.orientation),e.animation.current=e.draggable.current=e.promotion.current=e.hovered=e.selected=e.selectedPiece=void 0}function xo(e){h(e),F(e),V(e),Ke(e),e.animation.current=e.draggable.current=e.hovered=void 0}function Eo(e,o){for(let[n,r]of o)r?e.pieces.set(n,r):e.pieces.delete(n)}function Ko(e,o){if(Array.isArray(o))e.checks=o;else if(o===!0&&(o=e.turnColor),o){let n=[];for(let[r,t]of e.pieces)e.highlight.checkRoles.includes(t.role)&&t.color===o&&n.push(r);e.checks=n}else e.checks=void 0}function Kn(e,o,n,r){V(e),e.premovable.current={orig:o,dest:n,prom:r},b(e.premovable.events.set,o,n,r)}function F(e){e.premovable.current&&(e.premovable.current=void 0,b(e.premovable.events.unset))}function On(e,o,n,r){F(e),e.predroppable.current={piece:o,key:n,prom:r},b(e.predroppable.events.set,o,n,r)}function V(e){e.predroppable.current&&(e.predroppable.current=void 0,b(e.predroppable.events.unset))}function $e(e,o,n,r){let t=e.pieces.get(o),i=e.pieces.get(n);if(o===n||!t)return!1;let s=i&&i.color!==t.color?i:void 0,a=r&&Xe(e,t);return(n===e.selected||o===e.selected)&&h(e),e.pieces.set(n,a||t),e.pieces.delete(o),e.lastDests=[o,n],e.lastPiece=void 0,e.checks=void 0,b(e.events.move,o,n,r,s),b(e.events.change),s||!0}function Ue(e,o,n,r){var s;let t=((s=e.hands.handMap.get(o.color))==null?void 0:s.get(o.role))||0;if(!t&&!e.droppable.spare)return!1;let i=r&&Xe(e,o);return(n===e.selected||!e.droppable.spare&&t===1&&e.selectedPiece&&v(e.selectedPiece,o))&&h(e),e.pieces.set(n,i||o),e.lastDests=[n],e.lastPiece=o,e.checks=void 0,e.droppable.spare||J(e,o),b(e.events.drop,o,n,r),b(e.events.change),!0}function Oo(e,o,n,r){let t=$e(e,o,n,r);return t&&(e.movable.dests=void 0,e.droppable.dests=void 0,e.turnColor=z(e.turnColor),e.animation.current=void 0),t}function ko(e,o,n,r){let t=Ue(e,o,n,r);return t&&(e.movable.dests=void 0,e.droppable.dests=void 0,e.turnColor=z(e.turnColor),e.animation.current=void 0),t}function ge(e,o,n,r){let t=r||e.promotion.forceDropPromotion(o,n);if(ae(e,o,n)){if(ko(e,o,n,t))return h(e),b(e.droppable.events.after,o,n,t,{premade:!1}),!0}else if(Ee(e,o,n))return On(e,o,n,t),h(e),!0;return h(e),!1}function me(e,o,n,r){let t=r||e.promotion.forceMovePromotion(o,n);if(se(e,o,n)){let i=Oo(e,o,n,t);if(i){h(e);let s={premade:!1};return i!==!0&&(s.captured=i),b(e.movable.events.after,o,n,t,s),!0}}else if(xe(e,o,n))return Kn(e,o,n,t),h(e),!0;return h(e),!1}function To(e,o,n){let r=Xe(e,o);return e.viewOnly||e.promotion.current||!r?!1:(e.promotion.current={piece:o,promotedPiece:r,key:n,dragged:!!e.draggable.current},e.hovered=n,!0)}function Ie(e,o,n){return Rn(e,o,n)&&(ae(e,o,n)||Ee(e,o,n))&&To(e,o,n)?(b(e.promotion.events.initiated),!0):!1}function ze(e,o,n){if(An(e,o,n)&&(se(e,o,n)||xe(e,o,n))){let r=e.pieces.get(o);if(r&&To(e,r,n))return b(e.promotion.events.initiated),!0}return!1}function Xe(e,o){let n=e.promotion.promotesTo(o.role);return n!==void 0?{color:o.color,role:n}:void 0}function Ao(e,o){e.pieces.delete(o)&&b(e.events.change)}function G(e,o,n,r){if(b(e.events.select,o),!e.draggable.enabled&&e.selected===o){b(e.events.unselect,o),h(e);return}if(e.selectable.enabled||r||e.selectable.forceSpares&&e.selectedPiece&&e.droppable.spare){if(e.selectedPiece&&ge(e,e.selectedPiece,o,n))return;if(e.selected&&me(e,e.selected,o,n))return}(e.selectable.enabled||e.draggable.enabled||r)&&(Ro(e,o)||Ye(e,o))&&kn(e,o)}function He(e,o,n,r,t){b(e.events.pieceSelect,o),e.selectable.addSparesToHand&&e.droppable.spare&&e.selectedPiece?(Z(e,{role:e.selectedPiece.role,color:o.color}),b(e.events.change),h(e)):!t&&!e.draggable.enabled&&e.selectedPiece&&v(e.selectedPiece,o)?(b(e.events.pieceUnselect,o),h(e)):(e.selectable.enabled||e.draggable.enabled||r)&&(qo(e,o,!!n)||Qe(e,o))?(Tn(e,o),e.droppable.spare=!!n):h(e)}function kn(e,o){h(e),e.selected=o,Me(e)}function Tn(e,o){h(e),e.selectedPiece=o,Me(e)}function Me(e){e.premovable.dests=e.predroppable.dests=void 0,e.selected&&Ye(e,e.selected)&&e.premovable.generate?e.premovable.dests=e.premovable.generate(e.selected,e.pieces):e.selectedPiece&&Qe(e,e.selectedPiece)&&e.predroppable.generate&&(e.predroppable.dests=e.predroppable.generate(e.selectedPiece,e.pieces))}function h(e){e.selected=e.selectedPiece=e.premovable.dests=e.predroppable.dests=e.promotion.current=void 0,e.droppable.spare=!1}function Ro(e,o){let n=e.pieces.get(o);return!!n&&(e.activeColor==="both"||e.activeColor===n.color&&e.turnColor===n.color)}function qo(e,o,n){var r;return(n||!!((r=e.hands.handMap.get(o.color))!=null&&r.get(o.role)))&&(e.activeColor==="both"||e.activeColor===o.color&&e.turnColor===o.color)}function se(e,o,n){var r,t;return o!==n&&Ro(e,o)&&(e.movable.free||!!((t=(r=e.movable.dests)==null?void 0:r.get(o))!=null&&t.includes(n)))}function ae(e,o,n){var r,t;return qo(e,o,e.droppable.spare)&&(e.droppable.free||e.droppable.spare||!!((t=(r=e.droppable.dests)==null?void 0:r.get(g(o)))!=null&&t.includes(n)))}function An(e,o,n){return!!e.pieces.get(o)&&e.promotion.movePromotionDialog(o,n)}function Rn(e,o,n){return!e.droppable.spare&&e.promotion.dropPromotionDialog(o,n)}function Ye(e,o){let n=e.pieces.get(o);return!!n&&e.premovable.enabled&&e.activeColor===n.color&&e.turnColor!==n.color}function Qe(e,o){var n;return!!((n=e.hands.handMap.get(o.color))!=null&&n.get(o.role))&&e.predroppable.enabled&&e.activeColor===o.color&&e.turnColor!==o.color}function xe(e,o,n){return o!==n&&Ye(e,o)&&!!e.premovable.generate&&e.premovable.generate(o,e.pieces).includes(n)}function Ee(e,o,n){let r=e.pieces.get(n);return Qe(e,o)&&(!r||r.color!==e.activeColor)&&!!e.predroppable.generate&&e.predroppable.generate(o,e.pieces).includes(n)}function _e(e,o){return e.draggable.enabled&&(e.activeColor==="both"||e.activeColor===o.color&&(e.turnColor===o.color||e.premovable.enabled))}function No(e){let o=e.premovable.current;if(!o)return!1;let n=o.orig,r=o.dest,t=o.prom,i=!1;if(se(e,n,r)){let s=Oo(e,n,r,t);if(s){let a={premade:!0};s!==!0&&(a.captured=s),b(e.movable.events.after,n,r,t,a),i=!0}}return F(e),i}function Bo(e){let o=e.predroppable.current;if(!o)return!1;let n=o.piece,r=o.key,t=o.prom,i=!1;return ae(e,n,r)&&ko(e,n,r,t)&&(b(e.droppable.events.after,n,r,t,{premade:!0}),i=!0),V(e),i}function de(e){F(e),V(e),h(e)}function Ke(e){e.promotion.current&&(h(e),e.promotion.current=void 0,e.hovered=void 0,b(e.promotion.events.cancel))}function Ze(e){e.activeColor=e.movable.dests=e.droppable.dests=e.draggable.current=e.animation.current=e.promotion.current=e.hovered=void 0,de(e)}function Oe(e){let o=e.split("/"),n=o[0].split(""),r=0,t=0;for(let i of n){let s=i.charCodeAt(0);s<58&&s>47?t=t*10+s-48:i!=="+"&&(r+=t+1,t=0)}return r+=t,{files:r,ranks:o.length}}function jo(e,o,n){let r=n||$o,t=new Map,i=o.files-1,s=0;for(let a=0;a<e.length;a++)switch(e[a]){case" ":case"_":return t;case"/":if(++s,s>o.ranks-1)return t;i=o.files-1;break;default:{let d=e[a].charCodeAt(0),p=e[a+1]&&e[a+1].charCodeAt(0);if(d<58&&d>47)p&&p<58&&p>47?(i-=(d-48)*10+(p-48),a++):i-=d-48;else{let c=e[a]==="+"&&e.length>a+1?"+"+e[++a]:e[a],l=r(c);if(i>=0&&l){let u=c===c.toLowerCase()?"gote":"sente";t.set(oe([i,s]),{role:l,color:u})}--i}}}return t}function Fo(e,o,n){let r=n||Uo,t=Le.slice(0,o.files).reverse();return je.slice(0,o.ranks).map(i=>t.map(s=>{let a=e.get(s+i),d=a&&r(a.role);return d?a.color==="sente"?d.toUpperCase():d.toLowerCase():"1"}).join("")).join("/").replace(/1{2,}/g,i=>i.length.toString())}function Vo(e,o){let n=o||$o,r=new Map,t=new Map,i=0,s=1;for(let a=0;a<e.length;a++){let d=e[a].charCodeAt(0);if(d<58&&d>47)i=i*10+d-48,s=i;else{let p=e[a]==="+"&&e.length>a+1?"+"+e[++a]:e[a],c=n(p);c&&((p===p.toLowerCase()?"gote":"sente")==="sente"?r.set(c,(r.get(c)||0)+s):t.set(c,(t.get(c)||0)+s)),i=0,s=1}}return new Map([["sente",r],["gote",t]])}function Go(e,o,n){var s,a;let r=n||Uo,t="",i="";for(let d of o){let p=r(d);if(p){let c=(s=e.get("sente"))==null?void 0:s.get(d),l=(a=e.get("gote"))==null?void 0:a.get(d);c&&(t+=c>1?c.toString()+p:p),l&&(i+=l>1?l.toString()+p:p)}}return t||i?t.toUpperCase()+i.toLowerCase():"-"}function $o(e){switch(e.toLowerCase()){case"p":return"pawn";case"l":return"lance";case"n":return"knight";case"s":return"silver";case"g":return"gold";case"b":return"bishop";case"r":return"rook";case"+p":return"tokin";case"+l":return"promotedlance";case"+n":return"promotedknight";case"+s":return"promotedsilver";case"+b":return"horse";case"+r":return"dragon";case"k":return"king";default:return}}function Uo(e){switch(e){case"pawn":return"p";case"lance":return"l";case"knight":return"n";case"silver":return"s";case"gold":return"g";case"bishop":return"b";case"rook":return"r";case"tokin":return"+p";case"promotedlance":return"+l";case"promotedknight":return"+n";case"promotedsilver":return"+s";case"horse":return"+b";case"dragon":return"+r";case"king":return"k";default:return}}function Je(e,o){o.animation&&(We(e.animation,o.animation),(e.animation.duration||0)<70&&(e.animation.enabled=!1))}function be(e,o){var n,r,t,i,s,a,d,p,c;(n=o.movable)!=null&&n.dests&&(e.movable.dests=void 0),(r=o.droppable)!=null&&r.dests&&(e.droppable.dests=void 0),(t=o.drawable)!=null&&t.shapes&&(e.drawable.shapes=[]),(i=o.drawable)!=null&&i.autoShapes&&(e.drawable.autoShapes=[]),(s=o.drawable)!=null&&s.squares&&(e.drawable.squares=[]),(a=o.hands)!=null&&a.roles&&(e.hands.roles=[]),We(e,o),(d=o.sfen)!=null&&d.board&&(e.dimensions=Oe(o.sfen.board),e.pieces=jo(o.sfen.board,e.dimensions,e.forsyth.fromForsyth),e.drawable.shapes=((p=o.drawable)==null?void 0:p.shapes)||[]),(c=o.sfen)!=null&&c.hands&&(e.hands.handMap=Vo(o.sfen.hands,e.forsyth.fromForsyth)),"checks"in o&&Ko(e,o.checks||!1),"lastPiece"in o&&!o.lastPiece&&(e.lastPiece=void 0),"lastDests"in o&&!o.lastDests?e.lastDests=void 0:o.lastDests&&(e.lastDests=o.lastDests),Me(e),Je(e,o)}function We(e,o){for(let n in o)Object.prototype.hasOwnProperty.call(o,n)&&(Object.prototype.hasOwnProperty.call(e,n)&&Io(e[n])&&Io(o[n])?We(e[n],o[n]):e[n]=o[n])}function Io(e){if(typeof e!="object"||e===null)return!1;let o=Object.getPrototypeOf(e);return o===Object.prototype||o===null}function x(e,o){return o.animation.enabled?Bn(e,o):k(e,o)}function k(e,o){let n=e(o);return o.dom.redraw(),n}function eo(e,o){return{key:e,pos:M(e),piece:o}}function qn(e,o){return o.sort((n,r)=>ne(e.pos,n.pos)-ne(e.pos,r.pos))[0]}function Nn(e,o,n){let r=new Map,t=[],i=new Map,s=new Map,a=[],d=[],p=new Map;for(let[c,l]of e)p.set(c,eo(c,l));for(let c of Se){let l=n.pieces.get(c),u=p.get(c);l?u?v(l,u.piece)||(a.push(u),d.push(eo(c,l))):d.push(eo(c,l)):u&&a.push(u)}if(n.animation.hands)for(let c of Q){let l=n.hands.handMap.get(c),u=o.get(c);if(u&&l)for(let[y,A]of u){let w={role:y,color:c};if((l.get(y)||0)<A){let f=n.dom.bounds.hands.pieceBounds().get(g(w)),R=n.dom.bounds.board.bounds(),L=f&&R?te(f.left,f.top,S(n.orientation),n.dimensions,R):void 0;L&&a.push({pos:L,piece:w})}}}for(let c of d){let l=qn(c,a.filter(u=>{if(v(c.piece,u.piece))return!0;let y=n.promotion.promotesTo(u.piece.role),A=y&&{color:u.piece.color,role:y},w=n.promotion.promotesTo(c.piece.role),B=w&&{color:c.piece.color,role:w};return!!A&&v(c.piece,A)||!!B&&v(B,u.piece)}));if(l){let u=[l.pos[0]-c.pos[0],l.pos[1]-c.pos[1]];r.set(c.key,u.concat(u)),l.key&&t.push(l.key),!v(c.piece,l.piece)&&c.key&&s.set(c.key,l.piece)}}for(let c of a)c.key&&!t.includes(c.key)&&i.set(c.key,c.piece);return{anims:r,fadings:i,promotions:s}}function zo(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=Ln(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())=>zo(e,i))}}function Bn(e,o){var s;let n=new Map(o.pieces),r=new Map([["sente",new Map(o.hands.handMap.get("sente"))],["gote",new Map(o.hands.handMap.get("gote"))]]),t=e(o),i=Nn(n,r,o);if(i.anims.size||i.fadings.size){let a=((s=o.animation.current)==null?void 0:s.start)!==void 0;o.animation.current={start:performance.now(),frequency:1/Math.max(o.animation.duration,1),plan:i},a||zo(o,performance.now())}else o.dom.redraw();return t}function Ln(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1}function C(e){return document.createElementNS("http://www.w3.org/2000/svg",e)}var to="outsideArrow";function Yo(e,o,n,r){let t=e.drawable,i=t.current,s=i!=null&&i.dest?i:void 0,a=!!i&&!s,d=new Map,p=new Map,c=()=>{let f=e.dom.bounds.board.bounds();return f&&f.width.toString()+f.height||""};for(let f of t.shapes.concat(t.autoShapes).concat(s?[s]:[])){let R=D(f.dest)?g(f.dest):f.dest;$(f.dest,f.orig)||d.set(R,(d.get(R)||0)+1)}for(let f of t.shapes.concat(s?[s]:[]).concat(t.autoShapes))f.piece&&!D(f.orig)&&p.set(f.orig,f);let l=[...p.values()].map(f=>({shape:f,hash:no(f,d,!1,c)})),u=t.shapes.concat(t.autoShapes).map(f=>({shape:f,hash:no(f,d,!1,c)}));s&&u.push({shape:s,hash:no(s,d,!0,c),current:!0});let y=u.map(f=>f.hash).join(";")+(a?to:"");if(y===e.drawable.prevSvgHash)return;e.drawable.prevSvgHash=y;let A=o.querySelector("defs"),w=o.querySelector("g"),B=n.querySelector("g");if(jn(u,a?i:void 0,A),oo(u.filter(f=>!f.shape.customSvg&&(!f.shape.piece||f.current)),w,f=>Xo(e,f,d),a),oo(u.filter(f=>f.shape.customSvg),B,f=>Xo(e,f,d)),oo(l,r,f=>$n(e,f)),!a&&i&&(i.arrow=void 0),a&&!i.arrow){let f=he(i.orig,e);if(f){let R=H(C("g"),{class:Zo(i.brush,!0,!0),sgHash:to}),L=Qo(i.brush,f,f,e.squareRatio,!0,!1);R.appendChild(L),i.arrow=L,w.appendChild(R)}}}function jn(e,o,n){let r=new Set;for(let s of e)$(s.shape.dest,s.shape.orig)||r.add(s.shape.brush);o&&r.add(o.brush);let t=new Set,i=n.firstElementChild;for(;i;)t.add(i.getAttribute("sgKey")),i=i.nextElementSibling;for(let s of r){let a=s||"primary";t.has(a)||n.appendChild(In(a))}}function oo(e,o,n,r){let t=new Map,i=[];for(let d of e)t.set(d.hash,!1);r&&t.set(to,!0);let s=o.firstElementChild,a;for(;s;)a=s.getAttribute("sgHash"),t.has(a)?t.set(a,!0):i.push(s),s=s.nextElementSibling;for(let d of i)o.removeChild(d);for(let d of e)if(!t.get(d.hash)){let p=n(d);p&&o.appendChild(p)}}function no({orig:e,dest:o,brush:n,piece:r,customSvg:t,description:i},s,a,d){return[a,(D(e)||D(o))&&d(),D(e)?ro(e):e,D(o)?ro(o):o,n,(s.get(D(o)?g(o):o)||0)>1,r&&ro(r),t&&Fn(t),i].filter(p=>p).join(",")}function ro(e){return[e.color,e.role,e.scale].filter(o=>o).join(",")}function Fn(e){let o=0;for(let n=0;n<e.length;n++)o=(o<<5)-o+e.charCodeAt(n)>>>0;return"custom-"+o.toString()}function Xo(e,{shape:o,current:n,hash:r},t){let i=he(o.orig,e);if(i){if(o.customSvg)return Vn(o.brush,o.customSvg,i,e.squareRatio);{let s,a=!$(o.orig,o.dest)&&he(o.dest,e);if(a)s=Qo(o.brush,i,a,e.squareRatio,!!n,(t.get(D(o.dest)?g(o.dest):o.dest)||0)>1);else if($(o.dest,o.orig)){let d=e.squareRatio;if(D(o.orig)){let p=e.dom.bounds.hands.pieceBounds().get(g(o.orig)),c=e.dom.bounds.board.bounds();if(p&&c){let l=p.height/(c.height/e.dimensions.ranks);d=[l*e.squareRatio[0],l*e.squareRatio[1]]}}s=Gn(i,d,!!n)}if(s){let d=H(C("g"),{class:Zo(o.brush,!!n,!1),sgHash:r});d.appendChild(s);let p=o.description&&Un(e,o,t);return p&&d.appendChild(p),d}else return}}}function Vn(e,o,n,r){let[t,i]=n,s=H(C("g"),{transform:`translate(${t},${i})`}),a=H(C("svg"),{class:e,width:r[0],height:r[1],viewBox:`0 0 ${r[0]*10} ${r[1]*10}`});return s.appendChild(a),a.innerHTML=o,s}function Gn(e,o,n){let r=e,t=zn(o);return H(C("ellipse"),{"stroke-width":t[n?0:1],fill:"none",cx:r[0],cy:r[1],rx:o[0]/2-t[1]/2,ry:o[1]/2-t[1]/2})}function Qo(e,o,n,r,t,i){let s=Yn(i&&!t,r),a=o,d=n,p=d[0]-a[0],c=d[1]-a[1],l=Math.atan2(c,p),u=Math.cos(l)*s,y=Math.sin(l)*s;return H(C("line"),{"stroke-width":Xn(t,r),"stroke-linecap":"round","marker-end":"url(#arrowhead-"+(e||"primary")+")",x1:a[0],y1:a[1],x2:d[0]-u,y2:d[1]-y})}function $n(e,{shape:o}){if(!o.piece||D(o.orig))return;let n=o.orig,r=(o.piece.scale||1)*(e.scaleDownPieces?.5:1),t=P("piece",g(o.piece));return t.sgKey=n,t.sgScale=r,X(t,fe(e.dimensions)(M(n),S(e.orientation)),e.scaleDownPieces?.5:1,r),t}function Un(e,o,n){let r=he(o.orig,e);if(!r||!o.description)return;let t=!$(o.orig,o.dest)&&he(o.dest,e),i=t?[t[0]-r[0],t[1]-r[1]]:[0,0],s=(n.get(D(o.dest)?g(o.dest):o.dest)||0)>1?.3:.15,a=(i[0]===0||Math.abs(i[0])===e.squareRatio[0])&&(i[1]===0||Math.abs(i[1])===e.squareRatio[1]),d=t?.55-(a?s:0):0,p=[r[0]+i[0]*d,r[1]+i[1]*d],c=o.description.length,l=H(C("g"),{class:"description"}),u=H(C("ellipse"),{cx:p[0],cy:p[1],rx:c+1.5,ry:2.5}),y=H(C("text"),{x:p[0],y:p[1],"text-anchor":"middle","dominant-baseline":"central"});return l.appendChild(u),y.appendChild(document.createTextNode(o.description)),l.appendChild(y),l}function In(e){let o=H(C("marker"),{id:"arrowhead-"+e,orient:"auto",markerWidth:4,markerHeight:8,refX:2.05,refY:2.01});return o.appendChild(H(C("path"),{d:"M0,0 V4 L3,2 Z"})),o.setAttribute("sgKey",e),o}function H(e,o){for(let n in o)Object.prototype.hasOwnProperty.call(o,n)&&e.setAttribute(n,o[n]);return e}function ke(e,o,n,r){return o==="sente"?[(n.files-1-e[0])*r[0],e[1]*r[1]]:[e[0]*r[0],(n.ranks-1-e[1])*r[1]]}function D(e){return typeof e=="object"}function $(e,o){return D(e)&&D(o)&&v(e,o)||e===o}function _o(e){return e.some(o=>D(o.orig)||D(o.dest))}function Zo(e,o,n){return e+(o?" current":"")+(n?" outside":"")}function Te(e){return(e[0]+e[1])/2}function zn(e){return[3/64*Te(e),4/64*Te(e)]}function Xn(e,o){return(e?8.5:10)/64*Te(o)}function Yn(e,o){return(e?20:10)/64*Te(o)}function he(e,o){if(D(e)){let n=o.dom.bounds.hands.pieceBounds().get(g(e)),r=o.dom.bounds.board.bounds(),t=S(o.orientation)?[.5,-.5]:[-.5,.5],i=n&&r&&te(n.left+n.width/2,n.top+n.height/2,S(o.orientation),o.dimensions,r);return i&&ke([i[0]+t[0],i[1]+t[1]],o.orientation,o.dimensions,o.squareRatio)}else return ke(M(e),o.orientation,o.dimensions,o.squareRatio)}var Qn=["primary","alternative0","alternative1","alternative2"];function Jo(e,o){if(o.touches&&o.touches.length>1)return;o.stopPropagation(),o.preventDefault(),o.ctrlKey?h(e):de(e);let n=q(o),r=e.dom.bounds.board.bounds(),t=n&&r&&Y(n,S(e.orientation),e.dimensions,r),i=e.drawable.piece;t&&(e.drawable.current={orig:t,dest:void 0,pos:n,piece:i,brush:rn(o,re(o)||e.drawable.forced)},io(e))}function Wo(e,o,n){if(n.touches&&n.touches.length>1)return;n.stopPropagation(),n.preventDefault(),n.ctrlKey?h(e):de(e);let r=q(n);r&&(e.drawable.current={orig:o,dest:void 0,pos:r,brush:rn(n,re(n)||e.drawable.forced)},io(e))}function io(e){requestAnimationFrame(()=>{let o=e.drawable.current,n=e.dom.bounds.board.bounds();if(o&&n){let r=Y(o.pos,S(e.orientation),e.dimensions,n)||Ce(o.pos,e.hands.roles,e.dom.bounds.hands.pieceBounds());o.dest!==r&&!(o.dest&&r&&$(r,o.dest))&&(o.dest=r,e.dom.redrawNow());let t=te(o.pos[0],o.pos[1],S(e.orientation),e.dimensions,n);if(!o.dest&&o.arrow&&t){let i=ke(t,e.orientation,e.dimensions,e.squareRatio);H(o.arrow,{x2:i[0]-e.squareRatio[0]/2,y2:i[1]-e.squareRatio[1]/2})}io(e)}})}function en(e,o){e.drawable.current&&(e.drawable.current.pos=q(o))}function on(e,o){let n=e.drawable.current;n&&(_n(e.drawable,n),Ae(e))}function Ae(e){e.drawable.current&&(e.drawable.current=void 0,e.dom.redraw())}function so(e){let o=e.drawable.shapes.length;(o||e.drawable.piece)&&(e.drawable.shapes=[],e.drawable.piece=void 0,e.dom.redraw(),o&&tn(e.drawable))}function nn(e,o){e.drawable.piece&&v(e.drawable.piece,o)?e.drawable.piece=void 0:e.drawable.piece=o,e.dom.redraw()}function rn(e,o){var t;let n=o&&(e.shiftKey||e.ctrlKey),r=e.altKey||e.metaKey||((t=e.getModifierState)==null?void 0:t.call(e,"AltGraph"));return Qn[(n?1:0)+(r?2:0)]}function _n(e,o){if(!o.dest)return;let n=a=>o.dest&&$(o.orig,a.orig)&&$(o.dest,a.dest),r=o.piece;o.piece=void 0;let t=e.shapes.find(n),i=e.shapes.find(a=>n(a)&&r&&a.piece&&v(r,a.piece)),s=e.shapes.find(a=>n(a)&&r&&a.piece&&!v(r,a.piece));t&&(e.shapes=e.shapes.filter(a=>!n(a))),!D(o.orig)&&r&&!i&&(e.shapes.push({orig:o.orig,dest:o.orig,piece:r,brush:o.brush}),$(o.orig,o.dest)||e.shapes.push({orig:o.orig,dest:o.orig,brush:o.brush})),(!t||s||t.brush!==o.brush)&&e.shapes.push(o),tn(e)}function tn(e){e.onChange&&e.onChange(e.shapes)}function sn(e,o){var l;let n=e.dom.bounds.board.bounds(),r=q(o),t=n&&r&&Y(r,S(e.orientation),e.dimensions,n);if(!t)return;let i=e.pieces.get(t),s=e.selected;!s&&e.drawable.enabled&&(e.drawable.eraseOnClick||!i||i.color!==e.turnColor)&&so(e),o.cancelable!==!1&&(!o.touches||e.blockTouchScroll||e.selectedPiece||i||s||Jn(e,r,n))&&o.preventDefault();let a=!!e.premovable.current,d=!!e.predroppable.current;e.selectable.deleteOnTouch?Ao(e,t):e.selected?ze(e,e.selected,t)||(se(e,e.selected,t)?x(u=>G(u,t),e):G(e,t)):e.selectedPiece?Ie(e,e.selectedPiece,t)||(ae(e,e.selectedPiece,t)?x(u=>G(u,t),e):G(e,t)):G(e,t);let p=e.selected===t,c=(l=e.dom.elements.board)==null?void 0:l.dragged;if(i&&c&&p&&_e(e,i)){let u=o.type==="touchstart";e.draggable.current={piece:i,pos:r,origPos:r,started:e.draggable.autoDistance&&!u,spare:!1,touch:u,originTarget:o.target,fromBoard:{orig:t,previouslySelected:s,keyHasChanged:!1}},c.sgColor=i.color,c.sgRole=i.role,c.className=`dragging ${g(i)}`,c.classList.toggle("touch",u),lo(e)}else a&&F(e),d&&V(e);e.dom.redraw()}function Jn(e,o,n){let r=S(e.orientation),t=Math.pow(n.width/e.dimensions.files,2);for(let i of e.pieces.keys()){let s=Ho(i,r,e.dimensions,n);if(ne(s,o)<=t)return!0}return!1}function Re(e,o,n,r){var l;let t=e.selectedPiece,i=(l=e.dom.elements.board)==null?void 0:l.dragged,s=q(n),a=n.type==="touchstart";!t&&!r&&e.drawable.enabled&&e.drawable.eraseOnClick&&so(e),!r&&e.selectable.deleteOnTouch?J(e,o):He(e,o,r);let d=!!e.premovable.current,p=!!e.predroppable.current,c=e.selectedPiece&&v(e.selectedPiece,o);i&&s&&e.selectedPiece&&c&&_e(e,o)?(e.draggable.current={piece:e.selectedPiece,pos:s,origPos:s,touch:a,started:e.draggable.autoDistance&&!a,spare:!!r,originTarget:n.target,fromOutside:{originBounds:r?void 0:e.dom.bounds.hands.pieceBounds().get(g(o)),leftOrigin:!1,previouslySelectedPiece:r?void 0:t}},i.sgColor=o.color,i.sgRole=o.role,i.className=`dragging ${g(o)}`,i.classList.toggle("touch",a),lo(e)):(d&&F(e),p&&V(e)),e.dom.redraw()}function lo(e){requestAnimationFrame(()=>{var i,s,a,d;let o=e.draggable.current,n=(i=e.dom.elements.board)==null?void 0:i.dragged,r=e.dom.bounds.board.bounds();if(!o||!n||!r)return;(s=o.fromBoard)!=null&&s.orig&&((a=e.animation.current)!=null&&a.plan.anims.has(o.fromBoard.orig))&&(e.animation.current=void 0);let t=o.fromBoard?e.pieces.get(o.fromBoard.orig):o.piece;if(!t||!v(t,o.piece))le(e);else if(!o.started&&ne(o.pos,o.origPos)>=Math.pow(e.draggable.distance,2)&&(o.started=!0,e.dom.redraw()),o.started){Fe(n,[o.pos[0]-r.left-r.width/(e.dimensions.files*2),o.pos[1]-r.top-r.height/(e.dimensions.ranks*2)],e.scaleDownPieces?.5:1),n.sgDragging||(n.sgDragging=!0,O(n,!0));let p=Y(o.pos,S(e.orientation),e.dimensions,r);o.fromBoard?o.fromBoard.keyHasChanged=o.fromBoard.keyHasChanged||o.fromBoard.orig!==p:o.fromOutside&&(o.fromOutside.leftOrigin=o.fromOutside.leftOrigin||!!o.fromOutside.originBounds&&!_(o.fromOutside.originBounds,o.pos)),p!==e.hovered&&(po(e,p),o.touch&&((d=e.dom.elements.board)!=null&&d.squareOver)&&(p&&e.draggable.showTouchSquareOverlay?(Fe(e.dom.elements.board.squareOver,wo(e.dimensions,r)(M(p),S(e.orientation)),1),O(e.dom.elements.board.squareOver,!0)):O(e.dom.elements.board.squareOver,!1)))}lo(e)})}function an(e,o){if(e.draggable.current&&(!o.touches||o.touches.length<2))e.draggable.current.pos=q(o);else if((e.selected||e.selectedPiece||e.highlight.hovered)&&!e.draggable.current&&(!o.touches||o.touches.length<2)){let n=e.dom.bounds.board.bounds(),r=n&&Y(q(o),S(e.orientation),e.dimensions,n);r!==e.hovered&&po(e,r)}}function dn(e,o){var s,a,d;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.fromOutside){e.draggable.current=void 0,e.hovered&&!e.highlight.hovered&&po(e,void 0);return}F(e),V(e);let r=q(o)||n.pos,t=e.dom.bounds.board.bounds(),i=t&&Y(r,S(e.orientation),e.dimensions,t);if(i&&n.started&&((s=n.fromBoard)==null?void 0:s.orig)!==i)n.fromOutside&&!Ie(e,n.piece,i)?ge(e,n.piece,i):n.fromBoard&&!ze(e,n.fromBoard.orig,i)&&me(e,n.fromBoard.orig,i);else if(e.draggable.deleteOnDropOff&&!i){if(n.fromBoard?e.pieces.delete(n.fromBoard.orig):n.fromOutside&&!n.spare&&J(e,n.piece),e.draggable.addToHandOnDropOff){let p=e.dom.bounds.hands.bounds(),c=p.get("top"),l=p.get("bottom");c&&_(c,n.pos)?Z(e,{color:z(e.orientation),role:n.piece.role}):l&&_(l,n.pos)&&Z(e,{color:e.orientation,role:n.piece.role}),h(e)}b(e.events.change)}(n.fromBoard&&(n.fromBoard.orig===n.fromBoard.previouslySelected||n.fromBoard.keyHasChanged)&&(n.fromBoard.orig===i||!i)||!i&&((a=n.fromOutside)!=null&&a.leftOrigin)||(d=n.fromOutside)!=null&&d.originBounds&&_(n.fromOutside.originBounds,n.pos)&&n.fromOutside.previouslySelectedPiece&&v(n.fromOutside.previouslySelectedPiece,n.piece)||!e.selectable.enabled&&!e.promotion.current)&&ao(e,n,i),e.draggable.current=void 0,!e.highlight.hovered&&!e.promotion.current&&(e.hovered=void 0),e.dom.redraw()}function ao(e,o,n){var r;o.fromBoard&&o.fromBoard.orig===n?b(e.events.unselect,o.fromBoard.orig):(r=o.fromOutside)!=null&&r.originBounds&&_(o.fromOutside.originBounds,o.pos)&&b(e.events.pieceUnselect,o.piece),h(e)}function le(e){e.draggable.current&&(e.draggable.current=void 0,e.highlight.hovered||(e.hovered=void 0),h(e),e.dom.redraw())}function co(e){return!e.isTrusted||e.button!==void 0&&e.button!==0||!!e.touches&&e.touches.length>1}function Wn(e,o){return!!e.selected&&(se(e,e.selected,o)||xe(e,e.selected,o))||!!e.selectedPiece&&(ae(e,e.selectedPiece,o)||Ee(e,e.selectedPiece,o))}function po(e,o){var p;let n=(p=e.dom.elements.board)==null?void 0:p.squares.children;if(!n||e.promotion.current)return;let r=e.hovered;e.highlight.hovered||o&&Wn(e,o)?e.hovered=o:e.hovered=void 0;let t=S(e.orientation),i=e.hovered&&Ve(e.hovered,t,e.dimensions),s=i!==void 0&&n[i];s&&s.classList.add("hover");let a=r&&Ve(r,t,e.dimensions),d=a!==void 0&&n[a];d&&d.classList.remove("hover")}function uo(e){switch(e){case"dizhi":return["","","","","亥","戌","酉","申","未","午","巳","辰","卯","寅","丑","子"];case"japanese":return["十六","十五","十四","十三","十二","十一","十","九","八","七","六","五","四","三","二","一"];case"engine":return["p","o","n","m","l","k","j","i","h","g","f","e","d","c","b","a"];case"hex":return["10","f","e","d","c","b","a","9","8","7","6","5","4","3","2","1"];default:return["16","15","14","13","12","11","10","9","8","7","6","5","4","3","2","1"]}}function cn(e,o){let n=P("sg-board"),r=or(o.dimensions,o.orientation);n.appendChild(r);let t=P("sg-pieces");n.appendChild(t);let i,s,a;o.viewOnly||(i=P("piece"),O(i,!1),n.appendChild(i),s=P("sg-promotion"),O(s,!1),n.appendChild(s),a=P("sg-square-over"),O(a,!1),n.appendChild(a));let d;if(o.drawable.visible){let l=H(C("svg"),{class:"sg-shapes",viewBox:`-${o.squareRatio[0]/2} -${o.squareRatio[1]/2} ${o.dimensions.files*o.squareRatio[0]} ${o.dimensions.ranks*o.squareRatio[1]}`});l.appendChild(C("defs")),l.appendChild(C("g"));let u=H(C("svg"),{class:"sg-custom-svgs",viewBox:`0 0 ${o.dimensions.files*o.squareRatio[0]} ${o.dimensions.ranks*o.squareRatio[1]}`});u.appendChild(C("g"));let y=P("sg-free-pieces");n.appendChild(l),n.appendChild(u),n.appendChild(y),d={svg:l,freePieces:y,customSvg:u}}if(o.coordinates.enabled){let l=o.orientation==="gote"?" gote":"",u=uo(o.coordinates.ranks),y=uo(o.coordinates.files);n.appendChild(ln(u,"ranks"+l,o.dimensions.ranks)),n.appendChild(ln(y,"files"+l,o.dimensions.files))}e.innerHTML="";let p=`d-${o.dimensions.files}x${o.dimensions.ranks}`;e.classList.forEach(l=>{l.substring(0,2)==="d-"&&l!==p&&e.classList.remove(l)}),e.classList.add("sg-wrap",p);for(let l of Q)e.classList.toggle("orientation-"+l,o.orientation===l);e.classList.toggle("manipulable",!o.viewOnly),e.appendChild(n);let c;if(o.hands.inlined){let l=P("sg-hand-wrap","inlined"),u=P("sg-hand-wrap","inlined");e.insertBefore(u,n.nextElementSibling),e.insertBefore(l,n),c={top:l,bottom:u}}return{board:n,squares:r,pieces:t,promotion:s,squareOver:a,dragged:i,shapes:d,hands:c}}function fo(e,o,n){let r=nr(o==="top"?z(n.orientation):n.orientation,n.hands.roles);e.innerHTML="";let t=`r-${n.hands.roles.length}`;e.classList.forEach(i=>{i.substring(0,2)==="r-"&&i!==t&&e.classList.remove(i)}),e.classList.add("sg-hand-wrap",`hand-${o}`,t),e.appendChild(r);for(let i of Q)e.classList.toggle("orientation-"+i,n.orientation===i);return e.classList.toggle("manipulable",!n.viewOnly),r}function ln(e,o,n){let r=P("coords",o),t;for(let i of e.slice(-n))t=P("coord"),t.textContent=i,r.appendChild(t);return r}function or(e,o){let n=P("sg-squares");for(let r=0;r<e.ranks*e.files;r++){let t=P("sq");t.sgKey=o==="sente"?oe([e.files-1-r%e.files,Math.floor(r/e.files)]):oe([r%e.files,e.ranks-1-Math.floor(r/e.files)]),n.appendChild(t)}return n}function nr(e,o){let n=P("sg-hand");for(let r of o){let t={role:r,color:e},i=P("sg-hp-wrap"),s=P("piece",g(t));s.sgColor=e,s.sgRole=r,i.appendChild(s),n.appendChild(i)}return n}function go(e){e.dom.bounds.board.bounds.clear(),e.dom.bounds.hands.bounds.clear(),e.dom.bounds.hands.pieceBounds.clear()}function mo(e){return()=>{go(e),_o(e.drawable.shapes.concat(e.drawable.autoShapes))&&e.dom.redrawShapes()}}function un(e,o){if("ResizeObserver"in window&&new ResizeObserver(mo(e)).observe(o.board),e.viewOnly)return;let n=o.pieces,r=o.promotion,t=rr(e);if(n.addEventListener("touchstart",t,{passive:!1}),n.addEventListener("mousedown",t,{passive:!1}),(e.disableContextMenu||e.drawable.enabled)&&n.addEventListener("contextmenu",i=>i.preventDefault()),r){let i=s=>ir(e,s);r.addEventListener("click",i),e.disableContextMenu&&r.addEventListener("contextmenu",s=>s.preventDefault())}}function bo(e,o){if("ResizeObserver"in window&&new ResizeObserver(mo(e)).observe(o),e.viewOnly)return;let n=tr(e);o.addEventListener("mousedown",n,{passive:!1}),o.addEventListener("touchstart",n,{passive:!1}),o.addEventListener("click",()=>{e.promotion.current&&(Ke(e),e.dom.redraw())}),(e.disableContextMenu||e.drawable.enabled)&&o.addEventListener("contextmenu",r=>r.preventDefault())}function fn(e){let o=[];if("ResizeObserver"in window||o.push(ve(document.body,"shogiground.resize",mo(e))),!e.viewOnly){let n=pn(e,an,en),r=pn(e,dn,on);for(let t of["touchmove","mousemove"])o.push(ve(document,t,n));for(let t of["touchend","mouseup"])o.push(ve(document,t,r));o.push(ve(document,"scroll",()=>go(e),{capture:!0,passive:!0})),o.push(ve(window,"resize",()=>go(e),{passive:!0}))}return()=>o.forEach(n=>n())}function ve(e,o,n,r){return e.addEventListener(o,n,r),()=>e.removeEventListener(o,n,r)}function rr(e){return o=>{e.draggable.current?le(e):e.drawable.current?Ae(e):o.shiftKey||re(o)||e.drawable.forced?e.drawable.enabled&&Jo(e,o):!e.viewOnly&&!co(o)&&sn(e,o)}}function pn(e,o,n){return r=>{e.drawable.current?e.drawable.enabled&&n(e,r):e.viewOnly||o(e,r)}}function tr(e){return o=>{if(e.promotion.current)return;let n=q(o),r=n&&Ce(n,e.hands.roles,e.dom.bounds.hands.pieceBounds());r&&(e.draggable.current?le(e):e.drawable.current?Ae(e):Do(o)?e.drawable.enabled&&(o.cancelable!==!1&&o.preventDefault(),nn(e,r)):o.shiftKey||re(o)||e.drawable.forced?e.drawable.enabled&&Wo(e,r,o):!e.viewOnly&&!co(o)&&(o.cancelable!==!1&&o.preventDefault(),Re(e,r,o)))}}function ir(e,o){o.stopPropagation();let n=o.target,r=e.promotion.current;if(n&&De(n)&&r){let t={color:n.sgColor,role:n.sgRole},i=!v(r.piece,t);r.dragged||e.turnColor!==e.activeColor&&e.activeColor!=="both"?e.selected?me(e,e.selected,r.key,i):e.selectedPiece&&ge(e,e.selectedPiece,r.key,i):x(s=>G(s,r.key,i),e),b(e.promotion.events.after,t)}else x(t=>Ke(t),e);e.promotion.current=void 0,e.dom.redraw()}function qe(e,o){var vo,Po,yo;let n=S(e.orientation),r=e.scaleDownPieces?.5:1,t=fe(e.dimensions),i=o.squares,s=o.pieces,a=o.dragged,d=o.squareOver,p=o.promotion,c=e.pieces,l=e.animation.current,u=l?l.plan.anims:new Map,y=l?l.plan.fadings:new Map,A=l?l.plan.promotions:new Map,w=e.draggable.current,B=(vo=e.promotion.current)!=null&&vo.dragged?e.selected:void 0,f=ar(e),R=new Set,L=new Map;!w&&(a!=null&&a.sgDragging)&&(a.sgDragging=!1,O(a,!1),d&&O(d,!1));let E,m,Pe,I,N,pe,ue,ye,U;for(m=s.firstElementChild;m;){if(De(m))if(E=m.sgKey,Pe=c.get(E),N=u.get(E),pe=y.get(E),ue=A.get(E),I=g({color:m.sgColor,role:m.sgRole}),(w!=null&&w.started&&((Po=w.fromBoard)==null?void 0:Po.orig)===E||B&&B===E)&&!m.sgGhost?(m.sgGhost=!0,m.classList.add("ghost")):m.sgGhost&&(!w||((yo=w.fromBoard)==null?void 0:yo.orig)!==E)&&(!B||B!==E)&&(m.sgGhost=!1,m.classList.remove("ghost")),!pe&&m.sgFading&&(m.sgFading=!1,m.classList.remove("fading")),Pe){if(N&&m.sgAnimating&&(I===g(Pe)||ue&&I===g(ue))){let K=M(E);K[0]+=N[2],K[1]+=N[3],X(m,t(K,n),r)}else m.sgAnimating&&(m.sgAnimating=!1,m.classList.remove("anim"),X(m,t(M(E),n),r));I===g(Pe)&&(!pe||!m.sgFading)?R.add(E):pe&&I===g(pe)?(m.sgFading=!0,m.classList.add("fading")):ue&&I===g(ue)?R.add(E):gn(L,I,m)}else gn(L,I,m);m=m.nextElementSibling}let W=i.firstElementChild;for(;W&&Co(W);)W.className=f.get(W.sgKey)||"",W=W.nextElementSibling;for(let[K,ee]of c){let wn=A.get(K)||ee;if(N=u.get(K),!R.has(K))if(ye=L.get(g(wn)),U=ye==null?void 0:ye.pop(),U){U.sgKey=K,U.sgFading&&(U.sgFading=!1,U.classList.remove("fading"));let j=M(K);N&&(U.sgAnimating=!0,U.classList.add("anim"),j[0]+=N[2],j[1]+=N[3]),X(U,t(j,n),r)}else{let j=P("piece",g(ee)),Ne=M(K);j.sgColor=ee.color,j.sgRole=ee.role,j.sgKey=K,N&&(j.sgAnimating=!0,Ne[0]+=N[2],Ne[1]+=N[3]),X(j,t(Ne,n),r),s.appendChild(j)}}for(let K of L.values())for(let ee of K)s.removeChild(ee);p&&dr(e,p)}function gn(e,o,n){let r=e.get(o);r?r.push(n):e.set(o,[n])}function ar(e){var r,t;let o=new Map;if(e.lastDests&&e.highlight.lastDests)for(let i of e.lastDests)T(o,i,"last-dest");if(e.checks&&e.highlight.check)for(let i of e.checks)T(o,i,"check");if(e.hovered&&T(o,e.hovered,"hover"),e.selected){if(e.activeColor==="both"||e.activeColor===e.turnColor?T(o,e.selected,"selected"):T(o,e.selected,"preselected"),e.movable.showDests){let i=(r=e.movable.dests)==null?void 0:r.get(e.selected);if(i)for(let a of i)T(o,a,"dest"+(e.pieces.has(a)?" oc":""));let s=e.premovable.dests;if(s)for(let a of s)T(o,a,"pre-dest"+(e.pieces.has(a)?" oc":""))}}else if(e.selectedPiece&&e.droppable.showDests){let i=(t=e.droppable.dests)==null?void 0:t.get(g(e.selectedPiece));if(i)for(let a of i)T(o,a,"dest");let s=e.predroppable.dests;if(s)for(let a of s)T(o,a,"pre-dest"+(e.pieces.has(a)?" oc":""))}let n=e.premovable.current;n?(T(o,n.orig,"current-pre"),T(o,n.dest,"current-pre"+(n.prom?" prom":""))):e.predroppable.current&&T(o,e.predroppable.current.key,"current-pre"+(e.predroppable.current.prom?" prom":""));for(let i of e.drawable.squares)T(o,i.key,i.className);return o}function T(e,o,n){let r=e.get(o);r?e.set(o,`${r} ${n}`):e.set(o,n)}function dr(e,o){let n=e.promotion.current,r=n==null?void 0:n.key,t=n?[n.promotedPiece,n.piece]:[],i=lr(!!n,r,t);if(e.promotion.prevPromotionHash!==i)if(e.promotion.prevPromotionHash=i,r){let s=S(e.orientation),a=M(r),d=n.piece.color,p=P("sg-promotion-square"),c=P("sg-promotion-choices");e.orientation!==d&&c.classList.add("reversed"),X(p,fe(e.dimensions)(a,s),1);for(let l of t){let u=P("piece",g(l));u.sgColor=l.color,u.sgRole=l.role,c.appendChild(u)}o.innerHTML="",p.appendChild(c),o.appendChild(p),O(o,!0)}else O(o,!1)}function lr(e,o,n){return[e,o,n.map(r=>g(r)).join(" ")].join(" ")}function cr(e,o){let n=cn(o,e);n.hands&&mn(e,n.hands.top,n.hands.bottom),e.dom.wrapElements.board=o,e.dom.elements.board=n,e.dom.bounds.board.bounds.clear(),un(e,n),e.drawable.prevSvgHash="",e.promotion.prevPromotionHash="",qe(e,n)}function mn(e,o,n){if(e.dom.elements.hands||(e.dom.elements.hands={}),e.dom.wrapElements.hands||(e.dom.wrapElements.hands={}),o){let r=fo(o,"top",e);e.dom.wrapElements.hands.top=o,e.dom.elements.hands.top=r,bo(e,r),ie(e,r)}if(n){let r=fo(n,"bottom",e);e.dom.wrapElements.hands.bottom=n,e.dom.elements.hands.bottom=r,bo(e,r),ie(e,r)}(o||n)&&(e.dom.bounds.hands.bounds.clear(),e.dom.bounds.hands.pieceBounds.clear())}function ce(e,o){var n,r,t,i;e.board&&cr(o,e.board),e.hands&&!o.hands.inlined&&mn(o,e.hands.top,e.hands.bottom),o.dom.redrawShapes(),o.events.insert&&o.events.insert(e.board&&o.dom.elements.board,{top:((n=e.hands)==null?void 0:n.top)&&((r=o.dom.elements.hands)==null?void 0:r.top),bottom:((t=e.hands)==null?void 0:t.bottom)&&((i=o.dom.elements.hands)==null?void 0:i.bottom)})}function bn(e,o){var n,r,t,i;e.board&&(o.dom.wrapElements.board=void 0,o.dom.elements.board=void 0,o.dom.bounds.board.bounds.clear()),o.dom.elements.hands&&o.dom.wrapElements.hands&&((n=e.hands)!=null&&n.top&&(o.dom.wrapElements.hands.top=void 0,o.dom.elements.hands.top=void 0),(r=e.hands)!=null&&r.bottom&&(o.dom.wrapElements.hands.bottom=void 0,o.dom.elements.hands.bottom=void 0),((t=e.hands)!=null&&t.top||(i=e.hands)!=null&&i.bottom)&&(o.dom.bounds.hands.bounds.clear(),o.dom.bounds.hands.pieceBounds.clear()))}function hn(e){return{attach(o){ce(o,e)},detach(o){bn(o,e)},set(o,n){var a,d,p,c;function r(l,u){return l.split(".").reduce((A,w)=>A&&A[w],u)}let t=["orientation","viewOnly","coordinates.enabled","coordinates.notation","drawable.visible","hands.inlined"],i=((a=o.sfen)==null?void 0:a.board)&&Oe(o.sfen.board);t.some(l=>{let u=r(l,o);return u&&u!==r(l,e)})||!!(i&&(i.files!==e.dimensions.files||i.ranks!==e.dimensions.ranks))||!!((p=(d=o.hands)==null?void 0:d.roles)!=null&&p.every((l,u)=>l===e.hands.roles[u]))?(xo(e),be(e,o),ce(e.dom.wrapElements,e)):(Je(e,o),((c=o.sfen)!=null&&c.board&&!n?x:k)(l=>be(l,o),e))},state:e,getBoardSfen:()=>Fo(e.pieces,e.dimensions,e.forsyth.toForsyth),getHandsSfen:()=>Go(e.hands.handMap,e.hands.roles,e.forsyth.toForsyth),toggleOrientation(){Mo(e),ce(e.dom.wrapElements,e)},move(o,n,r){x(t=>$e(t,o,n,r||t.promotion.forceMovePromotion(o,n)),e)},drop(o,n,r,t){x(i=>{i.droppable.spare=!!t,Ue(i,o,n,r||i.promotion.forceDropPromotion(o,n))},e)},setPieces(o){x(n=>Eo(n,o),e)},addToHand(o,n){k(r=>Z(r,o,n),e)},removeFromHand(o,n){k(r=>J(r,o,n),e)},selectSquare(o,n,r){o?x(t=>G(t,o,n,r),e):e.selected&&(h(e),e.dom.redraw())},selectPiece(o,n,r){o?k(t=>He(t,o,n,r,!0),e):e.selectedPiece&&(h(e),e.dom.redraw())},playPremove(){if(e.premovable.current){if(x(No,e))return!0;e.dom.redraw()}return!1},playPredrop(){if(e.predroppable.current){if(x(Bo,e))return!0;e.dom.redraw()}return!1},cancelPremove(){k(F,e)},cancelPredrop(){k(V,e)},cancelMoveOrDrop(){k(o=>{de(o),le(o)},e)},stop(){k(o=>{Ze(o)},e)},setAutoShapes(o){k(n=>n.drawable.autoShapes=o,e)},setShapes(o){k(n=>n.drawable.shapes=o,e)},setSquareHighlights(o){k(n=>n.drawable.squares=o,e)},dragNewPiece(o,n,r){Re(e,o,n,r)},destroy(){Ze(e),e.dom.unbind(),e.dom.destroyed=!0}}}function vn(){return{pieces:new Map,dimensions:{files:9,ranks:9},orientation:"sente",turnColor:"sente",activeColor:"both",viewOnly:!1,squareRatio:[11,12],disableContextMenu:!0,blockTouchScroll:!1,scaleDownPieces:!0,coordinates:{enabled:!0,files:"numeric",ranks:"numeric"},highlight:{lastDests:!0,check:!0,checkRoles:["king"],hovered:!1},animation:{enabled:!0,hands:!0,duration:250},hands:{inlined:!1,handMap:new Map([["sente",new Map],["gote",new Map]]),roles:["rook","bishop","gold","silver","knight","lance","pawn"]},movable:{free:!0,showDests:!0,events:{}},droppable:{free:!0,showDests:!0,spare:!1,events:{}},premovable:{enabled:!0,showDests:!0,events:{}},predroppable:{enabled:!0,showDests:!0,events:{}},draggable:{enabled:!0,distance:3,autoDistance:!0,showGhost:!0,showTouchSquareOverlay:!0,deleteOnDropOff:!1,addToHandOnDropOff:!1},selectable:{enabled:!0,forceSpares:!1,deleteOnTouch:!1,addSparesToHand:!1},promotion:{movePromotionDialog:()=>!1,forceMovePromotion:()=>!1,dropPromotionDialog:()=>!1,forceDropPromotion:()=>!1,promotesTo:()=>{},unpromotesTo:()=>{},events:{},prevPromotionHash:""},forsyth:{},events:{},drawable:{enabled:!0,visible:!0,forced:!1,eraseOnClick:!0,shapes:[],autoShapes:[],squares:[],prevSvgHash:""}}}function ho(e){var o;(o=e.dom.elements.board)!=null&&o.shapes&&Yo(e,e.dom.elements.board.shapes.svg,e.dom.elements.board.shapes.customSvg,e.dom.elements.board.shapes.freePieces)}function Pn(e,o){let n=e.dom.elements.board;n&&(qe(e,n),o||ho(e));let r=e.dom.elements.hands;r&&(r.top&&ie(e,r.top),r.bottom&&ie(e,r.bottom))}function Sn(e,o){let n=vn();be(n,e||{});let r=t=>{Pn(n,t)};return n.dom={wrapElements:o||{},elements:{},bounds:{board:{bounds:we(()=>{var t;return(t=n.dom.elements.board)==null?void 0:t.pieces.getBoundingClientRect()})},hands:{bounds:we(()=>{let t=new Map,i=n.dom.elements.hands;return i!=null&&i.top&&t.set("top",i.top.getBoundingClientRect()),i!=null&&i.bottom&&t.set("bottom",i.bottom.getBoundingClientRect()),t}),pieceBounds:we(()=>{let t=new Map,i=n.dom.elements.hands;if(i!=null&&i.top){let s=i.top.firstElementChild;for(;s;){let a=s.firstElementChild,d={role:a.sgRole,color:a.sgColor};t.set(g(d),a.getBoundingClientRect()),s=s.nextElementSibling}}if(i!=null&&i.bottom){let s=i.bottom.firstElementChild;for(;s;){let a=s.firstElementChild,d={role:a.sgRole,color:a.sgColor};t.set(g(d),a.getBoundingClientRect()),s=s.nextElementSibling}}return t})}},redrawNow:r,redraw:yn(r),redrawShapes:yn(()=>ho(n)),unbind:fn(n),destroyed:!1},o&&ce(o,n),hn(n)}function yn(e){let o=!1;return(...n)=>{o||(o=!0,requestAnimationFrame(()=>{e(...n),o=!1}))}}var pr=Sn;return En(ur);})(); Shogiground = Shogiground.default;