/`)+`/`),oe(o,r,i,``,function(e){return e})):o!=null&&(E(o)&&(o=T(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(re,`/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=l()})),d=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,E());else{var t=n(l);t!==null&&ie(x,t.startTime-e)}}var S=!1,C=-1,w=5,ee=-1;function te(){return g?!0:!(e.unstable_now()-eet&&te());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&ie(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}finally{i?E():S=!1}}}var E;if(typeof y==`function`)E=function(){y(T)};else if(typeof MessageChannel<`u`){var ne=new MessageChannel,re=ne.port2;ne.port1.onmessage=T,E=function(){re.postMessage(null)}}else E=function(){_(T,0)};function ie(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,ie(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,E()))),r},e.unstable_shouldYield=te,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),f=o(((e,t)=>{t.exports=d()})),p=o((e=>{var t=u();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=f(),n=u(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1de||(e.current=ue[de],ue[de]=null,de--)}function A(e,t){de++,ue[de]=e.current,e.current=t}var pe=fe(null),me=fe(null),he=fe(null),ge=fe(null);function _e(e,t){switch(A(he,t),A(me,e),A(pe,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Vd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Vd(t),e=Hd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}k(pe),A(pe,e)}function ve(){k(pe),k(me),k(he)}function ye(e){e.memoizedState!==null&&A(ge,e);var t=pe.current,n=Hd(t,e.type);t!==n&&(A(me,e),A(pe,n))}function be(e){me.current===e&&(k(pe),k(me)),ge.current===e&&(k(ge),Qf._currentValue=le)}var xe,Se;function Ce(e){if(xe===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);xe=t&&t[1]||``,Se=-1)`:-1i||c[r]!==l[i]){var u=` `+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{we=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?Ce(n):``}function Ee(e,t){switch(e.tag){case 26:case 27:case 5:return Ce(e.type);case 16:return Ce(`Lazy`);case 13:return e.child!==t&&t!==null?Ce(`Suspense Fallback`):Ce(`Suspense`);case 19:return Ce(`SuspenseList`);case 0:case 15:return Te(e.type,!1);case 11:return Te(e.type.render,!1);case 1:return Te(e.type,!0);case 31:return Ce(`Activity`);default:return``}}function De(e){try{var t=``,n=null;do t+=Ee(e,n),n=e,e=e.return;while(e);return t}catch(e){return` Error generating stack: `+e.message+` `+e.stack}}var Oe=Object.prototype.hasOwnProperty,ke=t.unstable_scheduleCallback,Ae=t.unstable_cancelCallback,je=t.unstable_shouldYield,Me=t.unstable_requestPaint,Ne=t.unstable_now,Pe=t.unstable_getCurrentPriorityLevel,Fe=t.unstable_ImmediatePriority,Ie=t.unstable_UserBlockingPriority,Le=t.unstable_NormalPriority,Re=t.unstable_LowPriority,ze=t.unstable_IdlePriority,Be=t.log,Ve=t.unstable_setDisableYieldValue,He=null,Ue=null;function We(e){if(typeof Be==`function`&&Ve(e),Ue&&typeof Ue.setStrictMode==`function`)try{Ue.setStrictMode(He,e)}catch{}}var Ge=Math.clz32?Math.clz32:Je,Ke=Math.log,qe=Math.LN2;function Je(e){return e>>>=0,e===0?32:31-(Ke(e)/qe|0)|0}var Ye=256,Xe=262144,Ze=4194304;function Qe(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function $e(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Qe(n))):i=Qe(o):i=Qe(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Qe(n))):i=Qe(o)):i=Qe(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function et(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function tt(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function nt(){var e=Ze;return Ze<<=1,!(Ze&62914560)&&(Ze=4194304),e}function j(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function rt(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function it(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0 听风 · 麻将助手 +ft,pt=`__reactProps 听风 · 麻将助手 +ft,mt=`__reactContainer 听风 · 麻将助手 +ft,ht=`__reactEvents 听风 · 麻将助手 +ft,gt=`__reactListeners 听风 · 麻将助手 +ft,_t=`__reactHandles 听风 · 麻将助手 +ft,vt=`__reactResources 听风 · 麻将助手 +ft,yt=`__reactMarker 听风 · 麻将助手 +ft;function bt(e){delete e[M],delete e[pt],delete e[ht],delete e[gt],delete e[_t]}function xt(e){var t=e[M];if(t)return t;for(var n=e.parentNode;n;){if(t=n[mt]||n[M]){if(n=t.alternate,t.child!==null||n!==null&&n.child!==null)for(e=df(e);e!==null;){if(n=e[M])return n;e=df(e)}return t}e=n,n=e.parentNode}return null}function St(e){if(e=e[M]||e[mt]){var t=e.tag;if(t===5||t===6||t===13||t===31||t===26||t===27||t===3)return e}return null}function Ct(e){var t=e.tag;if(t===5||t===26||t===27||t===6)return e.stateNode;throw Error(i(33))}function wt(e){var t=e[vt];return t||=e[vt]={hoistableStyles:new Map,hoistableScripts:new Map},t}function Tt(e){e[yt]=!0}var Et=new Set,Dt={};function Ot(e,t){kt(e,t),kt(e+`Capture`,t)}function kt(e,t){for(Dt[e]=t,e=0;e 听风 · 麻将助手 ),jt={},Mt={};function Nt(e){return Oe.call(Mt,e)?!0:Oe.call(jt,e)?!1:At.test(e)?Mt[e]=!0:(jt[e]=!0,!1)}function Pt(e,t,n){if(Nt(t))if(n===null)e.removeAttribute(t);else{switch(typeof n){case`undefined`:case`function`:case`symbol`:e.removeAttribute(t);return;case`boolean`:var r=t.toLowerCase().slice(0,5);if(r!==`data-`&&r!==`aria-`){e.removeAttribute(t);return}}e.setAttribute(t,``+n)}}function Ft(e,t,n){if(n===null)e.removeAttribute(t);else{switch(typeof n){case`undefined`:case`function`:case`symbol`:case`boolean`:e.removeAttribute(t);return}e.setAttribute(t,``+n)}}function It(e,t,n,r){if(r===null)e.removeAttribute(n);else{switch(typeof r){case`undefined`:case`function`:case`symbol`:case`boolean`:e.removeAttribute(n);return}e.setAttributeNS(t,n,``+r)}}function Lt(e){switch(typeof e){case`bigint`:case`boolean`:case`number`:case`string`:case`undefined`:return e;case`object`:return e;default:return``}}function Rt(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()===`input`&&(t===`checkbox`||t===`radio`)}function zt(e,t,n){var r=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);if(!e.hasOwnProperty(t)&&r!==void 0&&typeof r.get==`function`&&typeof r.set==`function`){var i=r.get,a=r.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return i.call(this)},set:function(e){n=``+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:r.enumerable}),{getValue:function(){return n},setValue:function(e){n=``+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Bt(e){if(!e._valueTracker){var t=Rt(e)?`checked`:`value`;e._valueTracker=zt(e,t,``+e[t])}}function Vt(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r=``;return e&&(r=Rt(e)?e.checked?`true`:`false`:e.value),e=r,e!==n&&(t.setValue(e),!0)}function Ht(e){if(e||=typeof document<`u`?document:void 0,e===void 0)return null;try{return e.activeElement||e.body}catch{return e.body}}var Ut=/[\n"\\]/g;function Wt(e){return e.replace(Ut,function(e){return`\\`+e.charCodeAt(0).toString(16)+` `})}function Gt(e,t,n,r,i,a,o,s){e.name=``,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`?e.type=o:e.removeAttribute(`type`),t==null?o!==`submit`&&o!==`reset`||e.removeAttribute(`value`):o===`number`?(t===0&&e.value===``||e.value!=t)&&(e.value=``+Lt(t)):e.value!==``+Lt(t)&&(e.value=``+Lt(t)),t==null?n==null?r!=null&&e.removeAttribute(`value`):qt(e,o,Lt(n)):qt(e,o,Lt(t)),i==null&&a!=null&&(e.defaultChecked=!!a),i!=null&&(e.checked=i&&typeof i!=`function`&&typeof i!=`symbol`),s!=null&&typeof s!=`function`&&typeof s!=`symbol`&&typeof s!=`boolean`?e.name=``+Lt(s):e.removeAttribute(`name`)}function Kt(e,t,n,r,i,a,o,s){if(a!=null&&typeof a!=`function`&&typeof a!=`symbol`&&typeof a!=`boolean`&&(e.type=a),t!=null||n!=null){if(!(a!==`submit`&&a!==`reset`||t!=null)){Bt(e);return}n=n==null?``:``+Lt(n),t=t==null?n:``+Lt(t),s||t===e.value||(e.value=t),e.defaultValue=t}r??=i,r=typeof r!=`function`&&typeof r!=`symbol`&&!!r,e.checked=s?e.checked:!!r,e.defaultChecked=!!r,o!=null&&typeof o!=`function`&&typeof o!=`symbol`&&typeof o!=`boolean`&&(e.name=o),Bt(e)}function qt(e,t,n){t===`number`&&Ht(e.ownerDocument)===e||e.defaultValue===``+n||(e.defaultValue=``+n)}function Jt(e,t,n,r){if(e=e.options,t){t={};for(var i=0;i 听风 · 麻将助手 +n[i]]=!0;for(n=0;n 听风 · 麻将助手 +e[n].value),e[n].selected!==i&&(e[n].selected=i),i&&r&&(e[n].defaultSelected=!0)}else{for(n=``+Lt(n),t=null,i=0;i`u`||window.document===void 0||window.document.createElement===void 0),gn=!1;if(hn)try{var _n={};Object.defineProperty(_n,"passive",{get:function(){gn=!0}}),window.addEventListener(`test`,_n,_n),window.removeEventListener(`test`,_n,_n)}catch{gn=!1}var vn=null,yn=null,bn=null;function xn(){if(bn)return bn;var e,t=yn,n=t.length,r,i=`value`in vn?vn.value:vn.textContent,a=i.length;for(e=0;e=$n),nr=` `,rr=!1;function ir(e,t){switch(e){case`keyup`:return Zn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function ar(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var or=!1;function sr(e,t){switch(e){case`compositionend`:return ar(t);case`keypress`:return t.which===32?(rr=!0,nr):null;case`textInput`:return e=t.data,e===nr&&rr?null:e;default:return null}}function cr(e,t){if(or)return e===`compositionend`||!Qn&&ir(e,t)?(e=xn(),bn=yn=vn=null,or=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=Ar(n)}}function Mr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Mr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Nr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Ht(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Ht(e.document)}return t}function Pr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Fr=hn&&`documentMode`in document&&11>=document.documentMode,Ir=null,Lr=null,Rr=null,zr=!1;function Br(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;zr||Ir==null||Ir!==Ht(r)||(r=Ir,`selectionStart`in r&&Pr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Rr&&kr(Rr,r)||(Rr=r,r=Ed(Lr,`onSelect`),0>=o,i-=o,Mi=1<<32-Ge(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),P&&Pi(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),P&&Pi(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return P&&Pi(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),P&&Pi(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$typeof===E&&Na(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ba(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=yi(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=vi(o.type,o.key,o.props,null,e.mode,c),Ba(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}t(e,r),r=r.sibling}c=Si(o,e.mode,c),c.return=e,e=c}return s(e);case E:return o=Na(o),b(e,r,o,c)}if(ce(o))return h(e,r,o,c);if(ae(o)){if(l=ae(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,za(o),c);if(o.$typeof===C)return b(e,r,sa(e,o),c);Va(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=bi(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Ra=0;var i=b(e,t,n,r);return La=null,i}catch(t){if(t===Da||t===ka)throw t;var a=mi(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Ua=Ha(!0),Wa=Ha(!1),Ga=!1;function Ka(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function qa(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Ja(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ya(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,G&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=di(e),ui(e,null,n),t}return si(e,r,t,n),di(e)}function Xa(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}function Za(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Qa=!1;function $a(){if(Qa){var e=va;if(e!==null)throw e}}function eo(e,t,n,r){Qa=!1;var i=e.updateQueue;Ga=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(J&f)===f:(r&f)===f){f!==0&&f===_a&&(Qa=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ga=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Gl|=o,e.lanes=o,e.memoizedState=d}}function to(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function no(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=D.T,s={};D.T=s,Ls(e,!1,t,n);try{var c=i(),l=D.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Is(e,t,xa(c,r),pu(e)):Is(e,t,r,pu(e))}catch(n){Is(e,t,{then:function(){},status:`rejected`,reason:n},pu())}finally{O.p=a,o!==null&&s.types!==null&&(o.types=s.types),D.T=o}}function Es(){}function Ds(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Os(e).queue;Ts(e,a,t,le,n===null?Es:function(){return ks(e),n(r)})}function Os(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:le,baseState:le,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ro,lastRenderedState:le},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Ro,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function ks(e){var t=Os(e);t.next===null&&(t=e.alternate.memoizedState),Is(e,t.next.queue,{},pu())}function As(){return oa(Qf)}function js(){return B().memoizedState}function Ms(){return B().memoizedState}function Ns(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=pu();e=Ja(n);var r=Ya(t,e,n);r!==null&&(hu(r,t,n),Xa(r,t,n)),t={cache:pa()},e.payload=t;return}t=t.return}}function Ps(e,t,n){var r=pu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Rs(e)?zs(t,n):(n=ci(e,t,n,r),n!==null&&(hu(n,e,r),Bs(n,t,r)))}function Fs(e,t,n){Is(e,t,n,pu())}function Is(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Rs(e))zs(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Or(s,o))return si(e,t,i,0),K===null&&oi(),!1}catch{}if(n=ci(e,t,i,r),n!==null)return hu(n,e,r),Bs(n,t,r),!0}return!1}function Ls(e,t,n,r){if(r={lane:2,revertLane:dd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Rs(e)){if(t)throw Error(i(479))}else t=ci(e,n,r,2),t!==null&&hu(t,e,2)}function Rs(e){var t=e.alternate;return e===I||t!==null&&t===I}function zs(e,t){yo=vo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Bs(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,ot(e,n)}}var Vs={readContext:oa,use:Io,useCallback:z,useContext:z,useEffect:z,useImperativeHandle:z,useLayoutEffect:z,useInsertionEffect:z,useMemo:z,useReducer:z,useRef:z,useState:z,useDebugValue:z,useDeferredValue:z,useTransition:z,useSyncExternalStore:z,useId:z,useHostTransitionStatus:z,useFormState:z,useActionState:z,useOptimistic:z,useMemoCache:z,useCacheRefresh:z};Vs.useEffectEvent=z;var Hs={readContext:oa,use:Io,useCallback:function(e,t){return No().memoizedState=[e,t===void 0?null:t],e},useContext:oa,useEffect:fs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),us(4194308,4,vs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return us(4194308,4,e,t)},useInsertionEffect:function(e,t){us(4,2,e,t)},useMemo:function(e,t){var n=No();t=t===void 0?null:t;var r=e();if(bo){We(!0);try{e()}finally{We(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=No();if(n!==void 0){var i=n(t);if(bo){We(!0);try{n(t)}finally{We(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ps.bind(null,I,e),[r.memoizedState,e]},useRef:function(e){var t=No();return e={current:e},t.memoizedState=e},useState:function(e){e=Jo(e);var t=e.queue,n=Fs.bind(null,I,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:bs,useDeferredValue:function(e,t){return Cs(No(),e,t)},useTransition:function(){var e=Jo(!1);return e=Ts.bind(null,I,e.queue,!0,!1),No().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=I,a=No();if(P){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),K===null)throw Error(i(349));J&127||Uo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,fs(Go.bind(null,r,o,e),[e]),r.flags|=2048,cs(9,{destroy:void 0},Wo.bind(null,r,o,n,t),null),n},useId:function(){var e=No(),t=K.identifierPrefix;if(P){var n=Ni,r=Mi;n=(r&~(1<<32-Ge(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=xo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[M]=t,o[pt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Pd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Fc(t)}}return H(t),Ic(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Fc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=he.current,Ki(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=zi,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[M]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Md(e.nodeValue,n)),e||Ui(t,!0)}else e=Bd(e).createTextNode(r),e[M]=t,t.stateNode=e}return H(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=Ki(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[M]=t}else qi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;H(t),e=!1}else n=Ji(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ho(t),t):(ho(t),null);if(t.flags&128)throw Error(i(558))}return H(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=Ki(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[M]=t}else qi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;H(t),a=!1}else a=Ji(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ho(t),t):(ho(t),null)}return ho(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Rc(t,t.updateQueue),H(t),null);case 4:return ve(),e===null&&Sd(t.stateNode.containerInfo),H(t),null;case 10:return ea(t.type),H(t),null;case 19:if(k(F),r=t.memoizedState,r===null)return H(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null)if(a)zc(r,!1);else{if(X!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=go(e),o!==null){for(t.flags|=128,zc(r,!1),e=o.updateQueue,t.updateQueue=e,Rc(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)_i(n,e),n=n.sibling;return A(F,F.current&1|2),P&&Pi(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&Ne()>tu&&(t.flags|=128,a=!0,zc(r,!1),t.lanes=4194304)}else{if(!a)if(e=go(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Rc(t,e),zc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!P)return H(t),null}else 2*Ne()-r.renderingStartTime>tu&&n!==536870912&&(t.flags|=128,a=!0,zc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(H(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=Ne(),e.sibling=null,n=F.current,A(F,a?n&1|2:n&1),P&&Pi(t,r.treeForkCount),e);case 22:case 23:return ho(t),so(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(H(t),t.subtreeFlags&6&&(t.flags|=8192)):H(t),n=t.updateQueue,n!==null&&Rc(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&k(Ca),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ea(fa),H(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Vc(e,t){switch(Li(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ea(fa),ve(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return be(t),null;case 31:if(t.memoizedState!==null){if(ho(t),t.alternate===null)throw Error(i(340));qi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ho(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));qi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return k(F),null;case 4:return ve(),null;case 10:return ea(t.type),null;case 22:case 23:return ho(t),so(),e!==null&&k(Ca),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ea(fa),null;case 25:return null;default:return null}}function Hc(e,t){switch(Li(t),t.tag){case 3:ea(fa),ve();break;case 26:case 27:case 5:be(t);break;case 4:ve();break;case 31:t.memoizedState!==null&&ho(t);break;case 13:ho(t);break;case 19:k(F);break;case 10:ea(t.type);break;case 22:case 23:ho(t),so(),e!==null&&k(Ca);break;case 24:ea(fa)}}function Uc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Z(t,t.return,e)}}function Wc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Z(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Z(t,t.return,e)}}function Gc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{no(t,n)}catch(t){Z(e,e.return,t)}}}function Kc(e,t,n){n.props=Ys(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Z(e,t,n)}}function qc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Z(e,t,n)}}function Jc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Z(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Z(e,t,n)}else n.current=null}function Yc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Z(e,e.return,t)}}function Xc(e,t,n){try{var r=e.stateNode;Fd(r,e.type,n,t),r[pt]=t}catch(t){Z(e,e.return,t)}}function Zc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&Zd(e.type)||e.tag===4}function Qc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Zc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&Zd(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=on));else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&Zd(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(el(e,t,n),e=e.sibling;e!==null;)el(e,t,n),e=e.sibling}function tl(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Pd(t,r,n),t[M]=e,t[pt]=n}catch(t){Z(e,e.return,t)}}var nl=!1,U=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Rd=sp,e=Nr(e),Pr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(zd={focusedElem:e,selectionRange:n},sp=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Pd(o,r,n),o[M]=e,Tt(o),r=o;break a;case`link`:var s=Vf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=jr(s,h),v=jr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,D.T=null,n=lu,lu=null;var o=au,s=su;if(iu=0,ou=au=null,su=0,G&6)throw Error(i(331));var c=G;if(G|=4,Fl(o.current),Dl(o,o.current,s,n),G=c,id(0,!1),Ue&&typeof Ue.onPostCommitFiberRoot==`function`)try{Ue.onPostCommitFiberRoot(He,o)}catch{}return!0}finally{O.p=a,D.T=r,Vu(e,t)}}function Wu(e,t,n){t=wi(n,t),t=tc(e.stateNode,t,2),e=Ya(e,t,2),e!==null&&(rt(e,2),rd(e))}function Z(e,t,n){if(e.tag===3)Wu(e,e,n);else for(;t!==null;){if(t.tag===3){Wu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(ru===null||!ru.has(r))){e=wi(n,e),n=nc(2),r=Ya(t,n,2),r!==null&&(rc(n,r,t,e),rt(r,2),rd(r));break}}t=t.return}}function Gu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new zl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ku.bind(null,e,t,n),t.then(e,e))}function Ku(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,K===e&&(J&n)===n&&(X===4||X===3&&(J&62914560)===J&&300>Ne()-$l?!(G&2)&&Su(e,0):ql|=n,Yl===J&&(Yl=0)),rd(e)}function qu(e,t){t===0&&(t=nt()),e=li(e,t),e!==null&&(rt(e,t),rd(e))}function Ju(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),qu(e,n)}function Yu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),qu(e,n)}function Xu(e,t){return ke(e,t)}var Zu=null,Qu=null,$u=!1,ed=!1,td=!1,nd=0;function rd(e){e!==Qu&&e.next===null&&(Qu===null?Zu=Qu=e:Qu=Qu.next=e),ed=!0,$u||($u=!0,ud())}function id(e,t){if(!td&&ed){td=!0;do for(var n=!1,r=Zu;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ge(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,ld(r,a))}else a=J,a=$e(r,r===K?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||et(r,a)||(n=!0,ld(r,a));r=r.next}while(n);td=!1}}function ad(){od()}function od(){ed=$u=!1;var e=0;nd!==0&&Gd()&&(e=nd);for(var t=Ne(),n=null,r=Zu;r!==null;){var i=r.next,a=sd(r,t);a===0?(r.next=null,n===null?Zu=i:n.next=i,i===null&&(Qu=n)):(n=r,(e!==0||a&3)&&(ed=!0)),r=i}iu!==0&&iu!==5||id(e,!1),nd!==0&&(nd=0)}function sd(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Id(d)&&(c=c.responseEnd,o+=u*(c 听风 · 麻将助手 ||n===`/&`){if(r===0){e.removeChild(i),Np(t);return}r--}else if(n===` 听风 · 麻将助手 ||n===`$?`||n===`$~`||n===`$!`||n===`&`)r++;else if(n===`html`)pf(e.ownerDocument.documentElement);else if(n===`head`){n=e.ownerDocument.head,pf(n);for(var a=n.firstChild;a;){var o=a.nextSibling,s=a.nodeName;a[yt]||s===`SCRIPT`||s===`STYLE`||s===`LINK`&&a.rel.toLowerCase()===`stylesheet`||n.removeChild(a),a=o}}else n===`body`&&pf(e.ownerDocument.body);n=i}while(n);Np(t)}function $d(e,t){var n=e;e=0;do{var r=n.nextSibling;if(n.nodeType===1?t?(n._stashedDisplay=n.style.display,n.style.display=`none`):(n.style.display=n._stashedDisplay||``,n.getAttribute(`style`)===``&&n.removeAttribute(`style`)):n.nodeType===3&&(t?(n._stashedText=n.nodeValue,n.nodeValue=``):n.nodeValue=n._stashedText||``),r&&r.nodeType===8)if(n=r.data,n===`/ 听风 · 麻将助手 ){if(e===0)break;e--}else n!==` 听风 · 麻将助手 &&n!==`$?`&&n!==`$~`&&n!==`$!`||e++;n=r}while(n)}function ef(e){var t=e.firstChild;for(t&&t.nodeType===10&&(t=t.nextSibling);t;){var n=t;switch(t=t.nextSibling,n.nodeName){case`HTML`:case`HEAD`:case`BODY`:ef(n),bt(n);continue;case`SCRIPT`:case`STYLE`:continue;case`LINK`:if(n.rel.toLowerCase()===`stylesheet`)continue}e.removeChild(n)}}function tf(e,t,n,r){for(;e.nodeType===1;){var i=n;if(e.nodeName.toLowerCase()!==t.toLowerCase()){if(!r&&(e.nodeName!==`INPUT`||e.type!==`hidden`))break}else if(!r)if(t===`input`&&e.type===`hidden`){var a=i.name==null?null:``+i.name;if(i.type===`hidden`&&e.getAttribute(`name`)===a)return e}else return e;else if(!e[yt])switch(t){case`meta`:if(!e.hasAttribute(`itemprop`))break;return e;case`link`:if(a=e.getAttribute(`rel`),a===`stylesheet`&&e.hasAttribute(`data-precedence`)||a!==i.rel||e.getAttribute(`href`)!==(i.href==null||i.href===``?null:i.href)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin)||e.getAttribute(`title`)!==(i.title==null?null:i.title))break;return e;case`style`:if(e.hasAttribute(`data-precedence`))break;return e;case`script`:if(a=e.getAttribute(`src`),(a!==(i.src==null?null:i.src)||e.getAttribute(`type`)!==(i.type==null?null:i.type)||e.getAttribute(`crossorigin`)!==(i.crossOrigin==null?null:i.crossOrigin))&&a&&e.hasAttribute(`async`)&&!e.hasAttribute(`itemprop`))break;return e;default:return e}if(e=cf(e.nextSibling),e===null)break}return null}function nf(e,t,n){if(t===``)return null;for(;e.nodeType!==3;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!n||(e=cf(e.nextSibling),e===null))return null;return e}function rf(e,t){for(;e.nodeType!==8;)if((e.nodeType!==1||e.nodeName!==`INPUT`||e.type!==`hidden`)&&!t||(e=cf(e.nextSibling),e===null))return null;return e}function af(e){return e.data===`$?`||e.data===`$~`}function of(e){return e.data===`$!`||e.data===`$?`&&e.ownerDocument.readyState!==`loading`}function sf(e,t){var n=e.ownerDocument;if(e.data===`$~`)e._reactRetry=t;else if(e.data!==`$?`||n.readyState!==`loading`)t();else{var r=function(){t(),n.removeEventListener(`DOMContentLoaded`,r)};n.addEventListener(`DOMContentLoaded`,r),e._reactRetry=r}}function cf(e){for(;e!=null;e=e.nextSibling){var t=e.nodeType;if(t===1||t===3)break;if(t===8){if(t=e.data,t===` 听风 · 麻将助手 ||t===`$!`||t===`$?`||t===`$~`||t===`&`||t===`F!`||t===`F`)break;if(t===`/ 听风 · 麻将助手 ||t===`/&`)return null}}return e}var lf=null;function uf(e){e=e.nextSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===`/ 听风 · 麻将助手 ||n===`/&`){if(t===0)return cf(e.nextSibling);t--}else n!==` 听风 · 麻将助手 &&n!==`$!`&&n!==`$?`&&n!==`$~`&&n!==`&`||t++}e=e.nextSibling}return null}function df(e){e=e.previousSibling;for(var t=0;e;){if(e.nodeType===8){var n=e.data;if(n===` 听风 · 麻将助手 ||n===`$!`||n===`$?`||n===`$~`||n===`&`){if(t===0)return e;t--}else n!==`/ 听风 · 麻将助手 &&n!==`/&`||t++}e=e.previousSibling}return null}function ff(e,t,n){switch(t=Bd(n),e){case`html`:if(e=t.documentElement,!e)throw Error(i(452));return e;case`head`:if(e=t.head,!e)throw Error(i(453));return e;case`body`:if(e=t.body,!e)throw Error(i(454));return e;default:throw Error(i(451))}}function pf(e){for(var t=e.attributes;t.length;)e.removeAttributeNode(t[0]);bt(e)}var mf=new Map,hf=new Set;function gf(e){return typeof e.getRootNode==`function`?e.getRootNode():e.nodeType===9?e:e.ownerDocument}var _f=O.d;O.d={f:vf,r:yf,D:Sf,C:Cf,L:wf,m:Tf,X:Df,S:Ef,M:Of};function vf(){var e=_f.f(),t=bu();return e||t}function yf(e){var t=St(e);t!==null&&t.tag===5&&t.type===`form`?ks(t):_f.r(e)}var bf=typeof document>`u`?null:document;function xf(e,t,n){var r=bf;if(r&&typeof t==`string`&&t){var i=Wt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),hf.has(i)||(hf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Pd(t,`link`,e),Tt(t),r.head.appendChild(t)))}}function Sf(e){_f.D(e),xf(`dns-prefetch`,e,null)}function Cf(e,t){_f.C(e,t),xf(`preconnect`,e,t)}function wf(e,t,n){_f.L(e,t,n);var r=bf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Wt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Wt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Wt(n.imageSizes)+`"]`)):i+=`[href="`+Wt(e)+`"]`;var a=i;switch(t){case`style`:a=Af(e);break;case`script`:a=Pf(e)}mf.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),mf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(jf(a))||t===`script`&&r.querySelector(Ff(a))||(t=r.createElement(`link`),Pd(t,`link`,e),Tt(t),r.head.appendChild(t)))}}function Tf(e,t){_f.m(e,t);var n=bf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Wt(r)+`"][href="`+Wt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Pf(e)}if(!mf.has(a)&&(e=h({rel:`modulepreload`,href:e},t),mf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Ff(a)))return}r=n.createElement(`link`),Pd(r,`link`,e),Tt(r),n.head.appendChild(r)}}}function Ef(e,t,n){_f.S(e,t,n);var r=bf;if(r&&e){var i=wt(r).hoistableStyles,a=Af(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(jf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=mf.get(a))&&Rf(e,n);var c=o=r.createElement(`link`);Tt(c),Pd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Lf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Df(e,t){_f.X(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),Tt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Of(e,t){_f.M(e,t);var n=bf;if(n&&e){var r=wt(n).hoistableScripts,i=Pf(e),a=r.get(i);a||(a=n.querySelector(Ff(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=mf.get(i))&&zf(e,t),a=n.createElement(`script`),Tt(a),Pd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function kf(e,t,n,r){var a=(a=he.current)?gf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Af(n.href),n=wt(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Af(n.href);var o=wt(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(jf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),mf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},mf.set(e,n),o||Nf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Pf(n),n=wt(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Af(e){return`href="`+Wt(e)+`"`}function jf(e){return`link[rel="stylesheet"][`+e+`]`}function Mf(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function Nf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Pd(t,`link`,n),Tt(t),e.head.appendChild(t))}function Pf(e){return`[src="`+Wt(e)+`"]`}function Ff(e){return`script[async]`+e}function If(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Wt(n.href)+`"]`);if(r)return t.instance=r,Tt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),Tt(r),Pd(r,`style`,a),Lf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Af(n.href);var o=e.querySelector(jf(a));if(o)return t.state.loading|=4,t.instance=o,Tt(o),o;r=Mf(n),(a=mf.get(a))&&Rf(r,a),o=(e.ownerDocument||e).createElement(`link`),Tt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Pd(o,`link`,r),t.state.loading|=4,Lf(o,n.precedence,e),t.instance=o;case`script`:return o=Pf(n.src),(a=e.querySelector(Ff(o)))?(t.instance=a,Tt(a),a):(r=n,(a=mf.get(o))&&(r=h({},n),zf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),Tt(a),Pd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Lf(r,n.precedence,e));return t.instance}function Lf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Uf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Wf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Gf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Af(r.href),a=t.querySelector(jf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Jf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,Tt(a);return}a=t.ownerDocument||t,r=Mf(r),(i=mf.get(i))&&Rf(r,i),a=a.createElement(`link`),Tt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Pd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Jf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Kf=0;function qf(e,t){return e.stylesheets&&e.count===0&&Xf(e,e.stylesheets),0Kf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Jf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)Xf(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Yf=null;function Xf(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Yf=new Map,t.forEach(Zf,e),Yf=null,Jf.call(e))}function Zf(e,t){if(!(t.state.loading&4)){var n=Yf.get(e);if(n)var r=n.get(null);else{n=new Map,Yf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),v=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),y=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),b=e=>{let t=y(e);return t.charAt(0).toUpperCase()+t.slice(1)},x={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},S=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},C=u(),w=(0,C.createContext)({}),ee=()=>(0,C.useContext)(w),te=(0,C.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=ee()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,C.createElement)(`svg`,{ref:c,...x,width:t??l??x.width,height:t??l??x.height,stroke:e??f,strokeWidth:m,className:_(`lucide`,p,i),...!a&&!S(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,C.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),T=(e,t)=>{let n=(0,C.forwardRef)(({className:n,...r},i)=>(0,C.createElement)(te,{ref:i,iconNode:t,className:_(`lucide-${v(b(e))}`,`lucide-${e}`,n),...r}));return n.displayName=b(e),n},E=T(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),ne=T(`book-open`,[[`path`,{d:`M12 5v16`,key:`1f6ucr`}],[`path`,{d:`M20.001 19A2 2 0 0022 17V5a2 2 0 00-1.999-2L16 3.002A5 5 0 0012 5a5 5 0 00-4-2H4a2 2 0 00-2 2v12a2 2 0 001.999 2H8a5 5 0 014 2 5 5 0 014-2z`,key:`1fyvmf`}]]),re=T(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),ie=T(`circle-question-mark`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ae=T(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),oe=T(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),se=T(`file-up`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M12 12v6`,key:`3ahymv`}],[`path`,{d:`m15 15-3-3-3 3`,key:`15xj92`}]]),ce=T(`flag`,[[`path`,{d:`M4 22V4a1 1 0 0 1 .4-.8A6 6 0 0 1 8 2c3 0 5 2 7.333 2q2 0 3.067-.8A1 1 0 0 1 20 4v10a1 1 0 0 1-.4.8A6 6 0 0 1 16 16c-3 0-5-2-8-2a6 6 0 0 0-4 1.528`,key:`1jaruq`}]]),D=T(`house`,[[`path`,{d:`M15 21v-8a1 1 0 0 0-1-1h-4a1 1 0 0 0-1 1v8`,key:`5wwlr5`}],[`path`,{d:`M3 10a2 2 0 0 1 .709-1.528l7-6a2 2 0 0 1 2.582 0l7 6A2 2 0 0 1 21 10v9a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z`,key:`r6nss1`}]]),O=T(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),le=T(`layout-grid`,[[`rect`,{width:`7`,height:`7`,x:`3`,y:`3`,rx:`1`,key:`1g98yp`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`3`,rx:`1`,key:`6d4xhi`}],[`rect`,{width:`7`,height:`7`,x:`14`,y:`14`,rx:`1`,key:`nxv5o0`}],[`rect`,{width:`7`,height:`7`,x:`3`,y:`14`,rx:`1`,key:`1bb6yr`}]]),ue=T(`lightbulb`,[[`path`,{d:`M15 14c.2-1 .7-1.7 1.5-2.5 1-.9 1.5-2.2 1.5-3.5A6 6 0 0 0 6 8c0 1 .2 2.2 1.5 3.5.7.7 1.3 1.5 1.5 2.5`,key:`1gvzjb`}],[`path`,{d:`M9 18h6`,key:`x1upvd`}],[`path`,{d:`M10 22h4`,key:`ceow96`}]]),de=T(`pencil`,[[`path`,{d:`M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z`,key:`1a8usu`}],[`path`,{d:`m15 5 4 4`,key:`1mk7zo`}]]),fe=T(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),k=T(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),A=T(`qr-code`,[[`rect`,{width:`5`,height:`5`,x:`3`,y:`3`,rx:`1`,key:`1tu5fj`}],[`rect`,{width:`5`,height:`5`,x:`16`,y:`3`,rx:`1`,key:`1v8r4q`}],[`rect`,{width:`5`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`1x03jg`}],[`path`,{d:`M21 16h-3a2 2 0 0 0-2 2v3`,key:`177gqh`}],[`path`,{d:`M21 21v.01`,key:`ents32`}],[`path`,{d:`M12 7v3a2 2 0 0 1-2 2H7`,key:`8crl2c`}],[`path`,{d:`M3 12h.01`,key:`nlz23k`}],[`path`,{d:`M12 3h.01`,key:`n36tog`}],[`path`,{d:`M12 16v.01`,key:`133mhm`}],[`path`,{d:`M16 12h1`,key:`1slzba`}],[`path`,{d:`M21 12v.01`,key:`1lwtk9`}],[`path`,{d:`M12 21v-1`,key:`1880an`}]]),pe=T(`rotate-ccw-clock`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}],[`path`,{d:`M12 7v5l4 2`,key:`1fdv2h`}]]),me=T(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),he=T(`save`,[[`path`,{d:`M15.2 3a2 2 0 0 1 1.4.6l3.8 3.8a2 2 0 0 1 .6 1.4V19a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2z`,key:`1c8476`}],[`path`,{d:`M17 21v-7a1 1 0 0 0-1-1H8a1 1 0 0 0-1 1v7`,key:`1ydtos`}],[`path`,{d:`M7 3v4a1 1 0 0 0 1 1h7`,key:`t51u73`}]]),ge=T(`settings`,[[`path`,{d:`M9.671 4.136a2.34 2.34 0 0 1 4.659 0 2.34 2.34 0 0 0 3.319 1.915 2.34 2.34 0 0 1 2.33 4.033 2.34 2.34 0 0 0 0 3.831 2.34 2.34 0 0 1-2.33 4.033 2.34 2.34 0 0 0-3.319 1.915 2.34 2.34 0 0 1-4.659 0 2.34 2.34 0 0 0-3.32-1.915 2.34 2.34 0 0 1-2.33-4.033 2.34 2.34 0 0 0 0-3.831A2.34 2.34 0 0 1 6.35 6.051a2.34 2.34 0 0 0 3.319-1.915`,key:`1i5ecw`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),_e=T(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),ve=T(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),ye=T(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),be=T(`undo-2`,[[`path`,{d:`M9 14 4 9l5-5`,key:`102s5s`}],[`path`,{d:`M4 9h10.5a5.5 5.5 0 0 1 5.5 5.5a5.5 5.5 0 0 1-5.5 5.5H11`,key:`f3b9sd`}]]),xe=T(`upload`,[[`path`,{d:`M12 3v12`,key:`1x0j5s`}],[`path`,{d:`m17 8-5-5-5 5`,key:`7q97r8`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}]]),Se=T(`users`,[[`path`,{d:`M16 21v-2a4 4 0 0 0-4-4H6a4 4 0 0 0-4 4v2`,key:`1yyitq`}],[`path`,{d:`M16 3.128a4 4 0 0 1 0 7.744`,key:`16gr8j`}],[`path`,{d:`M22 21v-2a4 4 0 0 0-3-3.87`,key:`kshegd`}],[`circle`,{cx:`9`,cy:`7`,r:`4`,key:`nufk8`}]]),Ce=T(`wind`,[[`path`,{d:`M12.8 19.6A2 2 0 1 0 14 16H2`,key:`148xed`}],[`path`,{d:`M17.5 8a2.5 2.5 0 1 1 2 4H2`,key:`1u4tom`}],[`path`,{d:`M9.8 4.4A2 2 0 1 1 11 8H2`,key:`75valh`}]]),we=T(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]),Te=o(((e,t)=>{t.exports=function(){return typeof Promise==`function`&&Promise.prototype&&Promise.prototype.then}})),Ee=o((e=>{var t,n=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];e.getSymbolSize=function(e){if(!e)throw Error(`"version" cannot be null or undefined`);if(e<1||e>40)throw Error(`"version" should be in range from 1 to 40`);return e*4+17},e.getSymbolTotalCodewords=function(e){return n[e]},e.getBCHDigit=function(e){let t=0;for(;e!==0;)t++,e>>>=1;return t},e.setToSJISFunction=function(e){if(typeof e!=`function`)throw Error(`"toSJISFunc" is not a valid function.`);t=e},e.isKanjiModeEnabled=function(){return t!==void 0},e.toSJIS=function(e){return t(e)}})),De=o((e=>{e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`l`:case`low`:return e.L;case`m`:case`medium`:return e.M;case`q`:case`quartile`:return e.Q;case`h`:case`high`:return e.H;default:throw Error(`Unknown EC Level: `+t)}}e.isValid=function(e){return e&&e.bit!==void 0&&e.bit>=0&&e.bit<4},e.from=function(n,r){if(e.isValid(n))return n;try{return t(n)}catch{return r}}})),Oe=o(((e,t)=>{function n(){this.buffer=[],this.length=0}n.prototype={get:function(e){let t=Math.floor(e/8);return(this.buffer[t]>>>7-e%8&1)==1},put:function(e,t){for(let n=0;n>>t-n-1&1)==1)},getLengthInBits:function(){return this.length},putBit:function(e){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),e&&(this.buffer[t]|=128>>>this.length%8),this.length++}},t.exports=n})),ke=o(((e,t)=>{function n(e){if(!e||e<1)throw Error(`BitMatrix size must be defined and greater than 0`);this.size=e,this.data=new Uint8Array(e*e),this.reservedBit=new Uint8Array(e*e)}n.prototype.set=function(e,t,n,r){let i=e*this.size+t;this.data[i]=n,r&&(this.reservedBit[i]=!0)},n.prototype.get=function(e,t){return this.data[e*this.size+t]},n.prototype.xor=function(e,t,n){this.data[e*this.size+t]^=n},n.prototype.isReserved=function(e,t){return this.reservedBit[e*this.size+t]},t.exports=n})),Ae=o((e=>{var t=Ee().getSymbolSize;e.getRowColCoords=function(e){if(e===1)return[];let n=Math.floor(e/7)+2,r=t(e),i=r===145?26:Math.ceil((r-13)/(2*n-2))*2,a=[r-7];for(let e=1;e{var t=Ee().getSymbolSize,n=7;e.getPositions=function(e){let r=t(e);return[[0,0],[r-n,0],[0,r-n]]}})),Me=o((e=>{e.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var t={N1:3,N2:3,N3:40,N4:10};e.isValid=function(e){return e!=null&&e!==``&&!isNaN(e)&&e>=0&&e<=7},e.from=function(t){return e.isValid(t)?parseInt(t,10):void 0},e.getPenaltyN1=function(e){let n=e.size,r=0,i=0,a=0,o=null,s=null;for(let c=0;c=5&&(r+=t.N1+(i-5)),o=n,i=1),n=e.get(l,c),n===s?a++:(a>=5&&(r+=t.N1+(a-5)),s=n,a=1)}i>=5&&(r+=t.N1+(i-5)),a>=5&&(r+=t.N1+(a-5))}return r},e.getPenaltyN2=function(e){let n=e.size,r=0;for(let t=0;t=10&&(i===1488||i===93)&&r++,a=a<<1&2047|e.get(o,t),o>=10&&(a===1488||a===93)&&r++}return r*t.N3},e.getPenaltyN4=function(e){let n=0,r=e.data.length;for(let t=0;t{var t=De(),n=[1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,4,1,2,4,4,2,4,4,4,2,4,6,5,2,4,6,6,2,5,8,8,4,5,8,8,4,5,8,11,4,8,10,11,4,9,12,16,4,9,16,16,6,10,12,18,6,10,17,16,6,11,16,19,6,13,18,21,7,14,21,25,8,16,20,25,8,17,23,25,9,17,23,34,9,18,25,30,10,20,27,32,12,21,29,35,12,23,34,37,12,25,34,40,13,26,35,42,14,28,38,45,15,29,40,48,16,31,43,51,17,33,45,54,18,35,48,57,19,37,51,60,19,38,53,63,20,40,56,66,21,43,59,70,22,45,62,74,24,47,65,77,25,49,68,81],r=[7,10,13,17,10,16,22,28,15,26,36,44,20,36,52,64,26,48,72,88,36,64,96,112,40,72,108,130,48,88,132,156,60,110,160,192,72,130,192,224,80,150,224,264,96,176,260,308,104,198,288,352,120,216,320,384,132,240,360,432,144,280,408,480,168,308,448,532,180,338,504,588,196,364,546,650,224,416,600,700,224,442,644,750,252,476,690,816,270,504,750,900,300,560,810,960,312,588,870,1050,336,644,952,1110,360,700,1020,1200,390,728,1050,1260,420,784,1140,1350,450,812,1200,1440,480,868,1290,1530,510,924,1350,1620,540,980,1440,1710,570,1036,1530,1800,570,1064,1590,1890,600,1120,1680,1980,630,1204,1770,2100,660,1260,1860,2220,720,1316,1950,2310,750,1372,2040,2430];e.getBlocksCount=function(e,r){switch(r){case t.L:return n[(e-1)*4+0];case t.M:return n[(e-1)*4+1];case t.Q:return n[(e-1)*4+2];case t.H:return n[(e-1)*4+3];default:return}},e.getTotalCodewordsCount=function(e,n){switch(n){case t.L:return r[(e-1)*4+0];case t.M:return r[(e-1)*4+1];case t.Q:return r[(e-1)*4+2];case t.H:return r[(e-1)*4+3];default:return}}})),Pe=o((e=>{var t=new Uint8Array(512),n=new Uint8Array(256);(function(){let e=1;for(let r=0;r<255;r++)t[r]=e,n[e]=r,e<<=1,e&256&&(e^=285);for(let e=255;e<512;e++)t[e]=t[e-255]})(),e.log=function(e){if(e<1)throw Error(`log(`+e+`)`);return n[e]},e.exp=function(e){return t[e]},e.mul=function(e,r){return e===0||r===0?0:t[n[e]+n[r]]}})),Fe=o((e=>{var t=Pe();e.mul=function(e,n){let r=new Uint8Array(e.length+n.length-1);for(let i=0;i=0;){let e=r[0];for(let i=0;i{var n=Fe();function r(e){this.genPoly=void 0,this.degree=e,this.degree&&this.initialize(this.degree)}r.prototype.initialize=function(e){this.degree=e,this.genPoly=n.generateECPolynomial(this.degree)},r.prototype.encode=function(e){if(!this.genPoly)throw Error(`Encoder not initialized`);let t=new Uint8Array(e.length+this.degree);t.set(e);let r=n.mod(t,this.genPoly),i=this.degree-r.length;if(i>0){let e=new Uint8Array(this.degree);return e.set(r,i),e}return r},t.exports=r})),Le=o((e=>{e.isValid=function(e){return!isNaN(e)&&e>=1&&e<=40}})),Re=o((e=>{var t=`[0-9]+`,n=`[A-Z $%*+\\-./:]+`,r=`(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+`;r=r.replace(/u/g,`\\u`);var i=`(?:(?![A-Z0-9 $%*+\\-./:]|`+r+`)(?:.|[\r ]))+`;e.KANJI=new RegExp(r,`g`),e.BYTE_KANJI=RegExp(`[^A-Z0-9 $%*+\\-./:]+`,`g`),e.BYTE=new RegExp(i,`g`),e.NUMERIC=new RegExp(t,`g`),e.ALPHANUMERIC=new RegExp(n,`g`);var a=RegExp(`^`+r+` 听风 · 麻将助手 ),o=RegExp(`^[0-9]+ 听风 · 麻将助手 ),s=RegExp(`^[A-Z0-9 $%*+\\-./:]+ 听风 · 麻将助手 );e.testKanji=function(e){return a.test(e)},e.testNumeric=function(e){return o.test(e)},e.testAlphanumeric=function(e){return s.test(e)}})),ze=o((e=>{var t=Le(),n=Re();e.NUMERIC={id:`Numeric`,bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:`Alphanumeric`,bit:2,ccBits:[9,11,13]},e.BYTE={id:`Byte`,bit:4,ccBits:[8,16,16]},e.KANJI={id:`Kanji`,bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(e,n){if(!e.ccBits)throw Error(`Invalid mode: `+e);if(!t.isValid(n))throw Error(`Invalid version: `+n);return n>=1&&n<10?e.ccBits[0]:n<27?e.ccBits[1]:e.ccBits[2]},e.getBestModeForData=function(t){return n.testNumeric(t)?e.NUMERIC:n.testAlphanumeric(t)?e.ALPHANUMERIC:n.testKanji(t)?e.KANJI:e.BYTE},e.toString=function(e){if(e&&e.id)return e.id;throw Error(`Invalid mode`)},e.isValid=function(e){return e&&e.bit&&e.ccBits};function r(t){if(typeof t!=`string`)throw Error(`Param is not a string`);switch(t.toLowerCase()){case`numeric`:return e.NUMERIC;case`alphanumeric`:return e.ALPHANUMERIC;case`kanji`:return e.KANJI;case`byte`:return e.BYTE;default:throw Error(`Unknown mode: `+t)}}e.from=function(t,n){if(e.isValid(t))return t;try{return r(t)}catch{return n}}})),Be=o((e=>{var t=Ee(),n=Ne(),r=De(),i=ze(),a=Le(),o=7973,s=t.getBCHDigit(o);function c(t,n,r){for(let i=1;i<=40;i++)if(n<=e.getCapacity(i,r,t))return i}function l(e,t){return i.getCharCountIndicator(e,t)+4}function u(e,t){let n=0;return e.forEach(function(e){let r=l(e.mode,t);n+=r+e.getBitsLength()}),n}function d(t,n){for(let r=1;r<=40;r++)if(u(t,r)<=e.getCapacity(r,n,i.MIXED))return r}e.from=function(e,t){return a.isValid(e)?parseInt(e,10):t},e.getCapacity=function(e,r,o){if(!a.isValid(e))throw Error(`Invalid QR Code version`);o===void 0&&(o=i.BYTE);let s=(t.getSymbolTotalCodewords(e)-n.getTotalCodewordsCount(e,r))*8;if(o===i.MIXED)return s;let c=s-l(o,e);switch(o){case i.NUMERIC:return Math.floor(c/10*3);case i.ALPHANUMERIC:return Math.floor(c/11*2);case i.KANJI:return Math.floor(c/13);case i.BYTE:default:return Math.floor(c/8)}},e.getBestVersionForData=function(e,t){let n,i=r.from(t,r.M);if(Array.isArray(e)){if(e.length>1)return d(e,i);if(e.length===0)return 1;n=e[0]}else n=e;return c(n.mode,n.getLength(),i)},e.getEncodedBits=function(e){if(!a.isValid(e)||e<7)throw Error(`Invalid QR Code version`);let n=e<<12;for(;t.getBCHDigit(n)-s>=0;)n^=o<{var t=Ee(),n=1335,r=21522,i=t.getBCHDigit(n);e.getEncodedBits=function(e,a){let o=e.bit<<3|a,s=o<<10;for(;t.getBCHDigit(s)-i>=0;)s^=n<{var n=ze();function r(e){this.mode=n.NUMERIC,this.data=e.toString()}r.getBitsLength=function(e){return 10*Math.floor(e/3)+(e%3?e%3*3+1:0)},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){let t,n,r;for(t=0;t+3<=this.data.length;t+=3)n=this.data.substr(t,3),r=parseInt(n,10),e.put(r,10);let i=this.data.length-t;i>0&&(n=this.data.substr(t),r=parseInt(n,10),e.put(r,i*3+1))},t.exports=r})),Ue=o(((e,t)=>{var n=ze(),r=`0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:`.split(``);function i(e){this.mode=n.ALPHANUMERIC,this.data=e}i.getBitsLength=function(e){return 11*Math.floor(e/2)+e%2*6},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t+2<=this.data.length;t+=2){let n=r.indexOf(this.data[t])*45;n+=r.indexOf(this.data[t+1]),e.put(n,11)}this.data.length%2&&e.put(r.indexOf(this.data[t]),6)},t.exports=i})),We=o(((e,t)=>{var n=ze();function r(e){this.mode=n.BYTE,this.data=typeof e==`string`?new TextEncoder().encode(e):new Uint8Array(e)}r.getBitsLength=function(e){return e*8},r.prototype.getLength=function(){return this.data.length},r.prototype.getBitsLength=function(){return r.getBitsLength(this.data.length)},r.prototype.write=function(e){for(let t=0,n=this.data.length;t{var n=ze(),r=Ee();function i(e){this.mode=n.KANJI,this.data=e}i.getBitsLength=function(e){return e*13},i.prototype.getLength=function(){return this.data.length},i.prototype.getBitsLength=function(){return i.getBitsLength(this.data.length)},i.prototype.write=function(e){let t;for(t=0;t=33088&&n<=40956)n-=33088;else if(n>=57408&&n<=60351)n-=49472;else throw Error(`Invalid SJIS character: `+this.data[t]+` Make sure your charset is UTF-8`);n=(n>>>8&255)*192+(n&255),e.put(n,13)}},t.exports=i})),Ke=o(((e,t)=>{var n={single_source_shortest_paths:function(e,t,r){var i={},a={};a[t]=0;var o=n.PriorityQueue.make();o.push(t,0);for(var s,c,l,u,d,f,p,m,h;!o.empty();)for(l in s=o.pop(),c=s.value,u=s.cost,d=e[c]||{},d)d.hasOwnProperty(l)&&(f=d[l],p=u+f,m=a[l],h=a[l]===void 0,(h||m>p)&&(a[l]=p,o.push(l,p),i[l]=c));if(r!==void 0&&a[r]===void 0){var g=[`Could not find a path from `,t,` to `,r,`.`].join(``);throw Error(g)}return i},extract_shortest_path_from_predecessor_list:function(e,t){for(var n=[],r=t;r;)n.push(r),e[r],r=e[r];return n.reverse(),n},find_path:function(e,t,r){var i=n.single_source_shortest_paths(e,t,r);return n.extract_shortest_path_from_predecessor_list(i,r)},PriorityQueue:{make:function(e){var t=n.PriorityQueue,r={},i;for(i in e||={},t)t.hasOwnProperty(i)&&(r[i]=t[i]);return r.queue=[],r.sorter=e.sorter||t.default_sorter,r},default_sorter:function(e,t){return e.cost-t.cost},push:function(e,t){var n={value:e,cost:t};this.queue.push(n),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};t!==void 0&&(t.exports=n)})),qe=o((e=>{var t=ze(),n=He(),r=Ue(),i=We(),a=Ge(),o=Re(),s=Ee(),c=Ke();function l(e){return unescape(encodeURIComponent(e)).length}function u(e,t,n){let r=[],i;for(;(i=e.exec(n))!==null;)r.push({data:i[0],index:i.index,mode:t,length:i[0].length});return r}function d(e){let n=u(o.NUMERIC,t.NUMERIC,e),r=u(o.ALPHANUMERIC,t.ALPHANUMERIC,e),i,a;return s.isKanjiModeEnabled()?(i=u(o.BYTE,t.BYTE,e),a=u(o.KANJI,t.KANJI,e)):(i=u(o.BYTE_KANJI,t.BYTE,e),a=[]),n.concat(r,i,a).sort(function(e,t){return e.index-t.index}).map(function(e){return{data:e.data,mode:e.mode,length:e.length}})}function f(e,o){switch(o){case t.NUMERIC:return n.getBitsLength(e);case t.ALPHANUMERIC:return r.getBitsLength(e);case t.KANJI:return a.getBitsLength(e);case t.BYTE:return i.getBitsLength(e)}}function p(e){return e.reduce(function(e,t){let n=e.length-1>=0?e[e.length-1]:null;return n&&n.mode===t.mode?(e[e.length-1].data+=t.data,e):(e.push(t),e)},[])}function m(e){let n=[];for(let r=0;r{var t=Ee(),n=De(),r=Oe(),i=ke(),a=Ae(),o=je(),s=Me(),c=Ne(),l=Ie(),u=Be(),d=Ve(),f=ze(),p=qe();function m(e,t){let n=e.size,r=o.getPositions(t);for(let t=0;t=0&&t<=6&&(r===0||r===6)||r>=0&&r<=6&&(t===0||t===6)||t>=2&&t<=4&&r>=2&&r<=4?e.set(i+t,a+r,!0,!0):e.set(i+t,a+r,!1,!0))}}function h(e){let t=e.size;for(let n=8;n>t&1)==1,e.set(i,a,o,!0),e.set(a,i,o,!0)}function v(e,t,n){let r=e.size,i=d.getEncodedBits(t,n),a,o;for(a=0;a<15;a++)o=(i>>a&1)==1,a<6?e.set(a,8,o,!0):a<8?e.set(a+1,8,o,!0):e.set(r-15+a,8,o,!0),a<8?e.set(8,r-a-1,o,!0):a<9?e.set(8,15-a-1+1,o,!0):e.set(8,15-a-1,o,!0);e.set(r-8,8,1,!0)}function y(e,t){let n=e.size,r=-1,i=n-1,a=7,o=0;for(let s=n-1;s>0;s-=2)for(s===6&&s--;;){for(let n=0;n<2;n++)if(!e.isReserved(i,s-n)){let r=!1;o>>a&1)==1),e.set(i,s-n,r),a--,a===-1&&(o++,a=7)}if(i+=r,i<0||n<=i){i-=r,r=-r;break}}}function b(e,n,i){let a=new r;i.forEach(function(t){a.put(t.mode.bit,4),a.put(t.getLength(),f.getCharCountIndicator(t.mode,e)),t.write(a)});let o=(t.getSymbolTotalCodewords(e)-c.getTotalCodewordsCount(e,n))*8;for(a.getLengthInBits()+4<=o&&a.put(0,4);a.getLengthInBits()%8!=0;)a.putBit(0);let s=(o-a.getLengthInBits())/8;for(let e=0;e=7&&_(d,n),y(d,l),isNaN(a)&&(a=s.getBestMask(d,v.bind(null,d,r))),s.applyMask(a,d),v(d,r,a),{modules:d,version:n,errorCorrectionLevel:r,maskPattern:a,segments:o}}e.create=function(e,r){if(e===void 0||e===``)throw Error(`No input text`);let i=n.M,a,o;return r!==void 0&&(i=n.from(r.errorCorrectionLevel,n.M),a=u.from(r.version),o=s.from(r.maskPattern),r.toSJISFunc&&t.setToSJISFunction(r.toSJISFunc)),S(e,a,i,o)}})),Ye=o((e=>{function t(e){if(typeof e==`number`&&(e=e.toString()),typeof e!=`string`)throw Error(`Color should be defined as hex string`);let t=e.slice().replace(`#`,``).split(``);if(t.length<3||t.length===5||t.length>8)throw Error(`Invalid hex color: `+e);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(e){return[e,e]}))),t.length===6&&t.push(`F`,`F`);let n=parseInt(t.join(``),16);return{r:n>>24&255,g:n>>16&255,b:n>>8&255,a:n&255,hex:`#`+t.slice(0,6).join(``)}}e.getOptions=function(e){e||={},e.color||(e.color={});let n=e.margin===void 0||e.margin===null||e.margin<0?4:e.margin,r=e.width&&e.width>=21?e.width:void 0,i=e.scale||4;return{width:r,scale:r?4:i,margin:n,color:{dark:t(e.color.dark||`#000000ff`),light:t(e.color.light||`#ffffffff`)},type:e.type,rendererOpts:e.rendererOpts||{}}},e.getScale=function(e,t){return t.width&&t.width>=e+t.margin*2?t.width/(e+t.margin*2):t.scale},e.getImageWidth=function(t,n){let r=e.getScale(t,n);return Math.floor((t+n.margin*2)*r)},e.qrToImageData=function(t,n,r){let i=n.modules.size,a=n.modules.data,o=e.getScale(i,r),s=Math.floor((i+r.margin*2)*o),c=r.margin*o,l=[r.color.light,r.color.dark];for(let e=0;e=c&&n>=c&&e{var t=Ye();function n(e,t,n){e.clearRect(0,0,t.width,t.height),t.style||={},t.height=n,t.width=n,t.style.height=n+`px`,t.style.width=n+`px`}function r(){try{return document.createElement(`canvas`)}catch{throw Error(`You need to specify a canvas element`)}}e.render=function(e,i,a){let o=a,s=i;o===void 0&&(!i||!i.getContext)&&(o=i,i=void 0),i||(s=r()),o=t.getOptions(o);let c=t.getImageWidth(e.modules.size,o),l=s.getContext(`2d`),u=l.createImageData(c,c);return t.qrToImageData(u.data,e,o),n(l,s,c),l.putImageData(u,0,0),s},e.renderToDataURL=function(t,n,r){let i=r;i===void 0&&(!n||!n.getContext)&&(i=n,n=void 0),i||={};let a=e.render(t,n,i),o=i.type||`image/png`,s=i.rendererOpts||{};return a.toDataURL(o,s.quality)}})),Ze=o((e=>{var t=Ye();function n(e,t){let n=e.a/255,r=t+`="`+e.hex+`"`;return n<1?r+` `+t+`-opacity="`+n.toFixed(2).slice(1)+`"`:r}function r(e,t,n){let r=e+t;return n!==void 0&&(r+=` `+n),r}function i(e,t,n){let i=``,a=0,o=!1,s=0;for(let c=0;c0&&l>0&&e[c-1]||(i+=o?r(`M`,l+n,.5+u+n):r(`m`,a,0),a=0,o=!1),l+1`:``,d=``,f=`viewBox="0 0 `+l+` `+l+`"`,p=``+u+d+` `;return typeof a==`function`&&a(null,p),p}})),Qe=o((e=>{var t=Te(),n=Je(),r=Xe(),i=Ze();function a(e,r,i,a,o){let s=[].slice.call(arguments,1),c=s.length,l=typeof s[c-1]==`function`;if(!l&&!t())throw Error(`Callback required as last argument`);if(l){if(c<2)throw Error(`Too few arguments provided`);c===2?(o=i,i=r,r=a=void 0):c===3&&(r.getContext&&o===void 0?(o=a,a=void 0):(o=a,a=i,i=r,r=void 0))}else{if(c<1)throw Error(`Too few arguments provided`);return c===1?(i=r,r=a=void 0):c===2&&!r.getContext&&(a=i,i=r,r=void 0),new Promise(function(t,o){try{t(e(n.create(i,a),r,a))}catch(e){o(e)}})}try{let t=n.create(i,a);o(null,e(t,r,a))}catch(e){o(e)}}e.create=n.create,e.toCanvas=a.bind(null,r.render),e.toDataURL=a.bind(null,r.renderToDataURL),e.toString=a.bind(null,function(e,t,n){return i.render(e,n)})})),$e=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),et=o(((e,t)=>{t.exports=$e()})),tt=g(),nt=c(Qe(),1),j=et();function rt({title:e,children:t,onClose:n,wide:r=!1}){return(0,j.jsx)(`div`,{className:`modal-backdrop`,role:`presentation`,onMouseDown:e=>e.target===e.currentTarget&&n(),children:(0,j.jsxs)(`section`,{className:`modal-card ${r?`modal-wide`:``}`,role:`dialog`,"aria-modal":`true`,"aria-label":e,children:[(0,j.jsxs)(`header`,{className:`modal-header`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`听风助手`}),(0,j.jsx)(`h2`,{children:e})]}),(0,j.jsx)(`button`,{className:`icon-button`,onClick:n,"aria-label":`关闭`,children:(0,j.jsx)(we,{size:20})})]}),(0,j.jsx)(`div`,{className:`modal-content`,children:t})]})})}var it=(e,t)=>Array.from({length:9},(n,r)=>({id:t+r,code:`${r+1}${e===`万`?`m`:e===`筒`?`p`:`s`}`,name:`${r+1}${e}`,shortName:String(r+1),suit:e,rank:r+1,count:4})),at=[...it(`万`,0),...it(`筒`,9),...it(`条`,18),...[`东`,`南`,`西`,`北`,`中`,`发`,`白`].map((e,t)=>({id:27+t,code:`${t+1}z`,name:`${e}风牌`.replace(`中风牌`,`红中`).replace(`发风牌`,`发财`).replace(`白风牌`,`白板`),shortName:e,suit:`字`,rank:t+1,count:4}))];function ot(e,t=at){return t.find(t=>t.id===e)?.name??`未知牌${e}`}function st(e){return[...e].sort((e,t)=>e-t)}function ct(e){let t=Array(34).fill(0);for(let n of e)n>=0&&n<34&&(t[n]+=1);return t}function lt(e){return e>=27}function ut(e){return e<27&&(e%9==0||e%9==8)}function dt(e){return lt(e)||ut(e)}function ft(e){return e<9?`万`:e<18?`筒`:e<27?`条`:`字`}function M({tile:e,definitions:t,small:n,selected:r,recommended:i,className:a=``,...o}){let s=t.find(t=>t.id===e),c=s?.suit===`万`?`tile-wan`:s?.suit===`筒`?`tile-tong`:s?.suit===`条`?`tile-tiao`:`tile-honor`;return(0,j.jsxs)(`button`,{type:`button`,className:`mahjong-tile ${c} ${n?`tile-small`:``} ${r?`tile-selected`:``} ${a}`,"aria-label":ot(e,t),...o,children:[i?(0,j.jsx)(`span`,{className:`tile-rank`,children:i}):null,s?.suit===`字`?(0,j.jsx)(`span`,{className:`tile-honor-char`,children:s.shortName}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`tile-number`,children:s?.rank}),(0,j.jsx)(`span`,{className:`tile-suit`,children:s?.suit})]})]})}function pt({definitions:e,visibleCounts:t,onPick:n,title:r=`选择一张牌`}){return(0,j.jsxs)(`div`,{className:`tile-picker`,children:[(0,j.jsx)(`div`,{className:`field-label`,children:r}),[`万`,`筒`,`条`,`字`].map(r=>(0,j.jsxs)(`div`,{className:`picker-row`,children:[(0,j.jsx)(`span`,{className:`picker-suit-label`,children:r}),(0,j.jsx)(`div`,{className:`picker-tiles`,children:e.filter(e=>e.suit===r).map(r=>(0,j.jsx)(M,{tile:r.id,definitions:e,small:!0,disabled:(t?.[r.id]??0)>=r.count,onClick:()=>n(r.id)},r.id))})]},r))]})}var mt=[`self`,`right`,`opposite`,`left`],ht={self:`我`,right:`下家`,opposite:`对家`,left:`上家`};function gt(e){return mt[(mt.indexOf(e)+1)%mt.length]}function _t(e){let t=e.ruleSnapshot.setup.startingHandSize*e.ruleSnapshot.setup.playerCount+1;return{hand:st(e.initialHand),melds:{self:[],right:[],opposite:[],left:[]},discards:{self:[],right:[],opposite:[],left:[]},currentPlayer:e.metadata.dealer,phase:`出牌`,wallRemaining:Math.max(0,e.ruleSnapshot.setup.wallSize-t),turn:0,ended:!1,seatWind:e.metadata.seatWind,prevailingWind:e.metadata.prevailingWind,afterKongDraw:!1,robbingKongOpportunity:!1,actionHistory:[]}}function vt(e,t){let n=[...e];for(let e of t){let t=n.indexOf(e);if(t<0)throw Error(`手牌中没有足够的${ot(e)}。`);n.splice(t,1)}return n}function yt(e,t,n){if(e.ended)throw Error(`本局已经结束,不能继续记录动作。`);let r=structuredClone(e);if(!mt.includes(`player`in t?t.player:`self`))throw Error(`玩家座位无效。`);switch(t.type){case`摸牌`:if(r.wallRemaining<=0)throw Error(`牌墙已经没有剩余牌。`);if(--r.wallRemaining,r.currentPlayer=t.player,r.phase=`出牌`,e.phase!==`补牌`&&(r.afterKongDraw=!1),r.robbingKongOpportunity=!1,t.player===`self`){if(t.tile===void 0)throw Error(`自己的摸牌必须录入具体牌张。`);r.hand.push(t.tile),r.hand=st(r.hand)}break;case`出牌`:t.player===`self`&&(r.hand=vt(r.hand,[t.tile])),r.discards[t.player].push({tile:t.tile,turn:r.turn,tsumogiri:t.tsumogiri}),r.lastDiscard={player:t.player,tile:t.tile},r.currentPlayer=gt(t.player),r.phase=`响应`,r.turn+=1,r.afterKongDraw=!1,r.robbingKongOpportunity=!1;break;case`鸣牌`:if(!t.meld.tiles.length)throw Error(`鸣牌必须包含牌张。`);if(r.melds[t.player].push(t.meld),t.meld.claimedTile!==void 0&&t.meld.from){let e=r.discards[t.meld.from],n=-1;for(let r=e.length-1;r>=0;--r)if(e[r].tile===t.meld.claimedTile){n=r;break}n>=0&&e.splice(n,1)}if(t.player===`self`){let e=[...t.meld.tiles];if(t.meld.claimedTile!==void 0){let n=e.indexOf(t.meld.claimedTile);n>=0&&e.splice(n,1)}r.hand=vt(r.hand,e)}r.currentPlayer=t.player,r.phase=t.meld.kind.includes(`杠`)?`补牌`:`出牌`,r.afterKongDraw=t.meld.kind.includes(`杠`),r.robbingKongOpportunity=t.meld.kind===`补杠`;break;case`过`:r.currentPlayer=gt(t.player),r.phase=`摸牌`;break;case`和牌`:r.ended=!0,r.winner=t.player,r.phase=`结束`;break;case`结束`:r.ended=!0,r.phase=`结束`}if(Ct(r).some(e=>e>4))throw Error(`公开信息中出现了同一种牌超过四张,请检查录入。`);if(r.hand.length>n.source.setup.dealerStartingHandSize+1)throw Error(`手牌数量异常,请先检查摸打顺序。`);return r.actionHistory=[...r.actionHistory??[],t],r}function bt(e,t=e.actions.length){let n={source:e.ruleSnapshot,tileById:new Map(e.ruleSnapshot.tileSet.map(e=>[e.id,e])),nodeById:new Map(e.ruleSnapshot.flow.nodes.map(e=>[e.id,e])),transitionsFrom:new Map};return e.actions.slice(0,t).reduce((e,t)=>yt(e,t,n),_t(e))}function xt(e,t=0){let n=8,r=new Map,i=(a,o,s,c)=>{for(;a<34&&e[a]===0;)a+=1;if(a>=34){let e=o+t,r=Math.min(c,Math.max(0,4-e));n=Math.min(n,8-e*2-r-Math.min(s,1));return}let l=`${e.join(``)}:${a}:${o}:${s}:${c}`,u=r.get(l);u!==void 0&&u<=n||(r.set(l,n),e[a]>=3&&(e[a]-=3,i(a,o+1,s,c),e[a]+=3),a<27&&a%9<=6&&e[a+1]&&e[a+2]&&(e[a]--,e[a+1]--,e[a+2]--,i(a,o+1,s,c),e[a]++,e[a+1]++,e[a+2]++),e[a]>=2&&(e[a]-=2,s===0&&i(a,o,1,c),i(a,o,s,c+1),e[a]+=2),a<27&&a%9<=7&&e[a+1]&&(e[a]--,e[a+1]--,i(a,o,s,c+1),e[a]++,e[a+1]++),a<27&&a%9<=6&&e[a+2]&&(e[a]--,e[a+2]--,i(a,o,s,c+1),e[a]++,e[a+2]++),e[a]--,i(a,o,s,c),e[a]++)};return i(0,0,0,0),n}function St(e,t=0){let n=ct(e),r=xt([...n],t);if(t)return r;let i=n.filter(Boolean).length,a=6-n.filter(e=>e>=2).length+Math.max(0,7-i),o=n.filter((e,t)=>e>0&&dt(t)).length,s=+!!n.some((e,t)=>e>=2&&dt(t)),c=13-o-s;return Math.min(r,a,c)}function Ct(e){let t=[...e.hand];for(let n of mt)t.push(...e.discards[n].map(e=>e.tile)),t.push(...e.melds[n].flatMap(e=>e.tiles));return ct(t)}function wt(e,t,n){let r=St(e,n),i=Ct({...t,hand:e}),a=[];for(let t=0;t<34;t+=1){let o=Math.max(0,4-i[t]);o&&St([...e,t],n){let o=e.findIndex(e=>e>0);if(o<0){i.length===t&&n.push({pair:r,groups:structuredClone(i)});return}i.length>=t||(e[o]>=3&&(e[o]-=3,i.push({kind:`刻子`,tiles:[o,o,o]}),a(),i.pop(),e[o]+=3),o<27&&o%9<=6&&e[o+1]&&e[o+2]&&(e[o]--,e[o+1]--,e[o+2]--,i.push({kind:`顺子`,tiles:[o,o+1,o+2]}),a(),i.pop(),e[o]++,e[o+1]++,e[o+2]++))};a(),e[r]+=2}return n}function Et(e,t,n){return{name:e,fan:t,reason:n}}var Dt={大四喜:[`小四喜`,`三风刻`,`圈风刻`,`门风刻`,`碰碰和`,`幺九刻`],大三元:[`小三元`,`双箭刻`,`箭刻`],四杠:[`三杠`,`双明杠`,`双暗杠`,`明杠`,`暗杠`,`碰碰和`,`单钓将`],十三幺:[`五门齐`,`全带幺`,`混幺九`,`门前清`,`不求人`,`自摸`,`单钓将`,`幺九刻`],连七对:[`七对`,`清一色`,`门前清`,`单钓将`],清幺九:[`混幺九`,`碰碰和`,`全带幺`,`无字`,`幺九刻`],字一色:[`混幺九`,`碰碰和`,`全带幺`,`幺九刻`],四暗刻:[`三暗刻`,`双暗刻`,`碰碰和`,`门前清`,`不求人`],清一色:[`混一色`,`无字`],七对:[`门前清`,`单钓将`],碰碰和:[`平和`],不求人:[`门前清`,`自摸`],全求人:[`单钓将`]};function Ot(e){let t=new Set(e.map(e=>e.name)),n=new Set;for(let[e,r]of Object.entries(Dt))t.has(e)&&r.forEach(e=>n.add(e));return e.filter(e=>!n.has(e.name))}function kt(e){return e.reduce((e,t)=>e+t,0)===14&&e.every(e=>e===0||e===2)}function At(e){let t=e.map((e,t)=>e>0&&dt(t)?t:-1).filter(e=>e>=0);return t.length===13&&t.some(t=>e[t]>=2)&&e.every((e,t)=>e===0||dt(t))}var jt=[[0,3,6,10,13,16,20,23,26],[0,3,6,11,14,17,19,22,25],[1,4,7,9,12,15,20,23,26],[1,4,7,11,14,17,18,21,24],[2,5,8,9,12,15,19,22,25],[2,5,8,10,13,16,18,21,24]];function Mt(e){if(e.reduce((e,t)=>e+t,0)!==14||e.some(e=>e>1))return;let t=e.map((e,t)=>e?t:-1).filter(e=>e>=0),n=t.filter(e=>e>=27).length,r=t.filter(e=>e<27);if(jt.some(e=>r.every(t=>e.includes(t))))return n===7?`七星不靠`:n>0?`全不靠`:void 0}function Nt(e,t){return t>1?!1:jt.some(n=>{if(!n.every(t=>e[t]>=1))return!1;let r=[...e];return n.forEach(e=>r[e]--),Tt(r,1-t).length>0})}function Pt(e,t,n,r=!1){let i=e.hand.length%3==1?[...e.hand,t]:[...e.hand],a=ct(i),o=e.melds.self,s=Tt([...a],4-o.length),c=o.length===0&&kt(a),l=o.length===0&&At(a),u=o.length===0?Mt(a):void 0,d=Nt(a,o.length);if(!(s.length>0||c||l||u||d))return{validShape:!1,legalWin:!1,totalFan:0,fans:[],message:`当前牌形尚未完成和牌结构。`};let f=[...i,...o.flatMap(e=>e.tiles)],p=ct(f),m=[],h=(e,t,n)=>{m.some(t=>t.name===e)||m.push(Et(e,t,n))},g=new Set(f.filter(e=>e<27).map(ft)),_=f.some(lt),v=new Set;for(let e of o)e.kind!==`吃`&&v.add(e.tiles[0]);let y=s[0];y?.groups.filter(e=>e.kind===`刻子`).forEach(e=>v.add(e.tiles[0]));let b=o.filter(e=>e.kind.includes(`杠`)).length,x=o.filter(e=>e.kind===`暗杠`).length,S=o.filter(e=>e.kind!==`暗杠`).length;if(l&&h(`十三幺`,88,`十三种幺九字牌齐全并有一对将牌。`),u&&h(u,u===`七星不靠`?24:12,u===`七星不靠`?`七种字牌齐全,另有七张互不相连的组合龙牌。`:`序数牌互不相连,并与字牌构成全不靠。`),d&&h(`组合龙`,12,`三种花色分别组成一四七、二五八、三六九的组合。`),c){let e=a.map((e,t)=>e===2?t:-1).filter(e=>e>=0),t=e.length===7&&e.every((t,n)=>n===0||t===e[0]+n)&&e[0]<27&&e[6]%9==e[0]%9+6;h(t?`连七对`:`七对`,t?88:24,t?`同一花色七个连续对子。`:`门清状态下由七个对子组成。`)}f.every(e=>e>=27)&&h(`字一色`,64,`全部牌都是字牌。`),f.every(e=>ut(e))?h(`清幺九`,64,`全部牌都是序数牌的一或九。`):f.every(dt)&&h(`混幺九`,32,`全部牌均为幺九牌或字牌。`),f.every(e=>[19,20,21,23,25,32].includes(e))&&h(`绿一色`,88,`全部牌均为绿色牌。`);let C=new Set([9,10,11,12,13,16,17,19,21,22,23,25,26,33]);if(f.every(e=>C.has(e))&&h(`推不倒`,8,`全部牌的图案在旋转后仍可识别。`),o.length===0&&g.size===1&&!_){let e=Math.floor(f[0]/9)*9,t=p.slice(e,e+9),n=[3,1,1,1,1,1,1,1,3];t.every((e,t)=>e>=n[t])&&h(`九莲宝灯`,88,`门清同一花色具有一一一二三四五六七八九九九,并增加其中任意一张。`)}g.size===1&&!_?h(`清一色`,24,`全部牌属于同一种序数牌。`):g.size===1&&_&&h(`混一色`,6,`由一种序数牌和字牌组成。`),_||h(`无字`,1,`和牌中没有字牌。`),f.every(e=>!dt(e))&&h(`断幺`,2,`和牌中没有幺九牌和字牌。`),f.every(e=>lt(e)||e%9>=5)&&h(`大于五`,12,`序数牌均大于五,并可包含字牌。`),f.every(e=>lt(e)||e%9<=3)&&h(`小于五`,12,`序数牌均小于五,并可包含字牌。`),f.every(e=>lt(e)||[0,1,2].includes(e%9))&&h(`全小`,24,`序数牌只使用一、二、三。`),f.every(e=>lt(e)||[3,4,5].includes(e%9))&&h(`全中`,24,`序数牌只使用四、五、六。`),f.every(e=>lt(e)||[6,7,8].includes(e%9))&&h(`全大`,24,`序数牌只使用七、八、九。`);let w=[27,28,29,30].filter(e=>v.has(e)),ee=[31,32,33].filter(e=>v.has(e));w.length===4?h(`大四喜`,88,`四种风牌均组成刻子或杠。`):w.length===3&&y&&y.pair>=27&&y.pair<=30?h(`小四喜`,64,`三副风刻加一对风牌作将。`):w.length===3&&h(`三风刻`,12,`三种风牌组成刻子或杠。`),ee.length===3?h(`大三元`,88,`中、发、白均组成刻子或杠。`):ee.length===2&&y&&y.pair>=31?h(`小三元`,64,`两副箭刻加一对箭牌作将。`):ee.length===2?h(`双箭刻`,6,`两种箭牌组成刻子或杠。`):ee.length===1&&h(`箭刻`,2,`一种箭牌组成刻子或杠。`);let te={东:27,南:28,西:29,北:30};e.prevailingWind&&v.has(te[e.prevailingWind])&&h(`圈风刻`,2,`${e.prevailingWind}风为圈风并组成刻子或杠。`),e.seatWind&&v.has(te[e.seatWind])&&h(`门风刻`,2,`${e.seatWind}风为门风并组成刻子或杠。`),b===4?h(`四杠`,88,`和牌中有四副杠。`):b===3?h(`三杠`,32,`和牌中有三副杠。`):b===2?h(x===2?`双暗杠`:`双明杠`,x===2?6:4,`和牌中有两副杠。`):b===1&&h(x?`暗杠`:`明杠`,x?2:1,x?`有一副暗杠。`:`有一副明杠。`);let T=y&&y.groups.every(e=>e.kind===`刻子`)&&o.every(e=>e.kind!==`吃`);T&&h(`碰碰和`,6,`四副面子均为刻子或杠。`),T&&f.every(e=>e<27&&[1,3,5,7].includes(e%9))&&h(`全双刻`,24,`全部刻子和将牌均由二、四、六、八组成。`);let E=(y?.groups.filter(e=>e.kind===`刻子`).length??0)+x;if(E>=4?h(`四暗刻`,64,`四副刻子或杠均未借用他家舍牌。`):E===3?h(`三暗刻`,16,`有三副暗刻或暗杠。`):E===2&&h(`双暗刻`,2,`有两副暗刻或暗杠。`),S===0&&!r&&h(`门前清`,2,`没有吃、碰或明杠,以荣和完成。`),S===0&&r?h(`不求人`,4,`没有吃、碰或明杠,并且自摸和牌。`):r&&h(`自摸`,1,`自己摸进和牌。`),y&&y.groups.every(e=>e.kind===`顺子`)&&y.pair<31&&h(`平和`,2,`四副顺子,序数牌作将。`),y)if(y.pair===t)h(`单钓将`,1,`和牌张只用于组成将牌。`);else{let e=y.groups.find(e=>e.kind===`顺子`&&e.tiles.includes(t));e?.tiles[1]===t?h(`坎张`,1,`和牌张位于顺子中间。`):e&&(e.tiles[0]%9==0&&t===e.tiles[2]||e.tiles[0]%9==6&&t===e.tiles[0])&&h(`边张`,1,`以三完成一二三,或以七完成七八九。`)}if(y){let e=[...y.groups.filter(e=>e.kind===`顺子`).map(e=>e.tiles[0]),...o.filter(e=>e.kind===`吃`).map(e=>Math.min(...e.tiles))],t=new Map;e.forEach(e=>t.set(e,(t.get(e)??0)+1)),[...t.values()].some(e=>e>=4)?h(`一色四同顺`,48,`同一花色同一序数的顺子有四副。`):[...t.values()].some(e=>e>=3)?h(`一色三同顺`,24,`同一花色同一序数的顺子有三副。`):[...t.values()].some(e=>e>=2)&&h(`一般高`,1,`同一花色有两副相同顺子。`);for(let e=0;e<=6;e++){let n=[e,9+e,18+e].filter(e=>t.has(e));n.length===3?h(`三色三同顺`,8,`三种花色均有相同序数的顺子。`):n.length===2&&h(`喜相逢`,1,`两种花色有相同序数的顺子。`)}for(let n of[0,9,18]){[0,3,6].every(e=>t.has(n+e))&&h(`清龙`,16,`同一花色的一二三、四五六、七八九齐全。`),t.has(n)&&t.has(n+6)&&h(`老少副`,1,`同一花色有一二三和七八九两副顺子。`),[0,1,2,3].some(e=>t.has(n+e)&&t.has(n+e+3))&&h(`连六`,1,`同一花色有六张连续序数牌组成的两副顺子。`);let r=e.filter(e=>Math.floor(e/9)===n/9).map(e=>e%9).sort((e,t)=>e-t);for(let e of[1,2])r.some(t=>[t,t+e,t+e*2,t+e*3].every(e=>r.includes(e)))?h(`一色四步高`,32,`同一花色四副顺子依次递增${e}。`):r.some(t=>[t,t+e,t+e*2].every(e=>r.includes(e)))&&h(`一色三步高`,16,`同一花色三副顺子依次递增${e}。`)}let n=g.size===1&&!_?Math.floor(f[0]/9)*9:-1;n>=0&&y.pair===n+4&&(t.get(n)??0)>=2&&(t.get(n+6)??0)>=2&&h(`一色双龙会`,64,`同一花色两副一二三、两副七八九,以五作将。`);for(let e of[0,9,18]){let n=[0,9,18].filter(t=>t!==e);y.pair===e+4&&n.every(e=>t.has(e)&&t.has(e+6))&&h(`三色双龙会`,16,`两种花色各有一二三与七八九,第三种花色的五作将。`)}let r=[0,3,6].map(t=>e.filter(e=>e%9===t));r.every(e=>e.length)&&new Set(r.map(e=>Math.floor(e[0]/9))).size===3&&h(`花龙`,8,`三种花色分别组成一二三、四五六、七八九。`);let i=[...y.groups.map(e=>e.tiles),...o.map(e=>e.tiles.slice(0,3))];dt(y.pair)&&i.every(e=>e.some(dt))&&h(`全带幺`,4,`每副面子及将牌都含幺九牌或字牌。`),y.pair<27&&y.pair%9==4&&i.every(e=>e.some(e=>e<27&&e%9==4))&&h(`全带五`,16,`每副面子及将牌都含五。`)}for(let e=0;e<9;e++){let t=[e,e+9,e+18].filter(e=>v.has(e));t.length===3?h(`三同刻`,16,`三种花色相同序数均组成刻子或杠。`):t.length===2&&h(`双同刻`,2,`两种花色相同序数组成刻子或杠。`)}for(let e of[0,9,18]){let t=[...v].filter(t=>t>=e&&tt-e).sort((e,t)=>e-t);t.some(e=>[e,e+1,e+2,e+3].every(e=>t.includes(e)))?h(`一色四节高`,48,`同一花色四副刻子序数连续。`):t.some(e=>[e,e+1,e+2].every(e=>t.includes(e)))&&h(`一色三节高`,24,`同一花色三副刻子序数连续。`)}for(let e=0;e<=6;e++){let t=[e,e+1,e+2].map(e=>[e,e+9,e+18].filter(e=>v.has(e)));t.every(e=>e.length)&&new Set(t.map(e=>Math.floor(e[0]/9))).size===3&&h(`三色三节高`,8,`三种花色各有一副刻子,序数依次递增。`)}if(y){let e=[0,9,18].map(e=>[...y.groups.filter(t=>t.kind===`顺子`&&Math.floor(t.tiles[0]/9)===e/9).map(e=>e.tiles[0]%9),...o.filter(t=>t.kind===`吃`&&Math.floor(Math.min(...t.tiles)/9)===e/9).map(e=>Math.min(...e.tiles)%9)]);for(let t=0;t<=4;t++)[[0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]].some(n=>n.every((n,r)=>e[n].includes(t+r)))&&h(`三色三步高`,6,`三种花色各有一副顺子,序数依次递增。`)}g.size===3&&f.some(e=>e>=27&&e<=30)&&f.some(e=>e>=31)&&h(`五门齐`,6,`万、筒、条、风牌和箭牌五类齐全。`),S===4&&!r&&h(`全求人`,6,`四副面子均借牌完成,以单钓荣和。`),Ct(e)[t]>=3&&h(`和绝张`,4,`和进该牌种最后一张可见牌。`),e.wallRemaining===0&&h(r?`妙手回春`:`海底捞月`,8,r?`摸牌墙最后一张牌自摸和牌。`:`和牌墙最后一张摸牌所打出的牌。`),r&&e.afterKongDraw&&h(`杠上开花`,8,`开杠补牌后自摸和牌。`),!r&&e.robbingKongOpportunity&&h(`抢杠和`,8,`和他家补杠所用的牌。`),new Set(f.filter(e=>e<27).map(ft)).size===2&&h(`缺一门`,1,`序数牌中缺少一种花色。`);for(let e of v)dt(e)&&h(`幺九刻`,1,`${ot(e)}组成刻子或杠。`);for(let e of p)if(e===4&&b===0){h(`四归一`,2,`四张相同牌未组成杠,分别用于和牌结构。`);break}let ne=Ot(m).sort((e,t)=>t.fan-e.fan);ne.length||(ne=[Et(`无番和`,8,`和牌结构未包含规则中的其他番种。`)]);let re=ne.reduce((e,t)=>e+t.fan,0),ie=n.setup.minimumWinningFan;return{validShape:!0,legalWin:re>=ie,totalFan:re,fans:ne,message:re>=ie?`当前牌形共 ${re} 番,达到 ${ie} 分和牌门槛。`:`当前仅 ${re} 番,尚未达到 ${ie} 分和牌门槛。`}}function Ft(e){let t=mt.filter(e=>e!==`self`),n=Ct(e);return t.map(t=>{let r=e.discards[t],i=e.melds[t],a=(e.actionHistory??[]).filter(e=>`player`in e&&e.player===t),o=r.slice(-5),s=o.filter(e=>e.tsumogiri===!0).length,c=o.filter(e=>e.tsumogiri===!1).length,l=new Map;i.forEach(e=>{let t=ft(e.tiles[0]);l.set(t,(l.get(t)??0)+1)});let u=new Map;r.forEach(e=>{let t=ft(e.tile);u.set(t,(u.get(t)??0)+1)});let d=[...l.entries()].filter(([,e])=>e>=1).sort((e,t)=>t[1]-e[1]).map(([e])=>e);if(!d.length&&r.length>=5){let e=[`万`,`筒`,`条`];e.sort((e,t)=>(u.get(e)??0)-(u.get(t)??0)),(u.get(e[0])??0)+2<=(u.get(e[2])??0)&&d.push(e[0])}let f=[];i.length&&f.push(`已在第 ${Math.max(1,r.length)} 巡前后形成 ${i.length} 副副露。`),d.length&&f.push(`公开动作显示可能偏向${d.join(`、`)}牌。`),s>=3&&f.push(`最近 ${s} 次为摸切,手牌结构可能已经稳定。`),c>=2&&f.push(`最近仍有 ${c} 次手切,牌形处于调整中。`),r.length||f.push(`尚无舍牌,无法建立明确安全边界。`);let p=i.filter(e=>e.tiles[0]>=27).length,m=.08+i.length*.14+p*.055+Math.min(.12,e.turn*.004);s>=3&&(m+=.08),d.length&&i.length>=2&&(m+=.07),m=Math.min(.92,m);let h=new Set(r.map(e=>e.tile)),g=new Set(r.filter(e=>e.tsumogiri===!1).map(e=>e.tile)),_=Array.from({length:34},(e,t)=>{if(h.has(t))return .12;let r=1;return d.includes(ft(t))&&(r*=1.75),g.has(t)&&(r*=.45),lt(t)&&p&&(r*=1.25),r*=Math.max(.25,1-n[t]*.2),r}),v=Array.from({length:34},(e,t)=>{if(h.has(t))return .012;let i=.045+m*.22;if(d.includes(ft(t))&&(i+=.075),lt(t))i+=n[t]===0?.025:-n[t]*.018;else{let e=t%9;e===0||e===8?i-=.035:e===4&&(i+=.025),(h.has(t-3)||h.has(t+3))&&(i-=.028),r.some(e=>Math.abs(e.tile-t)===1&&ft(e.tile)===ft(t))&&(i-=.012)}return i-=n[t]*.018,Math.max(.01,Math.min(.62,i))}),y=s>=3?`连续摸切,牌形可能已经固定`:c>=2?`持续手切,仍在调整牌形`:i.length>=2?`多副露进攻,威胁正在上升`:a.length?`信息有限,按牌河逐巡更新`:`尚无有效历史信息`;return{player:t,threat:m,likelySuits:d,recentPattern:y,evidence:f,tileRisk:v,holdingWeights:_}})}function It(e,t){let n=t.reduce((t,n)=>t*(1-n.tileRisk[e]),1);return Math.min(.78,1-n)}function Lt(e,t=[]){let n=[0,1,2].map(t=>e.filter(e=>e>=t*9&&ee>=2).length,o=ct(e),s=8;a>=5&&t.length===0&&(s=Math.max(s,24)),e.length&&i+r>=e.length-1&&(s=Math.max(s,r?10:24)),e.length&&e.every(dt)&&(s=Math.max(s,32));let c=o.filter((e,t)=>e>0&&dt(t)).length;t.length===0&&c>=10&&(s=Math.max(s,40+(c-10)*12)),e.every(e=>!dt(e))&&(s=Math.max(s,8));let l=[31,32,33].filter(e=>o[e]>=2||t.some(t=>t.tiles[0]===e)).length;l>=2&&(s=Math.max(s,l===3?64:14));let u=t.filter(e=>e.kind.includes(`杠`)).length;return u>=2&&(s=Math.max(s,u===4?88:u===3?32:10)),Math.min(88,s)}function Rt(e,t,n,r){let i=24+t*1.7,a=r.reduce((e,t)=>{let r=8+t.threat*22+t.likelySuits.length*3;return e+t.tileRisk[n]*(8+r)},0);return e*i-a}function zt(e,t){let n=performance.now(),r=e.melds.self.length,i=[],a=Ft(e);if(e.hand.length%3==2){let n=new Set;for(let o of e.hand){if(n.has(o))continue;n.add(o);let s=vt(e.hand,[o]),c=St(s,r),l=wt(s,e,r),u=l.reduce((e,t)=>e+t.remaining,0),d=It(o,a),f=Math.max(t.setup.minimumWinningFan,Lt(s,e.melds.self)),p=Math.max(.01,Math.min(.92,.52-c*.13+u*.009-e.turn*.003)),m=Rt(p,f,o,a),h=m,g=[...a].sort((e,t)=>t.tileRisk[o]-e.tileRisk[o])[0],_=[`按预计 ${f.toFixed(1)} 番、和牌概率与三家历史放铳风险折算,当前期望净得分约 ${m>=0?`+`:``}${m.toFixed(1)}。`,c.22?`综合完整动作顺序,这张牌对${ht[g.player]}尤其危险。`:`三家历史模型判断风险中等;${ht[g.player]}当前威胁最高。`,`已纳入三家共 ${a.reduce((t,n)=>t+e.discards[n.player].length,0)} 次舍牌、${a.reduce((t,n)=>t+e.melds[n.player].length,0)} 副公开组合及摸切/手切顺序。`];i.push({action:`出牌`,tile:o,score:h,shanten:c,effectiveTiles:l,ukeire:u,winRate:p,expectedFan:f,expectedPoints:m,dealInRisk:d,confidence:Math.max(.5,.9-e.turn*.01),reasons:_,opponentInsights:a})}}if(e.phase===`响应`&&e.lastDiscard&&e.lastDiscard.player!==`self`){let n=e.lastDiscard.tile,o=Pt(e,n,t,!1);if(o.legalWin){let e=24+o.totalFan;i.push({action:`胡`,tile:n,score:e,shanten:-1,effectiveTiles:[],ukeire:0,winRate:1,expectedFan:o.totalFan,expectedPoints:e,dealInRisk:0,confidence:1,reasons:[`当前荣和确定收益约 ${e} 分。`,o.message,...o.fans.slice(0,3).map(e=>`${e.name} ${e.fan} 番`)],opponentInsights:a})}let s=e.hand.filter(e=>e===n).length;if(s>=2){let t=Lt(e.hand,e.melds.self),o=.18*(24+t*1.7);i.push({action:s>=3?`杠`:`碰`,tile:n,score:o,shanten:St(vt(e.hand,Array(s>=3?3:2).fill(n)),r+1),effectiveTiles:[],ukeire:0,winRate:.18,expectedFan:t,expectedPoints:o,dealInRisk:.05,confidence:.68,reasons:[`鸣牌路线的初步期望收益约 +${o.toFixed(1)} 分,后续出牌仍会重新计算风险。`,s>=3?`手中有三张相同牌,可以明杠。`:`手中有两张相同牌,可以碰。`,`鸣牌会降低手牌隐蔽性,请结合番种方向决定。`],opponentInsights:a})}}return i.sort((e,t)=>t.score-e.score||t.winRate-e.winRate||t.ukeire-e.ukeire),{generatedAt:Date.now(),elapsedMs:performance.now()-n,candidates:i.slice(0,3),summary:i.length?`已按期望净得分比较 ${i.length} 个合法候选,优先建议${i[0].action}${i[0].tile===void 0?``:ot(i[0].tile,t.tileSet)}。`:`请先录入自己的摸牌,形成可出牌手牌后再分析。`}}function Bt(e,t){return{id:crypto.randomUUID(),type:e,at:Date.now(),...t}}var Vt=[[88,[`大四喜`,`大三元`,`绿一色`,`九莲宝灯`,`四杠`,`连七对`,`十三幺`]],[64,[`清幺九`,`小四喜`,`小三元`,`字一色`,`四暗刻`,`一色双龙会`]],[48,[`一色四同顺`,`一色四节高`]],[32,[`一色四步高`,`三杠`,`混幺九`]],[24,[`七对`,`七星不靠`,`全双刻`,`清一色`,`一色三同顺`,`一色三节高`,`全大`,`全中`,`全小`]],[16,[`清龙`,`三色双龙会`,`一色三步高`,`全带五`,`三同刻`,`三暗刻`]],[12,[`全不靠`,`组合龙`,`大于五`,`小于五`,`三风刻`]],[8,[`花龙`,`推不倒`,`三色三同顺`,`三色三节高`,`无番和`,`妙手回春`,`海底捞月`,`杠上开花`,`抢杠和`]],[6,[`碰碰和`,`混一色`,`三色三步高`,`五门齐`,`全求人`,`双暗杠`,`双箭刻`]],[4,[`全带幺`,`不求人`,`双明杠`,`和绝张`]],[2,[`箭刻`,`圈风刻`,`门风刻`,`门前清`,`平和`,`四归一`,`双同刻`,`双暗刻`,`暗杠`,`断幺`]],[1,[`一般高`,`喜相逢`,`连六`,`老少副`,`幺九刻`,`明杠`,`缺一门`,`无字`,`边张`,`坎张`,`单钓将`,`自摸`,`花牌`]]],Ht={大四喜:`由东、南、西、北四副刻子或杠组成。`,大三元:`由中、发、白三副刻子或杠组成。`,绿一色:`只由二、三、四、六、八条及发财中的绿色牌组成。`,九莲宝灯:`门清状态下,同一花色组成九莲结构。`,四杠:`和牌中包含四副杠。`,连七对:`同一花色七个连续序数的对子。`,十三幺:`十三种幺九字牌各一张,并有其中一张作将。`,七对:`由七个对子组成的门清和牌。`,清一色:`全部由一种序数牌组成。`,碰碰和:`由四副刻子或杠加一对将牌组成。`,混一色:`由一种序数牌和字牌组成。`,门前清:`没有吃、碰或明杠,荣和。`,自摸:`自己摸进和牌。`,无字:`和牌中没有字牌。`,断幺:`和牌中没有一、九及字牌。`},Ut={schemaVersion:1,id:`org.tingfeng.mcr-duplicate-136`,name:`复式国标麻将(136 张)`,author:`听风内置规则`,version:`1.0.0`,description:`无花牌的复式国标训练规则,采用完整 81 番种目录与 8 分和牌门槛。`,engineVersion:`1.0.0`,builtIn:!0,tileSet:at,setup:{playerCount:4,startingHandSize:13,dealerStartingHandSize:14,minimumWinningFan:8,wallSize:136,flowersEnabled:!1},flow:{startNodeId:`setup`,nodes:[{id:`setup`,name:`开局准备`,phase:`初始化`,description:`确定座位、圈风并录入起手牌。`,x:100,y:40},{id:`draw`,name:`摸牌`,phase:`摸牌`,description:`当前玩家从牌墙摸一张牌。`,x:100,y:150},{id:`discard`,name:`出牌`,phase:`出牌`,description:`当前玩家舍出一张牌。`,x:100,y:260},{id:`response`,name:`响应`,phase:`响应`,description:`其余玩家依优先级判断和、杠、碰、吃。`,x:100,y:370},{id:`replacement`,name:`杠后补牌`,phase:`补牌`,description:`开杠后从牌墙尾补一张牌。`,x:310,y:260},{id:`settlement`,name:`和牌结算`,phase:`结算`,description:`计算番种并结束本局。`,terminal:!0,x:310,y:370},{id:`drawn`,name:`流局`,phase:`流局`,description:`牌墙耗尽且无人和牌。`,terminal:!0,x:100,y:480}],transitions:[{id:`t1`,from:`setup`,to:`discard`,action:`开始`,priority:10},{id:`t2`,from:`draw`,to:`discard`,action:`摸牌`,priority:10},{id:`t3`,from:`discard`,to:`response`,action:`出牌`,priority:10},{id:`t4`,from:`response`,to:`draw`,action:`过`,priority:1},{id:`t5`,from:`response`,to:`discard`,action:`鸣牌`,priority:5},{id:`t6`,from:`response`,to:`settlement`,action:`和牌`,priority:20},{id:`t7`,from:`response`,to:`replacement`,action:`鸣牌`,priority:8},{id:`t8`,from:`replacement`,to:`discard`,action:`摸牌`,priority:10},{id:`t9`,from:`draw`,to:`drawn`,action:`自动`,priority:30,condition:{type:`剩余牌数`,operator:`<=`,value:0}}]},fanDefinitions:Vt.flatMap(([e,t])=>t.map(t=>({id:`mcr.${t}`,name:t,fan:e,description:Ht[t]??`符合国标麻将“${t}”的构成条件。`,enabled:t!==`花牌`}))),recommendation:{offenseWeight:.48,valueWeight:.22,defenseWeight:.3,simulationBudgetMs:1200},explanationTemplates:{efficient:`减少向听并保留较多有效牌。`,safe:`多家牌河提供了较好的安全依据。`,valuable:`保留了更高番种的发展空间。`}},Wt=/^\d+\.\d+\.\d+$/;function Gt(e){let t=[],n=(e,n,r)=>t.push({level:`错误`,path:e,message:n,suggestion:r}),r=(e,n,r)=>t.push({level:`警告`,path:e,message:n,suggestion:r});e.schemaVersion!==1&&n(`schemaVersion`,`不支持此规则包格式版本。`,`请使用格式版本 1。`),e.id?.trim()||n(`id`,`规则缺少唯一标识。`,`填写反向域名形式的标识。`),e.name?.trim()||n(`name`,`规则缺少中文名称。`,`填写便于识别的中文名称。`),Wt.test(e.version)||n(`version`,`版本号格式不正确。`,`使用例如 1.0.0 的三段版本号。`),e.description.trim().length<4&&r(`description`,`规则说明过短。`,`说明玩法、牌数和主要差异。`),(e.tileSet.length===0||e.tileSet.length>64)&&n(`tileSet`,`牌种数量不在安全范围内。`,`保留 1 至 64 种牌。`);let i=new Set;for(let[t,r]of e.tileSet.entries())i.has(r.id)&&n(`tileSet.${t}.id`,`牌编号 ${r.id} 重复。`,`为每种牌设置唯一编号。`),i.add(r.id),(r.count<1||r.count>8)&&n(`tileSet.${t}.count`,`${r.name} 的数量不安全。`,`每种牌数量设置为 1 至 8。`),r.name.trim()||n(`tileSet.${t}.name`,`存在没有中文名称的牌。`,`填写牌名。`);let a=e.tileSet.reduce((e,t)=>e+t.count,0);a!==e.setup.wallSize&&n(`setup.wallSize`,`牌墙数量与牌组总数不一致。`,`将牌墙数量改为 ${a}。`),(e.setup.playerCount<2||e.setup.playerCount>4)&&n(`setup.playerCount`,`当前引擎仅支持 2 至 4 名玩家。`,`调整玩家数量。`),e.setup.minimumWinningFan<0&&n(`setup.minimumWinningFan`,`最低和牌分不能小于零。`,`设置为零或正数。`);let o=new Set;for(let[t,i]of e.flow.nodes.entries())o.has(i.id)&&n(`flow.nodes.${t}.id`,`流程节点 ${i.id} 重复。`,`修改节点标识。`),o.add(i.id),(!i.name.trim()||!i.description.trim())&&r(`flow.nodes.${t}`,`流程节点缺少中文名称或说明。`,`补充节点说明。`);o.has(e.flow.startNodeId)||n(`flow.startNodeId`,`入口节点不存在。`,`选择一个现有节点作为入口。`);for(let[t,r]of e.flow.transitions.entries())(!o.has(r.from)||!o.has(r.to))&&n(`flow.transitions.${t}`,`流程连线引用了不存在的节点。`,`重新选择起点和终点。`);let s=new Set,c=o.has(e.flow.startNodeId)?[e.flow.startNodeId]:[];for(;c.length;){let t=c.shift();s.has(t)||(s.add(t),e.flow.transitions.filter(e=>e.from===t).forEach(e=>c.push(e.to)))}for(let t of e.flow.nodes)s.has(t.id)||r(`flow.nodes.${t.id}`,`节点“${t.name}”无法从入口到达。`,`添加连线或删除该节点。`);e.flow.nodes.some(e=>e.terminal)||n(`flow.nodes`,`流程没有终局节点。`,`至少将一个和牌或流局节点设为终局。`),(e.flow.nodes.length>200||e.flow.transitions.length>500)&&n(`flow`,`流程规模超过安全上限。`,`将节点控制在 200 个、连线控制在 500 条以内。`);let l=new Set;for(let[t,i]of e.fanDefinitions.entries())l.has(i.id)&&n(`fanDefinitions.${t}.id`,`番种“${i.name}”标识重复。`,`修改番种标识。`),l.add(i.id),(!i.name.trim()||!i.description.trim())&&r(`fanDefinitions.${t}`,`番种缺少中文名称或说明。`,`补充中文说明。`),(i.fan<0||i.fan>1e3)&&n(`fanDefinitions.${t}.fan`,`番种“${i.name}”分值异常。`,`设置 0 至 1000 的分值。`);return t}function Kt(e){let t=Gt(e).filter(e=>e.level===`错误`);if(t.length)throw Error(`规则无法运行:${t[0].message}`);let n=new Map;for(let t of e.flow.transitions){let e=n.get(t.from)??[];e.push(t),n.set(t.from,e)}for(let e of n.values())e.sort((e,t)=>t.priority-e.priority);return{source:e,tileById:new Map(e.tileSet.map(e=>[e.id,e])),nodeById:new Map(e.flow.nodes.map(e=>[e.id,e])),transitionsFrom:n}}function qt(e){let t=structuredClone(e);return t.id=`local.${crypto.randomUUID()}`,t.name=`${e.name} · 自定义`,t.version=`1.0.0`,t.author=`本机用户`,t.builtIn=!1,t}var Jt=`MJRP1`,Yt=1048576;function Xt(e){let t=new Uint8Array(e.byteLength);return t.set(e),t.buffer}function Zt(e){let t=``;for(let n=0;ne.charCodeAt(0))}async function $t(e){if(!(`CompressionStream`in globalThis))return e;let t=new Blob([Xt(e)]).stream().pipeThrough(new CompressionStream(`gzip`));return new Uint8Array(await new Response(t).arrayBuffer())}async function en(e){if(e[0]!==31||e[1]!==139)return e;if(!(`DecompressionStream`in globalThis))throw Error(`当前浏览器不支持解压规则包,请升级浏览器后重试。`);let t=new Blob([Xt(e)]).stream().pipeThrough(new DecompressionStream(`gzip`)),n=new Uint8Array(await new Response(t).arrayBuffer());if(n.byteLength>Yt)throw Error(`规则包解压后超过 1 MB 安全限制。`);return n}async function tn(e){let t=await crypto.subtle.digest(`SHA-256`,Xt(e));return Array.from(new Uint8Array(t)).map(e=>e.toString(16).padStart(2,`0`)).join(``)}async function nn(e){let t=structuredClone(e);t.builtIn=!1;let n=await $t(new TextEncoder().encode(JSON.stringify(t))),r=await tn(n),i=`${Jt}.1.${r}.${Zt(n)}`;return{qrText:i.length<=1800?i:void 0,fileBytes:n,filename:`${e.name.replace(/[\\/:*?"<>|]/g,`_`)}-${e.version}.mjrule.json.gz`,digest:r,compressedSize:n.byteLength}}function rn(e){if(!e||typeof e!=`object`)throw Error(`规则包不是有效对象。`);let t=e;if(t.schemaVersion!==1||typeof t.name!=`string`||!Array.isArray(t.tileSet)||!t.flow)throw Error(`规则包缺少必要字段或格式版本不受支持。`)}async function an(e){let t=await en(e);if(t.byteLength>Yt)throw Error(`规则包超过 1 MB 安全限制。`);let n;try{n=JSON.parse(new TextDecoder().decode(t))}catch{throw Error(`规则包内容不是有效的 JSON。`)}rn(n);let r=Gt(n).find(e=>e.level===`错误`);if(r)throw Error(`规则校验失败:${r.message}`);return n.builtIn=!1,n}async function on(e){if(e.length>1900)throw Error(`二维码规则内容超过安全长度。`);let t=e.trim().split(`.`);if(t.length!==4||t[0]!==Jt||t[1]!==`1`)throw Error(`这不是受支持的听风规则二维码。`);let n=Qt(t[3]);if(await tn(n)!==t[2])throw Error(`规则包摘要不一致,内容可能损坏或被修改。`);return an(n)}async function sn(e){if(e.size>Yt)throw Error(`规则文件超过 1 MB 安全限制。`);return an(new Uint8Array(await e.arrayBuffer()))}function cn(e){let t=new Blob([Xt(e.fileBytes)],{type:`application/gzip`}),n=URL.createObjectURL(t),r=document.createElement(`a`);r.href=n,r.download=e.filename,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}var ln=`听风麻将助手`,un=1,dn=`规则`,fn=`牌谱`,pn=`设置`,mn;function hn(){return mn||(mn=new Promise((e,t)=>{let n=indexedDB.open(ln,un);n.onupgradeneeded=()=>{let e=n.result;e.objectStoreNames.contains(dn)||e.createObjectStore(dn,{keyPath:`id`}),e.objectStoreNames.contains(fn)||e.createObjectStore(fn,{keyPath:`id`}).createIndex(`updatedAt`,`updatedAt`),e.objectStoreNames.contains(pn)||e.createObjectStore(pn,{keyPath:`key`})},n.onsuccess=()=>e(n.result),n.onerror=()=>{mn=void 0,t(Error(`无法打开本地数据库,请检查浏览器存储权限。`))}}),mn)}function gn(e){return new Promise((t,n)=>{e.onsuccess=()=>t(e.result),e.onerror=()=>n(Error(`本地数据操作失败,请稍后重试。`))})}async function _n(){return[Ut,...(await gn((await hn()).transaction(dn).objectStore(dn).getAll())).filter(e=>e.id!==Ut.id)].sort((e,t)=>Number(t.builtIn)-Number(e.builtIn))}async function vn(e){if(e.builtIn)throw Error(`内置规则不能直接修改,请先复制为自定义规则。`);await gn((await hn()).transaction(dn,`readwrite`).objectStore(dn).put(e))}async function yn(e){if(e===Ut.id)throw Error(`内置规则不能删除。`);await gn((await hn()).transaction(dn,`readwrite`).objectStore(dn).delete(e))}async function bn(){return(await gn((await hn()).transaction(fn).objectStore(fn).getAll())).sort((e,t)=>t.updatedAt-e.updatedAt)}async function xn(e){await gn((await hn()).transaction(fn,`readwrite`).objectStore(fn).put(e))}async function Sn(e){await gn((await hn()).transaction(fn,`readwrite`).objectStore(fn).delete(e))}function Cn(e){return`${e}-${crypto.randomUUID()}`}function wn(e){return new Intl.DateTimeFormat(`zh-CN`,{month:`short`,day:`numeric`,hour:`2-digit`,minute:`2-digit`}).format(e)}function Tn(){let e=window.location.hash.replace(`#`,``);return[`home`,`setup`,`game`,`replay`,`rules`,`editor`,`settings`,`help`].includes(e)?e:`home`}function En({title:e,subtitle:t,onBack:n,action:r}){return(0,j.jsxs)(`header`,{className:`app-header`,children:[(0,j.jsxs)(`div`,{className:`header-title-wrap`,children:[n?(0,j.jsx)(`button`,{className:`icon-button header-back`,onClick:n,"aria-label":`返回`,children:(0,j.jsx)(E,{size:21})}):(0,j.jsx)(`div`,{className:`brand-mark`,children:`听`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h1`,{children:e}),t?(0,j.jsx)(`p`,{children:t}):null]})]}),(0,j.jsx)(`div`,{className:`header-actions`,children:r})]})}function Dn({page:e,navigate:t}){let n=[{page:`home`,label:`首页`,icon:D},{page:`replay`,label:`复盘`,icon:pe},{page:`rules`,label:`规则`,icon:le},{page:`settings`,label:`设置`,icon:ge}];return e===`game`||e===`setup`||e===`editor`||e===`help`?null:(0,j.jsx)(`nav`,{className:`bottom-nav`,children:n.map(n=>(0,j.jsxs)(`button`,{className:e===n.page?`active`:``,onClick:()=>t(n.page),children:[(0,j.jsx)(n.icon,{size:20}),(0,j.jsx)(`span`,{children:n.label})]},n.page))})}function On(){let[e,t]=(0,C.useState)(Tn),[n,r]=(0,C.useState)([Ut]),[i,a]=(0,C.useState)([]),[o,s]=(0,C.useState)(),[c,l]=(0,C.useState)(),[u,d]=(0,C.useState)(!0),[f,p]=(0,C.useState)(),m=async()=>{let[e,t]=await Promise.all([_n(),bn()]);r(e),a(t)};(0,C.useEffect)(()=>{let e=window.setTimeout(()=>d(!1),900);return m().catch(e=>p({message:e instanceof Error?e.message:`本地数据加载失败。`,tone:`error`})).finally(()=>{window.clearTimeout(e),d(!1)}),()=>window.clearTimeout(e)},[]),(0,C.useEffect)(()=>{let e=()=>t(Tn());return window.addEventListener(`hashchange`,e),()=>window.removeEventListener(`hashchange`,e)},[]),(0,C.useEffect)(()=>{if(!f)return;let e=window.setTimeout(()=>p(void 0),3200);return()=>window.clearTimeout(e)},[f]);let h=e=>{window.location.hash=e,t(e),window.scrollTo({top:0,behavior:`smooth`})},g=e=>{s(e),h(e.status===`进行中`?`game`:`replay`)},_=e=>{l(structuredClone(e)),h(`editor`)},v;return v=u?(0,j.jsx)(kn,{}):e===`home`?(0,j.jsx)(An,{sessions:i,rules:n,onStart:()=>h(`setup`),onOpen:g,onHelp:()=>h(`help`)}):e===`setup`?(0,j.jsx)(jn,{rules:n,onBack:()=>h(`home`),onCreated:async e=>{await xn(e),await m(),s(e),h(`game`)}}):e===`game`&&o?(0,j.jsx)(Mn,{session:o,onBack:()=>{m(),h(`home`)},onSession:async e=>{s(e),await xn(e)},onFinish:async e=>{s(e),await xn(e),await m(),h(`replay`)},toast:p}):e===`replay`?(0,j.jsx)(In,{sessions:i,initialSession:o,onBack:()=>h(`home`),onDelete:async e=>{await Sn(e),o?.id===e&&s(void 0),await m(),p({message:`牌谱已删除。`,tone:`success`})}}):e===`rules`?(0,j.jsx)(Rn,{rules:n,onEdit:_,onRefresh:m,toast:p}):e===`editor`&&c?(0,j.jsx)(Vn,{initialRule:c,onBack:()=>h(`rules`),onSaved:async e=>{await vn(e),await m(),p({message:`规则已保存并通过校验。`,tone:`success`}),h(`rules`)}}):e===`settings`?(0,j.jsx)(Un,{onHelp:()=>h(`help`)}):e===`help`?(0,j.jsx)(Wn,{onBack:()=>h(`settings`)}):(0,j.jsx)(An,{sessions:i,rules:n,onStart:()=>h(`setup`),onOpen:g,onHelp:()=>h(`help`)}),(0,j.jsxs)(`div`,{className:`app-shell`,children:[(0,j.jsx)(`main`,{children:v}),(0,j.jsx)(Dn,{page:e,navigate:h}),f?(0,j.jsx)(`div`,{className:`toast toast-${f.tone}`,role:`status`,children:f.message}):null]})}function kn(){return(0,j.jsxs)(`div`,{className:`loading-screen`,children:[(0,j.jsx)(`div`,{className:`brand-mark brand-large`,children:`听`}),(0,j.jsx)(`div`,{className:`loading-line`}),(0,j.jsx)(`p`,{children:`正在整理牌桌…`})]})}function An({sessions:e,rules:t,onStart:n,onOpen:r,onHelp:i}){let a=e.find(e=>e.status===`进行中`);return(0,j.jsxs)(`div`,{className:`page home-page`,children:[(0,j.jsx)(En,{title:`听风`,subtitle:`看清牌势,再落一张`,action:(0,j.jsx)(`button`,{className:`icon-button`,onClick:i,"aria-label":`帮助`,children:(0,j.jsx)(ie,{size:21})})}),(0,j.jsxs)(`section`,{className:`hero-card`,children:[(0,j.jsx)(`div`,{className:`hero-pattern`}),(0,j.jsxs)(`span`,{className:`hero-kicker`,children:[(0,j.jsx)(ve,{size:15}),` 本地智能分析`]}),(0,j.jsxs)(`h2`,{children:[`每一张舍牌,`,(0,j.jsx)(`br`,{}),`都有更好的理由。`]}),(0,j.jsx)(`p`,{children:`结合四家牌河、副露与剩余牌,给出可解释的攻守建议。`}),(0,j.jsxs)(`button`,{className:`primary-button hero-button`,onClick:n,children:[(0,j.jsx)(fe,{size:18,fill:`currentColor`}),` 开始新牌局`]})]}),(0,j.jsxs)(`section`,{className:`quick-stats`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`stat-icon`,children:(0,j.jsx)(_e,{})}),(0,j.jsx)(`strong`,{children:t.length}),(0,j.jsx)(`small`,{children:`可用规则`})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`stat-icon`,children:(0,j.jsx)(pe,{})}),(0,j.jsx)(`strong`,{children:e.length}),(0,j.jsx)(`small`,{children:`本地牌谱`})]}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`stat-icon`,children:(0,j.jsx)(Ce,{})}),(0,j.jsx)(`strong`,{children:`离线`}),(0,j.jsx)(`small`,{children:`数据不出设备`})]})]}),a?(0,j.jsxs)(`section`,{className:`section-block`,children:[(0,j.jsxs)(`div`,{className:`section-heading`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`继续`}),(0,j.jsx)(`h2`,{children:`未完成的牌局`})]}),(0,j.jsx)(`span`,{className:`live-dot`,children:`进行中`})]}),(0,j.jsxs)(`button`,{className:`session-card`,onClick:()=>r(a),children:[(0,j.jsx)(`div`,{className:`session-rule-icon`,children:`国`}),(0,j.jsxs)(`div`,{className:`session-copy`,children:[(0,j.jsx)(`strong`,{children:a.ruleSnapshot.name}),(0,j.jsxs)(`span`,{children:[wn(a.updatedAt),` · 已记录 `,a.actions.length,` 步`]})]}),(0,j.jsx)(re,{size:20})]})]}):null,(0,j.jsxs)(`section`,{className:`section-block`,children:[(0,j.jsx)(`div`,{className:`section-heading`,children:(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`能力`}),(0,j.jsx)(`h2`,{children:`不只告诉你打哪张`})]})}),(0,j.jsxs)(`div`,{className:`feature-grid`,children:[(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:(0,j.jsx)(ue,{})}),(0,j.jsx)(`h3`,{children:`三项建议`}),(0,j.jsx)(`p`,{children:`牌效、番值和危险度一起比较。`})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:(0,j.jsx)(Se,{})}),(0,j.jsx)(`h3`,{children:`四家信息`}),(0,j.jsx)(`p`,{children:`牌河、副露和摸切都能进入判断。`})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:(0,j.jsx)(pe,{})}),(0,j.jsx)(`h3`,{children:`逐巡复盘`}),(0,j.jsx)(`p`,{children:`回到当时信息,不用结果倒推动作。`})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:(0,j.jsx)(le,{})}),(0,j.jsx)(`h3`,{children:`规则可扩展`}),(0,j.jsx)(`p`,{children:`复制规则后,用流程节点调整玩法。`})]})]})]})]})}function jn({rules:e,onBack:t,onCreated:n}){let[r,i]=(0,C.useState)(e[0]?.id??Ut.id),[a,o]=(0,C.useState)(`self`),[s,c]=(0,C.useState)(`东`),[l,u]=(0,C.useState)(`东`),[d,f]=(0,C.useState)([]),[p,m]=(0,C.useState)(!1),h=e.find(e=>e.id===r)??Ut,g=a===`self`?h.setup.dealerStartingHandSize:h.setup.startingHandSize,_=(0,C.useMemo)(()=>{let e=Array(64).fill(0);return d.forEach(t=>e[t]++),e},[d]);return(0,j.jsxs)(`div`,{className:`page setup-page`,children:[(0,j.jsx)(En,{title:`布置牌桌`,subtitle:`先录入本局公开信息`,onBack:t}),(0,j.jsxs)(`div`,{className:`setup-grid`,children:[(0,j.jsxs)(`section`,{className:`panel-card form-card`,children:[(0,j.jsxs)(`div`,{className:`step-title`,children:[(0,j.jsx)(`span`,{children:`01`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{children:`选择规则`}),(0,j.jsx)(`p`,{children:`本局会保存独立规则快照`})]})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`当前规则`}),(0,j.jsx)(`select`,{value:r,onChange:e=>i(e.target.value),children:e.map(e=>(0,j.jsx)(`option`,{value:e.id,children:e.name},e.id))})]}),(0,j.jsxs)(`div`,{className:`rule-inline`,children:[(0,j.jsx)(_e,{size:18}),(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`strong`,{children:[h.setup.wallSize,` 张 · `,h.setup.minimumWinningFan,` 分门槛`]}),(0,j.jsx)(`small`,{children:h.description})]})]})]}),(0,j.jsxs)(`section`,{className:`panel-card form-card`,children:[(0,j.jsxs)(`div`,{className:`step-title`,children:[(0,j.jsx)(`span`,{children:`02`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{children:`座位与圈风`}),(0,j.jsx)(`p`,{children:`影响门风刻和圈风刻判断`})]})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`庄家位置`}),(0,j.jsx)(`div`,{className:`segmented`,children:mt.map(e=>(0,j.jsx)(`button`,{className:a===e?`active`:``,onClick:()=>{o(e),f([])},children:ht[e]},e))})]}),(0,j.jsxs)(`div`,{className:`two-fields`,children:[(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`我的门风`}),(0,j.jsx)(`select`,{value:s,onChange:e=>c(e.target.value),children:[`东`,`南`,`西`,`北`].map(e=>(0,j.jsx)(`option`,{children:e},e))})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`本局圈风`}),(0,j.jsx)(`select`,{value:l,onChange:e=>u(e.target.value),children:[`东`,`南`,`西`,`北`].map(e=>(0,j.jsx)(`option`,{children:e},e))})]})]})]}),(0,j.jsxs)(`section`,{className:`panel-card form-card hand-setup-card`,children:[(0,j.jsxs)(`div`,{className:`step-title`,children:[(0,j.jsx)(`span`,{children:`03`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{children:`录入起手牌`}),(0,j.jsxs)(`p`,{children:[`需要 `,g,` 张,已录入 `,d.length,` 张`]})]})]}),(0,j.jsxs)(`div`,{className:`setup-hand`,children:[d.map((e,t)=>(0,j.jsx)(M,{tile:e,definitions:h.tileSet,onClick:()=>f(e=>e.filter((e,n)=>n!==t))},`${e}-${t}`)),Array.from({length:Math.max(0,g-d.length)},(e,t)=>(0,j.jsx)(`div`,{className:`tile-placeholder`,children:`+`},t))]}),(0,j.jsx)(pt,{definitions:h.tileSet,visibleCounts:_,onPick:e=>d.lengthst([...t,e])),title:`点击牌面加入手牌`})]})]}),(0,j.jsx)(`div`,{className:`sticky-action`,children:(0,j.jsxs)(`button`,{className:`primary-button`,disabled:d.length!==g||p,onClick:async()=>{d.length===g&&(m(!0),await n({id:Cn(`game`),createdAt:Date.now(),updatedAt:Date.now(),status:`进行中`,ruleSnapshot:structuredClone(h),metadata:{dealer:a,seatWind:s,prevailingWind:l},initialHand:st(d),actions:[]}))},children:[p?`正在保存…`:d.length===g?`进入牌桌`:`还需录入 ${g-d.length} 张`,(0,j.jsx)(re,{size:18})]})})]})}function Mn({session:e,onBack:t,onSession:n,onFinish:r,toast:i}){let a=e.ruleSnapshot,o=(0,C.useMemo)(()=>Kt(a),[a]),s=(0,C.useMemo)(()=>bt(e),[e]),c=(0,C.useMemo)(()=>zt(s,a),[s,a]),[l,u]=(0,C.useState)(),[d,f]=(0,C.useState)(),[p,m]=(0,C.useState)(`不确定`),[h,g]=(0,C.useState)(!1),[_,v]=(0,C.useState)(!1),y=Ct(s);(0,C.useEffect)(()=>{u(void 0);let e=new Worker(new URL(`/assets/analysis.worker-DABAVhov.js`,``+import.meta.url),{type:`module`});return e.onmessage=e=>{e.data?.type===`完成`&&u(e.data.result)},e.postMessage({state:s,rule:a}),()=>e.terminate()},[s,a]);let b=l??c,x=async t=>{try{let r=s;for(let e of t)r=yt(r,e,o);await n({...e,updatedAt:Date.now(),actions:[...e.actions,...t]})}catch(e){i({message:e instanceof Error?e.message:`动作记录失败。`,tone:`error`})}},S=async e=>{if(d){if(d.mode===`摸牌`)await x([Bt(`摸牌`,{player:`self`,tile:e})]);else{let t=[];(s.phase!==`出牌`||s.currentPlayer!==d.player)&&t.push(Bt(`摸牌`,{player:d.player})),t.push(Bt(`出牌`,{player:d.player,tile:e,tsumogiri:p===`不确定`?void 0:p===`摸切`})),await x(t)}m(`不确定`),f(void 0)}},w=async e=>x([Bt(`出牌`,{player:`self`,tile:e})]),ee=async()=>{if(!e.actions.length)return;let t=1,r=e.actions.at(-1),a=e.actions.at(-2);r?.type===`出牌`&&r.player!==`self`&&a?.type===`摸牌`&&a.player===r.player&&a.tile===void 0&&(t=2),await n({...e,updatedAt:Date.now(),actions:e.actions.slice(0,-t)}),i({message:`已撤销上一步。`,tone:`info`})},te=async()=>{let t=Bt(`结束`,{reason:`手动结束并进入复盘`}),n={...e,status:`已结束`,updatedAt:Date.now(),actions:[...e.actions,t]};v(!1),await r(n)},T=new Map(b.candidates.filter(e=>e.action===`出牌`&&e.tile!==void 0).map((e,t)=>[e.tile,t+1]));return(0,j.jsxs)(`div`,{className:`game-page`,children:[(0,j.jsx)(En,{title:`实时牌桌`,subtitle:`${e.metadata.prevailingWind}圈 · 我坐${e.metadata.seatWind} · 余 ${s.wallRemaining} 张`,onBack:t,action:(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`button`,{className:`icon-button`,onClick:ee,disabled:!e.actions.length,"aria-label":`撤销`,children:(0,j.jsx)(be,{size:20})}),(0,j.jsx)(`button`,{className:`icon-button`,onClick:()=>v(!0),"aria-label":`结束牌局`,children:(0,j.jsx)(ce,{size:20})})]})}),(0,j.jsx)(`section`,{className:`table-zone`,children:(0,j.jsxs)(`div`,{className:`table-felt`,children:[(0,j.jsx)(Nn,{player:`opposite`,state:s,rule:a}),(0,j.jsxs)(`div`,{className:`middle-row`,children:[(0,j.jsx)(Nn,{player:`left`,state:s,rule:a,vertical:!0}),(0,j.jsxs)(`div`,{className:`table-center`,children:[(0,j.jsxs)(`div`,{className:`wind-compass`,children:[(0,j.jsx)(`span`,{children:`东圈`}),(0,j.jsx)(`strong`,{children:s.wallRemaining}),(0,j.jsx)(`small`,{children:`牌墙`})]}),(0,j.jsx)(`div`,{className:`phase-chip phase-${s.phase}`,children:s.phase})]}),(0,j.jsx)(Nn,{player:`right`,state:s,rule:a,vertical:!0})]}),(0,j.jsx)(Nn,{player:`self`,state:s,rule:a})]})}),(0,j.jsxs)(`section`,{className:`hand-zone`,children:[(0,j.jsxs)(`div`,{className:`hand-heading`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`我的手牌`}),(0,j.jsxs)(`strong`,{children:[s.hand.length,` 张 · `,s.melds.self.length?`${s.melds.self.length} 副露`:`门清`]})]}),(0,j.jsx)(`span`,{className:`hint-text`,children:`点击牌面直接打出`})]}),(0,j.jsx)(`div`,{className:`live-hand`,children:s.hand.map((e,t)=>(0,j.jsx)(M,{tile:e,definitions:a.tileSet,recommended:T.get(e),onClick:()=>s.hand.length%3==2&&w(e),disabled:s.hand.length%3!=2},`${e}-${t}`))}),s.melds.self.length?(0,j.jsx)(`div`,{className:`meld-strip`,children:s.melds.self.map(e=>(0,j.jsxs)(`span`,{children:[e.kind,` · `,e.tiles.map(e=>ot(e,a.tileSet)).join(` `)]},e.id))}):null]}),(0,j.jsxs)(`section`,{className:`action-dock`,children:[(0,j.jsxs)(`div`,{className:`action-row main-actions`,children:[(0,j.jsxs)(`button`,{className:`accent-action`,onClick:()=>f({mode:`摸牌`,player:`self`}),children:[(0,j.jsx)(k,{size:18}),`我的摸牌`]}),(0,j.jsxs)(`button`,{onClick:()=>g(!0),children:[(0,j.jsx)(le,{size:18}),`记录鸣牌`]}),(0,j.jsxs)(`button`,{onClick:()=>x([Bt(`过`,{player:`self`})]),children:[(0,j.jsx)(re,{size:18}),`过`]})]}),(0,j.jsxs)(`div`,{className:`action-row opponent-actions`,children:[(0,j.jsx)(`span`,{children:`记录他家舍牌`}),[`left`,`opposite`,`right`].map(e=>(0,j.jsx)(`button`,{onClick:()=>f({mode:`他家出牌`,player:e}),children:ht[e]},e))]})]}),(0,j.jsx)(Pn,{analysis:b,rule:a}),d?(0,j.jsxs)(rt,{title:d.mode===`摸牌`?`录入我的摸牌`:`记录${ht[d.player]}舍牌`,onClose:()=>f(void 0),children:[d.mode===`他家出牌`?(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`这张牌怎样打出`}),(0,j.jsx)(`div`,{className:`segmented three-segments`,children:[`不确定`,`摸切`,`手切`].map(e=>(0,j.jsx)(`button`,{className:p===e?`active`:``,onClick:()=>m(e),children:e},e))}),(0,j.jsx)(`small`,{className:`field-help`,children:`摸切表示刚摸到便直接打出;手切表示从原有手牌中打出。该顺序会进入对手模型。`})]}):null,(0,j.jsx)(pt,{definitions:a.tileSet,visibleCounts:y,onPick:S,title:d.mode===`摸牌`?`选择刚摸到的牌`:`选择对方舍出的牌`}),(0,j.jsxs)(`p`,{className:`modal-note`,children:[(0,j.jsx)(O,{size:16}),` 系统会保留四家完整动作时间线,并检查是否出现第五张同牌。`]})]}):null,h?(0,j.jsx)(Fn,{rule:a,state:s,onClose:()=>g(!1),onSubmit:async e=>{await x([e]),g(!1)}}):null,_?(0,j.jsxs)(rt,{title:`结束这局牌?`,onClose:()=>v(!1),children:[(0,j.jsxs)(`div`,{className:`confirm-copy`,children:[(0,j.jsx)(ce,{size:34}),(0,j.jsx)(`p`,{children:`结束后会保存完整动作日志,并进入逐巡复盘。你仍可保留这份牌谱。`})]}),(0,j.jsxs)(`div`,{className:`modal-buttons`,children:[(0,j.jsx)(`button`,{onClick:()=>v(!1),children:`继续记录`}),(0,j.jsx)(`button`,{className:`danger-button`,onClick:te,children:`结束并复盘`})]})]}):null]})}function Nn({player:e,state:t,rule:n,vertical:r=!1}){let i=t.currentPlayer===e;return(0,j.jsxs)(`div`,{className:`player-river river-${e} ${r?`river-vertical`:``} ${i?`river-active`:``}`,children:[(0,j.jsxs)(`div`,{className:`player-badge`,children:[(0,j.jsx)(`span`,{children:ht[e]}),i?(0,j.jsx)(`i`,{}):null]}),(0,j.jsx)(`div`,{className:`river-tiles`,children:t.discards[e].length?t.discards[e].map((e,t)=>(0,j.jsx)(M,{tile:e.tile,definitions:n.tileSet,small:!0,title:`${e.turn+1} 巡${e.tsumogiri===!0?` · 摸切`:e.tsumogiri===!1?` · 手切`:``}`},`${e.tile}-${t}`)):(0,j.jsx)(`span`,{className:`empty-river`,children:`暂无舍牌`})}),t.melds[e].length?(0,j.jsx)(`div`,{className:`river-melds`,children:t.melds[e].map(e=>(0,j.jsx)(`span`,{children:e.kind},e.id))}):null]})}function Pn({analysis:e,rule:t}){return(0,j.jsxs)(`section`,{className:`recommendation-panel`,children:[(0,j.jsx)(`div`,{className:`recommendation-handle`}),(0,j.jsxs)(`div`,{className:`recommendation-header`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsxs)(`span`,{className:`eyebrow`,children:[(0,j.jsx)(ve,{size:13}),` 听风建议`]}),(0,j.jsx)(`h2`,{children:e.summary})]}),(0,j.jsxs)(`span`,{className:`analysis-time`,children:[e.elapsedMs.toFixed(0),` 毫秒`]})]}),(0,j.jsx)(`div`,{className:`candidate-list`,children:e.candidates.length?e.candidates.map((e,n)=>(0,j.jsxs)(`article`,{className:`candidate-card ${n===0?`candidate-best`:``}`,children:[(0,j.jsx)(`div`,{className:`candidate-rank`,children:n+1}),(0,j.jsxs)(`div`,{className:`candidate-action`,children:[e.tile===void 0?null:(0,j.jsx)(M,{tile:e.tile,definitions:t.tileSet,small:!0}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{children:e.action}),(0,j.jsx)(`strong`,{children:e.tile===void 0?e.action:ot(e.tile,t.tileSet)})]})]}),(0,j.jsxs)(`div`,{className:`candidate-metrics`,children:[(0,j.jsxs)(`span`,{className:`expected-score`,children:[(0,j.jsx)(`small`,{children:`期望净得分`}),(0,j.jsxs)(`strong`,{children:[e.expectedPoints>=0?`+`:``,e.expectedPoints.toFixed(1)]})]}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`small`,{children:`预计番值`}),(0,j.jsx)(`strong`,{children:e.expectedFan.toFixed(1)})]}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`small`,{children:`向听`}),(0,j.jsx)(`strong`,{children:e.shanten<0?`和牌`:e.shanten})]}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`small`,{children:`和牌率`}),(0,j.jsxs)(`strong`,{children:[Math.round(e.winRate*100),`%`]})]}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`small`,{children:`危险度`}),(0,j.jsxs)(`strong`,{className:e.dealInRisk>.2?`risk-high`:``,children:[Math.round(e.dealInRisk*100),`%`]})]})]}),(0,j.jsx)(`div`,{className:`effective-line`,children:e.effectiveTiles.slice(0,8).map(e=>(0,j.jsxs)(`span`,{children:[ot(e.tile,t.tileSet),`余`,e.remaining]},e.tile))}),(0,j.jsx)(`p`,{children:e.reasons.slice(0,4).join(` `)}),(0,j.jsx)(`div`,{className:`opponent-insights`,children:e.opponentInsights.map(e=>(0,j.jsxs)(`span`,{children:[(0,j.jsxs)(`b`,{children:[ht[e.player],` · 威胁 `,Math.round(e.threat*100),`%`]}),(0,j.jsxs)(`small`,{children:[e.recentPattern,e.likelySuits.length?` · 偏${e.likelySuits.join(`、`)}`:``]})]},e.player))}),(0,j.jsxs)(`div`,{className:`confidence-bar`,children:[(0,j.jsx)(`span`,{style:{width:`${e.confidence*100}%`}}),(0,j.jsxs)(`small`,{children:[`置信度 `,Math.round(e.confidence*100),`%`]})]})]},`${e.action}-${e.tile}-${n}`)):(0,j.jsxs)(`div`,{className:`empty-analysis`,children:[(0,j.jsx)(ue,{size:30}),(0,j.jsx)(`strong`,{children:`等待形成可出牌手牌`}),(0,j.jsx)(`p`,{children:`录入自己的摸牌后,这里会显示前三项建议。`})]})}),(0,j.jsx)(`p`,{className:`analysis-disclaimer`,children:`建议基于当前已录入的公开信息和概率估算,不代表能够预测牌墙中的下一张牌。`})]})}function Fn({rule:e,state:t,onClose:n,onSubmit:r}){let[i,a]=(0,C.useState)(`self`),[o,s]=(0,C.useState)(`碰`),[c,l]=(0,C.useState)([]),u=o.includes(`杠`)?4:3,d=Ct(t);return(0,j.jsxs)(rt,{title:`记录吃、碰或杠`,onClose:n,wide:!0,children:[(0,j.jsxs)(`div`,{className:`two-fields`,children:[(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`鸣牌玩家`}),(0,j.jsx)(`select`,{value:i,onChange:e=>a(e.target.value),children:mt.map(e=>(0,j.jsx)(`option`,{value:e,children:ht[e]},e))})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`动作类型`}),(0,j.jsx)(`select`,{value:o,onChange:e=>{s(e.target.value),l([])},children:[`吃`,`碰`,`明杠`,`暗杠`,`补杠`].map(e=>(0,j.jsx)(`option`,{children:e},e))})]})]}),(0,j.jsxs)(`div`,{className:`selected-meld`,children:[(0,j.jsxs)(`span`,{children:[`已选 `,c.length,`/`,u]}),c.map((t,n)=>(0,j.jsx)(M,{tile:t,definitions:e.tileSet,small:!0,onClick:()=>l(e=>e.filter((e,t)=>t!==n))},`${t}-${n}`))]}),(0,j.jsx)(pt,{definitions:e.tileSet,visibleCounts:d,onPick:e=>c.length[...t,e]),title:`选择鸣牌中的全部牌张`}),(0,j.jsxs)(`div`,{className:`modal-buttons`,children:[(0,j.jsx)(`button`,{onClick:n,children:`取消`}),(0,j.jsx)(`button`,{className:`primary-button`,disabled:c.length!==u,onClick:()=>{if(c.length!==u)return;let e=o===`暗杠`?void 0:t.lastDiscard?.tile;r(Bt(`鸣牌`,{player:i,meld:{id:Cn(`meld`),kind:o,tiles:st(c),from:e===void 0?void 0:t.lastDiscard?.player,claimedTile:e}}))},children:`确认记录`})]})]})}function In({sessions:e,initialSession:t,onBack:n,onDelete:r}){let[i,a]=(0,C.useState)(t?.id??e[0]?.id),o=e.find(e=>e.id===i),[s,c]=(0,C.useState)(o?.actions.length??0);(0,C.useEffect)(()=>c(o?.actions.length??0),[i,o?.actions.length]);let l=(0,C.useMemo)(()=>o?bt(o,s):void 0,[o,s]),u=(0,C.useMemo)(()=>l&&o?zt(l,o.ruleSnapshot):void 0,[l,o]);return(0,j.jsxs)(`div`,{className:`page replay-page`,children:[(0,j.jsx)(En,{title:`牌谱复盘`,subtitle:`只使用当时已经公开的信息`,onBack:n}),e.length?(0,j.jsxs)(`div`,{className:`replay-layout`,children:[(0,j.jsxs)(`aside`,{className:`replay-list`,children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`本地牌谱`}),e.map(e=>(0,j.jsxs)(`button`,{className:i===e.id?`active`:``,onClick:()=>a(e.id),children:[(0,j.jsx)(`div`,{className:`session-rule-icon`,children:e.status===`进行中`?`续`:`复`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:e.ruleSnapshot.name}),(0,j.jsxs)(`span`,{children:[wn(e.updatedAt),` · `,e.actions.length,` 步`]})]})]},e.id))]}),o&&l&&u?(0,j.jsxs)(`section`,{className:`replay-board`,children:[(0,j.jsxs)(`div`,{className:`replay-toolbar`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`当前进度`}),(0,j.jsxs)(`h2`,{children:[`第 `,s,` / `,o.actions.length,` 步`]})]}),(0,j.jsxs)(`button`,{className:`danger-ghost`,onClick:()=>window.confirm(`确定删除这份本地牌谱吗?此操作无法撤销。`)&&r(o.id),children:[(0,j.jsx)(ye,{size:17}),`删除牌谱`]})]}),(0,j.jsxs)(`div`,{className:`timeline-control`,children:[(0,j.jsx)(`button`,{onClick:()=>c(0),disabled:!s,children:(0,j.jsx)(me,{size:18})}),(0,j.jsx)(`button`,{onClick:()=>c(e=>Math.max(0,e-1)),disabled:!s,children:(0,j.jsx)(E,{size:18})}),(0,j.jsx)(`input`,{"aria-label":`复盘进度`,type:`range`,min:`0`,max:o.actions.length,value:s,onChange:e=>c(Number(e.target.value))}),(0,j.jsx)(`button`,{onClick:()=>c(e=>Math.min(o.actions.length,e+1)),disabled:s===o.actions.length,children:(0,j.jsx)(re,{size:18})})]}),(0,j.jsxs)(`div`,{className:`replay-state`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:`我的手牌`}),(0,j.jsx)(`div`,{className:`replay-hand`,children:l.hand.map((e,t)=>(0,j.jsx)(M,{tile:e,definitions:o.ruleSnapshot.tileSet,small:!0},`${e}-${t}`))})]}),(0,j.jsx)(`div`,{className:`replay-rivers`,children:mt.filter(e=>e!==`self`).map(e=>(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{children:ht[e]}),(0,j.jsx)(`div`,{children:l.discards[e].map((e,t)=>(0,j.jsx)(M,{tile:e.tile,definitions:o.ruleSnapshot.tileSet,small:!0},`${e.tile}-${t}`))})]},e))})]}),s>0?(0,j.jsxs)(`div`,{className:`action-detail`,children:[(0,j.jsx)(`span`,{children:`刚刚发生`}),(0,j.jsx)(`strong`,{children:Ln(o.actions[s-1],o.ruleSnapshot)})]}):(0,j.jsxs)(`div`,{className:`action-detail`,children:[(0,j.jsx)(`span`,{children:`开局`}),(0,j.jsx)(`strong`,{children:`尚未发生任何动作`})]}),(0,j.jsx)(Pn,{analysis:u,rule:o.ruleSnapshot})]}):null]}):(0,j.jsx)(Gn,{icon:(0,j.jsx)(pe,{}),title:`还没有牌谱`,text:`完成一局后,这里会保存逐巡动作和当时建议。`})]})}function Ln(e,t){return e.type===`摸牌`?`${ht[e.player]}摸牌${e.tile===void 0?``:`:${ot(e.tile,t.tileSet)}`}`:e.type===`出牌`?`${ht[e.player]}打出${ot(e.tile,t.tileSet)}`:e.type===`鸣牌`?`${ht[e.player]}${e.meld.kind}:${e.meld.tiles.map(e=>ot(e,t.tileSet)).join(`、`)}`:e.type===`过`?`${ht[e.player]}选择过`:e.type===`和牌`?`${ht[e.player]}和牌`:e.reason}function Rn({rules:e,onEdit:t,onRefresh:n,toast:r}){let[i,a]=(0,C.useState)(),[o,s]=(0,C.useState)(!1),c=async e=>{window.confirm(`确定删除“${e.name}”吗?已有牌局仍会保留规则快照。`)&&(await yn(e.id),await n(),r({message:`自定义规则已删除。`,tone:`success`}))};return(0,j.jsxs)(`div`,{className:`page rules-page`,children:[(0,j.jsx)(En,{title:`规则中心`,subtitle:`每一局都保存独立规则快照`,action:(0,j.jsxs)(`button`,{className:`secondary-button compact-button`,onClick:()=>s(!0),children:[(0,j.jsx)(xe,{size:17}),`导入规则`]})}),(0,j.jsxs)(`section`,{className:`rule-hero`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`可扩展规则引擎`}),(0,j.jsxs)(`h2`,{children:[`从标准规则出发,`,(0,j.jsx)(`br`,{}),`做成你的玩法。`]}),(0,j.jsx)(`p`,{children:`复制内置规则,在电脑上调整牌组、回合流程、番种和推荐倾向。`})]}),(0,j.jsxs)(`div`,{className:`rule-engine-orbit`,children:[(0,j.jsx)(`span`,{children:`牌组`}),(0,j.jsx)(`span`,{children:`流程`}),(0,j.jsx)(`span`,{children:`计分`}),(0,j.jsx)(`strong`,{children:`规则包`})]})]}),(0,j.jsxs)(`section`,{className:`section-block`,children:[(0,j.jsx)(`div`,{className:`section-heading`,children:(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`已安装`}),(0,j.jsxs)(`h2`,{children:[e.length,` 套规则`]})]})}),(0,j.jsx)(`div`,{className:`rule-cards`,children:e.map(e=>{let n=Gt(e).filter(e=>e.level===`错误`).length;return(0,j.jsxs)(`article`,{className:`rule-card`,children:[(0,j.jsxs)(`div`,{className:`rule-card-top`,children:[(0,j.jsx)(`div`,{className:`rule-icon`,children:e.builtIn?`国`:e.name.slice(0,1)}),(0,j.jsx)(`div`,{className:`rule-status`,children:e.builtIn?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(_e,{size:14}),`内置只读`]}):n?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(O,{size:14}),`需修复`]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(_e,{size:14}),`校验通过`]})})]}),(0,j.jsx)(`h3`,{children:e.name}),(0,j.jsx)(`p`,{children:e.description}),(0,j.jsxs)(`div`,{className:`rule-facts`,children:[(0,j.jsxs)(`span`,{children:[e.setup.wallSize,` 张`]}),(0,j.jsxs)(`span`,{children:[e.setup.playerCount,` 人`]}),(0,j.jsxs)(`span`,{children:[e.setup.minimumWinningFan,` 分门槛`]}),(0,j.jsxs)(`span`,{children:[e.fanDefinitions.filter(e=>e.enabled).length,` 个番种`]})]}),(0,j.jsxs)(`div`,{className:`rule-meta`,children:[(0,j.jsx)(`span`,{children:e.author}),(0,j.jsxs)(`span`,{children:[`版本 `,e.version]})]}),(0,j.jsxs)(`div`,{className:`rule-actions`,children:[(0,j.jsx)(`button`,{onClick:()=>t(e.builtIn?qt(e):e),children:e.builtIn?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(ae,{size:16}),`复制并编辑`]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(de,{size:16}),`编辑`]})}),(0,j.jsxs)(`button`,{onClick:()=>a(e),children:[(0,j.jsx)(A,{size:16}),`分享`]}),e.builtIn?null:(0,j.jsx)(`button`,{className:`danger-icon`,onClick:()=>c(e),"aria-label":`删除规则`,children:(0,j.jsx)(ye,{size:16})})]})]},e.id)})})]}),i?(0,j.jsx)(zn,{rule:i,onClose:()=>a(void 0)}):null,o?(0,j.jsx)(Bn,{existing:e,onClose:()=>s(!1),onInstalled:async()=>{await n(),s(!1),r({message:`规则已安全安装。`,tone:`success`})}}):null]})}function zn({rule:e,onClose:t}){let[n,r]=(0,C.useState)(),[i,a]=(0,C.useState)(``),[o,s]=(0,C.useState)(``);return(0,C.useEffect)(()=>{nn(e).then(async e=>{r(e),e.qrText&&a(await nt.toDataURL(e.qrText,{errorCorrectionLevel:`M`,margin:2,width:360,color:{dark:`#123f35`,light:`#f8f2e2`}}))}).catch(e=>s(e instanceof Error?e.message:`规则分享数据生成失败。`))},[e]),(0,j.jsx)(rt,{title:`分享“${e.name}”`,onClose:t,children:o?(0,j.jsx)(`div`,{className:`error-box`,children:o}):n?(0,j.jsxs)(`div`,{className:`share-content`,children:[i&&n.qrText?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`div`,{className:`qr-frame`,children:(0,j.jsx)(`img`,{src:i,alt:`规则分享二维码`})}),(0,j.jsx)(`strong`,{children:`用另一台设备扫描安装`}),(0,j.jsxs)(`p`,{children:[`二维码包含完整规则,不需要网络。摘要前八位:`,n.digest.slice(0,8)]})]}):(0,j.jsx)(j.Fragment,{children:(0,j.jsxs)(`div`,{className:`file-fallback`,children:[(0,j.jsx)(se,{size:38}),(0,j.jsx)(`strong`,{children:`规则内容较多,已改用文件分享`}),(0,j.jsx)(`p`,{children:`压缩内容超过可靠二维码容量,避免生成难以扫描的超密二维码。`})]})}),(0,j.jsxs)(`button`,{className:`secondary-button full-button`,onClick:()=>cn(n),children:[(0,j.jsx)(oe,{size:18}),`下载规则文件(`,Math.ceil(n.compressedSize/1024),` KB)`]})]}):(0,j.jsx)(`div`,{className:`modal-loading`,children:`正在压缩并校验规则…`})})}function Bn({existing:e,onClose:t,onInstalled:n}){let[r,i]=(0,C.useState)(``),[a,o]=(0,C.useState)(),[s,c]=(0,C.useState)(``),l=(0,C.useRef)(null),u=async e=>{try{c(``),o(await e())}catch(e){c(e instanceof Error?e.message:`规则解析失败。`)}},d=a&&e.find(e=>e.id===a.id),f=async e=>{if(!a)return;let t=structuredClone(a);e===`copy`&&(t.id=`local.${crypto.randomUUID()}`,t.name+=` · 副本`),t.builtIn=!1,await vn(t),await n()};return(0,j.jsx)(rt,{title:`导入自定义规则`,onClose:t,wide:!0,children:a?(0,j.jsxs)(`div`,{className:`import-preview`,children:[(0,j.jsx)(`div`,{className:`success-seal`,children:(0,j.jsx)(_e,{})}),(0,j.jsx)(`span`,{className:`eyebrow`,children:`安全校验通过`}),(0,j.jsx)(`h2`,{children:a.name}),(0,j.jsx)(`p`,{children:a.description}),(0,j.jsxs)(`div`,{className:`rule-facts`,children:[(0,j.jsxs)(`span`,{children:[a.setup.wallSize,` 张`]}),(0,j.jsxs)(`span`,{children:[a.flow.nodes.length,` 个流程节点`]}),(0,j.jsxs)(`span`,{children:[a.fanDefinitions.length,` 个番种`]}),(0,j.jsxs)(`span`,{children:[`版本 `,a.version]})]}),(0,j.jsxs)(`div`,{className:`security-note`,children:[(0,j.jsx)(_e,{size:18}),(0,j.jsx)(`span`,{children:`规则包不含脚本、远程链接或可执行资源。`})]}),d?(0,j.jsxs)(`div`,{className:`conflict-box`,children:[(0,j.jsxs)(`strong`,{children:[`发现同标识规则:`,d.name]}),(0,j.jsx)(`p`,{children:`可以升级现有规则,或另存为独立副本。旧牌局不会受影响。`}),(0,j.jsxs)(`div`,{className:`modal-buttons`,children:[(0,j.jsx)(`button`,{onClick:t,children:`取消`}),(0,j.jsx)(`button`,{onClick:()=>f(`copy`),children:`另存为副本`}),(0,j.jsx)(`button`,{className:`primary-button`,onClick:()=>f(`upgrade`),children:`升级规则`})]})]}):(0,j.jsxs)(`div`,{className:`modal-buttons`,children:[(0,j.jsx)(`button`,{onClick:()=>o(void 0),children:`重新选择`}),(0,j.jsx)(`button`,{className:`primary-button`,onClick:()=>f(`upgrade`),children:`确认安装`})]})]}):(0,j.jsxs)(j.Fragment,{children:[(0,j.jsxs)(`div`,{className:`import-options`,children:[(0,j.jsxs)(`button`,{onClick:()=>l.current?.click(),children:[(0,j.jsx)(se,{size:28}),(0,j.jsx)(`strong`,{children:`选择规则文件`}),(0,j.jsx)(`span`,{children:`支持 .mjrule.json.gz`})]}),(0,j.jsxs)(`button`,{onClick:()=>navigator.clipboard.readText().then(e=>(i(e),u(()=>on(e)))).catch(()=>c(`无法读取剪贴板,请手动粘贴二维码内容。`)),children:[(0,j.jsx)(A,{size:28}),(0,j.jsx)(`strong`,{children:`粘贴二维码内容`}),(0,j.jsx)(`span`,{children:`从剪贴板读取 MJRP1 数据`})]})]}),(0,j.jsx)(`input`,{ref:l,type:`file`,hidden:!0,accept:`.gz,.json,.mjrule.json.gz`,onChange:e=>{let t=e.target.files?.[0];t&&u(()=>sn(t))}}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`或手动粘贴扫码结果`}),(0,j.jsx)(`textarea`,{rows:4,value:r,onChange:e=>i(e.target.value),placeholder:`以 MJRP1.1 开头的规则内容`})]}),(0,j.jsx)(`button`,{className:`primary-button full-button`,disabled:!r.trim(),onClick:()=>u(()=>on(r)),children:`校验二维码内容`}),s?(0,j.jsxs)(`div`,{className:`error-box`,children:[(0,j.jsx)(O,{size:17}),s]}):null]})})}function Vn({initialRule:e,onBack:t,onSaved:n}){let[r,i]=(0,C.useState)(()=>({...structuredClone(e),builtIn:!1})),[a,o]=(0,C.useState)(`flow`),[s,c]=(0,C.useState)(r.flow.startNodeId),[l,u]=(0,C.useState)(!1),d=(0,C.useMemo)(()=>Gt(r),[r]),f=d.filter(e=>e.level===`错误`),p=r.flow.nodes.find(e=>e.id===s),m=e=>i(t=>({...t,...e})),h=e=>i(t=>({...t,setup:{...t.setup,...e}})),g=e=>i(t=>({...t,flow:{...t.flow,nodes:t.flow.nodes.map(t=>t.id===s?{...t,...e}:t)}})),_=()=>{let e=`node-${crypto.randomUUID().slice(0,8)}`,t={id:e,name:`新流程节点`,phase:`响应`,description:`请填写这个节点的用途。`,x:120+r.flow.nodes.length%3*190,y:120+Math.floor(r.flow.nodes.length/3)*120};i(e=>({...e,flow:{...e.flow,nodes:[...e.flow.nodes,t]}})),c(e)},v=()=>{!p||p.id===r.flow.startNodeId||p.terminal||(i(e=>({...e,flow:{...e.flow,nodes:e.flow.nodes.filter(e=>e.id!==p.id),transitions:e.flow.transitions.filter(e=>e.from!==p.id&&e.to!==p.id)}})),c(r.flow.startNodeId))},y=()=>{if(!p)return;let e=r.flow.nodes.find(e=>e.id!==p.id);e&&i(t=>({...t,flow:{...t.flow,transitions:[...t.flow.transitions,{id:Cn(`line`),from:p.id,to:e.id,action:`自动`,priority:1}]}}))},b=async()=>{if(!f.length){u(!0);try{await n(r)}finally{u(!1)}}},x=typeof window>`u`||window.innerWidth>=900;return(0,j.jsxs)(`div`,{className:`editor-page`,children:[(0,j.jsx)(En,{title:`规则编辑器`,subtitle:`${r.name} · 版本 ${r.version}`,onBack:t,action:(0,j.jsxs)(`button`,{className:`primary-button compact-button`,disabled:f.length>0||l,onClick:b,children:[(0,j.jsx)(he,{size:17}),l?`保存中…`:`保存规则`]})}),x?null:(0,j.jsxs)(`div`,{className:`mobile-editor-notice`,children:[(0,j.jsx)(O,{size:20}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:`手机端为基础编辑模式`}),(0,j.jsx)(`p`,{children:`复杂流程节点只能查看。请在电脑浏览器打开同一规则文件进行完整编辑。`})]})]}),(0,j.jsxs)(`div`,{className:`editor-tabs`,children:[(0,j.jsx)(`button`,{className:a===`base`?`active`:``,onClick:()=>o(`base`),children:`基础参数`}),(0,j.jsx)(`button`,{className:a===`flow`?`active`:``,onClick:()=>o(`flow`),children:`流程节点`}),(0,j.jsx)(`button`,{className:a===`fans`?`active`:``,onClick:()=>o(`fans`),children:`番种计分`})]}),a===`base`?(0,j.jsxs)(`div`,{className:`editor-form-layout`,children:[(0,j.jsxs)(`section`,{className:`panel-card form-card`,children:[(0,j.jsxs)(`div`,{className:`step-title`,children:[(0,j.jsx)(`span`,{children:`文`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{children:`规则信息`}),(0,j.jsx)(`p`,{children:`这些信息会在导入前展示`})]})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`中文名称`}),(0,j.jsx)(`input`,{value:r.name,onChange:e=>m({name:e.target.value})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`作者`}),(0,j.jsx)(`input`,{value:r.author,onChange:e=>m({author:e.target.value})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`版本号`}),(0,j.jsx)(`input`,{value:r.version,onChange:e=>m({version:e.target.value}),placeholder:`1.0.0`})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`规则说明`}),(0,j.jsx)(`textarea`,{rows:5,value:r.description,onChange:e=>m({description:e.target.value})})]})]}),(0,j.jsxs)(`section`,{className:`panel-card form-card`,children:[(0,j.jsxs)(`div`,{className:`step-title`,children:[(0,j.jsx)(`span`,{children:`数`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h2`,{children:`开局参数`}),(0,j.jsx)(`p`,{children:`改变牌数时需要同步编辑牌组`})]})]}),(0,j.jsxs)(`div`,{className:`two-fields`,children:[(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`玩家人数`}),(0,j.jsx)(`input`,{type:`number`,min:`2`,max:`4`,value:r.setup.playerCount,onChange:e=>h({playerCount:Number(e.target.value)})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`牌墙总数`}),(0,j.jsx)(`input`,{type:`number`,value:r.setup.wallSize,onChange:e=>h({wallSize:Number(e.target.value)})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`普通起手牌`}),(0,j.jsx)(`input`,{type:`number`,value:r.setup.startingHandSize,onChange:e=>h({startingHandSize:Number(e.target.value)})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`最低和牌分`}),(0,j.jsx)(`input`,{type:`number`,value:r.setup.minimumWinningFan,onChange:e=>h({minimumWinningFan:Number(e.target.value)})})]})]}),(0,j.jsxs)(`div`,{className:`weight-editor`,children:[(0,j.jsxs)(`label`,{children:[(0,j.jsxs)(`span`,{children:[`进攻 `,Math.round(r.recommendation.offenseWeight*100),`%`]}),(0,j.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`.01`,value:r.recommendation.offenseWeight,onChange:e=>i(t=>({...t,recommendation:{...t.recommendation,offenseWeight:Number(e.target.value)}}))})]}),(0,j.jsxs)(`label`,{children:[(0,j.jsxs)(`span`,{children:[`牌值 `,Math.round(r.recommendation.valueWeight*100),`%`]}),(0,j.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`.01`,value:r.recommendation.valueWeight,onChange:e=>i(t=>({...t,recommendation:{...t.recommendation,valueWeight:Number(e.target.value)}}))})]}),(0,j.jsxs)(`label`,{children:[(0,j.jsxs)(`span`,{children:[`防守 `,Math.round(r.recommendation.defenseWeight*100),`%`]}),(0,j.jsx)(`input`,{type:`range`,min:`0`,max:`1`,step:`.01`,value:r.recommendation.defenseWeight,onChange:e=>i(t=>({...t,recommendation:{...t.recommendation,defenseWeight:Number(e.target.value)}}))})]})]})]})]}):null,a===`flow`?(0,j.jsxs)(`div`,{className:`flow-editor`,children:[(0,j.jsxs)(`aside`,{className:`flow-structure`,children:[(0,j.jsxs)(`div`,{className:`aside-heading`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`结构`}),(0,j.jsxs)(`h2`,{children:[r.flow.nodes.length,` 个节点`]})]}),(0,j.jsx)(`button`,{className:`icon-button`,onClick:_,disabled:!x,"aria-label":`添加节点`,children:(0,j.jsx)(k,{size:18})})]}),(0,j.jsx)(`div`,{className:`node-list`,children:r.flow.nodes.map(e=>(0,j.jsxs)(`button`,{className:s===e.id?`active`:``,onClick:()=>c(e.id),children:[(0,j.jsx)(`span`,{className:`node-dot node-${e.phase}`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:e.name}),(0,j.jsxs)(`small`,{children:[e.phase,e.terminal?` · 终局`:``]})]})]},e.id))}),(0,j.jsxs)(`div`,{className:`transition-summary`,children:[(0,j.jsx)(`strong`,{children:`流程连线`}),r.flow.transitions.map(e=>(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{children:r.flow.nodes.find(t=>t.id===e.from)?.name}),(0,j.jsx)(re,{size:13}),(0,j.jsx)(`span`,{children:r.flow.nodes.find(t=>t.id===e.to)?.name})]},e.id))]})]}),(0,j.jsxs)(`section`,{className:`flow-canvas`,children:[(0,j.jsxs)(`div`,{className:`canvas-toolbar`,children:[(0,j.jsx)(`span`,{children:`可视化状态图`}),(0,j.jsx)(`small`,{children:`点击节点后在右侧编辑`})]}),(0,j.jsxs)(`div`,{className:`canvas-stage`,children:[r.flow.transitions.map(e=>{let t=r.flow.nodes.find(t=>t.id===e.from),n=r.flow.nodes.find(t=>t.id===e.to);if(!t||!n)return null;let i=Math.min(t.x,n.x)+130,a=Math.min(t.y,n.y)+35,o=Math.abs(n.x-t.x)||2,s=Math.abs(n.y-t.y)||2;return(0,j.jsx)(`div`,{className:`flow-line`,style:{left:i,top:a,width:Math.max(o,2),height:Math.max(s,2)},children:(0,j.jsx)(`span`,{children:e.action})},e.id)}),r.flow.nodes.map(e=>(0,j.jsxs)(`button`,{className:`flow-node ${s===e.id?`selected`:``} ${e.terminal?`terminal`:``}`,style:{left:e.x,top:e.y},onClick:()=>c(e.id),children:[(0,j.jsx)(`span`,{children:e.phase}),(0,j.jsx)(`strong`,{children:e.name}),(0,j.jsx)(`small`,{children:e.description})]},e.id))]})]}),(0,j.jsxs)(`aside`,{className:`node-properties`,children:[p?(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`节点属性`}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`名称`}),(0,j.jsx)(`input`,{disabled:!x,value:p.name,onChange:e=>g({name:e.target.value})})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`阶段`}),(0,j.jsx)(`select`,{disabled:!x,value:p.phase,onChange:e=>g({phase:e.target.value}),children:[`初始化`,`摸牌`,`出牌`,`响应`,`补牌`,`结算`,`流局`].map(e=>(0,j.jsx)(`option`,{children:e},e))})]}),(0,j.jsxs)(`label`,{className:`field`,children:[(0,j.jsx)(`span`,{children:`中文说明`}),(0,j.jsx)(`textarea`,{disabled:!x,rows:4,value:p.description,onChange:e=>g({description:e.target.value})})]}),(0,j.jsxs)(`label`,{className:`check-field`,children:[(0,j.jsx)(`input`,{disabled:!x,type:`checkbox`,checked:!!p.terminal,onChange:e=>g({terminal:e.target.checked})}),(0,j.jsx)(`span`,{children:`这是终局节点`})]}),(0,j.jsxs)(`div`,{className:`position-fields`,children:[(0,j.jsxs)(`label`,{children:[`X`,(0,j.jsx)(`input`,{disabled:!x,type:`number`,value:p.x,onChange:e=>g({x:Number(e.target.value)})})]}),(0,j.jsxs)(`label`,{children:[`Y`,(0,j.jsx)(`input`,{disabled:!x,type:`number`,value:p.y,onChange:e=>g({y:Number(e.target.value)})})]})]}),(0,j.jsxs)(`button`,{className:`secondary-button full-button`,disabled:!x,onClick:y,children:[(0,j.jsx)(k,{size:16}),`从此节点添加连线`]}),(0,j.jsxs)(`button`,{className:`danger-ghost full-button`,disabled:!x||p.id===r.flow.startNodeId||p.terminal,onClick:v,children:[(0,j.jsx)(ye,{size:16}),`删除节点`]})]}):null,(0,j.jsx)(Hn,{issues:d})]})]}):null,a===`fans`?(0,j.jsxs)(`div`,{className:`fan-editor`,children:[(0,j.jsxs)(`div`,{className:`fan-editor-head`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`计分目录`}),(0,j.jsxs)(`h2`,{children:[r.fanDefinitions.length,` 个番种`]})]}),(0,j.jsxs)(`button`,{className:`secondary-button compact-button`,onClick:()=>i(e=>({...e,fanDefinitions:[...e.fanDefinitions,{id:`local.fan.${crypto.randomUUID()}`,name:`新番种`,fan:1,description:`请填写构成条件。`,enabled:!0}]})),children:[(0,j.jsx)(k,{size:17}),`新增番种`]})]}),(0,j.jsxs)(`div`,{className:`fan-table`,children:[(0,j.jsxs)(`div`,{className:`fan-table-row fan-table-header`,children:[(0,j.jsx)(`span`,{children:`启用`}),(0,j.jsx)(`span`,{children:`名称`}),(0,j.jsx)(`span`,{children:`分值`}),(0,j.jsx)(`span`,{children:`中文说明`}),(0,j.jsx)(`span`,{})]}),r.fanDefinitions.map((e,t)=>(0,j.jsxs)(`div`,{className:`fan-table-row`,children:[(0,j.jsx)(`input`,{"aria-label":`启用${e.name}`,type:`checkbox`,checked:e.enabled,onChange:e=>i(n=>({...n,fanDefinitions:n.fanDefinitions.map((n,r)=>r===t?{...n,enabled:e.target.checked}:n)}))}),(0,j.jsx)(`input`,{"aria-label":`番种名称`,value:e.name,onChange:e=>i(n=>({...n,fanDefinitions:n.fanDefinitions.map((n,r)=>r===t?{...n,name:e.target.value}:n)}))}),(0,j.jsx)(`input`,{"aria-label":`番种分值`,type:`number`,value:e.fan,onChange:e=>i(n=>({...n,fanDefinitions:n.fanDefinitions.map((n,r)=>r===t?{...n,fan:Number(e.target.value)}:n)}))}),(0,j.jsx)(`input`,{"aria-label":`番种说明`,value:e.description,onChange:e=>i(n=>({...n,fanDefinitions:n.fanDefinitions.map((n,r)=>r===t?{...n,description:e.target.value}:n)}))}),(0,j.jsx)(`button`,{className:`icon-button`,"aria-label":`删除番种`,onClick:()=>i(e=>({...e,fanDefinitions:e.fanDefinitions.filter((e,n)=>n!==t)})),children:(0,j.jsx)(ye,{size:15})})]},e.id))]}),(0,j.jsx)(Hn,{issues:d})]}):null]})}function Hn({issues:e}){let t=e.filter(e=>e.level===`错误`);return(0,j.jsxs)(`div`,{className:`validation-panel ${t.length?`has-errors`:``}`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(_e,{size:18}),(0,j.jsx)(`strong`,{children:t.length?`${t.length} 个问题阻止保存`:`规则结构可运行`})]}),e.slice(0,5).map((e,t)=>(0,j.jsxs)(`p`,{children:[(0,j.jsx)(`b`,{children:e.level}),e.message,(0,j.jsx)(`small`,{children:e.suggestion})]},`${e.path}-${t}`))]})}function Un({onHelp:e}){let[t,n]=(0,C.useState)(localStorage.getItem(`减少动画`)===`true`),[r,i]=(0,C.useState)(localStorage.getItem(`高对比度`)===`true`),a=(e,t)=>{localStorage.setItem(e,String(t)),document.documentElement.dataset[e]=String(t)};return(0,C.useEffect)(()=>{document.documentElement.dataset.减少动画=String(t),document.documentElement.dataset.高对比度=String(r)},[]),(0,j.jsxs)(`div`,{className:`page settings-page`,children:[(0,j.jsx)(En,{title:`设置`,subtitle:`显示、隐私与使用边界`}),(0,j.jsxs)(`section`,{className:`settings-group`,children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`显示`}),(0,j.jsxs)(`label`,{className:`setting-row`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:`减少动画`}),(0,j.jsx)(`p`,{children:`关闭牌面和面板的过渡效果`})]}),(0,j.jsx)(`input`,{type:`checkbox`,checked:t,onChange:e=>{n(e.target.checked),a(`减少动画`,e.target.checked)}})]}),(0,j.jsxs)(`label`,{className:`setting-row`,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:`高对比度`}),(0,j.jsx)(`p`,{children:`加强文字、牌面与桌布之间的对比`})]}),(0,j.jsx)(`input`,{type:`checkbox`,checked:r,onChange:e=>{i(e.target.checked),a(`高对比度`,e.target.checked)}})]})]}),(0,j.jsxs)(`section`,{className:`settings-group`,children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`本地数据`}),(0,j.jsxs)(`div`,{className:`privacy-card`,children:[(0,j.jsx)(_e,{size:28}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`strong`,{children:`数据只保存在这台设备`}),(0,j.jsx)(`p`,{children:`听风不上传牌谱、规则或使用记录。清除浏览器站点数据会同时删除这些内容。`})]})]})]}),(0,j.jsxs)(`section`,{className:`settings-group`,children:[(0,j.jsx)(`span`,{className:`eyebrow`,children:`关于`}),(0,j.jsxs)(`button`,{className:`setting-link`,onClick:e,children:[(0,j.jsxs)(`div`,{children:[(0,j.jsx)(ne,{size:20}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`strong`,{children:`使用帮助与算法边界`}),(0,j.jsx)(`small`,{children:`了解录牌、推荐和规则编辑`})]})]}),(0,j.jsx)(re,{size:19})]}),(0,j.jsx)(`div`,{className:`setting-link static`,children:(0,j.jsxs)(`div`,{children:[(0,j.jsx)(O,{size:20}),(0,j.jsxs)(`span`,{children:[(0,j.jsx)(`strong`,{children:`听风 · 麻将助手`}),(0,j.jsx)(`small`,{children:`版本 0.1.0 · 离线 PWA`})]})]})})]})]})}function Wn({onBack:e}){return(0,j.jsxs)(`div`,{className:`page help-page`,children:[(0,j.jsx)(En,{title:`使用帮助`,subtitle:`理解信息、建议与限制`,onBack:e}),(0,j.jsxs)(`section`,{className:`help-hero`,children:[(0,j.jsx)(ie,{size:42}),(0,j.jsx)(`h2`,{children:`让建议更准,关键是录对公开信息。`}),(0,j.jsx)(`p`,{children:`自己的摸打必须准确;他家的舍牌和副露必须记录;摸切或手切可以按观察结果补充。`})]}),(0,j.jsxs)(`div`,{className:`help-sections`,children:[(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`01`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`如何开始一局`}),(0,j.jsx)(`p`,{children:`选择规则、庄家位置、门风与圈风,再录入自己的 13 张起手牌。若自己是庄家,需要录入 14 张并直接出牌。`})]})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`02`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`如何记录他家动作`}),(0,j.jsx)(`p`,{children:`点击“上家、对家、下家”并选择其舍牌。系统会自动推进未知摸牌和牌墙数量;吃碰杠请使用“记录鸣牌”。`})]})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`03`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`怎么看推荐`}),(0,j.jsx)(`p`,{children:`前三项建议综合向听、有效牌、番值潜力和放铳风险。置信度随公开信息完整度变化,不等于确定结果。`})]})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`04`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`推荐摸什么是什么意思`}),(0,j.jsx)(`p`,{children:`它表示哪些后续进张最能改善牌形以及牌墙中估计还剩几张,不代表能够预测或选择下一张牌。`})]})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`05`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`如何新增规则`}),(0,j.jsx)(`p`,{children:`在规则中心复制内置规则,再到电脑端规则编辑器调整参数、流程节点和番种。保存前必须通过结构和安全校验。`})]})]}),(0,j.jsxs)(`article`,{children:[(0,j.jsx)(`span`,{children:`!`}),(0,j.jsxs)(`div`,{children:[(0,j.jsx)(`h3`,{children:`公平使用`}),(0,j.jsx)(`p`,{children:`本应用用于个人训练和允许辅助工具的休闲牌局。正式赛事或线上平台可能禁止实时外部辅助,请遵守其规则。`})]})]})]})]})}function Gn({icon:e,title:t,text:n}){return(0,j.jsxs)(`div`,{className:`empty-state`,children:[(0,j.jsx)(`span`,{children:e}),(0,j.jsx)(`h2`,{children:t}),(0,j.jsx)(`p`,{children:n})]})}(0,tt.createRoot)(document.getElementById(`root`)).render((0,j.jsx)(C.StrictMode,{children:(0,j.jsx)(On,{})})),`serviceWorker`in navigator&&window.addEventListener(`load`,()=>{navigator.serviceWorker.register(`/sw.js`).catch(()=>void 0)});