1import{c as Tr,d as Ir,f as Gi,g as Ar}from"./chunk-C5P3YSZX.js";import{a as Ss,b as it,c as Tu,d as Iu,e as Au,f as je}from"./chunk-KBAYTWTD.js";import{$ as vi,A as nt,B as Xl,C as Mu,D as Su,E as ku,F as Ou,G as Be,H as bn,I as at,J as Oe,K as st,L as Yn,M as Zl,N as ut,O as Xn,P as qi,Q as Ql,R as hi,S as _i,T as Vn,U as yn,V as Cn,W as $o,X as $i,Y as xi,Z as ha,_ as Eu,a as fu,aa as lt,b as $l,ba as bi,c as cn,d as rt,e as $e,f as hu,g as _u,h as ua,i as xu,j as Wo,k as vu,l as fa,m as Go,n as Ge,o as bu,p as yu,q as si,t as Wi,u as Cu,v as wu,w as fi,x as Yl,y as qo,z as Pu}from"./chunk-5AK5Q4BQ.js";import{$a as du,$b as Ms,Ab as we,Bb as Pe,C as Jg,Cb as Uo,Da as su,Db as L,E as xn,F as eu,Ga as lu,Gb as S,H as pa,Hb as h,Ib as mu,J as tu,Jb as Kt,K as Ul,Kb as gu,Mb as oi,Nb as ri,Ob as ai,Pb as Jt,Q as nu,Qb as l,R as iu,Rb as R,Sb as F,Ta as Zt,Tb as Se,U as bt,Ua as Ie,Ub as ui,V as kr,Vb as A0,W as ou,Wa as cu,Wb as ce,Xa as mo,Xb as de,Ya as d,Yb as pe,Z as Pt,_b as ji,a as ze,aa as jl,ac as ga,b as Ye,bb as ae,bc as jo,ca as on,cb as pu,cc as _e,d as da,da as zo,dc as Hi,e as ye,ea as ru,ec as be,f as Ri,fc as Ho,g as ue,gb as We,gc as ln,h as Zg,ia as ma,ib as Gl,ic as uu,j as Qg,ja as k,ka as O,kc as Er,la as Le,lb as A,m as Et,ma as Mt,n as fn,pa as Hl,r as Kg,ra as au,rb as vn,sb as x,ta as Or,tb as le,u as po,ua as Nn,ub as te,v as On,vb as Qt,wb as ql,xa as Wl,xb as r,yb as a,zb as w}from"./chunk-WFZCLYHN.js";var Vu=ye((pc,Nu)=>{"use strict";(function(n,t){typeof pc=="object"&&typeof Nu<"u"?t(pc):typeof define=="function"&&define.amd?define(["exports"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.StompJs={}))})(pc,function(n){"use strict";function t(Q,j){Q.terminate=function(){let Y=()=>{};this.onerror=Y,this.onmessage=Y,this.onopen=Y;let U=new Date,K=Math.random().toString().substring(2,8),J=this.onclose;this.onclose=ge=>{let xe=new Date().getTime()-U.getTime();j(`Discarded socket (#${K}) closed after ${xe}ms, with code/reason: ${ge.code}/${ge.reason}`)},this.close(),J?.call(Q,{code:4001,reason:`Quick discarding socket (#${K}) without waiting for the shutdown sequence.`,wasClean:!1})}}let e={LF:` 2`,NULL:"\0"};class i{get body(){return!this._body&&this.isBinaryBody&&(this._body=new TextDecoder().decode(this._binaryBody)),this._body||""}get binaryBody(){return!this._binaryBody&&!this.isBinaryBody&&(this._binaryBody=new TextEncoder().encode(this._body)),this._binaryBody}constructor(j){let{command:Y,headers:U,body:K,binaryBody:J,escapeHeaderValues:ge,skipContentLengthHeader:xe}=j;this.command=Y,this.headers=Object.assign({},U||{}),J?(this._binaryBody=J,this.isBinaryBody=!0):(this._body=K||"",this.isBinaryBody=!1),this.escapeHeaderValues=ge||!1,this.skipContentLengthHeader=xe||!1}static fromRawFrame(j,Y){let U={},K=J=>J.replace(/^\s+|\s+$/g,"");for(let J of j.headers.reverse()){J.indexOf(":");let ge=K(J[0]),xe=K(J[1]);Y&&j.command!=="CONNECT"&&j.command!=="CONNECTED"&&(xe=i.hdrValueUnEscape(xe)),U[ge]=xe}return new i({command:j.command,headers:U,binaryBody:j.binaryBody,escapeHeaderValues:Y})}toString(){return this.serializeCmdAndHeaders()}serialize(){let j=this.serializeCmdAndHeaders();return this.isBinaryBody?i.toUnit8Array(j,this._binaryBody).buffer:j+this._body+e.NULL}serializeCmdAndHeaders(){let j=[this.command];this.skipContentLengthHeader&&delete this.headers["content-length"];for(let Y of Object.keys(this.headers||{})){let U=this.headers[Y];this.escapeHeaderValues&&this.command!=="CONNECT"&&this.command!=="CONNECTED"?j.push(`${Y}:${i.hdrValueEscape(`${U}`)}`):j.push(`${Y}:${U}`)}return(this.isBinaryBody||!this.isBodyEmpty()&&!this.skipContentLengthHeader)&&j.push(`content-length:${this.bodyLength()}`),j.join(e.LF)+e.LF+e.LF}isBodyEmpty(){return this.bodyLength()===0}bodyLength(){let j=this.binaryBody;return j?j.length:0}static sizeOfUTF8(j){return j?new TextEncoder().encode(j).length:0}static toUnit8Array(j,Y){let U=new TextEncoder().encode(j),K=new Uint8Array([0]),J=new Uint8Array(U.length+Y.length+K.length);return J.set(U),J.set(Y,U.length),J.set(K,U.length+Y.length),J}static marshall(j){return new i(j).serialize()}static hdrValueEscape(j){return j.replace(/\\/g,"\\\\").replace(/\r/g,"\\r").replace(/\n/g,"\\n").replace(/:/g,"\\c")}static hdrValueUnEscape(j){return j.replace(/\\r/g,"\r").replace(/\\n
2/g,` 3`).replace(/\\c/g,":").replace(/\\\\/g,"\\")}}let o=0,s=10,m=13,f=58;class v{constructor(j,Y){this.onFrame=j,this.onIncomingPing=Y,this._encoder=new TextEncoder,this._decoder=new TextDecoder,this._token=[],this._initState()}parseChunk(j,Y=!1){let U;if(typeof j=="string"?U=this._encoder.encode(j):U=new Uint8Array(j),Y&&U[U.length-1]!==0){let K=new Uint8Array(U.length+1);K.set(U,0),K[U.length]=0,U=K}for(let K=0;K<U.length;K++){let J=U[K];this._onByte(J)}}_collectFrame(j){if(j!==o&&j!==m){if(j===s){this.onIncomingPing();return}this._onByte=this._collectCommand,this._reinjectByte(j)}}_collectCommand(j){if(j!==m){if(j===s){this._results.command=this._consumeTokenAsUTF8(),this._onByte=this._collectHeaders;return}this._consumeByte(j)}}_collectHeaders(j){if(j!==m){if(j===s){this._setupCollectBody();return}this._onByte=this._collectHeaderKey,this._reinjectByte(j)}}_reinjectByte(j){this._onByte(j)}_collectHeaderKey(j){if(j===f){this._headerKey=this._consumeTokenAsUTF8(),this._onByte=this._collectHeaderValue;return}this._consumeByte(j)}_collectHeaderValue(j){if(j!==m){if(j===s){this._results.headers.push([this._headerKey,this._consumeTokenAsUTF8()]),this._headerKey=void 0,this._onByte=this._collectHeaders;return}this._consumeByte(j)}}_setupCollectBody(){let j=this._results.headers.filter(Y=>Y[0]==="content-length")[0];j?(this._bodyBytesRemaining=parseInt(j[1],10),this._onByte=this._collectBodyFixedSize):this._onByte=this._collectBodyNullTerminated}_collectBodyNullTerminated(j){if(j===o){this._retrievedBody();return}this._consumeByte(j)}_collectBodyFixedSize(j){if(this._bodyBytesRemaining--===0){this._retrievedBody();return}this._consumeByte(j)}_retrievedBody(){this._results.binaryBody=this._consumeTokenAsRaw();try{this.onFrame(this._results)}catch(j){console.log("Ignoring an exception thrown by a frame handler. Original exception: ",j)}this._initState()}_consumeByte(j){this._token.push(j)}_consumeTokenAsUTF8(){return this._decoder.decode(this._consumeTokenAsRaw())}_consumeTokenAsRaw(){let j=new Uint8Array(this._token);return this._token=[],j}_initState(){this._results={command:void 0,headers:[],binaryBody:void 0},this._token=[],this._headerKey=void 0,this._onByte=this._collectFrame}}n.StompSocketState=void 0,function(Q){Q[Q.CONNECTING=0]="CONNECTING",Q[Q.OPEN=1]="OPEN",Q[Q.CLOSING=2]="CLOSING",Q[Q.CLOSED=3]="CLOSED"}(n.StompSocketState||(n.StompSocketState={})),n.ActivationState=void 0,function(Q){Q[Q.ACTIVE=0]="ACTIVE",Q[Q.DEACTIVATING=1]="DEACTIVATING",Q[Q.INACTIVE=2]="INACTIVE"}(n.ActivationState||(n.ActivationState={})),n.ReconnectionTimeMode=void 0,function(Q){Q[Q.LINEAR=0]="LINEAR",Q[Q.EXPONENTIAL=1]="EXPONENTIAL"}(n.ReconnectionTimeMode||(n.ReconnectionTimeMode={})),n.TickerStrategy=void 0,function(Q){Q.Interval="interval",Q.Worker="worker"}(n.TickerStrategy||(n.TickerStrategy={}));class y{constructor(j,Y=n.TickerStrategy.Interval,U){this._interval=j,this._strategy=Y,this._debug=U,this._workerScript=` 4 var startTime = Date.now(); 5 setInterval(function() { 6 self.postMessage(Date.now() - startTime); 7 }, ${this._interval}); 8 `}start(j){this.stop(),this.shouldUseWorker()?this.runWorker(j):this.runInterval(j)}stop(){this.disposeWorker(),this.disposeInterval()}shouldUseWorker(){return typeof Worker<"u"&&this._strategy===n.TickerStrategy.Worker}runWorker(j){this._debug("Using runWorker for outgoing pings"),this._worker||(this._worker=new Worker(URL.createObjectURL(new Blob([this._workerScript],{type:"text/javascript"}))),this._worker.onmessage=Y=>j(Y.data))}runInterval(j){if(this._debug("Using runInterval for outgoing pings"),!this._timer){let Y=Date.now();this._timer=setInterval(()=>{j(Date.now()-Y)},this._interval)}}disposeWorker(){this._worker&&(this._worker.terminate(),delete this._worker,this._debug("Outgoing ping disposeWorker"))}disposeInterval(){this._timer&&(clearInterval(this._timer),delete this._timer,this._debug("Outgoing ping disposeInterval"))}}class M{constructor(j){this.versions=j}supportedVersions(){return this.versions.join(",")}protocolVersions(){return this.versions.map(j=>`v${j.replace(".","")}.stomp`)}}M.V1_0="1.0",M.V1_1="1.1",M.V1_2="1.2",M.default=new M([M.V1_2,M.V1_1,M.
8V1_0]);class I{get connectedVersion(){return this._connectedVersion}get connected(){return this._connected}constructor(j,Y,U){this._client=j,this._webSocket=Y,this._connected=!1,this._serverFrameHandlers={CONNECTED:K=>{this.debug(`connected to server ${K.headers.server}`),this._connected=!0,this._connectedVersion=K.headers.version,this._connectedVersion===M.V1_2&&(this._escapeHeaderValues=!0),this._setupHeartbeat(K.headers),this.onConnect(K)},MESSAGE:K=>{let J=K.headers.subscription,ge=this._subscriptions[J]||this.onUnhandledMessage,xe=K,he=this,Ce=this._connectedVersion===M.V1_2?xe.headers.ack:xe.headers["message-id"];xe.ack=(De={})=>he.ack(Ce,J,De),xe.nack=(De={})=>he.nack(Ce,J,De),ge(xe)},RECEIPT:K=>{let J=this._receiptWatchers[K.headers["receipt-id"]];J?(J(K),delete this._receiptWatchers[K.headers["receipt-id"]]):this.onUnhandledReceipt(K)},ERROR:K=>{this.onStompError(K)}},this._counter=0,this._subscriptions={},this._receiptWatchers={},this._partialData="",this._escapeHeaderValues=!1,this._lastServerActivityTS=Date.now(),this.debug=U.debug,this.stompVersions=U.stompVersions,this.connectHeaders=U.connectHeaders,this.disconnectHeaders=U.disconnectHeaders,this.heartbeatIncoming=U.heartbeatIncoming,this.heartbeatToleranceMultiplier=U.heartbeatGracePeriods,this.heartbeatOutgoing=U.heartbeatOutgoing,this.splitLargeFrames=U.splitLargeFrames,this.maxWebSocketChunkSize=U.maxWebSocketChunkSize,this.forceBinaryWSFrames=U.forceBinaryWSFrames,this.logRawCommunication=U.logRawCommunication,this.appendMissingNULLonIncoming=U.appendMissingNULLonIncoming,this.discardWebsocketOnCommFailure=U.discardWebsocketOnCommFailure,this.onConnect=U.onConnect,this.onDisconnect=U.onDisconnect,this.onStompError=U.onStompError,this.onWebSocketClose=U.onWebSocketClose,this.onWebSocketError=U.onWebSocketError,this.onUnhandledMessage=U.onUnhandledMessage,this.onUnhandledReceipt=U.onUnhandledReceipt,this.onUnhandledFrame=U.onUnhandledFrame,this.onHeartbeatReceived=U.onHeartbeatReceived,this.onHeartbeatLost=U.onHeartbeatLost}start(){let j=new v(U=>{let K=i.fromRawFrame(U,this._escapeHeaderValues);this.logRawCommunication||this.debug(`<<< ${K}`),(this._serverFrameHandlers[K.command]||this.onUnhandledFrame)(K)},()=>{this.debug("<<< PONG"),this.onHeartbeatReceived()});this._webSocket.onmessage=U=>{if(this.debug("Received data"),this._lastServerActivityTS=Date.now(),this.logRawCommunication){let K=U.data instanceof ArrayBuffer?new TextDecoder().decode(U.data):U.data;this.debug(`<<< ${K}`)}j.parseChunk(U.data,this.appendMissingNULLonIncoming)},this._webSocket.onclose=U=>{this.debug(`Connection closed to ${this._webSocket.url}`),this._cleanUp(),this.onWebSocketClose(U)},this._webSocket.onerror=U=>{this.onWebSocketError(U)};let Y=()=>{let U=Object.assign({},this.connectHeaders);this.debug("Web Socket Opened..."),U["accept-version"]=this.stompVersions.supportedVersions(),U["heart-beat"]=[this.heartbeatOutgoing,this.heartbeatIncoming].join(","),this._transmit({command:"CONNECT",headers:U})};this._webSocket.readyState===n.StompSocketState.OPEN?Y():this._webSocket.onopen=Y}_setupHeartbeat(j){if(j.version!==M.V1_1&&j.version!==M.V1_2||!j["heart-beat"])return;let[Y,U]=j["heart-beat"].split(",").map(K=>parseInt(K,10));if(this.heartbeatOutgoing!==0&&U!==0){let K=Math.max(this.heartbeatOutgoing,U);this.debug(`send PING every ${K}ms`),this._pinger=new y(K,this._client.heartbeatStrategy,this.debug),this._pinger.start(()=>{this._webSocket.readyState===n.StompSocketState.OPEN&&(this._webSocket.send(e.LF),this.debug(">>> PING"))})}if(this.heartbeatIncoming!==0&&Y!==0){let K=Math.max(this.heartbeatIncoming,Y);this.debug(`check PONG every ${K}ms`),this._ponger=setInterval(()=>{let J=Date.now()-this._lastServerActivityTS;J>K*this.heartbeatToleranceMultiplier&&(this.debug(`did not receive server activity for the last ${J}ms`),this.onHeartbeatLost(),this._closeOrDiscardWebsocket())},K)}}_closeOrDiscardWebsocket(){this.discardWebsocketOnCommFailure?(this.debug("Discarding websocket, the underlying socket may linger for a while"),this.discardWebsocket()):(this.debug("Issuing close on the websocket"),this._closeWebsocket())}forceDisconnect(){this._webSocket&&(this._webSocket.readyState===n.StompSocketState.CONNECTING||this._webSocket.readyState===n.StompSocketState.OPEN)&&this._closeOrDiscardWebsocket()}_closeWebsocket(){this._webSocket.onmessage=()=>{},this._webSocket.close()}discardWebsocket(){typeof this._webSocket.terminate!="function"&&t(this._webSocket,j=>this.debug(j)),this._webSocket.terminate()}_transmit(j){let{command:Y,headers:U,body:K,binaryBody:J,skipContentLengthHeader:ge}=j,xe=new i({command:Y,headers:U,body:K,binaryBody:J,escapeHeaderValues:this._escapeHeaderValues,skipContentLengthHeader:ge}),he=xe.serialize();if(this.logRawCommunication?this.debug(`>>> ${he}`):this.debug(`>>> ${xe}`),this.forceBinaryWSFrames&&typeof he=="string"&&(he=new TextEncoder().encode(he)),typeof he!="string"||!this.splitLargeFrames)this._webSocket.send(he);else{let Ce=he;for(;Ce.length>0;){let De=Ce.substring(0,this.maxWebSocketChunkSize);Ce=Ce.substring(this.maxWebSocketChunkSize),this._webSocket.send(De),this.debug(`chunk sent = ${De.length}, remaining = ${Ce.length}`)}}}dispose(){if(this.connected)try{let j=Object.assign({},this.disconnectHeaders);j.receipt||(j.receipt=`close-${this._counter++}`),this.watchForReceipt(j.receipt,Y=>{this._closeWebsocket(),this._cleanUp(),this.onDisconnect(Y)}),this._transmit({command:"DISCONNECT",headers:j})}catch(j){this.debug(`Ignoring error during disconnect ${j}`)}else(this._webSocket.readyState===n.StompSocketState.CONNECTING||this._webSocket.readyState===n.StompSocketState.OPEN)&&this._closeWebsocket()}_cleanUp(){this._connected=!1,this._pinger&&(this._pinger.stop(),this._pinger=void 0),this._ponger&&(clearInterval(this._ponger),this._ponger=void 0)}publish(j){let{destination:Y,headers:U,body:K,binaryBody:J,skipContentLengthHeader:ge}=j,xe=Object.assign({destination:Y},U);this._transmit({command:"SEND",headers:xe,body:K,binaryBody:J,skipContentLengthHeader:ge})}watchForReceipt(j,Y){this._receiptWatchers[j]=Y}subscribe(j,Y,U={}){U=Object.assign({}
8,U),U.id||(U.id=`sub-${this._counter++}`),U.destination=j,this._subscriptions[U.id]=Y,this._transmit({command:"SUBSCRIBE",headers:U});let K=this;return{id:U.id,unsubscribe(J){return K.unsubscribe(U.id,J)}}}unsubscribe(j,Y={}){Y=Object.assign({},Y),delete this._subscriptions[j],Y.id=j,this._transmit({command:"UNSUBSCRIBE",headers:Y})}begin(j){let Y=j||`tx-${this._counter++}`;this._transmit({command:"BEGIN",headers:{transaction:Y}});let U=this;return{id:Y,commit(){U.commit(Y)},abort(){U.abort(Y)}}}commit(j){this._transmit({command:"COMMIT",headers:{transaction:j}})}abort(j){this._transmit({command:"ABORT",headers:{transaction:j}})}ack(j,Y,U={}){U=Object.assign({},U),this._connectedVersion===M.V1_2?U.id=j:U["message-id"]=j,U.subscription=Y,this._transmit({command:"ACK",headers:U})}nack(j,Y,U={}){return U=Object.assign({},U),this._connectedVersion===M.V1_2?U.id=j:U["message-id"]=j,U.subscription=Y,this._transmit({command:"NACK",headers:U})}}class B{get webSocket(){return this._stompHandler?._webSocket}get disconnectHeaders(){return this._disconnectHeaders}set disconnectHeaders(j){this._disconnectHeaders=j,this._stompHandler&&(this._stompHandler.disconnectHeaders=this._disconnectHeaders)}get connected(){return!!this._stompHandler&&this._stompHandler.connected}get connectedVersion(){return this._stompHandler?this._stompHandler.connectedVersion:void 0}get active(){return this.state===n.ActivationState.ACTIVE}_changeState(j){this.state=j,this.onChangeState(j)}constructor(j={}){this.stompVersions=M.default,this.connectionTimeout=0,this.reconnectDelay=5e3,this._nextReconnectDelay=0,this.maxReconnectDelay=15*60*1e3,this.reconnectTimeMode=n.ReconnectionTimeMode.LINEAR,this.heartbeatIncoming=1e4,this.heartbeatToleranceMultiplier=2,this.heartbeatOutgoing=1e4,this.heartbeatStrategy=n.TickerStrategy.Interval,this.splitLargeFrames=!1,this.maxWebSocketChunkSize=8*1024,this.forceBinaryWSFrames=!1,this.appendMissingNULLonIncoming=!1,this.discardWebsocketOnCommFailure=!1,this.state=n.ActivationState.INACTIVE;let Y=()=>{};this.debug=Y,this.beforeConnect=Y,this.onConnect=Y,this.onDisconnect=Y,this.onUnhandledMessage=Y,this.onUnhandledReceipt=Y,this.onUnhandledFrame=Y,this.onHeartbeatReceived=Y,this.onHeartbeatLost=Y,this.onStompError=Y,this.onWebSocketClose=Y,this.onWebSocketError=Y,this.logRawCommunication=!1,this.onChangeState=Y,this.connectHeaders={},this._disconnectHeaders={},this.configure(j)}configure(j){Object.assign(this,j),this.maxReconnectDelay>0&&this.maxReconnectDelay<this.reconnectDelay&&(this.debug(`Warning: maxReconnectDelay (${this.maxReconnectDelay}ms) is less than reconnectDelay (${this.reconnectDelay}ms). Using reconnectDelay as the maxReconnectDelay delay.`),this.maxReconnectDelay=this.reconnectDelay)}activate(){let j=()=>{if(this.active){this.debug("Already ACTIVE, ignoring request to activate");return}this._changeState(n.ActivationState.ACTIVE),this._nextReconnectDelay=this.reconnectDelay,this._connect()};this.state===n.ActivationState.DEACTIVATING?(this.debug("Waiting for deactivation to finish before activating"),this.deactivate().then(()=>{j()})):j()}_connect(){return ue(this,null,function*(){if(yield this.beforeConnect(this),this._stompHandler){this.debug("There is already a stompHandler, skipping the call to connect");return}if(!this.active){this.debug("Client has been marked inactive, will not attempt to connect");return}this.connectionTimeout>0&&(this._connectionWatcher&&clearTimeout(this._connectionWatcher),this._connectionWatcher=setTimeout(()=>{this.connected||(this.debug(`Connection not established in ${this.connectionTimeout}ms, closing socket`),this.forceDisconnect())},this.connectionTimeout)),this.debug("Opening Web Socket...");let j=this._createWebSocket();this._stompHandler=new I(this,j,{debug:this.debug,stompVersions:this.stompVersions,connectHeaders:this.connectHeaders,disconnectHeaders:this._disconnectHeaders,heartbeatIncoming:this.heartbeatIncoming,heartbeatGracePeriods:this.heartbeatToleranceMultiplier,heartbeatOutgoing:this.heartbeatOutgoing,heartbeatStrategy:this.heartbeatStrategy,splitLargeFrames:this.splitLargeFrames,maxWebSocketChunkSize:this.maxWebSocketChunkSize,forceBinaryWSFrames:this.forceBinaryWSFrames,logRawCommunication:this.logRawCommunication,appendMissingNULLonIncoming:this.appendMissingNULLonIncoming,discardWebsocketOnCommFailure:this.discardWebsocketOnCommFailure,onConnect:Y=>{if(this._connectionWatcher&&(clearTimeout(this._connectionWatcher),this._connectionWatcher=void 0),this._nextReconnectDelay=this.reconnectDelay,!this.active){this.debug("STOMP got connected while deactivate was issued, will disconnect now"),this._disposeStompHandler();return}this.onConnect(Y)},onDisconnect:Y=>{this.onDisconnect(Y)},onStompError:Y=>{this.onStompError(Y)},onWebSocketClose:Y=>{this._stompHandler=void 0,this.state===n.ActivationState.DEACTIVATING&&this._changeState(n.ActivationState.INACTIVE),this.onWeb
8SocketClose(Y),this.active&&this._schedule_reconnect()},onWebSocketError:Y=>{this.onWebSocketError(Y)},onUnhandledMessage:Y=>{this.onUnhandledMessage(Y)},onUnhandledReceipt:Y=>{this.onUnhandledReceipt(Y)},onUnhandledFrame:Y=>{this.onUnhandledFrame(Y)},onHeartbeatReceived:()=>{this.onHeartbeatReceived()},onHeartbeatLost:()=>{this.onHeartbeatLost()}}),this._stompHandler.start()})}_createWebSocket(){let j;if(this.webSocketFactory)j=this.webSocketFactory();else if(this.brokerURL)j=new WebSocket(this.brokerURL,this.stompVersions.protocolVersions());else throw new Error("Either brokerURL or webSocketFactory must be provided");return j.binaryType="arraybuffer",j}_schedule_reconnect(){this._nextReconnectDelay>0&&(this.debug(`STOMP: scheduling reconnection in ${this._nextReconnectDelay}ms`),this._reconnector=setTimeout(()=>{this.reconnectTimeMode===n.ReconnectionTimeMode.EXPONENTIAL&&(this._nextReconnectDelay=this._nextReconnectDelay*2,this.maxReconnectDelay!==0&&(this._nextReconnectDelay=Math.min(this._nextReconnectDelay,this.maxReconnectDelay))),this._connect()},this._nextReconnectDelay))}deactivate(){return ue(this,arguments,function*(j={}){let Y=j.force||!1,U=this.active,K;if(this.state===n.ActivationState.INACTIVE)return this.debug("Already INACTIVE, nothing more to do"),Promise.resolve();if(this._changeState(n.ActivationState.DEACTIVATING),this._nextReconnectDelay=0,this._reconnector&&(clearTimeout(this._reconnector),this._reconnector=void 0),this._stompHandler&&this.webSocket.readyState!==n.StompSocketState.CLOSED){let J=this._stompHandler.onWebSocketClose;K=new Promise((ge,xe)=>{this._stompHandler.onWebSocketClose=he=>{J(he),ge()}})}else return this._changeState(n.ActivationState.INACTIVE),Promise.resolve();return Y?this._stompHandler?.discardWebsocket():U&&this._disposeStompHandler(),K})}forceDisconnect(){this._stompHandler&&this._stompHandler.forceDisconnect()}_disposeStompHandler(){this._stompHandler&&this._stompHandler.dispose()}publish(j){this._checkConnection(),this._stompHandler.publish(j)}_checkConnection(){if(!this.connected)throw new TypeError("There is no underlying STOMP connection")}watchForReceipt(j,Y){this._checkConnection(),this._stompHandler.watchForReceipt(j,Y)}subscribe(j,Y,U={}){return this._checkConnection(),this._stompHandler.subscribe(j,Y,U)}unsubscribe(j,Y={}){this._checkConnection(),this._stompHandler.unsubscribe(j,Y)}begin(j){return this._checkConnection(),this._stompHandler.begin(j)}commit(j){this._checkConnection(),this._stompHandler.commit(j)}abort(j){this._checkConnection(),this._stompHandler.abort(j)}ack(j,Y,U={}){this._checkConnection(),this._stompHandler.ack(j,Y,U)}nack(j,Y,U={}){this._checkConnection(),this._stompHandler.nack(j,Y,U)}}class N{}class H{}class W{constructor(j){this.client=j}get outgoing(){return this.client.heartbeatOutgoing}set outgoing(j){this.client.heartbeatOutgoing=j}get incoming(){return this.client.heartbeatIncoming}set incoming(j){this.client.heartbeatIncoming=j}}class G extends B{constructor(j){super(),this.maxWebSocketFrameSize=16*1024,this._heartbeatInfo=new W(this),this.reconnect_delay=0,this.webSocketFactory=j,this.debug=(...Y)=>{console.log(...Y)}}_parseConnect(...j){let Y,U,K,J={};if(j.length<2)throw new Error("Connect requires at least 2 arguments");if(typeof j[1]=="function")[J,U,K,Y]=j;else switch(j.length){case 6:[J.login,J.passcode,U,K,Y,J.host]=j;break;default:[J.login,J.passcode,U,K,Y]=j}return[J,U,K,Y]}connect(...j){let Y=this._parseConnect(...j);Y[0]&&(this.connectHeaders=Y[0]),Y[1]&&(this.onConnect=Y[1]),Y[2]&&(this.onStompError=Y[2]),Y[3]&&(this.onWebSocketClose=Y[3]),super.activate()}disconnect(j,Y={}){j&&(this.onDisconnect=j),this.disconnectHeaders=Y,super.deactivate()}send(j,Y={},U=""){Y=Object.assign({},Y);let K=Y["content-length"]===!1;K&&delete Y["content-length"],this.publish({destination:j,headers:Y,body:U,skipContentLengthHeader:K})}set reconnect_delay(j){this.reconnectDelay=j}get ws(){return this.webSocket}get version(){return this.connectedVersion}get onreceive(){return this.onUnhandledMessage}set onreceive(j){this.onUnhandledMessage=j}get onreceipt(){return this.onUnhandledReceipt}set onreceipt(j){this.onUnhandledReceipt=j}get heartbeat(){return this._heartbeatInfo}set heartbeat(j){this.heartbeatIncoming=j.incoming,this.heartbeatOutgoing=j.outgoing}}let Z=(()=>{class Q{static client(Y,U){U==null&&(U=M.default.protocolVersions());let K=()=>{let J=Q.WebSocketClass||WebSocket;
8return new J(Y,U)};return new G(K)}static over(Y){let U;return typeof Y=="function"?U=Y:(console.warn("Stomp.over did not receive a factory, auto reconnect will not work. Please see https://stomp-js.github.io/api-docs/latest/classes/Stomp.html#over"),U=()=>Y),new G(U)}}return Q.WebSocketClass=null,Q})();n.Client=B,n.CompatClient=G,n.FrameImpl=i,n.Parser=v,n.Stomp=Z,n.StompConfig=N,n.StompHeaders=H,n.Versions=M})});var Fu=ye((cX,B0)=>{"use strict";global.crypto&&global.crypto.getRandomValues?B0.exports.randomBytes=function(n){var t=new Uint8Array(n);return global.crypto.getRandomValues(t),t}:B0.exports.randomBytes=function(n){for(var t=new Array(n),e=0;e<n;e++)t[e]=Math.floor(Math.random()*256);return t}});var Br=ye((dX,Uu)=>{"use strict";var jP=Fu(),zu="abcdefghijklmnopqrstuvwxyz012345";Uu.exports={string:function(n){for(var t=zu.length,e=jP.randomBytes(n),i=[],o=0;o<n;o++)i.push(zu.substr(e[o]%t,1));return i.join("")},number:function(n){return Math.floor(Math.random()*n)},numberString:function(n){var t=(""+(n-1)).length,e=new Array(t+1).join("0");return(e+this.number(n)).slice(-t)}}});var go=ye((pX,mc)=>{"use strict";var HP=Br(),ya={},N0=!1,ju=global.chrome&&global.chrome.app&&global.chrome.app.runtime;mc.exports={attachEvent:function(n,t){typeof global.addEventListener<"u"?global.addEventListener(n,t,!1):global.document&&global.attachEvent&&(global.document.attachEvent("on"+n,t),global.attachEvent("on"+n,t))},detachEvent:function(n,t){typeof global.addEventListener<"u"?global.removeEventListener(n,t,!1):global.document&&global.detachEvent&&(global.document.detachEvent("on"+n,t),global.detachEvent("on"+n,t))},unloadAdd:function(n){if(ju)return null;var t=HP.string(8);return ya[t]=n,N0&&setTimeout(this.triggerUnloadCallbacks,0),t},unloadDel:function(n){n in ya&&delete ya[n]},triggerUnloadCallbacks:function(){for(var n in ya)ya[n](),delete ya[n]}};var WP=function(){N0||(N0=!0,mc.exports.triggerUnloadCallbacks())};ju||mc.exports.attachEvent("unload",WP)});var Wu=ye((mX,Hu)=>{"use strict";Hu.exports=function(t,e){if(e=e.split(":")[0],t=+t,!t)return!1;switch(e){case"http":case"ws":return t!==80;case"https":case"wss":return t!==443;case"ftp":return t!==21;case"gopher":return t!==70;case"file":return!1}return t!==0}});var $u=ye(V0=>{"use strict";var GP=Object.prototype.hasOwnProperty,qP;function Gu(n){try{return decodeURIComponent(n.replace(/\+/g," "))}catch{return null}}function qu(n){try{return encodeURIComponent(n)}catch{return null}}function $P(n){for(var t=/([^=?#&]+)=?([^&]*)/g,e={},i;i=t.exec(n);){var o=Gu(i[1]),s=Gu(i[2]);o===null||s===null||o in e||(e[o]=s)}return e}function YP(n,t){t=t||"";var e=[],i,o;typeof t!="string"&&(t="?");for(o in n)if(GP.call(n,o)){if(i=n[o],!i&&(i===null||i===qP||isNaN(i))&&(i=""),o=qu(o),i=qu(i),o===null||i===null)continue;e.push(o+"="+i)}return e.length?t+e.join("&"):""}V0.stringify=YP;V0.parse=$P});var z0=ye((uX,ef)=>{"use strict";var Xu=Wu(),gc=$u(),XP=/^[\x00-\x20\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/,Zu=/[\n\r\t]/g,ZP=/^[A-Za-z][A-Za-z0-9+-.]*:\/\//,Qu=/:\d+$/,QP=/^([a-z][a-z0-9.+-]*:)?(\/\/)?([\\/]+)?([\S\s]*)/i,KP=/^[a-zA-Z]:/;function F0(n){return(n||"").toString().replace(XP,"")}var L0=[["#","hash"],["?","query"],function(t,e){return Zi(e.protocol)?t.replace(/\\/g,"/"):t},["/","pathname"],["@","auth",1],[NaN,"host",void 0,1,1],[/:(\d*)$/,"port",void 0,1],[NaN,"hostname",void 0,1,1]],Yu={hash:1,query:1};function Ku(n){var t;typeof window<"u"?t=window:typeof global<"u"?t=global:typeof self<"u"?t=self:t={};var e=t.location||{};n=n||e;var i={},o=typeof n,s;if(n.protocol==="blob:")i=new Qi(unescape(n.pathname),{});else if(o==="string"){i=new Qi(n,{});for(s in Yu)delete i[s]}else if(o==="object"){for(s in n)s in Yu||(i[s]=n[s]);i.slashes===void 0&&(i.slashes=ZP.test(n.href))}return i}function Zi(n){return n==="file:"||n==="ftp:"||n==="http:"||n==="https:"||n==="ws:"||n==="wss:"}function Ju(n,t){n=F0(n),n=n.replace(Zu,""),t=t||{};var e=QP.exec(n),i=e[1]?e[1].toLowerCase():"",o=!!e[2],s=!!e[3],m=0,f;return o?s?(f=e[2]+e[3]+e[4],m=e[2].length+e[3].length):(f=e[2]+e[4],m=e[2].length):s?(f=e[3]+e[4],m=e[3].length):f=e[4],i==="file:"?m>=2&&(f=f.slice(2)):Zi(i)?f=e[4]:i?o&&(f=f.slice(2)):m>=2&&Zi(t.protocol)&&(f=e[4]),{protocol:i,slashes:o||Zi(i),slashesCount:m,rest:f}}function JP(n,t){if(n==="")return t;for(var e=(t||"/").split("/").slice(0,-1).concat(n.split("/")),i=e.length,o=e[i-1],s=!1,m=0;i--;)e[i]==="."?e.splice(i,1):e[i]===".."?(e.splice(i,1),m++):m&&(i===0&&(s=!0),e.splice(i,1),m--);return s&&e.unshift(""),(o==="."||o==="..")&&e.push(""),e.join("/")}function Qi(n,t,e){if(n=F0(n),n=n.replace(Zu,""),!(this instanceof Qi))return new Qi(n,t,e);var i,o,s,m,f,v,y=L0.slice(),M=typeof t,I=this,B=0;
8for(M!=="object"&&M!=="string"&&(e=t,t=null),e&&typeof e!="function"&&(e=gc.parse),t=Ku(t),o=Ju(n||"",t),i=!o.protocol&&!o.slashes,I.slashes=o.slashes||i&&t.slashes,I.protocol=o.protocol||t.protocol||"",n=o.rest,(o.protocol==="file:"&&(o.slashesCount!==2||KP.test(n))||!o.slashes&&(o.protocol||o.slashesCount<2||!Zi(I.protocol)))&&(y[3]=[/(.*)/,"pathname"]);B<y.length;B++){if(m=y[B],typeof m=="function"){n=m(n,I);continue}s=m[0],v=m[1],s!==s?I[v]=n:typeof s=="string"?(f=s==="@"?n.lastIndexOf(s):n.indexOf(s),~f&&(typeof m[2]=="number"?(I[v]=n.slice(0,f),n=n.slice(f+m[2])):(I[v]=n.slice(f),n=n.slice(0,f)))):(f=s.exec(n))&&(I[v]=f[1],n=n.slice(0,f.index)),I[v]=I[v]||i&&m[3]&&t[v]||"",m[4]&&(I[v]=I[v].toLowerCase())}e&&(I.query=e(I.query)),i&&t.slashes&&I.pathname.charAt(0)!=="/"&&(I.pathname!==""||t.pathname!=="")&&(I.pathname=JP(I.pathname,t.pathname)),I.pathname.charAt(0)!=="/"&&Zi(I.protocol)&&(I.pathname="/"+I.pathname),Xu(I.port,I.protocol)||(I.host=I.hostname,I.port=""),I.username=I.password="",I.auth&&(f=I.auth.indexOf(":"),~f?(I.username=I.auth.slice(0,f),I.username=encodeURIComponent(decodeURIComponent(I.username)),I.password=I.auth.slice(f+1),I.password=encodeURIComponent(decodeURIComponent(I.password))):I.username=encodeURIComponent(decodeURIComponent(I.auth)),I.auth=I.password?I.username+":"+I.password:I.username),I.origin=I.protocol!=="file:"&&Zi(I.protocol)&&I.host?I.protocol+"//"+I.host:"null",I.href=I.toString()}function eM(n,t,e){var i=this;switch(n){case"query":typeof t=="string"&&t.length&&(t=(e||gc.parse)(t)),i[n]=t;break;case"port":i[n]=t,Xu(t,i.protocol)?t&&(i.host=i.hostname+":"+t):(i.host=i.hostname,i[n]="");break;case"hostname":i[n]=t,i.port&&(t+=":"+i.port),i.host=t;break;case"host":i[n]=t,Qu.test(t)?(t=t.split(":"),i.port=t.pop(),i.hostname=t.join(":")):(i.hostname=t,i.port="");break;case"protocol":i.protocol=t.toLowerCase(),i.slashes=!e;break;case"pathname":case"hash":if(t){var o=n==="pathname"?"/":"#";i[n]=t.charAt(0)!==o?o+t:t}else i[n]=t;break;case"username":case"password":i[n]=encodeURIComponent(t);break;case"auth":var s=t.indexOf(":");~s?(i.username=t.slice(0,s),i.username=encodeURIComponent(decodeURIComponent(i.username)),i.password=t.slice(s+1),i.password=encodeURIComponent(decodeURIComponent(i.password))):i.username=encodeURIComponent(decodeURIComponent(t))}for(var m=0;m<L0.length;m++){var f=L0[m];f[4]&&(i[f[1]]=i[f[1]].toLowerCase())}return i.auth=i.password?i.username+":"+i.password:i.username,i.origin=i.protocol!=="file:"&&Zi(i.protocol)&&i.host?i.protocol+"//"+i.host:"null",i.href=i.toString(),i}function tM(n){(!n||typeof n!="function")&&(n=gc.stringify);var t,e=this,i=e.host,o=e.protocol;o&&o.charAt(o.length-1)!==":"&&(o+=":");var s=o+(e.protocol&&e.slashes||Zi(e.protocol)?"//":"");return e.username?(s+=e.username,e.password&&(s+=":"+e.password),s+="@"):e.password?(s+=":"+e.password,s+="@"):e.protocol!=="file:"&&Zi(e.protocol)&&!i&&e.pathname!=="/"&&(s+="@"),(i[i.length-1]===":"||Qu.test(e.hostname)&&!e.port)&&(i+=":"),s+=i+e.pathname,t=typeof e.query=="object"?n(e.query):e.query,t&&(s+=t.charAt(0)!=="?"?"?"+t:t),e.hash&&(s+=e.hash),s}Qi.prototype={set:eM,toString:tM};Qi.extractProtocol=Ju;Qi.location=Ku;Qi.trimLeft=F0;Qi.qs=gc;ef.exports=Qi});var li=ye((fX,tf)=>{"use strict";var nM=z0(),iM=function(){};tf.exports={getOrigin:function(n){if(!n)return null;var t=new nM(n);if(t.protocol==="file:")return null;var e=t.port;return e||(e=t.protocol==="https:"?"443":"80"),t.protocol+"//"+t.hostname+":"+e},isOriginEqual:function(n,t){var e=this.getOrigin(n)===this.getOrigin(t);return iM("same",n,t,e),e},isSchemeEqual:function(n,t){return n.split(":")[0]===t.split(":")[0]},addPath:function(n,t){var e=n.split("?");return e[0]+t+(e[1]?"?"+e[1]:"")},addQuery:function(n,t){return n+(n.indexOf("?")===-1?"?"+t:"&"+t)},isLoopbackAddr:function(n){return/^127\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})$/i.test(n)||/^\[::1\]$/.test(n)}}});var ft=ye((hX,U0)=>{"use strict";typeof Object.create=="function"?U0.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:U0.exports=function(t,e){if(e){t.super_=e;var i=function(){};i.prototype=e.prototype,t.prototype=new i,t.prototype.constructor=t}}});var j0=ye((_X,nf)=>{"use strict";function uc(){this._listeners={}}uc.prototype.addEventListener=function(n,t){n in this._listeners||(this._listeners[n]=[]);var e=this._listeners[n];e.indexOf(t)===-1&&(e=e.concat([t])),this._listeners[n]=e};uc.prototype.removeEventListener=function(n,t){var e=this._listeners[n];if(e){var i=e.indexOf(t);if(i!==-1){e.length>1?this._listeners[n]=e.slice(0,i).concat(e.slice(i+1)):delete this._listeners[n];return}}};uc.prototype.dispatchEvent=function(){var n=arguments[0],t=n.type,e=arguments.length===1?[n]:Array.apply(null,arguments);if(this["on"+t]&&this["on"+t].apply(this,e),t in this._listeners)for(var i=this._listeners[t],o=0;o<i.length;o++)i[o].apply(this,e)};nf.exports=uc});var zn=ye((xX,of)=>{"use strict";var oM=ft(),fc=j0();function Zo(){fc.call(this)}oM(Zo,fc);Zo.prototype.removeAllListeners=function(n){n?delete this._listeners[n]:this._listeners={}};Zo.prototype.once=function(n,t){var e=this,i=!1;function o(){e.removeListener(n,o),i||(i=!0,t.apply(this,arguments))}this.on(n,o)};Zo.prototype.emit=function(){var n=arguments[0],t=this._listeners[n];if(t){for(var e=arguments.length,i=new Array(e-1),o=1;o<e;o++)i[o-1]=arguments[o];for(var s=0;s<t.length;s++)t[s].apply(this,i)}};Zo.prototype.on=Zo.prototype.addListener=fc.prototype.addEventListener;Zo.prototype.removeListener=fc.prototype.removeEventListener;of.exports.EventEmitter=Zo});var af=ye((vX,H0)=>{"use strict";var rf=global.WebSocket||global.MozWebSocket;rf?H0.exports=function(t){return new rf(t)}:H0.exports=void 0});var pf=ye((bX,df)=>{"use strict";var sf=go(),rM=li(),aM=ft(),lf=zn().EventEmitter,cf=af(),uo=function(){};function fo(n,t,e){if(!fo.enabled())throw new Error("Transport created when disabled");lf.call(this),uo("constructor",n);var i=this,o=rM.addPath(n,"/websocket");o.slice(0,5)==="https"?o="wss"+o.slice(5):o="ws"+o.slice(4),this.url=o,this.ws=new cf(this.url,[],e),this.ws.onmessage=function(s){uo("message event",s.data),i.emit("message",s.data)},this.unloadRef=sf.unloadAdd(function(){uo("unload"),i.ws.close()}
8),this.ws.onclose=function(s){uo("close event",s.code,s.reason),i.emit("close",s.code,s.reason),i._cleanup()},this.ws.onerror=function(s){uo("error event",s),i.emit("close",1006,"WebSocket connection broken"),i._cleanup()}}aM(fo,lf);fo.prototype.send=function(n){var t="["+n+"]";uo("send",t),this.ws.send(t)};fo.prototype.close=function(){uo("close");var n=this.ws;this._cleanup(),n&&n.close()};fo.prototype._cleanup=function(){uo("_cleanup");var n=this.ws;n&&(n.onmessage=n.onclose=n.onerror=null),sf.unloadDel(this.unloadRef),this.unloadRef=this.ws=null,this.removeAllListeners()};fo.enabled=function(){return uo("enabled"),!!cf};fo.transportName="websocket";fo.roundTrips=2;df.exports=fo});var uf=ye((yX,gf)=>{"use strict";var sM=ft(),mf=zn().EventEmitter,ho=function(){};function Nr(n,t){ho(n),mf.call(this),this.sendBuffer=[],this.sender=t,this.url=n}sM(Nr,mf);Nr.prototype.send=function(n){ho("send",n),this.sendBuffer.push(n),this.sendStop||this.sendSchedule()};Nr.prototype.sendScheduleWait=function(){ho("sendScheduleWait");var n=this,t;this.sendStop=function(){ho("sendStop"),n.sendStop=null,clearTimeout(t)},t=setTimeout(function(){ho("timeout"),n.sendStop=null,n.sendSchedule()},25)};Nr.prototype.sendSchedule=function(){ho("sendSchedule",this.sendBuffer.length);var n=this;if(this.sendBuffer.length>0){var t="["+this.sendBuffer.join(",")+"]";this.sendStop=this.sender(this.url,t,function(e){n.sendStop=null,e?(ho("error",e),n.emit("close",e.code||1006,"Sending error: "+e),n.close()):n.sendScheduleWait()}),this.sendBuffer=[]}};Nr.prototype._cleanup=function(){ho("_cleanup"),this.removeAllListeners()};Nr.prototype.close=function(){ho("close"),this._cleanup(),this.sendStop&&(this.sendStop(),this.sendStop=null)};gf.exports=Nr});var _f=ye((CX,hf)=>{"use strict";var lM=ft(),ff=zn().EventEmitter,Os=function(){};function hc(n,t,e){Os(t),ff.call(this),this.Receiver=n,this.receiveUrl=t,this.AjaxObject=e,this._scheduleReceiver()}lM(hc,ff);hc.prototype._scheduleReceiver=function(){Os("_scheduleReceiver");var n=this,t=this.poll=new this.Receiver(this.receiveUrl,this.AjaxObject);t.on("message",function(e){Os("message",e),n.emit("message",e)}),t.once("close",function(e,i){Os("close",e,i,n.pollIsClosing),n.poll=t=null,n.pollIsClosing||(i==="network"?n._scheduleReceiver():(n.emit("close",e||1006,i),n.removeAllListeners()))})};hc.prototype.abort=function(){Os("abort"),this.removeAllListeners(),this.pollIsClosing=!0,this.poll&&this.poll.abort()};hf.exports=hc});var q0=ye((wX,xf)=>{"use strict";var cM=ft(),dM=li(),W0=uf(),pM=_f(),_c=function(){};function G0(n,t,e,i,o){var s=dM.addPath(n,t);_c(s);var m=this;W0.call(this,n,e),this.poll=new pM(i,s,o),this.poll.on("message",function(f){_c("poll message",f),m.emit("message",f)}),this.poll.once("close",function(f,v){_c("poll close",f,v),m.poll=null,m.emit("close",f,v),m.close()})}cM(G0,W0);G0.prototype.close=function(){W0.prototype.close.call(this),_c("close"),this.removeAllListeners(),this.poll&&(this.poll.abort(),this.poll=null)};xf.exports=G0});var Vr=ye((PX,yf)=>{"use strict";var mM=ft(),gM=li(),vf=q0(),$0=function(){};function uM(n){return function(t,e,i){$0("create ajax sender",t,e);var o={};typeof e=="string"&&(o.headers={"Content-type":"text/plain"});var s=gM.addPath(t,"/xhr_send"),m=new n("POST",s,e,o);return m.once("finish",function(f){if($0("finish",f),m=null,f!==200&&f!==204)return i(new Error("http status "+f));i()}),function(){$0("abort"),m.close(),m=null;var f=new Error("Aborted");f.code=1e3,i(f)}}}function bf(n,t,e,i){vf.call(this,n,t,uM(i),e,i)}mM(bf,vf);yf.exports=bf});var Ts=ye((MX,wf)=>{"use strict";var fM=ft(),Cf=zn().EventEmitter,Qo=function(){};function Es(n,t){Qo(n),Cf.call(this);var e=this;this.bufferPosition=0,this.xo=new t("POST",n,null),this.xo.on("chunk",this._chunkHandler.bind(this)),this.xo.once("finish",function(i,o){Qo("finish",i,o),e._chunkHandler(i,o),e.xo=null;var s=i===200?"network":"permanent";Qo("close",s),e.emit("close",null,s),e._cleanup()})}fM(Es,Cf);Es.prototype._chunkHandler=function(n,t){if(Qo("_chunkHandler",n),!(n!==200||!t))for(var e=-1;;this.bufferPosition+=e+1){var i=t.slice(this.bufferPosition);if(e=i.indexOf(` 9`),e===-1)break;var o=i.slice(0,e);
9o&&(Qo("message",o),this.emit("message",o))}};Es.prototype._cleanup=function(){Qo("_cleanup"),this.removeAllListeners()};Es.prototype.abort=function(){Qo("abort"),this.xo&&(this.xo.close(),Qo("close"),this.emit("close",null,"user"),this.xo=null),this._cleanup()};wf.exports=Es});var Y0=ye((SX,Of)=>{"use strict";var Mf=zn().EventEmitter,hM=ft(),Sf=go(),_M=li(),Is=global.XMLHttpRequest,Zn=function(){};function Ki(n,t,e,i){Zn(n,t);var o=this;Mf.call(this),setTimeout(function(){o._start(n,t,e,i)},0)}hM(Ki,Mf);Ki.prototype._start=function(n,t,e,i){var o=this;try{this.xhr=new Is}catch{}if(!this.xhr){Zn("no xhr"),this.emit("finish",0,"no xhr support"),this._cleanup();return}t=_M.addQuery(t,"t="+ +new Date),this.unloadRef=Sf.unloadAdd(function(){Zn("unload cleanup"),o._cleanup(!0)});try{this.xhr.open(n,t,!0),this.timeout&&"timeout"in this.xhr&&(this.xhr.timeout=this.timeout,this.xhr.ontimeout=function(){Zn("xhr timeout"),o.emit("finish",0,""),o._cleanup(!1)})}catch(m){Zn("exception",m),this.emit("finish",0,""),this._cleanup(!1);return}if((!i||!i.noCredentials)&&Ki.supportsCORS&&(Zn("withCredentials"),this.xhr.withCredentials=!0),i&&i.headers)for(var s in i.headers)this.xhr.setRequestHeader(s,i.headers[s]);this.xhr.onreadystatechange=function(){if(o.xhr){var m=o.xhr,f,v;switch(Zn("readyState",m.readyState),m.readyState){case 3:try{v=m.status,f=m.responseText}catch{}Zn("status",v),v===1223&&(v=204),v===200&&f&&f.length>0&&(Zn("chunk"),o.emit("chunk",v,f));break;case 4:v=m.status,Zn("status",v),v===1223&&(v=204),(v===12005||v===12029)&&(v=0),Zn("finish",v,m.responseText),o.emit("finish",v,m.responseText),o._cleanup(!1);break}}};try{o.xhr.send(e)}catch{o.emit("finish",0,""),o._cleanup(!1)}};Ki.prototype._cleanup=function(n){if(Zn("cleanup"),!!this.xhr){if(this.removeAllListeners(),Sf.unloadDel(this.unloadRef),this.xhr.onreadystatechange=function(){},this.xhr.ontimeout&&(this.xhr.ontimeout=null),n)try{this.xhr.abort()}catch{}this.unloadRef=this.xhr=null}};Ki.prototype.close=function(){Zn("close"),this._cleanup(!0)};Ki.enabled=!!Is;var Pf=["Active"].concat("Object").join("X");!Ki.enabled&&Pf in global&&(Zn("overriding xmlhttprequest"),Is=function(){try{return new global[Pf]("Microsoft.XMLHTTP")}catch{return null}},Ki.enabled=!!new Is);var kf=!1;try{kf="withCredentials"in new Is}catch{}Ki.supportsCORS=kf;Of.exports=Ki});var As=ye((kX,Ef)=>{"use strict";var xM=ft(),xc=Y0();function X0(n,t,e,i){xc.call(this,n,t,e,i)}xM(X0,xc);X0.enabled=xc.enabled&&xc.supportsCORS;Ef.exports=X0});var Ca=ye((OX,Tf)=>{"use strict";var vM=ft(),Z0=Y0();function Q0(n,t,e){Z0.call(this,n,t,e,{noCredentials:!0})}vM(Q0,Z0);Q0.enabled=Z0.enabled;Tf.exports=Q0});var wa=ye((EX,If)=>{"use strict";If.exports={isOpera:function(){return global.navigator&&/opera/i.test(global.navigator.userAgent)},isKonqueror:function(){return global.navigator&&/konqueror/i.test(global.navigator.userAgent)},hasDomain:function(){if(!global.document)return!0;try{return!!global.document.domain}catch{return!1}}}});var Rf=ye((TX,Df)=>{"use strict";var bM=ft(),Af=Vr(),yM=Ts(),K0=As(),CM=Ca(),wM=wa();function Pa(n){if(!CM.enabled&&!K0.enabled)throw new Error("Transport created when disabled");Af.call(this,n,"/xhr_streaming",yM,K0)}bM(Pa,Af);Pa.enabled=function(n){return n.nullOrigin||wM.isOpera()?!1:K0.enabled};Pa.transportName="xhr-streaming";Pa.roundTrips=2;Pa.needBody=!!global.document;Df.exports=Pa});var vc=ye((IX,Vf)=>{"use strict";var Bf=zn().EventEmitter,PM=ft(),Nf=go(),MM=wa(),SM=li(),Ko=function(){};function Lr(n,t,e){Ko(n,t);var i=this;Bf.call(this),setTimeout(function(){i._start(n,t,e)},0)}PM(Lr,Bf);Lr.prototype._start=function(n,t,e){Ko("_start");var i=this,o=new global.XDomainRequest;t=SM.addQuery(t,"t="+ +new Date),o.onerror=function(){Ko("onerror"),i._error()},o.ontimeout=function(){Ko("ontimeout"),i._error()},o.onprogress=function(){Ko("progress",o.responseText),i.emit("chunk",200,o.responseText)},o.onload=function(){Ko("load"),i.emit("finish",200,o.responseText),i._cleanup(!1)},this.xdr=o,this.unloadRef=Nf.unloadAdd(function(){i._cleanup(!0)});try{this.xdr.open(n,t),this.timeout&&(this.xdr.timeout=this.timeout),this.xdr.send(e)}catch{this._error()}};
9Lr.prototype._error=function(){this.emit("finish",0,""),this._cleanup(!1)};Lr.prototype._cleanup=function(n){if(Ko("cleanup",n),!!this.xdr){if(this.removeAllListeners(),Nf.unloadDel(this.unloadRef),this.xdr.ontimeout=this.xdr.onerror=this.xdr.onprogress=this.xdr.onload=null,n)try{this.xdr.abort()}catch{}this.unloadRef=this.xdr=null}};Lr.prototype.close=function(){Ko("close"),this._cleanup(!0)};Lr.enabled=!!(global.XDomainRequest&&MM.hasDomain());Vf.exports=Lr});var ep=ye((AX,Ff)=>{"use strict";var kM=ft(),Lf=Vr(),OM=Ts(),J0=vc();function Ds(n){if(!J0.enabled)throw new Error("Transport created when disabled");Lf.call(this,n,"/xhr_streaming",OM,J0)}kM(Ds,Lf);Ds.enabled=function(n){return n.cookie_needed||n.nullOrigin?!1:J0.enabled&&n.sameScheme};Ds.transportName="xdr-streaming";Ds.roundTrips=2;Ff.exports=Ds});var tp=ye((DX,zf)=>{"use strict";zf.exports=global.EventSource});var Hf=ye((RX,jf)=>{"use strict";var EM=ft(),Uf=zn().EventEmitter,TM=tp(),Ma=function(){};function Rs(n){Ma(n),Uf.call(this);var t=this,e=this.es=new TM(n);e.onmessage=function(i){Ma("message",i.data),t.emit("message",decodeURI(i.data))},e.onerror=function(i){Ma("error",e.readyState,i);var o=e.readyState!==2?"network":"permanent";t._cleanup(),t._close(o)}}EM(Rs,Uf);Rs.prototype.abort=function(){Ma("abort"),this._cleanup(),this._close("user")};Rs.prototype._cleanup=function(){Ma("cleanup");var n=this.es;n&&(n.onmessage=n.onerror=null,n.close(),this.es=null)};Rs.prototype._close=function(n){Ma("close",n);var t=this;setTimeout(function(){t.emit("close",null,n),t.removeAllListeners()},200)};jf.exports=Rs});var np=ye((BX,Gf)=>{"use strict";var IM=ft(),Wf=Vr(),AM=Hf(),DM=As(),RM=tp();function Sa(n){if(!Sa.enabled())throw new Error("Transport created when disabled");Wf.call(this,n,"/eventsource",AM,DM)}IM(Sa,Wf);Sa.enabled=function(){return!!RM};Sa.transportName="eventsource";Sa.roundTrips=2;Gf.exports=Sa});var ip=ye((NX,qf)=>{"use strict";qf.exports="1.6.1"});var ka=ye((VX,_o)=>{"use strict";var bc=go(),BM=wa(),Fr=function(){};_o.exports={WPrefix:"_jp",currentWindowId:null,polluteGlobalNamespace:function(){_o.exports.WPrefix in global||(global[_o.exports.WPrefix]={})},postMessage:function(n,t){global.parent!==global?global.parent.postMessage(JSON.stringify({windowId:_o.exports.currentWindowId,type:n,data:t||""}),"*"):Fr("Cannot postMessage, no parent window.",n,t)},createIframe:function(n,t){var e=global.document.createElement("iframe"),i,o,s=function(){Fr("unattach"),clearTimeout(i);try{e.onload=null}catch{}e.onerror=null},m=function(){Fr("cleanup"),e&&(s(),setTimeout(function(){e&&e.parentNode.removeChild(e),e=null},0),bc.unloadDel(o))},f=function(y){Fr("onerror",y),e&&(m(),t(y))},v=function(y,M){Fr("post",y,M),setTimeout(function(){try{e&&e.contentWindow&&e.contentWindow.postMessage(y,M)}catch{}},0)};return e.src=n,e.style.display="none",e.style.position="absolute",e.onerror=function(){f("onerror")},e.onload=function(){Fr("onload"),clearTimeout(i),i=setTimeout(function(){f("onload timeout")},2e3)},global.document.body.appendChild(e),i=setTimeout(function(){f("timeout")},15e3),o=bc.unloadAdd(m),{post:v,cleanup:m,loaded:s}},createHtmlfile:function(n,t){var e=["Active"].concat("Object").join("X"),i=new global[e]("htmlfile"),o,s,m,f=function(){clearTimeout(o),m.onerror=null},v=function(){i&&(f(),bc.unloadDel(s),m.parentNode.removeChild(m),m=i=null,CollectGarbage())},y=function(B){Fr("onerror",B),i&&(v(),t(B))},M=function(B,N){try{setTimeout(function(){m&&m.contentWindow&&m.contentWindow.postMessage(B,N)},0)}catch{}};i.open(),i.write('<html><script>document.domain="'+global.document.domain+'";<\/script></html>'),i.close(),i.parentWindow[_o.exports.WPrefix]=global[_o.exports.WPrefix];var I=i.createElement("div");return i.body.appendChild(I),m=i.createElement("iframe"),I.appendChild(m),m.src=n,m.onerror=function(){y("onerror")},o=setTimeout(function(){y("timeout")},15e3),s=bc.unloadAdd(v),{post:M,cleanup:v,loaded:f}}};_o.exports.iframeEnabled=!1;global.document&&(_o.exports.iframeEnabled=(typeof global.postMessage=="function"||typeof global.postMessage=="object")&&!BM.isKonqueror())});var rp=ye((LX,Zf)=>{"use strict";var NM=ft(),$f=zn().EventEmitter,VM=ip(),op=li(),Yf=ka(),Xf=go(),LM=Br(),Ji=function(){};function eo(n,t,e){if(!eo.enabled())throw new Error("Transport created when disabled");$f.call(this);var i=this;this.origin=op.getOrigin(e),this.baseUrl=e,this.transUrl=t,this.transport=n,this.windowId=LM.string(8);var o=op.addPath(e,"/iframe.html")+"#"+this.windowId;Ji(n,t,o),this.iframeObj=Yf.createIframe(o,function(s){Ji("err callback"),i.emit("close",1006,"Unable to load an iframe ("+s+")"),i.close()}),this.onmessageCallback=this._message.bind(this),Xf.attachEvent("message",this.onmessageCallback)}NM(eo,$f);eo.prototype.close=function(){if(Ji("close"),this.removeAllListeners(),this.iframeObj){Xf.detachEvent("message",this.onmessageCallback);try{this.postMessage("c")}catch{}this.iframeObj.cleanup(),this.iframeObj=null,this.onmessageCallback=this.iframeObj=null}};eo.prototype._message=function(n){if(Ji("message",n.data),!op.isOriginEqual(n.origin,this.origin)){Ji("not same origin",n.origin,this.origin);return}var t;try{t=JSON.parse(n.data)}catch{Ji("bad json",n.data);return}if(t.windowId!==this.windowId){Ji("mismatched window id",t.windowId,this.windowId);return}switch(t.type){case"s":this.iframeObj.loaded(),this.postMessage("s",JSON.stringify([VM,this.transport,this.transUrl,this.baseUrl]));break;
9case"t":this.emit("message",t.data);break;case"c":var e;try{e=JSON.parse(t.data)}catch{Ji("bad json",t.data);return}this.emit("close",e[0],e[1]),this.close();break}};eo.prototype.postMessage=function(n,t){Ji("postMessage",n,t),this.iframeObj.post(JSON.stringify({windowId:this.windowId,type:n,data:t||""}),this.origin)};eo.prototype.send=function(n){Ji("send",n),this.postMessage("m",n)};eo.enabled=function(){return Yf.iframeEnabled};eo.transportName="iframe";eo.roundTrips=2;Zf.exports=eo});var yc=ye((FX,Qf)=>{"use strict";Qf.exports={isObject:function(n){var t=typeof n;return t==="function"||t==="object"&&!!n},extend:function(n){if(!this.isObject(n))return n;for(var t,e,i=1,o=arguments.length;i<o;i++){t=arguments[i];for(e in t)Object.prototype.hasOwnProperty.call(t,e)&&(n[e]=t[e])}return n}}});var wc=ye((zX,Kf)=>{"use strict";var FM=ft(),Cc=rp(),zM=yc();Kf.exports=function(n){function t(e,i){Cc.call(this,n.transportName,e,i)}return FM(t,Cc),t.enabled=function(e,i){if(!global.document)return!1;var o=zM.extend({},i);return o.sameOrigin=!0,n.enabled(o)&&Cc.enabled()},t.transportName="iframe-"+n.transportName,t.needBody=!0,t.roundTrips=Cc.roundTrips+n.roundTrips-1,t.facadeTransport=n,t}});var nh=ye((UX,th)=>{"use strict";var UM=ft(),zr=ka(),jM=li(),eh=zn().EventEmitter,HM=Br(),xo=function(){};function Bi(n){xo(n),eh.call(this);var t=this;zr.polluteGlobalNamespace(),this.id="a"+HM.string(6),n=jM.addQuery(n,"c="+decodeURIComponent(zr.WPrefix+"."+this.id)),xo("using htmlfile",Bi.htmlfileEnabled);var e=Bi.htmlfileEnabled?zr.createHtmlfile:zr.createIframe;global[zr.WPrefix][this.id]={start:function(){xo("start"),t.iframeObj.loaded()},message:function(i){xo("message",i),t.emit("message",i)},stop:function(){xo("stop"),t._cleanup(),t._close("network")}},this.iframeObj=e(n,function(){xo("callback"),t._cleanup(),t._close("permanent")})}UM(Bi,eh);Bi.prototype.abort=function(){xo("abort"),this._cleanup(),this._close("user")};Bi.prototype._cleanup=function(){xo("_cleanup"),this.iframeObj&&(this.iframeObj.cleanup(),this.iframeObj=null),delete global[zr.WPrefix][this.id]};Bi.prototype._close=function(n){xo("_close",n),this.emit("close",null,n),this.removeAllListeners()};Bi.htmlfileEnabled=!1;var Jf=["Active"].concat("Object").join("X");if(Jf in global)try{Bi.htmlfileEnabled=!!new global[Jf]("htmlfile")}catch{}Bi.enabled=Bi.htmlfileEnabled||zr.iframeEnabled;th.exports=Bi});var sp=ye((jX,oh)=>{"use strict";var WM=ft(),ap=nh(),GM=Ca(),ih=Vr();function Bs(n){if(!ap.enabled)throw new Error("Transport created when disabled");ih.call(this,n,"/htmlfile",ap,GM)}WM(Bs,ih);Bs.enabled=function(n){return ap.enabled&&n.sameOrigin};Bs.transportName="htmlfile";Bs.roundTrips=2;oh.exports=Bs});var cp=ye((HX,sh)=>{"use strict";var qM=ft(),rh=Vr(),$M=Ts(),lp=As(),ah=Ca();function Ns(n){if(!ah.enabled&&!lp.enabled)throw new Error("Transport created when disabled");rh.call(this,n,"/xhr",$M,lp)}qM(Ns,rh);Ns.enabled=function(n){return n.nullOrigin?!1:ah.enabled&&n.sameOrigin?!0:lp.enabled};Ns.transportName="xhr-polling";Ns.roundTrips=2;sh.exports=Ns});var ph=ye((WX,dh)=>{"use strict";var YM=ft(),ch=Vr(),XM=ep(),ZM=Ts(),lh=vc();function Vs(n){if(!lh.enabled)throw new Error("Transport created when disabled");ch.call(this,n,"/xhr",ZM,lh)}YM(Vs,ch);Vs.enabled=XM.enabled;Vs.transportName="xdr-polling";Vs.roundTrips=2;dh.exports=Vs});var fh=ye((GX,uh)=>{"use strict";var Ls=ka(),mh=Br(),QM=wa(),KM=li(),JM=ft(),gh=zn().EventEmitter,Ni=function(){};function yi(n){Ni(n);var t=this;gh.call(this),Ls.polluteGlobalNamespace(),this.id="a"+mh.string(6);var e=KM.addQuery(n,"c="+encodeURIComponent(Ls.WPrefix+"."+this.id));global[Ls.WPrefix][this.id]=this._callback.bind(this),this._createScript(e),this.timeoutId=setTimeout(function(){Ni("timeout"),t._abort(new Error("JSONP script loaded abnormally (timeout)"))},yi.timeout)}JM(yi,gh);yi.prototype.abort=function(){if(Ni("abort"),global[Ls.WPrefix][this.id]){var n=new Error("JSONP user aborted read");n.code=1e3,this._abort(n)}};yi.timeout=35e3;yi.scriptErrorTimeout=1e3;yi.prototype._callback=function(n){Ni("_callback",n),this._cleanup(),!this.aborting&&(n&&(Ni("message",n),this.emit
9("message",n)),this.emit("close",null,"network"),this.removeAllListeners())};yi.prototype._abort=function(n){Ni("_abort",n),this._cleanup(),this.aborting=!0,this.emit("close",n.code,n.message),this.removeAllListeners()};yi.prototype._cleanup=function(){if(Ni("_cleanup"),clearTimeout(this.timeoutId),this.script2&&(this.script2.parentNode.removeChild(this.script2),this.script2=null),this.script){var n=this.script;n.parentNode.removeChild(n),n.onreadystatechange=n.onerror=n.onload=n.onclick=null,this.script=null}delete global[Ls.WPrefix][this.id]};yi.prototype._scriptError=function(){Ni("_scriptError");var n=this;this.errorTimer||(this.errorTimer=setTimeout(function(){n.loadedOkay||n._abort(new Error("JSONP script loaded abnormally (onerror)"))},yi.scriptErrorTimeout))};yi.prototype._createScript=function(n){Ni("_createScript",n);var t=this,e=this.script=global.document.createElement("script"),i;if(e.id="a"+mh.string(8),e.src=n,e.type="text/javascript",e.charset="UTF-8",e.onerror=this._scriptError.bind(this),e.onload=function(){Ni("onload"),t._abort(new Error("JSONP script loaded abnormally (onload)"))},e.onreadystatechange=function(){if(Ni("onreadystatechange",e.readyState),/loaded|closed/.test(e.readyState)){if(e&&e.htmlFor&&e.onclick){t.loadedOkay=!0;try{e.onclick()}catch{}}e&&t._abort(new Error("JSONP script loaded abnormally (onreadystatechange)"))}},typeof e.async>"u"&&global.document.attachEvent)if(QM.isOpera())i=this.script2=global.document.createElement("script"),i.text="try{var a = document.getElementById('"+e.id+"'); if(a)a.onerror();}catch(x){};",e.async=i.async=!1;else{try{e.htmlFor=e.id,e.event="onclick"}catch{}e.async=!0}typeof e.async<"u"&&(e.async=!0);var o=global.document.getElementsByTagName("head")[0];o.insertBefore(e,o.firstChild),i&&o.insertBefore(i,o.firstChild)};uh.exports=yi});var xh=ye((qX,_h)=>{"use strict";var e3=Br(),hh=li(),vo=function(){},ci,Fs;function t3(n){vo("createIframe",n);try{return global.document.createElement('<iframe name="'+n+'">')}catch{var t=global.document.createElement("iframe");return t.name=n,t}}function n3(){vo("createForm"),ci=global.document.createElement("form"),ci.style.display="none",ci.style.position="absolute",ci.method="POST",ci.enctype="application/x-www-form-urlencoded",ci.acceptCharset="UTF-8",Fs=global.document.createElement("textarea"),Fs.name="d",ci.appendChild(Fs),global.document.body.appendChild(ci)}_h.exports=function(n,t,e){vo(n,t),ci||n3();var i="a"+e3.string(8);ci.target=i,ci.action=hh.addQuery(hh.addPath(n,"/jsonp_send"),"i="+i);var o=t3(i);o.id=i,o.style.display="none",ci.appendChild(o);try{Fs.value=t}catch{}ci.submit();var s=function(m){vo("completed",i,m),o.onerror&&(o.onreadystatechange=o.onerror=o.onload=null,setTimeout(function(){vo("cleaning up",i),o.parentNode.removeChild(o),o=null},500),Fs.value="",e(m))};return o.onerror=function(){vo("onerror",i),s()},o.onload=function(){vo("onload",i),s()},o.onreadystatechange=function(m){vo("onreadystatechange",i,o.readyState,m),o.readyState==="complete"&&s()},function(){vo("aborted",i),s(new Error("Aborted"))}}});var yh=ye(($X,bh)=>{"use strict";var i3=ft(),vh=q0(),o3=fh(),r3=xh();function Ur(n){if(!Ur.enabled())throw new Error("Transport created when disabled");vh.call(this,n,"/jsonp",r3,o3)}i3(Ur,vh);Ur.enabled=function(){return!!global.document};Ur.transportName="jsonp-polling";Ur.roundTrips=1;Ur.needBody=!0;bh.exports=Ur});var wh=ye((YX,Ch)=>{"use strict";Ch.exports=[pf(),Rf(),ep(),np(),wc()(np()),sp(),wc()(sp()),cp(),ph(),wc()(cp()),yh()]});var Th=ye(()=>{"use strict";var zs=Array.prototype,gp=Object.prototype,a3=Function.prototype,Us=String.prototype,dp=zs.slice,up=gp.toString,Sh=function(n){return gp.toString.call(n)==="[object Function]"},s3=function(t){return up.call(t)==="[object Array]"},kh=function(t){return up.call(t)==="[object String]"},l3=Object.defineProperty&&function(){try{return Object.defineProperty({},"x",{}),!0}catch{return!1}}(),mp;l3?mp=function(n,t,e,i){!i&&t in n||Object.defineProperty(n,t,{configurable:!0,enumerable:!1,writable:!0,value:e})}:mp=function(n,t,e,i){!i&&t in n||(n[t]=e)};var js=function(n,t,e){for(var i in t)gp.hasOwnProperty.call(t,i)&&mp(n,i,t[i],e)},Oh=function(n){if(n==null)throw new TypeError("can't convert "+n+" to object");return Object(n)};function c3(n){var t=+n;return t!==t?t=0:t!==0&&t!==1/0&&t!==-1/0&&(t=(t>0||-1)*Math.floor(Math.abs(t))),t}function d3(n){return n>>>0}function pp(){}js(a3,{bind:function(t){var e=this;if(!Sh(e))throw new TypeError("Function.prototype.bind called on incompatible "+e);
9for(var i=dp.call(arguments,1),o=function(){if(this instanceof v){var y=e.apply(this,i.concat(dp.call(arguments)));return Object(y)===y?y:this}else return e.apply(t,i.concat(dp.call(arguments)))},s=Math.max(0,e.length-i.length),m=[],f=0;f<s;f++)m.push("$"+f);var v=Function("binder","return function ("+m.join(",")+"){ return binder.apply(this, arguments); }")(o);return e.prototype&&(pp.prototype=e.prototype,v.prototype=new pp,pp.prototype=null),v}});js(Array,{isArray:s3});var Ph=Object("a"),Eh=Ph[0]!=="a"||!(0 in Ph),p3=function(t){var e=!0,i=!0;return t&&(t.call("foo",function(o,s,m){typeof m!="object"&&(e=!1)}),t.call([1],function(){"use strict";i=typeof this=="string"},"x")),!!t&&e&&i};js(zs,{forEach:function(t){var e=Oh(this),i=Eh&&kh(this)?this.split(""):e,o=arguments[1],s=-1,m=i.length>>>0;if(!Sh(t))throw new TypeError;for(;++s<m;)s in i&&t.call(o,i[s],s,e)}},!p3(zs.forEach));var m3=Array.prototype.indexOf&&[0,1].indexOf(1,2)!==-1;js(zs,{indexOf:function(t){var e=Eh&&kh(this)?this.split(""):Oh(this),i=e.length>>>0;if(!i)return-1;var o=0;for(arguments.length>1&&(o=c3(arguments[1])),o=o>=0?o:Math.max(0,i+o);o<i;o++)if(o in e&&e[o]===t)return o;return-1}},m3);var Mh=Us.split;"ab".split(/(?:ab)*/).length!==2||".".split(/(.?)(.?)/).length!==4||"tesst".split(/(s)*/)[1]==="t"||"test".split(/(?:)/,-1).length!==4||"".split(/.?/).length||".".split(/()()/).length>1?function(){var n=/()??/.exec("")[1]===void 0;Us.split=function(t,e){var i=this;if(t===void 0&&e===0)return[];if(up.call(t)!=="[object RegExp]")return Mh.call(this,t,e);var o=[],s=(t.ignoreCase?"i":"")+(t.multiline?"m":"")+(t.extended?"x":"")+(t.sticky?"y":""),m=0,f,v,y,M;for(t=new RegExp(t.source,s+"g"),i+="",n||(f=new RegExp("^"+t.source+"$(?!\\s)",s)),e=e===void 0?-1>>>0:d3(e);(v=t.exec(i))&&(y=v.index+v[0].length,!(y>m&&(o.push(i.slice(m,v.index)),!n&&v.length>1&&v[0].replace(f,function(){for(var I=1;I<arguments.length-2;I++)arguments[I]===void 0&&(v[I]=void 0)}),v.length>1&&v.index<i.length&&zs.push.apply(o,v.slice(1)),M=v[0].length,m=y,o.length>=e)));)t.lastIndex===v.index&&t.lastIndex++;return m===i.length?(M||!t.test(""))&&o.push(""):o.push(i.slice(m)),o.length>e?o.slice(0,e):o}}():"0".split(void 0,0).length&&(Us.split=function(t,e){return t===void 0&&e===0?[]:Mh.call(this,t,e)});var g3=Us.substr,u3="".substr&&"0b".substr(-1)!=="b";js(Us,{substr:function(t,e){return g3.call(this,t<0&&(t=this.length+t)<0?0:t,e)}},u3)});var Ah=ye((QX,Ih)=>{"use strict";var Pc=/[\x00-\x1f\ud800-\udfff\ufffe\uffff\u0300-\u0333\u033d-\u0346\u034a-\u034c\u0350-\u0352\u0357-\u0358\u035c-\u0362\u0374\u037e\u0387\u0591-\u05af\u05c4\u0610-\u0617\u0653-\u0654\u0657-\u065b\u065d-\u065e\u06df-\u06e2\u06eb-\u06ec\u0730\u0732-\u0733\u0735-\u0736\u073a\u073d\u073f-\u0741\u0743\u0745\u0747\u07eb-\u07f1\u0951\u0958-\u095f\u09dc-\u09dd\u09df\u0a33\u0a36\u0a59-\u0a5b\u0a5e\u0b5c-\u0b5d\u0e38-\u0e39\u0f43\u0f4d\u0f52\u0f57\u0f5c\u0f69\u0f72-\u0f76\u0f78\u0f80-\u0f83\u0f93\u0f9d\u0fa2\u0fa7\u0fac\u0fb9\u1939-\u193a\u1a17\u1b6b\u1cda-\u1cdb\u1dc0-\u1dcf\u1dfc\u1dfe\u1f71\u1f73\u1f75\u1f77\u1f79\u1f7b\u1f7d\u1fbb\u1fbe\u1fc9\u1fcb\u1fd3\u1fdb\u1fe3\u1feb\u1fee-\u1fef\u1ff9\u1ffb\u1ffd\u2000-\u2001\u20d0-\u20d1\u20d4-\u20d7\u20e7-\u20e9\u2126\u212a-\u212b\u2329-\u232a\u2adc\u302b-\u302c\uaab2-\uaab3\uf900-\ufa0d\ufa10\ufa12\ufa15-\ufa1e\ufa20\ufa22\ufa25-\ufa26\ufa2a-\ufa2d\ufa30-\ufa6d\ufa70-\ufad9\ufb1d\ufb1f\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufb4e\ufff0-\uffff]/g,fp,f3=function(n){var t,e={},i=[];for(t=0;t<65536;t++)i.push(String.fromCharCode(t));return n.lastIndex=0,i.join("").replace(n,function(o){return e[o]="\\u"+("0000"+o.charCodeAt(0).toString(16)).slice(-4),""}),n.lastIndex=0,e};Ih.exports={quote:function(n){var t=JSON.stringify(n);return Pc.lastIndex=0,Pc.test(t)?(fp||(fp=f3(Pc)),t.replace(Pc,function(e){return fp[e]})):t}}});var Rh=ye((KX,Dh)=>{"use strict";var Mc=function(){};Dh.exports=function(n){return{filterToEnabled:function(t,e){var i={main:[],facade:[]};return t?typeof t=="string"&&(t=[t]):t=[],n.forEach(function(o){if(o){if(o.transportName==="websocket"&&e.websocket===!1){Mc("disabled from server","websocket");return}
9if(t.length&&t.indexOf(o.transportName)===-1){Mc("not in whitelist",o.transportName);return}o.enabled(e)?(Mc("enabled",o.transportName),i.main.push(o),o.facadeTransport&&i.facade.push(o.facadeTransport)):Mc("disabled",o.transportName)}}),i}}}});var Nh=ye((JX,Bh)=>{"use strict";var hp={};["log","debug","warn"].forEach(function(n){var t;try{t=global.console&&global.console[n]&&global.console[n].apply}catch{}hp[n]=t?function(){return global.console[n].apply(global.console,arguments)}:n==="log"?function(){}:hp.log});Bh.exports=hp});var Sc=ye((eZ,Vh)=>{"use strict";function jr(n){this.type=n}jr.prototype.initEvent=function(n,t,e){return this.type=n,this.bubbles=t,this.cancelable=e,this.timeStamp=+new Date,this};jr.prototype.stopPropagation=function(){};jr.prototype.preventDefault=function(){};jr.CAPTURING_PHASE=1;jr.AT_TARGET=2;jr.BUBBLING_PHASE=3;Vh.exports=jr});var _p=ye((tZ,Lh)=>{"use strict";Lh.exports=global.location||{origin:"http://localhost:80",protocol:"http:",host:"localhost",port:80,href:"http://localhost/",hash:""}});var jh=ye((nZ,Uh)=>{"use strict";var h3=ft(),Fh=Sc();function zh(){Fh.call(this),this.initEvent("close",!1,!1),this.wasClean=!1,this.code=0,this.reason=""}h3(zh,Fh);Uh.exports=zh});var qh=ye((iZ,Gh)=>{"use strict";var _3=ft(),Hh=Sc();function Wh(n){Hh.call(this),this.initEvent("message",!1,!1),this.data=n}_3(Wh,Hh);Gh.exports=Wh});var Xh=ye((oZ,Yh)=>{"use strict";var $h=zn().EventEmitter,x3=ft();function Hs(){var n=this;$h.call(this),this.to=setTimeout(function(){n.emit("finish",200,"{}")},Hs.timeout)}x3(Hs,$h);Hs.prototype.close=function(){clearTimeout(this.to)};Hs.timeout=2e3;Yh.exports=Hs});var vp=ye((rZ,Qh)=>{"use strict";var Zh=zn().EventEmitter,v3=ft(),b3=yc(),y3=function(){};function xp(n,t){Zh.call(this);var e=this,i=+new Date;this.xo=new t("GET",n),this.xo.once("finish",function(o,s){var m,f;if(o===200){if(f=+new Date-i,s)try{m=JSON.parse(s)}catch{y3("bad json",s)}b3.isObject(m)||(m={})}e.emit("finish",m,f),e.removeAllListeners()})}v3(xp,Zh);xp.prototype.close=function(){this.removeAllListeners(),this.xo.close()};Qh.exports=xp});var bp=ye((aZ,Jh)=>{"use strict";var C3=ft(),Kh=zn().EventEmitter,w3=Ca(),P3=vp();function kc(n){var t=this;Kh.call(this),this.ir=new P3(n,w3),this.ir.once("finish",function(e,i){t.ir=null,t.emit("message",JSON.stringify([e,i]))})}C3(kc,Kh);kc.transportName="iframe-info-receiver";kc.prototype.close=function(){this.ir&&(this.ir.close(),this.ir=null),this.removeAllListeners()};Jh.exports=kc});var i1=ye((sZ,n1)=>{"use strict";var e1=zn().EventEmitter,M3=ft(),S3=go(),t1=rp(),k3=bp(),O3=function(){};function Oc(n,t){var e=this;e1.call(this);var i=function(){var o=e.ifr=new t1(k3.transportName,t,n);o.once("message",function(s){if(s){var m;try{m=JSON.parse(s)}catch{O3("bad json",s),e.emit("finish"),e.close();return}var f=m[0],v=m[1];e.emit("finish",f,v)}e.close()}),o.once("close",function(){e.emit("finish"),e.close()})};global.document.body?i():S3.attachEvent("load",i)}M3(Oc,e1);Oc.enabled=function(){return t1.enabled()};Oc.prototype.close=function(){this.ifr&&this.ifr.close(),this.removeAllListeners(),this.ifr=null};n1.exports=Oc});var c1=ye((lZ,l1)=>{"use strict";var s1=zn().EventEmitter,E3=ft(),T3=li(),o1=vc(),r1=As(),I3=Ca(),A3=Xh(),a1=i1(),Ec=vp(),Oa=function(){};function bo(n,t){Oa(n);var e=this;s1.call(this),setTimeout(function(){e.doXhr(n,t)},0)}E3(bo,s1);bo._getReceiver=function(n,t,e){return e.sameOrigin?new Ec(t,I3):r1.enabled?new Ec(t,r1):o1.enabled&&e.sameScheme?new Ec(t,o1):a1.enabled()?new a1(n,t):new Ec(t,A3)};bo.prototype.doXhr=function(n,t){var e=this,i=T3.addPath(n,"/info");Oa("doXhr",i),this.xo=bo._getReceiver(n,i,t),this.timeoutRef=setTimeout(function(){Oa("timeout"),e._cleanup(!1),e.emit("finish")},bo.timeout),this.xo.once("finish",function(o,s){Oa("finish",o,s),e._cleanup(!0),e.emit("finish",o,s)})};bo.prototype._cleanup=function(n){Oa("_cleanup"),clearTimeout(this.timeoutRef),this.timeoutRef=null,!n&&this.xo&&this.xo.close(),this.xo=null};bo.prototype.close=function(){Oa("close"),this.removeAllListeners(),this._cleanup(!1)};bo.timeout=8e3;l1.exports=bo});var m1=ye((cZ,p1)=>{"use strict";var d1=ka();function Ws(n){this._transport=n,n.on("message",this._transportMessage.bind(this)),n.on("close",this._transportClose.bind(this))}Ws.prototype._transportClose=function(n,t){d1.postMessage("c",JSON.stringify([n,t]))};Ws.prototype._transportMessage=function(n){d1.postMessage("t",n)};Ws.prototype._send=function(n){this._transport.send(n)};Ws.prototype._close=function(){this._transport.close(),this._transport.removeAllListeners()};p1.exports=Ws});var h1=ye((dZ,f1)=>{"use strict";var g1=li(),D3=go(),R3=m1(),u1=bp(),yp=ka(),Tc=_p(),Cp=function(){};f1.exports=function(n,t){var e={};t.forEach(function(o){o.facadeTransport&&(e[o.facadeTransport.transportName]=o.facadeTransport)}
9),e[u1.transportName]=u1;var i;n.bootstrap_iframe=function(){var o;yp.currentWindowId=Tc.hash.slice(1);var s=function(m){if(m.source===parent&&(typeof i>"u"&&(i=m.origin),m.origin===i)){var f;try{f=JSON.parse(m.data)}catch{Cp("bad json",m.data);return}if(f.windowId===yp.currentWindowId)switch(f.type){case"s":var v;try{v=JSON.parse(f.data)}catch{Cp("bad json",f.data);break}var y=v[0],M=v[1],I=v[2],B=v[3];if(Cp(y,M,I,B),y!==n.version)throw new Error('Incompatible SockJS! Main site uses: "'+y+'", the iframe: "'+n.version+'".');if(!g1.isOriginEqual(I,Tc.href)||!g1.isOriginEqual(B,Tc.href))throw new Error("Can't connect to different domain from within an iframe. ("+Tc.href+", "+I+", "+B+")");o=new R3(new e[M](I,B));break;case"m":o._send(f.data);break;case"c":o&&o._close(),o=null;break}}};D3.attachEvent("message",s),yp.postMessage("s")}}});var w1=ye((pZ,C1)=>{"use strict";Th();var B3=z0(),N3=ft(),_1=Br(),V3=Ah(),Gs=li(),L3=go(),F3=Rh(),z3=yc(),U3=wa(),j3=Nh(),wp=Sc(),v1=j0(),Ic=_p(),H3=jh(),x1=qh(),W3=c1(),dn=function(){},b1;function ht(n,t,e){if(!(this instanceof ht))return new ht(n,t,e);if(arguments.length<1)throw new TypeError("Failed to construct 'SockJS: 1 argument required, but only 0 present");v1.call(this),this.readyState=ht.CONNECTING,this.extensions="",this.protocol="",e=e||{},e.protocols_whitelist&&j3.warn("'protocols_whitelist' is DEPRECATED. Use 'transports' instead."),this._transportsWhitelist=e.transports,this._transportOptions=e.transportOptions||{},this._timeout=e.timeout||0;var i=e.sessionId||8;if(typeof i=="function")this._generateSessionId=i;else if(typeof i=="number")this._generateSessionId=function(){return _1.string(i)};else throw new TypeError("If sessionId is used in the options, it needs to be a number or a function.");this._server=e.server||_1.numberString(1e3);var o=new B3(n);if(!o.host||!o.protocol)throw new SyntaxError("The URL '"+n+"' is invalid");if(o.hash)throw new SyntaxError("The URL must not contain a fragment");if(o.protocol!=="http:"&&o.protocol!=="https:")throw new SyntaxError("The URL's scheme must be either 'http:' or 'https:'. '"+o.protocol+"' is not allowed.");var s=o.protocol==="https:";if(Ic.protocol==="https:"&&!s&&!Gs.isLoopbackAddr(o.hostname))throw new Error("SecurityError: An insecure SockJS connection may not be initiated from a page loaded over HTTPS");t?Array.isArray(t)||(t=[t]):t=[];var m=t.sort();m.forEach(function(v,y){if(!v)throw new SyntaxError("The protocols entry '"+v+"' is invalid.");if(y<m.length-1&&v===m[y+1])throw new SyntaxError("The protocols entry '"+v+"' is duplicated.")});var f=Gs.getOrigin(Ic.href);this._origin=f?f.toLowerCase():null,o.set("pathname",o.pathname.replace(/\/+$/,"")),this.url=o.href,dn("using url",this.url),this._urlInfo={nullOrigin:!U3.hasDomain(),sameOrigin:Gs.isOriginEqual(this.url,Ic.href),sameScheme:Gs.isSchemeEqual(this.url,Ic.href)},this._ir=new W3(this.url,this._urlInfo),this._ir.once("finish",this._receiveInfo.bind(this))}N3(ht,v1);function y1(n){return n===1e3||n>=3e3&&n<=4999}ht.prototype.close=function(n,t){if(n&&!y1(n))throw new Error("InvalidAccessError: Invalid code");if(t&&t.length>123)throw new SyntaxError("reason argument has an invalid length");if(!(this.readyState===ht.CLOSING||this.readyState===ht.CLOSED)){var e=!0;this._close(n||1e3,t||"Normal closure",e)}};ht.prototype.send=function(n){if(typeof n!="string"&&(n=""+n),this.readyState===ht.CONNECTING)throw new Error("InvalidStateError: The connection has not been established yet");this.readyState===ht.OPEN&&this._transport.send(V3.quote(n))};
9ht.version=ip();ht.CONNECTING=0;ht.OPEN=1;ht.CLOSING=2;ht.CLOSED=3;ht.prototype._receiveInfo=function(n,t){if(dn("_receiveInfo",t),this._ir=null,!n){this._close(1002,"Cannot connect to server");return}this._rto=this.countRTO(t),this._transUrl=n.base_url?n.base_url:this.url,n=z3.extend(n,this._urlInfo),dn("info",n);var e=b1.filterToEnabled(this._transportsWhitelist,n);this._transports=e.main,dn(this._transports.length+" enabled transports"),this._connect()};ht.prototype._connect=function(){for(var n=this._transports.shift();n;n=this._transports.shift()){if(dn("attempt",n.transportName),n.needBody&&(!global.document.body||typeof global.document.readyState<"u"&&global.document.readyState!=="complete"&&global.document.readyState!=="interactive")){dn("waiting for body"),this._transports.unshift(n),L3.attachEvent("load",this._connect.bind(this));return}var t=Math.max(this._timeout,this._rto*n.roundTrips||5e3);this._transportTimeoutId=setTimeout(this._transportTimeout.bind(this),t),dn("using timeout",t);var e=Gs.addPath(this._transUrl,"/"+this._server+"/"+this._generateSessionId()),i=this._transportOptions[n.transportName];dn("transport url",e);var o=new n(e,this._transUrl,i);o.on("message",this._transportMessage.bind(this)),o.once("close",this._transportClose.bind(this)),o.transportName=n.transportName,this._transport=o;return}this._close(2e3,"All transports failed",!1)};ht.prototype._transportTimeout=function(){dn("_transportTimeout"),this.readyState===ht.CONNECTING&&(this._transport&&this._transport.close(),this._transportClose(2007,"Transport timed out"))};ht.prototype._transportMessage=function(n){dn("_transportMessage",n);var t=this,e=n.slice(0,1),i=n.slice(1),o;switch(e){case"o":this._open();return;case"h":this.dispatchEvent(new wp("heartbeat")),dn("heartbeat",this.transport);return}if(i)try{o=JSON.parse(i)}catch{dn("bad json",i)}if(typeof o>"u"){dn("empty payload",i);return}switch(e){case"a":Array.isArray(o)&&o.forEach(function(s){dn("message",t.transport,s),t.dispatchEvent(new x1(s))});break;case"m":dn("message",this.transport,o),this.dispatchEvent(new x1(o));break;case"c":Array.isArray(o)&&o.length===2&&this._close(o[0],o[1],!0);break}};ht.prototype._transportClose=function(n,t){if(dn("_transportClose",this.transport,n,t),this._transport&&(this._transport.removeAllListeners(),this._transport=null,this.transport=null),!y1(n)&&n!==2e3&&this.readyState===ht.CONNECTING){this._connect();return}this._close(n,t)};ht.prototype._open=function(){dn("_open",this._transport&&this._transport.transportName,this.readyState),this.readyState===ht.CONNECTING?(this._transportTimeoutId&&(clearTimeout(this._transportTimeoutId),this._transportTimeoutId=null),this.readyState=ht.OPEN,this.transport=this._transport.transportName,this.dispatchEvent(new wp("open")),dn("connected",this.transport)):this._close(1006,"Server lost session")};ht.prototype._close=function(n,t,e){dn("_close",this.transport,n,t,e,this.readyState);var i=!1;if(this._ir&&(i=!0,this._ir.close(),this._ir=null),this._transport&&(this._transport.close(),this._transport=null,this.transport=null),this.readyState===ht.CLOSED)throw new Error("InvalidStateError: SockJS has already been closed");this.readyState=ht.CLOSING,setTimeout(function(){this.readyState=ht.CLOSED,i&&this.dispatchEvent(new wp("error"));var o=new H3("close");o.wasClean=e||!1,o.code=n||1e3,o.reason=t,this.dispatchEvent(o),this.onmessage=this.onclose=this.onerror=null,dn("disconnected")}.bind(this),0)};ht.prototype.countRTO=function(n){return n>100?4*n:300+n};C1.exports=function(n){return b1=F3(n),h1()(ht,n),ht}});var Ac=ye((mZ,P1)=>{"use strict";var G3=wh();P1.exports=w1()(G3);"_sockjs_onload"in global&&setTimeout(global._sockjs_onload,1)});var O1=ye((IZ,k1)=>{"use strict";k1.exports=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}});var er=ye(Hr=>{"use strict";var Mp,ek=[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];Hr.getSymbolSize=function(t){if(!t)throw new Error('"version" cannot be null or undefined');if(t<1||t>40)throw new Error('"version" should be in range from 1 to 40');return t*4+17};Hr.getSymbolTotalCodewords=function(t){return ek[t]};Hr.getBCHDigit=function(n){let t=0;for(;n!==0;)t++,n>>>=1;return t};Hr.setToSJISFunction=function(t){if(typeof t!="function")throw new Error('"toSJISFunc" is not a valid function.');Mp=t};Hr.isKanjiModeEnabled=function(){return typeof Mp<"u"};Hr.toSJIS=function(t){return Mp(t)}});var Rc=ye(Ci=>{"use strict";Ci.L={bit:1};Ci.M={bit:0};Ci.Q={bit:3};Ci.H={bit:2};
9function tk(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return Ci.L;case"m":case"medium":return Ci.M;case"q":case"quartile":return Ci.Q;case"h":case"high":return Ci.H;default:throw new Error("Unknown EC Level: "+n)}}Ci.isValid=function(t){return t&&typeof t.bit<"u"&&t.bit>=0&&t.bit<4};Ci.from=function(t,e){if(Ci.isValid(t))return t;try{return tk(t)}catch{return e}}});var I1=ye((RZ,T1)=>{"use strict";function E1(){this.buffer=[],this.length=0}E1.prototype={get:function(n){let t=Math.floor(n/8);return(this.buffer[t]>>>7-n%8&1)===1},put:function(n,t){for(let e=0;e<t;e++)this.putBit((n>>>t-e-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(n){let t=Math.floor(this.length/8);this.buffer.length<=t&&this.buffer.push(0),n&&(this.buffer[t]|=128>>>this.length%8),this.length++}};T1.exports=E1});var D1=ye((BZ,A1)=>{"use strict";function qs(n){if(!n||n<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=n,this.data=new Uint8Array(n*n),this.reservedBit=new Uint8Array(n*n)}qs.prototype.set=function(n,t,e,i){let o=n*this.size+t;this.data[o]=e,i&&(this.reservedBit[o]=!0)};qs.prototype.get=function(n,t){return this.data[n*this.size+t]};qs.prototype.xor=function(n,t,e){this.data[n*this.size+t]^=e};qs.prototype.isReserved=function(n,t){return this.reservedBit[n*this.size+t]};A1.exports=qs});var R1=ye(Bc=>{"use strict";var nk=er().getSymbolSize;Bc.getRowColCoords=function(t){if(t===1)return[];let e=Math.floor(t/7)+2,i=nk(t),o=i===145?26:Math.ceil((i-13)/(2*e-2))*2,s=[i-7];for(let m=1;m<e-1;m++)s[m]=s[m-1]-o;return s.push(6),s.reverse()};Bc.getPositions=function(t){let e=[],i=Bc.getRowColCoords(t),o=i.length;for(let s=0;s<o;s++)for(let m=0;m<o;m++)s===0&&m===0||s===0&&m===o-1||s===o-1&&m===0||e.push([i[s],i[m]]);return e}});var V1=ye(N1=>{"use strict";var ik=er().getSymbolSize,B1=7;N1.getPositions=function(t){let e=ik(t);return[[0,0],[e-B1,0],[0,e-B1]]}});var L1=ye(Lt=>{"use strict";Lt.Patterns={PATTERN000:0,PATTERN001:1,PATTERN010:2,PATTERN011:3,PATTERN100:4,PATTERN101:5,PATTERN110:6,PATTERN111:7};var Wr={N1:3,N2:3,N3:40,N4:10};Lt.isValid=function(t){return t!=null&&t!==""&&!isNaN(t)&&t>=0&&t<=7};Lt.from=function(t){return Lt.isValid(t)?parseInt(t,10):void 0};Lt.getPenaltyN1=function(t){let e=t.size,i=0,o=0,s=0,m=null,f=null;for(let v=0;v<e;v++){o=s=0,m=f=null;for(let y=0;y<e;y++){let M=t.get(v,y);M===m?o++:(o>=5&&(i+=Wr.N1+(o-5)),m=M,o=1),M=t.get(y,v),M===f?s++:(s>=5&&(i+=Wr.N1+(s-5)),f=M,s=1)}o>=5&&(i+=Wr.N1+(o-5)),s>=5&&(i+=Wr.N1+(s-5))}return i};Lt.getPenaltyN2=function(t){let e=t.size,i=0;for(let o=0;o<e-1;o++)for(let s=0;s<e-1;s++){let m=t.get(o,s)+t.get(o,s+1)+t.get(o+1,s)+t.get(o+1,s+1);(m===4||m===0)&&i++}return i*Wr.N2};Lt.getPenaltyN3=function(t){let e=t.size,i=0,o=0,s=0;for(let m=0;m<e;m++){o=s=0;for(let f=0;f<e;f++)o=o<<1&2047|t.get(m,f),f>=10&&(o===1488||o===93)&&i++,s=s<<1&2047|t.get(f,m),f>=10&&(s===1488||s===93)&&i++}return i*Wr.N3};Lt.getPenaltyN4=function(t){let e=0,i=t.data.length;for(let s=0;s<i;s++)e+=t.data[s];return Math.abs(Math.ceil(e*100/i/5)-10)*Wr.N4};function ok(n,t,e){switch(n){case Lt.Patterns.PATTERN000:return(t+e)%2===0;case Lt.Patterns.PATTERN001:return t%2===0;case Lt.Patterns.PATTERN010:return e%3===0;case Lt.Patterns.PATTERN011:return(t+e)%3===0;case Lt.Patterns.PATTERN100:return(Math.floor(t/2)+Math.floor(e/3))%2===0;case Lt.Patterns.PATTERN101:return t*e%2+t*e%3===0;case Lt.Patterns.PATTERN110:return(t*e%2+t*e%3)%2===0;case Lt.Patterns.PATTERN111:return(t*e%3+(t+e)%2)%2===0;default:throw new Error("bad maskPattern:"+n)}}Lt.applyMask=function(t,e){let i=e.size;for(let o=0;o<i;o++)for(let s=0;s<i;s++)e.isReserved(s,o)||e.xor(s,o,ok(t,s,o))};Lt.getBestMask=function(t,e){let i=Object.keys(Lt.Patterns).length,o=0,s=1/0;for(let m=0;m<i;m++){e(m),Lt.applyMask(m,t);let f=Lt.getPenaltyN1(t)+Lt.getPenaltyN2(t)+Lt.getPenaltyN3(t)+Lt.getPenaltyN4(t);Lt.applyMask(m,t),f<s&&(s=f,o=m)}return o}});var kp=ye(Sp=>{"use strict";var tr=Rc(),Nc=[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],Vc=[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,
9192,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];Sp.getBlocksCount=function(t,e){switch(e){case tr.L:return Nc[(t-1)*4+0];case tr.M:return Nc[(t-1)*4+1];case tr.Q:return Nc[(t-1)*4+2];case tr.H:return Nc[(t-1)*4+3];default:return}};Sp.getTotalCodewordsCount=function(t,e){switch(e){case tr.L:return Vc[(t-1)*4+0];case tr.M:return Vc[(t-1)*4+1];case tr.Q:return Vc[(t-1)*4+2];case tr.H:return Vc[(t-1)*4+3];default:return}}});var F1=ye(Fc=>{"use strict";var $s=new Uint8Array(512),Lc=new Uint8Array(256);(function(){let t=1;for(let e=0;e<255;e++)$s[e]=t,Lc[t]=e,t<<=1,t&256&&(t^=285);for(let e=255;e<512;e++)$s[e]=$s[e-255]})();Fc.log=function(t){if(t<1)throw new Error("log("+t+")");return Lc[t]};Fc.exp=function(t){return $s[t]};Fc.mul=function(t,e){return t===0||e===0?0:$s[Lc[t]+Lc[e]]}});var z1=ye(Ys=>{"use strict";var Op=F1();Ys.mul=function(t,e){let i=new Uint8Array(t.length+e.length-1);for(let o=0;o<t.length;o++)for(let s=0;s<e.length;s++)i[o+s]^=Op.mul(t[o],e[s]);return i};Ys.mod=function(t,e){let i=new Uint8Array(t);for(;i.length-e.length>=0;){let o=i[0];for(let m=0;m<e.length;m++)i[m]^=Op.mul(e[m],o);let s=0;for(;s<i.length&&i[s]===0;)s++;i=i.slice(s)}return i};Ys.generateECPolynomial=function(t){let e=new Uint8Array([1]);for(let i=0;i<t;i++)e=Ys.mul(e,new Uint8Array([1,Op.exp(i)]));return e}});var H1=ye((jZ,j1)=>{"use strict";var U1=z1();function Ep(n){this.genPoly=void 0,this.degree=n,this.degree&&this.initialize(this.degree)}Ep.prototype.initialize=function(t){this.degree=t,this.genPoly=U1.generateECPolynomial(this.degree)};Ep.prototype.encode=function(t){if(!this.genPoly)throw new Error("Encoder not initialized");let e=new Uint8Array(t.length+this.degree);e.set(t);let i=U1.mod(e,this.genPoly),o=this.degree-i.length;if(o>0){let s=new Uint8Array(this.degree);return s.set(i,o),s}return i};j1.exports=Ep});var Tp=ye(W1=>{"use strict";W1.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}});var Ip=ye(yo=>{"use strict";var G1="[0-9]+",rk="[A-Z $%*+\\-./:]+",Xs="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";Xs=Xs.replace(/u/g,"\\u");var ak="(?:(?![A-Z0-9 $%*+\\-./:]|"+Xs+`)(?:.|[\r 10]))+`;yo.KANJI=new RegExp(Xs,"g");yo.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g");yo.BYTE=new RegExp(ak,"g");yo.NUMERIC=new RegExp(G1,"g");yo.ALPHANUMERIC=new RegExp(rk,"g");var sk=new RegExp("^"+Xs+"$"),lk=new RegExp("^"+G1+"$"),ck=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");yo.testKanji=function(t){return sk.test(t)};yo.testNumeric=function(t){return lk.test(t)};yo.testAlphanumeric=function(t){return ck.test(t)}});var nr=ye(pn=>{"use strict";var dk=Tp(),Ap=Ip();pn.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]};pn.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]};pn.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]};pn.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]};pn.MIXED={bit:-1};pn.getCharCountIndicator=function(t,e){if(!t.ccBits)throw new Error("Invalid mode: "+t);if(!dk.isValid(e))throw new Error("Invalid version: "+e);return e>=1&&e<10?t.ccBits[0]:e<27?t.ccBits[1]:t.ccBits[2]};pn.getBestModeForData=function(t){return Ap.testNumeric(t)?pn.NUMERIC:Ap.testAlphanumeric(t)?pn.ALPHANUMERIC:Ap.testKanji(t)?pn.KANJI:pn.BYTE};pn.toString=function(t){if(t&&t.id)return t.id;throw new Error("Invalid mode")};pn.isValid=function(t){return t&&t.bit&&t.ccBits};function pk(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"numeric":return pn.NUMERIC;case"alphanumeric":return pn.ALPHANUMERIC;case"kanji":return pn.KANJI;case"byte":return pn.BYTE;default:throw new Error("Unknown mode: "+n)}}pn.from=function(t,e){if(pn.isValid(t))return t;try{return pk(t)}catch{return e}}});var Z1=ye(Gr=>{"use strict";var zc=er(),mk=kp(),q1=Rc(),ir=nr(),Dp=Tp(),Y1=7973,$1=zc.getBCHDigit
10(Y1);function gk(n,t,e){for(let i=1;i<=40;i++)if(t<=Gr.getCapacity(i,e,n))return i}function X1(n,t){return ir.getCharCountIndicator(n,t)+4}function uk(n,t){let e=0;return n.forEach(function(i){let o=X1(i.mode,t);e+=o+i.getBitsLength()}),e}function fk(n,t){for(let e=1;e<=40;e++)if(uk(n,e)<=Gr.getCapacity(e,t,ir.MIXED))return e}Gr.from=function(t,e){return Dp.isValid(t)?parseInt(t,10):e};Gr.getCapacity=function(t,e,i){if(!Dp.isValid(t))throw new Error("Invalid QR Code version");typeof i>"u"&&(i=ir.BYTE);let o=zc.getSymbolTotalCodewords(t),s=mk.getTotalCodewordsCount(t,e),m=(o-s)*8;if(i===ir.MIXED)return m;let f=m-X1(i,t);switch(i){case ir.NUMERIC:return Math.floor(f/10*3);case ir.ALPHANUMERIC:return Math.floor(f/11*2);case ir.KANJI:return Math.floor(f/13);case ir.BYTE:default:return Math.floor(f/8)}};Gr.getBestVersionForData=function(t,e){let i,o=q1.from(e,q1.M);if(Array.isArray(t)){if(t.length>1)return fk(t,o);if(t.length===0)return 1;i=t[0]}else i=t;return gk(i.mode,i.getLength(),o)};Gr.getEncodedBits=function(t){if(!Dp.isValid(t)||t<7)throw new Error("Invalid QR Code version");let e=t<<12;for(;zc.getBCHDigit(e)-$1>=0;)e^=Y1<<zc.getBCHDigit(e)-$1;return t<<12|e}});var e_=ye(J1=>{"use strict";var Rp=er(),K1=1335,hk=21522,Q1=Rp.getBCHDigit(K1);J1.getEncodedBits=function(t,e){let i=t.bit<<3|e,o=i<<10;for(;Rp.getBCHDigit(o)-Q1>=0;)o^=K1<<Rp.getBCHDigit(o)-Q1;return(i<<10|o)^hk}});var n_=ye((YZ,t_)=>{"use strict";var _k=nr();function Aa(n){this.mode=_k.NUMERIC,this.data=n.toString()}Aa.getBitsLength=function(t){return 10*Math.floor(t/3)+(t%3?t%3*3+1:0)};Aa.prototype.getLength=function(){return this.data.length};Aa.prototype.getBitsLength=function(){return Aa.getBitsLength(this.data.length)};Aa.prototype.write=function(t){let e,i,o;for(e=0;e+3<=this.data.length;e+=3)i=this.data.substr(e,3),o=parseInt(i,10),t.put(o,10);let s=this.data.length-e;s>0&&(i=this.data.substr(e),o=parseInt(i,10),t.put(o,s*3+1))};t_.exports=Aa});var o_=ye((XZ,i_)=>{"use strict";var xk=nr(),Bp=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function Da(n){this.mode=xk.ALPHANUMERIC,this.data=n}Da.getBitsLength=function(t){return 11*Math.floor(t/2)+6*(t%2)};Da.prototype.getLength=function(){return this.data.length};Da.prototype.getBitsLength=function(){return Da.getBitsLength(this.data.length)};Da.prototype.write=function(t){let e;for(e=0;e+2<=this.data.length;e+=2){let i=Bp.indexOf(this.data[e])*45;i+=Bp.indexOf(this.data[e+1]),t.put(i,11)}this.data.length%2&&t.put(Bp.indexOf(this.data[e]),6)};i_.exports=Da});var a_=ye((ZZ,r_)=>{"use strict";var vk=nr();function Ra(n){this.mode=vk.BYTE,typeof n=="string"?this.data=new TextEncoder().encode(n):this.data=new Uint8Array(n)}Ra.getBitsLength=function(t){return t*8};Ra.prototype.getLength=function(){return this.data.length};Ra.prototype.getBitsLength=function(){return Ra.getBitsLength(this.data.length)};Ra.prototype.write=function(n){for(let t=0,e=this.data.length;t<e;t++)n.put(this.data[t],8)};r_.exports=Ra});var l_=ye((QZ,s_)=>{"use strict";var bk=nr(),yk=er();function Ba(n){this.mode=bk.KANJI,this.data=n}Ba.getBitsLength=function(t){return t*13};Ba.prototype.getLength=function(){return this.data.length};Ba.prototype.getBitsLength=function(){return Ba.getBitsLength(this.data.length)};Ba.prototype.write=function(n){let t;for(t=0;t<this.data.length;t++){let e=yk.toSJIS(this.data[t]);if(e>=33088&&e<=40956)e-=33088;else if(e>=57408&&e<=60351)e-=49472;else throw new Error("Invalid SJIS character: "+this.data[t]+` 11Make sure your charset is UTF-8`);e=(e>>>8&255)*192+(e&255),n.put(e,13)}};s_.exports=Ba});var c_=ye((KZ,Np)=>{"use strict";var Zs={single_source_shortest_paths:function(n,t,e){var i={},o={};o[t]=0;var s=Zs.PriorityQueue.make();s.push(t,0);for(var m,f,v,y,M,I,B,N,H;!s.empty();){m=s.pop(),f=m.value,y=m.cost,M=n[f]||{};for(v in M)M.hasOwnProperty(v)&&(I=M[v],B=y+I,N=o[v],H=typeof o[v]>"u",(H||N>B)&&(o[v]=B,s.push(v,B),i[v]=f))}if(typeof e<"u"&&typeof o[e]>"u"){var W=["Could not find a path from ",t," to ",e,"."].join("");throw new Error(W)}return i},extract_shortest_path_from_predecessor_list:function(n,t){for(var e=[],i=t,o;i;)e.push(i),o=n[i],i=n[i];return e.reverse(),e},find_path:function(n,t,e){var i=Zs.single_source_shortest_paths(n,t,e);return Zs.extract_shortest_path_from_predecessor_list(i,e)},PriorityQueue:{make:function(n){var t=Zs.PriorityQueue,e={},i;n=n||{};for(i in t)t.hasOwnProperty(i)&&(e[i]=t[i]);return e.queue=[],e.sorter=n.sorter||t.default_sorter,e},default_sorter:function(n,t){return n.cost-t.cost},push:function(n,t){var e={value:n,cost:t};this.queue.push(e),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};typeof Np<"u"&&(Np.exports=Zs)});var __=ye(Na=>{"use strict";var St=nr(),m_=n_(),g_=o_(),u_=a_(),f_=l_(),Qs=Ip(),Uc=er(),Ck=c_();function d_(n){return unescape(encodeURIComponent(n)).length}function Ks(n,t,e){let i=[],o;for(;(o=n.exec(e))!==null;)i.push({data:o[0],index:o.index,mode:t,length:o[0].length});return i}function h_(n){let t=Ks(Qs.NUMERIC,St.NUMERIC,n),e=Ks(Qs.ALPHANUMERIC,St.ALPHANUMERIC,n),i,o;return Uc.isKanjiModeEnabled()?(i=Ks(Qs.BYTE,St.BYTE,n),o=Ks(Qs.KANJI,St.KANJI,n)):(i=Ks(Qs.BYTE_KANJI,St.BYTE,n),o=[]),t.concat(e,i,o).sort(function(m,f){return m.index-f.index}).map(function(m){return{data:m.data,mode:m.mode,length:m.length}})}function Vp(n,t){switch(t){case St.NUMERIC:return m_.getBitsLength(n);case St.ALPHANUMERIC:return g_.getBitsLength(n);case St.KANJI:return f_.getBitsLength(n);case St.BYTE:return u_.getBitsLength(n)}}function wk(n){return n.reduce(function(t,e){let i=t.length-1>=0?t[t.length-1]:null;return i&&i.mode===e.mode?(t[t.length-1].data+=e.data,t):(t.push(e),t)},[])}function Pk(n){let t=[];for(let e=0;e<n.length;e++){let i=n[e];switch(i.mode){case St.NUMERIC:t.push([i,{data:i.data,mode:St.ALPHANUMERIC,length:i.length},{data:i.data,mode:St.BYTE,length:i.length}]);break;case St.ALPHANUMERIC:t.push([i,{data:i.data,mode:St.BYTE,length:i.length}]);break;case St.KANJI:t.push([i,{data:i.data,mode:St.BYTE,length:d_(i.data)}]);break;case St.BYTE:t.push([{data:i.data,mode:St.BYTE,length:d_(i.data)}])}}return t}function Mk(n,t){let e={},i={start:{}},o=["start"];for(let s=0;s<n.length;s++){let m=n[s],f=[];for(let v=0;v<m.length;v++){let y=m[v],M=""+s+v;f.push(M),e[M]={node:y,lastCount:0},i[M]={};for(let I=0;I<o.length;I++){let B=o[I];e[B]&&e[B].node.mode===y.mode?(i[B][M]=Vp(e[B].lastCount+y.length,y.mode)-Vp(e[B].lastCount,y.mode),e[B].lastCount+=y.length):(e[B]&&(e[B].lastCount=y.length),i[B][M]=Vp(y.length,y.mode)+4+St.getCharCountIndicator(y.mode,t))}}o=f}for(let s=0;s<o.length;s++)i[o[s]].end=0;return{map:i,table:e}}function p_(n,t){let e,i=St.getBestModeForData(n);
11if(e=St.from(t,i),e!==St.BYTE&&e.bit<i.bit)throw new Error('"'+n+'" cannot be encoded with mode '+St.toString(e)+`. 12 Suggested mode is: `+St.toString(i));switch(e===St.KANJI&&!Uc.isKanjiModeEnabled()&&(e=St.BYTE),e){case St.NUMERIC:return new m_(n);case St.ALPHANUMERIC:return new g_(n);case St.KANJI:return new f_(n);case St.BYTE:return new u_(n)}}Na.fromArray=function(t){return t.reduce(function(e,i){return typeof i=="string"?e.push(p_(i,null)):i.data&&e.push(p_(i.data,i.mode)),e},[])};Na.fromString=function(t,e){let i=h_(t,Uc.isKanjiModeEnabled()),o=Pk(i),s=Mk(o,e),m=Ck.find_path(s.map,"start","end"),f=[];for(let v=1;v<m.length-1;v++)f.push(s.table[m[v]].node);return Na.fromArray(wk(f))};Na.rawSplit=function(t){return Na.fromArray(h_(t,Uc.isKanjiModeEnabled()))}});var v_=ye(x_=>{"use strict";var Hc=er(),Lp=Rc(),Sk=I1(),kk=D1(),Ok=R1(),Ek=V1(),Up=L1(),jp=kp(),Tk=H1(),jc=Z1(),Ik=e_(),Ak=nr(),Fp=__();function Dk(n,t){let e=n.size,i=Ek.getPositions(t);for(let o=0;o<i.length;o++){let s=i[o][0],m=i[o][1];for(let f=-1;f<=7;f++)if(!(s+f<=-1||e<=s+f))for(let v=-1;v<=7;v++)m+v<=-1||e<=m+v||(f>=0&&f<=6&&(v===0||v===6)||v>=0&&v<=6&&(f===0||f===6)||f>=2&&f<=4&&v>=2&&v<=4?n.set(s+f,m+v,!0,!0):n.set(s+f,m+v,!1,!0))}}function Rk(n){let t=n.size;for(let e=8;e<t-8;e++){let i=e%2===0;n.set(e,6,i,!0),n.set(6,e,i,!0)}}function Bk(n,t){let e=Ok.getPositions(t);for(let i=0;i<e.length;i++){let o=e[i][0],s=e[i][1];for(let m=-2;m<=2;m++)for(let f=-2;f<=2;f++)m===-2||m===2||f===-2||f===2||m===0&&f===0?n.set(o+m,s+f,!0,!0):n.set(o+m,s+f,!1,!0)}}function Nk(n,t){let e=n.size,i=jc.getEncodedBits(t),o,s,m;for(let f=0;f<18;f++)o=Math.floor(f/3),s=f%3+e-8-3,m=(i>>f&1)===1,n.set(o,s,m,!0),n.set(s,o,m,!0)}function zp(n,t,e){let i=n.size,o=Ik.getEncodedBits(t,e),s,m;for(s=0;s<15;s++)m=(o>>s&1)===1,s<6?n.set(s,8,m,!0):s<8?n.set(s+1,8,m,!0):n.set(i-15+s,8,m,!0),s<8?n.set(8,i-s-1,m,!0):s<9?n.set(8,15-s-1+1,m,!0):n.set(8,15-s-1,m,!0);n.set(i-8,8,1,!0)}function Vk(n,t){let e=n.size,i=-1,o=e-1,s=7,m=0;for(let f=e-1;f>0;f-=2)for(f===6&&f--;;){for(let v=0;v<2;v++)if(!n.isReserved(o,f-v)){let y=!1;m<t.length&&(y=(t[m]>>>s&1)===1),n.set(o,f-v,y),s--,s===-1&&(m++,s=7)}if(o+=i,o<0||e<=o){o-=i,i=-i;break}}}function Lk(n,t,e){let i=new Sk;e.forEach(function(v){i.put(v.mode.bit,4),i.put(v.getLength(),Ak.getCharCountIndicator(v.mode,n)),v.write(i)});let o=Hc.getSymbolTotalCodewords(n),s=jp.getTotalCodewordsCount(n,t),m=(o-s)*8;for(i.getLengthInBits()+4<=m&&i.put(0,4);i.getLengthInBits()%8!==0;)i.putBit(0);let f=(m-i.getLengthInBits())/8;for(let v=0;v<f;v++)i.put(v%2?17:236,8);return Fk(i,n,t)}function Fk(n,t,e){let i=Hc.getSymbolTotalCodewords(t),o=jp.getTotalCodewordsCount(t,e),s=i-o,m=jp.getBlocksCount(t,e),f=i%m,v=m-f,y=Math.floor(i/m),M=Math.floor(s/m),I=M+1,B=y-M,N=new Tk(B),H=0,W=new Array(m),G=new Array(m),Z=0,Q=new Uint8Array(n.buffer);for(let J=0;J<m;J++){let ge=J<v?M:I;W[J]=Q.slice(H,H+ge),G[J]=N.encode(W[J]),H+=ge,Z=Math.max(Z,ge)}let j=new Uint8Array(i),Y=0,U,K;for(U=0;U<Z;U++)for(K=0;K<m;K++)U<W[K].length&&(j[Y++]=W[K][U]);for(U=0;U<B;U++)for(K=0;K<m;K++)j[Y++]=G[K][U];return j}function zk(n,t,e,i){let o;if(Array.isArray(n))o=Fp.fromArray(n);else if(typeof n=="string"){let y=t;if(!y){let M=Fp.rawSplit(n);y=jc.getBestVersionForData(M,e)}o=Fp.fromString(n,y||40)}else throw new Error("Invalid data");let s=jc.getBestVersionForData(o,e);if(!s)throw new Error("The amount of data is too big to be stored in a QR Code");if(!t)t=s;else if(t<s)throw new Error(` 13The chosen QR Code version cannot contain this amount of data. 14Minimum version required to store current data is: `+s+`. 15`);let m=Lk(t,e,o),f=Hc.getSymbolSize(t),v=new kk(f);return Dk(v,t),Rk(v),Bk(v,t),zp(v,e,0),t>=7&&Nk(v,t),Vk(v,m),isNaN(i)&&(i=Up.getBestMask(v,zp.bind(null,v,e))),Up.applyMask(i,v),zp(v,e,i),{modules:v,version:t,errorCorrectionLevel:e,maskPattern:i,segments:o}}x_.create=function(t,e){if(typeof t>"u"||t==="")throw new Error("No input text");let i=Lp.M,o,s;return typeof e<"u"&&(i=Lp.from(e.errorCorrectionLevel,Lp.M),o=jc.from(e.version),s=Up.from(e.maskPattern),e.toSJISFunc&&Hc.setToSJISFunction(e.toSJISFunc)),zk(t,o,i,s)}});var Hp=ye(qr=>{"use strict";function b_(n){if(typeof n=="number"&&(n=n.toString()),typeof n!="str
15ing")throw new Error("Color should be defined as hex string");let t=n.slice().replace("#","").split("");if(t.length<3||t.length===5||t.length>8)throw new Error("Invalid hex color: "+n);(t.length===3||t.length===4)&&(t=Array.prototype.concat.apply([],t.map(function(i){return[i,i]}))),t.length===6&&t.push("F","F");let e=parseInt(t.join(""),16);return{r:e>>24&255,g:e>>16&255,b:e>>8&255,a:e&255,hex:"#"+t.slice(0,6).join("")}}qr.getOptions=function(t){t||(t={}),t.color||(t.color={});let e=typeof t.margin>"u"||t.margin===null||t.margin<0?4:t.margin,i=t.width&&t.width>=21?t.width:void 0,o=t.scale||4;return{width:i,scale:i?4:o,margin:e,color:{dark:b_(t.color.dark||"#000000ff"),light:b_(t.color.light||"#ffffffff")},type:t.type,rendererOpts:t.rendererOpts||{}}};qr.getScale=function(t,e){return e.width&&e.width>=t+e.margin*2?e.width/(t+e.margin*2):e.scale};qr.getImageWidth=function(t,e){let i=qr.getScale(t,e);return Math.floor((t+e.margin*2)*i)};qr.qrToImageData=function(t,e,i){let o=e.modules.size,s=e.modules.data,m=qr.getScale(o,i),f=Math.floor((o+i.margin*2)*m),v=i.margin*m,y=[i.color.light,i.color.dark];for(let M=0;M<f;M++)for(let I=0;I<f;I++){let B=(M*f+I)*4,N=i.color.light;if(M>=v&&I>=v&&M<f-v&&I<f-v){let H=Math.floor((M-v)/m),W=Math.floor((I-v)/m);N=y[s[H*o+W]?1:0]}t[B++]=N.r,t[B++]=N.g,t[B++]=N.b,t[B]=N.a}}});var y_=ye(Wc=>{"use strict";var Wp=Hp();function Uk(n,t,e){n.clearRect(0,0,t.width,t.height),t.style||(t.style={}),t.height=e,t.width=e,t.style.height=e+"px",t.style.width=e+"px"}function jk(){try{return document.createElement("canvas")}catch{throw new Error("You need to specify a canvas element")}}Wc.render=function(t,e,i){let o=i,s=e;typeof o>"u"&&(!e||!e.getContext)&&(o=e,e=void 0),e||(s=jk()),o=Wp.getOptions(o);let m=Wp.getImageWidth(t.modules.size,o),f=s.getContext("2d"),v=f.createImageData(m,m);return Wp.qrToImageData(v.data,t,o),Uk(f,s,m),f.putImageData(v,0,0),s};Wc.renderToDataURL=function(t,e,i){let o=i;typeof o>"u"&&(!e||!e.getContext)&&(o=e,e=void 0),o||(o={});let s=Wc.render(t,e,o),m=o.type||"image/png",f=o.rendererOpts||{};return s.toDataURL(m,f.quality)}});var P_=ye(w_=>{"use strict";var Hk=Hp();function C_(n,t){let e=n.a/255,i=t+'="'+n.hex+'"';return e<1?i+" "+t+'-opacity="'+e.toFixed(2).slice(1)+'"':i}function Gp(n,t,e){let i=n+t;return typeof e<"u"&&(i+=" "+e),i}function Wk(n,t,e){let i="",o=0,s=!1,m=0;for(let f=0;f<n.length;f++){let v=Math.floor(f%t),y=Math.floor(f/t);!v&&!s&&(s=!0),n[f]?(m++,f>0&&v>0&&n[f-1]||(i+=s?Gp("M",v+e,.5+y+e):Gp("m",o,0),o=0,s=!1),v+1<t&&n[f+1]||(i+=Gp("h",m),m=0)):o++}return i}w_.render=function(t,e,i){let o=Hk.getOptions(e),s=t.modules.size,m=t.modules.data,f=s+o.margin*2,v=o.color.light.a?"<path "+C_(o.color.light,"fill")+' d="M0 0h'+f+"v"+f+'H0z"/>':"",y="<path "+C_(o.color.dark,"stroke")+' d="'+Wk(m,s,o.margin)+'"/>',M='viewBox="0 0 '+f+" "+f+'"',B='<svg xmlns="http://www.w3.org/2000/svg" '+(o.width?'width="'+o.width+'" height="'+o.width+'" ':"")+M+' shape-rendering="crispEdges">'+v+y+`</svg> 16`;return typeof i=="function"&&i(null,B),B}});var S_=ye(Js=>{"use strict";var Gk=O1(),qp=v_(),M_=y_(),qk=P_();function $p(n,t,e,i,o){let s=[].slice.call(arguments,1),m=s.length,f=typeof s[m-1]=="function";if(!f&&!Gk())throw new Error("Callback required as last argument");if(f){if(m<2)throw new Error("Too few arguments provided");m===2?(o=e,e=t,t=i=void 0):m===3&&(t.getContext&&typeof o>"u"?(o=i,i=void 0):(o=i,i=e,e=t,t=void 0))}else{if(m<1)throw new Error("Too few arguments provided");return m===1?(e=t,t=i=void 0):m===2&&!t.getContext&&(i=e,e=t,t=void 0),new Promise(function(v,y){try{let M=qp.create(e,i);v(n(M,t,i))}catch(M){y(M)}})}try{let v=qp.create(e,i);o(null,n(v,t,i))}catch(v){o(v)}}Js.create=qp.create;Js.toCanvas=$p.bind(null,M_.render);Js.toDataURL=$p.bind(null,M_.renderToDataURL);Js.toString=$p.bind(null,function(n,t,e){return qk.render(n,e)})});var R_=ye((Zc,D_)=>{"use strict";(function(n,t){typeof Zc=="object"&&typeof D_<"u"?t(Zc):typeof define=="function"&&define.amd?define(["exports"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n.ZXing={}))})(Zc,function(n){"use strict";function t(T){return T==null}var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(T,c){T.__proto__=c}||function(T,c){for(var p in c)c.hasOwnProperty(p)&&(T[p]=c[p])};function i(T,c){e(T,c);function p(){this.constructor=T}
16T.prototype=c===null?Object.create(c):(p.prototype=c.prototype,new p)}function o(T,c){var p=Object.setPrototypeOf;p?p(T,c):T.__proto__=c}function s(T,c){c===void 0&&(c=T.constructor);var p=Error.captureStackTrace;p&&p(T,c)}var m=function(T){i(c,T);function c(p){var g=this.constructor,u=T.call(this,p)||this;return Object.defineProperty(u,"name",{value:g.name,enumerable:!1}),o(u,g.prototype),s(u),u}return c}(Error);let f=(()=>{class T extends m{constructor(p=void 0){super(p),this.message=p}getKind(){return this.constructor.kind}}return T.kind="Exception",T})(),v=(()=>{class T extends f{}return T.kind="ArgumentException",T})(),y=(()=>{class T extends f{}return T.kind="IllegalArgumentException",T})();class M{constructor(c){if(this.binarizer=c,c===null)throw new y("Binarizer must be non-null.")}getWidth(){return this.binarizer.getWidth()}getHeight(){return this.binarizer.getHeight()}getBlackRow(c,p){return this.binarizer.getBlackRow(c,p)}getBlackMatrix(){return(this.matrix===null||this.matrix===void 0)&&(this.matrix=this.binarizer.getBlackMatrix()),this.matrix}isCropSupported(){return this.binarizer.getLuminanceSource().isCropSupported()}crop(c,p,g,u){let _=this.binarizer.getLuminanceSource().crop(c,p,g,u);return new M(this.binarizer.createBinarizer(_))}isRotateSupported(){return this.binarizer.getLuminanceSource().isRotateSupported()}rotateCounterClockwise(){let c=this.binarizer.getLuminanceSource().rotateCounterClockwise();return new M(this.binarizer.createBinarizer(c))}rotateCounterClockwise45(){let c=this.binarizer.getLuminanceSource().rotateCounterClockwise45();return new M(this.binarizer.createBinarizer(c))}toString(){try{return this.getBlackMatrix().toString()}catch{return""}}}let I=(()=>{class T extends f{static getChecksumInstance(){return new T}}return T.kind="ChecksumException",T})();class B{constructor(c){this.source=c}getLuminanceSource(){return this.source}getWidth(){return this.source.getWidth()}getHeight(){return this.source.getHeight()}}class N{static arraycopy(c,p,g,u,_){for(;_--;)g[u++]=c[p++]}static currentTimeMillis(){return Date.now()}}let H=(()=>{class T extends f{}return T.kind="IndexOutOfBoundsException",T})(),W=(()=>{class T extends H{constructor(p=void 0,g=void 0){super(g),this.index=p,this.message=g}}return T.kind="ArrayIndexOutOfBoundsException",T})();class G{static fill(c,p){for(let g=0,u=c.length;g<u;g++)c[g]=p}static fillWithin(c,p,g,u){G.rangeCheck(c.length,p,g);for(let _=p;_<g;_++)c[_]=u}static rangeCheck(c,p,g){if(p>g)throw new y("fromIndex("+p+") > toIndex("+g+")");if(p<0)throw new W(p);if(g>c)throw new W(g)}static asList(...c){return c}static create(c,p,g){return Array.from({length:c}).map(_=>Array.from({length:p}).fill(g))}static createInt32Array(c,p,g){return Array.from({length:c}).map(_=>Int32Array.from({length:p}).fill(g))}static equals(c,p){if(!c||!p||!c.length||!p.length||c.length!==p.length)return!1;for(let g=0,u=c.length;g<u;g++)if(c[g]!==p[g])return!1;return!0}static hashCode(c){if(c===null)return 0;let p=1;for(let g of c)p=31*p+g;return p}static fillUint8Array(c,p){for(let g=0;g!==c.length;g++)c[g]=p}static copyOf(c,p){return c.slice(0,p)}static copyOfUint8Array(c,p){if(c.length<=p){let g=new Uint8Array(p);return g.set(c),g}return c.slice(0,p)}static copyOfRange(c,p,g){let u=g-p,_=new Int32Array(u);return N.arraycopy(c,p,_,0,u),_}static binarySearch(c,p,g){g===void 0&&(g=G.numberComparator);let u=0,_=c.length-1;for(;u<=_;){let b=_+u>>1,C=g(p,c[b]);if(C>0)u=b+1;else if(C<0)_=b-1;else return b}return-u-1}static numberComparator(c,p){return c-p}}class Z{static numberOfTrailingZeros(c){let p;if(c===0)return 32;let g=31;return p=c<<16,p!==0&&(g-=16,c=p),p=c<<8,p!==0&&(g-=8,c=p),p=c<<4,p!==0&&(g-=4,c=p),p=c<<2,p!==0&&(g-=2,c=p),g-(c<<1>>>31)}static numberOfLeadingZeros(c){if(c===0)return 32;let p=1;return c>>>16||(p+=16,c<<=16),c>>>24||(p+=8,c<<=8),c>>>28||(p+=4,c<<=4),c>>>30||(p+=2,c<<=2),p-=c>>>31,p}static toHexString(c){return c.toString(16)}static toBinaryString(c){return String(parseInt(String(c),2))}static bitCount(c){return c=c-(c>>>1&1431655765),c=(c&858993459)+(c>>>2&858993459),c=c+(c>>>4)&252645135,c=c+(c>>>8),c=c+(c>>>16),c&63}static truncDivision(c,p){return Math.trunc(c/p)}static parseInt(c,p=void 0){return parseInt(c,p)}}Z.MIN_VALUE_32_BITS=-2147483648,Z.MAX_VALUE=Number.MAX_SAFE_INTEGER;class Q{constructor(c,p){c===void 0?(this.size=0,this.bits=new Int32Array(1)):(this.size=c,p==null?this.bits=Q.makeArray(c):this.bits=p)}getSize(){return this.size}getSizeInBytes(){return Math.floor((this.size+7)/8)}
16ensureCapacity(c){if(c>this.bits.length*32){let p=Q.makeArray(c);N.arraycopy(this.bits,0,p,0,this.bits.length),this.bits=p}}get(c){return(this.bits[Math.floor(c/32)]&1<<(c&31))!==0}set(c){this.bits[Math.floor(c/32)]|=1<<(c&31)}flip(c){this.bits[Math.floor(c/32)]^=1<<(c&31)}getNextSet(c){let p=this.size;if(c>=p)return p;let g=this.bits,u=Math.floor(c/32),_=g[u];_&=~((1<<(c&31))-1);let b=g.length;for(;_===0;){if(++u===b)return p;_=g[u]}let C=u*32+Z.numberOfTrailingZeros(_);return C>p?p:C}getNextUnset(c){let p=this.size;if(c>=p)return p;let g=this.bits,u=Math.floor(c/32),_=~g[u];_&=~((1<<(c&31))-1);let b=g.length;for(;_===0;){if(++u===b)return p;_=~g[u]}let C=u*32+Z.numberOfTrailingZeros(_);return C>p?p:C}setBulk(c,p){this.bits[Math.floor(c/32)]=p}setRange(c,p){if(p<c||c<0||p>this.size)throw new y;if(p===c)return;p--;let g=Math.floor(c/32),u=Math.floor(p/32),_=this.bits;for(let b=g;b<=u;b++){let C=b>g?0:c&31,E=(2<<(b<u?31:p&31))-(1<<C);_[b]|=E}}clear(){let c=this.bits.length,p=this.bits;for(let g=0;g<c;g++)p[g]=0}isRange(c,p,g){if(p<c||c<0||p>this.size)throw new y;if(p===c)return!0;p--;let u=Math.floor(c/32),_=Math.floor(p/32),b=this.bits;for(let C=u;C<=_;C++){let P=C>u?0:c&31,D=(2<<(C<_?31:p&31))-(1<<P)&4294967295;if((b[C]&D)!==(g?D:0))return!1}return!0}appendBit(c){this.ensureCapacity(this.size+1),c&&(this.bits[Math.floor(this.size/32)]|=1<<(this.size&31)),this.size++}appendBits(c,p){if(p<0||p>32)throw new y("Num bits must be between 0 and 32");this.ensureCapacity(this.size+p);for(let g=p;g>0;g--)this.appendBit((c>>g-1&1)===1)}appendBitArray(c){let p=c.size;this.ensureCapacity(this.size+p);for(let g=0;g<p;g++)this.appendBit(c.get(g))}xor(c){if(this.size!==c.size)throw new y("Sizes don't match");let p=this.bits;for(let g=0,u=p.length;g<u;g++)p[g]^=c.bits[g]}toBytes(c,p,g,u){for(let _=0;_<u;_++){let b=0;for(let C=0;C<8;C++)this.get(c)&&(b|=1<<7-C),c++;p[g+_]=b}}getBitArray(){return this.bits}reverse(){let c=new Int32Array(this.bits.length),p=Math.floor((this.size-1)/32),g=p+1,u=this.bits;for(let _=0;_<g;_++){let b=u[_];b=b>>1&1431655765|(b&1431655765)<<1,b=b>>2&858993459|(b&858993459)<<2,b=b>>4&252645135|(b&252645135)<<4,b=b>>8&16711935|(b&16711935)<<8,b=b>>16&65535|(b&65535)<<16,c[p-_]=b}if(this.size!==g*32){let _=g*32-this.size,b=c[0]>>>_;for(let C=1;C<g;C++){let P=c[C];b|=P<<32-_,c[C-1]=b,b=P>>>_}c[g-1]=b}this.bits=c}static makeArray(c){return new Int32Array(Math.floor((c+31)/32))}equals(c){if(!(c instanceof Q))return!1;let p=c;return this.size===p.size&&G.equals(this.bits,p.bits)}hashCode(){return 31*this.size+G.hashCode(this.bits)}toString(){let c="";for(let p=0,g=this.size;p<g;p++)(p&7)===0&&(c+=" "),c+=this.get(p)?"X":".";return c}clone(){return new Q(this.size,this.bits.slice())}}var j=function(T){return T[T.OTHER=0]="OTHER",T[T.PURE_BARCODE=1]="PURE_BARCODE",T[T.POSSIBLE_FORMATS=2]="POSSIBLE_FORMATS",T[T.TRY_HARDER=3]="TRY_HARDER",T[T.CHARACTER_SET=4]="CHARACTER_SET",T[T.ALLOWED_LENGTHS=5]="ALLOWED_LENGTHS",T[T.ASSUME_CODE_39_CHECK_DIGIT=6]="ASSUME_CODE_39_CHECK_DIGIT",T[T.ASSUME_GS1=7]="ASSUME_GS1",T[T.RETURN_CODABAR_START_END=8]="RETURN_CODABAR_START_END",T[T.NEED_RESULT_POINT_CALLBACK=9]="NEED_RESULT_POINT_CALLBACK",T[T.ALLOWED_EAN_EXTENSIONS=10]="ALLOWED_EAN_EXTENSIONS",T}(j||{}),Y=j;let U=(()=>{class T extends f{static getFormatInstance(){return new T}}return T.kind="FormatException",T})();var K=function(T){return T[T.Cp437=0]="Cp437",T[T.ISO8859_1=1]="ISO8859_1",T[T.ISO8859_2=2]="ISO8859_2",T[T.ISO8859_3=3]="ISO8859_3",T[T.ISO8859_4=4]="ISO8859_4",T[T.ISO8859_5=5]="ISO8859_5",T[T.ISO8859_6=6]="ISO8859_6",T[T.ISO8859_7=7]="ISO8859_7",T[T.ISO8859_8=8]="ISO8859_8",T[T.ISO8859_9=9]="ISO8859_9",T[T.ISO8859_10=10]="ISO8859_10",T[T.ISO8859_11=11]="ISO8859_11",T[T.ISO8859_13=12]="ISO8859_13",T[T.ISO8859_14=13]="ISO8859_14",T[T.ISO8859_15=14]="ISO8859_15",T[T.ISO8859_16=15]="ISO8859_16",T[T.SJIS=16]="SJIS",T[T.Cp1250=17]="Cp1250",T[T.Cp1251=18]="Cp1251",T[T.Cp1252=19]="Cp1252",T[T.Cp1256=20]="Cp1256",T[T.UnicodeBigUnmarked=21]="UnicodeBigUnmarked",T[T.UTF8=22]="UTF8",T[T.ASCII=23]="ASCII",T[T.Big5=24]="Big5",T[T.GB18030=25]="GB18030",T[T.EUC_KR=26]="EUC_KR",T}(K||{});class J{constructor(c,p,g,...u){this.valueIdentifier=c,this.name=g,typeof p=="number"?this.values=Int32Array.from([p]):this.values=p,this.otherEncodingNames=u,J.VALUE_IDENTIFIER_TO_ECI.set(c,this),J.NAME_TO_ECI.set(g,this);let _=this.values;for(let b=0,C=_.length;b!==C;b++){let P=_[b];J.VALUES_TO_ECI.set(P,this)}for(let b of u)J.NAME_TO_ECI.set(b,this)}getValueIdentifier(){return this.valueIdentifier}getName(){return this.name}getValue(){return this.values[0]}static getCharacterSetECIByValue(c){if(c<0||c>=900)throw new U("incorect value");let p=J.VALUES_TO_ECI.get(c);if(p===void 0)throw new U("incorect value");return p}static getCharacterSetECIByName(c){let p=J.NAME_TO_ECI.get(c);if(p===void 0)throw new U("incorect value");return p}equals(c){if(!(c instanceof J))return!1;let p=c;return this.getName()===p.getName()}}J.VALUE_IDENTIFIER_TO_ECI=new Map,J.VALUES_TO_ECI=new Map,J.NAME_TO_ECI=new Map,J.Cp437=new J(K.Cp437,Int32Array.from([0,2]),"Cp437"),J.ISO8859_1=new J(K.ISO8859_1,Int32Array.from([1,3]),"ISO-8859-1","ISO88591","ISO8859_1"),J.ISO8859_2=new J(K.ISO8859_2,4,"ISO-8859-2","ISO88592","ISO8859_2"),J.ISO8859_3=new J(K.ISO8859_3,5,"ISO-8859-3","ISO88593","ISO8859_3"),J.ISO8859_4
16=new J(K.ISO8859_4,6,"ISO-8859-4","ISO88594","ISO8859_4"),J.ISO8859_5=new J(K.ISO8859_5,7,"ISO-8859-5","ISO88595","ISO8859_5"),J.ISO8859_6=new J(K.ISO8859_6,8,"ISO-8859-6","ISO88596","ISO8859_6"),J.ISO8859_7=new J(K.ISO8859_7,9,"ISO-8859-7","ISO88597","ISO8859_7"),J.ISO8859_8=new J(K.ISO8859_8,10,"ISO-8859-8","ISO88598","ISO8859_8"),J.ISO8859_9=new J(K.ISO8859_9,11,"ISO-8859-9","ISO88599","ISO8859_9"),J.ISO8859_10=new J(K.ISO8859_10,12,"ISO-8859-10","ISO885910","ISO8859_10"),J.ISO8859_11=new J(K.ISO8859_11,13,"ISO-8859-11","ISO885911","ISO8859_11"),J.ISO8859_13=new J(K.ISO8859_13,15,"ISO-8859-13","ISO885913","ISO8859_13"),J.ISO8859_14=new J(K.ISO8859_14,16,"ISO-8859-14","ISO885914","ISO8859_14"),J.ISO8859_15=new J(K.ISO8859_15,17,"ISO-8859-15","ISO885915","ISO8859_15"),J.ISO8859_16=new J(K.ISO8859_16,18,"ISO-8859-16","ISO885916","ISO8859_16"),J.SJIS=new J(K.SJIS,20,"SJIS","Shift_JIS"),J.Cp1250=new J(K.Cp1250,21,"Cp1250","windows-1250"),J.Cp1251=new J(K.Cp1251,22,"Cp1251","windows-1251"),J.Cp1252=new J(K.Cp1252,23,"Cp1252","windows-1252"),J.Cp1256=new J(K.Cp1256,24,"Cp1256","windows-1256"),J.UnicodeBigUnmarked=new J(K.UnicodeBigUnmarked,25,"UnicodeBigUnmarked","UTF-16BE","UnicodeBig"),J.UTF8=new J(K.UTF8,26,"UTF8","UTF-8"),J.ASCII=new J(K.ASCII,Int32Array.from([27,170]),"ASCII","US-ASCII"),J.Big5=new J(K.Big5,28,"Big5"),J.GB18030=new J(K.GB18030,29,"GB18030","GB2312","EUC_CN","GBK"),J.EUC_KR=new J(K.EUC_KR,30,"EUC_KR","EUC-KR");let ge=(()=>{class T extends f{}return T.kind="UnsupportedOperationException",T})();class xe{static decode(c,p){let g=this.encodingName(p);return this.customDecoder?this.customDecoder(c,g):typeof TextDecoder>"u"||this.shouldDecodeOnFallback(g)?this.decodeFallback(c,g):new TextDecoder(g).decode(c)}static shouldDecodeOnFallback(c){return!xe.isBrowser()&&c==="ISO-8859-1"}static encode(c,p){let g=this.encodingName(p);return this.customEncoder?this.customEncoder(c,g):typeof TextEncoder>"u"?this.encodeFallback(c):new TextEncoder().encode(c)}static isBrowser(){return typeof window<"u"&&{}.toString.call(window)==="[object Window]"}static encodingName(c){return typeof c=="string"?c:c.getName()}static encodingCharacterSet(c){return c instanceof J?c:J.getCharacterSetECIByName(c)}static decodeFallback(c,p){let g=this.encodingCharacterSet(p);if(xe.isDecodeFallbackSupported(g)){let u="";for(let _=0,b=c.length;_<b;_++){let C=c[_].toString(16);C.length<2&&(C="0"+C),u+="%"+C}return decodeURIComponent(u)}if(g.equals(J.UnicodeBigUnmarked))return String.fromCharCode.apply(null,new Uint16Array(c.buffer));throw new ge(`Encoding ${this.encodingName(p)} not supported by fallback.`)}static isDecodeFallbackSupported(c){return c.equals(J.UTF8)||c.equals(J.ISO8859_1)||c.equals(J.ASCII)}static encodeFallback(c){let g=btoa(unescape(encodeURIComponent(c))).split(""),u=[];for(let _=0;_<g.length;_++)u.push(g[_].charCodeAt(0));return new Uint8Array(u)}}class he{static castAsNonUtf8Char(c,p=null){let g=p?p.getName():this.ISO88591;return xe.decode(new Uint8Array([c]),g)}static guessEncoding(c,p){if(p!=null&&p.get(Y.CHARACTER_SET)!==void 0)return p.get(Y.CHARACTER_SET).toString();let g=c.length,u=!0,_=!0,b=!0,C=0,P=0,E=0,D=0,V=0,z=0,$=0,X=0,ee=0,ne=0,oe=0,ve=c.length>3&&c[0]===239&&c[1]===187&&c[2]===191;for(let ke=0;ke<g&&(u||_||b);ke++){let me=c[ke]&255;b&&(C>0?(me&128)===0?b=!1:C--:(me&128)!==0&&((me&64)===0?b=!1:(C++,(me&32)===0?P++:(C++,(me&16)===0?E++:(C++,(me&8)===0?D++:b=!1))))),u&&(me>127&&me<160?u=!1:me>159&&(me<192||me===215||me===247)&&oe++),_&&(V>0?me<64||me===127||me>252?_=!1:V--:me===128||me===160||me>239?_=!1:me>160&&me<224?(z++,X=0,$++,$>ee&&(ee=$)):me>127?(V++,$=0,X++,X>ne&&(ne=X)):($=0,X=0))}return b&&C>0&&(b=!1),_&&V>0&&(_=!1),b&&(ve||P+E+D>0)?he.UTF8:_&&(he.ASSUME_SHIFT_JIS||ee>=3||ne>=3)?he.SHIFT_JIS:u&&_?ee===2&&z===2||oe*10>=g?he.SHIFT_JIS:he.ISO88591:u?he.ISO88591:_?he.SHIFT_JIS:b?he.UTF8:he.PLATFORM_DEFAULT_ENCODING}static format(c,...p){let g=-1;function u(b,C,P,E,D,V){if(b==="%%")return"%";if(p[++g]===void 0)return;b=E?parseInt(E.substr(1)):void 0;let z=D?parseInt(D.substr(1)):void 0,$;switch(V){case"s":$=p[g];break;case"c":$=p[g][0];break;case"f":$=parseFloat(p[g]).toFixed(b);break;case"p":$=parseFloat(p[g]).toPrecision(b);break;case"e":$=parseFloat(p[g]).toExponential(b);break;case"x":$=parseInt(p[g]).toString(z||16);break;case"d":$=parseFloat(parseInt(p[g],z||10).toPrecision(b)).toFixed(0);break}$=typeof $=="object"?JSON.stringify($):(+$).toString(z);let X=parseInt(P),ee=P&&P[0]+""=="0"?"0":" ";for(;$.length<X;)$=C!==void 0?$+ee:ee+$;return $}let _=/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;return c.replace(_,u)}static getBytes(c,p){return xe.encode(c,p)}
16static getCharCode(c,p=0){return c.charCodeAt(p)}static getCharAt(c){return String.fromCharCode(c)}}he.SHIFT_JIS=J.SJIS.getName(),he.GB2312="GB2312",he.ISO88591=J.ISO8859_1.getName(),he.EUC_JP="EUC_JP",he.UTF8=J.UTF8.getName(),he.PLATFORM_DEFAULT_ENCODING=he.UTF8,he.ASSUME_SHIFT_JIS=!1;class Ce{constructor(c=""){this.value=c}enableDecoding(c){return this.encoding=c,this}append(c){return typeof c=="string"?this.value+=c.toString():this.encoding?this.value+=he.castAsNonUtf8Char(c,this.encoding):this.value+=String.fromCharCode(c),this}appendChars(c,p,g){for(let u=p;p<p+g;u++)this.append(c[u]);return this}length(){return this.value.length}charAt(c){return this.value.charAt(c)}deleteCharAt(c){this.value=this.value.substr(0,c)+this.value.substring(c+1)}setCharAt(c,p){this.value=this.value.substr(0,c)+p+this.value.substr(c+1)}substring(c,p){return this.value.substring(c,p)}setLengthToZero(){this.value=""}toString(){return this.value}insert(c,p){this.value=this.value.substr(0,c)+p+this.value.substr(c+p.length)}}class De{constructor(c,p,g,u){if(this.width=c,this.height=p,this.rowSize=g,this.bits=u,p==null&&(p=c),this.height=p,c<1||p<1)throw new y("Both dimensions must be greater than 0");g==null&&(g=Math.floor((c+31)/32)),this.rowSize=g,u==null&&(this.bits=new Int32Array(this.rowSize*this.height))}static parseFromBooleanArray(c){let p=c.length,g=c[0].length,u=new De(g,p);for(let _=0;_<p;_++){let b=c[_];for(let C=0;C<g;C++)b[C]&&u.set(C,_)}return u}static parseFromString(c,p,g){if(c===null)throw new y("stringRepresentation cannot be null");let u=new Array(c.length),_=0,b=0,C=-1,P=0,E=0;for(;E<c.length;)if(c.charAt(E)===` 17`||c.charAt(E)==="\r"){if(_>b){if(C===-1)C=_-b;else if(_-b!==C)throw new y("row lengths do not match");b=_,P++}E++}else if(c.substring(E,E+p.length)===p)E+=p.length,u[_]=!0,_++;else if(c.substring(E,E+g.length)===g)E+=g.length,u[_]=!1,_++;else throw new y("illegal character encountered: "+c.substring(E));if(_>b){if(C===-1)C=_-b;else if(_-b!==C)throw new y("row lengths do not match");P++}let D=new De(C,P);for(let V=0;V<_;V++)u[V]&&D.set(Math.floor(V%C),Math.floor(V/C));return D}get(c,p){let g=p*this.rowSize+Math.floor(c/32);return(this.bits[g]>>>(c&31)&1)!==0}set(c,p){let g=p*this.rowSize+Math.floor(c/32);this.bits[g]|=1<<(c&31)&4294967295}unset(c,p){let g=p*this.rowSize+Math.floor(c/32);this.bits[g]&=~(1<<(c&31)&4294967295)}flip(c,p){let g=p*this.rowSize+Math.floor(c/32);this.bits[g]^=1<<(c&31)&4294967295}xor(c){if(this.width!==c.getWidth()||this.height!==c.getHeight()||this.rowSize!==c.getRowSize())throw new y("input matrix dimensions do not match");let p=new Q(Math.floor(this.width/32)+1),g=this.rowSize,u=this.bits;for(let _=0,b=this.height;_<b;_++){let C=_*g,P=c.getRow(_,p).getBitArray();for(let E=0;E<g;E++)u[C+E]^=P[E]}}clear(){let c=this.bits,p=c.length;for(let g=0;g<p;g++)c[g]=0}setRegion(c,p,g,u){if(p<0||c<0)throw new y("Left and top must be nonnegative");if(u<1||g<1)throw new y("Height and width must be at least 1");let _=c+g,b=p+u;if(b>this.height||_>this.width)throw new y("The region must fit inside the matrix");let C=this.rowSize,P=this.bits;for(let E=p;E<b;E++){let D=E*C;for(let V=c;V<_;V++)P[D+Math.floor(V/32)]|=1<<(V&31)&4294967295}}getRow(c,p){p==null||p.getSize()<this.width?p=new Q(this.width):p.clear();let g=this.rowSize,u=this.bits,_=c*g;for(let b=0;b<g;b++)p.setBulk(b*32,u[_+b]);return p}setRow(c,p){N.arraycopy(p.getBitArray(),0,this.bits,c*this.rowSize,this.rowSize)}rotate180(){let c=this.getWidth(),p=this.getHeight(),g=new Q(c),u=new Q(c);for(let _=0,b=Math.floor((p+1)/2);_<b;_++)g=this.getRow(_,g),u=this.getRow(p-1-_,u),g.reverse(),u.reverse(),this.setRow(_,u),this.setRow(p-1-_,g)}getEnclosingRectangle(){let c=this.width,p=this.height,g=this.rowSize,u=this.bits,_=c,b=p,C=-1,P=-1;for(let E=0;E<p;E++)for(let D=0;D<g;D++){let V=u[E*g+D];if(V!==0){if(E<b&&(b=E),E>P&&(P=E),D*32<_){let z=0;for(;(V<<31-z&4294967295)===0;)z++;D*32+z<_&&(_=D*32+z)}if(D*32+31>C){let z=31;for(;!(V>>>z);)z--;D*32+z>C&&(C=D*32+z)}}}return C<_||P<b?null:Int32Array.from([_,b,C-_+1,P-b+1])}getTopLeftOnBit(){let c=this.rowSize,p=this.bits,g=0;for(;g<p.length&&p[g]===0;)g++;if(g===p.length)return null;let u=g/c,_=g%c*32,b=p[g],C=0;for(;(b<<31-C&4294967295)===0;)C++;return _+=C,Int32Array.from([_,u])}getBottomRightOnBit(){let c=this.rowSize,p=this.bits,g=p.length-1;for(;g>=0&&p[g]===0;)g--;if(g<0)return null;let u=Math.floor(g/c),_=Math.floor(g%c)*32,b=p[g],C=31;for(;!(b>>
17>C);)C--;return _+=C,Int32Array.from([_,u])}getWidth(){return this.width}getHeight(){return this.height}getRowSize(){return this.rowSize}equals(c){if(!(c instanceof De))return!1;let p=c;return this.width===p.width&&this.height===p.height&&this.rowSize===p.rowSize&&G.equals(this.bits,p.bits)}hashCode(){let c=this.width;return c=31*c+this.width,c=31*c+this.height,c=31*c+this.rowSize,c=31*c+G.hashCode(this.bits),c}toString(c="X ",p=" ",g=` 18`){return this.buildToString(c,p,g)}buildToString(c,p,g){let u=new Ce;for(let _=0,b=this.height;_<b;_++){for(let C=0,P=this.width;C<P;C++)u.append(this.get(C,_)?c:p);u.append(g)}return u.toString()}clone(){return new De(this.width,this.height,this.rowSize,this.bits.slice())}}let se=(()=>{class T extends f{static getNotFoundInstance(){return new T}}return T.kind="NotFoundException",T})();class gt extends B{constructor(c){super(c),this.luminances=gt.EMPTY,this.buckets=new Int32Array(gt.LUMINANCE_BUCKETS)}getBlackRow(c,p){let g=this.getLuminanceSource(),u=g.getWidth();p==null||p.getSize()<u?p=new Q(u):p.clear(),this.initArrays(u);let _=g.getRow(c,this.luminances),b=this.buckets;for(let P=0;P<u;P++)b[(_[P]&255)>>gt.LUMINANCE_SHIFT]++;let C=gt.estimateBlackPoint(b);if(u<3)for(let P=0;P<u;P++)(_[P]&255)<C&&p.set(P);else{let P=_[0]&255,E=_[1]&255;for(let D=1;D<u-1;D++){let V=_[D+1]&255;(E*4-P-V)/2<C&&p.set(D),P=E,E=V}}return p}getBlackMatrix(){let c=this.getLuminanceSource(),p=c.getWidth(),g=c.getHeight(),u=new De(p,g);this.initArrays(p);let _=this.buckets;for(let P=1;P<5;P++){let E=Math.floor(g*P/5),D=c.getRow(E,this.luminances),V=Math.floor(p*4/5);for(let z=Math.floor(p/5);z<V;z++){let $=D[z]&255;_[$>>gt.LUMINANCE_SHIFT]++}}let b=gt.estimateBlackPoint(_),C=c.getMatrix();for(let P=0;P<g;P++){let E=P*p;for(let D=0;D<p;D++)(C[E+D]&255)<b&&u.set(D,P)}return u}createBinarizer(c){return new gt(c)}initArrays(c){this.luminances.length<c&&(this.luminances=new Uint8ClampedArray(c));let p=this.buckets;for(let g=0;g<gt.LUMINANCE_BUCKETS;g++)p[g]=0}static estimateBlackPoint(c){let p=c.length,g=0,u=0,_=0;for(let D=0;D<p;D++)c[D]>_&&(u=D,_=c[D]),c[D]>g&&(g=c[D]);let b=0,C=0;for(let D=0;D<p;D++){let V=D-u,z=c[D]*V*V;z>C&&(b=D,C=z)}if(u>b){let D=u;u=b,b=D}if(b-u<=p/16)throw new se;let P=b-1,E=-1;for(let D=b-1;D>u;D--){let V=D-u,z=V*V*(b-D)*(g-c[D]);z>E&&(P=D,E=z)}return P<<gt.LUMINANCE_SHIFT}}gt.LUMINANCE_BITS=5,gt.LUMINANCE_SHIFT=8-gt.LUMINANCE_BITS,gt.LUMINANCE_BUCKETS=1<<gt.LUMINANCE_BITS,gt.EMPTY=Uint8ClampedArray.from([0]);class Te extends gt{constructor(c){super(c),this.matrix=null}getBlackMatrix(){if(this.matrix!==null)return this.matrix;let c=this.getLuminanceSource(),p=c.getWidth(),g=c.getHeight();if(p>=Te.MINIMUM_DIMENSION&&g>=Te.MINIMUM_DIMENSION){let u=c.getMatrix(),_=p>>Te.BLOCK_SIZE_POWER;(p&Te.BLOCK_SIZE_MASK)!==0&&_++;let b=g>>Te.BLOCK_SIZE_POWER;(g&Te.BLOCK_SIZE_MASK)!==0&&b++;let C=Te.calculateBlackPoints(u,_,b,p,g),P=new De(p,g);Te.calculateThresholdForBlock(u,_,b,p,g,C,P),this.matrix=P}else this.matrix=super.getBlackMatrix();return this.matrix}createBinarizer(c){return new Te(c)}static calculateThresholdForBlock(c,p,g,u,_,b,C){let P=_-Te.BLOCK_SIZE,E=u-Te.BLOCK_SIZE;for(let D=0;D<g;D++){let V=D<<Te.BLOCK_SIZE_POWER;V>P&&(V=P);let z=Te.cap(D,2,g-3);for(let $=0;$<p;$++){let X=$<<Te.BLOCK_SIZE_POWER;X>E&&(X=E);let ee=Te.cap($,2,p-3),ne=0;for(let ve=-2;ve<=2;ve++){let ke=b[z+ve];ne+=ke[ee-2]+ke[ee-1]+ke[ee]+ke[ee+1]+ke[ee+2]}let oe=ne/25;Te.thresholdBlock(c,X,V,oe,u,C)}}}static cap(c,p,g){return c<p?p:c>g?g:c}static thresholdBlock(c,p,g,u,_,b){for(let C=0,P=g*_+p;C<Te.BLOCK_SIZE;C++,P+=_)for(let E=0;E<Te.BLOCK_SIZE;E++)(c[P+E]&255)<=u&&b.set(p+E,g+C)}static calculateBlackPoints(c,p,g,u,_){let b=_-Te.BLOCK_SIZE,C=u-Te.BLOCK_SIZE,P=new Array(g);for(let E=0;E<g;E++){P[E]=new Int32Array(p);let D=E<<Te.BLOCK_SIZE_POWER;D>b&&(D=b);for(let V=0;V<p;V++){let z=V<<Te.BLOCK_SIZE_POWER;z>C&&(z=C);let $=0,X=255,ee=0;for(let oe=0,ve=D*u+z;oe<Te.BLOCK_SIZE;oe++,ve+=u){for(let ke=0;ke<Te.BLOCK_SIZE;
18ke++){let me=c[ve+ke]&255;$+=me,me<X&&(X=me),me>ee&&(ee=me)}if(ee-X>Te.MIN_DYNAMIC_RANGE)for(oe++,ve+=u;oe<Te.BLOCK_SIZE;oe++,ve+=u)for(let ke=0;ke<Te.BLOCK_SIZE;ke++)$+=c[ve+ke]&255}let ne=$>>Te.BLOCK_SIZE_POWER*2;if(ee-X<=Te.MIN_DYNAMIC_RANGE&&(ne=X/2,E>0&&V>0)){let oe=(P[E-1][V]+2*P[E][V-1]+P[E-1][V-1])/4;X<oe&&(ne=oe)}P[E][V]=ne}}return P}}Te.BLOCK_SIZE_POWER=3,Te.BLOCK_SIZE=1<<Te.BLOCK_SIZE_POWER,Te.BLOCK_SIZE_MASK=Te.BLOCK_SIZE-1,Te.MINIMUM_DIMENSION=Te.BLOCK_SIZE*5,Te.MIN_DYNAMIC_RANGE=24;class yt{constructor(c,p){this.width=c,this.height=p}getWidth(){return this.width}getHeight(){return this.height}isCropSupported(){return!1}crop(c,p,g,u){throw new ge("This luminance source does not support cropping.")}isRotateSupported(){return!1}rotateCounterClockwise(){throw new ge("This luminance source does not support rotation by 90 degrees.")}rotateCounterClockwise45(){throw new ge("This luminance source does not support rotation by 45 degrees.")}toString(){let c=new Uint8ClampedArray(this.width),p=new Ce;for(let g=0;g<this.height;g++){let u=this.getRow(g,c);for(let _=0;_<this.width;_++){let b=u[_]&255,C;b<64?C="#":b<128?C="+":b<192?C=".":C=" ",p.append(C)}p.append(` 19`)}return p.toString()}}class Ct extends yt{constructor(c){super(c.getWidth(),c.getHeight()),this.delegate=c}getRow(c,p){let g=this.delegate.getRow(c,p),u=this.getWidth();for(let _=0;_<u;_++)g[_]=255-(g[_]&255);return g}getMatrix(){let c=this.delegate.getMatrix(),p=this.getWidth()*this.getHeight(),g=new Uint8ClampedArray(p);for(let u=0;u<p;u++)g[u]=255-(c[u]&255);return g}isCropSupported(){return this.delegate.isCropSupported()}crop(c,p,g,u){return new Ct(this.delegate.crop(c,p,g,u))}isRotateSupported(){return this.delegate.isRotateSupported()}invert(){return this.delegate}rotateCounterClockwise(){return new Ct(this.delegate.rotateCounterClockwise())}rotateCounterClockwise45(){return new Ct(this.delegate.rotateCounterClockwise45())}}class an extends yt{constructor(c){super(c.width,c.height),this.canvas=c,this.tempCanvasElement=null,this.buffer=an.makeBufferFromCanvasImageData(c)}static makeBufferFromCanvasImageData(c){let p=c.getContext("2d").getImageData(0,0,c.width,c.height);return an.toGrayscaleBuffer(p.data,c.width,c.height)}static toGrayscaleBuffer(c,p,g){let u=new Uint8ClampedArray(p*g);for(let _=0,b=0,C=c.length;_<C;_+=4,b++){let P;if(c[_+3]===0)P=255;else{let D=c[_],V=c[_+1],z=c[_+2];P=306*D+601*V+117*z+512>>10}u[b]=P}return u}getRow(c,p){if(c<0||c>=this.getHeight())throw new y("Requested row is outside the image: "+c);let g=this.getWidth(),u=c*g;return p===null?p=this.buffer.slice(u,u+g):(p.length<g&&(p=new Uint8ClampedArray(g)),p.set(this.buffer.slice(u,u+g))),p}getMatrix(){return this.buffer}isCropSupported(){return!0}crop(c,p,g,u){return super.crop(c,p,g,u),this}isRotateSupported(){return!0}rotateCounterClockwise(){return this.rotate(-90),this}rotateCounterClockwise45(){return this.rotate(-45),this}getTempCanvasElement(){if(this.tempCanvasElement===null){let c=this.canvas.ownerDocument.createElement("canvas");c.width=this.canvas.width,c.height=this.canvas.height,this.tempCanvasElement=c}return this.tempCanvasElement}rotate(c){let p=this.getTempCanvasElement(),g=p.getContext("2d"),u=c*an.DEGREE_TO_RADIANS,_=this.canvas.width,b=this.canvas.height,C=Math.ceil(Math.abs(Math.cos(u))*_+Math.abs(Math.sin(u))*b),P=Math.ceil(Math.abs(Math.sin(u))*_+Math.abs(Math.cos(u))*b);return p.width=C,p.height=P,g.translate(C/2,P/2),g.rotate(u),g.drawImage(this.canvas,_/-2,b/-2),this.buffer=an.makeBufferFromCanvasImageData(p),this}invert(){return new Ct(this)}}an.DEGREE_TO_RADIANS=Math.PI/180;class gn{constructor(c,p,g){this.deviceId=c,this.label=p,this.kind="videoinput",this.groupId=g||void 0}toJSON(){return{kind:this.kind,groupId:this.groupId,deviceId:this.deviceId,label:this.label}}}var qt=(globalThis||global||self||window||void 0)&&(globalThis||global||self||window||void 0).__awaiter||function(T,c,p,g){function u(_){return _ instanceof p?_:new p(function(b){b(_)})}return new(p||(p=Promise))(function(_,b){function C(D){try{E(g.next(D))}catch(V){b(V)}}function P(D){try{E(g.throw(D))}catch(V){b(V)}}function E(D){D.done?_(D.value):u(D.value).then(C,P)}E((g=g.apply(T,c||[])).next())})};class pi{constructor(c,p=500,g){this.reader=c,this.timeBetweenScansMillis=p,this._hints=g,this._stopContinuousDecode=!1,this._stopAsyncDecode=!1,this._timeBetweenDecodingAttempts=0}get hasNavigator(){return typeof navigator<"u"}get isMediaDevicesSuported(){return this.hasNavigator&&!!navigator.mediaDevices}get canEnumerateDevices(){return!!(this.isMediaDevicesSuported&&navigator.mediaDevices.enumerateDevices)}get timeBetweenDecodingAttempts(){return this._timeBetweenDecodingAttempts}set timeBetweenDecodingAttempts(c){this._timeBetweenDecodingAttempts=c<0?0:c}set hints(c){this._hints=c||null}get hints(){return this._hints}listVideoInputDevices(){return qt(this,void 0,void 0,function*(){if(!this.hasNavigator)throw new Error("Can't enumerate devices, navigator is not present.");if(!this.canEnumerateDevices)throw new Error("Can't enumerate devices, method not supported.");let c=yield navigator.mediaDevices.enumerateDevices(),p=[];for(let g of c){let u=g.kind==="video"?"videoinput":g.kind;if(u!=="videoinput")continue;let _=g.deviceId||g.id,b=g.label||`Video device ${p.length+1}`,C=g.groupId,P={deviceId:_,label:b,kind:u,groupId:C};p.push(P)}return p})}getVideoInputDevices(){return qt(this,void 0,void 0,function*(){return(yield this.listVideoInputDevices()).map(p=>new gn(p.deviceId,p.label))})}findDeviceById(c){return qt(this,void 0,void 0,function*(){let p=yield this.listVideoInputDevices();return p?p.find(g=>g.deviceId===c):null})}decodeFromInputVideoDevice(c,p){return qt(this,void 0,void 0,function*(){return yield this.decodeOnceFromVideoDevice(c,p)})}decodeOnceFromVideoDevice(c,p){return qt(this,void 0,void 0,function*(){this.reset();let g;c?g={deviceId:{exact:c}}:g={facingMode:"environment"};let u={video:g};return yield this.decodeOnceFromConstraints(u,p)})}decodeOnceFromConstraints(c,p){return qt(this,void 0,void 0,function*(){let g=yield navigator.mediaDevices.getUserMedia(c);return yield this.decodeOnceFromStream(g,p)})}decodeOnceFromStream(c,p){return qt(this,void 0,void 0,function*(){this.reset();let g=yield this.attachStreamToVideo(c,p);return yield this.decodeOnce(g)})}decodeFromInputVideoDeviceContinuously(c,p,g){return qt(this,void 0,void 0,function*(){return yield this.decodeFromVideoDevice(c,p,g)})}decodeFromVideoDevice(c,p,g){return qt(this,void 0,void 0,function*(){let u;c?u={deviceId:{exact:c}}:u={facingMode:"environment"};let _={video:u};return yield this.decodeFromConstraints(_,p,g)})}decodeFromConstraints(c,p,g){return qt(this,void 0,void 0,function*(){let u=yield navigator.mediaDevices.getUserMedia(c);return yield this.decodeFromStream(u,p,g)})}decodeFromStream(c,p,g){return qt(this,void 0,void 0,function*(){this.reset();let u=yield this.attachStreamToVideo(c,p);return yield this.decodeContinuously(u,g)})}stopAsyncDecode(){this._stopAsyncDecode=!0}stopContinuousDecode(){this._stopContinuousDecode=!0}attachStreamToVideo(c,p){return qt(this,void 0,void 0,function*(){let g=this.prepareVideoElement(p);return this.addVideoSource(g,c),this.videoElement=g,this.stream=c,yield this.playVideoOnLoadAsync(g),g})}playVideoOnLoadAsync(c){return new Promise((p,g)=>this.playVideoOnLoad(c,()=>p()))}playVideoOnLoad(c,p){this.videoEndedListener=()=>this.stopStreams(),this.videoCanPlayListener=()=>this.tryPlayVideo(c),c.addEventListener("ended",this.videoEndedListener),c.addEventListener("canplay",this.videoCanPlayListener),c.addEventListener("playing",p),this.tryPlayVideo(c)}isVideoPlaying(c){return c.currentTime>0&&!c.paused&&!c.ended&&c.readyState>2}tryPlayVideo(c){return qt(this,void 0,void 0,function*(){if(this.isVideoPlaying(c)){console.warn("Trying to play video that is already playing.");return}try{yield c.play()}catch{console.warn("It was not possible to play the video.")}})}getMediaElement(c,p){let g=document.getElementById(c);if(!g)throw new v(`element with id '${c}' not found`);if(g.nodeName.toLowerCase()!==p.toLowerCase())throw new v(`element with id '${c}' must be an ${p} element`);return g}decodeFromImage(c,p){if(!c&&!p)throw new v("either imageElement with a src set or an url must be provided");return p&&!c?this.decodeFromImageUrl(p):this.decodeFromImageElement(c)}decodeFromVideo(c,p){if(!c&&!p)throw new v("Either an element with a src set or an URL must be provided");return p&&!c?this.decodeFromVideoUrl(p):this.decodeFromVideoElement(c)}decodeFromVideoContinuously(c,p,g){if(c===void 0&&p===void 0)throw new v("Either an element with a src set or an URL must be provided");return p&&!c?this.decodeFromVideoUrlContinuously(p,g):this.decodeFromVideoElementContinuously(c,g)}decodeFromImageElement(c){if(!c)throw new v("An image element must be provided.");this.reset();let p=this.prepareImageElement(c);this.imageElement=p;let g;return this.isImageLoaded(p)?g=this.decodeOnce(p,!1,!0):g=this._decodeOnLoadImage(p),g}decodeFromVideoElement(c){let p=this._decodeFromVideoElementSetup(c);return this._decodeOnLoadVideo(p)}decodeFromVideoElementContinuously(c,p){let g=this._decodeFromVideoElementSetup(c);return this._decodeOnLoadVideoContinuously(g,p)}_decodeFromVideoElementSetup(c){if(!c)throw new v("A video element must be provided.");this.reset();let p=this.prepareVideoElement(c);return this.videoElement=p,p}decodeFromImageUrl(c){if(!c)throw new v("An URL must be provided.");this.reset();let p=this.prepareImageElement();this.imageElement=p;let g=this._decodeOnLoadImage(p);return p.src=c,g}decodeFromVideoUrl(c){if(!c)throw new v("An URL must be provided.");this.reset();let p=this.prepareVideoElement(),g=this.decodeFromVideoElement(p);return p.src=c,g}decodeFromVideoUrlContinuously(c,p){if(!c)throw new v("An URL must be provided.");this.reset();let g=this.prepareVideoElement(),u=this.decodeFromVideoElementContinuously(g,p);return g.src=c,u}_decodeOnLoadImage(c){return new Promise((p,g)=>{this.imageLoadedListener=()=>this.decodeOnce(c,!1,!0).then(p,g),c.addEventListener("load",this.imageLoadedListener)})}_decodeOnLoadVideo(c){return qt(this,void 0,void 0,function*(){return yield this.playVideoOnLoadAsync(c),yield this.decodeOnce(c)})}_decodeOnLoadVideoContinuously(c,p){return qt(this,void 0,void 0,function*(){yield this.playVideoOnLoadAsync(c),this.decodeContinuously(c,p)})}
19isImageLoaded(c){return!(!c.complete||c.naturalWidth===0)}prepareImageElement(c){let p;return typeof c>"u"&&(p=document.createElement("img"),p.width=200,p.height=200),typeof c=="string"&&(p=this.getMediaElement(c,"img")),c instanceof HTMLImageElement&&(p=c),p}prepareVideoElement(c){let p;return!c&&typeof document<"u"&&(p=document.createElement("video"),p.width=200,p.height=200),typeof c=="string"&&(p=this.getMediaElement(c,"video")),c instanceof HTMLVideoElement&&(p=c),p.setAttribute("autoplay","true"),p.setAttribute("muted","true"),p.setAttribute("playsinline","true"),p}decodeOnce(c,p=!0,g=!0){this._stopAsyncDecode=!1;let u=(_,b)=>{if(this._stopAsyncDecode){b(new se("Video stream has ended before any code could be detected.")),this._stopAsyncDecode=void 0;return}try{let C=this.decode(c);_(C)}catch(C){let P=p&&C instanceof se,D=(C instanceof I||C instanceof U)&&g;if(P||D)return setTimeout(u,this._timeBetweenDecodingAttempts,_,b);b(C)}};return new Promise((_,b)=>u(_,b))}decodeContinuously(c,p){this._stopContinuousDecode=!1;let g=()=>{if(this._stopContinuousDecode){this._stopContinuousDecode=void 0;return}try{let u=this.decode(c);p(u,null),setTimeout(g,this.timeBetweenScansMillis)}catch(u){p(null,u);let _=u instanceof I||u instanceof U,b=u instanceof se;(_||b)&&setTimeout(g,this._timeBetweenDecodingAttempts)}};g()}decode(c){let p=this.createBinaryBitmap(c);return this.decodeBitmap(p)}_isHTMLVideoElement(c){return c.videoWidth!==0}drawFrameOnCanvas(c,p,g){p||(p={sx:0,sy:0,sWidth:c.videoWidth,sHeight:c.videoHeight,dx:0,dy:0,dWidth:c.videoWidth,dHeight:c.videoHeight}),g||(g=this.captureCanvasContext),g.drawImage(c,p.sx,p.sy,p.sWidth,p.sHeight,p.dx,p.dy,p.dWidth,p.dHeight)}drawImageOnCanvas(c,p,g=this.captureCanvasContext){p||(p={sx:0,sy:0,sWidth:c.naturalWidth,sHeight:c.naturalHeight,dx:0,dy:0,dWidth:c.naturalWidth,dHeight:c.naturalHeight}),g||(g=this.captureCanvasContext),g.drawImage(c,p.sx,p.sy,p.sWidth,p.sHeight,p.dx,p.dy,p.dWidth,p.dHeight)}createBinaryBitmap(c){let p=this.getCaptureCanvasContext(c);this._isHTMLVideoElement(c)?this.drawFrameOnCanvas(c):this.drawImageOnCanvas(c);let g=this.getCaptureCanvas(c),u=new an(g),_=new Te(u);return new M(_)}getCaptureCanvasContext(c){if(!this.captureCanvasContext){let g=this.getCaptureCanvas(c).getContext("2d");this.captureCanvasContext=g}return this.captureCanvasContext}getCaptureCanvas(c){if(!this.captureCanvas){let p=this.createCaptureCanvas(c);this.captureCanvas=p}return this.captureCanvas}decodeBitmap(c){return this.reader.decode(c,this._hints)}createCaptureCanvas(c){if(typeof document>"u")return this._destroyCaptureCanvas(),null;let p=document.createElement("canvas"),g,u;return typeof c<"u"&&(c instanceof HTMLVideoElement?(g=c.videoWidth,u=c.videoHeight):c instanceof HTMLImageElement&&(g=c.naturalWidth||c.width,u=c.naturalHeight||c.height)),p.style.width=g+"px",p.style.height=u+"px",p.width=g,p.height=u,p}stopStreams(){this.stream&&(this.stream.getVideoTracks().forEach(c=>c.stop()),this.stream=void 0),this._stopAsyncDecode===!1&&this.stopAsyncDecode(),this._stopContinuousDecode===!1&&this.stopContinuousDecode()}reset(){this.stopStreams(),this._destroyVideoElement(),this._destroyImageElement(),this._destroyCaptureCanvas()}_destroyVideoElement(){this.videoElement&&(typeof this.videoEndedListener<"u"&&this.videoElement.removeEventListener("ended",this.videoEndedListener),typeof this.videoPlayingEventListener<"u"&&this.videoElement.removeEventListener("playing",this.videoPlayingEventListener),typeof this.videoCanPlayListener<"u"&&this.videoElement.removeEventListener("loadedmetadata",this.videoCanPlayListener),this.cleanVideoSource(this.videoElement),this.videoElement=void 0)}_destroyImageElement(){this.imageElement&&(this.imageLoadedListener!==void 0&&this.imageElement.removeEventListener("load",this.imageLoadedListener),this.imageElement.src=void 0,this.imageElement.removeAttribute("src"),this.imageElement=void 0)}_destroyCaptureCanvas(){this.captureCanvasContext=void 0,this.captureCanvas=void 0}addVideoSource(c,p){try{c.srcObject=p}catch{c.src=URL.createObjectURL(p)}}cleanVideoSource(c){try{c.srcObject=null}catch{c.src=""}this.videoElement.removeAttribute("src")}}class $t{constructor(c,p,g=p==null?0:8*p.length,u,_,b=N.currentTimeMillis()){this.text=c,this.rawBytes=p,this.numBits=g,this.resultPoints=u,this.format=_,this.timestamp=b,this.text=c,this.rawBytes=p,g==null?this.numBits=p==null?0:8*p.length:this.numBits=g,this.resultPoints=u,this.format=_,this.resultMetadata=null,b==null?this.timestamp=N.currentTimeMillis():this.timestamp=b}getText(){return this.text}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}getResultPoints(){return this.resultPoints}getBarcodeFormat(){return this.format}getResultMetadata(){return this.resultMetadata}putMetadata(c,p){this.resultMetadata===null&&(this.resultMetadata=new Map),this.resultMetadata.set(c,p)}putAllMetadata(c){c!==null&&(this.resultMetadata===null?this.resultMetadata=c:this.resultMetadata=new Map(c))}addResultPoints(c){let p=this.resultPoints;if(p===null)this.resultPoints=c;else if(c!==null&&c.length>0){let g=new Array(p.length+c.length);N.arraycopy(p,0,g,0,p.length),N.arraycopy(c,0,g,p.length,c.length),this.resultPoints=g}}getTimestamp(){return this.timestamp}toString(){return this.text}}
19var Io=function(T){return T[T.AZTEC=0]="AZTEC",T[T.CODABAR=1]="CODABAR",T[T.CODE_39=2]="CODE_39",T[T.CODE_93=3]="CODE_93",T[T.CODE_128=4]="CODE_128",T[T.DATA_MATRIX=5]="DATA_MATRIX",T[T.EAN_8=6]="EAN_8",T[T.EAN_13=7]="EAN_13",T[T.ITF=8]="ITF",T[T.MAXICODE=9]="MAXICODE",T[T.PDF_417=10]="PDF_417",T[T.QR_CODE=11]="QR_CODE",T[T.RSS_14=12]="RSS_14",T[T.RSS_EXPANDED=13]="RSS_EXPANDED",T[T.UPC_A=14]="UPC_A",T[T.UPC_E=15]="UPC_E",T[T.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION",T}(Io||{}),Ne=Io,Ao=function(T){return T[T.OTHER=0]="OTHER",T[T.ORIENTATION=1]="ORIENTATION",T[T.BYTE_SEGMENTS=2]="BYTE_SEGMENTS",T[T.ERROR_CORRECTION_LEVEL=3]="ERROR_CORRECTION_LEVEL",T[T.ISSUE_NUMBER=4]="ISSUE_NUMBER",T[T.SUGGESTED_PRICE=5]="SUGGESTED_PRICE",T[T.POSSIBLE_COUNTRY=6]="POSSIBLE_COUNTRY",T[T.UPC_EAN_EXTENSION=7]="UPC_EAN_EXTENSION",T[T.PDF417_EXTRA_METADATA=8]="PDF417_EXTRA_METADATA",T[T.STRUCTURED_APPEND_SEQUENCE=9]="STRUCTURED_APPEND_SEQUENCE",T[T.STRUCTURED_APPEND_PARITY=10]="STRUCTURED_APPEND_PARITY",T}(Ao||{}),Bt=Ao;class gs{constructor(c,p,g,u,_=-1,b=-1){this.rawBytes=c,this.text=p,this.byteSegments=g,this.ecLevel=u,this.structuredAppendSequenceNumber=_,this.structuredAppendParity=b,this.numBits=c==null?0:8*c.length}getRawBytes(){return this.rawBytes}getNumBits(){return this.numBits}setNumBits(c){this.numBits=c}getText(){return this.text}getByteSegments(){return this.byteSegments}getECLevel(){return this.ecLevel}getErrorsCorrected(){return this.errorsCorrected}setErrorsCorrected(c){this.errorsCorrected=c}getErasures(){return this.erasures}setErasures(c){this.erasures=c}getOther(){return this.other}setOther(c){this.other=c}hasStructuredAppend(){return this.structuredAppendParity>=0&&this.structuredAppendSequenceNumber>=0}getStructuredAppendParity(){return this.structuredAppendParity}getStructuredAppendSequenceNumber(){return this.structuredAppendSequenceNumber}}class us{exp(c){return this.expTable[c]}log(c){if(c===0)throw new y;return this.logTable[c]}static addOrSubtract(c,p){return c^p}}class Wn{constructor(c,p){if(p.length===0)throw new y;this.field=c;let g=p.length;if(g>1&&p[0]===0){let u=1;for(;u<g&&p[u]===0;)u++;u===g?this.coefficients=Int32Array.from([0]):(this.coefficients=new Int32Array(g-u),N.arraycopy(p,u,this.coefficients,0,this.coefficients.length))}else this.coefficients=p}getCoefficients(){return this.coefficients}getDegree(){return this.coefficients.length-1}isZero(){return this.coefficients[0]===0}getCoefficient(c){return this.coefficients[this.coefficients.length-1-c]}evaluateAt(c){if(c===0)return this.getCoefficient(0);let p=this.coefficients,g;if(c===1){g=0;for(let b=0,C=p.length;b!==C;b++){let P=p[b];g=us.addOrSubtract(g,P)}return g}g=p[0];let u=p.length,_=this.field;for(let b=1;b<u;b++)g=us.addOrSubtract(_.multiply(c,g),p[b]);return g}addOrSubtract(c){if(!this.field.equals(c.field))throw new y("GenericGFPolys do not have same GenericGF field");if(this.isZero())return c;if(c.isZero())return this;let p=this.coefficients,g=c.coefficients;if(p.length>g.length){let b=p;p=g,g=b}let u=new Int32Array(g.length),_=g.length-p.length;N.arraycopy(g,0,u,0,_);for(let b=_;b<g.length;b++)u[b]=us.addOrSubtract(p[b-_],g[b]);return new Wn(this.field,u)}multiply(c){if(!this.field.equals(c.field))throw new y("GenericGFPolys do not have same GenericGF field");if(this.isZero()||c.isZero())return this.field.getZero();let p=this.coefficients,g=p.length,u=c.coefficients,_=u.length,b=new Int32Array(g+_-1),C=this.field;for(let P=0;P<g;P++){let E=p[P];for(let D=0;D<_;D++)b[P+D]=us.addOrSubtract(b[P+D],C.multiply(E,u[D]))}return new Wn(C,b)}multiplyScalar(c){if(c===0)return this.field.getZero();if(c===1)return this;let p=this.coefficients.length,g=this.field,u=new Int32Array(p),_=this.coefficients;for(let b=0;b<p;b++)u[b]=g.multiply(_[b],c);return new Wn(g,u)}multiplyByMonomial(c,p){if(c<0)throw new y;if(p===0)return this.field.getZero();let g=this.coefficients,u=g.length,_=new Int32Array(u+c),b=this.field;for(let C=0;C<u;C++)_[C]=b.multiply(g[C],p);return new Wn(b,_)}divide(c){if(!this.field.equals(c.field))throw new y("GenericGFPolys do not have same GenericGF field");if(c.isZero())throw new y("Divide by 0");let p=this.field,g=p.getZero(),u=this,_=c.getCoefficient(c.getDegree()),b=p.inverse(_);for(;u.getDegree()>=c.getDegree()&&!u.isZero();){let C=u.getDegree()-c.getDegree(),P=p.multiply(u.getCoefficient(u.getDegree()),b),E=c.multiplyByMonomial(C,P),D=p.buildMonomial(C,P);g=g.addOrSubtract(D),u=u.addOrSubtract(E)}return[g,u]}toString(){let c="";for(let p=this.getDegree();p>=0;p--){let g=this.getCoefficient(p);if(g!==0){if(g<0?(c+=" - ",g=-g):c.length>0&&(c+=" + "),p===0||g!==1){let u=this.field.log(g);u===0?c+="1":u===1?c+="a":(c+="a^",c+=u)}p!==0&&(p===1?c+="x":(c+="x^",c+=p))}}return c}}let c0=(()=>{class T extends f{}return T.kind="ArithmeticException",T})();class _t extends us{constructor(c,p,g){super(),this.primitive=c,this.size=p,this.generatorBase=g;let u=new Int32Array(p),_=1;for(let C=0;C<p;C++)u[C]=_,_*=2,_>=p&&(_^=c,_&=p-1);this.expTable=u;let b=new Int32Array(p);for(let C=0;C<p-1;C++)b[u[C]]=C;this.logTable=b,this.zero=new Wn(this,Int32Array.from([0])),this.one=new Wn(this,Int32Array.from([1]))}getZero(){return this.zero}getOne(){return this.one}buildMonomial(c,p){if(c<0)throw new y;if(p===0)return this.zero;let g=new Int32Array(c+1);return g[0]=p,new Wn(this,g)}inverse(c){if(c===0)throw new c0;return this.expTable[this.size-this.logTable[c]-1]}multiply(c,p){return c===0||p===0?0:this.expTable[(this.logTable[c]+this.logTable[p])%(this.size-1)]}getSize(){return this.size}getGeneratorBase(){return this.generatorBase}toString(){return"GF(0x"+Z.toHexString(this.primitive)+","+this.size+")"}equals(c){return c===this}}_t.AZTEC_DATA_12=new _t(4201,4096,1),_t.AZTEC_DATA_10=new _t(1033,1024,1),_t.AZTEC_DATA_6=new _t(67,64,1),_t.AZTEC_PARAM=new _t(19,16,1),_t.QR_CODE_FIELD_256=new _t(285,256,0),_t.DATA_MATRIX_FIELD_256=new _t(301,256,1),_t.AZTEC_DATA_8=_t.DATA_MATRIX_FIELD_256,_t.MAXICODE_FIELD_64=_t.AZTEC_DATA_6;let fs=(()=>{class T extends f{}return T.kind="ReedSolomonException",T})(),co=(()=>{class T extends f{}return T.kind="IllegalStateException",T})();class hs{constructor(c){this.field=c}decode(c,p){let g=this.field,u=new Wn(g,c),_=new Int32Array(p),b=!0;for(let $=0;$<p;$++){let X=u.evaluateAt(g.exp($+g.getGeneratorBase()));_[_.length-1-$]=X,X!==0&&(b=!1)}if(b)return;let C=new Wn(g,_),P=this.runEuclideanAlgorithm(g.buildMonomial(p,1),C,p),E=P[0],D=P[1],V=this.findErrorLocations(E),z=this.findErrorMagnitudes(D,V);for(let $=0;$<V.length;$++){let X=c.length-1-g.log(V[$]);if(X<0)throw new fs("Bad error location");c[X]=_t.addOrSubtract(c[X],z[$])}}runEuclideanAlgorithm(c,p,g){if(c.getDegree()<p.getDegree()){let $=c;c=p,p=$}let u=this.field,_=c,b=p,C=u.getZero(),P=u.getOne();for(;b.getDegree()>=(g/2|0);){let $=_,X=C;if(_=b,C=P,_.isZero())throw new fs("r_{i-1} was zero");b=$;let ee=u.getZero(),ne=_.getCoefficient(_.getDegree()),oe=u.inverse(ne);for(;b.getDegree()>=_.getDegree()&&!b.isZero();){let ve=b.getDegree()-_.getDegree(),ke=u.multiply(b.getCoefficient(b.getDegree()),oe);ee=ee.addOrSubtract(u.buildMonomial(ve,ke)),b=b.addOrSubtract(_.multiplyByMonomial(ve,ke))}if(P=ee.multiply(C).addOrSubtract(X),b.getDegree()>=_.getDegree())throw new co("Division algorithm failed to reduce polynomial?")}let E=P.getCoefficient(0);if(E===0)throw new fs("sigmaTilde(0) was zero");let D=u.inverse(E),V=P.multiplyScalar(D),z=b.multiplyScalar(D);return[V,z]}findErrorLocations(c){let p=c.getDegree();if(p===1)return Int32Array.from([c.getCoefficient(1)]);let g=new Int32Array(p),u=0,_=this.field;for(let b=1;b<_.getSize()&&u<p;b++)c.evaluateAt(b)===0&&(g[u]=_.inverse(b),u++);if(u!==p)throw new fs("Error locator degree does not match number of roots");return g}findErrorMagnitudes(c,p){let g=p.length,u=new Int32Array(g),_=this.field;for(let b=0;b<g;b++){let C=_.inverse(p[b]),P=1;for(let E=0;E<g;
19E++)if(b!==E){let D=_.multiply(p[E],C),V=(D&1)===0?D|1:D&-2;P=_.multiply(P,V)}u[b]=_.multiply(c.evaluateAt(C),_.inverse(P)),_.getGeneratorBase()!==0&&(u[b]=_.multiply(u[b],C))}return u}}var Rn=function(T){return T[T.UPPER=0]="UPPER",T[T.LOWER=1]="LOWER",T[T.MIXED=2]="MIXED",T[T.DIGIT=3]="DIGIT",T[T.PUNCT=4]="PUNCT",T[T.BINARY=5]="BINARY",T}(Rn||{});let d0=(()=>{class T{decode(p){this.ddata=p;let g=p.getBits(),u=this.extractBits(g),_=this.correctBits(u),b=T.convertBoolArrayToByteArray(_),C=T.getEncodedData(_),P=new gs(b,C,null,null);return P.setNumBits(_.length),P}static highLevelDecode(p){return this.getEncodedData(p)}static getEncodedData(p){let g=p.length,u=Rn.UPPER,_=Rn.UPPER,b="",C=0;for(;C<g;)if(_===Rn.BINARY){if(g-C<5)break;let P=T.readCode(p,C,5);if(C+=5,P===0){if(g-C<11)break;P=T.readCode(p,C,11)+31,C+=11}for(let E=0;E<P;E++){if(g-C<8){C=g;break}let D=T.readCode(p,C,8);b+=he.castAsNonUtf8Char(D),C+=8}_=u}else{let P=_===Rn.DIGIT?4:5;if(g-C<P)break;let E=T.readCode(p,C,P);C+=P;let D=T.getCharacter(_,E);D.startsWith("CTRL_")?(u=_,_=T.getTable(D.charAt(5)),D.charAt(6)==="L"&&(u=_)):(b+=D,_=u)}return b}static getTable(p){switch(p){case"L":return Rn.LOWER;case"P":return Rn.PUNCT;case"M":return Rn.MIXED;case"D":return Rn.DIGIT;case"B":return Rn.BINARY;case"U":default:return Rn.UPPER}}static getCharacter(p,g){switch(p){case Rn.UPPER:return T.UPPER_TABLE[g];case Rn.LOWER:return T.LOWER_TABLE[g];case Rn.MIXED:return T.MIXED_TABLE[g];case Rn.PUNCT:return T.PUNCT_TABLE[g];case Rn.DIGIT:return T.DIGIT_TABLE[g];default:throw new co("Bad table")}}correctBits(p){let g,u;this.ddata.getNbLayers()<=2?(u=6,g=_t.AZTEC_DATA_6):this.ddata.getNbLayers()<=8?(u=8,g=_t.AZTEC_DATA_8):this.ddata.getNbLayers()<=22?(u=10,g=_t.AZTEC_DATA_10):(u=12,g=_t.AZTEC_DATA_12);let _=this.ddata.getNbDatablocks(),b=p.length/u;if(b<_)throw new U;let C=p.length%u,P=new Int32Array(b);for(let $=0;$<b;$++,C+=u)P[$]=T.readCode(p,C,u);try{new hs(g).decode(P,b-_)}catch($){throw new U($)}let E=(1<<u)-1,D=0;for(let $=0;$<_;$++){let X=P[$];if(X===0||X===E)throw new U;(X===1||X===E-1)&&D++}let V=new Array(_*u-D),z=0;for(let $=0;$<_;$++){let X=P[$];if(X===1||X===E-1)V.fill(X>1,z,z+u-1),z+=u-1;else for(let ee=u-1;ee>=0;--ee)V[z++]=(X&1<<ee)!==0}return V}extractBits(p){let g=this.ddata.isCompact(),u=this.ddata.getNbLayers(),_=(g?11:14)+u*4,b=new Int32Array(_),C=new Array(this.totalBitsInLayer(u,g));if(g)for(let P=0;P<b.length;P++)b[P]=P;else{let P=_+1+2*Z.truncDivision(Z.truncDivision(_,2)-1,15),E=_/2,D=Z.truncDivision(P,2);for(let V=0;V<E;V++){let z=V+Z.truncDivision(V,15);b[E-V-1]=D-z-1,b[E+V]=D+z+1}}for(let P=0,E=0;P<u;P++){let D=(u-P)*4+(g?9:12),V=P*2,z=_-1-V;for(let $=0;$<D;$++){let X=$*2;for(let ee=0;ee<2;ee++)C[E+X+ee]=p.get(b[V+ee],b[V+$]),C[E+2*D+X+ee]=p.get(b[V+$],b[z-ee]),C[E+4*D+X+ee]=p.get(b[z-ee],b[z-$]),C[E+6*D+X+ee]=p.get(b[z-$],b[V+ee])}E+=D*8}return C}static readCode(p,g,u){let _=0;for(let b=g;b<g+u;b++)_<<=1,p[b]&&(_|=1);return _}static readByte(p,g){let u=p.length-g;return u>=8?T.readCode(p,g,8):T.readCode(p,g,u)<<8-u}static convertBoolArrayToByteArray(p){let g=new Uint8Array((p.length+7)/8);for(let u=0;u<g.length;u++)g[u]=T.readByte(p,8*u);return g}totalBitsInLayer(p,g){return((g?88:112)+16*p)*p}}return T.UPPER_TABLE=["CTRL_PS"," ","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","CTRL_LL","CTRL_ML","CTRL_DL","CTRL_BS"],T.LOWER_TABLE=["CTRL_PS"," ","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","CTRL_US","CTRL_ML","CTRL_DL","CTRL_BS"],T.MIXED_TABLE=["CTRL_PS"," ","\\1","\\2","\\3","\\4","\\5","\\6","\\7","\b"," ",` 20`,"\\13","\f","\r","\\33","\\34","\\35","\\36","\\37","@","\\","^","_","`","|","~","\\177","CTRL_LL","CTRL_UL","CTRL_PL","CTRL_BS"],T.PUNCT_TABLE=["","\r",`\r 21`,". ",", ",": ","!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","[","]","{","}","CTRL_UL"],T.DIGIT_TABLE=["CTRL_PS"," ","0","1","2","3","4","5","6","7","8","9",",",".","CTRL_UL","CTRL_US"],T})();class dt{constructor(){}
21static round(c){return c===NaN?0:c<=Number.MIN_SAFE_INTEGER?Number.MIN_SAFE_INTEGER:c>=Number.MAX_SAFE_INTEGER?Number.MAX_SAFE_INTEGER:c+(c<0?-.5:.5)|0}static distance(c,p,g,u){let _=c-g,b=p-u;return Math.sqrt(_*_+b*b)}static sum(c){let p=0;for(let g=0,u=c.length;g!==u;g++){let _=c[g];p+=_}return p}}class kl{static floatToIntBits(c){return c}}kl.MAX_VALUE=Number.MAX_SAFE_INTEGER;class Re{constructor(c,p){this.x=c,this.y=p}getX(){return this.x}getY(){return this.y}equals(c){if(c instanceof Re){let p=c;return this.x===p.x&&this.y===p.y}return!1}hashCode(){return 31*kl.floatToIntBits(this.x)+kl.floatToIntBits(this.y)}toString(){return"("+this.x+","+this.y+")"}static orderBestPatterns(c){let p=this.distance(c[0],c[1]),g=this.distance(c[1],c[2]),u=this.distance(c[0],c[2]),_,b,C;if(g>=p&&g>=u?(b=c[0],_=c[1],C=c[2]):u>=g&&u>=p?(b=c[1],_=c[0],C=c[2]):(b=c[2],_=c[0],C=c[1]),this.crossProductZ(_,b,C)<0){let P=_;_=C,C=P}c[0]=_,c[1]=b,c[2]=C}static distance(c,p){return dt.distance(c.x,c.y,p.x,p.y)}static crossProductZ(c,p,g){let u=p.x,_=p.y;return(g.x-u)*(c.y-_)-(g.y-_)*(c.x-u)}}class Ol{constructor(c,p){this.bits=c,this.points=p}getBits(){return this.bits}getPoints(){return this.points}}class Sg extends Ol{constructor(c,p,g,u,_){super(c,p),this.compact=g,this.nbDatablocks=u,this.nbLayers=_}getNbLayers(){return this.nbLayers}getNbDatablocks(){return this.nbDatablocks}isCompact(){return this.compact}}let El=(()=>{class T{constructor(p,g,u,_){this.image=p,this.height=p.getHeight(),this.width=p.getWidth(),g==null&&(g=T.INIT_SIZE),u==null&&(u=p.getWidth()/2|0),_==null&&(_=p.getHeight()/2|0);let b=g/2|0;if(this.leftInit=u-b,this.rightInit=u+b,this.upInit=_-b,this.downInit=_+b,this.upInit<0||this.leftInit<0||this.downInit>=this.height||this.rightInit>=this.width)throw new se}detect(){let p=this.leftInit,g=this.rightInit,u=this.upInit,_=this.downInit,b=!1,C=!0,P=!1,E=!1,D=!1,V=!1,z=!1,$=this.width,X=this.height;for(;C;){C=!1;let ee=!0;for(;(ee||!E)&&g<$;)ee=this.containsBlackPoint(u,_,g,!1),ee?(g++,C=!0,E=!0):E||g++;if(g>=$){b=!0;break}let ne=!0;for(;(ne||!D)&&_<X;)ne=this.containsBlackPoint(p,g,_,!0),ne?(_++,C=!0,D=!0):D||_++;if(_>=X){b=!0;break}let oe=!0;for(;(oe||!V)&&p>=0;)oe=this.containsBlackPoint(u,_,p,!1),oe?(p--,C=!0,V=!0):V||p--;if(p<0){b=!0;break}let ve=!0;for(;(ve||!z)&&u>=0;)ve=this.containsBlackPoint(p,g,u,!0),ve?(u--,C=!0,z=!0):z||u--;if(u<0){b=!0;break}C&&(P=!0)}if(!b&&P){let ee=g-p,ne=null;for(let me=1;ne===null&&me<ee;me++)ne=this.getBlackPointOnSegment(p,_-me,p+me,_);if(ne==null)throw new se;let oe=null;for(let me=1;oe===null&&me<ee;me++)oe=this.getBlackPointOnSegment(p,u+me,p+me,u);if(oe==null)throw new se;let ve=null;for(let me=1;ve===null&&me<ee;me++)ve=this.getBlackPointOnSegment(g,u+me,g-me,u);if(ve==null)throw new se;let ke=null;for(let me=1;ke===null&&me<ee;me++)ke=this.getBlackPointOnSegment(g,_-me,g-me,_);if(ke==null)throw new se;return this.centerEdges(ke,ne,ve,oe)}else throw new se}getBlackPointOnSegment(p,g,u,_){let b=dt.round(dt.distance(p,g,u,_)),C=(u-p)/b,P=(_-g)/b,E=this.image;for(let D=0;D<b;D++){let V=dt.round(p+D*C),z=dt.round(g+D*P);if(E.get(V,z))return new Re(V,z)}return null}centerEdges(p,g,u,_){let b=p.getX(),C=p.getY(),P=g.getX(),E=g.getY(),D=u.getX(),V=u.getY(),z=_.getX(),$=_.getY(),X=T.CORR;return b<this.width/2?[new Re(z-X,$+X),new Re(P+X,E+X),new Re(D-X,V-X),new Re(b+X,C-X)]:[new Re(z+X,$+X),new Re(P+X,E-X),new Re(D-X,V+X),new Re(b-X,C-X)]}containsBlackPoint(p,g,u,_){let b=this.image;if(_){for(let C=p;C<=g;C++)if(b.get(C,u))return!0}else for(let C=p;C<=g;C++)if(b.get(u,C))return!0;return!1}}return T.INIT_SIZE=10,T.CORR=1,T})();class p0{static checkAndNudgePoints(c,p){let g=c.getWidth(),u=c.getHeight(),_=!0;for(let b=0;b<p.length&&_;b+=2){let C=Math.floor(p[b]),P=Math.floor(p[b+1]);if(C<-1||C>g||P<-1||P>u)throw new se;_=!1,C===-1?(p[b]=0,_=!0):C===g&&(p[b]=g-1,_=!0),P===-1?(p[b+1]=0,_=!0):P===u&&(p[b+1]=u-1,_=!0)}_=!0;for(let b=p.length-2;b>=0&&_;b-=2){let C=Math.floor(p[b]),P=Math.floor(p[b+1]);if(C<-1||C>g||P<-1||P>u)throw new se;_=!1,C===-1?(p[b]=0,_=!0):C===g&&(p[b]=g-1,_=!0),P===-1?(p[b+1]=0,_=!0):P===u&&(p[b+1]=u-1,_=!0)}}}class Oi{constructor(c,p,g,u,_,b,C,P,E){this.a11=c,this.a21=p,this.a31=g,this.a12=u,this.a22=_,this.a32=b,this.a13=C,this.a23=P,this.a33=E}static quadrilateralToQuadrilateral(c,p,g,u,_,b,C,P,E,D,V,z,$,X,ee,ne){let oe=Oi.quadrilateralToSquare(c,p,g,u,_,b,C,P);return Oi.squareToQuadrilateral(E,D,V,z,$,X,ee,ne).times(oe)}transformPoints(c){let p=c.length,g=this.a11,u=this.a12,_=this.a13,b=this.a21,C=this.a22,P=this.a23,E=this.a31,D=this.a32,V=this.a33;for(let z=0;z<p;z+=2){let $=c[z],X=c[z+1],ee=_*$+P*X+V;c[z]=(g*$+b*X+E)/ee,c[z+1]=(u*$+C*X+D)/ee}}transformPointsWithValues(c,p){let g=this.a11,u=this.a12,_=this.a13,b=this.a21,C=this.a22,P=this.a23,E=this.a31,D=this.a32,V=this.a33,z=c.length;for(let $=0;$<z;$++){let X=c[$],ee=p[$],ne=_*X+P*ee+V;c[$]=(g*X+b*ee+E)/ne,p[$]=(u*X+C*ee+D)/ne}}static squareToQuadrilateral(c,p,g,u,_,b,C,P){let E=c-g+_-C,D=p-u+b-P;if(E===0&&D===0)return new Oi(g-c,_-g,c,u-p,b-u,p,0,0,1);{let V=g-_,z=C-_,$=u-b,X=P-b,ee=V*X-z*$,ne=(E*X-z*D)/ee,oe=(V*D-E*$)/ee;return new Oi(g-c+ne*g,C-c+oe*C,c,u-p+ne*u,P-p+oe*P,p,ne,oe,1)}}static quadrilateralToSquare(c,p,g,u,_,b,C,P){return Oi.squareToQuadrilateral(c,p,g,u,_,b,C,P).buildAdjoint(
21)}buildAdjoint(){return new Oi(this.a22*this.a33-this.a23*this.a32,this.a23*this.a31-this.a21*this.a33,this.a21*this.a32-this.a22*this.a31,this.a13*this.a32-this.a12*this.a33,this.a11*this.a33-this.a13*this.a31,this.a12*this.a31-this.a11*this.a32,this.a12*this.a23-this.a13*this.a22,this.a13*this.a21-this.a11*this.a23,this.a11*this.a22-this.a12*this.a21)}times(c){return new Oi(this.a11*c.a11+this.a21*c.a12+this.a31*c.a13,this.a11*c.a21+this.a21*c.a22+this.a31*c.a23,this.a11*c.a31+this.a21*c.a32+this.a31*c.a33,this.a12*c.a11+this.a22*c.a12+this.a32*c.a13,this.a12*c.a21+this.a22*c.a22+this.a32*c.a23,this.a12*c.a31+this.a22*c.a32+this.a32*c.a33,this.a13*c.a11+this.a23*c.a12+this.a33*c.a13,this.a13*c.a21+this.a23*c.a22+this.a33*c.a23,this.a13*c.a31+this.a23*c.a32+this.a33*c.a33)}}class kg extends p0{sampleGrid(c,p,g,u,_,b,C,P,E,D,V,z,$,X,ee,ne,oe,ve,ke){let me=Oi.quadrilateralToQuadrilateral(u,_,b,C,P,E,D,V,z,$,X,ee,ne,oe,ve,ke);return this.sampleGridWithTransform(c,p,g,me)}sampleGridWithTransform(c,p,g,u){if(p<=0||g<=0)throw new se;let _=new De(p,g),b=new Float32Array(2*p);for(let C=0;C<g;C++){let P=b.length,E=C+.5;for(let D=0;D<P;D+=2)b[D]=D/2+.5,b[D+1]=E;u.transformPoints(b),p0.checkAndNudgePoints(c,b);try{for(let D=0;D<P;D+=2)c.get(Math.floor(b[D]),Math.floor(b[D+1]))&&_.set(D/2,C)}catch{throw new se}}return _}}class Do{static setGridSampler(c){Do.gridSampler=c}static getInstance(){return Do.gridSampler}}Do.gridSampler=new kg;class jn{constructor(c,p){this.x=c,this.y=p}toResultPoint(){return new Re(this.getX(),this.getY())}getX(){return this.x}getY(){return this.y}}class Og{constructor(c){this.EXPECTED_CORNER_BITS=new Int32Array([3808,476,2107,1799]),this.image=c}detect(){return this.detectMirror(!1)}detectMirror(c){let p=this.getMatrixCenter(),g=this.getBullsEyeCorners(p);if(c){let b=g[0];g[0]=g[2],g[2]=b}this.extractParameters(g);let u=this.sampleGrid(this.image,g[this.shift%4],g[(this.shift+1)%4],g[(this.shift+2)%4],g[(this.shift+3)%4]),_=this.getMatrixCornerPoints(g);return new Sg(u,_,this.compact,this.nbDataBlocks,this.nbLayers)}extractParameters(c){if(!this.isValidPoint(c[0])||!this.isValidPoint(c[1])||!this.isValidPoint(c[2])||!this.isValidPoint(c[3]))throw new se;let p=2*this.nbCenterLayers,g=new Int32Array([this.sampleLine(c[0],c[1],p),this.sampleLine(c[1],c[2],p),this.sampleLine(c[2],c[3],p),this.sampleLine(c[3],c[0],p)]);this.shift=this.getRotation(g,p);let u=0;for(let b=0;b<4;b++){let C=g[(this.shift+b)%4];this.compact?(u<<=7,u+=C>>1&127):(u<<=10,u+=(C>>2&992)+(C>>1&31))}let _=this.getCorrectedParameterData(u,this.compact);this.compact?(this.nbLayers=(_>>6)+1,this.nbDataBlocks=(_&63)+1):(this.nbLayers=(_>>11)+1,this.nbDataBlocks=(_&2047)+1)}getRotation(c,p){let g=0;c.forEach((u,_,b)=>{let C=(u>>p-2<<1)+(u&1);g=(g<<3)+C}),g=((g&1)<<11)+(g>>1);for(let u=0;u<4;u++)if(Z.bitCount(g^this.EXPECTED_CORNER_BITS[u])<=2)return u;throw new se}getCorrectedParameterData(c,p){let g,u;p?(g=7,u=2):(g=10,u=4);let _=g-u,b=new Int32Array(g);for(let P=g-1;P>=0;--P)b[P]=c&15,c>>=4;try{new hs(_t.AZTEC_PARAM).decode(b,_)}catch{throw new se}let C=0;for(let P=0;P<u;P++)C=(C<<4)+b[P];return C}getBullsEyeCorners(c){let p=c,g=c,u=c,_=c,b=!0;for(this.nbCenterLayers=1;this.nbCenterLayers<9;this.nbCenterLayers++){let V=this.getFirstDifferent(p,b,1,-1),z=this.getFirstDifferent(g,b,1,1),$=this.getFirstDifferent(u,b,-1,1),X=this.getFirstDifferent(_,b,-1,-1);if(this.nbCenterLayers>2){let ee=this.distancePoint(X,V)*this.nbCenterLayers/(this.distancePoint(_,p)*(this.nbCenterLayers+2));if(ee<.75||ee>1.25||!this.isWhiteOrBlackRectangle(V,z,$,X))break}p=V,g=z,u=$,_=X,b=!b}if(this.nbCenterLayers!==5&&this.nbCenterLayers!==7)throw new se;this.compact=this.nbCenterLayers===5;let C=new Re(p.getX()+.5,p.getY()-.5),P=new Re(g.getX()+.5,g.getY()+.5),E=new Re(u.getX()-.5,u.getY()+.5),D=new Re(_.getX()-.5,_.getY()-.5);return this.expandSquare([C,P,E,D],2*this.nbCenterLayers-3,2*this.nbCenterLayers)}getMatrixCenter(){let c,p,g,u;try{let C=new El(this.image).detect();c=C[0],p=C[1],g=C[2],u=C[3]}catch{let P=this.image.getWidth()/2,E=this.image.getHeight()/2;
21c=this.getFirstDifferent(new jn(P+7,E-7),!1,1,-1).toResultPoint(),p=this.getFirstDifferent(new jn(P+7,E+7),!1,1,1).toResultPoint(),g=this.getFirstDifferent(new jn(P-7,E+7),!1,-1,1).toResultPoint(),u=this.getFirstDifferent(new jn(P-7,E-7),!1,-1,-1).toResultPoint()}let _=dt.round((c.getX()+u.getX()+p.getX()+g.getX())/4),b=dt.round((c.getY()+u.getY()+p.getY()+g.getY())/4);try{let C=new El(this.image,15,_,b).detect();c=C[0],p=C[1],g=C[2],u=C[3]}catch{c=this.getFirstDifferent(new jn(_+7,b-7),!1,1,-1).toResultPoint(),p=this.getFirstDifferent(new jn(_+7,b+7),!1,1,1).toResultPoint(),g=this.getFirstDifferent(new jn(_-7,b+7),!1,-1,1).toResultPoint(),u=this.getFirstDifferent(new jn(_-7,b-7),!1,-1,-1).toResultPoint()}return _=dt.round((c.getX()+u.getX()+p.getX()+g.getX())/4),b=dt.round((c.getY()+u.getY()+p.getY()+g.getY())/4),new jn(_,b)}getMatrixCornerPoints(c){return this.expandSquare(c,2*this.nbCenterLayers,this.getDimension())}sampleGrid(c,p,g,u,_){let b=Do.getInstance(),C=this.getDimension(),P=C/2-this.nbCenterLayers,E=C/2+this.nbCenterLayers;return b.sampleGrid(c,C,C,P,P,E,P,E,E,P,E,p.getX(),p.getY(),g.getX(),g.getY(),u.getX(),u.getY(),_.getX(),_.getY())}sampleLine(c,p,g){let u=0,_=this.distanceResultPoint(c,p),b=_/g,C=c.getX(),P=c.getY(),E=b*(p.getX()-c.getX())/_,D=b*(p.getY()-c.getY())/_;for(let V=0;V<g;V++)this.image.get(dt.round(C+V*E),dt.round(P+V*D))&&(u|=1<<g-V-1);return u}isWhiteOrBlackRectangle(c,p,g,u){let _=3;c=new jn(c.getX()-_,c.getY()+_),p=new jn(p.getX()-_,p.getY()-_),g=new jn(g.getX()+_,g.getY()-_),u=new jn(u.getX()+_,u.getY()+_);let b=this.getColor(u,c);if(b===0)return!1;let C=this.getColor(c,p);return C!==b||(C=this.getColor(p,g),C!==b)?!1:(C=this.getColor(g,u),C===b)}getColor(c,p){let g=this.distancePoint(c,p),u=(p.getX()-c.getX())/g,_=(p.getY()-c.getY())/g,b=0,C=c.getX(),P=c.getY(),E=this.image.get(c.getX(),c.getY()),D=Math.ceil(g);for(let z=0;z<D;z++)C+=u,P+=_,this.image.get(dt.round(C),dt.round(P))!==E&&b++;let V=b/g;return V>.1&&V<.9?0:V<=.1===E?1:-1}getFirstDifferent(c,p,g,u){let _=c.getX()+g,b=c.getY()+u;for(;this.isValid(_,b)&&this.image.get(_,b)===p;)_+=g,b+=u;for(_-=g,b-=u;this.isValid(_,b)&&this.image.get(_,b)===p;)_+=g;for(_-=g;this.isValid(_,b)&&this.image.get(_,b)===p;)b+=u;return b-=u,new jn(_,b)}expandSquare(c,p,g){let u=g/(2*p),_=c[0].getX()-c[2].getX(),b=c[0].getY()-c[2].getY(),C=(c[0].getX()+c[2].getX())/2,P=(c[0].getY()+c[2].getY())/2,E=new Re(C+u*_,P+u*b),D=new Re(C-u*_,P-u*b);_=c[1].getX()-c[3].getX(),b=c[1].getY()-c[3].getY(),C=(c[1].getX()+c[3].getX())/2,P=(c[1].getY()+c[3].getY())/2;let V=new Re(C+u*_,P+u*b),z=new Re(C-u*_,P-u*b);return[E,V,D,z]}isValid(c,p){return c>=0&&c<this.image.getWidth()&&p>0&&p<this.image.getHeight()}isValidPoint(c){let p=dt.round(c.getX()),g=dt.round(c.getY());return this.isValid(p,g)}distancePoint(c,p){return dt.distance(c.getX(),c.getY(),p.getX(),p.getY())}distanceResultPoint(c,p){return dt.distance(c.getX(),c.getY(),p.getX(),p.getY())}getDimension(){return this.compact?4*this.nbLayers+11:this.nbLayers<=4?4*this.nbLayers+15:4*this.nbLayers+2*(Z.truncDivision(this.nbLayers-4,8)+1)+15}}class Tl{decode(c,p=null){let g=null,u=new Og(c.getBlackMatrix()),_=null,b=null;try{let D=u.detectMirror(!1);_=D.getPoints(),this.reportFoundResultPoints(p,_),b=new d0().decode(D)}catch(D){g=D}if(b==null)try{let D=u.detectMirror(!0);_=D.getPoints(),this.reportFoundResultPoints(p,_),b=new d0().decode(D)}catch(D){throw g??D}let C=new $t(b.getText(),b.getRawBytes(),b.getNumBits(),_,Ne.AZTEC,N.currentTimeMillis()),P=b.getByteSegments();P!=null&&C.putMetadata(Bt.BYTE_SEGMENTS,P);let E=b.getECLevel();return E!=null&&C.putMetadata(Bt.ERROR_CORRECTION_LEVEL,E),C}reportFoundResultPoints(c,p){if(c!=null){let g=c.get(Y.NEED_RESULT_POINT_CALLBACK);g!=null&&p.forEach((u,_,b)=>{g.foundPossibleResultPoint(u)})}}reset(){}}class Z2 extends pi{constructor(c=500){super(new Tl,c)}}class sn{decode(c,p){try{return this.doDecode(c,p)}catch{if(p&&p.get(Y.TRY_HARDER)===!0&&c.isRotateSupported()){let _=c.rotateCounterClockwise(),b=this.doDecode(_,p),C=b.getResultMetadata(),P=270;C!==null&&C.get(Bt.ORIENTATION)===!0&&(P=P+C.get(Bt.ORIENTATION)%360),b.putMetadata(Bt.ORIENTATION,P);let E=b.getResultPoints();if(E!==null){let D=_.getHeight();for(let V=0;V<E.length;V++)E[V]=new Re(D-E[V].getY()-1,E[V].getX())}return b}else throw new se}}reset(){}doDecode(c,p){let g=c.getWidth(),u=c.getHeight(),_=new Q(g),b=p&&p.get(Y.TRY_HARDER)===!0,C=Math.max(1,u>>(b?8:5)),P;b?P=u:P=15;let E=Math.trunc(u/2);for(let D=0;D<P;D++){let V=Math.trunc((D+1)/2),z=(D&1)===0,$=E+C*(z?V:-V);if($<0||$>=u)break;try{_=c.getBlackRow($,_)}catch{continue}for(let X=0;X<2;X++){if(X===1&&(_.reverse(),p&&p.get(Y.NEED_RESULT_POINT_CALLBACK)===!0)){let ee=new Map;p.forEach((ne,oe)=>ee.set(oe,ne)),ee.delete(Y.NEED_RESULT_POINT_CALLBACK),p=ee}try{let ee=this.decodeRow($,_,p);if(X===1){ee.putMetadata(Bt.ORIENTATION,180);let ne=ee.getResultPoints();ne!==null&&(ne[0]=new Re(g-ne[0].getX()-1,ne[0].getY()),ne[1]=new Re(g-ne[1].getX()-1,ne[1].getY()))}return ee}catch{}}}throw new se}static recordPattern(c,p,g){let u=g.length;for(let E=0;E<u;E++)g[E]=0;let _=c.getSize();if(p>=_)throw new se;let b=!c.get(p),C=0,P=p;for(;P<_;){if(c.get(P)!==b)g[C]++;else{if(++C===u)break;g[C]=1,b=!b}P++}if(!(C===u||C===u-1&&P===_))throw new se}static recordPatternInReverse(c,p,g){let u=g.length,_=c.get(p);for(;p>0&&u>=0;)c.get(--p)!==_&&(u--,_=!_);if(u>=0)throw new se;sn.recordPattern(c,p+1,g)}static patternMatchVariance(c,p,g){let u=c.length,_=0,b=0;for(let E=0;E<u;E++)_+=c[E],b+=p[E];if(_<b)return Number.POSITIVE_INFINITY;let C=_/b;g*=C;let P=0;for(let E=0;E<u;E++){let D=c[E],V=p[E]*C,z=D>V?D-V:V-D;if(z>g)return Number.POSITIVE_INFINITY;P+=z}return P/_}}class Me extends sn{static findStartPattern(c){let p=c.getSize(),g=c.getNextSet(0),u=0,_=Int32Array.from([0,0,0,0,0,0]),b=g,C=!1,P=6;for(let E=g;E<p;E++)if(c.get(E)!==C)_[u]++;else{if(u===P-1){let D=Me.MAX_AVG_VARIANCE,V=-1;for(let z=Me.CODE_START_A;z<=Me.CODE_START_C;z++){let $=sn.patternMatchVariance(_,Me.CODE_PATTERNS[z],Me.MAX_INDIVIDUAL_VARIA
21NCE);$<D&&(D=$,V=z)}if(V>=0&&c.isRange(Math.max(0,b-(E-b)/2),b,!1))return Int32Array.from([b,E,V]);b+=_[0]+_[1],_=_.slice(2,_.length-1),_[u-1]=0,_[u]=0,u--}else u++;_[u]=1,C=!C}throw new se}static decodeCode(c,p,g){sn.recordPattern(c,g,p);let u=Me.MAX_AVG_VARIANCE,_=-1;for(let b=0;b<Me.CODE_PATTERNS.length;b++){let C=Me.CODE_PATTERNS[b],P=this.patternMatchVariance(p,C,Me.MAX_INDIVIDUAL_VARIANCE);P<u&&(u=P,_=b)}if(_>=0)return _;throw new se}decodeRow(c,p,g){let u=g&&g.get(Y.ASSUME_GS1)===!0,_=Me.findStartPattern(p),b=_[2],C=0,P=new Uint8Array(20);P[C++]=b;let E;switch(b){case Me.CODE_START_A:E=Me.CODE_CODE_A;break;case Me.CODE_START_B:E=Me.CODE_CODE_B;break;case Me.CODE_START_C:E=Me.CODE_CODE_C;break;default:throw new U}let D=!1,V=!1,z="",$=_[0],X=_[1],ee=Int32Array.from([0,0,0,0,0,0]),ne=0,oe=0,ve=b,ke=0,me=!0,Ke=!1,Xe=!1;for(;!D;){let ca=V;switch(V=!1,ne=oe,oe=Me.decodeCode(p,ee,X),P[C++]=oe,oe!==Me.CODE_STOP&&(me=!0),oe!==Me.CODE_STOP&&(ke++,ve+=ke*oe),$=X,X+=ee.reduce((Ry,By)=>Ry+By,0),oe){case Me.CODE_START_A:case Me.CODE_START_B:case Me.CODE_START_C:throw new U}switch(E){case Me.CODE_CODE_A:if(oe<64)Xe===Ke?z+=String.fromCharCode(32+oe):z+=String.fromCharCode(32+oe+128),Xe=!1;else if(oe<96)Xe===Ke?z+=String.fromCharCode(oe-64):z+=String.fromCharCode(oe+64),Xe=!1;else switch(oe!==Me.CODE_STOP&&(me=!1),oe){case Me.CODE_FNC_1:u&&(z.length===0?z+="]C1":z+="�");break;case Me.CODE_FNC_2:case Me.CODE_FNC_3:break;case Me.CODE_FNC_4_A:!Ke&&Xe?(Ke=!0,Xe=!1):Ke&&Xe?(Ke=!1,Xe=!1):Xe=!0;break;case Me.CODE_SHIFT:V=!0,E=Me.CODE_CODE_B;break;case Me.CODE_CODE_B:E=Me.CODE_CODE_B;break;case Me.CODE_CODE_C:E=Me.CODE_CODE_C;break;case Me.CODE_STOP:D=!0;break}break;case Me.CODE_CODE_B:if(oe<96)Xe===Ke?z+=String.fromCharCode(32+oe):z+=String.fromCharCode(32+oe+128),Xe=!1;else switch(oe!==Me.CODE_STOP&&(me=!1),oe){case Me.CODE_FNC_1:u&&(z.length===0?z+="]C1":z+="�");break;case Me.CODE_FNC_2:case Me.CODE_FNC_3:break;case Me.CODE_FNC_4_B:!Ke&&Xe?(Ke=!0,Xe=!1):Ke&&Xe?(Ke=!1,Xe=!1):Xe=!0;break;case Me.CODE_SHIFT:V=!0,E=Me.CODE_CODE_A;break;case Me.CODE_CODE_A:E=Me.CODE_CODE_A;break;case Me.CODE_CODE_C:E=Me.CODE_CODE_C;break;case Me.CODE_STOP:D=!0;break}break;case Me.CODE_CODE_C:if(oe<100)oe<10&&(z+="0"),z+=oe;else switch(oe!==Me.CODE_STOP&&(me=!1),oe){case Me.CODE_FNC_1:u&&(z.length===0?z+="]C1":z+="�");break;case Me.CODE_CODE_A:E=Me.CODE_CODE_A;break;case Me.CODE_CODE_B:E=Me.CODE_CODE_B;break;case Me.CODE_STOP:D=!0;break}break}ca&&(E=E===Me.CODE_CODE_A?Me.CODE_CODE_B:Me.CODE_CODE_A)}let qn=X-$;if(X=p.getNextUnset(X),!p.isRange(X,Math.min(p.getSize(),X+(X-$)/2),!1))throw new se;if(ve-=ke*ne,ve%103!==ne)throw new I;let Di=z.length;if(Di===0)throw new se;Di>0&&me&&(E===Me.CODE_CODE_C?z=z.substring(0,Di-2):z=z.substring(0,Di-1));let $n=(_[1]+_[0])/2,At=$+qn/2,kn=P.length,ii=new Uint8Array(kn);for(let ca=0;ca<kn;ca++)ii[ca]=P[ca];let la=[new Re($n,c),new Re(At,c)];return new $t(z,ii,0,la,Ne.CODE_128,new Date().getTime())}}Me.CODE_PATTERNS=[Int32Array.from([2,1,2,2,2,2]),Int32Array.from([2,2,2,1,2,2]),Int32Array.from([2,2,2,2,2,1]),Int32Array.from([1,2,1,2,2,3]),Int32Array.from([1,2,1,3,2,2]),Int32Array.from([1,3,1,2,2,2]),Int32Array.from([1,2,2,2,1,3]),Int32Array.from([1,2,2,3,1,2]),Int32Array.from([1,3,2,2,1,2]),Int32Array.from([2,2,1,2,1,3]),Int32Array.from([2,2,1,3,1,2]),Int32Array.from([2,3,1,2,1,2]),Int32Array.from([1,1,2,2,3,2]),Int32Array.from([1,2,2,1,3,2]),Int32Array.from([1,2,2,2,3,1]),Int32Array.from([1,1,3,2,2,2]),Int32Array.from([1,2,3,1,2,2]),Int32Array.from([1,2,3,2,2,1]),Int32Array.from([2,2,3,2,1,1]),Int32Array.from([2,2,1,1,3,2]),Int32Array.from([2,2,1,2,3,1]),Int32Array.from([2,1,3,2,1,2]),Int32Array.from([2,2,3,1,1,2]),Int32Array.from([3,1,2,1,3,1]),Int32Array.from([3,1,1,2,2,2]),Int32Array.from([3,2,1,1,2,2]),Int32Array.from([3,2,1,2,2,1]),Int32Array.from([3,1,2,2,1,2]),Int32Array.from([3,2,2,1,1,2]),Int32Array.from([3,2,2,2,1,1]),Int32Array.from([2,1,2,1,2,3]),Int32Array.from([2,1,2,3,2,1]),Int32Array.from([2,3,2,1,2,1]),Int32Array.from([1,1,1,3,2,3]),Int32Array.from([1,3,1,1,2,3]),Int32Array.from([1,3,1,3,2,1]),Int32Array.from([1,1,2,3,1,3]),Int32Array.from([1,3,2,1,1,3]),Int32Array.from([1,3,2,3,1,1]),Int32Array.from([2,1,1,3,1,3]),Int32Array.from([2,3,1,1,1,3]),Int32Array.from([2,3,1,3,1,1]),Int32Array.from([1,1,2,1,3,3]),Int32Array.from([1,1,2,3,3,1]),Int32Array.from([1,3,2,1,3,1]),Int32Array.from([1,1,3,1,2,3]),Int32Array.from([1,1,3,3,2,1]),Int32Array.from([1,3,3,1,2,1]),Int32Array.from([3,1,3,1,2,1]),Int32Array.from([2,1,1,3,3,1]),Int32Array.from([2,3,1,1,3,1]),Int32Array.from([2,1,3,1,1,3]),Int32Array.from([2,1,3,3,1,1]),Int32Array.from([2,1,3,1,3,1]),Int32Array.from([3,1,1,1,2,3]),Int32Array.from([3,1,1,3,2,1]),Int32Array.from([3,3,1,1,2,1]),Int32Array.from([3,1,2,1,1,3]),Int32Array.from([3,1,2,3,1,1]),Int32Array.from([3,3,2,1,1,1]),Int32Array.from([3,1,4,1,1,1]),Int32Array.from([2,2,1,4,1,1]),Int32Array.from([4,3,1,1,1,1]),Int32Array.from([1,1,1,2,2,4]),Int32Array.from([1,1,1,4,2,2]),Int32Array.from([1,2,1,1,2,4]),Int32Array.from([1,2,1,4,2,1]),Int32Array.from([1,4,1,1,2,2]),Int32Array.from([1,4,1,2,2,1]),Int32Array.from([1,1,2,2,1,4]),Int32Array.from([1,1,2,4,1,2]),Int32Array.from([1,2,2,1,1,4]),Int32Array.from([1,2,2,4,1,1]),Int32Array.from([1,4,2,1,1,2]),Int32Array.from([1,4,2,2,1,1]),Int32Array.from([2,4,1,2,1,1]),Int32Array.from([2,2,1,1,1,4]),Int32Array.from([4,1,3,1,1,1]),Int32Array.from([2,4,1,1,1,2]),Int32Array.from([1,3,4,1,1,1]),Int32Array.from([1,1,1,2,4,2]),Int32Array.from([1,2,1,1,4,2]),Int32Array.from([1,2,1,2,4,1]),Int32Array.from([1,1,4,2,1,2]),Int32Array.from([1,2,4,1,1,2]),Int32Array.from([1,2,4,2,1,1]),Int32Array.from([4,1,1,2,1,2]),Int32Array.from([4,2,1,1,1,2]),Int32Array.from([4,2,1,2,1,1]),Int32Array.from([2,1,2,1,4,1]),Int32Array.from([2,1,4,1,2,1]),Int32Array.from([4,1,2,1,2,1]),Int32Array.from([1,1,1,1,4,3]),Int32Array.from([1,1,1,3,4,1]),Int32Array.from([1,3,1,1,4,1]),Int32Array.from([1,1,4,1,1,3]),Int32Array.from([1,1,4,3,1,1]),Int32Array.from([4,1,1,1,1,3]),Int32Array.from([4,1,1,3,1,1]),Int32Array.from([1,1,3,1,4,1]),Int32Array.from([1,1,4,1,3,1]),Int32Array.from([3,1,1,1,4,1]),Int32Array.from([4,1,1,1,3,1]),Int32Array.from([2,1,1,4,1,2]),Int32Array.from([2,1,1,2,1,4]),Int32Array.from([2,1,1,2,3,2]),Int32Array.from([2,3,3,1,1,1,2])],Me.MAX_A
21VG_VARIANCE=.25,Me.MAX_INDIVIDUAL_VARIANCE=.7,Me.CODE_SHIFT=98,Me.CODE_CODE_C=99,Me.CODE_CODE_B=100,Me.CODE_CODE_A=101,Me.CODE_FNC_1=102,Me.CODE_FNC_2=97,Me.CODE_FNC_3=96,Me.CODE_FNC_4_A=101,Me.CODE_FNC_4_B=100,Me.CODE_START_A=103,Me.CODE_START_B=104,Me.CODE_START_C=105,Me.CODE_STOP=106;let m0=(()=>{class T extends sn{constructor(p=!1,g=!1){super(),this.usingCheckDigit=p,this.extendedMode=g,this.decodeRowResult="",this.counters=new Int32Array(9)}decodeRow(p,g,u){let _=this.counters;_.fill(0),this.decodeRowResult="";let b=T.findAsteriskPattern(g,_),C=g.getNextSet(b[1]),P=g.getSize(),E,D;do{T.recordPattern(g,C,_);let ne=T.toNarrowWidePattern(_);if(ne<0)throw new se;E=T.patternToChar(ne),this.decodeRowResult+=E,D=C;for(let oe of _)C+=oe;C=g.getNextSet(C)}while(E!=="*");this.decodeRowResult=this.decodeRowResult.substring(0,this.decodeRowResult.length-1);let V=0;for(let ne of _)V+=ne;let z=C-D-V;if(C!==P&&z*2<V)throw new se;if(this.usingCheckDigit){let ne=this.decodeRowResult.length-1,oe=0;for(let ve=0;ve<ne;ve++)oe+=T.ALPHABET_STRING.indexOf(this.decodeRowResult.charAt(ve));if(this.decodeRowResult.charAt(ne)!==T.ALPHABET_STRING.charAt(oe%43))throw new I;this.decodeRowResult=this.decodeRowResult.substring(0,ne)}if(this.decodeRowResult.length===0)throw new se;let $;this.extendedMode?$=T.decodeExtended(this.decodeRowResult):$=this.decodeRowResult;let X=(b[1]+b[0])/2,ee=D+V/2;return new $t($,null,0,[new Re(X,p),new Re(ee,p)],Ne.CODE_39,new Date().getTime())}static findAsteriskPattern(p,g){let u=p.getSize(),_=p.getNextSet(0),b=0,C=_,P=!1,E=g.length;for(let D=_;D<u;D++)if(p.get(D)!==P)g[b]++;else{if(b===E-1){if(this.toNarrowWidePattern(g)===T.ASTERISK_ENCODING&&p.isRange(Math.max(0,C-Math.floor((D-C)/2)),C,!1))return[C,D];C+=g[0]+g[1],g.copyWithin(0,2,2+b-1),g[b-1]=0,g[b]=0,b--}else b++;g[b]=1,P=!P}throw new se}static toNarrowWidePattern(p){let g=p.length,u=0,_;do{let b=2147483647;for(let E of p)E<b&&E>u&&(b=E);u=b,_=0;let C=0,P=0;for(let E=0;E<g;E++){let D=p[E];D>u&&(P|=1<<g-1-E,_++,C+=D)}if(_===3){for(let E=0;E<g&&_>0;E++){let D=p[E];if(D>u&&(_--,D*2>=C))return-1}return P}}while(_>3);return-1}static patternToChar(p){for(let g=0;g<T.CHARACTER_ENCODINGS.length;g++)if(T.CHARACTER_ENCODINGS[g]===p)return T.ALPHABET_STRING.charAt(g);if(p===T.ASTERISK_ENCODING)return"*";throw new se}static decodeExtended(p){let g=p.length,u="";for(let _=0;_<g;_++){let b=p.charAt(_);if(b==="+"||b==="$"||b==="%"||b==="/"){let C=p.charAt(_+1),P="\0";switch(b){case"+":if(C>="A"&&C<="Z")P=String.fromCharCode(C.charCodeAt(0)+32);else throw new U;break;case"$":if(C>="A"&&C<="Z")P=String.fromCharCode(C.charCodeAt(0)-64);else throw new U;break;case"%":if(C>="A"&&C<="E")P=String.fromCharCode(C.charCodeAt(0)-38);else if(C>="F"&&C<="J")P=String.fromCharCode(C.charCodeAt(0)-11);else if(C>="K"&&C<="O")P=String.fromCharCode(C.charCodeAt(0)+16);else if(C>="P"&&C<="T")P=String.fromCharCode(C.charCodeAt(0)+43);else if(C==="U")P="\0";else if(C==="V")P="@";else if(C==="W")P="`";else if(C==="X"||C==="Y"||C==="Z")P="\x7F";else throw new U;break;case"/":if(C>="A"&&C<="O")P=String.fromCharCode(C.charCodeAt(0)-32);else if(C==="Z")P=":";else throw new U;break}u+=P,_++}else u+=b}return u}}return T.ALPHABET_STRING="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%",T.CHARACTER_ENCODINGS=[52,289,97,352,49,304,112,37,292,100,265,73,328,25,280,88,13,268,76,28,259,67,322,19,274,82,7,262,70,22,385,193,448,145,400,208,133,388,196,168,162,138,42],T.ASTERISK_ENCODING=148,T})();class Tt extends sn{constructor(){super(...arguments),this.narrowLineWidth=-1}decodeRow(c,p,g){let u=this.decodeStart(p),_=this.decodeEnd(p),b=new Ce;Tt.decodeMiddle(p,u[1],_[0],b);let C=b.toString(),P=null;g!=null&&(P=g.get(Y.ALLOWED_LENGTHS)),P==null&&(P=Tt.DEFAULT_ALLOWED_LENGTHS);let E=C.length,D=!1,V=0;for(let X of P){if(E===X){D=!0;break}X>V&&(V=X)}if(!D&&E>V&&(D=!0),!D)throw new U;let z=[new Re(u[1],c),new Re(_[0],c)];return new $t(C,null,0,z,Ne.ITF,new Date().getTime())}static decodeMiddle(c,p,g,u){let _=new Int32Array(10),b=new Int32Array(5),C=new Int32Array(5);for(_.fill(0),b.fill(0),C.fill(0);p<g;){sn.recordPattern(c,p,_);for(let E=0;E<5;E++){let D=2*E;b[E]=_[D],C[E]=_[D+1]}let P=Tt.decodeDigit(b);u.append(P.toString()),P=this.decodeDigit(C),u.append(P.toString()),_.forEach(function(E){p+=E})}}decodeStart(c){let p=Tt.skipWhiteSpace(c),g=Tt.findGuardPattern(c,p,Tt.START_PATTERN);
21return this.narrowLineWidth=(g[1]-g[0])/4,this.validateQuietZone(c,g[0]),g}validateQuietZone(c,p){let g=this.narrowLineWidth*10;g=g<p?g:p;for(let u=p-1;g>0&&u>=0&&!c.get(u);u--)g--;if(g!==0)throw new se}static skipWhiteSpace(c){let p=c.getSize(),g=c.getNextSet(0);if(g===p)throw new se;return g}decodeEnd(c){c.reverse();try{let p=Tt.skipWhiteSpace(c),g;try{g=Tt.findGuardPattern(c,p,Tt.END_PATTERN_REVERSED[0])}catch(_){_ instanceof se&&(g=Tt.findGuardPattern(c,p,Tt.END_PATTERN_REVERSED[1]))}this.validateQuietZone(c,g[0]);let u=g[0];return g[0]=c.getSize()-g[1],g[1]=c.getSize()-u,g}finally{c.reverse()}}static findGuardPattern(c,p,g){let u=g.length,_=new Int32Array(u),b=c.getSize(),C=!1,P=0,E=p;_.fill(0);for(let D=p;D<b;D++)if(c.get(D)!==C)_[P]++;else{if(P===u-1){if(sn.patternMatchVariance(_,g,Tt.MAX_INDIVIDUAL_VARIANCE)<Tt.MAX_AVG_VARIANCE)return[E,D];E+=_[0]+_[1],N.arraycopy(_,2,_,0,P-1),_[P-1]=0,_[P]=0,P--}else P++;_[P]=1,C=!C}throw new se}static decodeDigit(c){let p=Tt.MAX_AVG_VARIANCE,g=-1,u=Tt.PATTERNS.length;for(let _=0;_<u;_++){let b=Tt.PATTERNS[_],C=sn.patternMatchVariance(c,b,Tt.MAX_INDIVIDUAL_VARIANCE);C<p?(p=C,g=_):C===p&&(g=-1)}if(g>=0)return g%10;throw new se}}Tt.PATTERNS=[Int32Array.from([1,1,2,2,1]),Int32Array.from([2,1,1,1,2]),Int32Array.from([1,2,1,1,2]),Int32Array.from([2,2,1,1,1]),Int32Array.from([1,1,2,1,2]),Int32Array.from([2,1,2,1,1]),Int32Array.from([1,2,2,1,1]),Int32Array.from([1,1,1,2,2]),Int32Array.from([2,1,1,2,1]),Int32Array.from([1,2,1,2,1]),Int32Array.from([1,1,3,3,1]),Int32Array.from([3,1,1,1,3]),Int32Array.from([1,3,1,1,3]),Int32Array.from([3,3,1,1,1]),Int32Array.from([1,1,3,1,3]),Int32Array.from([3,1,3,1,1]),Int32Array.from([1,3,3,1,1]),Int32Array.from([1,1,1,3,3]),Int32Array.from([3,1,1,3,1]),Int32Array.from([1,3,1,3,1])],Tt.MAX_AVG_VARIANCE=.38,Tt.MAX_INDIVIDUAL_VARIANCE=.5,Tt.DEFAULT_ALLOWED_LENGTHS=[6,8,10,12,14],Tt.START_PATTERN=Int32Array.from([1,1,1,1]),Tt.END_PATTERN_REVERSED=[Int32Array.from([1,1,2]),Int32Array.from([1,1,3])];class Yt extends sn{constructor(){super(...arguments),this.decodeRowStringBuffer=""}static findStartGuardPattern(c){let p=!1,g,u=0,_=Int32Array.from([0,0,0]);for(;!p;){_=Int32Array.from([0,0,0]),g=Yt.findGuardPattern(c,u,!1,this.START_END_PATTERN,_);let b=g[0];u=g[1];let C=b-(u-b);C>=0&&(p=c.isRange(C,b,!1))}return g}static checkChecksum(c){return Yt.checkStandardUPCEANChecksum(c)}static checkStandardUPCEANChecksum(c){let p=c.length;if(p===0)return!1;let g=parseInt(c.charAt(p-1),10);return Yt.getStandardUPCEANChecksum(c.substring(0,p-1))===g}static getStandardUPCEANChecksum(c){let p=c.length,g=0;for(let u=p-1;u>=0;u-=2){let _=c.charAt(u).charCodeAt(0)-48;if(_<0||_>9)throw new U;g+=_}g*=3;for(let u=p-2;u>=0;u-=2){let _=c.charAt(u).charCodeAt(0)-48;if(_<0||_>9)throw new U;g+=_}return(1e3-g)%10}static decodeEnd(c,p){return Yt.findGuardPattern(c,p,!1,Yt.START_END_PATTERN,new Int32Array(Yt.START_END_PATTERN.length).fill(0))}static findGuardPatternWithoutCounters(c,p,g,u){return this.findGuardPattern(c,p,g,u,new Int32Array(u.length))}static findGuardPattern(c,p,g,u,_){let b=c.getSize();p=g?c.getNextUnset(p):c.getNextSet(p);let C=0,P=p,E=u.length,D=g;for(let V=p;V<b;V++)if(c.get(V)!==D)_[C]++;else{if(C===E-1){if(sn.patternMatchVariance(_,u,Yt.MAX_INDIVIDUAL_VARIANCE)<Yt.MAX_AVG_VARIANCE)return Int32Array.from([P,V]);P+=_[0]+_[1];let z=_.slice(2,_.length-1);for(let $=0;$<C-1;$++)_[$]=z[$];_[C-1]=0,_[C]=0,C--}else C++;_[C]=1,D=!D}throw new se}static decodeDigit(c,p,g,u){this.recordPattern(c,g,p);let _=this.MAX_AVG_VARIANCE,b=-1,C=u.length;for(let P=0;P<C;P++){let E=u[P],D=sn.patternMatchVariance(p,E,Yt.MAX_INDIVIDUAL_VARIANCE);D<_&&(_=D,b=P)}if(b>=0)return b;throw new se}}Yt.MAX_AVG_VARIANCE=.48,Yt.MAX_INDIVIDUAL_VARIANCE=.7,Yt.START_END_PATTERN=Int32Array.from([1,1,1]),Yt.MIDDLE_PATTERN=Int32Array.from([1,1,1,1,1]),Yt.END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Yt.L_PATTERNS=[Int32Array.from([3,2,1,1]),Int32Array.from([2,2,2,1]),Int32Array.from([2,1,2,2]),Int32Array.from([1,4,1,1]),Int32Array.from([1,1,3,2]),Int32Array.from([1,2,3,1]),Int32Array.from([1,1,1,4]),Int32Array.from([1,3,1,2]),Int32Array.from([1,2,1,3]),Int32Array.from([3,1,1,2])];class _s{constructor(){this.CHECK_DIGIT_ENCODINGS=[24,20,18,17,12,6,3,10,9,5],this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(c,p,g){let u=this.decodeRowStringBuffer,_=this.decodeMiddle(p,g,u),b=u.toString(),C=_s.parseExtensionString(b),P=[new Re((g[0]+g[1])/2,c),new Re(_,c)],E=new $t(b,null,0,P,Ne.UPC_EAN_EXTENSION,new Date().getTime());return C!=null&&E.putAllMetadata(C),E}decodeMiddle(c,p,g){let u=this.decodeMiddleCounters;u[0]=0,u[1]=0,u[2]=0,u[3]=0;let _=c.getSize(),b=p[1],C=0;for(let E=0;E<5&&b<_;E++){let D=Yt.decodeDigit(c,u,b,Yt.L_AND_G_PATTERNS);g+=String.fromCharCode(48+D%10);for(let V of u)b+=V;D>=10&&(C|=1<<4-E),E!==4&&(b=c.getNextSet(b),b=c.getNextUnset(b))}if(g.length!==5)throw new se;let P=this.determineCheckDigit(C);if(_s.extensionChecksum(g.toString())!==P)throw new se;return b}static extensionChecksum(c){let p=c.length,g=0;for(let u=p-2;u>=0;u-=2)g+=c.charAt(u).charCodeAt(0)-48;g*=3;for(let u=p-1;u>=0;u-=2)g+=c.charAt(u).charCodeAt(0)-48;return g*=3,g%10}determineCheckDigit(c){for(let p=0;p<10;p++)if(c===this.CHECK_DIGIT_ENCODINGS[p])return p;throw new se}static parseExtensionString(c){if(c.length!==5)return null;let p=_s.parseExtension5String(c);return p==null?null:new Map([[Bt.SUGGESTED_PRICE,p]])}static parseExtension5String(c){let p;switch(c.charAt(0)){case"0":p="\xA3";break;case"5":p="$";break;case"9":switch(c){case"90000":return null;case"99991":return"0.00";case"99990":return"Used"}p="";break;default:p="";break}let g=parseInt(c.substring(1)),u=(g/100).toString(),_=g%100,b=_<10?"0"+_:_.toString();return p+u+"."+b}}class g0{constructor(){this.decodeMiddleCounters=Int32Array.from([0,0,0,0]),this.decodeRowStringBuffer=""}decodeRow(c,p,g){let u=this.decodeRowStringBuffer,_=this.decodeMiddle(p,g,u),b=u.toString(),C=g0.parseExtensionString(b),P=[new Re((g[0]+g[1])/2,c),new Re(_,c)],E=new $t(b,null,0,P,Ne.UPC_EAN_EXTENSION,new Date().getTime());return C!=null&&E.putAllMetadata(C),E}decodeMiddle(c,p,g){let u=this.decodeMiddleCounters;u[0]=0,u[1]=0,u[2]=0,u[3]=0;let _=c.getSize(),b=p[1],C=0;for(let P=0;P<2&&b<_;P++){let E=Yt.decodeDigit(c,u,b,Yt.L_AND_G_PATTERNS);g+=String.fromCharCode(48+E%10);for(let D of u)b+=D;E>=10&&(C|=1<<1-P),P!==1&&(b=c.getNextSet(b),b=c.getNextUnset(b))}if(g.length!==2)throw new se;if(parseInt(g.toString())%4!==C)throw new se;return b}static parseExtensionString(c){return c.length!==2?null:new Map([[Bt.ISSUE_NUMBER,parseInt(c)]])}}class Eg{static decodeRow(c,p,g){let u=Yt.findGuardPattern(p,g,!1,this.EXTENSION_START_PATTERN,new Int32Array(this.EXTENSION_START_PATTERN.length).fill(0));try{return new _s().decodeRow(c,p,u)}catch{return new g0().decodeRow(c,p,u)}}}Eg.EXTENSION_START_PATTERN=Int32Array.from([1,1,2]);class xt extends Yt{constructor(){super(),this.decodeRowStringBuffer="",xt.L_AND_G_PATTERNS=xt.L_PATTERNS.map(c=>Int32Array.from(c));for(let c=10;c<20;c++){let p=xt.L_PATTERNS[c-10],g=new Int32Array(p.length);for(let u=0;u<p.length;u++)g[u]=p[p.length-u-1];xt.L_AND_G_PATTERNS[c]=g}}
21decodeRow(c,p,g){let u=xt.findStartGuardPattern(p),_=g==null?null:g.get(Y.NEED_RESULT_POINT_CALLBACK);if(_!=null){let me=new Re((u[0]+u[1])/2,c);_.foundPossibleResultPoint(me)}let b=this.decodeMiddle(p,u,this.decodeRowStringBuffer),C=b.rowOffset,P=b.resultString;if(_!=null){let me=new Re(C,c);_.foundPossibleResultPoint(me)}let E=this.decodeEnd(p,C);if(_!=null){let me=new Re((E[0]+E[1])/2,c);_.foundPossibleResultPoint(me)}let D=E[1],V=D+(D-E[0]);if(V>=p.getSize()||!p.isRange(D,V,!1))throw new se;let z=P.toString();if(z.length<8)throw new U;if(!xt.checkChecksum(z))throw new I;let $=(u[1]+u[0])/2,X=(E[1]+E[0])/2,ee=this.getBarcodeFormat(),ne=[new Re($,c),new Re(X,c)],oe=new $t(z,null,0,ne,ee,new Date().getTime()),ve=0;try{let me=Eg.decodeRow(c,p,E[1]);oe.putMetadata(Bt.UPC_EAN_EXTENSION,me.getText()),oe.putAllMetadata(me.getResultMetadata()),oe.addResultPoints(me.getResultPoints()),ve=me.getText().length}catch{}let ke=g==null?null:g.get(Y.ALLOWED_EAN_EXTENSIONS);if(ke!=null){let me=!1;for(let Ke in ke)if(ve.toString()===Ke){me=!0;break}if(!me)throw new se}return oe}decodeEnd(c,p){return xt.findGuardPattern(c,p,!1,xt.START_END_PATTERN,new Int32Array(xt.START_END_PATTERN.length).fill(0))}static checkChecksum(c){return xt.checkStandardUPCEANChecksum(c)}static checkStandardUPCEANChecksum(c){let p=c.length;if(p===0)return!1;let g=parseInt(c.charAt(p-1),10);return xt.getStandardUPCEANChecksum(c.substring(0,p-1))===g}static getStandardUPCEANChecksum(c){let p=c.length,g=0;for(let u=p-1;u>=0;u-=2){let _=c.charAt(u).charCodeAt(0)-48;if(_<0||_>9)throw new U;g+=_}g*=3;for(let u=p-2;u>=0;u-=2){let _=c.charAt(u).charCodeAt(0)-48;if(_<0||_>9)throw new U;g+=_}return(1e3-g)%10}}let Il=(()=>{class T extends xt{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(p,g,u){let _=this.decodeMiddleCounters;_[0]=0,_[1]=0,_[2]=0,_[3]=0;let b=p.getSize(),C=g[1],P=0;for(let D=0;D<6&&C<b;D++){let V=xt.decodeDigit(p,_,C,xt.L_AND_G_PATTERNS);u+=String.fromCharCode(48+V%10);for(let z of _)C+=z;V>=10&&(P|=1<<5-D)}u=T.determineFirstDigit(u,P),C=xt.findGuardPattern(p,C,!0,xt.MIDDLE_PATTERN,new Int32Array(xt.MIDDLE_PATTERN.length).fill(0))[1];for(let D=0;D<6&&C<b;D++){let V=xt.decodeDigit(p,_,C,xt.L_PATTERNS);u+=String.fromCharCode(48+V);for(let z of _)C+=z}return{rowOffset:C,resultString:u}}getBarcodeFormat(){return Ne.EAN_13}static determineFirstDigit(p,g){for(let u=0;u<10;u++)if(g===this.FIRST_DIGIT_ENCODINGS[u])return p=String.fromCharCode(48+u)+p,p;throw new se}}return T.FIRST_DIGIT_ENCODINGS=[0,11,13,14,19,25,28,21,22,26],T})();class Tg extends xt{constructor(){super(),this.decodeMiddleCounters=Int32Array.from([0,0,0,0])}decodeMiddle(c,p,g){let u=this.decodeMiddleCounters;u[0]=0,u[1]=0,u[2]=0,u[3]=0;let _=c.getSize(),b=p[1];for(let P=0;P<4&&b<_;P++){let E=xt.decodeDigit(c,u,b,xt.L_PATTERNS);g+=String.fromCharCode(48+E);for(let D of u)b+=D}b=xt.findGuardPattern(c,b,!0,xt.MIDDLE_PATTERN,new Int32Array(xt.MIDDLE_PATTERN.length).fill(0))[1];for(let P=0;P<4&&b<_;P++){let E=xt.decodeDigit(c,u,b,xt.L_PATTERNS);g+=String.fromCharCode(48+E);for(let D of u)b+=D}return{rowOffset:b,resultString:g}}getBarcodeFormat(){return Ne.EAN_8}}class Ig extends xt{constructor(){super(...arguments),this.ean13Reader=new Il}getBarcodeFormat(){return Ne.UPC_A}decode(c,p){return this.maybeReturnResult(this.ean13Reader.decode(c))}decodeRow(c,p,g){return this.maybeReturnResult(this.ean13Reader.decodeRow(c,p,g))}decodeMiddle(c,p,g){return this.ean13Reader.decodeMiddle(c,p,g)}maybeReturnResult(c){let p=c.getText();if(p.charAt(0)==="0"){let g=new $t(p.substring(1),null,null,c.getResultPoints(),Ne.UPC_A);return c.getResultMetadata()!=null&&g.putAllMetadata(c.getResultMetadata()),g}else throw new se}reset(){this.ean13Reader.reset()}}class Ei extends xt{constructor(){super(),this.decodeMiddleCounters=new Int32Array(4)}decodeMiddle(c,p,g){let u=this.decodeMiddleCounters.map(E=>E);u[0]=0,u[1]=0,u[2]=0,u[3]=0;let _=c.getSize(),b=p[1],C=0;for(let E=0;E<6&&b<_;E++){let D=Ei.decodeDigit(c,u,b,Ei.L_AND_G_PATTERNS);g+=String.fromCharCode(48+D%10);for(let V of u)b+=V;D>=10&&(C|=1<<5-E)}let P=Ei.determineNumSysAndCheckDigit(g,C);return{rowOffset:b,resultString:P}}decodeEnd(c,p){return Ei.findGuardPatternWithoutCounters(c,p,!0,Ei.MIDDLE_END_PATTERN)}checkChecksum(c){return xt.checkChecksum(Ei.convertUPCEtoUPCA(c))}static determineNumSysAndCheckDigit(c,p){for(let g=0;g<=1;g++)for(let u=0;u<10;u++)if(p===this.NUMSYS_AND_CHECK_DIGIT_PATTERNS[g][u]){let _=String.fromCharCode(48+g),b=String.fromCharCode(48+u);return _+c+b}throw se.getNotFoundInstance()}getBarcodeFormat(){return Ne.UPC_E}static convertUPCEtoUPCA(c){let p=c.slice(1,7).split("").map(_=>_.charCodeAt(0)),g=new Ce;g.append(c.charAt(0));let u=p[5];switch(u){case 0:case 1:case 2:g.appendChars(p,0,2),g.append(u),g.append("0000"),g.appendChars(p,2,3);break;case 3:g.appendChars(p,0,3),g.append("00000"),g.appendChars(p,3,2);break;case 4:g.appendChars(p,0,4),g.append("00000"),g.append(p[4]);break;default:g.appendChars(p,0,5),g.append("0000"),g.append(u);break}return c.length>=8&&g.append(c.charAt(7)),g.toString()}}Ei.MIDDLE_END_PATTERN=Int32Array.from([1,1,1,1,1,1]),Ei.NUMSYS_AND_CHECK_DIGIT_PATTERNS=[Int32Array.from([56,52,50,49,44,38,35,42,41,37]),Int32Array.from([7,11,13,14,19,25,28,21,22,26])];class u0 extends sn{constructor(c){super();let p=c==null?null:c.get(Y.POSSIBLE_FORMATS),g=[];t(p)?(g.push(new Il),g.push(new Ig),g.push(new Tg),g.push(new Ei)):(p.indexOf(Ne.EAN_13)>-1&&g.push(new Il),p.indexOf(Ne.UPC_A)>-1&&g.push(new Ig),p.indexOf(Ne.EAN_8)>-1&&g.push(new Tg),p.indexOf(Ne.UPC_E)>-1&&g.push(new Ei)),this.readers=g}decodeRow(c,p,g){for(let u of this.readers)try{let _=u.decodeRow(c,p,g),b=_.getBarcodeFormat()===Ne.EAN_13&&_.getText().charAt(0)==="0",C=g==null?null:g.get(Y.POSSIBLE_FORMATS),P=C==null||C.includes(Ne.UPC_A);if(b&&P){let E=_.getRawBytes(),D=new $t(_.getText().substring(1),E,E?E.length:null,_.getResultPoints(),Ne.UPC_A);return D.putAllMetadata(_.getResultMetadata()),D}return _}catch{}throw new se}reset(){for(let c of this.readers)c.reset()}}let wr=(()=>{class T extends sn{constructor(){super(),this.decodeFinderCounters=new Int32Array(4),this.dataCharacterCounters=new Int32Array(8),this.oddRoundingErrors=new Array(4),this.evenRoundingErrors=new Array(4),this.oddCounts=new Array(this.dataCharacterCounters.length/2),this.evenCounts=new Array(this.dataCharacterCounters.length/2)}getDecodeFinderCounters(){return this.decodeFinderCounters}getDataCharacterCounters(){return this.dataCharacterCounters}getOddRoundingErrors(){return this.oddRoundingErrors}getEvenRoundingErrors(){return this.evenRoundingErrors}getOddCounts(){return this.oddCounts}getEvenCounts(){return this.evenCounts}parseFinderValue(p,g){for(let u=0;u<g.length;
21u++)if(sn.patternMatchVariance(p,g[u],T.MAX_INDIVIDUAL_VARIANCE)<T.MAX_AVG_VARIANCE)return u;throw new se}static count(p){return dt.sum(new Int32Array(p))}static increment(p,g){let u=0,_=g[0];for(let b=1;b<p.length;b++)g[b]>_&&(_=g[b],u=b);p[u]++}static decrement(p,g){let u=0,_=g[0];for(let b=1;b<p.length;b++)g[b]<_&&(_=g[b],u=b);p[u]--}static isFinderPattern(p){let g=p[0]+p[1],u=g+p[2]+p[3],_=g/u;if(_>=T.MIN_FINDER_PATTERN_RATIO&&_<=T.MAX_FINDER_PATTERN_RATIO){let b=Number.MAX_SAFE_INTEGER,C=Number.MIN_SAFE_INTEGER;for(let P of p)P>C&&(C=P),P<b&&(b=P);return C<10*b}return!1}}return T.MAX_AVG_VARIANCE=.2,T.MAX_INDIVIDUAL_VARIANCE=.45,T.MIN_FINDER_PATTERN_RATIO=9.5/12,T.MAX_FINDER_PATTERN_RATIO=12.5/14,T})();class na{constructor(c,p){this.value=c,this.checksumPortion=p}getValue(){return this.value}getChecksumPortion(){return this.checksumPortion}toString(){return this.value+"("+this.checksumPortion+")"}equals(c){if(!(c instanceof na))return!1;let p=c;return this.value===p.value&&this.checksumPortion===p.checksumPortion}hashCode(){return this.value^this.checksumPortion}}class Al{constructor(c,p,g,u,_){this.value=c,this.startEnd=p,this.value=c,this.startEnd=p,this.resultPoints=new Array,this.resultPoints.push(new Re(g,_)),this.resultPoints.push(new Re(u,_))}getValue(){return this.value}getStartEnd(){return this.startEnd}getResultPoints(){return this.resultPoints}equals(c){if(!(c instanceof Al))return!1;let p=c;return this.value===p.value}hashCode(){return this.value}}class Fi{constructor(){}static getRSSvalue(c,p,g){let u=0;for(let P of c)u+=P;let _=0,b=0,C=c.length;for(let P=0;P<C-1;P++){let E;for(E=1,b|=1<<P;E<c[P];E++,b&=~(1<<P)){let D=Fi.combins(u-E-1,C-P-2);if(g&&b===0&&u-E-(C-P-1)>=C-P-1&&(D-=Fi.combins(u-E-(C-P),C-P-2)),C-P-1>1){let V=0;for(let z=u-E-(C-P-2);z>p;z--)V+=Fi.combins(u-E-z-1,C-P-3);D-=V*(C-1-P)}else u-E>p&&D--;_+=D}u-=E}return _}static combins(c,p){let g,u;c-p>p?(u=p,g=c-p):(u=c-p,g=p);let _=1,b=1;for(let C=c;C>g;C--)_*=C,b<=u&&(_/=b,b++);for(;b<=u;)_/=b,b++;return _}}class Q2{static buildBitArray(c){let p=c.length*2-1;c[c.length-1].getRightChar()==null&&(p-=1);let g=12*p,u=new Q(g),_=0,C=c[0].getRightChar().getValue();for(let P=11;P>=0;--P)(C&1<<P)!=0&&u.set(_),_++;for(let P=1;P<c.length;++P){let E=c[P],D=E.getLeftChar().getValue();for(let V=11;V>=0;--V)(D&1<<V)!=0&&u.set(_),_++;if(E.getRightChar()!=null){let V=E.getRightChar().getValue();for(let z=11;z>=0;--z)(V&1<<z)!=0&&u.set(_),_++}}return u}}class Pr{constructor(c,p){p?this.decodedInformation=null:(this.finished=c,this.decodedInformation=p)}getDecodedInformation(){return this.decodedInformation}isFinished(){return this.finished}}class f0{constructor(c){this.newPosition=c}getNewPosition(){return this.newPosition}}let Ti=(()=>{class T extends f0{constructor(p,g){super(p),this.value=g}getValue(){return this.value}isFNC1(){return this.value===T.FNC1}}return T.FNC1="$",T})();class Mr extends f0{constructor(c,p,g){super(c),g?(this.remaining=!0,this.remainingValue=this.remainingValue):(this.remaining=!1,this.remainingValue=0),this.newString=p}getNewString(){return this.newString}isRemaining(){return this.remaining}getRemainingValue(){return this.remainingValue}}let ia=(()=>{class T extends f0{constructor(p,g,u){if(super(p),g<0||g>10||u<0||u>10)throw new U;this.firstDigit=g,this.secondDigit=u}getFirstDigit(){return this.firstDigit}getSecondDigit(){return this.secondDigit}getValue(){return this.firstDigit*10+this.secondDigit}isFirstDigitFNC1(){return this.firstDigit===T.FNC1}isSecondDigitFNC1(){return this.secondDigit===T.FNC1}isAnyFNC1(){return this.firstDigit===T.FNC1||this.secondDigit===T.FNC1}}return T.FNC1=10,T})();class Ae{constructor(){}static parseFieldsInGeneralPurpose(c){if(!c)return null;if(c.length<2)throw new se;let p=c.substring(0,2);for(let _ of Ae.TWO_DIGIT_DATA_LENGTH)if(_[0]===p)return _[1]===Ae.VARIABLE_LENGTH?Ae.processVariableAI(2,_[2],c):Ae.processFixedAI(2,_[1],c);if(c.length<3)throw new se;let g=c.substring(0,3);for(let _ of Ae.THREE_DIGIT_DATA_LENGTH)if(_[0]===g)return _[1]===Ae.VARIABLE_LENGTH?Ae.processVariableAI(3,_[2],c):Ae.process
21FixedAI(3,_[1],c);for(let _ of Ae.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH)if(_[0]===g)return _[1]===Ae.VARIABLE_LENGTH?Ae.processVariableAI(4,_[2],c):Ae.processFixedAI(4,_[1],c);if(c.length<4)throw new se;let u=c.substring(0,4);for(let _ of Ae.FOUR_DIGIT_DATA_LENGTH)if(_[0]===u)return _[1]===Ae.VARIABLE_LENGTH?Ae.processVariableAI(4,_[2],c):Ae.processFixedAI(4,_[1],c);throw new se}static processFixedAI(c,p,g){if(g.length<c)throw new se;let u=g.substring(0,c);if(g.length<c+p)throw new se;let _=g.substring(c,c+p),b=g.substring(c+p),C="("+u+")"+_,P=Ae.parseFieldsInGeneralPurpose(b);return P==null?C:C+P}static processVariableAI(c,p,g){let u=g.substring(0,c),_;g.length<c+p?_=g.length:_=c+p;let b=g.substring(c,_),C=g.substring(_),P="("+u+")"+b,E=Ae.parseFieldsInGeneralPurpose(C);return E==null?P:P+E}}Ae.VARIABLE_LENGTH=[],Ae.TWO_DIGIT_DATA_LENGTH=[["00",18],["01",14],["02",14],["10",Ae.VARIABLE_LENGTH,20],["11",6],["12",6],["13",6],["15",6],["17",6],["20",2],["21",Ae.VARIABLE_LENGTH,20],["22",Ae.VARIABLE_LENGTH,29],["30",Ae.VARIABLE_LENGTH,8],["37",Ae.VARIABLE_LENGTH,8],["90",Ae.VARIABLE_LENGTH,30],["91",Ae.VARIABLE_LENGTH,30],["92",Ae.VARIABLE_LENGTH,30],["93",Ae.VARIABLE_LENGTH,30],["94",Ae.VARIABLE_LENGTH,30],["95",Ae.VARIABLE_LENGTH,30],["96",Ae.VARIABLE_LENGTH,30],["97",Ae.VARIABLE_LENGTH,3],["98",Ae.VARIABLE_LENGTH,30],["99",Ae.VARIABLE_LENGTH,30]],Ae.THREE_DIGIT_DATA_LENGTH=[["240",Ae.VARIABLE_LENGTH,30],["241",Ae.VARIABLE_LENGTH,30],["242",Ae.VARIABLE_LENGTH,6],["250",Ae.VARIABLE_LENGTH,30],["251",Ae.VARIABLE_LENGTH,30],["253",Ae.VARIABLE_LENGTH,17],["254",Ae.VARIABLE_LENGTH,20],["400",Ae.VARIABLE_LENGTH,30],["401",Ae.VARIABLE_LENGTH,30],["402",17],["403",Ae.VARIABLE_LENGTH,30],["410",13],["411",13],["412",13],["413",13],["414",13],["420",Ae.VARIABLE_LENGTH,20],["421",Ae.VARIABLE_LENGTH,15],["422",3],["423",Ae.VARIABLE_LENGTH,15],["424",3],["425",3],["426",3]],Ae.THREE_DIGIT_PLUS_DIGIT_DATA_LENGTH=[["310",6],["311",6],["312",6],["313",6],["314",6],["315",6],["316",6],["320",6],["321",6],["322",6],["323",6],["324",6],["325",6],["326",6],["327",6],["328",6],["329",6],["330",6],["331",6],["332",6],["333",6],["334",6],["335",6],["336",6],["340",6],["341",6],["342",6],["343",6],["344",6],["345",6],["346",6],["347",6],["348",6],["349",6],["350",6],["351",6],["352",6],["353",6],["354",6],["355",6],["356",6],["357",6],["360",6],["361",6],["362",6],["363",6],["364",6],["365",6],["366",6],["367",6],["368",6],["369",6],["390",Ae.VARIABLE_LENGTH,15],["391",Ae.VARIABLE_LENGTH,18],["392",Ae.VARIABLE_LENGTH,15],["393",Ae.VARIABLE_LENGTH,18],["703",Ae.VARIABLE_LENGTH,30]],Ae.FOUR_DIGIT_DATA_LENGTH=[["7001",13],["7002",Ae.VARIABLE_LENGTH,30],["7003",10],["8001",14],["8002",Ae.VARIABLE_LENGTH,20],["8003",Ae.VARIABLE_LENGTH,30],["8004",Ae.VARIABLE_LENGTH,30],["8005",6],["8006",18],["8007",Ae.VARIABLE_LENGTH,30],["8008",Ae.VARIABLE_LENGTH,12],["8018",18],["8020",Ae.VARIABLE_LENGTH,25],["8100",6],["8101",10],["8102",2],["8110",Ae.VARIABLE_LENGTH,70],["8200",Ae.VARIABLE_LENGTH,70]];class oa{constructor(c){this.buffer=new Ce,this.information=c}decodeAllCodes(c,p){let g=p,u=null;do{let _=this.decodeGeneralPurposeField(g,u),b=Ae.parseFieldsInGeneralPurpose(_.getNewString());if(b!=null&&c.append(b),_.isRemaining()?u=""+_.getRemainingValue():u=null,g===_.getNewPosition())break;g=_.getNewPosition()}while(!0);return c.toString()}isStillNumeric(c){if(c+7>this.information.getSize())return c+4<=this.information.getSize();for(let p=c;p<c+3;++p)if(this.information.get(p))return!0;return this.information.get(c+3)}decodeNumeric(c){if(c+7>this.information.getSize()){let _=this.extractNumericValueFromBitArray(c,4);return _===0?new ia(this.information.getSize(),ia.FNC1,ia.FNC1):new ia(this.information.getSize(),_-1,ia.FNC1)}let p=this.extractNumericValueFromBitArray(c,7),g=(p-8)/11,u=(p-8)%11;return new ia(c+7,g,u)}extractNumericValueFromBitArray(c,p){return oa.extractNumericValueFromBitArray(this.information,c,p)}static extractNumericValueFromBitArray(c,p,g){let u=0;for(let _=0;_<g;++_)c.get(p+_)&&(u|=1<<g-_-1);return u}decodeGeneralPurposeField(c,p){this.buffer.setLengthToZero(),p!=null&&this.buffer.append(p),this.current.setPosition(c);let g=this.parseBlocks();return g!=null&&g.isRemaining()?new Mr(this.current.getPosition(),this.buffer.toString(),g.getRemainingValue()):new Mr(this.current.getPosition(),this.buffer.toString())}parseBlocks(){let c,p;do{let g=this.current.getPosition();if(this.current.isAlpha()?(p=this.parseAlphaBlock(),c=p.isFinished()):this.current.isIsoIec646()?(p=this.parseIsoIec646Block(),c=p.isFinished()):(p=this.parseNumericBlock(),c=p.isFinished()),!(g!==this.current.getPosition())&&!c)break}while(!c);return p.getDecodedInformation()}parseNumericBlock(){for(;this.isStillNumeric(this.current.getPosition());){let c=this.decodeNumeric(this.current.getPosition());if(this.current.setPosition(c.getNewPosition()),c.isFirstDigitFNC1()){let p;return c.isSecondDigitFNC1()?p=new Mr(this.current.getPosition(),this.buffer.toString()):p=new Mr(this.current.getPosition(),this.buffer.toString(),c.getSecondDigit()),new Pr(!0,p)}if(this.buffer.append(c.getFirstDigit()),c.isSecondDigitFNC1()){let p=new Mr(this.current.getPosition(),this.buffer.toString());return new Pr(!0,p)}this.buffer.append(c.getSecondDigit())}return this.isNumericToAlphaNumericLatch(this.current.getPosition())&&(this.current.setAlpha(),this.current.incrementPosition(4)),new Pr(!1)}parseIsoIec646Block(){for(;this.isStillIsoIec646(this.current.getPosition());){let c=this.decodeIsoIec646(this.current.getPosition());if(this.current.setPosition(c.getNewPosition()),c.isFNC1()){let p=new Mr(this.current.getPosition(),this.buffer.toString());return new Pr(!0,p)}this.buffer.append(c.getValue())}return this.isAlphaOr646ToNumericLatch(this.current.getPosition())?(this.current.incrementPosition(3),this.current.setNumeric()):this.isAlphaTo646ToAlphaLatch(this.current.getPosition())&&(this.current.getPosition()+5<this.information.getSize()?this.current.incrementPosition(5):this.current.setPosition(this.information.getSize()),this.current.setAlpha()),new Pr(!1)}parseAlphaBlock(){for(;this.isStillAlpha(this.current.getPosition());){let c=this.decodeAlphanumeric(this.current.getPosition());if(this.current.setPosition(c.getNewPosition()),c.isFNC1()){let p=new Mr(this.current.getPosition(),this.buffer.toString());return new Pr(!0,p)}this.buffer.append(c.getValue())}return this.isAlphaOr646ToNumericLatch(this.current.getPosition())?(this.current.incrementPosition(3),this.current.setNumeric()):this.isAlphaTo646ToAlphaLatch(this.current.getPosition())&&(this.current.getPosition()+5<this.information.getSize()?this.current.incrementPosition(5):this.current.setPosition(this.information.getSize()),this.current.setIsoIec646()),new Pr(!1)}isStillIsoIec646(c){if(c+5>this.information.getSize())return!1;let p=this.extractNumericValueFromBitArray(c,5);if(p>=5&&p<16)return!0;
21if(c+7>this.information.getSize())return!1;let g=this.extractNumericValueFromBitArray(c,7);if(g>=64&&g<116)return!0;if(c+8>this.information.getSize())return!1;let u=this.extractNumericValueFromBitArray(c,8);return u>=232&&u<253}decodeIsoIec646(c){let p=this.extractNumericValueFromBitArray(c,5);if(p===15)return new Ti(c+5,Ti.FNC1);if(p>=5&&p<15)return new Ti(c+5,"0"+(p-5));let g=this.extractNumericValueFromBitArray(c,7);if(g>=64&&g<90)return new Ti(c+7,""+(g+1));if(g>=90&&g<116)return new Ti(c+7,""+(g+7));let u=this.extractNumericValueFromBitArray(c,8),_;switch(u){case 232:_="!";break;case 233:_='"';break;case 234:_="%";break;case 235:_="&";break;case 236:_="'";break;case 237:_="(";break;case 238:_=")";break;case 239:_="*";break;case 240:_="+";break;case 241:_=",";break;case 242:_="-";break;case 243:_=".";break;case 244:_="/";break;case 245:_=":";break;case 246:_=";";break;case 247:_="<";break;case 248:_="=";break;case 249:_=">";break;case 250:_="?";break;case 251:_="_";break;case 252:_=" ";break;default:throw new U}return new Ti(c+8,_)}isStillAlpha(c){if(c+5>this.information.getSize())return!1;let p=this.extractNumericValueFromBitArray(c,5);if(p>=5&&p<16)return!0;if(c+6>this.information.getSize())return!1;let g=this.extractNumericValueFromBitArray(c,6);return g>=16&&g<63}decodeAlphanumeric(c){let p=this.extractNumericValueFromBitArray(c,5);if(p===15)return new Ti(c+5,Ti.FNC1);if(p>=5&&p<15)return new Ti(c+5,"0"+(p-5));let g=this.extractNumericValueFromBitArray(c,6);if(g>=32&&g<58)return new Ti(c+6,""+(g+33));let u;switch(g){case 58:u="*";break;case 59:u=",";break;case 60:u="-";break;case 61:u=".";break;case 62:u="/";break;default:throw new co("Decoding invalid alphanumeric value: "+g)}return new Ti(c+6,u)}isAlphaTo646ToAlphaLatch(c){if(c+1>this.information.getSize())return!1;for(let p=0;p<5&&p+c<this.information.getSize();++p)if(p===2){if(!this.information.get(c+2))return!1}else if(this.information.get(c+p))return!1;return!0}isAlphaOr646ToNumericLatch(c){if(c+3>this.information.getSize())return!1;for(let p=c;p<c+3;++p)if(this.information.get(p))return!1;return!0}isNumericToAlphaNumericLatch(c){if(c+1>this.information.getSize())return!1;for(let p=0;p<4&&p+c<this.information.getSize();++p)if(this.information.get(c+p))return!1;return!0}}class h0{constructor(c){this.information=c,this.generalDecoder=new oa(c)}getInformation(){return this.information}getGeneralDecoder(){return this.generalDecoder}}let Ii=(()=>{class T extends h0{constructor(p){super(p)}encodeCompressedGtin(p,g){p.append("(01)");let u=p.length();p.append("9"),this.encodeCompressedGtinWithoutAI(p,g,u)}encodeCompressedGtinWithoutAI(p,g,u){for(let _=0;_<4;++_){let b=this.getGeneralDecoder().extractNumericValueFromBitArray(g+10*_,10);b/100===0&&p.append("0"),b/10===0&&p.append("0"),p.append(b)}T.appendCheckDigit(p,u)}static appendCheckDigit(p,g){let u=0;for(let _=0;_<13;_++){let b=p.charAt(_+g).charCodeAt(0)-48;u+=(_&1)===0?3*b:b}u=10-u%10,u===10&&(u=0),p.append(u)}}return T.GTIN_SIZE=40,T})(),K2=(()=>{class T extends Ii{constructor(p){super(p)}parseInformation(){let p=new Ce;p.append("(01)");let g=p.length(),u=this.getGeneralDecoder().extractNumericValueFromBitArray(T.HEADER_SIZE,4);return p.append(u),this.encodeCompressedGtinWithoutAI(p,T.HEADER_SIZE+4,g),this.getGeneralDecoder().decodeAllCodes(p,T.HEADER_SIZE+44)}}return T.HEADER_SIZE=4,T})(),J2=(()=>{class T extends h0{constructor(p){super(p)}parseInformation(){let p=new Ce;return this.getGeneralDecoder().decodeAllCodes(p,T.HEADER_SIZE)}}return T.HEADER_SIZE=5,T})();class Dl extends Ii{constructor(c){super(c)}encodeCompressedWeight(c,p,g){let u=this.getGeneralDecoder().extractNumericValueFromBitArray(p,g);this.addWeightCode(c,u);let _=this.checkWeight(u),b=1e5;for(let C=0;C<5;++C)_/b===0&&c.append("0"),b/=10;c.append(_)}}let Ag=(()=>{class T extends Dl{constructor(p){super(p)}parseInformation(){if(this.getInformation().getSize()!=T.HEADER_SIZE+Dl.GTIN_SIZE+T.WEIGHT_SIZE)throw new se;let p=new Ce;return this.encodeCompressedGtin(p,T.HEADER_SIZE),this.encodeCompressedWeight(p,T.HEADER_SIZE+Dl.GTIN_SIZE,T.WEIGHT_SIZE),p.toString()}}return T.HEADER_SIZE=5,T.WEIGHT_SIZE=15,T})();class ey extends Ag{constructor(c){super(c)}addWeightCode(c,p){c.append("(3103)")}checkWeight(c){return c}}class ty extends Ag{constructor(c){super(c)}addWeightCode(c,p){p<1e4?c.append("(3202)"):c.append("(3203)")}checkWeight(c){return c<1e4?c:c-1e4}}let ny=(()=>{class T extends Ii{constructor(p){super(p)}parseInformation(){if(this.getInformation().getSize()<T.HEADER_SIZE+Ii.GTIN_SIZE)throw new se;let p=new Ce;this.encodeCompressedGtin(p,T.HEADER_SIZE);let g=this.getGeneralDecoder().extractNumericValueFromBitArray(T.HEADER_SIZE+Ii.GTIN_SIZE,T.LAST_DIGIT_SIZE);p.append("(392"),p.append(g),p.append(")");let u=this.getGeneralDecoder().decodeGeneralPurposeField(T.HEADER_SIZE+Ii.GTIN_SIZE+T.LAST_DIGIT_SIZE,null);return p.append(u.getNewString()),p.toString()}}return T.HEADER_SIZE=8,T.LAST_DIGIT_SIZE=2,T})(),iy=(()=>{class T extends Ii{constructor(p){super(p)}parseInformation(){if(this.getInformation().getSize()<T.HEADER_SIZE+Ii.GTIN_SIZE)throw new se;let p=new Ce;this.encodeCompressedGtin(p,T.HEADER_SIZE);let g=this.getGeneralDecoder().extractNumericValueFromBitArray(T.HEADER_SIZE+Ii.GTIN_SIZE,T.LAST_DIGIT_SIZE);p.append("(393"),p.append(g),p.append(")");let u=this.getGeneralDecoder().extractNumericValueFromBitArray(T.HEADER_SIZE+Ii.GTIN_SIZE+T.LAST_DIGIT_SIZE,T.FIRST_THREE_DIGITS_SIZE);u/100==0&&p.append("0"),u/10==0&&p.append("0"),p.append(u);let _=this.getGeneralDecoder().decodeGeneralPurposeField(T.HEADER_SIZE+Ii.GTIN_SIZE+T.LAST_DIGIT_SIZE+T.FIRST_THREE_DIGITS_SIZE,null);return p.append(_.getNewString()),p.toString()}}return T.HEADER_SIZE=8,T.LAST_DIGIT_SIZE=2,T.FIRST_THREE_DIGITS_SIZE=10,T})(),Ro=(()=>
21{class T extends Dl{constructor(p,g,u){super(p),this.dateCode=u,this.firstAIdigits=g}parseInformation(){if(this.getInformation().getSize()!=T.HEADER_SIZE+T.GTIN_SIZE+T.WEIGHT_SIZE+T.DATE_SIZE)throw new se;let p=new Ce;return this.encodeCompressedGtin(p,T.HEADER_SIZE),this.encodeCompressedWeight(p,T.HEADER_SIZE+T.GTIN_SIZE,T.WEIGHT_SIZE),this.encodeCompressedDate(p,T.HEADER_SIZE+T.GTIN_SIZE+T.WEIGHT_SIZE),p.toString()}encodeCompressedDate(p,g){let u=this.getGeneralDecoder().extractNumericValueFromBitArray(g,T.DATE_SIZE);if(u==38400)return;p.append("("),p.append(this.dateCode),p.append(")");let _=u%32;u/=32;let b=u%12+1;u/=12;let C=u;C/10==0&&p.append("0"),p.append(C),b/10==0&&p.append("0"),p.append(b),_/10==0&&p.append("0"),p.append(_)}addWeightCode(p,g){p.append("("),p.append(this.firstAIdigits),p.append(g/1e5),p.append(")")}checkWeight(p){return p%1e5}}return T.HEADER_SIZE=8,T.WEIGHT_SIZE=20,T.DATE_SIZE=16,T})();function Dg(T){try{if(T.get(1))return new K2(T);if(!T.get(2))return new J2(T);switch(oa.extractNumericValueFromBitArray(T,1,4)){case 4:return new ey(T);case 5:return new ty(T)}switch(oa.extractNumericValueFromBitArray(T,1,5)){case 12:return new ny(T);case 13:return new iy(T)}switch(oa.extractNumericValueFromBitArray(T,1,7)){case 56:return new Ro(T,"310","11");case 57:return new Ro(T,"320","11");case 58:return new Ro(T,"310","13");case 59:return new Ro(T,"320","13");case 60:return new Ro(T,"310","15");case 61:return new Ro(T,"320","15");case 62:return new Ro(T,"310","17");case 63:return new Ro(T,"320","17")}}catch(c){throw console.log(c),new co("unknown decoder: "+T)}}class Bo{constructor(c,p,g,u){this.leftchar=c,this.rightchar=p,this.finderpattern=g,this.maybeLast=u}mayBeLast(){return this.maybeLast}getLeftChar(){return this.leftchar}getRightChar(){return this.rightchar}getFinderPattern(){return this.finderpattern}mustBeLast(){return this.rightchar==null}toString(){return"[ "+this.leftchar+", "+this.rightchar+" : "+(this.finderpattern==null?"null":this.finderpattern.getValue())+" ]"}static equals(c,p){return c instanceof Bo?Bo.equalsOrNull(c.leftchar,p.leftchar)&&Bo.equalsOrNull(c.rightchar,p.rightchar)&&Bo.equalsOrNull(c.finderpattern,p.finderpattern):!1}static equalsOrNull(c,p){return c===null?p===null:Bo.equals(c,p)}hashCode(){return this.leftchar.getValue()^this.rightchar.getValue()^this.finderpattern.getValue()}}class _0{constructor(c,p,g){this.pairs=c,this.rowNumber=p,this.wasReversed=g}getPairs(){return this.pairs}getRowNumber(){return this.rowNumber}isReversed(){return this.wasReversed}isEquivalent(c){return this.checkEqualitity(this,c)}toString(){return"{ "+this.pairs+" }"}equals(c,p){return c instanceof _0?this.checkEqualitity(c,p)&&c.wasReversed===p.wasReversed:!1}checkEqualitity(c,p){if(!c||!p)return;let g;return c.forEach((u,_)=>{p.forEach(b=>{u.getLeftChar().getValue()===b.getLeftChar().getValue()&&u.getRightChar().getValue()===b.getRightChar().getValue()&&u.getFinderPatter().getValue()===b.getFinderPatter().getValue()&&(g=!0)})}),g}}class fe extends wr{constructor(c){super(...arguments),this.pairs=new Array(fe.MAX_PAIRS),this.rows=new Array,this.startEnd=[2],this.verbose=c===!0}decodeRow(c,p,g){this.pairs.length=0,this.startFromEven=!1;try{return fe.constructResult(this.decodeRow2pairs(c,p))}catch(u){this.verbose&&console.log(u)}return this.pairs.length=0,this.startFromEven=!0,fe.constructResult(this.decodeRow2pairs(c,p))}reset(){this.pairs.length=0,this.rows.length=0}decodeRow2pairs(c,p){let g=!1;for(;!g;)try{this.pairs.push(this.retrieveNextPair(p,this.pairs,c))}catch(_){if(_ instanceof se){if(!this.pairs.length)throw new se;g=!0}}if(this.checkChecksum())return this.pairs;let u;if(this.rows.length?u=!0:u=!1,this.storeRow(c,!1),u){let _=this.checkRowsBoolean(!1);if(_!=null||(_=this.checkRowsBoolean(!0),_!=null))return _}throw new se}checkRowsBoolean(c){if(this.rows.length>25)return this.rows.length=0,null;this.pairs.length=0,c&&(this.rows=this.rows.reverse());let p=null;try{p=this.checkRows(new Array,0)}catch(g){this.verbose&&console.log(g)}return c&&(this.rows=this.rows.reverse()),p}checkRows(c,p){for(let g=p;g<this.rows.length;g++){let u=this.rows[g];this.pairs.length=0;for(let b of c)this.pairs.push(b.getPairs());if(this.pairs.push(u.getPairs()),!fe.isValidSequence(this.pairs))continue;if(this.checkChecksum())return this.pairs;let _=new Array(c);_.push(u);try{return this.checkRows(_,g+1)}catch(b){this.verbose&&console.log(b)}}throw new se}static isValidSequence(c){for(let p of fe.FINDER_PATTERN_SEQUENCES){if(c.length>p.length)continue;let g=!0;for(let u=0;u<c.length;u++)if(c[u].getFinderPattern().getValue()!=p[u]){g=!1;break}if(g)return!0}return!1}storeRow(c,p){let g=0,u=!1,_=!1;for(;g<this.rows.length;){let b=this.rows[g];if(b.getRowNumber()>c){_=b.isEquivalent(this.pairs);break}u=b.isEquivalent(this.pairs),g++}_||u||fe.isPartialRow(this.pairs,this.rows)||(this.rows.push(g,new _0(this.pairs,c,p)),this.removePartialRows(this.pairs,this.rows))}removePartialRows(c,p){for(let g of p)if(g.getPairs().length!==c.length){for(let u of g.getPairs())for(let _ of c)if(Bo.equals(u,_))break}}static isPartialRow(c,p){for(let g of p){let u=!0;for(let _ of c){let b=!1;for(let C of g.getPairs())if(_.equals(C)){b=!0;break}if(!b){u=!1;break}}if(u)return!0}return!1}getRows(){return this.rows}static constructResult(c){let p=Q2.buildBitArray(c),u=Dg(p).parseInformation(),_=c[0].getFinderPattern().getResultPoints(),b=c[c.length-1].getFinderPattern().getResultPoints(),C=[_[0],_[1],b[0],b[1]];return new $t(u,null,null,C,Ne.RSS_EXPANDED,null)}checkChecksum(){let c=this.pairs.get(0),p=c.getLeftChar(),g=c.getRightChar();if(g==null)return!1;let u=g.getChecksumPortion(),_=2;for(let C=1;C<this.pairs.size();++C){let P=this.pairs.get(C);u+=P.getLeftChar().getChecksumPortion(),_++;let E=P.getRightChar();E!=null&&(u+=E.getChecksumPortion(),_++)}return u%=211,211*(_-4)+u==p.getValue()}static getNextSecondBar(c,p){let g;return c.get(p)?(g=c.getNextUnset(p),g=c.getNextSet(g)):(g=c.getNextSet(p),g=c.getNextUnset(g)),g}retrieveNextPair(c,p,g){let u=p.length%2==0;this.startFromEven&&(u=!u);let _,b=!0,C=-1;do this.findNextPair(c,p,C),_=this.parseFoundFinderPattern(c,g,u),_==null?C=fe.getNextSecondBar(c,this.startEnd[0]):b=!1;while(b);let P=this.decodeDataCharacter(c,_,u,!0);if(!this.isEmptyPair(p)&&p[p.length-1].mustBeLast())throw new se;let E;try{E=this.decodeDataCharacter(c,_,u,!1)}catch(D){E=null,this.verbose&&console.log(D)}return new Bo(P,E,_,!0)}isEmptyPair(c){return c.length===0}findNextPair(c,p,g){let u=this.getDecodeFinderCounters();u[0]=0,u[1]=0,u[2]=0,u[3]=0;let _=c.getSize(),b;g>=0?b=g:this.isEmptyPair(p)?b=0:b=p[p.length-1].getFinderPattern().getStartEnd()[1];let C=p.length%2!=0;this.startFromEven&&(C=!C);let P=!1;for(;b<_&&(P=!c.get(b),!!P);
21)b++;let E=0,D=b;for(let V=b;V<_;V++)if(c.get(V)!=P)u[E]++;else{if(E==3){if(C&&fe.reverseCounters(u),fe.isFinderPattern(u)){this.startEnd[0]=D,this.startEnd[1]=V;return}C&&fe.reverseCounters(u),D+=u[0]+u[1],u[0]=u[2],u[1]=u[3],u[2]=0,u[3]=0,E--}else E++;u[E]=1,P=!P}throw new se}static reverseCounters(c){let p=c.length;for(let g=0;g<p/2;++g){let u=c[g];c[g]=c[p-g-1],c[p-g-1]=u}}parseFoundFinderPattern(c,p,g){let u,_,b;if(g){let E=this.startEnd[0]-1;for(;E>=0&&!c.get(E);)E--;E++,u=this.startEnd[0]-E,_=E,b=this.startEnd[1]}else _=this.startEnd[0],b=c.getNextUnset(this.startEnd[1]+1),u=b-this.startEnd[1];let C=this.getDecodeFinderCounters();N.arraycopy(C,0,C,1,C.length-1),C[0]=u;let P;try{P=this.parseFinderValue(C,fe.FINDER_PATTERNS)}catch{return null}return new Al(P,[_,b],_,b,p)}decodeDataCharacter(c,p,g,u){let _=this.getDataCharacterCounters();for(let At=0;At<_.length;At++)_[At]=0;if(u)fe.recordPatternInReverse(c,p.getStartEnd()[0],_);else{fe.recordPattern(c,p.getStartEnd()[1],_);for(let At=0,kn=_.length-1;At<kn;At++,kn--){let ii=_[At];_[At]=_[kn],_[kn]=ii}}let b=17,C=dt.sum(new Int32Array(_))/b,P=(p.getStartEnd()[1]-p.getStartEnd()[0])/15;if(Math.abs(C-P)/P>.3)throw new se;let E=this.getOddCounts(),D=this.getEvenCounts(),V=this.getOddRoundingErrors(),z=this.getEvenRoundingErrors();for(let At=0;At<_.length;At++){let kn=1*_[At]/C,ii=kn+.5;if(ii<1){if(kn<.3)throw new se;ii=1}else if(ii>8){if(kn>8.7)throw new se;ii=8}let la=At/2;(At&1)==0?(E[la]=ii,V[la]=kn-ii):(D[la]=ii,z[la]=kn-ii)}this.adjustOddEvenCounts(b);let $=4*p.getValue()+(g?0:2)+(u?0:1)-1,X=0,ee=0;for(let At=E.length-1;At>=0;At--){if(fe.isNotA1left(p,g,u)){let kn=fe.WEIGHTS[$][2*At];ee+=E[At]*kn}X+=E[At]}let ne=0;for(let At=D.length-1;At>=0;At--)if(fe.isNotA1left(p,g,u)){let kn=fe.WEIGHTS[$][2*At+1];ne+=D[At]*kn}let oe=ee+ne;if((X&1)!=0||X>13||X<4)throw new se;let ve=(13-X)/2,ke=fe.SYMBOL_WIDEST[ve],me=9-ke,Ke=Fi.getRSSvalue(E,ke,!0),Xe=Fi.getRSSvalue(D,me,!1),qn=fe.EVEN_TOTAL_SUBSET[ve],Di=fe.GSUM[ve],$n=Ke*qn+Xe+Di;return new na($n,oe)}static isNotA1left(c,p,g){return!(c.getValue()==0&&p&&g)}adjustOddEvenCounts(c){let p=dt.sum(new Int32Array(this.getOddCounts())),g=dt.sum(new Int32Array(this.getEvenCounts())),u=!1,_=!1;p>13?_=!0:p<4&&(u=!0);let b=!1,C=!1;g>13?C=!0:g<4&&(b=!0);let P=p+g-c,E=(p&1)==1,D=(g&1)==0;if(P==1)if(E){if(D)throw new se;_=!0}else{if(!D)throw new se;C=!0}else if(P==-1)if(E){if(D)throw new se;u=!0}else{if(!D)throw new se;b=!0}else if(P==0){if(E){if(!D)throw new se;p<g?(u=!0,C=!0):(_=!0,b=!0)}else if(D)throw new se}else throw new se;if(u){if(_)throw new se;fe.increment(this.getOddCounts(),this.getOddRoundingErrors())}if(_&&fe.decrement(this.getOddCounts(),this.getOddRoundingErrors()),b){if(C)throw new se;fe.increment(this.getEvenCounts(),this.getOddRoundingErrors())}C&&fe.decrement(this.getEvenCounts(),this.getEvenRoundingErrors())}}fe.SYMBOL_WIDEST=[7,5,4,3,1],fe.EVEN_TOTAL_SUBSET=[4,20,52,104,204],fe.GSUM=[0,348,1388,2948,3988],fe.FINDER_PATTERNS=[Int32Array.from([1,8,4,1]),Int32Array.from([3,6,4,1]),Int32Array.from([3,4,6,1]),Int32Array.from([3,2,8,1]),Int32Array.from([2,6,5,1]),Int32Array.from([2,2,9,1])],fe.WEIGHTS=[[1,3,9,27,81,32,96,77],[20,60,180,118,143,7,21,63],[189,145,13,39,117,140,209,205],[193,157,49,147,19,57,171,91],[62,186,136,197,169,85,44,132],[185,133,188,142,4,12,36,108],[113,128,173,97,80,29,87,50],[150,28,84,41,123,158,52,156],[46,138,203,187,139,206,196,166],[76,17,51,153,37,111,122,155],[43,129,176,106,107,110,119,146],[16,48,144,10,30,90,59,177],[109,116,137,200,178,112,125,164],[70,210,208,202,184,130,179,115],[134,191,151,31,93,68,204,190],[148,22,66,198,172,94,71,2],[6,18,54,162,64,192,154,40],[120,149,25,75,14,42,126,167],[79,26,78,23,69,207,199,175],[103,98,83,38,114,131,182,124],[161,61,183,127,170,88,53,159],[55,165,73,8,24,72,5,15],[45,135,194,160,58,174,100,89]],fe.FINDER_PAT_A=0,fe.FINDER_PAT_B=1,fe.FINDER_PAT_C=2,fe.FINDER_PAT_D=3,fe.FINDER_PAT_E=4,fe.FINDER_PAT_F=5,fe.FINDER_PATTERN_SEQUENCES=[[fe.FINDER_PAT_A,fe.FINDER_PAT_A],[fe.FINDER_PAT_A,fe.FINDER_PAT_B,fe.FINDER_PAT_B],[fe.FINDER_PAT_A,fe.FINDER_PAT_C,fe.FINDER_PAT_B,fe.FINDER_PAT_D],[fe.FINDER_PAT_A,fe.FINDER_PAT_E,fe.FINDER_PAT_B,fe.FINDER_PAT_D,fe.FINDER_PAT_C],[fe.FINDER_PAT_A,fe.FINDER_PAT_E,fe.FINDER_PAT_B,fe.FINDER_PAT_D,fe.FINDER_PAT_D,fe.FINDER_PAT_F],[fe.FINDER_PAT_A,fe.FINDER_PAT_E,fe.FINDER_PAT_B,fe.FINDER_PAT_D,fe.FINDER_PAT_E,fe.FINDER_PAT_F,fe.FINDER_PAT_F],[fe.FINDER_PAT_A,fe.FINDER_PAT_A,fe.FINDER_PAT_B,fe.FINDER_PAT_B,fe.FINDER_PAT_C,fe.FINDER_PAT_C,fe.FINDER_PAT_D,fe.FINDER_PAT_D],[fe.FINDER_PAT_A,fe.FINDER_PAT_A,fe.FINDER_PAT_B,fe.FINDER_PAT_B,fe.FINDER_PAT_C,fe.FINDER_PAT_C,fe.FINDER_PAT_D,fe.FINDER_PAT_E,fe.FINDER_PAT_E],[fe.FINDER_PAT_A,fe.FINDER_PAT_A,fe.FINDER_PAT_B,fe.FINDER_PAT_B,fe.FINDER_PAT_C,fe.FINDER_PAT_C,fe.FINDER_PAT_D,fe.FINDER_PAT_E,fe.FINDER_PAT_F,fe.FINDER_PAT_F],[fe.FINDER_PAT_A,fe.FINDER_PAT_A,fe.FINDER_PAT_B,fe.FINDER_PAT_B,fe.FINDER_PAT_C,fe.FINDER_PAT_D,fe.FINDER_PAT_D,fe.FINDER_PAT_E,fe.FINDER_PAT_E,fe.FINDER_PAT_F,fe.FINDER_PAT_F]],fe.MAX_PAIRS=11;class oy extends na{constructor(c,p,g){super(c,p),this.count=0,this.finderPattern=g}getFinderPattern(){return this.finderPattern}getCount(){return this.count}incrementCount(){this.count++}}class Xt extends wr{constructor(){super(...arguments),this.possibleLeftPairs=[],this.possibleRightPairs=[]}decodeRow(c,p,g){let u=this.decodePair(p,!1,c,g);Xt.addOrTally(this.possibleLeftPairs,u),p.reverse();let _=this.decodePair(p,!0,c,g);Xt.addOrTally(this.possibleRightPairs,_),p.reverse();for(let b of this.possibleLeftPairs)if(b.getCount()>1){for(let C of this.possibleRightPairs)if(C.getCount()>1&&Xt.checkChecksum(b,C))return Xt.constructResult(b,C)}throw new se}static addOrTally(c,p){if(p==null)return;let g=!1;for(let u of c)if(u.getValue()===p.getValue()){u.incrementCount(),g=!0;break}g||c.push(p)}reset(){this.possibleLeftPairs.length=0,this.possibleRightPairs.length=0}static constructResult(c,p){let g=4537077*c.getValue()+p.getValue(),u=new String(g).toString(),_=new Ce;for(let E=13-u.length;E>0;E--)_.append("0");_.append(u);let b=0;for(let E=0;E<13;
21E++){let D=_.charAt(E).charCodeAt(0)-48;b+=(E&1)===0?3*D:D}b=10-b%10,b===10&&(b=0),_.append(b.toString());let C=c.getFinderPattern().getResultPoints(),P=p.getFinderPattern().getResultPoints();return new $t(_.toString(),null,0,[C[0],C[1],P[0],P[1]],Ne.RSS_14,new Date().getTime())}static checkChecksum(c,p){let g=(c.getChecksumPortion()+16*p.getChecksumPortion())%79,u=9*c.getFinderPattern().getValue()+p.getFinderPattern().getValue();return u>72&&u--,u>8&&u--,g===u}decodePair(c,p,g,u){try{let _=this.findFinderPattern(c,p),b=this.parseFoundFinderPattern(c,g,p,_),C=u==null?null:u.get(Y.NEED_RESULT_POINT_CALLBACK);if(C!=null){let D=(_[0]+_[1])/2;p&&(D=c.getSize()-1-D),C.foundPossibleResultPoint(new Re(D,g))}let P=this.decodeDataCharacter(c,b,!0),E=this.decodeDataCharacter(c,b,!1);return new oy(1597*P.getValue()+E.getValue(),P.getChecksumPortion()+4*E.getChecksumPortion(),b)}catch{return null}}decodeDataCharacter(c,p,g){let u=this.getDataCharacterCounters();for(let ne=0;ne<u.length;ne++)u[ne]=0;if(g)sn.recordPatternInReverse(c,p.getStartEnd()[0],u);else{sn.recordPattern(c,p.getStartEnd()[1]+1,u);for(let ne=0,oe=u.length-1;ne<oe;ne++,oe--){let ve=u[ne];u[ne]=u[oe],u[oe]=ve}}let _=g?16:15,b=dt.sum(new Int32Array(u))/_,C=this.getOddCounts(),P=this.getEvenCounts(),E=this.getOddRoundingErrors(),D=this.getEvenRoundingErrors();for(let ne=0;ne<u.length;ne++){let oe=u[ne]/b,ve=Math.floor(oe+.5);ve<1?ve=1:ve>8&&(ve=8);let ke=Math.floor(ne/2);(ne&1)===0?(C[ke]=ve,E[ke]=oe-ve):(P[ke]=ve,D[ke]=oe-ve)}this.adjustOddEvenCounts(g,_);let V=0,z=0;for(let ne=C.length-1;ne>=0;ne--)z*=9,z+=C[ne],V+=C[ne];let $=0,X=0;for(let ne=P.length-1;ne>=0;ne--)$*=9,$+=P[ne],X+=P[ne];let ee=z+3*$;if(g){if((V&1)!==0||V>12||V<4)throw new se;let ne=(12-V)/2,oe=Xt.OUTSIDE_ODD_WIDEST[ne],ve=9-oe,ke=Fi.getRSSvalue(C,oe,!1),me=Fi.getRSSvalue(P,ve,!0),Ke=Xt.OUTSIDE_EVEN_TOTAL_SUBSET[ne],Xe=Xt.OUTSIDE_GSUM[ne];return new na(ke*Ke+me+Xe,ee)}else{if((X&1)!==0||X>10||X<4)throw new se;let ne=(10-X)/2,oe=Xt.INSIDE_ODD_WIDEST[ne],ve=9-oe,ke=Fi.getRSSvalue(C,oe,!0),me=Fi.getRSSvalue(P,ve,!1),Ke=Xt.INSIDE_ODD_TOTAL_SUBSET[ne],Xe=Xt.INSI
21DE_GSUM[ne];return new na(me*Ke+ke+Xe,ee)}}findFinderPattern(c,p){let g=this.getDecodeFinderCounters();g[0]=0,g[1]=0,g[2]=0,g[3]=0;let u=c.getSize(),_=!1,b=0;for(;b<u&&(_=!c.get(b),p!==_);)b++;let C=0,P=b;for(let E=b;E<u;E++)if(c.get(E)!==_)g[C]++;else{if(C===3){if(wr.isFinderPattern(g))return[P,E];P+=g[0]+g[1],g[0]=g[2],g[1]=g[3],g[2]=0,g[3]=0,C--}else C++;g[C]=1,_=!_}throw new se}parseFoundFinderPattern(c,p,g,u){let _=c.get(u[0]),b=u[0]-1;for(;b>=0&&_!==c.get(b);)b--;b++;let C=u[0]-b,P=this.getDecodeFinderCounters(),E=new Int32Array(P.length);N.arraycopy(P,0,E,1,P.length-1),E[0]=C;let D=this.parseFinderValue(E,Xt.FINDER_PATTERNS),V=b,z=u[1];return g&&(V=c.getSize()-1-V,z=c.getSize()-1-z),new Al(D,[b,u[1]],V,z,p)}adjustOddEvenCounts(c,p){let g=dt.sum(new Int32Array(this.getOddCounts())),u=dt.sum(new Int32Array(this.getEvenCounts())),_=!1,b=!1,C=!1,P=!1;c?(g>12?b=!0:g<4&&(_=!0),u>12?P=!0:u<4&&(C=!0)):(g>11?b=!0:g<5&&(_=!0),u>10?P=!0:u<4&&(C=!0));let E=g+u-p,D=(g&1)===(c?1:0),V=(u&1)===1;if(E===1)if(D){if(V)throw new se;b=!0}else{if(!V)throw new se;P=!0}else if(E===-1)if(D){if(V)throw new se;_=!0}else{if(!V)throw new se;C=!0}else if(E===0){if(D){if(!V)throw new se;g<u?(_=!0,P=!0):(b=!0,C=!0)}else if(V)throw new se}else throw new se;if(_){if(b)throw new se;wr.increment(this.getOddCounts(),this.getOddRoundingErrors())}if(b&&wr.decrement(this.getOddCounts(),this.getOddRoundingErrors()),C){if(P)throw new se;wr.increment(this.getEvenCounts(),this.getOddRoundingErrors())}P&&wr.decrement(this.getEvenCounts(),this.getEvenRoundingErrors())}}Xt.OUTSIDE_EVEN_TOTAL_SUBSET=[1,10,34,70,126],Xt.INSIDE_ODD_TOTAL_SUBSET=[4,20,48,81],Xt.OUTSIDE_GSUM=[0,161,961,2015,2715],Xt.INSIDE_GSUM=[0,336,1036,1516],Xt.OUTSIDE_ODD_WIDEST=[8,6,4,3,1],Xt.INSIDE_ODD_WIDEST=[2,4,6,8],Xt.FINDER_PATTERNS=[Int32Array.from([3,8,2,1]),Int32Array.from([3,5,5,1]),Int32Array.from([3,3,7,1]),Int32Array.from([3,1,9,1]),Int32Array.from([2,7,4,1]),Int32Array.from([2,5,6,1]),Int32Array.from([2,3,8,1]),Int32Array.from([1,5,7,1]),Int32Array.from([1,3,9,1])];class ra extends sn{constructor(c,p){super(),this.readers=[],this.verbose=p===!0;let g=c?c.get(Y.POSSIBLE_FORMATS):null,u=c&&c.get(Y.ASSUME_CODE_39_CHECK_DIGIT)!==void 0;g?((g.includes(Ne.EAN_13)||g.includes(Ne.UPC_A)||g.includes(Ne.EAN_8)||g.includes(Ne.UPC_E))&&this.readers.push(new u0(c)),g.includes(Ne.CODE_39)&&this.readers.push(new m0(u)),g.includes(Ne.CODE_128)&&this.readers.push(new Me),g.includes(Ne.ITF)&&this.readers.push(new Tt),g.includes(Ne.RSS_14)&&this.readers.push(new Xt),g.includes(Ne.RSS_EXPANDED)&&this.readers.push(new fe(this.verbose))):(this.readers.push(new u0(c)),this.readers.push(new m0),this.readers.push(new u0(c)),this.readers.push(new Me),this.readers.push(new Tt),this.readers.push(new Xt),this.readers.push(new fe(this.verbose)))}decodeRow(c,p,g){for(let u=0;u<this.readers.length;u++)try{return this.readers[u].decodeRow(c,p,g)}catch{}throw new se}reset(){this.readers.forEach(c=>c.reset())}}class ry extends pi{constructor(c=500,p){super(new ra(p),c,p)}}class wt{constructor(c,p,g){this.ecCodewords=c,this.ecBlocks=[p],g&&this.ecBlocks.push(g)}getECCodewords(){return this.ecCodewords}getECBlocks(){return this.ecBlocks}}class vt{constructor(c,p){this.count=c,this.dataCodewords=p}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class ot{constructor(c,p,g,u,_,b){this.versionNumber=c,this.symbolSizeRows=p,this.symbolSizeColumns=g,this.dataRegionSizeRows=u,this.dataRegionSizeColumns=_,this.ecBlocks=b;let C=0,P=b.getECCodewords(),E=b.getECBlocks();for(let D of E)C+=D.getCount()*(D.getDataCodewords()+P);this.totalCodewords=C}getVersionNumber(){return this.versionNumber}getSymbolSizeRows(){return this.symbolSizeRows}getSymbolSizeColumns(){return this.symbolSizeColumns}getDataRegionSizeRows(){return this.dataRegionSizeRows}getDataRegionSizeColumns(){return this.dataRegionSizeColumns}getTotalCodewords(){return this.totalCodewords}getECBlocks(){return this.ecBlocks}static getVersionForDimensions(c,p){if((c&1)!==0||(p&1)!==0)throw new U;for(let g of ot.VERSIONS)if(g.symbolSizeRows===c&&g.symbolSizeColumns===p)return g;throw new U}toString(){return""+this.versionNumber}static buildVersions(){return[new ot(1,10,10,8,8,new wt(5,new vt(1,3))),new ot(2,12,12,10,10,new wt(7,new vt(1,5))),new ot(3,14,14,12,12,new wt(10,new vt(1,8))),new ot(4,16,16,14,14,new wt(12,new vt(1,12))),new ot(5,18,18,16,16,new wt(14,new vt(1,18))),new ot(6,20,20,18,18,new wt(18,new vt(1,22))),new ot(7,22,22,20,20,new wt(20,new vt(1,30))),new ot(8,24,24,22,22,new wt(24,new vt(1,36
21))),new ot(9,26,26,24,24,new wt(28,new vt(1,44))),new ot(10,32,32,14,14,new wt(36,new vt(1,62))),new ot(11,36,36,16,16,new wt(42,new vt(1,86))),new ot(12,40,40,18,18,new wt(48,new vt(1,114))),new ot(13,44,44,20,20,new wt(56,new vt(1,144))),new ot(14,48,48,22,22,new wt(68,new vt(1,174))),new ot(15,52,52,24,24,new wt(42,new vt(2,102))),new ot(16,64,64,14,14,new wt(56,new vt(2,140))),new ot(17,72,72,16,16,new wt(36,new vt(4,92))),new ot(18,80,80,18,18,new wt(48,new vt(4,114))),new ot(19,88,88,20,20,new wt(56,new vt(4,144))),new ot(20,96,96,22,22,new wt(68,new vt(4,174))),new ot(21,104,104,24,24,new wt(56,new vt(6,136))),new ot(22,120,120,18,18,new wt(68,new vt(6,175))),new ot(23,132,132,20,20,new wt(62,new vt(8,163))),new ot(24,144,144,22,22,new wt(62,new vt(8,156),new vt(2,155))),new ot(25,8,18,6,16,new wt(7,new vt(1,5))),new ot(26,8,32,6,14,new wt(11,new vt(1,10))),new ot(27,12,26,10,24,new wt(14,new vt(1,16))),new ot(28,12,36,10,16,new wt(18,new vt(1,22))),new ot(29,16,36,14,16,new wt(24,new vt(1,32))),new ot(30,16,48,14,22,new wt(28,new vt(1,49)))]}}ot.VERSIONS=ot.buildVersions();class x0{constructor(c){let p=c.getHeight();if(p<8||p>144||(p&1)!==0)throw new U;this.version=x0.readVersion(c),this.mappingBitMatrix=this.extractDataRegion(c),this.readMappingMatrix=new De(this.mappingBitMatrix.getWidth(),this.mappingBitMatrix.getHeight())}getVersion(){return this.version}static readVersion(c){let p=c.getHeight(),g=c.getWidth();return ot.getVersionForDimensions(p,g)}readCodewords(){let c=new Int8Array(this.version.getTotalCodewords()),p=0,g=4,u=0,_=this.mappingBitMatrix.getHeight(),b=this.mappingBitMatrix.getWidth(),C=!1,P=!1,E=!1,D=!1;do if(g===_&&u===0&&!C)c[p++]=this.readCorner1(_,b)&255,g-=2,u+=2,C=!0;else if(g===_-2&&u===0&&(b&3)!==0&&!P)c[p++]=this.readCorner2(_,b)&255,g-=2,u+=2,P=!0;else if(g===_+4&&u===2&&(b&7)===0&&!E)c[p++]=this.readCorner3(_,b)&255,g-=2,u+=2,E=!0;else if(g===_-2&&u===0&&(b&7)===4&&!D)c[p++]=this.readCorner4(_,b)&255,g-=2,u+=2,D=!0;else{do g<_&&u>=0&&!this.readMappingMatrix.get(u,g)&&(c[p++]=this.readUtah(g,u,_,b)&255),g-=2,u+=2;while(g>=0&&u<b);g+=1,u+=3;do g>=0&&u<b&&!this.readMappingMatrix.get(u,g)&&(c[p++]=this.readUtah(g,u,_,b)&255),g+=2,u-=2;while(g<_&&u>=0);g+=3,u+=1}while(g<_||u<b);if(p!==this.version.getTotalCodewords())throw new U;return c}readModule(c,p,g,u){return c<0&&(c+=g,p+=4-(g+4&7)),p<0&&(p+=u,c+=4-(u+4&7)),this.readMappingMatrix.set(p,c),this.mappingBitMatrix.get(p,c)}readUtah(c,p,g,u){let _=0;return this.readModule(c-2,p-2,g,u)&&(_|=1),_<<=1,this.readModule(c-2,p-1,g,u)&&(_|=1),_<<=1,this.readModule(c-1,p-2,g,u)&&(_|=1),_<<=1,this.readModule(c-1,p-1,g,u)&&(_|=1),_<<=1,this.readModule(c-1,p,g,u)&&(_|=1),_<<=1,this.readModule(c,p-2,g,u)&&(_|=1),_<<=1,this.readModule(c,p-1,g,u)&&(_|=1),_<<=1,this.readModule(c,p,g,u)&&(_|=1),_}readCorner1(c,p){let g=0;return this.readModule(c-1,0,c,p)&&(g|=1),g<<=1,this.readModule(c-1,1,c,p)&&(g|=1),g<<=1,this.readModule(c-1,2,c,p)&&(g|=1),g<<=1,this.readModule(0,p-2,c,p)&&(g|=1),g<<=1,this.readModule(0,p-1,c,p)&&(g|=1),g<<=1,this.readModule(1,p-1,c,p)&&(g|=1),g<<=1,this.readModule(2,p-1,c,p)&&(g|=1),g<<=1,this.readModule(3,p-1,c,p)&&(g|=1),g}readCorner2(c,p){let g=0;return this.readModule(c-3,0,c,p)&&(g|=1),g<<=1,this.readModule(c-2,0,c,p)&&(g|=1),g<<=1,this.readModule(c-1,0,c,p)&&(g|=1),g<<=1,this.readModule(0,p-4,c,p)&&(g|=1),g<<=1,this.readModule(0,p-3,c,p)&&(g|=1),g<<=1,this.readModule(0,p-2,c,p)&&(g|=1),g<<=1,this.readModule(0,p-1,c,p)&&(g|=1),g<<=1,this.readModule(1,p-1,c,p)&&(g|=1),g}readCorner3(c,p){let g=0;return this.readModule(c-1,0,c,p)&&(g|=1),g<<=1,this.readModule(c-1,p-1,c,p)&&(g|=1),g<<=1,this.readModule(0,p-3,c,p)&&(g|=1),g<<=1,this.readModule(0,p-2,c,p)&&(g|=1),g<<=1,this.readModule(0,p-1,c,p)&&(g|=1),g<<=1,this.readModule(1,p-3,c,p)&&(g|=1),g<<=1,this.readModule(1,p-2,c,p)&&(g|=1),g<<=1,this.readModule(1,p-1,c,p)&&(g|=1),g}readCorner4(c,p){let g=0;return this.readModule(c-3,0,c,p)&&(g|=1),g<<=1,this.readModule(c-2,0,c,p)&&(g|=1),g<<=1,this.readModule(c-1,0,c,p)&&(g|=1),g<<=1,this.readModule(0,p-2,c,p)&&(g|=1),g<<=1,this.readModule(0,p-1,c,p)&&(g|=1),g<<=1,this.readModule(1,p-1,c,p)&&(g|=1),g<<=1,this.readModule(2,p-1,c,p)&&(g|=1),g<<=1,this.readModule(3,p-1,c,p)&&(g|=1),g}extractDataRegion(c){let p=this.version.getSymbolSizeRows(),g=this.version.getSymbolSizeColumns();if(c.getHeight()!==p)throw new y("Dimension of bitMatrix must match the version size");let u=this.version.getDataRegionSizeRows(),_=this.version.getDataRegionSizeColumns(),b=p/u|0,C=g/_|0,P=b*u,E=C*_,D=new De(E,P);for(let V=0;V<b;++V){let z=V*u;for(let $=0;$<C;++$){let X=$*_;for(let ee=0;ee<u;++ee){let ne=V*(u+2)+1+ee,oe=z+ee;for(let ve=0;ve<_;++ve){let ke=$*(_+2)+1+ve;if(c.get(ke,ne)){let me=X+ve;D.set(me,oe)}}}}}return D}}class v0{constructor(c,p){this.numDataCodewords=c,this.codewords=p}static getDataBlocks(c,p){let g=p.getECBlocks(),u=0,_=g.getECBlocks();for(let ee of _)u+=ee.getCount();let b=new Array(u),C=0;for(let ee of _)for(let ne=0;ne<ee.getCount();ne++){let oe=ee.getDataCodewords(),ve=g.getECCodewords()+oe;b[C++]=new v0(oe,new Uint8Array(ve))}let E=b[0].codewords.length-g.getECCodewords(),D=E-1,V=0;for(let ee=0;ee<D;ee++)for(let ne=0;ne<C;ne++)b[ne].codewords[ee]=c[V++];let z=p.getVersionNumber()===24,$=z?8:C;for(let ee=0;ee<$;ee++)b[ee].codewords[E-1]=c[V++];let X=b[0].codewords.length;for(let ee=E;ee<X;ee++)for(let ne=0;ne<C;ne++){let oe=z?(ne+8)%C:ne,ve=z&&oe>7?ee-1:ee;b[oe].codewords[ve]=c[V++]}if(V!==c.length)throw new y;return b}getNumDataCodewords(){return this.numDataCodewords}
21getCodewords(){return this.codewords}}class b0{constructor(c){this.bytes=c,this.byteOffset=0,this.bitOffset=0}getBitOffset(){return this.bitOffset}getByteOffset(){return this.byteOffset}readBits(c){if(c<1||c>32||c>this.available())throw new y(""+c);let p=0,g=this.bitOffset,u=this.byteOffset,_=this.bytes;if(g>0){let b=8-g,C=c<b?c:b,P=b-C,E=255>>8-C<<P;p=(_[u]&E)>>P,c-=C,g+=C,g===8&&(g=0,u++)}if(c>0){for(;c>=8;)p=p<<8|_[u]&255,u++,c-=8;if(c>0){let b=8-c,C=255>>b<<b;p=p<<c|(_[u]&C)>>b,g+=c}}return this.bitOffset=g,this.byteOffset=u,p}available(){return 8*(this.bytes.length-this.byteOffset)-this.bitOffset}}var _n=function(T){return T[T.PAD_ENCODE=0]="PAD_ENCODE",T[T.ASCII_ENCODE=1]="ASCII_ENCODE",T[T.C40_ENCODE=2]="C40_ENCODE",T[T.TEXT_ENCODE=3]="TEXT_ENCODE",T[T.ANSIX12_ENCODE=4]="ANSIX12_ENCODE",T[T.EDIFACT_ENCODE=5]="EDIFACT_ENCODE",T[T.BASE256_ENCODE=6]="BASE256_ENCODE",T}(_n||{});class No{static decode(c){let p=new b0(c),g=new Ce,u=new Ce,_=new Array,b=_n.ASCII_ENCODE;do if(b===_n.ASCII_ENCODE)b=this.decodeAsciiSegment(p,g,u);else{switch(b){case _n.C40_ENCODE:this.decodeC40Segment(p,g);break;case _n.TEXT_ENCODE:this.decodeTextSegment(p,g);break;case _n.ANSIX12_ENCODE:this.decodeAnsiX12Segment(p,g);break;case _n.EDIFACT_ENCODE:this.decodeEdifactSegment(p,g);break;case _n.BASE256_ENCODE:this.decodeBase256Segment(p,g,_);break;default:throw new U}b=_n.ASCII_ENCODE}while(b!==_n.PAD_ENCODE&&p.available()>0);return u.length()>0&&g.append(u.toString()),new gs(c,g.toString(),_.length===0?null:_,null)}static decodeAsciiSegment(c,p,g){let u=!1;do{let _=c.readBits(8);if(_===0)throw new U;if(_<=128)return u&&(_+=128),p.append(String.fromCharCode(_-1)),_n.ASCII_ENCODE;if(_===129)return _n.PAD_ENCODE;if(_<=229){let b=_-130;b<10&&p.append("0"),p.append(""+b)}else switch(_){case 230:return _n.C40_ENCODE;case 231:return _n.BASE256_ENCODE;case 232:p.append("�");break;case 233:case 234:break;case 235:u=!0;break;case 236:p.append("[)>�05�"),g.insert(0,"��");break;case 237:p.append("[)>�06�"),g.insert(0,"��");break;case 238:return _n.ANSIX12_ENCODE;case 239:return _n.TEXT_ENCODE;case 240:return _n.EDIFACT_ENCODE;case 241:break;default:if(_!==254||c.available()!==0)throw new U;break}}while(c.available()>0);return _n.ASCII_ENCODE}static decodeC40Segment(c,p){let g=!1,u=[],_=0;do{if(c.available()===8)return;let b=c.readBits(8);if(b===254)return;this.parseTwoBytes(b,c.readBits(8),u);for(let C=0;C<3;C++){let P=u[C];switch(_){case 0:if(P<3)_=P+1;else if(P<this.C40_BASIC_SET_CHARS.length){let E=this.C40_BASIC_SET_CHARS[P];g?(p.append(String.fromCharCode(E.charCodeAt(0)+128)),g=!1):p.append(E)}else throw new U;break;case 1:g?(p.append(String.fromCharCode(P+128)),g=!1):p.append(String.fromCharCode(P)),_=0;break;case 2:if(P<this.C40_SHIFT2_SET_CHARS.length){let E=this.C40_SHIFT2_SET_CHARS[P];g?(p.append(String.fromCharCode(E.charCodeAt(0)+128)),g=!1):p.append(E)}else switch(P){case 27:p.append("�");break;case 30:g=!0;break;default:throw new U}_=0;break;case 3:g?(p.append(String.fromCharCode(P+224)),g=!1):p.append(String.fromCharCode(P+96)),_=0;break;default:throw new U}}}while(c.available()>0)}static decodeTextSegment(c,p){let g=!1,u=[],_=0;do{if(c.available()===8)return;let b=c.readBits(8);if(b===254)return;this.parseTwoBytes(b,c.readBits(8),u);for(let C=0;C<3;C++){let P=u[C];switch(_){case 0:if(P<3)_=P+1;else if(P<this.TEXT_BASIC_SET_CHARS.length){let E=this.TEXT_BASIC_SET_CHARS[P];g?(p.append(String.fromCharCode(E.charCodeAt(0)+128)),g=!1):p.append(E)}else throw new U;break;case 1:g?(p.append(String.fromCharCode(P+128)),g=!1):p.append(String.fromCharCode(P)),_=0;break;case 2:if(P<this.TEXT_SHIFT2_SET_CHARS.length){let E=this.TEXT_SHIFT2_SET_CHARS[P];g?(p.append(String.fromCharCode(E.charCodeAt(0)+128)),g=!1):p.append(E)}else switch(P){case 27:p.append("�");break;case 30:g=!0;break;default:throw new U}_=0;break;case 3:if(P<this.TEXT_SHIFT3_SET_CHARS.length){let E=this.TEXT_SHIFT3_SET_CHARS[P];g?(p.append(String.fromCharCode(E.charCodeAt(0)+128)),g=!1):p.append(E),_=0}else throw new U;break;default:throw new U}}}while(c.available()>0)}static decodeAnsiX12Segment(c,p){let g=[];do{if(c.available()===8)return;let u=c.readBits(8);if(u===254)return;this.parseTwoBytes(u,c.readBits(8),g);for(let _=0;_<3;_++){let b=g[_];switch(b){case 0:p.append("\r");break;case 1:p.append("*");break;case 2:p.append(">");break;case 3:p.append(" ");break;default:if(b<14)p.append(String.fromCharCode(b+44));else if(b<40)p.append(String.fromCharCode(b+51));else throw new U;break}}}while(c.available()>0)}static parseTwoBytes(c,p,g){let u=(c<<8)+p-1,_=Math.floor(u/1600);g[0]=_,u-=_*1600,_=Math.floor(u/40),g[1]=_,g[2]=u-_*40}static decodeEdifactSegment(c,p){do{if(c.available()<=16)return;for(let g=0;g<4;g++){let u=c.readBits(6);if(u===31){let _=8-c.getBitOffset();_!==8&&c.readBits(_);return}(u&32)===0&&(u|=64),p.append(String.fromCharCode(u))}}while(c.available()>0)}static decodeBase256Segment(c,p,g){let u=1+c.getByteOffset(),_=this.unrandomize255State(c.readBits(8),u++),b;if(_===0?b=c.available()/8|0:_<250?b=_:b=250*(_-249)+this.unrandomize255State(c.readBits(8),u++),b<0)throw new U;let C=new Uint8Array(b);for(let P=0;P<b;P++){if(c.available()<8)throw new U;C[P]=this.unrandomize255State(c.readBits(8),u++)}g.push(C);try{p.append(xe.decode(C,he.ISO88591))}catch(P){throw new co("Platform does not support required encoding: "+P.message)}}static unrandomize255State(c,p){let g=149*p%255+1,u=c-g;return u>=0?u:u+256}}No.C40_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"],No.C40_SHIFT2_SET_CHARS=["!",'"',"#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","@","[","\\","]","^","_"],No.TEXT_BASIC_SET_CHARS=["*","*","*"," ","0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"],No.TEXT_SHIFT2_SET_CHARS=No.C40_SHIFT2_SET_CHARS,No.TEXT_SHIFT3_SET_CHARS=["`","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","{","|","}","~","\x7F"];class ay{constructor(){this.rsDecoder=new hs(_t.DATA_MATRIX_FIELD_256)}decode(c){let p=new x0(c),g=p.getVersion(),u=p.readCodewords(),_=v0.getDataBlocks(u,g),b=0;for(let E of _)b+=E.getNumDataCodewords();let C=new Uint8Array(b),P=_.length;for(let E=0;E<P;E++){let D=_[E],V=D.getCodewords(),z=D.getNumDataCodewords();this.correctErrors(V,z);for(let $=0;$<z;$++)C[$*P+E]=V[$]}return No.decode(C)}correctErrors(c,p){let g=new Int32Array(c);try{this.rsDecoder.decode(g,c.length-p)}catch{throw new I}for(let u=0;u<p;u++)c[u]=g[u]}}class nn{constructor(c){this.image=c,this.rectangleDetector=new El(this.image)}detect(){let c=this.rectangleDetector.detect(),p=this.detectSolid1(c);if(p=this.detectSolid2(p),p[3]=this.correctTopRight(p),!p[3])throw new se;p=this.shiftToModuleCenter(p);let g=p[0],u=p[1],_=p[2],b=p[3],C=this.transitionsBetween(g,b)+1,P=this.transitionsBetween(_,b)+1;(C&1)===1&&(C+=1),(P&1)===1&&(P+=1),4*C<7*P&&4*P<7*C&&(C=P=Math.max(C,P));let E=nn.sampleGrid(this.image,g,u,_,b,C,P);return new Ol(E,[g,u,_,b])}static shiftPoint(c,p,g){let u=(p.getX()-c.getX())/(g+1),_=(p.getY()-c.getY())/(g+1);return new Re(c.getX()+u,c.getY()+_)}static moveAway(c,p,g){let u=c.getX(),_=c.getY();return u<p?u-=1:u+=1,_<g?_-=1:_+=1,new Re(u,_)}
21detectSolid1(c){let p=c[0],g=c[1],u=c[3],_=c[2],b=this.transitionsBetween(p,g),C=this.transitionsBetween(g,u),P=this.transitionsBetween(u,_),E=this.transitionsBetween(_,p),D=b,V=[_,p,g,u];return D>C&&(D=C,V[0]=p,V[1]=g,V[2]=u,V[3]=_),D>P&&(D=P,V[0]=g,V[1]=u,V[2]=_,V[3]=p),D>E&&(V[0]=u,V[1]=_,V[2]=p,V[3]=g),V}detectSolid2(c){let p=c[0],g=c[1],u=c[2],_=c[3],b=this.transitionsBetween(p,_),C=nn.shiftPoint(g,u,(b+1)*4),P=nn.shiftPoint(u,g,(b+1)*4),E=this.transitionsBetween(C,p),D=this.transitionsBetween(P,_);return E<D?(c[0]=p,c[1]=g,c[2]=u,c[3]=_):(c[0]=g,c[1]=u,c[2]=_,c[3]=p),c}correctTopRight(c){let p=c[0],g=c[1],u=c[2],_=c[3],b=this.transitionsBetween(p,_),C=this.transitionsBetween(g,_),P=nn.shiftPoint(p,g,(C+1)*4),E=nn.shiftPoint(u,g,(b+1)*4);b=this.transitionsBetween(P,_),C=this.transitionsBetween(E,_);let D=new Re(_.getX()+(u.getX()-g.getX())/(b+1),_.getY()+(u.getY()-g.getY())/(b+1)),V=new Re(_.getX()+(p.getX()-g.getX())/(C+1),_.getY()+(p.getY()-g.getY())/(C+1));if(!this.isValid(D))return this.isValid(V)?V:null;if(!this.isValid(V))return D;let z=this.transitionsBetween(P,D)+this.transitionsBetween(E,D),$=this.transitionsBetween(P,V)+this.transitionsBetween(E,V);return z>$?D:V}shiftToModuleCenter(c){let p=c[0],g=c[1],u=c[2],_=c[3],b=this.transitionsBetween(p,_)+1,C=this.transitionsBetween(u,_)+1,P=nn.shiftPoint(p,g,C*4),E=nn.shiftPoint(u,g,b*4);b=this.transitionsBetween(P,_)+1,C=this.transitionsBetween(E,_)+1,(b&1)===1&&(b+=1),(C&1)===1&&(C+=1);let D=(p.getX()+g.getX()+u.getX()+_.getX())/4,V=(p.getY()+g.getY()+u.getY()+_.getY())/4;p=nn.moveAway(p,D,V),g=nn.moveAway(g,D,V),u=nn.moveAway(u,D,V),_=nn.moveAway(_,D,V);let z,$;return P=nn.shiftPoint(p,g,C*4),P=nn.shiftPoint(P,_,b*4),z=nn.shiftPoint(g,p,C*4),z=nn.shiftPoint(z,u,b*4),E=nn.shiftPoint(u,_,C*4),E=nn.shiftPoint(E,g,b*4),$=nn.shiftPoint(_,u,C*4),$=nn.shiftPoint($,p,b*4),[P,z,E,$]}isValid(c){return c.getX()>=0&&c.getX()<this.image.getWidth()&&c.getY()>0&&c.getY()<this.image.getHeight()}static sampleGrid(c,p,g,u,_,b,C){return Do.getInstance().sampleGrid(c,b,C,.5,.5,b-.5,.5,b-.5,C-.5,.5,C-.5,p.getX(),p.getY(),_.getX(),_.getY(),u.getX(),u.getY(),g.getX(),g.getY())}transitionsBetween(c,p){let g=Math.trunc(c.getX()),u=Math.trunc(c.getY()),_=Math.trunc(p.getX()),b=Math.trunc(p.getY()),C=Math.abs(b-u)>Math.abs(_-g);if(C){let ee=g;g=u,u=ee,ee=_,_=b,b=ee}let P=Math.abs(_-g),E=Math.abs(b-u),D=-P/2,V=u<b?1:-1,z=g<_?1:-1,$=0,X=this.image.get(C?u:g,C?g:u);for(let ee=g,ne=u;ee!==_;ee+=z){let oe=this.image.get(C?ne:ee,C?ee:ne);if(oe!==X&&($++,X=oe),D+=E,D>0){if(ne===b)break;ne+=V,D-=P}}return $}}let Rl=(()=>{class T{constructor(){this.decoder=new ay}decode(p,g=null){let u,_;if(g!=null&&g.has(Y.PURE_BARCODE)){let D=T.extractPureBits(p.getBlackMatrix());u=this.decoder.decode(D),_=T.NO_POINTS}else{let D=new nn(p.getBlackMatrix()).detect();u=this.decoder.decode(D.getBits()),_=D.getPoints()}let b=u.getRawBytes(),C=new $t(u.getText(),b,8*b.length,_,Ne.DATA_MATRIX,N.currentTimeMillis()),P=u.getByteSegments();P!=null&&C.putMetadata(Bt.BYTE_SEGMENTS,P);let E=u.getECLevel();return E!=null&&C.putMetadata(Bt.ERROR_CORRECTION_LEVEL,E),C}reset(){}static extractPureBits(p){let g=p.getTopLeftOnBit(),u=p.getBottomRightOnBit();if(g==null||u==null)throw new se;let _=this.moduleSize(g,p),b=g[1],C=u[1],P=g[0],D=(u[0]-P+1)/_,V=(C-b+1)/_;if(D<=0||V<=0)throw new se;let z=_/2;b+=z,P+=z;let $=new De(D,V);for(let X=0;X<V;X++){let ee=b+X*_;for(let ne=0;ne<D;ne++)p.get(P+ne*_,ee)&&$.set(ne,X)}return $}static moduleSize(p,g){let u=g.getWidth(),_=p[0],b=p[1];for(;_<u&&g.get(_,b);)_++;if(_===u)throw new se;let C=_-p[0];if(C===0)throw new se;return C}}return T.NO_POINTS=[],T})();class sy extends pi{constructor(c=500){super(new Rl,c)}}var xs=function(T){return T[T.L=0]="L",T[T.M=1]="M",T[T.Q=2]="Q",T[T.H=3]="H",T}(xs||{});class Nt{constructor(c,p,g){this.value=c,this.stringValue=p,this.bits=g,Nt.FOR_BITS.set(g,this),Nt.FOR_VALUE.set(c,this)}getValue(){return this.value}getBits(){return this.bits}static fromString(c){switch(c){case"L":return Nt.L;case"M":return Nt.M;case"Q":return Nt.Q;case"H":return Nt.H;default:throw new v(c+"not available")}}toString(){return this.stringValue}equals(c){if(!(c instanceof Nt))return!1;let p=c;return this.value===p.value}static forBits(c){if(c<0||c>=Nt.FOR_BITS.size)throw new y;return Nt.FOR_BITS.get(c)}}Nt.FOR_BITS=new Map,Nt.FOR_VALUE=new Map,Nt.L=new Nt(xs.L,"L",1),Nt.M=new Nt(xs.M,"M",0),Nt.Q=new Nt(xs.Q,"Q",3),Nt.H=new Nt(xs.H,"H",2);class Bn{constructor(c){this.errorCorrectionLevel=Nt.forBits(c>>3&3),this.dataMask=c&7}static numBitsDiffering(c,p){return Z.bitCount(c^p)}static decodeFormatInformation(c,p){let g=Bn.doDecodeFormatInformation(c,p);return g!==null?g:Bn.doDecodeFormatInformation(c^Bn.FORMAT_INFO_MASK_QR,p^Bn.FORMAT_INFO_MASK_QR)}static doDecodeFormatInformation(c,p){let g=Number.MAX_SAFE_INTEGER,u=0;for(let _ of Bn.FORMAT_INFO_DECODE_LOOKUP){let b=_[0];if(b===c||b===p)return new Bn(_[1]);let C=Bn.numBitsDiffering(c,b);C<g&&(u=_[1],g=C),c!==p&&(C=Bn.numBitsDiffering(p,b),C<g&&(u=_[1],g=C))}return g<=3?new Bn(u):null}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getDataMask(){return this.dataMask}hashCode(){return this.errorCorrectionLevel.getBits()<<3|this.dataMask}equals(c){if(!(c instanceof Bn))return!1;let p=c;return this.errorCorrectionLevel===p.errorCorrectionLevel&&this.dataMask===p.dataMask}}Bn.FORMAT_INFO_MASK_QR=21522,Bn.FORMAT_INFO_DECODE_LOOKUP=[Int32Array.from([21522,0]),Int32Array.from([20773,1]),Int32Array.from([24188,2]),Int32Array.from([23371,3]),Int32Array.from([17913,4]),Int32Array.from([16590,5]),Int32Array.from([20375,6]),Int32Array.from([19104,7]),Int32Array.from([30660,8]),Int32Array.from([29427,9]),Int32Array.from([32170,10]),Int32Array.from([30877,11]),Int32Array.from([26159,12]),Int32Array.from([25368,13]),Int32Array.from([27713,14]),Int32Array.from([26998,15]),Int32Array.from([5769,16]),Int32Array.from([5054,17]),Int32Array.from([7399,18]),Int32Array.from([6608,19]),Int32Array.from([1890,20]),Int32Array.from([597,21]),Int32Array.from([3340,22]),Int32Array.from([2107,23]),Int32Array.from([13663,24]),Int32Array.from([12392,25]),Int32Array.from([16177,26]),Int32Array.from([14854,27]),Int32Array.from([9396,28]),Int32Array.from([8579,29]),Int32Array.from([11994,30]),Int32Array.from([11245,31])];class ie{constructor(c,...p){this.ecCodewordsPerBlock=c,this.ecBlocks=p}getECCodewordsPerBlock(){return this.ecCodewordsPerBlock}getNumBlocks(){let c=0,p=this.ecBlocks;for(let g of p)c+=g.getCount();return c}getTotalECCodewords(){return this.ecCodewordsPerBlock*this.getNumBlocks()}getECBlocks(){return this.ecBlocks}}class q{constructor(c,p){this.count=c,this.dataCodewords=p}getCount(){return this.count}getDataCodewords(){return this.dataCodewords}}class Ve{constructor(c,p,...g){this.versionNumber=c,this.alignmentPatternCenters=p,this.ecBlocks=g;let u=0,_=g[0].getECCodewordsPerBlock(),b=g[0].getECBlocks();for(let C of b)u+=C.getCount()*(C.getDataCodewords()+_);this.totalCodewords=u}getVersionNumber(){return this.versionNumber}getAlignmentPatternCenters(){return this.alignmentPatternCenters}getTotalCodewords(){return this.totalCodewords}getDimensionForVersion(){return 17+4*this.versionNumber}getECBlocksForLevel(c){return this.ecBlocks[c.getValue()]}static getProvisionalVersionForDimension(c){if(c%4!==1)throw new U;try{return this.getVersionForNumber((c-17)/4)}catch{throw new U}}static getVersionForNumber(c){if(c<1||c>40)throw new y;return Ve.VERSIONS[c-1]}static decodeVersionInformation(c){let p=Number.MAX_SAFE_INTEGER,g=0;for(let u=0;u<Ve.VERSION_DECODE_INFO.length;u++){let _=Ve.VERSION_DECODE_INFO[u];
21if(_===c)return Ve.getVersionForNumber(u+7);let b=Bn.numBitsDiffering(c,_);b<p&&(g=u+7,p=b)}return p<=3?Ve.getVersionForNumber(g):null}buildFunctionPattern(){let c=this.getDimensionForVersion(),p=new De(c);p.setRegion(0,0,9,9),p.setRegion(c-8,0,8,9),p.setRegion(0,c-8,9,8);let g=this.alignmentPatternCenters.length;for(let u=0;u<g;u++){let _=this.alignmentPatternCenters[u]-2;for(let b=0;b<g;b++)u===0&&(b===0||b===g-1)||u===g-1&&b===0||p.setRegion(this.alignmentPatternCenters[b]-2,_,5,5)}return p.setRegion(6,9,1,c-17),p.setRegion(9,6,c-17,1),this.versionNumber>6&&(p.setRegion(c-11,0,3,6),p.setRegion(0,c-11,6,3)),p}toString(){return""+this.versionNumber}}Ve.VERSION_DECODE_INFO=Int32Array.from([31892,34236,39577,42195,48118,51042,55367,58893,63784,68472,70749,76311,79154,84390,87683,92361,96236,102084,102881,110507,110734,117786,119615,126325,127568,133589,136944,141498,145311,150283,152622,158308,161089,167017]),Ve.VERSIONS=[new Ve(1,new Int32Array(0),new ie(7,new q(1,19)),new ie(10,new q(1,16)),new ie(13,new q(1,13)),new ie(17,new q(1,9))),new Ve(2,Int32Array.from([6,18]),new ie(10,new q(1,34)),new ie(16,new q(1,28)),new ie(22,new q(1,22)),new ie(28,new q(1,16))),new Ve(3,Int32Array.from([6,22]),new ie(15,new q(1,55)),new ie(26,new q(1,44)),new ie(18,new q(2,17)),new ie(22,new q(2,13))),new Ve(4,Int32Array.from([6,26]),new ie(20,new q(1,80)),new ie(18,new q(2,32)),new ie(26,new q(2,24)),new ie(16,new q(4,9))),new Ve(5,Int32Array.from([6,30]),new ie(26,new q(1,108)),new ie(24,new q(2,43)),new ie(18,new q(2,15),new q(2,16)),new ie(22,new q(2,11),new q(2,12))),new Ve(6,Int32Array.from([6,34]),new ie(18,new q(2,68)),new ie(16,new q(4,27)),new ie(24,new q(4,19)),new ie(28,new q(4,15))),new Ve(7,Int32Array.from([6,22,38]),new ie(20,new q(2,78)),new ie(18,new q(4,31)),new ie(18,new q(2,14),new q(4,15)),new ie(26,new q(4,13),new q(1,14))),new Ve(8,Int32Array.from([6,24,42]),new ie(24,new q(2,97)),new ie(22,new q(2,38),new q(2,39)),new ie(22,new q(4,18),new q(2,19)),new ie(26,new q(4,14),new q(2,15))),new Ve(9,Int32Array.from([6,26,46]),new ie(30,new q(2,116)),new ie(22,new q(3,36),new q(2,37)),new ie(20,new q(4,16),new q(4,17)),new ie(24,new q(4,12),new q(4,13))),new Ve(10,Int32Array.from([6,28,50]),new ie(18,new q(2,68),new q(2,69)),new ie(26,new q(4,43),new q(1,44)),new ie(24,new q(6,19),new q(2,20)),new ie(28,new q(6,15),new q(2,16))),new Ve(11,Int32Array.from([6,30,54]),new ie(20,new q(4,81)),new ie(30,new q(1,50),new q(4,51)),new ie(28,new q(4,22),new q(4,23)),new ie(24,new q(3,12),new q(8,13))),new Ve(12,Int32Array.from([6,32,58]),new ie(24,new q(2,92),new q(2,93)),new ie(22,new q(6,36),new q(2,37)),new ie(26,new q(4,20),new q(6,21)),new ie(28,new q(7,14),new q(4,15))),new Ve(13,Int32Array.from([6,34,62]),new ie(26,new q(4,107)),new ie(22,new q(8,37),new q(1,38)),new ie(24,new q(8,20),new q(4,21)),new ie(22,new q(12,11),new q(4,12))),new Ve(14,Int32Array.from([6,26,46,66]),new ie(30,new q(3,115),new q(1,116)),new ie(24,new q(4,40),new q(5,41)),new ie(20,new q(11,16),new q(5,17)),new ie(24,new q(11,12),new q(5,13))),new Ve(15,Int32Array.from([6,26,48,70]),new ie(22,new q(5,87),new q(1,88)),new ie(24,new q(5,41),new q(5,42)),new ie(30,new q(5,24),new q(7,25)),new ie(24,new q(11,12),new q(7,13))),new Ve(16,Int32Array.from([6,26,50,74]),new ie(24,new q(5,98),new q(1,99)),new ie(28,new q(7,45),new q(3,46)),new ie(24,new q(15,19),new q(2,20)),new ie(30,new q(3,15),new q(13,16))),new Ve(17,Int32Array.from([6,30,54,78]),new ie(28,new q(1,107),new q(5,108)),new ie(28,new q(10,46),new q(1,47)),new ie(28,new q(1,22),new q(15,23)),new ie(28,new q(2,14),new q(17,15))),new Ve(18,Int32Array.from([6,30,56,82]),new ie(30,new q(5,120),new q(1,121)),new ie(26,new q(9,43),new q(4,44)),new ie(28,new q(17,22),new q(1,23)),new ie(28,new q(2,14),new q(19,15))),new Ve(19,Int32Array.from([6,30,58,86]),new ie(28,new q(3,113),new q(4,114)),new ie(26,new q(3,44),new q(11,45)),new ie(26,new q(17,21),new q(4,22)),new ie(26,new q(9,13),new q(16,14))),new Ve(20,Int32Array.from([6,34,62,90]),new ie(28,new q(3,107),new q(5,108)),new ie(26,new q(3,41),new q(13,42)),new ie(30,new q(15,24),new q(5,25)),new ie(28,new q(15,15),new q(10,16))),new Ve(21,Int32Array.from([6,28,50,72,94]),new ie(28,new q(4,116),new q(4,117)),new ie(26,new q(17,42)),new ie(28,new q(17,22),new q(6,23)),new ie(30,new q(19,16),new q(6,17))),new Ve(22,Int32Array.from([6,26,50,74,98]),new ie(28,new q(2,111),new q(7,112)),new ie(28,new q(17,46)),new ie(30,new q(7,24),new q(16,25)),new ie(24,new q(34,13))),new Ve(23,Int32Array.from([6,30,54,78,102]),new ie(30,new q(4,121),new q(5,122)),new ie(28,new q(4,47),new q(14,48)),new ie(30,new q(11,24),new q(14,25)),new ie(30,new q(16,15),new q(14,16))
21),new Ve(24,Int32Array.from([6,28,54,80,106]),new ie(30,new q(6,117),new q(4,118)),new ie(28,new q(6,45),new q(14,46)),new ie(30,new q(11,24),new q(16,25)),new ie(30,new q(30,16),new q(2,17))),new Ve(25,Int32Array.from([6,32,58,84,110]),new ie(26,new q(8,106),new q(4,107)),new ie(28,new q(8,47),new q(13,48)),new ie(30,new q(7,24),new q(22,25)),new ie(30,new q(22,15),new q(13,16))),new Ve(26,Int32Array.from([6,30,58,86,114]),new ie(28,new q(10,114),new q(2,115)),new ie(28,new q(19,46),new q(4,47)),new ie(28,new q(28,22),new q(6,23)),new ie(30,new q(33,16),new q(4,17))),new Ve(27,Int32Array.from([6,34,62,90,118]),new ie(30,new q(8,122),new q(4,123)),new ie(28,new q(22,45),new q(3,46)),new ie(30,new q(8,23),new q(26,24)),new ie(30,new q(12,15),new q(28,16))),new Ve(28,Int32Array.from([6,26,50,74,98,122]),new ie(30,new q(3,117),new q(10,118)),new ie(28,new q(3,45),new q(23,46)),new ie(30,new q(4,24),new q(31,25)),new ie(30,new q(11,15),new q(31,16))),new Ve(29,Int32Array.from([6,30,54,78,102,126]),new ie(30,new q(7,116),new q(7,117)),new ie(28,new q(21,45),new q(7,46)),new ie(30,new q(1,23),new q(37,24)),new ie(30,new q(19,15),new q(26,16))),new Ve(30,Int32Array.from([6,26,52,78,104,130]),new ie(30,new q(5,115),new q(10,116)),new ie(28,new q(19,47),new q(10,48)),new ie(30,new q(15,24),new q(25,25)),new ie(30,new q(23,15),new q(25,16))),new Ve(31,Int32Array.from([6,30,56,82,108,134]),new ie(30,new q(13,115),new q(3,116)),new ie(28,new q(2,46),new q(29,47)),new ie(30,new q(42,24),new q(1,25)),new ie(30,new q(23,15),new q(28,16))),new Ve(32,Int32Array.from([6,34,60,86,112,138]),new ie(30,new q(17,115)),new ie(28,new q(10,46),new q(23,47)),new ie(30,new q(10,24),new q(35,25)),new ie(30,new q(19,15),new q(35,16))),new Ve(33,Int32Array.from([6,30,58,86,114,142]),new ie(30,new q(17,115),new q(1,116)),new ie(28,new q(14,46),new q(21,47)),new ie(30,new q(29,24),new q(19,25)),new ie(30,new q(11,15),new q(46,16))),new Ve(34,Int32Array.from([6,34,62,90,118,146]),new ie(30,new q(13,115),new q(6,116)),new ie(28,new q(14,46),new q(23,47)),new ie(30,new q(44,24),new q(7,25)),new ie(30,new q(59,16),new q(1,17))),new Ve(35,Int32Array.from([6,30,54,78,102,126,150]),new ie(30,new q(12,121),new q(7,122)),new ie(28,new q(12,47),new q(26,48)),new ie(30,new q(39,24),new q(14,25)),new ie(30,new q(22,15),new q(41,16))),new Ve(36,Int32Array.from([6,24,50,76,102,128,154]),new ie(30,new q(6,121),new q(14,122)),new ie(28,new q(6,47),new q(34,48)),new ie(30,new q(46,24),new q(10,25)),new ie(30,new q(2,15),new q(64,16))),new Ve(37,Int32Array.from([6,28,54,80,106,132,158]),new ie(30,new q(17,122),new q(4,123)),new ie(28,new q(29,46),new q(14,47)),new ie(30,new q(49,24),new q(10,25)),new ie(30,new q(24,15),new q(46,16))),new Ve(38,Int32Array.from([6,32,58,84,110,136,162]),new ie(30,new q(4,122),new q(18,123)),new ie(28,new q(13,46),new q(32,47)),new ie(30,new q(48,24),new q(14,25)),new ie(30,new q(42,15),new q(32,16))),new Ve(39,Int32Array.from([6,26,54,82,110,138,166]),new ie(30,new q(20,117),new q(4,118)),new ie(28,new q(40,47),new q(7,48)),new ie(30,new q(43,24),new q(22,25)),new ie(30,new q(10,15),new q(67,16))),new Ve(40,Int32Array.from([6,30,58,86,114,142,170]),new ie(30,new q(19,118),new q(6,119)),new ie(28,new q(18,47),new q(31,48)),new ie(30,new q(34,24),new q(34,25)),new ie(30,new q(20,15),new q(61,16)))];var Pn=function(T){return T[T.DATA_MASK_000=0]="DATA_MASK_000",T[T.DATA_MASK_001=1]="DATA_MASK_001",T[T.DATA_MASK_010=2]="DATA_MASK_010",T[T.DATA_MASK_011=3]="DATA_MASK_011",T[T.DATA_MASK_100=4]="DATA_MASK_100",T[T.DATA_MASK_101=5]="DATA_MASK_101",T[T.DATA_MASK_110=6]="DATA_MASK_110",T[T.DATA_MASK_111=7]="DATA_MASK_111",T}(Pn||{});class mi{constructor(c,p){this.value=c,this.isMasked=p}unmaskBitMatrix(c,p){for(let g=0;g<p;g++)for(let u=0;u<p;u++)this.isMasked(g,u)&&c.flip(u,g)}}mi.values=new Map([[Pn.DATA_MASK_000,new mi(Pn.DATA_MASK_000,(T,c)=>(T+c&1)===0)],[Pn.DATA_MASK_001,new mi(Pn.DATA_MASK_001,(T,c)=>(T&1)===0)],[Pn.DATA_MASK_010,new mi(Pn.DATA_MASK_010,(T,c)=>c%3===0)],[Pn.DATA_MASK_011,new mi(Pn.DATA_MASK_011,(T,c)=>(T+c)%3===0)],[Pn.DATA_MASK_100,new mi(Pn.DATA_MASK_100,(T,c)=>(Math.floor(T/2)+Math.floor(c/3)&1)===0)],[Pn.DATA_MASK_101,new mi(Pn.DATA_MASK_101,(T,c)=>T*c%6===0)],[Pn.DATA_MASK_110,new mi(Pn.DATA_MASK_110,(T,c)=>T*c%6<3)],[Pn.DATA_MASK_111,new mi(Pn.DATA_MASK_111,(T,c)=>(T+c+T*c%3&1)===0)]]);class ly{constructor(c){let p=c.getHeight();if(p<21||(p&3)!==1)throw new U;this.bitMatrix=c}readFormatInformation(){if(this.parsedFormatInfo!==null&&this.parsedFormatInfo!==void 0)return this.parsedFormatInfo;let c=0;for(let _=0;_<6;_++)c=this.copyBit(_,8,c);c=this.copyBit(7,8,c),c=this.copyBit(8,8,c),c=this.copyBit(8,7,c);for(let _=5;_>=0;_--)c=this.copyBit(8,_,c);let p=this.bitMatrix.getHeight(),g=0,u=p-7;for(let _=p-1;_>=u;_--)g=this.copyBit(8,_,g);for(let _=p-8;_<p;_++)g=this.copyBit(_,8,g);if(this.parsedFormatInfo=Bn.decodeFormatInformation(c,g),this.parsedFormatInfo!==null)return this.parsedFormatInfo;throw new U}readVersion(){if(this.parsedVersion!==null&&this.parsedVersion!==void 0)return this.parsedVersion;let c=this.bitMatrix.getHeight(),p=Math.floor((c-17)/4);if(p<=6)return Ve.getVersionForNumber(p);let g=0,u=c-11;for(let b=5;b>=0;b--)for(let C=c-9;C>=u;C--)g=this.copyBit(C,b,g);let _=Ve.decodeVersionInformation(g);if(_!==null&&_.getDimensionForVersion()===c)return this.parsedVersion=_,_;g=0;for(let b=5;b>=0;b--)for(let C=c-9;C>=u;C--)g=this.copyBit(b,C,g);if(_=Ve.decodeVersionInformation(g),_!==null&&_.getDimensionForVersion()===c)return this.parsedVersion=_,_;throw new U}copyBit(c,p,g){return(this.isMirror?this.bitMatrix.get(p,c):this.bitMatrix.get(c,p))?g<<1|1:g<<1}readCodewords(){let c=this.readFormatInformation(),p=this.readVersion(),g=mi.values.get(c.getDataMask()),u=this.bitMatrix.getHeight();g.unmaskBitMatrix(this.bitMatrix,u);let _=p.buildFunctionPattern(),b=!0,C=new Uint8Array(p.getTotalCodewords()),P=0,E=0,D=0;for(let V=u-1;V>0;V-=2){V===6&&V--;for(let z=0;z<u;z++){let $=b?u-1-z:z;for(let X=0;X<2;X++)_.get(V-X,$)||(D++,E<<=1,this.bitMatrix.get(V-X,$)&&(E|=1),D===8&&(C[P++]=E,D=0,E=0))}b=!b}if(P!==p.getTotalCodewords())throw new U;return C}remask(){if(this.parsedFormatInfo===null)return;let c=mi.values[this.parsedFormatInfo.getDataMask()],p=this.bitMatrix.getHeight();c.unmaskBitMatrix(this.bitMatrix,p)}setMirror(c){this.parsedVersion=null,this.parsedFormatInfo=null,this.isMirror=c}mirror(){let c=this.bitMatrix;for(let p=0,g=c.getWidth();p<g;p++)for(let u=p+1,_=c.getHeight();u<_;u++)c.get(p,u)!==c.get(u,p)&&(c.flip(u,p),c.flip(p,u))}}class y0{constructor(c,p){this.numDataCodewords=c,this.codewords=p}static getDataBlocks(c,p,g){if(c.length!==p.getTotalCodewords())throw new y;let u=p.getECBlocksForLevel(g),_=0,b=u.getECBlocks();for(let X of b)_+=X.getCount();let C=new Array(_),P=0;for(let X of b)for(let ee=0;ee<X.getCount();ee++){let ne=X.getDataCodewords(),oe=u.getECCodewordsPerBlock()+ne;C[P++]=new y0(ne,new Uint8Array(oe))}let E=C[0].codewords.length,D=C.length-1;for(;D>
21=0&&C[D].codewords.length!==E;)D--;D++;let V=E-u.getECCodewordsPerBlock(),z=0;for(let X=0;X<V;X++)for(let ee=0;ee<P;ee++)C[ee].codewords[X]=c[z++];for(let X=D;X<P;X++)C[X].codewords[V]=c[z++];let $=C[0].codewords.length;for(let X=V;X<$;X++)for(let ee=0;ee<P;ee++){let ne=ee<D?X:X+1;C[ee].codewords[ne]=c[z++]}return C}getNumDataCodewords(){return this.numDataCodewords}getCodewords(){return this.codewords}}var Ai=function(T){return T[T.TERMINATOR=0]="TERMINATOR",T[T.NUMERIC=1]="NUMERIC",T[T.ALPHANUMERIC=2]="ALPHANUMERIC",T[T.STRUCTURED_APPEND=3]="STRUCTURED_APPEND",T[T.BYTE=4]="BYTE",T[T.ECI=5]="ECI",T[T.KANJI=6]="KANJI",T[T.FNC1_FIRST_POSITION=7]="FNC1_FIRST_POSITION",T[T.FNC1_SECOND_POSITION=8]="FNC1_SECOND_POSITION",T[T.HANZI=9]="HANZI",T}(Ai||{});class Fe{constructor(c,p,g,u){this.value=c,this.stringValue=p,this.characterCountBitsForVersions=g,this.bits=u,Fe.FOR_BITS.set(u,this),Fe.FOR_VALUE.set(c,this)}static forBits(c){let p=Fe.FOR_BITS.get(c);if(p===void 0)throw new y;return p}getCharacterCountBits(c){let p=c.getVersionNumber(),g;return p<=9?g=0:p<=26?g=1:g=2,this.characterCountBitsForVersions[g]}getValue(){return this.value}getBits(){return this.bits}equals(c){if(!(c instanceof Fe))return!1;let p=c;return this.value===p.value}toString(){return this.stringValue}}Fe.FOR_BITS=new Map,Fe.FOR_VALUE=new Map,Fe.TERMINATOR=new Fe(Ai.TERMINATOR,"TERMINATOR",Int32Array.from([0,0,0]),0),Fe.NUMERIC=new Fe(Ai.NUMERIC,"NUMERIC",Int32Array.from([10,12,14]),1),Fe.ALPHANUMERIC=new Fe(Ai.ALPHANUMERIC,"ALPHANUMERIC",Int32Array.from([9,11,13]),2),Fe.STRUCTURED_APPEND=new Fe(Ai.STRUCTURED_APPEND,"STRUCTURED_APPEND",Int32Array.from([0,0,0]),3),Fe.BYTE=new Fe(Ai.BYTE,"BYTE",Int32Array.from([8,16,16]),4),Fe.ECI=new Fe(Ai.ECI,"ECI",Int32Array.from([0,0,0]),7),Fe.KANJI=new Fe(Ai.KANJI,"KANJI",Int32Array.from([8,10,12]),8),Fe.FNC1_FIRST_POSITION=new Fe(Ai.FNC1_FIRST_POSITION,"FNC1_FIRST_POSITION",Int32Array.from([0,0,0]),5),Fe.FNC1_SECOND_POSITION=new Fe(Ai.FNC1_SECOND_POSITION,"FNC1_SECOND_POSITION",Int32Array.from([0,0,0]),9),Fe.HANZI=new Fe(Ai.HANZI,"HANZI",Int32Array.from([8,10,12]),13);let Rg=(()=>{class T{static decode(p,g,u,_){let b=new b0(p),C=new Ce,P=new Array,E=-1,D=-1;try{let V=null,z=!1,$;do{if(b.available()<4)$=Fe.TERMINATOR;else{let X=b.readBits(4);$=Fe.forBits(X)}switch($){case Fe.TERMINATOR:break;case Fe.FNC1_FIRST_POSITION:case Fe.FNC1_SECOND_POSITION:z=!0;break;case Fe.STRUCTURED_APPEND:if(b.available()<16)throw new U;E=b.readBits(8),D=b.readBits(8);break;case Fe.ECI:let X=T.parseECIValue(b);if(V=J.getCharacterSetECIByValue(X),V===null)throw new U;break;case Fe.HANZI:let ee=b.readBits(4),ne=b.readBits($.getCharacterCountBits(g));ee===T.GB2312_SUBSET&&T.decodeHanziSegment(b,C,ne);break;default:let oe=b.readBits($.getCharacterCountBits(g));switch($){case Fe.NUMERIC:T.decodeNumericSegment(b,C,oe);break;case Fe.ALPHANUMERIC:T.decodeAlphanumericSegment(b,C,oe,z);break;case Fe.BYTE:T.decodeByteSegment(b,C,oe,V,P,_);break;case Fe.KANJI:T.decodeKanjiSegment(b,C,oe);break;default:throw new U}break}}while($!==Fe.TERMINATOR)}catch{throw new U}return new gs(p,C.toString(),P.length===0?null:P,u===null?null:u.toString(),E,D)}static decodeHanziSegment(p,g,u){if(u*13>p.available())throw new U;let _=new Uint8Array(2*u),b=0;for(;u>0;){let C=p.readBits(13),P=C/96<<8&4294967295|C%96;P<959?P+=41377:P+=42657,_[b]=P>>8&255,_[b+1]=P&255,b+=2,u--}try{g.append(xe.decode(_,he.GB2312))}catch(C){throw new U(C)}}static decodeKanjiSegment(p,g,u){if(u*13>p.available())throw new U;let _=new Uint8Array(2*u),b=0;for(;u>0;){let C=p.readBits(13),P=C/192<<8&4294967295|C%192;P<7936?P+=33088:P+=49472,_[b]=P>>8,_[b+1]=P,b+=2,u--}try{g.append(xe.decode(_,he.SHIFT_JIS))}catch(C){throw new U(C)}}static decodeByteSegment(p,g,u,_,b,C){if(8*u>p.available())throw new U;let P=new Uint8Array(u);for(let D=0;D<u;D++)P[D]=p.readBits(8);let E;_===null?E=he.guessEncoding(P,C):E=_.getName();try{g.append(xe.decode(P,E))}catch(D){throw new U(D)}b.push(P)}static toAlphaNumericChar(p){if(p>=T.ALPHANUMERIC_CHARS.length)throw new U;return T.ALPHANUMERIC_CHARS[p]}static decodeAlphanumericSegment(p,g,u,_){let b=g.length();for(;u>1;){if(p.available()<11)throw new U;let C=p.readBits(11);g.append(T.toAlphaNumericChar(Math.floor(C/45))),g.append(T.toAlphaNumericChar(C%45)),u-=2}if(u===1){if(p.available()<6)throw new U;g.append(T.toAlphaNumericChar(p.readBits(6)))}if(_)for(let C=b;C<g.length();C++)g.charAt(C)==="%"&&(C<g.length()-1&&g.charAt(C+1)==="%"?g.deleteCharAt(C+1):g.setCharAt(C,"�"))}static decodeNumericSegment(p,g,u){for(;u>=3;){if(p.available()<10)throw new U;let _=p.readBits(10);if(_>=1e3)throw new U;g.append(T.toAlphaNumericChar(Math.floor(_/100))),g.append(T.toAlphaNumericChar(Math.floor(_/10)%10)),g.append(T.toAlphaNumericChar(_%10)),u-=3}if(u===2){if(p.available()<7)throw new U;let _=p.readBits(7);if(_>=100)throw new U;g.append(T.toAlphaNumericChar(Math.floor(_/10))),g.append(T.toAlphaNumericChar(_%10))}else if(u===1){if(p.available()<4)throw new U;let _=p.readBits(4);if(_>=10)throw new U;g.append(T.toAlphaNumericChar(_))}}static parseECIValue(p){let g=p.readBits(8);if((g&128)===0)return g&127;
21if((g&192)===128){let u=p.readBits(8);return(g&63)<<8&4294967295|u}if((g&224)===192){let u=p.readBits(16);return(g&31)<<16&4294967295|u}throw new U}}return T.ALPHANUMERIC_CHARS="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:",T.GB2312_SUBSET=1,T})();class Bg{constructor(c){this.mirrored=c}isMirrored(){return this.mirrored}applyMirroredCorrection(c){if(!this.mirrored||c===null||c.length<3)return;let p=c[0];c[0]=c[2],c[2]=p}}class cy{constructor(){this.rsDecoder=new hs(_t.QR_CODE_FIELD_256)}decodeBooleanArray(c,p){return this.decodeBitMatrix(De.parseFromBooleanArray(c),p)}decodeBitMatrix(c,p){let g=new ly(c),u=null;try{return this.decodeBitMatrixParser(g,p)}catch(_){u=_}try{g.remask(),g.setMirror(!0),g.readVersion(),g.readFormatInformation(),g.mirror();let _=this.decodeBitMatrixParser(g,p);return _.setOther(new Bg(!0)),_}catch(_){throw u!==null?u:_}}decodeBitMatrixParser(c,p){let g=c.readVersion(),u=c.readFormatInformation().getErrorCorrectionLevel(),_=c.readCodewords(),b=y0.getDataBlocks(_,g,u),C=0;for(let D of b)C+=D.getNumDataCodewords();let P=new Uint8Array(C),E=0;for(let D of b){let V=D.getCodewords(),z=D.getNumDataCodewords();this.correctErrors(V,z);for(let $=0;$<z;$++)P[E++]=V[$]}return Rg.decode(P,g,u,p)}correctErrors(c,p){let g=new Int32Array(c);try{this.rsDecoder.decode(g,c.length-p)}catch{throw new I}for(let u=0;u<p;u++)c[u]=g[u]}}class C0 extends Re{constructor(c,p,g){super(c,p),this.estimatedModuleSize=g}aboutEquals(c,p,g){if(Math.abs(p-this.getY())<=c&&Math.abs(g-this.getX())<=c){let u=Math.abs(c-this.estimatedModuleSize);return u<=1||u<=this.estimatedModuleSize}return!1}combineEstimate(c,p,g){let u=(this.getX()+p)/2,_=(this.getY()+c)/2,b=(this.estimatedModuleSize+g)/2;return new C0(u,_,b)}}class Bl{constructor(c,p,g,u,_,b,C){this.image=c,this.startX=p,this.startY=g,this.width=u,this.height=_,this.moduleSize=b,this.resultPointCallback=C,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(3)}find(){let c=this.startX,p=this.height,g=this.width,u=c+g,_=this.startY+p/2,b=new Int32Array(3),C=this.image;for(let P=0;P<p;P++){let E=_+((P&1)===0?Math.floor((P+1)/2):-Math.floor((P+1)/2));b[0]=0,b[1]=0,b[2]=0;let D=c;for(;D<u&&!C.get(D,E);)D++;let V=0;for(;D<u;){if(C.get(D,E))if(V===1)b[1]++;else if(V===2){if(this.foundPatternCross(b)){let z=this.handlePossibleCenter(b,E,D);if(z!==null)return z}b[0]=b[2],b[1]=1,b[2]=0,V=1}else b[++V]++;else V===1&&V++,b[V]++;D++}if(this.foundPatternCross(b)){let z=this.handlePossibleCenter(b,E,u);if(z!==null)return z}}if(this.possibleCenters.length!==0)return this.possibleCenters[0];throw new se}static centerFromEnd(c,p){return p-c[2]-c[1]/2}foundPatternCross(c){let p=this.moduleSize,g=p/2;for(let u=0;u<3;u++)if(Math.abs(p-c[u])>=g)return!1;return!0}crossCheckVertical(c,p,g,u){let _=this.image,b=_.getHeight(),C=this.crossCheckStateCount;C[0]=0,C[1]=0,C[2]=0;let P=c;for(;P>=0&&_.get(p,P)&&C[1]<=g;)C[1]++,P--;if(P<0||C[1]>g)return NaN;for(;P>=0&&!_.get(p,P)&&C[0]<=g;)C[0]++,P--;if(C[0]>g)return NaN;for(P=c+1;P<b&&_.get(p,P)&&C[1]<=g;)C[1]++,P++;if(P===b||C[1]>g)return NaN;for(;P<b&&!_.get(p,P)&&C[2]<=g;)C[2]++,P++;if(C[2]>g)return NaN;let E=C[0]+C[1]+C[2];return 5*Math.abs(E-u)>=2*u?NaN:this.foundPatternCross(C)?Bl.centerFromEnd(C,P):NaN}handlePossibleCenter(c,p,g){let u=c[0]+c[1]+c[2],_=Bl.centerFromEnd(c,g),b=this.crossCheckVertical(p,_,2*c[1],u);if(!isNaN(b)){let C=(c[0]+c[1]+c[2])/3;for(let E of this.possibleCenters)if(E.aboutEquals(C,b,_))return E.combineEstimate(b,_,C);let P=new C0(_,b,C);this.possibleCenters.push(P),this.resultPointCallback!==null&&this.resultPointCallback!==void 0&&this.resultPointCallback.foundPossibleResultPoint(P)}return null}}class w0 extends Re{constructor(c,p,g,u){super(c,p),this.estimatedModuleSize=g,this.count=u,u===void 0&&(this.count=1)}getEstimatedModuleSize(){return this.estimatedModuleSize}getCount(){return this.count}aboutEquals(c,p,g){if(Math.abs(p-this.getY())<=c&&Math.abs(g-this.getX())<=c){let u=Math.abs(c-this.estimatedModuleSize);return u<=1||u<=this.estimatedModuleSize}return!1}combineEstimate(c,p,g){let u=this.count+1,_=(this.count*this.getX()+
21p)/u,b=(this.count*this.getY()+c)/u,C=(this.count*this.estimatedModuleSize+g)/u;return new w0(_,b,C,u)}}class dy{constructor(c){this.bottomLeft=c[0],this.topLeft=c[1],this.topRight=c[2]}getBottomLeft(){return this.bottomLeft}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}}let py=(()=>{class T{constructor(p,g){this.image=p,this.resultPointCallback=g,this.possibleCenters=[],this.crossCheckStateCount=new Int32Array(5),this.resultPointCallback=g}getImage(){return this.image}getPossibleCenters(){return this.possibleCenters}find(p){let g=p!=null&&p.get(Y.TRY_HARDER)!==void 0,u=p!=null&&p.get(Y.PURE_BARCODE)!==void 0,_=this.image,b=_.getHeight(),C=_.getWidth(),P=Math.floor(3*b/(4*T.MAX_MODULES));(P<T.MIN_SKIP||g)&&(P=T.MIN_SKIP);let E=!1,D=new Int32Array(5);for(let z=P-1;z<b&&!E;z+=P){D[0]=0,D[1]=0,D[2]=0,D[3]=0,D[4]=0;let $=0;for(let X=0;X<C;X++)if(_.get(X,z))($&1)===1&&$++,D[$]++;else if(($&1)===0)if($===4)if(T.foundPatternCross(D)){if(this.handlePossibleCenter(D,z,X,u)===!0)if(P=2,this.hasSkipped===!0)E=this.haveMultiplyConfirmedCenters();else{let ne=this.findRowSkip();ne>D[2]&&(z+=ne-D[2]-P,X=C-1)}else{D[0]=D[2],D[1]=D[3],D[2]=D[4],D[3]=1,D[4]=0,$=3;continue}$=0,D[0]=0,D[1]=0,D[2]=0,D[3]=0,D[4]=0}else D[0]=D[2],D[1]=D[3],D[2]=D[4],D[3]=1,D[4]=0,$=3;else D[++$]++;else D[$]++;
21T.foundPatternCross(D)&&this.handlePossibleCenter(D,z,C,u)===!0&&(P=D[0],this.hasSkipped&&(E=this.haveMultiplyConfirmedCenters()))}let V=this.selectBestPatterns();return Re.orderBestPatterns(V),new dy(V)}static centerFromEnd(p,g){return g-p[4]-p[3]-p[2]/2}static foundPatternCross(p){let g=0;for(let b=0;b<5;b++){let C=p[b];if(C===0)return!1;g+=C}if(g<7)return!1;let u=g/7,_=u/2;return Math.abs(u-p[0])<_&&Math.abs(u-p[1])<_&&Math.abs(3*u-p[2])<3*_&&Math.abs(u-p[3])<_&&Math.abs(u-p[4])<_}getCrossCheckStateCount(){let p=this.crossCheckStateCount;return p[0]=0,p[1]=0,p[2]=0,p[3]=0,p[4]=0,p}crossCheckDiagonal(p,g,u,_){let b=this.getCrossCheckStateCount(),C=0,P=this.image;for(;p>=C&&g>=C&&P.get(g-C,p-C);)b[2]++,C++;if(p<C||g<C)return!1;for(;p>=C&&g>=C&&!P.get(g-C,p-C)&&b[1]<=u;)b[1]++,C++;if(p<C||g<C||b[1]>u)return!1;for(;p>=C&&g>=C&&P.get(g-C,p-C)&&b[0]<=u;)b[0]++,C++;if(b[0]>u)return!1;let E=P.getHeight(),D=P.getWidth();for(C=1;p+C<E&&g+C<D&&P.get(g+C,p+C);)b[2]++,C++;if(p+C>=E||g+C>=D)return!1;for(;p+C<E&&g+C<D&&!P.get(g+C,p+C)&&b[3]<u;)b[3]++,C++;if(p+C>=E||g+C>=D||b[3]>=u)return!1;for(;p+C<E&&g+C<D&&P.get(g+C,p+C)&&b[4]<u;)b[4]++,C++;if(b[4]>=u)return!1;let V=b[0]+b[1]+b[2]+b[3]+b[4];return Math.abs(V-_)<2*_&&T.foundPatternCross(b)}crossCheckVertical(p,g,u,_){let b=this.image,C=b.getHeight(),P=this.getCrossCheckStateCount(),E=p;for(;E>=0&&b.get(g,E);)P[2]++,E--;if(E<0)return NaN;for(;E>=0&&!b.get(g,E)&&P[1]<=u;)P[1]++,E--;if(E<0||P[1]>u)return NaN;for(;E>=0&&b.get(g,E)&&P[0]<=u;)P[0]++,E--;if(P[0]>u)return NaN;for(E=p+1;E<C&&b.get(g,E);)P[2]++,E++;if(E===C)return NaN;for(;E<C&&!b.get(g,E)&&P[3]<u;)P[3]++,E++;if(E===C||P[3]>=u)return NaN;for(;E<C&&b.get(g,E)&&P[4]<u;)P[4]++,E++;if(P[4]>=u)return NaN;let D=P[0]+P[1]+P[2]+P[3]+P[4];return 5*Math.abs(D-_)>=2*_?NaN:T.foundPatternCross(P)?T.centerFromEnd(P,E):NaN}crossCheckHorizontal(p,g,u,_){let b=this.image,C=b.getWidth(),P=this.getCrossCheckStateCount(),E=p;for(;E>=0&&b.get(E,g);)P[2]++,E--;if(E<0)return NaN;for(;E>=0&&!b.get(E,g)&&P[1]<=u;)P[1]++,E--;if(E<0||P[1]>u)return NaN;for(;E>=0&&b.get(E,g)&&P[0]<=u;)P[0]++,E--;if(P[0]>u)return NaN;for(E=p+1;E<C&&b.get(E,g);)P[2]++,E++;if(E===C)return NaN;for(;E<C&&!b.get(E,g)&&P[3]<u;)P[3]++,E++;if(E===C||P[3]>=u)return NaN;for(;E<C&&b.get(E,g)&&P[4]<u;)P[4]++,E++;if(P[4]>=u)return NaN;let D=P[0]+P[1]+P[2]+P[3]+P[4];return 5*Math.abs(D-_)>=_?NaN:T.foundPatternCross(P)?T.centerFromEnd(P,E):NaN}handlePossibleCenter(p,g,u,_){let b=p[0]+p[1]+p[2]+p[3]+p[4],C=T.centerFromEnd(p,u),P=this.crossCheckVertical(g,Math.floor(C),p[2],b);if(!isNaN(P)&&(C=this.crossCheckHorizontal(Math.floor(C),Math.floor(P),p[2],b),!isNaN(C)&&(!_||this.crossCheckDiagonal(Math.floor(P),Math.floor(C),p[2],b)))){let E=b/7,D=!1,V=this.possibleCenters;for(let z=0,$=V.length;z<$;z++){let X=V[z];if(X.aboutEquals(E,P,C)){V[z]=X.combineEstimate(P,C,E),D=!0;break}}if(!D){let z=new w0(C,P,E);V.push(z),this.resultPointCallback!==null&&this.resultPointCallback!==void 0&&this.resultPointCallback.foundPossibleResultPoint(z)}return!0}return!1}findRowSkip(){if(this.possibleCenters.length<=1)return 0;let g=null;for(let u of this.possibleCenters)if(u.getCount()>=T.CENTER_QUORUM)if(g==null)g=u;else return this.hasSkipped=!0,Math.floor((Math.abs(g.getX()-u.getX())-Math.abs(g.getY()-u.getY()))/2);return 0}haveMultiplyConfirmedCenters(){let p=0,g=0,u=this.possibleCenters.length;for(let C of this.possibleCenters)C.getCount()>=T.CENTER_QUORUM&&(p++,g+=C.getEstimatedModuleSize());if(p<3)return!1;let _=g/u,b=0;for(let C of this.possibleCenters)b+=Math.abs(C.getEstimatedModuleSize()-_);return b<=.05*g}selectBestPatterns(){let p=this.possibleCenters.length;if(p<3)throw new se;let g=this.possibleCenters,u;if(p>3){let _=0,b=0;for(let E of this.possibleCenters){let D=E.getEstimatedModuleSize();_+=D,b+=D*D}u=_/p;let C=Math.sqrt(b/p-u*u);g.sort((E,D)=>{let V=Math.abs(D.getEstimatedModuleSize()-u),z=Math.abs(E.getEstimatedModuleSize()-u);return V<z?-1:V>z?1:0});let P=Math.max(.2*u,C);for(let E=0;E<g.length&&g.length>3;E++){let D=g[E];Math.abs(D.getEstimatedModuleSize()-u)>P&&(g.splice(E,1),E--)}}if(g.length>3){let _=0;for(let b of g)_+=b.getEstimatedModuleSize();u=_/g.length,g.sort((b,C)=>{if(C.getCount()===b.getCount()){let P=Math.abs(C.getEstimatedModuleSize()-u),E=Math.abs(b.getEstimatedModuleSize()-u);return P<E?1:P>E?-1:0}else return C.getCount()-b.getCount()}),g.splice(3)}return[g[0],g[1],g[2]]}}return T.CENTER_QUORUM=2,T.MIN_SKIP=3,T.MAX_MODULES=57,T})();class vs{constructor(c){this.image=c}getImage(){return this.image}getResultPointCallback(){return this.resultPointCallback}detect(c){this.resultPointCallback=c==null?null:c.get(Y.NEED_RESULT_POINT_CALLBACK);let g=new py(this.image,this.resultPointCallback).find(c);return this.processFinderPatternInfo(g)}processFinderPatternInfo(c){let p=c.getTopLeft(),g=c.getTopRight(),u=c.getBottomLeft(),_=this.calculateModuleSize(p,g,u);if(_<1)throw new se("No pattern found in proccess finder.");let b=vs.computeDimension(p,g,u,_),C=Ve.getProvisionalVersionForDimension(b),P=C.getDimensionForVersion()-7,E=null;if(C.getAlignmentPatternCenters().length>0){let $=g.getX()-p.getX()+u.getX(),X=g.getY()-p.getY()+u.getY(),ee=1-3/P,ne=Math.floor(p.getX()+ee*($-p.getX())),oe=Math.floor(p.getY()+ee*(X-p.getY()));for(let ve=4;ve<=16;ve<<=1)try{E=this.findAlignmentInRegion(_,ne,oe,ve);break}catch(ke){if(!(ke instanceof se))throw ke}}let D=vs.createTransform(p,g,u,E,b),V=vs.sampleGrid(this.image,D,b),z;return E===null?z=[u,p,g]:z=[u,p,g,E],new Ol(V,z)}static createTransform(c,p,g,u,_){let b=_-3.5,C,P,E,D;return u!==null?(C=u.getX(),P=u.getY(),E=b-3,D=E):(C=p.getX()-c.getX()+g.getX(),P=p.getY()-c.getY()+g.getY(),E=b,D=b),Oi.quadrilateralToQuadrilateral(3.5,3.5,b,3.5,E,D,3.5,b,c.getX(),c.getY(),p.getX(),p.getY(),C,P,g.getX(),g.getY())}static sampleGrid(c,p,g){return Do.getInstance().sampleGridWithTransform(c,g,g,p)}static computeDimension(c,p,g,u){let _=dt.round(Re.distance(c,p)/u),b=dt.round(Re.distance(c,g)/u),C=Math.floor((_+b)/2)+7;switch(C&3){case 0:C++;break;case 2:C--;break;case 3:throw new se("Dimensions could be not found.")}return C}calculateModuleSize(c,p,g){return(this.calculateModuleSizeOneWay(c,p)+this.calculateModuleSizeOneWay(c,g))/2}calculateModuleSizeOneWay(c,p){let g=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(c.getX()),Math.floor(c.getY()),Math.floor(p.getX()),Math.floor(p.getY())),u=this.sizeOfBlackWhiteBlackRunBothWays(Math.floor(p.getX()),Math.floor(p.getY()),Math.floor(c.getX()),Math.floor(c.getY()));return isNaN(g)?u/7:isNaN(u)?g/7:(g+u)/14}sizeOfBlackWhiteBlackRunBothWays(c,p,g,u){let _=this.sizeOfBlackWhiteBlackRun(c,p,g,u),b=1,C=c-(g-c);C<0?(b=c/(c-C),C=0):C>=this.image.getWidth()&&(b=(this.image.getWidth()-1-c)/(C-c),C=this.image.getWidth()-1);let P=Math.floor(p-(u-p)*b);return b=1,P<0?(b=p/(p-P),P=0):P>=this.image.getHeight()&&(b=(this.image.getHeight()-1-p)/(P-p),P=this.image.getHeight()-1),C=Math.floor(c+(C-c)*b),_+=this.sizeOfBlackWhiteBlackRun(c,p,C,P),_-1}sizeOfBlackWhiteBlackRun(c,p,g,u){let _=Math.abs(u-p)>Math.abs(g-c);if(_){let $=c;c=p,p=$,$=g,g=u,u=$}let b=Math.abs(g-c),C=Math.abs(u-p),P=-b/2,E=c<g?1:-1,D=p<u?1:-1,V=0,z=g+E;for(let $=c,X=p;$!==z;$+=E){let ee=_?X:$,ne=_?$:X;if(V===1===this.image.get(ee,ne)){if(V===2)return dt.distance($,X,c,p);V++}if(P+=C,P>0){if(X===u)break;X+=D,P-=b}}return V===2?dt.distance(g+E,u,c,p):NaN}findAlignmentInRegion(c,p,g,u){let _=Math.floor(u*c),b=Math.max(0,p-_),C=Math.min(this.image.getWidth()-1,p+_);if(C-b<c*3)throw new se("Alignment top exceeds estimated module size.");let P=Math.max(0,g-_),E=Math.min(this.image.getHeight()-1,g+_);if(E-P<c*3)throw new se("Alignment bottom exceeds estimated module size.");return new Bl(this.image,b,P,C-b,E-P,c,this.resultPointCallback).find()}}class Vo{constructor(){this.decoder=new cy}getDecoder(){return this.decoder}decode(c,p){let g,u;if(p!=null&&p.get(Y.PURE_BARCODE)!==void 0){let P=Vo.extractPureBits(c.getBlackMatrix());g=this.decoder.decodeBitMatrix(P,p),u=Vo.NO_POINTS}else{let P=new vs(c.getBlackMatrix()).detect(p);g=this.decoder.decodeBitMatrix(P.getBits(),p),u=P.getPoints()}g.getOther()instanceof Bg&&g.getOther().applyMirroredCorrection(u);let _=new $t(g.getText(),g.getRawBytes(),void 0,u,Ne.QR_CODE,void 0),b=g.getByteSegments();b!==null&&_.putMetadata(Bt.BYTE_SEGMENTS,b);let C=g.getECLevel();return C!==null&&_.putMetadata(Bt.ERROR_CORRECTION_LEVEL,C),g.hasStru
21cturedAppend()&&(_.putMetadata(Bt.STRUCTURED_APPEND_SEQUENCE,g.getStructuredAppendSequenceNumber()),_.putMetadata(Bt.STRUCTURED_APPEND_PARITY,g.getStructuredAppendParity())),_}reset(){}static extractPureBits(c){let p=c.getTopLeftOnBit(),g=c.getBottomRightOnBit();if(p===null||g===null)throw new se;let u=this.moduleSize(p,c),_=p[1],b=g[1],C=p[0],P=g[0];if(C>=P||_>=b)throw new se;if(b-_!==P-C&&(P=C+(b-_),P>=c.getWidth()))throw new se;let E=Math.round((P-C+1)/u),D=Math.round((b-_+1)/u);if(E<=0||D<=0)throw new se;if(D!==E)throw new se;let V=Math.floor(u/2);_+=V,C+=V;let z=C+Math.floor((E-1)*u)-P;if(z>0){if(z>V)throw new se;C-=z}let $=_+Math.floor((D-1)*u)-b;if($>0){if($>V)throw new se;_-=$}let X=new De(E,D);for(let ee=0;ee<D;ee++){let ne=_+Math.floor(ee*u);for(let oe=0;oe<E;oe++)c.get(C+Math.floor(oe*u),ne)&&X.set(oe,ee)}return X}static moduleSize(c,p){let g=p.getHeight(),u=p.getWidth(),_=c[0],b=c[1],C=!0,P=0;for(;_<u&&b<g;){if(C!==p.get(_,b)){if(++P===5)break;C=!C}_++,b++}if(_===u||b===g)throw new se;return(_-c[0])/7}}Vo.NO_POINTS=new Array;class He{PDF417Common(){}static getBitCountSum(c){return dt.sum(c)}static toIntArray(c){if(c==null||!c.length)return He.EMPTY_INT_ARRAY;let p=new Int32Array(c.length),g=0;for(let u of c)p[g++]=u;return p}static getCodeword(c){let p=G.binarySearch(He.SYMBOL_TABLE,c&262143);return p<0?-1:(He.CODEWORD_TABLE[p]-1)%He.NUMBER_OF_CODEWORDS}}He.NUMBER_OF_CODEWORDS=929,He.MAX_CODEWORDS_IN_BARCODE=He.NUMBER_OF_CODEWORDS-1,He.MIN_ROWS_IN_BARCODE=3,He.MAX_ROWS_IN_BARCODE=90,He.MODULES_IN_CODEWORD=17,He.MODULES_IN_STOP_PATTERN=18,He.BARS_IN_MODULE=8,He.EMPTY_INT_ARRAY=new Int32Array([]),He
vendor: 18,272 bytes, line 21
21.SYMBOL_TABLE=Int32Array.from([66142,66170,66206,66236,66290,66292,66350,66382,66396,66454,66470,66476,66594,66600,66614,66626,66628,66632,66640,66654,66662,66668,66682,66690,66718,66720,66748,66758,66776,66798,66802,66804,66820,66824,66832,66846,66848,66876,66880,66936,66950,66956,66968,66992,67006,67022,67036,67042,67044,67048,67062,67118,67150,67164,67214,67228,67256,67294,67322,67350,67366,67372,67398,67404,67416,67438,67474,67476,67490,67492,67496,67510,67618,67624,67650,67656,67664,67678,67686,67692,67706,67714,67716,67728,67742,67744,67772,67782,67788,67800,67822,67826,67828,67842,67848,67870,67872,67900,67904,67960,67974,67992,68016,68030,68046,68060,68066,68068,68072,68086,68104,68112,68126,68128,68156,68160,68216,68336,68358,68364,68376,68400,68414,68448,68476,68494,68508,68536,68546,68548,68552,68560,68574,68582,68588,68654,68686,68700,68706,68708,68712,68726,68750,68764,68792,68802,68804,68808,68816,68830,68838,68844,68858,68878,68892,68920,68976,68990,68994,68996,69e3,69008,69022,69024,69052,69062,69068,69080,69102,69106,69108,69142,69158,69164,69190,69208,69230,69254,69260,69272,69296,69310,69326,69340,69386,69394,69396,69410,69416,69430,69442,69444,69448,69456,69470,69478,69484,69554,69556,69666,69672,69698,69704,69712,69726,69754,69762,69764,69776,69790,69792,69820,69830,69836,69848,69870,69874,69876,69890,69918,69920,69948,69952,70008,70022,70040,70064,70078,70094,70108,70114,70116,70120,70134,70152,70174,70176,70264,70384,70412,70448,70462,70496,70524,70542,70556,70584,70594,70600,70608,70622,70630,70636,70664,70672,70686,70688,70716,70720,70776,70896,71136,71180,71192,71216,71230,71264,71292,71360,71416,71452,71480,71536,71550,71554,71556,71560,71568,71582,71584,71612,71622,71628,71640,71662,71726,71732,71758,71772,71778,71780,71784,71798,71822,71836,71864,71874,71880,71888,71902,71910,71916,71930,71950,71964,71992,72048,72062,72066,72068,72080,72094,72096,72124,72134,72140,72152,72174,72178,72180,72206,72220,72248,72304,72318,72416,72444,72456,72464,72478,72480,72508,72512,72568,72588,72600,72624,72638,72654,72668,72674,72676,72680,72694,72726,72742,72748,72774,72780,72792,72814,72838,72856,72880,72894,72910,72924,72930,72932,72936,72950,72966,72972,72984,73008,73022,73056,73084,73102,73116,73144,73156,73160,73168,73182,73190,73196,73210,73226,73234,73236,73250,73252,73256,73270,73282,73284,73296,73310,73318,73324,73346,73348,73352,73360,73374,73376,73404,73414,73420,73432,73454,73498,73518,73522,73524,73550,73564,73570,73572,73576,73590,73800,73822,73858,73860,73872,73886,73888,73916,73944,73970,73972,73992,74014,74016,74044,74048,74104,74118,74136,74160,74174,74210,74212,74216,74230,74244,74256,74270,74272,74360,74480,74502,74508,74544,74558,74592,74620,74638,74652,74680,74690,74696,74704,74726,74732,74782,74784,74812,74992,75232,75288,75326,75360,75388,75456,75512,75576,75632,75646,75650,75652,75664,75678,75680,75708,75718,75724,75736,75758,75808,75836,75840,75896,76016,76256,76736,76824,76848,76862,76896,76924,76992,77048,77296,77340,77368,77424,77438,77536,77564,77572,77576,77584,77600,77628,77632,77688,77702,77708,77720,77744,77758,77774,77788,77870,77902,77916,77922,77928,77966,77980,78008,78018,78024,78032,78046,78060,78074,78094,78136,78192,78206,78210,78212,78224,78238,78240,78268,78278,78284,78296,78322,78324,78350,78364,78448,78462,78560,78588,78600,78622,78624,78652,78656,78712,78726,78744,78768,78782,78798,78812,78818,78820,78824,78838,78862,78876,78904,78960,78974,79072,79100,79296,79352,79368,79376,79390,79392,79420,79424,79480,79600,79628,79640,79664,79678,79712,79740,79772,79800,79810,79812,79816,79824,79838,79846,79852,79894,79910,79916,79942,79948,79960,79982,79988,80006,80024,80048,80062,80078,80092,80098,80100,80104,80134,80140,80176,80190,80224,80252,80270,80284,80312,80328,80336,80350,80358,80364,80378,80390,80396,80408,80432,80446,80480,80508,80576,80632,80654,80668,80696,80752,80766,80776,80784,80798,80800,80828,80844,80856,80878,80882,80884,80914,80916,80930,80932,80936,80950,80962,80968,80976,80990,80998,81004,81026,81028,81040,81054,81056,81084,81094,81100,81112,81134,81154,81156,81160,81168,81182,81184,81212,81216,81272,81286,81292,81304,81328,81342,81358,81372,81380,81384,81398,81434,81454,81458,81460,81486,81500,81506,81508,81512,81526,81550,81564,81592,81602,81604,81608,81616,81630,81638,81644,81702,81708,81722,81734,81740,81752,81774,81778,81780,82050,82078,82080,82108,82180,82184,82192,82206,82208,82236,82240,82296,82316,82328,82352,82366,82402,82404,82408,82440,82448,82462,82464,82492,82496,82552,82672,82694,82700,82712,82736,82750,82784,82812,82830,82882,82884,82888,82896,82918,82924,82952,82960,82974,82976,83004,83008,83064,83184,83424,83468,83480,83504,83518,83552,83580,83648,83704,83740,83768,83824,83838,83842,83844,83848,83856,83872,83900,83910,83916,83928,83950,83984,84e3,84028,84032,84088,84208,84448,84928,85040,85054,85088,85116,85184,85240,85488,85560,85616,85630,85728,85756,85764,85768,85776,85790,85792,85820,85824,85880,85894,85900,85912,85936,85966,85980,86048,86080,86136,86256,86496,86976,88160,88188,88256,88312,88560,89056,89200,89214,89312,89340,89536,89592,89608,89616,89632,89664,89720,89840,89868,89880,89904,89952,89980,89998,90012,90040,90190,90204,90254,90268,90296,90306,90308,90312,90334,90382,90396,90424,90480,90494,90500,90504,90512,90526,90528,90556,90566,90572,90584,90610,90612,90638,90652,90680,90736,90750,90848,90876,90884,90888,90896,90910,90912,90940,90944,91e3,91014,91020,91032,91056,91070,91086,91100,91106,91108,91112,91126,91150,91164,91192,91248,91262,91360,91388,91584,91640,91664,91678,91680,91708,91712,91768,91888,91928,91952,91966,92e3,92028,92046,92060,92088,92098,92100,92104,92112,92126,92134,92140,92188,92216,92272,92384,92412,92608,92664,93168,93200,93214,93216,93244,93248,93304,93424,93664,93720,93744,93758,93792,93820,93888,93944,93980,94008,94064,94078,94084,94088,94096,94110,94112,94140,94150,94156,94168,94246,94252,94278,94284,94296,94318,94342,94348,94360,94384,94398,94414,94428,94440,94470,94476,94488,94512,94526,94560,94588,94606,94620,94648,94658,94660,94664,94672,94686,94694,94700,94714,94726,94732,94744,94768,94782,94816,94844,94912,94968,94990,95004,95032,95088,95102,95112,95120,95134,95136,95164,95180,95192,95214,95218,95220,95244,95256,95280,95294,95328,95356,95424,95480,95728,95758,95772,95800,95856,95870,95968,95996,96008,96016,96030,96032,96060,96064,96120,96152,96176,96190,96220,96226,96228,96232,96290,96292,96296,96310,96322,96324,96328,96336,96350,96358,96364,96386,96388,96392,96400,96414,96416,96444,96454,96460,96472,96494,96498,96500,96514,96516,96520,96528,96542,96544,96572,96576,96632,96646,96652,96664,96688,96702,96718,96732,96738,96740,96744,96758,96772,96776,96784,96798,96800,96828,96832,96888,97008,97030,97036,97048,97072,97086,97120,97148,97166,97180,97208,97220,97224,97232,97246,97254,97260,97326,97330,97332,97358,97372,97378,97380,97384,97398,97422,97436,97464,97474,97476,97480,97488,97502,97510,97516,97550,97564,97592,97648,97666,97668,97672,97680,97694,97696,97724,97734,97740,97752,97774,97830,97836,97850,97862,97868,97880,97902,97906,97908,97926,97932,97944,97968,97998,98012,98018,98020,98024,98038,98618,98674,98676,98838,98854,98874,98892,98904,98926,98930,98932,98968,99006,99042,99044,99048,99062,99166,99194,99246,99286,99350,99366,99372,99386,99398,99416,99438,99442,99444,99462,99504,99518,99534,99548,99554,99556,99560,99574,99590,99596,99608,99632,99646,99680,99708,99726,99740,99768,99778,99780,99784,99792,99806,99814,99820,99834,99858,99860,99874,99880,99894,99906,99920,99934,99962,99970,99972,99976,99984,99998,1e5,100028,100038,100044,100056,100078,100082,100084,100142,100174,100188,100246,100262,100268,100306,100308,100390,100396,100410,100422,100428,100440,100462,100466,100468,100486,100504,100528,100542,100558,100572,100578,100580,100584,100598,100620,100656,100670,100704,100732,100750,100792,100802,100808,100816,100830,100838,100844,100858,100888,100912,100926,100960,100988,101056,101112,101148,101176,101232,101246,101250,101252,101256,101264,101278,101280,101308,101318,101324,101336,101358,101362,101364,101410,101412,101416,101430,101442,101448,101456,101470,101478,101498,101506,101508,101520,101534,101536,101564,101580,101618,101620,101636,101640,101648,101662,101664,101692,101696,101752,101766,101784,101838,101858,101860,101864,101934,101938,101940,101966,101980,101986,101988,101992,102030,102044,102072,102082,102084,102088,102096,102138,102166,102182,102188,102214,102220,102232,102254,102282,102290,102292,102306,102308,102312,102326,102444,102458,102470,102476,102488,102514,102516,102534,102552,102576,102590,102606,102620,102626,102632,102646,102662,102668,102704,102718,102752,102780,102798,102812,102840,102850,102856,102864,102878,102886,102892,102906,102936,102974,103008,103036,103104,103160,103224,103280,103294,103298,103300,103312,103326,103328,103356,103366,103372,103384,103406,103410,103412,103472,103486,103520,103548,103616,103672,103920,103992,104048,104062,104160,104188,104194,104196,104200,104208,104224,104252,104256,104312,104326,104332,104344,104368,104382,104398,104412,104418,104420,104424,104482,104484,104514,104520,104528,104542,104550,104570,104578,104580,104592,104606,104608,104636,104652,104690,104692,104706,104712,104734,104736,104764,104768,104824,104838,104856,104910,104930,104932,104936,104968,104976,104990,104992,105020,105024,105080,105200,105240,105278,105312,105372,105410,105412,105416,105424,105446,105518,105524,105550,105564,105570,105572,105576,105614,105628,105656,105666,105672,105680,105702,105722,105742,105756,105784,105840,105854,105858,105860,105864,105872,105888,105932,105970,105972,106006,106022,106028,106054,106060,106072,106100,106118,106124,106136,106160,106174,106190,106210,106212,106216,106250,106258,106260,106274,106276,106280,106306,106308,106312,106320,106334,106348,106394,106414,106418,106420,106566,106572,106610,106612,106630,106636,106648,106672,106686,106722,106724,106728,106742,106758,106764,106776,106800,106814,106848,106876,106894,106908,106936,106946,106948,106952,106960,106974,106982,106988,107032,107056,107070,107104,107132,107200,107256,107292,107320,107376,107390,107394,107396,107400,107408,107422,107424,107452,107462,107468,107480,107502,107506,107508,107544,107568,107582,107616,107644,107712,107768,108016,108060,108088,108144,108158,108256,108284,108290,108292,108296,108304,108318,108320,108348,108352,108408,108422,108428,108440,108464,108478,108494,108508,108514,108516,108520,108592,108640,108668,108736,108792,109040,109536,109680,109694,109792,109820,110016,110072,110084,110088,110096,110112,110140,110144,110200,110320,110342,110348,110360,110384,110398,110432,110460,110478,110492,110520,110532,110536,110544,110558,110658,110686,110714,110722,110724,110728,110736,110750,110752,110780,110796,110834,110836,110850,110852,110856,110864,110878,110880,110908,110912,110968,110982,111e3,111054,111074,111076,111080,111108,111112,111120,111134,111136,111164,111168,111224,111344,111372,111422,111456,111516,111554,111556,111560,111568,111590,111632,111646,111648,111676,111680,111736,111856,112096,112152,112224,112252,112320,112440,112514,112516,112520,112528,112542,112544,112588,112686,112718,112732,112782,112796,112824,112834,112836,112840,112848,112870,112890,112910,112924,112952,113008,113022,113026,113028,113032,113040,113054,113056,113100,113138,113140,113166,113180,113208,113264,113278,113376,113404,113416,113424,113440,113468,113472,113560,113614,113634,113636,113640,113686,113702,113708,113734,113740,113752,113778,113780,113798,113804,113816,113840,113854,113870,113890,113892,113896,113926,113932,113944,113968,113982,114016,114044,114076,114114,114116,114120,114128,114150,114170,114194,114196,114210,114212,114216,114242,114244,114248,114256,114270,114278,114306,114308,114312,114320,114334,114336,114364,114380,114420,114458,114478,114482,114484,114510,114524,114530,114532,114536,114842,114866,114868,114970,114994,114996,115042,115044,115048,115062,115130,115226,115250,115252,115278,115292,115298,115300,115304,115318,115342,115394,115396,115400,115408,115422,115430,115436,115450,115478,115494,115514,115526,115532,115570,115572,115738,115758,115762,115764,115790,115804,115810,115812,115816,115830,115854,115868,115896,115906,115912,115920,115934,115942,115948,115962,115996,116024,116080,116094,116098,116100,116104,116112,116126,116128,116156,116166,116172,116184,116206,116210,116212,116246,116262,116268,116282,116294,116300,116312,116334,116338,116340,116358,116364,116376,116400,116414,116430,116444,116450,116452,116456,116498,116500,116514,116520,116534,116546,116548,116552,116560,116574,116582,116588,116602,116654,116694,116714,116762,116782,116786,116788,116814,116828,116834,116836,116840,116854,116878,116892,116920,116930,116936,116944,116958,116966,116972,116986,117006,117048,117104,117118,117122,117124,117136,117150,117152,117180,117190,117196,117208,117230,117234,117236,117304,117360,117374,117472,117500,117506,117508,117512,117520,117536,117564,117568,117624,117638,117644,117656,117680,117694,117710,117724,117730,117732,117736,117750,117782,117798,117804,117818,117830,117848,117874,117876,117894,117936,117950,117966,117986,117988,117992,118022,118028,118040,118064,118078,118112,118140,118172,118210,118212,118216,118224,118238,118246,118266,118306,118312,118338,118352,118366,118374,118394,118402,118404,118408,118416,118430,118432,118460,118476,118514,118516,118574,118578,118580,118606,118620,118626,118628,118632,118678,118694,118700,118730,118738,118740,118830,118834,118836,118862,118876,118882,118884,118888,118902,118926,118940,118968,118978,118980,118984,118992,119006,119014,119020,119034,119068,119096,119152,119166,119170,119172,119176,119184,119198,119200,119228,119238,119244,119256,119278,119282,119284,119324,119352,119408,119422,119520,119548,119554,119556,119560,119568,119582,119584,119612,119616,119672,119686,119692,119704,119728,119742,119758,119772,119778,119780,119784,119798,119920,119934,120032,120060,120256,120312,120324,120328,120336,120352,120384,120440,120560,120582,120588,120600,120624,120638,120672,120700,120718,120732,120760,120770,120772,120776,120784,120798,120806,120812,120870,120876,120890,120902,120908,120920,120946,120948,120966,120972,120984,121008,121022,121038,121058,121060,121064,121078,121100,121112,121136,121150,121184,121212,121244,121282,121284,121288,121296,121318,121338,121356,121368,121392,121406,121440,121468,121536,121592,121656,121730,121732,121736,121744,121758,121760,121804,121842,121844,121890,121922,121924,121928,121936,121950,121958,121978,121986,121988,121992,122e3,122014,122016,122044,122060,122098,122100,122116,122120,122128,122142,122144,122172,122176,122232,122246,122264,122318,122338,122340,122344,122414,122418,122420,122446,122460,122466,122468,122472,122510,122524,122552,122562,122564,122568,122576,122598,122618,122646,122662,122668,122694,122700,122712,122738,122740,122762,122770,122772,122786,122788,122792,123018,123026,123028,123042,123044,123048,123062,123098,123146,123154,123156,123170,123172,123176,123190,123202,123204,123208,123216,123238,123244,123258,123290,123314,123316,123402,123410,123412,123426,123428,123432,123446,123458,123464,123472,123486,123494,123500,123514,123522,123524,123528,123536,123552,123580,123590,123596,123608,123630,123634,123636,123674,123698,123700,123740,123746,123748,123752,123834,123914,123922,123924,123938,123944,123958,123970,123976,123984,123998,124006,124012,124026,124034,124036,124048,124062,124064,124092,124102,124108,124120,124142,124146,124148,124162,124164,124168,124176,124190,124192,124220,124224,124280,124294,124300,124312,124336,124350,124366,124380,124386,124388,124392,124406,124442,124462,124466,124468,124494,124508,124514,124520,124558,124572,124600,124610,124612,124616,124624,124646,124666,124694,124710,124716,124730,124742,124748,124760,124786,124788,124818,124820,124834,124836,124840,124854,124946,124948,124962,124964,124968,124982,124994,124996,125e3,125008,125022,125030,125036,125050,125058,125060,125064,125072,125086,125088,125116,125126,125132,125144,125166,125170,125172,125186,125188,125192,125200,125216,125244,125248,125304,125318,125324,125336,125360,125374,125390,125404,125410,125412,125416,125430,125444,125448,125456,125472,125504,125560,125680,125702,125708,125720,125744,125758,125792,125820,125838,125852,125880,125890,125892,125896,125904,125918,125926,125932,125978,125998,126002,126004,126030,126044,126050,126052,126056,126094,126108,126136,126146,126148,126152,126160,126182,126202,126222,126236,126264,126320,126334,126338,126340,126344,126352,126366,126368,126412,126450,126452,126486,126502,126508,126522,126534,126540,126552,126574,126578,126580,126598,126604,126616,126640,126654,126670,126684,126690,126692,126696,126738,126754,126756,126760,126774,126786,126788,126792,126800,126814,126822,126828,126842,126894,126898,126900,126934,127126,127142,127148,127162,127178,127186,127188,127254,127270,127276,127290,127302,127308,127320,127342,127346,127348,127370,127378,127380,127394,127396,127400,127450,127510,127526,127532,127546,127558,127576,127598,127602,127604,127622,127628,127640,127664,127678,127694,127708,127714,127716,127720,127734,127754,127762,127764,127778,127784,127810,127812,127816,127824,127838,127846,127866,127898,127918,127922,127924,128022,128038,128044,128058,128070,128076,128088,128110,128114,128116,128134,128140,128152,128176,128190,128206,128220,128226,128228,128232,128246,128262,128268,128280,128304,128318,128352,128380,128398,128412,128440,128450,128452,128456,128464,128478,128486,128492,128506,128522,128530,128532,128546,128548,128552,128566,128578,128580,128584,128592,128606,128614,128634,128642,128644,128648,128656,128670,128672,128700,128716,128754,128756,128794,128814,128818,128820,128846,128860,128866,128868,128872,128886,128918,128934,128940,128954,128978,128980,129178,129198,129202,129204,129238,129258,129306,129326,129330,129332,129358,129372,129378,129380,129384,129398,129430,129446,129452,129466,129482,129490,129492,129562,129582,129586,129588,129614,129628,129634,129636,129640,129654,129678,129692,129720,129730,129732,129736,129744,129758,129766,129772,129814,129830,129836,129850,129862,129868,129880,129902,129906,129908,129930,129938,129940,129954,129956,129960,129974,130010]),
21He
vendor: 12,860 bytes, line 21
21.CODEWORD_TABLE=Int32Array.from([2627,1819,2622,2621,1813,1812,2729,2724,2723,2779,2774,2773,902,896,908,868,865,861,859,2511,873,871,1780,835,2493,825,2491,842,837,844,1764,1762,811,810,809,2483,807,2482,806,2480,815,814,813,812,2484,817,816,1745,1744,1742,1746,2655,2637,2635,2626,2625,2623,2628,1820,2752,2739,2737,2728,2727,2725,2730,2785,2783,2778,2777,2775,2780,787,781,747,739,736,2413,754,752,1719,692,689,681,2371,678,2369,700,697,694,703,1688,1686,642,638,2343,631,2341,627,2338,651,646,643,2345,654,652,1652,1650,1647,1654,601,599,2322,596,2321,594,2319,2317,611,610,608,606,2324,603,2323,615,614,612,1617,1616,1614,1612,616,1619,1618,2575,2538,2536,905,901,898,909,2509,2507,2504,870,867,864,860,2512,875,872,1781,2490,2489,2487,2485,1748,836,834,832,830,2494,827,2492,843,841,839,845,1765,1763,2701,2676,2674,2653,2648,2656,2634,2633,2631,2629,1821,2638,2636,2770,2763,2761,2750,2745,2753,2736,2735,2733,2731,1848,2740,2738,2786,2784,591,588,576,569,566,2296,1590,537,534,526,2276,522,2274,545,542,539,548,1572,1570,481,2245,466,2242,462,2239,492,485,482,2249,496,494,1534,1531,1528,1538,413,2196,406,2191,2188,425,419,2202,415,2199,432,430,427,1472,1467,1464,433,1476,1474,368,367,2160,365,2159,362,2157,2155,2152,378,377,375,2166,372,2165,369,2162,383,381,379,2168,1419,1418,1416,1414,385,1411,384,1423,1422,1420,1424,2461,802,2441,2439,790,786,783,794,2409,2406,2403,750,742,738,2414,756,753,1720,2367,2365,2362,2359,1663,693,691,684,2373,680,2370,702,699,696,704,1690,1687,2337,2336,2334,2332,1624,2329,1622,640,637,2344,634,2342,630,2340,650,648,645,2346,655,653,1653,1651,1649,1655,2612,2597,2595,2571,2568,2565,2576,2534,2529,2526,1787,2540,2537,907,904,900,910,2503,2502,2500,2498,1768,2495,1767,2510,2508,2506,869,866,863,2513,876,874,1782,2720,2713,2711,2697,2694,2691,2702,2672,2670,2664,1828,2678,2675,2647,2646,2644,2642,1823,2639,1822,2654,2652,2650,2657,2771,1855,2765,2762,1850,1849,2751,2749,2747,2754,353,2148,344,342,336,2142,332,2140,345,1375,1373,306,2130,299,2128,295,2125,319,314,311,2132,1354,1352,1349,1356,262,257,2101,253,2096,2093,274,273,267,2107,263,2104,280,278,275,1316,1311,1308,1320,1318,2052,202,2050,2044,2040,219,2063,212,2060,208,2055,224,221,2066,1260,1258,1252,231,1248,229,1266,1264,1261,1268,155,1998,153,1996,1994,1991,1988,165,164,2007,162,2006,159,2003,2e3,172,171,169,2012,166,2010,1186,1184,1182,1179,175,1176,173,1192,1191,1189,1187,176,1194,1193,2313,2307,2305,592,589,2294,2292,2289,578,572,568,2297,580,1591,2272,2267,2264,1547,538,536,529,2278,525,2275,547,544,541,1574,1571,2237,2235,2229,1493,2225,1489,478,2247,470,2244,465,2241,493,488,484,2250,498,495,1536,1533,1530,1539,2187,2186,2184,2182,1432,2179,1430,2176,1427,414,412,2197,409,2195,405,2193,2190,426,424,421,2203,418,2201,431,429,1473,1471,1469,1466,434,1477,1475,2478,2472,2470,2459,2457,2454,2462,803,2437,2432,2429,1726,2443,2440,792,789,785,2401,2399,2393,1702,2389,1699,2411,2408,2405,745,741,2415,758,755,1721,2358,2357,2355,2353,1661,2350,1660,2347,1657,2368,2366,2364,2361,1666,690,687,2374,683,2372,701,698,705,1691,1689,2619,2617,2610,2608,2605,2613,2593,2588,2585,1803,2599,2596,2563,2561,2555,1797,2551,1795,2573,2570,2567,2577,2525,2524,2522,2520,1786,2517,1785,2514,1783,2535,2533,2531,2528,1788,2541,2539,906,903,911,2721,1844,2715,2712,1838,1836,2699,2696,2693,2703,1827,1826,1824,2673,2671,2669,2666,1829,2679,2677,1858,1857,2772,1854,1853,1851,1856,2766,2764,143,1987,139,1986,135,133,131,1984,128,1983,125,1981,138,137,136,1985,1133,1132,1130,112,110,1974,107,1973,104,1971,1969,122,121,119,117,1977,114,1976,124,1115,1114,1112,1110,1117,1116,84,83,1953,81,1952,78,1950,1948,1945,94,93,91,1959,88,1958,85,1955,99,97,95,1961,1086,1085,1083,1081,1078,100,1090,1089,1087,1091,49,47,1917,44,1915,1913,1910,1907,59,1926,56,1925,53,1922,1919,66,64,1931,61,1929,1042,1040,1038,71,1035,70,1032,68,1048,1047,1045,1043,1050,1049,12,10,1869,1867,1864,1861,21,1880,19,1877,1874,1871,28,1888,25,1886,22,1883,982,980,977,974,32,30,991,989,987,984,34,995,994,992,2151,2150,2147,2146,2144,356,355,354,2149,2139,2138,2136,2134,1359,343,341,338,2143,335,2141,348,347,346,1376,1374,2124,2123,2121,2119,1326,2116,1324,310,308,305,2131,302,2129,298,2127,320,318,316,313,2133,322,321,1355,1353,1351,1357,2092,2091,2089,2087,1276,2084,1274,2081,1271,259,2102,256,2100,252,2098,2095,272,269,2108,266,2106,281,279,277,1317,1315,1313,1310,282,1321,1319,2039,2037,2035,2032,1203,2029,1200,1197,207,2053,205,2051,201,2049,2046,2043,220,218,2064,215,2062,211,2059,228,226,223,2069,1259,1257,1254,232,1251,230,1267,1265,1263,2316,2315,2312,2311,2309,2314,2304,2303,2301,2299,1593,2308,2306,590,2288,2287,2285,2283,1578,2280,1577,2295,2293,2291,579,577,574,571,2298,582,581,1592,2263,2262,2260,2258,1545,2255,1544,2252,1541,2273,2271,2269,2266,1550,535,532,2279,528,2277,546,543,549,1575,1573,2224,2222,2220,1486,2217,1485,2214,1482,1479,2238,2236,2234,2231,1496,2228,1492,480,477,2248,473,2246,469,2243,490,487,2251,497,1537,1535,1532,2477,2476,2474,2479,2469,2468,2466,2464,1730,2473,2471,2453,2452,2450,2448,1729,2445,1728,2460,2458,2456,2463,805,804,2428,2427,2425,2423,1725,2420,1724,2417,1722,2438,2436,2434,2431,1727,2444,2442,793,791,788,795,2388,2386,2384,1697,2381,1696,2378,1694,1692,2402,2400,2398,2395,1703,2392,1701,2412,2410,2407,751,748,744,2416,759,757,1807,2620,2618,1806,1805,2611,2609,2607,2614,1802,1801,1799,2594,2592,2590,2587,1804,2600,2598,1794,1793,1791,1789,2564,2562,2560,2557,1798,2554,1796,2574,2572,2569,2578,1847,1846,2722,1843,1842,1840,1845,2716,2714,1835,1834,1832,1830,1839,1837,2700,2698,2695,2704,1817,1811,1810,897,862,1777,829,826,838,1760,1758,808,2481,1741,1740,1738,1743,2624,1818,2726,2776,782,740,737,1715,686,679,695,1682,1680,639,628,2339,647,644,1645,1643,1640,1648,602,600,597,595,2320,593,2318,609,607,604,1611,1610,1608,1606,613,1615,1613,2328,926,924,892,886,899,857,850,2505,1778,824,823,821,819,2488,818,2486,833,831,828,840,1761,1759,2649,2632,2630,2746,2734,2732,2782,2781,570,567,1587,531,527,523,540,1566,1564,476,467,463,2240,486,483,1524,1521,1518,1529,411,403,2192,399,2189,423,416,1462,1457,1454,428,1468,1465,2210,366,363,2158,360,2156,357,2153,376,373,370,2163,1410,1409,1407,1405,382,1402,380,1417,1415,1412,1421,2175,2174,777,774,771,784,732,725,722,2404,743,1716,676,674,668,2363,665,2360,685,1684,1681,626,624,622,2335,620,2333,617,2330,641,635,649,1646,1644,1642,2566,928,925,2530,2527,894,891,888,2501,2499,2496,858,856,854,851,1779,2692,2668,2665,2645,2643,2640,2651,2768,2759,2757,2744,2743,2741,2748,352,1382,340,337,333,1371,1369,307,300,296,2126,315,312,1347,1342,1350,261,258,250,2097,246,2094,271,268,264,1306,1301,1298,276,1312,1309,2115,203,2048,195,2045,191,2041,213,209,2056,1246,1244,1238,225,1234,222,1256,1253,1249,1262,2080,2079,154,1997,150,1995,147,1992,1989,163,160,2004,156,2001,1175,1174,1172,1170,1167,170,1164,167,1185,1183,1180,1177,174,1190,1188,2025,2024,2022,587,586,564,559,556,2290,573,1588,520,518,512,2268,508,2265,530,1568,1565,461,457,2233,450,2230,446,2226,479,471,489,1526,1523,1520,397,395,2185,392,2183,389,2180,2177,410,2194,402,422,1463,1461,1459,1456,1470,2455,799,2433,2430,779,776,773,2397,2394,2390,734,728,724,746,1717,2356,2354,2351,2348,1658,677,675,673,670,667,688,1685,1683,2606,2589,2586,2559,2556,2552,927,2523,2521,2518,2515,1784,2532,895,893,890,2718,2709,2707,2689,2687,2684,2663,2662,2660,2658,1825,2667,2769,1852,2760,2758,142,141,1139,1138,134,132,129,126,1982,1129,1128,1126,1131,113,111,108,105,1972,101,1970,120,118,115,1109,1108,1106,1104,123,1113,1111,82,79,1951,75,1949,72,1946,92,89,86,1956,1077,1076,1074,1072,98,1069,96,1084,1082,1079,1088,1968,1967,48,45,1916,42,1914,39,1911,1908,60,57,54,1923,50,1920,1031,1030,1028,1026,67,1023,65,1020,62,1041,1039,1036,1033,69,1046,1044,1944,1943,1941,11,9,1868,7,1865,1862,1859,20,1878,16,1875,13,1872,970,968,966,963,29,960,26,23,983,981,978,975,33,971,31,990,988,985,1906,1904,1902,993,351,2145,1383,331,330,328,326,2137,323,2135,339,1372,1370,294,293,291,289,2122,286,2120,283,2117,309,303,317,1348,1346,1344,245,244,242,2090,239,2088,236,2085,2082,260,2099,249,270,1307,1305,1303,1300,1314,189,2038,186,2036,183,2033,2030,2026,206,198,2047,194,216,1247,1245,1243,1240,227,1237,1255,2310,2302,2300,2286,2284,2281,565,563,561,558,575,1589,2261,2259,2256,2253,1542,521,519,517,514,2270,511,533,1569,1567,2223,2221,2218,2215,1483,2211,1480,459,456,453,2232,449,474,491,1527,1525,1522,2475,2467,2465,2451,2449,2446,801,800,2426,2424,2421,2418,1723,2435,780,778,775,2387,2385,2382,2379,1695,2375,1693,2396,735,733,730,727,749,1718,2616,2615,2604,2603,2601,2584,2583,2581,2579,1800,2591,2550,2549,2547,2545,1792,2542,1790,2558,929,2719,1841,2710,2708,1833,1831,2690,2688,2686,1815,1809,1808,1774,1756,1754,1737,1736,1734,1739,1816,1711,1676,1674,633,629,1638,1636,1633,1641,598,1605,1604,1602,1600,605,1609,1607,2327,887,853,1775,822,820,1757,1755,1584,524,1560,1558,468,464,1514,1511,1508,1519,408,404,400,1452,1447,1444,417,1458,1455,2208,364,361,358,2154,1401,1400,1398,1396,374,1393,371,1408,1406,1403,1413,2173,2172,772,726,723,1712,672,669,666,682,1678,1675,625,623,621,618,2331,636,632,1639,1637,1635,920,918,884,880,889,849,848,847,846,2497,855,852,1776,2641,2742,2787,1380,334,1367,1365,301,297,1340,1338,1335,1343,255,251,247,1296,1291,1288,265,1302,1299,2113,204,196,192,2042,1232,1230,1224,214,1220,210,1242,1239,1235,1250,2077,2075,151,148,1993,144,1990,1163,1162,1160,1158,1155,161,1152,157,1173,1171,1168,1165,168,1181,1178,2021,2020,2018,2023,585,560,557,1585,516,509,1562,1559,458,447,2227,472,1516,1513,1510,398,396,393,390,2181,386,2178,407,1453,1451,1449,1446,420,1460,2209,769,764,720,712,2391,729,1713,664,663,661,659,2352,656,2349,671,1679,1677,2553,922,919,2519,2516,885,883,881,2685,2661,2659,2767,2756,2755,140,1137,1136,130,127,1125,1124,1122,1127,109,106,102,1103,1102,1100,1098,116,1107,1105,1980,80,76,73,1947,1068,1067,1065,1063,90,1060,87,1075,1073,1070,1080,1966,1965,46,43,40,1912,36,1909,1019,1018,1016,1014,58,1011,55,1008,51,1029,1027,1024,1021,63,1037,1034,1940,1939,1937,1942,8,1866,4,1863,1,1860,956,954,952,949,946,17,14,969,967,964,961,27,957,24,979,976,972,1901,1900,1898,1896,986,1905,1903,350,349,1381,329,327,324,1368,1366,292,290,287,284,2118,304,1341,1339,1337,1345,243,240,237,2086,233,2083,254,1297,1295,1293,1290,1304,2114,190,187,184,2034,180,2031,177,2027,199,1233,1231,1229,1226,217,1223,1241,2078,2076,584,555,554,552,550,2282,562,1586,507,506,504,502,2257,499,2254,515,1563,1561,445,443,441,2219,438,2216,435,2212,460,454,475,1517,1515,1512,2447,798,797,2422,2419,770,768,766,2383,2380,2376,721,719,717,714,731,1714,2602,2582,2580,2548,2546,2543,923,921,2717,2706,2705,2683,2682,2680,1771,1752,1750,1733,1732,1731,1735,1814,1707,1670,1668,1631,1629,1626,1634,1599,1598,1596,1594,1603,1601,2326,1772,1753,1751,1581,1554,1552,1504,1501,1498,1509,1442,1437,1434,401,1448,1445,2206,1392,1391,1389,1387,1384,359,1399,1397,1394,1404,2171,2170,1708,1672,1669,619,1632,1630,1628,1773,1378,1363,1361,1333,1328,1336,1286,1281,1278,248,1292,1289,2111,1218,1216,1210,197,1206,193,1228,1225,1221,1236,2073,2071,1151,1150,1148,1146,152,1143,149,1140,145,1161,1159,1156,1153,158,1169,1166,2017,2016,2014,2019,1582,510,1556,1553,452,448,1506,1500,394,391,387,1443,1441,1439,1436,1450,2207,765,716,713,1709,662,660,657,1673,1671,916,914,879,878,877,882,1135,1134,1121,1120,1118,1123,1097,1096,1094,1092,103,1101,1099,1979,1059,1058,1056,1054,77,1051,74,1066,1064,1061,1071,1964,1963,1007,1006,1004,1002,999,41,996,37,1017,1015,1012,1009,52,1025,1022,1936,1935,1933,1938,942,940,938,935,932,5,2,955,953,950,947,18,943,15,965,962,958,1895,1894,1892,1890,973,1899,1897,1379,325,1364,1362,288,285,1334,1332,1330,241,238,234,1287,1285,1283,1280,1294,2112,188,185,181,178,2028,1219,1217,1215,1212,200,1209,1227,2074,2072,583,553,551,1583,505,503,500,513,1557,1555,444,442,439,436,2213,455,451,1507,1505,1502,796,763,762,760,767,711,710,708,706,2377,718,715,1710,2544,917,915,2681,1627,1597,1595,2325,1769,1749,1747,1499,1438,1435,2204,1390,1388,1385,1395,2169,2167,1704,1665,1662,1625,1623,1620,1770,1329,1282,1279,2109,1214,1207,1222,2068,2065,1149,1147,1144,1141,146,1157,1154,2013,2011,2008,2015,1579,1549,1546,1495,1487,1433,1431,1428,1425,388,1440,2205,1705,658,1667,1664,1119,1095,1093,1978,1057,1055,1052,1062,1962,1960,1005,1003,1e3,997,38,1013,1010,1932,1930,1927,1934,941,939,936,933,6,930,3,951,948,944,1889,1887,1884,1881,959,1893,1891,35,1377,1360,1358,1327,1325,1322,1331,1277,1275,1272,1269,235,1284,2110,1205,1204,1201,1198,182,1195,179,1213,2070,2067,1580,501,1551,1548,440,437,1497,1494,1490,1503,761,709,707,1706,913,912,2198,1386,2164,2161,1621,1766,2103,1208,2058,2054,1145,1142,2005,2002,1999,2009,1488,1429,1426,2200,1698,1659,1656,1975,1053,1957,1954,1001,998,1924,1921,1918,1928,937,934,931,1879,1876,1873,1870,945,1885,1882,1323,1273,1270,2105,1202,1199,1196,1211,2061,2057,1576,1543,1540,1484,1481,1478,1491,1700])
21;class my{constructor(c,p){this.bits=c,this.points=p}getBits(){return this.bits}getPoints(){return this.points}}class Ze{static detectMultiple(c,p,g){let u=c.getBlackMatrix(),_=Ze.detect(g,u);return _.length||(u=u.clone(),u.rotate180(),_=Ze.detect(g,u)),new my(u,_)}static detect(c,p){let g=new Array,u=0,_=0,b=!1;for(;u<p.getHeight();){let C=Ze.findVertices(p,u,_);if(C[0]==null&&C[3]==null){if(!b)break;b=!1,_=0;for(let P of g)P[1]!=null&&(u=Math.trunc(Math.max(u,P[1].getY()))),P[3]!=null&&(u=Math.max(u,Math.trunc(P[3].getY())));u+=Ze.ROW_STEP;continue}if(b=!0,g.push(C),!c)break;C[2]!=null?(_=Math.trunc(C[2].getX()),u=Math.trunc(C[2].getY())):(_=Math.trunc(C[4].getX()),u=Math.trunc(C[4].getY()))}return g}static findVertices(c,p,g){let u=c.getHeight(),_=c.getWidth(),b=new Array(8);
21return Ze.copyToResult(b,Ze.findRowsWithPattern(c,u,_,p,g,Ze.START_PATTERN),Ze.INDEXES_START_PATTERN),b[4]!=null&&(g=Math.trunc(b[4].getX()),p=Math.trunc(b[4].getY())),Ze.copyToResult(b,Ze.findRowsWithPattern(c,u,_,p,g,Ze.STOP_PATTERN),Ze.INDEXES_STOP_PATTERN),b}static copyToResult(c,p,g){for(let u=0;u<g.length;u++)c[g[u]]=p[u]}static findRowsWithPattern(c,p,g,u,_,b){let C=new Array(4),P=!1,E=new Int32Array(b.length);for(;u<p;u+=Ze.ROW_STEP){let V=Ze.findGuardPattern(c,_,u,g,!1,b,E);if(V!=null){for(;u>0;){let z=Ze.findGuardPattern(c,_,--u,g,!1,b,E);if(z!=null)V=z;else{u++;break}}C[0]=new Re(V[0],u),C[1]=new Re(V[1],u),P=!0;break}}let D=u+1;if(P){let V=0,z=Int32Array.from([Math.trunc(C[0].getX()),Math.trunc(C[1].getX())]);for(;D<p;D++){let $=Ze.findGuardPattern(c,z[0],D,g,!1,b,E);if($!=null&&Math.abs(z[0]-$[0])<Ze.MAX_PATTERN_DRIFT&&Math.abs(z[1]-$[1])<Ze.MAX_PATTERN_DRIFT)z=$,V=0;else{if(V>Ze.SKIPPED_ROW_COUNT_MAX)break;V++}}D-=V+1,C[2]=new Re(z[0],D),C[3]=new Re(z[1],D)}return D-u<Ze.BARCODE_MIN_HEIGHT&&G.fill(C,null),C}static findGuardPattern(c,p,g,u,_,b,C){G.fillWithin(C,0,C.length,0);let P=p,E=0;for(;c.get(P,g)&&P>0&&E++<Ze.MAX_PIXEL_DRIFT;)P--;let D=P,V=0,z=b.length;for(let $=_;D<u;D++)if(c.get(D,g)!==$)C[V]++;else{if(V===z-1){if(Ze.patternMatchVariance(C,b,Ze.MAX_INDIVIDUAL_VARIANCE)<Ze.MAX_AVG_VARIANCE)return new Int32Array([P,D]);P+=C[0]+C[1],N.arraycopy(C,2,C,0,V-1),C[V-1]=0,C[V]=0,V--}else V++;C[V]=1,$=!$}return V===z-1&&Ze.patternMatchVariance(C,b,Ze.MAX_INDIVIDUAL_VARIANCE)<Ze.MAX_AVG_VARIANCE?new Int32Array([P,D-1]):null}static patternMatchVariance(c,p,g){let u=c.length,_=0,b=0;for(let E=0;E<u;E++)_+=c[E],b+=p[E];if(_<b)return 1/0;let C=_/b;g*=C;let P=0;for(let E=0;E<u;E++){let D=c[E],V=p[E]*C,z=D>V?D-V:V-D;if(z>g)return 1/0;P+=z}return P/_}}Ze.INDEXES_START_PATTERN=Int32Array.from([0,4,1,5]),Ze.INDEXES_STOP_PATTERN=Int32Array.from([6,2,7,3]),Ze.MAX_AVG_VARIANCE=.42,Ze.MAX_INDIVIDUAL_VARIANCE=.8,Ze.START_PATTERN=Int32Array.from([8,1,1,1,1,1,1,3]),Ze.STOP_PATTERN=Int32Array.from([7,1,1,3,1,1,1,2,1]),Ze.MAX_PIXEL_DRIFT=3,Ze.MAX_PATTERN_DRIFT=5,Ze.SKIPPED_ROW_COUNT_MAX=25,Ze.ROW_STEP=5,Ze.BARCODE_MIN_HEIGHT=10;class Mn{constructor(c,p){if(p.length===0)throw new y;this.field=c;let g=p.length;if(g>1&&p[0]===0){let u=1;for(;u<g&&p[u]===0;)u++;u===g?this.coefficients=new Int32Array([0]):(this.coefficients=new Int32Array(g-u),N.arraycopy(p,u,this.coefficients,0,this.coefficients.length))}else this.coefficients=p}getCoefficients(){return this.coefficients}getDegree(){return this.coefficients.length-1}isZero(){return this.coefficients[0]===0}getCoefficient(c){return this.coefficients[this.coefficients.length-1-c]}evaluateAt(c){if(c===0)return this.getCoefficient(0);if(c===1){let u=0;for(let _ of this.coefficients)u=this.field.add(u,_);return u}let p=this.coefficients[0],g=this.coefficients.length;for(let u=1;u<g;u++)p=this.field.add(this.field.multiply(c,p),this.coefficients[u]);return p}add(c){if(!this.field.equals(c.field))throw new y("ModulusPolys do not have same ModulusGF field");if(this.isZero())return c;if(c.isZero())return this;let p=this.coefficients,g=c.coefficients;if(p.length>g.length){let b=p;p=g,g=b}let u=new Int32Array(g.length),_=g.length-p.length;N.arraycopy(g,0,u,0,_);for(let b=_;b<g.length;b++)u[b]=this.field.add(p[b-_],g[b]);return new Mn(this.field,u)}subtract(c){if(!this.field.equals(c.field))throw new y("ModulusPolys do not have same ModulusGF field");return c.isZero()?this:this.add(c.negative())}multiply(c){return c instanceof Mn?this.multiplyOther(c):this.multiplyScalar(c)}multiplyOther(c){if(!this.field.equals(c.field))throw new y("ModulusPolys do not have same ModulusGF field");if(this.isZero()||c.isZero())return new Mn(this.field,new Int32Array([0]));let p=this.coefficients,g=p.length,u=c.coefficients,_=u.length,b=new Int32Array(g+_-1);for(let C=0;C<g;C++){let P=p[C];for(let E=0;E<_;E++)b[C+E]=this.field.add(b[C+E],this.field.multiply(P,u[E]))}return new Mn(this.field,b)}negative(){let c=this.coefficients.length,p=new Int32Array(c);for(let g=0;g<c;g++)p[g]=this.field.subtract(0,this.coefficients[g]);return new Mn(this.field,p)}multiplyScalar(c){if(c===0)return new Mn(this.field,new Int32Array([0]));if(c===1)return this;let p=this.coefficients.length,g=new Int32Array(p);for(let u=0;u<p;u++)g[u]=this.field.multiply(this.coefficients[u],c);return new Mn(this.field,g)}multiplyByMonomial(c,p){if(c<0)throw new y;if(p===0)return new Mn(this.field,new Int32Array([0]));let g=this.coefficients.length,u=new Int32Array(g+c);for(let _=0;_<g;_++)u[_]=this.field.multiply(this.coefficients[_],p);return new Mn(this.field,u)}toString(){let c=new Ce;for(let p=this.getDegree();p>=0;p--){let g=this.getCoefficient(p);g!==0&&(g<0?(c.append(" - "),g=-g):c.length()>0&&c.append(" + "),(p===0||g!==1)&&c.append(g),p!==0&&(p===1?c.append("x"):(c.append("x^"),c.append(p))))}return c.toString()}}class gy{add(c,p){return(c+p)%this.modulus}subtract(c,p){return(this.modulus+c-p)%this.modulus}exp(c){return this.expTable[c]}log(c){if(c===0)throw new y;return this.logTable[c]}inverse(c){if(c===0)throw new c0;return this.expTable[this.modulus-this.logTable[c]-1]}multiply(c,p){return c===0||p===0?0:this.expTable[(this.logTable[c]+this.logTable[p])%(this.modulus-1)]}getSize(){return this.modulus}equals(c){return c===this}}class P0 extends gy{constructor(c,p){super(),this.modulus=c,this.expTable=new Int32Array(c),this.logTable=new Int32Array(c);let g=1;for(let u=0;u<c;u++)this.expTable[u]=g,g=g*p%c;for(let u=0;u<c-1;
21u++)this.logTable[this.expTable[u]]=u;this.zero=new Mn(this,new Int32Array([0])),this.one=new Mn(this,new Int32Array([1]))}getZero(){return this.zero}getOne(){return this.one}buildMonomial(c,p){if(c<0)throw new y;if(p===0)return this.zero;let g=new Int32Array(c+1);return g[0]=p,new Mn(this,g)}}P0.PDF417_GF=new P0(He.NUMBER_OF_CODEWORDS,3);class Ng{constructor(){this.field=P0.PDF417_GF}decode(c,p,g){let u=new Mn(this.field,c),_=new Int32Array(p),b=!1;for(let X=p;X>0;X--){let ee=u.evaluateAt(this.field.exp(X));_[p-X]=ee,ee!==0&&(b=!0)}if(!b)return 0;let C=this.field.getOne();if(g!=null)for(let X of g){let ee=this.field.exp(c.length-1-X),ne=new Mn(this.field,new Int32Array([this.field.subtract(0,ee),1]));C=C.multiply(ne)}let P=new Mn(this.field,_),E=this.runEuclideanAlgorithm(this.field.buildMonomial(p,1),P,p),D=E[0],V=E[1],z=this.findErrorLocations(D),$=this.findErrorMagnitudes(V,D,z);for(let X=0;X<z.length;X++){let ee=c.length-1-this.field.log(z[X]);if(ee<0)throw I.getChecksumInstance();c[ee]=this.field.subtract(c[ee],$[X])}return z.length}runEuclideanAlgorithm(c,p,g){if(c.getDegree()<p.getDegree()){let z=c;c=p,p=z}let u=c,_=p,b=this.field.getZero(),C=this.field.getOne();for(;_.getDegree()>=Math.round(g/2);){let z=u,$=b;if(u=_,b=C,u.isZero())throw I.getChecksumInstance();_=z;let X=this.field.getZero(),ee=u.getCoefficient(u.getDegree()),ne=this.field.inverse(ee);for(;_.getDegree()>=u.getDegree()&&!_.isZero();){let oe=_.getDegree()-u.getDegree(),ve=this.field.multiply(_.getCoefficient(_.getDegree()),ne);X=X.add(this.field.buildMonomial(oe,ve)),_=_.subtract(u.multiplyByMonomial(oe,ve))}C=X.multiply(b).subtract($).negative()}let P=C.getCoefficient(0);if(P===0)throw I.getChecksumInstance();let E=this.field.inverse(P),D=C.multiply(E),V=_.multiply(E);return[D,V]}findErrorLocations(c){let p=c.getDegree(),g=new Int32Array(p),u=0;for(let _=1;_<this.field.getSize()&&u<p;_++)c.evaluateAt(_)===0&&(g[u]=this.field.inverse(_),u++);if(u!==p)throw I.getChecksumInstance();return g}findErrorMagnitudes(c,p,g){let u=p.getDegree(),_=new Int32Array(u);for(let E=1;E<=u;E++)_[u-E]=this.field.multiply(E,p.getCoefficient(E));let b=new Mn(this.field,_),C=g.length,P=new Int32Array(C);for(let E=0;E<C;E++){let D=this.field.inverse(g[E]),V=this.field.subtract(0,c.evaluateAt(D)),z=this.field.inverse(b.evaluateAt(D));P[E]=this.field.multiply(V,z)}return P}}class Sr{constructor(c,p,g,u,_){c instanceof Sr?this.constructor_2(c):this.constructor_1(c,p,g,u,_)}constructor_1(c,p,g,u,_){let b=p==null||g==null,C=u==null||_==null;if(b&&C)throw new se;b?(p=new Re(0,u.getY()),g=new Re(0,_.getY())):C&&(u=new Re(c.getWidth()-1,p.getY()),_=new Re(c.getWidth()-1,g.getY())),this.image=c,this.topLeft=p,this.bottomLeft=g,this.topRight=u,this.bottomRight=_,this.minX=Math.trunc(Math.min(p.getX(),g.getX())),this.maxX=Math.trunc(Math.max(u.getX(),_.getX())),this.minY=Math.trunc(Math.min(p.getY(),u.getY())),this.maxY=Math.trunc(Math.max(g.getY(),_.getY()))}constructor_2(c){this.image=c.image,this.topLeft=c.getTopLeft(),this.bottomLeft=c.getBottomLeft(),this.topRight=c.getTopRight(),this.bottomRight=c.getBottomRight(),this.minX=c.getMinX(),this.maxX=c.getMaxX(),this.minY=c.getMinY(),this.maxY=c.getMaxY()}static merge(c,p){return c==null?p:p==null?c:new Sr(c.image,c.topLeft,c.bottomLeft,p.topRight,p.bottomRight)}addMissingRows(c,p,g){let u=this.topLeft,_=this.bottomLeft,b=this.topRight,C=this.bottomRight;if(c>0){let P=g?this.topLeft:this.topRight,E=Math.trunc(P.getY()-c);E<0&&(E=0);let D=new Re(P.getX(),E);g?u=D:b=D}if(p>0){let P=g?this.bottomLeft:this.bottomRight,E=Math.trunc(P.getY()+p);E>=this.image.getHeight()&&(E=this.image.getHeight()-1);let D=new Re(P.getX(),E);g?_=D:C=D}return new Sr(this.image,u,_,b,C)}getMinX(){return this.minX}getMaxX(){return this.maxX}getMinY(){return this.minY}getMaxY(){return this.maxY}getTopLeft(){return this.topLeft}getTopRight(){return this.topRight}getBottomLeft(){return this.bottomLeft}getBottomRight(){return this.bottomRight}}class uy{constructor(c,p,g,u){this.columnCount=c,this.errorCorrectionLevel=u,this.rowCountUpperPart=p,this.rowCountLowerPart=g,this.rowCount=p+g}getColumnCount(){return this.columnCount}getErrorCorrectionLevel(){return this.errorCorrectionLevel}getRowCount(){return this.rowCount}getRowCountUpperPart(){return this.rowCountUpperPart}getRowCountLowerPart(){return this.rowCountLowerPart}}class bs{constructor(){this.buffer=""}static form(c,p){let g=-1;function u(b,C,P,E,D,V){if(b==="%%")return"%";if(p[++g]===void 0)return;b=E?parseInt(E.substr(1)):void 0;let z=D?parseInt(D.substr(1)):void 0,$;switch(V){case"s":$=p[g];break;case"c":$=p[g][0];break;case"f":$=parseFloat(p[g]).toFixed(b);break;case"p":$=parseFloat(p[g]).toPrecision(b);break;case"e":$=parseFloat(p[g]).toExponential(b);break;case"x":$=parseInt(p[g]).toString(z||16);break;case"d":$=parseFloat(parseInt(p[g],z||10).toPrecision(b)).toFixed(0);break}$=typeof $=="object"?JSON.stringify($):(+$).toString(z);let X=parseInt(P),ee=P&&P[0]+""=="0"?"0":" ";for(;$.length<X;)$=C!==void 0?$+ee:ee+$;return $}let _=/%(-)?(0?[0-9]+)?([.][0-9]+)?([#][0-9]+)?([scfpexd%])/g;return c.replace(_,u)}format(c,...p){this.buffer+=bs.form(c,p)}toString(){return this.buffer}}let Vg=(()=>{class T{constructor(p){this.boundingBox=new Sr(p),this.codewords=new Array(p.getMaxY()-p.getMinY()+1)}getCodewordNearby(p){let g=this.getCodeword(p);if(g!=null)return g;for(let u=1;u<T.MAX_NEARBY_DISTANCE;u++){let _=this.imageRowToCodewordIndex(p)-u;if(_>=0&&(g=this.codewords[_],g!=null)||(_=this.imageRowToCodewordIndex(p)+u,_<this.codewords.length&&(g=this.codewords[_],g!=null)))return g}return null}imageRowToCodewordIndex(p){return p-this.boundingBox.getMinY()}
21setCodeword(p,g){this.codewords[this.imageRowToCodewordIndex(p)]=g}getCodeword(p){return this.codewords[this.imageRowToCodewordIndex(p)]}getBoundingBox(){return this.boundingBox}getCodewords(){return this.codewords}toString(){let p=new bs,g=0;for(let u of this.codewords){if(u==null){p.format("%3d: | %n",g++);continue}p.format("%3d: %3d|%3d%n",g++,u.getRowNumber(),u.getValue())}return p.toString()}}return T.MAX_NEARBY_DISTANCE=5,T})();class ys{constructor(){this.values=new Map}setValue(c){c=Math.trunc(c);let p=this.values.get(c);p==null&&(p=0),p++,this.values.set(c,p)}getValue(){let c=-1,p=new Array;for(let[g,u]of this.values.entries()){let _={getKey:()=>g,getValue:()=>u};_.getValue()>c?(c=_.getValue(),p=[],p.push(_.getKey())):_.getValue()===c&&p.push(_.getKey())}return He.toIntArray(p)}getConfidence(c){return this.values.get(c)}}class Lg extends Vg{constructor(c,p){super(c),this._isLeft=p}setRowNumbers(){for(let c of this.getCodewords())c?.setRowNumberAsRowIndicatorColumn()}adjustCompleteIndicatorColumnRowNumbers(c){let p=this.getCodewords();this.setRowNumbers(),this.removeIncorrectCodewords(p,c);let g=this.getBoundingBox(),u=this._isLeft?g.getTopLeft():g.getTopRight(),_=this._isLeft?g.getBottomLeft():g.getBottomRight(),b=this.imageRowToCodewordIndex(Math.trunc(u.getY())),C=this.imageRowToCodewordIndex(Math.trunc(_.getY())),P=-1,E=1,D=0;for(let V=b;V<C;V++){if(p[V]==null)continue;let z=p[V],$=z.getRowNumber()-P;if($===0)D++;else if($===1)E=Math.max(E,D),D=1,P=z.getRowNumber();else if($<0||z.getRowNumber()>=c.getRowCount()||$>V)p[V]=null;else{let X;E>2?X=(E-2)*$:X=$;let ee=X>=V;for(let ne=1;ne<=X&&!ee;ne++)ee=p[V-ne]!=null;ee?p[V]=null:(P=z.getRowNumber(),D=1)}}}getRowHeights(){let c=this.getBarcodeMetadata();if(c==null)return null;this.adjustIncompleteIndicatorColumnRowNumbers(c);let p=new Int32Array(c.getRowCount());for(let g of this.getCodewords())if(g!=null){let u=g.getRowNumber();if(u>=p.length)continue;p[u]++}return p}adjustIncompleteIndicatorColumnRowNumbers(c){let p=this.getBoundingBox(),g=this._isLeft?p.getTopLeft():p.getTopRight(),u=this._isLeft?p.getBottomLeft():p.getBottomRight(),_=this.imageRowToCodewordIndex(Math.trunc(g.getY())),b=this.imageRowToCodewordIndex(Math.trunc(u.getY())),C=this.getCodewords(),P=-1;for(let E=_;E<b;E++){if(C[E]==null)continue;let D=C[E];D.setRowNumberAsRowIndicatorColumn();let V=D.getRowNumber()-P;V===0||(V===1?P=D.getRowNumber():D.getRowNumber()>=c.getRowCount()?C[E]=null:P=D.getRowNumber())}}getBarcodeMetadata(){let c=this.getCodewords(),p=new ys,g=new ys,u=new ys,_=new ys;for(let C of c){if(C==null)continue;C.setRowNumberAsRowIndicatorColumn();let P=C.getValue()%30,E=C.getRowNumber();switch(this._isLeft||(E+=2),E%3){case 0:g.setValue(P*3+1);break;case 1:_.setValue(P/3),u.setValue(P%3);break;case 2:p.setValue(P+1);break}}if(p.getValue().length===0||g.getValue().length===0||u.getValue().length===0||_.getValue().length===0||p.getValue()[0]<1||g.getValue()[0]+u.getValue()[0]<He.MIN_ROWS_IN_BARCODE||g.getValue()[0]+u.getValue()[0]>He.MAX_ROWS_IN_BARCODE)return null;let b=new uy(p.getValue()[0],g.getValue()[0],u.getValue()[0],_.getValue()[0]);return this.removeIncorrectCodewords(c,b),b}removeIncorrectCodewords(c,p){for(let g=0;g<c.length;g++){let u=c[g];if(c[g]==null)continue;let _=u.getValue()%30,b=u.getRowNumber();if(b>p.getRowCount()){c[g]=null;continue}switch(this._isLeft||(b+=2),b%3){case 0:_*3+1!==p.getRowCountUpperPart()&&(c[g]=null);break;case 1:(Math.trunc(_/3)!==p.getErrorCorrectionLevel()||_%3!==p.getRowCountLowerPart())&&(c[g]=null);break;case 2:_+1!==p.getColumnCount()&&(c[g]=null);break}}}isLeft(){return this._isLeft}toString(){return"IsLeft: "+this._isLeft+` 22`+super.toString()}}class Cs{constructor(c,p){this.ADJUST_ROW_NUMBER_SKIP=2,this.barcodeMetadata=c,this.barcodeColumnCount=c.getColumnCount(),this.boundingBox=p,this.detectionResultColumns=new Array(this.barcodeColumnCount+2)}getDetectionResultColumns(){this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[0]),this.adjustIndicatorColumnRowNumbers(this.detectionResultColumns[this.barcodeColumnCount+1]);let c=He.MAX_CODEWORDS_IN_BARCODE,p;
22do p=c,c=this.adjustRowNumbersAndGetCount();while(c>0&&c<p);return this.detectionResultColumns}adjustIndicatorColumnRowNumbers(c){c?.adjustCompleteIndicatorColumnRowNumbers(this.barcodeMetadata)}adjustRowNumbersAndGetCount(){let c=this.adjustRowNumbersByRow();if(c===0)return 0;for(let p=1;p<this.barcodeColumnCount+1;p++){let g=this.detectionResultColumns[p].getCodewords();for(let u=0;u<g.length;u++)g[u]!=null&&(g[u].hasValidRowNumber()||this.adjustRowNumbers(p,u,g))}return c}adjustRowNumbersByRow(){return this.adjustRowNumbersFromBothRI(),this.adjustRowNumbersFromLRI()+this.adjustRowNumbersFromRRI()}adjustRowNumbersFromBothRI(){if(this.detectionResultColumns[0]==null||this.detectionResultColumns[this.barcodeColumnCount+1]==null)return;let c=this.detectionResultColumns[0].getCodewords(),p=this.detectionResultColumns[this.barcodeColumnCount+1].getCodewords();for(let g=0;g<c.length;g++)if(c[g]!=null&&p[g]!=null&&c[g].getRowNumber()===p[g].getRowNumber())for(let u=1;u<=this.barcodeColumnCount;u++){let _=this.detectionResultColumns[u].getCodewords()[g];_!=null&&(_.setRowNumber(c[g].getRowNumber()),_.hasValidRowNumber()||(this.detectionResultColumns[u].getCodewords()[g]=null))}}adjustRowNumbersFromRRI(){if(this.detectionResultColumns[this.barcodeColumnCount+1]==null)return 0;let c=0,p=this.detectionResultColumns[this.barcodeColumnCount+1].getCodewords();for(let g=0;g<p.length;g++){if(p[g]==null)continue;let u=p[g].getRowNumber(),_=0;for(let b=this.barcodeColumnCount+1;b>0&&_<this.ADJUST_ROW_NUMBER_SKIP;b--){let C=this.detectionResultColumns[b].getCodewords()[g];C!=null&&(_=Cs.adjustRowNumberIfValid(u,_,C),C.hasValidRowNumber()||c++)}}return c}adjustRowNumbersFromLRI(){if(this.detectionResultColumns[0]==null)return 0;let c=0,p=this.detectionResultColumns[0].getCodewords();for(let g=0;g<p.length;g++){if(p[g]==null)continue;let u=p[g].getRowNumber(),_=0;for(let b=1;b<this.barcodeColumnCount+1&&_<this.ADJUST_ROW_NUMBER_SKIP;b++){let C=this.detectionResultColumns[b].getCodewords()[g];C!=null&&(_=Cs.adjustRowNumberIfValid(u,_,C),C.hasValidRowNumber()||c++)}}return c}static adjustRowNumberIfValid(c,p,g){return g==null||g.hasValidRowNumber()||(g.isValidRowNumber(c)?(g.setRowNumber(c),p=0):++p),p}adjustRowNumbers(c,p,g){if(!this.detectionResultColumns[c-1])return;let u=g[p],_=this.detectionResultColumns[c-1].getCodewords(),b=_;this.detectionResultColumns[c+1]!=null&&(b=this.detectionResultColumns[c+1].getCodewords());let C=new Array(14);C[2]=_[p],C[3]=b[p],p>0&&(C[0]=g[p-1],C[4]=_[p-1],C[5]=b[p-1]),p>1&&(C[8]=g[p-2],C[10]=_[p-2],C[11]=b[p-2]),p<g.length-1&&(C[1]=g[p+1],C[6]=_[p+1],C[7]=b[p+1]),p<g.length-2&&(C[9]=g[p+2],C[12]=_[p+2],C[13]=b[p+2]);for(let P of C)if(Cs.adjustRowNumber(u,P))return}static adjustRowNumber(c,p){return p==null?!1:p.hasValidRowNumber()&&p.getBucket()===c.getBucket()?(c.setRowNumber(p.getRowNumber()),!0):!1}getBarcodeColumnCount(){return this.barcodeColumnCount}getBarcodeRowCount(){return this.barcodeMetadata.getRowCount()}getBarcodeECLevel(){return this.barcodeMetadata.getErrorCorrectionLevel()}setBoundingBox(c){this.boundingBox=c}getBoundingBox(){return this.boundingBox}setDetectionResultColumn(c,p){this.detectionResultColumns[c]=p}getDetectionResultColumn(c){return this.detectionResultColumns[c]}toString(){let c=this.detectionResultColumns[0];c==null&&(c=this.detectionResultColumns[this.barcodeColumnCount+1]);let p=new bs;for(let g=0;g<c.getCodewords().length;g++){p.format("CW %3d:",g);for(let u=0;u<this.barcodeColumnCount+2;u++){if(this.detectionResultColumns[u]==null){p.format(" | ");continue}let _=this.detectionResultColumns[u].getCodewords()[g];if(_==null){p.format(" | ");continue}p.format(" %3d|%3d",_.getRowNumber(),_.getValue())}p.format("%n")}return p.toString()}}let fy=(()=>{class T{constructor(p,g,u,_){this.rowNumber=T.BARCODE_ROW_UNKNOWN,this.startX=Math.trunc(p),this.endX=Math.trunc(g),this.bucket=Math.trunc(u),this.value=Math.trunc(_)}hasValidRowNumber(){return this.isValidRowNumber(this.rowNumber)}isValidRowNumber(p){return p!==T.BARCODE_ROW_UNKNOWN&&this.bucket===p%3*3}setRowNumberAsRowIndicatorColumn(){this.rowNumber=Math.trunc(Math.trunc(this.value/30)*3+Math.trunc(this.bucket/3))}getWidth(){return this.endX-this.startX}getStartX(){return this.startX}getEndX(){return this.endX}getBucket(){return this.bucket}getValue(){return this.value}getRowNumber(){return this.rowNumber}setRowNumber(p){this.rowNumber=p}toString(){return this.rowNumber+"|"+this.value}}return T.BARCODE_ROW_UNKNOWN=-1,T})();class Gn{static initialize(){for(let c=0;c<He.SYMBOL_TABLE.length;c++){let p=He.SYMBOL_TABLE[c],g=p&1;for(let u=0;u<He.BARS_IN_MODULE;u++){let _=0;for(;(p&1)===g;)_+=1,p>>=1;g=p&1,Gn.RATIOS_TABLE[c]||(Gn.RATIOS_TABLE[c]=new Array(He.BARS_IN_MODULE)),Gn.RATIOS_TABLE[c][He.BARS_IN_MODULE-u-1]=Math.fround(_/He.MODULES_IN_CODEWORD)}}this.bSymbolTableReady=!0}static getDecodedValue(c){let p=Gn.getDecodedCodewordValue(Gn.sampleBitCounts(c));return p!==-1?p:Gn.getClosestDecodedValue(c)}static sampleBitCounts(c){let p=dt.sum(c),g=new Int32Array(He.BARS_IN_MODULE),u=0,_=0;for(let b=0;b<He.MODULES_IN_CODEWORD;b++){let C=p/(2*He.MODULES_IN_CODEWORD)+b*p/He.MODULES_IN_CODEWORD;_+c[u]<=C&&(_+=c[u],u++),g[u]++}return g}static getDecodedCodewordValue(c){let p=Gn.getBitValue(c);return He.getCodeword(p)===-1?-1:p}static getBitValue(c){let p=0;for(let g=0;g<c.length;g++)for(let u=0;u<c[g];u++)p=p<<1|(g%2===0?1:0);return Math.trunc(p)}static getClosestDecodedValue(c){let p=dt.sum(c),g=new Array(He.BARS_IN_MODULE);if(p>1)for(let b=0;b<g.length;b++)g[b]=Math.fround(c[b]/p);let u=kl.MAX_VALUE,_=-1;this.bSymbolTableReady||Gn.initialize();for(let b=0;b<Gn.RATIOS_TABLE.length;b++){let C=0,P=Gn.RATIOS_TABLE[b];for(let E=0;E<He.BARS_IN_MODULE;E++){let D=Math.fround(P[E]-g[E]);if(C+=Math.fround(D*D),C>=u)break}C<u&&(u=C,_=He.SYMBOL_TABLE[b])}return _}}Gn.bSymbolTableReady=!1,Gn.RATIOS_TABLE=new Array(He.SYMBOL_TABLE.length).map(T=>T=new Array(He.BARS_IN_MODULE));class Fg{constructor(){this.segmentCount=-1,this.fileSize=-1,this.timestamp=-1,this.checksum=-1}getSegmentIndex(){return this.segmentIndex}setSegmentIndex(c){this.segmentIndex=c}getFileId(){return this.fileId}setFileId(c){this.fileId=c}getOptionalData(){return this.optionalData}setOptionalData(c){this.optionalData=c}isLastSegment(){return this.lastSegment}setLastSegment(c){this.lastSegment=c}getSegmentCount(){return this.segmentCount}setSegmentCount(c){this.segmentCount=c}getSender(){return this.sender||null}setSender(c){this.sender=c}getAddressee(){return this.addressee||null}setAddressee(c){this.addressee=c}getFileName(){return this.fileName}setFileName(c){this.fileName=c}getFileSize(){return this.fileSize}setFileSize(c){this.fileSize=c}getChecksum(){return this.checksum}setChecksum(c){this.checksum=c}getTimestamp(){return this.timestamp}setTimestamp(c){this.timestamp=c}}class zg{static parseLong(c,p=void 0){return parseInt(c,p)}}let hy=(()=>{class T extends f{}return T.kind="NullPointerException",T})();class _y{writeBytes(c){this.writeBytesOffset(c,0,c.length)}writeBytesOffset(c,p,g){if(c==null)throw new hy;if(p<0||p>c.length||g<0||p+g>c.length||p+g<0)throw new H;if(g===0)return;for(let u=0;u<g;u++)this.write(c[p+u])}flush(){}close(){}}class xy extends f{}class vy extends _y{constructor(c=32){if(super(),this.count=0,c<0)throw new y("Negative initial size: "+c);this.buf=new Uint8Array(c)}
22ensureCapacity(c){c-this.buf.length>0&&this.grow(c)}grow(c){let g=this.buf.length<<1;if(g-c<0&&(g=c),g<0){if(c<0)throw new xy;g=Z.MAX_VALUE}this.buf=G.copyOfUint8Array(this.buf,g)}write(c){this.ensureCapacity(this.count+1),this.buf[this.count]=c,this.count+=1}writeBytesOffset(c,p,g){if(p<0||p>c.length||g<0||p+g-c.length>0)throw new H;this.ensureCapacity(this.count+g),N.arraycopy(c,p,this.buf,this.count,g),this.count+=g}writeTo(c){c.writeBytesOffset(this.buf,0,this.count)}reset(){this.count=0}toByteArray(){return G.copyOfUint8Array(this.buf,this.count)}size(){return this.count}toString(c){return c?typeof c=="string"?this.toString_string(c):this.toString_number(c):this.toString_void()}toString_void(){return new String(this.buf).toString()}toString_string(c){return new String(this.buf).toString()}toString_number(c){return new String(this.buf).toString()}close(){}}var It=function(T){return T[T.ALPHA=0]="ALPHA",T[T.LOWER=1]="LOWER",T[T.MIXED=2]="MIXED",T[T.PUNCT=3]="PUNCT",T[T.ALPHA_SHIFT=4]="ALPHA_SHIFT",T[T.PUNCT_SHIFT=5]="PUNCT_SHIFT",T}(It||{});function Ug(){if(typeof window<"u")return window.BigInt||null;if(typeof global<"u")return global.BigInt||null;if(typeof self<"u")return self.BigInt||null;throw new Error("Can't search globals for BigInt!")}let Nl;function Lo(T){if(typeof Nl>"u"&&(Nl=Ug()),Nl===null)throw new Error("BigInt is not supported!");return Nl(T)}function by(){let T=[];T[0]=Lo(1);let c=Lo(900);T[1]=c;for(let p=2;p<16;p++)T[p]=T[p-1]*c;return T}class re{static decode(c,p){let g=new Ce(""),u=J.ISO8859_1;g.enableDecoding(u);let _=1,b=c[_++],C=new Fg;for(;_<c[0];){switch(b){case re.TEXT_COMPACTION_MODE_LATCH:_=re.textCompaction(c,_,g);break;case re.BYTE_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH_6:_=re.byteCompaction(b,c,u,_,g);break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:g.append(c[_++]);break;case re.NUMERIC_COMPACTION_MODE_LATCH:_=re.numericCompaction(c,_,g);break;case re.ECI_CHARSET:let E=J.getCharacterSetECIByValue(c[_++]);break;case re.ECI_GENERAL_PURPOSE:_+=2;break;case re.ECI_USER_DEFINED:_++;break;case re.BEGIN_MACRO_PDF417_CONTROL_BLOCK:_=re.decodeMacroBlock(c,_,C);break;case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:case re.MACRO_PDF417_TERMINATOR:throw new U;default:_--,_=re.textCompaction(c,_,g);break}if(_<c.length)b=c[_++];else throw U.getFormatInstance()}if(g.length()===0)throw U.getFormatInstance();let P=new gs(null,g.toString(),null,p);return P.setOther(C),P}static decodeMacroBlock(c,p,g){if(p+re.NUMBER_OF_SEQUENCE_CODEWORDS>c[0])throw U.getFormatInstance();let u=new Int32Array(re.NUMBER_OF_SEQUENCE_CODEWORDS);for(let C=0;C<re.NUMBER_OF_SEQUENCE_CODEWORDS;C++,p++)u[C]=c[p];g.setSegmentIndex(Z.parseInt(re.decodeBase900toBase10(u,re.NUMBER_OF_SEQUENCE_CODEWORDS)));let _=new Ce;p=re.textCompaction(c,p,_),g.setFileId(_.toString());let b=-1;for(c[p]===re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD&&(b=p+1);p<c[0];)switch(c[p]){case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:switch(p++,c[p]){case re.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME:let C=new Ce;p=re.textCompaction(c,p+1,C),g.setFileName(C.toString());break;case re.MACRO_PDF417_OPTIONAL_FIELD_SENDER:let P=new Ce;p=re.textCompaction(c,p+1,P),g.setSender(P.toString());break;case re.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE:let E=new Ce;p=re.textCompaction(c,p+1,E),g.setAddressee(E.toString());break;case re.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT:let D=new Ce;p=re.numericCompaction(c,p+1,D),g.setSegmentCount(Z.parseInt(D.toString()));break;case re.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP:let V=new Ce;p=re.numericCompaction(c,p+1,V),g.setTimestamp(zg.parseLong(V.toString()));break;case re.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM:let z=new Ce;p=re.numericCompaction(c,p+1,z),g.setChecksum(Z.parseInt(z.toString()));break;case re.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE:let $=new Ce;p=re.numericCompaction(c,p+1,$),g.setFileSize(zg.parseLong($.toString()));break;default:throw U.getFormatInstance()}break;case re.MACRO_PDF417_TERMINATOR:p++,g.setLastSegment(!0);break;default:throw U.getFormatInstance()}if(b!==-1){let C=p-b;g.isLastSegment()&&C--,g.setOptionalData(G.copyOfRange(c,b,b+C))}return p}static textCompaction(c,p,g){let u=new Int32Array((c[0]-p)*2),_=new Int32Array((c[0]-p)*2),b=0,C=!1;for(;p<c[0]&&!C;){let P=c[p++];if(P<re.TEXT_COMPACTION_MODE_LATCH)u[b]=P/30,u[b+1]=P%30,b+=2;else switch(P){case re.TEXT_COMPACTION_MODE_LATCH:u[b++]=re.TEXT_COMPACTION_MODE_LATCH;break;case re.BYTE_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH_6:case re.NUMERIC_COMPACTION_MODE_LATCH:case re.BEGIN_MACRO_PDF417_CONTROL_BLOCK:case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:case re.MACRO_PDF417_TERMINATOR:p--,C=!0;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u[b]=re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE,P=c[p++],_[b]=P,b++;break}}return re.decodeTextCompaction(u,_,b,g),p}static decodeTextCompaction(c,p,g,u){let _=It.ALPHA,b=It.ALPHA,C=0;for(;C<g;){let P=c[C],E="";switch(_){case It.ALPHA:if(P<26)E=String.fromCharCode(65+P);else switch(P){case 26:E=" ";break;case re.LL:_=It.LOWER;break;
22case re.ML:_=It.MIXED;break;case re.PS:b=_,_=It.PUNCT_SHIFT;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u.append(p[C]);break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break;case It.LOWER:if(P<26)E=String.fromCharCode(97+P);else switch(P){case 26:E=" ";break;case re.AS:b=_,_=It.ALPHA_SHIFT;break;case re.ML:_=It.MIXED;break;case re.PS:b=_,_=It.PUNCT_SHIFT;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u.append(p[C]);break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break;case It.MIXED:if(P<re.PL)E=re.MIXED_CHARS[P];else switch(P){case re.PL:_=It.PUNCT;break;case 26:E=" ";break;case re.LL:_=It.LOWER;break;case re.AL:_=It.ALPHA;break;case re.PS:b=_,_=It.PUNCT_SHIFT;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u.append(p[C]);break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break;case It.PUNCT:if(P<re.PAL)E=re.PUNCT_CHARS[P];else switch(P){case re.PAL:_=It.ALPHA;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u.append(p[C]);break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break;case It.ALPHA_SHIFT:if(_=b,P<26)E=String.fromCharCode(65+P);else switch(P){case 26:E=" ";break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break;case It.PUNCT_SHIFT:if(_=b,P<re.PAL)E=re.PUNCT_CHARS[P];else switch(P){case re.PAL:_=It.ALPHA;break;case re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE:u.append(p[C]);break;case re.TEXT_COMPACTION_MODE_LATCH:_=It.ALPHA;break}break}E!==""&&u.append(E),C++}}static byteCompaction(c,p,g,u,_){let b=new vy,C=0,P=0,E=!1;switch(c){case re.BYTE_COMPACTION_MODE_LATCH:let D=new Int32Array(6),V=p[u++];for(;u<p[0]&&!E;)switch(D[C++]=V,P=900*P+V,V=p[u++],V){case re.TEXT_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH:case re.NUMERIC_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH_6:case re.BEGIN_MACRO_PDF417_CONTROL_BLOCK:case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:case re.MACRO_PDF417_TERMINATOR:u--,E=!0;break;default:if(C%5===0&&C>0){for(let z=0;z<6;++z)b.write(Number(Lo(P)>>Lo(8*(5-z))));P=0,C=0}break}u===p[0]&&V<re.TEXT_COMPACTION_MODE_LATCH&&(D[C++]=V);for(let z=0;z<C;z++)b.write(D[z]);break;case re.BYTE_COMPACTION_MODE_LATCH_6:for(;u<p[0]&&!E;){let z=p[u++];if(z<re.TEXT_COMPACTION_MODE_LATCH)C++,P=900*P+z;else switch(z){case re.TEXT_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH:case re.NUMERIC_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH_6:case re.BEGIN_MACRO_PDF417_CONTROL_BLOCK:case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:case re.MACRO_PDF417_TERMINATOR:u--,E=!0;break}if(C%5===0&&C>0){for(let $=0;$<6;++$)b.write(Number(Lo(P)>>Lo(8*(5-$))));P=0,C=0}}break}return _.append(xe.decode(b.toByteArray(),g)),u}static numericCompaction(c,p,g){let u=0,_=!1,b=new Int32Array(re.MAX_NUMERIC_CODEWORDS);for(;p<c[0]&&!_;){let C=c[p++];if(p===c[0]&&(_=!0),C<re.TEXT_COMPACTION_MODE_LATCH)b[u]=C,u++;else switch(C){case re.TEXT_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH:case re.BYTE_COMPACTION_MODE_LATCH_6:case re.BEGIN_MACRO_PDF417_CONTROL_BLOCK:case re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD:case re.MACRO_PDF417_TERMINATOR:p--,_=!0;break}(u%re.MAX_NUMERIC_CODEWORDS===0||C===re.NUMERIC_COMPACTION_MODE_LATCH||_)&&u>0&&(g.append(re.decodeBase900toBase10(b,u)),u=0)}return p}static decodeBase900toBase10(c,p){let g=Lo(0);for(let _=0;_<p;_++)g+=re.EXP900[p-_-1]*Lo(c[_]);let u=g.toString();if(u.charAt(0)!=="1")throw new U;return u.substring(1)}}re.TEXT_COMPACTION_MODE_LATCH=900,re.BYTE_COMPACTION_MODE_LATCH=901,re.NUMERIC_COMPACTION_MODE_LATCH=902,re.BYTE_COMPACTION_MODE_LATCH_6=924,re.ECI_USER_DEFINED=925,re.ECI_GENERAL_PURPOSE=926,re.ECI_CHARSET=927,re.BEGIN_MACRO_PDF417_CONTROL_BLOCK=928,re.BEGIN_MACRO_PDF417_OPTIONAL_FIELD=923,re.MACRO_PDF417_TERMINATOR=922,re.MODE_SHIFT_TO_BYTE_COMPACTION_MODE=913,re.MAX_NUMERIC_CODEWORDS=15,re.MACRO_PDF417_OPTIONAL_FIELD_FILE_NAME=0,re.MACRO_PDF417_OPTIONAL_FIELD_SEGMENT_COUNT=1,re.MACRO_PDF417_OPTIONAL_FIELD_TIME_STAMP=2,re.MACRO_PDF417_OPTIONAL_FIELD_SENDER=3,re.MACRO_PDF417_OPTIONAL_FIELD_ADDRESSEE=4,re.MACRO_PDF417_OPTIONAL_FIELD_FILE_SIZE=5,re.MACRO_PDF417_OPTIONAL_FIELD_CHECKSUM=6,re.PL=25,re.LL=27,re.AS=27,re.ML=28,re.AL=28,re.PS=29,re.PAL=29,re.PUNCT_CHARS=`;<>@[\\]_\`~!\r ,: 23-.$/"|*()?{}'`,re.MIXED_CHARS="0123456789&\r ,:#-.$/+%*=^",re.EXP900=Ug()?by():[],re.NUMBER_OF_SEQUENCE_CODEWORDS=2;class Qe{constructor(){}static decode(c,p,g,u,_,b,C){let P=new Sr(c,p,g,u,_),E=null,D=null,V;for(let X=!0;;X=!1){if(p!=null&&(E=Qe.getRowIndicatorColumn(c,P,p,!0,b,C)),u!=null&&(D=
23Qe.getRowIndicatorColumn(c,P,u,!1,b,C)),V=Qe.merge(E,D),V==null)throw se.getNotFoundInstance();let ee=V.getBoundingBox();if(X&&ee!=null&&(ee.getMinY()<P.getMinY()||ee.getMaxY()>P.getMaxY()))P=ee;else break}V.setBoundingBox(P);let z=V.getBarcodeColumnCount()+1;V.setDetectionResultColumn(0,E),V.setDetectionResultColumn(z,D);let $=E!=null;for(let X=1;X<=z;X++){let ee=$?X:z-X;if(V.getDetectionResultColumn(ee)!==void 0)continue;let ne;ee===0||ee===z?ne=new Lg(P,ee===0):ne=new Vg(P),V.setDetectionResultColumn(ee,ne);let oe=-1,ve=oe;for(let ke=P.getMinY();ke<=P.getMaxY();ke++){if(oe=Qe.getStartColumn(V,ee,ke,$),oe<0||oe>P.getMaxX()){if(ve===-1)continue;oe=ve}let me=Qe.detectCodeword(c,P.getMinX(),P.getMaxX(),$,oe,ke,b,C);me!=null&&(ne.setCodeword(ke,me),ve=oe,b=Math.min(b,me.getWidth()),C=Math.max(C,me.getWidth()))}}return Qe.createDecoderResult(V)}static merge(c,p){if(c==null&&p==null)return null;let g=Qe.getBarcodeMetadata(c,p);if(g==null)return null;let u=Sr.merge(Qe.adjustBoundingBox(c),Qe.adjustBoundingBox(p));return new Cs(g,u)}static adjustBoundingBox(c){if(c==null)return null;let p=c.getRowHeights();if(p==null)return null;let g=Qe.getMax(p),u=0;for(let C of p)if(u+=g-C,C>0)break;let _=c.getCodewords();for(let C=0;u>0&&_[C]==null;C++)u--;let b=0;for(let C=p.length-1;C>=0&&(b+=g-p[C],!(p[C]>0));C--);for(let C=_.length-1;b>0&&_[C]==null;C--)b--;return c.getBoundingBox().addMissingRows(u,b,c.isLeft())}static getMax(c){let p=-1;for(let g of c)p=Math.max(p,g);return p}static getBarcodeMetadata(c,p){let g;if(c==null||(g=c.getBarcodeMetadata())==null)return p==null?null:p.getBarcodeMetadata();let u;return p==null||(u=p.getBarcodeMetadata())==null?g:g.getColumnCount()!==u.getColumnCount()&&g.getErrorCorrectionLevel()!==u.getErrorCorrectionLevel()&&g.getRowCount()!==u.getRowCount()?null:g}static getRowIndicatorColumn(c,p,g,u,_,b){let C=new Lg(p,u);for(let P=0;P<2;P++){let E=P===0?1:-1,D=Math.trunc(Math.trunc(g.getX()));for(let V=Math.trunc(Math.trunc(g.getY()));V<=p.getMaxY()&&V>=p.getMinY();V+=E){let z=Qe.detectCodeword(c,0,c.getWidth(),u,D,V,_,b);z!=null&&(C.setCodeword(V,z),u?D=z.getStartX():D=z.getEndX())}}return C}static adjustCodewordCount(c,p){let g=p[0][1],u=g.getValue(),_=c.getBarcodeColumnCount()*c.getBarcodeRowCount()-Qe.getNumberOfECCodeWords(c.getBarcodeECLevel());if(u.length===0){if(_<1||_>He.MAX_CODEWORDS_IN_BARCODE)throw se.getNotFoundInstance();g.setValue(_)}else u[0]!==_&&g.setValue(_)}static createDecoderResult(c){let p=Qe.createBarcodeMatrix(c);Qe.adjustCodewordCount(c,p);let g=new Array,u=new Int32Array(c.getBarcodeRowCount()*c.getBarcodeColumnCount()),_=[],b=new Array;for(let P=0;P<c.getBarcodeRowCount();P++)for(let E=0;E<c.getBarcodeColumnCount();E++){let D=p[P][E+1].getValue(),V=P*c.getBarcodeColumnCount()+E;D.length===0?g.push(V):D.length===1?u[V]=D[0]:(b.push(V),_.push(D))}let C=new Array(_.length);for(let P=0;P<C.length;P++)C[P]=_[P];return Qe.createDecoderResultFromAmbiguousValues(c.getBarcodeECLevel(),u,He.toIntArray(g),He.toIntArray(b),C)}static createDecoderResultFromAmbiguousValues(c,p,g,u,_){let b=new Int32Array(u.length),C=100;for(;C-- >0;){for(let P=0;P<b.length;P++)p[u[P]]=_[P][b[P]];try{return Qe.decodeCodewords(p,c,g)}catch(P){if(!(P instanceof I))throw P}if(b.length===0)throw I.getChecksumInstance();for(let P=0;P<b.length;P++)if(b[P]<_[P].length-1){b[P]++;break}else if(b[P]=0,P===b.length-1)throw I.getChecksumInstance()}throw I.getChecksumInstance()}static createBarcodeMatrix(c){let p=Array.from({length:c.getBarcodeRowCount()},()=>new Array(c.getBarcodeColumnCount()+2));for(let u=0;u<p.length;u++)for(let _=0;_<p[u].length;_++)p[u][_]=new ys;let g=0;for(let u of c.getDetectionResultColumns()){if(u!=null){for(let _ of u.getCodewords())if(_!=null){let b=_.getRowNumber();if(b>=0){if(b>=p.length)continue;p[b][g].setValue(_.getValue())}}}g++}return p}static isValidBarcodeColumn(c,p){return p>=0&&p<=c.getBarcodeColumnCount()+1}static getStartColumn(c,p,g,u){let _=u?1:-1,b=null;if(Qe.isValidBarcodeColumn(c,p-_)&&(b=c.getDetectionResultColumn(p-_).getCodeword(g)),b!=null)return u?b.getEndX():b.getStartX();if(b=c.getDetectionResultColumn(p).getCodewordNearby(g),b!=null)return u?b.getStartX():b.getEndX();if(Qe.isValidBarcodeColumn(c,p-_)&&(b=c.getDetectionResultColumn(p-_).getCodewordNearby(g)),b!=null)return u?b.getEndX():b.getStartX();let C=0;for(;Qe.isValidBarcodeColumn(c,p-_);){p-=_;for(let P of c.getDetectionResultColumn(p).getCodewords())if(P!=null)return(u?P.getEndX():P.getStartX())+_*C*(P.getEndX()-P.getStartX());C++}return u?c.getBoundingBox().getMinX():c.getBoundingBox().getMaxX()}static detectCodeword(c,p,g,u,_,b,C,P){_=Qe.adjustCodewordStartColumn(c,p,g,u,_,b);let E=Qe.getModuleBitCount(c,p,g,u,_,b);if(E==null)return null;let D,V=dt.sum(E);if(u)D=_+V;else{for(let X=0;X<E.length/2;X++){let ee=E[X];E[X]=E[E.length-1-X],E[E.length-1-X]=ee}D=_,_=D-V}if(!Qe.checkCodewordSkew(V,C,P))return null;let z=Gn.getDecodedValue(E),$=He.getCodeword(z);return $===-1?null:new fy(_,D,Qe.getCodewordBucketNumber(z),$)}static getModuleBitCount(c,p,g,u,_,b){let C=_,P=new Int32Array(8),E=0,D=u?1:-1,V=u;for(;(u?C<g:C>=p)&&E<P.length;)c.get(C,b)===V?(P[E]++,C+=D):(E++,V=!V);return E===P.length||C===(u?g:p)&&E===P.length-1?P:null}static getNumberOfECCodeWords(c){return 2<<c}static adjustCodewordStartColumn(c,p,g,u,_,b){let C=_,P=u?-1:1;for(let E=0;E<2;E++){for(;(u?C>=p:C<g)&&u===c.get(C,b);
23){if(Math.abs(_-C)>Qe.CODEWORD_SKEW_SIZE)return _;C+=P}P=-P,u=!u}return C}static checkCodewordSkew(c,p,g){return p-Qe.CODEWORD_SKEW_SIZE<=c&&c<=g+Qe.CODEWORD_SKEW_SIZE}static decodeCodewords(c,p,g){if(c.length===0)throw U.getFormatInstance();let u=1<<p+1,_=Qe.correctErrors(c,g,u);Qe.verifyCodewordCount(c,u);let b=re.decode(c,""+p);return b.setErrorsCorrected(_),b.setErasures(g.length),b}static correctErrors(c,p,g){if(p!=null&&p.length>g/2+Qe.MAX_ERRORS||g<0||g>Qe.MAX_EC_CODEWORDS)throw I.getChecksumInstance();return Qe.errorCorrection.decode(c,g,p)}static verifyCodewordCount(c,p){if(c.length<4)throw U.getFormatInstance();let g=c[0];if(g>c.length)throw U.getFormatInstance();if(g===0)if(p<c.length)c[0]=c.length-p;else throw U.getFormatInstance()}static getBitCountForCodeword(c){let p=new Int32Array(8),g=0,u=p.length-1;for(;!((c&1)!==g&&(g=c&1,u--,u<0));)p[u]++,c>>=1;return p}static getCodewordBucketNumber(c){return c instanceof Int32Array?this.getCodewordBucketNumber_Int32Array(c):this.getCodewordBucketNumber_number(c)}static getCodewordBucketNumber_number(c){return Qe.getCodewordBucketNumber(Qe.getBitCountForCodeword(c))}static getCodewordBucketNumber_Int32Array(c){return(c[0]-c[2]+c[4]-c[6]+9)%9}static toString(c){let p=new bs;for(let g=0;g<c.length;g++){p.format("Row %2d: ",g);for(let u=0;u<c[g].length;u++){let _=c[g][u];_.getValue().length===0?p.format(" ",null):p.format("%4d(%2d)",_.getValue()[0],_.getConfidence(_.getValue()[0]))}p.format("%n")}return p.toString()}}Qe.CODEWORD_SKEW_SIZE=2,Qe.MAX_ERRORS=3,Qe.MAX_EC_CODEWORDS=512,Qe.errorCorrection=new Ng;class Sn{decode(c,p=null){let g=Sn.decode(c,p,!1);if(g==null||g.length===0||g[0]==null)throw se.getNotFoundInstance();return g[0]}decodeMultiple(c,p=null){try{return Sn.decode(c,p,!0)}catch(g){throw g instanceof U||g instanceof I?se.getNotFoundInstance():g}}static decode(c,p,g){let u=new Array,_=Ze.detectMultiple(c,p,g);for(let b of _.getPoints()){let C=Qe.decode(_.getBits(),b[4],b[5],b[6],b[7],Sn.getMinCodewordWidth(b),Sn.getMaxCodewordWidth(b)),P=new $t(C.getText(),C.getRawBytes(),void 0,b,Ne.PDF_417);P.putMetadata(Bt.ERROR_CORRECTION_LEVEL,C.getECLevel());let E=C.getOther();E!=null&&P.putMetadata(Bt.PDF417_EXTRA_METADATA,E),u.push(P)}return u.map(b=>b)}static getMaxWidth(c,p){return c==null||p==null?0:Math.trunc(Math.abs(c.getX()-p.getX()))}static getMinWidth(c,p){return c==null||p==null?Z.MAX_VALUE:Math.trunc(Math.abs(c.getX()-p.getX()))}static getMaxCodewordWidth(c){return Math.floor(Math.max(Math.max(Sn.getMaxWidth(c[0],c[4]),Sn.getMaxWidth(c[6],c[2])*He.MODULES_IN_CODEWORD/He.MODULES_IN_STOP_PATTERN),Math.max(Sn.getMaxWidth(c[1],c[5]),Sn.getMaxWidth(c[7],c[3])*He.MODULES_IN_CODEWORD/He.MODULES_IN_STOP_PATTERN)))}static getMinCodewordWidth(c){return Math.floor(Math.min(Math.min(Sn.getMinWidth(c[0],c[4]),Sn.getMinWidth(c[6],c[2])*He.MODULES_IN_CODEWORD/He.MODULES_IN_STOP_PATTERN),Math.min(Sn.getMinWidth(c[1],c[5]),Sn.getMinWidth(c[7],c[3])*He.MODULES_IN_CODEWORD/He.MODULES_IN_STOP_PATTERN)))}reset(){}}let M0=(()=>{class T extends f{}return T.kind="ReaderException",T})();class jg{constructor(c,p){this.verbose=c===!0,p&&this.setHints(p)}decode(c,p){return p&&this.setHints(p),this.decodeInternal(c)}decodeWithState(c){return(this.readers===null||this.readers===void 0)&&this.setHints(null),this.decodeInternal(c)}setHints(c){this.hints=c;let p=!t(c)&&c.get(Y.TRY_HARDER)===!0,g=t(c)?null:c.get(Y.POSSIBLE_FORMATS),u=new Array;if(!t(g)){let _=g.some(b=>b===Ne.UPC_A||b===Ne.UPC_E||b===Ne.EAN_13||b===Ne.EAN_8||b===Ne.CODABAR||b===Ne.CODE_39||b===Ne.CODE_93||b===Ne.CODE_128||b===Ne.ITF||b===Ne.RSS_14||b===Ne.RSS_EXPANDED);_&&!p&&u.push(new ra(c,this.verbose)),g.includes(Ne.QR_CODE)&&u.push(new Vo),g.includes(Ne.DATA_MATRIX)&&u.push(new Rl),g.includes(Ne.AZTEC)&&u.push(new Tl),g.includes(Ne.PDF_417)&&u.push(new Sn),_&&p&&u.push(new ra(c,this.verbose))}u.length===0&&(p||u.push(new ra(c,this.verbose)),u.push(new Vo),u.push(new Rl),u.push(new Tl),u.push(new Sn),p&&u.push(new ra(c,this.verbose))),this.readers=u}reset(){if(this.readers!==null)for(let c of this.readers)c.reset()}decodeInternal(c){if(this.readers===null)throw new M0("No readers where selected, nothing can be read.");for(let p of this.readers)try{return p.decode(c,this.hints)}catch(g){if(g instanceof M0)continue}throw new se("No MultiFormat Readers were able to detect the code.")}}class yy extends pi{constructor(c=null,p=500){let g=new jg;g.setHints(c),super(g,p)}decodeBitmap(c){return this.reader.decodeWithState(c)}}class Cy extends pi{constructor(c=500){super(new Sn,c)}}class wy extends pi{constructor(c=500){super(new Vo,c)}}var Hg=function(T){return T[T.ERROR_CORRECTION=0]="ERROR_CORRECTION",T[T.CHARACTER_SET=1]="CHARACTER_SET",T[T.DATA_MATRIX_SHAPE=2]="DATA_MATRIX_SHAPE",T[T.MIN_SIZE=3]="MIN_SIZE",T[T.MAX_SIZE=4]="MAX_SIZE",T[T.MARGIN=5]="MARGIN",T[T.PDF417_COMPACT=6]="PDF417_COMPACT",T[T.PDF417_COMPACTION=7]="PDF417_COMPACTION",T[T.PDF417_DIMENSIONS=8]="PDF417_DIMENSIONS",T[T.AZTEC_LAYERS=9]="AZTEC_LAYERS",T[T.QR_VERSION=10]="QR_VERSION",T}(Hg||{}),un=Hg;class S0{constructor(c){this.field=c,this.cachedGenerators=[],this.cachedGenerators.push(new Wn(c,Int32Array.from([1])))}buildGenerator(c){let p=this.cachedGenerators;if(c>=p.length){let g=p[p.length-1],u=this.field;for(let _=p.length;_<=c;_++){let b=g.multiply(new Wn(u,Int32Array.from([1,u.exp(_-1+u.getGeneratorBase())])));p.push(b),g=b}}return p[c]}encode(c,p){if(p===0)throw new y("No error correction bytes");let g=c.length-p;if(g<=0)throw new y("No data bytes provided");let u=this.buildGenerator(p),_=new Int32Array(g);N.arraycopy(c,0,_,0,g);let b=new Wn(this.field,_);b=b.multiplyByMonomial(p,1);let P=b.divide(u)[1].getCoefficients(),E=p-P.length;for(let D=0;D<E;D++)c[g+D]=0;N.arraycopy(P,0,c,g+E,P.length)}}let aa=(()=>{class T{constructor(){}static applyMaskPenaltyRule1(p){return T.applyMaskPenaltyRule1Internal(p,!0)+T.applyM
23askPenaltyRule1Internal(p,!1)}static applyMaskPenaltyRule2(p){let g=0,u=p.getArray(),_=p.getWidth(),b=p.getHeight();for(let C=0;C<b-1;C++){let P=u[C];for(let E=0;E<_-1;E++){let D=P[E];D===P[E+1]&&D===u[C+1][E]&&D===u[C+1][E+1]&&g++}}return T.N2*g}static applyMaskPenaltyRule3(p){let g=0,u=p.getArray(),_=p.getWidth(),b=p.getHeight();for(let C=0;C<b;C++)for(let P=0;P<_;P++){let E=u[C];P+6<_&&E[P]===1&&E[P+1]===0&&E[P+2]===1&&E[P+3]===1&&E[P+4]===1&&E[P+5]===0&&E[P+6]===1&&(T.isWhiteHorizontal(E,P-4,P)||T.isWhiteHorizontal(E,P+7,P+11))&&g++,C+6<b&&u[C][P]===1&&u[C+1][P]===0&&u[C+2][P]===1&&u[C+3][P]===1&&u[C+4][P]===1&&u[C+5][P]===0&&u[C+6][P]===1&&(T.isWhiteVertical(u,P,C-4,C)||T.isWhiteVertical(u,P,C+7,C+11))&&g++}return g*T.N3}static isWhiteHorizontal(p,g,u){g=Math.max(g,0),u=Math.min(u,p.length);for(let _=g;_<u;_++)if(p[_]===1)return!1;return!0}static isWhiteVertical(p,g,u,_){u=Math.max(u,0),_=Math.min(_,p.length);for(let b=u;b<_;b++)if(p[b][g]===1)return!1;return!0}static applyMaskPenaltyRule4(p){let g=0,u=p.getArray(),_=p.getWidth(),b=p.getHeight();for(let E=0;E<b;E++){let D=u[E];for(let V=0;V<_;V++)D[V]===1&&g++}let C=p.getHeight()*p.getWidth();return Math.floor(Math.abs(g*2-C)*10/C)*T.N4}static getDataMaskBit(p,g,u){let _,b;switch(p){case 0:_=u+g&1;break;case 1:_=u&1;break;case 2:_=g%3;break;case 3:_=(u+g)%3;break;case 4:_=Math.floor(u/2)+Math.floor(g/3)&1;break;case 5:b=u*g,_=(b&1)+b%3;break;case 6:b=u*g,_=(b&1)+b%3&1;break;case 7:b=u*g,_=b%3+(u+g&1)&1;break;default:throw new y("Invalid mask pattern: "+p)}return _===0}static applyMaskPenaltyRule1Internal(p,g){let u=0,_=g?p.getHeight():p.getWidth(),b=g?p.getWidth():p.getHeight(),C=p.getArray();for(let P=0;P<_;P++){let E=0,D=-1;for(let V=0;V<b;V++){let z=g?C[P][V]:C[V][P];z===D?E++:(E>=5&&(u+=T.N1+(E-5)),E=1,D=z)}E>=5&&(u+=T.N1+(E-5))}return u}}return T.N1=3,T.N2=3,T.N3=40,T.N4=10,T})();class Vl{constructor(c,p){this.width=c,this.height=p;let g=new Array(p);for(let u=0;u!==p;u++)g[u]=new Uint8Array(c);this.bytes=g}getHeight(){return this.height}getWidth(){return this.width}get(c,p){return this.bytes[p][c]}getArray(){return this.bytes}setNumber(c,p,g){this.bytes[p][c]=g}setBoolean(c,p,g){this.bytes[p][c]=g?1:0}clear(c){for(let p of this.bytes)G.fill(p,c)}equals(c){if(!(c instanceof Vl))return!1;let p=c;if(this.width!==p.width||this.height!==p.height)return!1;for(let g=0,u=this.height;g<u;++g){let _=this.bytes[g],b=p.bytes[g];for(let C=0,P=this.width;C<P;++C)if(_[C]!==b[C])return!1}return!0}toString(){let c=new Ce;for(let p=0,g=this.height;p<g;++p){let u=this.bytes[p];for(let _=0,b=this.width;_<b;++_)switch(u[_]){case 0:c.append(" 0");break;case 1:c.append(" 1");break;default:c.append(" ");break}c.append(` 24`)}return c.toString()}}let Ll=(()=>{class T{constructor(){this.maskPattern=-1}getMode(){return this.mode}getECLevel(){return this.ecLevel}getVersion(){return this.version}getMaskPattern(){return this.maskPattern}getMatrix(){return this.matrix}toString(){let p=new Ce;return p.append(`<< 25`),p.append(" mode: "),p.append(this.mode?this.mode.toString():"null"),p.append(` 26 ecLevel: `),p.append(this.ecLevel?this.ecLevel.toString():"null"),p.append(` 27 version: `),p.append(this.version?this.version.toString():"null"),p.append(` 28 maskPattern: `),p.append(this.maskPattern.toString()),this.matrix?(p.append(` 29 matrix: 30`),p.append(this.matrix.toString())):p.append(` 31 matrix: null 32`),p.append(`>> 33`),p.toString()}setMode(p){this.mode=p}setECLevel(p){this.ecLevel=p}setVersion(p){this.version=p}setMaskPattern(p){this.maskPattern=p}setMatrix(p){this.matrix=p}static isValidMaskPattern(p){return p>=0&&p<T.NUM_MASK_PATTERNS}}return T.NUM_MASK_PATTERNS=8,T})(),Vt=(()=>{class T extends f{}return T.kind="WriterException",T})();class Ue{constructor(){}static clearMatrix(c){c.clear(255)}static buildMatrix(c,p,g,u,_){Ue.clearMatrix(_),Ue.embedBasicPatterns(g,_),Ue.embedTypeInfo(p,u,_),Ue.maybeEmbedVersionInfo(g,_),Ue.embedDataBits(c,u,_)}static embedBasicPatterns(c,p){Ue.embedPositionDetectionPatternsAndSeparators(p),Ue.embedDarkDotAtLeftBottomCorner(p),Ue.maybeEmbedPositionAdjustmentPatterns(c,p),Ue.embedTimingPatterns(p)}static embedTypeInfo(c,p,g){let u=new Q;Ue.makeTypeInfoBits(c,p,u);for(let _=0,b=u.getSize();_<b;++_){let C=u.get(u.getSize()-1-_),P=Ue.TYPE_INFO_COORDINATES[_],E=P[0],D=P[1];if(g.setBoolean(E,D,C),_<8){let V=g.getWidth()-_-1;g.setBoolean(V,8,C)}else{let z=g.getHeight()-7+(_-8);g.setBoolean(8,z,C)}}}
33static maybeEmbedVersionInfo(c,p){if(c.getVersionNumber()<7)return;let g=new Q;Ue.makeVersionInfoBits(c,g);let u=6*3-1;for(let _=0;_<6;++_)for(let b=0;b<3;++b){let C=g.get(u);u--,p.setBoolean(_,p.getHeight()-11+b,C),p.setBoolean(p.getHeight()-11+b,_,C)}}static embedDataBits(c,p,g){let u=0,_=-1,b=g.getWidth()-1,C=g.getHeight()-1;for(;b>0;){for(b===6&&(b-=1);C>=0&&C<g.getHeight();){for(let P=0;P<2;++P){let E=b-P;if(!Ue.isEmpty(g.get(E,C)))continue;let D;u<c.getSize()?(D=c.get(u),++u):D=!1,p!==255&&aa.getDataMaskBit(p,E,C)&&(D=!D),g.setBoolean(E,C,D)}C+=_}_=-_,C+=_,b-=2}if(u!==c.getSize())throw new Vt("Not all bits consumed: "+u+"/"+c.getSize())}static findMSBSet(c){return 32-Z.numberOfLeadingZeros(c)}static calculateBCHCode(c,p){if(p===0)throw new y("0 polynomial");let g=Ue.findMSBSet(p);for(c<<=g-1;Ue.findMSBSet(c)>=g;)c^=p<<Ue.findMSBSet(c)-g;return c}static makeTypeInfoBits(c,p,g){if(!Ll.isValidMaskPattern(p))throw new Vt("Invalid mask pattern");let u=c.getBits()<<3|p;g.appendBits(u,5);let _=Ue.calculateBCHCode(u,Ue.TYPE_INFO_POLY);g.appendBits(_,10);let b=new Q;if(b.appendBits(Ue.TYPE_INFO_MASK_PATTERN,15),g.xor(b),g.getSize()!==15)throw new Vt("should not happen but we got: "+g.getSize())}static makeVersionInfoBits(c,p){p.appendBits(c.getVersionNumber(),6);let g=Ue.calculateBCHCode(c.getVersionNumber(),Ue.VERSION_INFO_POLY);if(p.appendBits(g,12),p.getSize()!==18)throw new Vt("should not happen but we got: "+p.getSize())}static isEmpty(c){return c===255}static embedTimingPatterns(c){for(let p=8;p<c.getWidth()-8;++p){let g=(p+1)%2;Ue.isEmpty(c.get(p,6))&&c.setNumber(p,6,g),Ue.isEmpty(c.get(6,p))&&c.setNumber(6,p,g)}}static embedDarkDotAtLeftBottomCorner(c){if(c.get(8,c.getHeight()-8)===0)throw new Vt;c.setNumber(8,c.getHeight()-8,1)}static embedHorizontalSeparationPattern(c,p,g){for(let u=0;u<8;++u){if(!Ue.isEmpty(g.get(c+u,p)))throw new Vt;g.setNumber(c+u,p,0)}}static embedVerticalSeparationPattern(c,p,g){for(let u=0;u<7;++u){if(!Ue.isEmpty(g.get(c,p+u)))throw new Vt;g.setNumber(c,p+u,0)}}static embedPositionAdjustmentPattern(c,p,g){for(let u=0;u<5;++u){let _=Ue.POSITION_ADJUSTMENT_PATTERN[u];for(let b=0;b<5;++b)g.setNumber(c+b,p+u,_[b])}}static embedPositionDetectionPattern(c,p,g){for(let u=0;u<7;++u){let _=Ue.POSITION_DETECTION_PATTERN[u];for(let b=0;b<7;++b)g.setNumber(c+b,p+u,_[b])}}static embedPositionDetectionPatternsAndSeparators(c){let p=Ue.POSITION_DETECTION_PATTERN[0].length;Ue.embedPositionDetectionPattern(0,0,c),Ue.embedPositionDetectionPattern(c.getWidth()-p,0,c),Ue.embedPositionDetectionPattern(0,c.getWidth()-p,c);let g=8;Ue.embedHorizontalSeparationPattern(0,g-1,c),Ue.embedHorizontalSeparationPattern(c.getWidth()-g,g-1,c),Ue.embedHorizontalSeparationPattern(0,c.getWidth()-g,c);let u=7;Ue.embedVerticalSeparationPattern(u,0,c),Ue.embedVerticalSeparationPattern(c.getHeight()-u-1,0,c),Ue.embedVerticalSeparationPattern(u,c.getHeight()-u,c)}static maybeEmbedPositionAdjustmentPatterns(c,p){if(c.getVersionNumber()<2)return;let g=c.getVersionNumber()-1,u=Ue.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[g];for(let _=0,b=u.length;_!==b;_++){let C=u[_];if(C>=0)for(let P=0;P!==b;P++){let E=u[P];E>=0&&Ue.isEmpty(p.get(E,C))&&Ue.embedPositionAdjustmentPattern(E-2,C-2,p)}}}}Ue.POSITION_DETECTION_PATTERN=Array.from([Int32Array.from([1,1,1,1,1,1,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,1,1,1,0,1]),Int32Array.from([1,0,0,0,0,0,1]),Int32Array.from([1,1,1,1,1,1,1])]),Ue.POSITION_ADJUSTMENT_PATTERN=Array.from([Int32Array.from([1,1,1,1,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,0,1,0,1]),Int32Array.from([1,0,0,0,1]),Int32Array.from([1,1,1,1,1])]),Ue.POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE=Array.from([Int32Array.from([-1,-1,-1,-1,-1,-1,-1]),Int32Array.from([6,18,-1,-1,-1,-1,-1]),Int32Array.from([6,22,-1,-1,-1,-1,-1]),Int32Array.from([6,26,-1,-1,-1,-1,-1]),Int32Array.from([6,30,-1,-1,-1,-1,-1]),Int32Array.from([6,34,-1,-1,-1,-1,-1]),Int32Array.from([6,22,38,-1,-1,-1,-1]),Int32Array.from([6,24,42,-1,-1,-1,-1]),Int32Array.from([6,26,46,-1,-1,-1,-1]),Int32Array.from([6,28,50,-1,-1,-1,-1]),Int32Array.from([6,30,54,-1,-1,-1,-1]),Int32Array.from([6,32,58,-1,-1,-1,-1]),Int32Array.from([6,34,62,-1,-1,-1,-1]),Int32Array.from([6,26,46,66,-1,-1,-1]),Int32Array.from([6,26,48,70,-1,-1,-1]),Int32Array.from([6,26,50,74,-1,-1,-1]),Int32Array.from([6,30,54,78,-1,-1,-1]),Int32Array.from([6,30,56,82,-1,-1,-1]),Int32Array.from([6,30,58,86,-1,-1,-1]),Int32Array.from([6,34,62,90,-1,-1,-1]),Int32Array.from([6,28,50,72,94,-1,-1]),Int32Array.from([6,26,50,74,98,-1,-1]),Int32Array.from([6,30,54,78,102,-1,-1]),Int32Array.from([6,28,54,80,106,-1,-1]),Int32Array.from([6,32,58,84,110,-1,-1]),Int32Array.from([6,30,58,86,114,-1,-1]),Int32Array.from([6,34,62,90,118,-1,-1]),Int32Array.from([6,26,50,74,98,122,-1]),Int32Array.from([6,30,54,78,102,126,-1]),Int32Array.from([6,26,52,78,104,130,-1]),Int32Array.from([6,30,56,82,108,134,-1]),Int32Array.from([6,34,60,86,112,138,-1]),Int32Array.from([6,30,58,86,114,142,-1]),Int32Array.from([6,34,62,90,118,146,-1]),Int32Array.from([6,30,54,78,102,126,150]),Int32Array.from([6,24,50,76,102,128,154]),Int32Array.from([6,28,54,80,106,132,158]),Int32Array.from([6,32,58,84,110,136,162]),Int32Array.from([6,26,54,82,110,138,166]),Int32Array.from([6,30,58,86,114,142,170])]),Ue.TYPE_INFO_COORDINATES=Array.from([Int32Array.from([8,0]),Int32Array.from([8,1]),Int32Array.from([8,2]),Int32Array.from([8,3]),Int32Array.from([8,4]),Int32Array.from([8,5]),Int32Array.from([8,7]),Int32Array.from([8,8]),Int32Array.from([7,8]),Int32Array.from([5,8]),Int32Array.from([4,8]),Int32Array.from([3,8]),Int32Array.from([2,8]),Int32Array.from([1,8]),Int32Array.from([0,8])]),Ue.VERSION_INFO_POLY=7973,Ue.TYPE_INFO_POLY=1335,Ue.TYPE_INFO_MASK_PATTERN=21522;class Py{constructor(c,p){this.dataBytes=c,this.errorCorrectionBytes=p}getDataBytes(){return this.dataBytes}getErrorCorrectionBytes(){return this.errorCorrectionBytes}}class Ut{constructor(){}static calculateMaskPenalty(c){return aa.applyMaskPenaltyRule1(c)+aa.applyMaskPenaltyRule2(c)+aa.applyMaskPenaltyRule3(c)+aa.applyMaskPenaltyRule4(c)}static encode(c,p,g=null){let u=Ut.DEFAULT_BYTE_MODE_ENCODING,_=g!==null&&g.get(un.CHARACTER_SET)!==void 0;_&&(u=g.get(un.CHARACTER_SET).toString());let b=this.chooseMode(c,u),C=new Q;if(b===Fe.BYTE&&(_||Ut.DEFAULT_BYTE_MODE_ENCODING!==u)){let ke=J.getCharacterSetECIByName(u);ke!==void 0&&this.appendECI(ke,C)}this.appendModeInfo(b,C);let P=new Q;this.appendBytes(c,b,P,u);let E;if(g!==null&&g.get(un.QR_VERSION)!==void 0){let ke=Number.parseInt(g.get(un.QR_VERSION).toString(),10);E=Ve.getVersionForNumber(ke);let me=this.calculateBitsNeeded(b,C,P,E);if(!this.willFit(me,E,p))throw new Vt("Data too big for requested version")}else E=this.recommendVersion(p,b,C,P);let D=new Q;D.appendBitArray(C);let V=b===Fe.BYTE?P.getSizeInBytes():c.length;this.appendLengthInfo(V,E,b,D),D.appendBitArray(P);let z=E.getECBlocksForLevel(p),$=E.getTotalCodewords()-z.getTotalECCodewords();this.terminateBits($,D);let X=this.interleaveWithECBytes(D,E.getTotalCodewords(),$,z.getNumBlocks()),ee=new Ll;ee.setECLevel(p),ee.setMode(b),ee.setVersion(E);let ne=E.getDimensionForVersion(),oe=new Vl(ne,ne),ve=this.chooseMaskPattern(X,p,E,oe);return ee.setMaskPattern(ve),Ue.buildMatrix(X,p,E,ve,oe),ee.setMatr
33ix(oe),ee}static recommendVersion(c,p,g,u){let _=this.calculateBitsNeeded(p,g,u,Ve.getVersionForNumber(1)),b=this.chooseVersion(_,c),C=this.calculateBitsNeeded(p,g,u,b);return this.chooseVersion(C,c)}static calculateBitsNeeded(c,p,g,u){return p.getSize()+c.getCharacterCountBits(u)+g.getSize()}static getAlphanumericCode(c){return c<Ut.ALPHANUMERIC_TABLE.length?Ut.ALPHANUMERIC_TABLE[c]:-1}static chooseMode(c,p=null){if(J.SJIS.getName()===p&&this.isOnlyDoubleByteKanji(c))return Fe.KANJI;let g=!1,u=!1;for(let _=0,b=c.length;_<b;++_){let C=c.charAt(_);if(Ut.isDigit(C))g=!0;else if(this.getAlphanumericCode(C.charCodeAt(0))!==-1)u=!0;else return Fe.BYTE}return u?Fe.ALPHANUMERIC:g?Fe.NUMERIC:Fe.BYTE}static isOnlyDoubleByteKanji(c){let p;try{p=xe.encode(c,J.SJIS)}catch{return!1}let g=p.length;if(g%2!==0)return!1;for(let u=0;u<g;u+=2){let _=p[u]&255;if((_<129||_>159)&&(_<224||_>235))return!1}return!0}static chooseMaskPattern(c,p,g,u){let _=Number.MAX_SAFE_INTEGER,b=-1;for(let C=0;C<Ll.NUM_MASK_PATTERNS;C++){Ue.buildMatrix(c,p,g,C,u);let P=this.calculateMaskPenalty(u);P<_&&(_=P,b=C)}return b}static chooseVersion(c,p){for(let g=1;g<=40;g++){let u=Ve.getVersionForNumber(g);if(Ut.willFit(c,u,p))return u}throw new Vt("Data too big")}static willFit(c,p,g){let u=p.getTotalCodewords(),b=p.getECBlocksForLevel(g).getTotalECCodewords(),C=u-b,P=(c+7)/8;return C>=P}static terminateBits(c,p){let g=c*8;if(p.getSize()>g)throw new Vt("data bits cannot fit in the QR Code"+p.getSize()+" > "+g);for(let b=0;b<4&&p.getSize()<g;++b)p.appendBit(!1);let u=p.getSize()&7;if(u>0)for(let b=u;b<8;b++)p.appendBit(!1);let _=c-p.getSizeInBytes();for(let b=0;b<_;++b)p.appendBits((b&1)===0?236:17,8);if(p.getSize()!==g)throw new Vt("Bits size does not equal capacity")}static getNumDataBytesAndNumECBytesForBlockID(c,p,g,u,_,b){if(u>=g)throw new Vt("Block ID too large");let C=c%g,P=g-C,E=Math.floor(c/g),D=E+1,V=Math.floor(p/g),z=V+1,$=E-V,X=D-z;if($!==X)throw new Vt("EC bytes mismatch");if(g!==P+C)throw new Vt("RS blocks mismatch");if(c!==(V+$)*P+(z+X)*C)throw new Vt("Total bytes mismatch");u<P?(_[0]=V,b[0]=$):(_[0]=z,b[0]=X)}static interleaveWithECBytes(c,p,g,u){if(c.getSizeInBytes()!==g)throw new Vt("Number of bits and data bytes does not match");let _=0,b=0,C=0,P=new Array;for(let D=0;D<u;++D){let V=new Int32Array(1),z=new Int32Array(1);Ut.getNumDataBytesAndNumECBytesForBlockID(p,g,u,D,V,z);let $=V[0],X=new Uint8Array($);c.toBytes(8*_,X,0,$);let ee=Ut.generateECBytes(X,z[0]);P.push(new Py(X,ee)),b=Math.max(b,$),C=Math.max(C,ee.length),_+=V[0]}if(g!==_)throw new Vt("Data bytes does not match offset");let E=new Q;for(let D=0;D<b;++D)for(let V of P){let z=V.getDataBytes();D<z.length&&E.appendBits(z[D],8)}for(let D=0;D<C;++D)for(let V of P){let z=V.getErrorCorrectionBytes();D<z.length&&E.appendBits(z[D],8)}if(p!==E.getSizeInBytes())throw new Vt("Interleaving error: "+p+" and "+E.getSizeInBytes()+" differ.");return E}static generateECBytes(c,p){let g=c.length,u=new Int32Array(g+p);for(let b=0;b<g;b++)u[b]=c[b]&255;new S0(_t.QR_CODE_FIELD_256).encode(u,p);let _=new Uint8Array(p);for(let b=0;b<p;b++)_[b]=u[g+b];return _}static appendModeInfo(c,p){p.appendBits(c.getBits(),4)}static appendLengthInfo(c,p,g,u){let _=g.getCharacterCountBits(p);if(c>=1<<_)throw new Vt(c+" is bigger than "+((1<<_)-1));u.appendBits(c,_)}static appendBytes(c,p,g,u){switch(p){case Fe.NUMERIC:Ut.appendNumericBytes(c,g);break;case Fe.ALPHANUMERIC:Ut.appendAlphanumericBytes(c,g);break;case Fe.BYTE:Ut.append8BitBytes(c,g,u);break;case Fe.KANJI:Ut.appendKanjiBytes(c,g);break;default:throw new Vt("Invalid mode: "+p)}}static getDigit(c){return c.charCodeAt(0)-48}static isDigit(c){let p=Ut.getDigit(c);return p>=0&&p<=9}static appendNumericBytes(c,p){let g=c.length,u=0;for(;u<g;){let _=Ut.getDigit(c.charAt(u));if(u+2<g){let b=Ut.getDigit(c.charAt(u+1)),C=Ut.getDigit(c.charAt(u+2));p.appendBits(_*100+b*10+C,10),u+=3}else if(u+1<g){let b=Ut.getDigit(c.charAt(u+1));p.appendBits(_*10+b,7),u+=2}else p.appendBits(_,4),u++}}static appendAlphanumericBytes(c,p){let g=c.length,u=0;for(;u<g;){let _=Ut.getAlphanumericCode(c.charCodeAt(u));if(_===-1)throw new Vt;if(u+1<g){let b=Ut.getAlphanumericCode(c.charCodeAt(u+1));if(b===-1)throw new Vt;p.appendBits(_*45+b,11),u+=2}else p.appendBits(_,6),u++}}static append8BitBytes(c,p,g){let u;
33try{u=xe.encode(c,g)}catch(_){throw new Vt(_)}for(let _=0,b=u.length;_!==b;_++){let C=u[_];p.appendBits(C,8)}}static appendKanjiBytes(c,p){let g;try{g=xe.encode(c,J.SJIS)}catch(_){throw new Vt(_)}let u=g.length;for(let _=0;_<u;_+=2){let b=g[_]&255,C=g[_+1]&255,P=b<<8&4294967295|C,E=-1;if(P>=33088&&P<=40956?E=P-33088:P>=57408&&P<=60351&&(E=P-49472),E===-1)throw new Vt("Invalid byte sequence");let D=(E>>8)*192+(E&255);p.appendBits(D,13)}}static appendECI(c,p){p.appendBits(Fe.ECI.getBits(),4),p.appendBits(c.getValue(),8)}}Ut.ALPHANUMERIC_TABLE=Int32Array.from([-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,36,-1,-1,-1,37,38,-1,-1,-1,-1,39,40,-1,41,42,43,0,1,2,3,4,5,6,7,8,9,44,-1,-1,-1,-1,-1,-1,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,-1,-1,-1,-1,-1]),Ut.DEFAULT_BYTE_MODE_ENCODING=J.UTF8.getName();let My=(()=>{class T{write(p,g,u,_=null){if(p.length===0)throw new y("Found empty contents");if(g<0||u<0)throw new y("Requested dimensions are too small: "+g+"x"+u);let b=Nt.L,C=T.QUIET_ZONE_SIZE;_!==null&&(_.get(un.ERROR_CORRECTION)!==void 0&&(b=Nt.fromString(_.get(un.ERROR_CORRECTION).toString())),_.get(un.MARGIN)!==void 0&&(C=Number.parseInt(_.get(un.MARGIN).toString(),10)));let P=Ut.encode(p,b,_);return this.renderResult(P,g,u,C)}writeToDom(p,g,u,_,b=null){typeof p=="string"&&(p=document.querySelector(p));let C=this.write(g,u,_,b);p&&p.appendChild(C)}renderResult(p,g,u,_){let b=p.getMatrix();if(b===null)throw new co;let C=b.getWidth(),P=b.getHeight(),E=C+_*2,D=P+_*2,V=Math.max(g,E),z=Math.max(u,D),$=Math.min(Math.floor(V/E),Math.floor(z/D)),X=Math.floor((V-C*$)/2),ee=Math.floor((z-P*$)/2),ne=this.createSVGElement(V,z);for(let oe=0,ve=ee;oe<P;oe++,ve+=$)for(let ke=0,me=X;ke<C;ke++,me+=$)if(b.get(ke,oe)===1){let Ke=this.createSvgRectElement(me,ve,$,$);ne.appendChild(Ke)}return ne}createSVGElement(p,g){let u=document.createElementNS(T.SVG_NS,"svg");return u.setAttributeNS(null,"height",p.toString()),u.setAttributeNS(null,"width",g.toString()),u}createSvgRectElement(p,g,u,_){let b=document.createElementNS(T.SVG_NS,"rect");return b.setAttributeNS(null,"x",p.toString()),b.setAttributeNS(null,"y",g.toString()),b.setAttributeNS(null,"height",u.toString()),b.setAttributeNS(null,"width",_.toString()),b.setAttributeNS(null,"fill","#000000"),b}}return T.QUIET_ZONE_SIZE=4,T.SVG_NS="http://www.w3.org/2000/svg",T})(),Wg=(()=>{class T{encode(p,g,u,_,b){if(p.length===0)throw new y("Found empty contents");if(g!==Ne.QR_CODE)throw new y("Can only encode QR_CODE, but got "+g);if(u<0||_<0)throw new y(`Requested dimensions are too small: ${u}x${_}`);let C=Nt.L,P=T.QUIET_ZONE_SIZE;b!==null&&(b.get(un.ERROR_CORRECTION)!==void 0&&(C=Nt.fromString(b.get(un.ERROR_CORRECTION).toString())),b.get(un.MARGIN)!==void 0&&(P=Number.parseInt(b.get(un.MARGIN).toString(),10)));let E=Ut.encode(p,C,b);return T.renderResult(E,u,_,P)}static renderResult(p,g,u,_){let b=p.getMatrix();if(b===null)throw new co;let C=b.getWidth(),P=b.getHeight(),E=C+_*2,D=P+_*2,V=Math.max(g,E),z=Math.max(u,D),$=Math.min(Math.floor(V/E),Math.floor(z/D)),X=Math.floor((V-C*$)/2),ee=Math.floor((z-P*$)/2),ne=new De(V,z);for(let oe=0,ve=ee;oe<P;oe++,ve+=$)for(let ke=0,me=X;ke<C;ke++,me+=$)b.get(ke,oe)===1&&ne.setRegion(me,ve,$,$);return ne}}return T.QUIET_ZONE_SIZE=4,T})();class Sy{encode(c,p,g,u,_){let b;switch(p){case Ne.QR_CODE:b=new Wg;break;default:throw new y("No encoder available for format "+p)}return b.encode(c,p,g,u,_)}}let ky=(()=>{class T extends yt{constructor(p,g,u,_,b,C,P,E){if(super(C,P),this.yuvData=p,this.dataWidth=g,this.dataHeight=u,this.left=_,this.top=b,_+C>g||b+P>u)throw new y("Crop rectangle does not fit within image data.");E&&this.reverseHorizontal(C,P)}getRow(p,g){if(p<0||p>=this.getHeight())throw new y("Requested row is outside the image: "+p);let u=this.getWidth();(g==null||g.length<u)&&(g=new Uint8ClampedArray(u));let _=(p+this.top)*this.dataWidth+this.left;return N.arraycopy(this.yuvData,_,g,0,u),g}getMatrix(){let p=this.getWidth(),g=this.getHeight();if(p===this.dataWidth&&g===this.dataHeight)return this.yuvData;
33let u=p*g,_=new Uint8ClampedArray(u),b=this.top*this.dataWidth+this.left;if(p===this.dataWidth)return N.arraycopy(this.yuvData,b,_,0,u),_;for(let C=0;C<g;C++){let P=C*p;N.arraycopy(this.yuvData,b,_,P,p),b+=this.dataWidth}return _}isCropSupported(){return!0}crop(p,g,u,_){return new T(this.yuvData,this.dataWidth,this.dataHeight,this.left+p,this.top+g,u,_,!1)}renderThumbnail(){let p=this.getWidth()/T.THUMBNAIL_SCALE_FACTOR,g=this.getHeight()/T.THUMBNAIL_SCALE_FACTOR,u=new Int32Array(p*g),_=this.yuvData,b=this.top*this.dataWidth+this.left;for(let C=0;C<g;C++){let P=C*p;for(let E=0;E<p;E++){let D=_[b+E*T.THUMBNAIL_SCALE_FACTOR]&255;u[P+E]=4278190080|D*65793}b+=this.dataWidth*T.THUMBNAIL_SCALE_FACTOR}return u}getThumbnailWidth(){return this.getWidth()/T.THUMBNAIL_SCALE_FACTOR}getThumbnailHeight(){return this.getHeight()/T.THUMBNAIL_SCALE_FACTOR}reverseHorizontal(p,g){let u=this.yuvData;for(let _=0,b=this.top*this.dataWidth+this.left;_<g;_++,b+=this.dataWidth){let C=b+p/2;for(let P=b,E=b+p-1;P<C;P++,E--){let D=u[P];u[P]=u[E],u[E]=D}}}invert(){return new Ct(this)}}return T.THUMBNAIL_SCALE_FACTOR=2,T})();class k0 extends yt{constructor(c,p,g,u,_,b,C){if(super(p,g),this.dataWidth=u,this.dataHeight=_,this.left=b,this.top=C,c.BYTES_PER_ELEMENT===4){let P=p*g,E=new Uint8ClampedArray(P);for(let D=0;D<P;D++){let V=c[D],z=V>>16&255,$=V>>7&510,X=V&255;E[D]=(z+$+X)/4&255}this.luminances=E}else this.luminances=c;if(u===void 0&&(this.dataWidth=p),_===void 0&&(this.dataHeight=g),b===void 0&&(this.left=0),C===void 0&&(this.top=0),this.left+p>this.dataWidth||this.top+g>this.dataHeight)throw new y("Crop rectangle does not fit within image data.")}getRow(c,p){if(c<0||c>=this.getHeight())throw new y("Requested row is outside the image: "+c);let g=this.getWidth();(p==null||p.length<g)&&(p=new Uint8ClampedArray(g));let u=(c+this.top)*this.dataWidth+this.left;return N.arraycopy(this.luminances,u,p,0,g),p}getMatrix(){let c=this.getWidth(),p=this.getHeight();if(c===this.dataWidth&&p===this.dataHeight)return this.luminances;let g=c*p,u=new Uint8ClampedArray(g),_=this.top*this.dataWidth+this.left;if(c===this.dataWidth)return N.arraycopy(this.luminances,_,u,0,g),u;for(let b=0;b<p;b++){let C=b*c;N.arraycopy(this.luminances,_,u,C,c),_+=this.dataWidth}return u}isCropSupported(){return!0}crop(c,p,g,u){return new k0(this.luminances,g,u,this.dataWidth,this.dataHeight,this.left+c,this.top+p)}invert(){return new Ct(this)}}class Gg extends J{static forName(c){return this.getCharacterSetECIByName(c)}}class O0{}O0.ISO_8859_1=J.ISO8859_1;class qg{isCompact(){return this.compact}setCompact(c){this.compact=c}getSize(){return this.size}setSize(c){this.size=c}getLayers(){return this.layers}setLayers(c){this.layers=c}getCodeWords(){return this.codeWords}setCodeWords(c){this.codeWords=c}getMatrix(){return this.matrix}setMatrix(c){this.matrix=c}}class $g{static singletonList(c){return[c]}static min(c,p){return c.sort(p)[0]}}class Oy{constructor(c){this.previous=c}getPrevious(){return this.previous}}class sa extends Oy{constructor(c,p,g){super(c),this.value=p,this.bitCount=g}appendTo(c,p){c.appendBits(this.value,this.bitCount)}add(c,p){return new sa(this,c,p)}addBinaryShift(c,p){return console.warn("addBinaryShift on SimpleToken, this simply returns a copy of this token"),new sa(this,c,p)}toString(){let c=this.value&(1<<this.bitCount)-1;return c|=1<<this.bitCount,"<"+Z.toBinaryString(c|1<<this.bitCount).substring(1)+">"}}class E0 extends sa{constructor(c,p,g){super(c,0,0),this.binaryShiftStart=p,this.binaryShiftByteCount=g}appendTo(c,p){for(let g=0;g<this.binaryShiftByteCount;g++)(g===0||g===31&&this.binaryShiftByteCount<=62)&&(c.appendBits(31,5),this.binaryShiftByteCount>62?c.appendBits(this.binaryShiftByteCount-31,16):g===0?c.appendBits(Math.min(this.binaryShiftByteCount,31),5):c.appendBits(this.binaryShiftByteCount-31,5)),c.appendBits(p[this.binaryShiftStart+g],8)}addBinaryShift(c,p){return new E0(this,c,p)}toString(){return"<"+this.binaryShiftStart+"::"+(this.binaryShiftStart+this.binaryShiftByteCount-1)+">"}}function Ey(T,c,p){return new E0(T,c,p)}function ws(T,c,p){return new sa(T,c,p)}let Ty=["UPPER","LOWER","DIGIT","MIXED","PUNCT"],Fo=0,Fl=1,gi=2,Yg=3,zi=4,Iy=new sa(null,0,0),T0=[Int32Array.from([0,(5<<16)+28,(5<<16)+30,(5<<16)+29,656318]),Int32Array.from([(9<<16)+480+14,0,(5<<16)+30,(5<<16)+29,656318]),Int32Array.from([(4<<16)+14,(9<<16)+448+28,0,(9<<16)+448+29,932798]),Int32Array.from([(5<<16)+29,(5<<16)+28,656318,0,(5<<16)+30]),Int32Array.from([(5<<16)+31,656380,656382,656381,0])];function Ay(T){for(let c of T)G.fill(c,-1);return T[Fo][zi]=0,T[Fl][zi]=0,T[Fl][Fo]=28,T[Yg][zi]=0,T[gi][zi]=0,T[gi][Fo]=15,T}let Xg=Ay(G.createInt32Array(6,6));class Ui{constructor(c,p,g,u){this.token=c,this.mode=p,this.binaryShiftByteCount=g,this.bitCount=u}getMode(){return this.mode}getToken(){return this.token}getBinaryShiftByteCount(){return this.binaryShiftByteCount}getBitCount(){return this.bitCount}latchAndAppend(c,p){let g=this.bitCount,u=this.token;if(c!==this.mode){let b=T0[this.mode][c];u=ws(u,b&65535,b>>16),g+=b>>16}let _=c===gi?4:5;return u=ws(u,p,_),new Ui(u,c,0,g+_)}shiftAndAppend(c,p){let g=this.token,u=this.mode===gi?4:5;return g=ws(g,Xg[this.mode][c],u),g=ws(g,p,5),new Ui(g,this.mode,0,this.bitCount+u+5)}addBinaryShiftChar(c){let p=this.token,g=this.mode,u=this.bitCount;if(this.mode===zi||this.mode===gi){let C=T0[g][Fo];p=ws(p,C&65535,C>>16),u+=C>>16,g=Fo}let _=this.binaryShiftByteCount===0||this.binaryShiftByteCount===31?18:this.binaryShiftByteCount===62?9:8,b=new Ui(p,g,this.binaryShiftByteCount+1,u+_);return b.binaryShiftByteCount===2078&&(b=b.endBinaryShift(c+1)),b}endBinaryShift(c){if(this.binaryShiftByteCount===0)return this;let p=this.token;return p=Ey(p,c-this.binaryShiftByteCount,this.binaryShiftByteCount),new Ui(p,this.mode,0,this.bitCount)}
33isBetterThanOrEqualTo(c){let p=this.bitCount+(T0[this.mode][c.mode]>>16);return this.binaryShiftByteCount<c.binaryShiftByteCount?p+=Ui.calculateBinaryShiftCost(c)-Ui.calculateBinaryShiftCost(this):this.binaryShiftByteCount>c.binaryShiftByteCount&&c.binaryShiftByteCount>0&&(p+=10),p<=c.bitCount}toBitArray(c){let p=[];for(let u=this.endBinaryShift(c.length).token;u!==null;u=u.getPrevious())p.unshift(u);let g=new Q;for(let u of p)u.appendTo(g,c);return g}toString(){return he.format("%s bits=%d bytes=%d",Ty[this.mode],this.bitCount,this.binaryShiftByteCount)}static calculateBinaryShiftCost(c){return c.binaryShiftByteCount>62?21:c.binaryShiftByteCount>31?20:c.binaryShiftByteCount>0?10:0}}Ui.INITIAL_STATE=new Ui(Iy,Fo,0,0);function Dy(T){let c=he.getCharCode(" "),p=he.getCharCode("."),g=he.getCharCode(",");T[Fo][c]=1;let u=he.getCharCode("Z"),_=he.getCharCode("A");for(let z=_;z<=u;z++)T[Fo][z]=z-_+2;T[Fl][c]=1;let b=he.getCharCode("z"),C=he.getCharCode("a");for(let z=C;z<=b;z++)T[Fl][z]=z-C+2;T[gi][c]=1;let P=he.getCharCode("9"),E=he.getCharCode("0");for(let z=E;z<=P;z++)T[gi][z]=z-E+2;T[gi][g]=12,T[gi][p]=13;let D=["\0"," ","�","�","�","�","�","�","\x07","\b"," ",` 34`,"\v","\f","\r","\x1B","�","�","�","�","@","\\","^","_","`","|","~","\x7F"];for(let z=0;z<D.length;z++)T[Yg][he.getCharCode(D[z])]=z;let V=["\0","\r","\0","\0","\0","\0","!","'","#","$","%","&","'","(",")","*","+",",","-",".","/",":",";","<","=",">","?","[","]","{","}"];for(let z=0;z<V.length;z++)he.getCharCode(V[z])>0&&(T[zi][he.getCharCode(V[z])]=z);return T}let I0=Dy(G.createInt32Array(5,256));class Ps{constructor(c){this.text=c}encode(){let c=he.getCharCode(" "),p=he.getCharCode(` 35`),g=$g.singletonList(Ui.INITIAL_STATE);for(let _=0;_<this.text.length;_++){let b,C=_+1<this.text.length?this.text[_+1]:0;switch(this.text[_]){case he.getCharCode("\r"):b=C===p?2:0;break;case he.getCharCode("."):b=C===c?3:0;break;case he.getCharCode(","):b=C===c?4:0;break;case he.getCharCode(":"):b=C===c?5:0;break;default:b=0}b>0?(g=Ps.updateStateListForPair(g,_,b),_++):g=this.updateStateListForChar(g,_)}return $g.min(g,(_,b)=>_.getBitCount()-b.getBitCount()).toBitArray(this.text)}updateStateListForChar(c,p){let g=[];for(let u of c)this.updateStateForChar(u,p,g);return Ps.simplifyStates(g)}updateStateForChar(c,p,g){let u=this.text[p]&255,_=I0[c.getMode()][u]>0,b=null;for(let C=0;C<=zi;C++){let P=I0[C][u];if(P>0){if(b==null&&(b=c.endBinaryShift(p)),!_||C===c.getMode()||C===gi){let E=b.latchAndAppend(C,P);g.push(E)}if(!_&&Xg[c.getMode()][C]>=0){let E=b.shiftAndAppend(C,P);g.push(E)}}}if(c.getBinaryShiftByteCount()>0||I0[c.getMode()][u]===0){let C=c.addBinaryShiftChar(p);g.push(C)}}static updateStateListForPair(c,p,g){let u=[];for(let _ of c)this.updateStateForPair(_,p,g,u);return this.simplifyStates(u)}static updateStateForPair(c,p,g,u){let _=c.endBinaryShift(p);if(u.push(_.latchAndAppend(zi,g)),c.getMode()!==zi&&u.push(_.shiftAndAppend(zi,g)),g===3||g===4){let b=_.latchAndAppend(gi,16-g).latchAndAppend(gi,1);u.push(b)}if(c.getBinaryShiftByteCount()>0){let b=c.addBinaryShiftChar(p).addBinaryShiftChar(p+1);u.push(b)}}static simplifyStates(c){let p=[];for(let g of c){let u=!0;for(let _ of p){if(_.isBetterThanOrEqualTo(g)){u=!1;break}g.isBetterThanOrEqualTo(_)&&(p=p.filter(b=>b!==_))}u&&p.push(g)}return p}}class pt{constructor(){}static encodeBytes(c){return pt.encode(c,pt.DEFAULT_EC_PERCENT,pt.DEFAULT_AZTEC_LAYERS)}static encode(c,p,g){let u=new Ps(c).encode(),_=Z.truncDivision(u.getSize()*p,100)+11,b=u.getSize()+_,C,P,E,D,V;if(g!==pt.DEFAULT_AZTEC_LAYERS){if(C=g<0,P=Math.abs(g),P>
35(C?pt.MAX_NB_BITS_COMPACT:pt.MAX_NB_BITS))throw new y(he.format("Illegal value %s for layers",g));E=pt.totalBitsInLayer(P,C),D=pt.WORD_SIZE[P];let me=E-E%D;if(V=pt.stuffBits(u,D),V.getSize()+_>me)throw new y("Data to large for user specified layer");if(C&&V.getSize()>D*64)throw new y("Data to large for user specified layer")}else{D=0,V=null;for(let me=0;;me++){if(me>pt.MAX_NB_BITS)throw new y("Data too large for an Aztec code");if(C=me<=3,P=C?me+1:me,E=pt.totalBitsInLayer(P,C),b>E)continue;(V==null||D!==pt.WORD_SIZE[P])&&(D=pt.WORD_SIZE[P],V=pt.stuffBits(u,D));let Ke=E-E%D;if(!(C&&V.getSize()>D*64)&&V.getSize()+_<=Ke)break}}let z=pt.generateCheckWords(V,E,D),$=V.getSize()/D,X=pt.generateModeMessage(C,P,$),ee=(C?11:14)+P*4,ne=new Int32Array(ee),oe;if(C){oe=ee;for(let me=0;me<ne.length;me++)ne[me]=me}else{oe=ee+1+2*Z.truncDivision(Z.truncDivision(ee,2)-1,15);let me=Z.truncDivision(ee,2),Ke=Z.truncDivision(oe,2);for(let Xe=0;Xe<me;Xe++){let qn=Xe+Z.truncDivision(Xe,15);ne[me-Xe-1]=Ke-qn-1,ne[me+Xe]=Ke+qn+1}}let ve=new De(oe);for(let me=0,Ke=0;me<P;me++){let Xe=(P-me)*4+(C?9:12);for(let qn=0;qn<Xe;qn++){let Di=qn*2;for(let $n=0;$n<2;$n++)z.get(Ke+Di+$n)&&ve.set(ne[me*2+$n],ne[me*2+qn]),z.get(Ke+Xe*2+Di+$n)&&ve.set(ne[me*2+qn],ne[ee-1-me*2-$n]),z.get(Ke+Xe*4+Di+$n)&&ve.set(ne[ee-1-me*2-$n],ne[ee-1-me*2-qn]),z.get(Ke+Xe*6+Di+$n)&&ve.set(ne[ee-1-me*2-qn],ne[me*2+$n])}Ke+=Xe*8}if(pt.drawModeMessage(ve,C,oe,X),C)pt.drawBullsEye(ve,Z.truncDivision(oe,2),5);else{pt.drawBullsEye(ve,Z.truncDivision(oe,2),7);for(let me=0,Ke=0;me<Z.truncDivision(ee,2)-1;me+=15,Ke+=16)for(let Xe=Z.truncDivision(oe,2)&1;Xe<oe;Xe+=2)ve.set(Z.truncDivision(oe,2)-Ke,Xe),ve.set(Z.truncDivision(oe,2)+Ke,Xe),ve.set(Xe,Z.truncDivision(oe,2)-Ke),ve.set(Xe,Z.truncDivision(oe,2)+Ke)}let ke=new qg;return ke.setCompact(C),ke.setSize(oe),ke.setLayers(P),ke.setCodeWords($),ke.setMatrix(ve),ke}static drawBullsEye(c,p,g){for(let u=0;u<g;u+=2)for(let _=p-u;_<=p+u;_++)c.set(_,p-u),c.set(_,p+u),c.set(p-u,_),c.set(p+u,_);c.set(p-g,p-g),c.set(p-g+1,p-g),c.set(p-g,p-g+1),c.set(p+g,p-g),c.set(p+g,p-g+1),c.set(p+g,p+g-1)}static generateModeMessage(c,p,g){let u=new Q;return c?(u.appendBits(p-1,2),u.appendBits(g-1,6),u=pt.generateCheckWords(u,28,4)):(u.appendBits(p-1,5),u.appendBits(g-1,11),u=pt.generateCheckWords(u,40,4)),u}static drawModeMessage(c,p,g,u){let _=Z.truncDivision(g,2);if(p)for(let b=0;b<7;b++){let C=_-3+b;u.get(b)&&c.set(C,_-5),u.get(b+7)&&c.set(_+5,C),u.get(20-b)&&c.set(C,_+5),u.get(27-b)&&c.set(_-5,C)}else for(let b=0;b<10;b++){let C=_-5+b+Z.truncDivision(b,5);u.get(b)&&c.set(C,_-7),u.get(b+10)&&c.set(_+7,C),u.get(29-b)&&c.set(C,_+7),u.get(39-b)&&c.set(_-7,C)}}static generateCheckWords(c,p,g){let u=c.getSize()/g,_=new S0(pt.getGF(g)),b=Z.truncDivision(p,g),C=pt.bitsToWords(c,g,b);_.encode(C,b-u);let P=p%g,E=new Q;E.appendBits(0,P);for(let D of Array.from(C))E.appendBits(D,g);return E}static bitsToWords(c,p,g){let u=new Int32Array(g),_,b;for(_=0,b=c.getSize()/p;_<b;_++){let C=0;for(let P=0;P<p;P++)C|=c.get(_*p+P)?1<<p-P-1:0;u[_]=C}return u}static getGF(c){switch(c){case 4:return _t.AZTEC_PARAM;case 6:return _t.AZTEC_DATA_6;case 8:return _t.AZTEC_DATA_8;case 10:return _t.AZTEC_DATA_10;case 12:return _t.AZTEC_DATA_12;default:throw new y("Unsupported word size "+c)}}static stuffBits(c,p){let g=new Q,u=c.getSize(),_=(1<<p)-2;for(let b=0;b<u;b+=p){let C=0;for(let P=0;P<p;P++)(b+P>=u||c.get(b+P))&&(C|=1<<p-1-P);(C&_)===_?(g.appendBits(C&_,p),b--):(C&_)===0?(g.appendBits(C|1,p),b--):g.appendBits(C,p)}return g}static totalBitsInLayer(c,p){return((p?88:112)+16*c)*c}}pt.DEFAULT_EC_PERCENT=33,pt.DEFAULT_AZTEC_LAYERS=0,pt.MAX_NB_BITS=32,pt.MAX_NB_BITS_COMPACT=4,pt.WORD_SIZE=Int32Array.from([4,6,6,8,8,8,8,8,8,10,10,10,10,10,10,10,10,10,10,10,10,10,10,12,12,12,12,12,12,12,12,12,12]);class zl{encode(c,p,g,u){return this.encodeWithHints(c,p,g,u,null)}encodeWithHints(c,p,g,u,_){let b=O0.ISO_8859_1,C=pt.DEFAULT_EC_PERCENT,P=pt.DEFAULT_AZTEC_LAYERS;return _!=null&&(_.has(un.CHARACTER_SET)&&(b=Gg.forName(_.get(un.CHARACTER_SET).toString())),_.has(un.ERROR_CORRECTION)&&(C=Z.parseInt(_.get(un.ERROR_CORRECTION).toString())),_.has(un.AZTEC_LAYERS)&&(P=Z.parseInt(_.get(un.AZTEC_LAYERS).toString()))),zl.encodeLayers(c,p,g,u,b,C,P)}static encodeLayers(c,p,g,u,_,b,C){if(p!==Ne.AZTEC)throw new y("Can only encode AZTEC, but got "+p);let P=pt.encode(he.getBytes(c,_),b,C);return zl.renderResult(P,g,u)}static renderResult(c,p,g){let u=c.getMatrix();if(u==null)throw new co;let _=u.getWidth(),b=u.getHeight(),C=Math.max(p,_),P=Math.max(g,b),E=Math.min(C/_,P/b),D=(C-_*E)/2,V=(P-b*E)/2,z=new De(C,P);for(let $=0,X=V;$<b;$++,X+=E)for(let ee=0,ne=D;ee<_;ee++,ne+=E)u.get(ee,$)&&z.setRegion(ne,X,E,E);return z}}n.AbstractExpandedDecoder=h0,n.ArgumentException=v,n.ArithmeticException=c0,n.AztecCode=qg,n.AztecCodeReader=Tl,n.AztecCodeWriter=zl,n.AztecDecoder=d0,n.AztecDetector=Og,n.AztecDetectorResult=Sg,n.AztecEncoder=pt,n.AztecHighLevelEncoder=Ps,n.AztecPoint=jn,n.BarcodeFormat=Ne,n.Binarizer=B,n.BinaryBitmap=M,n.BitArray=Q,n.BitMatrix=De,n.BitSource=b0,n.BrowserAztecCodeReader=Z2,n.BrowserBarcodeReader=ry,n.BrowserCodeReader=pi,n.BrowserDatamatrixCodeReader=sy,n.BrowserMultiFormatReader=yy,n.BrowserPDF417Reader=Cy,n.BrowserQRCodeReader=wy,n.BrowserQRCodeSvgWriter=My,n.CharacterSetECI=J,n.ChecksumException=I,n.Code128Reader=Me,n.Code39Reader=m0,n.DataMatrixDecodedBitStreamParser=No,n.DataMatrixReader=Rl,n.DecodeHintType=Y,n.DecoderResult=gs,n.DefaultGridSampler=kg,n.DetectorResult=Ol,n.EAN13Reader=Il,n.EncodeHintType=un,n.Exception=f,n.FormatException=U,n.GenericGF=_t,n.GenericGFPoly=Wn,n.GlobalHistogramBinarizer=gt,n.GridSampler=p0,n.GridSamplerInstance=D
35o,n.HTMLCanvasElementLuminanceSource=an,n.HybridBinarizer=Te,n.ITFReader=Tt,n.IllegalArgumentException=y,n.IllegalStateException=co,n.InvertedLuminanceSource=Ct,n.LuminanceSource=yt,n.MathUtils=dt,n.MultiFormatOneDReader=ra,n.MultiFormatReader=jg,n.MultiFormatWriter=Sy,n.NotFoundException=se,n.OneDReader=sn,n.PDF417DecodedBitStreamParser=re,n.PDF417DecoderErrorCorrection=Ng,n.PDF417Reader=Sn,n.PDF417ResultMetadata=Fg,n.PerspectiveTransform=Oi,n.PlanarYUVLuminanceSource=ky,n.QRCodeByteMatrix=Vl,n.QRCodeDataMask=mi,n.QRCodeDecodedBitStreamParser=Rg,n.QRCodeDecoderErrorCorrectionLevel=Nt,n.QRCodeDecoderFormatInformation=Bn,n.QRCodeEncoder=Ut,n.QRCodeEncoderQRCode=Ll,n.QRCodeMaskUtil=aa,n.QRCodeMatrixUtil=Ue,n.QRCodeMode=Fe,n.QRCodeReader=Vo,n.QRCodeVersion=Ve,n.QRCodeWriter=Wg,n.RGBLuminanceSource=k0,n.RSS14Reader=Xt,n.RSSExpandedReader=fe,n.ReaderException=M0,n.ReedSolomonDecoder=hs,n.ReedSolomonEncoder=S0,n.ReedSolomonException=fs,n.Result=$t,n.ResultMetadataType=Bt,n.ResultPoint=Re,n.StringUtils=he,n.UnsupportedOperationException=ge,n.VideoInputDevice=gn,n.WhiteRectangleDetector=El,n.WriterException=Vt,n.ZXingArrays=G,n.ZXingCharset=Gg,n.ZXingInteger=Z,n.ZXingStandardCharsets=O0,n.ZXingStringBuilder=Ce,n.ZXingStringEncoding=xe,n.ZXingSystem=N,n.createAbstractExpandedDecoder=Dg,Object.defineProperty(n,"__esModule",{value:!0})})});var Kl=Ri(Ss());var Du="pickle_jwt_token",Ny="pickle_user_details",Vy="picklehub_secret_key";function Ly(){let n=localStorage.getItem(Du);if(!n)return null;try{return Kl.AES.decrypt(n,Vy).toString(Kl.enc.Utf8)||null}catch{return null}}var Ru=(n,t)=>{let e=zo(Hl),i=n.url.startsWith(Be.apiBase)||n.url.startsWith("/api"),o=i?Ly():null,s=o?n.clone({setHeaders:{Authorization:`Bearer ${o}`}}):n;return t(s).pipe(eu(m=>{if(i&&m.status===401){localStorage.removeItem(Du),localStorage.removeItem(Ny);let f=e.get(nt);f.url.startsWith("/login")||f.navigate(["/login"],{queryParams:{returnUrl:f.url,reason:"session-expired"}})}return Kg(()=>m)}))};var Fy="@",zy=(()=>{class n{doc;delegate;zone;animationType;moduleImpl;_rendererFactoryPromise=null;
35scheduler=null;injector=zo(Hl);loadingSchedulerFn=zo(Uy,{optional:!0});_engine;constructor(e,i,o,s,m){this.doc=e,this.delegate=i,this.zone=o,this.animationType=s,this.moduleImpl=m}ngOnDestroy(){this._engine?.flush()}loadImpl(){let e=()=>this.moduleImpl??import("./chunk-NKJPR3NP.js").then(o=>o),i;return this.loadingSchedulerFn?i=this.loadingSchedulerFn(e):i=e(),i.catch(o=>{throw new ou(5300,!1)}).then(({\u0275createEngine:o,\u0275AnimationRendererFactory:s})=>{this._engine=o(this.animationType,this.doc);let m=new s(this.delegate,this._engine,this.zone);return this.delegate=m,m})}createRenderer(e,i){let o=this.delegate.createRenderer(e,i);if(o.\u0275type===0)return o;typeof o.throwOnSyntheticProps=="boolean"&&(o.throwOnSyntheticProps=!1);let s=new D0(o);return i?.data?.animation&&!this._rendererFactoryPromise&&(this._rendererFactoryPromise=this.loadImpl()),this._rendererFactoryPromise?.then(m=>{let f=m.createRenderer(e,i);s.use(f),this.scheduler??=this.injector.get(au,null,{optional:!0}),this.scheduler?.notify(10)}).catch(m=>{s.use(o)}),s}begin(){this.delegate.begin?.()}end(){this.delegate.end?.()}whenRenderingDone(){return this.delegate.whenRenderingDone?.()??Promise.resolve()}componentReplaced(e){this._engine?.flush(),this.delegate.componentReplaced?.(e)}static \u0275fac=function(i){pu()};static \u0275prov=Pt({token:n,factory:n.\u0275fac})}return n})(),D0=class{delegate;replay=[];\u0275type=1;constructor(t){this.delegate=t}use(t){if(this.delegate=t,this.replay!==null){for(let e of this.replay)e(t);this.replay=null}}get data(){return this.delegate.data}destroy(){this.replay=null,this.delegate.destroy()}createElement(t,e){return this.delegate.createElement(t,e)}createComment(t){return this.delegate.createComment(t)}createText(t){return this.delegate.createText(t)}get destroyNode(){return this.delegate.destroyNode}appendChild(t,e){this.delegate.appendChild(t,e)}insertBefore(t,e,i,o){this.delegate.insertBefore(t,e,i,o)}removeChild(t,e,i){this.delegate.removeChild(t,e,i)}selectRootElement(t,e){return this.delegate.selectRootElement(t,e)}parentNode(t){return this.delegate.parentNode(t)}nextSibling(t){return this.delegate.nextSibling(t)}setAttribute(t,e,i,o){this.delegate.setAttribute(t,e,i,o)}removeAttribute(t,e,i){this.delegate.removeAttribute(t,e,i)}addClass(t,e){this.delegate.addClass(t,e)}removeClass(t,e){this.delegate.removeClass(t,e)}setStyle(t,e,i,o){this.delegate.setStyle(t,e,i,o)}removeStyle(t,e,i){this.delegate.removeStyle(t,e,i)}setProperty(t,e,i){this.shouldReplay(e)&&this.replay.push(o=>o.setProperty(t,e,i)),this.delegate.setProperty(t,e,i)}setValue(t,e){this.delegate.setValue(t,e)}listen(t,e,i,o){return this.shouldReplay(e)&&this.replay.push(s=>s.listen(t,e,i,o)),this.delegate.listen(t,e,i,o)}shouldReplay(t){return this.replay!==null&&t.startsWith(Fy)}},Uy=new jl("");function Bu(n="animations"){return lu("NgAsyncAnimations"),ru([{provide:du,useFactory:(t,e,i)=>new zy(t,e,i,n),deps:[fu,bu,Nn]},{provide:su,useValue:n==="noop"?"NoopAnimations":"BrowserAnimations"}])}var ec=Ri(Ss());var Yo=class n{constructor(t){this.http=t}API_BASE=Be.apiBase;BOOKING_RATE=400;cachedRecurringBlocks=[];recurringBlocksLoaded=!1;TOTAL_PERSON_VALIDATION_RULES=[{courts:["Court 8","Court 9"],days:[0,1,2,3,4,5,6],startTime:"10:00",endTime:"18:00",minPlayers:4},{courts:["Court 8","Court 9"],days:[2],startTime:"18:00",endTime:"23:00",minPlayers:8}];getAuthHeaders(){let t={Accept:"application/json"},e=localStorage.getItem("pickle_jwt_token");if(e)try{let i=ec.AES.decrypt(e,"picklehub_secret_key").toString(ec.enc.Utf8);i&&(t.Authorization=`Bearer ${i}`)}catch{}return t}loadRecurringBlocks(){return ue(this,null,function*(){try{let t=yield po(this.http.get(`${this.API_BASE}/recurring-blocks`,{headers:this.getAuthHeaders()}));return this.cachedRecurringBlocks=(t||[]).filter(e=>e&&e.court&&e.court.trim()!==""&&e.day!==void 0&&e.day!==null&&e.day!==""&&e.startTime&&e.endTime),this.recurringBlocksLoaded=!0,console.log("Loaded recurring blocks from API:",this.cachedRecurringBlocks),this.cachedRecurringBlocks}catch(t){return console.error("Error loading recurring blocks:",t),this.cachedRecurringBlocks=[],this.recurringBlocksLoaded=!0,[]}})}getRecurringBlocks(){return ue(this,null,function*(){return this.recurringBlocksLoaded||(yield this.loadRecurringBlocks()),this.cachedRecurringBlocks})}refreshRecurringBlocks(){return ue(this,null,function*(){return this.recurringBlocksLoaded=!1,this.loadRecurringBlocks()})}getDayOfWeekInManilaTime(t){let[e,i,o]=t.split("-").map(Number);return new Date(e,i-1,o,12,0,0).getDay()}validateEmail(t){if(!/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/.test(t))return{valid:!1,message:"Invalid email format."};let i=["gmail.con","gmail.cmo","gmail.vom","gmail.xom","yahoo.con","yahoo.cmo","yahoo.vom","yahoo.xom","hotmail.con","hotmail.cmo","hotmail.vom","hotmail.xom","outlook.con","outlook.cmo","outlook.vom","outlook.xom"],o=t.split("@")[1]?.toLowerCase();return i.includes(o)?{valid:!1,message:"Detected possible typo in email address. Please fix then submit again."}:{valid:!0}}isScheduleBlocked({court:t,date:e,startTime:i}){function o(v){let[y,M]=v.split(" "),[I,B]=y.split(":").map(Number);return M==="PM"&&I!==12&&(I+=12),M==="AM"&&I===12&&(I=0),I.toString().padStart(2,"0")+":"+(B||"00").toString().padStart(2,"0")}function s(v){if(!v)return"00:00";let y=v.split(":"),M=y[0].padStart(2,"0"),I=(y[1]||"00").padStart(2,"0");return`${M}:${I}`}let m=this.getDayOfWeekInManilaTime(e),f=o(i);for(let v of this.cachedRecurringBlocks){if(!v||!v.court||v.day===void 0||v.day===null||v.day==="")continue;let y=v.court.replace(" (Coaching)",""),M=t.replace(" (Coaching)",""),I=typeof v.day=="str
35ing"?parseInt(v.day,10):v.day;if(isNaN(I))continue;let B=s(v.startTime),N=s(v.endTime),H=y===M||v.court==="ALL",W=I===m,G=f>=B&&f<N;if(H&&W&&G)return{blocked:!0,description:v.block_description||"Blocked by admin"}}return{blocked:!1}}isScheduleBlockedAsync(o){return ue(this,arguments,function*({court:t,date:e,startTime:i}){return this.recurringBlocksLoaded||(yield this.loadRecurringBlocks()),this.isScheduleBlocked({court:t,date:e,startTime:i})})}validateTotalPersonPlaying({court:t,date:e,startTime:i,totalPerson:o,bookingType:s}){if(s!=="rental"||!this.TOTAL_PERSON_VALIDATION_RULES)return{valid:!0};function m(y){let[M,I]=y.split(" "),[B,N]=M.split(":").map(Number);return I==="PM"&&B!==12&&(B+=12),I==="AM"&&B===12&&(B=0),B.toString().padStart(2,"0")+":"+(N||"00").toString().padStart(2,"0")}let f=this.getDayOfWeekInManilaTime(e),v=m(i);for(let y of this.TOTAL_PERSON_VALIDATION_RULES)if(y.courts.includes(t)&&y.days.includes(f)&&v>=y.startTime&&v<y.endTime&&o<y.minPlayers)return{valid:!1,message:"Minimum players required: "+y.minPlayers};return{valid:!0}}validateCoachingCourtPriority(m){return ue(this,arguments,function*({court:t,date:e,startTime:i,duration:o,bookingType:s}){if(s!=="coaching")return{valid:!0};if(t!=="Court 8"&&t!=="Court 9")return{valid:!0};try{let I=function(j){let[Y,U]=j.split(" "),[K,J]=Y.split(":").map(Number);U==="PM"&&K!==12&&(K+=12),U==="AM"&&K===12&&(K=0);let ge=new Date;return ge.setHours(K,J,0,0),ge},B=function(j,Y,U){let K=I(Y),J=new Date(K.getTime()+U*60*60*1e3);return M.some(ge=>{if(ge.court!==j)return!1;let xe=I(ge.startTime||ge.time),he=ge.endTime?I(ge.endTime):new Date(xe.getTime()+(ge.duration||1)*60*60*1e3);return K<he&&J>xe})};var f=I,v=B;let M=(yield po(this.http.get(`${this.API_BASE}/bookings`,{headers:{Accept:"application/json"}}))).filter(j=>j.date===e&&j.status!=="Declined"&&j.status!=="Cancelled"),N=!B("Court 10",i,o),H=!B("Court 11",i,o),W=this.isScheduleBlocked({court:"Court 10",date:e,startTime:i}),G=this.isScheduleBlocked({court:"Court 11",date:e,startTime:i}),Z=N&&!W.blocked,Q=H&&!G.blocked;if(Z||Q){let j=[];return Z&&j.push("Court 10"),Q&&j.push("Court 11"),{valid:!1,message:`Coaching sessions must use priority courts when available. Please select from: ${j.join(", ")}`}}return{valid:!0}}catch{return{valid:!0}}})}static \u0275fac=function(e){return new(e||n)(on(Wi))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var tc=class n{CUTOFF_DATETIME="2026-01-17 17:30";OLD_TO_NEW_MAPPING={"Court 4":"Court 7","Court 5":"Court 8","Court 6":"Court 9","Court 7":"Court 10","Court 8":"Court 11"};NEW_TO_OLD_MAPPING={"Court 7":"Court 4","Court 8":"Court 5","Court 9":"Court 6","Court 10":"Court 7","Court 11":"Court 8"};constructor(){}isCreatedBeforeCutoff(t){if(!t)return!0;try{let e=new Date(this.CUTOFF_DATETIME.replace(" ","T")),i=t.replace(" ","T"),o=new Date(i);if(isNaN(o.getTime())||isNaN(e.getTime())){let s=t.substring(0,10),m=this.CUTOFF_DATETIME.substring(0,10);return s<m}return o<e}catch{return!0}}getDisplayCourtNumber(t,e){return t&&(this.isCreatedBeforeCutoff(e)&&this.OLD_TO_NEW_MAPPING[t]||t)}getDisplayCourtLabel(t,e){if(!t)return t;if(this.isCreatedBeforeCutoff(e)){let i=this.OLD_TO_NEW_MAPPING[t];if(i)return`${t} (Now ${i})`}return t}getDatabaseCourtNumber(t,e){return t&&(this.isCreatedBeforeCutoff(e)&&this.NEW_TO_OLD_MAPPING[t]||t)}static \u0275fac=function(e){return new(e||n)};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var Hy=n=>({"admin-authenticated":n}),Wy=(n,t,e)=>({pending:n,paid:t,declined:e});function Gy(n,t){if(n&1&&(r(0,"option",188),l(1),a()),n&2){let e=t.$implicit;x("value",e.courtName),d(),Se(" ",e.courtName,"",(e.courtType==null?null:e.courtType.toLowerCase())==="coaching"?" (Coaching)":""," ")}}function qy(n,t){if(n&1&&(r(0,"option",188),l(1),a()),n&2){let e=t.$implicit;x("value",e.userId),d(),Se("",e.fullname,"",e.hourlyRate?" \u2014 \u20B1"+e.hourlyRate+"/hr":"","")}}function $y(n,t){if(n&1){let e=L();r(0,"button",194),S("click",function(){k(e);let o=h(2);return O(o.callCoach())}),w(1,"i",195),r(2,"span"),l(3,"Call"),a()()}if(n&2){let e=h(2);vn("aria-label","Call "+e.selectedCoachName)}}function Yy(n,t){if(n&1&&(r(0,"div",189)(1,"label",190),l(2,"Coach Contact Number"),a(),r(3,"div",191),w(4,"input",192),A(5,$y,4,1,"button",193),a()()),n&2){let e=h();d(4),x("value",e.selectedCoachContact||"Not provided by coach"),d(),x("ngIf",e.selectedCoachContact)}}function Xy(n,t){if(n&1&&(r(0,"p",198)(1,"strong"),l(2,"Coach:"),a(),l(3),a()),n&2){let e=h(2);
35d(3),F(" ",e.pendingBookingData.coachName,"")}}function Zy(n,t){if(n&1&&(r(0,"div",196)(1,"p")(2,"strong"),l(3,"Date:"),a(),l(4),a(),r(5,"p")(6,"strong"),l(7,"Time:"),a(),l(8),a(),r(9,"p")(10,"strong"),l(11,"Duration:"),a(),l(12),a(),r(13,"p")(14,"strong"),l(15,"Court:"),a(),l(16),a(),r(17,"p")(18,"strong"),l(19,"Type:"),a(),l(20),a(),A(21,Xy,4,1,"p",197),r(22,"p")(23,"strong"),l(24,"Total Persons:"),a(),l(25),a()()),n&2){let e=h();d(4),F(" ",e.pendingBookingData.date,""),d(4),F(" ",e.pendingBookingData.startTime,""),d(4),F(" ",e.pendingBookingData.duration," hour(s)"),d(4),F(" ",e.pendingBookingData.court,""),d(4),F(" ",e.pendingBookingData.type,""),d(),x("ngIf",e.pendingBookingData.coachName),d(4),F(" ",e.pendingBookingData.totalPersonPlaying,"")}}function Qy(n,t){if(n&1&&(r(0,"p",199),l(1),a()),n&2){let e=h();d(),F("Zoom: ",(e.imageZoom*100).toFixed(0),"%")}}function Ky(n,t){if(n&1){let e=L();r(0,"div",200)(1,"button",201),S("click",function(){k(e);let o=h();return O(o.zoomOut())}),w(2,"i",202),a(),r(3,"button",203),S("click",function(){k(e);let o=h();return O(o.resetZoom())}),w(4,"i",204),a(),r(5,"button",205),S("click",function(){k(e);let o=h();return O(o.zoomIn())}),w(6,"i",206),a()()}if(n&2){let e=h();d(),x("disabled",e.imageZoom<=.5),d(4),x("disabled",e.imageZoom>=3)}}function Jy(n,t){n&1&&(r(0,"div",207),w(1,"div",208),r(2,"p",129),l(3,"Loading receipt..."),a()())}function eC(n,t){if(n&1&&(r(0,"div",209),w(1,"i",110),r(2,"h4"),l(3,"Unable to Load Receipt"),a(),r(4,"p"),l(5,"The receipt image could not be loaded. This may be due to:"),a(),r(6,"ul")(7,"li"),l(8,"Google Drive sharing permissions"),a(),r(9,"li"),l(10,"Network connectivity issues"),a(),r(11,"li"),l(12,"Invalid image format"),a()(),r(13,"p",210),l(14),a()()),n&2){let e=h();d(14),F("URL: ",e.currentReceiptUrl,"")}}function tC(n,t){if(n&1){let e=L();r(0,"div",211)(1,"img",212),S("load",function(){k(e);let o=h();return O(o.onReceiptImageLoad())})("error",function(){k(e);let o=h();return O(o.onReceiptImageError())})("dblclick",function(){k(e);let o=h();return O(o.imageZoom===1?o.zoomIn():o.resetZoom())}),a()()}if(n&2){let e=h();le("display",e.isLoadingReceipt?"none":"flex"),d(),le("transform","scale("+e.imageZoom+")"),Kt("alt","Receipt ",e.currentReceiptIndex+1,""),x("src",e.currentReceiptUrl,Ie)}}function nC(n,t){if(n&1){let e=L();r(0,"button",213),S("click",function(){k(e);let o=h();return O(o.downloadReceipt())}),w(1,"i",214),l(2," Download "),a()}}function iC(n,t){if(n&1&&(r(0,"div",221)(1,"span",222),l(2,"Coach"),a(),r(3,"span",224),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.coachName)}}function oC(n,t){if(n&1&&(r(0,"div",221)(1,"span",222),l(2,"External Coach"),a(),r(3,"span",224),l(4),a()()),n&2){let e=h(2);d(4),R(e.getExternalCoachName(e.selectedBooking))}}function rC(n,t){if(n&1&&(r(0,"div",221)(1,"span",222),l(2,"Ext. Coach Contact"),a(),r(3,"span",224),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.externalCoachContact||e.parseExternalCoachField(e.selectedBooking.notes,"Contact"))}}function aC(n,t){if(n&1&&(r(0,"div",221)(1,"span",222),l(2,"Ext. Coach Email"),a(),r(3,"span",224),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.externalCoachEmail||e.parseExternalCoachField(e.selectedBooking.notes,"Email"))}}function sC(n,t){if(n&1&&(r(0,"div",221)(1,"span",222),l(2,"Remarks"),a(),r(3,"span",224),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.notes)}}function lC(n,t){if(n&1){let e=L();r(0,"div",215),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"div",216)(2,"div",217),w(3,"i",218),r(4,"h3"),l(5,"Booking Details"),a()(),r(6,"button",219),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(7,"i",155),a()(),r(8,"div",220)(9,"div",221)(10,"span",222),l(11,"Booking ID"),a(),r(12,"span",223),l(13),a()(),r(14,"div",221)(15,"span",222),l(16,"Date"),a(),r(17,"span",224),l(18),a()(),r(19,"div",221)(20,"span",222),l(21,"Time"),a(),r(22,"span",224),l(23),a()(),r(24,"div",221)(25,"span",222),l(26,"Duration"),a(),r(27,"span",224),l(28),a()(),r(29,"div",221)(30,"span",222),l(31,"Court"),a(),r(32,"span",224),l(33),a()(),r(34,"div",221)(35,"span",222),l(36,"Type"),a(),r(37,"span",224),l(38),a()(),A(39,iC,5,1,"div",225)(40,oC,5,1,"div",225)(41,rC,5,1,"div",225)(42,aC,5,1,"div",225),r(43,"div",221)(44,"span",222),l(45,"Total Players"),a(),r(46,"span",224),l(47),a()(),r(48,"div",221)(49,"span",222),l(50,"Name"),a(),r(51,"span",224),l(52),a()(),r(53,"div",221)(54,"span",222),l(55,"Contact"),a(),r(56,"span",224),l(57),a()(),r(58,"div",221)(59,"span",222),l(60,"Email"),a(),r(61,"span",224),l(62),a()(),r(63,"div",221)(64,"span",222),l(65,"Status"),a(),r(66,"span",226),l(67),a()(),r(68,"div",221)(69,"span",222),l(70,"Amount Payable"),a(),r(71,"span",223),l(72),a()(),A(73,sC,5,1,"div",225),a(),r(74,"div",227)(75,"button",228),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(76,"i",187),l(77," Got It "),a()()()}if(n&2){let e=h();d(13),R(e.selectedBooking.id),d(5),R(e.selectedBooking.date),d(5),R(e.getTimeDisplay(e.selectedBooking)),d(5),F("",e.selectedBooking.duration||1," hour(s)"),d(5),R(e.selectedBooking.court),d(5),R(e.selectedBooking.type),d(),x("ngIf",e.selectedBooking.coachName),d(),x("ngIf",e.getExternalCoachName(e.selectedBooking)),d(),x("ngIf",e.selectedBooking.externalCoachContact||e.parseExternalCoachField(e.selectedBooking.notes,"Contact")),d(),x("ngIf",e.selectedBooking.externalCoachEmail||e.parseExternalCoachField(e.selectedBooking.notes,"Email")),d(5),R(e.selectedBooking.totalPersonPlaying||"N/A"),d(5),R(e.selectedBooking.name),d(5),R(e.selectedBooking.contact),d(5),R(e.selectedBooking.email),d(4),x("ngClass",jo(18,Wy,e.selectedBooking.status==="Reserved - Pending Payment"||e.selectedBooking.status==="Booking Request Submitted",e.selectedBooking.status==="Reserved - Paid",e.selectedBooking.status==="Declined"||e.selectedBooking.status==="Cancelled")),d(),F(" ",e.selectedBooking.status," "),d(5),F("\u20B1",e.calculateAmou
35nt(e.selectedBooking).toLocaleString(),""),d(),x("ngIf",e.selectedBooking.notes)}}var nc=class n{constructor(t,e,i,o){this.apiService=t;this.bookingConfigService=e;this.authService=i;this.courtMapperService=o;let s=new Date;this.selectedDate=s.toISOString().split("T")[0],this.apiBase=this.bookingConfigService.API_BASE,this.bookingRate=this.bookingConfigService.BOOKING_RATE}bookingsRefreshInterval;bookingsCount=null;bookingsError=null;selectedDate="";userBookingDate="";bookings=[];blockedSchedules=[];blockExemptions=[];isLoading=!1;isSubmittingBooking=!1;isUpdatingStatus=!1;currentAdminBookingId=null;currentUser=null;externalCoachChecked=!1;showCoachingWarningModal=!1;selectedCoachName="";selectedCoachContact="";selectedCoachContactMissing=!1;pendingBookingData=null;showAuthRequiredModal=!1;showExemptionConfirmModal=!1;pendingExemptionCourt="";pendingExemptionDate="";pendingExemptionTime="";isCreatingExemption=!1;showReceiptViewerModal=!1;showBookingDetailsModal=!1;showMarkAsPaidRestrictionModal=!1;currentReceiptUrl="";currentReceiptIndex=0;allReceiptUrls=[];isLoadingReceipt=!1;receiptLoadError=!1;imageZoom=1;selectedBooking=null;apiBase;bookingRate;coaches=[];timeSlots=["8:00 AM","9:00 AM","10:00 AM","11:00 AM","12:00 PM","1:00 PM","2:00 PM","3:00 PM","4:00 PM","5:00 PM","6:00 PM","7:00 PM","8:00 PM","9:00 PM","10:00 PM"];courts=[];ngOnInit(){this.currentUser=this.authService.getCurrentUser(),this.initializeComponent(),this.userBookingDate=new Date().toISOString().split("T")[0],this.bookingsRefreshInterval=setInterval(()=>{document.hidden||this.loadBookings()},6e4)}ngOnDestroy(){let t=document.getElementById("schedule-grid");t&&t.removeEventListener("click",this.handleGridClick),this.bookingsRefreshInterval&&clearInterval(this.bookingsRefreshInterval)}initializeComponent(){return ue(this,null,function*(){try{this.isLoading=!0,this.showLoadingOverlay(),this.showSyncIndicator(),yield this.loadCourts(),yield this.loadCoaches(),yield this.bookingConfigService.loadRecurringBlocks(),yield this.fetchBlockedSchedules(),yield this.fetchBlockExemptions(),yield this.loadBookings(),this.setDefaultDate(),this.initializeModalHandlers(),this.setupFormEventListeners(),setTimeout(()=>{this.isLoading=!1,this.hideLoadingOverlay(),this.hideSyncIndicator()},200)}catch(t){console.error("Error initializing component:",t),this.bookingsError="Failed to initialize application",this.isLoading=!1,this.hideLoadingOverlay(),this.hideSyncIndicator()}})}loadBookings(){return ue(this,null,function*(){return this.showSyncIndicator(),new Promise((t,e)=>{try{let i=this.selectedDate?{date:this.selectedDate}:{};this.apiService.getBookings(i).subscribe({next:o=>{let s=o.map(m=>{if(m.paymentProofUrl&&typeof m.paymentProofUrl=="string")try{let f=JSON.parse(m.paymentProofUrl);m.paymentProofUrl=Array.isArray(f)?f:[f]}catch{}if(m.paymentProofUrl&&Array.isArray(m.paymentProofUrl)&&(m.paymentProofUrl=m.paymentProofUrl.map(f=>{if(typeof f=="string")try{return JSON.parse(f)}catch{return f}return f})),m.receiptUrls&&typeof m.receiptUrls=="string")try{m.receiptUrls=JSON.parse(m.receiptUrls)}catch{}return m.receiptUrls&&Array.isArray(m.receiptUrls)&&(m.receiptUrls=m.receiptUrls.map(f=>{if(typeof f=="string")try{return JSON.parse(f)}catch{return f}return f})),(!m.receiptUrls||m.receiptUrls.length===0)&&m.paymentProofUrl&&Array.isArray(m.paymentProofUrl)&&m.paymentProofUrl.length>0&&(m.receiptUrls=[...m.paymentProofUrl]),m});this.bookings=s,this.bookingsCount=s.length,this.renderScheduleGrid(),this.showSyncSuccess(),t()},error:o=>{console.error("Error loading bookings:",o),this.bookingsError=`API error: ${o.message}`,this.bookingsCount=0,this.hideSyncIndicator(),e(o)}})}catch(i){console.error("Error in loadBookings:",i),this.bookingsError="Failed to load bookings",this.hideSyncIndicator(),e(i)}})})}loadCoaches(){return ue(this,null,function*(){return new Promise(t=>{this.apiService.getActiveCoaches().subscribe({next:e=>{this.coaches=e.filter(i=>i.fullname).sort((i,o)=>{let s=i.role?.toLowerCase().split(",").map(f=>f.trim()).includes("admin")?0:1,m=o.role?.toLowerCase().split(",").map(f=>f.trim()).includes("admin")?0:1;return s!==m?s-m:i.fullname.localeCompare(o.fullname)}),t()},error:()=>{this.coaches=[],t()}})})})}loadCourts(){return ue(this,null,function*(){return new Promise(t=>{this.apiService.getActiveCourts().subscribe({next:e=>{this.courts=e,t()},error:()=>{this.courts=[],t()}})})})}
35formatReleaseWindowLabel(t){let e=this.getPriorityReleaseHours(t);if(e>0&&e%24===0){let i=e/24;return i===1?"1 Day":`${i} Days`}return e===1?"1 Hour":`${e} Hours`}fetchBlockedSchedules(){return ue(this,null,function*(){return new Promise((t,e)=>{try{this.apiService.getDateBlocks().subscribe({next:i=>{this.blockedSchedules=i.map(o=>({court:o.court,date:o.date,startTime:o.startTime.length===4?"0"+o.startTime:o.startTime,endTime:o.endTime.length===4?"0"+o.endTime:o.endTime,block_description:o.block_description})),t()},error:i=>{console.error("Error fetching blocked schedules:",i),this.blockedSchedules=[],e(i)}})}catch(i){console.error("Error in fetchBlockedSchedules:",i),this.blockedSchedules=[],e(i)}})})}fetchBlockExemptions(){return ue(this,null,function*(){return new Promise((t,e)=>{try{this.apiService.getBlockExemptions().subscribe({next:i=>{this.blockExemptions=i.map(o=>({court:o.court,date:o.date,startTime:o.startTime.length===4?"0"+o.startTime:o.startTime,endTime:o.endTime.length===4?"0"+o.endTime:o.endTime,exemptionDescription:o.exemptionDescription})),t()},error:i=>{console.error("Error fetching block exemptions:",i),this.blockExemptions=[],e(i)}})}catch(i){console.error("Error in fetchBlockExemptions:",i),this.blockExemptions=[],e(i)}})})}setDefaultDate(){let t=new Date,e=t.toISOString().split("T")[0],i=document.getElementById("schedule-date");i&&(i.value=e);let o=document.getElementById("selected-date-label");o&&(o.textContent=this.formatDateLabel(t)),this.selectedDate=e}formatDateLabel(t){let e={month:"long",day:"numeric",year:"numeric"};return t.toLocaleDateString("en-US",e).toUpperCase()}isCourtBlockedAllDay(t){if(this.bookings.some(i=>this.getDisplayCourtNumber(i.court,i.bookingDateTime||i.createdAt)===t&&i.date===this.selectedDate&&i.status!=="Declined"&&i.status!=="Cancelled"))return!1;for(let i of this.timeSlots){let o=this.isScheduleBlocked({court:t,date:this.selectedDate,startTime:i});if(!o||!o.blocked)return!1}return!0}renderScheduleGrid(){let t=document.getElementById("schedule-grid");if(!t)return;let e=this.bookings.filter(y=>y.date===this.selectedDate&&y.status!=="Declined"&&y.status!=="Cancelled"),i=this.authService.getCurrentUser(),s=i&&i.role==="admin"?this.courts:this.courts.filter(y=>!this.isCourtBlockedAllDay(y.courtName)),m=s.filter(y=>y.courtType?.toLowerCase()!=="coaching"),f=s.filter(y=>y.courtType?.toLowerCase()==="coaching"),v='<table class="booking-schedule-table">';v+="<thead>",v+="<tr>",v+='<th class="time-header" rowspan="2">Time</th>',m.length>0&&(v+=`<th class="group-header rental-group" colspan="${m.length}">Court Rentals</th>`),f.length>0&&(v+=`<th class="group-header coaching-group" colspan="${f.length}">Coaching</th>`),v+="</tr>",v+="<tr>";for(let y of s){let M=y.courtType?.toLowerCase()==="coaching";v+=`<th class="court-header ${M?"coaching-header":""}">${y.courtName}</th>`}v+="</tr>",v+="</thead>",v+="<tbody>";for(let y of this.timeSlots){v+=`<tr><td class="time-cell">${y}</td>`;for(let M of s){let B=M.courtType?.toLowerCase()==="coaching"?"coaching-court":"rental-court",N=e.find(H=>this.getDisplayCourtNumber(H.court,H.bookingDateTime||H.createdAt)===M.courtName&&this.isWithinBookingTime(y,H));if(N){let H=N.timeDisplay||(N.duration?`${N.startTime||N.time} - ${N.endTime}`:N.time),W=this.formatBookingStatus(N.status,N.name,H||"",N),G=this.getStatusClass(N.status);v+=`<td class="court-cell ${B} ${G} admin-booking-tile clickable-tile" data-booking-id="${N.id}">${W}</td>`}else{let H=this.isScheduleBlocked({court:M.courtName,date:this.selectedDate,startTime:y});if(H&&H.blocked){let W=this.authService.getCurrentUser();W&&W.role==="admin"?v+=`<td class="court-cell ${B} blocked admin-bypass" data-court="${M.courtName}" data-time="${y}"> 36 NOT AVAILABLE${H.description?"<br><small>"+H.description+"</small>":""} 37 <br><small class="admin-bypass-label"><i class="bi bi-unlock"></i> Admin: Click to bypass</small> 38 <br><button class="add-exemption-btn" data-court="${M.courtName}" data-time="${y}"> 39 <i class="bi bi-plus-circle"></i> Add Exemption 40 </button> 41 </td>`:v+=`<td class="court-cell ${B} blocked">NOT AVAILABLE${H.description?"<br><small>"+H.description+"</small>":""}</td>`}else this.isInternalCoachCourt(M.courtName)&&!this.canBookInternalCoachSlot(M.courtName,this.selectedDate,y)?v+=`<td class="court-cell ${B} internal-coach-reserved">
41<i class="bi bi-person-badge"></i> Internal Coach Access (Opens ${this.formatReleaseWindowLabel(M.courtName)} Prior)</td>`:v+=`<td class="court-cell ${B} open clickable-tile" data-court="${M.courtName}" data-time="${y}">OPEN</td>`}}v+="</tr>"}v+="</tbody></table>",t.innerHTML=v,this.setupTileClickHandlers()}getDisplayCourtNumber(t,e){return this.courtMapperService.getDisplayCourtNumber(t,e)}getDisplayCourtLabel(t,e){return this.courtMapperService.getDisplayCourtLabel(t,e)}isInternalCoachCourt(t){return this.courts.find(i=>i.courtName===t)?.priorityAccessEnabled===!0}getPriorityReleaseHours(t){let i=this.courts.find(o=>o.courtName===t)?.priorityReleaseHours;return i!=null&&i>=0?i:this.DEFAULT_INTERNAL_COACH_RELEASE_HOURS}canBookInternalCoachCourt(){let t=this.authService.getCurrentUser();return t?t.role==="admin"||this.authService.hasRole("coach"):!1}DEFAULT_INTERNAL_COACH_RELEASE_HOURS=48;isWithinInternalCoachReleaseWindow(t,e,i){if(!e)return!1;let o=this.getPriorityReleaseHours(t);if(o<=0)return!0;try{let s=new Date(`${e}T00:00:00`);if(i){let[f,v]=i.split(" "),[y,M]=f.split(":").map(Number);v==="PM"&&y!==12&&(y+=12),v==="AM"&&y===12&&(y=0),s.setHours(y,M||0,0,0)}return isNaN(s.getTime())?!1:s.getTime()-Date.now()<=o*60*60*1e3}catch{return!1}}canBookInternalCoachSlot(t,e,i){return this.canBookInternalCoachCourt()||this.isWithinInternalCoachReleaseWindow(t,e,i)}setupTileClickHandlers(){let t=document.getElementById("schedule-grid");t&&(t.removeEventListener("click",this.handleGridClick),t.addEventListener("click",this.handleGridClick))}handleGridClick=t=>{let e=t.target;if(e.classList.contains("add-exemption-btn")||e.closest(".add-exemption-btn")){let m=e.classList.contains("add-exemption-btn")?e:e.closest(".add-exemption-btn");if(m){let f=m.getAttribute("data-court"),v=m.getAttribute("data-time");if(f&&v){t.preventDefault(),t.stopPropagation(),this.handleAddExemptionClick(f,v);return}}}let i=e.closest(".admin-bypass");if(i&&!e.classList.contains("add-exemption-btn")&&!e.closest(".add-exemption-btn")){let m=i.getAttribute("data-court"),f=i.getAttribute("data-time");if(m&&f){t.stopPropagation(),this.handleOpenTileClick(m,f);return}}let o=e.closest(".admin-booking-tile");if(o){let m=o.getAttribute("data-booking-id");if(m){t.stopPropagation(),this.handleAdminTileClick(m);return}}let s=e.closest(".clickable-tile");if(s){let m=s.getAttribute("data-court"),f=s.getAttribute("data-time");m&&f&&(t.stopPropagation(),this.handleOpenTileClick(m,f))}};handleAddExemptionClick(t,e){this.pendingExemptionCourt=t,this.pendingExemptionDate=this.selectedDate,this.pendingExemptionTime=e,this.showExemptionConfirmModal=!0}closeExemptionConfirmModal(){this.showExemptionConfirmModal=!1,this.pendingExemptionCourt="",this.pendingExemptionDate="",this.pendingExemptionTime=""}confirmAddExemption(){return ue(this,null,function*(){this.isCreatingExemption=!0;try{let t=this.convertTo24Hour(this.pendingExemptionTime),o=`${(parseInt(t.split(":")[0])+1).toString().padStart(2,"0")}:00`,s={court:this.pendingExemptionCourt,date:this.pendingExemptionDate,startTime:t,endTime:o,exemptionDescription:"Admin exemption created from booking grid"};yield this.apiService.createBlockExemption(s).toPromise(),this.showToast(`Exemption added for ${this.pendingExemptionCourt} at ${this.pendingExemptionTime}`,"success"),this.closeExemptionConfirmModal(),yield this.fetchBlockExemptions(),this.renderScheduleGrid()}catch(t){console.error("Error creating exemption:",t),this.showToast("Failed to create exemption. Please try again.","error")}finally{this.isCreatingExemption=!1}})}handleOpenTileClick(t,e){this.openBookingModal(),setTimeout(()=>{let i=document.getElementById("user-booking-date"),o=document.getElementById("user-booking-court"),s=document.getElementById("user-booking-start-time"),m=document.getElementById("user-booking-type"),f=document.getElementById("user-coach-group");i&&(i.value=this.selectedDate,this.userBookingDate=this.selectedDate),s&&(s.value=e,this.updateDurationOptions(),this.updateTimeRangeAndAmount());let v=this.courts.find(y=>y.courtName===t);m&&v?.courtType?.toLowerCase()==="coaching"&&(m.value="coaching",f&&(f.style.display="block")),this.refreshCourtOptions(),o&&(o.value=t)},100)}isWithinBookingTime(t,e){let i=this.parseTimeStr(t);if(!e.duration){let f=this.parseTimeStr(e.time||e.startTime);return i.getTime()===f.getTime()}let o=this.parseTimeStr(e.startTime||e.time||""),s=new Date(o.getTime()+e.duration*60*60*1e3),m=i.getTime();return m>=o.getTime()&&m<s.getTime()}parseTimeStr(t){let[e,i]=t.split(" "),[o,s]=e.split(":").map(Number);i==="PM"&&o!==12&&(o+=12),i==="AM"&&o===12&&(o=0);let m=new Date;return m.setHours(o,s,0,0),m}formatBookingStatus(t,e,i,o){if(!t)return"OPEN";if(t==="closed")return"CLOSED";let s=this.authService.getCurrentUser();if(!(s&&s.role==="admin")){let M=t.replace("-"," ").toUpperCase(),I=i||"",B=o?.receiptUrls?.length||0,N=B>0?`<span class="receipt-indicator" title="${B} receipt(s) attached"><i class="bi bi-paperclip"></i> ${B}
41</span>`:"",H=s&&o?.coachName&&o?.name?`<br><span class="student-badge"><i class="bi bi-person"></i> ${o.name}</span>`:"",W=o?.coachName?`<br><span class="coach-badge"><i class="bi bi-person-badge"></i> ${o.coachName}</span>`:"",G=o?this.getExternalCoachName(o):"",Z=G?`<br><span class="external-coach-badge"><i class="bi bi-person-vcard"></i> ${G}</span>`:"";return I?`${N}<small>${I}<br>${M}</small>${H}${W}${Z}`:`${N}${M}${H}${W}${Z}`}let f=i||"",v=t.replace("-"," ").toUpperCase(),y="";if(o){let M=o.receiptUrls&&o.receiptUrls.length>0,I=o.receiptUrls?.length||0,B=M?`<span class="receipt-indicator" title="${I} receipt(s) attached"><i class="bi bi-paperclip"></i> ${I}</span>`:"";y+=B,o.coachName?y+=`<span class="student-badge"><i class="bi bi-person"></i> ${o.name}</span>`:y+=`<strong>${o.name}</strong>`;let N=this.getDisplayCourtLabel(o.court,o.bookingDateTime||o.createdAt);N!==o.court&&(y+=`<br><span class="court-remap-label">${N}</span>`),o.type==="rental"&&(y+='<br><span class="booking-type-label">Private Court Rental</span>'),o.coachName&&(y+=`<br><span class="coach-badge"><i class="bi bi-person-badge"></i> ${o.coachName}</span>`);let H=this.getExternalCoachName(o);H&&(y+=`<br><span class="external-coach-badge"><i class="bi bi-person-vcard"></i> ${H}</span>`)}else e&&(y+=e);return y?`${y}<br><small>${f}<br>${v}</small>`:v}getStatusClass(t){switch(t){case"Booking Request Submitted":return"booking-request-submitted";case"Reserved - Pending Payment":return"reserved-pending-payment";case"Reserved - Paid":return"reserved-paid";case"Declined":return"declined";default:return""}}isScheduleBlocked(t){let e=this.blockedSchedules.find(o=>o.court===t.court&&o.date===t.date&&this.isTimeWithinBlock(t.startTime,o.startTime,o.endTime));if(e){let o=this.blockExemptions.find(s=>s.court===t.court&&s.date===t.date&&this.isTimeWithinBlock(t.startTime,s.startTime,s.endTime));return o?{blocked:!1,exempted:!0,description:o.exemptionDescription}:{blocked:!0,description:e.block_description}}let i=this.bookingConfigService.isScheduleBlocked({court:t.court,date:t.date,startTime:t.startTime});if(i&&i.blocked){let o=this.blockExemptions.find(s=>s.court===t.court&&s.date===t.date&&this.isTimeWithinBlock(t.startTime,s.startTime,s.endTime));if(o)return{blocked:!1,exempted:!0,description:o.exemptionDescription}}return i}isTimeWithinBlock(t,e,i){let o=this.convertTo24Hour(t),s=e.length===5?e:"0"+e,m=i.length===5?i:"0"+i;return o>=s&&o<m}convertTo24Hour(t){let[e,i]=t.split(" "),[o,s]=e.split(":").map(Number);return i==="PM"&&o!==12?o+=12:i==="AM"&&o===12&&(o=0),o.toString().padStart(2,"0")+":"+(s||0).toString().padStart(2,"0")}initializeModalHandlers(){console.log("Modal handlers initialized")}refreshCourtOptions(){let t=document.getElementById("user-booking-type"),e=document.getElementById("user-booking-court");if(!e)return;let i=t?.value||"",o=e.value;for(;e.options.length>1;)e.remove(1);let s=i==="coaching"?this.courts.filter(M=>M.courtType?.toLowerCase()==="coaching"):i==="rental"?this.courts.filter(M=>M.courtType?.toLowerCase()!=="coaching"):this.courts,m=document.getElementById("user-booking-date")?.value||this.selectedDate,f=document.getElementById("user-booking-start-time")?.value||void 0;s.filter(M=>!this.isInternalCoachCourt(M.courtName)||this.canBookInternalCoachSlot(M.courtName,m,f)).forEach(M=>{let I=document.createElement("option");I.value=M.courtName,I.text=M.courtName+(M.courtType?.toLowerCase()==="coaching"?" (Coaching)":""),e.appendChild(I)});let y=Array.from(e.options).map(M=>M.value);e.value=y.includes(o)?o:""}setupFormEventListeners(){setTimeout(()=>{let t=document.getElementById("user-booking-type"),e=document.getElementById("user-booking-court"),i=document.getElementById("user-coach-group");t&&i&&e?(t.addEventListener("change",N=>{let H=N.target;this.refreshCourtOptions(),i.style.display=H.value==="coaching"?"block":"none",H.value!=="coaching"&&this.setSelectedCoachContact(void 0)}),this.refreshCourtOptions()):t&&e&&(t.addEventListener("change",()=>this.refreshCourtOptions()),this.refreshCourtOptions());let o=document.getElementById("user-booking-date"),s=document.getElementById("user-booking-start-time");o?.addEventListener("change",()=>this.refreshCourtOptions()),s?.addEventListener("change",()=>this.refreshCourtOptions());let m=document.getElementById("user-booking-coach");m&&t&&m.addEventListener("change",()=>{let N=t.value,H=m.value,W=this.coaches.find(Z=>Z.userId===H);this.setSelectedCoachContact(W);let G=document.getElementById("coach-rate-hint");if(G&&(H&&W?.hourlyRate?(G.textContent=`Rate: \u20B1${W.hourlyRate}/hr`,G.style.display="block"):G.style.display="none"),N==="coaching"&&H&&H!==""){this.selectedCoachName=W?.fullname||H;let Z=document.getElementById("coach-confirm-modal");Z&&(Z.style.display="flex",document.body.style.overflow="hidden")}});let f=document.getElementById("user-booking-date");if(f){let N=new Date().toISOString().split("T")[0],H=new Date;H.setDate(H.getDate()+30),f.min=N,f.max=H.toISOString().split("T")[0]}let v=document.getElementById("user-booking-start-time"),y=document.getElementById("user-booking-duration"),M=document.getElementById("time-range-display"),I=document.getElementById("user-booking-amount"),B=()=>
41{if(v?.value&&y?.value){let N=v.value,H=parseInt(y.value),W=this.parseTimeStr(N),G=new Date(W.getTime()+H*60*60*1e3),Z=this.formatTimeStr(G);M&&(M.textContent=`${N} - ${Z}`);let Q=H*this.bookingRate;I&&(I.value=`\u20B1${Q.toFixed(2)}`)}};v&&v.addEventListener("change",()=>this.onTimeRangeChange()),y&&y.addEventListener("change",()=>this.onTimeRangeChange())},100)}onDateChange(t){this.selectedDate=t.target.value;let e=new Date(this.selectedDate),i=document.getElementById("selected-date-label");i&&(i.textContent=this.formatDateLabel(e)),this.loadBookings()}onTimeRangeChange(){this.updateDurationOptions(),this.updateTimeRangeAndAmount()}updateDurationOptions(){let t=document.getElementById("user-booking-start-time"),e=document.getElementById("user-booking-duration");if(!t?.value||!e)return;let i=t.value,o=23,m=this.parseTimeStr(i).getHours(),f=Math.max(1,o-m),v=parseInt(e.value)||1;e.innerHTML="";for(let y=1;y<=Math.min(5,f);y++){let M=document.createElement("option");M.value=y.toString(),M.text=y===1?"1 Hour":`${y} Hours`,e.appendChild(M)}v>f?(e.value=f.toString(),this.showToast(`Duration adjusted to ${f} hour(s) to not exceed 11PM closing time.`,"info")):e.value=v.toString()}onBookingTypeChange(t){let e=document.getElementById("user-coach-group");e&&(t.target.value==="coaching"?e.style.display="block":e.style.display="none")}updateTimeRangeAndAmount(){let t=document.getElementById("user-booking-start-time"),e=document.getElementById("user-booking-duration"),i=document.getElementById("time-range-display"),o=document.getElementById("user-booking-amount");if(t?.value&&e?.value){let s=t.value,m=parseInt(e.value),f=this.parseTimeStr(s),v=new Date(f.getTime()+m*60*60*1e3),y=this.formatTimeStr(v);i&&(i.textContent=`${s} - ${y}`);let M=m*this.bookingRate;o&&(o.value=`\u20B1${M.toFixed(2)}`)}}openBookingModal(){if(this.isLoading){this.showToast("Please wait for bookings to load before making a new booking.","warning");return}let t=document.getElementById("user-booking-modal");t&&(t.style.display="flex",document.body.style.overflow="hidden",setTimeout(()=>{let e=document.getElementById("user-booking-date");if(e&&!e.value){let o=new Date().toISOString().split("T")[0];e.value=o}let i=this.authService.getCurrentUser();if(i){let o=document.getElementById("user-booking-name"),s=document.getElementById("user-booking-contact"),m=document.getElementById("user-booking-email");if(o&&(o.value=i.fullname||""),s){let f=i.contactNumber||"";f&&!f.startsWith("0")&&(f="0"+f),s.value=f}m&&(m.value=i.email||"")}},100))}showLoadingOverlay(){let t=document.getElementById("loading-overlay");t&&(t.style.display="flex")}hideLoadingOverlay(){let t=document.getElementById("loading-overlay");t&&(t.style.display="none")}onUserBookingSubmit(t){t.preventDefault(),this.handleUserBookingFormSubmission()}onExternalCoachChange(t){let e=t.target;this.externalCoachChecked=e.checked;let i=document.getElementById("external-coach-fields");i&&(i.style.display=this.externalCoachChecked?"block":"none")}handleUserBookingFormSubmission(){return ue(this,null,function*(){try{this.isSubmittingBooking=!0;let t=localStorage.getItem("pickle_jwt_token");if(!t){this.showAuthRequiredModal=!0,this.isSubmittingBooking=!1;return}try{let Ce=this.authService.decryptToken(t),De=JSON.parse(atob(Ce.split(".")[1]));if(De.exp&&Date.now()>=De.exp*1e3){this.showAuthRequiredModal=!0,this.isSubmittingBooking=!1;return}}catch{this.showAuthRequiredModal=!0,this.isSubmittingBooking=!1;return}let e=document.getElementById("user-booking-date");e&&(this.userBookingDate=e.value);let i=this.userBookingDate||"",o=document.getElementById("user-booking-start-time")?.value||"",s=document.getElementById("user-booking-duration")?.value,m=s?parseInt(s):0,f=document.getElementById("user-booking-court")?.value||"",v=document.getElementById("user-booking-type")?.value||"",y=document.getElementById("user-booking-total-person")?.value,M=y?parseInt(y):0,I=document.getElementById("user-booking-name")?.value||"",B=document.getElementById("user-booking-contact")?.value||"",N=document.getElementById("user-booking-email")?.value||"",H=document.getElementById("user-booking-notes")?.value||"",W=document.getElementById("user-booking-coach")?.value||"",G=this.coaches.find(Ce=>Ce.userId===W),Z=G?.fullname||"",j=document.getElementById("external-coach-checkbox")?.checked,Y=document.getElementById("external-coach-name")?.value||"",U=document.getElementById("external-coach-contact")?.value||"",K=document.getElementById("external-coach-email")?.value||"";if(!i||!o||!m||!f||!v||!M||!I||!B||!N){this.showToast("Please fill in all required fields.","error"),this.isSubmittingBooking=!1;return}if(this.isInternalCoachCourt(f)&&!this.canBookInternalCoachSlot(f,i,o)){this.showToast(`${f}
41 is prioritized for internal coaches until ${this.getPriorityReleaseHours(f)} hours before the reservation date.`,"error"),this.isSubmittingBooking=!1;return}if(j&&(!Y||!U||!K)){this.showToast("Please provide all external coach information.","error"),this.isSubmittingBooking=!1;return}let J=this.bookingConfigService.validateTotalPersonPlaying({court:f,date:i,startTime:o,totalPerson:M,bookingType:v});if(!J.valid){this.showToast(J.message||"Validation failed","error"),this.isSubmittingBooking=!1;return}let ge=yield this.bookingConfigService.validateCoachingCourtPriority({court:f,date:i,startTime:o,duration:m,bookingType:v});if(!ge.valid){this.showToast(ge.message||"Coaching court priority validation failed","error"),this.isSubmittingBooking=!1;return}let xe=this.bookingConfigService.validateEmail(N);if(!xe.valid){this.showToast(xe.message||"Email validation failed","error"),this.isSubmittingBooking=!1;return}let he=Ye(ze({date:i,startTime:o,duration:m,court:f,type:v,totalPersonPlaying:M,name:I,contact:B,email:N,notes:H,coachName:v==="coaching"?Z:""},v==="coaching"&&G&&{coachId:G.userId}),{externalCoachName:j?Y:"",externalCoachContact:j?U:"",externalCoachEmail:j?K:""});if(v==="coaching"&&Z){this.pendingBookingData=he,this.selectedCoachName=Z,this.showCoachingWarningModal=!0,this.isSubmittingBooking=!1;return}this.showUserConfirmModal(he)}catch(t){console.error("Error validating booking:",t),this.showToast("An error occurred while validating your booking. Please try again.","error")}finally{this.isSubmittingBooking=!1}})}addHoursToTimeString(t,e){let[i,o]=t.split(" "),[s,m]=i.split(":").map(Number);o==="PM"&&s!==12?s+=12:o==="AM"&&s===12&&(s=0),s+=e;let f=s>=12?"PM":"AM";return`${s>12?s-12:s===0?12:s}:${m.toString().padStart(2,"0")} ${f}`}validateBookingConflicts(s){return ue(this,arguments,function*({court:t,date:e,startTime:i,duration:o}){try{let m=this.bookings.filter(y=>y.date===e&&y.status!=="Declined"&&y.status!=="Cancelled"),f=this.parseTimeStr(i),v=new Date(f.getTime()+o*60*60*1e3);for(let y=0;y<o;y++){let M=this.addHoursToTimeString(i,y),I=this.parseTimeStr(M),B=new Date(I.getTime()+60*60*1e3),N=m.filter(H=>{if(H.court!==t)return!1;let W=this.parseTimeStr(H.startTime||H.time||""),G=H.endTime?this.parseTimeStr(H.endTime):new Date(W.getTime()+(H.duration||1)*60*60*1e3);return I<G&&B>W});if(N.length>0){let H=N.map(W=>{let G=W.timeDisplay||(W.duration?`${W.startTime||W.time} - ${W.endTime}`:W.startTime||W.time),Z=`${W.name} (${G})`;return W.type==="coaching"&&W.coachName?Z+=` - Coach: ${W.coachName}`:W.type==="rental"&&(Z+=" - Private Court Rental"),Z+=` - Status: ${W.status}`,Z}).join(` 42`);return{valid:!1,message:`Cannot book ${t} at ${M} on ${e}. Court is already booked by: 43${H}`}}}return{valid:!0}}catch(m){return console.error("Error validating booking conflicts:",m),{valid:!0}}})}showUserConfirmModal(t){window.pendingUserBooking=t,this.pendingBookingData=t;let e=document.getElementById("user-confirm-modal");e&&(e.style.display="flex")}closeUserBookingModal(){if(this.isLoading||this.isSubmittingBooking)return;let t=document.getElementById("user-booking-modal");t&&(t.style.display="none",document.body.style.overflow="auto")}closeUserConfirmModal(){if(this.isLoading||this.isSubmittingBooking)return;let t=document.getElementById("user-confirm-modal");t&&(t.style.display="none")}setSelectedCoachContact(t){if(!t){this.selectedCoachContact="",this.selectedCoachContactMissing=!1;return}let e=(t.contactNumber||"").trim();this.selectedCoachContact=e,this.selectedCoachContactMissing=!e}callCoach(){this.selectedCoachContact&&(window.location.href=`tel:${this.selectedCoachContact.replace(/[^\d+]/g,"")}`)}closeCoachingWarningModal(){this.showCoachingWarningModal=!1,this.pendingBookingData=null,this.selectedCoachName=""}proceedWithCoachingBooking(){this.showCoachingWarningModal=!1,this.pendingBookingData&&this.showUserConfirmModal(this.pendingBookingData)}confirmUserBooking(){return ue(this,null,function*(){try{this.isSubmittingBooking=!0;let t=window.pendingUserBooking;if(!t){this.showToast("No booking data found. Please try again.","error");return}let e=this.parseTimeStr(t.startTime),i=new Date(e.getTime()+t.duration*60*60*1e3),o=this.formatTimeStr(i),s=`${t.startTime} - ${o}`,m=this.authService.getCurrentUser(),f=m&&m.role==="admin",v=!1;if(f)for(let M=0;M<t.duration;
43M++){let I=this.addHoursToTimeString(t.startTime,M),B=this.isScheduleBlocked({court:t.court,date:t.date,startTime:I});if(B&&B.blocked){v=!0;break}}let y=ze(Ye(ze({id:"",date:t.date,startTime:t.startTime,endTime:o,duration:t.duration,timeDisplay:s,court:t.court,type:t.type,name:t.name,contact:t.contact,email:t.email,status:"",notes:t.notes,coachName:t.coachName},t.coachId&&{coachId:t.coachId}),{externalCoachName:t.externalCoachName||"",externalCoachContact:t.externalCoachContact||"",externalCoachEmail:t.externalCoachEmail||"",totalPersonPlaying:t.totalPersonPlaying}),v&&{adminBypass:!0});this.apiService.createBooking(y).subscribe({next:M=>{this.isSubmittingBooking=!1,this.closeUserConfirmModal(),this.closeUserBookingModal(),this.showToast("\u2705 Your booking is confirmed! \u23F1\uFE0F IMPORTANT: Upload your payment receipt within 1 hour to avoid auto-cancellation. Go to My Bookings to upload.","success"),this.loadBookings()},error:M=>{this.isSubmittingBooking=!1,console.error("Error submitting booking:",M);let I="Failed to submit booking. Please try again.";if(M&&M.name==="BookingApiError"&&M.payload?.description&&(I=M.payload.description),M&&M.message&&M.message.includes("logged in")){this.showToast("You must be logged in to book a reservation.","error"),setTimeout(()=>{this.closeUserConfirmModal(),this.closeUserBookingModal(),this.authService.logout()},1500);return}this.closeUserConfirmModal(),this.showToast(I,"error")}})}catch(t){this.isSubmittingBooking=!1,console.error("Error confirming booking:",t),this.showToast("An error occurred while submitting your booking. Please try again.","error")}})}formatTimeStr(t){let e=t.getHours(),i=t.getMinutes(),o=e>=12?"PM":"AM";return e>12?e-=12:e===0&&(e=12),`${e}:${i.toString().padStart(2,"0")} ${o}`}showToast(t,e="success"){let i=document.getElementById("toast"),o=document.getElementById("toast-message");if(i&&o){t.includes(` 44`)?o.innerHTML=t.split(` 45`).map(m=>m.trim().replace(/</g,"<").replace(/>/g,">")).join("<br>"):o.textContent=t,i.className="toast",i.classList.add(e),setTimeout(()=>{i.classList.add("show")},10);let s=e==="error"&&t.length>100?8e3:5e3;setTimeout(()=>{this.hideToast()},s)}}hideToast(){let t=document.getElementById("toast");t&&t.classList.remove("show")}handleAdminTileClick(t){let e=this.authService.getCurrentUser();if(!e||e.role!=="admin"){this.showToast("Only admins can update bookings.","error");return}let i=this.bookings.find(o=>o.id===t);if(!i){this.showToast("Booking not found.","error");return}this.currentAdminBookingId=t,this.showAdminStatusModal(i)}declineReason="";showAdminStatusModal(t){let e="";(t.date||t.timeDisplay||t.time)&&(e+='<div style="margin-bottom:8px;padding-bottom:8px;border-bottom:1px solid var(--color-border);">',t.bookingDateTime&&(e+=`<strong>Booking Date Time:</strong> ${new Date(t.bookingDateTime).toLocaleString("en-US",{dateStyle:"long",timeStyle:"short"})}<br>`),e+=`<strong>Schedule Date:</strong> ${t.date||""}<br>`,e+=`<strong>Schedule Time:</strong> ${t.timeDisplay||t.time||""}<br>`,e+="</div>"),e+=`<strong>Name:</strong> ${t.name}<br>`,e+=`<strong>Court:</strong> ${t.court}<br>`,e+=`<strong>Status:</strong> ${t.status}<br>`,e+=`<strong>Type:</strong> ${t.type}<br>`,t.coachName&&(e+=`<strong>Coach:</strong> ${t.coachName}<br>`);let i=this.getExternalCoachName(t);if(i){e+=`<strong>External Coach:</strong> ${i}<br>`;let y=t.externalCoachContact||this.parseExternalCoachField(t.notes,"Contact"),M=t.externalCoachEmail||this.parseExternalCoachField(t.notes,"Email");y&&(e+=`<strong>External Coach Contact:</strong> ${y}<br>`),M&&(e+=`<strong>External Coach Email:</strong> ${M}<br>`)}t.totalPersonPlaying&&(e+=`<strong>Total Players:</strong> ${t.totalPersonPlaying}<br>`),t.contact&&(e+=`<strong>Contact:</strong> ${t.contact}<br>`),t.email&&(e+=`<strong>Email:</strong> ${t.email}<br>`),t.notes&&(e+=`<strong>Notes:</strong> ${t.notes}<br>`),t.paymentProof&&(e+="<strong>Payment Proof:</strong> Attached<br>"),t.createdAt&&(e+=`<strong>Created At:</strong> ${t.createdAt}<br>`),t.updatedAt&&(e+=`<strong>Updated At:</strong> ${t.updatedAt}<br>`),t.userId&&(e+=`<strong>User ID:</strong> ${t.userId}<br>`),t.id&&(e+=`<strong>Booking ID:</strong> ${t.id}<br>`),t.receiptUrls&&t.receiptUrls.length>0&&(e+='<div class="receipt-section-divider">',e+=`<strong>Payment Receipts (${t.receiptUrls.length}):</strong><br>`,e+='<div class="receipt-cards-grid">',this.getReceiptMetadata(t).forEach((M,I)=>{let B=this.getFormattedUploadDate(M.uploadedAt);e+=` 46 <div class="receipt-card" 47 onclick="document.getElementById('receipt-view-btn-${I}').click()"> 48 <div class="receipt-card-header"> 49 <i class="bi bi-file-earmark-image-fill receipt-card-icon"></i>
50 <span class="receipt-filename" title="${M.fileName}">${M.fileName}</span> 51 </div> 52 <div class="receipt-card-date"> 53 <i class="bi bi-clock"></i> 54 ${B} 55 </div> 56 <button id="receipt-view-btn-${I}" style="display:none;"></button> 57 </div> 58 `}),e+="</div>",e+="</div>");let o=document.getElementById("admin-status-modal-details"),s=document.getElementById("admin-status-select"),m=document.getElementById("decline-reason-group"),f=document.getElementById("decline-reason-textarea");if(o&&(o.innerHTML=e),s){if(s.value=t.status,t.status==="Reserved - Paid"){let y=Array.from(s.options).find(I=>I.value==="Booking Request Submitted");y&&(y.disabled=!0,y.style.color="var(--color-text-muted)");let M=Array.from(s.options).find(I=>I.value==="Reserved - Pending Payment");M&&(M.disabled=!0,M.style.color="var(--color-text-muted)")}s.onchange=()=>{this.toggleDeclineReason(s.value==="Declined")},this.toggleDeclineReason(s.value==="Declined")}this.declineReason="";let v=document.getElementById("admin-status-modal");v&&(v.style.display="flex"),t.receiptUrls&&t.receiptUrls.length>0&&setTimeout(()=>{t.receiptUrls?.forEach((y,M)=>{let I=document.getElementById(`receipt-view-btn-${M}`);I&&(I.onclick=()=>{this.openReceiptUrl(y,t)})})},100)}toggleDeclineReason(t){let e=document.getElementById("decline-reason-group");e&&(e.style.display=t?"block":"none")}onAdminStatusSave(){let e=document.getElementById("admin-status-select")?.value,i=document.getElementById("decline-reason-textarea"),o="";if(i&&(o=i.value.trim()),!this.currentAdminBookingId||!e)return;let s=this.bookings.find(m=>m.id===this.currentAdminBookingId);if(s){if(s.status==="Reserved - Paid"&&(e==="Reserved - Pending Payment"||e==="Booking Request Submitted")){this.showToast(`Cannot change status from "Reserved - Paid" back to "${e}". Paid bookings can only be changed to "Cancelled" or "Declined".`,"error");return}if(e==="Declined"&&!o){this.showToast("Please provide a reason for declining this booking.","error");return}if(e==="Reserved - Paid"&&(!s.receiptUrls||s.receiptUrls.length===0)){this.pendingBookingData={newStatus:e,declineReason:o,bookingId:this.currentAdminBookingId},this.closeAdminStatusModal(),this.showMarkAsPaidRestrictionModal=!0;return}this.proceedOnAdminStatusSave(e,o,s)}}proceedOnAdminStatusSave(t,e,i){if(!t&&this.pendingBookingData){t=this.pendingBookingData.newStatus,e=this.pendingBookingData.declineReason;let M=this.pendingBookingData.bookingId||this.currentAdminBookingId;i=this.bookings.find(I=>I.id===M),this.currentAdminBookingId=M}if(!this.currentAdminBookingId||!t||!i)return;this.isUpdatingStatus=!0;let o=this.authService.getAdminUsername(),y=i,{receiptUrls:s,paymentProofUrl:m}=y,f=da(y,["receiptUrls","paymentProofUrl"]),v=Ye(ze({},f),{status:t,lastUpdatedBy:o,notes:t==="Declined"?e:i.notes});this.apiService.updateBooking(this.currentAdminBookingId,v).subscribe({next:M=>{this.isUpdatingStatus=!1,this.showToast("Booking status updated.","success"),this.closeAdminStatusModal(),this.closeMarkAsPaidRestrictionModal(),this.pendingBookingData=null,this.loadBookings()},error:M=>{this.isUpdatingStatus=!1,console.error("Error updating booking status:",M),this.showToast("Failed to update booking status.","error")}})}closeAdminStatusModal(){let t=document.getElementById("admin-status-modal");t&&(t.style.display="none"),this.currentAdminBookingId=null,this.isUpdatingStatus=!1}onAdminModalOverlayClick(t){t.target===t.currentTarget&&this.closeAdminStatusModal()}closeMarkAsPaidRestrictionModal(){this.showMarkAsPaidRestrictionModal=!1,this.pendingBookingData=null,this.isUpdatingStatus=!1}showSyncIndicator(){let t=document.getElementById("sync-indicator");t&&(t.innerHTML=` 59 <span class="sync-icon"><i class="bi bi-arrow-repeat bi-spin"></i></span> 60 Syncing bookings... 61 `,t.style.display="flex")}showSyncSuccess(){let t=document.getElementById("sync-indicator");t&&(t.innerHTML=` 62 <span class="sync-icon sync-icon-success"><i class="bi bi-check-circle-fill"></i></span> 63 Sync successful! 64 `,t.style.display="flex",setTimeout(()=>{this.hideSyncIndicator()},1200))}hideSyncIndicator(){let t=document.getElementById("sync-indicator");t&&(t.style.display="none")}closeCoachConfirmModal(){let t=document.getElementById("coach-confirm-modal");t&&(t.style.display="none",document.body.style.overflow="auto")}closeAuthRequiredModal(){this.showAuthRequiredModal=!1}proceedToLogin(){this.showAuthRequiredModal=!1,this.closeUserConfirmModal(),this.closeUserBookingModal(),this.authService.logout(),window.location.replace("/login")}openReceiptUrl(t,e){this.selectedBooking=e,this.allReceiptUrls=e.receiptUrls||[],this.currentReceiptIndex=this.allReceiptUrls.indexOf(t),this.currentReceiptIndex===-1&&(this.currentReceiptIndex=0),this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1;let o=this.parseReceiptMetadata(t)?.url||t;this.currentReceiptUrl=this.convertGoogleDriveUrl(o),this.showReceiptViewerModal=!0}closeReceiptViewer(){this.showReceiptViewerModal=!1,this.currentReceiptUrl="",this.currentReceiptIndex=0,this.allReceiptUrls=[],this.isLoadingReceipt=!1,this.receiptLoadError=!1,this.imageZoom=1}nextReceipt(){this.currentReceiptIndex<this.allReceiptUrls.length-1&&(this.currentReceiptIndex++,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}previousReceipt(){this.currentReceiptIndex>0&&(this.currentReceiptIndex--,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}canNavigatePrevious(){return this.currentReceiptIndex>0}canNavigateNext(){return this.currentReceiptIndex<this.allReceiptUrls.length-1}onReceiptImageLoad(){this.isLoadingReceipt=!1,this.receiptLoadError=!1}onReceiptImageError(){this.isLoadingReceipt=!1,this.receiptLoadError=!0,
64console.error("Failed to load receipt image from URL:",this.currentReceiptUrl),console.log("Original URL:",this.allReceiptUrls[this.currentReceiptIndex])}zoomIn(){this.imageZoom<3&&(this.imageZoom+=.25)}zoomOut(){this.imageZoom>.5&&(this.imageZoom-=.25)}resetZoom(){this.imageZoom=1}convertGoogleDriveUrl(t){console.log("Converting URL:",t);let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);if(e){let i=this.apiService.getReceiptImageUrl(e);return console.log("Using backend URL:",i),i}return console.log("Could not extract file ID, using original URL"),t}downloadReceipt(){if(this.currentReceiptIndex>=0&&this.currentReceiptIndex<this.allReceiptUrls.length){let t=document.createElement("a");t.href=this.currentReceiptUrl,t.download=`receipt_${this.currentReceiptIndex+1}.jpg`,t.target="_blank",t.setAttribute("download",`receipt_${this.currentReceiptIndex+1}.jpg`),document.body.appendChild(t),t.click(),document.body.removeChild(t)}}openBookingDetailsModal(){this.showBookingDetailsModal=!0}closeBookingDetailsModal(){this.showBookingDetailsModal=!1}parseReceiptMetadata(t){try{if(typeof t=="object"&&t!==null&&t.url)return t;if(typeof t=="string")try{return JSON.parse(t)}catch{let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);return{url:t,fileId:e||"unknown",fileName:"receipt.jpg",uploadedAt:""}}return null}catch(e){return console.error("Error parsing receipt metadata:",e),null}}getReceiptMetadata(t){return!t.receiptUrls||t.receiptUrls.length===0?[]:t.receiptUrls.map(e=>this.parseReceiptMetadata(e)).filter(e=>e!==null)}getFormattedUploadDate(t){if(!t)return"N/A";try{return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}catch{return"N/A"}}
64getReceiptCount(t){return t.receiptUrls?.length||0}calculateAmount(t){let e=t.duration?parseInt(t.duration.toString()):1;return this.bookingConfigService.BOOKING_RATE*e}getTimeDisplay(t){return t.timeDisplay||(t.duration&&t.duration>1?`${t.startTime||t.time} - ${t.endTime}`:t.time||t.startTime||"")}getExternalCoachName(t){return t.externalCoachName?t.externalCoachName:this.parseExternalCoachField(t.notes,"Name")}parseExternalCoachField(t,e){if(!t)return"";let i=t.match(new RegExp(`\\[External Coach\\][\\s\\S]*?${e}:\\s*([^\\n]+)`));return i?i[1].trim():""}static \u0275fac=function(e){return new(e||n)(ae(it),ae(Yo),ae(je),ae(tc))};static \u0275cmp=We({type:n,selectors:[["app-booking"]],decls:427,vars:76,consts:[["id","exemption-confirm-modal",1,"modal-overlay",3,"click"],[1,"modal-content",2,"max-width","500px",3,"click"],[1,"bi","bi-unlock"],[1,"exemption-info-box"],[1,"info-label"],[1,"info-details"],[1,"bi","bi-geo-alt"],[1,"bi","bi-calendar"],[1,"bi","bi-clock"],[1,"confirm-style","modal-info-text"],[1,"modal-actions"],[1,"button",3,"click","disabled"],[1,"bi","bi-check-lg"],[1,"button-spinner"],["type","button",3,"click","disabled"],["id","admin-status-modal",1,"modal-overlay",2,"display","none",3,"click"],[1,"modal-content"],["id","admin-status-modal-details"],["for","admin-status-select",1,"form-group",2,"display","block","margin","8px 0 4px 0","font-weight","bold"],["id","admin-status-select"],["value","Booking Request Submitted"],["value","Reserved - Pending Payment"],["value","Reserved - Paid"],["value","Declined"],["value","Cancelled"],["id","decline-reason-group",2,"display","none","margin-top","12px"],["for","decline-reason-textarea",2,"font-weight","bold"],[1,"required-asterisk"],["id","decline-reason-textarea","rows","3","placeholder","Enter reason for declining...",2,"width","100%","border-radius","6px","padding","8px"],["id","admin-status-save-btn",1,"button",3,"click","disabled"],[1,"button-text"],["id","admin-status-cancel-btn","type","button",3,"click","disabled"],["id","user-booking-modal",1,"modal-overlay",2,"display","none",3,"click"],[1,"modal-content",3,"click"],[1,"payment-deadline-banner"],[1,"banner-content"],[1,"banner-icon"],[1,"bi","bi-stopwatch"],[1,"banner-title"],[1,"banner-text"],["id","user-booking-form","autocomplete","off",3,"ngSubmit"],[1,"form-group"],["for","user-booking-date"],["type","date","id","user-booking-date","required","","name","userBookingDate",3,"ngModelChange","ngModel"],["for","user-booking-start-time"],["id","user-booking-start-time","required","",3,"change"],["value",""],["value","8:00 AM"],["value","9:00 AM"],["value","10:00 AM"],["value","11:00 AM"],["value","12:00 PM"],["value","1:00 PM"],["value","2:00 PM"],["value","3:00 PM"],["value","4:00 PM"],["value","5:00 PM"],["value","6:00 PM"],["value","7:00 PM"],["value","8:00 PM"],["value","9:00 PM"],["value","10:00 PM"],["for","user-booking-duration"],["id","user-booking-duration","required","",3,"change"],["value","1"],["value","2"],["value","3"],["value","4"],["value","5"],["id","time-range-display",1,"time-range-display"],["type","text","id","user-booking-amount","value","\u20B10.00","disabled","",1,"amount-display"],["for","user-booking-type"],["id","user-booking-type","required","",3,"change"],["value","rental"],["value","coaching"],["for","user-booking-court"],["id","user-booking-court","required",""],[3,"value",4,"ngFor","ngForOf"],[1,"form-group","external-coach-group"],["type","checkbox","id","external-coach-checkbox",3,"change"],["for","external-coach-checkbox"],["id","external-coach-fields",1,"form-group",2,"display","none"],["for","external-coach-name"],["type","text","id","external-coach-name","placeholder","Enter coach name"],["for","external-coach-contact",2,"margin-top","8px"],["type","text","id","external-coach-contact","placeholder","Enter coach contact number"],["for","external-coach-email",2,"margin-top","8px"],["type","email","id","external-coach-email","placeholder","Enter coach email"],["id","user-coach-group",1,"form-group",2,"display","none"],["for","user-booking-coach"],["id","user-booking-coach"],["id","coach-rate-hint",1,"coach-rate-hint",2,"display","none"],["id","coach-contact-group",4,"ngIf"],["id","coach-warning-label",1,"coach-warning-label",2,"display","none"],["for","user-booking-total-person"],["type","number","id","user-booking-total-person","min","1","max","20","required","","placeholder","Enter number of players"],["for","user-booking-name"],["type","text","id","user-booking-name","required",""],["for","user-booking-contact"],["type","text","id","user-booking-contact","required",""],["for","user-booking-email"],["type","email","id","user-booking-email","required",""],["for","user-booking-notes"],["id","user-booking-notes","rows","2","placeholder","Any notes..."],[1,"form-group",2,"display","none"],["for","user-booking-payment-proof"],["type","file","id","user-booking-payment-proof","accept","image/*,.pdf"],["type","submit",1,"button",3,"disabled"],["id","coach-confirm-modal",1,"modal-overlay",2,"display","none",3,"click"],[1,"modal-content","confirm-style"],[1,"bi","bi-exclamation-triangle"],[1,"coach-name-highlight"],[1,"modal-info-text",2,"margin-top","10px","font-size","0.9em"],["type","button",1,"action-btn","edit","button",3,"click"],["id","auth-required-modal",1,"modal-overlay"],[1,"bi","bi-lock"],[2,"font-size","16px","margin","20p
64x 0"],[1,"modal-info-text",2,"margin","15px 0"],[1,"modal-actions",2,"margin-top","25px"],[1,"action-btn","edit",3,"click"],[1,"action-btn","delete",3,"click"],["id","coaching-warning-modal",1,"modal-overlay"],["id","user-confirm-modal",1,"modal-overlay",2,"display","none",3,"click"],[1,"bi","bi-save"],["class","confirm-booking-data",4,"ngIf"],["id","user-confirm-btn",1,"action-btn","edit","button",3,"click","disabled"],["type","button",1,"action-btn","delete",3,"click","disabled"],["id","loading-overlay"],[1,"spinner"],[1,"loading-text"],["id","booking-overlay"],["id","toast-container",1,"toast-container"],["id","toast",1,"toast"],["id","toast-message"],["id","toast-close",1,"toast-close",3,"click"],[1,"calendar-container",3,"ngClass"],[1,"date-picker-section"],["for","schedule-date"],[1,"bi","bi-calendar3"],["type","date","id","schedule-date","name","schedule-date",3,"ngModelChange","change","ngModel"],[2,"text-align","right","margin-bottom","16px"],[1,"add-booking-btn",3,"click","disabled"],["id","selected-date-label"],["id","schedule-grid"],["id","sync-indicator",1,"sync-indicator",2,"display","none"],[1,"sync-dot"],["id","receipt-viewer-modal",1,"modal-overlay","receipt-viewer-overlay",3,"click"],[1,"receipt-viewer-modal",3,"click"],[1,"receipt-viewer-header"],[1,"receipt-viewer-info"],[1,"bi","bi-file-earmark-image"],["class","receipt-viewer-zoom-level",4,"ngIf"],[1,"receipt-viewer-controls"],["class","zoom-controls",4,"ngIf"],["title","Close",1,"receipt-viewer-close",3,"click"],[1,"bi","bi-x-lg"],[1,"receipt-viewer-body"],["title","Previous Receipt",1,"receipt-nav-btn","receipt-nav-prev",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"receipt-image-container"],["class","receipt-loading",4,"ngIf"],["class","receipt-error",4,"ngIf"],["class","receipt-image-wrapper",3,"display",4,"ngIf"],["title","Next Receipt",1,"receipt-nav-btn","receipt-nav-next",3,"click","disabled"],[1,"bi","bi-chevron-right"],[1,"receipt-viewer-footer"],["title","View Booking Details",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-info-circle"],["class","receipt-viewer-action-btn secondary","title","Download Receipt",3,"click",4,"ngIf"],[1,"receipt-viewer-action-btn","primary",3,"click"],[1,"bi","bi-x-circle"],["id","booking-details-modal",1,"modal-overlay",3,"click"],["class","modal-content booking-details-modal",3,"click",4,"ngIf"],["id","mark-as-paid-restriction-modal",1,"modal-overlay"],[1,"modal-content","confirm-style",2,"max-width","550px"],[1,"mark-paid-warning-icon"],[1,"bi","bi-exclamation-triangle-fill"],[2,"text-align","center","margin-bottom","16px"],[1,"mark-paid-warning"],[2,"margin","0 0 12px 0","font-size","15px","line-height","1.6"],[1,"recommendation-box"],[1,"mark-paid-instructions"],[1,"bi","bi-cloud-upload","upload-icon"],[1,"mark-paid-proceed-text"],[1,"modal-actions",2,"display","flex","justify-content","center","gap","12px","margin-top","20px"],[1,"action-btn","delete",2,"padding","10px 24px",3,"click","disabled"],[1,"action-btn","edit","button",2,"padding","10px 24px",3,"click","disabled"],[1,"bi","bi-check-circle"],[3,"value"],["id","coach-contact-group"],["for","user-booking-coach-contact",1,"coach-contact-label"],[1,"coach-contact-row"],["type","text","id","user-booking-coach-contact","readonly","",3,"value"],["type","button","class","coach-call-btn","title","Call coach",3,"click",4,"ngIf"],["type","button","title","Call coach",1,"coach-call-btn",3,"click"],[1,"bi","bi-telephone-fill"],[1,"confirm-booking-data"],["class","coach-highlight",4,"ngIf"],[1,"coach-highlight"],[1,"receipt-viewer-zoom-level"],[1,"zoom-controls"],["title","Zoom Out",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-dash-circle"],["title","Reset Zoom",1,"zoom-btn",3,"click"],[1,"bi","bi-arrow-clockwise"],["title","Zoom In",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-plus-circle"],[1,"receipt-loading"],[1,"spinner-large"],[1,"receipt-error"],[1,"error-url"],[1,"receipt-image-wrapper"],[1,"receipt-image",3,"load","error","dblclick","src","alt"],["t
64itle","Download Receipt",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-download"],[1,"modal-content","booking-details-modal",3,"click"],[1,"booking-details-modal-header"],[1,"booking-details-title"],[1,"bi","bi-info-circle-fill"],["title","Close",1,"modal-close-btn",3,"click"],[1,"booking-details-modal-body"],[1,"booking-detail-item"],[1,"booking-detail-label"],[1,"booking-detail-value","highlight"],[1,"booking-detail-value"],["class","booking-detail-item",4,"ngIf"],[1,"booking-detail-value","status",3,"ngClass"],[1,"booking-details-modal-footer"],[1,"modal-btn","primary",3,"click"]],template:function(e,i){e&1&&(r(0,"div",0),S("click",function(s){return s.target===s.currentTarget&&i.closeExemptionConfirmModal()}),r(1,"div",1),S("click",function(s){return s.stopPropagation()}),r(2,"h3"),w(3,"i",2),l(4," Add Block Exemption "),a(),r(5,"div",3)(6,"p",4)(7,"strong"),l(8,"Create exemption for:"),a()(),r(9,"div",5)(10,"p"),w(11,"i",6),r(12,"strong"),l(13),a()(),r(14,"p"),w(15,"i",7),r(16,"strong"),l(17),a()(),r(18,"p"),w(19,"i",8),r(20,"strong"),l(21),a()()()(),r(22,"p",9),l(23," This will allow bookings on this blocked time slot. The exemption will create a 1-hour window starting from the selected time. "),a(),r(24,"div",10)(25,"button",11),S("click",function(){return i.confirmAddExemption()}),r(26,"span"),w(27,"i",12),l(28," Create Exemption "),a(),w(29,"span",13),a(),r(30,"button",14),S("click",function(){return i.closeExemptionConfirmModal()}),l(31," Cancel "),a()()()(),r(32,"div",15),S("click",function(s){return i.onAdminModalOverlayClick(s)}),r(33,"div",16)(34,"h3"),l(35,"Update Booking Status"),a(),w(36,"div",17),r(37,"label",18),l(38,"Change Status to:"),a(),r(39,"select",19)(40,"option",20),l(41,"Booking Request Submitted"),a(),r(42,"option",21),l(43,"Reserved - Pending Payment"),a(),r(44,"option",22),l(45,"Reserved - Paid"),a(),r(46,"option",23),l(47,"Declined"),a(),r(48,"option",24),l(49,"Cancelled"),a()(),r(50,"div",25)(51,"label",26),l(52,"Decline Reason "),r(53,"span",27),l(54,"*"),a()(),w(55,"textarea",28),a(),r(56,"div",10)(57,"button",29),S("click",function(){return i.onAdminStatusSave()}),r(58,"span",30),l(59,"Save"),a(),w(60,"span",13),a(),r(61,"button",31),S("click",function(){return i.closeAdminStatusModal()}),l(62,"Cancel"),a()()()(),r(63,"div",32),S("click",function(s){return s.target===s.currentTarget&&i.closeUserBookingModal()}),r(64,"div",33),S("click",function(s){return s.stopPropagation()}),r(65,"h3"),l(66,"Book a Court"),a(),r(67,"div",34)(68,"div",35)(69,"div",36),w(70,"i",37),a(),r(71,"div")(72,"div",38),l(73,"Payment Deadline: 1 Hour"),a(),r(74,"div",39),l(75," Your booking will be "),r(76,"strong"),l(77,"automatically confirmed"),a(),l(78," upon submission, but you "),r(79,"strong"),l(80,"must upload your payment receipt within 1 hour"),a(),l(81," or it will be "),r(82,"strong"),l(83,"auto-cancelled"),a(),l(84,". "),a()()()(),r(85,"form",40),S("ngSubmit",function(s){return i.onUserBookingSubmit(s)}),r(86,"div",41)(87,"label",42),l(88,"Date (within next 30 days) "),r(89,"span",27),l(90,"*"),a()(),r(91,"input",43),pe("ngModelChange",function(s){return de(i.userBookingDate,s)||(i.userBookingDate=s),s}),a()(),r(92,"div",41)(93,"label",44),l(94,"Start Time "),r(95,"span",27),l(96,"*"),a()(),r(97,"select",45),S("change",function(){return i.onTimeRangeChange()}),r(98,"option",46),l(99,"Select start time"),a(),r(100,"option",47),l(101,"8:00 AM"),a(),r(102,"option",48),l(103,"9:00 AM"),a(),r(104,"option",49),l(105,"10:00 AM"),a(),r(106,"option",50),l(107,"11:00 AM"),a(),r(108,"option",51),l(109,"12:00 PM"),a(),r(110,"option",52),l(111,"1:00 PM"),a(),r(112,"option",53),l(113,"2:00 PM"),a(),r(114,"option",54),l(115,"3:00 PM"),a(),r(116,"option",55),l(117,"4:00 PM"),a(),r(118,"option",56),l(119,"5:00 PM"),a(),r(120,"option",57),l(121,"6:00 PM"),a(),r(122,"option",58),l(123,"7:00 PM"),a(),r(124,"option",59),l(125,"8:00 PM"),a(),r(126,"option",60),l(127,"9:00 PM"),a(),r(128,"option",61),l(129,"10:00 PM"),a()()(),r(130,"div",41)(131,"label",62),l(132,"Duration (Hours) "),r(133,"span",27),l(134,"*"),a()(),r(135,"select",63),S("change",function(){return i.onTimeRangeChange()}),r(136,"option",64),l(137,"1 Hour"),a(),r(138,"option",65),l(139,"2 Hours"),a(),r(140,"option",66),l(141,"3 Hours"),a(),r(142,"option",67),l(143,"4 Hours"),a(),r(144,"option",68),l(145,"5 Hours"),a()()(),r(146,"div",41)(147,"label"),l(148,"Booking Time Range"),a(),r(149,"div",69),l(150," Select a start time and duration "),a()(),r(151,"div",41)(152,"label"),l(153,"Total Amount Payable"),a(),w(154,"input",70),a(),r(155,"div",41)(156,"label",71),l(157,"Booking Type "),r(158,"span",27),l(159,"*"),a()(),r(160,"select",72),S("change",function(s){return i.onBookingTypeChange(s)}),r(161,"option",73),l(162,"Rental"),a(),r(163,"option",74),l(164,"Coaching"),a()()(),r(165,"div",41)(166,"label",75),l(167,"Court "),r(168,"span",27),l(169,"*"),a()(),r(170,"select",76)(171,"option",46),l(172,"Select court"),a(),A(173,Gy,2,3,"option",77),a()(),r(174,"div",78)(175,"input",79),S("change",function(s){return i.onExternalCoachChange(s)}
64),a(),r(176,"label",80),l(177,"I have external coach with me"),a()(),w(178,"br"),r(179,"div",81)(180,"label",82),l(181,"External Coach Name "),r(182,"span",27),l(183,"*"),a()(),w(184,"input",83),r(185,"label",84),l(186,"Coach Contact Number "),r(187,"span",27),l(188,"*"),a()(),w(189,"input",85),r(190,"label",86),l(191,"Coach Email "),r(192,"span",27),l(193,"*"),a()(),w(194,"input",87),a(),r(195,"div",88)(196,"label",89),l(197,"Coach Name"),a(),r(198,"select",90)(199,"option",46),l(200,"Select Coach"),a(),A(201,qy,2,3,"option",77),a(),w(202,"div",91),A(203,Yy,6,2,"div",92),r(204,"div",93),l(205," Reminder: Please make sure you have consulted with the coach before booking a coaching session. "),a()(),r(206,"div",41)(207,"label",94),l(208,"Total Person Playing "),r(209,"span",27),l(210,"*"),a()(),w(211,"input",95),a(),r(212,"div",41)(213,"label",96),l(214,"Full Name "),r(215,"span",27),l(216,"*"),a()(),w(217,"input",97),a(),r(218,"div",41)(219,"label",98),l(220,"Contact Number "),r(221,"span",27),l(222,"*"),a()(),w(223,"input",99),a(),r(224,"div",41)(225,"label",100),l(226,"Email Address "),r(227,"span",27),l(228,"*"),a()(),w(229,"input",101),a(),r(230,"div",41)(231,"label",102),l(232,"Remarks"),a(),w(233,"textarea",103),a(),r(234,"div",104)(235,"label",105),l(236,"Payment Proof (Optional)"),a(),w(237,"input",106),r(238,"small"),l(239,"Please attach a screenshot/photo of your payment proof (GCash, Bank Transfer, etc)"),a()(),r(240,"div",10)(241,"button",107)(242,"span",30),l(243,"Book Now"),a(),w(244,"span",13),a(),r(245,"button",14),S("click",function(){return i.closeUserBookingModal()}),l(246,"Cancel"),a()()()()(),r(247,"div",108),S("click",function(s){return s.target===s.currentTarget&&i.closeCoachConfirmModal()}),r(248,"div",109)(249,"h3"),w(250,"i",110),l(251," Coach Booking Notice"),a(),r(252,"p")(253,"strong"),l(254,"Before booking with "),r(255,"span",111),l(256),a(),l(257,":"),a()(),r(258,"p"),l(259," Please inform your coach first before booking."),w(260,"br"),r(261,"b"),l(262,"Or let your coach book the session for you."),a()(),r(263,"p",112),l(264," Booking without prior coordination may result in scheduling conflicts. "),a(),r(265,"div",10)(266,"button",113),S("click",function(){return i.closeCoachConfirmModal()}),l(267,"OK, I Understand"),a()()()(),r(268,"div",114)(269,"div",109)(270,"h3"),w(271,"i",115),l(272," Login Required"),a(),r(273,"p",116)(274,"strong"),l(275,"You must be logged in to book a court reservation."),a()(),r(276,"p",117),l(277," Please log in to your account to continue with your booking. This ensures that you can track and manage your reservations. "),a(),r(278,"div",118)(279,"button",119),S("click",function(){return i.proceedToLogin()}),l(280,"OK, Go to Login"),a(),r(281,"button",120),S("click",function(){return i.closeAuthRequiredModal()}),l(282,"Cancel"),a()()()(),r(283,"div",121)(284,"div",109)(285,"h3"),w(286,"i",110),l(287," Important Notice"),a(),r(288,"p")(289,"strong"),l(290,"Before booking this coaching session:"),a()(),r(291,"p"),l(292,"Please make sure that you have already reached out to "),r(293,"strong"),l(294),a(),l(295," before booking, or ask the coach to book this session for you."),a(),r(296,"p"),l(297,"Booking without prior coordination with the coach may result in scheduling conflicts."),a(),r(298,"div",10)(299,"button",119),S("click",function(){return i.proceedWithCoachingBooking()}),l(300,"I Understand, Proceed"),a(),r(301,"button",120),S("click",function(){return i.closeCoachingWarningModal()}),l(302,"Cancel"),a()()()(),r(303,"div",122),S("click",function(s){return s.target===s.currentTarget&&i.closeUserConfirmModal()}),r(304,"div",109)(305,"h3"),w(306,"i",123),l(307," Confirm Booking"),a(),A(308,Zy,26,7,"div",124),r(309,"p"),l(310,'By clicking "Yes, Book", you confirm that all provided information is correct.'),a(),r(311,"div",10)(312,"button",125),S("click",function(){return i.confirmUserBooking()}),r(313,"span",30),l(314,"Yes, Book"),a(),w(315,"span",13),a(),r(316,"button",126),S("click",function(){return i.closeUserConfirmModal()}),l(317,"Cancel"),a()()()(),r(318,"div",127),w(319,"div",128),r(320,"div",129),l(321,"Loading bookings..."),a()(),r(322,"div",130),w(323,"div",128),r(324,"div",129),l(325,"Submitting your booking..."),a()(),r(326,"div",131)(327,"div",132),w(328,"span",133),r(329,"button",134),S("click",function(){return i.hideToast()}),l(330,"\xD7"),a()()(),r(331,"div",135)(332,"div",136)(333,"label",137),w(334,"i",138),l(335," Select Date:"),a(),r(336,"input",139),pe("ngModelChange",function(s){return de(i.selectedDate,s)||(i.selectedDate=s),s}),S("change",function(s){return i.onDateChange(s)}),a()(),r(337,"div",140)(338,"button",141),S("click",function(){return i.openBookingModal()}),r(339,"span"),l(340,"Book a Court"),a()()(),w(341,"h2",142)(342,"div",143),a(),r(343,"div",144),w(344,"span",145),l(345,` Syncing bookings... 65`),a(),r(346,"div",146),S("click",function(){return i.closeReceiptViewer()}),r(347,"div",147),S("click",function(s){return s.stopPropagation()}),r(348,"div",148)(349,"div",149)(350,"h3"),w(351,"i",150),l(352),a(),A(353,Qy,2,1,"p",151),a(),r(354,"div",152),A(355,Ky,7,2,"div",153),r(356,"button",154),S("click",function(){return i.closeReceiptViewer()}),w(357,"i",155),a()()(),r(358,"div",156)(359,"button",157),S("click",function(){return i.previousReceipt()}),w(360,"i",158),a(),r(361,"div",159),A(362,Jy,4,0,"div",160)(363,eC,15,1,"div",161)(364,tC,2,7,"div",162),a(),r(365,"button",163),S("click",function(){return i.nextReceipt()}),w(366,"i",164),a()(),r(367,"div",165)(368,"button",166),S("click",function(){return i.openBookingDetailsModal()}),w(369,"i",167),l(370," Booking Details "),a(),A(371,nC,3,0,"button",168),r(372,"button",169),S("click",function(){return i.closeReceiptViewer()}
65),w(373,"i",170),l(374," Close "),a()()()(),r(375,"div",171),S("click",function(){return i.closeBookingDetailsModal()}),A(376,lC,78,22,"div",172),a(),r(377,"div",173)(378,"div",174)(379,"div",175),w(380,"i",176),a(),r(381,"h3",177),w(382,"i",110),l(383," No Receipt Attached"),a(),r(384,"div",178)(385,"p",179)(386,"strong"),l(387,"Warning:"),a(),l(388,' You are about to mark this booking as "Reserved - Paid" but there are no payment receipts attached. '),a(),r(389,"div",180)(390,"p")(391,"strong"),l(392,"Recommended:"),a(),l(393," It's best practice to have the payment receipt(s) uploaded before marking a booking as paid for proper record-keeping. "),a()()(),r(394,"div",181)(395,"p")(396,"strong"),l(397,"How to upload receipts:"),a()(),r(398,"ol")(399,"li"),l(400,"Go to the "),r(401,"strong"),l(402,"Manage Bookings"),a(),l(403," page"),a(),r(404,"li"),l(405,"Find this booking and click the "),r(406,"strong"),l(407,"receipt icon"),a(),w(408,"i",182),l(409,' in the "Receipts" column'),a(),r(410,"li"),l(411,"Upload the payment receipt image(s)"),a(),r(412,"li"),l(413,"Then you can mark the booking as paid"),a()()(),r(414,"p",183),l(415," Do you want to proceed anyway? "),a(),r(416,"div",184)(417,"button",185),S("click",function(){return i.closeMarkAsPaidRestrictionModal()}),w(418,"i",170),r(419,"span"),l(420,"Cancel"),a()(),r(421,"button",186),S("click",function(){return i.proceedOnAdminStatusSave()}),r(422,"span",30),w(423,"i",187),r(424,"span"),l(425,"I'm Aware - Proceed"),a()(),w(426,"span",13),a()()()()),e&2&&(le("display",i.showExemptionConfirmModal?"flex":"none"),d(13),R(i.pendingExemptionCourt),d(4),R(i.pendingExemptionDate),d(4),R(i.pendingExemptionTime),d(4),x("disabled",i.isCreatingExemption),d(),le("display",i.isCreatingExemption?"none":"inline"),d(3),le("display",i.isCreatingExemption?"inline-block":"none"),d(),x("disabled",i.isCreatingExemption),d(27),x("disabled",i.isUpdatingStatus),d(),le("display",i.isUpdatingStatus?"none":"inline"),d(2),le("display",i.isUpdatingStatus?"inline-block":"none"),d(),x("disabled",i.isUpdatingStatus),d(30),ce("ngModel",i.userBookingDate),d(82),x("ngForOf",i.courts),d(28),x("ngForOf",i.coaches),d(2),x("ngIf",i.selectedCoachContact||i.selectedCoachContactMissing),d(38),x("disabled",i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(2),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),x("disabled",i.isSubmittingBooking||i.isLoading),d(11),R(i.selectedCoachName),d(12),le("display",i.showAuthRequiredModal?"flex":"none"),d(15),le("display",i.showCoachingWarningModal?"flex":"none"),d(11),R(i.selectedCoachName),d(14),x("ngIf",i.pendingBookingData),d(4),x("disabled",i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(2),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),x("disabled",i.isSubmittingBooking||i.isLoading),d(2),le("display",i.isLoading?"flex":"none"),d(4),le("display",i.isSubmittingBooking?"flex":"none"),d(9),x("ngClass",Ms(74,Hy,i.authService.isAuthenticated())),d(5),ce("ngModel",i.selectedDate),d(2),x("disabled",i.isLoading),d(8),le("display",i.showReceiptViewerModal?"flex":"none"),d(6),Se(" Receipt ",i.currentReceiptIndex+1," of ",i.allReceiptUrls.length,""),d(),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(2),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(4),te("disabled",!i.canNavigatePrevious()),x("disabled",!i.canNavigatePrevious()),d(3),x("ngIf",i.isLoadingReceipt),d(),x("ngIf",i.receiptLoadError&&!i.isLoadingReceipt),d(),x("ngIf",!i.receiptLoadError),d(),te("disabled",!i.canNavigateNext()),x("disabled",!i.canNavigateNext()),d(6),x("ngIf",!i.receiptLoadError),d(4),le("display",i.showBookingDetailsModal?"flex":"none"),d(),x("ngIf",i.selectedBooking),d(),le("display",i.showMarkAsPaidRestrictionModal?"flex":"none"),d(40),x("disabled",i.isUpdatingStatus),d(4),x("disabled",i.isUpdatingStatus),d(),le("display",i.isUpdatingStatus?"none":"inline"),d(4),le("display",i.isUpdatingStatus?"inline-block":"none"))},dependencies:[Ge,cn,rt,$e,lt,Xn,yn,Cn,at,st,Yn,xi,ut,Zl],styles:['.required-asterisk[_ngcontent-%COMP%]{color:var(--color-danger);font-weight:700;margin-left:2px}.modal-field[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box;border-radius:8px;font-size:14px;padding:10px}#time-range-display[_ngcontent-%COMP%], #user-booking-amount[_ng
65content-%COMP%]{width:305px;min-width:0;max-width:100%;box-sizing:border-box;display:block}.calendar-container[_ngcontent-%COMP%]{max-width:1600px;margin:auto;background:var(--color-accent-bg-subtle);padding:30px;border-radius:15px;backdrop-filter:blur(10px);box-shadow:var(--shadow-lg);box-sizing:border-box;width:100%}.date-picker-section[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;margin-bottom:20px;gap:12px;width:100%;box-sizing:border-box}.date-picker-section[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-accent);padding:8px 12px;border-radius:8px;font-size:16px;z-index:10002!important;position:relative;cursor:pointer;box-sizing:border-box;max-width:100%}h2[_ngcontent-%COMP%]{text-align:center;margin-bottom:25px;font-size:28px;font-weight:700}.modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000b3;display:none;align-items:flex-start;justify-content:center;z-index:9999;overflow-y:auto;padding:20px 10px;box-sizing:border-box;backdrop-filter:blur(4px)}.modal-content[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:12px;padding:32px 24px;box-shadow:var(--shadow-lg);max-width:400px;width:100%;color:var(--color-text);margin:auto;position:relative;inset:0;transform:none;box-sizing:border-box;max-height:calc(100vh - 40px);overflow-y:auto}.admin-booking-tile[_ngcontent-%COMP%]{cursor:pointer}#admin-status-select[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text);border-radius:4px;border:1px solid var(--color-border);padding:8px 12px;font-size:16px;margin:8px 0 16px;width:100%;box-sizing:border-box}#admin-status-select[_ngcontent-%COMP%]:focus{outline:2px solid var(--color-accent)}#loading-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000b3;z-index:10000;display:flex;align-items:center;justify-content:center;flex-direction:column;backdrop-filter:blur(4px)}#booking-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000d9;z-index:10001;display:flex;align-items:center;justify-content:center;flex-direction:column;backdrop-filter:blur(4px)}.spinner[_ngcontent-%COMP%]{border:8px solid var(--color-border);border-top:8px solid var(--color-accent);border-radius:50%;width:64px;height:64px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin-bottom:16px}.loading-text[_ngcontent-%COMP%]{color:var(--color-text);font-size:16px;font-weight:700;text-align:center;margin-top:16px}.button-spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border-light);border-top:3px solid var(--color-accent);border-radius:50%;width:16px;height:16px;animation:_ngcontent-%COMP%_spin 1s linear infinite;display:none;margin:0 auto}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.button[_ngcontent-%COMP%]:disabled, .action-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.form-group[_ngcontent-%COMP%]{margin-bottom:18px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;margin-bottom:6px;font-weight:700;color:var(--color-accent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:100%;padding:10px;background-color:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);border-radius:8px;font-size:14px;outline:none;box-sizing:border-box;transition:border-color .3s}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 5px var(--color-accent-shadow)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-secondary)}.form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;padding:10px;background-color:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border);border-radius:8px;font-size:14px;resize:vertical;font-family:Segoe UI,sans-serif;outline:none;transition:border-color .3s;box-sizing:border-box}.form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 5px var(--color-accent-shadow)}.modal-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;
65gap:10px;margin-top:20px}.add-booking-btn[_ngcontent-%COMP%]{background:var(--color-accent);color:var(--color-text);border:none;padding:10px 20px;border-radius:10px;font-size:15px;font-weight:700;cursor:pointer;box-shadow:0 0 15px var(--color-accent-shadow);transition:transform .2s,box-shadow .2s;box-sizing:border-box;max-width:100%}.add-booking-btn[_ngcontent-%COMP%]:hover{transform:scale(1.05);box-shadow:0 0 20px var(--color-accent-shadow-bright)}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:10px 18px;font-size:14px;border:none;border-radius:8px;cursor:pointer;transition:background .2s}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:first-child{background-color:var(--color-accent);color:#fff}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:first-child:hover{background-color:var(--color-accent-dark)}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child{background-color:var(--color-danger);color:#fff}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:last-child:hover{background-color:color-mix(in srgb,var(--color-danger) 80%,black)}.toast[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);padding:16px 20px;border-radius:8px;box-shadow:var(--shadow-lg);border-left:4px solid var(--color-accent);display:flex;align-items:center;justify-content:space-between;min-width:300px;max-width:450px;transform:translate(500px);opacity:0;transition:all .3s;pointer-events:auto;position:fixed;top:40px;right:32px;z-index:999989}.toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-secondary);font-size:20px;cursor:pointer;margin-left:15px;padding:0;line-height:1;display:none}.toast[_ngcontent-%COMP%]:hover .toast-close[_ngcontent-%COMP%], .toast[_ngcontent-%COMP%]:focus-within .toast-close[_ngcontent-%COMP%]{display:inline}#toast-message[_ngcontent-%COMP%]{flex:1;font-weight:700}
65.modal-overlay[_ngcontent-%COMP%], .modal-content[_ngcontent-%COMP%]{scrollbar-width:thin;scrollbar-color:var(--color-accent) var(--color-surface-hover)}.modal-overlay[_ngcontent-%COMP%]::-webkit-scrollbar, .modal-content[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.modal-overlay[_ngcontent-%COMP%]::-webkit-scrollbar-track, .modal-content[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-surface-hover);border-radius:4px}.modal-overlay[_ngcontent-%COMP%]::-webkit-scrollbar-thumb, .modal-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent);border-radius:4px}.modal-overlay[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover, .modal-content[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-dark)}.receipt-indicator[_ngcontent-%COMP%]{position:absolute;top:4px;right:4px;display:inline-flex;align-items:center;gap:3px;background:var(--color-accent);color:#fff;padding:3px 7px;border-radius:10px;font-size:10px;font-weight:700;border:1px solid var(--color-border-light);box-shadow:var(--shadow-sm);white-space:nowrap;z-index:10;backdrop-filter:blur(4px)}.receipt-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:11px}.reserved-paid[_ngcontent-%COMP%] .receipt-indicator[_ngcontent-%COMP%]{background:var(--color-success);color:#fff;border-color:var(--color-border-light)}.reserved-pending-payment[_ngcontent-%COMP%] .receipt-indicator[_ngcontent-%COMP%], .booking-request-submitted[_ngcontent-%COMP%] .receipt-indicator[_ngcontent-%COMP%]{background:var(--color-warning);color:#fff;border-color:var(--color-border-light)}.receipt-filename[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;display:block}.payment-deadline-banner[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-danger),color-mix(in srgb,var(--color-danger) 80%,black));color:#fff;padding:14px 16px;border-radius:8px;margin:16px 0;border-left:4px solid color-mix(in srgb,var(--color-danger) 70%,black);box-shadow:0 2px 8px var(--color-danger-shadow)}.payment-deadline-banner[_ngcontent-%COMP%] .banner-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.payment-deadline-banner[_ngcontent-%COMP%] .banner-icon[_ngcontent-%COMP%]{font-size:24px;flex-shrink:0}.payment-deadline-banner[_ngcontent-%COMP%] .banner-title[_ngcontent-%COMP%]{font-weight:700;font-size:16px;margin-bottom:4px}.payment-deadline-banner[_ngcontent-%COMP%] .banner-text[_ngcontent-%COMP%]{font-size:13px;line-height:1.5;opacity:.95}.exemption-info-box[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);border-left:4px solid var(--color-warning);padding:16px;border-radius:6px;margin-bottom:20px}.exemption-info-box[_ngcontent-%COMP%] .info-label[_ngcontent-%COMP%]{margin:0 0 12px;font-size:15px;color:var(--color-text)}.exemption-info-box[_ngcontent-%COMP%] .info-details[_ngcontent-%COMP%]{margin-left:12px;color:var(--color-text-secondary)}.exemption-info-box[_ngcontent-%COMP%] .info-details[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:6px 0}.exemption-info-box[_ngcontent-%COMP%] .info-details[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{width:20px;color:var(--color-warning)}.exemption-info-box[_ngcontent-%COMP%] .info-details[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text)}.confirm-booking-data[_ngcontent-%COMP%]{margin:20px 0;padding:15px;background:var(--color-surface-hover);border-radius:8px;text-align:left;border:1px solid var(--color-border)}.confirm-booking-data[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:5px 0;color:var(--color-text)}.confirm-booking-data[_ngcontent-%COMP%] .coach-highlight[_ngcontent-%COMP%]{color:var(--color-success)}.time-range-display[_ngcontent-%COMP%]{padding:8px;background:var(--color-surface-hover);border-radius:4px;color:var(--color-text);border:1px solid var(--color-border)}.amount-display[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text);border-radius:4px;padding:8px;border:1px solid var(--color-border)}#coach-contact-group[_ngcontent-%COMP%]{margin-top:12px}.coach-contact-label[_ngcontent-%COMP%]{display:block;margin-bottom:6px}.coach-contact-row[_ngcontent-%COMP%]{display:flex;align-items:stretch;gap:8px}
65.coach-contact-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;cursor:default}.coach-contact-row[_ngcontent-%COMP%] .coach-call-btn[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:10px 18px;border:1px solid var(--color-accent);border-radius:8px;background:var(--color-accent);color:#fff;font-family:inherit;font-size:14px;font-weight:600;line-height:1.2;text-decoration:none;white-space:nowrap;box-sizing:border-box;transition:filter .2s ease}.coach-contact-row[_ngcontent-%COMP%] .coach-call-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:14px}.coach-contact-row[_ngcontent-%COMP%] .coach-call-btn[_ngcontent-%COMP%]:hover{filter:brightness(1.1)}.coach-contact-row[_ngcontent-%COMP%] .coach-call-btn[_ngcontent-%COMP%]:active{filter:brightness(.95)}.coach-warning-label[_ngcontent-%COMP%]{color:#fff;background:var(--color-warning);border-radius:6px;padding:8px;margin-top:8px;font-size:13px}.external-coach-group[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-bottom:0}.external-coach-group[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;vertical-align:middle;margin-right:8px;accent-color:var(--color-accent)}.external-coach-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{margin:0;font-weight:500;cursor:pointer;-webkit-user-select:none;user-select:none;color:var(--color-text)}.mark-paid-warning[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);border:1px solid var(--color-warning);padding:16px;border-radius:8px;margin-bottom:20px}.mark-paid-warning[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text)}.mark-paid-warning[_ngcontent-%COMP%] .recommendation-box[_ngcontent-%COMP%]{background:var(--color-surface);padding:12px;border-radius:6px;border-left:4px solid var(--color-warning)}.mark-paid-warning[_ngcontent-%COMP%] .recommendation-box[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:14px;line-height:1.6}.mark-paid-warning-icon[_ngcontent-%COMP%]{text-align:center;margin-bottom:20px}.mark-paid-warning-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px;color:var(--color-warning)}.mark-paid-instructions[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:14px;margin-bottom:20px;line-height:1.6}.mark-paid-instructions[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:14px;margin:0 0 20px 20px;line-height:1.8;text-align:left}.mark-paid-instructions[_ngcontent-%COMP%] .upload-icon[_ngcontent-%COMP%]{color:var(--color-accent)}.mark-paid-proceed-text[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:13px;margin-bottom:20px;text-align:center;font-style:italic}.confirm-style[_ngcontent-%COMP%] .modal-info-text[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.confirm-style[_ngcontent-%COMP%] .coach-name-highlight[_ngcontent-%COMP%]{color:var(--color-success)}@media (max-width: 768px){.modal-overlay[_ngcontent-%COMP%]{padding:15px 8px;align-items:flex-start}.modal-content[_ngcontent-%COMP%]{max-height:calc(100vh - 30px);padding:24px 16px;margin:0 auto}.calendar-container[_ngcontent-%COMP%]{padding:12px;overflow:visible;max-width:100%;margin:0 auto;box-sizing:border-box;position:relative}#schedule-grid[_ngcontent-%COMP%]{width:100%;overflow-x:auto;position:relative}#schedule-grid[_ngcontent-%COMP%]:after{content:"Swipe to see all courts \\2192";display:block;text-align:center;padding:10px;font-size:12px;color:var(--color-accent);font-weight:700;background:var(--color-accent-bg-light);border-radius:8px;margin-top:12px;border:2px solid var(--color-accent-medium);animation:pulse-hint 2s ease-in-out infinite;box-shadow:0 4px 15px var(--color-accent-bg-medium)}@keyframes pulse-hint{0%,to{opacity:1;transform:scale(1)}50%{opacity:.7;transform:scale(1.02)}}.date-picker-section[_ngcontent-%COMP%]{flex-direction:column;gap:8px;align-items:stretch;justify-content:center;width:100%}.date-picker-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:14px;text-align:center}.date-picker-section[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{width:100%;font-size:16px;padding:10px 12px;box-sizing:border-box}h2[_ngcontent-%COMP%]{font-size:18px!important;margin-bottom:12px}.add-booking-btn[_ngcontent-%COMP%]{width:100%;padding:12px 16px;font-size:14px;box-sizing:border-box}.receipt-indicator[_ngcontent-%COMP%]{top:3px;right:3px;font-size:9px;padding:2px 5px;gap:2px}.receipt-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}}@media (max-width: 600px){.modal-overlay[_ngcontent-%COMP%]{padding:10px 6px}.modal-content[_ngcontent-%COMP%]{max-height:calc(100vh - 20px);padding:20px 14px;border-radius:8px}.modal-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:18px;margin-bottom:12px}.form-group[_ngcontent-%COMP%]{margin-bottom:14px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:13px;margin-bottom:4px}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{padding:8px;font-size:16px}.modal-actions[_ngcontent-%COMP%]{flex-direction:column;gap:8px}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%;padding:12px}.calendar-container[_ngcontent-%COMP%]{padding:10px;margin:0 auto;width:100%;box-sizing:border-box;position:relative}#schedule-grid[_ngcontent-%COMP%]{width:100%;overflow-x:auto}#schedule-grid[_ngcontent-%COMP%]:after{font-size:11px;padding:8px;margin-top:10px;border:2px solid var(--color-accent-medium)}.calendar-container[_ngcontent-%COMP%]:before{font-size:12px;padding:10px 14px;left:8px}h2[_ngcontent-%COMP%]{font-size:16px!important;margin-bottom:10px}.date-picker-section[_ngcontent-%COMP%]{flex-direction:column;gap:8px;width:100%}.date-picker-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:14px;text-align:center}.date-picker-section[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{width:100%;padding:10px;font-size:16px;box-sizing:border-box}.add-booking-btn[_ngcontent-%COMP%]{width:100%;padding:12px 16px;font-size:14px;box-sizing:border-box}.receipt-indicator[_ngcontent-%COMP%]{top:2px;right:2px;font-size:8px;padding:2px 4px;gap:2px}.receipt-indicator[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:8px}}@media (max-width: 480px){.modal-overlay[_ngcontent-%COMP%]{padding:8px 4px}.modal-content[_ngcontent-%COMP%]{max-height:calc(100vh - 16px);padding:16px 12px;border-radius:6px}.modal-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px;margin-bottom:10px}.form-group[_ngcontent-%COMP%]{margin-bottom:12px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:12px}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{padding:8px;font-size:16px}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:10px;font-size:14px}.calendar-container[_ngcontent-%COMP%]{padding:8px;margin:0 auto;width:100%;box-sizing:border-box;position:relative}#schedule-grid[_ngcontent-%COMP%]:after{font-size:10px;padding:6px;margin-top:8px;border:2px solid var(--color-accent-medium)}.calendar-container[_ngcontent-%COMP%]:before{font-size:10px;padding:8px 12px;left:5px}h2[_ngcontent-%COMP%]{font-size:14px!important;margin-bottom:8px}.date-picker-section[_ngcontent-%COMP%]{gap:6px}.date-picker-section[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:13px}.date-picker-section[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{width:100%;padding:8px;font-size:16px;box-sizing:border-box}.add-booking-btn[_ngcontent-%COMP%]{width:100%;padding:10px 14px;font-size:14px;box-sizing:border-box}}',".booking-schedule-table[_ngcontent-%COMP%]{width:100%;border-collapse:separate;border-spacing:0;background:var(--color-accent-bg-subtle);border-radius:12px;overflow:hidden;box-shadow:var(--shadow-md)}@keyframes _ngcontent-%COMP%_glow-pulse{0%,to{box-shadow:0 0 20px currentColor}50%{box-shadow:0 0 40px currentColor,0 0 60px currentColor}}.booking-schedule-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-primary-dark) 0%,var(--color-primary) 100%);position:sticky;top:0;z-index:10}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:16px 8px;font-weight:700;font-size:14px;text-align:center;color:var(--color-accent);border-bottom:2px solid var(--color-accent);text-transform:uppercase;letter-spacing:.5px}.booking-schedule-table[_ngcontent-%COMP%] th.group-header[_ngcontent-%COMP%]{padding:12px 8px;font-weight:800;font-size:15px;letter-spacing:1px;border-bottom:3px solid}.booking-schedule-table[_ngcontent-%COMP%] th.group-header.rental-group[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-warning) 0%,color-mix(in srgb,var(--color-warning) 80%,#000) 100%)!important;color:#000!important;border-bottom-color:var(--color-warning)!important;text-shadow:none}.booking-schedule-table[_ngcontent-%COMP%] th.group-header.coaching-group[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-info) 0%,color-mix(in srgb,var(--color-info) 80%,#000) 100%)!important;color:#fff!important;border-bottom-color:var(--color-info)!important;text-shadow:0 2px 4px rgba(0,0,0,.3)}.booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{background:var(--color-primary-dark);width:100px;min-width:100px}.booking-schedule-table[_ngcontent-%COMP%] th.court-header[_ngcontent-%COMP%]:not(.coaching-header){background:var(--color-info-bg-subtle);color:var(--color-info);border-bottom:2px solid var(--color-info)}.booking-schedule-table[_ngcontent-%COMP%] th.coaching-header[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info);border-bottom:2px solid var(--color-info)}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;font-size:10px;font-weight:500;margin-top:4px;opacity:.8;text-transform:none}.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{transition:none}.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:transparent!important;transform:none!important;box-shadow:none!important}.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(2n){background:var(--color-accent-bg-subtle)}.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:nth-child(2n):hover{background:var(--color-accent-bg-subtle)!important}.booking-schedule-table[_ngcontent-%COMP%] td.time-cell[_ngcontent-%COMP%]{padding:14px 8px;font-weight:700;font-size:14px;text-align:center;background:var(--color-primary-dark);color:var(--color-text);border-right:2px solid var(--color-accent);width:100px;min-width:100px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%]{padding:12px 8px;text-align:center;font-size:13px;font-weight:600;border:1px solid var(--color-border-light);transition:all .2s ease;min-height:60px;vertical-align:middle;position:relative}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]{cursor:pointer}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]:hover{transform:translateY(-4px) scale(1.03);z-index:5;border-color:var(--color-text)!important;box-shadow:0 8px 25px #0006,0 0 20px var(--color-accent-bg-medium)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]:active{transform:translateY(-2px) scale(1.01);transition:all .1s ease}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.open[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-info),color-mix(in srgb,var(--color-info) 80%,#000));color:#fff}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.open.clickable-tile[_ngcontent-%COMP%]:hover{background:linear-gradient(135deg,color-mix(in srgb,var(--color-info) 80%,#000),color-mix(in srgb,var(--color-info) 60%,#000));transform:translateY(-4px) scale(1.03);box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-info-shadow-bright),0 0 40px var(--color-info-shadow)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.blocked[_ngcontent-%COMP%]{background:linear-gradient(135deg,#7f8c8d,#95a5a6);color:#fff;cursor:not-allowed;opacity:.7}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.blocked[_ngcontent-%COMP%]:hover{transform:none!important;box-shadow:none!important}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.internal-coach-reserved[_ngcontent-%COMP%]{background:linear-gradient(135deg,#8e44ad,#9b59b6);color:#fff;cursor:not-allowed;opacity:.9;font-size:.72rem;font-weight:600;line-height:1.2}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.internal-coach-reserved[_ngcontent-%COMP%]:hover{transform:none!important;box-shadow:none!important}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.blocked.admin-bypass[_ngcontent-%COMP%]{background:linear-gradient(135deg,#7f8c8d,#95a5a6);border:2px solid var(--color-warning);cursor:pointer!important;opacity:.85}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.blocked.admin-bypass[_ngcontent-%COMP%]:hover{background:linear-gradient(135deg,#95a5a6,#7f8c8d);transform:translateY(-4px) scale(1.03)!important;box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-warning-shadow-bright),0 0 40px var(--color-warning-shadow)!important;border-color:var(--color-warning);opacity:1}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.booking-request-submitted[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-warning),color-mix(in srgb,var(--color-warning) 80%,#000));color:#fff}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.booking-request-submitted.clickable-tile[_ngcontent-%COMP%]:hover{transform:translateY(-4px) scale(1.03);box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-warning-shadow-bright),0 0 40px var(--color-warning-shadow)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.reserved-pending-payment[_ngcontent-%COMP%]{background:linear-gradient(135deg,color-mix(in srgb,var(--color-warning) 80%,#000),color-mix(in srgb,var(--color-warning) 60%,#000));color:#fff}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.reserved-pending-payment.clickable-tile[_ngcontent-%COMP%]:hover{transform:translateY(-4px) scale(1.03);box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-warning-shadow-bright),0 0 40px var(--color-warning-shadow)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.reserved-paid[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success),color-mix(in srgb,var(--color-success) 80%,#000));color:#fff}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.reserved-paid.clickable-tile[_ngcontent-%COMP%]:hover{transform:translateY(-4px) scale(1.03);box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-success-shadow-bright),0 0 40px var(--color-success-shadow)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.declined[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-danger),color-mix(in srgb,var(--color-danger) 80%,#000));color:#fff}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.declined.clickable-tile[_ngcontent-%COMP%]:hover{transform:translateY(-4px) scale(1.03);
65box-shadow:0 8px 20px #0000004d,0 0 25px var(--color-danger-shadow-bright),0 0 40px var(--color-danger-shadow)}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{display:block;font-size:11px;margin-top:4px;opacity:.9}.coach-badge[_ngcontent-%COMP%], .student-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;background:#ffffff2e;color:#fffffff2;border:1px solid rgba(255,255,255,.4);border-radius:10px;padding:2px 7px;font-size:10px;font-weight:600;margin-top:3px;white-space:nowrap}.external-coach-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;background:#ffc85038;color:#ffe696f7;border:1px solid rgba(255,200,80,.45);border-radius:10px;padding:2px 7px;font-size:10px;font-weight:600;margin-top:3px;white-space:nowrap}@media (max-width: 768px){.coach-badge[_ngcontent-%COMP%], .student-badge[_ngcontent-%COMP%], .external-coach-badge[_ngcontent-%COMP%]{font-size:6px;padding:1px 4px;gap:2px;border-radius:6px}}@media (max-width: 1400px){.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:10px 6px;font-size:12px}.booking-schedule-table[_ngcontent-%COMP%] td.time-cell[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{width:80px;min-width:80px}}@media (max-width: 1024px){.booking-schedule-table[_ngcontent-%COMP%]{font-size:11px}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:8px 4px}.booking-schedule-table[_ngcontent-%COMP%] td.time-cell[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{width:70px;min-width:70px}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:9px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]:hover{transform:scale(1.12) translateY(-3px)}}@media (max-width: 768px){#schedule-grid[_ngcontent-%COMP%]{width:100%!important;overflow-x:auto!important;overflow-y:visible!important;display:block!important;-webkit-overflow-scrolling:touch!important;touch-action:auto!important;cursor:grab!important}#schedule-grid[_ngcontent-%COMP%]:active{cursor:grabbing!important}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar{height:8px}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:10px}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent);border-radius:10px}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-dark)}table.booking-schedule-table[_ngcontent-%COMP%]{width:auto!important;min-width:100%!important;display:table!important;table-layout:auto!important;border-collapse:separate!important;border-spacing:0!important;border-radius:6px;font-size:8px}table.booking-schedule-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{display:table-header-group!important}table.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%]{display:table-row-group!important}table.booking-schedule-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%], table.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{display:table-row!important}table.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], table.booking-schedule-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{display:table-cell!important;vertical-align:middle!important;text-align:center!important;float:none!important;position:relative!important}.booking-schedule-table[_ngcontent-%COMP%] td.time-cell[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{width:60px;min-width:60px;padding:6px 4px;font-size:8px;line-height:1.1;position:sticky!important;left:0!important;z-index:10!important;background:var(--color-primary-dark)!important;box-shadow:2px 0 4px #0003}.booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{z-index:20!important}.booking-schedule-table[_ngcontent-%COMP%] th.group-header[_ngcontent-%COMP%]{padding:8px 4px;font-size:9px;font-weight:800;letter-spacing:.5px}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:not(.time-header):not(.group-header){width:90px;min-width:90px;padding:8px 4px;font-size:8px;line-height:1.1}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%]{width:90px;min-width:90px;padding:8px 4px;font-size:8px;line-height:1.2;min-height:55px;font-weight:600;word-break:break-word}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:6px;display:block;margin-top:2px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:7p
65x;margin-top:2px;line-height:1.1}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:8px;display:block}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]:hover{transform:none;box-shadow:none}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell.clickable-tile[_ngcontent-%COMP%]:active{opacity:.8;transform:scale(.98);transition:all .1s ease}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border:1px solid var(--color-border-light)}}@media (max-width: 480px){#schedule-grid[_ngcontent-%COMP%]{width:100%!important;overflow-x:auto!important;overflow-y:visible!important;display:block!important;-webkit-overflow-scrolling:touch!important;touch-action:auto!important;cursor:grab!important}#schedule-grid[_ngcontent-%COMP%]:active{cursor:grabbing!important}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar{height:6px}#schedule-gr
65id[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:10px}#schedule-grid[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent);border-radius:10px}table.booking-schedule-table[_ngcontent-%COMP%]{display:table!important;width:auto!important;min-width:100%!important;table-layout:auto!important;font-size:7px;border-radius:4px}table.booking-schedule-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{display:table-header-group!important}table.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%]{display:table-row-group!important}table.booking-schedule-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%] tr[_ngcontent-%COMP%], table.booking-schedule-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{display:table-row!important}table.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], table.booking-schedule-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{display:table-cell!important;float:none!important;position:relative!important}.booking-schedule-table[_ngcontent-%COMP%] td.time-cell[_ngcontent-%COMP%], .booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{width:50px;min-width:50px;padding:4px 2px;font-size:7px;position:sticky!important;left:0!important;z-index:10!important;background:var(--color-primary-dark)!important;box-shadow:2px 0 4px #0003}.booking-schedule-table[_ngcontent-%COMP%] th.time-header[_ngcontent-%COMP%]{z-index:20!important}.booking-schedule-table[_ngcontent-%COMP%] th.group-header[_ngcontent-%COMP%]{padding:6px 3px;font-size:8px;font-weight:800;letter-spacing:.3px}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]:not(.time-header):not(.group-header){width:80px;min-width:80px;padding:6px 3px;font-size:7px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%]{width:80px;min-width:80px;padding:6px 3px;font-size:7px;min-height:50px}.booking-schedule-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:5px;margin-top:1px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:6px;margin-top:1px}.booking-schedule-table[_ngcontent-%COMP%] td.court-cell[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:7px}}",'.receipt-btn[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent) 0%,color-mix(in srgb,var(--color-accent) 70%,var(--color-primary)) 100%);border:none;border-radius:8px;padding:8px 12px;color:#fff;font-size:18px;cursor:pointer;transition:all .3s ease;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:4px;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow-bright)}.receipt-btn.has-receipts[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success) 0%,color-mix(in srgb,var(--color-success) 70%,var(--color-accent)) 100%);box-shadow:0 2px 8px var(--color-success-shadow)}.receipt-btn.has-receipts[_ngcontent-%COMP%]:hover{box-shadow:0 4px 12px var(--color-success-shadow-bright)}.receipt-count[_ngcontent-%COMP%]{background:#ffffff4d;border-radius:10px;padding:2px 6px;font-size:11px;font-weight:700;margin-left:4px}.receipt-modal[_ngcontent-%COMP%]{max-width:550px!important;padding:0!important;background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px}.receipt-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:20px 24px;border-radius:10px 10px 0 0;text-align:center}.receipt-modal-icon[_ngcontent-%COMP%]{font-size:40px;margin-bottom:8px;color:#fff}.receipt-modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 6px;font-size:20px;color:#fff;font-weight:600}.receipt-modal-subtitle[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#ffffffe6}.receipt-modal-subtitle[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#fff;font-weight:600}.receipt-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:450px;overflow-y:auto}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-bg-medium);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow)}.receipt-section[_ngcontent-%COMP%]{margin-bottom:24px}.section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid var(--color-border)}.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:18px;color:var(--color-accent)}
65.section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:15px;color:var(--color-text);font-weight:600}.receipts-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.receipt-item[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:12px 14px;display:flex;align-items:center;gap:12px;transition:all .3s ease}.receipt-item[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow)}.receipt-item-icon[_ngcontent-%COMP%]{font-size:32px;color:var(--color-accent)}.receipt-item-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.receipt-item-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.receipt-item-date[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);display:flex;align-items:center;gap:4px}.receipt-item-date[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.receipt-item-actions[_ngcontent-%COMP%]{display:flex;gap:6px}.receipt-action-btn[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border:1px solid var(--color-accent-shadow);border-radius:6px;padding:8px 10px;color:var(--color-accent);cursor:pointer;transition:all .3s ease;font-size:14px;display:flex;align-items:center;justify-content:center}.receipt-action-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px)}.receipt-action-btn.view[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow);color:var(--color-accent)}.receipt-action-btn.view[_ngcontent-%COMP%]:hover{background:var(--color-accent);color:#fff;box-shadow:0 4px 8px var(--color-accent-shadow)}.receipt-action-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border-color:var(--color-danger-shadow);color:var(--color-danger)}.receipt-action-btn.delete[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff;box-shadow:0 4px 8px var(--color-danger-shadow)}.upload-zone[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:2px dashed var(--color-accent-shadow);border-radius:10px;padding:32px 20px;text-align:center;transition:all .3s ease;cursor:pointer}.upload-zone[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent)}.upload-zone-icon[_ngcontent-%COMP%]{font-size:56px;color:var(--color-accent);margin-bottom:12px}.upload-zone-text[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:var(--color-text);margin:0 0 6px}.upload-zone-subtext[_ngcontent-%COMP%]{font-size:12px;color:var(--color-text-muted);margin:0 0 16px}.upload-zone-button[_ngcontent-%COMP%]{display:inline-block;background:var(--color-accent);color:#fff;padding:10px 20px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:8px}.selected-files-section[_ngcontent-%COMP%]{margin-top:20px;background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:16px}.selected-files-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--color-border);font-size:14px;font-weight:600;color:var(--color-text)}.selected-files-size[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:12px}.selected-files-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.selected-file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:6px;padding:10px 12px;transition:all .2s ease}.selected-file-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-border-light)}.file-item-icon[_ngcontent-%COMP%]{font-size:22px;color:var(--color-accent)}.file-item-info[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:2px}
65.file-item-name[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-item-size[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted)}.file-item-remove[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border:1px solid var(--color-danger-shadow);border-radius:4px;padding:6px 10px;color:var(--color-danger);cursor:pointer;transition:all .2s ease;font-size:12px}.file-item-remove[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff}.file-item-remove[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.upload-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;background:color-mix(in srgb,var(--color-surface) 98%,transparent);border-radius:10px;display:flex;align-items:center;justify-content:center;z-index:1000}.upload-overlay-content[_ngcontent-%COMP%]{text-align:center}.spinner-large[_ngcontent-%COMP%]{border:6px solid var(--color-border);border-top:6px solid var(--color-accent);border-radius:50%;width:60px;height:60px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto 20px}.upload-overlay-text[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--color-text);margin:0 0 8px}.upload-overlay-subtext[_ngcontent-%COMP%]{font-size:14px;color:var(--color-text-muted);margin:0}.receipt-modal-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;gap:12px;justify-content:flex-end}.modal-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.modal-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.modal-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.modal-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.modal-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.modal-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none!important}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.receipt-viewer-overlay[_ngcontent-%COMP%]{background:#000000f2!important;z-index:10000}.receipt-viewer-modal[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;width:95vw;height:95vh;max-width:1400px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #00000080}.receipt-viewer-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:var(--color-accent);border-bottom:1px solid var(--color-border)}.receipt-viewer-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:22px;color:#fff;font-weight:600;display:flex;align-items:center;gap:10px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#fffc;font-weight:500}.receipt-viewer-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.zoom-controls[_ngcontent-%COMP%]{display:flex;gap:6px;background:#ffffff1a;padding:6px;border-radius:8px}.zoom-btn[_ngcontent-%COMP%]{background:#ffffff26;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:8px 12px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:18px;display:flex;align-items:center;justify-content:center}.zoom-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:#ffffff40;transform:scale(1.1)}.zoom-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.receipt-viewer-close[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:8px;padding:10px 14px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:20px;display:flex;align-items:center;justify-content:center}.receipt-viewer-close[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.05)}.receipt-viewer-body[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;padding:0;position:relative;background:#0006;overflow:hidden}.receipt-image-container[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:auto;position:relative;scroll-behavior:smooth}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow-bright)}.receipt-image-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:20px}.receipt-image[_ngcontent-%COMP%]{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:8px;box-shadow:0 10px 40px #00000080;transition:transform .3s ease;transform-origin:center center;cursor:zoom-in;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.receipt-image[style*="scale(1)"][_ngcontent-%COMP%]{cursor:zoom-in}.receipt-image[style*="scale(2)"][_ngcontent-%COMP%], .receipt-image[style*="scale(3)"][_ngcontent-%COMP%]{max-width:none;max-height:none;cursor:zoom-out}.receipt-image-wrapper[_ngcontent-%COMP%]{transition:all .3s ease}.receipt-loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;color:var(--color-text)}
65.receipt-loading[_ngcontent-%COMP%] .spinner-large[_ngcontent-%COMP%]{border:8px solid var(--color-border);border-top:8px solid var(--color-accent);border-radius:50%;width:80px;height:80px;animation:_ngcontent-%COMP%_spin 1s linear infinite}.receipt-loading[_ngcontent-%COMP%] .loading-text[_ngcontent-%COMP%]{font-size:16px;color:var(--color-text-secondary);font-weight:500}.receipt-error[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--color-text);text-align:center;max-width:600px;padding:40px;background:var(--color-danger-bg-subtle);border:2px solid var(--color-danger-shadow);border-radius:12px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:64px;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:24px;font-weight:600;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.6}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{text-align:left;margin:8px 0;padding-left:24px;font-size:13px;color:var(--color-text-muted)}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:4px 0}.error-url[_ngcontent-%COMP%]{font-size:11px!important;color:var(--color-text-muted)!important;word-break:break-all;background:var(--color-surface-hover);padding:8px 12px;border-radius:6px;font-family:monospace}.retry-btn[_ngcontent-%COMP%]{background:var(--color-accent);border:none;border-radius:6px;padding:10px 20px;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px;margin-top:8px}.retry-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.receipt-nav-btn[_ngcontent-%COMP%]{position:absolute;background:color-mix(in srgb,var(--color-accent) 90%,transparent);border:2px solid rgba(255,255,255,.2);border-radius:50%;width:45px;height:45px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:20px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #0000004d;z-index:10}.receipt-nav-btn[_ngcontent-%COMP%]:hover:not(.disabled){background:var(--color-accent);transform:scale(1.1);box-shadow:0 6px 20px var(--color-accent-shadow-bright)}.receipt-nav-btn.disabled[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-color:var(--color-border);color:var(--color-text-muted);cursor:not-allowed;opacity:.5}.receipt-nav-prev[_ngcontent-%COMP%]{left:20px}.receipt-nav-next[_ngcontent-%COMP%]{right:20px}.receipt-viewer-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);display:flex;gap:12px;justify-content:flex-end}.receipt-viewer-action-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);transform:translateY(-2px)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.booking-details-modal[_ngcontent-%COMP%]{background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px;max-width:500px!important;padding:0!important}.booking-details-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:16px 20px;border-radius:10px 10px 0 0;display:flex;justify-content:space-between;align-items:center}.booking-details-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;color:#fff}.booking-details-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:22px}.booking-details-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;font-weight:600}.modal-close-btn[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:6px;padding:6px 10px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:16px}.modal-close-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.1)}.booking-details-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:500px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle)}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:3px}.booking-detail-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.booking-detail-label[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.5px}.booking-detail-value[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500}.booking-detail-value.highlight[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600;font-size:14px}.booking-detail-value.status[_ngcontent-%COMP%]{display:inline-block;padding:5px 12px;border-radius:4px;font-size:12px;font-weight:600;width:fit-content}.booking-detail-value.status.pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning-shadow)}.booking-detail-value.status.paid[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);color:var(--color-accent);border:1px solid var(--color-accent-shadow)}.booking-detail-value.status.declined[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger);
65border:1px solid var(--color-danger-shadow)}.booking-details-modal-footer[_ngcontent-%COMP%]{padding:16px 20px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;justify-content:center}@media (max-width: 768px){.receipt-viewer-modal[_ngcontent-%COMP%]{width:100vw;height:100vh;max-width:100vw;border-radius:0}.receipt-viewer-header[_ngcontent-%COMP%]{padding:12px 16px;flex-wrap:wrap;gap:8px}.receipt-viewer-info[_ngcontent-%COMP%]{flex:1}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:12px}.zoom-controls[_ngcontent-%COMP%]{padding:4px;gap:4px}.zoom-btn[_ngcontent-%COMP%]{padding:6px 10px;font-size:16px}.receipt-viewer-close[_ngcontent-%COMP%]{padding:8px 12px;font-size:18px}.receipt-viewer-body[_ngcontent-%COMP%]{padding:0}.receipt-image-wrapper[_ngcontent-%COMP%]{padding:10px}.receipt-nav-btn[_ngcontent-%COMP%]{width:36px;height:36px;font-size:16px}.receipt-nav-prev[_ngcontent-%COMP%]{left:8px}.receipt-nav-next[_ngcontent-%COMP%]{right:8px}.receipt-viewer-footer[_ngcontent-%COMP%]{flex-direction:column;padding:12px 16px;gap:8px}.receipt-viewer-action-btn[_ngcontent-%COMP%]{width:100%;justify-content:center;padding:10px 20px;font-size:13px}.receipt-error[_ngcontent-%COMP%]{padding:20px;font-size:13px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 80px);max-height:calc(100vh - 200px)}}@media (max-width: 480px){.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:14px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:11px}.zoom-controls[_ngcontent-%COMP%]{gap:3px}.zoom-btn[_ngcontent-%COMP%]{padding:5px 8px;font-size:14px}.receipt-nav-btn[_ngcontent-%COMP%]{width:32px;height:32px;font-size:14px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 70px)}.booking-details-modal[_ngcontent-%COMP%]{max-width:95vw!important}.booking-details-modal-body[_ngcontent-%COMP%]{max-height:60vh}}']})};var _a="2026.07.22";var ic=n=>(n/1024/1024).toFixed(1);function xa(n){if(n<1024)return`${n} B`;let t=n/1024;return t<1023.5?`${t.toFixed(0)} KB`:`${(n/1024/1024).toFixed(1)} MB`}function va(n){return n.reduce((t,e)=>t+e.size,0)}function Dr(n){return ue(this,null,function*(){return Promise.all(n.map(t=>ue(null,null,function*(){return new File([yield t.arrayBuffer()],t.name,{type:t.type,lastModified:t.lastModified})})))})}function ba(n){let t=n.find(i=>i.size>52428800);if(t)return`"${t.name}" is ${ic(t.size)}MB, over the ${ic(52428800)}MB limit per file. Please retake the photo at a lower resolution.`;let e=n.reduce((i,o)=>i+o.size,0);return e>52428800?`These ${n.length} files total ${ic(e)}MB, over the ${ic(52428800)}MB limit. Please upload them in smaller batches.`:null}var cC=(n,t,e)=>({pending:n,paid:t,declined:e});function dC(n,t){if(n&1&&(r(0,"span",164),l(1),a()),n&2){let e=h();d(),F("(",e.totalElements,")")}}function pC(n,t){if(n&1&&(r(0,"div",191)(1,"div",192),w(2,"i",193),r(3,"span"),l(4),a()(),r(5,"div",194)(6,"div",195),w(7,"div"),a(),r(8,"div",196),l(9),a()()()),n&2){let e=h().$implicit,i=h();d(4),R(i.getPaymentDeadlineCountdown(e).timeText),d(3),Qt("progress-bar-fill "+i.getPaymentDeadlineCountdown(e).cssClass),le("width",i.getPaymentDeadlineCountdown(e).percentage,"%"),d(2),F("",i.getPaymentDeadlineCountdown(e).percentage,"%")}}function mC(n,t){if(n&1&&(r(0,"span",197),l(1),a()),n&2){let e=h().$implicit,i=h();d(),R(i.getReceiptCount(e))}}function gC(n,t){if(n&1){let e=L();r(0,"button",198),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.approveBooking(o.id))}),w(1,"i",199)(2,"span",89),r(3,"span",99),l(4,"Approve"),a()()}if(n&2){let e=h().$implicit,i=h();x("disabled",i.loadingActionId===e.id),d(),le("display",i.loadingActionId===e.id?"none":"inline"),d(),le("display",i.loadingActionId===e.id?"inline-block":"none"),d(),le("display",i.loadingActionId===e.id?"none":"inline")}}function uC(n,t){if(n&1){let e=L();r(0,"button",200),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.openDeclineModal(o.id))}),w(1,"i",127),r(2,"span",99),l(3,"Decline"),a()()}if(n&2){let e=h(2);x("disabled",e.loadingActionId!==null),d(2),le("display",e.loadingActionId!==null?"none":"inline")}}function fC(n,t){if(n&1){let e=L();r(0,"button",157),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.markAsPaid(o.id))}),r(1,"span",99),l(2,"Mark as Paid"),a(),w(3,"span",89),a()}if(n&2){let e=h().$implicit,i=h();x("disabled",i.loadingActionId===e.id),d(),le("display",i.loadingActionId===e.id?"none":"inline"),d(2),le("display",i.loadingActionId===e.id?"inline-block":"none")}}function hC(n,t){if(n&1){let e=L();r(0,"tr",165),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.openViewDetailsModal(o.id))}),r(1,"td",166),l(2),a(),r(3,"td",167),l(4),a(),r(5,"td",168),l(6),a(),r(7,"td",169),l(8),a(),r(9,"td",170),l(10),a(),r(11,"td",171),l(12),a(),r(13,"td",172),l(14),a(),r(15,"td",173),l(16),a(),w(17,"td",174),r(18,"td",175),l(19),a(),r(20,"td",176),S("click",function(o){return k(e),O(o.stopPropagation())}
65),r(21,"div",177),A(22,pC,10,6,"div",178),r(23,"button",179),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.openReceiptUploadModal(o.id))}),w(24,"i",180),A(25,mC,2,1,"span",181),a()()(),r(26,"td",182),S("click",function(o){return k(e),O(o.stopPropagation())}),r(27,"button",183),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.openModalById(o.id))}),w(28,"i",184),a(),r(29,"button",185),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.deleteBookingById(o.id))}),w(30,"i",186),a()(),r(31,"td",187),S("click",function(o){return k(e),O(o.stopPropagation())}),A(32,gC,5,7,"button",188),w(33,"br"),A(34,uC,4,3,"button",189)(35,fC,4,5,"button",190),a()()}if(n&2){let e=t.$implicit,i=h();d(2),R(i.formatDateTime(e.bookingDateTime||e.createdAt)),d(2),R(e.lastUpdatedAt||e.updatedAt?i.formatDateTime(e.lastUpdatedAt||e.updatedAt):"Not modified"),d(2),R(e.date),d(2),R(i.getTimeDisplay(e)),d(2),R(e.court),d(2),R(e.totalPersonPlaying||""),d(2),R(e.name),d(2),R(e.type),d(),x("innerHTML",i.formatStatusBadge(e.status),Zt),d(2),R(e.notes||""),d(3),x("ngIf",i.shouldShowCountdown(e)),d(),te("has-receipts",i.getReceiptCount(e)>0),x("title",i.getReceiptCount(e)>0?"Manage Receipts ("+i.getReceiptCount(e)+")":"Upload Receipt"),d(),x("ngClass",i.getReceiptCount(e)>0?"bi-file-earmark-check-fill":"bi-cloud-upload"),d(),x("ngIf",i.getReceiptCount(e)>0),d(7),x("ngIf",e.status==="Booking Request Submitted"),d(2),x("ngIf",e.status==="Booking Request Submitted"),d(),x("ngIf",e.status==="Reserved - Pending Payment")}}function _C(n,t){n&1&&(r(0,"tr")(1,"td",201),l(2,"No bookings found."),a()())}function xC(n,t){if(n&1){let e=L();r(0,"button",205),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.changeBookingPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(2);te("active",e===i.currentPage),x("disabled",e===i.currentPage),d(),R(e)}}function vC(n,t){if(n&1){let e=L();r(0,"div",202)(1,"button",203),S("click",function(){k(e);let o=h();return O(o.changeBookingPage(o.currentPage-1))}),l(2,"\xAB Prev"),a(),A(3,xC,2,4,"button",204),r(4,"button",203),S("click",function(){k(e);let o=h();return O(o.changeBookingPage(o.currentPage+1))}),l(5,"Next \xBB"),a()()}if(n&2){let e=h();d(),x("disabled",e.currentPage===1),d(2),x("ngForOf",e.getPageNumbers()),d(),x("disabled",e.currentPage===e.totalPages)}}function bC(n,t){if(n&1&&(r(0,"option",206),l(1),a()),n&2){let e=t.$implicit;x("value",e),d(),Se(" ",e,"",e.includes("10")||e.includes("11")?" (Coaching)":""," ")}}function yC(n,t){if(n&1&&(r(0,"option",206),l(1),a()),n&2){let e=t.$implicit;x("value",e.fullname),d(),Se("",e.fullname,"",e.hourlyRate?" \u2014 \u20B1"+e.hourlyRate+"/hr":"","")}}function CC(n,t){if(n&1&&(r(0,"small",207),l(1),a()),n&2){let e=h();d(),F("Rate: \u20B1",e.selectedCoachRate,"/hr")}}function wC(n,t){if(n&1&&(r(0,"p",208),l(1," Booking ID: "),r(2,"strong"),l(3),a(),l(4),a()),n&2){let e=h();d(3),R(e.selectedBooking.id),d(),Se(" | ",e.selectedBooking.date," | ",e.selectedBooking.court," ")}}function PC(n,t){if(n&1){let e=L();r(0,"div",227)(1,"div",228),w(2,"i",229),a(),r(3,"div",230)(4,"span",231),l(5),a(),r(6,"span",232),w(7,"i",233),l(8),a()(),r(9,"div",234)(10,"button",235),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openReceiptUrl(o))}),w(11,"i",236),a(),r(12,"button",237),S("click",function(o){let s=k(e).index,m=h(3);return O(m.deleteReceipt(m.getReceiptMetadata(m.selectedBooking)[s],o))}),w(13,"i",238),a()()()}if(n&2){let e=t.index,i=h(3);d(5),R(i.getReceiptMetadata(i.selectedBooking)[e].fileName||"Receipt "+(e+1)),d(3),F(" ",i.getFormattedUploadDate(i.getReceiptMetadata(i.selectedBooking)[e].uploadedAt||"")," ")}}function MC(n,t){if(n&1&&(r(0,"div",223)(1,"div",212),w(2,"i",224),r(3,"h4"),l(4),a()(),r(5,"div",225),A(6,PC,14,2,"div",226),a()()),n&2){let e=h(2);d(4),F("Uploaded Receipts (",e.getReceiptUrls().length,")"),d(2),x("ngForOf",e.getReceiptUrls())}}function SC(n,t){if(n&1){let e=L();r(0,"div",245)(1,"div",246),w(2,"i",122),a(),r(3,"div",247)(4,"span",248),l(5),a(),r(6,"span",249),l(7),a()(),r(8,"button",250),S("click",function(){let o=k(e).index,s=h(3);return O(s.removeSelectedFile(o))}
65),w(9,"i",127),a()()}if(n&2){let e=t.$implicit,i=h(3);d(5),R(e.name),d(2),R(i.formatFileSize(e.size)),d(),x("disabled",i.isUploadingReceipts)}}function kC(n,t){if(n&1&&(r(0,"div",239)(1,"div",240)(2,"span"),w(3,"i",241),l(4),a(),r(5,"span",242),l(6),a()(),r(7,"div",243),A(8,SC,10,3,"div",244),a()()),n&2){let e=h(2);d(4),F(" Selected Files (",e.selectedFiles.length,")"),d(2),F("Total: ",e.formatFileSize(e.totalReceiptBytes())," of 50 MB"),d(2),x("ngForOf",e.selectedFiles)}}function OC(n,t){if(n&1){let e=L();r(0,"div",209),A(1,MC,7,2,"div",210),r(2,"div",211)(3,"div",212),w(4,"i",213),r(5,"h4"),l(6,"Add New Receipts"),a()(),r(7,"div",214)(8,"div",215),w(9,"i",216),a(),r(10,"p",217),l(11,"Choose images to upload"),a(),r(12,"p",218),l(13,"PNG, JPG, JPEG \xB7 up to 50MB total"),a(),r(14,"label",219),w(15,"i",220),l(16," Select Files "),a(),r(17,"input",221),S("change",function(o){k(e);let s=h();return O(s.onFileSelected(o))}),a()(),A(18,kC,9,3,"div",222),a()()}if(n&2){let e=h();d(),x("ngIf",e.hasReceipts()),d(16),x("disabled",e.isUploadingReceipts),d(),x("ngIf",e.selectedFiles.length>0)}}function EC(n,t){n&1&&(r(0,"div",251)(1,"div",252),w(2,"div",253),r(3,"p",254),l(4,"Uploading receipts..."),a(),r(5,"p",255),l(6,"Please wait, this may take a moment"),a()()())}function TC(n,t){if(n&1&&(r(0,"p",256),l(1),a()),n&2){let e=h();d(),F("Zoom: ",(e.imageZoom*100).toFixed(0),"%")}}function IC(n,t){if(n&1){let e=L();r(0,"div",257)(1,"button",258),S("click",function(){k(e);let o=h();return O(o.zoomOut())}),w(2,"i",259),a(),r(3,"button",260),S("click",function(){k(e);let o=h();return O(o.resetZoom())}),w(4,"i",261),a(),r(5,"button",262),S("click",function(){k(e);let o=h();return O(o.zoomIn())}),w(6,"i",213),a()()}if(n&2){let e=h();d(),x("disabled",e.imageZoom<=.5),d(4),x("disabled",e.imageZoom>=3)}}function AC(n,t){n&1&&(r(0,"div",263),w(1,"div",253),r(2,"p",47),l(3,"Loading receipt..."),a()())}function DC(n,t){if(n&1&&(r(0,"div",264),w(1,"i",93),r(2,"h4"),l(3,"Unable to Load Receipt"),a(),r(4,"p"),l(5,"The receipt image could not be loaded. This may be due to:"),a(),r(6,"ul")(7,"li"),l(8,"Google Drive sharing permissions"),a(),r(9,"li"),l(10,"Network connectivity issues"),a(),r(11,"li"),l(12,"Invalid image format"),a()(),r(13,"p",265),l(14),a()()),n&2){let e=h();d(14),F("URL: ",e.currentReceiptUrl,"")}}function RC(n,t){if(n&1){let e=L();r(0,"div",266)(1,"img",267),S("load",function(){k(e);let o=h();return O(o.onReceiptImageLoad())})("error",function(){k(e);let o=h();return O(o.onReceiptImageError())})("dblclick",function(){k(e);let o=h();return O(o.imageZoom===1?o.zoomIn():o.resetZoom())}),a()()}if(n&2){let e=h();le("display",e.isLoadingReceipt?"none":"flex"),d(),le("transform","scale("+e.imageZoom+")"),Kt("alt","Receipt ",e.currentReceiptIndex+1,""),x("src",e.currentReceiptUrl,Ie)}}function BC(n,t){if(n&1){let e=L();r(0,"button",268),S("click",function(){k(e);let o=h();return O(o.downloadReceipt())}),w(1,"i",269),l(2," Download "),a()}}function NC(n,t){if(n&1&&(r(0,"div",276)(1,"span",277),l(2,"Coach"),a(),r(3,"span",279),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.coachName)}}function VC(n,t){if(n&1&&(r(0,"div",276)(1,"span",277),l(2,"Remarks"),a(),r(3,"span",279),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.notes)}}function LC(n,t){if(n&1){let e=L();r(0,"div",270),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"div",271)(2,"div",272),w(3,"i",273),r(4,"h3"),l(5,"Booking Details"),a()(),r(6,"button",274),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(7,"i",127),a()(),r(8,"div",275)(9,"div",276)(10,"span",277),l(11,"Booking ID"),a(),r(12,"span",278),l(13),a()(),r(14,"div",276)(15,"span",277),l(16,"Date"),a(),r(17,"span",279),l(18),a()(),r(19,"div",276)(20,"span",277),l(21,"Time"),a(),r(22,"span",279),l(23),a()(),r(24,"div",276)(25,"span",277),l(26,"Duration"),a(),r(27,"span",279),l(28),a()(),r(29,"div",276)(30,"span",277),l(31,"Court"),a(),r(32,"span",279),l(33),a()(),r(34,"div",276)(35,"span",277),l(36,"Type"),a(),r(37,"span",279),l(38),a()(),A(39,NC,5,1,"div",280),r(40,"div",276)(41,"span",277),l(42,"Total Players"),a(),r(43,"span",279),l(44),a()(),r(45,"div",276)(46,"span",277),l(47,"Name"),a(),r(48,"
65span",279),l(49),a()(),r(50,"div",276)(51,"span",277),l(52,"Contact"),a(),r(53,"span",279),l(54),a()(),r(55,"div",276)(56,"span",277),l(57,"Email"),a(),r(58,"span",279),l(59),a()(),r(60,"div",276)(61,"span",277),l(62,"Status"),a(),r(63,"span",281),l(64),a()(),r(65,"div",276)(66,"span",277),l(67,"Amount Payable"),a(),r(68,"span",278),l(69),a()(),A(70,VC,5,1,"div",280),a(),r(71,"div",282)(72,"button",283),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(73,"i",158),l(74," Got It "),a()()()}if(n&2){let e=h();d(13),R(e.selectedBooking.id),d(5),R(e.selectedBooking.date),d(5),R(e.getTimeDisplay(e.selectedBooking)),d(5),F("",e.selectedBooking.duration||1," hour(s)"),d(5),R(e.selectedBooking.court),d(5),R(e.selectedBooking.type),d(),x("ngIf",e.selectedBooking.type==="coaching"&&e.selectedBooking.coachName),d(5),R(e.selectedBooking.totalPersonPlaying||"N/A"),d(5),R(e.selectedBooking.name),d(5),R(e.selectedBooking.contact),d(5),R(e.selectedBooking.email),d(4),x("ngClass",jo(15,cC,e.selectedBooking.status==="Reserved - Pending Payment"||e.selectedBooking.status==="Booking Request Submitted",e.selectedBooking.status==="Reserved - Paid",e.selectedBooking.status==="Declined"||e.selectedBooking.status==="Cancelled")),d(),F(" ",e.selectedBooking.status," "),d(5),F("\u20B1",e.calculateAmount(e.selectedBooking).toLocaleString(),""),d(),x("ngIf",e.selectedBooking.notes)}}function FC(n,t){if(n&1&&(r(0,"p"),l(1,"Are you sure you want to delete "),r(2,"strong"),l(3),a(),l(4,"?"),a()),n&2){let e=h();d(3),F('"',e.pendingDeleteReceipt.fileName,'"')}}function zC(n,t){if(n&1&&(r(0,"div",285)(1,"label"),l(2,"Coach Name:"),a(),r(3,"div"),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.coachName)}}function UC(n,t){if(n&1&&(r(0,"div",285)(1,"label"),l(2,"Approver Name:"),a(),r(3,"div"),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.approverName)}}function jC(n,t){if(n&1&&(r(0,"div",284)(1,"div",285)(2,"label"),l(3,"Date:"),a(),r(4,"div"),l(5),a()(),r(6,"div",285)(7,"label"),l(8,"Time:"),a(),r(9,"div"),l(10),a()(),r(11,"div",285)(12,"label"),l(13,"Duration:"),a(),r(14,"div"),l(15),a()(),r(16,"div",285)(17,"label"),l(18,"Total Amount Payable:"),a(),r(19,"div"),l(20),a()(),r(21,"div",285)(22,"label"),l(23,"Court:"),a(),r(24,"div"),l(25),a()(),r(26,"div",285)(27,"label"),l(28,"Booking Type:"),a(),r(29,"div"),l(30),a()(),r(31,"div",285)(32,"label"),l(33,"Name:"),a(),r(34,"div"),l(35),a()(),A(36,zC,5,1,"div",286),r(37,"div",285)(38,"label"),l(39,"Total Person Playing:"),a(),r(40,"div"),l(41),a()(),r(42,"div",285)(43,"label"),l(44,"Contact:"),a(),r(45,"div"),l(46),a()(),r(47,"div",285)(48,"label"),l(49,"Email:"),a(),r(50,"div"),l(51),a()(),r(52,"div",285)(53,"label"),l(54,"Status:"),a(),w(55,"div",287),a(),r(56,"div",285)(57,"label"),l(58,"Booking Made:"),a(),r(59,"div"),l(60),a()(),r(61,"div",285)(62,"label"),l(63,"Last Updated:"),a(),r(64,"div"),l(65),a()(),r(66,"div",285)(67,"label"),l(68,"Remarks:"),a(),r(69,"div"),l(70),a()(),r(71,"div",285)(72,"label"),l(73,"Last Updated By:"),a(),r(74,"div"),l(75),a()(),A(76,UC,5,1,"div",286),a()),n&2){let e=h();d(5),R(e.selectedBooking.date),d(5),R(e.getTimeDisplay(e.selectedBooking)),d(5),R(e.selectedBooking.duration?e.selectedBooking.duration+" hour(s)":"1 hour"),d(5),F("\u20B1",e.calculateAmount(e.selectedBooking).toLocaleString(),""),d(5),R(e.selectedBooking.court),d(5),R(e.selectedBooking.type),d(5),R(e.selectedBooking.name),d(),x("ngIf",e.selectedBooking.type==="coaching"&&e.selectedBooking.coachName),d(5),R(e.selectedBooking.totalPersonPlaying||""),d(5),R(e.selectedBooking.contact),d(5),R(e.selectedBooking.email),d(4),x("innerHTML",e.formatStatusBadge(e.selectedBooking.status),Zt),d(5),R(e.formatDateTime(e.selectedBooking.bookingDateTime||e.selectedBooking.createdAt)),d(5),R(e.selectedBooking.lastUpdatedAt||e.selectedBooking.updatedAt?e.formatDateTime(e.selectedBooking.lastUpdatedAt||e.selectedBooking.updatedAt):"Not modified since creation"),d(5),R(e.selectedBooking.notes||"No remarks"),d(5),R(e.selectedBooking.lastUpdatedBy||"N/A"),d(),x("ngIf",e.selectedBooking==null?null:e.selectedBooking.approverName)}
65}var oc=class n{constructor(t,e,i,o){this.fb=t;this.apiService=e;this.authService=i;this.bookingConfigService=o;this.bookingForm=this.fb.group({date:["",Oe.required],startTime:["",Oe.required],duration:[1,Oe.required],court:["",Oe.required],type:["rental",Oe.required],coachName:[""],totalPersonPlaying:["",[Oe.required,Oe.min(1),Oe.max(20)]],name:["",Oe.required],contact:["",Oe.required],email:["",[Oe.required,Oe.email]],status:["Booking Request Submitted",Oe.required],notes:[""]}),this.apiService.getActiveCoaches().subscribe({next:s=>{this.coaches=s.filter(m=>m.fullname)},error:()=>{this.coaches=[]}})}showBookingModal=!1;showConfirmModal=!1;showSaveModal=!1;showDeclineModal=!1;showViewDetailsModal=!1;showCoachField=!1;showReceiptUploadModal=!1;showReceiptViewerModal=!1;showBookingDetailsModal=!1;showDeleteReceiptModal=!1;showMarkAsPaidRestrictionModal=!1;pendingDeleteReceipt=null;pendingMarkAsPaidBookingId=null;isLoading=!1;isSubmittingBooking=!1;loadingActionId=null;isUploadingReceipts=!1;selectedFiles=[];uploadProgress=0;appVersion=_a;currentReceiptUrl="";currentReceiptIndex=0;allReceiptUrls=[];isLoadingReceipt=!1;receiptLoadError=!1;imageZoom=1;bookingForm;paginatedBookings=[];totalElements=0;selectedBooking=null;editingBooking=null;pendingDeleteId=null;pendingDeclineId=null;pendingBookingData=null;filters={date:new Date().toLocaleDateString("en-CA"),time:"",type:"",status:""};searchTerm="";declineReason="";showPendingPaymentWithReceipts=!1;currentPage=1;pageSize=10;totalPages=0;timeRangeDisplay="Select a start time and duration";totalAmount=0;coaches=[];rentalCourts=[];coachingCourts=[];availableCourts=[];currentSort={key:"",ascending:!0};countdownInterval;searchDebounceTimer;ngOnInit(){this.setDefaultFilters(),this.setupFormWatchers(),this.loadBookingsFromBackend(),this.loadCourts(),this.countdownInterval=setInterval(()=>{this.paginatedBookings=[...this.paginatedBookings]},1e3)}ngOnDestroy(){this.countdownInterval&&clearInterval(this.countdownInterval),this.searchDebounceTimer&&clearTimeout(this.searchDebounceTimer)}setDefaultFilters(){let t=new Date().toLocaleDateString("en-CA");this.filters.date=t;let e=document.getElementById("booking-date");if(e){let i=new Date;i.setMonth(i.getMonth()+1),e.min=t,e.max=i.toLocaleDateString("en-CA")}}setupFormWatchers(){this.bookingForm.get("type")?.valueChanges.subscribe(t=>{this.toggleCoachField(),this.updateAdminAmountPayable(),this.updateAvailableCourts();let e=this.bookingForm.get("court")?.value;e&&!this.availableCourts.includes(e)&&this.bookingForm.patchValue({court:""})}),this.bookingForm.get("duration")?.valueChanges.subscribe(()=>{this.updateAdminTimeDisplay(),this.updateAdminAmountPayable()}),this.bookingForm.get("startTime")?.valueChanges.subscribe(()=>{this.updateDurationOptions(),this.updateAdminTimeDisplay()})}updateDurationOptions(){let t=this.bookingForm.get("startTime")?.value;if(!t)return;let e=23,o=this.parseTimeStr(t).getHours(),s=Math.max(1,e-o),m=parseInt(this.bookingForm.get("duration")?.value)||1,f=document.getElementById("duration");if(f){f.innerHTML="";for(let v=1;v<=Math.min(5,s);v++){let y=document.createElement("option");y.value=v.toString(),y.text=v===1?"1 Hour":`${v} Hours`,f.appendChild(y)}}m>s&&(this.bookingForm.patchValue({duration:s}),this.showToast(`Duration adjusted to ${s} hour(s) to not exceed 11PM closing time.`,"info"))}loadBookingsFromBackend(t=!0){return ue(this,null,function*(){t&&(this.isLoading=!0);let e=this.currentSort.key||"bookingDateTime",i=this.currentSort.key&&this.currentSort.ascending?"asc":"desc";try{let o=yield po(this.apiService.getBookingsPaginated({page:this.currentPage-1,size:this.pageSize,date:this.filters.date||void 0,time:this.filters.time||void 0,type:this.filters.type||void 0,status:this.filters.status||void 0,search:this.searchTerm||void 0,pendingWithReceipts:this.showPendingPaymentWithReceipts||void 0,sortBy:e,sortDir:i}));this.paginatedBookings=this.parseBookingReceipts(o.content),this.totalElements=o.totalElements,this.totalPages=o.totalPages||1,this.currentPage=o.currentPage+1,this.currentPage>this.totalPages&&(this.currentPage=this.totalPages),this.currentPage<1&&(this.currentPage=1),t&&setTimeout(()=>{this.isLoading=!1},200)}catch{t&&(this.isLoading=!1),this.showToast("Unable to load bookings")}})}parseBookingReceipts(t){return t.map(e=>{if(e.paymentProofUrl&&typeof e.paymentProofUrl=="string")try{let i=JSON.parse(e.paymentProofUrl);e.paymentProofUrl=Array.isArray(i)?i:[i]}catch{}if(e.paymentProofUrl&&Array.isArray(e.paymentProofUrl)&&(e.paymentProofUrl=e.paymentProofUrl.map(i=>{if(typeof i=="string")try{return JSON.parse(i)}catch{return i}return i})),e.receiptUrls&&typeof e.receiptUrls=="string")try{e.receiptUrls=JSON.parse(e.receiptUrls)}catch{}return e.receiptUrls&&Array.isArray(e.receiptUrls)&&(e.receiptUrls=e.receiptUrls.map(i=>{if(typeof i=="string")try{return JSON.parse(i)}catch{return i}return i})),(!e.receiptUrls||e.receiptUrls.length===0)&&e.paymentProofUrl&&Array.isArray(e.paymentProofUrl)&&e.paymentProofUrl.length>0&&(e.receiptUrls=[...e.paymentProofUrl]),e})}applyFilters(){this.currentPage=1,this.loadBookingsFromBackend()}onSearchInput(){clearTimeout(this.searchDebounceTimer),this.searchDebounceTimer=setTimeout(()=>{this.applyFilters()},400)}togglePendingWithReceipts(){this.showPendingPaymentWithReceipts=!this.showPendingPaymentWithReceipts,this.showPendingPaymentWithReceipts&&(this.filters={date:"",time:"",type:"",status:""},this.searchTerm="",this.currentSort={key:"",ascending:!0}),this.applyFilters()}clearFilters(){this.filters={date:new Date().toLocaleDateString("en-CA"),time:"",type:"",status:""},this.searchTerm="",this.showPendingPaymentWithReceipts=!1,this.applyFilters()}sortTable(t){this.currentSort.key===t?this.currentSort.ascending=!this.currentSort.ascending:this.currentSort={key:t,ascending:!0},this.currentPage=1,this.loadBookingsFromBackend()}changeBookingPage(t){t<1||t>this.totalPages||(this.currentPage=t,this.loadBookingsFromBackend())}getPageNumbers(){let t=[],e=Math.max(1,this.currentPage-2),i=Math.min(this.totalPages,e+4);i-e<4&&(e=Math.max(1,i-4));for(let o=e;o<=i;o++)t.push(o);return t}openModal(t){if(this.isLoading){this.showToast("Please wait for bookings to load before adding/editing.");return}if(this.editingBooking=t||null,this.showBookingModal=!0,t)this.bookingForm.patchValue({type:t.type}),this.updateAvailableCourts(),this.bookingForm.patchValue({date:t.date,startTime:t.startTime||t.time,duration:t.duration||1,court:t.court,coachName:t.coachName||"",totalPersonPlaying:t.totalPersonPlaying||"",name:t.name,contact:t.contact,email:t.email,status:t.status,notes:t.notes||""}),setTimeout(()=>{if(t.status==="Reserved - Paid"){let e=document.getElementById("status");if(e){let i=Array.from(e.options).find(s=>s.value==="Booking Request Submitted");i&&(i.disabled=!0,i.style.color="var(--color-text-muted)");let o=Array.from(e.options).find(s=>s.value==="Reserved - Pending Payment");o&&(o.disabled=!0,o.style.color="var(--color-text-muted)")}}},0);else{let e=new Date().toISOString().split("T")[0];this.bookingForm.patchValue({date:e,duration:1,type:"rental",status:"Booking Request Submitted"}),this.updateAvailableCourts()}this.toggleCoachField(),this.updateAdminTimeDisplay(),this.updateAdminAmountPayable(),setTimeout(()=>{this.updateDurationOptions()},0)}openModalById(t){let e=this.paginatedBookings.find(i=>i.id===t);e&&this.openModal(e)}closeModal(){this.isSubmittingBooking||(this.showBookingModal=!1,this.editingBooking=null,this.bookingForm.reset())}validateBookingDate(t){let e=new Date(t.target.value),i=new Date;i.setHours(0,0,0,0);let o=new Date;return o.setMonth(o.getMonth()+1),o.setHours(23,59,59,999),e<i?(this.showToast("\u26A0\uFE0F Please select a future date"),t.target.value="",!1):e>o?(this.showToast("\u26A0\uFE0F Bookings are only allowed within the next 30 days"),t.target.value="",!1):!0}toggleCoachField(){let t=this.bookingForm.get("type")?.value;this.showCoachField=t==="coaching",this.showCoachField?this.bookingForm.get("coachName")?.setValidators([Oe.required]):(this.bookingForm.get("coachName")?.clearValidators(),this.bookingForm.get("coachName")?.setValue("")),this.bookingForm.get("coachName")?.updateValueAndValidity()}get selectedCoachRate(){let t=this.bookingForm.get("coachName")?.value;return this.coaches.find(e=>e.fullname===t)?.hourlyRate||null}loadCourts(){this.apiService.getActiveCourts().subscribe({next:t=>{this.coachingCourts=t.filter(e=>e.courtType?.toLowerCase()==="coaching").map(e=>e.courtName),this.rentalCourts=t.filter(e=>e.courtType?.toLowerCase()!=="coaching").map(e=>e.courtName),this.updateAvailableCourts()},error:()=>{}})}updateAvailableCourts(){let t=this.bookingForm.get("type")?.value;this.availableCourts=t==="coaching"?this.coachingCourts:this.rentalCourts}updateAdminTimeDisplay(){let t=this.bookingForm.get("startTime")?.value,e=parseInt(this.bookingForm.get("duration")?.value||"1");if(!t){this.timeRangeDisplay="Select a start time and duration";return}let i=this.parseTimeStr(t),o=new Date(i.getTime()+e*60*60*1e3);this.timeRangeDisplay=`${this.formatTimeStr(i)} - ${this.formatTimeStr(o)}`}updateAdminAmountPayable(){let t=parseInt(this.bookingForm.get("duration")?.value||"1");this.totalAmount=this.bookingConfigService.BOOKING_RATE*t}onBookingSubmit(){return ue(this,null,function*(){if(this.bookingForm.invali
65d)return;let t=this.bookingForm.value;if(this.editingBooking){if(t.date!==this.editingBooking.date||t.startTime!==(this.editingBooking.startTime||this.editingBooking.time)||t.court!==this.editingBooking.court||t.duration!==this.editingBooking.duration){this.isSubmittingBooking=!0;let i=yield this.fetchConflicts(t.date,t.startTime,t.court,t.duration,this.editingBooking.id);if(this.isSubmittingBooking=!1,i.length>0){let o=i.map(s=>`${s.name} (${this.getTimeDisplay(s)})`).join(", ");this.showToast(`Booking conflict: The requested time slot at ${t.court} overlaps with existing booking(s) by ${o}`,"error");return}}}else{this.isSubmittingBooking=!0;let e=yield this.fetchConflicts(t.date,t.startTime,t.court,t.duration);if(this.isSubmittingBooking=!1,e.length>0){let i=e.map(o=>`${o.name} (${this.getTimeDisplay(o)})`).join(", ");this.showToast(`Booking conflict: The requested time slot at ${t.court} overlaps with existing booking(s) by ${i}`,"error");return}}this.showSaveModal=!0})}confirmSave(){return ue(this,null,function*(){try{this.isSubmittingBooking=!0;let t=this.bookingForm.value;if(this.editingBooking){let e=this.editingBooking.status,i=t.status;if(e==="Reserved - Paid"&&(i==="Reserved - Pending Payment"||i==="Booking Request Submitted")){this.showToast(`Cannot change status from "Reserved - Paid" back to "${i}". Paid bookings can only be changed to "Cancelled" or "Declined".`,"error"),this.isSubmittingBooking=!1,this.closeSaveModal();return}}if(t.status==="Reserved - Paid"){let e=this.editingBooking||null;if(!e?.receiptUrls||e.receiptUrls.length===0){this.pendingBookingData=t,this.isSubmittingBooking=!1,this.closeSaveModal(),e?.id&&(this.pendingMarkAsPaidBookingId=e.id),this.showMarkAsPaidRestrictionModal=!0;return}}yield this.proceedConfirmSave(t)}catch{this.showToast("Failed to save booking"),this.isSubmittingBooking=!1,this.closeSaveModal(),this.closeModal()}})}proceedConfirmSave(t){return ue(this,null,function*(){try{this.isSubmittingBooking=!0;let e=t||this.pendingBookingData;if(!e)return;let i=e.startTime,o=parseInt(e.duration),s=this.parseTimeStr(i),m=new Date(s.getTime()+o*60*60*1e3),f=this.formatTimeStr(m),v=`${i} - ${f}`,y=this.coaches.find(I=>I.fullname===e.coachName),M=ze(Ye(ze({},e),{endTime:f,timeDisplay:v,duration:o,id:this.editingBooking?.id}),y&&{coachId:y.userId});if(this.editingBooking){let I=JSON.parse(localStorage.getItem("pickle_admin_details")||"{}");M.lastUpdatedBy=I.username||"",yield this.apiService.updateBooking(this.editingBooking.id,M).toPromise(),this.showToast("Booking updated successfully")}else yield this.apiService.createBooking(M).toPromise(),this.showToast("Booking created successfully");yield this.loadBookingsFromBackend()}catch{this.showToast("Failed to save booking")}finally{this.isSubmittingBooking=!1,this.pendingBookingData=null,this.closeSaveModal(),this.closeModal(),this.closeMarkAsPaidRestrictionModal()}})}closeSaveModal(){this.isSubmittingBooking||(this.showSaveModal=!1)}deleteBookingById(t){this.pendingDeleteId=t,this.showConfirmModal=!0}confirmDelete(){return ue(this,null,function*(){if(this.pendingDeleteId){try{let t=JSON.parse(localStorage.getItem("pickle_admin_details")||"{}");yield this.apiService.deleteBooking(this.pendingDeleteId,t.username||"").toPromise(),this.showToast("Booking deleted successfully"),this.loadBookingsFromBackend()}catch{this.showToast("Failed to delete booking")}this.closeConfirmModal()}})}closeConfirmModal(){this.showConfirmModal=!1,this.pendingDeleteId=null}approveBooking(t){return ue(this,null,function*(){try{this.loadingActionId=t;let i=this.paginatedBookings.find(y=>y.id===t);if(!i)return;let o=JSON.parse(localStorage.getItem("pickle_admin_details")||"{}"),e=i,{receiptUrls:s,paymentProofUrl:m}=e,f=da(e,["receiptUrls","paymentProofUrl"]),v=Ye(ze({},f),{status:"Reserved - Pending Payment",lastUpdatedBy:o.username||""});yield this.apiService.updateBooking(t,v).toPromise(),this.showToast("Booking approved successfully"),this.loadBookingsFromBackend()}catch{this.showToast("Failed to approve booking")}finally{this.loadingActionId=null}})}markAsPaid(t){return ue(this,null,function*(){let e=this.paginatedBookings.find(i=>i.id===t);if(e){if(!e.receiptUrls||e.receiptUrls.length===0){this.pendingMarkAsPaidBookingId=t,this.showMarkAsPaidRestrictionModal=!0;return}this.proceedMarkAsPaid(t)}})}proceedMarkAsPaid(t){return ue(this,null,function*(){let e=this.paginatedBookings.find(o=>o.id===t);if(e)try{this.loadingActionId=t;let o=JSON.parse(localStorage.getItem("pickle_admin_details")||"{}"),i=e,{receiptUrls:s,paymentProofUrl:m}=i,f=da(i,["receiptUrls","paymentProofUrl"]),v=Ye(ze({},f),{status:"Reserved - Paid",lastUpdatedBy:o.username||""});
65yield this.apiService.updateBooking(t,v).toPromise(),this.showToast("Booking marked as paid successfully"),this.loadBookingsFromBackend()}catch{this.showToast("Failed to update payment status")}finally{this.loadingActionId=null,this.closeMarkAsPaidRestrictionModal()}})}closeMarkAsPaidRestrictionModal(){this.loadingActionId||this.isSubmittingBooking||(this.showMarkAsPaidRestrictionModal=!1,this.pendingMarkAsPaidBookingId=null)}openDeclineModal(t){this.pendingDeclineId=t,this.declineReason="",this.showDeclineModal=!0}confirmDecline(){return ue(this,null,function*(){if(!this.pendingDeclineId||!this.declineReason.trim()){this.showToast("Please provide a reason for declining");return}try{this.loadingActionId=this.pendingDeclineId;let e=this.paginatedBookings.find(v=>v.id===this.pendingDeclineId);if(!e)return;let i=JSON.parse(localStorage.getItem("pickle_admin_details")||"{}"),t=e,{receiptUrls:o,paymentProofUrl:s}=t,m=da(t,["receiptUrls","paymentProofUrl"]),f=Ye(ze({},m),{status:"Declined",notes:this.declineReason,lastUpdatedBy:i.username||""});yield this.apiService.updateBooking(this.pendingDeclineId,f).toPromise(),this.showToast("Booking declined successfully"),this.loadBookingsFromBackend()}catch{this.showToast("Failed to decline booking")}finally{this.loadingActionId=null,this.closeDeclineModal()}})}closeDeclineModal(){this.loadingActionId||(this.showDeclineModal=!1,this.pendingDeclineId=null,this.declineReason="")}openViewDetailsModal(t){this.selectedBooking=this.paginatedBookings.find(e=>e.id===t)||null,this.showViewDetailsModal=!0}closeViewDetailsModal(){this.showViewDetailsModal=!1,this.selectedBooking=null}downloadFilteredBookings(){return ue(this,null,function*(){if(this.totalElements===0){this.showToast("No bookings to extract.");return}let t;try{let m=yield po(this.apiService.getBookingsPaginated({page:0,size:1e4,date:this.filters.date||void 0,time:this.filters.time||void 0,type:this.filters.type||void 0,status:this.filters.status||void 0,search:this.searchTerm||void 0,pendingWithReceipts:this.showPendingPaymentWithReceipts||void 0,sortBy:this.currentSort.key||"bookingDateTime",sortDir:this.currentSort.key&&this.currentSort.ascending?"asc":"desc"}));t=this.parseBookingReceipts(m.content)}catch{this.showToast("Failed to fetch bookings for export.");return}let e=[["Created","Last Updated","Date","Time","Court","Name","Type","Status","Contact","Email","Remarks"]];t.forEach(m=>{let f=this.getTimeDisplay(m);e.push([this.formatDateTime(m.bookingDateTime||m.createdAt),m.lastUpdatedAt||m.updatedAt?this.formatDateTime(m.lastUpdatedAt||m.updatedAt):"Not modified",m.date,f,m.court,m.name,m.type,m.status,m.contact,m.email,m.notes||""])});let i=e.map(m=>m.map(f=>`"${f}"`).join(",")).join(` 66`),o=new Blob([i],{type:"text/csv;charset=utf-8;"}),s=document.createElement("a");s.setAttribute("href",URL.createObjectURL(o)),s.setAttribute("download","filtered_bookings.csv"),s.style.display="none",document.body.appendChild(s),s.click(),document.body.removeChild(s)})}fetchConflicts(t,e,i,o,s){return ue(this,null,function*(){try{let m=yield po(this.apiService.getBookingsPaginated({date:t,size:200,page:0}));return this.findConflicts(t,e,i,o,s,m.content)}catch{return[]}})}findConflicts(t,e,i,o,s,m=this.paginatedBookings){return m.filter(f=>{if(f.date!==t||f.court!==i||f.id===s||f.status==="Declined"||f.status==="Cancelled")return!1;let v=this.parseTimeStr(f.startTime||f.time||""),y=f.endTime?this.parseTimeStr(f.endTime):new Date(v.getTime()+60*60*1e3),M=this.parseTimeStr(e),I=new Date(M.getTime()+o*60*60*1e3);return M<y&&I>v})}parseTimeStr(t){let[e,i]=t.split(" "),[o,s]=e.split(":").map(Number);i==="PM"&&o!==12&&(o+=12),i==="AM"&&o===12&&(o=0);let m=new Date;return m.setHours(o,s,0,0),m}formatTimeStr(t){let e=t.getHours(),i=t.getMinutes(),o=e>=12?"PM":"AM";return e>12&&(e-=12),e===0&&(e=12),`${e}:${i.toString().padStart(2,"0")} ${o}`}getTimeDisplay(t){return t.timeDisplay||(t.duration&&t.duration>1?`${t.startTime||t.time} - ${t.endTime}`:t.time||t.startTime||"")}formatDateTime(t){if(!t)return"N/A";let e=new Date(t),i=["January","February","March","April","May","June","July","August","September","October","November","December"],o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Frid
66ay","Saturday"],s=e.getFullYear(),m=i[e.getMonth()],f=e.getDate().toString().padStart(2,"0"),v=o[e.getDay()],y=e.getHours()%12||12,M=e.getMinutes().toString().padStart(2,"0"),I=e.getSeconds().toString().padStart(2,"0"),B=e.getHours()>=12?"PM":"AM";return`${s} ${m} ${f} ${v} ${y}:${M}:${I} ${B}`}formatStatusBadge(t){let e="";switch(t){case"Booking Request Submitted":e="badge booking-request";break;case"Reserved - Pending Payment":e="badge pending-payment";break;case"Reserved - Paid":e="badge reserved-paid";break;case"Declined":e="badge declined";break;case"Cancelled":e="badge cancelled";break;default:e="badge";break}return`<span class="${e}">${t}</span>`}calculateAmount(t){let e=t.duration?parseInt(t.duration.toString()):1;return this.bookingConfigService.BOOKING_RATE*e}showToast(t,e="success"){let i=document.getElementById("toast"),o=document.getElementById("toast-message");i&&o&&(t.includes(` 67`)?o.innerHTML=t.split(` 68`).map(s=>s.trim().replace(/</g,"<").replace(/>/g,">")).join("<br>"):o.textContent=t,i.className="toast",i.classList.add(e),setTimeout(()=>{i.classList.add("show")},10),e!=="error"&&setTimeout(()=>{this.hideToast()},5e3))}describeUploadError(t){return t?.error?.description?t.error.description:t?.status===0?"Could not reach the server. Check your connection and try again. (error 0)":t?.status===4
6813?"Your receipt files are too large. Please upload fewer images at a time. (error 413)":`${t?.message||"Please try again."}${t?.status?` (error ${t.status})`:""}`}hideToast(){let t=document.getElementById("toast");t&&t.classList.remove("show")}onFileSelected(t){return ue(this,null,function*(){let e=t.target.files;if(e&&e.length>0)try{this.selectedFiles=yield Dr(Array.from(e))}catch{this.selectedFiles=[],this.showToast("Could not read the selected photo. Please select it again.","error")}})}uploadReceipts(){return ue(this,null,function*(){if(!this.selectedBooking||!this.selectedBooking.id){this.showToast("No booking selected","error");return}if(this.selectedFiles.length===0){this.showToast("Please select at least one file","warning");return}if(this.selectedFiles.filter(i=>!i.type.startsWith("image/")).length>0){this.showToast("Only image files are allowed","error");return}let e=ba(this.selectedFiles);if(e){this.showToast(e,"error");return}try{this.isUploadingReceipts=!0,this.uploadProgress=0;let i=new FormData;this.selectedFiles.forEach(s=>{i.append("files",s)});let o=yield this.apiService.uploadReceipts(this.selectedBooking.id,i).toPromise();if(o&&o.result==="success"){yield this.loadBookingsFromBackend(),this.showToast(`Successfully uploaded ${o.count} receipt(s)`,"success"),this.isUploadingReceipts=!1,this.uploadProgress=0,this.selectedFiles=[];let s=document.getElementById("receipt-upload-input");s&&(s.value=""),this.closeReceiptUploadModal()}else this.isUploadingReceipts=!1,this.uploadProgress=0,this.showToast("Failed to upload receipts","error")}catch(i){this.isUploadingReceipts=!1,this.uploadProgress=0,this.showToast("Failed to upload receipts: "+this.describeUploadError(i),"error")}})}removeSelectedFile(t){this.selectedFiles.splice(t,1)}openReceiptUrl(t){this.allReceiptUrls=this.selectedBooking?.receiptUrls||[],this.currentReceiptIndex=this.allReceiptUrls.indexOf(t),this.currentReceiptIndex===-1&&(this.currentReceiptIndex=0),this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1;let i=this.parseReceiptMetadata(t)?.url||t;this.currentReceiptUrl=this.convertGoogleDriveUrl(i),this.showReceiptViewerModal=!0}closeReceiptViewer(){this.showReceiptViewerModal=!1,this.currentReceiptUrl="",this.currentReceiptIndex=0,this.allReceiptUrls=[],this.isLoadingReceipt=!1,this.receiptLoadError=!1,this.imageZoom=1}nextReceipt(){this.currentReceiptIndex<this.allReceiptUrls.length-1&&(this.currentReceiptIndex++,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}previousReceipt(){this.currentReceiptIndex>0&&(this.currentReceiptIndex--,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}canNavigatePrevious(){return this.currentReceiptIndex>0}canNavigateNext(){return this.currentReceiptIndex<this.allReceiptUrls.length-1}onReceiptImageLoad(){this.isLoadingReceipt=!1,this.receiptLoadError=!1}onReceiptImageError(){this.isLoadingReceipt=!1,this.receiptLoadError=!0,
68console.error("Failed to load receipt image from URL:",this.currentReceiptUrl),console.log("Original URL:",this.allReceiptUrls[this.currentReceiptIndex])}zoomIn(){this.imageZoom<3&&(this.imageZoom+=.25)}zoomOut(){this.imageZoom>.5&&(this.imageZoom-=.25)}resetZoom(){this.imageZoom=1}convertGoogleDriveUrl(t){console.log("Converting URL:",t);let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);if(e){let i=this.apiService.getReceiptImageUrl(e);return console.log("Using backend URL:",i),i}return console.log("Could not extract file ID, using original URL"),t}openReceiptInNewTab(){this.currentReceiptIndex>=0&&this.currentReceiptIndex<this.allReceiptUrls.length&&window.open(this.allReceiptUrls[this.currentReceiptIndex],"_blank")}downloadReceipt(){if(this.currentReceiptIndex>=0&&this.currentReceiptIndex<this.allReceiptUrls.length){let t=document.createElement("a");t.href=this.currentReceiptUrl,t.download=`receipt_${this.currentReceiptIndex+1}.jpg`,t.target="_blank",t.setAttribute("download",`receipt_${this.currentReceiptIndex+1}.jpg`),document.body.appendChild(t),t.click(),document.body.removeChild(t)}}hasReceipts(){return!!this.selectedBooking?.receiptUrls&&this.selectedBooking.receiptUrls.length>0}getReceiptUrls(){return this.selectedBooking?.receiptUrls||[]}openReceiptUploadModal(t){this.selectedBooking=this.paginatedBookings.find(e=>e.id===t)||null,this.selectedBooking&&(this.showReceiptUploadModal=!0,this.selectedFiles=[])}closeReceiptUploadModal(){if(this.isUploadingReceipts)return;this.showReceiptUploadModal=!1,this.selectedBooking=null,this.selectedFiles=[];let t=document.getElementById("receipt-upload-input");t&&(t.value="")}
68getReceiptCount(t){return t.receiptUrls?.length||0}formatFileSize(t){return xa(t)}totalReceiptBytes(){return va(this.selectedFiles)}openBookingDetailsModal(){this.showBookingDetailsModal=!0}closeBookingDetailsModal(){this.showBookingDetailsModal=!1}parseReceiptMetadata(t){try{if(typeof t=="object"&&t!==null&&t.url)return t;if(typeof t=="string")try{return JSON.parse(t)}catch{let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);return{url:t,fileId:e||"unknown",fileName:"receipt.jpg",uploadedAt:""}}return null}catch(e){return console.error("Error parsing receipt metadata:",e),null}}getReceiptMetadata(t){return!t.receiptUrls||t.receiptUrls.length===0?[]:t.receiptUrls.map(e=>this.parseReceiptMetadata(e)).filter(e=>e!==null)}getFormattedUploadDate(t){if(!t)return"N/A";try{return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}catch{return"N/A"}}deleteReceipt(t,e){e.stopPropagation(),this.pendingDeleteReceipt=t,this.showDeleteReceiptModal=!0}confirmDeleteReceipt(){return ue(this,null,function*(){if(!this.pendingDeleteReceipt||!this.selectedBooking)return;this.isLoading=!0;let t=this.pendingDeleteReceipt,e=this.selectedBooking.id;try{yield this.apiService.deleteReceipt(e,t.fileId).toPromise(),yield this.loadBookingsFromBackend(),this.selectedBooking=this.paginatedBookings.find(i=>i.id===e)||null,this.showToast("Receipt deleted successfully","success"),this.closeDeleteReceiptModal()}catch(i){console.error("Error deleting receipt:",i),this.showToast("Failed to delete receipt: "+(i.error?.message||"Unknown error"),"error")}finally{this.isLoading=!1}})}closeDeleteReceiptModal(){this.showDeleteReceiptModal=!1,this.pendingDeleteReceipt=null}getPaymentDeadlineCountdown(t){if(t.status!=="Reserved - Pending Payment")return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};if(t.receiptUrls&&t.receiptUrls.length>0)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};if(!t.bookingDateTime)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};let i=new Date(t.bookingDateTime),o=new Date(2025,11,16);if(i<o)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};let s=new Date,m=60*60*1e3,v=new Date(i.getTime()+m).getTime()-s.getTime();if(v<=0)return{text:"EXPIRED",timeText:"\u23F0 EXPIRED - Auto-cancelling",cssClass:"countdown-expired",isExpired:!0,percentage:0};let y=Math.round(v/m*100),M=Math.floor(v/6e4),I=Math.floor(v%6e4/1e3),B="",N="";return M>=30?(B=`${M}m ${I}s left`,N="countdown-safe"):M>=15?(B=`\u26A0\uFE0F ${M}m ${I}s left`,N="countdown-warning"):(B=`\u{1F6A8} ${M}m ${I}s left`,N="countdown-critical"),{text:`${M}m ${I}s`,timeText:B,cssClass:N,isExpired:!1,percentage:y}}shouldShowCountdown(t){return this.getPaymentDeadlineCountdown(t).text!==""}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(it),ae(je),ae(Yo))};static \u0275cmp=We({type:n,selectors:[["app-manage"]],decls:415,vars:107,consts:[["id","manage-content"],[1,"calendar-container"],[1,"filter-panel"],["type","date",1,"filter-field",3,"ngModelChange","change","ngModel"],[1,"filter-field",3,"ngModelChange","change","ngModel"],["value",""],["value","8:00 AM"],["value","9:00 AM"],["value","10:00 AM"],["value","11:00 AM"],["value","12:00 PM"],["value","1:00 PM"],["value","2:00 PM"],["value","3:00 PM"],["value","4:00 PM"],["value","5:00 PM"],["value","6:00 PM"],["value","7:00 PM"],["value","8:00 PM"],["value","9:00 PM"],["value","10:00 PM"],["value","rental"],["value","coaching"],["value","Booking Request Submitted"],["value","Reserved - Pending Payment"],["value","Reserved - Paid"],["value","Declined"],["type","text","placeholder","Search bookings...",1,"filter-field",3,"ngModelChange","input","ngModel"],["type","button","title","Show only Pending Payment bookings with receipts attached (sorted by booking date)",1,"action-btn","special-filter",3,"click"],[1,"bi","bi-funnel-fill"],["class","badge-count",4,"ngIf"],["type","button",1,"action-btn",3,"click"],["type","button",1,"action-btn","edit",3,"click"],[2,"text-align","right"],[1,"add-booking-btn",3,"click","disabled"],[2,"width","100%","margin-top","20px","table-layout","fixed","word-wrap","break-word"],[3,"click"],[2,"text-align","center"],["class","booking-row","style","cursor: pointer;",3,"click",4,"ngFor","ngForOf"],[4,"ngIf"],["id","pagination-controls","style","margin: 16px 0; text-align: center;",4,"ngIf"],["id","toast-container",1,"toast-container"],["id","toast",1,"toast"],["id","toast-message"],["id","toast-close",1,"toast-close",3,"click"],["id","add-booking-overlay"],[1,"spinner"],[1,"loading-text"],["id","booking-modal",1,"modal-overlay"],[1,"modal-content"],["id","modal-title"],[3,"ngSubmit","formGroup"],[1,"form-group"],["for","booking-date"],["type","date","id","booking-date","formControlName","date","required","",1,"modal-field",3,"change"],["for","start-time"],["id","start-time","formControlName","startTime","required","",1,"modal-field",3,"change"],["for","duration"],["id","duration","formControlName","duration","required","",1,"modal-field",3,"change"],["value","1"],["value","2"],["value","3"],["value","4"],["value","5"],["id","admin-time-range-display",1,"time-range-display"],["type","text","disabled","",1,"modal-field","amount-display",3,"value"],["for","type"],["id","type","formControlName","type","required","",1,"modal-field",3,"change"],["for","court"],["id","court","formControlName","court","required","",1,"modal-field"],[3,"value",4,"ngFor","ngForOf"],["for","admin-booking-coach"],["id","admin-booking-coach","formControlName","coachName",1,"modal-field"],["class","coach-rate-hint",4,"ngIf"],["for","admin-total-person"],["type","number","id","admin-total-person","formControlName","totalPersonPlaying","min","1","max","20","required","","placeholder","Enter number of players",1,"modal-field"],["for","name"],["type","text","id","name","formControlName","name","required","",1,"modal-field"],["for","contact"],["type","text","id","contact","formControlName","contact","required","",1,"modal-field"],["for","email"],["type","email","id","email","formControlName","email","required","",1,"modal-field"],["for","status"],["id","status","formControlName","status","required","",1,"modal-field"],["value","Cancelled"],["for","notes"],["id","notes","formControlName","notes","rows","3","placeholder","Any additional info...",1,"modal-field"],[1,"modal-actions"],["type","submit",3,"disabled"],[1,"button-spinner"],["type","button",3,"click","disabled"],["id","confirm-modal",1,"modal-overlay"],[1,"modal-content","confirm-style"],[1,"bi","bi-exclamation-triangle"],[1,"action-btn","delete",3,"click"],[1,"action-btn","edit",3,"click"],["id","save-modal",1,"modal-overlay"],[1,"bi","bi-save"],[1,"action-btn","edit",3,"click","disabled"],[1,"button-text"],[1,"action-btn","delete",3,"click","disabled"],["id","decline-modal",1,"modal-overlay"],[1,"bi","bi-x-circle"],["rows","3","required","","placeholder","Enter decline reason...",3,"ngModelChange","ngModel"],[1,"action-btn","delete","button",3,"click","disabled"],["id","receipt-upload-modal",1,"modal-overlay"],[1,"modal-content","receipt-modal"],[1,"receipt-modal-header"],[1,"receipt-modal-icon"],[1,"bi","bi-cloud-upload-fill"],["class","receipt-modal-subtitle",4,"ngIf"],["class","receipt-modal-body",4,"ngIf"],["class","upload-overlay",4,"ngIf"],[1,"receipt-modal-footer"],["type","button",1,"modal-btn","secondary",3,"click","disabled"],["type","button",1,"modal-btn","primary",3,"click","disabled"],[1,"bi","bi-cloud-upload"],[1,"app-version-label"],["id","receipt-viewer-modal",1,"modal-overlay","receipt-viewer-overlay",3,"click"],[1,"receipt-viewer-modal",3,"click"],[1,"receipt-viewer-header"],[1,"receipt-viewer-info"],[1,"bi","bi-file-earmark-image"],["class","receipt-viewer-zoom-level",4,"ngIf"],[1,"receipt-viewer-control
68s"],["class","zoom-controls",4,"ngIf"],["title","Close",1,"receipt-viewer-close",3,"click"],[1,"bi","bi-x-lg"],[1,"receipt-viewer-body"],["title","Previous Receipt",1,"receipt-nav-btn","receipt-nav-prev",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"receipt-image-container"],["class","receipt-loading",4,"ngIf"],["class","receipt-error",4,"ngIf"],["class","receipt-image-wrapper",3,"display",4,"ngIf"],["title","Next Receipt",1,"receipt-nav-btn","receipt-nav-next",3,"click","disabled"],[1,"bi","bi-chevron-right"],[1,"receipt-viewer-footer"],["title","View Booking Details",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-info-circle"],["class","receipt-viewer-action-btn secondary","title","Download Receipt",3,"click",4,"ngIf"],[1,"receipt-viewer-action-btn","primary",3,"click"],["id","booking-details-modal",1,"modal-overlay",3,"click"],["class","modal-content booking-details-modal",3,"click",4,"ngIf"],["id","delete-receipt-modal",1,"modal-overlay"],[1,"delete-receipt-warning"],["id","mark-as-paid-restriction-modal",1,"modal-overlay"],[1,"modal-content","confirm-style",2,"max-width","550px"],[1,"restriction-icon"],[1,"bi","bi-exclamation-triangle-fill"],[2,"text-align","center","margin-bottom","16px"],[1,"restriction-warning-box"],[1,"restriction-warning-text"],[1,"restriction-recommendation"],[1,"restriction-steps-label"],[1,"restriction-steps"],[1,"restriction-proceed-text"],[1,"action-btn","edit","button",3,"click","disabled"],[1,"bi","bi-check-circle"],["id","view-details-modal",1,"modal-overlay"],[1,"bi","bi-search"],["class","details-container",4,"ngIf"],["id","loading-overlay"],["id","booking-overlay"],[1,"badge-count"],[1,"booking-row",2,"cursor","pointer",3,"click"],["data-label","Created",2,"width","15%"],["data-label","Last Updated",2,"width","15%"],["data-label","Date",2,"width","8%"],["data-label","Time",2,"width","10%"],["data-label","Court",2,"width","8%"],["data-label","Total Person Playing",2,"width","8%"],["data-label","Name",2,"width","12%"],["data-label","Type",2,"width","8%"],["data-label","Status",2,"width","12%",3,"innerHTML"],["data-label","Remarks",2,"width","10%"],["data-label","Receipts",2,"width","10%","text-align","center",3,"click"],[2,"display","flex","flex-direction","column","align-items","center","gap","8px"],["class","receipt-timer-container",4,"ngIf"],[1,"receipt-btn",3,"click","title"],[1,"bi",3,"ngClass"],["class","receipt-count",4,"ngIf"],["data-label","Actions",2,"width","8%","text-align","right",3,"click"],["title","Edit Booking",1,"icon-btn","edit",3,"click"],[1,"bi","bi-pencil"],["title","Delete Booking",1,"icon-btn","delete",3,"click"],[1,"bi","bi-trash"],["data-label","Admin Actions",2,"width","8%","text-align","right",3,"click"],["class","action-btn edit button","title","Approve",3,"disabled","click",4,"ngIf"],["class","action-btn delete button","title","Decline","style","margin-top: 8px;",3,"disabled","click",4,"ngIf"],["class","action-btn edit button",3,"disabled","click",4,"ngIf"],[1,"receipt-timer-container"],[1,"timer-label"],[1,"bi","bi-clock-fill"],[1,"progress-bar-container"],[1,"progress-bar-bg"],[1,"progress-text"],[1,"receipt-count"],["title","Approve",1,"action-btn","edit","button",3,"click","disabled"],[1,"bi","bi-check-lg"],["title","Decline",1,"action-btn","delete","button",2,"margin-top","8px",3,"click","disabled"],["colspan","13",2,"text-align","center"],["id","pagination-controls",2,"margin","16px 0","text-align","center"],[1,"pagination-btn","nav-btn",3,"click","disabled"],["class","pagination-btn page-btn",3,"active","disabled","click",4,"ngFor","ngForOf"],[1,"pagination-btn","page-btn",3,"click","disabled"],[3,"value"],[1,"coach-rate-hint"],[1,"receipt-modal-subtitle"],[1,"receipt-modal-body"],["class","receipt-section existing-receipts-section",4,"ngIf"],[1,"receipt-section","upload-section"],[1,"section-header"],[1,"bi","bi-plus-circle"],[1,"upload-zone"],[1,"upload-zone-icon"],[1,"bi","bi-cloud-arrow-up"],[1,"upload-zone-text"],[1,"upload-zone-subtext"],["for","receipt-upload-input",1,"upload-zone-button"],[1,"bi","bi-folder2-open"],["type","file","id","receipt-upload-input","accept","image/*","multiple","",2,"display","none",3,"change","disabled"],["class","selected-files-section",4,"ngIf"],[1,"receipt-section","existing-receipts-section"],[1,"bi","bi-file-earmark-check"],[1,"receipts-list"],["class","receipt-item",4,"ngFor","ngForOf"],[1,"receipt-item"],[1,"receipt-item-icon"],[1,"bi","bi-file-earmark-image-fill"],[1,"receipt-item-content"],[1,"receipt-item-title"],[1,"receipt-item-date"],[1,"bi","bi-clock"],[1,"receipt-item-actions"],["type","button","title","View Receipt",1,"receipt-action-btn","view",3,"click"],[1,"bi","bi-eye-fill"],["type","button","title","Delete Receipt",1,"receipt-action-btn","delete",3,"click"],[1,"bi","bi-trash-fill"],[1,"selected-files-section"],[1,"selected-files-header"],[1,"bi","bi-images"],[1,"selected-files-size"],[1,"selected-files-list"],["class","selected-file-item",4,"ngFor","ngForOf"],[1,"selected-file-item"],[1,"file-item-icon"],[1,"file-item-info"],[1,"file-item-name"],[1,"file-item-size"],["type","button","title","Remove file",1,"file-item-remove",3,"click","disabled"],[1,"upload-overlay"],[1,"upload-overlay-content"],[1,"spinner-large"],[1,"upload-overlay-text"],[1,"upload-overlay-subtext"],[1,"receipt-viewer-zoom-level"],[1,"zoom-control
68s"],["title","Zoom Out",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-dash-circle"],["title","Reset Zoom",1,"zoom-btn",3,"click"],[1,"bi","bi-arrow-clockwise"],["title","Zoom In",1,"zoom-btn",3,"click","disabled"],[1,"receipt-loading"],[1,"receipt-error"],[1,"error-url"],[1,"receipt-image-wrapper"],[1,"receipt-image",3,"load","error","dblclick","src","alt"],["title","Download Receipt",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-download"],[1,"modal-content","booking-details-modal",3,"click"],[1,"booking-details-modal-header"],[1,"booking-details-title"],[1,"bi","bi-info-circle-fill"],["title","Close",1,"modal-close-btn",3,"click"],[1,"booking-details-modal-body"],[1,"booking-detail-item"],[1,"booking-detail-label"],[1,"booking-detail-value","highlight"],[1,"booking-detail-value"],["class","booking-detail-item",4,"ngIf"],[1,"booking-detail-value","status",3,"ngClass"],[1,"booking-details-modal-footer"],[1,"modal-btn","primary",3,"click"],[1,"details-container"],[1,"detail-group"],["class","detail-group",4,"ngIf"],[3,"innerHTML"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"h2"),l(3,"Manage Bookings"),a(),r(4,"div",2)(5,"input",3),pe("ngModelChange",function(s){return de(i.filters.date,s)||(i.filters.date=s),s}),S("change",function(){return i.applyFilters()}),a(),r(6,"select",4),pe("ngModelChange",function(s){return de(i.filters.time,s)||(i.filters.time=s),s}),S("change",function(){return i.applyFilters()}),r(7,"option",5),l(8,"All Times"),a(),r(9,"option",6),l(10,"8:00 AM"),a(),r(11,"option",7),l(12,"9:00 AM"),a(),r(13,"option",8),l(14,"10:00 AM"),a(),r(15,"option",9),l(16,"11:00 AM"),a(),r(17,"option",10),l(18,"12:00 PM"),a(),r(19,"option",11),l(20,"1:00 PM"),a(),r(21,"option",12),l(22,"2:00 PM"),a(),r(23,"option",13),l(24,"3:00 PM"),a(),r(25,"option",14),l(26,"4:00 PM"),a(),r(27,"option",15),l(28,"5:00 PM"),a(),r(29,"option",16),l(30,"6:00 PM"),a(),r(31,"option",17),l(32,"7:00 PM"),a(),r(33,"option",18),l(34,"8:00 PM"),a(),r(35,"option",19),l(36,"9:00 PM"),a(),r(37,"option",20),l(38,"10:00 PM"),a()(),r(39,"select",4),pe("ngModelChange",function(s){return de(i.filters.type,s)||(i.filters.type=s),s}),S("change",function(){return i.applyFilters()}),r(40,"option",5),l(41,"All Types"),a(),r(42,"option",21),l(43,"Rental"),a(),r(44,"option",22),l(45,"Coaching"),a()(),r(46,"select",4),pe("ngModelChange",function(s){return de(i.filters.status,s)||(i.filters.status=s),s}),S("change",function(){return i.applyFilters()}),r(47,"option",5),l(48,"All Statuses"),a(),r(49,"option",23),l(50,"Booking Request Submitted"),a(),r(51,"option",24),l(52,"Reserved - Pending Payment"),a(),r(53,"option",25),l(54,"Reserved - Paid"),a(),r(55,"option",26),l(56,"Declined"),a()(),r(57,"input",27),pe("ngModelChange",function(s){return de(i.searchTerm,s)||(i.searchTerm=s),s}),S("input",function(){return i.onSearchInput()}),a(),r(58,"button",28),S("click",function(){return i.togglePendingWithReceipts()}),w(59,"i",29),l(60),A(61,dC,2,1,"span",30),a(),r(62,"button",31),S("click",function(){return i.clearFilters()}),l(63,"Clear Filters"),a(),r(64,"button",32),S("click",function(){return i.downloadFilteredBookings()}),l(65,"Extract Bookings"),a()(),r(66,"div",33)(67,"button",34),S("click",function(){return i.openModal()}),l(68,"+ Add Booking"),a()(),r(69,"table",35)(70,"thead")(71,"tr")(72,"th",36),S("click",function(){return i.sortTable("bookingDateTime")}),l(73,"Created"),a(),r(74,"th",36),S("click",function(){return i.sortTable("lastUpdatedAt")}),l(75,"Last Updated"),a(),r(76,"th",36),S("click",function(){return i.sortTable("date")}),l(77,"Date"),a(),r(78,"th",36),S("click",function(){return i.sortTable("time")}),l(79,"Time"),a(),r(80,"th",36),S("click",function(){return i.sortTable("court")}),l(81,"Court"),a(),r(82,"th",36),S("click",function(){return i.sortTable("totalPersonPlaying")}),l(83,"Total Person Playing"),a(),r(84,"th",36),S("click",function(){return i.sortTable("name")}),l(85,"Name"),a(),r(86,"th",36),S("click",function(){return i.sortTable("type")}),l(87,"Type"),a(),r(88,"th",36),S("click",function(){return i.sortTable("status")}),l(89,"Status"),a(),r(90,"th",36),S("click",function(){return i.sortTable("status")}),l(91,"Remarks"),a(),r(92,"th",37),l(93,"Receipts"),a(),r(94,"th",37),l(95,"Actions"),a(),r(96,"th",37),l(97,"Admin Actions"),a()()(),r(98,"tbody"),A(99,hC,36,19,"tr",38)(100,_C,3,0,"tr",39),a()(),A(101,v
68C,6,3,"div",40),a()(),r(102,"div",41)(103,"div",42),w(104,"span",43),r(105,"button",44),S("click",function(){return i.hideToast()}),l(106,"\xD7"),a()()(),r(107,"div",45),w(108,"div",46),r(109,"div",47),l(110,"Loading bookings..."),a()(),r(111,"div",48)(112,"div",49)(113,"h3",50),l(114),a(),r(115,"form",51),S("ngSubmit",function(){return i.onBookingSubmit()}),r(116,"div",52)(117,"label",53),l(118,"Date (within next 30 days)"),a(),r(119,"input",54),S("change",function(s){return i.validateBookingDate(s)}),a()(),r(120,"div",52)(121,"label",55),l(122,"Start Time"),a(),r(123,"select",56),S("change",function(){return i.updateAdminTimeDisplay()}),r(124,"option",5),l(125,"Select start time"),a(),r(126,"option",6),l(127,"8:00 AM"),a(),r(128,"option",7),l(129,"9:00 AM"),a(),r(130,"option",8),l(131,"10:00 AM"),a(),r(132,"option",9),l(133,"11:00 AM"),a(),r(134,"option",10),l(135,"12:00 PM"),a(),r(136,"option",11),l(137,"1:00 PM"),a(),r(138,"option",12),l(139,"2:00 PM"),a(),r(140,"option",13),l(141,"3:00 PM"),a(),r(142,"option",14),l(143,"4:00 PM"),a(),r(144,"option",15),l(145,"5:00 PM"),a(),r(146,"option",16),l(147,"6:00 PM"),a(),r(148,"option",17),l(149,"7:00 PM"),a(),r(150,"option",18),l(151,"8:00 PM"),a(),r(152,"option",19),l(153,"9:00 PM"),a(),r(154,"option",20),l(155,"10:00 PM"),a()()(),r(156,"div",52)(157,"label",57),l(158,"Duration (Hours)"),a(),r(159,"select",58),S("change",function(){return i.updateAdminTimeDisplay(),i.updateAdminAmountPayable()}),r(160,"option",59),l(161,"1 Hour"),a(),r(162,"option",60),l(163,"2 Hours"),a(),r(164,"option",61),l(165,"3 Hours"),a(),r(166,"option",62),l(167,"4 Hours"),a(),r(168,"option",63),l(169,"5 Hours"),a()()(),r(170,"div",52)(171,"label"),l(172,"Booking Time Range"),a(),r(173,"div",64),l(174),a()(),r(175,"div",52)(176,"label"),l(177,"Total Amount Payable"),a(),w(178,"input",65),a(),r(179,"div",52)(180,"label",66),l(181,"Booking Type"),a(),r(182,"select",67),S("change",function(){return i.updateAdminAmountPayable(),i.toggleCoachField()}),r(183,"option",21),l(184,"Rental"),a(),r(185,"option",22),l(186,"Coaching"),a()()(),r(187,"div",52)(188,"label",68),l(189,"Court"),a(),r(190,"select",69)(191,"option",5),l(192,"Select court"),a(),A(193,bC,2,3,"option",70),a()(),r(194,"div",52)(195,"label",71),l(196,"Coach Name"),a(),r(197,"select",72)(198,"option",5),l(199,"Select Coach"),a(),A(200,yC,2,3,"option",70),a(),A(201,CC,2,1,"small",73),a(),r(202,"div",52)(203,"label",74),l(204,"Total Person Playing"),a(),w(205,"input",75),a(),r(206,"div",52)(207,"label",76),l(208,"Full Name"),a(),w(209,"input",77),a(),r(210,"div",52)(211,"label",78),l(212,"Contact Number"),a(),w(213,"input",79),a(),r(214,"div",52)(215,"label",80),l(216,"Email Address"),a(),w(217,"input",81),a(),r(218,"div",52)(219,"label",82),l(220,"Status"),a(),r(221,"select",83)(222,"option",23),l(223,"Booking Request Submitted"),a(),r(224,"option",24),l(225,"Reserved - Pending Payment"),a(),r(226,"option",25),l(227,"Reserved - Paid"),a(),r(228,"option",26),l(229,"Declined"),a(),r(230,"option",84),l(231,"Cancelled"),a()()(),r(232,"div",52)(233,"label",85),l(234,"Remarks"),a(),w(235,"textarea",86),a(),r(236,"div",87)(237,"button",88)(238,"span"),l(239),a(),w(240,"span",89),a(),r(241,"button",90),S("click",function(){return i.closeModal()}),l(242,"Cancel"),a()()()()(),r(243,"div",91)(244,"div",92)(245,"h3"),w(246,"i",93),l(247," Confirm Deletion"),a(),r(248,"p"),l(249,"Are you sure you want to delete this booking?"),a(),r(250,"div",87)(251,"button",94),S("click",function(){return i.confirmDelete()}),l(252,"Yes, Delete"),a(),r(253,"button",95),S("click",function(){return i.closeConfirmModal()}),r(254,"span"),l(255,"Cancel"),a()()()()(),r(256,"div",96)(257,"div",92)(258,"h3"),w(259,"i",97),l(260," Confirm Save"),a(),r(261,"p"),l(262,"Are you sure you want to save this booking?"),a(),r(263,"div",87)(264,"button",98),S("click",function(){return i.confirmSave()}),r(265,"span"),l(266),a(),w(267,"span",89)(268,"span",99),a(),r(269,"button",100),S("click",function(){return i.closeSaveModal()}),l(270,"Cancel"),a()()()(),r(271,"div",101)(272,"div",92)(273,"h3"),w(274,"i",102),l(275," Decline Booking"),a(),r(276,"p"),l(277,"Please provide a reason for declining this booking:"),a(),r(278,"div",52)(279,"textarea",103),pe("ngModelChange",function(s){return de(i.declineReason,s)||(i.declineReason=s),s}),a()(),r(280,"div",87)(281,"button",104),S("click",function(){return i.confirmDecline()}),r(282,"span",99),l(283,"Confirm Decline"),a(),w(284,"span",89),a(),r(285,"button",98),S("click",function(){return i.closeDeclineModal()}),r(286,"span"),l(287,"Cancel"),a()()()()(),r(288,"div",105)(289,"div",106)(290,"div",107)(291,"div",108),w(292,"i",109),a(),r(293,"h3"),l(294,"Upload Payment Receipts"),a(),A(295,wC,5,3,"p",110),a(),A(296,OC,19,3,"div",111)(297,EC,7,0,"div",112),r(298,"div",113)(299,"button",114),S("click",function(){return i.closeReceiptUploadModal()}),w(300,"i",102),l(301," Cancel "),a(),r(302,"button",115),S("click",function(){return i.uploadReceipts()}),w(303,"i",116),l(304),a()(),r(305,"p",117),l(306),a()()(),r(307,"div",118),S("click",function(){return i.closeReceiptViewer()}),r(308,"div",119),S("click",function(s){return s.stopPropagation()}),r(309,"div",120)(310,"div",121)(311,"h3"),w(312,"i",122),l(313),a(),A(314,TC,2,1,"p",123),a(),r(315,"div",124),A(316,IC,7,2,"div",125),r(317,"button",126),S("click",function(){return i.closeReceiptViewer()}),w(318,"i",127),a()()(),r(319,"div",128)(320,"button",129),S("click",function(){return i.previousReceipt()}),w(321,"i",130),a(),r(322,"div",131),A(323,AC,4,0,"div",132)(324,DC,15,1,"div",133)(325,RC,2,7,"div",134),a(),r(326,"button",135),S("click",function(){return i.nextReceipt()}),w(327,"i",136),a()(),r(328,"div",137)(329,"button",138),S("click",function(){return i.openBookingDetailsModal()}),w(330,"i",139),l(331," Booking Details "),a(),A(332,BC,3,0,"button",140),r(333,"button",141),S("click",function(){return i.closeReceiptViewer()}),w(334,"i",102),l(335," Close "),a()()()(),r(336,"div",142),S("click",function(){return i.closeBookingDetailsModal()}),A(337,LC,75,19,"div",143),a(),r(338,"div",144)(339,"div",92)(340,"h3"),w(341,"i",93),l(342," Delete Receipt"),a(),A(343,FC,5,1,"p",39),r(344,"p",145),l(345,"This action cannot be undone. The receipt will be permanently deleted from Google Drive."),a(),r(346,"div",87)(347,"button",100),S("click",function(){return i.confirmDeleteReceipt()}),r(348,"span"),l(349,"Yes, Delete"),a(),w(350,"span",89),a(),r(351,"button",98),S("click",function(){return i.closeDeleteReceiptModal()}),r(352,"span"),l(353,"Cancel"),a()()()()(),r(354,"div",146)(355,"div",147)(356,"div",148),w(357,"i",149),a(),r(358,"h3",150),w(359,"i",93),l(360," No Receipt Attached"),a(),r(361,"div",151)(362,"p",152)(363,"strong"),l(364,"Warning:"),a(),l(365,' You are about to mark this booking as "Reserved - Paid" but there are no payment receipts attached. '),a(),r(366,"div",153)(367,"p")(368,"strong"),l(369,"Recommended:"),a(),l(370," It's best practice to have the payment receipt(s) uploaded before marking a booking as paid for proper record-keeping. "),a()()(),r(371,"p",154)(372,"strong"),l(373,"How to upload receipts:"),a()(),r(374,"ol",155)(375,"li"),l(376,"Click the "),r(377,"strong"),l(378,"receipt icon"),a(),w(379,"i",116),l(380,' in the "Receipts" column for this booking'),a(),r(381,"li"),l(382,"Upload the payment receipt image(s)"),a(),r(383,"li"),l(384,"Then you can mark the booking as paid"),a()(),r(385,"p",156),l(386," Do you want to proceed anyway? "),a(),r(387,"div",87)(388,"button",100),S("click",function(){return i.closeMarkAsPaidRestrictionModal()}),w(389,"i",102),r(390,"span"),l(391,"Cancel"),a()(),r(392,"button",157),S("click",function(){return i.pendingMarkAsPaidBookingId?i.proceedMarkAsPaid(i.pendingMarkAsPaidBookingId):i.proceedConfirmSave()}),r(393,"span",99),w(394,"i",158),r(395,"span"),l(396,"I'm Aware - Proceed"),a()(),w(397,"span",89),a()()()(),r(398,"div",159)(399,"div",49)(400,"h3"),w(401,"i",160),l(402," Booking Details"),a(),A(403,jC,77,17,"div",161),r(404,"div",162),w(405,"div",46),r(406,"div",47),l(407,"Loading bookings..."),a()(),r(408,"div",163),w(409,"div",46),r(410,"div",47),l(411,"Processing booking..."),a()(),r(412,"div",87)(413,"button",31),S("click",function(){return i.closeViewDetailsModal()}),l(414,"Close"),a()()()()),e&2&&(d(5),ce("ngModel",i.filters.date),d(),ce("ngModel",i.filters.time),d(33),ce("ngModel",i.filters.type),d(7),ce("ngModel",i.filters.status),d(11),ce("ngModel",i.searchTerm),d(),te("active",i.showPendingPaymentWithReceipts),d(2),F(" ",i.showPendingPaymentWithReceipts?"Showing":"Show"," Pending + Receipts "),d(),x("ngIf",i.showPendingPaymentWithReceipts&&i.totalElements>0),d(6),x("disabled",i.isLoading),d(32),x("ngForOf",i.paginatedBookings),d(),x("ngIf",i.paginatedBookings.length===0),d(),x("ngIf",i.totalPages>1),d(6),le("display",i.isLoading?"flex":"none"),d(4),le("display",i.showBookingModal?"flex":"none"),d(3),R(i.editingBooking?"Upd
68ate Booking":"Add Booking"),d(),x("formGroup",i.bookingForm),d(59),F(" ",i.timeRangeDisplay," "),d(4),x("value","\u20B1"+i.totalAmount.toLocaleString()),d(15),x("ngForOf",i.availableCourts),d(),le("display",i.showCoachField?"block":"none"),d(6),x("ngForOf",i.coaches),d(),x("ngIf",i.showCoachField&&i.selectedCoachRate),d(36),x("disabled",i.bookingForm.invalid||i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),R(i.editingBooking?"Update":"Save"),d(),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),x("disabled",i.isSubmittingBooking),d(2),le("display",i.showConfirmModal?"flex":"none"),d(13),le("display",i.showSaveModal?"flex":"none"),d(8),x("disabled",i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),R(i.editingBooking?"Yes, Update":"Yes, Save"),d(),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),x("disabled",i.isSubmittingBooking),d(2),le("display",i.showDeclineModal?"flex":"none"),d(8),ce("ngModel",i.declineReason),d(2),x("disabled",i.loadingActionId!==null),d(),le("display",i.loadingActionId?"none":"inline"),d(2),le("display",i.loadingActionId?"inline-block":"none"),d(),x("disabled",i.loadingActionId!==null),d(3),le("display",i.showReceiptUploadModal?"flex":"none"),d(7),x("ngIf",i.selectedBooking),d(),x("ngIf",i.selectedBooking),d(),x("ngIf",i.isUploadingReceipts),d(2),x("disabled",i.isUploadingReceipts),d(3),x("disabled",i.isUploadingReceipts||i.selectedFiles.length===0),d(2),F(" ",i.isUploadingReceipts?"Uploading...":"Upload "+i.selectedFiles.length+" File
68(s)"," "),d(2),F("Version ",i.appVersion,""),d(),le("display",i.showReceiptViewerModal?"flex":"none"),d(6),Se(" Receipt ",i.currentReceiptIndex+1," of ",i.allReceiptUrls.length,""),d(),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(2),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(4),te("disabled",!i.canNavigatePrevious()),x("disabled",!i.canNavigatePrevious()),d(3),x("ngIf",i.isLoadingReceipt),d(),x("ngIf",i.receiptLoadError&&!i.isLoadingReceipt),d(),x("ngIf",!i.receiptLoadError),d(),te("disabled",!i.canNavigateNext()),x("disabled",!i.canNavigateNext()),d(6),x("ngIf",!i.receiptLoadError),d(4),le("display",i.showBookingDetailsModal?"flex":"none"),d(),x("ngIf",i.selectedBooking),d(),le("display",i.showDeleteReceiptModal?"flex":"none"),d(5),x("ngIf",i.pendingDeleteReceipt),d(4),x("disabled",i.isLoading),d(),le("display",i.isLoading?"none":"inline"),d(2),le("display",i.isLoading?"inline-block":"none"),d(),x("disabled",i.isLoading),d(3),le("display",i.showMarkAsPaidRestrictionModal?"flex":"none"),d(34),x("disabled",i.loadingActionId!==null||i.isSubmittingBooking),d(4),x("disabled",i.loadingActionId!==null||i.isSubmittingBooking),d(),le("display",i.loadingActionId!==null||i.isSubmittingBooking?"none":"inline"),d(4),le("display",i.loadingActionId!==null||i.isSubmittingBooking?"inline-block":"none"),d(),le("display",i.showViewDetailsModal?"flex":"none"),d(5),x("ngIf",i.selectedBooking),d(),le("display",i.isLoading?"flex":"none"),d(4),le("display",i.isSubmittingBooking?"flex":"none"))},dependencies:[Ge,cn,rt,$e,bi,Xn,yn,Cn,at,qi,Vn,st,Yn,xi,$i,$o,hi,_i,lt,ut],styles:['.modal-content[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:10px;padding:32px 24 32px 24px;box-shadow:var(--shadow-lg);max-width:30%;width:100%;color:var(--color-text);margin:auto;position:relative;inset:0;transform:none;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.modal-content[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.spinner[_ngcontent-%COMP%]{border:8px solid var(--color-border-light);border-top:8px solid var(--color-accent);border-radius:50%;width:64px;height:64px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin-bottom:16px}.loading-text[_ngcontent-%COMP%]{color:var(--color-text);font-size:16px;font-weight:600;text-align:center;margin-top:16px}.button-spinner[_ngcontent-%COMP%]{border:3px solid var(--color-accent-bg-medium);border-top:3px solid var(--color-text);border-radius:50%;width:18px;height:18px;animation:_ngcontent-%COMP%_spin .8s linear infinite;display:inline-block;vertical-align:middle;margin:0}.button-spinner[_ngcontent-%COMP%], .button-text[_ngcontent-%COMP%]{pointer-events:none}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.button[_ngcontent-%COMP%]:disabled, .action-btn[_ngcontent-%COMP%]:disabled, .add-booking-btn[_ngcontent-%COMP%]:disabled{opacity:.7;cursor:not-allowed}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{opacity:.8;cursor:wait;position:relative}.modal-actions[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled:hover{transform:none}.icon-btn[_ngcontent-%COMP%]{border:none;color:#fff;cursor:pointer;padding:6px 10px;font-size:18px;border-radius:4px;margin:0 2px;vertical-align:middle;display:inline-flex;align-items:center;justify-content:center}.icon-btn.edit[_ngcontent-%COMP%]{background:var(--color-info)}.icon-btn.edit[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-info) 80%,black)}.icon-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger)}.icon-btn.delete[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,black)}.icon-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.icon-btn[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{font-size:18px;margin-right:0;display:inline-block}#loading-overlay[_ngcontent-%COMP%], #add-booking-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:color-mix(in srgb,var(--color-surface) 70%,transparent);z-index:10000;display:flex;align-items:center;justify-content:center;flex-direction:column}#booking-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:color-mix(in srgb,var(--color-surface) 90%,transparent);z-index:10001;display:flex;align-items:center;justify-content:center;flex-direction:column}#pagination-controls[_ngcontent-%COMP%], .pagination-controls[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:10px;margin-top:30px;flex-wrap:wrap}.pagination-btn[_ngcontent-%COMP%]{padding:10px 15px;border:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:6px;cursor:pointer;transition:all .3s ease;font-weight:500}.pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);background:var(--color-accent);color:#fff}.pagination-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.pagination-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.nav-btn[_ngcontent-%COMP%]{font-weight:600}.page-btn[_ngcontent-%COMP%]{min-width:40px}@media (max-width: 768px){#pagination-controls[_ngcontent-%COMP%], .pagination-controls[_ngcontent-%COMP%]{flex-wrap:wrap}.modal-content[_ngcontent-%COMP%]{max-width:100%}}.toast-container[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;left:20px;transform:none;z-index:999999;pointer-events:none;display:flex;justify-content:flex-end}.toast[_ngcontent-%COMP%], .toast-close[_ngcontent-%COMP%]{pointer-events:auto}.toast[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);padding:16px 20px;border-radius:8px;box-shadow:var(--shadow-lg);border-left:4px solid var(--color-accent);display:flex;align-items:center;justify-content:space-between;min-width:280px;max-width:450px;width:auto;transform:translate(500px);opacity:0;transition:all .3s ease-in-out}.toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1}.toast.success[_ngcontent-%COMP%]{border-left-color:var(--color-accent)}.toast.error[_ngcontent-%COMP%]{border-left-color:var(--color-danger)}.toast.warning[_ngcontent-%COMP%]{border-left-color:var(--color-warning)}.toast.info[_ngcontent-%COMP%]{border-left-color:var(--color-info)}@media (max-width: 768px){.toast-container[_ngcontent-%COMP%]{top:10px;right:10px;left:10px}.toast[_ngcontent-%COMP%]{min-width:unset;max-width:100%;width:100%;font-size:14px;padding:14px 16px}}.filter-field[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box;margin-right:8px}.filter-field[_ngcontent-%COMP%], .filter-field[type=date][_ngcontent-%COMP%], .filter-field[type=text][_ngcontent-%COMP%], .filter-field[type=number][_ngcontent-%COMP%], .filter-field[type=email][_ngcontent-%COMP%], .filter-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box}#admin-time-range-display[_ngcontent-%COMP%]{width:305px;min-width:0;max-width:100%;box-sizing:border-box;display:block}.modal-field[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box}.action-btn.special-filter[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent) 0%,var(--color-accent-dark) 100%);color:#fff;border:2px solid transparent;padding:10px 16px;font-weight:600;font-size:14px;transition:all .3s ease;position:relative;display:inline-flex;align-items:center;gap:8px;box-shadow:0 4px 12px var(--color-accent-shadow)}.action-btn.special-filter[_ngcontent-%COMP%]:hover{background:linear-gradient(135deg,var(--color-accent-dark) 0%,var(--color-accent) 100%);box-shadow:0 6px 16px var(--color-accent-shadow-bright);transform:translateY(-2px)}.action-btn.special-filter.active[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent) 0%,var(--color-accent-dark) 100%);border-color:var(--color-accent-bg-medium);box-shadow:0 6px 20px var(--color-accent-shadow);animation:_ngcontent-%COMP%_pulse-glow 2s ease-in-out infinite}.action-btn.special-filter.active[_ngcontent-%COMP%]:hover{background:linear-gradient(135deg,var(--color-accent-dark) 0%,var(--color-accent) 100%);transform:translateY(-2px)}.action-btn.special-filter[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:16px}.action-btn.special-filter[_ngcontent-%COMP%] .badge-count[_ngcontent-%COMP%]{background:#ffffff4d;padding:2px 8px;border-radius:12px;font-size:12px;font-weight:700;margin-left:4px}@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{box-shadow:0 6px 20px var(--color-accent-shadow)}50%{box-shadow:0 8px 30px var(--color-accent-shadow-bright)}}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-secondary);font-size:20px;cursor:pointer;margin-left:15px;padding:0;line-height:1}.toast-close[_ngcontent-%COMP%]:hover{opacity:.7}#toast-message[_ngcontent-%COMP%]{flex:1;font-weight:500}.receipt-timer-container[_ngcontent-%COMP%]{width:100%;padding:8px;background:var(--color-surface-hover);border-radius:8px;border:1px solid var(--color-border)}.timer-label[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:6px;margin-bottom:8px;font-size:11px;font-weight:600;color:var(--color-text);text-transform:uppercase;letter-spacing:.5px}.timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:14px}.progress-bar-container[_ngcontent-%COMP%]{position:relative;width:100%}.progress-bar-bg[_ngcontent-%COMP%]{width:100%;height:24px;background:#0006;border-radius:12px;overflow:hidden;border:1px solid var(--color-border);box-shadow:inset 0 2px 4px #0000004d}.progress-bar-fill[_ngcontent-%COMP%]{height:100%;transition:width .3s ease;position:relative;overflow:hidden}.progress-bar-fill[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#fff0,#ffffff4d,#fff0);animation:_ngcontent-%COMP%_shimmer 2s infinite}.progress-text[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:11px;font-weight:800;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.8);pointer-events:none;z-index:1}.countdown-safe[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-success) 0%,color-mix(in srgb,var(--color-success) 70%,var(--color-accent)) 100%);box-shadow:0 0 10px var(--color-success-shadow)}.countdown-warning[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-warning) 0%,color-mix(in srgb,var(--color-warning) 70%,yellow) 100%);box-shadow:0 0 10px var(--color-warning-shadow-bright);animation:_ngcontent-%COMP%_pulse-glow-warning 1s ease-in-out infinite}.countdown-critical[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-danger) 0%,color-mix(in srgb,var(--color-danger) 80%,black) 100%);
68box-shadow:0 0 15px var(--color-danger-shadow-bright);animation:_ngcontent-%COMP%_pulse-glow-critical .5s ease-in-out infinite}.countdown-expired[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-text-muted) 0%,color-mix(in srgb,var(--color-text-muted) 80%,black) 100%);box-shadow:0 0 5px var(--color-accent-bg-subtle)}.countdown-safe[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-safe[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-success)}.countdown-warning[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-warning[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning);animation:_ngcontent-%COMP%_pulse-icon 1s ease-in-out infinite}.countdown-critical[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-critical[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger);animation:_ngcontent-%COMP%_shake .3s infinite}.countdown-expired[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-expired[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-text-muted)}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes _ngcontent-%COMP%_pulse-glow-warning{0%,to{box-shadow:0 0 10px var(--color-warning-shadow-bright)}50%{box-shadow:0 0 20px var(--color-warning-shadow-bright)}}@keyframes _ngcontent-%COMP%_pulse-glow-critical{0%,to{box-shadow:0 0 15px var(--color-danger-shadow-bright)}50%{box-shadow:0 0 25px var(--color-danger-shadow-bright)}}@keyframes _ngcontent-%COMP%_pulse-icon{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}@keyframes _ngcontent-%COMP%_shake{0%,to{transform:translate(0) rotate(0)}25%{transform:translate(-2px) rotate(-5deg)}75%{transform:translate(2px) rotate(5deg)}}.time-range-display[_ngcontent-%COMP%]{padding:8px;background:var(--color-surface-hover);border-radius:4px;color:var(--color-text)}.amount-display[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text);border-radius:4px;padding:8px;border:none}.restriction-icon[_ngcontent-%COMP%]{text-align:center;margin-bottom:20px}.restriction-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px;color:var(--color-warning)}.restriction-warning-box[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);border:1px solid var(--color-warning);padding:16px;border-radius:8px;margin-bottom:20px}.restriction-warning-text[_ngcontent-%COMP%]{margin:0 0 12px;color:var(--color-text);font-size:15px;line-height:1.6}.restriction-recommendation[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:12px;border-radius:6px;border-left:4px solid var(--color-warning)}.restriction-recommendation[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:14px;line-height:1.6}.restriction-steps-label[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:14px;margin-bottom:20px;line-height:1.6}.restriction-steps[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:14px;margin:0 0 20px 20px;line-height:1.8;text-align:left}.restriction-steps[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.restriction-proceed-text[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:13px;margin-bottom:20px;text-align:center;font-style:italic}.delete-receipt-warning[_ngcontent-%COMP%]{color:var(--color-warning);margin-top:8px}.app-version-label[_ngcontent-%COMP%]{flex-shrink:0;margin:0;padding:0 1.5rem .75rem;text-align:center;font-size:.7rem;opacity:.6}','.receipt-btn[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent) 0%,color-mix(in srgb,var(--color-accent) 70%,var(--color-primary)) 100%);border:none;border-radius:8px;padding:8px 12px;color:#fff;font-size:18px;
68cursor:pointer;transition:all .3s ease;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:4px;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow-bright)}.receipt-btn.has-receipts[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success) 0%,color-mix(in srgb,var(--color-success) 70%,var(--color-accent)) 100%);box-shadow:0 2px 8px var(--color-success-shadow)}.receipt-btn.has-receipts[_ngcontent-%COMP%]:hover{box-shadow:0 4px 12px var(--color-success-shadow-bright)}.receipt-count[_ngcontent-%COMP%]{background:#ffffff4d;border-radius:10px;padding:2px 6px;font-size:11px;font-weight:700;margin-left:4px}.receipt-modal[_ngcontent-%COMP%]{max-width:550px!important;padding:0!important;background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px}.receipt-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:20px 24px;border-radius:10px 10px 0 0;text-align:center}.receipt-modal-icon[_ngcontent-%COMP%]{font-size:40px;margin-bottom:8px;color:#fff}.receipt-modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 6px;font-size:20px;color:#fff;font-weight:600}.receipt-modal-subtitle[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#ffffffe6}.receipt-modal-subtitle[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#fff;font-weight:600}.receipt-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:450px;overflow-y:auto}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-bg-medium);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow)}.receipt-section[_ngcontent-%COMP%]{margin-bottom:24px}.section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid var(--color-border)}.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:18px;color:var(--color-accent)}.section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:15px;color:var(--color-text);font-weight:600}.receipts-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.receipt-item[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:12px 14px;display:flex;align-items:center;gap:12px;transition:all .3s ease}.receipt-item[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow)}.receipt-item-icon[_ngcontent-%COMP%]{font-size:32px;color:var(--color-accent)}.receipt-item-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.receipt-item-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.receipt-item-date[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);display:flex;align-items:center;gap:4px}.receipt-item-date[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.receipt-item-actions[_ngcontent-%COMP%]{display:flex;gap:6px}.receipt-action-btn[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border:1px solid var(--color-accent-shadow);border-radius:6px;padding:8px 10px;color:var(--color-accent);cursor:pointer;transition:all .3s ease;font-size:14px;display:flex;align-items:center;justify-content:center}.receipt-action-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px)}.receipt-action-btn.view[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow);color:var(--color-accent)}.receipt-action-btn.view[_ngcontent-%COMP%]:hover{background:var(--color-accent);color:#fff;box-shadow:0 4px 8px var(--color-accent-shadow)}.receipt-action-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);
68border-color:var(--color-danger-shadow);color:var(--color-danger)}.receipt-action-btn.delete[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff;box-shadow:0 4px 8px var(--color-danger-shadow)}.upload-zone[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:2px dashed var(--color-accent-shadow);border-radius:10px;padding:32px 20px;text-align:center;transition:all .3s ease;cursor:pointer}.upload-zone[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent)}.upload-zone-icon[_ngcontent-%COMP%]{font-size:56px;color:var(--color-accent);margin-bottom:12px}.upload-zone-text[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:var(--color-text);margin:0 0 6px}.upload-zone-subtext[_ngcontent-%COMP%]{font-size:12px;color:var(--color-text-muted);margin:0 0 16px}.upload-zone-button[_ngcontent-%COMP%]{display:inline-block;background:var(--color-accent);color:#fff;padding:10px 20px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:8px}.selected-files-section[_ngcontent-%COMP%]{margin-top:20px;background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:16px}.selected-files-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--color-border);font-size:14px;font-weight:600;color:var(--color-text)}.selected-files-size[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:12px}.selected-files-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.selected-file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:6px;padding:10px 12px;transition:all .2s ease}.selected-file-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-border-light)}.file-item-icon[_ngcontent-%COMP%]{font-size:22px;color:var(--color-accent)}.file-item-info[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:2px}.file-item-name[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-item-size[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted)}.file-item-remove[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border:1px solid var(--color-danger-shadow);border-radius:4px;padding:6px 10px;color:var(--color-danger);cursor:pointer;transition:all .2s ease;font-size:12px}.file-item-remove[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff}.file-item-remove[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.upload-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;background:color-mix(in srgb,var(--color-surface) 98%,transparent);border-radius:10px;display:flex;align-items:center;justify-content:center;z-index:1000}.upload-overlay-content[_ngcontent-%COMP%]{text-align:center}.spinner-large[_ngcontent-%COMP%]{border:6px solid var(--color-border);border-top:6px solid var(--color-accent);border-radius:50%;width:60px;height:60px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto 20px}.upload-overlay-text[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--color-text);margin:0 0 8px}.upload-overlay-subtext[_ngcontent-%COMP%]{font-size:14px;color:var(--color-text-muted);margin:0}.receipt-modal-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;gap:12px;justify-content:flex-end}.modal-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.modal-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.modal-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.modal-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.modal-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.modal-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none!important}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.receipt-viewer-overlay[_ngcontent-%COMP%]{background:#000000f2!important;z-index:10000}.receipt-viewer-modal[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;width:95vw;height:95vh;max-width:1400px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #00000080}.receipt-viewer-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:var(--color-accent);border-bottom:1px solid var(--color-border)}.receipt-viewer-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:22px;color:#fff;font-weight:600;display:flex;align-items:center;gap:10px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#fffc;font-weight:500}
68.receipt-viewer-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.zoom-controls[_ngcontent-%COMP%]{display:flex;gap:6px;background:#ffffff1a;padding:6px;border-radius:8px}.zoom-btn[_ngcontent-%COMP%]{background:#ffffff26;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:8px 12px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:18px;display:flex;align-items:center;justify-content:center}.zoom-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:#ffffff40;transform:scale(1.1)}.zoom-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.receipt-viewer-close[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:8px;padding:10px 14px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:20px;display:flex;align-items:center;justify-content:center}.receipt-viewer-close[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.05)}.receipt-viewer-body[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;padding:0;position:relative;background:#0006;overflow:hidden}.receipt-image-container[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:auto;position:relative;scroll-behavior:smooth}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow-bright)}.receipt-image-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:20px}.receipt-image[_ngcontent-%COMP%]{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:8px;box-shadow:0 10px 40px #00000080;transition:transform .3s ease;transform-origin:center center;cursor:zoom-in;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.receipt-image[style*="scale(1)"][_ngcontent-%COMP%]{cursor:zoom-in}.receipt-image[style*="scale(2)"][_ngcontent-%COMP%], .receipt-image[style*="scale(3)"][_ngcontent-%COMP%]{max-width:none;max-height:none;cursor:zoom-out}.receipt-image-wrapper[_ngcontent-%COMP%]{transition:all .3s ease}.receipt-loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;color:var(--color-text)}.receipt-loading[_ngcontent-%COMP%] .spinner-large[_ngcontent-%COMP%]{border:8px solid var(--color-border);border-top:8px solid var(--color-accent);border-radius:50%;width:80px;height:80px;animation:_ngcontent-%COMP%_spin 1s linear infinite}.receipt-loading[_ngcontent-%COMP%] .loading-text[_ngcontent-%COMP%]{font-size:16px;color:var(--color-text-secondary);font-weight:500}.receipt-error[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--color-text);text-align:center;max-width:600px;padding:40px;background:var(--color-danger-bg-subtle);border:2px solid var(--color-danger-shadow);border-radius:12px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:64px;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:24px;font-weight:600;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.6}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{text-align:left;margin:8px 0;padding-left:24px;font-size:13px;color:var(--color-text-muted)}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:4px 0}.error-url[_ngcontent-%COMP%]{font-size:11px!important;color:var(--color-text-muted)!important;word-break:break-all;background:var(--color-surface-hover);padding:8px 12px;border-radius:6px;font-family:monospace}.retry-btn[_ngcontent-%COMP%]{background:var(--color-accent);border:none;border-radius:6px;padding:10px 20px;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px;margin-top:8px}.retry-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.receipt-nav-btn[_ngcontent-%COMP%]{position:absolute;background:color-mix(in srgb,var(--color-accent) 90%,transparent);border:2px solid rgba(255,255,255,.2);border-radius:50%;width:45px;height:45px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:20px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #0000004d;z-index:10}.receipt-nav-btn[_ngcontent-%COMP%]:hover:not(.disabled){background:var(--color-accent);transform:scale(1.1);box-shadow:0 6px 20px var(--color-accent-shadow-bright)}.receipt-nav-btn.disabled[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-color:var(--color-border);color:var(--color-text-muted);cursor:not-allowed;opacity:.5}.receipt-nav-prev[_ngcontent-%COMP%]{left:20px}.receipt-nav-next[_ngcontent-%COMP%]{right:20px}.receipt-viewer-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);display:flex;gap:12px;justify-content:flex-end}.receipt-viewer-action-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);transform:translateY(-2px)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.booking-details-modal[_ngcontent-%COMP%]{background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px;max-width:500px!important;padding:0!important}.booking-details-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:16px 20px;border-radius:10px 10px 0 0;display:flex;justify-content:space-between;align-items:center}.booking-details-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;color:#fff}.booking-details-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:22px}.booking-details-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;font-weight:600}.modal-close-btn[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:6px;padding:6px 10px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:16px}.modal-close-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.1)}.booking-details-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:500px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle)}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:3px}.booking-detail-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.booking-detail-label[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.5px}.booking-detail-value[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500}.booking-detail-value.highlight[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600;font-size:14px}.booking-detail-value.status[_ngcontent-%COMP%]{display:inline-block;padding:5px 12px;border-radius:4px;font-size:12px;font-weight:600;width:fit-content}.booking-detail-value.status.pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning-shadow)}.booking-detail-value.status.paid[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);color:var(--color-accent);border:1px solid var(--color-accent-shadow)}.booking-detail-value.status.declined[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger);
68border:1px solid var(--color-danger-shadow)}.booking-details-modal-footer[_ngcontent-%COMP%]{padding:16px 20px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;justify-content:center}@media (max-width: 768px){.receipt-viewer-modal[_ngcontent-%COMP%]{width:100vw;height:100vh;max-width:100vw;border-radius:0}.receipt-viewer-header[_ngcontent-%COMP%]{padding:12px 16px;flex-wrap:wrap;gap:8px}.receipt-viewer-info[_ngcontent-%COMP%]{flex:1}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:12px}.zoom-controls[_ngcontent-%COMP%]{padding:4px;gap:4px}.zoom-btn[_ngcontent-%COMP%]{padding:6px 10px;font-size:16px}.receipt-viewer-close[_ngcontent-%COMP%]{padding:8px 12px;font-size:18px}.receipt-viewer-body[_ngcontent-%COMP%]{padding:0}.receipt-image-wrapper[_ngcontent-%COMP%]{padding:10px}.receipt-nav-btn[_ngcontent-%COMP%]{width:36px;height:36px;font-size:16px}.receipt-nav-prev[_ngcontent-%COMP%]{left:8px}.receipt-nav-next[_ngcontent-%COMP%]{right:8px}.receipt-viewer-footer[_ngcontent-%COMP%]{flex-direction:column;padding:12px 16px;gap:8px}.receipt-viewer-action-btn[_ngcontent-%COMP%]{width:100%;justify-content:center;padding:10px 20px;font-size:13px}.receipt-error[_ngcontent-%COMP%]{padding:20px;font-size:13px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 80px);max-height:calc(100vh - 200px)}}@media (max-width: 480px){.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:14px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:11px}.zoom-controls[_ngcontent-%COMP%]{gap:3px}.zoom-btn[_ngcontent-%COMP%]{padding:5px 8px;font-size:14px}.receipt-nav-btn[_ngcontent-%COMP%]{width:32px;height:32px;font-size:14px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 70px)}.booking-details-modal[_ngcontent-%COMP%]{max-width:95vw!important}.booking-details-modal-body[_ngcontent-%COMP%]{max-height:60vh}}']})};function HC(n,t){if(n&1&&(r(0,"div",26)(1,"div",27),w(2,"div",28),r(3,"p",29),l(4),a()()()),n&2){let e=h();d(4),R(e.loadingMessage)}}function WC(n,t){if(n&1&&(r(0,"p",30),l(1),a()),n&2){let e=h();d(),Se(" ",e.getFormattedCourtsText(e.groupToDelete.courts)," \u2014 Every ",e.getFormattedDaysTextLong(e.groupToDelete.days)," ")}}function GC(n,t){if(n&1&&(r(0,"p",7),l(1),a()),n&2){let e=h();d(),F(" This will remove ",e.groupToDelete.entries.length," entries from the database. ")}}function qC(n,t){if(n&1&&(r(0,"p",30),l(1),a()),n&2){let e=h();d(),Se(" ",e.exemptionToDelete.court," \u2014 ",e.exemptionToDelete.date," ")}}function $C(n,t){if(n&1&&(r(0,"p",30),l(1),a()),n&2){let e=h();d(),Se(" ",e.formatTime(e.exemptionToDelete.startTime)," to ",e.formatTime(e.exemptionToDelete.endTime)," ")}}function YC(n,t){if(n&1){let e=L();r(0,"div",63)(1,"input",64),S("change",function(){let o=k(e).$implicit,s=h(2);return O(s.toggleEditCourt(o))}),a(),r(2,"label",65),l(3),a()()}if(n&2){let e=t.$implicit,i=h(2);d(),x("id","edit-court-"+e.toLowerCase().replace(" ","-"))("checked",i.editSelectedCourts.includes(e)),d(),x("for","edit-court-"+e.toLowerCase().replace(" ","-")),d(),R(e)}}function XC(n,t){if(n&1){let e=L();r(0,"div",66)(1,"input",64),S("change",function(){let o=k(e).index,s=h(2);return O(s.toggleEditDay(o))}),a(),r(2,"label",65),l(3),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(2);d(),x("id","edit-day-"+i)("checked",o.editSelectedDays.includes(i)),d(),x("for","edit-day-"+i),d(),R(e)}}function ZC(n,t){if(n&1){let e=L();r(0,"div",31)(1,"h3"),w(2,"i",32),l(3," Edit Recurring Block"),a(),r(4,"div",33)(5,"label"),l(6,"Courts"),a(),r(7,"div",34),A(8,YC,4,4,"div",35),a()(),r(9,"div",36)(10,"div",33)(11,"label",37),l(12,"Start Time"),a(),r(13,"select",38),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editingGroup.startTime,o)||(s.editingGroup.startTime=o),O(o)}),r(14,"option",39),l(15,"8:00 AM"),a(),r(16,"option",40),l(17,"9:00 AM"),a(),r(18,"option",41),l(19,"10:00 AM"),a(),r(20,"option",42),l(21,"11:00 AM"),a(),r(22,"option",43),l(23,"12:00 PM"),a(),r(24,"option",44),l(25,"1:00 PM"),a(),r(26,"option",45),l(27,"2:00 PM"),a(),r(28,"option",46),l(29,"3:00 PM"),a(),r(30,"option",47),l(31,"4:00 PM"),a(),r(32,"option",48),l(33,"5:00 PM"),a(),r(34,"option",49),l(35,"6:00 PM"),a(),r(36,"option",50),l(37,"7:00 PM"),a(),r(38,"option",51),l(39,"8:00 PM"),a(),r(40,"option",52),l(41,"9:00 PM"),a(),r(42,"option",53),l(43,"10:00 PM"),a(),r(44,"option",54),l(45,"11:00 PM"),a()()(),r(46,"div",33)(47,"label",55),l(48,"End Time"),a(),r(49,"select",56),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editingGroup.endTime,o)||(s.editingGroup.endTime=o),O(o)}),r(50,"option",39),l(51,"8:00 AM"),a(),r(52,"option",40),l(53,"9:00 AM"),a(),r(54,"option",41),l(55,"10:00 AM"),a(),r(56,"option",42),l(57,"11:00 AM"),a(),r(58,"option",43),l(59,"12:00 PM"),a(),r(60,"option",44),l(61,"1:00 PM"),a(),r(62,"option",45),l(63,"2:00 PM"),a(),r(64,"option",46),l(65,"3:00 PM"),a(),r(66,"option",47),l(67,"4:00 PM"),a(),r(68,"option",48),l(69,"5:00 PM"),a(),r(70,"option",49),l(71,"6:00 PM"),a(),r(72,"option",50),l(73,"7:00 PM"),a(),r(74,"option",51),l(75,"8:00 PM"),a(),r(76,"option",52),l(77,"9:00 PM"),a(),r(78,"option",53),l(79,"10:00 PM"),a(),r(80,"option",54),l(81,"11:00 PM"),a()()()(),r(82,"div",33)(83,"label"),l(84,"Days of Week"),a(),r(85,"div",57),A(86,XC,4,4,"div",58),a()(),r(87,"div",33)(88,"label",59),l(89,"Description / Reason"),a(),r(90,"input",60),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editingGroup.block_description,o)||(s.editingGroup.block_description=o),O(o)}),a()(),r(91,"div",8)(92,"button",61),S("click",function(){k(e);let o=h();return O(o.saveRecurringBlockEdit())}),w(93,"i",62),l(94," Save Changes "),a(),r(95,"button",11),S("click",function(){k(e);let o=h();return O(o.closeRecurringBlockEditModal())}),l(96,"Cancel"),a()()()}if(n&2){let e=h();d(8),x("ngForOf",e.courts),d(5),ce("ngModel",e.editingGroup.startTime),d(36),ce("ngModel",e.editingGroup.endTime),d(37),x("ngForOf",e.daysOfWeek),d(4),ce("ngModel",e.editingGroup.block_description),d(2),x("disabled",e.editSelectedCourts.length===0||e.editSelectedDays.length===0)}}
68function QC(n,t){if(n&1&&(r(0,"option",96),l(1),a()),n&2){let e=t.$implicit;x("value",e),d(),R(e)}}function KC(n,t){if(n&1&&(r(0,"div",100),l(1),a()),n&2){let e=h().$implicit;d(),R(e.block_description)}}function JC(n,t){if(n&1){let e=L();r(0,"div",97)(1,"div",98)(2,"div",99),l(3),a(),r(4,"div",100),l(5),a(),A(6,KC,2,1,"div",101),a(),r(7,"button",102),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.deleteDateBlock(o.id))}),w(8,"i",10),l(9," Remove "),a()()}if(n&2){let e=t.$implicit,i=h(2);d(3),Se("",e.court," \u2014 ",e.date,""),d(2),Se("",i.formatTime(e.startTime)," to ",i.formatTime(e.endTime),""),d(),x("ngIf",e.block_description)}}function ew(n,t){n&1&&(r(0,"div",103),l(1,"No date blocks configured."),a())}function tw(n,t){if(n&1){let e=L();r(0,"button",109),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.changeDateBlockPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(3);te("active",e===i.dateBlockCurrentPage),x("disabled",e===i.dateBlockCurrentPage),d(),R(e)}}function nw(n,t){if(n&1){let e=L();r(0,"div",104)(1,"button",105),S("click",function(){k(e);let o=h(2);return O(o.changeDateBlockPage(o.dateBlockCurrentPage-1))}),l(2,"\xAB Prev"),a(),r(3,"span",106),l(4),a(),r(5,"span",107),A(6,tw,2,4,"button",108),a(),r(7,"button",105),S("click",function(){k(e);let o=h(2);return O(o.changeDateBlockPage(o.dateBlockCurrentPage+1))}),l(8,"Next \xBB"),a()()}if(n&2){let e=h(2);d(),x("disabled",e.dateBlockCurrentPage===1),d(3),Se("Page ",e.dateBlockCurrentPage," of ",e.dateBlockTotalPages,""),d(2),x("ngForOf",e.getDateBlockPageNumbers()),d(),x("disabled",e.dateBlockCurrentPage===e.dateBlockTotalPages)}}function iw(n,t){if(n&1){let e=L();r(0,"div",67)(1,"div",68)(2,"div",69),w(3,"i",21),r(4,"span",70),l(5,"One-time Date Blocks"),a()(),r(6,"p",71),l(7," Block specific courts on specific dates and times. Perfect for tournaments, maintenance, or special events. "),a(),r(8,"form",72),S("ngSubmit",function(){k(e);let o=h();return O(o.onDateBlockSubmit())}),r(9,"div",36)(10,"div",33)(11,"label",73),l(12,"Court"),a(),r(13,"select",74)(14,"option",75),l(15,"Select Court"),a(),r(16,"option",76),l(17,"All Courts"),a(),A(18,QC,2,2,"option",77),a()(),r(19,"div",33)(20,"label",78),l(21,"Date"),a(),w(22,"input",79),a(),r(23,"div",33)(24,"label",80),l(25,"Start Time"),a(),r(26,"select",81)(27,"option",75),l(28,"Select start time"),a(),r(29,"option",39),l(30,"8:00 AM"),a(),r(31,"option",40),l(32,"9:00 AM"),a(),r(33,"option",41),l(34,"10:00 AM"),a(),r(35,"option",42),l(36,"11:00 AM"),a(),r(37,"option",43),l(38,"12:00 PM"),a(),r(39,"option",44),l(40,"1:00 PM"),a(),r(41,"option",45),l(42,"2:00 PM"),a(),r(43,"option",46),l(44,"3:00 PM"),a(),r(45,"option",47),l(46,"4:00 PM"),a(),r(47,"option",48),l(48,"5:00 PM"),a(),r(49,"option",49),l(50,"6:00 PM"),a(),r(51,"option",50),l(52,"7:00 PM"),a(),r(53,"option",51),l(54,"8:00 PM"),a(),r(55,"option",52),l(56,"9:00 PM"),a(),r(57,"option",53),l(58,"10:00 PM"),a(),r(59,"option",54),l(60,"11:00 PM"),a()()(),r(61,"div",33)(62,"label",82),l(63,"End Time"),a(),r(64,"select",83)(65,"option",75),l(66,"Select end time"),a(),r(67,"option",40),l(68,"9:00 AM"),a(),r(69,"option",41),l(70,"10:00 AM"),a(),r(71,"option",42),l(72,"11:00 AM"),a(),r(73,"option",43),l(74,"12:00 PM"),a(),r(75,"option",44),l(76,"1:00 PM"),a(),r(77,"option",45),l(78,"2:00 PM"),a(),r(79,"option",46),l(80,"3:00 PM"),a(),r(81,"option",47),l(82,"4:00 PM"),a(),r(83,"option",48),l(84,"5:00 PM"),a(),r(85,"option",49),l(86,"6:00 PM"),a(),r(87,"option",50),l(88,"7:00 PM"),a(),r(89,"option",51),l(90,"8:00 PM"),a(),r(91,"option",52),l(92,"9:00 PM"),a(),r(93,"option",53),l(94,"10:00 PM"),a(),r(95,"option",54),l(96,"11:00 PM"),a()()()(),r(97,"div",33)(98,"label",84),l(99,"Description / Reason"),a(),w(100,"input",85),a(),r(101,"button",86),w(102,"i",87),l(103," Add Date Block "),a()(),r(104,"div",88)(105,"div",89)(106,"div",90),l(107," Current Date Blocks "),r(108,"span",91),l(109),a()(),r(110,"input",92),pe("ngModelChange",function(o){k(e);let s=h();return de(s.dateBlocksSearch,o)||(s.dateBlocksSearch=o),O(o)}),S("input",function(){k(e);let o=h();return O(o.filterDateBlocks())}),a()(),A(111,JC,10,5,"div",93)(112,ew,2,0,"div",94)(113,nw,9,5,"div",95),a()()()}if(n&2){let e=h();d(8),x("formGroup",e.dateBlockForm),d(10),x("ngForOf",e.courts),d(83),x("disabled",e.dateBlockForm.invali
68d),d(8),R(e.filteredDateBlocks.length),d(),ce("ngModel",e.dateBlocksSearch),d(),x("ngForOf",e.paginatedDateBlocks),d(),x("ngIf",e.paginatedDateBlocks.length===0),d(),x("ngIf",e.dateBlockTotalPages>1)}}function ow(n,t){if(n&1){let e=L();r(0,"div",63)(1,"input",64),S("change",function(){let o=k(e).$implicit,s=h(2);return O(s.toggleRecurringCourt(o))}),a(),r(2,"label",65),l(3),a()()}if(n&2){let e=t.$implicit,i=h(2);d(),x("id","recurring-"+e.toLowerCase().replace(" ","-"))("checked",i.selectedRecurringCourts.includes(e)),d(),x("for","recurring-"+e.toLowerCase().replace(" ","-")),d(),R(e)}}function rw(n,t){if(n&1){let e=L();r(0,"div",66)(1,"input",64),S("change",function(){let o=k(e).index,s=h(2);return O(s.toggleDay(o))}),a(),r(2,"label",65),l(3),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(2);d(),x("id","day-"+i)("checked",o.selectedDays.includes(i)),d(),x("for","day-"+i),d(),R(e)}}function aw(n,t){if(n&1&&(r(0,"div",100),l(1),a()),n&2){let e=h().$implicit;d(),R(e.block_description)}}function sw(n,t){if(n&1){let e=L();r(0,"div",97)(1,"div",98)(2,"div",99),l(3),a(),r(4,"div",100),l(5),a(),r(6,"div",100),l(7),a(),A(8,aw,2,1,"div",101),r(9,"div",117),l(10),a()(),r(11,"div",118)(12,"button",119),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.editRecurringBlockGroup(o))}),w(13,"i",32),l(14," Edit "),a(),r(15,"button",102),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.deleteRecurringBlockGroup(o))}),w(16,"i",10),l(17," Remove "),a()()()}if(n&2){let e=t.$implicit,i=h(2);d(3),R(i.getFormattedCourtsText(e.courts)),d(2),F("Every ",i.getFormattedDaysTextLong(e.days),""),d(2),Se("",i.formatTime(e.startTime)," \u2013 ",i.formatTime(e.endTime),""),d(),x("ngIf",e.block_description),d(2),F("",e.entries.length," entries in database")}}function lw(n,t){n&1&&(r(0,"div",103),l(1,"No recurring blocks configured."),a())}function cw(n,t){if(n&1){let e=L();r(0,"button",109),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.changeRecurringBlockPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(3);te("active",e===i.recurringBlockCurrentPage),x("disabled",e===i.recurringBlockCurrentPage),d(),R(e)}}function dw(n,t){if(n&1){let e=L();r(0,"div",104)(1,"button",105),S("click",function(){k(e);let o=h(2);return O(o.changeRecurringBlockPage(o.recurringBlockCurrentPage-1))}),l(2,"\xAB Prev"),a(),r(3,"span",106),l(4),a(),r(5,"span",107),A(6,cw,2,4,"button",108),a(),r(7,"button",105),S("click",function(){k(e);let o=h(2);return O(o.changeRecurringBlockPage(o.recurringBlockCurrentPage+1))}),l(8,"Next \xBB"),a()()}if(n&2){let e=h(2);d(),x("disabled",e.recurringBlockCurrentPage===1),d(3),Se("Page ",e.recurringBlockCurrentPage," of ",e.recurringBlockTotalPages,""),d(2),x("ngForOf",e.getRecurringBlockPageNumbers()),d(),x("disabled",e.recurringBlockCurrentPage===e.recurringBlockTotalPages)}}function pw(n,t){if(n&1){let e=L();r(0,"div",67)(1,"div",68)(2,"div",69),w(3,"i",22),r(4,"span",70),l(5,"Recurring Schedule Blocks"),a()(),r(6,"p",71),l(7," Set up weekly recurring blocks for regular events like mass, open play, or maintenance. These apply every week on the selected days. "),a(),r(8,"form",72),S("ngSubmit",function(){k(e);let o=h();return O(o.onRecurringBlockSubmit())}),r(9,"div",33)(10,"label"),l(11,"Courts"),a(),r(12,"div",34),A(13,ow,4,4,"div",35),a()(),r(14,"div",36)(15,"div",33)(16,"label",110),l(17,"Start Time"),a(),r(18,"select",111)(19,"option",75),l(20,"Select start time"),a(),r(21,"option",39),l(22,"8:00 AM"),a(),r(23,"option",40),l(24,"9:00 AM"),a(),r(25,"option",41),l(26,"10:00 AM"),a(),r(27,"option",42),l(28,"11:00 AM"),a(),r(29,"option",43),l(30,"12:00 PM"),a(),r(31,"option",44),l(32,"1:00 PM"),a(),r(33,"option",45),l(34,"2:00 PM"),a(),r(35,"option",46),l(36,"3:00 PM"),a(),r(37,"option",47),l(38,"4:00 PM"),a(),r(39,"option",48),l(40,"5:00 PM"),a(),r(41,"option",49),l(42,"6:00 PM"),a(),r(43,"option",50),l(44,"7:00 PM"),a(),r(45,"option",51),l(46,"8:00 PM"),a(),r(47,"option",52),l(48,"9:00 PM"),a(),r(49,"option",53),l(50,"10:00 PM"),a(),r(51,"option",54),l(52,"11:00 PM"),a()()(),r(53,"div",33)(54,"label",112),l(55,"End Time"),a(),r(56,"select",113)(57,"option",75),l(58,"Select end time"),a(),r(59,"option",40),l(60,"9:00 AM"),a(),r(61,"option",41),l(62,"10:00 AM"),a(),r(63,"option",42),l(64,"11:00 AM"),a(),r(65,"option",43),l(66,"12:00 PM"),a(),r(67,"option",44),l(68,"1:00 PM"),a(),r(69,"option",45),l(70,"2:00 PM"),a(),r(71,"option",46),l(72,"3:00 PM"),a(),r(73,"option",47),l(74,"4:00 PM"),a(),r(75,"option",48),l(76,"5:00 PM"),a(),r(77,"option",49),l(78,"6:00 PM"),a(),r(79,"option",50),l(80,"7:00 PM"),a(),r(81,"option",51),l(82,"8:00 PM"),a(),r(83,"option",52),l(84,"9:00 PM"),a(),r(85,"option",53),l(86,"10:00 PM"),a(),r(87,"option",54),l(88,"11:00 PM"),a()()()(),r(89,"div",33)(90,"label"),l(91,"Days of Week"),a(),r(92,"div",57),A(93,rw,4,4,"div",58),a()(),r(94,"div",33)(95,"label",114),l(96,"Description / Reason"),a(),w(97,"input",115),a(),r(98,"button",86),w(99,"i",87),l(100," Add Recurring Block "),a()(),r(101,"div",88)(102,"div",89)(103,"div",90),l(104," Current Recurring Blocks "),r(105,"span",91),l(106),a()(),r(107,"input",116),pe("ngModelChange",function(o){k(e);let s=h();return de(s.recurringBlocksSearch,o)||(s.recurringBlocksSearch=o),O(o)}),S("input",function(){k(e);let o=h();return O(o.filterRecurringBlocks())}),a()(),A(108,sw,18,6,"div",93)(109,lw,2,0,"div",94)(110,dw,9,5,"div",95),a()()()}if(n&2){let e=h();d(8),x("formGroup",e.recurringBlockForm),d(5),x("ngForOf",e.courts),d(80),x("ngForOf",e.daysOfWeek),d(5),x("disabled",e.recurringBlockForm.invali
68d||e.selectedDays.length===0||e.selectedRecurringCourts.length===0),d(8),R(e.filteredGroupedRecurringBlocks.length),d(),ce("ngModel",e.recurringBlocksSearch),d(),x("ngForOf",e.paginatedGroupedRecurringBlocks),d(),x("ngIf",e.paginatedGroupedRecurringBlocks.length===0),d(),x("ngIf",e.recurringBlockTotalPages>1)}}function mw(n,t){if(n&1&&(r(0,"option",96),l(1),a()),n&2){let e=t.$implicit;x("value",e),d(),R(e)}}function gw(n,t){if(n&1&&(r(0,"div",100),l(1),a()),n&2){let e=h().$implicit;d(),F(" ",e.exemptionDescription," ")}}function uw(n,t){if(n&1){let e=L();r(0,"div",133)(1,"div",98)(2,"div",99),w(3,"i",134),l(4),a(),r(5,"div",100),l(6),a(),A(7,gw,2,1,"div",101),a(),r(8,"button",102),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.openBlockExemptionConfirmModal(o))}),w(9,"i",10),l(10," Remove "),a()()}if(n&2){let e=t.$implicit,i=h(2);d(4),Se(" ",e.court," \u2014 ",e.date," "),d(2),Se(" ",i.formatTime(e.startTime)," to ",i.formatTime(e.endTime)," "),d(),x("ngIf",e.exemptionDescription)}}function fw(n,t){n&1&&(r(0,"div",103),l(1,"No block exemptions configured."),a())}function hw(n,t){if(n&1){let e=L();r(0,"button",109),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.goToBlockExemptionPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(3);te("active",e===i.blockExemptionCurrentPage),x("disabled",e===i.blockExemptionCurrentPage),d(),R(e)}}function _w(n,t){if(n&1){let e=L();r(0,"div",104)(1,"button",105),S("click",function(){k(e);let o=h(2);return O(o.goToBlockExemptionPage(o.blockExemptionCurrentPage-1))}),l(2,"\xAB Prev"),a(),r(3,"span",106),l(4),a(),r(5,"span",107),A(6,hw,2,4,"button",108),a(),r(7,"button",105),S("click",function(){k(e);let o=h(2);return O(o.goToBlockExemptionPage(o.blockExemptionCurrentPage+1))}),l(8,"Next \xBB"),a()()}if(n&2){let e=h(2);d(),x("disabled",e.blockExemptionCurrentPage===1),d(3),Se("Page ",e.blockExemptionCurrentPage," of ",e.blockExemptionTotalPages,""),d(2),x("ngForOf",e.getBlockExemptionPageNumbers()),d(),x("disabled",e.blockExemptionCurrentPage===e.blockExemptionTotalPages)}}function xw(n,t){if(n&1){let e=L();
68r(0,"div",67)(1,"div",68)(2,"div",69),w(3,"i",23),r(4,"span",70),l(5,"Block Exemptions"),a()(),r(6,"p",71),l(7," Allow bookings on blocked time slots. Exemptions override both date blocks and recurring blocks for the specified court, date, and time range. "),a(),r(8,"form",72),S("ngSubmit",function(){k(e);let o=h();return O(o.onBlockExemptionSubmit())}),r(9,"div",36)(10,"div",33)(11,"label",120),l(12,"Court"),a(),r(13,"select",121)(14,"option",75),l(15,"Select Court"),a(),A(16,mw,2,2,"option",77),a()(),r(17,"div",33)(18,"label",122),l(19,"Date"),a(),w(20,"input",123),a(),r(21,"div",33)(22,"label",124),l(23,"Start Time"),a(),r(24,"select",125)(25,"option",75),l(26,"Select start time"),a(),r(27,"option",39),l(28,"8:00 AM"),a(),r(29,"option",40),l(30,"9:00 AM"),a(),r(31,"option",41),l(32,"10:00 AM"),a(),r(33,"option",42),l(34,"11:00 AM"),a(),r(35,"option",43),l(36,"12:00 PM"),a(),r(37,"option",44),l(38,"1:00 PM"),a(),r(39,"option",45),l(40,"2:00 PM"),a(),r(41,"option",46),l(42,"3:00 PM"),a(),r(43,"option",47),l(44,"4:00 PM"),a(),r(45,"option",48),l(46,"5:00 PM"),a(),r(47,"option",49),l(48,"6:00 PM"),a(),r(49,"option",50),l(50,"7:00 PM"),a(),r(51,"option",51),l(52,"8:00 PM"),a(),r(53,"option",52),l(54,"9:00 PM"),a(),r(55,"option",53),l(56,"10:00 PM"),a(),r(57,"option",54),l(58,"11:00 PM"),a()()(),r(59,"div",33)(60,"label",126),l(61,"End Time"),a(),r(62,"select",127)(63,"option",75),l(64,"Select end time"),a(),r(65,"option",40),l(66,"9:00 AM"),a(),r(67,"option",41),l(68,"10:00 AM"),a(),r(69,"option",42),l(70,"11:00 AM"),a(),r(71,"option",43),l(72,"12:00 PM"),a(),r(73,"option",44),l(74,"1:00 PM"),a(),r(75,"option",45),l(76,"2:00 PM"),a(),r(77,"option",46),l(78,"3:00 PM"),a(),r(79,"option",47),l(80,"4:00 PM"),a(),r(81,"option",48),l(82,"5:00 PM"),a(),r(83,"option",49),l(84,"6:00 PM"),a(),r(85,"option",50),l(86,"7:00 PM"),a(),r(87,"option",51),l(88,"8:00 PM"),a(),r(89,"option",52),l(90,"9:00 PM"),a(),r(91,"option",53),l(92,"10:00 PM"),a(),r(93,"option",54),l(94,"11:00 PM"),a()()()(),r(95,"div",33)(96,"label",128),l(97,"Description / Reason "),r(98,"span",129),l(99,"(optional)"),a()(),w(100,"input",130),a(),r(101,"button",86),w(102,"i",87),l(103," Add Block Exemption "),a()(),r(104,"div",88)(105,"div",89)(106,"div",90),l(107," Current Block Exemptions "),r(108,"span",91),l(109),a()(),r(110,"input",131),pe("ngModelChange",function(o){k(e);let s=h();return de(s.blockExemptionsSearch,o)||(s.blockExemptionsSearch=o),O(o)}),S("input",function(){k(e);let o=h();return O(o.filterBlockExemptions())}),a()(),A(111,uw,11,5,"div",132)(112,fw,2,0,"div",94)(113,_w,9,5,"div",95),a()()()}if(n&2){let e=h();d(8),x("formGroup",e.blockExemptionForm),d(8),x("ngForOf",e.courts),d(4),x("min",e.getTodayDate()),d(81),x("disabled",e.blockExemptionForm.invalid),d(8),R(e.filteredBlockExemptions.length),d(),ce("ngModel",e.blockExemptionsSearch),d(),x("ngForOf",e.paginatedBlockExemptions),d(),x("ngIf",e.paginatedBlockExemptions.length===0),d(),x("ngIf",e.blockExemptionTotalPages>1)}}function vw(n,t){if(n&1&&(r(0,"div",100),l(1),a()),n&2){let e=h().$implicit;d(),R(e.description)}}function bw(n,t){if(n&1&&(we(0),l(1),Pe()),n&2){let e=h(2).$implicit,i=h(2);d(),F(" Reserved for admins & coaches until ",i.getReleaseDays(e)," day(s) before the reservation. ")}}function yw(n,t){n&1&&l(0,"Hold disabled (0 days) \u2014 effectively open to everyone.")}function Cw(n,t){if(n&1&&(r(0,"div",117),A(1,bw,2,1,"ng-container",147)(2,yw,1,0,"ng-template",null,0,ln),a()),n&2){let e=Jt(3),i=h().$implicit;d(),x("ngIf",i.priorityReleaseHours&&i.priorityReleaseHours>0)("ngIfElse",e)}}function ww(n,t){if(n&1){let e=L();r(0,"div",148)(1,"input",149),S("ngModelChange",function(o){k(e);let s=h().$implicit,m=h(2);return O(m.setReleaseDays(s,o))}),a(),r(2,"span",150),l(3,"days before"),a()()}if(n&2){let e=h().$implicit,i=h(2);d(),x("ngModel",i.getReleaseDays(e))("name","days-"+e.id)}}function Pw(n,t){if(n&1){let e=L();r(0,"div",136)(1,"div",98)(2,"div",99),w(3,"i",137),l(4),r(5,"span",138),w(6,"i",3),l(7),a(),r(8,"span",139),l(9),a()(),A(10,vw,2,1,"div",101)(11,Cw,4,2,"div",140),a(),r(12,"div",141)(13,"label",142)(14,"input",143),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.priorityAccessEnabled,o)||(s.priorityAccessEnabled=o),O(o)}),S("ngModelChange",function(){let o=k(e).$implicit,s=h(2);return O(s.onPriorityToggle(o))}),a(),w(15,"span",144),a(),A(16,ww,4,2,"div",145),r(17,"button",146),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.savePolicyForCourt(o))}),w(18,"i",62),l(19),a()()()}if(n&2){let e=t.$implicit,i=h(2);te("policy-active",e.priorityAccessEnabled),d(4),F(" ",e.courtName," "),d(),te("coaching",(e.courtType==null?null:e.courtType.toLowerCase())==="coaching")("rental",(e.courtType==null?null:e.courtType.toLowerCase())==="rental"),d(),te("bi-person-badge",(e.courtType==null?null:e.courtType.toLowerCase())==="coaching")("bi-tag",(e.courtType==null?null:e.courtType.toLowerCase())!=="coaching"),d(),F(" ",e.courtType||"No type"," "),d(),te("on",e.priorityAccessEnabled),d(),F(" ",e.priorityAccessEnabled?"Priority ON":"Open to all"," "),d(),x("ngIf",e.de
68scription),d(),x("ngIf",e.priorityAccessEnabled),d(2),vn("title",e.priorityAccessEnabled?"Disable priority access":"Enable priority access"),d(),ce("ngModel",e.priorityAccessEnabled),x("name","priority-"+e.id),d(2),x("ngIf",e.priorityAccessEnabled),d(),x("disabled",i.policySavingCourtId===e.id),d(2),F(" ",i.policySavingCourtId===e.id?"Saving\u2026":"Save"," ")}}function Mw(n,t){n&1&&(r(0,"div",103),l(1," No courts found. Add courts in "),r(2,"strong"),l(3,"Court Settings"),a(),l(4," first. "),a())}function Sw(n,t){if(n&1&&(r(0,"div",67)(1,"div",68)(2,"div",69),w(3,"i",24),r(4,"span",70),l(5,"Court Access Policies"),a()(),r(6,"p",71),l(7," Set a "),r(8,"strong"),l(9,"priority-access policy per court"),a(),l(10,". When priority access is "),r(11,"strong"),l(12,"on"),a(),l(13,", the court is reserved for "),r(14,"strong"),l(15,"admins and coaches"),a(),l(16,' until the release window below, at which point it opens to everyone. Any court can have a policy \u2014 it no longer depends on the court being tagged "coaching". Courts with priority access '),r(17,"strong"),l(18,"off"),a(),l(19," are open to all users at all times. "),a(),r(20,"div",88)(21,"div",89)(22,"div",90),l(23," Courts "),r(24,"span",91),l(25),a()()(),A(26,Pw,20,23,"div",135)(27,Mw,5,0,"div",94),a()()()),n&2){let e=h();d(25),R(e.courtEntities.length),d(),x("ngForOf",e.courtEntities),d(),x("ngIf",e.courtEntities.length===0)}}var rc=class n{constructor(t,e,i){this.fb=t;this.apiService=e;this.authService=i;this.dateBlockForm=this.fb.group({court:["",Oe.required],date:["",Oe.required],startTime:["",Oe.required],endTime:["",Oe.required],description:["",Oe.required]}),this.recurringBlockForm=this.fb.group({startTime:["",Oe.required],endTime:["",Oe.required],description:["",Oe.required]}),this.validationRuleForm=this.fb.group({startTime:["",Oe.required],endTime:["",Oe.required],minPlayers:[1,[Oe.required,Oe.min(1),Oe.max(20)]]}),this.blockExemptionForm=this.fb.group({court:["",Oe.required],date:["",Oe.required],startTime:["",Oe.required],endTime:["",Oe.required],description:[""]})}showDateBlockConfirmModal=!1;showRecurringBlockConfirmModal=!1;showRecurringBlockEditModal=!1;showBlockExemptionConfirmModal=!1;activeTab="date-blocks";editingGroup=null;dateBlockForm;recurringBlockForm;validationRuleForm;blockExemptionForm;dateBlocks=[];recurringBlocks=[];groupedRecurringBlocks=[];validationRules=[];blockExemptions=[];filteredDateBlocks=[];filteredGroupedRecurringBlocks=[];filteredValidationRules=[];filteredBlockExemptions=[];paginatedDateBlocks=[];paginatedGroupedRecurringBlocks=[];paginatedValidationRules=[];paginatedBlockExemptions=[];dateBlocksSearch="";recurringBlocksSearch="";validationRulesSearch="";blockExemptionsSearch="";dateBlockCurrentPage=1;dateBlockTotalPages=1;recurringBlockCurrentPage=1;recurringBlockTotalPages=1;validationRuleCurrentPage=1;validationRuleTotalPages=1;blockExemptionCurrentPage=1;blockExemptionTotalPages=1;itemsPerPage=10;selectedDays=[];selectedCourts=[];selectedRuleDays=[];selectedRecurringCourts=[];editSelectedDays=[];editSelectedCourts=[];daysOfWeek=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];courts=[];courtEntities=[];policySavingCourtId=null;DEFAULT_PRIORITY_RELEASE_HOURS=48;groupToDelete=null;itemToDelete=null;exemptionToDelete=null;isLoading=!1;loadingMessage="";toastVisible=!1;toastMessage="";toastType="success";toastTimeout;ngOnInit(){this.loadAllData()}switchTab(t){this.activeTab=t}onDateBlockSubmit(){return ue(this,null,function*(){if(this.dateBlockForm.valid){let t=this.dateBlockForm.value;if(t.startTime&&t.endTime&&t.startTime>=t.endTime){this.showToast("End time must be after start time","error");return}try{let e={court:t.court,date:t.date,startTime:t.startTime,endTime:t.endTime,block_description:t.description};yield this.apiService.createDateBlock(e).toPromise(),this.showToast("Date block added successfully!"),this.dateBlockForm.reset(),this.loadDateBlocks()}catch(e){console.error("Error adding date block:",e),this.showToast("Failed to add date block. Please try again.")}}})}loadDateBlocks(){return ue(this,null,function*(){try{let t=yield this.apiService.getDateBlocks().toPromise();this.dateBlocks=(t||[]).filter(e=>e&&e.court&&e.court.trim()!==""&&e.date&&e.date.trim()!==""&&e.startTime&&e.endTime),this.filterDateBlocks()}catch(t){console.error("Error loading date blocks:",t),this.dateBlocks=[]}})}filterDateBlocks(){if(!this.dateBlocksSearch)this.filteredDateBlocks=[...this.dateBlocks];else{let t=this.dateBlocksSearch.toLowerCase();this.filteredDateBlocks=this.dateBlocks.filter(e=>e.court.toLowerCase().includes(t)||e.date.includes(t)||e.block_description&&e.block_description.toLowerCase().includes(t))}this.filteredDateBlocks.sort((t,e)=>{let i=new Date(t.date).getTime();return new Date(e.date).getTime()-i}),this.paginateeDateBlocks()}paginateeDateBlocks(){this.dateBlockTotalPages=Math.ceil(this.filteredDateBlocks.length/this.itemsPerPage);let t=(this.dateBlockCurrentPage-1)*this.itemsPerPage,e=t+this.itemsPerPage;this.paginatedDateBlocks=this.filteredDateBlocks.slice(t,e)}changeDateBlockPage(t){t>=1&&t<=this.dateBlockTotalPages&&(this.dateBlockCurrentPage=t,this.paginateeDateBlocks())}getDateBlockPageNumbers(){let t=[],i=Math.max(1,this.dateBlockCurrentPage-Math.floor(2.5)),o=Math.min(this.dateBlockTotalPages,i+5-1);o-i<4&&(i=Math.max(1,o-5+1));for(let s=i;s<=o;s++)t.push(s);return t}deleteDateBlock(t){this.itemToDelete={type:"dateBlock",id:t},this.showDateBlockConfirmModal=!0}confirmDateBlockDelete(){return ue(this,null,function*(){if(this.itemToDelete&&this.itemToDelete.type==="dateBlock")try{yield this.apiService.deleteDateBlock(this.itemToDelete.id).toPromise(),this.showToast("Date block deleted successfully!"),this.loadDateBlocks()}catch(t){console.error("Error deleting date block:",t),this.showToast("Failed to delete date block. Please try again.")}this.closeDateBlockConfirmModal()})}closeDateBlockConfirmModal(){this.showDateBlockConfirmModal=!1,this.itemToDelete=null}groupRecurringBlocks(){let t=new Map;for(let e of this.recurringBlocks){let i=this.normalizeTime(e.startTime),o=this.normalizeTime(e.endTime),s=`${i}-${o}-${e.block_description||""}`;if(t.has(s)){let m=t.get(s);m.courts.includes(e.court)||m.courts.push(e.court),m.days.includes(e.day)||m.days.push(e.day),m.entries.push(e)}else t.set(s,{key:s,courts:[e.court],days:[e.day],startTime:i,endTime:o,block_description:e.block_description,entries:[e]})}this.groupedRecurringBlocks=Array.from(t.values()).map(e=>Ye(ze({},e),{courts:e.courts.sort(),days:e.days.sort((i,o)=>i-o)}))}onRecurringBlockSubmit(){return ue(this,null,function*(){if(this.recurringBlockForm.valid&&this.selectedDays.length>0&&this.selectedRecurringCourts.length>0){let t=this.recurringBlockForm.value;if(t.startTime&&t.endTime&&t.startTime>=t.endTime){this.showToast("End time must be after start time","error");return}let e=this.selectedRecurringCourts.length*this.selectedDays.length;this.startLoading(`Creating ${e}
68 recurring block entries...`);try{for(let i of this.selectedRecurringCourts)for(let o of this.selectedDays){let s={court:i,day:o,startTime:t.startTime,endTime:t.endTime,block_description:t.description};yield this.apiService.createRecurringBlock(s).toPromise()}this.stopLoading(),this.showToast(`Successfully created ${e} recurring block entries!`,"success"),this.recurringBlockForm.reset(),this.selectedDays=[],this.selectedRecurringCourts=[],this.loadRecurringBlocks()}catch(i){console.error("Error adding recurring blocks:",i),this.stopLoading(),this.showToast("Failed to add recurring blocks. Please try again.","error")}}})}loadRecurringBlocks(){return ue(this,null,function*(){try{let t=yield this.apiService.getRecurringBlocks().toPromise();this.recurringBlocks=(t||[]).filter(e=>e&&e.court&&e.court.trim()!==""&&e.day!==void 0&&e.day!==null&&e.startTime&&e.endTime),this.groupRecurringBlocks(),this.filterRecurringBlocks()}catch(t){console.error("Error loading recurring blocks:",t),this.recurringBlocks=[],this.groupedRecurringBlocks=[]}})}filterRecurringBlocks(){if(!this.recurringBlocksSearch)this.filteredGroupedRecurringBlocks=[...this.groupedRecurringBlocks];else{let t=this.recurringBlocksSearch.toLowerCase();this.filteredGroupedRecurringBlocks=this.groupedRecurringBlocks.filter(e=>e.courts.some(i=>i.toLowerCase().includes(t))||e.days.some(i=>this.getDayName(i).toLowerCase().includes(t))||e.block_description&&e.block_description.toLowerCase().includes(t))}this.filteredGroupedRecurringBlocks.sort((t,e)=>{let i=t.entries.length>0?parseInt(t.entries[t.entries.length-1].id||"0",10):0;return(e.entries.length>0?parseInt(e.entries[e.entries.length-1].id||"0",10):0)-i}),this.paginateRecurringBlocks()}paginateRecurringBlocks(){this.recurringBlockTotalPages=Math.ceil(this.filteredGroupedRecurringBlocks.length/this.itemsPerPage);let t=(this.recurringBlockCurrentPage-1)*this.itemsPerPage,e=t+this.itemsPerPage;this.paginatedGroupedRecurringBlocks=this.filteredGroupedRecurringBlocks.slice(t,e)}changeRecurringBlockPage(t){t>=1&&t<=this.recurringBlockTotalPages&&(this.recurringBlockCurrentPage=t,this.paginateRecurringBlocks())}getRecurringBlockPageNumbers(){let t=[],i=Math.max(1,this.recurringBlockCurrentPage-Math.floor(2.5)),o=Math.min(this.recurringBlockTotalPages,i+5-1);o-i<4&&(i=Math.max(1,o-5+1));for(let s=i;s<=o;s++)t.push(s);return t}deleteRecurringBlockGroup(t){this.groupToDelete=t,this.showRecurringBlockConfirmModal=!0}confirmRecurringBlockDelete(){return ue(this,null,function*(){if(this.groupToDelete){let t=this.groupToDelete,e=t.entries.length;this.showRecurringBlockConfirmModal=!1,this.groupToDelete=null,this.startLoading(`Deleting ${e} recurring block entries...`);try{for(let i of t.entries)yield this.apiService.deleteRecurringBlock(i.id).toPromise();this.stopLoading(),this.showToast(`Successfully deleted ${e} recurring block entries!`,"success"),this.loadRecurringBlocks()}catch(i){console.error("Error deleting recurring blocks:",i),this.stopLoading(),this.showToast("Failed to delete recurring blocks. Please try again.","error")}}})}closeRecurringBlockConfirmModal(){this.showRecurringBlockConfirmModal=!1,this.groupToDelete=null}normalizeTime(t){if(!t)return"";let e=t.split(":");if(e.length===2){let i=e[0].padStart(2,"0"),o=e[1].padStart(2,"0");return`${i}:${o}`}return t}editRecurringBlockGroup(t){this.editingGroup=Ye(ze({},t),{startTime:this.normalizeTime(t.startTime),endTime:this.normalizeTime(t.endTime)}),this.editSelectedDays=[...t.days],t.courts.includes("ALL")?this.editSelectedCourts=[...this.courts]:this.editSelectedCourts=[...t.courts],this.showRecurringBlockEditModal=!0}saveRecurringBlockEdit(){return ue(this,null,function*(){if(this.editingGroup&&this.editSelectedCourts.length>0&&this.editSelectedDays.length>0){let t=ze({},this.editingGroup),e=[...this.editSelectedCourts],i=[...this.editSelectedDays];this.showRecurringBlockEditModal=!1,this.editingGroup=null,this.editSelectedDays=[],this.editSelectedCourts=[],this.startLoading("Updating recurring blocks...");try{if(t.courts.includes("ALL")){for(let s of t.entries)yield this.apiService.deleteRecurringBlock(s.id).toPromise();for(let s of e)for(let m of i){let f={court:s,day:m,startTime:t.startTime,endTime:t.endTime,block_description:t.block_description};
68yield this.apiService.createRecurringBlock(f).toPromise()}}else{let s=new Set(t.entries.map(f=>`${f.court}-${f.day}`)),m=new Set;for(let f of e)for(let v of i)m.add(`${f}-${v}`);for(let f of t.entries){let v=`${f.court}-${f.day}`;if(!m.has(v))yield this.apiService.deleteRecurringBlock(f.id).toPromise();else{let y={court:f.court,day:f.day,startTime:t.startTime,endTime:t.endTime,block_description:t.block_description};yield this.apiService.updateRecurringBlock(f.id,y).toPromise()}}for(let f of e)for(let v of i){let y=`${f}-${v}`;if(!s.has(y)){let M={court:f,day:v,startTime:t.startTime,endTime:t.endTime,block_description:t.block_description};yield this.apiService.createRecurringBlock(M).toPromise()}}}this.stopLoading(),this.showToast("Recurring blocks updated successfully!","success"),this.loadRecurringBlocks()}catch(o){console.error("Error updating recurring blocks:",o),this.stopLoading(),this.showToast("Failed to update recurring blocks. Please try again.","error")}}})}closeRecurringBlockEditModal(){this.showRecurringBlockEditModal=!1,this.editingGroup=null,this.editSelectedDays=[],this.editSelectedCourts=[]}toggleEditDay(t){let e=this.editSelectedDays.indexOf(t);e>-1?this.editSelectedDays.splice(e,1):this.editSelectedDays.push(t)}toggleEditCourt(t){let e=this.editSelectedCourts.indexOf(t);e>-1?this.editSelectedCourts.splice(e,1):this.editSelectedCourts.push(t)}toggleRecurringCourt(t){let e=this.selectedRecurringCourts.indexOf(t);e>-1?this.selectedRecurringCourts.splice(e,1):this.selectedRecurringCourts.push(t)}toggleDay(t){let e=this.selectedDays.indexOf(t);e>-1?this.selectedDays.splice(e,1):this.selectedDays.push(t)}getDayName(t){return this.daysOfWeek[t]||""}getFormattedCourtsText(t){return t.includes("ALL")?"All Courts":t.join(", ")}getFormattedDaysTextLong(t){return t.map(e=>this.getDayName(e)).join(", ")}onValidationRuleSubmit(){return ue(this,null,function*(){if(this.validationRuleForm.valid&&this.selectedCourts.length>0&&this.selectedRuleDays.length>0)try{let t=this.validationRuleForm.value,e={courts:[...this.selectedCourts],days:[...this.selectedRuleDays],startTime:t.startTime,endTime:t.endTime,minPlayers:t.minPlayers};yield this.apiService.createValidationRule(e).toPromise(),this.showToast("Validation rule added successfully!"),this.validationRuleForm.reset(),this.selectedCourts=[],this.selectedRuleDays=[],this.loadValidationRules()}catch(t){console.error("Error adding validation rule:",t),this.showToast("Failed to add validation rule. Please try again.")}})}loadValidationRules(){return ue(this,null,function*(){try{let t=yield this.apiService.getValidationRules().toPromise();this.validationRules=t||[],this.filterValidationRules()}catch(t){console.error("Error loading validation rules:",t),this.validationRules=[]}})}filterValidationRules(){if(!this.validationRulesSearch)this.filteredValidationRules=[...this.validationRules];else{let t=this.validationRulesSearch.toLowerCase();this.filteredValidationRules=this.validationRules.filter(e=>e.courts.some(i=>i.toLowerCase().includes(t))||e.minPlayers.toString().includes(t))}this.filteredValidationRules.sort((t,e)=>{let i=parseInt(t.id||"0",10);return parseInt(e.id||"0",10)-i}),this.paginateValidationRules()}paginateValidationRules(){this.validationRuleTotalPages=Math.ceil(this.filteredValidationRules.length/this.itemsPerPage);let t=(this.validationRuleCurrentPage-1)*this.itemsPerPage,e=t+this.itemsPerPage;this.paginatedValidationRules=this.filteredValidationRules.slice(t,e)}changeValidationRulePage(t){t>=1&&t<=this.validationRuleTotalPages&&(this.validationRuleCurrentPage=t,this.paginateValidationRules())}getValidationRulePageNumbers(){let t=[],i=Math.max(1,this.validationRuleCurrentPage-Math.floor(2.5)),o=Math.min(this.validationRuleTotalPages,i+5-1);o-i<4&&(i=Math.max(1,o-5+1));for(let s=i;s<=o;s++)t.push(s);return t}deleteValidationRule(t){return ue(this,null,function*(){try{yield this.apiService.deleteValidationRule(t).toPromise(),this.showToast("Validation rule deleted successfully!"),this.loadValidationRules()}catch(e){console.error("Error deleting validation rule:",e),this.showToast("Failed to delete val
68idation rule. Please try again.")}})}onBlockExemptionSubmit(){return ue(this,null,function*(){if(this.blockExemptionForm.valid){let t=this.blockExemptionForm.value;if(t.startTime&&t.endTime&&t.startTime>=t.endTime){this.showToast("End time must be after start time","error");return}try{let e={court:t.court,date:t.date,startTime:t.startTime,endTime:t.endTime,exemptionDescription:t.description};yield this.apiService.createBlockExemption(e).toPromise(),this.showToast("Block exemption added successfully!"),this.blockExemptionForm.reset(),this.loadBlockExemptions()}catch(e){console.error("Error adding block exemption:",e),this.showToast("Failed to add block exemption. Please try again.","error")}}})}loadBlockExemptions(){return ue(this,null,function*(){try{let t=yield this.apiService.getBlockExemptions().toPromise();this.blockExemptions=t||[],this.filterBlockExemptions()}catch(t){console.error("Error loading block exemptions:",t),this.blockExemptions=[],this.filterBlockExemptions()}})}filterBlockExemptions(){let t=this.blockExemptionsSearch.toLowerCase();this.filteredBlockExemptions=this.blockExemptions.filter(e=>e.court.toLowerCase().includes(t)||e.date.includes(t)||e.exemptionDescription&&e.exemptionDescription.toLowerCase().includes(t)),this.blockExemptionTotalPages=Math.ceil(this.filteredBlockExemptions.length/this.itemsPerPage),this.blockExemptionCurrentPage=1,this.paginateBlockExemptions()}paginateBlockExemptions(){let t=(this.blockExemptionCurrentPage-1)*this.itemsPerPage,e=t+this.itemsPerPage;this.paginatedBlockExemptions=this.filteredBlockExemptions.slice(t,e)}goToBlockExemptionPage(t){t>=1&&t<=this.blockExemptionTotalPages&&(this.blockExemptionCurrentPage=t,this.paginateBlockExemptions())}openBlockExemptionConfirmModal(t){this.exemptionToDelete=t,this.showBlockExemptionConfirmModal=!0}closeBlockExemptionConfirmModal(){this.showBlockExemptionConfirmModal=!1,this.exemptionToDelete=null}confirmBlockExemptionDelete(){return ue(this,null,function*(){if(!(!this.exemptionToDelete||!this.exemptionToDelete.id))try{yield this.apiService.deleteBlockExemption(this.exemptionToDelete.id).toPromise(),this.showToast("Block exemption deleted successfully!"),this.closeBlockExemptionConfirmModal(),this.loadBlockExemptions()}catch(t){console.error("Error deleting block exemption:",t),this.showToast("Failed to delete block exemption. Please try again.","error"),this.closeBlockExemptionConfirmModal()}})}toggleCourt(t){let e=this.selectedCourts.indexOf(t);e>-1?this.selectedCourts.splice(e,1):this.selectedCourts.push(t)}toggleRuleDay(t){let e=this.selectedRuleDays.indexOf(t);e>-1?this.selectedRuleDays.splice(e,1):this.selectedRuleDays.push(t)}getDayNameShort(t){return["Sun","Mon","Tue","Wed","Thu","Fri","Sat"][t]||""}getFormattedDaysText(t){return t.map(e=>this.getDayNameShort(e)).join(", ")}getRuleDescription(t){let e=this.getFormattedDaysText(t.days);return`${t.startTime} to ${t.endTime} on ${e}`}formatTime(t){if(!t)return"";let[e,i]=t.split(":"),o=parseInt(e),s=o>=12?"PM":"AM";return`${o===0?12:o>12?o-12:o}:${i} ${s}`}getBlockExemptionPageNumbers(){let t=[],i=Math.max(1,this.blockExemptionCurrentPage-Math.floor(2.5)),o=Math.min(this.blockExemptionTotalPages,i+5-1);o-i+1<5&&(i=Math.max(1,o-5+1));for(let s=i;s<=o;s++)t.push(s);return t}getTodayDate(){let t=new Date,e=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return`${e}-${i}-${o}`}loadAllData(){return ue(this,null,function*(){yield Promise.all([this.loadCourts(),this.loadDateBlocks(),this.loadRecurringBlocks(),this.loadValidationRules(),this.loadBlockExemptions()])})}loadCourts(){return ue(this,null,function*(){try{let t=yield this.apiService.getActiveCourts().toPromise();this.courtEntities=t||[],this.courtEntities.forEach(e=>this.ensurePolicyDefaults(e)),this.courts=this.courtEntities.map(e=>e.courtName)}catch(t){console.error("Error loading courts:",t),this.courtEntities=[],this.courts=[]}})}ensurePolicyDefaults(t){t.priorityAccessEnabled==null&&(t.priorityAccessEnabled=!1),t.priorityReleaseHours==null&&(t.priorityReleaseHours=this.DEFAULT_PRIORITY_RELEASE_HOURS)}onPriorityToggle(t){t.priorityAccessEnabled&&t.priorityReleaseHours==null&&(t.priorityReleaseHours=this.DEFAULT_PRIORITY_RELEASE_HOURS)}getReleaseDays(t){let e=t.priorityReleaseHours??this.DEFAULT_PRIORITY_RELEASE_HOURS;return Math.round(e/24*100)/100}setReleaseDays(t,e){let i=Number(e);!Number.isFinite(i)||i<0||(t.priorityReleaseHours=Math.round(i*24))}savePolicyForCourt(t){return ue(this,null,function*(){this.ensurePolicyDefaults(t);let e=Number(t.priorityReleaseHours);if(t.priorityAccessEnabled&&(!Number.isFinite(e)||e<0||e>720)){this.showToast("Enter a release window between 0 and 30 days.","error");return}this.policySavingCourtId=t.id;try{let i=yield this.apiService.updateCourt(t.id,{courtName:t.courtName,priorityAccessEnabled:t.priorityAccessEnabled??!1,priorityReleaseHours:e}).toPromise();i&&Object.assign(t,i),this.showToast(`Policy saved for ${t.courtName}!`)}catch(i){console.error("Error saving court policy:",i),this.showToast("Failed to save policy. Please try again.","error")}finally{this.policySavingCourtId=null}})}
68showToast(t,e="success"){this.toastTimeout&&clearTimeout(this.toastTimeout),this.toastMessage=t,this.toastType=e,this.toastVisible=!0,this.toastTimeout=setTimeout(()=>{this.toastVisible=!1},3e3)}startLoading(t){this.isLoading=!0,this.loadingMessage=t}stopLoading(){this.isLoading=!1,this.loadingMessage=""}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(it),ae(je))};static \u0275cmp=We({type:n,selectors:[["app-court-management"]],decls:82,vars:37,consts:[["noHold",""],["class","loading-overlay",4,"ngIf"],[1,"toast"],[1,"bi"],[1,"modal-overlay"],[1,"modal-content","confirm-style"],[1,"modal-icon"],[1,"modal-danger-text"],[1,"modal-actions"],[1,"action-btn","delete",3,"click"],[1,"bi","bi-trash-fill"],[1,"action-btn","cancel",3,"click"],["class","modal-muted-text",4,"ngIf"],["class","modal-danger-text",4,"ngIf"],["class","modal-content edit-style",4,"ngIf"],[1,"management-container"],[1,"page-header"],[1,"info-box"],[1,"bi","bi-info-circle-fill"],[1,"tab-nav"],["type","button",1,"tab-btn",3,"click"],[1,"bi","bi-calendar-x-fill"],[1,"bi","bi-arrow-repeat"],[1,"bi","bi-unlock-fill"],[1,"bi","bi-shield-lock-fill"],["class","tab-panel",4,"ngIf"],[1,"loading-overlay"],[1,"loading-content"],[1,"spinner"],[1,"loading-message"],[1,"modal-muted-text"],[1,"modal-content","edit-style"],[1,"bi","bi-pencil-square"],[1,"form-group"],[1,"court-selector"],["class","court-checkbox",4,"ngFor","ngForOf"],[1,"form-row"],["for","edit-recurring-start-time"],["id","edit-recurring-start-time",3,"ngModelChange","ngModel"],["value","08:00"],["value","09:00"],["value","10:00"],["value","11:00"],["value","12:00"],["value","13:00"],["value","14:00"],["value","15:00"],["value","16:00"],["value","17:00"],["value","18:00"],["value","19:00"],["value","20:00"],["value","21:00"],["value","22:00"],["value","23:00"],["for","edit-recurring-end-time"],["id","edit-recurring-end-time",3,"ngModelChange","ngModel"],[1,"day-selector"],["class","day-checkbox",4,"ngFor","ngForOf"],["for","edit-recurring-description"],["type","text","id","edit-recurring-description","placeholder","e.g., Saturday Mass, Open Play",3,"ngModelChange","ngModel"],[1,"action-btn","save",3,"click","disabled"],[1,"bi","bi-floppy-fill"],[1,"court-checkbox"],["type","checkbox",3,"change","id","checked"],[3,"for"],[1,"day-checkbox"],[1,"tab-panel"],[1,"section-card"],[1,"section-header"],[1,"section-title"],[1,"section-description"],[3,"ngSubmit","formGroup"],["for","block-court"],["id","block-court","formControlName","court"],["value",""],["value","ALL"],[3,"value",4,"ngFor","ngForOf"],["for","block-date"],["type","date","id","block-date","formControlName","date"],["for","block-start-time"],["id","block-start-time","formControlName","startTime"],["for","block-end-time"],["id","block-end-time","formControlName","endTime"],["for","block-description"],["type","text","id","block-description","formControlName","description","placeholder","e.g., Tournament Day 1, Maintenance, Private Event"],["type","submit",1,"btn-primary",3,"disabled"],[1,"bi","bi-plus-lg"],[1,"list-section"],[1,"list-header"],[1,"list-header-title"],[1,"list-count"],["type","text","placeholder","\u{1F50D} Search date blocks...",1,"search-input",3,"ngModelChange","input","ngModel"],["class","rule-item",4,"ngFor","ngForOf"],["class","empty-state",4,"ngIf"],["class","pagination-controls",4,"ngIf"],[3,"value"],[1,"rule-item"],[1,"rule-details"],[1,"rule-title"],[1,"rule-description"],["class","rule-description",4,"ngIf"],[1,"btn-danger",3,"click"],[1,"empty-state"],[1,"pagination-controls"],[1,"pagination-btn","nav-btn",3,"click","disabled"],[1,"pagination-info"],[1,"pagination-pages"],["class","pagination-btn page-btn",3,"active","disabled","click",4,"ngFor","ngForOf"],[1,"pagination-btn","page-btn",3,"click","disabled"],["for","recurring-start-time"],["id","recurring-start-time","formControlName","startTime"],["for","recurring-end-time"],["id","recurring-end-time","formControlName","endTime"],["for","recurring-description"],["type","text","id","recurring-description","formControlName","description","placeholder","e.g., Saturday Mass, Open Play, Court Maintenance"],["type","text","placeholder","\u{1F50D} Search recurring blocks...",1,"search-input",3,"ngModelChange","input","ngModel"],[1,"rule-meta"],[1,"rule-actions"],[1,"btn-edit",3,"click"],["for","exemption-court"],["id","exemption-court","formControlName","court"],["for","exemption-date"],["type","date","id","exemption-date","formControlName","date",3,"min"],["for","exemption-start-time"],["id","exemption-start-time","formControlName","startTime"],["for","exemption-end-time"],["id","exemption-end-time","formControlName","endTime"],["for","exemption-description"],[2,"font-weight","400","text-transform","none","font-size","0.8rem","opacity","0.7"],["type","text","id","exemption-description","formControlName","description","placeholder","e.g., Special booking allowed, Admin override"],["type","text","placeholder","\u{1F50D} Search exemptions...",1,"search-input",3,"ngModelChange","input","ngModel"],["class","rule-item exemption-item",4,"ngFor","ngForOf"],[1,"rule-item","exemption-item"],[1,"bi","bi-unlock-fill","
68icon-unlock"],["class","rule-item policy-item",3,"policy-active",4,"ngFor","ngForOf"],[1,"rule-item","policy-item"],[1,"bi","bi-hexagon-fill"],[1,"court-type-badge"],[1,"policy-status"],["class","rule-meta",4,"ngIf"],[1,"policy-controls"],[1,"policy-toggle"],["type","checkbox",3,"ngModelChange","ngModel","name"],[1,"policy-slider"],["class","policy-hours",4,"ngIf"],["type","button",1,"btn-primary","btn-sm",3,"click","disabled"],[4,"ngIf","ngIfElse"],[1,"policy-hours"],["type","number","min","0","max","30","step","1","title","Days before the reservation when the court opens to everyone (0 disables the hold)",3,"ngModelChange","ngModel","name"],[1,"policy-hours-label"]],template:function(e,i){e&1&&(A(0,HC,5,1,"div",1),r(1,"div",2),w(2,"i",3),r(3,"span"),l(4),a()(),r(5,"div",4)(6,"div",5)(7,"div",6),l(8,"\u{1F5D1}\uFE0F"),a(),r(9,"h3"),l(10,"Confirm Deletion"),a(),r(11,"p"),l(12,"Are you sure you want to delete this date block?"),a(),r(13,"p",7),l(14,"This action cannot be undone."),a(),r(15,"div",8)(16,"button",9),S("click",function(){return i.confirmDateBlockDelete()}),w(17,"i",10),l(18," Yes, Delete "),a(),r(19,"button",11),S("click",function(){return i.closeDateBlockConfirmModal()}),l(20,"Cancel"),a()()()(),r(21,"div",4)(22,"div",5)(23,"div",6),l(24,"\u{1F5D1}\uFE0F"),a(),r(25,"h3"),l(26,"Confirm Deletion"),a(),r(27,"p"),l(28,"Are you sure you want to delete this recurring block group?"),a(),A(29,WC,2,2,"p",12)(30,GC,2,1,"p",13),r(31,"div",8)(32,"button",9),S("click",function(){return i.confirmRecurringBlockDelete()}),w(33,"i",10),l(34," Yes, Delete All "),a(),r(35,"button",11),S("click",function(){return i.closeRecurringBlockConfirmModal()}),l(36,"Cancel"),a()()()(),r(37,"div",4)(38,"div",5)(39,"div",6),l(40,"\u{1F513}"),a(),r(41,"h3"),l(42,"Confirm Deletion"),a(),r(43,"p"),l(44,"Are you sure you want to remove this exemption?"),a(),A(45,qC,2,2,"p",12)(46,$C,2,2,"p",12),r(47,"div",8)(48,"button",9),S("click",function(){return i.confirmBlockExemptionDelete()}),w(49,"i",10),l(50," Yes, Delete "),a(),r(51,"button",11),S("click",function(){return i.closeBlockExemptionConfirmModal()}),l(52,"Cancel"),a()()()(),r(53,"div",4),A(54,ZC,97,6,"div",14),a(),r(55,"div",15)(56,"div",16)(57,"h2"),l(58,"Court Management"),a(),r(59,"p"),l(60,"Manage blocking schedules, exemptions, and validation rules"),a()(),r(61,"div",17),w(62,"i",18),r(63,"span"),l(64,"Use this panel to control court availability \u2014 block dates for events, set weekly recurring schedules, and open exemptions for special cases. Changes take effect immediately."),a()(),r(65,"div",19)(66,"button",20),S("click",function(){return i.switchTab("date-blocks")}),w(67,"i",21),l(68," Date Blocks "),a(),r(69,"button",20),S("click",function(){return i.switchTab("recurring-blocks")}),w(70,"i",22),l(71," Recurring Blocks "),a(),r(72,"button",20),S("click",function(){return i.switchTab("block-exemptions")}),w(73,"i",23),l(74," Block Exemptions "),a(),r(75,"button",20),S("click",function(){return i.switchTab("policy")}),w(76,"i",24),l(77," Policy "),a()(),A(78,iw,114,8,"div",25)(79,pw,111,9,"div",25)(80,xw,114,9,"div",25)(81,Sw,28,3,"div",25),a()),e&2&&(x("ngIf",i.isLoading),d(),te("show",i.toastVisible)("success",i.toastType==="success")("error",i.toastType==="error"),d(),te("bi-check-circle-fill",i.toastType==="success")("bi-exclamation-circle-fill",i.toastType==="error"),d(2),R(i.toastMessage),d(),le("display",i.showDateBlockConfirmModal?"flex":"none"),d(16),le("display",i.showRecurringBlockConfirmModal?"flex":"none"),d(8),x("ngIf",i.groupToDelete),d(),x("ngIf",i.groupToDelete),d(7),le("display",i.showBlockExemptionConfirmModal?"flex":"none"),d(8),x("ngIf",i.exemptionToDelete),d(),x("ngIf",i.exemptionToDelete),d(7),le("display",i.showRecurringBlockEditModal?"flex":"none"),d(),x("ngIf",i.editingGroup),d(12),te("active",i.activeTab==="date-blocks"),d(3),te("active",i.activeTab==="recurring-blocks"),d(3),te("active",i.activeTab==="block-exemptions"),d(3),te("active",i.activeTab==="policy"),d(3),x("ngIf",i.activeTab==="date-blocks"),d(),x("ngIf",i.activeTab==="recurring-blocks"),d(),x("ngIf",i.activeTab==="block-exemptions"),d(),x("ngIf",i.activeTab==="policy"))},dependencies:[Ge,rt,$e,bi,Xn,yn,Cn,at,qi,bn,Vn,st,Yn,$i,$o,hi,_i,lt,ut],styles:['.management-container[_ngcontent-%COMP%]{max-width:1100px;margin:0 auto;padding:28px 20px;color:var(--color-text)}.page-header[_ngcontent-%COMP%]{margin-bottom:28px;padding-bottom:20px;border-bottom:2px solid var(--color-border);text-align:left}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0 0 4px;font-size:1.7rem;font-weight:700;color:var(--color-text);text-align:left}.page-header[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.9rem;color:var(--color-text-secondary)}.info-box[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:12px;background:color-mix(in srgb,var(--color-accent) 8%,transparent);border:1px solid color-mix(in srgb,var(--color-accent) 25%,transparent);border-left:4px solid var(--color-accent);color:var(--color-text);padding:16px 20px;border-radius:10px;margin-bottom:28px;font-size:.9rem;line-height:1.5}.info-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:18px;margin-top:2px;flex-shrink:0}.tab-nav[_ngcontent-%COMP%]{display:flex;gap:4px;margin-bottom:0;border-bottom:2px solid var(--color-border);flex-wrap:wrap}.tab-btn[_ngcontent-%COMP%]{padding:11px 22px;border:1px solid var(--color-border);border-bottom:none;border-radius:10px 10px 0 0;background:var(--color-surface);color:var(--color-text-secondary);font-weight:600;font-size:.88rem;cursor:pointer;transition:all .2s;position:relative;bottom:-2px}.tab-btn[_ngcontent-%COMP%]:hover:not(.active){background:var(--color-surface-hover);color:var(--color-text)}.tab-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;border-color:var(--color-accent);box-shadow:0 -2px 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.tab-panel[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-top:none;border-radius:0 10px 10px;padding:28px;margin-bottom:30px}.section-card[_ngcontent-%COMP%]{background:transparent}.section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:6px}.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:18px}.section-title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:700;color:var(--color-text);margin:0}.section-description[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin:0 0 24px;font-size:.9rem;line-height:1.5;padding-left:28px}.form-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:4px}.form-group[_ngcontent-%COMP%]{margin-bottom:18px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;margin-bottom:7px;font-weight:600;font-size:.85rem;color:var(--color-accent);letter-spacing:.02em;text-transform:uppercase}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]{width:100%;padding:10px 14px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:.95rem;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.court-selector[_ngcontent-%COMP%], .day-selector[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}
68.court-checkbox[_ngcontent-%COMP%], .day-checkbox[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:var(--color-surface);border:1.5px solid var(--color-border);padding:8px 16px;border-radius:20px;cursor:pointer;transition:background .2s,border-color .2s,box-shadow .2s,transform .1s;-webkit-user-select:none;user-select:none}.court-checkbox[_ngcontent-%COMP%]:hover:not(:has(input:checked)), .day-checkbox[_ngcontent-%COMP%]:hover:not(:has(input:checked)){border-color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.court-checkbox[_ngcontent-%COMP%]:has(input:checked), .day-checkbox[_ngcontent-%COMP%]:has(input:checked){background:var(--color-accent);border-color:var(--color-accent);box-shadow:0 2px 10px color-mix(in srgb,var(--color-accent) 45%,transparent);transform:translateY(-1px)}.court-checkbox[_ngcontent-%COMP%]:active, .day-checkbox[_ngcontent-%COMP%]:active{transform:translateY(0)}.court-checkbox[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .day-checkbox[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{display:none}.court-checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%], .day-checkbox[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{cursor:pointer;color:var(--color-text-secondary);font-size:.88rem;font-weight:600;transition:color .2s;white-space:nowrap}.court-checkbox[_ngcontent-%COMP%]:has(input:checked) label[_ngcontent-%COMP%], .day-checkbox[_ngcontent-%COMP%]:has(input:checked) label[_ngcontent-%COMP%]{color:#fff}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;border:none;padding:11px 24px;border-radius:8px;font-size:.95rem;font-weight:700;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:8px;box-shadow:0 3px 10px color-mix(in srgb,var(--color-accent) 35%,transparent)}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-1px);box-shadow:0 5px 14px color-mix(in srgb,var(--color-accent) 45%,transparent)}.btn-primary[_ngcontent-%COMP%]:disabled{background:var(--color-border);color:var(--color-text-muted);cursor:not-allowed;box-shadow:none;transform:none}.btn-danger[_ngcontent-%COMP%]{background:transparent;color:var(--color-danger);border:1px solid var(--color-danger);padding:7px 14px;border-radius:7px;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn-danger[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff}.btn-edit[_ngcontent-%COMP%]{background:transparent;color:var(--color-info);border:1px solid var(--color-info);padding:7px 14px;border-radius:7px;font-size:.82rem;font-weight:600;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn-edit[_ngcontent-%COMP%]:hover{background:var(--color-info);color:#fff}.list-section[_ngcontent-%COMP%]{margin-top:32px;padding-top:24px;border-top:1px dashed var(--color-border)}.list-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;gap:12px;flex-wrap:wrap}.list-header-title[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;gap:8px}.list-count[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-size:.75rem;font-weight:700;padding:2px 8px;border-radius:10px}.search-input[_ngcontent-%COMP%]{padding:9px 16px;border:1px solid var(--color-border);border-radius:20px;font-size:.88rem;background:var(--color-surface);color:var(--color-text);transition:border-color .2s,box-shadow .2s;width:260px;max-width:100%}.search-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 12%,transparent)}.search-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.rule-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;background:var(--color-surface);padding:16px 18px;border-radius:10px;margin-bottom:10px;border:1px solid var(--color-border);border-left:4px solid var(--color-accent);
68transition:box-shadow .2s,transform .2s;gap:12px}.rule-item[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-md);transform:translateY(-1px)}.rule-item.exemption-item[_ngcontent-%COMP%]{border-left-color:var(--color-warning)}.rule-details[_ngcontent-%COMP%]{flex:1;min-width:0}.rule-title[_ngcontent-%COMP%]{font-weight:700;color:var(--color-text);margin-bottom:4px;font-size:.95rem;display:flex;align-items:center;gap:7px}.rule-description[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.88rem;line-height:1.4}.rule-description[_ngcontent-%COMP%] + .rule-description[_ngcontent-%COMP%]{margin-top:2px}.rule-meta[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.78rem;margin-top:5px;font-style:italic}.rule-actions[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center;flex-shrink:0}.icon-unlock[_ngcontent-%COMP%]{color:var(--color-warning)}.policy-item[_ngcontent-%COMP%]{border-left-color:var(--color-border)}.policy-item.policy-active[_ngcontent-%COMP%]{border-left-color:var(--color-accent)}.policy-status[_ngcontent-%COMP%]{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:2px 8px;border-radius:999px;background:color-mix(in srgb,var(--color-text-muted) 18%,transparent);color:var(--color-text-muted)}.policy-status.on[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 18%,transparent);color:var(--color-accent)}.court-type-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;font-size:.68rem;font-weight:700;text-transform:capitalize;letter-spacing:.02em;padding:2px 8px;border-radius:999px;border:1px solid var(--color-border);background:color-mix(in srgb,var(--color-text-muted) 12%,transparent);color:var(--color-text-secondary)}.court-type-badge.coaching[_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--color-warning) 45%,transparent);background:color-mix(in srgb,var(--color-warning) 15%,transparent);color:var(--color-warning)}.court-type-badge.rental[_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--color-info, #3498db) 45%,transparent);background:color-mix(in srgb,var(--color-info, #3498db) 15%,transparent);color:var(--color-info, #3498db)}.policy-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex-shrink:0;flex-wrap:wrap;justify-content:flex-end}.policy-toggle[_ngcontent-%COMP%]{position:relative;display:inline-block;width:44px;height:24px;cursor:pointer;flex-shrink:0}.policy-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{display:none}.policy-slider[_ngcontent-%COMP%]{position:absolute;inset:0;background:var(--color-border);border-radius:999px;transition:background .2s}.policy-slider[_ngcontent-%COMP%]:before{content:"";position:absolute;height:18px;width:18px;left:3px;top:3px;background:#fff;border-radius:50%;transition:transform .2s;box-shadow:var(--shadow-sm)}.policy-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .policy-slider[_ngcontent-%COMP%]{background:var(--color-accent)}.policy-toggle[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:checked + .policy-slider[_ngcontent-%COMP%]:before{transform:translate(20px)}.policy-hours[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px}.policy-hours[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:74px;padding:7px 10px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface);color:var(--color-text);font-size:.9rem}.policy-hours[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent)}.policy-hours-label[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);white-space:nowrap}.btn-sm[_ngcontent-%COMP%]{padding:7px 14px;font-size:.85rem}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:32px 16px;color:var(--color-text-muted);font-style:italic;border:1px dashed var(--color-border);border-radius:10px}.pagination-controls[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:6px;margin-top:24px;flex-wrap:wrap}.pagination-btn[_ngcontent-%COMP%]{padding:8px 14px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);border-radius:7px;cursor:pointer;transition:all .2s;font-weight:600;font-size:.88rem;min-width:38px;text-align:center}.pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pagination-btn[_ngcontent-%COMP%]:disabled{opacity:.4;cursor:not-allowed}.pagination-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.pagination-btn.nav-btn[_ngcontent-%COMP%]{padding:8px 12px}.pagination-info[_ngcontent-%COMP%]{display:none;color:var(--color-text-secondary);font-size:.85rem;font-weight:600;padding:7px 12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:7px;white-space:nowrap}.pagination-pages[_ngcontent-%COMP%]{display:flex;gap:6px;align-items:center}.modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000a6;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:9999}.modal-content[_ngcontent-%COMP%]{background:var(--color-background-elevated);border:1px solid var(--color-border);border-radius:14px;padding:32px 28px;box-shadow:var(--shadow-lg);max-width:420px;width:100%;color:var(--color-text);animation:_ngcontent-%COMP%_modalIn .2s ease-out}@keyframes _ngcontent-%COMP%_modalIn{0%{opacity:0;transform:scale(.95) translateY(-10px)}to{opacity:1;transform:scale(1) translateY(0)}}.modal-icon[_ngcontent-%COMP%]{text-align:center;font-size:40px;margin-bottom:12px}.modal-content[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-text);margin:0 0 12px;text-align:center;font-size:1.2rem}.modal-content[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin:6px 0;font-size:.9rem;text-align:center;line-height:1.5}
68.modal-content[_ngcontent-%COMP%] .modal-danger-text[_ngcontent-%COMP%]{color:var(--color-danger);font-size:.82rem;text-align:center;margin-top:8px}.modal-content[_ngcontent-%COMP%] .modal-muted-text[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.85rem;text-align:center}.modal-actions[_ngcontent-%COMP%]{display:flex;gap:12px;justify-content:center;margin-top:24px}.action-btn[_ngcontent-%COMP%]{padding:10px 22px;border:none;border-radius:8px;font-weight:700;font-size:.9rem;cursor:pointer;transition:all .2s;display:inline-flex;align-items:center;gap:6px}.action-btn[_ngcontent-%COMP%]:hover{transform:translateY(-1px)}.action-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;box-shadow:0 3px 10px color-mix(in srgb,var(--color-danger) 35%,transparent)}.action-btn.save[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 3px 10px color-mix(in srgb,var(--color-accent) 35%,transparent)}.action-btn.save[_ngcontent-%COMP%]:disabled{background:var(--color-border);color:var(--color-text-muted);box-shadow:none;cursor:not-allowed;transform:none}.action-btn.cancel[_ngcontent-%COMP%], .action-btn.edit[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text-secondary);border:1px solid var(--color-border)}.action-btn.cancel[_ngcontent-%COMP%]:hover, .action-btn.edit[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);color:var(--color-text)}.edit-style[_ngcontent-%COMP%]{max-width:560px}.edit-style[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{text-align:left;margin-bottom:20px}.edit-style[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr;gap:14px}.loading-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:10000}.loading-content[_ngcontent-%COMP%]{text-align:center}.spinner[_ngcontent-%COMP%]{width:48px;height:48px;border:4px solid rgba(255,255,255,.2);border-top:4px solid var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto 16px}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-message[_ngcontent-%COMP%]{font-size:.95rem;color:#fff;font-weight:500}.toast[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;padding:14px 22px;border-radius:10px;display:flex;align-items:center;gap:10px;font-weight:600;font-size:.9rem;z-index:10001;transform:translate(calc(100% + 24px));opacity:0;transition:all .3s cubic-bezier(.34,1.56,.64,1);max-width:340px}.toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1}.toast.success[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 20px color-mix(in srgb,var(--color-accent) 45%,transparent)}.toast.error[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;box-shadow:0 4px 20px color-mix(in srgb,var(--color-danger) 45%,transparent)}.toast[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:18px}@media (max-width: 768px){.management-container[_ngcontent-%COMP%]{padding:14px 12px}.tab-panel[_ngcontent-%COMP%]{padding:20px 16px}.form-row[_ngcontent-%COMP%]{grid-template-columns:1fr}.rule-item[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.rule-actions[_ngcontent-%COMP%], .search-input[_ngcontent-%COMP%]{width:100%}.modal-content[_ngcontent-%COMP%]{max-width:calc(100vw - 32px);margin:16px}.modal-actions[_ngcontent-%COMP%]{flex-direction:column}.action-btn[_ngcontent-%COMP%]{width:100%;justify-content:center}.tab-btn[_ngcontent-%COMP%]{padding:9px 14px;font-size:.82rem}}@media (max-width: 480px){.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.3rem}.tab-nav[_ngcontent-%COMP%]{gap:2px}.tab-btn[_ngcontent-%COMP%]{padding:8px 10px;font-size:.78rem}.edit-style[_ngcontent-%COMP%] .form-row[_ngcontent-%COMP%]{grid-template-columns:1fr}.pagination-info[_ngcontent-%COMP%]{display:block;order:2;flex:1;text-align:center}.pagination-pages[_ngcontent-%COMP%]{display:none}.pagination-btn.nav-btn[_ngcontent-%COMP%]{order:1}.pagination-btn.nav-btn[_ngcontent-%COMP%]:last-child{order:3}.pagination-controls[_ngcontent-%COMP%]{justify-content:space-between}.list-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}']})};var kw=(n,t)=>[n,t];function Ow(n,t){n&1&&(r(0,"div"),l(1,"Full name is required."),a())}function Ew(n,t){n&1&&(r(0,"div"),l(1,"Full name must be at least 2 characters long."),a())}function Tw(n,t){if(n&1&&(r(0,"div",48),A(1,Ow,2,0,"div",49)(2,Ew,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.fullname==null||e.fullname.errors==null?null:e.fullname.errors.required),d(),x("ngIf",e.fullname==null||e.fullname.errors==null?null:e.fullname.errors.minlength)}}function Iw(n,t){n&1&&(r(0,"div"),l(1,"Email is required."),a())}function Aw(n,t){n&1&&(r(0,"div"),l(1,"Please enter a valid email address."),a())}function Dw(n,t){if(n&1&&(r(0,"div",48),A(1,Iw,2,0,"div",49)(2,Aw,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.email==null||e.email.errors==null?null:e.email.errors.required),d(),x("ngIf",e.email==null||e.email.errors==null?null:e.email.errors.email)}}function Rw(n,t){n&1&&(r(0,"div"),l(1,"Contact number is required."),a())}function Bw(n,t){n&1&&(r(0,"div"),l(1,"Format: 091XXXXXXXX"),a())}function Nw(n,t){if(n&1&&(r(0,"div",48),A(1,Rw,2,0,"div",49)(2,Bw,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.contactNumber==null||e.contactNumber.errors==null?null:e.contactNumber.errors.required),d(),x("ngIf",e.contactNumber==null||e.contactNumber.errors==null?null:e.contactNumber.errors.pattern)}}function Vw(n,t){n&1&&(r(0,"div"),l(1,"Address is required."),a())}function Lw(n,t){n&1&&(r(0,"div"),l(1,"Address must be at least 5 characters long."),a())}function Fw(n,t){if(n&1&&(r(0,"div",48),A(1,Vw,2,0,"div",49)(2,Lw,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.address==null||e.address.errors==null?null:e.address.errors.required),d(),x("ngIf",e.address==null||e.address.errors==null?null:e.address.errors.minlength)}}function zw(n,t){n&1&&(r(0,"div"),l(1,"Username is required."),a())}function Uw(n,t){n&1&&(r(0,"div"),l(1,"Username must be at least 3 characters long."),a())}function jw(n,t){n&1&&(r(0,"div"),l(1,"Username must be at most 20 characters long."),a())}function Hw(n,t){n&1&&(r(0,"div"),l(1,"Username can only use letters, numbers, dot, underscore, or hyphen (no spaces)."),a())}function Ww(n,t){if(n&1&&(r(0,"div",48),A(1,zw,2,0,"div",49)(2,Uw,2,0,"div",49)(3,jw,2,0,"div",49)(4,Hw,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.required),d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.minlength),d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.maxlength),d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.pattern)}}function Gw(n,t){n&1&&(r(0,"div",50),Le(),r(1,"svg",51),w(2,"path",52),a(),l(3," Username format looks good! "),a())}function qw(n,t){n&1&&(Le(),r(0,"svg",53),w(1,"path",54)(2,"circle",55),a())}function $w(n,t){n&1&&(Le(),r(0,"svg",53),w(1,"path",56)(2,"circle",55),a())}function Yw(n,t){n&1&&(r(0,"div"),l(1,"Password is required."),a())}function Xw(n,t){n&1&&(r(0,"div"),l(1,"Password must be at least 6 characters long."),a())}function Zw(n,t){if(n&1&&(r(0,"div",48),A(1,Yw,2,0,"div",49)(2,Xw,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.password==null||e.password.errors==null?null:e.password.errors.required),d(),x("ngIf",e.password==null||e.password.errors==null?null:e.password.errors.minlength)}}function Qw(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"path",52),a())}function Kw(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"line",58)(2,"line",59),a())}function Jw(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"path",52),a())}function eP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"line",58)(2,"line",59),a())}function tP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"path",52),a())}function nP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"line",58)(2,"line",59),a())}function iP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"path",52),a())}function oP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"line",58)(2,"line",59),a())}function rP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"path",52),a())}function aP(n,t){n&1&&(Le(),r(0,"svg",57),w(1,"line",58)(2,"line",59),a())}function sP(n,t){n&1&&(Le(),r(0,"svg",53),w(1,"path",54)(2,"circle",55),a())}function lP(n,t){n&1&&(Le(),r(0,"svg",53),w(1,"path",56)(2,"circle",55),a())}function cP(n,t){n&1&&(r(0,"div"),l(1,"Please confirm your password."),a())}function dP(n,t){n&1&&(r(0,"div"),l(1,"Passwords do not match."),a())}function pP(n,t){if(n&1&&(r(0,"div",48),A(1,cP,2,0,"div",49)(2,dP,2,0,"div",49),a()),n&2){let e=h();d(),x("ngIf",e.confirmPassword==null||e.confirmPassword.errors==null?null:e.confirmPassword.errors.required),d(),x("ngIf",e.confirmPassword==null||e.confirmPassword.errors==null?null:e.confirmPassword.errors.passwordMismatch)}}function mP(n,t){n&1&&(r(0,"div",48),l(1," You must read and accept the Privacy Policy to register. "),a())}function gP(n,t){n&1&&w(0,"span",60)}function uP(n,t){n&1&&(r(0,"div",73)(1,"p"),l(2,"\u2B07 Please scroll down to read the full Privacy Policy \u2B07"),a()())}function fP(n,t){if(n&1){let e=L();r(0,"div",61),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),r(1,"div",62),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",63)(3,"h2"),l(4,"Privacy Policy"),a(),r(5,"button",64),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),l(6,"\xD7"),a()(),r(7,"div",65),S("scroll",function(o){k(e);let s=h();return O(s.onPrivacyScroll(o))}),r(8,"h3"),l(9,"Pickleball Hub @ Tiendesitas \u2014 Privacy Policy"),a(),r(10,"p",66)(11,"strong"),l(12,"Effective Date: February 2026"),a()(),r(13,"div",67),l(14," Pickleball Hub @ Tiendesitas (\u201Cwe,\u201D \u201Cour,\u201D or \u201Cus\u201D) is committed to protecting the privacy and personal information of our users in compliance with the "),r(15,"strong"),l(16,"Data Privacy Act of 2012 (Republic Act No. 10173)"),a(),l(17," of the Philippines. By creating an account or using our court reservation system, you consent to the collection, use, and disclosure of your personal information as described
68in this Privacy Policy. "),a(),r(18,"section")(19,"h4"),l(20,"1. Information We Collect"),a(),r(21,"p"),l(22,"When you create an account and use our reservation system, we collect the following personal information:"),a(),r(23,"ul")(24,"li")(25,"strong"),l(26,"Account Information:"),a(),l(27," Full name, email address, mobile/contact number, home address, and username."),a(),r(28,"li")(29,"strong"),l(30,"Booking Information:"),a(),l(31," Session dates, time slots, number of players, player names, booking status, and booking history."),a(),r(32,"li")(33,"strong"),l(34,"Payment Information:"),a(),l(35," GCash payment receipts (uploaded images), payment verification records, and transaction amounts."),a(),r(36,"li")(37,"strong"),l(38,"Discount Eligibility Documents:"),a(),l(39," Government-issued ID images submitted for PWD or Senior Citizen discount verification."),a(),r(40,"li")(41,"strong"),l(42,"System Information:"),a(),l(43," Login timestamps and activity logs within the platform."),a()()(),r(44,"section")(45,"h4"),l(46,"2. How We Use Your Information"),a(),r(47,"ul")(48,"li"),l(49,"To process and manage your court reservations and open play bookings."),a(),r(50,"li"),l(51,"To verify payments and confirm your booking slots."),a(),r(52,"li"),l(53,"To send booking confirmations, reminders, and important session updates."),a(),r(54,"li"),l(55,"To apply applicable discounts (PWD, Senior Citizen) upon verification of submitted eligibility documents."),a(),r(56,"li"),l(57,"To generate QR codes for session check-in and attendance tracking."),a(),r(58,"li"),l(59,"To administer your account and provide customer support."),a(),r(60,"li"),l(61,"To ensure compliance with facility rules and policies."),a()()(),r(62,"section")(63,"h4"),l(64,"3. Who Can Access Your Data"),a(),r(65,"p")(66,"strong"),l(67,"By using this system, you acknowledge and expressly consent that the following authorized parties may access your personal information:"),a()(),r(68,"ul")(69,"li")(70,"strong"),l(71,"System Administrators:"),a(),l(72," Authorized personnel managing the reservation platform have access to all user accounts, booking records, uploaded payment receipts, discount eligibility documents, and personal profile information. This access is necessary for payment verification, booking management, discount approvals, and customer support."),a(),r(73,"li")(74,"strong"),l(75,"Database Administrators:"),a(),l(76," Technical personnel responsible for maintaining the database infrastructure may directly access personal data stored in the database during system maintenance, performance monitoring, troubleshooting, and data integrity checks."),a(),r(77,"li")(78,"strong"),l(79,"Facility Staff:"),a(),l(80," Staff assigned to manage sessions and verify check-ins may view relevant booking and attendance information."),a()(),r(81,"p"),l(82,"We do "),r(83,"strong"),l(84,"not"),a(),l(85," sell, rent, or share your personal information with third parties for marketing or commercial purposes."),a()(),r(86,"section")(87,"h4"),l(88,"4. Data Retention"),a(),r(89,"ul")(90,"li"),l(91,"Your personal information and booking records are retained for as long as your account is active or as needed to fulfill the purposes described in this policy, or as required by applicable law."),a(),r(92,"li"),l(93,"Uploaded payment receipts and ID documents are retained for record-keeping and audit purposes."),a(),r(94,"li"),l(95,"To request account deletion or data removal, please contact the facility management directly."),a()()(),r(96,"section")(97,"h4"),l(98,"5. Data Security"),a(),r(99,"ul")(100,"li"),l(101,"We implement reasonable technical and organizational measures to protect your personal information against unauthorized external access, disclosure, or destruction."),a(),r(102,"li"),l(103,"Passwords are encrypted and never stored in plain text."),a(),r(104,"li"),l(105,"However, please be aware that access by authorized administrators and database personnel is part of normal system operations, as described in Section 3."),a(),r(106,"li"),l(107,"By using this system, you acknowledge and accept that such authorized access may occur."),a()()(),r(108,"section")(109,"h4"),l(110,"6. Your Rights Under the Data Privacy Act of 2012"),a(),r(111,"p"),l(112,"As a data subject under Republic Act No. 10173, you have the right to:"),a(),r(113,"ul")(114,"li")(115,"strong"),l(116,"Access:"),a(),l(117," Request a copy of your personal data held by us."),a(),r(118,"li")(119,"strong"),l(120,"Correction:"),a(),l(121," Request correction of inaccurate personal data."),a(),r(122,"li")(123,"strong"),l(124,"Erasure / Blocking:"),a(),l(125," Request deleti
68on of your personal data under certain circumstances."),a(),r(126,"li")(127,"strong"),l(128,"Object:"),a(),l(129," Object to the processing of your personal data for specific purposes."),a(),r(130,"li")(131,"strong"),l(132,"Lodge a Complaint:"),a(),l(133," File a complaint with the "),r(134,"strong"),l(135,"National Privacy Commission (NPC)"),a(),l(136," if you believe your rights under the Data Privacy Act have been violated."),a()(),r(137,"p"),l(138,"To exercise any of these rights, please contact facility management in person or through our official channels."),a()(),r(139,"section")(140,"h4"),l(141,"7. Consent to Data Visibility by Authorized Personnel"),a(),r(142,"p"),l(143,"By registering for and using the Pickleball Hub @ Tiendesitas reservation system, "),r(144,"strong"),l(145,"you expressly acknowledge and consent"),a(),l(146," that:"),a(),r(147,"ul")(148,"li"),l(149,"Your personal information, booking history, uploaded receipts, and payment records may be viewed by authorized system administrators and database personnel."),a(),r(150,"li"),l(151,"This access is necessary for the lawful operation, maintenance, and administration of the reservation system."),a(),r(152,"li"),l(153,"You will not hold Pickleball Hub @ Tiendesitas, its owners, management, staff, or technical personnel liable for access to your data by authorized parties acting within the scope of their duties."),a()()(),r(154,"section")(155,"h4"),l(156,"8. Local Storage and Session Data"),a(),r(157,"ul")(158,"li"),l(159,"Our web application uses browser local storage to maintain your login session and theme preferences."),a(),r(160,"li"),l(161,"This data is stored on your device only and is used solely to improve your experience within the application."),a(),r(162,"li"),l(163,"No personal data stored locally is transmitted to third parties."),a()()(),r(164,"section")(165,"h4"),l(166,"9. Changes to This Policy"),a(),r(167,"ul")(168,"li"),l(169,"We reserve the right to update this Privacy Policy at any time."),a(),r(170,"li"),l(171,"Material changes will be reflected in the \u201CEffective Date\u201D at the top of this document."),a(),r(172,"li"),l(173,"Continued use of the system after changes have been posted constitutes your acceptance of the updated policy."),a()()(),r(174,"section")(175,"h4"),l(176,"10. Contact Us"),a(),r(177,"p"),l(178,"For any privacy-related concerns or to exercise your data rights, please contact us at:"),a(),r(179,"p")(180,"strong"),l(181,"Pickleball Hub @ Tiendesitas"),a(),w(182,"br"),l(183,"Tiendesitas, Pasig City, Philippines"),a()(),r(184,"div",68)(185,"p")(186,"strong"),l(187,"Pickleball Hub @ Tiendesitas"),a(),l(188," \u2014 We value your trust and are committed to keeping your data safe and used responsibly."),a()(),A(189,uP,3,0,"div",69),a(),r(190,"div",70)(191,"button",71),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),l(192,"Close"),a(),r(193,"button",72),S("click",function(){k(e);let o=h();return O(o.acceptPrivacyFromModal())}),l(194),a()()()()}if(n&2){let e=h();d(189),x("ngIf",!e.hasScrolledToBottomPrivacy),d(4),x("disabled",!e.hasScrolledToBottomPrivacy),d(),F(" ",e.hasScrolledToBottomPrivacy?"I Accept":"Scroll to Accept"," ")}}var ac=class n{constructor(t,e,i){this.fb=t;this.router=e;this.apiService=i;this.registerForm=this.fb.group({fullname:["",[Oe.required,Oe.minLength(2)]],email:["",[Oe.required,Oe.email]],contactNumber:["",[Oe.required,Oe.pattern(/^09\d{9}$/)]],address:["",[Oe.required,Oe.minLength(5)]],username:["",[Oe.required,Oe.minLength(5),Oe.maxLength(20),Oe.pattern(/^[a-zA-Z0-9._-]+$/),Oe.pattern(/^\S+$/)]],password:["",[Oe.required,Oe.minLength(8),Oe.pattern(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]).+$/)]],confirmPassword:["",[Oe.required]],acceptPrivacyPolicy:[!1,[Oe.requiredTrue]]},{validators:this.passwordMatchValidator})}registerForm;isSubmitting=!1;showToast=!1;toastMessage="";toastType="info";showPassword=!1;showConfirmPassword=!1;showPrivacyModal=!1;hasScrolledToBottomPrivacy=!1;ngOnInit(){}get passwordStrength(){let t=this.password?.value||"";return{length:t.length>
68=8,lowercase:/[a-z]/.test(t),uppercase:/[A-Z]/.test(t),number:/\d/.test(t),special:/[!@#$%^&*()_+\-=\[\]{};':"\\|,.<>\/?]/.test(t)}}togglePassword(){this.showPassword=!this.showPassword}toggleConfirmPassword(){this.showConfirmPassword=!this.showConfirmPassword}passwordMatchValidator(t){let e=t.get("password"),i=t.get("confirmPassword");return!e||!i?null:e.value!==i.value?(i.setErrors({passwordMismatch:!0}),{passwordMismatch:!0}):(i.errors?.passwordMismatch&&(delete i.errors.passwordMismatch,Object.keys(i.errors).length===0&&i.setErrors(null)),null)}get usernameHasSpace(){return/\s/.test(this.username?.value||"")}get usernameHasInvalidChars(){return this.username?.value&&!/^[a-zA-Z0-9._-]+$/.test(this.username.value)}get usernameTooLong(){return this.username?.value&&this.username.value.length>20}onRegister(){return ue(this,null,function*(){if(this.registerForm.valid&&!this.isSubmitting){this.isSubmitting=!0;try{let t=this.registerForm.value;if(t.password!==t.confirmPassword){this.displayToast("Passwords do not match.","error");return}let e={username:t.username.trim(),password:t.password,fullname:t.fullname.trim(),email:t.email.trim(),contactNumber:t.contactNumber.trim(),address:t.address.trim(),role:"user"},i=yield this.apiService.register(e).toPromise();i&&i.success?(this.displayToast("Registration successful, redirecting you to login page...","success"),setTimeout(()=>{this.router.navigate(["/login"])},2e3)):i&&i.error?this.displayToast(i.error,"error"):this.displayToast(i?.message||"Registration failed.","error")}catch(t){console.error("Registration error:",t);let e="Error connecting to server.";t?.error?.message?e=t.error.message:t?.message&&(e=t.message),this.displayToast(e,"error")}finally{this.isSubmitting=!1}}})}goToLogin(){this.router.navigate(["/login"])}goToSchedule(){this.router.navigate(["/"])}hideToast(){this.showToast=!1}displayToast(t,e="info"){this.toastMessage=t,this.toastType=e,this.showToast=!0,setTimeout(()=>{this.showToast=!1},4e3)}openPrivacyModal(){this.showPrivacyModal=!0,this.hasScrolledToBottomPrivacy=!1}closePrivacyModal(){this.showPrivacyModal=!1,this.hasScrolledToBottomPrivacy=!1}acceptPrivacyFromModal(){this.registerForm.patchValue({acceptPrivacyPolicy:!0}),this.closePrivacyModal()}onPrivacyScroll(t){let e=t.target;e.scrollTop+e.clientHeight>=e.scrollHeight-5&&(this.hasScrolledToBottomPrivacy=!0)}get fullname(){return this.registerForm.get("fullname")}get email(){return this.registerForm.get("email")}get contactNumber(){return this.registerForm.get("contactNumber")}get address(){return this.registerForm.get("address")}get username(){return this.registerForm.get("username")}get password(){return this.registerForm.get("password")}get confirmPassword(){return this.registerForm.get("confirmPassword")}get acceptPrivacyPolicy(){return this.registerForm.get("acceptPrivacyPolicy")}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(nt),ae(it))};static \u0275cmp=We({type:n,selectors:[["app-register"]],decls:112,vars:64,consts:[[1,"login-container"],[1,"login-modal"],[1,"login-content"],[1,"login-header"],["src","assets/images/pickleball-hub-icon-orange.png","alt","Pickleball Hub Logo",1,"login-logo"],[1,"login-subtitle"],[3,"ngSubmit","formGroup"],[1,"form-group"],["for","fullname"],["type","text","id","fullname","formControlName","fullname","required","","autocomplete","name","placeholder","Enter your full name"],["class","error-message",4,"ngIf"],["for","email"],["type","email","id","email","formControlName","email","required","","autocomplete","email","placeholder","Enter your email"],["for","contactNumber"],["type","text","id","contactNumber","formControlName","contactNumber","required","","maxlength","11","pattern","^09\\d{9}$","autocomplete","tel","placeholder","091XXXXXXXX"],["for","address"],["type","text","id","address","formControlName","address","required","","autocomplete","street-address","placeholder","Enter your full address"],["for","username"],["type","text","id","username","formControlName","username","required","","autocomplete","username","placeholder","Enter your username"],["class","success-message",4,"ngIf"],["for","password"],[1,"password-input-container"],["id","password","formControlName","password","required","","autocomplete","new-password","placeholder","Enter your password",3,"type"],["type","button","tabindex","-1","aria-label","Toggle Password Visibility",1,"password-toggle",3,"click"],["xmlns","http://www.w3.org/2000/svg","width","20","height","20","fill","none","viewBox","0 0 24 24",4,"ngIf"],[1,"password-checklist"],[1,"checklist-label"],[1,"check-icon"],["width","16","height","16","fill","none","viewBox","0 0 24 24",4,"ngIf"],[1,"check-text"],["for","confirmPassword"],["id","confirmPassword","formControlName","confirmPassword","required","","autocomplete","new-password","placeholder","Confirm your password",3,"type"],["type","button","tabindex","-1","aria-label","Toggle Confirm Password Visibility",1,"password-toggle",3,"click"],[1,"terms-checkbox-container"],[1,"terms-checkbox-label"],["type","checkbox","formControlName","acceptPrivacyPolicy",1,"terms-checkbox"],[1,"terms-text"],["type","button",1,"terms-link",3,"click","disabled"],[1,"login-actions"],["type","submit",1,"login-button",3,"disabled"],[1,"button-text"],["class","button-spinner",4,"ngIf"],["type","button",1,"login-button","secondary",3,"click","disabled"],["type","button",1,"cancel-button",3,"click","disabled"],[1,"toast",3,"ngClass"],[1,"toast-message"],[1,"toast-close",3,"click"],["class","terms-modal-overlay",3,"click",4,"ngIf"],[1,"error-message"],[4,"ngIf"],[1,"success-message"],["width","16","height","16","fill","none","viewBox","0 0 24 24",2,"vertical-align","middle","margin-right","4px"],["stroke","currentColor","stroke-width","3","d","M5 13l4 4L19 7"],["xmlns","http://www.w3.org/2000/svg","width","20","height","20","fill","none","viewBox","0 0 24 24"],["stroke","currentColor","stroke-width","2","d","M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12Z"],["cx","12","cy","12","r","3","stroke","currentColor","stroke-width","2"],["stroke","currentColor","stroke-width","2","d","M3 3l18 18M1 12s4-7 11-7c2.5 0 4.7.7 6.5 1.8M23 12s-4 7-11 7c-2.5 0-4.7-.7-6.5-1.8"],["width","16","height","16","fill","none","viewBox","0 0 24 24"],["x1","5","y1","5","x2","19","y2","19","stroke","currentColor","stroke-width","3","stroke-linecap","round"],["x1","19","y1","5","x2","5","y2","19","stroke","currentColor","stroke-width","3","stroke-linecap","round"],[1,"button-spinner"],[1,"terms-modal-overlay",3,"click"],[1,"terms-modal-content",3,"click"],[1,"terms-modal-header"],["aria-label","Close",1,"terms-close-btn",3,"click"],[1,"terms-modal-body",3,"scroll"],[1,"terms-effective-date"],[1,"terms-intro-text"],[1,"terms-footer-info"],["class","scroll-indicator",4,"ngIf"],[1,"terms-modal-footer"],[1,"terms-btn","terms-btn-secondary",3,"click"],[1,"terms-btn","terms-btn-primary",3,"click","disabled"],[1,"scroll-indicator"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),w(4,"img",4),r(5,"h3"),l(6,"Sign Up"),a(),r(7,"p",5),l(8,"Create your account to book courts and manage your reservations."),a()(),r(9,"form",6),S("ngSubmit",function(){return i.onRegister()}),r(10,"div",7)(11,"label",8),l(12,"Full Name"),a(),w(13,"input",9),A(14,Tw,3,2,"div",10),a(),r(15,"div",7)(16,"label",11),l(17,"Email"),a(),w(18,"input",12),A(19,Dw,3,2,"div",10),a(),r(20,"div",7)(21,"label",13),l(22,"Contact Number"),a(),w(23,"input",14),A(24,Nw,3,2,"div",10),a(),r(25,"div",7)(26,"label",15),l(27,"Address"),a(),w(28,"input",16),A(29,Fw,3,2,"div",10),a(),r(30,"div",7)(31,"label",17),l(32,"Username"),a(),w(33,"input",18),A(34,Ww,5,4,"div",10)(35,Gw,4,0,"div",19),a(),r(36,"div",7)(37,"label",20),l(38,"Password"),a(),r(39,"div",21),w(40,"input",22),r(41,"button",23),S("click",function(){return i.togglePassword()}),A(42,qw,3,0,"svg",24)(43,$w,3,0,"svg",24),a()(),A(44,Zw,3,2,"div",10),a(),r(45,"div",25)(46,"div",26),l(47,"Password must contain:"),a(),r(48,"ul")(49,"li")(50,"span",27),A(51,Qw,2,0,"svg",28)(52,Kw,3,0,"svg",28),a(),r(53,"span",29),l(54,"At least 8 characters"),a()(),r(55,"li")(56,"span",27),A(57,Jw,2,0,"svg",28)(58,eP,3,0,"svg",28),a(),r(59,"span",29),l(60,"One lowercase letter"),a()(),r(61,"li")(62,"span",27),A(63,tP,2,0,"svg",28)(64,nP,3,0,"svg",28),a(),r(65,"span",29),l(66,"One uppercase letter"),a()(),r(67,"li")(68,"span",27),A(69,iP,2,0,"svg",28)(70,oP,3,0,"svg",28),a(),r(71,"span",29),l(72,"One number"),a()(),r(73,"li")(74,"span",27),A(75,rP,2,0,"svg",28)(76,aP,3,0,"svg",28),a(),r(77,"span",29),l(78,"One special character"),a()()()(),r(79,"div",7)(80,"label",30),l(81,"Confirm Password"),a(),r(82,"div",21),w(83,"input",31),r(84,"button",32),S("click",function(){return i.toggleConfirmPassword()}),A(85,sP,3,0,"svg",24)(86,lP,3,0,"svg",24),a()(),A(87,pP,3,2,"div",10),a(),r(88,"div",33)(89,"label",34),w(90,"input",35),r(91,"span",36),l(92," I have read and agree to the "),r(93,"button",37),S("click",function(){return i.openPrivacyModal()}),l(94," Privacy Policy "),a(),l(95," and consent to the collection and use of my personal data as described therein. "),a()(),A(96,mP,2,0,"div",10),a(),r(97,"div",38)(98,"button",39)(99,"span",40),l(100),a(),A(101,gP,1,0,"span",41),a(),r(102,"button",42),S("click",function(){return i.goToLogin()}),l(103," Back to Login "),a(),r(104,"button",43),S("click",function(){return i.goToSchedule()}),l(105," Back to Schedule "),a()()()()(),r(106,"div",44)(107,"span",45),l(108),a(),r(109,"button",46),S("click",function(){return i.hideToast()}),l(110,"\xD7"),a()(),A(111,fP,195,3,"div",47),a()),e&2&&(d(9),x("formGroup",i.registerForm),d(4),te("error",(i.fullname==null?null:i.fullname.invali
68d)&&(i.fullname==null?null:i.fullname.touched)),d(),x("ngIf",(i.fullname==null?null:i.fullname.invalid)&&(i.fullname==null?null:i.fullname.touched)),d(4),te("error",(i.email==null?null:i.email.invalid)&&(i.email==null?null:i.email.touched)),d(),x("ngIf",(i.email==null?null:i.email.invalid)&&(i.email==null?null:i.email.touched)),d(4),te("error",(i.contactNumber==null?null:i.contactNumber.invalid)&&(i.contactNumber==null?null:i.contactNumber.touched)),d(),x("ngIf",(i.contactNumber==null?null:i.contactNumber.invalid)&&(i.contactNumber==null?null:i.contactNumber.touched)),d(4),te("error",(i.address==null?null:i.address.invalid)&&(i.address==null?null:i.address.touched)),d(),x("ngIf",(i.address==null?null:i.address.invalid)&&(i.address==null?null:i.address.touched)),d(4),te("error",(i.username==null?null:i.username.invalid)&&(i.username==null?null:i.username.touched)),d(),x("ngIf",(i.username==null?null:i.username.invalid)&&(i.username==null?null:i.username.touched)),d(),x("ngIf",(i.username==null?null:i.username.valid)&&(i.username==null?null:i.username.touched)),d(5),te("error",(i.password==null?null:i.password.invalid)&&(i.password==null?null:i.password.touched)),x("type",i.showPassword?"text":"password"),d(2),x("ngIf",!i.showPassword),d(),x("ngIf",i.showPassword),d(),x("ngIf",(i.password==null?null:i.password.invalid)&&(i.password==null?null:i.password.touched)),d(6),le("color",i.passwordStrength.length?"var(--color-success)":"var(--color-danger)"),d(),x("ngIf",i.passwordStrength.length),d(),x("ngIf",!i.passwordStrength.length),d(4),le("color",i.passwordStrength.lowercase?"var(--color-success)":"var(--color-danger)"),d(),x("ngIf",i.passwordStrength.lowercase),d(),x("ngIf",!i.passwordStrength.lowercase),d(4),le("color",i.passwordStrength.uppercase?"var(--color-success)":"var(--color-danger)"),d(),x("ngIf",i.passwordStrength.uppercase),d(),x("ngIf",!i.passwordStrength.uppercase),d(4),le("color",i.passwordStrength.number?"var(--color-success)":"var(--color-danger)"),d(),x("ngIf",i.passwordStrength.number),d(),x("ngIf",!i.passwordStrength.number),d(4),le("color",i.passwordStrength.special?"var(--color-success)":"var(--color-danger)"),d(),x("ngIf",i.passwordStrength.special),d(),x("ngIf",!i.passwordStrength.special),d(7),te("error",(i.confirmPassword==null?null:i.confirmPassword.invalid)&&(i.confirmPassword==null?null:i.confirmPassword.touched)),x("type",i.showConfirmPassword?"text":"password"),d(2),x("ngIf",!i.showConfirmPassword),d(),x("ngIf",i.showConfirmPassword),d(),x("ngIf",(i.confirmPassword==null?null:i.confirmPassword.invalid)&&(i.confirmPassword==null?null:i.confirmPassword.touched)),d(6),x("disabled",i.isSubmitting),d(3),x("ngIf",(i.acceptPrivacyPolicy==null?null:i.acceptPrivacyPolicy.invalid)&&(i.acceptPrivacyPolicy==null?null:i.acceptPrivacyPolicy.touched)),d(2),te("loading",i.isSubmitting),x("disabled",i.registerForm.invali
68d||i.isSubmitting),d(2),R(i.isSubmitting?"Registering...":"Register"),d(),x("ngIf",i.isSubmitting),d(),x("disabled",i.isSubmitting),d(2),x("disabled",i.isSubmitting),d(2),x("ngClass",ga(61,kw,i.toastType,i.showToast?"show":"")),d(2),R(i.toastMessage),d(3),x("ngIf",i.showPrivacyModal))},dependencies:[Ge,cn,$e,bi,Xn,at,bn,st,Yn,xi,ha,Eu,hi,_i],styles:[".login-container[_ngcontent-%COMP%]{position:fixed;inset:0;background:var(--color-background);display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px;box-sizing:border-box}.login-modal[_ngcontent-%COMP%]{background:var(--color-background-card);backdrop-filter:blur(10px);border-radius:16px;box-shadow:var(--shadow-lg);max-width:420px;width:100%;max-height:90vh;overflow-y:auto;animation:_ngcontent-%COMP%_modalSlideIn .3s ease-out;border:1px solid var(--color-border);scrollbar-width:none;-ms-overflow-style:none}.login-modal[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}@keyframes _ngcontent-%COMP%_modalSlideIn{0%{opacity:0;transform:translateY(-30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.login-content[_ngcontent-%COMP%]{padding:32px 28px;color:var(--color-text)}.login-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:32px}.login-logo[_ngcontent-%COMP%]{width:100px;height:auto;object-fit:contain;margin-bottom:16px}.login-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:24px;font-weight:700;color:var(--color-text)}.login-subtitle[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.4}.form-group[_ngcontent-%COMP%]{margin-bottom:24px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;margin-bottom:8px;font-weight:700;font-size:14px;color:var(--color-accent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:100%;padding:12px 16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:16px;transition:all .3s;box-sizing:border-box}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus, .form-group[_ngcontent-%COMP%] select[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);background:var(--color-surface-hover);box-shadow:0 0 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.form-group[_ngcontent-%COMP%] input.error[_ngcontent-%COMP%], .form-group[_ngcontent-%COMP%] select.error[_ngcontent-%COMP%]{border-color:var(--color-danger);box-shadow:0 0 5px color-mix(in srgb,var(--color-danger) 30%,transparent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.password-input-container[_ngcontent-%COMP%]{position:relative}.password-input-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding-right:48px}.password-toggle[_ngcontent-%COMP%]{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:4px;border-radius:4px;transition:color .3s;display:flex;align-items:center;justify-content:center}.password-toggle[_ngcontent-%COMP%]:hover{color:var(--color-accent)}.error-message[_ngcontent-%COMP%]{margin-top:8px;color:var(--color-danger);font-size:13px}.success-message[_ngcontent-%COMP%]{margin-top:8px;color:var(--color-success);font-size:13px}.login-error[_ngcontent-%COMP%]{margin-bottom:24px;padding:12px 16px;background:color-mix(in srgb,var(--color-danger) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-danger) 30%,transparent);border-radius:6px;color:var(--color-danger);font-size:14px;display:flex;align-items:center;gap:8px}.password-checklist[_ngcontent-%COMP%]{margin-bottom:12px}.password-checklist[_ngcontent-%COMP%] .checklist-label[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text-secondary);margin-bottom:4px}.password-checklist[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0}.password-checklist[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin-bottom:2px}.password-checklist[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .check-icon[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;min-width:20px;min-height:20px}.password-checklist[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .check-text[_ngcontent-%COMP%]{display:flex;align-items:center;font-size:14px;color:var(--color-text)}.login-actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.login-button[_ngcontent-%COMP%], .cancel-button[_ngcontent-%COMP%]{padding:14px 24px;border:none;border-radius:8px;font-size:16px;font-weight:700;cursor:pointer;transition:all .2s;
68display:flex;align-items:center;justify-content:center;gap:8px}.login-button[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 14px color-mix(in srgb,var(--color-accent) 40%,transparent)}.login-button[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-1px);box-shadow:0 6px 18px color-mix(in srgb,var(--color-accent) 55%,transparent)}.login-button[_ngcontent-%COMP%]:disabled{background:var(--color-border);cursor:not-allowed;transform:none;box-shadow:none}.cancel-button[_ngcontent-%COMP%]{background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-accent)}.cancel-button[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent) 10%,transparent);color:var(--color-text);border-color:var(--color-accent)}.cancel-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.login-button.secondary[_ngcontent-%COMP%]{background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-accent);box-shadow:none}.login-button.secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent) 10%,transparent);color:var(--color-text);box-shadow:none}.button-spinner[_ngcontent-%COMP%]{width:16px;height:16px;border:2px solid transparent;border-top:2px solid #fff;border-radius:50%;animation:_ngcontent-%COMP%_spin 1s linear infinite}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.toast[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);padding:16px 20px;border-radius:8px;box-shadow:var(--shadow-lg);border-left:4px solid var(--color-accent);display:flex;align-items:center;justify-content:space-between;min-width:300px;max-width:450px;transform:translate(500px);opacity:0;transition:all .3s;pointer-events:auto;position:fixed;top:40px;right:32px;z-index:99999}.toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1}.toast.success[_ngcontent-%COMP%]{border-left-color:var(--color-success)}.toast.error[_ngcontent-%COMP%]{border-left-color:var(--color-danger)}.toast.warning[_ngcontent-%COMP%]{border-left-color:var(--color-warning)}.toast.info[_ngcontent-%COMP%]{border-left-color:var(--color-accent)}.toast-message[_ngcontent-%COMP%]{flex:1;font-weight:600;font-size:14px}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-secondary);font-size:20px;cursor:pointer;margin-left:15px;padding:0;line-height:1;opacity:0;transition:opacity .2s}.toast[_ngcontent-%COMP%]:hover .toast-close[_ngcontent-%COMP%]{opacity:1}.terms-checkbox-container[_ngcontent-%COMP%]{margin-bottom:20px;margin-top:8px}.terms-checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.terms-checkbox[_ngcontent-%COMP%]{width:20px;height:20px;min-width:20px;margin:2px 0 0;cursor:pointer;accent-color:var(--color-accent)}.terms-text[_ngcontent-%COMP%]{color:var(--color-text);font-size:14px;line-height:1.6}.terms-link[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-accent);text-decoration:underline;cursor:pointer;padding:0;font-size:14px;font-weight:600;transition:color .3s}.terms-link[_ngcontent-%COMP%]:hover{color:var(--color-accent-dark)}.terms-link[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.terms-modal-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:#000000a6;backdrop-filter:blur(8px);display:flex;justify-content:center;align-items:center;z-index:10000;padding:1rem;animation:_ngcontent-%COMP%_fadeIn .3s ease}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.terms-modal-content[_ngcontent-%COMP%]{background:var(--color-background-elevated);border:1px solid var(--color-border);border-radius:16px;max-width:700px;width:100%;max-height:85vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);animation:_ngcontent-%COMP%_slideUp .3s ease;color:var(--color-text)}.terms-modal-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;border-bottom:2px solid var(--color-border);background:var(--color-accent);border-radius:16px 16px 0 0}.terms-modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:1.5rem;font-weight:600}.terms-close-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:2rem;color:#fff;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s}.terms-close-btn[_ngcontent-%COMP%]:hover{background:#e74c3c4d;
68color:#e74c3c;transform:rotate(90deg)}.terms-modal-body[_ngcontent-%COMP%]{padding:2rem;overflow-y:auto;flex:1;background:color-mix(in srgb,var(--color-background) 30%,transparent);position:relative}.terms-modal-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.4rem;margin:0 0 .5rem;font-weight:600}.terms-effective-date[_ngcontent-%COMP%]{color:var(--color-warning);font-size:.95rem;margin-bottom:1.5rem;font-weight:600}.terms-intro-text[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border-left:4px solid var(--color-accent);padding:1rem;margin:1.5rem 0;border-radius:6px;color:var(--color-text);font-size:.95rem}.terms-modal-body[_ngcontent-%COMP%] section[_ngcontent-%COMP%]{margin:1.5rem 0}.terms-modal-body[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.2rem;margin:1.5rem 0 .75rem;font-weight:600;border-bottom:2px solid var(--color-accent);padding-bottom:.4rem}.terms-modal-body[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:.5rem 0 1rem 1.5rem;padding:0}.terms-modal-body[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:.6rem;color:var(--color-text);line-height:1.6;font-size:.9rem}.terms-modal-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text);margin:.6rem 0;font-size:.9rem}.terms-modal-body[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600}.terms-footer-info[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent);padding:1rem;border-radius:8px;text-align:center;margin-top:2rem}.terms-footer-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1rem;margin:0;font-weight:600}.scroll-indicator[_ngcontent-%COMP%]{position:sticky;bottom:0;background:color-mix(in srgb,var(--color-accent) 15%,transparent);padding:1.5rem 1rem .5rem;text-align:center;pointer-events:none;animation:_ngcontent-%COMP%_pulse 2s infinite}.scroll-indicator[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-warning);font-weight:700;margin:0;font-size:.95rem}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}.terms-modal-footer[_ngcontent-%COMP%]{padding:1.5rem 2rem;border-top:2px solid var(--color-border);display:flex;gap:1rem;justify-content:flex-end;background:color-mix(in srgb,var(--color-background) 50%,transparent);border-radius:0 0 16px 16px}.terms-btn[_ngcontent-%COMP%]{padding:.75rem 1.5rem;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .3s;display:inline-flex;align-items:center;justify-content:center}.terms-btn-secondary[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-text) 8%,transparent);color:var(--color-text);border:1px solid var(--color-border)}.terms-btn-secondary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border-color:var(--color-accent);transform:translateY(-2px)}.terms-btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 14px color-mix(in srgb,var(--color-accent) 40%,transparent)}.terms-btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-2px);box-shadow:0 6px 18px color-mix(in srgb,var(--color-accent) 55%,transparent)}.terms-btn-primary[_ngcontent-%COMP%]:disabled{background:var(--color-border);cursor:not-allowed;transform:none;box-shadow:none;opacity:.6}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-border-light);border-radius:4px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--color-accent) 50%,transparent);border-radius:4px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--color-accent) 70%,transparent)}@media (max-width: 480px){.login-container[_ngcontent-%COMP%]{padding:8px}.login-content[_ngcontent-%COMP%]{padding:16px 10px}.login-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:18px}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{font-size:16px}.login-button[_ngcontent-%COMP%], .cancel-button[_ngcontent-%COMP%]{font-size:14px}.password-checklist[_ngcontent-%COMP%] li[_ngcontent-%COMP%] .check-text[_ngcontent-%COMP%]{font-size:12px}.terms-modal-content[_ngcontent-%COMP%]{max-width:95%;max-height:90vh}.terms-modal-header[_ngcontent-%COMP%], .terms-modal-footer[_ngcontent-%COMP%]{padding:1rem 1.5rem}.terms-modal-body[_ngcontent-%COMP%]{padding:1.5rem}.terms-modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.25rem}.terms-btn[_ngcontent-%COMP%]{width:100%;padding:.875rem 1.5rem}}"]})};var Yi=class n{constructor(t,e){this.http=t;this.authService=e;this.applyTheme(this.themeSubject.value),this.serverSave$.pipe(pa(500)).subscribe(i=>{this.doSaveToServer(i)})}STORAGE_KEY="pickle_theme_config";defaultTheme={mode:"dark",primaryColor:"#2c3e50",accentColor:"#1abc9c"};presets=[{name:"ocean",label:"Ocean Blue",colors:{primary:"#2c3e50",accent:"#1abc9c"}},{name:"sunset",label:"Sunset Orange",colors:{primary:"#34495e",accent:"#e
6867e22"}},{name:"forest",label:"Forest Green",colors:{primary:"#27ae60",accent:"#2ecc71"}},{name:"royal",label:"Royal Purple",colors:{primary:"#8e44ad",accent:"#9b59b6"}},{name:"crimson",label:"Crimson Red",colors:{primary:"#c0392b",accent:"#e74c3c"}},{name:"midnight",label:"Midnight Blue",colors:{primary:"#2c3e50",accent:"#3498db"}},{name:"coral",label:"Coral Pink",colors:{primary:"#e91e63",accent:"#f06292"}},{name:"amber",label:"Amber Gold",colors:{primary:"#f39c12",accent:"#f1c40f"}}];themeSubject=new fn(this.loadTheme());theme$=this.themeSubject.asObservable();serverSave$=new Et;syncWithServer(){let t=this.authService.getCurrentUser();if(!t?.id||!t?.token)return;let e=new si({Authorization:`Bearer ${t.token}`});this.http.get(`${Be.apiBase}/users/${t.id}/theme`,{headers:e}).subscribe({next:i=>{let o={mode:i.mode,primaryColor:i.primaryColor,accentColor:i.accentColor};this.themeSubject.next(o),this.applyTheme(o),localStorage.setItem(this.STORAGE_KEY,JSON.stringify(o))},error:()=>{}})}getCurrentTheme(){return this.themeSubject.value}setMode(t){let e=Ye(ze({},this.themeSubject.value),{mode:t});this.themeSubject.next(e),this.applyTheme(e),this.saveTheme(e)}toggleMode(){let t=this.themeSubject.value.mode;this.setMode(t==="dark"?"light":"dark")}setPrimaryColor(t){let e=Ye(ze({},this.themeSubject.value),{primaryColor:t});this.themeSubject.next(e),this.applyTheme(e),this.saveTheme(e)}setAccentColor(t){let e=Ye(ze({},this.themeSubject.value),{accentColor:t});this.themeSubject.next(e),this.applyTheme(e),this.saveTheme(e)}applyPreset(t){let e=Ye(ze({},this.themeSubject.value),{primaryColor:t.colors.primary,accentColor:t.colors.accent});this.themeSubject.next(e),this.applyTheme(e),this.saveTheme(e)}setCustomColors(t){let e=Ye(ze({},this.themeSubject.value),{customColors:ze(ze({},this.themeSubject.value.customColors),t)});this.themeSubject.next(e),this.applyTheme(e),this.saveTheme(e)}resetToDefault(){this.themeSubject.next(this.defaultTheme),this.applyTheme(this.defaultTheme),this.saveTheme(this.defaultTheme)}loadTheme(){try{let t=localStorage.getItem(this.STORAGE_KEY);if(t){let e=JSON.parse(t);return ze(ze({},this.defaultTheme),e)}}catch(t){console.error("Error loading theme:",t)}return this.defaultTheme}saveTheme(t){try{localStorage.setItem(this.STORAGE_KEY,JSON.stringify(t))}catch(e){console.error("Error saving theme:",e)}this.serverSave$.next(t)}doSaveToServer(t){let e=this.authService.getCurrentUser();if(!e?.id||!e?.token)return;let i=new si({Authorization:`Bearer ${e.token}`,"Content-Type":"application/json"});this.http.put(`${Be.apiBase}/users/${e.id}/theme`,{mode:t.mode,primaryColor:t.primaryColor,accentColor:t.accentColor},{headers:i}).subscribe({error:()=>{}})}applyTheme(t){let e=document.documentElement;e.setAttribute("data-theme",t.mode),e.style.setProperty("--color-primary",t.primaryColor),e.style.setProperty("--color-primary-light",this.lighten(t.primaryColor,20)),e.style.setProperty("--color-primary-dark",this.darken(t.primaryColor,20)),e.style.setProperty("--color-accent",t.accentColor),e.style.setProperty("--color-accent-light",this.lighten(t.accentColor,20)),e.style.setProperty("--color-accent-dark",this.darken(t.accentColor,20)),t.customColors&&Object.entries(t.customColors).forEach(([i,o])=>{e.style.setProperty(`--color-${i}`,o)}),t.mode==="dark"?this.applyDarkModeColors(e):this.applyLightModeColors(e)}applyDarkModeColors(t){t.style.setProperty("--color-background","#0f1419"),t.style.setProperty("--color-background-elevated","#1a252f"),t.style.setProperty("--color-background-card","#2c3e50"),t.style.setProperty("--color-surface","#1e2b38"),t.style.setProperty("--color-surface-hover","#243140"),t.style.setProperty("--color-text","#ffffff"),t.style.setProperty("--color-text-secondary","rgba(255, 255, 255, 0.7)"),t.style.setProperty("--color-text-muted","rgba(255, 255, 255, 0.5)"),t.style.setProperty("--color-border","#34495e"),t.style.setProperty("--color-border-light","rgba(255, 255, 255, 0.1)"),t.style.setProperty("--color-success","#27ae60"),t.style.setProperty("--color-warning","#f39c12"),t.style.setProperty("--color-danger","#e74c3c"),t.style.setProperty("--color-info","#3498db"),t.style.setProperty("--shadow-sm","0 2px 4px rgba(0, 0, 0, 0.3)"),t.style.setProperty("--shadow-md","0 4px 12px rgba(0, 0, 0, 0.4)"),t.style.setProperty("--shadow-lg","0 8px 32px rgba(0, 0, 0, 0.5)")}applyLightModeColors(t){t.style.setProperty("--color-background","#f5f7fa"),t.style.setProperty("--color-background-elevated","#ffffff"),t.style.setProperty("--color-background-card","#ffffff"),t.style.setProperty("--color-surface","#ffffff"),t.style.setProperty("--color-surface-hover","#f8f9fa"),t.style.setProperty("--color-text","#000000"),t.style.setProperty("--color-text-secondary","rgba(0, 0, 0, 0.7)"),t.style.setProperty("--color-text-muted","rgba(0, 0, 0, 0.5)"),t.style.setProperty("--color-border","#dfe6e9"),t.style.setProperty("--color-border-light","rgba(0, 0, 0, 0.1)"),t.style.setProperty("--color-success","#27ae60"),t.style.setProperty("--color-warning","#f39c12"),t.style.setProperty("--color-danger","#e74c3c"),t.style.setProperty("--color-info","#3498db"),t.style.setProperty("--shadow-sm","0 2px 4px rgba(0, 0, 0, 0.08)"),t.style.setProperty("--shadow-md","0 4px 12px rgba(0, 0, 0, 0.12)"),t.style.setProperty("--shadow-lg","0 8px 32px rgba(0, 0, 0, 0.16)")}lighten(t,e){let i=parseInt(t.replace("#",""),16),o=Math.round(2.55*e),s=Math.min(255,(i>>16&255)+o),m=Math.min(255,(i>>8&255)+o),f=Math.min(255,(i&255)+o);return`#${(16777216+s*65536+m*256+f).toString(16).slice(1)}`}darken(t,e){let i=parseInt(t.replace("#",""),16),o=Math.round(2.55*e),s=Math.max(0,(i>>16&255)-o),m=Math.max(0,(i>>
688&255)-o),f=Math.max(0,(i&255)-o);return`#${(16777216+s*65536+m*256+f).toString(16).slice(1)}`}static \u0275fac=function(e){return new(e||n)(on(Wi),on(je))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var Fn=class n{constructor(t){this.apiService=t}config$=new fn(null);load(){this.apiService.getCourtConfig().subscribe({next:t=>this.config$.next(t),error:t=>console.warn("Could not load court config:",t)})}getConfig(){return this.config$.asObservable()}getSnapshot(){return this.config$.getValue()}static \u0275fac=function(e){return new(e||n)(on(it))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};function hP(n,t){n&1&&(r(0,"div"),l(1,"Username or email is required."),a())}function _P(n,t){n&1&&(r(0,"div"),l(1,"Must be at least 3 characters long."),a())}function xP(n,t){if(n&1&&(r(0,"div",36),A(1,hP,2,0,"div",37)(2,_P,2,0,"div",37),a()),n&2){let e=h();d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.required),d(),x("ngIf",e.username==null||e.username.errors==null?null:e.username.errors.minlength)}}function vP(n,t){n&1&&(Le(),r(0,"svg",38),w(1,"path",39)(2,"circle",40),a())}function bP(n,t){n&1&&(Le(),r(0,"svg",38),w(1,"path",41)(2,"circle",40),a())}function yP(n,t){n&1&&(r(0,"div"),l(1,"Password is required."),a())}function CP(n,t){n&1&&(r(0,"div"),l(1,"Password must be at least 4 characters long."),a())}function wP(n,t){if(n&1&&(r(0,"div",36),A(1,yP,2,0,"div",37)(2,CP,2,0,"div",37),a()),n&2){let e=h();d(),x("ngIf",e.password==null||e.password.errors==null?null:e.password.errors.required),d(),x("ngIf",e.password==null||e.password.errors==null?null:e.password.errors.minlength)}}function PP(n,t){if(n&1&&(r(0,"div",42)(1,"i",43),l(2,"\u26A0\uFE0F"),a(),l(3),a()),n&2){let e=h();d(3),F(" ",e.errorMessage," ")}}function MP(n,t){n&1&&(r(0,"div",36),l(1," You must accept the Terms and Conditions to continue. "),a())}function SP(n,t){n&1&&w(0,"span",44)}function kP(n,t){if(n&1&&(r(0,"div",59),l(1),a()),n&2){let e=h(2);d(),R(e.forgotError)}}function OP(n,t){n&1&&w(0,"span",44)}function EP(n,t){n&1&&(r(0,"div",60),l(1," If your email is registered, a password reset link has been sent. "),a())}function TP(n,t){if(n&1){let e=L();r(0,"div",45)(1,"div",46)(2,"button",47),S("click",function(){k(e);let o=h();return O(o.closeForgotPasswordModal())}),l(3,"\xD7"),a(),r(4,"div",48),w(5,"img",49),r(6,"h3"),l(7,"Forgot Password"),a(),r(8,"p",50),l(9,"Enter your registered username or email to receive a password reset link."),a()(),r(10,"form",51),S("ngSubmit",function(){k(e);let o=h();return O(o.submitForgotPassword())}),r(11,"div",52)(12,"label",53),l(13,"Username or Email"),a(),r(14,"input",54),pe("ngModelChange",function(o){k(e);let s=h();return de(s.forgotIdentifier,o)||(s.forgotIdentifier=o),O(o)}),a(),A(15,kP,2,1,"div",55),a(),r(16,"div",56)(17,"button",57)(18,"span"),l(19),a(),A(20,OP,1,0,"span",28),a()()(),A(21,EP,2,0,"div",58),a()()}if(n&2){let e=h();d(5),x("src",e.logoPath||"assets/images/pickleball-hub-icon-orange.png",Ie),d(9),ce("ngModel",e.forgotIdentifier),x("disabled",e.forgotSubmitting),d(),x("ngIf",e.forgotError),d(2),x("disabled",e.forgotSubmitting),d(2),R(e.forgotSubmitting?"Sending...":"Send Reset Link"),d(),x("ngIf",e.forgotSubmitting),d(),x("ngIf",e.forgotSuccess)}}function IP(n,t){n&1&&(r(0,"div",74)(1,"p"),l(2,"\u2B07 Please scroll down to read all terms \u2B07"),a()())}function AP(n,t){if(n&1){let e=L();r(0,"div",61),S("click",function(){k(e);let o=h();return O(o.closeTermsModal())}),r(1,"div",62),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",63)(3,"h2"),l(4,"Terms and Conditions"),a(),r(5,"button",64),S("click",function(){k(e);let o=h();return O(o.closeTermsModal())}),l(6,"\xD7"),a()(),r(7,"div",65),S("scroll",function(o){k(e);let s=h();return O(s.onTermsScroll(o))}),r(8,"h3"),l(9,"Pickleball Hub Tiendesitas \u2013 Terms and Conditions"),a(),r(10,"p",66),l(11,"(For Private Court Reservations and Coaching Sessions)"),a(),r(12,"p",67)(13,"strong"),l(14,"Effective Date: November 2025"),a()(),r(15,"div",68),l(16,' These Terms and Conditions ("Terms") govern all private court bookings, coaching sessions, and facility use at Pickleball Hub Tiendesitas. By reserving, paying for, or participating in any Pickleball Hub activity, you agree to comply with the following terms. '),a(),r(17,"section")(18,"h4"),l(19,"1. Bookings and Payments"),a(),r(20,"h5"),l(21,"1.1 Reservation Confirmation"),a(),r(22,"ul")(23,"li"),l(24,"All court and coaching reservations must be made through official Pickleball Hub channels (website, app, or in-person)."),a(),r(25,"li"),l(26,"Bookings are confirmed only upon full payment or approval of a valid booking credit."),a()(),r(27,"h5"),l(28,"1.2 Session Duration"),a(),r(29,"ul")(30,"li"),l(31,"Each reservation is valid only for the booked time slot. Sessions start and end at the scheduled time."),a(),r(32,"li"),l(33,"Late arrivals do not extend the reserved period."),a()(),r(34,"h5"),l(35,"1.3 Advance Booking"),a(),r(36,"ul")(37,"li"),l(38,"Pickleball Hub recommends advance booking to ensure court and coach availability. Walk-ins are subject to open slots."),a()()(),r(39,"section")(40,"h4"),l(41,"2. Player Responsibilities"),a(),r(42,"h5"),l(43,"2.1 Punctuality"),a(),r(44,"ul")(45,"li"),l(46,"Players are required to arrive at least 10\u201315 minutes before their session for check-in and warm-up."),a(),r(47,"li"),l(48,"Late arrivals may result in forfeited time without refund."),a()(),r(49,"h5"),l(50,"2.2 Proper Attire"),a(),r(51,"ul")(52,"li"),l(53,"Players must wear appropriate sportswear and non-marking court shoes at all times."),a(),r(54,"li"),l(55,"Clothing or footwear that can damage the court (e.g., jeans, slippers, black soles) is not allowed."),a()(),r(56,"h5"),l(57,"2.3 Health and Fitness"),a(),r(58,"ul")(59,"li"),l(60,"By participating, you confirm that you are physically fit and medically cleared to play."),a(),r(61,"li"),l(62,"If you have a medical condition or recent injury, please consult a doctor before joining."),a()(),r(63,"h5"),l(64,"2.4 Personal Belongings"),a(),r(65,"ul")(66,"li"),l(67,"Pickleball Hub is not liable for any loss, theft, or damage to personal belongings."),a(),r(68,"li"),l(69,"Please secure valuables at all times."),a()()(),r(70,"section")(71,"h4"),l(72,"3. Facility Rules and Conduct"),a(),r(73,"h5"),l(74,"3.1 General Behavior"),a(),r(75,"ul")(76,"li"),l(77,"All players, guests, and companions must behave respectfully toward staff and other patrons."),a(),r(78,"li"),l(79,"Aggressive, unsafe, or disrespectful behavior will result in removal without refund."),a()(),r(80,"h5"),l(81,"3.2 Prohibited Activities"),a(),r(82,"ul")(83,"li"),l(84,"No smoking, vaping, or alcohol consumption within the facility."),a(),r(85,"li"),l(86,"No gambling or solicitation of any kind."),a(),r(87,"li"),l(88,"No littering \u2014 please dispose of trash properly."),a(),r(89,"li"),l(90,"Players are expected to clean up their belongings and playing area after use."),a()(),r(91,"h5"),l(92,"3.3 Companions and Guests"),a(),r(93,"ul")(94,"li"),l(95,"All companions must register at the front desk upon arrival."),a(),r(96,"li"),l(97,"Companions must present a valid ID for security purposes."),a(),r(98,"li"),l(99,"Registered companions must remain in designated areas and follow all Pickleball Hub rules at all times."),a(),r(100,"li"),l(101,"Unregistered or non-compliant guests may be denied entry."),a()(),r(102,"h5"),l(103,"3.4 Facility Care"),a(),r(104,"ul")(105,"li"),l(106,"Please handle all c
68ourts, nets, and equipment with care."),a(),r(107,"li"),l(108,"Any intentional or negligent damage may result in charges or suspension of booking privileges."),a()(),r(109,"h5"),l(110,"3.5 Authorized Coaching"),a(),r(111,"ul")(112,"li"),l(113,"Only Pickleball Hub\u2013approved coaches may conduct lessons or training within the facility."),a(),r(114,"li"),l(115,"Unauthorized coaching is strictly prohibited."),a()(),r(116,"h5"),l(117,"3.6 Cleanliness and Order"),a(),r(118,"ul")(119,"li"),l(120,"Players and guests must maintain cleanliness throughout their stay."),a(),r(121,"li"),l(122,"Food and drinks are allowed only in designated areas."),a(),r(123,"li"),l(124,"Spilled liquids or debris on the court must be reported immediately to staff."),a()()(),r(125,"section")(126,"h4"),l(127,"4. Cancellation Policy"),a(),r(128,"h5"),l(129,"4.1 Standard Cancellations"),a(),r(130,"ul")(131,"li")(132,"strong"),l(133,"More than 48 hours before the session:"),a(),l(134," Eligible for full refund or rebooking credit."),a(),r(135,"li")(136,"strong"),l(137,"Within 48 hours before the session:"),a(),l(138," No refund or reschedule, except for verified emergencies (see Section 4.2)."),a()(),r(139,"h5"),l(140,"4.2 Verified Emergencies (Exceptions)"),a(),r(141,"ul")(142,"li"),l(143,"Exceptions may be granted only with valid proof of emergency, submitted within 48 hours of the missed session."),a(),r(144,"li"),l(145,"Approved cases receive a one-time rebooking credit, valid for 14 days."),a()(),r(146,"p")(147,"strong"),l(148,"Acceptable proof includes:"),a()(),r(149,"ul")(150,"li")(151,"strong"),l(152,"Medical emergencies:"),a(),l(153," Medical certificate, doctor's note, or clinic/hospital receipt (photo accepted)."),a(),r(154,"li")(155,"strong"),l(156,"Family emergencies:"),a(),l(157," Obituary, hospital admission notice, or verifiable message."),a(),r(158,"li")(159,"strong"),l(160,"Calamities or travel issues:"),a(),l(161," Screenshots of government weather alerts, transport cancellations, or news articles."),a()(),r(162,"p"),l(163,"Repeated or unverified claims may be declined at management's discretion."),a(),r(164,"h5"),l(165,"4.3 Cancellations by Pickleball Hub"),a(),r(166,"ul")(167,"li"),l(168,"If Pickleball Hub cancels a session due to weather, safety, or facility issues, affected players will receive a full rebooking credit or refund."),a()()(),r(169,"section")(170,"h4"),l(171,"5. Liability and Safety"),a(),r(172,"h5"),l(173,"5.1 Assumption of Risk"),a(),r(174,"ul")(175,"li"),l(176,"Participation in pickleball carries inherent risks. By joining any activity, you acknowledge and accept these risks."),a()(),r(177,"h5"),l(178,"5.2 Injury or Accident"),a(),r(179,"ul")(180,"li"),l(181,"Pickleball Hub, its management, and staff shall not be liable for any injury, accident, or health incident arising during play, practice, or coaching."),a(),r(182,"li"),l(183,"Players participate at their own risk."),a()(),r(184,"h5"),l(185,"5.3 Medical Assistance"),a(),r(186,"ul")(187,"li"),l(188,"In case of emergency, Pickleball Hub staff may assist in calling medical services, but all related costs shall be borne by the player."),a()()(),r(189,"section")(190,"h4"),l(191,"6. General Provisions"),a(),r(192,"h5"),l(193,"6.1 Policy Updates"),a(),r(194,"ul")(195,"li"),l(196,"Pickleball Hub reserves the right to modify these Terms at any time. The latest version will be displayed at the facility and on official communication channels."),a()(),r(197,"h5"),l(198,"6.2 Management Authority"),a(),r(199,"ul")(200,"li"),l(201,"Management reserves the right to refuse service or entry to any individual who violates these Terms or behaves inappropriately."),a()(),r(202,"h5"),l(203,"6.3 Acceptance"),a(),r(204,"ul")(205,"li"),l(206,"By booking a court, enrolling in coaching, or entering the facility, you acknowledge that you have read, understood, and agreed to these Terms and Conditions."),a()()(),r(207,"div",69)(208,"p")(209,"strong"),l(210,"Pickleball Hub @ Tiendesitas"),a()()(),A(211,IP,3,0,"div",70),a(),r(212,"div",71)(213,"button",72),S("click",function(){k(e);let o=h();return O(o.closeTermsModal())}),l(214,"Close"),a(),r(215,"button",73),S("click",function(){k(e);let o=h();return O(o.acceptTermsFromModal())}),l(216),a()()()()}if(n&2){let e=h();d(211),x("ngIf",!e.hasScrolledToBottom),d(4),x("disabled",!e.hasScrolledToBottom),d(),F(" ",e.hasScrolledToBottom?"I Accept":"Scroll to Accept"," ")}}function DP(n,t){n&1&&Uo(0)}function RP(n,t){if(n&1){let e=L();r(0,"div",61),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),r(1,"div",62),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",63)(3,"h2"),l(4,"Privacy Policy"),a(),r(5,"button",64),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),l(6,"\xD7"),a()(),r(7,"div",75),A(8,DP,1,0,"ng-container",76),a(),r(9,"div",71)(10,"button",77),S("click",function(){k(e);let o=h();return O(o.closePrivacyModal())}),l(11,"Close"),a()()()()}if(n&2){h();let e=Jt(56);d(8),x("ngTemplateOutlet",e)}}function BP(n,t){n&1&&(r(0,"h3"),l(1,"Pickleball Hub @ Tiendesitas \u2014 Privacy Policy"),a(),r(2,"p",67)(3,"strong"),l(4,"Effective Date: February 2026"),a()(),r(5,"div",68),l(6," Pickleball Hub @ Tiendesitas (\u201Cwe,\u201D \u201Cour,\u201D or \u201Cus\u201D) is committed to protecting the privacy and personal information of our users in compliance with the "),r(7,"strong"),l(8,"Data Privacy Act of 2012 (Republic Act No. 10173)"),a(),l(9," of the Philippines. By creating an account or using our court reservation system, you consent to the collection, use, and disclosure of your personal information as described
68in this Privacy Policy. "),a(),r(10,"section")(11,"h4"),l(12,"1. Information We Collect"),a(),r(13,"p"),l(14,"When you create an account and use our reservation system, we collect the following personal information:"),a(),r(15,"ul")(16,"li")(17,"strong"),l(18,"Account Information:"),a(),l(19," Full name, email address, mobile/contact number, home address, and username."),a(),r(20,"li")(21,"strong"),l(22,"Booking Information:"),a(),l(23," Session dates, time slots, number of players, player names, booking status, and booking history."),a(),r(24,"li")(25,"strong"),l(26,"Payment Information:"),a(),l(27," GCash payment receipts (uploaded images), payment verification records, and transaction amounts."),a(),r(28,"li")(29,"strong"),l(30,"Discount Eligibility Documents:"),a(),l(31," Government-issued ID images submitted for PWD or Senior Citizen discount verification."),a(),r(32,"li")(33,"strong"),l(34,"System Information:"),a(),l(35," Login timestamps and activity logs within the platform."),a()()(),r(36,"section")(37,"h4"),l(38,"2. How We Use Your Information"),a(),r(39,"ul")(40,"li"),l(41,"To process and manage your court reservations and open play bookings."),a(),r(42,"li"),l(43,"To verify payments and confirm your booking slots."),a(),r(44,"li"),l(45,"To send booking confirmations, reminders, and important session updates."),a(),r(46,"li"),l(47,"To apply applicable discounts (PWD, Senior Citizen) upon verification of submitted eligibility documents."),a(),r(48,"li"),l(49,"To generate QR codes for session check-in and attendance tracking."),a(),r(50,"li"),l(51,"To administer your account and provide customer support."),a(),r(52,"li"),l(53,"To ensure compliance with facility rules and policies."),a()()(),r(54,"section")(55,"h4"),l(56,"3. Who Can Access Your Data"),a(),r(57,"p")(58,"strong"),l(59,"By using this system, you acknowledge and expressly consent that the following authorized parties may access your personal information:"),a()(),r(60,"ul")(61,"li")(62,"strong"),l(63,"System Administrators:"),a(),l(64," Authorized personnel managing the reservation platform have access to all user accounts, booking records, uploaded payment receipts, discount eligibility documents, and personal profile information. This access is necessary for payment verification, booking management, discount approvals, and customer support."),a(),r(65,"li")(66,"strong"),l(67,"Database Administrators:"),a(),l(68," Technical personnel responsible for maintaining the database infrastructure may directly access personal data stored in the database during system maintenance, performance monitoring, troubleshooting, and data integrity checks."),a(),r(69,"li")(70,"strong"),l(71,"Facility Staff:"),a(),l(72," Staff assigned to manage sessions and verify check-ins may view relevant booking and attendance information."),a()(),r(73,"p"),l(74,"We do "),r(75,"strong"),l(76,"not"),a(),l(77," sell, rent, or share your personal information with third parties for marketing or commercial purposes."),a()(),r(78,"section")(79,"h4"),l(80,"4. Data Retention"),a(),r(81,"ul")(82,"li"),l(83,"Your personal information and booking records are retained for as long as your account is active or as needed to fulfill the purposes described in this policy, or as required by applicable law."),a(),r(84,"li"),l(85,"Uploaded payment receipts and ID documents are retained for record-keeping and audit purposes."),a(),r(86,"li"),l(87,"To request account deletion or data removal, please contact the facility management directly."),a()()(),r(88,"section")(89,"h4"),l(90,"5. Data Security"),a(),r(91,"ul")(92,"li"),l(93,"We implement reasonable technical and organizational measures to protect your personal information against unauthorized external access, disclosure, or destruction."),a(),r(94,"li"),l(95,"Passwords are encrypted and never stored in plain text."),a(),r(96,"li"),l(97,"However, please be aware that access by authorized administrators and database personnel is part of normal system operations, as described in Section 3."),a(),r(98,"li"),l(99,"By using this system, you acknowledge and accept that such authorized access may occur."),a()()(),r(100,"section")(101,"h4"),l(102,"6. Your Rights Under the Data Privacy Act of 2012"),a(),r(103,"p"),l(104,"As a data subject under Republic Act No. 10173, you have the right to:"),a(),r(105,"ul")(106,"li")(107,"strong"),l(108,"Access:"),a(),l(109," Request a copy of your personal data held by us."),a(),r(110,"li")(111,"strong"),l(112,"Correction:"),a(),l(113," Request correction of inaccurate personal data."),a(),r(114,"li")(115,"strong"),l(116,"Erasure / Blocking:"),a(),l(117," Request deleti
68on of your personal data under certain circumstances."),a(),r(118,"li")(119,"strong"),l(120,"Object:"),a(),l(121," Object to the processing of your personal data for specific purposes."),a(),r(122,"li")(123,"strong"),l(124,"Lodge a Complaint:"),a(),l(125," File a complaint with the "),r(126,"strong"),l(127,"National Privacy Commission (NPC)"),a(),l(128," if you believe your rights under the Data Privacy Act have been violated."),a()(),r(129,"p"),l(130,"To exercise any of these rights, please contact facility management in person or through our official channels."),a()(),r(131,"section")(132,"h4"),l(133,"7. Consent to Data Visibility by Authorized Personnel"),a(),r(134,"p"),l(135,"By registering for and using the Pickleball Hub @ Tiendesitas reservation system, "),r(136,"strong"),l(137,"you expressly acknowledge and consent"),a(),l(138," that:"),a(),r(139,"ul")(140,"li"),l(141,"Your personal information, booking history, uploaded receipts, and payment records may be viewed by authorized system administrators and database personnel."),a(),r(142,"li"),l(143,"This access is necessary for the lawful operation, maintenance, and administration of the reservation system."),a(),r(144,"li"),l(145,"You will not hold Pickleball Hub @ Tiendesitas, its owners, management, staff, or technical personnel liable for access to your data by authorized parties acting within the scope of their duties."),a()()(),r(146,"section")(147,"h4"),l(148,"8. Local Storage and Session Data"),a(),r(149,"ul")(150,"li"),l(151,"Our web application uses browser local storage to maintain your login session and theme preferences."),a(),r(152,"li"),l(153,"This data is stored on your device only and is used solely to improve your experience within the application."),a(),r(154,"li"),l(155,"No personal data stored locally is transmitted to third parties."),a()()(),r(156,"section")(157,"h4"),l(158,"9. Changes to This Policy"),a(),r(159,"ul")(160,"li"),l(161,"We reserve the right to update this Privacy Policy at any time."),a(),r(162,"li"),l(163,"Material changes will be reflected in the \u201CEffective Date\u201D at the top of this document."),a(),r(164,"li"),l(165,"Continued use of the system after changes have been posted constitutes your acceptance of the updated policy."),a()()(),r(166,"section")(167,"h4"),l(168,"10. Contact Us"),a(),r(169,"p"),l(1
6870,"For any privacy-related concerns or to exercise your data rights, please contact us at:"),a(),r(171,"p")(172,"strong"),l(173,"Pickleball Hub @ Tiendesitas"),a(),w(174,"br"),l(175," Tiendesitas, Pasig City, Philippines"),a()(),r(176,"div",69)(177,"p")(178,"strong"),l(179,"Pickleball Hub @ Tiendesitas"),a(),l(180," \u2014 We value your trust and are committed to keeping your data safe and used responsibly."),a()())}var lc=class n{constructor(t,e,i,o,s,m){this.fb=t;this.authService=e;this.themeService=i;this.router=o;this.route=s;this.courtConfigService=m;this.loginForm=this.fb.group({username:["",[Oe.required,Oe.minLength(3)]],password:["",[Oe.required,Oe.minLength(4)]],acceptTerms:[!1,[Oe.requiredTrue]]})}loginForm;isSubmitting=!1;showPassword=!1;errorMessage="";returnUrl="/manage";logoPath="";showForgotPasswordModal=!1;forgotIdentifier="";forgotSubmitting=!1;forgotSuccess=!1;forgotError="";showTermsModal=!1;hasScrolledToBottom=!1;showPrivacyModal=!1;ngOnInit(){if(this.authService.isAuthenticated()){this.router.navigate([this.returnUrl]);return}this.returnUrl=this.route.snapshot.queryParams.returnUrl||"/booking",this.route.snapshot.queryParams.reason==="session-expired"&&(this.errorMessage="Your session has expired. Please log in again."),this.courtConfigService.getConfig().subscribe(t=>{t?.logoPath&&(this.logoPath=t.logoPath)})}onLogin(){return ue(this,null,function*(){if(console.log("[LoginComponent] onLogin called. Form valid:",this.loginForm.valid,"Submitting:",this.isSubmitting),this.loginForm.valid&&!this.isSubmitting){this.isSubmitting=!0,this.errorMessage="";try{let{username:t,password:e}=this.loginForm.value,i=yield this.authService.login(t,e);console.log("[LoginComponent] AuthService.login result:",i),i.success?(localStorage.setItem("pickle_admin_details",JSON.stringify(i)),localStorage.setItem("pickle_terms_accepted","true"),this.themeService.syncWithServer(),console.log("[LoginComponent] Redirecting to",this.returnUrl),this.router.navigate([this.returnUrl])):this.errorMessage=i.message||"Invalid username/email or password. Please try again."}catch(t){console.error("Login error:",t),this.errorMessage="Login failed. Please check your credentials and try again."}finally{this.isSubmitting=!1}}})}togglePassword(){this.showPassword=!this.showPassword}goToSchedule(){this.router.navigate(["/"])}goToRegister(){this.router.navigate(["/register"])}openForgotPasswordModal(){this.showForgotPasswordModal=!0,this.forgotIdentifier="",this.forgotSubmitting=!1,this.forgotSuccess=!1,this.forgotError=""}closeForgotPasswordModal(){this.showForgotPasswordModal=!1}submitForgotPassword(){return ue(this,null,function*(){this.forgotSubmitting=!0,this.forgotSuccess=!1,this.forgotError="";try{let t=Be.apiBase+"/login/forgot-password",e={identifier:this.forgotIdentifier};console.log("[ForgotPassword] POST",t,e);let o=yield(yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)})).json();o.success?this.forgotSuccess=!0:this.forgotError=o.error||"Unable to process request."}catch{this.forgotError="Network error. Please try again."}this.forgotSubmitting=!1})}openTermsModal(){this.showTermsModal=!0,this.hasScrolledToBottom=!1}closeTermsModal(){this.showTermsModal=!1,this.hasScrolledToBottom=!1}acceptTermsFromModal(){this.loginForm.patchValue({acceptTerms:!0}),this.closeTermsModal()}onTermsScroll(t){let e=t.target,i=e.scrollTop+e.clientHeight,o=e.scrollHeight;i>=o-5&&(this.hasScrolledToBottom=!0)}openPrivacyModal(){this.showPrivacyModal=!0}closePrivacyModal(){this.showPrivacyModal=!1}get username(){return this.loginForm.get("username")}get password(){return this.loginForm.get("password")}get acceptTerms(){return this.loginForm.get("acceptTerms")}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(je),ae(Yi),ae(nt),ae(qo),ae(Fn))};static \u0275cmp=We({type:n,selectors:[["app-login"]],decls:57,vars:26,consts:[["privacyPolicyContent",""],[1,"login-container"],[1,"login-modal",2,"position","relative"],[1,"login-content"],[1,"login-header"],["alt","Logo",1,"login-logo",3,"src"],[1,"login-subtitle"],[3,"ngSubmit","formGroup"],[1,"form-group"],["for","username"],["type","text","id","username","formControlName","username","required","","autocomplete","username","placeholder","Enter your username or email"],["class","error-message",4,"ngIf"],["for","password"],[1,"password-input-container"],["id","password","formControlName","password","required","","autocomplete","current-password","placeholder","Enter your password",3,"type"],["type","button","tabindex","-1","aria-label","Toggle Password Visibility",1,"password-toggle",3,"click"],["xmlns","http://www.w3.org/2000/svg","width","20","height","20","fill","none","viewBox","0 0 24 24",4,"ngIf"],["class","login-error",4,"ngIf"],[1,"forgot-password-row"],["type","button",1,"forgot-link",3,"click","disabled"],[1,"terms-checkbox-container"],[1,"terms-checkbox-label"],["type","checkbox","formControlName","acceptTerms",1,"terms-checkbox"],[1,"terms-text"],["type","button",1,"terms-link",3,"click","disabled"],[1,"login-actions"],["type","submit",1,"login-button",3,"disabled"],[1,"button-text"],["class","button-spinner",4,"ngIf"],["type","button",1,"cancel-button",3,"click","disabled"],[1,"signup-footer"],[1,"signup-footer-text"],[1,"signup-footer-action"],["type","button",1,"login-button",3,"click","disabled"],["class","modal-overlay",4,"ngIf"],["class","terms-modal-overlay",3,"click",4,"ngIf"],[1,"error-message"],[4,"ngIf"],["xmlns","http://www.w3.org/2000/svg","width","20","height","20","fill","none","viewBox","0 0 24 24"],["stroke","currentColor","stroke-width","2","d","M1 12s4-7 11-7 11 7 11 7-4 7-11 7S1 12 1 12Z"],["cx","12","cy","12","r","3","stroke","currentColor","stroke-width","2"],["stroke","currentColor","stroke-width","2","d","M3 3l18 18M1 12s4-7 11-7c2.5 0 4.7.7 6.5 1.8M23 12s-4 7-11 7c-2.5 0-4.7-.7-6.5-1.8"],[1,"login-error"],[1,"error-icon"],[1,"button-spinner"],[1,"modal-overlay"],[1,"forgot-modal"],["aria-label","Close",1,"forgot-close-btn",3,"click"],[1,"forgot-header"],["alt","Logo",1,"forgot-logo",3,"src"],[1,"forgot-subtitle"],["autocomplete","off",3,"ngSubmit"],[1,"forgot-form-group"],["for","forgotIdentifier"],["type","text","id","forgotIdentifier","name","forgotIdentifier","required","","autocomplete","username","placeholder","Enter your username or email",3,"ngModelChange","ngModel","disabled"],["class","forgot-error",4,"ngIf"],[1,"forgot-actions"],["type","submit",1,"forgot-button",3,"disabled"],["class","forgot-success",4,"ngIf"],[1,"forgot-error"],[1,"forgot-success"],[1,"terms-modal-overlay",3,"click"],[1,"terms-modal-content",3,"click"],[1,"terms-modal-header"],["aria-label","Close",1,"terms-close-btn",3,"click"],[1,"terms-modal-body",3,"scroll"],[1,"terms-subtitle"],[1,"terms-effective-date"],[1,"terms-intro-text"],[1,"terms-footer-info"],["class","scroll-indicator",4,"ngIf"],[1,"terms-modal-footer"],[1,"terms-btn","terms-btn-secondary",3,"click"],[1,"terms-btn","terms-btn-primary",3,"click","disabled"],[1,"scroll-indicator"],[1,"terms-modal-body"],[4,"ngTemplateOutlet"],[1,"terms-btn","terms-btn-primary",3,"click"]],template:function(e,i){if(e&1){let o=L();r(0,"div",1)(1,"div",2)(2,"div",3)(3,"div",4),w(4,"img",5),r(5,"h3"),l(6,"Login"),a(),r(7,"p",6),l(8,"Please sign in to access your account"),a()(),r(9,"form",7),S("ngSubmit",function(){return k(o),O(i.onLogin())}),r(10,"div",8)(11,"label",9),l(12,"Username or Email"),a(),w(13,"input",10),A(14,xP,3,2,"div",11),a(),r(15,"div",8)(16,"label",12),l(17,"Password"),a(),r(18,"div",13),w(19,"input",14),r(20,"button",15),S("click",function(){return k(o),O(i.togglePassword())}),A(21,vP,3,0,"svg",16)(22,bP,3,0,"svg",16),a()(),A(23,wP,3,2,"div",11),a(),A(24,PP,4,1,"div",17),r(25,"div",18)(26,"button",19),S("click",function(){return k(o),O(i.openForgotPasswordModal())}),l(27," Forgot Password? "),a()(),r(28,"div",20)(29,"label",21),w(30,"input",22),r(31,"span",23),l(32," I agree to the "),r(33,"button",24),S("click",function(){return k(o),O(i.openTermsModal())}),l(34," Terms and Conditions "),a(),l(35," and "),r(36,"button",24),S("click",function(){return k(o),O(i.openPrivacyModal())}),l(37," Privacy Policy "),a()()(),A(38,MP,2,0,"div",11),a(),r(39,"div",25)(40,"button",26)(41,"span",27),l(42),a(),A(43,SP,1,0,"span",28),a(),r(44,"button",29),S("click",function(){return k(o),O(i.goToSchedule())}),l(45," Back to Schedule "),a()()(),r(46,"div",30)(47,"span",31),l(48,"Don't have an account?"),a(),r(49,"div",32)(50,"button",33),S("click",function(){return k(o),O(i.goToRegister())}),l(51," Sign Up "),a()()()()(),A(52,TP,22,8,"div",34)(53,AP,217,3,"div",35)(54,RP,12,1,"div",35),a(),A(55,BP,181,0,"ng-template",null,0,ln)}e&2&&(d(4),x("src",i.logoPath||"assets/images/pickleball-hub-icon-orange.png",Ie),d(5),x("formGroup",i.loginForm),d(4),te("error",(i.username==null?null:i.username.invali
68d)&&(i.username==null?null:i.username.touched)),d(),x("ngIf",(i.username==null?null:i.username.invalid)&&(i.username==null?null:i.username.touched)),d(5),te("error",(i.password==null?null:i.password.invalid)&&(i.password==null?null:i.password.touched)),x("type",i.showPassword?"text":"password"),d(2),x("ngIf",!i.showPassword),d(),x("ngIf",i.showPassword),d(),x("ngIf",(i.password==null?null:i.password.invalid)&&(i.password==null?null:i.password.touched)),d(),x("ngIf",i.errorMessage),d(2),x("disabled",i.isSubmitting),d(7),x("disabled",i.isSubmitting),d(3),x("disabled",i.isSubmitting),d(2),x("ngIf",(i.acceptTerms==null?null:i.acceptTerms.invalid)&&(i.acceptTerms==null?null:i.acceptTerms.touched)),d(2),te("loading",i.isSubmitting),x("disabled",i.loginForm.invalid||i.isSubmitting),d(2),R(i.isSubmitting?"Signing In...":"Sign In"),d(),x("ngIf",i.isSubmitting),d(),x("disabled",i.isSubmitting),d(6),x("disabled",i.isSubmitting),d(2),x("ngIf",i.showForgotPasswordModal),d(),x("ngIf",i.showTermsModal),d(),x("ngIf",i.showPrivacyModal))},dependencies:[Ge,$e,ua,bi,Xn,at,bn,st,Yn,xi,hi,_i,lt,ut,Zl],styles:[".login-container[_ngcontent-%COMP%]{position:fixed;inset:0;background:var(--color-background);display:flex;align-items:center;justify-content:center;z-index:9999;padding:20px;box-sizing:border-box}.login-modal[_ngcontent-%COMP%]{background:var(--color-background-card);backdrop-filter:blur(10px);border-radius:16px;box-shadow:var(--shadow-lg);max-width:420px;width:100%;overflow:hidden;animation:_ngcontent-%COMP%_modalSlideIn .3s ease-out;border:1px solid var(--color-border)}@keyframes _ngcontent-%COMP%_modalSlideIn{0%{opacity:0;transform:translateY(-30px) scale(.95)}to{opacity:1;transform:translateY(0) scale(1)}}.login-content[_ngcontent-%COMP%]{padding:32px 28px;color:var(--color-text)}.login-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:32px}.login-logo[_ngcontent-%COMP%]{width:100px;height:auto;object-fit:contain;margin-bottom:16px;border-radius:10%}.login-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;font-size:24px;font-weight:700;color:var(--color-text)}.login-subtitle[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.4}.form-group[_ngcontent-%COMP%]{margin-bottom:24px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;margin-bottom:8px;font-weight:700;font-size:14px;color:var(--color-accent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;padding:12px 16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:16px;transition:all .3s;box-sizing:border-box}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);background:var(--color-surface-hover);box-shadow:0 0 8px color-mix(in srgb,var(--color-accent) 30%,transparent)}.form-group[_ngcontent-%COMP%] input.error[_ngcontent-%COMP%]{border-color:var(--color-danger);box-shadow:0 0 5px color-mix(in srgb,var(--color-danger) 30%,transparent)}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.password-input-container[_ngcontent-%COMP%]{position:relative}.password-input-container[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding-right:48px}.password-toggle[_ngcontent-%COMP%]{position:absolute;right:12px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:4px;border-radius:4px;transition:color .3s;display:flex;align-items:center;justify-content:center}.password-toggle[_ngcontent-%COMP%]:hover{color:var(--color-accent)}.error-message[_ngcontent-%COMP%]{margin-top:8px;color:var(--color-danger);font-size:13px}.login-error[_ngcontent-%COMP%]{margin-bottom:24px;padding:12px 16px;background:color-mix(in srgb,var(--color-danger) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-danger) 30%,transparent);border-radius:6px;color:var(--color-danger);font-size:14px;display:flex;align-items:center;gap:8px}.forgot-password-row[_ngcontent-%COMP%]{margin-bottom:15px;text-align:right;margin-top:-25px}.forgot-link[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-accent);cursor:pointer;font-size:14px;padding:0;transition:color .2s}.forgot-link[_ngcontent-%COMP%]:hover{color:var(--color-accent-dark)}.forgot-link[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.terms-checkbox-container[_ngcontent-%COMP%]{margin-bottom:20px;margin-top:8px}.terms-checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none}.terms-checkbox[_ngcontent-%COMP%]{width:20px;height:20px;min-width:20px;margin:2px 0 0;cursor:pointer;accent-color:var(--color-accent)}.terms-text[_ngcontent-%COMP%]{color:var(--color-text);font-size:14px;line-height:1.6}.terms-link[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-accent);text-decoration:underline;cursor:pointer;padding:0;font-size:14px;font-weight:600;transition:color .3s}.terms-link[_ngcontent-%COMP%]:hover{color:var(--color-accent-dark)}.terms-link[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.login-actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;margin-bottom:24px}.login-button[_ngcontent-%COMP%], .cancel-button[_ngcontent-%COMP%]{padding:14px 24px;border:none;border-radius:8px;font-size:16px;font-weight:700;cursor:pointer;transition:all .2s;
68display:flex;align-items:center;justify-content:center;gap:8px}.login-button[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 14px color-mix(in srgb,var(--color-accent) 40%,transparent)}.login-button[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-1px);box-shadow:0 6px 18px color-mix(in srgb,var(--color-accent) 55%,transparent)}.login-button[_ngcontent-%COMP%]:disabled{background:var(--color-border);cursor:not-allowed;transform:none;box-shadow:none}.cancel-button[_ngcontent-%COMP%]{background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-accent)}.cancel-button[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent) 10%,transparent);color:var(--color-text);border-color:var(--color-accent)}.cancel-button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.button-spinner[_ngcontent-%COMP%]{width:16px;height:16px;border:2px solid transparent;border-top:2px solid #fff;border-radius:50%;animation:_ngcontent-%COMP%_spin 1s linear infinite}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.signup-footer[_ngcontent-%COMP%]{margin-top:24px}.signup-footer-text[_ngcontent-%COMP%]{display:block;text-align:center;color:var(--color-text-secondary)}.signup-footer-action[_ngcontent-%COMP%]{margin-top:12px;display:flex;justify-content:center}.modal-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:10000;background:#0009;display:flex;align-items:center;justify-content:center}.forgot-modal[_ngcontent-%COMP%]{background:var(--color-background-elevated);border:1px solid var(--color-border);border-radius:16px;padding:32px 24px;box-shadow:var(--shadow-lg);color:var(--color-text);max-width:400px;width:100%;position:relative}.forgot-close-btn[_ngcontent-%COMP%]{position:absolute;top:10px;right:10px;background:none;border:none;color:var(--color-text-secondary);font-size:22px;cursor:pointer;line-height:1;transition:color .2s}.forgot-close-btn[_ngcontent-%COMP%]:hover{color:var(--color-danger)}.forgot-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:18px}.forgot-logo[_ngcontent-%COMP%]{width:60px;margin-bottom:10px;border-radius:10%}.forgot-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;font-size:20px;font-weight:700;color:var(--color-text)}.forgot-subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:14px;margin:0}.forgot-form-group[_ngcontent-%COMP%]{margin-bottom:18px}.forgot-form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;margin-bottom:6px;font-weight:600;color:var(--color-accent)}.forgot-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;padding:10px;background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-accent);border-radius:8px;font-size:16px;outline:none;box-sizing:border-box;transition:border-color .2s}.forgot-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent-dark)}.forgot-form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:disabled{opacity:.6}.forgot-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;margin-top:18px}.forgot-button[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;border:none;padding:10px 20px;border-radius:10px;font-size:15px;font-weight:700;cursor:pointer;box-shadow:0 0 15px color-mix(in srgb,var(--color-accent) 40%,transparent);transition:transform .2s,box-shadow .2s,background .2s;display:flex;align-items:center;gap:8px}.forgot-button[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-1px);box-shadow:0 0 20px color-mix(in srgb,var(--color-accent) 55%,transparent)}.forgot-button[_ngcontent-%COMP%]:disabled{background:var(--color-border);cursor:not-allowed;transform:none;box-shadow:none}.forgot-button[_ngcontent-%COMP%] .button-spinner[_ngcontent-%COMP%]{border-top-color:#fff}.forgot-success[_ngcontent-%COMP%]{margin-top:18px;color:var(--color-success);font-size:15px;text-align:center}.forgot-error[_ngcontent-%COMP%]{color:var(--color-danger);font-size:13px;margin-top:4px}.terms-modal-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:#000000a6;backdrop-filter:blur(8px);display:flex;justify-content:center;align-items:center;z-index:10000;padding:1rem;animation:_ngcontent-%COMP%_fadeIn .3s ease}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}
68to{opacity:1}}@keyframes _ngcontent-%COMP%_slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.terms-modal-content[_ngcontent-%COMP%]{background:var(--color-background-elevated);border:1px solid var(--color-border);border-radius:16px;max-width:700px;width:100%;max-height:85vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);animation:_ngcontent-%COMP%_slideUp .3s ease;color:var(--color-text)}.terms-modal-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;border-bottom:2px solid var(--color-border);background:var(--color-accent);border-radius:16px 16px 0 0}.terms-modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:#fff;font-size:1.5rem;font-weight:600}.terms-close-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:2rem;color:#fff;cursor:pointer;padding:0;width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;transition:all .2s}.terms-close-btn[_ngcontent-%COMP%]:hover{background:#e74c3c4d;color:#e74c3c;transform:rotate(90deg)}.terms-modal-body[_ngcontent-%COMP%]{padding:2rem;overflow-y:auto;flex:1;background:color-mix(in srgb,var(--color-background) 30%,transparent);position:relative}.terms-modal-body[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.4rem;margin:0 0 .5rem;font-weight:600}.terms-subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:1rem;margin-bottom:.5rem;font-style:italic}.terms-effective-date[_ngcontent-%COMP%]{color:var(--color-warning);font-size:.95rem;margin-bottom:1.5rem;font-weight:600}.terms-intro-text[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border-left:4px solid var(--color-accent);padding:1rem;margin:1.5rem 0;border-radius:6px;color:var(--color-text);font-size:.95rem}.terms-modal-body[_ngcontent-%COMP%] section[_ngcontent-%COMP%]{margin:1.5rem 0}.terms-modal-body[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.2rem;margin:1.5rem 0 .75rem;font-weight:600;border-bottom:2px solid var(--color-accent);padding-bottom:.4rem}.terms-modal-body[_ngcontent-%COMP%] h5[_ngcontent-%COMP%]{color:var(--color-warning);font-size:1rem;margin:1rem 0 .5rem;font-weight:600}.terms-modal-body[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{margin:.5rem 0 1rem 1.5rem;padding:0}.terms-modal-body[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin-bottom:.6rem;color:var(--color-text);line-height:1.6;font-size:.9rem}.terms-modal-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text);margin:.6rem 0;font-size:.9rem}.terms-modal-body[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600}.terms-footer-info[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent);padding:1rem;border-radius:8px;text-align:center;margin-top:2rem}.terms-footer-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1rem;margin:0;font-weight:600}.scroll-indicator[_ngcontent-%COMP%]{position:sticky;bottom:0;background:color-mix(in srgb,var(--color-accent) 15%,transparent);padding:1.5rem 1rem .5rem;text-align:center;pointer-events:none;animation:_ngcontent-%COMP%_pulse 2s infinite}.scroll-indicator[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-warning);font-weight:700;margin:0;font-size:.95rem}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}.terms-modal-footer[_ngcontent-%COMP%]{padding:1.5rem 2rem;border-top:2px solid var(--color-border);display:flex;gap:1rem;justify-content:flex-end;background:color-mix(in srgb,var(--color-background) 50%,transparent);border-radius:0 0 16px 16px}.terms-btn[_ngcontent-%COMP%]{padding:.75rem 1.5rem;border:none;border-radius:8px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .3s;display:inline-flex;align-items:center;justify-content:center}.terms-btn-secondary[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-text) 8%,transparent);color:var(--color-text);border:1px solid var(--color-border)}.terms-btn-secondary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border-color:var(--color-accent);transform:translateY(-2px)}.terms-btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 14px color-mix(in srgb,var(--color-accent) 40%,transparent)}.terms-btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);transform:translateY(-2px);box-shadow:0 6px 18px color-mix(in srgb,var(--color-accent) 55%,transparent)}.terms-btn-primary[_ngcontent-%COMP%]:disabled{background:var(--color-border);cursor:not-allowed;transform:none;box-shadow:none;opacity:.6}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-border-light);border-radius:4px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:color-mix(in srgb,var(--color-accent) 50%,transparent);border-radius:4px}.terms-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:color-mix(in srgb,var(--color-accent) 70%,transparent)}@media (max-width: 480px){.login-container[_ngcontent-%COMP%]{padding:8px}.login-content[_ngcontent-%COMP%]{padding:16px 10px}.login-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:18px}.form-group[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{font-size:16px}.login-button[_ngcontent-%COMP%], .cancel-button[_ngcontent-%COMP%]{font-size:14px}.terms-modal-content[_ngcontent-%COMP%]{max-width:95%;max-height:90vh}.terms-modal-header[_ngcontent-%COMP%], .terms-modal-footer[_ngcontent-%COMP%]{padding:1rem 1.5rem}.terms-modal-body[_ngcontent-%COMP%]{padding:1.5rem}.terms-modal-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.25rem}.terms-btn[_ngcontent-%COMP%]{width:100%;padding:.875rem 1.5rem}}"]})};var Xi=(n,t)=>{let e=zo(je),i=zo(nt),o=e.getCurrentUser(),s=o&&o.isAuthenticated,m=t.url.startsWith("/manage")||t.url.startsWith("/court-management")||t.url.startsWith("/court-sett
68ings")||t.url.startsWith("/open-play-management")||t.url.startsWith("/user-management");return s?m&&!e.hasRole("admin")?(i.navigate(["/booking"]),!1):!0:(e.logout(),i.navigate(["/login"],{queryParams:{returnUrl:t.url}}),!1)};var NP=["termsContainer"];function VP(n,t){if(n&1){let e=L();r(0,"div",4,0)(2,"div",5)(3,"button",6),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(4,"span"),l(5,"\u2190"),a(),l(6," Back "),a(),w(7,"div",7),r(8,"button",8),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(9,"span"),l(10,"\u2190"),a(),l(11," Back to Home "),a()()()}if(n&2){let e=h();d(7),x("innerHTML",e.dynamicHtml,Zt)}}function LP(n,t){if(n&1){let e=L();we(0),r(1,"div",4,1)(3,"div",5)(4,"button",6),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(5,"span"),l(6,"\u2190"),a(),l(7," Back "),a(),r(8,"h1"),l(9,"Pickleball Hub Tiendesitas \u2013 Terms and Conditions"),a(),r(10,"p",9),l(11,"(For Private Court Reservations and Coaching Sessions)"),a(),r(12,"p",10)(13,"strong"),l(14,"Effective Date: November 2025"),a()(),r(15,"div",11),l(16,' These Terms and Conditions ("Terms") govern all private court bookings, coaching sessions, and facility use at Pickleball Hub Tiendesitas. By reserving, paying for, or participating in any Pickleball Hub activity, you agree to comply with the following terms. '),a(),r(17,"section")(18,"h2"),l(19,"1. Bookings and Payments"),a(),r(20,"h3"),l(21,"1.1 Reservation Confirmation"),a(),r(22,"ul")(23,"li"),l(24,"All court and coaching reservations must be made through official Pickleball Hub channels (website, app, or in-person)."),a(),r(25,"li"),l(26,"Bookings are confirmed only upon full payment or approval of a valid booking credit."),a()(),r(27,"h3"),l(28,"1.2 Session Duration"),a(),r(29,"ul")(30,"li"),l(31,"Each reservation is valid only for the booked time slot. Sessions start and end at the scheduled time."),a(),r(32,"li"),l(33,"Late arrivals do not extend the reserved period."),a()(),r(34,"h3"),l(35,"1.3 Advance Booking"),a(),r(36,"ul")(37,"li"),l(38,"Pickleball Hub recommends advance booking to ensure court and coach availability. Walk-ins are subject to open slots."),a()()(),r(39,"section")(40,"h2"),l(41,"2. Player Responsibilities"),a(),r(42,"h3"),l(43,"2.1 Punctuality"),a(),r(44,"ul")(45,"li"),l(46,"Players are required to arrive at least 10\u201315 minutes before their session for check-in and warm-up."),a(),r(47,"li"),l(48,"Late arrivals may result in forfeited time without refund."),a()(),r(49,"h3"),l(50,"2.2 Proper Attire"),a(),r(51,"ul")(52,"li"),l(53,"Players must wear appropriate sportswear and non-marking court shoes at all times."),a(),r(54,"li"),l(55,"Clothing or footwear that can damage the court (e.g., jeans, slippers, black soles) is not allowed."),a()(),r(56,"h3"),l(57,"2.3 Health and Fitness"),a(),r(58,"ul")(59,"li"),l(60,"By participating, you confirm that you are physically fit and medically cleared to play."),a(),r(61,"li"),l(62,"If you have a medical condition or recent injury, please consult a doctor before joining."),a()(),r(63,"h3"),l(64,"2.4 Personal Belongings"),a(),r(65,"ul")(66,"li"),l(67,"Pickleball Hub is not liable for any loss, theft, or damage to personal belongings."),a(),r(68,"li"),l(69,"Please secure valuables at all times."),a()()(),r(70,"section")(71,"h2"),l(72,"3. Facility Rules and Conduct"),a(),r(73,"h3"),l(74,"3.1 General Behavior"),a(),r(75,"ul")(76,"li"),l(77,"All players, guests, and companions must behave respectfully toward staff and other patrons."),a(),r(78,"li"),l(79,"Aggressive, unsafe, or disrespectful behavior will result in removal without refund."),a()(),r(80,"h3"),l(81,"3.2 Prohibited Activities"),a(),r(82,"ul")(83,"li"),l(84,"No smoking, vaping, or alcohol consumption within the facility."),a(),r(85,"li"),l(86,"No gambling or solicitation of any kind."),a(),r(87,"li"),l(88,"No littering \u2014 please dispose of trash properly."),a(),r(89,"li"),l(90,"Players are expected to clean up their belongings and playing area after use."),a()(),r(91,"h3"),l(92,"3.3 Companions and Guests"),a(),r(93,"ul")(94,"li"),l(95,"All companions must register at the front desk upon arrival."),a(),r(96,"li"),l(97,"Companions must present a valid ID for security purposes."),a(),r(98,"li"),l(99,"Registered companions must remain in designated areas and follow all Pickleball Hub rules at all times."),a(),r(100,"li"),l(101,"Unregistered or non-compliant guests may be denied entry."),a()(),r(102,"h3"),l(103,"3.4 Facility Care"),a(),r(104,"ul")(105,"li"),l(106,"Please handle all c
68ourts, nets, and equipment with care."),a(),r(107,"li"),l(108,"Any intentional or negligent damage may result in charges or suspension of booking privileges."),a()(),r(109,"h3"),l(110,"3.5 Authorized Coaching"),a(),r(111,"ul")(112,"li"),l(113,"Only Pickleball Hub\u2013approved coaches may conduct lessons or training within the facility."),a(),r(114,"li"),l(115,"Unauthorized coaching is strictly prohibited."),a()(),r(116,"h3"),l(117,"3.6 Cleanliness and Order"),a(),r(118,"ul")(119,"li"),l(120,"Players and guests must maintain cleanliness throughout their stay."),a(),r(121,"li"),l(122,"Food and drinks are allowed only in designated areas."),a(),r(123,"li"),l(124,"Spilled liquids or debris on the court must be reported immediately to staff."),a()()(),r(125,"section")(126,"h2"),l(127,"4. Cancellation Policy"),a(),r(128,"h3"),l(129,"4.1 Standard Cancellations"),a(),r(130,"ul")(131,"li")(132,"strong"),l(133,"More than 48 hours before the session:"),a(),l(134," Eligible for full refund or rebooking credit."),a(),r(135,"li")(136,"strong"),l(137,"Within 48 hours before the session:"),a(),l(138," No refund or reschedule, except for verified emergencies (see Section 4.2)."),a()(),r(139,"h3"),l(140,"4.2 Verified Emergencies (Exceptions)"),a(),r(141,"ul")(142,"li"),l(143,"Exceptions may be granted only with valid proof of emergency, submitted within 48 hours of the missed session."),a(),r(144,"li"),l(145,"Approved cases receive a one-time rebooking credit, valid for 14 days."),a()(),r(146,"p")(147,"strong"),l(148,"Acceptable proof includes:"),a()(),r(149,"ul")(150,"li")(151,"strong"),l(152,"Medical emergencies:"),a(),l(153," Medical certificate, doctor's note, or clinic/hospital receipt (photo accepted)."),a(),r(154,"li")(155,"strong"),l(156,"Family emergencies:"),a(),l(157," Obituary, hospital admission notice, or verifiable message."),a(),r(158,"li")(159,"strong"),l(160,"Calamities or travel issues:"),a(),l(161," Screenshots of government weather alerts, transport cancellations, or news articles."),a()(),r(162,"p"),l(163,"Repeated or unverified claims may be declined at management's discretion."),a(),r(164,"h3"),l(165,"4.3 Cancellations by Pickleball Hub"),a(),r(166,"ul")(167,"li"),l(168,"If Pickleball Hub cancels a session due to weather, safety, or facility issues, affected players will receive a full rebooking credit or refund."),a()()(),r(169,"section")(170,"h2"),l(171,"5. Liability and Safety"),a(),r(172,"h3"),l(173,"5.1 Assumption of Risk"),a(),r(174,"ul")(175,"li"),l(176,"Participation in pickleball carries inherent risks. By joining any activity, you acknowledge and accept these risks."),a()(),r(177,"h3"),l(178,"5.2 Injury or Accident"),a(),r(179,"ul")(180,"li"),l(181,"Pickleball Hub, its management, and staff shall not be liable for any injury, accident, or health incident arising during play, practice, or coaching."),a(),r(182,"li"),l(183,"Players participate at their own risk."),a()(),r(184,"h3"),l(185,"5.3 Medical Assistance"),a(),r(186,"ul")(187,"li"),l(188,"In case of emergency, Pickleball Hub staff may assist in calling medical services, but all related costs shall be borne by the player."),a()()(),r(189,"section")(190,"h2"),l(191,"6. General Provisions"),a(),r(192,"h3"),l(193,"6.1 Policy Updates"),a(),r(194,"ul")(195,"li"),l(196,"Pickleball Hub reserves the right to modify these Terms at any time. The latest version will be displayed at the facility and on official communication channels."),a()(),r(197,"h3"),l(198,"6.2 Management Authority"),a(),r(199,"ul")(200,"li"),l(201,"Management reserves the right to refuse service or entry to any individual who violates these Terms or behaves inappropriately."),a()(),r(202,"h3"),l(203,"6.3 Acceptance"),a(),r(204,"ul")(205,"li"),l(206,"By booking a court, enrolling in coaching, or entering the facility, you acknowledge that you have read, understood, and agreed to these Terms and Conditions."),a()()(),r(207,"div",12)(208,"p")(209,"strong"),l(210,"Pickleball Hub @ Tiendesitas"),a()()(),r(211,"button",8),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(212,"span"),l(213,"\u2190"),a(),l(214," Back to Home "),a()()(),Pe()}}var cc=class n{constructor(t,e,i){this.router=t;this.courtConfigService=e;this.sanitizer=i}termsContainer;dynamicHtml=null;ngOnInit(){this.scrollToTop();let t=this.courtConfigService.getSnapshot();t?.termsAndConditionsHtml&&(this.dynamicHtml=this.sanitizer.bypassSecurityTrustHtml(t.termsAndConditionsHtml))}ngAfterViewInit(){this.scrollToTop(),setTimeout(()=>{this.termsContainer&&(this.termsContainer.nativeElement.scrollTop=0),this.scrollToTop()},100)}scrollToTop(){try{window.scrollTo({top:0,left:0,behavior:"auto"}),document.documentElement.scrollTop=0,document.body.scrollTop=0;let t=document.querySelector(".terms-container");t&&t.scrollIntoView({block:"start",behavior:"auto"})}catch(t){console.error("Scroll error:",t)}}goBack(){this.router.navigate(["/booking"])}static \u0275fac=function(e){return new(e||n)(ae(nt),ae(Fn),ae(fi))};static \u0275cmp=We({type:n,selectors:[["app-terms-and-conditions"]],viewQuery:function(e,i){if(e&1&&oi(NP,5),e&2){let o;ri(o=ai())&&(i.termsContainer=o.first)}},decls:2,vars:2,consts:[["termsContainerDynamic",""],["termsContainer",""],["class","terms-container",4,"ngIf"],[4,"ngIf"],[1,"terms-container"],[1,"terms-content"],[1,"back-button",3,"click"],[3,"innerHTML"],[1,"back-button","bottom-back",3,"click"],[1,"subtitle"],[1,"effective-date"],[1,"intro-text"],[1,"footer-info"]],template:function(e,i){e&1&&A(0,VP,12,1,"div",2)(1,LP,215,0,"ng-container",3),e&2&&(x("ngIf",i.dynamicHtml),d(),x("ngIf",!i.dynamicHtml))},dependencies:[Ge,$e],styles:[".terms-container[_ngcontent-%COMP%]{min-height:100vh;background:linear-gradient(to right,#2c5364,#203a43,#0f2027);padding:2rem 1rem;font-family:Segoe UI,sans-serif}.terms-content[_ngcontent-%COMP%]{max-width:900px;margin:0 auto;background:#ffffff0d;backdrop-filter:blur(10px);border:1px solid rgba(26,188,156,.2);border-radius:15px;padding:2.5rem;box-shadow:0 0 30px #0000004d;line-height:1.7;color:#ecf0f1}.back-button[_ngcontent-%COMP%]{background:linear-gradient(90deg,#1abc9c,#16a085);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:10px;cursor:pointer;font-size:1rem;font-weight:600;transition:all .3s ease;margin-bottom:2rem;display:inline-flex;align-items:center;gap:.5rem;box-shadow:0 0 15px #1abc9c66}.back-button[_ngcontent-%COMP%]:hover{background:linear-gradient(90deg,#16a085,#1abc9c);transform:translateY(-2px);box-shadow:0 0 20px #1abc9c99}.back-button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:1.2rem}.bottom-back[_ngcontent-%COMP%]{margin-top:2rem;margin-bottom:0}
68h1[_ngcontent-%COMP%]{color:#1abc9c;font-size:2.25rem;margin-bottom:.5rem;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.3)}.subtitle[_ngcontent-%COMP%]{color:#bdc3c7;font-size:1.125rem;margin-bottom:.5rem;font-style:italic}.effective-date[_ngcontent-%COMP%]{color:#f1c40f;font-size:1rem;margin-bottom:1.5rem;font-weight:600}.intro-text[_ngcontent-%COMP%]{background:#1abc9c1a;border-left:4px solid #1abc9c;padding:1.25rem;margin:2rem 0;border-radius:8px;color:#ecf0f1;font-size:1.05rem;backdrop-filter:blur(5px)}section[_ngcontent-%COMP%]{margin:2.5rem 0}h2[_ngcontent-%COMP%]{color:#1abc9c;font-size:1.75rem;margin:2rem 0 1rem;font-weight:600;border-bottom:2px solid #1abc9c;padding-bottom:.5rem}h3[_ngcontent-%COMP%]{color:#f1c40f;font-size:1.25rem;margin:1.5rem 0 .75rem;font-weight:600}ul[_ngcontent-%COMP%]{margin:.75rem 0 1rem 1.5rem;padding:0}li[_ngcontent-%COMP%]{margin-bottom:.75rem;color:#ecf0f1;line-height:1.7}p[_ngcontent-%COMP%]{color:#ecf0f1;margin:.75rem 0}strong[_ngcontent-%COMP%]{color:#1abc9c;font-weight:600}.footer-info[_ngcontent-%COMP%]{background:#1abc9c1a;border:1px solid rgba(26,188,156,.3);padding:1.5rem;border-radius:8px;text-align:center;margin-top:2.5rem;backdrop-filter:blur(5px)}.footer-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#1abc9c;font-size:1.125rem;margin:0;font-weight:600}@media (max-width: 768px){.terms-container[_ngcontent-%COMP%]{padding:1rem .5rem}.terms-content[_ngcontent-%COMP%]{padding:1.5rem;border-radius:8px}h1[_ngcontent-%COMP%]{font-size:1.75rem}h2[_ngcontent-%COMP%]{font-size:1.5rem}h3[_ngcontent-%COMP%]{font-size:1.125rem}.back-button[_ngcontent-%COMP%]{padding:.6rem 1.2rem;font-size:.95rem}}@media print{.terms-container[_ngcontent-%COMP%]{background:#fff;padding:0}.back-button[_ngcontent-%COMP%]{display:none}.terms-content[_ngcontent-%COMP%]{box-shadow:none;padding:1rem}}"]})};var FP=["policyContainer"];function zP(n,t){if(n&1){let e=L();r(0,"div",4,0)(2,"div",5)(3,"button",6),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(4,"span"),l(5,"\u2190"),a(),l(6," Back "),a(),w(7,"div",7),r(8,"button",8),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(9,"span"),l(10,"\u2190"),a(),l(11," Back to Home "),a()()()}if(n&2){let e=h();d(7),x("innerHTML",e.dynamicHtml,Zt)}}function UP(n,t){if(n&1){let e=L();we(0),r(1,"div",4,1)(3,"div",5)(4,"button",6),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(5,"span"),l(6,"\u2190"),a(),l(7," Back "),a(),r(8,"h1"),l(9,"Pickleball Hub @ Tiendesitas \u2014 Privacy Policy"),a(),r(10,"p",9),l(11,"In compliance with the Data Privacy Act of 2012 (Republic Act No. 10173)"),a(),r(12,"p",10)(13,"strong"),l(14,"Effective Date: February 2026"),a()(),r(15,"div",11),l(16," Pickleball Hub @ Tiendesitas (\u201Cwe,\u201D \u201Cour,\u201D or \u201Cus\u201D) is committed to protecting the privacy and personal information of our users in compliance with the "),r(17,"strong"),l(18,"Data Privacy Act of 2012 (Republic Act No. 10173)"),a(),l(19," of the Philippines. By creating an account or using our court reservation system, you consent to the collection, use, and disclosure of your personal information as described in this Privacy Policy. "),a(),r(20,"section")(21,"h2"),l(22,"1. Information We Collect"),a(),r(23,"p"),l(24,"When you create an account and use our reservation system, we collect the following personal information:"),a(),r(25,"ul")(26,"li")(27,"strong"),l(28,"Account Information:"),a(),l(29," Full name, email address, mobile/contact number, home address, and username."),a(),r(30,"li")(31,"strong"),l(32,"Booking Information:"),a(),l(33," Session dates, time slots, number of players, player names, booking status, and booking history."),a(),r(34,"li")(35,"strong"),l(36,"Payment Information:"),a(),l(37," GCash payment receipts (uploaded images), payment verification records, and transaction amounts."),a(),r(38,"li")(39,"strong"),l(40,"Discount Eligibility Documents:"),a(),l(41," Government-issued ID images submitted for PWD or Senior Citizen discount verification."),a(),r(42,"li")(43,"strong"),l(44,"System Information:"),a(),l(45," Login timestamps and activity logs within the platform."),a()()(),r(46,"section")(47,"h2"),l(48,"2. How We Use Your Information"),a(),r(49,"ul")(50,"li"),l(51,"To process and manage your court reservations and open play bookings."),a(),r(52,"li"),l(53,"To verify payments and confirm your booking slots."),a(),r(54,"li"),l(55,"To send booking confirmations, reminders, and important session updates."),a(),r(56,"li"),l(57,"To apply applicable discounts (PWD, Senior Citizen) upon verification of submitted eligibility documents."),a(),r(58,"li"),l(59,"To generate QR codes for session check-in and attendance tracking."),a(),r(60,"li"),l(61,"To administer your account and provide customer support."),a(),r(62,"li"),l(63,"To ensure compliance with facility rules and policies."),a()()(),r(64,"section")(65,"h2"),l(66,"3. Who Can Access Your Data"),a(),r(67,"p")(68,"strong"),l(69,"By using this system, you acknowledge and expressly consent that the following authorized parties may access your personal information:"),a()(),r(70,"ul")(71,"li")(72,"strong"),l(73,"System Administrators:"),a(),l(74," Authorized personnel managing the reservation platform have access to all user accounts, booking records, uploaded payment receipts, discount eligibility documents, and personal profile information. This access is necessary for payment verification, booking management, discount approvals, and customer support."),a(),r(75,"li")(76,"strong"),l(77,"Database Administrators:"),a(),l(78," Technical personnel responsible for maintaining the database infrastru
68cture may directly access personal data stored in the database during system maintenance, performance monitoring, troubleshooting, and data integrity checks."),a(),r(79,"li")(80,"strong"),l(81,"Facility Staff:"),a(),l(82," Staff assigned to manage sessions and verify check-ins may view relevant booking and attendance information."),a()(),r(83,"p"),l(84,"We do "),r(85,"strong"),l(86,"not"),a(),l(87," sell, rent, or share your personal information with third parties for marketing or commercial purposes."),a()(),r(88,"section")(89,"h2"),l(90,"4. Data Retention"),a(),r(91,"ul")(92,"li"),l(93,"Your personal information and booking records are retained for as long as your account is active or as needed to fulfill the purposes described in this policy, or as required by applicable law."),a(),r(94,"li"),l(95,"Uploaded payment receipts and ID documents are retained for record-keeping and audit purposes."),a(),r(96,"li"),l(97,"To request account deletion or data removal, please contact the facility management directly."),a()()(),r(98,"section")(99,"h2"),l(100,"5. Data Security"),a(),r(101,"ul")(102,"li"),l(103,"We implement reasonable technical and organizational measures to protect your personal information against unauthorized external access, disclosure, or destruction."),a(),r(104,"li"),l(105,"Passwords are encrypted and never stored in plain text."),a(),r(106,"li"),l(107,"However, please be aware that access by authorized administrators and database personnel is part of normal system operations, as described in Section 3."),a(),r(108,"li"),l(109,"By using this system, you acknowledge and accept that such authorized access may occur."),a()()(),r(110,"section")(111,"h2"),l(112,"6. Your Rights Under the Data Privacy Act of 2012"),a(),r(113,"p"),l(114,"As a data subject under Republic Act No. 10173, you have the right to:"),a(),r(115,"ul")(116,"li")(117,"strong"),l(118,"Access:"),a(),l(119," Request a copy of your personal data held by us."),a(),r(120,"li")(121,"strong"),l(122,"Correction:"),a(),l(123," Request correction of inaccurate personal data."),a(),r(124,"li")(125,"strong"),l(126,"Erasure / Blocking:"),a(),l(127," Request deletion of your personal data under certain circumstances."),a(),r(128,"li")(129,"strong"),l(130,"Object:"),a(),l(131," Object to the processing of your personal data for specific purposes."),a(),r(132,"li")(133,"strong"),l(134,"Lodge a Complaint:"),a(),l(135," File a complaint with the "),r(136,"strong"),l(137,"National Privacy Commission (NPC)"),a(),l(138," if you believe your rights under the Data Privacy Act have been violated."),a()(),r(139,"p"),l(140,"To exercise any of these rights, please contact facility management in person or through our official channels."),a()(),r(141,"section")(142,"h2"),l(143,"7. Consent to Data Visibility by Authorized Personnel"),a(),r(144,"p"),l(145,"By registering for and using the Pickleball Hub @ Tiendesitas reservation system, "),r(146,"strong"),l(147,"you expressly acknowledge and consent"),a(),l(148," that:"),a(),r(149,"ul")(150,"li"),l(151,"Your personal information, booking history, uploaded receipts, and payment records may be viewed by authorized system administrators and database personnel."),a(),r(152,"li"),l(153,"This access is necessary for the lawful operation, maintenance, and administration of the reservation system."),a(),r(154,"li"),l(155,"You will not hold Pickleball Hub @ Tiendesitas, its owners, management, staff, or technical personnel liable for access to your data by authorized parties acting within the scope of their duties."),a()()(),r(156,"section")(157,"h2"),l(158,"8. Local Storage and Session Data"),a(),r(159,"ul")(160,"li"),l(161,"Our web application uses browser local storage to maintain your login session and theme preferences."),a(),r(162,"li"),l(163,"This data is stored on your device only and is used solely to improve your experience within the application."),a(),r(164,"li"),l(165,"No personal data stored locally is transmitted to third parties."),a()()(),r(166,"section")(167,"h2"),l(168,"9. Changes to This Policy"),a(),r(169,"ul")(170,"li"),l(171,"We reserve the right to update this Privacy Policy at any time."),a(),r(172,"li"),l(173,"Material changes will be reflected in the \u201CEffective Date\u201D at the top of this document."),a(),r(174,"li"),l(175,"Continued use of the system after changes have been posted constitutes your acceptance of the updated policy."),a()()(),r(176,"section")(177,"h2"),l(178,"10. Contact Us"),a(),r(179,"p"),l(180,"For any privacy-related concerns or to exercise your data rights, please contact us at:"),a(),r(181,"p")(182,"strong"),l(183,"Pickleball Hub @ Tiendesitas"),a(),w(184,"br"),l(185,"Tiendesitas, Pasig City, Philippines"),a()(),r(186,"div",12)(187,"p")(188,"strong"),l(189,"Pickleball Hub @ Tiendesitas"),a(),l(190," \u2014 We value your trust and are committed to keeping your data safe and used responsibly."),a()(),r(191,"button",8),S("click",function(){k(e);let o=h();return O(o.goBack())}),r(192,"span"),l(193,"\u2190"),a(),l(194," Back to Home "),a()()(),Pe()}}var dc=class n{constructor(t,e,i){this.router=t;this.courtConfigService=e;this.sanitizer=i}policyContainer;dynamicHtml=null;ngOnInit(){this.scrollToTop();let t=this.courtConfigService.getSnapshot();t?.privacyPolicyHtml&&(this.dynamicHtml=this.sanitizer.bypassSecurityTrustHtml(t.privacyPolicyHtml))}ngAfterViewInit(){this.scrollToTop(),setTimeout(()=>{this.policyContainer&&(this.policyContainer.nativeElement.scrollTop=0),this.scrollToTop()},100)}scrollToTop(){try{window.scrollTo({top:0,left:0,behavior:"auto"}),document.documentElement.scrollTop=0,document.body.scrollTop=0;let t=document.querySelector(".policy-container");t&&t.scrollIntoView({block:"start",behavior:"auto"})}catch(t){console.error("Scroll error:",t)}}goBack(){this.router.navigate(["/booking"])}static \u0275fac=function(e){return new(e||n)(ae(nt),ae(Fn),ae(fi))};static \u0275cmp=We({type:n,selectors:[["app-privacy-policy"]],viewQuery:function(e,i){if(e&1&&oi(FP,5),e&2){let o;ri(o=ai())&&(i.policyContainer=o.first)}},decls:2,vars:2,consts:[["policyContainerDynamic",""],["policyContainer",""],["class","policy-container",4,"ngIf"],[4,"ngIf"],[1,"policy-container"],[1,"policy-content"],[1,"back-button",3,"click"],[3,"innerHTML"],[1,"back-button","bottom-back",3,"click"],[1,"subtitle"],[1,"effective-date"],[1,"intro-text"],[1,"footer-info"]],template:function(e,i){e&1&&A(0,zP,12,1,"div",2)(1,UP,195,0,"ng-container",3),e&2&&(x("ngIf",i.dynamicHtml),d(),x("ngIf",!i.dynamicHtml))},dependencies:[Ge,$e],styles:[".policy-container[_ngcontent-%COMP%]{min-height:100vh;background:linear-gradient(to right,#2c5364,#203a43,#0f2027);padding:2rem 1rem;font-family:Segoe UI,sans-serif}.policy-content[_ngcontent-%COMP%]{max-width:900px;margin:0 auto;background:#ffffff0d;backdrop-filter:blur(10px);border:1px solid rgba(26,188,156,.2);border-radius:15px;padding:2.5rem;box-shadow:0 0 30px #0000004d;line-height:1.7;color:#ecf0f1}.back-button[_ngcontent-%COMP%]{background:linear-gradient(90deg,#1abc9c,#16a085);color:#fff;border:none;padding:.75rem 1.5rem;border-radius:10px;cursor:pointer;font-size:1rem;font-weight:600;transition:all .3s ease;margin-bottom:2rem;display:inline-flex;align-items:center;gap:.5rem;box-shadow:0 0 15px #1abc9c66}.back-button[_ngcontent-%COMP%]:hover{background:linear-gradient(90deg,#16a085,#1abc9c);transform:translateY(-2px);box-shadow:0 0 20px #1abc9c99}.back-button[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:1.2rem}.bottom-back[_ngcontent-%COMP%]{margin-top:2rem;margin-bottom:0}
68h1[_ngcontent-%COMP%]{color:#1abc9c;font-size:2.25rem;margin-bottom:.5rem;font-weight:700;text-shadow:0 2px 4px rgba(0,0,0,.3)}.subtitle[_ngcontent-%COMP%]{color:#bdc3c7;font-size:1.125rem;margin-bottom:.5rem;font-style:italic}.effective-date[_ngcontent-%COMP%]{color:#f1c40f;font-size:1rem;margin-bottom:1.5rem;font-weight:600}.intro-text[_ngcontent-%COMP%]{background:#1abc9c1a;border-left:4px solid #1abc9c;padding:1.25rem;margin:2rem 0;border-radius:8px;color:#ecf0f1;font-size:1.05rem;backdrop-filter:blur(5px)}section[_ngcontent-%COMP%]{margin:2.5rem 0}h2[_ngcontent-%COMP%]{color:#1abc9c;font-size:1.75rem;margin:2rem 0 1rem;font-weight:600;border-bottom:2px solid #1abc9c;padding-bottom:.5rem}h3[_ngcontent-%COMP%]{color:#f1c40f;font-size:1.25rem;margin:1.5rem 0 .75rem;font-weight:600}ul[_ngcontent-%COMP%]{margin:.75rem 0 1rem 1.5rem;padding:0}li[_ngcontent-%COMP%]{margin-bottom:.75rem;color:#ecf0f1;line-height:1.7}p[_ngcontent-%COMP%]{color:#ecf0f1;margin:.75rem 0}strong[_ngcontent-%COMP%]{color:#1abc9c;font-weight:600}.footer-info[_ngcontent-%COMP%]{background:#1abc9c1a;border:1px solid rgba(26,188,156,.3);padding:1.5rem;border-radius:8px;text-align:center;margin-top:2.5rem;backdrop-filter:blur(5px)}.footer-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:#1abc9c;font-size:1.125rem;margin:0;font-weight:600}@media (max-width: 768px){.policy-container[_ngcontent-%COMP%]{padding:1rem .5rem}.policy-content[_ngcontent-%COMP%]{padding:1.5rem;border-radius:8px}h1[_ngcontent-%COMP%]{font-size:1.75rem}h2[_ngcontent-%COMP%]{font-size:1.5rem}h3[_ngcontent-%COMP%]{font-size:1.125rem}.back-button[_ngcontent-%COMP%]{padding:.6rem 1.2rem;font-size:.95rem}}@media print{.policy-container[_ngcontent-%COMP%]{background:#fff;padding:0}.back-button[_ngcontent-%COMP%]{display:none}.policy-content[_ngcontent-%COMP%]{box-shadow:none;padding:1rem}}"]})};var Lu=Ri(Vu(),1);var Tn=function(n){return n[n.CONNECTING=0]="CONNECTING",n[n.OPEN=1]="OPEN",n[n.CLOSING=2]="CLOSING",n[n.CLOSED=3]="CLOSED",n}(Tn||{});var Xo=class{get stompClient(){return this._stompClient}constructor(t){this._queuedMessages=[],this._stompClient=t||new Lu.Client;let e=()=>{};this._beforeConnect=e,this._correlateErrors=()=>{},this._debug=e,this._connectionStatePre$=new fn(Tn.CLOSED),this._connectedPre$=this._connectionStatePre$.pipe(xn(i=>i===Tn.OPEN)),this.connectionState$=new fn(Tn.CLOSED),this.connected$=this.connectionState$.pipe(xn(i=>i===Tn.OPEN)),this.connected$.subscribe(()=>{this._sendQueuedMessages()}),this._serverHeadersBehaviourSubject$=new fn(null),this.serverHeaders$=this._serverHeadersBehaviourSubject$.pipe(xn(i=>i!==null)),this.stompErrors$=new Et,this.unhandledMessage$=new Et,this.unhandledReceipts$=new Et,this.unhandledFrame$=new Et,this.webSocketErrors$=new Et}configure(t){let e=Object.assign({},t);e.beforeConnect&&(this._beforeConnect=e.beforeConnect,delete e.beforeConnect),e.correlateErrors&&(this._correlateErrors=e.correlateErrors,delete e.correlateErrors),this._stompClient.configure(e),e.debug&&(this._debug=e.debug)}activate(){this._stompClient.configure({beforeConnect:()=>ue(this,null,function*(){this._changeState(Tn.CONNECTING),yield this._beforeConnect(this)}),onConnect:t=>{this._serverHeadersBehaviourSubject$.next(t.headers),this._changeState(Tn.OPEN)},onStompError:t=>{this.stompErrors$.next(t)},onWebSocketClose:()=>{this._changeState(Tn.CLOSED)},onUnhandledMessage:t=>{this.unhandledMessage$.next(t)},onUnhandledReceipt:t=>{this.unhandledReceipts$.next(t)},onUnhandledFrame:t=>{this.unhandledFrame$.next(t)},onWebSocketError:t=>{this.webSocketErrors$.next(t)}}),this._stompClient.activate()}deactivate(){return ue(this,arguments,function*(t={}){this._changeState(Tn.CLOSING),yield this._stompClient.deactivate(t),this._changeState(Tn.CLOSED)})}connected(){return this.connectionState$.getValue()===Tn.OPEN}get active(){return this.stompClient.active}publish(t){let e=t.retryIfDisconnected==null?!0:t.retryIfDisconnected;if(this.connected())this._stompClient.publish(t);else if(e)this._debug("Not connected, queueing"),this._queuedMessages.push(t);else throw new Error("Cannot publish while broker is not connected")}_sendQueuedMessages(){let t=this._queuedMessages;if(this._queuedMessages=[],t.length!==0){this._debug(`Will try sending ${t.length} queued message(s)`);for(let e of t)this._debug(`Attempting to send ${e}`),this.publish(e)}}watch(t,e={}){let i={subHeaders:{},unsubHeaders:{},subscribeOnlyOnce:!1},o;return typeof t=="string"?o=Object.assign({},i,{destination:t,subHeaders:e}):o=Object.assign({},i,t),this._debug(`Request to subscribe ${o.destination}`),Qg.create(m=>{let f,v,y=this._connectedPre$;o.subscribeOnlyOnce&&(y=y.pipe(tu(1)));let M=this.stompErrors$.subscribe(I=>{this._correlateErrors(I)===o.destination&&m.error(I)});return v=y.subscribe(()=>{this._debug(`Will subscribe to ${o.destination}`);let I=o.subHeaders;typeof I=="function"&&(I=I()),f=this._stompClient.subscribe(o.destination,B=>{m.next(B)},I)}),()=>{if(this._debug(`Stop watching connection state (for ${o.destination})`),v.unsubscribe(),M.unsubscribe(),this.connected()){this._debug(`Will unsubscribe from ${o.destination} at Stomp`);let I=o.unsubHeaders;typeof I=="function"&&(I=I()),f.unsubscribe(I)}else this._debug(`Stomp not connected, no need to unsubscribe from ${o.destination} at Stomp`)}}).pipe(nu())}watchForReceipt(t,e){this._stompClient.watchForReceipt(t,e)}asyncReceipt(t){return po(this.unhandledReceipts$.pipe(xn(e=>e.headers["receipt-id"]===t)))}_changeState(t){this._connectionStatePre$.next(t),this.connectionState$.next(t)}};var M1=Ri(Ac());var Dc=class n{constructor(t){this.authService=t}rxStompClient;connectionStatus$=new fn(!1);sessionId="";connect(t){this.sessionId=t;let e=this.authService.getToken();if(!e)return;this.rxStompClient&&this.rxStompClient.deactivate(),this.rxStompClient=new Xo;let i={webSocketFactory:()=>new M1.default(`${Be.apiBase.replace("/api","")}/ws-chat`),connectHeaders:{Authorization:`Bearer ${e}`},heartbeatIncoming:1e4,heartbeatOutgoing:1e4,reconnectDelay:5e3};this.rxStompClient.configure(i),this.rxStompClient.activate(),this.rxStompClient.connected$.subscribe(o=>
68{this.connectionStatus$.next(o===1)})}disconnect(){this.rxStompClient&&(this.rxStompClient.deactivate(),this.connectionStatus$.next(!1))}getConnectionStatus(){return this.connectionStatus$.asObservable()}isConnected(){return this.connectionStatus$.value}sendMessage(t,e,i){if(!this.isConnected())return;let o={content:t,messageType:"TEXT"};e&&(o.replyToMessageId=e),o.mentionedUserIds=i??[],this.rxStompClient.publish({destination:`/app/session-chat/${this.sessionId}/sendMessage`,body:JSON.stringify(o)})}sendTyping(t){this.isConnected()&&this.rxStompClient.publish({destination:`/app/session-chat/${this.sessionId}/typing`,body:JSON.stringify({isTyping:t})})}watchMessages(){return this.rxStompClient.watch(`/topic/session-chat/${this.sessionId}/messages`).pipe(On(t=>JSON.parse(t.body)))}watchDeletedMessages(){return this.rxStompClient.watch(`/topic/session-chat/${this.sessionId}/messages/deleted`).pipe(On(t=>JSON.parse(t.body)))}watchMessageUpdates(){return this.rxStompClient.watch(`/topic/session-chat/${this.sessionId}/message-updated`).pipe(On(t=>JSON.parse(t.body)))}watchTypingEvents(){return this.rxStompClient.watch(`/topic/session-chat/${this.sessionId}/typing`).pipe(On(t=>JSON.parse(t.body)))}static \u0275fac=function(e){return new(e||n)(on(je))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var Ea=Ri(Ss());var Ta=class n{constructor(t){this.http=t}apiUrl=`${Be.apiBase}/session-chat`;getAuthHeaders(){let t={"Content-Type":"application/json"},e=localStorage.getItem("pickle_jwt_token");if(e)try{let i=Ea.AES.decrypt(e,"picklehub_secret_key").toString(Ea.enc.Utf8);i&&(t.Authorization=`Bearer ${i}`)}catch{}return new si(t)}getMessages(t,e=20,i){let o={limit:e.toString()};return i&&(o.before=i),this.http.get(`${this.apiUrl}/${t}/messages`,{headers:this.getAuthHeaders(),params:o})}deleteMessage(t,e){return this.http.delete(`${this.apiUrl}/${t}/messages/${e}`,{headers:this.getAuthHeaders()})}reactToMessage(t,e,i){return this.http.post(`${this.apiUrl}/${t}/messages/${e}/react`,{emoji:i},{headers:this.getAuthHeaders()})}searchUsers(t,e=8){return this.http.get(`${Be.apiBase}/users/search`,{headers:this.getAuthHeaders(),params:{q:t,limit:e.toString()}})}sendImageMessage(t,e){let i=new FormData;i.append("file",e);let o=localStorage.getItem("pickle_jwt_token"),s=new si;if(o)try{let m=Ea.AES.decrypt(o,"picklehub_secret_key").toString(Ea.enc.Utf8);m&&(s=s.set("Authorization",`Bearer ${m}`))}catch{}return this.http.post(`${this.apiUrl}/${t}/messages/image`,i,{headers:s})}static \u0275fac=function(e){return new(e||n)(on(Wi))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var Jo=class n{ctx=null;getCtx(){try{return this.ctx||(this.ctx=new AudioContext),this.ctx.state==="suspended"&&this.ctx.resume(),this.ctx}catch{return null}}playSend(){let t=this.getCtx();if(t)try{let e=t.createOscillator(),i=t.createGain();e.connect(i),i.connect(t.destination),e.type="sine",e.frequency.setValueAtTime(700,t.currentTime),e.frequency.exponentialRampToValueAtTime(350,t.currentTime+.12),i.gain.setValueAtTime(.18,t.currentTime),i.gain.exponentialRampToValueAtTime(.001,t.currentTime+.15),e.start(t.currentTime),e.stop(t.currentTime+.15)}catch{}}playReceive(){let t=this.getCtx();if(t)try{let e=[{freq:880,start:0},{freq:1100,start:.13}];for(let i of e){let o=t.createOscillator(),s=t.createGain();o.connect(s),s.connect(t.destination),o.type="sine",o.frequency.setValueAtTime(i.freq,t.currentTime+i.start),s.gain.setValueAtTime(0,t.currentTime+i.start),s.gain.linearRampToValueAtTime(.2,t.currentTime+i.start+.02),s.gain.exponentialRampToValueAtTime(.001,t.currentTime+i.start+.22),o.start(t.currentTime+i.start),o.stop(t.currentTime+i.start+.22)}}catch{}}static \u0275fac=function(e){return new(e||n)};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var $3=["messagesContainer"],Y3=["messageInputEl"];function X3(n,t){if(n&1){let e=L();r(0,"button",14),S("click",function(o){return k(e),h(2).goBack(),O(o.stopPropagation())}),w(1,"i",15),a()}}function Z3(n,t){n&1&&Uo(0)}function Q3(n,t){if(n&1&&(we(0),A(1,Z3,1,0,"ng-container",16),Pe()),n&2){h(2);let e=Jt(3);d(),x("ngTemplateOutlet",e)}}function K3(n,t){if(n&1){let e=L();r(0,"div",5)(1,"div",6),S("click",function(){k(e);let o=h();return O(o.isMinimized&&o.toggleMinimize())}),A(2,X3,2,0,"button",7),r(3,"div",8),w(4,"i",9),r(5,"span"),l(6),a()(),r(7,"div",10)(8,"button",11),S("click",function(o){return k(e),h().toggleMinimize(),O(o.stopPropagation())}
68),w(9,"i"),a(),r(10,"button",12),S("click",function(o){return k(e),h().close(),O(o.stopPropagation())}),w(11,"i",13),a()()(),A(12,Q3,2,1,"ng-container",4),a()}if(n&2){let e=h();te("minimized",e.isMinimized),d(),te("chat-header-clickable",e.isMinimized),d(),x("ngIf",e.showBack),d(4),R(e.sessionName),d(2),x("title",e.isMinimized?"Open chat":"Minimize"),d(),Qt(e.isMinimized?"bi bi-chevron-up":"bi bi-dash-lg"),d(3),x("ngIf",!e.isMinimized)}}function J3(n,t){n&1&&Uo(0)}function eS(n,t){if(n&1&&(we(0),A(1,J3,1,0,"ng-container",16),Pe()),n&2){h();let e=Jt(3);d(),x("ngTemplateOutlet",e)}}function tS(n,t){if(n&1){let e=L();r(0,"button",37),S("click",function(){k(e);let o=h(2);return O(o.loadMoreMessages())}),w(1,"i",38),l(2," Load older messages "),a()}}function nS(n,t){n&1&&(r(0,"div",39),w(1,"div",40),r(2,"span",41),l(3,"Loading older messages\u2026"),a()())}function iS(n,t){if(n&1){let e=L();r(0,"img",51),S("error",function(){k(e);let o=h(2).$implicit,s=h(2);return O(s.onAvatarError(o.senderAvatarFileId))})("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),a()}if(n&2){let e=h(2).$implicit,i=h(2);x("src",i.getProfilePictureUrl(e.senderAvatarFileId),Ie)("alt",e.senderName)}}function oS(n,t){if(n&1){let e=L();r(0,"div",52),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),l(1),a()}if(n&2){let e=h(2).$implicit,i=h(2);d(),F(" ",i.getSenderInitials(e.senderName)," ")}}function rS(n,t){n&1&&(r(0,"div",53),w(1,"i",54),l(2," Message unsent "),a())}function aS(n,t){if(n&1&&(r(0,"div",65)(1,"span",66),l(2),a(),r(3,"span",67),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function sS(n,t){if(n&1&&(r(0,"div",62),A(1,aS,5,2,"div",63),w(2,"span",64),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function lS(n,t){if(n&1){let e=L();r(0,"div",68)(1,"img",69),S("click",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.openLightbox(m.getAttachmentImageUrl(s.attachmentFileId),s.senderName+"'s photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h(2);d(),x("src",i.getAttachmentImageUrl(e.attachmentFileId),Ie)}}function cS(n,t){if(n&1){let e=L();r(0,"button",73),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function dS(n,t){if(n&1){let e=L();r(0,"div",70),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,cS,2,1,"button",71),r(2,"input",72),pe("ngModelChange",function(o){k(e);let s=h(5);return de(s.customEmojiInput,o)||(s.customEmojiInput=o),O(o)}),S("keyup.enter",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.sendCustomEmoji(s.id,o))}),a()()}if(n&2){let e=h(5);d(),x("ngForOf",e.EMOJIS),d(),ce("ngModel",e.customEmojiInput)}}function pS(n,t){if(n&1){let e=L();r(0,"span",76),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function mS(n,t){if(n&1&&(r(0,"div",74),A(1,pS,2,5,"span",75),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngForOf",i.getReactionEntries(e))}}function gS(n,t){if(n&1){let e=L();we(0),r(1,"div",55),A(2,sS,3,2,"div",56)(3,lS,2,1,"div",57),r(4,"button",58),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.toggleReactionPicker(s.id,o))}),w(5,"i",59),a()(),A(6,dS,3,2,"div",60)(7,mS,2,1,"div",61),Pe()}if(n&2){let e=h(2).$implicit,i=h(2);d(2),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function uS(n,t){if(n&1){let e=L();r(0,"div",44),A(1,iS,1,2,"img",45)(2,oS,2,1,"div",46),r(3,"div",47)(4,"div",48),S("click",function(o){k(e);let s=h().$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),l(5),a(),A(6,rS,3,0,"div",49)(7,gS,8,4,"ng-container",4),r(8,"div",50),l(9),a()()()}if(n&2){let e=h().$implicit,i=h(2);d(),x("ngIf",i.showAvatar(e.senderAvatarFileId)),d(),x("ngIf",!i.showAvatar(e.senderAvatarFileId)),d(3),R(e.senderName),d(),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function fS(n,t){n&1&&(r(0,"div",79),w(1,"i",54),l(2," Message unsent "),a())}function hS(n,t){if(n&1&&(r(0,"div",90)(1,"span",66),l(2),a(),r(3,"span",67),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function _S(n,t){if(n&1&&(r(0,"div",88),A(1,hS,5,2,"div",89),w(2,"span",64),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function xS(n,t){if(n&1){let e=L();r(0,"div",91)(1,"img",69),S("click",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.openLightbox(m.getAttachmentImageUrl(s.attachmentFileId),"My photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h(2);d(),x("src",i.getAttachmentImageUrl(e.attachmentFileId),Ie)}}function vS(n,t){if(n&1){let e=L();r(0,"div",92),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"span"),l(2,"Delete this message?"),a(),r(3,"button",93),S("click",function(){k(e);let o=h(5);return O(o.confirmDelete())}),l(4,"Delete"),a(),r(5,"button",94),S("click",function(){k(e);let o=h(5);return O(o.cancelDelete())}),l(6,"Cancel"),a()()}}function bS(n,t){if(n&1){let e=L();r(0,"button",73),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function yS(n,t){if(n&1){let e=L();r(0,"div",95),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,bS,2,1,"button",71),r(2,"input",72),pe("ngModelChange",function(o){k(e);let s=h(5);return de(s.customEmojiInput,o)||(s.customEmojiInput=o),O(o)}),S("keyup.enter",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.sendCustomEmoji(s.id,o))}),a()()}if(n&2){let e=h(5);d(),x("ngForOf",e.EMOJIS),d(),ce("ngModel",e.customEmojiInput)}}function CS(n,t){if(n&1){let e=L();r(0,"span",76),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function wS(n,t){if(n&1&&(r(0,"div",96),A(1,CS,2,5,"span",75),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngForOf",i.getReactionEntries(e))}}function PS(n,t){if(n&1){let e=L();we(0),r(1,"div",80)(2,"button",58),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.toggleReactionPicker(s.id,o))}),w(3,"i",59),a(),A(4,_S,3,2,"div",81)(5,xS,2,1,"div",82),r(6,"button",83),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.requestDelete(s.id,o))}),w(7,"i",84),a()(),A(8,vS,7,0,"div",85)(9,yS,3,2,"div",86)(10,wS,2,1,"div",87),Pe()}if(n&2){let e=h(2).$implicit,i=h(2);d(4),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.pendingDeleteMessageId===e.id),d(),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function MS(n,t){if(n&1&&(r(0,"div",44)(1,"div",47),A(2,fS,3,0,"div",77)(3,PS,11,5,"ng-container",4),r(4,"div",78),l(5),a()()()),n&2){let e=h().$implicit,i=h(2);d(2),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function SS(n,t){if(n&1&&(r(0,"div",42),A(1,uS,10,6,"div",43)(2,MS,6,3,"div",43),a()),n&2){let e=t.$implicit,i=h(2);te("my-message",i.isMyMessage(e)),x("@messageEnter",void 0),vn("data-message-id",e.id),d(),x("ngIf",!i.isMyMessage(e)),d(),x("ngIf",i.isMyMessage(e))}}function kS(n,t){n&1&&(r(0,"div",97)(1,"div",44)(2,"div",47)(3,"div",80)(4,"div",98),w(5,"span",99)(6,"i",32),r(7,"span"),l(8,"Uploading..."),a()()()()()())}function OS(n,t){n&1&&(r(0,"div",100),w(1,"i",101),r(2,"p"),l(3,"No messages yet. Be the first to say something!"),a()())}function ES(n,t){if(n&1){let e=L();r(0,"button",102),S("click",function(){k(e);let o=h(2);return O(o.scrollToBottom())}),w(1,"i",103),a()}if(n&2){let e=h(2);le("bottom",(e.imagePreview?174:90)+(e.typingUsers.size>0?42:0)+"px")}}function TS(n,t){if(n&1){let e=L();r(0,"img",113),S("error",function(){k(e);let o=h().$implicit,s=h(3);return O(s.onAvatarError(s.getTypingUserAvatar(o.userId)))}),a()}if(n&2){let e=h().$implicit,i=h(3);
68x("src",i.getProfilePictureUrl(i.getTypingUserAvatar(e.userId)),Ie)("alt",e.name)}}function IS(n,t){if(n&1&&(r(0,"div",114),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),F(" ",i.getSenderInitials(e.name)," ")}}function AS(n,t){if(n&1&&(r(0,"div",107),A(1,TS,1,2,"img",108)(2,IS,2,1,"div",109),r(3,"div",110)(4,"span",111),w(5,"span")(6,"span")(7,"span"),a()(),r(8,"span",112),l(9),a()()),n&2){let e=t.$implicit,i=h(3);d(),x("ngIf",i.showAvatar(i.getTypingUserAvatar(e.userId))),d(),x("ngIf",!i.showAvatar(i.getTypingUserAvatar(e.userId))),d(7),R(e.name)}}function DS(n,t){if(n&1&&(r(0,"div",104)(1,"div",105),A(2,AS,10,3,"div",106),a()()),n&2){let e=h(2);d(2),x("ngForOf",e.typingUsersArray)}}function RS(n,t){if(n&1){let e=L();r(0,"div",115),w(1,"img",116),r(2,"div",117)(3,"button",118),S("click",function(){k(e);let o=h(2);return O(o.clearImage())}),w(4,"i",13),a(),r(5,"button",119),S("click",function(){k(e);let o=h(2);return O(o.sendImageMessage())}),w(6,"i",36),l(7),a()()()}if(n&2){let e=h(2);d(),x("src",e.imagePreview,Ie),d(4),x("disabled",e.isUploading),d(2),F(" ",e.isUploading?"Sending...":"Send"," ")}}function BS(n,t){if(n&1&&(r(0,"div",124),l(1),a()),n&2){let e=h(3);d(),R(e.lightboxAlt)}}function NS(n,t){if(n&1){let e=L();r(0,"div",120),S("click",function(){k(e);let o=h(2);return O(o.closeLightbox())}),r(1,"button",121),S("click",function(){k(e);let o=h(2);return O(o.closeLightbox())}),w(2,"i",13),a(),r(3,"img",122),S("click",function(o){return k(e),O(o.stopPropagation())}),a(),A(4,BS,2,1,"div",123),a()}if(n&2){let e=h(2);d(3),x("src",e.lightboxUrl,Ie)("alt",e.lightboxAlt),d(),x("ngIf",e.lightboxAlt)}}function VS(n,t){if(n&1){let e=L();r(0,"div",125)(1,"div",126),w(2,"i",127),r(3,"span",128),l(4),a(),r(5,"span",129),l(6),_e(7,"slice"),a()(),r(8,"button",130),S("click",function(){k(e);let o=h(2);return O(o.replyingTo=null)}),w(9,"i",131),a()()}if(n&2){let e=h(2);d(4),R(e.replyingTo.senderName),d(2),R(Ho(7,2,e.replyingTo.content,0,80))}}function LS(n,t){n&1&&(r(0,"div",136),w(1,"div",137),a())}function FS(n,t){if(n&1){let e=L();r(0,"img",147),S("error",function(){k(e);let o=h(4);return O(o.onAvatarError(o.playerPopup.avatarFileId))}),a()}if(n&2){let e=h(4);x("src",e.getProfilePictureUrl(e.playerPopup.avatarFileId),Ie)("alt",e.playerPopup.name)}}function zS(n,t){if(n&1&&(r(0,"div",148),l(1),a()),n&2){let e=h(4);d(),F(" ",e.getSenderInitials(e.playerPopup.name)," ")}}function US(n,t){if(n&1&&(r(0,"div",149),l(1),a()),n&2){let e=h(4);d(),F("@",e.playerPopup.data.username,"")}}function jS(n,t){if(n&1&&(r(0,"div",150)(1,"span",151),l(2),a()()),n&2){let e=h(4);d(2),R(e.playerPopup.data.role)}}function HS(n,t){if(n&1&&(r(0,"div",154)(1,"span",155),l(2,"Skill"),a(),r(3,"span",156),l(4),a()()),n&2){let e=h(5);d(4),R(e.playerPopup.data.skillLevel)}}function WS(n,t){if(n&1&&(r(0,"div",154)(1,"span",155),l(2,"DUPR"),a(),r(3,"span",156),l(4),a()()),n&2){let e=h(5);d(4),R(e.playerPopup.data.duprRating)}}function GS(n,t){if(n&1&&(r(0,"div",152),A(1,HS,5,1,"div",153)(2,WS,5,1,"div",153),a()),n&2){let e=h(4);d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.skillLevel),d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.duprRating)}}function qS(n,t){if(n&1){let e=L();we(0),r(1,"div",138),A(2,FS,1,2,"img",139)(3,zS,2,1,"div",140),a(),r(4,"div",141),l(5),a(),A(6,US,2,1,"div",142)(7,jS,3,1,"div",143)(8,GS,3,2,"div",144),r(9,"button",145),S("click",function(){k(e);let o=h(3);return O(o.goToDirectMessage())}),w(10,"i",146),l(11," Send Message "),a(),Pe()}if(n&2){let e=h(3);d(2),x("ngIf",e.showAvatar(e.playerPopup.avatarFileId)),d(),x("ngIf",!e.showAvatar(e.playerPopup.avatarFileId)),d(2),R((e.playerPopup.data==null?null:e.playerPopup.data.fullname)||e.playerPopup.name),d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.username),d(),x("ngIf",(e.playerPopup.data==null?null:e.playerPopup.data.role)&&e.playerPopup.data.role!=="user"),d(),x("ngIf",(e.playerPopup.data==null?null:e.playerPopup.data.skillLevel)||(e.playerPopup.data==null?null:e.playerPopup.data.duprRating))}}function $S(n,t){if(n&1){let e=L();r(0,"div",132),S("click",function(){k(e);let o=h(2);return O(o.closePlayerPopup())}),r(1,"div",133),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"button",134),S("click",function(){k(e);let o=h(2);return O(o.closePlayerPopup())}),w(3,"i",131),a(),A(4,LS,2,0,"div",135)(5,qS,12,6,"ng-container",4),a()()}if(n&2){let e=h(2);d(4),x("ngIf",e.playerPopup.loading),d(),x("ngIf",!e.playerPopup.loading)}}function YS(n,t){if(n&1){let e=L();r(0,"img",164),S("error",function(){k(e);let o=h().$implicit;return O(o.profilePictureUrl=void 0)}),a()}if(n&2){let e=h().$implicit,i=h(3);x("src",i.getMentionAvatarUrl(e.profilePictureUrl),Ie)("alt",e.username)}}function XS(n,t){if(n&1&&(r(0,"span",165),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),R(i.getSenderInitials(e.fullname||e.username))}}function ZS(n,t){if(n&1&&(r(0,"span",166),l(1),a()),n&2){let e=h().$implicit;d(),R(e.fullname)}}function QS(n,t){if(n&1){let e=L();r(0,"div",159),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.selectMention(o))}),A(1,YS,1,2,"img",160)(2,XS,2,1,"span",161),r(3,"span",162),l(4),a(),A(5,ZS,2,1,"span",163),a()}if(n&2){let e=t.$implicit,i=h(3);d(),x("ngIf",i.getMentionAvatarUrl(e.profilePictureUrl)),d(),x("ngIf",!i.getMentionAvatarUrl(e.profilePictureUrl)),d(2),R(e.username),d(),x("ngIf",e.fullname)}}function KS(n,t){if(n&1){let e=L();r(0,"div",157),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,QS,6,4,"div",158),a()}if(n&2){let e=h(2);d(),x("ngForOf",e.mentionResults)}}function JS(n,t){if(n&1){let e=L();r(0,"div",17,1),S("scroll",function(o){k(e);let s=h();return O(s.onScroll(o))}),A(2,tS,3,0,"button",18)(3,nS,4,0,"div",19)(4,SS,3,6,"div",20)(5,kS,9,0,"div",21)(6,OS,4,0,"div",22),a(),A(7,ES,2,2,"button",23)(8,DS,3,1,"div",24)(9,RS,8,3,"div",25)(10,NS,5,3,"div",26)(11,VS,10,6,"div",27)(12,$S,6,2,"div",28)(13,KS,2,1,"div",29),r(14,"div",30)(15,"label",31),w(16,"i",32),r(17,"input",33),S("change",function(o){k(e);let s=h();return O(s.onImageSelected(o))}),a()(),r(18,"textarea",34,2),pe("ngModelChange",function(o){k(e);let s=h();return de(s.messageContent,o)||(s.messageContent=o),O(o)}),S("keydown.enter",function(o){k(e);let s=h();return O(s.onEnterKey(o))})("input",function(o){k(e);let s=h();return s.onInputResize(o),s.onTyping(),O(s.onMentionInput(o))}),a(),r(20,"button",35),S("click",function(){k(e);let o=h();return O(o.sendMessage())}),w(21,"i",36),a()()}if(n&2){let e=h();d(2),x("ngIf",e.hasMoreMessages&&!e.isLoadingMore),d(),x("ngIf",e.isLoadingMore),d(),x("ngForOf",e.messages)("ngForTrackBy",e.trackById),d(),x("ngIf",e.isUploading),d(),x("ngIf",e.messages.length===0),d(),x("ngIf",e.showScrollToBottom),d(),x("ngIf",e.typingUsers.size>0),d(),x("ngIf",e.imagePreview),d(),x("ngIf",e.lightboxUrl),d(),x("ngIf",e.replyingTo),d(),x("ngIf",e.playerPopup),d(),x("ngIf",e.mentionDropdownVisible&&e.mentionResults.length>0),d(5),ce("ngModel",e.messageContent),d(2),x("disabled",!e.messageContent.trim())}}var Ia=class n{constructor(t,e,i,o,s,m,f,v,y){this.wsService=t;this.chatService=e;this.authService=i;this.location=o;this.soundService=s;this.ngZone=m;this.sanitizer=f;this.apiService=v;this.router=y;this.currentUser=this.authService.getCurrentUser()}session;onClose;embedded=!1;showBack=!0;messagesContainerRef;messageInputRef;messages=[];messageContent="";currentUser;isMinimized=!1;isLoadingMore=!1;hasMoreMessages=!0;showScrollToBottom=!1;oldestTimestamp=null;PAGE_SIZE=20;reactionPickerMessageId=null;customEmojiInput="";EMOJIS=["\u{1F44D}","\u2764\uFE0F","\u{1F602}","\u{1F62E}","\u{1F622}","\u{1F621}"];pendingDeleteMessageId=null;failedAvatarIds=new Set;typingUsers=new Map;typingTimer=null;selectedImageFile=null;imagePreview=null;isUploading=!1;lightboxUrl=null;lightboxAlt="";playerPopup=null;mentionDropdownVisible=!1;mentionResults=[];mentionedUserIds=[];mentionQuery="";mentionStartIndex=-1;mentionDebounceTimer=null;replyingTo=null;dragStartX=0;dragOffsetX=0;draggedMessageId=null;pendingDragMessageId=null;currentDragEl=null;dragCleanupFns=[];destroy$=new Et;ngOnInit(){!this.currentUser||!this.session||this.initChat()}ngOnChanges(t){t.session&&!t.session.firstChange&&(this.destroy$.next(),this.messages=[],this.typingUsers.clear(),this.initChat())}initChat(){this.loadInitialMessages(),this.connectWebSocket(),this.setupDragListeners()}get sessionName(){let t=new Date(this.session.sessionDate+"T00:00:00").toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"});return`${this.session.sessionType} \xB7 ${t}`}loadInitialMessages(){this.chatService.getMessages(this.session.id,this.PAGE_SIZE).subscribe({next:t=>{this.messages=t,this.hasMoreMessages=t.length>=this.PAGE_SIZE,this.oldestTimestamp=t.length>0?t[0].timestamp:null,setTimeout(()=>this.jumpToBottom(),100)},error:t=>console.error("Error loading session messages:",t)})}loadMoreMessages(){if(this.isLoadingMore||!this.hasMoreMessages||!this.oldestTimestamp)return;this.isLoadingMore=!0;let t=this.messagesContainerRef?.nativeElement,e=t?t.scrollHeight:0;this.chatService.getMessages(this.session.id,this.PAGE_SIZE,this.oldestTimestamp).subscribe({next:i=>{i.length===0?this.hasMoreMessages=!1:(this.messages=[...i,...this.messages],this.oldestTimestamp=i[0].timestamp,this.hasMoreMessages=i.length>=this.PAGE_SIZE,requestAnimationFrame(()=>{t&&(t.scrollTop=t.scrollHeight-e)})),this.isLoadingMore=!1},error:i=>{console.error(i),this.isLoadingMore=!1}})}connectWebSocket(){this.wsService.connect(this.session.id),this.wsService.getConnectionStatus().pipe(bt(this.destroy$)).subscribe(t=>{}),this.wsService.watchMessages().pipe(bt(this.destroy$)).subscribe(t=>
68{if(!this.messages.some(e=>e.id===t.id)){this.messages.push(t),t.senderId!==this.currentUser?.id&&this.soundService.playReceive();let e=this.messagesContainerRef?.nativeElement;!e||e.scrollHeight-e.scrollTop-e.clientHeight<200?setTimeout(()=>this.scrollToBottom(),100):this.showScrollToBottom=!0}}),this.wsService.watchDeletedMessages().pipe(bt(this.destroy$)).subscribe(t=>{let e=this.messages.find(i=>i.id===t.id);e&&(e.isDeleted=!0)}),this.wsService.watchMessageUpdates().pipe(bt(this.destroy$)).subscribe(t=>{let e=this.messages.findIndex(i=>i.id===t.id);e!==-1&&(this.messages[e]=Ye(ze({},this.messages[e]),{reactions:t.reactions}))}),this.wsService.watchTypingEvents().pipe(bt(this.destroy$)).subscribe(t=>{t.userId!==this.currentUser?.id&&(t.isTyping?this.typingUsers.set(t.userId,t.userName):this.typingUsers.delete(t.userId))})}onTyping(){this.wsService.sendTyping(!0),clearTimeout(this.typingTimer),this.typingTimer=setTimeout(()=>this.wsService.sendTyping(!1),1500)}onEnterKey(t){t.shiftKey||(t.preventDefault(),this.sendMessage())}onInputResize(t){let e=t.target;e.style.overflowY="auto",e.style.height="auto";let i=120,o=e.scrollHeight;e.style.height=Math.min(o,i)+"px",e.style.overflowY=o>i?"auto":"hidden"}sendMessage(){if(this.messageContent.trim()&&(clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.wsService.sendTyping(!1),this.wsService.sendMessage(this.messageContent,this.replyingTo?.id,this.mentionedUserIds.length>0?[...this.mentionedUserIds]:void 0),this.soundService.playSend(),this.messageContent="",this.replyingTo=null,this.mentionedUserIds=[],this.mentionDropdownVisible=!1,this.messageInputRef)){let t=this.messageInputRef.nativeElement;t.style.height="auto",t.style.overflowY="hidden"}}get typingUsersArray(){return Array.from(this.typingUsers.entries()).map(([t,e])=>({userId:t,name:e}))}getTypingUserAvatar(t){return this.messages.find(e=>e.senderId===t)?.senderAvatarFileId}requestDelete(t,e){e.stopPropagation(),this.pendingDeleteMessageId=t,this.reactionPickerMessageId=null}cancelDelete(){this.pendingDeleteMessageId=null}confirmDelete(){let t=this.pendingDeleteMessageId;t&&(this.pendingDeleteMessageId=null,this.chatService.deleteMessage(this.session.id,t).subscribe({next:()=>{let e=this.messages.find(i=>i.id===t);e&&(e.isDeleted=!0)},error:e=>console.error(e)}))}onDocumentClick(){this.reactionPickerMessageId=null,this.pendingDeleteMessageId=null,this.mentionDropdownVisible=!1}onEscKey(){this.closeLightbox()}openLightbox(t,e,i){i.stopPropagation(),this.lightboxUrl=t,this.lightboxAlt=e}closeLightbox(){this.lightboxUrl=null,this.lightboxAlt=""}openPlayerPopup(t,e){e.stopPropagation(),t.senderId!==this.currentUser?.id&&(this.playerPopup={userId:t.senderId,name:t.senderName,avatarFileId:t.senderAvatarFileId,data:null,loading:!0},this.apiService.getUserProfile(t.senderId).subscribe({next:i=>{this.playerPopup&&(this.playerPopup.data=i,this.playerPopup.loading=!1)},error:()=>{this.playerPopup&&(this.playerPopup.loading=!1)}}))}closePlayerPopup(){this.playerPopup=null}goToDirectMessage(){if(!this.playerPopup)return;let t=this.playerPopup.userId;this.playerPopup=null,this.router.navigate(["/group-chat"],{queryParams:{dm:t}})}toggleReactionPicker(t,e){e.stopPropagation(),this.reactionPickerMessageId=this.reactionPickerMessageId===t?null:t,this.customEmojiInput=""}reactToMessage(t,e,i){i.stopPropagation();let o=e.trim();o&&(this.reactionPickerMessageId=null,this.customEmojiInput="",this.chatService.reactToMessage(this.session.id,t,o).subscribe({error:s=>console.error("React error:",s)}))}sendCustomEmoji(t,e){e.stopPropagation();let i=this.customEmojiInput.trim();i&&this.reactToMessage(t,i,e)}getReactionEntries(t){return t.reactions?Object.entries(t.reactions).filter(([,e])=>Object.keys(e).length>0).map(([e,i])=>({emoji:e,count:Object.keys(i).length,reacted:!!(this.currentUser?.id&&i[this.currentUser.id]!==void 0),tooltip:Object.values(i).join(", ")})):[]}onImageSelected(t){let e=t.target;if(!e.files?.length)return;let i=e.files[0];if(!i.type.startsWith("image/"))return;this.selectedImageFile=i;let o=new FileReader;o.onload=s=>{this.imagePreview=s.target?.result},o.readAsDataURL(i),e.value=""}clearImage(){this.selectedImageFile=null,this.imagePreview=null}sendImageMessage(){if(!this.selectedImageFile||this.isUploading)return;this.isUploading=!0;let t=this.selectedImageFile;this.clearImage(),setTimeout(()=>this.jumpToBottom(),50),this.chatService.sendImageMessage(this.session.id,t).subscribe({next:()=>{this.isUploading=!1,this.soundService.playSend(),setTimeout(()=>this.jumpToBottom(),50)},error:e=>{console.error(e),this.isUploading=!1}})}onMentionInput(t){let e=t.target,i=e.value,o=e.selectionStart??i.length,s=i.substring(0,o),m=s.match(/@(\w*)$/);m?(this.mentionQuery=m[1],this.mentionStartIndex=s.lastIndexOf("@"),clearTimeout(this.mentionDebounceTimer),this.mentionQuery.length>=2?this.mentionDebounceTimer=setTimeout(()=>this.fetchMentionResults(this.mentionQuery),300):this.mentionDropdownVisible=!1):(this.mentionDropdownVisible=!1,this.mentionResults=[])}fetchMentionResults(t){this.chatService.searchUsers(t,8).subscribe({next:e=>{this.mentionResults=e,this.mentionDropdownVisible=e.length>0},error:()=>{}})}selectMention(t){let e=this.messageInputRef?.nativeElement;if(!e)return;let i=this.messageContent.substring(0,this.mentionStartIndex),o=this.messageContent.substring(e.selectionStart??this.messageContent.length),s=`@${t.nickname||t.username} `;this.messageContent=i+s+o,this.mentionedUserIds.includes(t.id)||this.mentionedUserIds.push(t.id),this.mentionDropdownVisible=!1,this.mentionResults=[],setTimeout(()=>{e.focus();let m=(i+s).length;e.setSelectionRange(m,m)})}highlightMentions(t){let i=t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/@(\w+)/g,'<span class="mention">@$1</span>');return this.sanitizer.bypassSecurityTrustHtml(i)}getMentionAvatarUrl(t){if(t)return t.startsWith("/api/")?`${Be.apiBase.replace("/api","")}${t}`:`${Be.apiBase}/drive/profile-picture/${t}`}setupDragListeners(){this.dragCleanupFns.forEach(t=>t()),this.dragCleanupFns=[],this.ngZone.runOutsideAngular(()=>
68{let t=o=>{if(!o.isPrimary)return;let s=o.target.closest(".message-wrapper[data-message-id]");s&&(this.dragStartX=o.clientX,this.pendingDragMessageId=s.getAttribute("data-message-id"),this.currentDragEl=s)},e=o=>{o.isPrimary&&(this.pendingDragMessageId&&Math.abs(o.clientX-this.dragStartX)>10&&(this.draggedMessageId=this.pendingDragMessageId,this.pendingDragMessageId=null,this.currentDragEl&&(this.currentDragEl.style.willChange="transform",this.currentDragEl.style.transition="none")),!(!this.draggedMessageId||!this.currentDragEl)&&(o.preventDefault(),this.dragOffsetX=Math.max(0,Math.min(o.clientX-this.dragStartX,80)),this.currentDragEl.style.transform=`translateX(${this.dragOffsetX}px)`))},i=o=>{if(o.isPrimary){if(this.pendingDragMessageId=null,this.currentDragEl){this.currentDragEl.style.transition="transform 0.15s ease",this.currentDragEl.style.transform="";let s=this.currentDragEl;setTimeout(()=>{s.style.willChange=""},160)}if(this.draggedMessageId&&this.dragOffsetX>60){let s=this.draggedMessageId;this.ngZone.run(()=>{let m=this.messages.find(f=>f.id===s);m&&!m.isDeleted&&(this.replyingTo=m)})}this.draggedMessageId=null,this.dragOffsetX=0,this.currentDragEl=null}};document.addEventListener("pointerdown",t,{passive:!0}),document.addEventListener("pointermove",e,{passive:!1}),document.addEventListener("pointerup",i,{passive:!0}),document.addEventListener("pointercancel",i,{passive:!0}),this.dragCleanupFns=[()=>document.removeEventListener("pointerdown",t),()=>document.removeEventListener("pointermove",e),()=>document.removeEventListener("pointerup",i),()=>document.removeEventListener("pointercancel",i)]})}cancelReply(){this.replyingTo=null}trackById(t,e){return e.id}isMyMessage(t){return t.senderId===this.currentUser?.id}getProfilePictureUrl(t){return t?`${Be.apiBase}/drive/profile-picture/${t}`:void 0}getAttachmentImageUrl(t){return`${Be.apiBase}/drive/profile-picture/${t}`}onAvatarError(t){this.failedAvatarIds.add(t)}showAvatar(t){return!!t&&!this.failedAvatarIds.has(t)}getSenderInitials(t){if(!t)return"?";let e=t.trim().split(/\s+/);return e.length===1?e[0].charAt(0).toUpperCase():(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase()}formatTimestamp(t){let e=new Date(t),i=Date.now()-e.getTime(),o=Math.floor(i/1e3),s=Math.floor(o/60),m=Math.floor(s/60),f=Math.floor(m/24);return o<30?"Just now":s<1?`${o}s ago`:s<60?`${s}m ago`:m<24?`${m}h ago`:f<7?f===1?"Yesterday":`${f}d ago`:e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}jumpToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTop=t.scrollHeight,this.showScrollToBottom=!1)}scrollToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTo({top:t.scrollHeight,behavior:"smooth"}),this.showScrollToBottom=!1)}onScroll(t){let e=t.target;e.scrollTop<100&&this.loadMoreMessages(),this.showScrollToBottom=e.scrollHeight-e.scrollTop-e.clientHeight>200}toggleMinimize(){this.isMinimized=!this.isMinimized,this.isMinimized||setTimeout(()=>this.jumpToBottom(),50)}close(){this.onClose&&this.onClose()}goBack(){this.location.back()}ngOnDestroy(){clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.wsService.sendTyping(!1),this.wsService.disconnect(),this.dragCleanupFns.forEach(t=>t()),this.dragCleanupFns=[],this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(e){return new(e||n)(ae(Dc),ae(Ta),ae(je),ae($l),ae(Jo),ae(Nn),ae(fi),ae(it),ae(nt))};static \u0275cmp=We({type:n,selectors:[["app-session-chat"]],viewQuery:function(e,i){if(e&1&&(oi($3,5),oi(Y3,5)),e&2){let o;ri(o=ai())&&(i.messagesContainerRef=o.first),ri(o=ai())&&(i.messageInputRef=o.first)}},hostBindings:function(e,i){e&1&&S("click",function(){return i.onDocumentClick()},!1,mo)("keydown.escape",function(){return i.onEscKey()},!1,mo)},inputs:{session:"session",onClose:"onClose",embedded:"embedded",showBack:"showBack"},features:[ma],decls:4,vars:2,consts:[["chatBody",""],["messagesContainer",""],["messageInputEl",""],["class","chat-container",3,"minimized",4,"ngIf"],[4,"ngIf"],[1,"chat-container"],[1,"chat-header",3,"click"],["class","back-btn","title","Go back",3,"click",4,"ngIf"],[1,"header-title"],[1,"bi","bi-chat-dots"],[1,"header-right"],[1,"minimize-btn",3,"click","title"],["title","Close",1,"close-chat-btn",3,"click"],[1,"bi","bi-x-lg"],["t
68itle","Go back",1,"back-btn",3,"click"],[1,"bi","bi-arrow-left"],[4,"ngTemplateOutlet"],[1,"messages-container",3,"scroll"],["class","load-more-btn",3,"click",4,"ngIf"],["class","loading-indicator",4,"ngIf"],["class","message-wrapper",3,"my-message",4,"ngFor","ngForOf","ngForTrackBy"],["class","message-wrapper my-message",4,"ngIf"],["class","empty-state",4,"ngIf"],["class","scroll-to-bottom-btn","title","Scroll to bottom",3,"bottom","click",4,"ngIf"],["class","typing-indicator-wrapper",4,"ngIf"],["class","image-preview-bar",4,"ngIf"],["class","lightbox-overlay",3,"click",4,"ngIf"],["class","reply-bar",4,"ngIf"],["class","player-popup-overlay",3,"click",4,"ngIf"],["class","mention-dropdown",3,"click",4,"ngIf"],[1,"chat-input-container"],["title","Send image",1,"attach-btn"],[1,"bi","bi-image"],["type","file","accept","image/*",2,"display","none",3,"change"],["placeholder","Type a message\u2026","rows","1",1,"message-input",3,"ngModelChange","keydown.enter","input","ngModel"],[1,"send-btn",3,"click","disabled"],[1,"bi","bi-send-fill"],[1,"load-more-btn",3,"click"],[1,"bi","bi-arrow-up-circle"],[1,"loading-indicator"],[1,"spinner"],[1,"loading-text"],[1,"message-wrapper"],["class","message-row",4,"ngIf"],[1,"message-row"],["class","avatar clickable-avatar","title","View profile",3,"src","alt","error","click",4,"ngIf"],["class","avatar-placeholder clickable-avatar","title","View profile",3,"click",4,"ngIf"],[1,"message-content"],[1,"sender-name","clickable-name",3,"click"],["class","message-unsent",4,"ngIf"],[1,"message-time"],["title","View profile",1,"avatar","clickable-avatar",3,"error","click","src","alt"],["t
68itle","View profile",1,"avatar-placeholder","clickable-avatar",3,"click"],[1,"message-unsent"],[1,"bi","bi-slash-circle"],[1,"message-bubble-wrapper"],["class","message-bubble",4,"ngIf"],["class","message-bubble image-bubble",4,"ngIf"],["title","React",1,"react-btn",3,"click"],[1,"bi","bi-emoji-smile"],["class","emoji-picker",3,"click",4,"ngIf"],["class","reactions-bar",4,"ngIf"],[1,"message-bubble"],["class","reply-preview",4,"ngIf"],[3,"innerHTML"],[1,"reply-preview"],[1,"reply-sender"],[1,"reply-content"],[1,"message-bubble","image-bubble"],["alt","Image","title","Click to view full size",1,"chat-image","clickable-image",3,"click","src"],[1,"emoji-picker",3,"click"],["class","emoji-btn",3,"click",4,"ngFor","ngForOf"],["placeholder","\u270F\uFE0F","title","Type any emoji",1,"custom-emoji-input",3,"ngModelChange","keyup.enter","ngModel"],[1,"emoji-btn",3,"click"],[1,"reactions-bar"],["class","reaction-pill",3,"reacted","click",4,"ngFor","ngForOf"],[1,"reaction-pill",3,"click"],["class","message-unsent message-unsent-mine",4,"ngIf"],[1,"message-time",2,"text-align","right"],[1,"message-unsent","message-unsent-mine"],[1,"message-bubble-wrapper","my-bubble-wrapper"],["class","message-bubble my-bubble",4,"ngIf"],["class","message-bubble image-bubble my-bubble",4,"ngIf"],["title","Delete",1,"delete-btn",3,"click"],[1,"bi","bi-trash3"],["class","delete-confirm",3,"click",4,"ngIf"],["class","emoji-picker emoji-picker-right",3,"click",4,"ngIf"],["class","reactions-bar reactions-bar-right",4,"ngIf"],[1,"message-bubble","my-bubble"],["class","reply-preview reply-preview-mine",4,"ngIf"],[1,"reply-preview","reply-preview-mine"],[1,"message-bubble","image-bubble","my-bubble"],[1,"delete-confirm",3,"click"],[1,"delete-confirm-yes",3,"click"],[1,"delete-confirm-no",3,"click"],[1,"emoji-picker","emoji-picker-right",3,"click"],[1,"reactions-bar","reactions-bar-right"],[1,"message-wrapper","my-message"],[1,"message-bubble","my-bubble","uploading-bubble"],[1,"uploading-spinner"],[1,"empty-state"],[1,"bi","bi-chat-text"],["title","Scroll to bottom",1,"scroll-to-bottom-btn",3,"click"],[1,"bi","bi-chevron-double-down"],[1,"typing-indicator-wrapper"],[1,"typing-users-list"],["class","typing-user-chip",4,"ngFor","ngForOf"],[1,"typing-user-chip"],["class","typing-avatar",3,"src","alt","error",4,"ngIf"],["class","typing-avatar-placeholder",4,"ngIf"],[1,"typing-bubble"],[1,"typing-dots"],[1,"typing-name"],[1,"typing-avatar",3,"error","src","alt"],[1,"typing-avatar-placeholder"],[1,"image-preview-bar"],["alt","Preview",1,"image-preview-thumb",3,"src"],[1,"image-preview-actions"],[1,"preview-cancel-btn",3,"click"],[1,"preview-send-btn",3,"click","disabled"],[1,"lightbox-overlay",3,"click"],["title","Close (Esc)",1,"lightbox-close",3,"click"],[1,"lightbox-img",3,"click","src","alt"],["class","lightbox-caption",4,"ngIf"],[1,"lightbox-caption"],[1,"reply-bar"],[1,"reply-bar-content"],[1,"bi","bi-reply-fill"],[1,"reply-bar-sender"],[1,"reply-bar-text"],["title","Cancel reply",1,"reply-bar-close",3,"click"],[1,"bi","bi-x"],[1,"player-popup-overlay",3,"click"],[1,"player-popup-card",3,"click"],[1,"player-popup-close",3,"click"],["class","player-popup-loading",4,"ngIf"],[1,"player-popup-loading"],[1,"loading-spinner-sm"],[1,"player-popup-avatar-wrap"],["class","player-popup-avatar",3,"src","alt","error",4,"ngIf"],["class","player-popup-avatar-placeholder",4,"ngIf"],[1,"player-popup-name"],["class","player-popup-username",4,"ngIf"],["class","player-popup-badge-row",4,"ngIf"],["class","player-popup-stats",4,"ngIf"],[1,"player-popup-dm-btn",3,"click"],[1,"bi","bi-chat-dots-fill"],[1,"player-popup-avatar",3,"error","src","alt"],[1,"player-popup-avatar-placeholder"],[1,"player-popup-username"],[1,"player-popup-badge-row"],[1,"player-popup-role-badge"],[1,"player-popup-stats"],["class","player-popup-stat",4,"ngIf"],[1,"player-popup-stat"],[1,"stat-label"],[1,"stat-value"],[1,"mention-dropdown",3,"click"],["class","mention-item",3,"click",4,"ngFor","ngForOf"],[1,"mention-item",3,"click"],["class","mention-avatar",3,"src","alt","error",4,"ngIf"],["class","mention-initials",4,"ngIf"],[1,"mention-name"],["class","mention-fullname",4,"ngIf"],[1,"mention-avatar",3,"error","src","alt"],[1,"mention-initials"],[1,"mention-fullname"]],template:function(e,i){e&1&&A(0,K3,13,10,"div",3)(1,eS,2,1,"ng-container",4)(2,JS,22,15,"ng-template",null,0,ln),e&2&&(x("ngIf",!i.embedded),d(),x("ngIf",i.embedded))},dependencies:[Ge,rt,$e,ua,Go,lt,at,st,ut],styles:[".chat-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;position:fixed;bottom:20px;right:460px;width:400px;height:580px;background:var(--color-background);border-radius:12px;overflow:hidden;box-shadow:var(--shadow-lg);z-index:999}.chat-container.minimized[_ngcontent-%COMP%]{height:auto;border-radius:12px}.chat-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;background:var(--color-surface);border-bottom:1px solid var(--color-border);-webkit-user-select:none;user-select:none;flex-shrink:0}.chat-header-clickable[_ngcontent-%COMP%]{cursor:pointer;border-radius:12px}.chat-header-clickable[_ngcontent-%COMP%]:hover{background:var(--color-border)}.header-title[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;gap:8px;font-size:.88rem;font-weight:600;color:var(--color-text);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.header-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex-shrink:0}.minimize-btn[_ngcontent-%COMP%], .close-chat-btn[_ngcontent-%COMP%], .back-btn[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.82rem;transition:background .15s,color .15s;flex-shrink:0}.minimize-btn[_ngcontent-%COMP%]:hover, .close-chat-btn[_ngcontent-%COMP%]:hover, .back-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}
68.close-chat-btn[_ngcontent-%COMP%]:hover{color:var(--color-danger, #e74c3c)}.back-btn[_ngcontent-%COMP%]{display:none}.messages-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:var(--color-background)}.load-more-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:6px;align-self:center;padding:5px 16px;border:1px solid var(--color-border);border-radius:20px;background:var(--color-surface);color:var(--color-text-secondary);font-size:.78rem;cursor:pointer;transition:background .2s,border-color .2s;margin-bottom:4px}.load-more-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);border-color:var(--color-accent)}.loading-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px;animation:_ngcontent-%COMP%_slide-down .3s ease-out}.loading-text[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)}@keyframes _ngcontent-%COMP%_slide-down{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}.spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;width:18px;height:18px;animation:_ngcontent-%COMP%_spin .8s linear infinite;flex-shrink:0}.message-row[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:flex-end;max-width:75%}.message-wrapper.my-message[_ngcontent-%COMP%] .message-row[_ngcontent-%COMP%]{margin-left:auto;flex-direction:row-reverse}.avatar[_ngcontent-%COMP%], .avatar-placeholder[_ngcontent-%COMP%]{width:34px;height:34px;border-radius:50%;flex-shrink:0}.avatar[_ngcontent-%COMP%]{object-fit:cover}.avatar-placeholder[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.78rem;text-transform:uppercase}.message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px;min-width:0}.sender-name[_ngcontent-%COMP%]{font-size:.72rem;font-weight:600;color:var(--color-text-secondary);padding-left:10px}
68.clickable-name[_ngcontent-%COMP%]{cursor:pointer}.clickable-name[_ngcontent-%COMP%]:hover{color:var(--color-accent);text-decoration:underline}.message-bubble-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;position:relative}.my-bubble-wrapper[_ngcontent-%COMP%]{flex-direction:row-reverse}.message-bubble[_ngcontent-%COMP%]{background:var(--color-surface);padding:9px 12px;border-radius:16px;word-wrap:break-word;word-break:break-word;color:var(--color-text);box-shadow:var(--shadow-sm);max-width:100%;font-size:.9rem}.my-bubble[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.image-bubble[_ngcontent-%COMP%]{padding:4px;background:transparent;box-shadow:none}.my-bubble.image-bubble[_ngcontent-%COMP%]{background:transparent}.chat-image[_ngcontent-%COMP%]{max-width:220px;max-height:260px;border-radius:12px;display:block;object-fit:cover}.uploading-bubble[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;animation:_ngcontent-%COMP%_ghost-pulse 1.4s ease-in-out infinite;opacity:.8}@keyframes _ngcontent-%COMP%_ghost-pulse{0%,to{opacity:.5}50%{opacity:.9}}.uploading-spinner[_ngcontent-%COMP%]{display:inline-block;width:12px;height:12px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:_ngcontent-%COMP%_spin .75s linear infinite;flex-shrink:0}.react-btn[_ngcontent-%COMP%], .delete-btn[_ngcontent-%COMP%]{flex-shrink:0;width:26px;height:26px;border-radius:50%;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.8rem;opacity:0;transition:opacity .15s,background .15s}.react-btn[_ngcontent-%COMP%]{border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary)}.delete-btn[_ngcontent-%COMP%]{background:transparent;color:#fff9}.message-row[_ngcontent-%COMP%]:hover .react-btn[_ngcontent-%COMP%], .message-row[_ngcontent-%COMP%]:hover .delete-btn[_ngcontent-%COMP%]{opacity:1}.react-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.delete-btn[_ngcontent-%COMP%]:hover{color:#ff6b6b}.message-unsent[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:.8rem;font-style:italic;color:var(--color-text-muted);border:1px dashed var(--color-border);border-radius:12px;padding:5px 10px}.message-unsent-mine[_ngcontent-%COMP%]{margin-left:auto}.delete-confirm[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:5px 8px;font-size:.78rem;color:var(--color-text);box-shadow:var(--shadow-md);margin-left:auto;width:fit-content}.delete-confirm-yes[_ngcontent-%COMP%]{padding:2px 8px;border-radius:6px;border:none;background:var(--color-danger, #e74c3c);color:#fff;font-size:.75rem;font-weight:600;cursor:pointer}.delete-confirm-no[_ngcontent-%COMP%]{padding:2px 8px;border-radius:6px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:.75rem;cursor:pointer}.emoji-picker[_ngcontent-%COMP%]{display:flex;gap:4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:22px;padding:5px 8px;box-shadow:var(--shadow-md);width:fit-content}.emoji-picker-right[_ngcontent-%COMP%]{margin-left:auto}.emoji-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.15rem;cursor:pointer;padding:2px 3px;border-radius:6px;transition:transform .1s;line-height:1}.emoji-btn[_ngcontent-%COMP%]:hover{transform:scale(1.3);background:var(--color-border)}.custom-emoji-input[_ngcontent-%COMP%]{width:32px;height:26px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-background);color:var(--color-text);font-size:1rem;text-align:center;outline:none;padding:0 2px}.custom-emoji-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);width:48px}.reactions-bar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:3px;padding-left:4px}.reactions-bar-right[_ngcontent-%COMP%]{justify-content:flex-end;padding-left:0;padding-right:4px}.reaction-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:1px 7px;font-size:.78rem;cursor:pointer;transition:background .15s;-webkit-user-select:none;user-select:none;position:relative}.reaction-pill[_ngcontent-%COMP%]:hover{background:var(--color-border)}.reaction-pill.reacted[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);border-color:var(--color-accent);color:var(--color-accent)}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:before{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:#000000d1;color:#fff;font-size:.68rem;padding:3px 7px;border-radius:5px;white-space:nowrap;
68max-width:200px;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none;transition:opacity .15s;z-index:200}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:hover:before{opacity:1}.message-time[_ngcontent-%COMP%]{font-size:.68rem;color:var(--color-text-muted);padding:0 10px}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:40px 20px;color:var(--color-text-secondary)}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:3rem;opacity:.3;margin-bottom:12px;display:block}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.9rem}.typing-indicator-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;padding:5px 14px;background:var(--color-background);border-top:1px solid var(--color-border);min-height:40px;animation:_ngcontent-%COMP%_slide-down .2s ease-out;flex-shrink:0}.typing-users-list[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.typing-user-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px}.typing-avatar[_ngcontent-%COMP%]{width:22px;height:22px;border-radius:50%;object-fit:cover;flex-shrink:0}.typing-avatar-placeholder[_ngcontent-%COMP%]{width:22px;height:22px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.58rem;font-weight:600;flex-shrink:0;text-transform:uppercase}.typing-bubble[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:var(--color-surface);border-radius:10px;padding:4px 7px;box-shadow:var(--shadow-sm)}.typing-dots[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--color-text-muted);animation:_ngcontent-%COMP%_typing-bounce 1.2s ease-in-out infinite}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_typing-bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}
68.typing-name[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-secondary);white-space:nowrap}.image-preview-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:8px 14px;background:var(--color-surface);border-top:1px solid var(--color-border);flex-shrink:0}.image-preview-thumb[_ngcontent-%COMP%]{height:54px;width:54px;object-fit:cover;border-radius:8px;flex-shrink:0}.image-preview-actions[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center}.preview-cancel-btn[_ngcontent-%COMP%]{padding:5px 10px;border-radius:16px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);cursor:pointer;font-size:.82rem;display:flex;align-items:center;gap:5px;transition:background .2s}.preview-cancel-btn[_ngcontent-%COMP%]:hover{background:var(--color-border)}.preview-send-btn[_ngcontent-%COMP%]{padding:5px 14px;border-radius:16px;border:none;background:var(--color-accent);color:#fff;cursor:pointer;font-size:.82rem;font-weight:600;display:flex;align-items:center;gap:5px;transition:background .2s}.preview-send-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark)}.preview-send-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.chat-input-container[_ngcontent-%COMP%]{display:flex;align-items:flex-end;gap:8px;padding:12px 14px;background:var(--color-surface);border-top:1px solid var(--color-border);flex-shrink:0}.attach-btn[_ngcontent-%COMP%]{flex-shrink:0;width:36px;height:36px;border-radius:50%;background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1rem;transition:background .2s,color .2s}.attach-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.message-input[_ngcontent-%COMP%]{flex:1;padding:8px 14px;border:1px solid var(--color-border);border-radius:20px;background:var(--color-background);color:var(--color-text);font-size:.9rem;outline:none;transition:border-color .2s;resize:none;overflow-y:hidden;box-sizing:border-box;min-height:36px;max-height:120px;line-height:1.4;font-family:inherit}.message-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted);opacity:1}.message-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.send-btn[_ngcontent-%COMP%]{flex-shrink:0;width:38px;height:38px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.send-btn[_ngcontent-%COMP%]:hover:not(:disabled){transform:scale(1.1);background:var(--color-accent-dark)}.send-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.scroll-to-bottom-btn[_ngcontent-%COMP%]{position:absolute;right:18px;width:36px;height:36px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1rem;box-shadow:var(--shadow-md);z-index:10;transition:background .2s,transform .2s;animation:_ngcontent-%COMP%_fade-in .15s ease}.scroll-to-bottom-btn[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);transform:scale(1.1)}@keyframes _ngcontent-%COMP%_fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@media (max-width: 768px){.chat-container[_ngcontent-%COMP%]{right:0;bottom:0;width:100%;height:100dvh;border-radius:0}.back-btn[_ngcontent-%COMP%]{display:flex}.message-row[_ngcontent-%COMP%]{max-width:90%}.react-btn[_ngcontent-%COMP%], .delete-btn[_ngcontent-%COMP%]{opacity:1}}.lightbox-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:9999;background:#000000e0;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:_ngcontent-%COMP%_lightbox-fade-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-fade-in{0%{opacity:0}to{opacity:1}}.lightbox-img[_ngcontent-%COMP%]{max-width:95vw;max-height:90vh;object-fit:contain;border-radius:6px;box-shadow:0 8px 40px #0009;image-rendering:high-quality;animation:_ngcontent-%COMP%_lightbox-zoom-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-zoom-in{0%{transform:scale(.92);opacity:0}
68to{transform:scale(1);opacity:1}}.lightbox-caption[_ngcontent-%COMP%]{margin-top:12px;color:#ffffffd9;font-size:.9rem;text-align:center;max-width:80vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lightbox-close[_ngcontent-%COMP%]{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1rem;cursor:pointer;transition:background .15s;z-index:10000}.lightbox-close[_ngcontent-%COMP%]:hover{background:#ffffff4d}.clickable-avatar[_ngcontent-%COMP%], .clickable-image[_ngcontent-%COMP%]{cursor:zoom-in}.message-wrapper[_ngcontent-%COMP%]{width:100%;touch-action:pan-y}.messages-container[_ngcontent-%COMP%]{scrollbar-width:none}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.reply-preview[_ngcontent-%COMP%]{border-left:3px solid var(--color-accent);padding:4px 8px;margin-bottom:6px;border-radius:4px;background:var(--color-accent-bg-subtle);font-size:12px}.reply-preview-mine[_ngcontent-%COMP%]{background:#ffffff26;border-left-color:#ffffffb3}.reply-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);display:block}.reply-preview-mine[_ngcontent-%COMP%] .reply-sender[_ngcontent-%COMP%]{color:#ffffffe6}.reply-content[_ngcontent-%COMP%]{color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;max-width:240px}.reply-preview-mine[_ngcontent-%COMP%] .reply-content[_ngcontent-%COMP%]{color:#ffffffbf}.reply-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--color-accent-bg-subtle);border-left:3px solid var(--color-accent);border-top:1px solid var(--color-border);font-size:13px}.reply-bar-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;min-width:0;flex:1;color:var(--color-text-secondary)}.reply-bar-content[_ngcontent-%COMP%] .bi-reply-fill[_ngcontent-%COMP%]{color:var(--color-accent);flex-shrink:0}.reply-bar-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);flex-shrink:0}.reply-bar-text[_ngcontent-%COMP%]{color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reply-bar-close[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;color:var(--color-text-muted);font-size:1rem;padding:2px 4px;flex-shrink:0;transition:color .15s}.reply-bar-close[_ngcontent-%COMP%]:hover{color:var(--color-text)}.mention-dropdown[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-bottom:none;border-radius:10px 10px 0 0;box-shadow:var(--shadow-md);max-height:200px;overflow-y:auto}.mention-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;transition:background .15s}.mention-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.mention-avatar[_ngcontent-%COMP%], .mention-initials[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;flex-shrink:0}.mention-avatar[_ngcontent-%COMP%]{object-fit:cover}.mention-initials[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:var(--color-accent);color:#fff;font-size:11px;font-weight:600}.mention-name[_ngcontent-%COMP%]{font-weight:600;font-size:.875rem;color:var(--color-text)}.mention-fullname[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)} .mention{color:#1d6ef5;font-weight:600}.player-popup-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000073;z-index:9999;display:flex;align-items:center;justify-content:center;padding:1rem}.player-popup-card[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:16px;padding:1.5rem 1.25rem 1.25rem;width:100%;max-width:280px;box-shadow:var(--shadow-lg);position:relative;text-align:center}.player-popup-close[_ngcontent-%COMP%]{position:absolute;top:10px;right:10px;background:none;border:none;color:var(--color-text-muted);cursor:pointer;font-size:1.1rem;line-height:1;padding:4px 6px;border-radius:6px}.player-popup-close[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);color:var(--color-text)}.player-popup-avatar-wrap[_ngcontent-%COMP%]{width:72px;height:72px;border-radius:50%;overflow:hidden;margin:0 auto .75rem}
68.player-popup-avatar[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover}.player-popup-avatar-placeholder[_ngcontent-%COMP%]{width:72px;height:72px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:700;margin:0 auto .75rem}.player-popup-name[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text);margin-bottom:.2rem}.player-popup-username[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);margin-bottom:.5rem}.player-popup-badge-row[_ngcontent-%COMP%]{margin-bottom:.5rem}.player-popup-role-badge[_ngcontent-%COMP%]{display:inline-block;font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:20px;background:var(--color-accent-bg-subtle);color:var(--color-accent);text-transform:uppercase;letter-spacing:.5px}.player-popup-stats[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:1.5rem;padding:.6rem 1rem;background:var(--color-surface);border-radius:10px;margin:.5rem 0 .75rem}.player-popup-stat[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:2px}.player-popup-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%]{font-size:.68rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.player-popup-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text)}.player-popup-dm-btn[_ngcontent-%COMP%]{width:100%;padding:.55rem 1rem;background:var(--color-accent);color:#fff;border:none;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.45rem;margin-top:.5rem;transition:opacity .15s}.player-popup-dm-btn[_ngcontent-%COMP%]:hover{opacity:.85}.player-popup-loading[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:100px}.loading-spinner-sm[_ngcontent-%COMP%]{width:26px;height:26px;border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"],data:{animation:[Tr("messageEnter",[Ar(":enter",[Gi({opacity:0,transform:"translateY(20px)"}),Ir("200ms ease-out",Gi({opacity:1,transform:"translateY(0)"}))])])]}})};var O_=Ri(S_());var Va=class n{constructor(t){this.apiService=t}sessionsSubject=new fn([]);sessions$=this.sessionsSubject.asObservable();myBookingsSubject=new fn([]);myBookings$=this.myBookingsSubject.asObservable();loadSessions(t,e){return this.apiService.getOpenPlaySessions(t,e).pipe(kr(i=>this.sessionsSubject.next(i)))}getSessionById(t){return this.apiService.getOpenPlaySessionById(t)}createBooking(t,e,i,o,s,m){return this.apiService.createOpenPlayBooking({sessionId:t,numberOfPlayers:e,playerNames:i,playerUserIds:o??null,discountTypeId:s||null,useCredits:m??!1}).pipe(kr(()=>this.refreshMyBookings()))}uploadReceipt(t,e){let i=new FormData;return e.forEach(o=>i.append("files",o)),this.apiService.uploadOpenPlayReceipt(t,i).pipe(kr(()=>this.refreshMyBookings()))}replaceReceipt(t,e){let i=new FormData;return e.forEach(o=>i.append("files",o)),this.apiService.replaceOpenPlayReceipt(t,i).pipe(kr(()=>this.refreshMyBookings()))}cancelBooking(t,e,i,o){return this.apiService.cancelOpenPlayBooking(t,e,i,o).pipe(kr(()=>this.refreshMyBookings()))}getMyRefunds(){return this.apiService.getMyRefunds()}loadMyBookings(){return this.apiService.getMyOpenPlayBookings().pipe(kr(t=>this.myBookingsSubject.next(t)))}loadMyBookingsPaginated(t=0,e=10,i="all"){return this.apiService.getMyOpenPlayBookingsPaginated(t,e,i)}loadSessionBookings(t){return this.apiService.getOpenPlaySessionBookings(t)}getSessionFollowers(t){return this.apiService.getOpenPlaySessionFollowers(t)}followSession(t){return this.apiService.followOpenPlaySession(t)}unfollowSession(t){return this.apiService.unfollowOpenPlaySession(t)}loadMyFollowedSessions(){return this.apiService.getMyFollowedSessionIds()}refreshMyBookings(){this.apiService.getMyOpenPlayBookings().subscribe(t=>this.myBookingsSubject.next(t))}getBookingPlayers(t){return this.apiService.getOpenPlayBookingPlayers(t)}getSessionPlayers(t){return this.apiService.getOpenPlaySessionPlayers(t)}scanQrCode(t,e){return this.apiService.scanQrCode(t,e)}getCurrentSessions(){return this.sessionsSubject.value}getCurrentBookings(){return this.myBookingsSubject.value}getTimeRemaining(t){let e=new Date(t),i=new Date,o=e.getTime()-i.getTime();if(o<=0)return{minutes:0,seconds:0,expired:!0};let s=Math.floor(o/6e4),m=Math.floor(o%6e4/1e3);return{minutes:s,seconds:m,expired:!1}}formatDate(t){let e=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return`${e}-${i}-${o}`}initiateTransfer(t,e){return this.apiService.initiateSlotTransfer(t,e)}acceptTransfer(t){return this.apiService.acceptSlotTransfer(t)}rejectTransfer(t,e){return this.apiService.rejectSlotTransfer(t,e)}cancelTransfer(t){return this.apiService.cancelSlotTransfer(t)}getIncomingTransfers(){return this.apiService.getIncomingTransfers()}getOutgoingTransfers(){return this.apiService.getOutgoingTransfers()}searchUsers(t){return this.apiService.searchUsersForTransfer(t)}getAllIncomingTransfers(){return this.apiService.getAllIncomingTransfers()}getReceivedSlots(){return this.apiService.getReceivedSlots()}cancelReceivedSlot(t){return this.apiService.cancelReceivedSlot(t)}adminCreateGuestBooking(t,e,i,o,s){return this.apiService.adminCreateGuestBooking({sessionId:t,numberOfPlayers:e,playerNames:i,playerUserIds:null,discountTypeId:o||null,paymentMethod:s||"CASH"})}getMyBookingCredits(){return this.apiService.getMyBookingCredits()}getMyBookingStats(){return this.apiService.getMyBookingStats()}loadDiscountTypes(){return this.apiService.getActiveDiscountTypes()}getMyDiscountEligibility(){return this.apiService.getMyDiscountEligibility()}uploadDiscountProof(t,e){let i=new FormData;return e.forEach(o=>i.append("files",o)),this.apiService.uploadDiscountProof(t,i)}static \u0275fac=function(e){return new(e||n)(on(it))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var Yk=()=>["Beginner","Intermediate","Advanced","Pro"],Xk=(n,t,e)=>({"bi-check-circle-fill":n,"bi-x-circle-fill":t,"bi-info-circle-fill":e});function Zk(n,t){if(n&1){let e=L();r(0,"div",29)(1,"button",30),S("click",function(){k(e);let o=h();return O(o.setActiveTab("myBookings"))}),w(2,"i",31),r(3,"span",32),l(4),a(),r(5,"span",33),l(6,"Upcoming"),a()(),r(7,"button",34),S("click",function(){k(e);let o=h();return O(o.setActiveTab("myBookings"))}),w(8,"i",35),r(9,"span",32),l(10),a(),r(11,"span",33),l(12),a()()()}if(n&2){let e=h();
68d(4),R(e.myBookingStats.upcomingBookings),d(6),R(e.myBookingStats.availableCredits),d(2),R(e.myBookingStats.availableCredits===1?"Credit":"Credits")}}function Qk(n,t){if(n&1&&(r(0,"span",36),l(1),a()),n&2){let e=h();d(),R(e.myBookingsTotalElements)}}function Kk(n,t){if(n&1&&(r(0,"span",36),l(1),a()),n&2){let e=h();d(),R(e.receivedSlots.length)}}function Jk(n,t){if(n&1&&(r(0,"span",37),l(1),a()),n&2){let e=h();d(),R(e.incomingTransfers.length)}}function e4(n,t){if(n&1&&(r(0,"span",38),l(1),a()),n&2){let e=h();d(),R(e.getPendingRefundCount())}}function t4(n,t){if(n&1){let e=L();r(0,"button",47),S("click",function(){k(e);let o=h(2);return O(o.loadMorePast())}),w(1,"i",48),r(2,"span"),l(3,"More"),a()()}}function n4(n,t){if(n&1){let e=L();r(0,"button",51),S("click",function(){k(e);let o=h(3);return O(o.togglePastDates())}),w(1,"i",52),r(2,"span"),l(3),a()()}if(n&2){let e=h(3);x("title",e.showPastDates?"Hide past sessions":"Browse past sessions"),d(),te("bi-arrow-left-short",!e.showPastDates)("bi-arrow-right-short",e.showPastDates),d(2),R(e.showPastDates?"Hide":"Past")}}function i4(n,t){n&1&&w(0,"span",58)}function o4(n,t){if(n&1){let e=L();r(0,"button",53),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.selectDate(o))}),r(1,"span",54),l(2),a(),r(3,"span",55),l(4),a(),r(5,"span",56),l(6),a(),A(7,i4,1,0,"span",57),a()}if(n&2){let e=h().$implicit,i=h(2);te("selected",i.isDateSelected(e))("past",i.isPastDate(e))("today",i.isToday(e))("has-sessions",i.hasSessionsOnDate(e)),x("id","date-"+i.formatDateForApi(e)),d(2),R(i.getDayName(e)),d(2),R(e.getDate()),d(2),R(i.formatDate(e)),d(),x("ngIf",i.hasSessionsOnDate(e)&&!i.isDateSelected(e))}}function r4(n,t){if(n&1&&(we(0),A(1,n4,4,6,"button",49)(2,o4,8,13,"button",50),Pe()),n&2){let e=t.$implicit,i=h(2);d(),x("ngIf",i.isToday(e)),d(),x("ngIf",!i.isPastDate(e)||i.showPastDates)}}function a4(n,t){if(n&1&&(r(0,"div",59),w(1,"i",60),r(2,"div")(3,"span",61),l(4),a(),r(5,"span"),l(6,"All courts will not be available from "),r(7,"strong"),l(8),a(),l(9,". Sessions during this period are reserved for Mass."),a()()()),n&2){let e=t.ngIf;d(4),F("Courts Unavailable \u2014 ",e.label," Mass"),d(4),R(e.time)}}function s4(n,t){n&1&&(r(0,"div",62),w(1,"div",63),r(2,"p"),l(3,"Loading sessions..."),a()())}function l4(n,t){if(n&1&&(r(0,"p",93),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),F(" ",i.getAvailableSlots(e)," slots remaining ")}}function c4(n,t){n&1&&(r(0,"p",94),l(1," Session Full "),a())}function d4(n,t){if(n&1&&(r(0,"span",100),l(1),a()),n&2){let e=h(2).$implicit;d(),F(" ",e.followCount," interested ")}}function p4(n,t){if(n&1){let e=L();r(0,"button",101),S("click",function(o){k(e);let s=h(2).$implicit;return h(3).openAdminGuestModal(s),O(o.stopPropagation())}),w(1,"i",102),l(2," Walk-in "),a()}}function m4(n,t){if(n&1){let e=L();r(0,"div",95)(1,"div",96)(2,"button",97),S("click",function(o){k(e);let s=h().$implicit,m=h(3);return O(m.openFollowModal(s,o))}),w(3,"i",52),l(4),a(),A(5,d4,2,1,"span",98),a(),A(6,p4,3,0,"button",99),a()}if(n&2){let e,i=h().$implicit,o=h(3);d(2),te("following",o.isFollowing(i)),x("title",o.isFollowing(i)?"Manage your interest":"Get notified if a slot opens"),d(),te("bi-bell-fill",o.isFollowing(i))("bi-bell",!o.isFollowing(i)),d(),F(" ",o.isFollowing(i)?"Interested":"Notify Me"," "),d(),x("ngIf",((e=i.followCount)!==null&&e!==void 0?e:0)>0),d(),x("ngIf",o.currentUserRole.toLowerCase()==="admin"&&o.getAvailableSlots(i)>0)}}function g4(n,t){if(n&1&&(r(0,"div",106),l(1),a()),n&2){let e=t.$implicit,i=h(5);Qt(i.getStatusClass(e.status)),d(),F(" ",i.getPlayerInitials(e.fullname)," ")}}function u4(n,t){if(n&1&&(r(0,"div",107),l(1),a()),n&2){let e=h(2).$implicit,i=h(3);d(),F(" +",i.getActivePlayers(e).length-4," ")}}function f4(n,t){if(n&1&&(r(0,"div",103),A(1,g4,2,3,"div",104)(2,u4,2,1,"div",105),a()),n&2){let e=h().$implicit,i=h(3);d(),x("ngForOf",i.getActivePlayers(e).slice(0,4)),d(),x("ngIf",i.getActivePlayers(e).length>4)}}function h4(n,t){n&1&&(r(0,"div",108),w(1,"i",109),a())}function _4(n,t){if(n&1&&(r(0,"span",132),w(1,"i",35),l(2),a()),n&2){let e=h().$implicit;d(2),Se(" \u2212",e.creditsApplied||1," Credit",(e.creditsApplied||1)===1?"":"s","")}}function x4(n,t){if(n&1&&(r(0,"span",133),w(1,"i",134),l(2),a()),n&2){let e=h().$implicit,i=h(5);te("urgent",i.getTimeRemaining(e).totalSeconds<180),d(2),F(" ",i.formatTimeRemaining(e)," ")}}function v4(n,t){n&1&&(r(0,"span",135),w(1,"i",136),a())}function b4(n,t){if(n&1){let e=L();r(0,"div",137),S("click",function(o){return k(e),O(o.stopPropagation())}),w(1,"span",138),r(2,"span"),l(3,"Uploading receipt..."),a()()}}function y4(n,t){if(n&1){let e=L();r(0,"div",137),S("click",function(o){return k(e),O(o.stopPropagation())}),w(1,"span",138),r(2,"span"),l(3,"Replacing receipt..."),a()()}}function C4(n,t){if(n&1){let e=L();r(0,"button",145),S("click",function(o){k(e);let s=h(2).$implicit;return h(5).openPaymentInstructions(s),O(o.stopPropagation())}),w(1,"i",146),l(2," How to Pay "),a()}}function w4(n,t){if(n&1){let e=L();r(0,"button",147),S("click",function(o){k(e);let s=h(2).$implicit;return h(5).openReceiptUpload(s),O(o.stopPropagation())}),w(1,"i",148),l(2," Upload "),a()}}function P4(n,t){if(n&1){let e=L();r(0,"button",149),S("click",function(o){k(e);let s=h(2).$implicit;return h(5).openReceiptReplace(s),O(o.stopPropagation())}),w(1,"i",150),l(2," Replace "),a()}}function M4(n,t){if(n&1){let e=L();r(0,"button",151),S("click",function(o){k(e);let s=h(2).$implicit;return h(5).openReceiptView(s),O(o.stopPropagation())}),w(1,"i",152),l(2," View "),a()}}function S4(n,t){if(n&1){let e=L();r(0,"button",153),S("click",function(o){k(e);let s=h(2).$implicit;return h(5).promptCancelBooking(s),O(o.stopPropagation())}),w(1,"i",154),l(2," Cancel "),a()}}function k4(n,t){if(n&1){let e=L();r(0,"div",139),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,C4,3,0,"button",140)(2,w4,3,0,"button",141)(3,P4,3,0,"button",142)(4,M4,3,0,"button",143)(5,S4,3,0,"button",144),a()}if(n&2){let e=h().$implicit,i=h(5);d(),x("ngIf",e.status==="PENDING_PAYMENT"&&!e.paymentProofUrl),d(),x("ngIf",i.canU
68ploadReceipt(e)),d(),x("ngIf",i.canReplaceReceipt(e)),d(),x("ngIf",i.canViewReceipt(e)),d(),x("ngIf",i.canCancelBooking(e))}}function O4(n,t){if(n&1){let e=L();r(0,"div",117),S("click",function(){k(e);let o=h(5);return O(o.goToMyBookings())}),r(1,"div",118)(2,"div",119)(3,"span",120),l(4),a(),r(5,"div",121)(6,"span",122),l(7),a(),r(8,"span",123),l(9),_e(10,"number"),a(),A(11,_4,3,2,"span",124),a()(),r(12,"div",125),A(13,x4,3,3,"span",126)(14,v4,2,0,"span",127),r(15,"span",128),l(16),a(),w(17,"i",129),a()(),A(18,b4,4,0,"div",130)(19,y4,4,0,"div",130)(20,k4,6,5,"div",131),a()}if(n&2){let e=t.$implicit,i=t.index,o=h(5);d(4),F("#",i+1,""),d(3),R(e.bookingId),d(2),Se("",e.numberOfPlayers,"p \xB7 \u20B1",be(10,13,e.totalAmount,"1.2-2"),""),d(2),x("ngIf",(e.creditsApplied||0)>0||e.creditId),d(2),x("ngIf",e.status==="PENDING_PAYMENT"&&!e.paymentProofUrl&&e.paymentDeadline),d(),x("ngIf",e.status==="PENDING_PAYMENT"&&e.paymentProofUrl),d(),Qt(o.getStatusClass(e.status)),d(),F(" ",o.getStatusShortLabel(e.status)," "),d(2),x("ngIf",o.uploadingBookingIds.has(e.id)),d(),x("ngIf",o.replacingBookingIds.has(e.id)),d(),x("ngIf",!o.uploadingBookingIds.has(e.id)&&!o.replacingBookingIds.has(e.id))}}function E4(n,t){if(n&1){let e=L();r(0,"button",155),S("click",function(o){k(e);let s=h(2).$implicit;return h(3).openBookingModal(s),O(o.stopPropagation())}),w(1,"i",156),l(2," Add Booking "),a()}}function T4(n,t){if(n&1){let e=L();r(0,"div",110)(1,"div",111),w(2,"i",11),r(3,"span"),l(4),a(),r(5,"button",112),S("click",function(o){k(e);let s=h().$implicit;return h(3).openSessionChat(s),O(o.stopPropagation())}),w(6,"i",113),a()(),A(7,O4,21,16,"div",114),r(8,"div",115),A(9,E4,3,0,"button",116),a()()}if(n&2){let e=h().$implicit,i=h(3);d(4),F("Your Bookings (",i.getUserBookingsForSession(e).length,")"),d(),te("active",(i.activeChatSession==null?null:i.activeChatSession.id)===e.id),x("title",(i.activeChatSession==null?null:i.activeChatSession.id)===e.id?"Close Chat":"Session Chat"),d(2),x("ngForOf",i.getUserBookingsForSession(e)),d(2),x("ngIf",i.getAvailableSlots(e)>0&&e.status!=="COMPLETED")}}function I4(n,t){if(n&1){let e=L();r(0,"button",163),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.openBookingModal(o))}),w(1,"i",156),l(2," Book Slot "),a()}}function A4(n,t){n&1&&(r(0,"div",164),w(1,"i",165),l(2," This session is fully booked "),a())}function D4(n,t){n&1&&(r(0,"div",166),w(1,"i",167),l(2," This session has ended "),a())}function R4(n,t){if(n&1){let e=L();r(0,"div",157)(1,"div",158)(2,"button",159),S("click",function(o){k(e);let s=h().$implicit;return h(3).openSessionChat(s),O(o.stopPropagation())}),w(3,"i",113),a(),A(4,I4,3,0,"button",160)(5,A4,3,0,"div",161)(6,D4,3,0,"div",162),a()()}if(n&2){let e=h().$implicit,i=h(3);d(2),te("active",(i.activeChatSession==null?null:i.activeChatSession.id)===e.id),x("title",(i.activeChatSession==null?null:i.activeChatSession.id)===e.id?"Close Chat":"Session Chat"),d(2),x("ngIf",i.getAvailableSlots(e)>0&&e.status!=="COMPLETED"),d(),x("ngIf",i.getAvailableSlots(e)===0),d(),x("ngIf",e.status==="COMPLETED")}}function B4(n,t){if(n&1){let e=L();r(0,"div",67)(1,"div",68),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.toggleSessionDetails(o.id))}),r(2,"div",69)(3,"h3"),l(4),a(),r(5,"p",70),l(6),a()(),r(7,"div",71)(8,"span",72),l(9),a(),r(10,"p",73),l(11),a()()(),r(12,"div",74)(13,"div",75)(14,"span",76),l(15,"Players"),a(),r(16,"span",77),l(17),a()(),r(18,"div",78),w(19,"div",79),a(),A(20,l4,2,1,"p",80)(21,c4,2,0,"p",81),a(),A(22,m4,7,10,"div",82),r(23,"div",83)(24,"button",84),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openPlayersModal(o))}),r(25,"div",85),A(26,f4,3,2,"div",86)(27,h4,2,0,"div",87),r(28,"span",88),w(29,"i",89),l(30," View Players "),a()(),w(31,"i",90),a()(),A(32,T4,10,6,"div",91)(33,R4,7,6,"div",92),a()}if(n&2){let e=t.$implicit,i=h(3);te("expanded",i.expandedSessionId===e.id),d(4),R(e.sessionType),d(2),Se("",i.formatTime12Hour(e.startTime)," - ",i.formatTime12Hour(e.endTime),""),d(2),Qt("status-"+e.status.toLowerCase()),d(),F(" ",i.getSessionStatusText(e)," "),d(2),F("\u20B1",e.pricePerPerson,"/person"),d(6),Se("",i.getCurrentPlayers(e),"/",e.maxPlayers,""),d(2),le("width",i.getFilledPercentage(e),"%"),te("high",i.getFilledPercentage(e)>=80)("medium",i.getFilledPercentage(e)>=50&&i.getFilledPercentage(e)<80),d(),x("ngIf",i.getAvailableSlots(e)>0),d(),x("ngIf",i.getAvailableSlots(e)===0),d(),x("ngIf",e.status!=="COMPLETED"),d(4),x("ngIf",i.getTotalActivePlayersCount(e)>0),d(),x("ngIf",i.getTotalActivePlayersCount(e)===0),d(5),x("ngIf",i.getUserBookingsForSession(e).length>0),d(),x("ngIf",!i.hasUserJoined(e))}}function N4(n,t){n&1&&(r(0,"div",168),w(1,"i",169),r(2,"p"),l(3,"No sessions available for this date."),a(),r(4,"p",170),l(5,"
68Sessions are created by the admin. Check back later or try a different date."),a()())}function V4(n,t){if(n&1&&(r(0,"div",64),A(1,B4,34,24,"div",65)(2,N4,6,0,"div",66),a()),n&2){let e=h(2);d(),x("ngForOf",e.sessions),d(),x("ngIf",e.sessions.length===0)}}function L4(n,t){if(n&1&&(r(0,"div")(1,"div",39)(2,"div",40),A(3,t4,4,0,"button",41)(4,r4,3,2,"ng-container",42),a()(),r(5,"div",43)(6,"h2"),l(7),a()(),A(8,a4,10,2,"div",44)(9,s4,4,0,"div",45)(10,V4,3,2,"div",46),a()),n&2){let e=h();d(3),x("ngIf",e.showPastDates),d(),x("ngForOf",e.availableDates),d(3),R(e.formatDateFull(e.selectedDate)),d(),x("ngIf",e.getMassNotice()),d(),x("ngIf",e.isLoading),d(),x("ngIf",!e.isLoading)}}function F4(n,t){n&1&&(r(0,"div",62),w(1,"div",63),r(2,"p"),l(3,"Loading transfer history..."),a()())}function z4(n,t){n&1&&(r(0,"div",177),w(1,"i",178),r(2,"h3"),l(3,"No Transfer History"),a(),r(4,"p"),l(5,"You haven't sent or received any slot transfers yet."),a()())}function U4(n,t){if(n&1&&(we(0),w(1,"i",197),r(2,"span"),l(3,"Sent to "),r(4,"strong"),l(5),a(),r(6,"span",198),l(7),a()(),Pe()),n&2){let e=h().$implicit;d(5),R(e.toFullname),d(2),F(" (@",e.toUsername,")")}}function j4(n,t){if(n&1&&(we(0),w(1,"i",199),r(2,"span"),l(3,"Received from "),r(4,"strong"),l(5),a(),r(6,"span",198),l(7),a()(),Pe()),n&2){let e=h().$implicit;d(5),R(e.fromFullname),d(2),F(" (@",e.fromUsername,")")}}function H4(n,t){if(n&1&&(r(0,"div",200),w(1,"i",10),r(2,"span"),l(3),a()()),n&2){let e=h().$implicit,i=h(3);d(3),R(i.formatSessionDate(e.sessionDate))}}function W4(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit,i=h(3);d(),F(" \u2013 ",i.formatTime12Hour(e.sessionEndTime),"")}}function G4(n,t){if(n&1&&(r(0,"div",200),w(1,"i",134),r(2,"span"),l(3),A(4,W4,2,1,"span",18),a()()),n&2){let e=h().$implicit,i=h(3);d(3),R(i.formatTime12Hour(e.sessionStartTime)),d(),x("ngIf",e.sessionEndTime)}}function q4(n,t){if(n&1&&(r(0,"div",201),w(1,"i",202),r(2,"span"),l(3),a()()),n&2){let e=h().$implicit;d(3),R(e.humanBookingId)}}function $4(n,t){if(n&1&&(r(0,"div",203),w(1,"i",204),r(2,"em"),l(3),a()()),n&2){let e=h().$implicit;d(3),R(e.transferNote)}}function Y4(n,t){if(n&1&&(r(0,"div",205),w(1,"i",206),l(2),a()),n&2){let e=h().$implicit;d(2),F(" Reason: ",e.rejectionReason," ")}}function X4(n,t){if(n&1&&(r(0,"div",207)(1,"div",188)(2,"span",189),w(3,"i",208),l(4," Resolved"),a(),r(5,"span",193),l(6),_e(7,"date"),a()()()),n&2){let e=h().$implicit;d(6),R(be(7,1,e.resolvedAt,"MMM d, y h:mm a"))}}function Z4(n,t){if(n&1){let e=L();r(0,"div",211)(1,"button",212),S("click",function(){k(e);let o=h(3).$implicit,s=h(3);return O(s.acceptTransfer(o))}),w(2,"i",213),l(3," Accept "),a(),r(4,"button",214),S("click",function(){k(e);let o=h(3).$implicit,s=h(3);return O(s.initiateRejectTransfer(o))}),w(5,"i",215),l(6," Reject "),a()()}}function Q4(n,t){if(n&1){let e=L();r(0,"div",216)(1,"textarea",217),pe("ngModelChange",function(o){k(e);let s=h(6);return de(s.rejectReason,o)||(s.rejectReason=o),O(o)}),a(),r(2,"div",218)(3,"button",219),S("click",function(){k(e);let o=h(6);return O(o.confirmRejectTransfer())}),l(4,"Confirm Reject"),a(),r(5,"button",220),S("click",function(){k(e);let o=h(6);return o.showRejectReasonInput=!1,O(o.respondingToTransfer=null)}),l(6,"Cancel"),a()()()}if(n&2){let e=h(6);d(),ce("ngModel",e.rejectReason)}}function K4(n,t){if(n&1&&(r(0,"div"),A(1,Z4,7,0,"div",209)(2,Q4,7,1,"div",210),a()),n&2){let e=h(2).$implicit,i=h(3);d(),x("ngIf",(i.respondingToTransfer==null?null:i.respondingToTransfer.id)!==e.id||!i.showRejectReasonInput),d(),x("ngIf",(i.respondingToTransfer==null?null:i.respondingToTransfer.id)===e.id&&i.showRejectReasonInput)}}function J4(n,t){if(n&1){let e=L();r(0,"div",211)(1,"button",153),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.cancelTransferRequest(o))}),w(2,"i",154),l(3," Cancel Request "),a()()}}function eO(n,t){if(n&1&&(r(0,"div"),A(1,K4,3,2,"div",18)(2,J4,4,0,"div",209),a()),n&2){let e=h().$implicit,i=h(3);d(),x("ngIf",e.toUserId===i.currentUserId),d(),x("ngIf",e.fromUserId===i.currentUserId)}}function tO(n,t){if(n&1&&(r(0,"div",179)(1,"div",180)(2,"div",181),A(3,U4,8,2,"ng-container",18)(4,j4,8,2,"ng-container",18),a(),r(5,"span",182),l(6),a()(),r(7,"div",183),A(8,H4,4,1,"div",184)(9,G4,5,2,"div",184)(10,q4,4,1,"div",185),a(),r(11,"div",186)(12,"div",187)(13,"div",188)(14,"span",189),w(15,"i",190),l(16," Slot"),a(),r(17,"span",191),l(18),a()(),r(19,"div",188)(20,"span",189),w(21,"i",192),l(22," Date"),a(),r(23,"span",193),l(24),_e(25,"date"),a()()(),A(26,$4,4,1,"div",194)(27,Y4,3,1,"div",195)(28,X4,8,4,"div",196),a(),A(29,eO,3,2,"div",18),a()),n&2){let e=t.$implicit,i=h(3);d(3),x("ngIf",e.fromUserId===i.currentUserId),d(),x("ngIf",e.toUserId===i.currentUserId),d(),Qt(i.getTransferStatusClass(e.status)),d(),F(" ",i.getTransferStatusLabel(e.status)," "),d(2),x("ngIf",e.sessionDate),d(),x("ngIf",e.sessionStartTime),d(),x("ngIf",e.humanBookingId),d(8),R(e.playerName),d(6),R(be(25,14,e.createdAt,"MMM d, y h:mm a")),d(2),x("ngIf",e.transferNote),d(),x("ngIf",e.status==="REJECTED"&&e.rejectionReason),d(),x("ngIf",e.resolvedAt),d(),x("ngIf",e.status==="PENDING")}}function nO(n,t){if(n&1&&(r(0,"div",174),A(1,z4,6,0,"div",175)(2,tO,30,17,"div",176),a()),n&2){let e=h(2);d(),x("ngIf",e.allTransferHistory.length===0),d(),x("ngForOf",e.allTransferHistory)}}function iO(n,t){if(n&1&&(r(0,"div",171)(1,"div",172)(2,"h2"),w(3,"i",14),l(4," Transfer History"),a(),r(5,"p",6),l(6,"All slot transfers you've sent or received"),a()(),A(7,F4,4,0,"div",45)(8,nO,3,2,"div",173),a()),n&2){let e=h();d(7),x("ngIf",e.isLoadingTransferHistory),d(),x("ngIf",!e.isLoadingTransferHistory)}}function oO(n,t){n&1&&(r(0,"div",62),w(1,"div",63),r(2,"p"),l(3,"Loading refund history..."),a()())}function rO(n,t){n&1&&(r(0,"div",177),w(1,"i",16),r(2,"h3"),l(3,"No Refund Requests"),a(),r(4,"p"),l(5,"You haven't submitted any refund requests yet."),a()())}
68function aO(n,t){if(n&1&&(r(0,"div",187)(1,"span",189),l(2,"Resolved"),a(),r(3,"span",191),l(4),_e(5,"date"),a()()),n&2){let e=h().$implicit;d(4),R(be(5,1,e.resolvedAt,"MMM d, yyyy h:mm a"))}}function sO(n,t){if(n&1&&(r(0,"div",187)(1,"span",189),l(2,"Resolved By"),a(),r(3,"span",191),l(4),a()()),n&2){let e=h().$implicit;d(4),R(e.resolvedBy)}}function lO(n,t){if(n&1&&(r(0,"div",233),w(1,"i",234),r(2,"span")(3,"strong"),l(4,"Reason:"),a(),l(5),a()()),n&2){let e=h().$implicit;d(5),F(" ",e.declineReason,"")}}function cO(n,t){if(n&1){let e=L();r(0,"button",151),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.viewRefundPaymentProof(o))}),w(1,"i",235),l(2," Payment Proof "),a()}}function dO(n,t){if(n&1){let e=L();r(0,"button",151),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.viewRefundProof(o))}),w(1,"i",236),l(2," Refund Proof "),a()}}function pO(n,t){if(n&1&&(r(0,"div",225)(1,"div",180)(2,"div",181),w(3,"i",10),r(4,"span"),l(5),a(),r(6,"span",226),l(7),a()(),r(8,"span",72),w(9,"i",52),l(10),a()(),r(11,"div",227)(12,"div",187)(13,"span",189),l(14,"Booking ID"),a(),r(15,"span",228),l(16),a()(),r(17,"div",187)(18,"span",189),l(19,"Refund Amount"),a(),r(20,"span",229),l(21),_e(22,"number"),a()(),r(23,"div",187)(24,"span",189),l(25,"Requested"),a(),r(26,"span",191),l(27),_e(28,"date"),a()(),A(29,aO,6,4,"div",230)(30,sO,5,1,"div",230)(31,lO,6,1,"div",231),a(),r(32,"div",232),A(33,cO,3,0,"button",143)(34,dO,3,0,"button",143),a()()),n&2){let e=t.$implicit;d(5),R(e.sessionDate||"N/A"),d(2),Se("",e.sessionStartTime," - ",e.sessionEndTime,""),d(),te("badge-pending",e.status==="PENDING")("badge-verified",e.status==="APPROVED")("badge-cancelled",e.status==="DECLINED"),d(),te("bi-hourglass-split",e.status==="PENDING")("bi-check-circle-fill",e.status==="APPROVED")("bi-x-circle-fill",e.status==="DECLINED"),d(),F(" ",e.status," "),d(6),R(e.bookingDisplayId||"\u2014"),d(5),F("\u20B1",be(22,24,e.refundAmount,"1.2-2"),""),d(6),R(be(28,27,e.requestedAt,"MMM d, yyyy h:mm a")),d(2),x("ngIf",e.resolvedAt),d(),x("ngIf",e.resolvedBy),d(),x("ngIf",e.status==="DECLINED"&&e.declineReason),d(2),x("ngIf",e.paymentProofUrl),d(),x("ngIf",e.status==="APPROVED"&&e.refundProofUrl)}}function mO(n,t){if(n&1&&(r(0,"div",174),A(1,rO,6,0,"div",175)(2,pO,35,30,"div",224),a()),n&2){let e=h(2);d(),x("ngIf",e.myRefunds.length===0),d(),x("ngForOf",e.myRefunds)}}function gO(n,t){if(n&1&&(r(0,"div",171)(1,"div",172)(2,"h2"),w(3,"i",16),l(4," Refund History"),a(),r(5,"p",6),l(6,"Track the status of your refund requests"),a()(),r(7,"div",221),w(8,"i",146),r(9,"div")(10,"p",222)(11,"strong"),l(12,"Self-service refunds are disabled"),a()(),r(13,"p",223),l(14," New refund requests can no longer be filed from the app. To request a refund for a cancelled booking, please "),r(15,"strong"),l(16,"contact admin"),a(),l(17,". This list still shows any refund requests submitted before this change. "),a()()(),A(18,oO,4,0,"div",45)(19,mO,3,2,"div",173),a()),n&2){let e=h();d(18),x("ngIf",e.isLoadingRefunds),d(),x("ngIf",!e.isLoadingRefunds)}}function uO(n,t){n&1&&(r(0,"div",245),w(1,"i",246),r(2,"p"),l(3,"No image available."),a()())}function fO(n,t){if(n&1&&(r(0,"div",247),w(1,"img",248),a()),n&2){let e=t.$implicit,i=t.index;d(),Kt("alt","Receipt image ",i+1,""),x("src",e,Ie)}}function hO(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeRefundReceiptModal())}),r(1,"div",238),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",236),l(5),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeRefundReceiptModal())}),w(7,"i",241),a()(),r(8,"div",242),A(9,uO,4,0,"div",243)(10,fO,2,3,"div",244),a()()()}if(n&2){let e=h();d(5),F(" ",(e.selectedRefundForReceipt==null?null:e.selectedRefundForReceipt.status)==="APPROVED"&&e.refundReceiptViewUrl.length?"Refund Proof":"Payment Receipt",""),d(4),x("ngIf",e.refundReceiptViewUrl.length===0),d(),x("ngForOf",e.refundReceiptViewUrl)}}function _O(n,t){if(n&1&&(r(0,"div",262)(1,"div",263)(2,"div",264),w(3,"i",31),a(),r(4,"div",265)(5,"span",266),l(6),a(),r(7,"span",267),l(8,"Upcoming"),a()()(),r(9,"div",263)(10,"div",268),w(11,"i",269),a(),r(12,"div",265)(13,"span",266),l(14),a(),r(15,"span",267),l(16,"Played"),a()()(),r(17,"div",263)(18,"div",270),w(19,"i",35),a(),r(20,"div",265)(21,"span",266),l(22),a(),r(23,"span",267),l(24,"Credits"),a()()(),r(25,"div",263)(26,"div",271),w(27,"i",272),a(),r(28,"div",265)(29,"span",266),l(30),a(),r(31,"span",267),l(32,"Total Bookings"),a()()(),r(33,"div",263)(34,"div",273),w(35,"i",154),a(),r(36,"div",265)(37,"span",266),l(38),a(),r(39,"span",267),l(40,"Cancelled"),a()()(),r(41,"div",263)(42,"div",274),w(43,"i",275),a(),r(44,"div",265)(45,"span",266),l(46),a(),r(47,"span",267),l(48,"Active Slots"),a()()()()),n&2){let e=h(2);
68d(6),R(e.myBookingStats.upcomingBookings),d(8),R(e.myBookingStats.sessionsPlayed),d(8),R(e.myBookingStats.availableCredits),d(8),R(e.myBookingStats.totalBookings),d(8),R(e.myBookingStats.cancelledBookings),d(8),R(e.myBookingStats.totalPlayers)}}function xO(n,t){if(n&1){let e=L();r(0,"button",276),S("click",function(){k(e);let o=h(2);return O(o.clearFilterDate())}),w(1,"i",241),a()}}function vO(n,t){n&1&&(r(0,"div",62),w(1,"div",63),r(2,"p"),l(3,"Loading bookings..."),a()())}function bO(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),R(i.formatSessionDate(e.sessionDate))}}function yO(n,t){n&1&&(r(0,"span"),l(1,"Session"),a())}function CO(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit,i=h(3);d(),F(" \u2013 ",i.formatTime12Hour(e.sessionEndTime),"")}}function wO(n,t){if(n&1&&(r(0,"div",200),w(1,"i",134),r(2,"span"),l(3),A(4,CO,2,1,"span",18),a()()),n&2){let e=h().$implicit,i=h(3);d(3),R(i.formatTime12Hour(e.sessionStartTime)),d(),x("ngIf",e.sessionEndTime)}}function PO(n,t){if(n&1&&(r(0,"div",201),w(1,"i",202),r(2,"span"),l(3),a()()),n&2){let e=h().$implicit;d(3),R(e.bookingId)}}function MO(n,t){if(n&1&&(we(0),r(1,"span",295),l(2),_e(3,"number"),a(),r(4,"span",296),l(5),_e(6,"number"),a(),Pe()),n&2){let e=h().$implicit;d(2),F("\u20B1",be(3,2,e.originalAmount,"1.2-2"),""),d(3),F("\u20B1",be(6,5,e.totalAmount,"1.2-2"),"")}}function SO(n,t){if(n&1&&(l(0),_e(1,"number")),n&2){let e=h().$implicit;F("\u20B1",be(1,1,e.totalAmount,"1.2-2"),"")}}function kO(n,t){if(n&1&&(r(0,"div",188)(1,"span",189),w(2,"i",297),l(3," Payment"),a(),r(4,"span",191)(5,"span",298),w(6,"i",52),l(7),a()()()),n&2){let e=h().$implicit;d(5),te("badge-cash",e.paymentMethod==="CASH")("badge-online",e.paymentMethod==="ONLINE"),d(),te("bi-cash",e.paymentMethod==="CASH")("bi-qr-code",e.paymentMethod==="ONLINE"),d(),F(" ",e.paymentMethod==="CASH"?"Cash":"GCash / Online"," ")}}function OO(n,t){if(n&1&&(r(0,"div",299),w(1,"i",35),r(2,"span",300),l(3,"Rebooking Credit"),a(),r(4,"span",301),l(5),a(),r(6,"span",302),l(7),a()()),n&2){let e=h().$implicit;d(5),Se("\u2212",e.creditsApplied||1," credit",(e.creditsApplied||1)===1?"":"s"," used"),d(2),R((e.creditsApplied||0)>0&&e.status==="PENDING_PAYMENT"?"Partial \u2014 pay remaining balance":"No payment required")}}function EO(n,t){if(n&1&&(r(0,"div",303),w(1,"i",52),r(2,"span",300),l(3),a(),r(4,"span",301),l(5),_e(6,"number"),a(),r(7,"span",302),l(8),a()()),n&2){let e=h().$implicit;te("strip-approved",e.discountStatus==="APPROVED")("strip-pending",e.discountStatus==="PENDING_VERIFICATION"),d(),te("bi-patch-check-fill",e.discountStatus==="APPROVED")("bi-hourglass-split",e.discountStatus==="PENDING_VERIFICATION"),d(2),R((e.discountType==null?null:e.discountType.name)||"Discount"),d(2),F("\u2212\u20B1",be(6,11,e.discountAmount,"1.2-2")," saved"),d(3),R(e.discountStatus==="APPROVED"?"Approved":"Pending approval")}}function TO(n,t){if(n&1&&(r(0,"span",307),l(1),a()),n&2){let e=t.$implicit;d(),R(e)}}function IO(n,t){if(n&1&&(r(0,"div",304)(1,"span",189),w(2,"i",275),l(3," Players:"),a(),r(4,"div",305),A(5,TO,2,1,"span",306),a()()),n&2){let e=h().$implicit;d(5),x("ngForOf",e.playerNames)}}function AO(n,t){if(n&1&&(r(0,"div",308),w(1,"i",309),r(2,"span"),l(3,"Please pay "),r(4,"strong"),l(5),_e(6,"number"),a(),l(7," and upload your receipt before "),r(8,"strong"),l(9),a()()()),n&2){let e=h().$implicit,i=h(3);d(5),F("\u20B1",be(6,2,e.totalAmount,"1.2-2"),""),d(4),R(i.formatDeadline(e.paymentDeadline))}}function DO(n,t){n&1&&(r(0,"div",310),w(1,"i",14),r(2,"span"),l(3,"Receipt submitted \xB7 Awaiting admin verification"),a()())}function RO(n,t){if(n&1&&(we(0),l(1," by "),r(2,"strong"),l(3),a(),Pe()),n&2){let e=h(2).$implicit;d(3),R(e.paymentVerifiedBy)}}function BO(n,t){if(n&1&&(we(0),l(1),Pe()),n&2){let e=h(2).$implicit,i=h(3);d(),F(" at ",i.formatBookingDateTime(e.paymentVerifiedAt),"")}}function NO(n,t){if(n&1&&(r(0,"div",311),w(1,"i",312),r(2,"span"),l(3,"Payment verified"),A(4,RO,4,1,"ng-container",18)(5,BO,2,1,"ng-container",18),a()()),n&2){let e=h().$implicit;d(4),x("ngIf",e.paymentVerifiedBy),d(),x("ngIf",e.paymentVerifiedAt)}}function VO(n,t){if(n&1&&(r(0,"div",313),w(1,"i",206),r(2,"span"),l(3),a()()),n&2){let e=h().$implicit;d(3),R(e.cancellationReason||"Booking cancelled")}}function LO(n,t){if(n&1&&(we(0),l(1," \xB7 Payment deadline was "),r(2,"strong"),l(3),a(),Pe()),n&2){let e=h(2).$implicit,i=h(3);d(3),R(i.formatDeadline(e.paymentDeadline))}}function FO(n,t){if(n&1&&(r(0,"div",314),w(1,"i",315),r(2,"span"),l(3,"Expired"),A(4,LO,4,1,"ng-container",18),a()()),n&2){let e=h().$implicit;d(4),x("ngIf",e.paymentDeadline)}}function zO(n,t){if(n&1){let e=L();r(0,"button",316),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.openReceiptUpload(o))}),w(1,"i",148),l(2," Upload Receipt "),a()}}function UO(n,t){n&1&&(r(0,"button",317),w(1,"span",138),l(2," Uploading... "),a())}function jO(n,t){if(n&1){let e=L();r(0,"button",318),S("click",function(){k(e);let o=h().$implicit,s=h(3);
68return O(s.openReceiptReplace(o))}),w(1,"i",150),l(2," Replace Receipt "),a()}}function HO(n,t){n&1&&(r(0,"button",319),w(1,"span",138),l(2," Replacing... "),a())}function WO(n,t){if(n&1){let e=L();r(0,"button",320),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.openReceiptView(o))}),w(1,"i",152),l(2," View Receipt "),a()}}function GO(n,t){if(n&1){let e=L();r(0,"button",321),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.openQrModal(o))}),w(1,"i",322),l(2," View QR Codes "),a()}}function qO(n,t){if(n&1){let e=L();r(0,"button",153),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.confirmCancelBooking(o))}),w(1,"i",154),l(2," Cancel Booking "),a()}}function $O(n,t){n&1&&(r(0,"span"),l(1,"Cancellation locked within 12 hrs \u2014 transfer your slot instead."),a())}function YO(n,t){n&1&&(r(0,"span"),l(1,"Cancellation locked within 12 hrs \u2014 payment still under review."),a())}function XO(n,t){if(n&1){let e=L();r(0,"button",326),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.openQrModal(o))}),w(1,"i",178),l(2," Transfer Slot "),a()}}function ZO(n,t){if(n&1&&(we(0),r(1,"div",323),w(2,"i",324),A(3,$O,2,0,"span",18)(4,YO,2,0,"span",18),a(),A(5,XO,3,0,"button",325),Pe()),n&2){let e=h().$implicit;d(3),x("ngIf",e.status==="PAYMENT_VERIFIED"),d(),x("ngIf",e.status==="PENDING_PAYMENT"),d(),x("ngIf",e.status==="PAYMENT_VERIFIED")}}function QO(n,t){if(n&1&&(r(0,"div",179)(1,"div",180)(2,"div",181),w(3,"i",277),A(4,bO,2,1,"span",18)(5,yO,2,0,"span",18),a(),r(6,"span",182),l(7),a()(),r(8,"div",183),A(9,wO,5,2,"div",184)(10,PO,4,1,"div",185),a(),r(11,"div",186)(12,"div",187)(13,"div",188)(14,"span",189),w(15,"i",89),l(16," Players"),a(),r(17,"span",191),l(18),a()(),r(19,"div",188)(20,"span",189),w(21,"i",278),l(22," Amount"),a(),r(23,"span",191),A(24,MO,7,8,"ng-container",279)(25,SO,2,4,"ng-template",null,0,ln),a()(),A(27,kO,8,9,"div",280),r(28,"div",188)(29,"span",189),w(30,"i",192),l(31," Booked"),a(),r(32,"span",193),l(33),a()()(),A(34,OO,8,3,"div",281)(35,EO,9,14,"div",282)(36,IO,6,1,"div",283)(37,AO,10,5,"div",284)(38,DO,4,0,"div",285)(39,NO,6,2,"div",286)(40,VO,4,1,"div",287)(41,FO,5,1,"div",288),a(),r(42,"div",211),A(43,zO,3,0,"button",289)(44,UO,3,0,"button",290)(45,jO,3,0,"button",291)(46,HO,3,0,"button",292)(47,WO,3,0,"button",293)(48,GO,3,0,"button",294)(49,qO,3,0,"button",144)(50,ZO,6,3,"ng-container",18),a()()),n&2){let e=t.$implicit,i=Jt(26),o=h(3);d(4),x("ngIf",e.sessionDate),d(),x("ngIf",!e.sessionDate),d(),Qt(o.getStatusClass(e.status)),d(),F(" ",o.getStatusLabel(e.status)," "),d(2),x("ngIf",e.sessionStartTime),d(),x("ngIf",e.bookingId),d(8),R(e.numberOfPlayers),d(6),x("ngIf",e.discountAmount&&e.discountAmount>0)("ngIfElse",i),d(3),x("ngIf",e.paymentMethod),d(6),R(o.formatBookingDateTime(e.bookingDateTime)),d(),x("ngIf",(e.creditsApplied||0)>0||e.creditId),d(),x("ngIf",e.discountAmount&&e.discountAmount>0),d(),x("ngIf",e.playerNames&&e.playerNames.length>0),d(),x("ngIf",e.status==="PENDING_PAYMENT"&&!e.paymentProofUrl&&e.paymentDeadline),d(),x("ngIf",e.status==="PENDING_PAYMENT"&&e.paymentProofUrl),d(),x("ngIf",e.status==="PAYMENT_VERIFIED"),d(),x("ngIf",e.status==="CANCELLED"),d(),x("ngIf",e.status==="EXPIRED"),d(2),x("ngIf",o.canUploadReceipt(e)&&!o.uploadingBookingIds.has(e.id)),d(),x("ngIf",o.uploadingBookingIds.has(e.id)),d(),x("ngIf",o.canReplaceReceipt(e)&&!o.replacingBookingIds.has(e.id)),d(),x("ngIf",o.replacingBookingIds.has(e.id)),d(),x("ngIf",o.canViewReceipt(e)),d(),x("ngIf",e.status==="PAYMENT_VERIFIED"),d(),x("ngIf",o.canCancelBooking(e)),d(),x("ngIf",(e.status==="PAYMENT_VERIFIED"||e.status==="PENDING_PAYMENT"&&e.paymentProofUrl)&&!o.canCancelBooking(e)&&!o.hasSessionStarted(e))}}function KO(n,t){n&1&&(r(0,"h3"),l(1,"No Bookings Yet"),a())}function JO(n,t){n&1&&(r(0,"h3"),l(1,"No Bookings on This Date"),a())}function eE(n,t){if(n&1&&(r(0,"h3"),l(1),a()),n&2){let e=h(4);d(),F("No ",e.bookingsFilter==="all"?"":e.bookingsFilter," Bookings")}}function tE(n,t){n&1&&(r(0,"p"),l(1,"You haven't made any reservations. Browse sessions to book your spot!"),a())}function nE(n,t){if(n&1&&(r(0,"p"),l(1),_e(2,"date"),a()),n&2){let e=h(4);d(),F("You don't have any bookings on ",be(2,1,e.filterDate,"MMMM d, y"),".")}}function iE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any bookings for today."),a())}function oE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any upcoming bookings."),a())}function rE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any past bookings."),a())}function aE(n,t){if(n&1){let e=L();r(0,"button",220),S("click",function(){k(e);let o=h(4);return O(o.clearFilterDate())}),l(1," Clear Filter "),a()}}function sE(n,t){if(n&1){let e=L();r(0,"div",177),w(1,"i",327),A(2,KO,2,0,"h3",18)(3,JO,2,0,"h3",18)(4,eE,2,1,"h3",18)(5,tE,2,0,"p",18)(6,nE,3,4,"p",18)(7,iE,2,0,"p",18)(8,oE,2,0,"p",18)(9,rE,2,0,"p",18),r(10,"div",328),A(11,aE,2,0,"button",329),r(12,"button",330),S("click",function(){k(e);let o=h(3);return O(o.setActiveTab("browse"))}),l(13," Browse Sessions "),a()()()}if(n&2){let e=h(3);d(2),x("ngIf",e.myBookings.length===0),d(),x("ngIf",e.myBookings.length>0&&e.filterDate),d(),x("ngIf",e.myBookings.length>0&&!e.filterDate),d(),x("ngIf",e.myBookings.length===0),d(),x("ngIf",e.myBookings.length>0&&e.filterDate),d(),x("ngIf",e.myBookings.length>0&&!e.filterDate&&e.bookingsFilter==="today"),d(),x("ngIf",e.myBookings.length>0&&!e.filterDate&&e.bookingsFilter==="upcoming"),d(),x("ngIf",e.myBookings.length>0&&!e.filterDate&&e.bookingsFilter==="past"),d(2),x("ngIf",e.filterDate)}}function lE(n,t){if(n&1&&(r(0,"div",174),A(1,QO,51,28,"div",176)(2,
68sE,14,9,"div",175),a()),n&2){let e=h(2);d(),x("ngForOf",e.filteredMyBookings),d(),x("ngIf",e.filteredMyBookings.length===0)}}function cE(n,t){n&1&&(r(0,"div",331),w(1,"div",332),r(2,"p",333),l(3,"Loading bookings..."),a()())}function dE(n,t){if(n&1){let e=L();r(0,"div",334)(1,"button",335),S("click",function(){k(e);let o=h(2);return O(o.onMyBookingsPageChange(o.myBookingsPage-1))}),w(2,"i",336),l(3," Previous "),a(),r(4,"span",337),l(5),a(),r(6,"button",335),S("click",function(){k(e);let o=h(2);return O(o.onMyBookingsPageChange(o.myBookingsPage+1))}),l(7," Next "),w(8,"i",338),a()()}if(n&2){let e=h(2);d(),x("disabled",e.myBookingsPage===0),d(4),Se("Page ",e.myBookingsPage+1," of ",e.myBookingsTotalPages,""),d(),x("disabled",e.myBookingsPage>=e.myBookingsTotalPages-1)}}function pE(n,t){if(n&1){let e=L();r(0,"div",171)(1,"div",172)(2,"h2"),w(3,"i",11),l(4," My Bookings"),a(),r(5,"p",6),l(6,"View and manage all your open play reservations"),a()(),A(7,_O,49,6,"div",249),r(8,"div",250)(9,"button",251),S("click",function(){k(e);let o=h();return O(o.setBookingsFilter("all"))}),w(10,"i",252),l(11," All "),r(12,"span",253),l(13),a()(),r(14,"button",251),S("click",function(){k(e);let o=h();return O(o.setBookingsFilter("today"))}),w(15,"i",254),l(16," Today "),a(),r(17,"button",251),S("click",function(){k(e);let o=h();return O(o.setBookingsFilter("upcoming"))}),w(18,"i",255),l(19," Upcoming "),a(),r(20,"button",251),S("click",function(){k(e);let o=h();return O(o.setBookingsFilter("past"))}),w(21,"i",256),l(22," Past "),a(),r(23,"div",257),w(24,"i",10),r(25,"input",258),pe("ngModelChange",function(o){k(e);let s=h();return de(s.filterDate,o)||(s.filterDate=o),O(o)}),S("change",function(){k(e);let o=h();return O(o.onFilterDateChange())}),a(),A(26,xO,2,0,"button",259),a()(),A(27,vO,4,0,"div",45)(28,lE,3,2,"div",173)(29,cE,4,0,"div",260)(30,dE,9,4,"div",261),a()}if(n&2){let e=h();d(7),x("ngIf",e.myBookingStats),d(2),te("active",!e.filterDate&&e.bookingsFilter==="all"),d(4),R(e.myBookingsTotalElements),d(),te("active",!e.filterDate&&e.bookingsFilter==="today"),d(3),te("active",!e.filterDate&&e.bookingsFilter==="upcoming"),d(3),te("active",!e.filterDate&&e.bookingsFilter==="past"),d(3),te("active",e.filterDate),d(2),ce("ngModel",e.filterDate),d(),x("ngIf",e.filterDate),d(),x("ngIf",e.isLoading),d(),x("ngIf",!e.isLoading),d(),x("ngIf",e.isLoadingMyBookings),d(),x("ngIf",e.myBookingsTotalPages>1&&!e.isLoadingMyBookings)}}function mE(n,t){if(n&1){let e=L();r(0,"button",276),S("click",function(){k(e);let o=h(2);return O(o.clearReceivedSlotsFilterDate())}),w(1,"i",241),a()}}function gE(n,t){n&1&&(we(0),w(1,"i",322),l(2," Ready to Play"),Pe())}function uE(n,t){n&1&&(we(0),w(1,"i",348),l(2," On Court"),Pe())}function fE(n,t){n&1&&(we(0),w(1,"i",349),l(2," Played"),Pe())}function hE(n,t){n&1&&(we(0),w(1,"i",350),l(2," No Show"),Pe())}function _E(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit,i=h(2);d(),F(" \u2013 ",i.formatTime12Hour(e.sessionEndTime),"")}}function xE(n,t){if(n&1&&(r(0,"div",200),w(1,"i",134),r(2,"span"),l(3),A(4,_E,2,1,"span",18),a()()),n&2){let e=h().$implicit,i=h(2);d(3),R(i.formatTime12Hour(e.sessionStartTime)),d(),x("ngIf",e.sessionEndTime)}}function vE(n,t){if(n&1&&(r(0,"div",201),w(1,"i",202),r(2,"span"),l(3),a()()),n&2){let e=h().$implicit;d(3),R(e.humanBookingId)}}function bE(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit;d(),F(" (originally ",e.originalPlayerName,")")}}function yE(n,t){if(n&1&&(we(0),w(1,"i",178),l(2," Transferred by "),r(3,"strong"),l(4),a(),A(5,bE,2,1,"span",18),Pe()),n&2){let e=h().$implicit;d(4),R(e.transferredBy),d(),x("ngIf",e.originalPlayerName)}}function CE(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit;d(),F(" \xB7 ",e.humanBookingId,"")}}function wE(n,t){if(n&1&&(w(0,"i",351),l(1," Booked by "),r(2,"strong"),l(3),a(),A(4,CE,2,1,"span",18)),n&2){let e=h().$implicit;d(3),R(e.bookedByName||e.humanBookingId),d(),x("ngIf",e.bookedByName&&e.humanBookingId)}}function PE(n,t){if(n&1&&(we(0),l(1),Pe()),n&2){let e=h(2).$implicit;d(),F(" \xB7 by ",e.scannedBy,"")}}function ME(n,t){if(n&1&&(r(0,"div",352),w(1,"i",353),l(2," Checked in at "),r(3,"strong"),l(4),a(),A(5,PE,2,1,"ng-container",18),a()),n&2){let e=h().$implicit,i=h(2);d(4),R(i.formatScanTime(e.scannedAt)),d(),x("ngIf",e.scannedBy)}}function SE(n,t){if(n&1){let e=L();r(0,"button",321),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.openReceivedSlotQrView(o))}),w(1,"i",322),l(2," View My QR Code "),a()}}function kE(n,t){if(n&1){let e=L();r(0,"button",153),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.promptCancelReceivedSlot(o))}),w(1,"i",154),l(2," Cancel Slot "),a()}if(n&2){let e=h().$implicit;te("btn-cancel-disabled",!e.transferredBy)}}function OE(n,t){if(n&1&&(r(0,"div",340)(1,"div",180)(2,"div",181),w(3,"i",277),r(4,"span"),l(5),a()(),r(6,"span",341),we(7,342),A(8,gE,3,0,"ng-container",343)(9,uE,3,0,"ng-container",343)(10,fE,3,0,"ng-container",343)(11,hE,3,0,"ng-container",343),Pe(),a()(),r(12,"div",183),A(13,xE,5,2,"div",184)(14,vE,4,1,"div",185),a(),r(15,"div",186)(16,"div",187)(17,"div",188)(18,"span",189),w(19,"i",344),l(20," Player"),a(),r(21,"span",191),l(22),a()()(),r(23,"div",345),A(24,yE,6,2,"ng-container",279)(25,wE,5,2,"ng-template",null,1,ln),a(),A(27,ME,6,2,"div",346),a(),r(28,"div",211),A(29,SE,3,0,"button",294)(30,kE,3,2,"button",347),a()()),n&2){let e=t.$implicit,i=Jt(26),o=h(2);d(5),R(o.formatSessionDate(e.sessionDate||"")),d(),te("badge-ready",e.status==="READY_TO_PLAY")("badge-playing",e.status==="PLAYING")("badge-played",e.status==="PLAYED")("badge-no-show",e.status==="NO_SHOW"),d(),x("ngSwitch",e.status),d(),x("ngSwitchCase","READY_TO_PLAY"),d(),x("ngSwitchCase","PLAYING"),d(),x("ngSwitchCase","PLAYED"),d(),x("ngSwitchCase","NO_SHOW"),d(2),x("ngIf",e.sessionStartTime),d(),x("ngIf",e.humanBookingId),d(8),R(e.playerName),d(2),x("ngIf",e.transferredBy)("ngIfElse",i),d(3),x("ngIf",e.scannedAt&&(e.status==="PLAYING"||e.status==="PLAYED")),d(2),x("ngIf",e.status==="READY_TO_PLAY"),d(),x("ngIf",o.canCancelReceivedSlot(e))}}function EE(n,t){n&1&&(r(0,"h3"),l(1,"No Received Slots"),a())}function TE(n,t){n&1&&(r(0,"h3"),l(1,"No Slots on This Date"),a())}function IE(n,t){if(n&1&&(r(0,"h3"),l(1),a()),n&2){let e=h(3);d(),F("No ",e.receivedSlotsFilter==="all"?"":e.receivedSlotsFilter," Slots")}}function AE(n,t){n&1&&(r(0,"p"),l(1,"No slots have been shared with you yet. When someone books you into a session or transfers a slot to you, it will appear here."),a())}function DE(n,t){if(n&1&&(r(0,"p"),l(1),_e(2,"date"),a()),n&2){let e=h(3);d(),F("You don't have any received slots on ",be(2,1,e.receivedSlotsFilterDate,"MMMM d, y"),".")}}function RE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any received slots for today."),a())}function BE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any upcoming received slots."),a())}function NE(n,t){n&1&&(r(0,"p"),l(1,"You don't have any past received slots."),a())}function VE(n,t){if(n&1){let e=L();r(0,"button",220),S("click",function(){k(e);let o=h(3);return O(o.clearReceivedSlotsFilterDate())}),l(1," Clear Filter "),a()}}function LE(n,t){if(n&1&&(r(0,"div",177),w(1,"i",327),A(2,EE,2,0,"h3",18)(3,TE,2,0,"h3",18)(4,IE,2,1,"h3",18)(5,AE,2,0,"p",18)(6,DE,3,4,"p",18)(7,RE,2,0,"p",18)(8,BE,2,0,"p",18)(9,NE,2,0,"p",18),r(10,"div",328),A(11,VE,2,0,"button",329),a()()),n&2){let e=h(2);
68d(2),x("ngIf",e.receivedSlots.length===0),d(),x("ngIf",e.receivedSlots.length>0&&e.receivedSlotsFilterDate),d(),x("ngIf",e.receivedSlots.length>0&&!e.receivedSlotsFilterDate),d(),x("ngIf",e.receivedSlots.length===0),d(),x("ngIf",e.receivedSlots.length>0&&e.receivedSlotsFilterDate),d(),x("ngIf",e.receivedSlots.length>0&&!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="today"),d(),x("ngIf",e.receivedSlots.length>0&&!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="upcoming"),d(),x("ngIf",e.receivedSlots.length>0&&!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="past"),d(2),x("ngIf",e.receivedSlotsFilterDate)}}function FE(n,t){if(n&1){let e=L();r(0,"div",171)(1,"div",172)(2,"h2"),w(3,"i",13),l(4," Received Slots"),a(),r(5,"p",6),l(6,"Slots that were booked for you or transferred to you"),a()(),r(7,"div",250)(8,"button",251),S("click",function(){k(e);let o=h();return O(o.setReceivedSlotsFilter("all"))}),w(9,"i",252),l(10," All "),r(11,"span",253),l(12),a()(),r(13,"button",251),S("click",function(){k(e);let o=h();return O(o.setReceivedSlotsFilter("today"))}),w(14,"i",254),l(15," Today "),a(),r(16,"button",251),S("click",function(){k(e);let o=h();return O(o.setReceivedSlotsFilter("upcoming"))}),w(17,"i",255),l(18," Upcoming "),a(),r(19,"button",251),S("click",function(){k(e);let o=h();return O(o.setReceivedSlotsFilter("past"))}),w(20,"i",256),l(21," Past "),a(),r(22,"div",257),w(23,"i",10),r(24,"input",258),pe("ngModelChange",function(o){k(e);let s=h();return de(s.receivedSlotsFilterDate,o)||(s.receivedSlotsFilterDate=o),O(o)}),S("change",function(){k(e);let o=h();return O(o.onReceivedSlotsFilterDateChange())}),a(),A(25,mE,2,0,"button",259),a()(),r(26,"div",174),A(27,OE,31,22,"div",339)(28,LE,12,9,"div",175),a()()}if(n&2){let e=h();d(8),te("active",!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="all"),d(4),R(e.receivedSlots.length),d(),te("active",!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="today"),d(3),te("active",!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="upcoming"),d(3),te("active",!e.receivedSlotsFilterDate&&e.receivedSlotsFilter==="past"),d(3),te("active",e.receivedSlotsFilterDate),d(2),ce("ngModel",e.receivedSlotsFilterDate),d(),x("ngIf",e.receivedSlotsFilterDate),d(2),x("ngForOf",e.filteredReceivedSlots),d(),x("ngIf",e.filteredReceivedSlots.length===0)}}function zE(n,t){n&1&&(r(0,"span",385),w(1,"i",351),a())}function UE(n,t){if(n&1&&w(0,"img",396),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)}}function jE(n,t){if(n&1&&(r(0,"div",397),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),F(" ",i.getPlayerInitials(e.fullname)," ")}}function HE(n,t){if(n&1){let e=L();r(0,"div",389),S("mousedown",function(){let o=k(e).$implicit,s=h(4);return O(s.selectPlayer(o))}),r(1,"div",390),A(2,UE,1,1,"img",391)(3,jE,2,1,"div",392),a(),r(4,"div",393)(5,"div",394),l(6),a(),r(7,"div",395),l(8),a()()()}if(n&2){let e=t.$implicit;d(2),x("ngIf",e.profilePictureUrl),d(),x("ngIf",!e.profilePictureUrl),d(3),R(e.fullname),d(2),R("@"+e.username)}}function WE(n,t){n&1&&(r(0,"div",398),l(1," No players found "),a())}function GE(n,t){if(n&1&&(r(0,"div",386),A(1,HE,9,4,"div",387)(2,WE,2,0,"div",388),a()),n&2){let e=h(3);d(),x("ngForOf",e.filteredPlayers),d(),x("ngIf",e.filteredPlayers.length===0)}}function qE(n,t){if(n&1){let e=L();r(0,"button",399),S("click",function(){k(e);let o=h(3);return O(o.assignSelfToFirstSlot())}),w(1,"i",400),l(2," Me "),a()}}function $E(n,t){if(n&1){let e=L();r(0,"button",401),S("click",function(){k(e);let o=h().index,s=h(2);return O(s.removeBookingPlayer(o))}),w(1,"i",241),a()}}function YE(n,t){if(n&1){let e=L();r(0,"div",377)(1,"div",378),l(2),a(),A(3,zE,2,0,"span",379),r(4,"div",380)(5,"input",381),pe("ngModelChange",function(o){let s=k(e).index,m=h(2);return de(m.bookingPlayerNames[s],o)||(m.bookingPlayerNames[s]=o),O(o)}),S("input",function(o){let s=k(e).index,m=h(2);return O(m.onPlayerNameInput(o.target.value,s))})("focus",function(){let o=k(e).index,s=h(2);return O(s.onPlayerInputFocus(o))})("blur",function(){k(e);let o=h(2);return O(o.closePlayerSuggestions())}),a(),A(6,GE,3,2,"div",382),a(),A(7,qE,3,0,"button",383)(8,$E,2,0,"button",384),a()}if(n&2){let e=t.index,i=h(2);d(2),R(e+1),d(),x("ngIf",i.bookingTaggedUserIds[e]),d(2),ce("ngModel",i.bookingPlayerNames[e]),x("placeholder",e===0?"Your name (auto-filled)":"Enter player name or type {{ '@' }} to tag"),d(),x("ngIf",i.showPlayerSuggestions&&i.activeInputIndex===e),d(),x("ngIf",e===0&&!i.isBookingForSelf),d(),x("ngIf",i.bookingPlayerNames.length>1)}}function XE(n,t){n&1&&(r(0,"p",402),w(1,"i",234),l(2," Discount applied \u2014 booking is for you only. "),a())}function ZE(n,t){if(n&1&&(r(0,"div",413)(1,"div",414)(2,"span"),l(3,"Credits available"),a(),r(4,"span"),l(5),a()(),r(6,"div",415)(7,"span"),l(8,"Applied to this booking"),a(),r(9,"span"),l(10),a()(),r(11,"div",416)(12,"span"),l(13,"Credits left after booking"),a(),r(14,"span"),l(15),a()()()),n&2){let e=h(3);d(5),R(e.availableCreditCount),d(5),F("\u2212",e.creditsToApply,""),d(5),R(e.availableCreditCount-e.creditsToApply)}}function QE(n,t){if(n&1&&(r(0,"div",417),w(1,"i",418),l(2),a()),n&2){let e=h(3);d(2),Se(" Fully covered by ",e.creditsToApply," credit",e.creditsToApply===1?"":"s"," \u2014 your booking is automatically verified. No new payment needed. ")}}function KE(n,t){if(n&1&&(r(0,"div",419),w(1,"i",146),l(2),a()),n&2){let e=h(3);d(2),A0(" ",e.creditsToApply," slot",e.creditsToApply===1?"":"s"," covered by credits \u2014 please pay for the remaining ",e.slotsToPay," slot",e.slotsToPay===1?"":"s"," and upload your receipt. ")}}function JE(n,t){if(n&1){let e=L();r(0,"div",403)(1,"div",404),w(2,"i",35),l(3," Rebooking Credits "),r(4,"span",405),l(5),a()(),r(6,"div",406)(7,"p",407),l(8," You have "),r(9,"strong"),l(10),a(),l(11),a(),r(12,"label",408)(13,"input",409),S("ngModelChange",function(o){k(e);let s=h(2);return O(s.onUseCreditsChange(o))}),a(),r(14,"span"),l(15,"Use my credits for this booking"),a()(),A(16,ZE,16,3,"div",410)(17,QE,3,2,"div",411)(18,KE,3,4,"div",412),a()()}if(n&2){let e=h(2);d(5),R(e.availableCreditCount),d(5),R(e.availableCreditCount),d(),F(" rebooking credit",e.availableCreditCount===1?"":"s"," from previous cancellations. Each credit covers one slot \u2014 they're applied automatically. Your original payment proof is carried over for covered slots. "),d(2),x("ngModel",e.useCredits),d(3),x("ngIf",e.creditsToApply>0),d(),x("ngIf",e.creditsToApply>0&&e.slotsToPay===0),d(),x("ngIf",e.creditsToApply>0&&e.slotsToPay>0)}}function e5(n,t){if(n&1&&(r(0,"option",431),l(1),a()),n&2){let e=t.$implicit;x("value",e.id),d(),ui(" ",e.name," \u2014 ",e.discountMode==="PERCENTAGE"?e.discountValue+"% off":"\u20B1"+e.discountValue+" off"," (",e.vatTreatment==="VAT_EXCLUSIVE"?"VAT-Exclusive, "+(e.vatRate||12)+"% VAT":"VAT-Inclusive",") ")}}function t5(n,t){if(n&1&&(r(0,"div",432),w(1,"i",418),r(2,"span"),l(3,"Your "),r(4,"strong"),l(5),a(),l(6," discount is verified \u2014 applied automatically."),a()()),n&2){let e,i=h(3);d(5),R((e=i.getDiscountEligibilityStatus(i.selectedDiscountTypeId))==null?null:e.discountTypeName)}}function n5(n,t){n&1&&(r(0,"div",433),w(1,"i",136),r(2,"span"),l(3,"Your ID is "),r(4,"strong"),l(5,"under review"),a(),l(6,". Discount will be applied tentatively pending admin a
68pproval."),a()())}function i5(n,t){if(n&1&&(r(0,"span",440),w(1,"i",441),l(2),a()),n&2){let e=h(4);d(2),F(" ",e.discountFiles.length," file(s) selected")}}function o5(n,t){n&1&&(r(0,"span",442),w(1,"i",309),l(2," ID proof required to enable booking"),a())}function r5(n,t){if(n&1){let e=L();r(0,"div",434)(1,"div",435),w(2,"i",436),r(3,"span"),l(4),a()(),r(5,"input",437),S("change",function(o){k(e);let s=h(3);return O(s.onDiscountFileChange(o))}),a(),A(6,i5,3,1,"span",438)(7,o5,3,0,"span",439),a()}if(n&2){let e,i=h(3);te("proof-missing",i.isDiscountProofNeeded),d(4),R(((e=i.getDiscountEligibilityStatus(i.selectedDiscountTypeId))==null?null:e.status)==="REJECTED"?"Previous ID was rejected \u2014 please re-upload your ID proof.":((e=i.getDiscountEligibilityStatus(i.selectedDiscountTypeId))==null?null:e.status)==="REVOKED"?"Discount eligibility was revoked \u2014 please re-upload your ID proof.":"First use: please upload your government-issued ID proof."),d(2),x("ngIf",i.discountFiles.length>0),d(),x("ngIf",i.isDiscountProofNeeded)}}function a5(n,t){if(n&1&&(we(0),w(1,"i",235),r(2,"span")(3,"strong"),l(4),a(),l(5," Both the VAT and the discount are subtracted from the gross price. Discount applies on the ex-VAT base only. "),a(),Pe()),n&2){let e=h(4);d(4),F("VAT-Exclusive (",e.selectedDiscountType.vatRate||12,"% VAT):")}}function s5(n,t){n&1&&(w(0,"i",235),r(1,"span")(2,"strong"),l(3,"VAT-Inclusive:"),a(),l(4," Only the discount is subtracted from the gross price."),a())}function l5(n,t){if(n&1&&(r(0,"div",443),A(1,a5,6,1,"ng-container",279)(2,s5,5,0,"ng-template",null,2,ln),a()),n&2){let e=Jt(3),i=h(3);d(),x("ngIf",i.selectedDiscountType.vatTreatment==="VAT_EXCLUSIVE")("ngIfElse",e)}}function c5(n,t){if(n&1){let e=L();r(0,"div",420)(1,"div",421),w(2,"i",422),l(3," Discount / Eligibility "),a(),r(4,"div",423)(5,"select",424),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.selectedDiscountTypeId,o)||(s.selectedDiscountTypeId=o),O(o)}),S("ngModelChange",function(o){k(e);let s=h(2);return O(s.onDiscountTypeChange(o))}),r(6,"option",425),l(7,"\u2014 No discount \u2014"),a(),A(8,e5,2,4,"option",426),a(),A(9,t5,7,1,"div",427)(10,n5,7,0,"div",428)(11,r5,8,5,"div",429)(12,l5,4,2,"div",430),a()()}if(n&2){let e,i,o,s=h(2);d(5),ce("ngModel",s.selectedDiscountTypeId),d(3),x("ngForOf",s.discountTypes),d(),x("ngIf",s.selectedDiscountTypeId&&((e=s.getDiscountEligibilityStatus(s.selectedDiscountTypeId))==null?null:e.status)==="VERIFIED"),d(),x("ngIf",s.selectedDiscountTypeId&&((i=s.getDiscountEligibilityStatus(s.selectedDiscountTypeId))==null?null:i.status)==="PENDING_VERIFICATION"),d(),x("ngIf",s.selectedDiscountTypeId&&(!s.getDiscountEligibilityStatus(s.selectedDiscountTypeId)||((o=s.getDiscountEligibilityStatus(s.selectedDiscountTypeId))==null?null:o.status)==="REJECTED"||((o=s.getDiscountEligibilityStatus(s.selectedDiscountTypeId))==null?null:o.status)==="REVOKED")),d(),x("ngIf",s.selectedDiscountTypeId&&s.selectedDiscountType)}}function d5(n,t){if(n&1&&(r(0,"div",446)(1,"span"),w(2,"i",422),l(3," Discount (on ex-VAT base)"),a(),r(4,"span",447),l(5),_e(6,"number"),a()()),n&2){let e=h(3);d(5),F("\u2212\u20B1",be(6,1,e.bookingPureDiscount,"1.2-2"),"")}}function p5(n,t){if(n&1&&(we(0),r(1,"div",444)(2,"span"),w(3,"i",235),l(4),a(),r(5,"span",445),l(6),_e(7,"number"),a()(),A(8,d5,7,4,"div",370),Pe()),n&2){let e=h(2);d(4),F(" VAT (",e.selectedDiscountType.vatRate||12,"%) removed:"),d(2),F("\u2212\u20B1",be(7,3,e.bookingVatDeduction,"1.2-2"),""),d(2),x("ngIf",e.bookingPureDiscount>0)}}function m5(n,t){if(n&1&&(r(0,"div",446)(1,"span"),w(2,"i",422),l(3," Discount"),a(),r(4,"span",447),l(5),_e(6,"number"),a()()),n&2){let e=h(2);d(5),F("\u2212\u20B1",be(6,1,e.bookingPureDiscount,"1.2-2"),"")}}function g5(n,t){if(n&1&&(r(0,"div",446)(1,"span"),w(2,"i",35),l(3),a(),r(4,"span",447),l(5),_e(6,"number"),a()()),n&2){let e=h(2);d(3),F(" Rebooking credits (",e.creditsToApply," \xD7 slot)"),d(2),F("\u2212\u20B1",be(6,2,e.bookingCreditAmount,"1.2-2"),"")}}function u5(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(3);d(),Se(" for the ",e.slotsToPay," slot",e.slotsToPay===1?"":"s"," not covered by credits")}}function f5(n,t){if(n&1&&(r(0,"pre",451),l(1),a()),n&2){let e=h(3);d(),R(e.courtConfig.paymentOptions)}}function h5(n,t){n&1&&(r(0,"p"),l(1,"Please contact the admin for payment details."),a())}function _5(n,t){if(n&1&&(r(0,"div",448)(1,"h4"),w(2,"i",234),l(3," Payment Instructions"),a(),r(4,"p"),l(5,"After booking, you'll have "),r(6,"strong"),l(7,"10 minutes"),a(),l(8," to upload your payment receipt"),A(9,u5,2,2,"span",18),l(10,"."),a(),r(11,"p"),l(12,"If no receipt is uploaded within 10 minutes, your booking will be "),r(13,"strong"),l(14,"automatically cancelled"),a(),l(15," and slots will be released."),a(),r(16,"div",449),A(17,f5,2,1,"pre",450)(18,h5,2,0,"p",18),a()()),n&2){let e=h(2);d(9),x("ngIf",e.creditsToApply>0),d(8),x("ngIf",e.courtConfig==null?null:e.courtConfig.paymentOptions),d(),x("ngIf",!(e.courtConfig!=null&&e.courtConfig.paymentOptions))}}function x5(n,t){if(n&1&&(r(0,"div",452),w(1,"i",312),r(2,"span"),l(3),a()()),n&2){let e=h(2);d(3),A0("Booking fully covered by ",e.creditsToApply," credit",e.creditsToApply===1?"":"s"," \u2014 your slot",e.creditsToApply===1?"":"s"," ",e.creditsToApply===1?"is":"are"," automatically confirmed. Your original payment proof from the previous booking will be attached.")}}function v5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",355),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",202),l(5," Book Slots"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeBookingModal())}),w(7,"i",241),a()(),r(8,"div",356)(9,"div",357)(10,"div",358),w(11,"i",10),r(12,"span"),l(13),a()(),r(14,"div",358),w(15,"i",134),r(16,"span"),l(1
687),a()(),r(18,"div",358),w(19,"i",275),r(20,"span"),l(21),a()()(),r(22,"div",359)(23,"h4"),l(24,"Players"),a(),r(25,"p",360),l(26,"First player is pre-filled with your name. Add more players as needed."),a(),r(27,"div",361),A(28,YE,9,7,"div",362),a(),r(29,"div",363)(30,"button",364),S("click",function(){k(e);let o=h();return O(o.addBookingPlayer())}),w(31,"i",156),l(32," Add Another Player "),a(),A(33,XE,3,0,"p",365),a()(),A(34,JE,19,7,"div",366)(35,c5,13,6,"div",367),r(36,"div",368)(37,"div",369)(38,"span"),l(39,"Players:"),a(),r(40,"span"),l(41),a()(),r(42,"div",369)(43,"span"),l(44,"Price per Person:"),a(),r(45,"span"),l(46),a()(),r(47,"div",369)(48,"span"),l(49,"Subtotal (Gross):"),a(),r(50,"span"),l(51),a()(),A(52,p5,9,6,"ng-container",18)(53,m5,7,4,"div",370)(54,g5,7,5,"div",370),r(55,"div",371)(56,"span"),l(57,"Total to Pay:"),a(),r(58,"span"),l(59),_e(60,"number"),a()()(),A(61,_5,19,3,"div",372)(62,x5,4,4,"div",373),a(),r(63,"div",374)(64,"button",375),S("click",function(){k(e);let o=h();return O(o.closeBookingModal())}),l(65,"Cancel"),a(),r(66,"button",376),S("click",function(){k(e);let o=h();return O(o.requestBookingConfirm())}),l(67),a()()()()}if(n&2){let e=h();d(13),R(e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.sessionType),d(4),Se("",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.startTime," - ",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.endTime,""),d(4),F("",e.getAvailableSlots(e.selectedSessionForBooking)," slots available"),d(7),x("ngForOf",e.bookingPlayerNames)("ngForTrackBy",e.trackByIndex),d(2),x("disabled",!!e.selectedDiscountTypeId)("title",e.selectedDiscountTypeId?"Discounts are personal \u2014 you can only book for yourself":""),d(3),x("ngIf",e.selectedDiscountTypeId),d(),x("ngIf",e.availableCreditCount>0),d(),x("ngIf",e.discountTypes.length>0&&e.isBookingForSelf&&e.creditsToApply===0),d(6),R(e.bookingPlayerNames.length),d(5),F("\u20B1",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.pricePerPerson,""),d(5),F("\u20B1",e.bookingOriginalCost,""),d(),x("ngIf",(e.selectedDiscountType==null?null:e.selectedDiscountType.vatTreatment)==="VAT_EXCLUSIVE"&&e.bookingVatDeduction>0),d(),x("ngIf",(e.selectedDiscountType==null?null:e.selectedDiscountType.vatTreatment)!=="VAT_EXCLUSIVE"&&e.bookingPureDiscount>0),d(),x("ngIf",e.creditsToApply>0),d(5),F("\u20B1",be(60,23,e.bookingTotalCost,"1.2-2"),""),d(2),x("ngIf",e.slotsToPay>0),d(),x("ngIf",e.creditsToApply>0&&e.slotsToPay===0),d(2),x("disabled",e.isBooking),d(2),x("disabled",e.isBooking||e.bookingPlayerNames.length===0||e.isDiscountProofNeeded),d(),F(" ",e.isBooking?"Booking...":"Confirm Booking"," ")}}function b5(n,t){if(n&1){let e=L();r(0,"div",453)(1,"div",454),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",455)(3,"div",456),w(4,"i",255),a(),r(5,"h3"),l(6,"Confirm Your Booking"),a()(),r(7,"div",457)(8,"div",458)(9,"div",459),w(10,"i",10),r(11,"div")(12,"span",460),l(13,"Date"),a(),r(14,"span",461),l(15),_e(16,"date"),a()()(),r(17,"div",459),w(18,"i",134),r(19,"div")(20,"span",460),l(21,"Time"),a(),r(22,"span",461),l(23),a()()(),r(24,"div",459),w(25,"i",462),r(26,"div")(27,"span",460),l(28,"Session"),a(),r(29,"span",461),l(30),a()()()(),r(31,"div",463)(32,"div",464),w(33,"i",465),a(),r(34,"div",466)(35,"p",467),l(36,"Please double-check your schedule"),a(),r(37,"p",468),l(38," Once booked, cancellations are "),r(39,"strong"),l(40,"no longer allowed within 12 hours"),a(),l(41," of the session. You may still "),r(42,"strong"),l(43,"transfer your slot"),a(),l(44," to another player during this period. Make sure the date and time shown above are correct before proceeding. "),a()()(),r(45,"p",469),l(46," By clicking "),r(47,"strong"),l(48,'"Yes, Book Now"'),a(),l(49,", you confirm that you have reviewed and agree to the session schedule above. "),a()(),r(50,"div",470)(51,"button",220),S("click",function(){k(e);let o=h();return O(o.showBookingConfirmDialog=!1)}),l(52,"Go Back"),a(),r(53,"button",376),S("click",function(){k(e);let o=h();return O(o.confirmBooking())}),w(54,"i",471),l(55," Yes, Book Now "),a()()()()}if(n&2){let e=h();d(15),R(be(16,5,e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.sessionDate,"EEEE, MMMM d, y")),d(8),Se("",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.startTime," \u2013 ",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.endTime,""),d(7),F("",e.selectedSessionForBooking==null?null:e.selectedSessionForBooking.sessionType," Session"),d(23),x("disabled",e.isBooking)}}function y5(n,t){n&1&&(r(0,"h3"),w(1,"i",148),l(2," Upload Payment Receipt"),a())}function C5(n,t){n&1&&(r(0,"h3"),w(1,"i",150),l(2," Replace Payment Receipt"),a())}function w5(n,t){if(n&1&&(r(0,"div",486)(1,"div",487),w(2,"i",488),l(3," Amount pending payment "),a(),r(4,"div",489),l(5),_e(6,"number"),a(),r(7,"div",490),l(8),a()()),n&2){let e=h(2);d(5),F(" \u20B1",be(6,2,e.selectedBookingForReceipt.totalAmount,"1.2-2")," "),d(3),F(" ",e.selectedBookingForReceipt.numberOfPlayers," player(s) \xB7 upload receipt to confirm your slot ")}}function P5(n,t){n&1&&(r(0,"p",491),w(1,"i",309),l(2," Your previous receipt(s) will be permanently deleted and replaced with the new files. "),a())}function M5(n,t){n&1&&(r(0,"p",492),w(1,"i",493),l(2," Upload before the timer expires or your booking will be cancelled. "),a())}function S5(n,t){n&1&&(r(0,"label",494),w(1,"i",495),l(2," Choose Files "),a())}function k5(n,t){if(n&1&&(r(0,"li")(1,"span",498),l(2),a(),r(3,"span",499),l(4),a()()),n&2){let e=t.$implicit,i=h(3);d(2),R(e.name),d(2),R(i.formatFileSize(e.size))}}function O5(n,t){if(n&1&&(r(0,"div",496)(1,"p")(2,"strong"),l(3,"Selected files:"),a()(),r(4,"ul"),A(5,k5,5,2,"li",42),a(),r(6,"p",497),l(7),a()()),n&2){let e=h(2);d(5),x("ngForOf",e.receiptFiles),d(),te("over-limit",e.isOverUploadLimit()),d(),F(" Total: ",e.formatFileSize(e.totalReceiptBytes())," of 50 MB ")}}function E5(n,t){if(n&1&&(r(0,"pre",451),l(1),a()),n&2){let e=h(2);d(),R(e.courtConfig.paymentOptions)}}function T5(n,t){n&1&&(r(0,"p"),l(1,"Please contact the admin for payment details."),a())}function I5(n,t){n&1&&(r(0,"span"),w(1,"i",436),l(2," Upload"),a())}function A5(n,t){n&1&&(r(0,"span"),w(1,"i",150),l(2," Replace"),a())}function D5(n,t){n&1&&(r(0,"span"),w(1,"i",136),l(2," Uploading..."),a())}function R5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",472),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239),A(3,y5,3,0,"h3",18)(4,C5,3,0,"h3",18),r(5,"button",240),S("click",function(){k(e);let o=h();return O(o.closeReceiptUpload())}),w(6,"i",241),a()(),r(7,"div",356),A(8,w5,9,5,"div",473)(9,P5,3,0,"p",474)(10,M5,3,0,"p",475),r(11,"div",476)(12,"div",477),w(13,"i",148),a(),r(14,"p",478),l(15,"Select your receipt image(s)"),a(),r(16,"p",479),l(17,"Supp
68orts JPG, PNG, PDF \xB7 up to 50MB total"),a(),r(18,"input",480),S("change",function(o){k(e);let s=h();return O(s.onReceiptFileChange(o))}),a(),A(19,S5,3,0,"label",481)(20,O5,8,4,"div",482),a(),r(21,"div",483)(22,"h4"),w(23,"i",484),l(24," Payment Details"),a(),A(25,E5,2,1,"pre",450)(26,T5,2,0,"p",18),a()(),r(27,"div",374)(28,"button",375),S("click",function(){k(e);let o=h();return O(o.closeReceiptUpload())}),l(29,"Cancel"),a(),r(30,"button",376),S("click",function(){k(e);let o=h();return O(o.uploadReceipt())}),A(31,I5,3,0,"span",18)(32,A5,3,0,"span",18)(33,D5,3,0,"span",18),a()(),r(34,"p",485),l(35),a()()()}if(n&2){let e=h();d(3),x("ngIf",!e.isReplacingReceipt),d(),x("ngIf",e.isReplacingReceipt),d(4),x("ngIf",e.selectedBookingForReceipt),d(),x("ngIf",e.isReplacingReceipt),d(),x("ngIf",!e.isReplacingReceipt&&(e.selectedBookingForReceipt==null?null:e.selectedBookingForReceipt.paymentDeadline)),d(9),x("ngIf",!e.isUploadingReceipt),d(),x("ngIf",e.receiptFiles.length>0),d(5),x("ngIf",e.courtConfig==null?null:e.courtConfig.paymentOptions),d(),x("ngIf",!(e.courtConfig!=null&&e.courtConfig.paymentOptions)),d(2),x("disabled",e.isUploadingReceipt),d(2),x("disabled",e.isUploadingReceipt||e.receiptFiles.length===0),d(),x("ngIf",!e.isUploadingReceipt&&!e.isReplacingReceipt),d(),x("ngIf",!e.isUploadingReceipt&&e.isReplacingReceipt),d(),x("ngIf",e.isUploadingReceipt),d(2),F("Version ",e.appVersion,"")}}function B5(n,t){if(n&1&&(r(0,"div",503)(1,"span"),l(2,"Original Amount:"),a(),r(3,"strong"),l(4),_e(5,"number"),a()()),n&2){let e=h(3);d(4),F("\u20B1",be(5,1,e.selectedBookingForView.originalAmount||e.selectedBookingForView.totalAmount,"1.2-2"),"")}}function N5(n,t){if(n&1&&(r(0,"div",507)(1,"span"),w(2,"i",35),l(3," Credit Applied:"),a(),r(4,"strong"),l(5),_e(6,"number"),a()()),n&2){let e=h(3);d(5),ui("\u2212",e.selectedBookingForView.creditsApplied||1," credit",(e.selectedBookingForView.creditsApplied||1)===1?"":"s"," (\u20B1",be(6,3,e.selectedBookingForView.creditAmount||0,"1.2-2"),")")}}function V5(n,t){if(n&1&&(r(0,"div",503)(1,"span"),w(2,"i",508),l(3),a(),r(4,"strong"),l(5),_e(6,"number"),a()()),n&2){let e=h(3);d(3),F(" ",(e.selectedBookingForView.discountType==null?null:e.selectedBookingForView.discountType.name)||"Discount",":"),d(2),F("\u2212\u20B1",be(6,2,e.selectedBookingForView.discountAmount,"1.2-2"),"")}}function L5(n,t){n&1&&(r(0,"div",523)(1,"div",524)(2,"span",525),l(3,"Loading..."),a()(),r(4,"p"),l(5,"Loading receipt..."),a()())}function F5(n,t){if(n&1){let e=L();r(0,"div",510)(1,"div",511)(2,"span"),l(3),a(),r(4,"div",512)(5,"button",513),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoomReceipt(o,-.25))}),w(6,"i",514),a(),r(7,"span",515),l(8),a(),r(9,"button",516),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoomReceipt(o,.25))}),w(10,"i",517),a(),r(11,"button",518),S("click",function(){let o=k(e).index,s=h(4);return O(s.resetReceiptZoom(o))}),w(12,"i",519),a()()(),r(13,"div",520),S("mousedown",function(o){let s=k(e).index,m=h(4);return O(m.getReceiptZoom(s)>1&&m.onReceiptDragStart(o))})("mousemove",function(o){k(e);let s=h(4);return O(s.onReceiptDragMove(o))})("mouseup",function(o){k(e);let s=h(4);return O(s.onReceiptDragEnd(o))})("mouseleave",function(o){k(e);let s=h(4);return O(s.onReceiptDragEnd(o))})("touchstart",function(o){let s=k(e).index,m=h(4);return O(m.getReceiptZoom(s)>1&&m.onReceiptTouchStart(o))})("touchmove",function(o){k(e);let s=h(4);return O(s.onReceiptTouchMove(o))})("touchend",function(){k(e);let o=h(4);return O(o.onReceiptTouchEnd())}),A(14,L5,6,0,"div",521),r(15,"img",522),S("load",function(){let o=k(e).index,s=h(4);return O(s.onReceiptImageLoad(o))})("error",function(){let o=k(e).index,s=h(4);return O(s.onReceiptImageError(o))}),a()()()}if(n&2){let e=t.$implicit,i=t.index,o=h(4);d(3),Se("Receipt ",i+1," of ",o.getReceiptUrls(o.selectedBookingForView).length,""),d(2),x("disabled",o.getReceiptZoom(i)<=.5),d(3),F("",(o.getReceiptZoom(i)*100).toFixed(0),"%"),d(),x("disabled",o.getReceiptZoom(i)>=3),d(2),x("disabled",o.getReceiptZoom(i)===1),d(2),te("zoomed",o.getReceiptZoom(i)>1),d(),x("ngIf",o.isReceiptImageLoading(i)),d(),le("transform","scale("+o.getReceiptZoom(i)+")")("transform-origin","top center"),te("loading",o.isReceiptImageLoading(i)),Kt("alt","Payment Receipt ",i+1,""),x("src",e,Ie)}}function z5(n,t){if(n&1&&(r(0,"div"),A(1,F5,16,18,"div",509),a()),n&2){let e=h(3);d(),x("ngForOf",e.getReceiptUrls(e.selectedBookingForView))}}function U5(n,t){n&1&&(r(0,"div",526),w(1,"i",236),r(2,"p"),l(3,"No receipt uploaded"),a()())}function j5(n,t){if(n&1&&(r(0,"div",356)(1,"div",502)(2,"div",503)(3,"span"),l(4,"Booked By:"),a(),r(5,"strong"),l(6),a()(),r(7,"div",503)(8,"span"),l(9,"Booking Date:"),a(),r(10,"strong"),l(11),a()(),r(12,"div",503)(13,"span"),l(14,"Players:"),a(),r(15,"strong"),l(16),a()(),A(17,B5,6,4,"div",504)(18,N5,7,6,"div",505)(19,V5,7,5,"div",504),r(20,"div",503)(21,"span"),l(22),a(),r(23,"strong"),l(24),_e(25,"number"),a()(),r(26,"div",503)(27,"span"),l(28,"Status:"),a(),r(29,"strong"),l(30),a()()(),r(31,"div",506),A(32,z5,2,1,"div",279)(33,U5,4,0,"ng-template",null,3,ln),a()()),n&2){let e=Jt(34),i=h(2);d(6),R(i.selectedBookingForView.fullname),d(5),R(i.formatBookingDateTime(i.selectedBookingForView.bookingDateTime)),d(5),R(i.selectedBookingForView.numberOfPlayers),d(),x("ngIf",(i.selectedBookingForView.creditsApplied||0)>0||i.selectedBookingForView.creditId),d(),x("ngIf",(i.selectedBookingForView.creditsApplied||0)>0||i.selectedBookingForView.creditId),d(),x("ngIf",i.selectedBookingForView.discountAmount&&i.selectedBookingForView.discountAmount>0),d(3),F("Amount",(i.selectedBookingForView.creditsApplied||0)>0||i.selectedBookingForView.creditId?" to Pay":"",":"),d(2),F("\u20B1",be(25,13,i.selectedBookingForView.totalAmount,"1.2-2"),""),d(5),Qt(i.getStatusClass(i.selectedBookingForView.status)),d(),R(i.getStatusLabel(i.selectedBookingForView.status)),d(2),x("ngIf",i.getReceiptUrls(i.selectedBookingForView).length>0)("ngIfElse",e)}}function H5(n,t){if(n&1){let e=L();r(0,"button",527),S("click",function(){k(e);let o=h(2);return O(o.verifyPaymentFromModal(o.selectedBookingForView.id))}),w(1,"i",312),l(2," Verify Payment "),a()}}function W5(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeReceiptView())}),r(1,"div",238),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",235),l(5," Payment Receipt"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeReceiptView())}),w(7,"i",241),a()(),A(8,j5,35,16,"div",500),r(9,"div",374)(10,"button",220),S("click",function(){k(e);let o=h();return O(o.closeReceiptView())}),l(11,"Close"),a(),A(12,H5,3,0,"button",501),a()()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedBookingForView),d(4),x("ngIf",e.currentUserRole.toLowerCase()==="admin"&&(e.selectedBookingForView==null?null:e.selectedBookingForView.status)==="PENDING_PAYMENT")}}function G5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",528),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",422),l(5," Discount Applied"),a()(),r(6,"div",356)(7,"p"),l(8,"Since you are applying a discount, you can only book for "),r(9,"strong"),l(10,"yourself"),a(),l(11,". Discounts are personal and cannot be used for other players."),a(),r(12,"p",529),l(13,"To book for additional players, please remove the discount first."),a()(),r(14,"div",374)(15,"button",330),S("click",function(){k(e);let o=h();return O(o.closeDiscountPlayerLimitDialog())}),l(16,"Got it"),a()()()()}}function q5(n,t){n&1&&(r(0,"span"),w(1,"i",136),l(2," Saving..."),a())}function $5(n,t){n&1&&(r(0,"span"),w(1,"i",213),l(2," Save & Continue"),a())}function Y5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",530),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",531),l(5," Set Up Your Pickleball Profile"),a()(),r(6,"div",356)(7,"p",532),l(8," Before booking, let us know your skill level so we can match you with the right players. "),a(),r(9,"div",533)(10,"label",534),l(11,"Sport"),a(),w(12,"input",535),a(),r(13,"div",533)(14,"label",534),l(15," Skill Level "),r(16,"span",536),l(17,"*"),a()(),r(18,"select",537),pe("ngModelChange",function(o){k(e);let s=h();return de(s.sportProfileForm.level,o)||(s.sportProfileForm.level=o),O(o)}),r(19,"option",538),l(20,"Beginner"),a(),r(21,"option",539),l(22,"Intermediate"),a(),r(23,"option",540),l(24,"Advanced"),a(),r(25,"option",541),l(26,"Pro"),a()()(),r(27,"div",542)(28,"label",534),l(29," DUPR Rating "),r(30,"span",543),l(31,"(optional)"),a()(),r(32,"input",544),pe("ngModelChange",function(o){k(e);let s=h();return de(s.sportProfileForm.duprRating,o)||(s.sportProfileForm.duprRating=o
68),O(o)}),a()()(),r(33,"div",545)(34,"button",375),S("click",function(){k(e);let o=h();return O(o.closeSportsProfileRequiredModal())}),l(35,"Cancel"),a(),r(36,"button",376),S("click",function(){k(e);let o=h();return O(o.saveSportProfileAndBook())}),A(37,q5,3,0,"span",18)(38,$5,3,0,"span",18),a()()()()}if(n&2){let e=h();d(18),ce("ngModel",e.sportProfileForm.level),d(14),ce("ngModel",e.sportProfileForm.duprRating),d(2),x("disabled",e.isSavingSportProfile),d(2),x("disabled",e.isSavingSportProfile),d(),x("ngIf",e.isSavingSportProfile),d(),x("ngIf",!e.isSavingSportProfile)}}function X5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",528),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",493),l(5," Warning"),a()(),r(6,"div",356)(7,"p"),l(8),a()(),r(9,"div",374)(10,"button",330),S("click",function(){k(e);let o=h();return O(o.closeWarningDialog())}),l(11,"OK"),a()()()()}if(n&2){let e=h();d(8),R(e.warningMessage)}}function Z5(n,t){if(n&1){let e=L();r(0,"div",354)(1,"div",546),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),l(4,"Are you sure?"),a(),r(5,"button",240),S("click",function(){k(e);let o=h();return O(o.cancelCloseModal())}),w(6,"i",241),a()(),r(7,"div",356)(8,"p"),l(9,"You have unsaved changes. Are you sure you want to close?"),a()(),r(10,"div",374)(11,"button",220),S("click",function(){k(e);let o=h();return O(o.cancelCloseModal())}),l(12,"Keep Editing"),a(),r(13,"button",330),S("click",function(){k(e);let o=h();return O(o.confirmCloseModal())}),l(14,"Yes, Close"),a()()()()}}function Q5(n,t){n&1&&(r(0,"div",553),w(1,"i",146),r(2,"div")(3,"p",554)(4,"strong"),l(5,"Keep your payment receipt"),a()(),r(6,"p",555),l(7," You can simply "),r(8,"strong"),l(9,"reattach the same payment receipt"),a(),l(10," when you make your next booking \u2014 no refund needed. "),a()()())}function K5(n,t){n&1&&(r(0,"div",556),w(1,"i",35),r(2,"span"),l(3,"This booking was fully covered by rebooking credits \u2014 your credits will be returned to your account."),a()())}function J5(n,t){if(n&1&&(r(0,"p",557)(1,"strong"),l(2),a(),l(3),_e(4,"number"),a()),n&2){let e=h(2);d(2),F("",e.bookingToCancel.numberOfPlayers," player(s)"),d(),F(" \xB7 \u20B1",be(4,2,e.bookingToCancel.totalAmount,"1.2-2")," ")}}function eT(n,t){if(n&1){let e=L();r(0,"div",547)(1,"div",546),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",548),l(5," Cancel Booking?"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeCancelConfirm())}),w(7,"i",241),a()(),r(8,"div",356)(9,"p"),l(10,"Are you sure you want to cancel this booking? This action cannot be undone."),a(),A(11,Q5,11,0,"div",549)(12,K5,4,0,"div",550)(13,J5,5,5,"p",551),a(),r(14,"div",374)(15,"button",220),S("click",function(){k(e);let o=h();return O(o.closeCancelConfirm())}),l(16,"Keep Booking"),a(),r(17,"button",552),S("click",function(){k(e);let o=h();return O(o.executeCancelBooking())}),l(18,"Yes, Cancel Booking"),a()()()()}if(n&2){let e=h();d(11),x("ngIf",((e.bookingToCancel==null?null:e.bookingToCancel.status)==="PAYMENT_VERIFIED"||(e.bookingToCancel==null?null:e.bookingToCancel.status)==="PENDING_PAYMENT"&&(e.bookingToCancel==null?null:e.bookingToCancel.paymentProofUrl))&&((e.bookingToCancel==null?null:e.bookingToCancel.totalAmount)||0)>0),d(),x("ngIf",((e.bookingToCancel==null?null:e.bookingToCancel.status)==="PAYMENT_VERIFIED"||(e.bookingToCancel==null?null:e.bookingToCancel.status)==="PENDING_PAYMENT"&&(e.bookingToCancel==null?null:e.bookingToCancel.paymentProofUrl))&&((e.bookingToCancel==null?null:e.bookingToCancel.totalAmount)||0)===0),d(),x("ngIf",e.bookingToCancel),d(4),x("disabled",e.isCancelBlocked())}}function tT(n,t){if(n&1){let e=L();we(0),r(1,"div",560),w(2,"i",561),a(),r(3,"h3",562),l(4,"Get Notified"),a(),r(5,"p",563),l(6," Mark yourself as "),r(7,"strong"),l(8,"Interested"),a(),l(9," and we'll send you an email the moment a slot opens up in this session. "),a(),r(10,"p",564),w(11,"i",234),l(12," Slots are first-come, first-served \u2014 you'll still need to book once notified. "),a(),r(13,"div",565)(14,"button",566),S("click",function(){k(e);let o=h(2);return O(o.confirmFollow())}),w(15,"i",567),l(16," Notify Me "),a(),r(17,"button",568),S("click",function(){k(e);let o=h(2);return O(o.closeFollowModal())}),l(18,"Maybe Later"),a()(),Pe()}}function nT(n,t){if(n&1){let e=L();we(0),r(1,"div",569),w(2,"i",567),a(),r(3,"h3",562),l(4,"You're Interested"),a(),r(5,"p",563),l(6," You're on the notification list for this session. We'll email you if a slot opens up. "),a(),r(7,"div",565)(8,"button",570),S("click",function(){k(e);let o=h(2);return O(o.confirmUnfollow())}
68),w(9,"i",571),l(10," Remove Interest "),a(),r(11,"button",568),S("click",function(){k(e);let o=h(2);return O(o.closeFollowModal())}),l(12,"Keep Interest"),a()(),Pe()}}function iT(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeFollowModal())}),r(1,"div",558),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"button",559),S("click",function(){k(e);let o=h();return O(o.closeFollowModal())}),w(3,"i",215),a(),A(4,tT,19,0,"ng-container",18)(5,nT,13,0,"ng-container",18),a()()}if(n&2){let e=h();d(4),x("ngIf",e.followModalSession&&!e.isFollowing(e.followModalSession)),d(),x("ngIf",e.followModalSession&&e.isFollowing(e.followModalSession))}}function oT(n,t){if(n&1&&(r(0,"p",579),l(1),a()),n&2){let e=h(2);d(),ui(" ",e.formatSessionDate(e.selectedSessionForPlayers.sessionDate)," \xB7 ",e.formatTime12Hour(e.selectedSessionForPlayers.startTime)," - ",e.formatTime12Hour(e.selectedSessionForPlayers.endTime)," ")}}function rT(n,t){n&1&&(r(0,"div",580)(1,"div",581),w(2,"div",332),r(3,"p"),l(4,"Loading players..."),a()()())}function aT(n,t){if(n&1&&(r(0,"div",600),w(1,"i",567),r(2,"div")(3,"span",584),l(4),a(),r(5,"span",585),l(6,"Interested"),a()()()),n&2){let e=h(3);d(4),R(e.activeFollowers.length)}}function sT(n,t){if(n&1){let e=L();r(0,"button",601),S("click",function(){k(e);let o=h(3);return O(o.playerSearchQuery="")}),w(1,"i",241),a()}}function lT(n,t){if(n&1&&(r(0,"div",602)(1,"div",603),w(2,"i",349),a(),r(3,"div",604)(4,"span",605),l(5),a(),r(6,"span",606),l(7),a()()()),n&2){let e=t.$implicit,i=h(3);le("border-color",i.getSkillLevelColor(e)),d(),le("background",i.getSkillLevelColor(e)),d(4),R(i.getSkillLevelCounts(i.selectedSessionForPlayers)[e]),d(2),R(e)}}function cT(n,t){if(n&1&&(r(0,"div",611)(1,"div",612),w(2,"i",348),a(),r(3,"div",604)(4,"span",605),l(5),a(),r(6,"span",606),l(7,"Playing"),a()()()),n&2){let e=h(2).ngIf;d(5),Se("",e.onCourt,"/",e.total,"")}}function dT(n,t){if(n&1&&(r(0,"div",613)(1,"div",614),w(2,"i",351),a(),r(3,"div",604)(4,"span",605),l(5),a(),r(6,"span",606),l(7,"Ready to Play"),a()()()),n&2){let e=h(2).ngIf;d(5),R(e.readyToPlay)}}function pT(n,t){if(n&1&&(r(0,"div",615)(1,"div",616),w(2,"i",349),a(),r(3,"div",604)(4,"span",605),l(5),a(),r(6,"span",606),l(7,"Played"),a()()()),n&2){let e=h(2).ngIf;d(5),Se("",e.played,"/",e.total,"")}}function mT(n,t){if(n&1&&(r(0,"div",593)(1,"h4",594),w(2,"i",531),l(3," Court Status"),a(),r(4,"div",596),A(5,cT,8,2,"div",608)(6,dT,8,1,"div",609)(7,pT,8,2,"div",610),a()()),n&2){let e=h().ngIf;d(5),x("ngIf",e.onCourt>0),d(),x("ngIf",e.readyToPlay>0),d(),x("ngIf",e.played>0)}}function gT(n,t){if(n&1&&(we(0),A(1,mT,8,3,"div",607),Pe()),n&2){let e=t.ngIf;d(),x("ngIf",e.onCourt>0||e.readyToPlay>0||e.played>0)}}function uT(n,t){if(n&1&&(we(0),A(1,gT,2,1,"ng-container",18),Pe()),n&2){let e=h(3);d(),x("ngIf",e.getPlayerStatusCounts(e.selectedSessionForPlayers))}}function fT(n,t){if(n&1&&(r(0,"p",622),l(1),a()),n&2){let e=h(4);d(),F(' No confirmed players match "',e.playerSearchQuery,'" ')}}function hT(n,t){if(n&1&&(r(0,"span",634),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),R(i.getPlayerInitials(e.name))}}function _T(n,t){if(n&1&&w(0,"img",635),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)("alt",e.name)}}function xT(n,t){n&1&&w(0,"i",636)}function vT(n,t){n&1&&(r(0,"span",637),w(1,"i",348),l(2," Playing "),a())}function bT(n,t){n&1&&(r(0,"span",638),w(1,"i",322),l(2," Ready to Play "),a())}function yT(n,t){n&1&&(r(0,"span",639),w(1,"i",349),l(2," Played "),a())}function CT(n,t){if(n&1&&(r(0,"span",640),w(1,"i",134),l(2),a()),n&2){let e=h().$implicit,i=h(4);d(2),F(" ",i.formatScanTime(e.scannedAt)," ")}}function wT(n,t){if(n&1&&(r(0,"span",641),l(1),a()),n&2){let e=h().$implicit;d(),F("",e.bookedBy," +1")}}function PT(n,t){if(n&1&&(r(0,"span",645),l(1),a()),n&2){let e=h(2).$implicit;d(),R(e.duprRating)}}function MT(n,t){if(n&1&&(r(0,"span",646),l(1),a()),n&2){let e=h(2).$implicit,i=h(4);le("background",i.getSkillLevelColor(e.skillLevel)),d(),F(" ",e.skillLevel.charAt(0)," ")}}function ST(n,t){if(n&1&&(r(0,"div",642),A(1,PT,2,1,"span",643)(2,MT,2,3,"span",644),a()),n&2){let e=h().$implicit;d(),x("ngIf",e.duprRating),d(),x("ngIf",e.skillLevel)}}function kT(n,t){if(n&1){let e=L();r(0,"div",623),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openPlayerProfile(o))}),A(1,hT,2,1,"span",624)(2,_T,1,2,"img",625)(3,xT,1,0,"i",626)(4,vT,3,0,"span",627)(5,bT,3,0,"span",628)(6,yT,3,0,"span",629),r(7,"span",630),l(8),a(),A(9,CT,3,1,"span",631)(10,wT,2,1,"span",632)(11,ST,3,2,"div",633),a()}if(n&2){let e=t.$implicit;te("is-owner",e.isBookingOwner)("is-guest",!e.isBookingOwner)("is-playing",e.qrStatus==="PLAYING"),x("title",e.name+(e.isBookingOwner?" (Booking Owner)":e.isRegistered?" (Registered Player \u2014 booked by "+e.bookedBy+")":" (Guest of "+e.bookedBy+")")),d(),x("ngIf",!e.profilePictureUrl),d(),x("ngIf",e.profilePictureUrl),d(),x("ngIf",!e.isRegistered),d(),x("ngIf",e.qrStatus==="PLAYING"),d(),x("ngIf",e.qrStatus==="READY_TO_PLAY"),d(),x("ngIf",e.qrStatus==="PLAYED"),d(2),R(e.name),d(),x("ngIf",e.scannedAt&&(e.qrStatus==="PLAYING"||e.qrStatus==="PLAYED")),d(),x("ngIf",!e.isBookingOwner),d(),x("ngIf",e.isBookingOwner)}}function OT(n,t){if(n&1&&(r(0,"div",617)(1,"h3",618),w(2,"i",312),l(3),a(),A(4,fT,2,1,"p",619),r(5,"div",620),A(6,kT,12,17,"div",621),a()()),n&2){let e=h(3);d(3),F(" Confirmed Players (",e.getAllVerifiedPlayersExpanded(e.selectedSessionForPlayers
68).length,") "),d(),x("ngIf",e.playerSearchQuery&&e.getFilteredVerifiedPlayers(e.selectedSessionForPlayers).length===0),d(2),x("ngForOf",e.getFilteredVerifiedPlayers(e.selectedSessionForPlayers))("ngForTrackBy",e.trackByPlayerKey)}}function ET(n,t){if(n&1&&(r(0,"p",622),l(1),a()),n&2){let e=h(4);d(),F(' No awaiting-verification players match "',e.playerSearchQuery,'" ')}}function TT(n,t){if(n&1&&(r(0,"span",634),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),R(i.getPlayerInitials(e.name))}}function IT(n,t){if(n&1&&w(0,"img",635),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)("alt",e.name)}}function AT(n,t){n&1&&w(0,"i",636)}function DT(n,t){if(n&1){let e=L();r(0,"i",652),S("click",function(o){k(e);let s=h().$implicit,m=h(4);return m.openReceiptView(m.getSelectedPlayerBookingById(s.bookingId)),O(o.stopPropagation())}),a()}}function RT(n,t){if(n&1&&(r(0,"span",641),l(1),a()),n&2){let e=h().$implicit;d(),F("",e.bookedBy," +1")}}function BT(n,t){if(n&1&&(r(0,"span",645),l(1),a()),n&2){let e=h(2).$implicit;d(),R(e.duprRating)}}function NT(n,t){if(n&1&&(r(0,"span",646),l(1),a()),n&2){let e=h(2).$implicit,i=h(4);le("background",i.getSkillLevelColor(e.skillLevel)),d(),F(" ",e.skillLevel.charAt(0)," ")}}function VT(n,t){if(n&1&&(r(0,"div",642),A(1,BT,2,1,"span",643)(2,NT,2,3,"span",644),a()),n&2){let e=h().$implicit;d(),x("ngIf",e.duprRating),d(),x("ngIf",e.skillLevel)}}function LT(n,t){if(n&1){let e=L();r(0,"div",650),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openPlayerProfile(o))}),A(1,TT,2,1,"span",624)(2,IT,1,2,"img",625)(3,AT,1,0,"i",626)(4,DT,1,0,"i",651),r(5,"span",630),l(6),a(),A(7,RT,2,1,"span",632)(8,VT,3,2,"div",633),a()}if(n&2){let e=t.$implicit,i=h(4);te("is-owner",e.isBookingOwner)("is-guest",!e.isBookingOwner),x("title",e.name+(e.isBookingOwner?" (Booking Owner)":" (Guest of "+e.bookedBy+")")),d(),x("ngIf",!e.profilePictureUrl),d(),x("ngIf",e.profilePictureUrl),d(),x("ngIf",!e.isBookingOwner),d(),x("ngIf",i.currentUserRole.toLowerCase()==="admin"),d(2),R(e.name),d(),x("ngIf",!e.isBookingOwner),d(),x("ngIf",e.isBookingOwner)}}function FT(n,t){if(n&1&&(r(0,"div",617)(1,"h3",647),w(2,"i",14),l(3),a(),r(4,"p",648),l(5,"Receipt submitted \u2014 waiting for admin to verify payment."),a(),A(6,ET,2,1,"p",619),r(7,"div",620),A(8,LT,9,12,"div",649),a()()),n&2){let e=h(3);d(3),F(" Awaiting Verification (",e.getAwaitingVerificationPlayers(e.selectedSessionForPlayers).length,") "),d(3),x("ngIf",e.playerSearchQuery&&e.getFilteredAwaitingVerificationPlayers(e.selectedSessionForPlayers).length===0),d(2),x("ngForOf",e.getFilteredAwaitingVerificationPlayers(e.selectedSessionForPlayers))("ngForTrackBy",e.trackByPlayerKey)}}function zT(n,t){if(n&1&&(r(0,"p",622),l(1),a()),n&2){let e=h(4);d(),F(' No pending players match "',e.playerSearchQuery,'" ')}}function UT(n,t){if(n&1&&(r(0,"span",634),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),R(i.getPlayerInitials(e.name))}}function jT(n,t){if(n&1&&w(0,"img",635),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)("alt",e.name)}}function HT(n,t){n&1&&w(0,"i",636)}function WT(n,t){if(n&1&&(r(0,"span",641),l(1),a()),n&2){let e=h().$implicit;d(),F("",e.bookedBy," +1")}}function GT(n,t){if(n&1&&(r(0,"span",645),l(1),a()),n&2){let e=h(2).$implicit;d(),R(e.duprRating)}}function qT(n,t){if(n&1&&(r(0,"span",646),l(1),a()),n&2){let e=h(2).$implicit,i=h(4);le("background",i.getSkillLevelColor(e.skillLevel)),d(),F(" ",e.skillLevel.charAt(0)," ")}}function $T(n,t){if(n&1&&(r(0,"div",642),A(1,GT,2,1,"span",643)(2,qT,2,3,"span",644),a()),n&2){let e=h().$implicit;d(),x("ngIf",e.duprRating),d(),x("ngIf",e.skillLevel)}}function YT(n,t){if(n&1){let e=L();r(0,"div",655),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openPlayerProfile(o))}),A(1,UT,2,1,"span",624)(2,jT,1,2,"img",625)(3,HT,1,0,"i",626),r(4,"span",630),l(5),a(),A(6,WT,2,1,"span",632)(7,$T,3,2,"div",633),a()}if(n&2){let e=t.$implicit;te("is-owner",e.isBookingOwner)("is-guest",!e.isBookingOwner),x("title",e.name+(e.isBookingOwner?" (Booking Owner)":" (Guest of "+e.bookedBy+")")),d(),x("ngIf",!e.profilePictureUrl),d(),x("ngIf",e.profilePictureUrl),d(),x("ngIf",!e.isBookingOwner),d(2),R(e.name),d(),x("ngIf",!e.isBookingOwner),d(),x("ngIf",e.isBookingOwner)}}function XT(n,t){if(n&1&&(r(0,"div",617)(1,"h3",653),w(2,"i",136),l(3),a(),r(4,"p",648),l(5,"Booked but receipt not yet uploaded."),a(),A(6,zT,2,1,"p",619),r(7,"div",620),A(8,YT,8,11,"div",654),a()()),n&2){let e=h(3);d(3),F(" Pending Payment (",e.getPendingNoReceiptPlayers(e.selectedSessionForPlayers
68).length,") "),d(3),x("ngIf",e.playerSearchQuery&&e.getFilteredPendingPlayers(e.selectedSessionForPlayers).length===0),d(2),x("ngForOf",e.getFilteredPendingPlayers(e.selectedSessionForPlayers))("ngForTrackBy",e.trackByPlayerKey)}}function ZT(n,t){if(n&1&&(r(0,"span",634),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),R(i.getPlayerInitials(e.name))}}function QT(n,t){if(n&1&&w(0,"img",635),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)("alt",e.name)}}function KT(n,t){if(n&1){let e=L();r(0,"i",652),S("click",function(o){k(e);let s=h().$implicit,m=h(4);return m.openReceiptView(m.getSelectedPlayerBookingById(s.bookingId)),O(o.stopPropagation())}),a()}}function JT(n,t){if(n&1&&(r(0,"span",641),l(1),a()),n&2){let e=h().$implicit;d(),F("",e.bookedBy," +1")}}function e8(n,t){if(n&1){let e=L();r(0,"div",658),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openPlayerProfile(o))}),A(1,ZT,2,1,"span",624)(2,QT,1,2,"img",625)(3,KT,1,0,"i",651),r(4,"span",630),l(5),a(),A(6,JT,2,1,"span",632),a()}if(n&2){let e=t.$implicit,i=h(4);te("is-owner",e.isBookingOwner)("is-guest",!e.isBookingOwner),x("title",e.name+(e.cancellationReason?" \u2014 "+e.cancellationReason:"")),d(),x("ngIf",!e.profilePictureUrl),d(),x("ngIf",e.profilePictureUrl),d(),x("ngIf",i.currentUserRole.toLowerCase()==="admin"&&e.paymentProofUrl),d(2),R(e.name),d(),x("ngIf",!e.isBookingOwner)}}function t8(n,t){if(n&1&&(r(0,"div",617)(1,"h3",656),w(2,"i",206),l(3),a(),r(4,"p",648),l(5,"These players were confirmed but cancelled their booking."),a(),r(6,"div",620),A(7,e8,7,10,"div",657),a()()),n&2){let e=h(3);d(3),F(" Can't Go (",e.getAllCancelledConfirmedPlayersExpanded(e.selectedSessionForPlayers).length,") "),d(4),x("ngForOf",e.getFilteredCancelledPlayers(e.selectedSessionForPlayers))("ngForTrackBy",e.trackByPlayerKey)}}function n8(n,t){if(n&1&&(r(0,"span",634),l(1),a()),n&2){let e=h().$implicit,i=h(4);d(),R(i.getPlayerInitials(e.fullname))}}function i8(n,t){if(n&1&&w(0,"img",635),n&2){let e=h().$implicit,i=h(4);x("src",i.getProfilePictureUrl(e.profilePictureUrl),Ie)("alt",e.fullname)}}function o8(n,t){if(n&1){let e=L();r(0,"div",661),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openFollowerProfile(o))}),A(1,n8,2,1,"span",624)(2,i8,1,2,"img",625),r(3,"span",630),l(4),a()()}if(n&2){let e=t.$implicit;x("title",e.fullname),d(),x("ngIf",!e.profilePictureUrl),d(),x("ngIf",e.profilePictureUrl),d(2),R(e.fullname)}}function r8(n,t){if(n&1&&(r(0,"div",617)(1,"h3",659),w(2,"i",567),l(3),a(),r(4,"p",648),l(5,"These players want to join if a slot opens up."),a(),r(6,"div",620),A(7,o8,5,4,"div",660),a()()),n&2){let e=h(3);d(3),F(" Interested (",e.activeFollowers.length,") "),d(4),x("ngForOf",e.activeFollowers)}}function a8(n,t){n&1&&(r(0,"div",662),w(1,"i",275),r(2,"h3"),l(3,"No Players Yet"),a(),r(4,"p"),l(5,"Be the first to join this session!"),a()())}function s8(n,t){if(n&1){let e=L();r(0,"div",580)(1,"div",582)(2,"div",583),w(3,"i",418),r(4,"div")(5,"span",584),l(6),a(),r(7,"span",585),l(8,"Confirmed"),a()()(),r(9,"div",586),w(10,"i",136),r(11,"div")(12,"span",584),l(13),a(),r(14,"span",585),l(15,"Pending"),a()()(),r(16,"div",587),w(17,"i",275),r(18,"div")(19,"span",584),l(20),a(),r(21,"span",585),l(22,"Total Players"),a()()(),A(23,aT,7,1,"div",588),a(),r(24,"div",589),w(25,"i",590),r(26,"input",591),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.playerSearchQuery,o)||(s.playerSearchQuery=o),O(o)}),a(),A(27,sT,2,0,"button",592),a(),r(28,"div",593)(29,"h4",594),w(30,"i",595),l(31," Skill Level Breakdown"),a(),r(32,"div",596),A(33,lT,8,6,"div",597),a()(),A(34,uT,2,1,"ng-container",18)(35,OT,7,4,"div",598)(36,FT,9,4,"div",598)(37,XT,9,4,"div",598)(38,t8,8,3,"div",598)(39,r8,8,2,"div",598)(40,a8,6,0,"div",599),a()}if(n&2){let e=h(2);d(6),R(e.getAllVerifiedPlayersExpanded(e.selectedSessionForPlayers).length),d(7),R(e.getAllPendingPlayersExpanded(e.selectedSessionForPlayers).length),d(7),Se("",e.getCurrentPlayers(e.selectedSessionForPlayers),"/",e.selectedSessionForPlayers.maxPlayers,""),d(3),x("ngIf",e.activeFollowers.length>0),d(3),ce("ngModel",e.playerSearchQuery),d(),x("ngIf",e.playerSearchQuery),d(6),x("ngForOf",ji(15,Yk)),d(),x("ngIf",e.sessionQrPlayers.length>0),d(),x("ngIf",e.getAllVerifiedPlayersExpanded(e.selectedSessionForPlayers
68).length>0),d(),x("ngIf",e.getAwaitingVerificationPlayers(e.selectedSessionForPlayers).length>0),d(),x("ngIf",e.getPendingNoReceiptPlayers(e.selectedSessionForPlayers).length>0),d(),x("ngIf",e.getAllCancelledConfirmedPlayersExpanded(e.selectedSessionForPlayers).length>0),d(),x("ngIf",e.activeFollowers.length>0),d(),x("ngIf",e.getAllVerifiedPlayersExpanded(e.selectedSessionForPlayers).length===0&&e.getAllPendingPlayersExpanded(e.selectedSessionForPlayers).length===0)}}function l8(n,t){if(n&1){let e=L();r(0,"div",572),S("click",function(){k(e);let o=h();return O(o.closePlayersModal())}),r(1,"div",573),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",574)(3,"div",575),w(4,"i",89),r(5,"div")(6,"h2"),l(7,"Session Players"),a(),A(8,oT,2,3,"p",576),a()(),r(9,"button",577),S("click",function(){k(e);let o=h();return O(o.closePlayersModal())}),w(10,"i",215),a()(),A(11,rT,5,0,"div",578)(12,s8,41,16,"div",578),a()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedSessionForPlayers),d(3),x("ngIf",e.isLoadingSessionPlayers),d(),x("ngIf",!e.isLoadingSessionPlayers&&e.selectedSessionForPlayers)}}function c8(n,t){if(n&1&&w(0,"img",683),n&2){let e=h(3);x("src",e.getProfilePictureUrl(e.selectedPlayerProfile.profilePictureUrl||(e.fullUserProfile==null?null:e.fullUserProfile.profilePictureUrl)),Ie)("alt",e.selectedPlayerProfile.name)}}function d8(n,t){if(n&1&&(r(0,"div",684),l(1),a()),n&2){let e=h(3);d(),F(" ",e.getPlayerInitials(e.selectedPlayerProfile.name)," ")}}function p8(n,t){if(n&1&&(r(0,"p",685),l(1),a()),n&2){let e=h(3);d(),R("@"+e.selectedPlayerProfile.username)}}function m8(n,t){n&1&&(r(0,"span",686),w(1,"i",567),l(2," Interested "),a())}function g8(n,t){if(n&1&&(r(0,"span",687),w(1,"i",52),l(2),a()),n&2){let e=h(3);te("owner",e.selectedPlayerProfile.isBookingOwner)("registered",!e.selectedPlayerProfile.isBookingOwner&&e.selectedPlayerProfile.isRegistered)("guest",!e.selectedPlayerProfile.isRegistered),d(),te("bi-person-fill",e.selectedPlayerProfile.isBookingOwner)("bi-person-check-fill",!e.selectedPlayerProfile.isBookingOwner&&e.selectedPlayerProfile.isRegistered)("bi-person-badge-fill",!e.selectedPlayerProfile.isRegistered),d(),F(" ",e.selectedPlayerProfile.isBookingOwner?"Booking Owner":e.selectedPlayerProfile.isRegistered?"Registered Player":"Guest"," ")}}function u8(n,t){if(n&1&&(r(0,"span",688),l(1),a()),n&2){let e=h(3);d(),F(" Booked by ",e.selectedPlayerProfile.bookedBy," ")}}function f8(n,t){n&1&&(r(0,"div",581),w(1,"div",689),r(2,"p"),l(3,"Loading profile details..."),a()())}function h8(n,t){if(n&1&&(r(0,"div",690)(1,"p"),l(2),a()()),n&2){let e=h(3);d(2),R(e.fullUserProfile.bio)}}function _8(n,t){if(n&1&&(r(0,"div",703),w(1,"i",704),l(2),a()),n&2){let e=h().$implicit;d(2),F(" DUPR: ",e.duprRating," ")}}function x8(n,t){if(n&1&&(r(0,"div",705)(1,"span",706),l(2,"Notes:"),a(),l(3),a()),n&2){let e=h().$implicit;d(3),F(" ",e.remarks," ")}}function v8(n,t){if(n&1&&(r(0,"div",707)(1,"span",706),l(2,"Achievements:"),a(),l(3),a()),n&2){let e=h().$implicit;d(3),F(" ",e.achievements," ")}}function b8(n,t){if(n&1&&(r(0,"div",696)(1,"div",697)(2,"span",698),l(3),a(),r(4,"span",699),l(5),a()(),A(6,_8,3,1,"div",700)(7,x8,4,1,"div",701)(8,v8,4,1,"div",702),a()),n&2){let e=t.$implicit,i=h(4);d(3),R(e.sport),d(),x("ngClass",i.getSportLevelClass(e.level)),d(),R(e.level),d(),x("ngIf",e.sport==="Pickleball"&&e.duprRating),d(),x("ngIf",e.remarks),d(),x("ngIf",e.achievements)}}function y8(n,t){if(n&1&&(r(0,"div",691)(1,"h4",692),w(2,"i",693),l(3," Sports"),a(),r(4,"div",694),A(5,b8,9,6,"div",695),a()()),n&2){let e=h(3);d(5),x("ngForOf",e.getParsedSportsProfiles())}}function C8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",711),r(2,"div",712)(3,"span",585),l(4,"Playing Style"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.fullUserProfile.playingStyle)}}function w8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",714),r(2,"div",712)(3,"span",585),l(4,"Preferred Position"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.fullUserProfile.preferredPosition)}}function P8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",715),r(2,"div",712)(3,"span",585),l(4,"Years of Experience"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),Se("",e.fullUserProfile.yearsExperience," ",e.fullUserProfile.yearsExperience
68===1?"year":"years","")}}function M8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",315),r(2,"div",712)(3,"span",585),l(4,"Preferred Time"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.fullUserProfile.preferredTimeSlot)}}function S8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",716),r(2,"div",712)(3,"span",585),l(4,"Games Played"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.fullUserProfile.gamesPlayed)}}function k8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",269),r(2,"div",712)(3,"span",585),l(4,"Games Won"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),Se("",e.fullUserProfile.gamesWon," (",e.getWinRate(e.fullUserProfile),"%)")}}function O8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",717),r(2,"div",712)(3,"span",585),l(4,"Total Sessions"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.fullUserProfile.bookingCount)}}function E8(n,t){if(n&1&&(r(0,"div",710),w(1,"i",14),r(2,"div",712)(3,"span",585),l(4,"Playing Since"),a(),r(5,"span",713),l(6),a()()()),n&2){let e=h(4);d(6),R(e.formatMemberSinceDate(e.fullUserProfile.createdAt))}}function T8(n,t){if(n&1&&(r(0,"div",708),A(1,C8,7,1,"div",709)(2,w8,7,1,"div",709)(3,P8,7,2,"div",709)(4,M8,7,1,"div",709)(5,S8,7,1,"div",709)(6,k8,7,2,"div",709)(7,O8,7,1,"div",709)(8,E8,7,1,"div",709),a()),n&2){let e=h(3);d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.playingStyle),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.preferredPosition),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.yearsExperience),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.preferredTimeSlot),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.gamesPlayed),d(),x("ngIf",(e.fullUserProfile==null?null:e.fullUserProfile.gamesWon)!==void 0&&(e.fullUserProfile==null?null:e.fullUserProfile.gamesPlayed)),d(),x("ngIf",(e.fullUserProfile==null?null:e.fullUserProfile.bookingCount)!==void 0),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.createdAt)}}function I8(n,t){if(n&1&&(r(0,"div",718)(1,"h4"),w(2,"i",719),l(3," Achievements"),a(),r(4,"p"),l(5),a()()),n&2){let e=h(3);d(5),R(e.fullUserProfile.achievements)}}function A8(n,t){n&1&&(r(0,"div",720),w(1,"i",234),r(2,"p"),l(3,"This player is a guest and doesn't have a registered account. Stats are not available for guest players."),a()())}function D8(n,t){if(n&1){let e=L();r(0,"button",320),S("click",function(){k(e);let o=h().ngIf,s=h(3);return O(s.openReceiptFromProfile(o))}),w(1,"i",235),l(2," View Receipt "),a()}}function R8(n,t){n&1&&(r(0,"span",723),w(1,"i",136),l(2," No receipt uploaded "),a())}function B8(n,t){if(n&1&&(we(0),r(1,"div",721),A(2,D8,3,0,"button",293)(3,R8,3,0,"span",722),a(),Pe()),n&2){let e=t.ngIf;d(2),x("ngIf",e.paymentProofUrl),d(),x("ngIf",!e.paymentProofUrl)}}function N8(n,t){if(n&1&&(r(0,"div",666)(1,"div",667),A(2,c8,1,2,"img",668)(3,d8,2,1,"div",669),a(),r(4,"div",670)(5,"h2",671),l(6),a(),A(7,p8,2,1,"p",672),r(8,"div",673),A(9,m8,3,0,"span",674)(10,g8,3,13,"span",675)(11,u8,2,1,"span",676),a(),A(12,f8,4,0,"div",677)(13,h8,3,1,"div",678)(14,y8,6,1,"div",679)(15,T8,9,8,"div",680)(16,I8,6,1,"div",681)(17,A8,4,0,"div",682)(18,B8,4,2,"ng-container",18),a()()),n&2){let e=h(2);d(2),x("ngIf",e.selectedPlayerProfile.profilePictureUrl||(e.fullUserProfile==null?null:e.fullUserProfile.profilePictureUrl)),d(),x("ngIf",!e.selectedPlayerProfile.profilePictureUrl&&!(e.fullUserProfile!=null&&e.fullUserProfile.profilePictureUrl)),d(3),R(e.selectedPlayerProfile.name),d(),x("ngIf",e.selectedPlayerProfile.username),d(2),x("ngIf",e.selectedPlayerProfile.isFollower),d(),x("ngIf",!e.selectedPlayerProfile.isFollower),d(),x("ngIf",!e.selectedPlayerProfile.isFollower&&!e.selectedPlayerProfile.isBookingOwner&&e.selectedPlayerProfile.bookedBy),d(),x("ngIf",e.isLoadingUserProfile),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.bio),d(),x("ngIf",e.selectedPlayerProfile.isRegistered&&!e.isLoadingUserProfile&&e.getParsedSportsProfiles().length>0),d(),x("ngIf",e.selectedPlayerProfile.isRegistered&&!e.isLoadingUserProfile),d(),x("ngIf",e.fullUserProfile==null?null:e.fullUserProfile.achievements),d(),x("ngIf",!e.selectedPlayerProfile.isBookingOwner&&!e.selectedPlayerProfile.isRegistered),d(),x("ngIf",e.currentUserRole.toLowerCase()==="admin"&&e.getSelectedPlayerBooking())}}function V8(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closePlayerProfile())}),r(1,"div",663),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",664)(3,"h3"),l(4,"Player Profile"),a(),r(5,"button",240),S("click",function(){k(e);let o=h();return O(o.closePlayerProfile())}),w(6,"i",215),a()(),A(7,N8,19,14,"div",665),a()()}if(n&2){let e=h();d(7),x("ngIf",e.selectedPlayerProfile)}}function L8(n,t){n&1&&(r(0,"div",730),w(1,"div",63),r(2,"p"),l(3,"Generating QR codes..."),a()())}function F8(n,t){n&1&&(r(0,"div",731),w(1,"i",165),r(2,"p"),l(3,"No QR codes found for this booking."),a(),r(4,"small"),l(5,"Try closing and reopening this dialog. If the issue persists, contact the admin."),a()())}function z8(n,t){n&1&&(r(0,"span",748),w(1,"i",322),l(2," Ready to Play "),a())}function U8(n,t){n&1&&(r(0,"span",749),w(1,"i",348),l(2," On Court "),a())}function j8(n,t){n&1&&(r(0,"span",750),w(1,"i",349),l(2," Played "),a())}function H8(n,t){n&1&&(r(0,"span",751),w(1,"i",350),l(2," No Show "),a())}function W8(n,t){n&1&&(r(0,"span",752),w(1,"i",312),l(2," Checked In "),a())}function G8(n,t){if(n&1&&w(0,"img",758),n&2){let e=h(2).$implicit,i=h(3);Kt("alt","QR Code for ",e.playerName,""),x("src",i.getPlayerQrImage(e.id),Ie)}}function q8(n,t){n&1&&(r(0,"div",759),w(1,"div",760),a())}function $8(n,t){if(n&1){let e=L();r(0,"button",761),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.downloadQrCode(o))}),w(1,"i",762),l(2," Save QR Code "),a()}}function Y8(n,t){if(n&1){let e=L();r(0,"button",326),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.openTransferModal(o,s.selectedBookingForQr.id))}),w(1,"i",178),l(2," Transfer Slot "),a()}}function X8(n,t){if(n&1){let e=L();r(0,"div",763)(1,"span"),w(2,"i",136),l(3," Transfer pending..."),a(),r(4,"button",764),S("click",function(){k(e);let o=h(2).$implicit,s=h(3);return O(s.cancelPendingTransferForPlayer(o))}),l(5,"Cancel"),a()()}}function Z8(n,t){n&1&&(r(0,"div",763)(1,"span"),w(2,"i",136),l(3," Transfer pending for this slot..."),a()())}function Q8(n,t){if(n&1&&(r(0,"div",753),A(1,G8,1,3,"img",754)(2,q8,2,0,"div",755)(3,$8,3,0,"button",756)(4,Y8,3,0,"button",325)(5,X8,6,0,"div",757)(6,Z8,4,0,"div",757),a()),n&2){let e=h().$implicit,i=h(3);d(),x("ngIf",i.getPlayerQrImage(e.id)),d(),x("ngIf",!i.getPlayerQrImage(e.id)),d(),x("ngIf",i.getPlayerQrImage(e.id)),d(),x("ngIf",e.userId===i.currentUserId&&!e.hasPendingTransfer&&!i.hasSessionStarted(i.selectedBookingForQr)),d(),x("ngIf",e.hasPendingTransfer&&e.userId===i.currentUserId),d(),x("ngIf",e.hasPendingTransfer&&e.userId!==i.currentUserId)}}function K8(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(2).$implicit;d(),F(" (originally ",e.originalPlayerName,")")}}function J8(n,t){if(n&1&&(r(0,"div",765),w(1,"i",178),l(2," Transferred by "),r(3,"strong"),l(4),a(),A(5,K8,2,1,"span",18),w(6,"br"),r(7,"small"),l(8),_e(9,"date"),a()()),n&2){let e=h().$implicit;d(4),R(e.transferredBy),d(),x("ngIf",e.originalPlayerName),d(3),R(be(9,3,e.transferredAt,"MMM d, y h:mm a"))}}function eI(n,t){if(n&1&&(we(0),l(1),Pe()),n&2){let e=h(3).$implicit;d(),F(" \xB7 by ",e.scannedBy,"")}}function tI(n,t){if(n&1&&(r(0,"small",768),w(1,"i",134),l(2),A(3,eI,2,1,"ng-container",18),a()),n&2){let e=h(2).$implicit,i=h(3);d(2),F(" ",i.formatScanTime(e.scannedAt)," "),d(),x("ngIf",e.scannedBy)}}function nI(n,t){if(n&1&&(r(0,"div",766),w(1,"i",471),r(2,"p"),l(3,"Checked in \u2014 now on court"),a(),A(4,tI,4,2,"small",767),a()),n&2){let e=h().$implicit;d(4),x("ngIf",e.scannedAt)}}function iI(n,t){if(n&1&&(r(0,"small",768),w(1,"i",134),l(2),a()),n&2){let e=h(2).$implicit,i=h(3);d(2),F(" Checked in at ",i.formatScanTime(e.scannedAt)," ")}}function oI(n,t){if(n&1&&(r(0,"div",769),w(1,"i",349),r(2,"p"),l(3,"Session complete \u2014 great game!"),a(),A(4,iI,3,1,"small",767),a()),n&2){let e=h().$implicit;d(4),x("ngIf",e.scannedAt)}}function rI(n,t){n&1&&(r(0,"div",770),w(1,"i",771),r(2,"p"),l(3,"Did not check in for this session."),a()())}function aI(n,t){if(n&1&&(r(0,"div",734)(1,"div",735)(2,"div",736)(3,"span",737),l(4),a(),A(5,z8,3,0,"span",738)(6,U8,3,0,"span",739)(7,j8,3,0,"span",740)(8,H8,3,0,"span",741),a(),A(9,W8,3,0,"span",742),a(),A(10,Q8,7,6,"div",743)(11,J8,10,6,"div",744)(12,nI,5,1,"div",745)(13,oI,5,1,"div",746)(14,rI,4,0,"div",747),a()),n&2){let e=t.$implicit;d(4),R(e.playerName),d(),x("ngIf",e.status==="READY_TO_PLAY"),d(),x("ngIf",e.status==="PLAYING"),d(),x("ngIf",e.status==="PLAYED"),d(),x("ngIf",e.status==="NO_SHOW"),d(),x("ngIf",e.scanned),d(),x("ngIf",e.status==="READY_TO_PLAY"),d(),x("ngIf",e.transferredBy),d(),x("ngIf",e.status==="PLAYING"),d(),x("ngIf",e.status==="PLAYED"),d(),x("ngIf",e.status==="NO_SHOW")}}function sI(n,t){if(n&1&&(r(0,"div",732),A(1,aI,15,11,"div",733),a()),n&2){let e=h(2);
68d(),x("ngForOf",e.bookingPlayers)}}function lI(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeQrModal())}),r(1,"div",724),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",322),l(5," Entry QR Codes"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeQrModal())}),w(7,"i",241),a()(),r(8,"div",356)(9,"div",725),w(10,"i",726),r(11,"span"),l(12,"Keep these QR codes confidential \u2014 each one grants entry to the session and can only be used once."),a()(),A(13,L8,4,0,"div",727)(14,F8,6,0,"div",728)(15,sI,2,1,"div",729),a(),r(16,"div",374)(17,"button",220),S("click",function(){k(e);let o=h();return O(o.closeQrModal())}),l(18,"Close"),a()()()()}if(n&2){let e=h();d(13),x("ngIf",e.isLoadingQrCodes),d(),x("ngIf",!e.isLoadingQrCodes&&e.bookingPlayers.length===0),d(),x("ngIf",!e.isLoadingQrCodes&&e.bookingPlayers.length>0)}}function cI(n,t){n&1&&(r(0,"span",748),w(1,"i",322),l(2," Ready to Play "),a())}function dI(n,t){n&1&&(r(0,"div",730),w(1,"div",63),r(2,"p"),l(3,"Generating QR code..."),a()())}function pI(n,t){if(n&1&&w(0,"img",775),n&2){let e=h(4);x("src",e.receivedSlotQrImage,Ie)}}function mI(n,t){n&1&&(r(0,"div",731),w(1,"i",165),r(2,"p"),l(3,"QR code unavailable."),a()())}function gI(n,t){if(n&1){let e=L();r(0,"button",776),S("click",function(){k(e);let o=h(4);return O(o.downloadReceivedSlotQr(o.selectedReceivedSlot))}),w(1,"i",762),l(2," Save QR Code "),a()}}function uI(n,t){if(n&1){let e=L();r(0,"button",326),S("click",function(){k(e);let o=h(4);return O(o.openTransferFromReceivedSlot())}),w(1,"i",178),l(2," Transfer Slot "),a()}}function fI(n,t){if(n&1&&(r(0,"div",753),A(1,pI,1,1,"img",773)(2,mI,4,0,"div",728)(3,gI,3,0,"button",774)(4,uI,3,0,"button",325),a()),n&2){let e=h(3);d(),x("ngIf",e.receivedSlotQrImage),d(),x("ngIf",!e.receivedSlotQrImage),d(),x("ngIf",e.receivedSlotQrImage),d(),x("ngIf",e.selectedReceivedSlot.userId===e.currentUserId&&!e.selectedReceivedSlot.hasPendingTransfer&&!e.hasSessionStarted(e.selectedReceivedSlot))}}function hI(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(4);d(),F(" (originally ",e.selectedReceivedSlot.originalPlayerName,")")}}function _I(n,t){if(n&1&&(r(0,"div",765),w(1,"i",178),l(2," Transferred by "),r(3,"strong"),l(4),a(),A(5,hI,2,1,"span",18),a()),n&2){let e=h(3);d(4),R(e.selectedReceivedSlot.transferredBy),d(),x("ngIf",e.selectedReceivedSlot.originalPlayerName)}}function xI(n,t){if(n&1&&(r(0,"div",356)(1,"div",725),w(2,"i",726),r(3,"span"),l(4,"Keep this QR code confidential \u2014 it grants your entry to the session and can only be used once."),a()(),r(5,"div",734)(6,"div",735)(7,"div",736)(8,"span",737),l(9),a(),A(10,cI,3,0,"span",738),a()(),A(11,dI,4,0,"div",727)(12,fI,5,4,"div",743)(13,_I,6,2,"div",744),a()()),n&2){let e=h(2);d(9),R(e.selectedReceivedSlot.playerName),d(),x("ngIf",e.selectedReceivedSlot.status==="READY_TO_PLAY"),d(),x("ngIf",e.isLoadingReceivedSlotQr),d(),x("ngIf",!e.isLoadingReceivedSlotQr),d(),x("ngIf",e.selectedReceivedSlot.transferredBy)}}function vI(n,t){if(n&1){let e=L();r(0,"button",219),S("click",function(){k(e);let o=h(2);return O(o.promptCancelReceivedSlot(o.selectedReceivedSlot))}),w(1,"i",154),l(2," Cancel Slot "),a()}}function bI(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeReceivedSlotQrModal())}),r(1,"div",724),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",322),l(5," Your Entry QR Code"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeReceivedSlotQrModal())}),w(7,"i",241),a()(),A(8,xI,14,5,"div",500),r(9,"div",374),A(10,vI,3,0,"button",772),r(11,"button",220),S("click",function(){k(e);let o=h();return O(o.closeReceivedSlotQrModal())}),l(12,"Close"),a()()()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedReceivedSlot),d(2),x("ngIf",e.selectedReceivedSlot&&e.canCancelReceivedSlot(e.selectedReceivedSlot))}}function yI(n,t){n&1&&(r(0,"span",789),w(1,"i",136),a())}function CI(n,t){if(n&1){let e=L();r(0,"button",792),S("mousedown",function(){let o=k(e).$implicit,s=h(3);return O(s.selectTransferUser(o))}),r(1,"div",793),l(2),a(),r(3,"div",794),l(4),a()()}if(n&2){let e=t.$implicit;d(2),R(e.fullname),d(2),F("@",e.username,"")}}function wI(n,t){if(n&1&&(r(0,"div",790),A(1,CI,5,2,"button",791),a()),n&2){let e=h(2);d(),x("ngForOf",e.transferSearchResults)}}function PI(n,t){if(n&1){let e=L();r(0,"div",795)(1,"span",796),w(2,"i",797),l(3),r(4,"button",798),S("click",function(){k(e);let o=h(2);return o.transferSelectedUser=null,O(o.transferInputValue="")}
68),l(5,"\xD7"),a()()()}if(n&2){let e=h(2);d(3),Se(" ",e.transferSelectedUser.fullname," (@",e.transferSelectedUser.username,") ")}}function MI(n,t){n&1&&(r(0,"span"),w(1,"i",136),a())}function SI(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeTransferModal())}),r(1,"div",777),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",178),l(5," Transfer Slot"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeTransferModal())}),w(7,"i",241),a()(),r(8,"div",356)(9,"div",778)(10,"strong"),l(11,"Transferring slot for:"),a(),l(12),a(),r(13,"div",779)(14,"label",780),l(15,"Transfer to"),a(),r(16,"div",781)(17,"input",782),S("input",function(o){k(e);let s=h();return O(s.onTransferSearch(o))})("focus",function(){k(e);let o=h();return O(o.onTransferInputFocus())}),a(),A(18,yI,2,0,"span",783)(19,wI,2,1,"div",784),a(),A(20,PI,6,2,"div",785),a(),r(21,"div",779)(22,"label",780),l(23,"Note (optional)"),a(),r(24,"textarea",786),pe("ngModelChange",function(o){k(e);let s=h();return de(s.transferNote,o)||(s.transferNote=o),O(o)}),a()(),r(25,"div",787),w(26,"i",234),r(27,"span"),l(28,"The receiving player must "),r(29,"strong"),l(30,"accept"),a(),l(31," this transfer. A new QR code will be generated for them and your original QR will be invalidated."),a()()(),r(32,"div",374)(33,"button",220),S("click",function(){k(e);let o=h();return O(o.closeTransferModal())}),l(34,"Cancel"),a(),r(35,"button",788),S("click",function(){k(e);let o=h();return O(o.submitTransfer())}),A(36,MI,2,0,"span",18),l(37," Send Transfer Request "),a()()()()}if(n&2){let e=h();d(12),F(" ",e.transferPlayerRecord==null?null:e.transferPlayerRecord.playerName," "),d(5),x("value",e.transferInputValue),d(),x("ngIf",e.transferSearching),d(),x("ngIf",e.transferSearchResults.length>0),d(),x("ngIf",e.transferSelectedUser),d(4),ce("ngModel",e.transferNote),d(11),x("disabled",!e.transferSelectedUser||e.transferSubmitting),d(),x("ngIf",e.transferSubmitting)}}function kI(n,t){n&1&&(r(0,"div",802),w(1,"i",327),r(2,"p"),l(3,"No pending transfer requests."),a()())}function OI(n,t){if(n&1&&(r(0,"div",814),w(1,"i",204),r(2,"strong"),l(3,"Note:"),a(),l(4),a()),n&2){let e=h().$implicit;d(4),F(" ",e.transferNote," ")}}function EI(n,t){if(n&1){let e=L();r(0,"div",815)(1,"button",212),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.acceptTransfer(o))}),w(2,"i",213),l(3," Accept "),a(),r(4,"button",214),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.initiateRejectTransfer(o))}),w(5,"i",215),l(6," Reject "),a()()}}function TI(n,t){if(n&1){let e=L();r(0,"div",816)(1,"textarea",217),pe("ngModelChange",function(o){k(e);let s=h(3);return de(s.rejectReason,o)||(s.rejectReason=o),O(o)}),a(),r(2,"div",218)(3,"button",219),S("click",function(){k(e);let o=h(3);return O(o.confirmRejectTransfer())}),l(4," Confirm Reject "),a(),r(5,"button",220),S("click",function(){k(e);let o=h(3);return o.showRejectReasonInput=!1,O(o.respondingToTransfer=null)}),l(6," Cancel "),a()()()}if(n&2){let e=h(3);d(),ce("ngModel",e.rejectReason)}}function II(n,t){if(n&1&&(r(0,"div",803)(1,"div",804)(2,"div",805)(3,"div",806),w(4,"i",807),l(5),r(6,"span",198),l(7),a()(),r(8,"div",808),w(9,"i",10),l(10),a(),r(11,"div",808),w(12,"i",809),l(13),a(),r(14,"div",808),w(15,"i",190),l(16),a()(),r(17,"span",810),l(18,"Pending"),a()(),A(19,OI,5,1,"div",811)(20,EI,7,0,"div",812)(21,TI,7,1,"div",813),a()),n&2){let e=t.$implicit,i=h(2);d(5),F(" From: ",e.fromFullname," "),d(2),F(" (@",e.fromUsername,")"),d(3),ui(" ",e.sessionDate," | ",e.sessionStartTime," - ",e.sessionEndTime," "),d(3),F(" ",e.humanBookingId," "),d(3),F(" Slot: ",e.playerName," "),d(3),x("ngIf",e.transferNote),d(),x("ngIf",(i.respondingToTransfer==null?null:i.respondingToTransfer.id)!==e.id||!i.showRejectReasonInput),d(),x("ngIf",(i.respondingToTransfer==null?null:i.respondingToTransfer.id)===e.id&&i.showRejectReasonInput)}}function AI(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.showIncomingTransfersModal=!1)}),r(1,"div",799),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",178),l(5," Incoming Slot Transfers"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.showIncomingTransfersModal=!1)}),w(7,"i",241),a()(),r(8,"div",356),A(9,kI,4,0,"div",800)(10,II,22,10,"div",801),a(),r(11,"div",374)(12,"button",220),S("click",function(){k(e);let o=h();return O(o.showIncomingTransfersModal=!1)}),l(13,"Close"),a()()()()}if(n&2){let e=h();d(9),x("ngIf",e.incomingTransfers.length===0),d(),x("ngForOf",e.incomingTransfers)}}function DI(n,t){n&1&&(we(0),r(1,"div",819),w(2,"i",213),a(),r(3,"h3"),l(4,"Booking Confirmed!"),a(),r(5,"p"),l(6,"You have "),r(7,"strong"),l(8,"10 minutes"),a(),l(9," to upload your payment receipt."),a(),r(10,"p",820),l(11,"If no receipt is uploaded, your booking will be automatically cancelled."),a(),Pe())}function RI(n,t){n&1&&(we(0),r(1,"div",819),w(2,"i",488),a(),r(3,"h3"),l(4,"Booking Confirmed!"),a(),r(5,"p"),l(6,"Cash payment recorded. The booking is now "),r(7,"strong"),l(8,"verified"),a(),l(9,"."),a(),Pe())}function BI(n,t){n&1&&(we(0),r(1,"div",819),w(2,"i",351),a(),r(3,"h3"),l(4,"Walk-in Booked!"),a(),r(5,"p"),l(6,"Guest slot(s) have been successfully reserved and "),r(7,"strong"),l(8,"verified"),a(),l(9,"."),a(),r(10,"p"),l(11,"QR codes are ready for check-in."),a(),Pe())}function NI(n,t){if(n&1&&(r(0,"div",825)(1,"div",826),w(2,"i",35),r(3,"span")(4,"strong"),l(5),a(),l(6),a()(),r(7,"div",827)(8,"div",828)(9,"span"),l(10,"Previous balance"),a(),r(11,"span"),l(12),a()(),r(13,"div",829)(14,"span"),l(15,"Returned from this cancellation"),a(),r(16,"span"),l(1
687),a()(),r(18,"div",830)(19,"span"),l(20,"New balance"),a(),r(21,"span"),l(22),a()()(),r(23,"div",831),l(24),r(25,"strong"),l(26),a(),l(27),a()()),n&2){let e=h(3);d(5),F("+",e.creditsEarnedFromCancel,""),d(),F(" rebooking credit",e.creditsEarnedFromCancel!==1?"s":""," returned to your account"),d(6),R(e.creditBalanceBefore),d(5),F("+",e.creditsEarnedFromCancel,""),d(5),R(e.creditBalanceAfter),d(2),Se(" ",e.creditBalanceBefore," + ",e.creditsEarnedFromCancel," = "),d(2),R(e.creditBalanceAfter),d(),F(" credit",e.creditBalanceAfter!==1?"s":""," available for your next booking ")}}function VI(n,t){if(n&1&&(r(0,"div",832),w(1,"i",35),r(2,"span"),l(3,"You have "),r(4,"strong"),l(5),a(),l(6),a()()),n&2){let e=h(3);d(5),R(e.creditBalanceAfter),d(),F(" rebooking credit",e.creditBalanceAfter!==1?"s":""," available for your next booking.")}}function LI(n,t){n&1&&(r(0,"div",833),w(1,"i",235),r(2,"span"),l(3,"You can "),r(4,"strong"),l(5,"reattach the same payment receipt"),a(),l(6," the next time you book \u2014 no refund needed."),a()())}function FI(n,t){if(n&1&&(we(0),r(1,"div",821),w(2,"i",154),a(),r(3,"h3"),l(4,"Booking Cancelled"),a(),r(5,"p"),l(6,"Your booking has been successfully cancelled."),a(),A(7,NI,28,9,"div",822)(8,VI,7,2,"div",823)(9,LI,7,0,"div",824),Pe()),n&2){let e=h(2);d(7),x("ngIf",e.creditBreakdownReady&&e.creditsEarnedFromCancel>0),d(),x("ngIf",e.creditBreakdownReady&&e.creditsEarnedFromCancel===0&&e.creditBalanceAfter>0),d(),x("ngIf",e.cancelledBookingHadCash)}}function zI(n,t){if(n&1&&(we(0),r(1,"div",834),w(2,"i",178),a(),r(3,"h3"),l(4,"Transfer Request Sent!"),a(),r(5,"p"),l(6),a(),Pe()),n&2){let e=h(2);d(6),R(e.successMessage)}}function UI(n,t){if(n&1&&(we(0),r(1,"div",834),w(2,"i",312),a(),r(3,"h3"),l(4,"Slot Accepted!"),a(),r(5,"p"),l(6),a(),Pe()),n&2){let e=h(2);d(6),R(e.successMessage)}}function jI(n,t){n&1&&(we(0),r(1,"div",819),w(2,"i",835),a(),r(3,"h3"),l(4,"Receipt Uploaded!"),a(),r(5,"p"),l(6,"Your payment is now under review. We'll notify you once it's verified."),a(),Pe())}function HI(n,t){n&1&&(we(0),r(1,"div",819),w(2,"i",150),a(),r(3,"h3"),l(4,"Receipt Replaced!"),a(),r(5,"p"),l(6,"Your new receipt has been submitted and is now under review."),a(),Pe())}function WI(n,t){if(n&1){let e=L();r(0,"div",817),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"div",818),S("click",function(o){return k(e),O(o.stopPropagation())}),A(2,DI,12,0,"ng-container",18)(3,RI,10,0,"ng-container",18)(4,BI,12,0,"ng-container",18)(5,FI,10,3,"ng-container",18)(6,zI,7,1,"ng-container",18)(7,UI,7,1,"ng-container",18)(8,jI,7,0,"ng-container",18)(9,HI,7,0,"ng-container",18),r(10,"button",330),S("click",function(){k(e);let o=h();return O(o.closeSuccessDialog())}),l(11,"Okay"),a()()()}if(n&2){let e=h();d(2),x("ngIf",e.successDialogType==="booking"),d(),x("ngIf",e.successDialogType==="booking-cash"),d(),x("ngIf",e.successDialogType==="booking-guest"),d(),x("ngIf",e.successDialogType==="cancel"),d(),x("ngIf",e.successDialogType==="transfer"),d(),x("ngIf",e.successDialogType==="accept"),d(),x("ngIf",e.successDialogType==="receipt"),d(),x("ngIf",e.successDialogType==="receipt-replaced")}}function GI(n,t){if(n&1){let e=L();r(0,"div",836),S("click",function(){k(e);let o=h();return O(o.closeCancelRestrictionModal())}),r(1,"div",546),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",837),w(3,"i",838),r(4,"h3",839),l(5,"Cannot Cancel This Slot"),a(),r(6,"p",840),l(7," This slot was booked for you by "),r(8,"strong"),l(9),a(),l(10,". Only the booking owner can cancel the entire booking. "),w(11,"br")(12,"br"),l(13," If you can't make it, you can "),r(14,"strong"),l(15,"transfer your slot"),a(),l(16," to someone else instead. "),a()(),r(17,"div",841)(18,"button",330),S("click",function(){k(e);let o=h();return O(o.closeCancelRestrictionModal())}),l(19,"Got it"),a()()()()}if(n&2){let e=h();d(9),R(e.cancelRestrictionBookedByName)}}function qI(n,t){if(n&1){let e=L();r(0,"div",836),S("click",function(){k(e);let o=h();return O(o.confirmDialogNo())}),r(1,"div",546),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",356),w(3,"i",842),r(4,"p"),l(5),a()(),r(6,"div",374)(7,"button",220),S("click",function(){k(e);let o=h();return O(o.confirmDialogNo())}),l(8,"Cancel"),a(),r(9,"button",330),S("click",function(){k(e);let o=h();return O(o.confirmDialogYes())}),l(10,"Confirm"),a()()()()}if(n&2){let e=h();d(5),R(e.confirmModalMessage)}}function $I(n,t){if(n&1){let e=L();r(0,"button",872),S("click",function(){k(e);let o=h().index,s=h(3);return O(s.removeAdminGuest(o))}),w(1,"i",154),a()}}function YI(n,t){if(n&1){let e=L();r(0,"div",869)(1,"input",870),pe("ngModelChange",function(o){let s=k(e).index,m=h(3);return de(m.adminGuestNames[s],o)||(m.adminGuestNames[s]=o),O(o)}),a(),A(2,$I,2,0,"button",871),a()}if(n&2){let e=t.index,i=h(3);d(),x("placeholder","Guest "+(e+1)+" full name"),ce("ngModel",i.adminGuestNames[e]),d(),x("ngIf",i.adminGuestNames.length>1)}}function XI(n,t){if(n&1){let e=L();r(0,"button",873),S("click",function(){k(e);let o=h(3);return O(o.addAdminGuest())}),w(1,"i",156),l(2," Add Another Guest "),a()}}function ZI(n,t){if(n&1&&(r(0,"option",431),l(1),a()),n&2){let e=t.$implicit;x("value",e.id),d(),F(" ",e.name," ")}}function QI(n,t){n&1&&(r(0,"small",876),w(1,"i",422),l(2," Discount applied. Admin-verified \u2014 no ID proof required. "),a())}function KI(n,t){if(n&1){let e=L();r(0,"div",874)(1,"label",849),l(2,"Discount (Optional)"),a(),r(3,"select",424),pe("ngModelChange",function(o){k(e);let s=h(3);return de(s.adminGuestDiscountTypeId,o)||(s.adminGuestDiscountTypeId=o),O(o)}),r(4,"option",425),l(5,"No discount"),a(),A(6,ZI,2,2,"option",426),a(),A(7,QI,3,0,"small",875),a()}if(n&2){let e=h(3);d(3),ce("ngModel",e.adminGuestDiscountTypeId),d(3),x("ngForOf",e.discountTypes),d(),x("ngIf",e.adminGuestDiscountTypeId)}}function JI(n,t){n&1&&(r(0,"span",877),l(1,"Required"),a())}function e6(n,t){n&1&&(r(0,"span",878),l(1,"Optional"),a())}function t6(n,t){if(n&1&&(r(0,"div",879),w(1,"i",309),l(2),a()),n&2){let e=h(3);d(2),F(" ",e.adminGuestUploadError," ")}}function n6(n,t){n&1&&(r(0,"small",880),w(1,"i",309),l(2," Receipt is required for non-cash payments. "),a())}function i6(n,t){n&1&&(r(0,"small",881),w(1,"i",234),l(2," Receipt will be saved with this booking for records. "),a())}function o6(n,t){if(n&1&&(we(0),r(1,"div",883)(2,"span"),w(3,"i",235),l(4),a(),r(5,"span"),l(6),_e(7,"number"),a()(),Pe()),n&2){let e=h().ngIf,i=h(3);d(4),F(" VAT (",e.vatRate||12,"%) removed"),d(2),F("\u2212\u20B1",be(7,2,i.adminGuestCostBreakdown.vatDeduction,"1.2-2"),"")}}function r6(n,t){if(n&1&&(r(0,"div",883)(1,"span"),w(2,"i",422),l(3),a(),r(4,"span"),l(5),_e(6,"number"),a()()),n&2){let e=h().ngIf,i=h(3);d(3),ui(" ",e.name," (",e.discountMode==="PERCENTAGE"?e.discountValue+"%":"\u20B1"+e.discountValue," off",e.vatTreatment==="VAT_EXCLUSIVE"?" ex-VAT base"
68:"",") "),d(2),F("\u2212\u20B1",be(6,4,i.adminGuestCostBreakdown.pureDiscount,"1.2-2"),"")}}function a6(n,t){if(n&1&&(we(0),A(1,o6,8,5,"ng-container",18)(2,r6,7,7,"div",882),Pe()),n&2){let e=t.ngIf,i=h(3);d(),x("ngIf",e.vatTreatment==="VAT_EXCLUSIVE"&&i.adminGuestCostBreakdown.vatDeduction>0),d(),x("ngIf",i.adminGuestCostBreakdown.pureDiscount>0)}}function s6(n,t){if(n&1){let e=L();r(0,"div",356)(1,"div",844)(2,"span",845),w(3,"i",134),l(4),a(),r(5,"span",846),w(6,"i",275),l(7),a()(),r(8,"p",847),w(9,"i",234),l(10," Guest booking is immediately verified upon submission. "),a(),r(11,"div",848)(12,"label",849),l(13,"Guest Name(s)"),a(),A(14,YI,3,3,"div",850)(15,XI,3,0,"button",851),a(),A(16,KI,8,3,"div",852),r(17,"div",853)(18,"label",849),w(19,"i",488),l(20," Payment Method"),a(),r(21,"div",854)(22,"label",855)(23,"input",856),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.adminGuestIsCash,o)||(s.adminGuestIsCash=o),O(o)}),a(),w(24,"i",278),l(25," Cash "),a(),r(26,"label",855)(27,"input",856),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.adminGuestIsCash,o)||(s.adminGuestIsCash=o),O(o)}),a(),w(28,"i",322),l(29," Other (GCash / Online) "),a()()(),r(30,"div",857)(31,"label",849),w(32,"i",235),l(33," Receipt "),A(34,JI,2,0,"span",858)(35,e6,2,0,"span",859),a(),A(36,t6,3,1,"div",860),r(37,"label",861)(38,"input",862),S("change",function(o){k(e);let s=h(2);return O(s.onAdminGuestReceiptSelected(o))}),a(),w(39,"i",863),r(40,"span"),l(41),a()(),A(42,n6,3,0,"small",864)(43,i6,3,0,"small",865),a(),r(44,"div",866)(45,"div",867)(46,"span"),l(47),a(),r(48,"span"),l(49),_e(50,"number"),a()(),A(51,a6,3,2,"ng-container",18),r(52,"div",868)(53,"span")(54,"strong"),l(55),a()(),r(56,"span")(57,"strong"),l(58),_e(59,"number"),a()()()()()}if(n&2){let e=h(2);d(4),Se(" ",e.formatTime12Hour(e.adminGuestSession.startTime)," \u2013 ",e.formatTime12Hour(e.adminGuestSession.endTime)," "),d(3),F(" ",e.getAvailableSlots(e.adminGuestSession)," slot(s) available "),d(7),x("ngForOf",e.adminGuestNames)("ngForTrackBy",e.trackByIndex),d(),x("ngIf",e.adminGuestNames.length<e.getAvailableSlots(e.adminGuestSession)),d(),x("ngIf",e.discountTypes.length>0),d(),te("section-locked",e.adminGuestCreatedBookingId),d(5),te("selected",e.adminGuestIsCash)("disabled",!!e.adminGuestCreatedBookingId),d(),x("value",!0),ce("ngModel",e.adminGuestIsCash),x("disabled",!!e.adminGuestCreatedBookingId),d(3),te("selected",!e.adminGuestIsCash)("disabled",!!e.adminGuestCreatedBookingId),d(),x("value",!1),ce("ngModel",e.adminGuestIsCash),x("disabled",!!e.adminGuestCreatedBookingId),d(7),x("ngIf",!e.adminGuestIsCash),d(),x("ngIf",e.adminGuestIsCash),d(),x("ngIf",e.adminGuestUploadError),d(),te("has-file",e.adminGuestReceiptFile)("required-upload",!e.adminGuestIsCash&&!e.adminGuestReceiptFile),d(2),x("ngClass",e.adminGuestReceiptFile?"bi-check-circle-fill":"bi-cloud-upload"),d(2),R(e.adminGuestReceiptFile?e.adminGuestReceiptFile.name:"Tap to attach receipt"),d(),x("ngIf",!e.adminGuestIsCash&&!e.adminGuestReceiptFile),d(),x("ngIf",e.adminGuestReceiptFile&&!e.adminGuestUploadError),d(4),Se("",e.adminGuestNames.length," guest(s) \xD7 \u20B1",e.adminGuestSession.pricePerPerson,""),d(2),F("\u20B1",be(50,40,e.adminGuestCostBreakdown.original,"1.2-2"),""),d(2),x("ngIf",e.adminGuestCostBreakdown.discountType),d(4),F("Total (",e.adminGuestIsCash?"Cash":"GCash / Online",")"),d(3),F("\u20B1",be(59,43,e.adminGuestCostBreakdown.total,"1.2-2"),"")}}function l6(n,t){n&1&&(we(0),w(1,"i",351),l(2," Book & Verify "),Pe())}function c6(n,t){n&1&&(we(0),w(1,"i",150),l(2," Retry Receipt Upload "),Pe())}function d6(n,t){if(n&1&&(we(0),A(1,l6,3,0,"ng-container",18)(2,c6,3,0,"ng-container",18),Pe()),n&2){let e=h(2);d(),x("ngIf",!e.adminGuestCreatedBookingId),d(),x("ngIf",e.adminGuestCreatedBookingId)}}function p6(n,t){if(n&1&&(r(0,"span"),w(1,"span",138),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.adminGuestCreatedBookingId?"Uploading...":"Booking..."," ")}}function m6(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closeAdminGuestModal())}),r(1,"div",843),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3"),w(4,"i",102),l(5," Book Walk-in Guest"),a(),r(6,"button",240),S("click",function(){k(e);let o=h();return O(o.closeAdminGuestModal())}),w(7,"i",241),a()(),A(8,s6,60,46,"div",500),r(9,"div",374)(10,"button",375),S("click",function(){k(e);let o=h();return O(o.closeAdminGuestModal())}),l(11,"Cancel"),a(),r(12,"button",376),S("click",function(){k(e);let o=h();return O(o.submitAdminGuestBooking())}),A(13,d6,3,2,"ng-container",18)(14,p6,3,1,"span",18),a()()()()}if(n&2){let e=h();d(8),x("ngIf",e.adminGuestSession),d(2),x("disabled",e.isSubmittingGuestBooking),d(2),te("btn-warning",!!e.adminGuestCreatedBookingId),x("disabled",e.isSubmittingGuestBooking||!e.adminGuestIsCash&&!e.adminGuestReceiptFile),d(),x("ngIf",!e.isSubmittingGuestBooking),d(),x("ngIf",e.isSubmittingGuestBooking)}}function g6(n,t){if(n&1){let e=L();r(0,"div",884),w(1,"i",863),r(2,"span"),l(3),a(),r(4,"button",885),S("click",function(){k(e);let o=h();return O(o.toastVisible=!1)}),w(5,"i",241),a()()}if(n&2){let e=h();x("ngClass","toast-"+e.toastType),d(),x("ngClass",jo(3,Xk,e.toastType==="success",e.toastType==="error",e.toastType==="info")),d(2),R(e.toastMessage)}}function u6(n,t){if(n&1&&(r(0,"div",899)(1,"span",900),l(2,"Amount Due"),a(),r(3,"span",901),l(4),_e(5,"number"),a()()),n&2){let e=h(2);d(4),F("\u20B1",be(5,1,e.paymentInstructionsForBooking.totalAmount,"1.2-2"),"")}}function f6(n,t){if(n&1&&(r(0,"div",902),w(1,"i",136),r(2,"span",903),l(3,"Time remaining to upload receipt:"),a(),r(4,"strong",904),l(5),a()()),n&2){let e=h(2);te("pay-timer-urgent",e.getTimeRemaining(e.paymentInstructionsForBooking).totalSeconds<180),d(5),R(e.formatTimeRemaining(e.paymentInstructionsForBooking))}}function h6(n,t){if(n&1&&(r(0,"pre",451),l(1),a()),n&2){let e=h(2);d(),R(e.courtConfig.paymentOptions)}}function _6(n,t){n&1&&(r(0,"p",905),w(1,"i",165),l(2," Please contact the admin for payment details. "),a())}function x6(n,t){if(n&1){let e=L();r(0,"div",237),S("click",function(){k(e);let o=h();return O(o.closePaymentInstructions())}),r(1,"div",886),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",239)(3,"h3",887),w(4,"i",488),l(5," How to Pay"),a(),r(6,"button",888),S("click",function(){k(e);let o=h();return O(o.closePaymentInstructions())}),w(7,"i",215),a()(),r(8,"div",356),A(9,u6,6,4,"div",889)(10,f6,6,3,"div",890),r(11,"div",891)(12,"div",892)(13,"span",893),l(14,"1"),a(),r(15,"span"),l(16,"Send the exact amount using any of the payment methods below."),a()(),r(17,"div",892)(18,"span",893),l(19,"2"),a(),r(20,"span"),l(21,"Take a screenshot or photo of your payment confirmation."),a()(),r(22,"div",892)(23,"span",893),l(24,"3"),a(),r(25,"span"),l(26,"Tap "),r(27,"strong"),l(28,"Upload"),a(),l(29," to submit your receipt before the timer runs out."),a()()(),r(30,"div",894)(31,"h4",895),w(32,"i",896),l(33," Payment Options"),a(),A(34,h6,2,1,"pre",450)(35,_6,3,0,"p",897),a(),r(36,"div",898),w(37,"i",315),r(38,"span"),l(39,"You have a limited time to upload your receipt after booking. Don't let it expire!"),a()()(),r(40,"div",374)(41,"button",330),S("click",function(){k(e);let o=h();return O(o.closePaymentInstructions())}),l(42,"Got it!"),a()()()()}if(n&2){let e=h();d(9),x("ngIf",e.paymentInstructionsForBooking),d(),x("ngIf",e.paymentInstructionsForBooking==null?null:e.paymentInstructionsForBooking.paymentDeadline),d(24),x("ngIf",e.courtConfig==null?null:e.courtConfig.paymentOptions),d(),x("ngIf",!(e.courtConfig!=null&&e.courtConfig.paymentOptions))}}function v6(n,t){if(n&1&&w(0,"app-session-chat",906),n&2){let e=h();x("session",e.activeChatSession)("onClose",e.closeSessionChat.bind(e))("showBack",!1)}}var Gc=class n{constructor(t,e,i,o,s,m){this.router=t;this.route=e;this.openPlayService=i;this.apiService=o;this.authService=s;this.courtConfigService=m}activeTab="browse";bookingsFilter="all";filteredMyBookings=[];filterDate="";myBookingsPage=0;myBookingsPageSize=10;myBookingsTotalPages=0;myBookingsTotalElements=0;isLoadingMyBookings=!1;receivedSlotsFilter="all";receivedSlotsFilterDate="";filteredReceivedSlots=[];selectedDate=new Date;sessions=[];availableDates=[];allSessionsInRange=[];currentUsername="";currentFullname="";currentUserId="";currentUserRole="";myBookings=[];currentSessionBookings=[];activeChatSession=null;currentUserSportsProfiles=[];showSportsProfileRequiredModal=!1;pendingSessionForBooking=null;sportProfileForm={level:"Beginner",duprRating:""};isSavingSportProfile=!1;showBookingModal=!1;showBookingConfirmDialog=!1;selectedSessionForBooking=null;bookingPlayerNames=[""];bookingTaggedUserIds=[];bookingTotalCost=0;showDiscountPlayerLimitDialog=!1;bookingIsCashPayment=!1;showPaymentInstructionsModal=!1;paymentInstructionsForBooking=null;courtConfig=null;discountTypes=[];myDiscountEligibility=[];
68selectedDiscountTypeId="";discountFiles=[];bookingOriginalCost=0;bookingDiscountAmount=0;bookingVatDeduction=0;bookingPureDiscount=0;pendingDiscountUpload=!1;pendingBookingId="";myBookingCredits=[];useCredits=!0;bookingCreditAmount=0;myBookingStats=null;showPlayerSuggestions=!1;filteredPlayers=[];allRegisteredPlayers=[];activeInputIndex=-1;showReceiptUpload=!1;isReplacingReceipt=!1;selectedBookingForReceipt=null;receiptFiles=[];appVersion=_a;uploadingBookingIds=new Set;replacingBookingIds=new Set;showReceiptView=!1;selectedBookingForView=null;receiptImagesLoading=new Set;receiptZoomLevels=new Map;showPlayersModal=!1;selectedSessionForPlayers=null;isLoadingSessionPlayers=!1;showPlayerProfileModal=!1;selectedPlayerProfile=null;fullUserProfile=null;isLoadingUserProfile=!1;showConfirmCloseModal=!1;showSuccessDialog=!1;successDialogType="booking";successMessage="";showWarningDialog=!1;warningMessage="";showCancelConfirm=!1;bookingToCancel=null;creditBalanceBefore=0;creditsEarnedFromCancel=0;creditBalanceAfter=0;creditBreakdownReady=!1;cancelledBookingHadCash=!1;myRefunds=[];isLoadingRefunds=!1;refundReceiptViewUrl=[];showRefundReceiptModal=!1;selectedRefundForReceipt=null;toastVisible=!1;toastMessage="";toastType="success";toastTimer=null;showCancelRestrictionModal=!1;cancelRestrictionBookedByName="";showConfirmModal=!1;confirmModalMessage="";confirmCallback=null;expandedSessionId=null;showPastDates=!1;pastDaysLoaded=7;followedSessionIds=new Set;showFollowModal=!1;followModalSession=null;sessionFollowers=[];sessionQrPlayers=[];playerSearchQuery="";isLoading=!1;isBooking=!1;isUploadingReceipt=!1;showQrModal=!1;selectedBookingForQr=null;bookingPlayers=[];playerQrImages=new Map;isLoadingQrCodes=!1;errorMessage="";showTransferModal=!1;transferPlayerRecord=null;transferBookingId="";transferNote="";transferToUsername="";transferInputValue="";transferSearchResults=[];transferSearching=!1;transferSelectedUser=null;transferSubmitting=!1;incomingTransfers=[];showIncomingTransfersModal=!1;respondingToTransfer=null;rejectReason="";showRejectReasonInput=!1;receivedSlots=[];showReceivedSlotQrModal=!1;selectedReceivedSlot=null;receivedSlotQrImage="";isLoadingReceivedSlotQr=!1;transferHistoryOutgoing=[];transferHistoryIncoming=[];isLoadingTransferHistory=!1;showAdminGuestModal=!1;adminGuestSession=null;adminGuestNames=[""];adminGuestDiscountTypeId="";isSubmittingGuestBooking=!1;adminGuestReceiptFile=null;adminGuestIsCash=!0;adminGuestCreatedBookingId=null;adminGuestUploadError="";timerSubscription;transferPollInterval;ngOnInit(){let t=this.authService.getCurrentUser();if(this.currentUsername=t?.username||"",this.currentFullname=t?.fullname||"",this.currentUserId=t?.id||"",this.currentUserRole=t?.role||"",!this.currentUsername){this.router.navigate(["/login"]);return}this.courtConfigService.getConfig().subscribe(e=>{this.courtConfig=e}),this.loadCurrentUserSportsProfiles(),this.generateAvailableDates(),this.loadAllSessionsForDateRange(),this.loadSessionsForDate(this.selectedDate),this.loadMyBookings(),this.loadMyFollowedSessions(),this.startPaymentTimerCheck(),this.loadIncomingTransfers(),this.loadReceivedSlots(),this.loadDiscountTypes(),this.loadMyDiscountEligibility(),this.loadMyBookingCredits(),this.loadMyBookingStats(),this.handleDeepLinkParams(),this.transferPollInterval=setInterval(()=>{document.hidden||(this.loadIncomingTransfers(),this.loadReceivedSlots())},6e4)}ngAfterViewInit(){setTimeout(()=>{let t="date-"+this.formatDateForApi(new Date);document.getElementById(t)?.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})},100)}ngOnDestroy(){this.timerSubscription&&this.timerSubscription.unsubscribe(),this.transferPollInterval&&clearInterval(this.transferPollInterval)}generateAvailableDates(){this.availableDates=[];let t=new Date;for(let e=this.pastDaysLoaded;e>0;e--){let i=new Date(t);i.setDate(t.getDate()-e),this.availableDates.push(i)}for(let e=0;e<14;e++){let i=new Date(t);i.setDate(t.getDate()+e),this.availableDates.push(i)}}loadMorePast(){this.pastDaysLoaded+=14,this.generateAvailableDates(),this.loadAllSessionsForDateRange(),setTimeout(()=>{let t="date-"+this.formatDateForApi(this.availableDates[0]);document.getElementById(t)?.scrollIntoView({behavior:"smooth",inline:"start",block:"nearest"})},100)}loadAllSessionsForDateRange(){if(this.availableDates.length===0)return;let t=this.formatDateForApi(this.availableDates[0]),e=this.formatDateForApi(this.availableDates[this.availableDates.length-1]);this.openPlayService.loadSessions(t,e).subscribe({next:i=>{this.allSessionsInRange=i},error:i=>{console.error("Error loading sessions for date range:",i),this.allSessionsInRange=[]}})}loadSessionsForDate(t){this.isLoading=!0,this.errorMessage="";let e=this.formatDateForApi(t);if(this.allSessionsInRange.length>0)this.sessions=this.allSessionsInRange.filter(i=>i.sessionDate===e).sort((i,o)=>this.compareSessionTimes(i.startTime,o.startTime)),this.isLoading=!1;else{let i=this.formatDateForApi(t);this.openPlayService.loadSessions(e,i).subscribe({next:o=>{this.sessions=o.filter(s=>s.sessionDate===e).sort((s,m)=>this.compareSessionTimes(s.startTime,m.startTime)),this.isLoading=!1},error:o=>{console.error("Error loading sessions:",o),this.errorMessage="Failed to load sessions.",this.sessions=[],this.isLoading=!1}})}}compareSessionTimes(t,e){let[i,o]=t.split(":").map(Number),[s,m]=e.split(":").map(Number),f=i*60+o,v=s*60+m;return f-v}loadMyBookings(){this.isLoadingMyBookings=!0,this.openPlayService.loadMyBookingsPaginated(this.myBookingsPage,this.myBookingsPageSize,"all").subscribe({next:t=>{this.myBookings=t.content,this.myBookingsTotalPages=t.totalPages,this.myBookingsTotalElements=t.totalElements,this.isLoadingMyBookings=!1,this.applyBookingsFilter()},error:t=>{console.error("Error loading my bookings:",t),this.isLoadingMyBookings=!1}})}onMyBookingsPageChange(t){this.myBookingsPage=t,this.loadMyBookings()}loadMyFollowedSessions(){this.openPlayService.loadMyFollowedSessions().subscribe({next:t=>{this.followedSessionIds=new Set(t)},error:t=>{console.error("Error loading followed sessions:",t)}})}isFollowing(t){return this.followedSessionIds.has(t.id)}openFollowModal(t,e){e.stopPropagation(),this.followModalSession=t,this.show
68FollowModal=!0}closeFollowModal(){this.showFollowModal=!1,this.followModalSession=null}confirmFollow(){let t=this.followModalSession;t&&(this.closeFollowModal(),this.followedSessionIds.add(t.id),t.followCount=(t.followCount??0)+1,this.openPlayService.followSession(t.id).subscribe({error:e=>{console.error("Error following session:",e),this.followedSessionIds.delete(t.id),t.followCount!==void 0&&t.followCount>0&&t.followCount--}}))}confirmUnfollow(){let t=this.followModalSession;t&&(this.closeFollowModal(),this.followedSessionIds.delete(t.id),t.followCount!==void 0&&t.followCount>0&&t.followCount--,this.openPlayService.unfollowSession(t.id).subscribe({error:e=>{console.error("Error unfollowing session:",e),this.followedSessionIds.add(t.id),t.followCount=(t.followCount??0)+1}}))}togglePastDates(){this.showPastDates=!this.showPastDates,setTimeout(()=>{if(this.showPastDates){let t="date-"+this.formatDateForApi(this.availableDates[0]);document.getElementById(t)?.scrollIntoView({behavior:"smooth",inline:"start",block:"nearest"})}else{this.isPastDate(this.selectedDate)&&(this.selectedDate=new Date,this.loadSessionsForDate(this.selectedDate));let t="date-"+this.formatDateForApi(new Date);document.getElementById(t)?.scrollIntoView({behavior:"smooth",inline:"center",block:"nearest"})}},50)}selectDate(t){this.selectedDate=t,this.expandedSessionId=null,this.loadSessionsForDate(t)}getCurrentPlayers(t){return t.currentPlayers||0}getAvailableSlots(t){return t.availableSlots||0}getFilledPercentage(t){return this.getCurrentPlayers(t)/t.maxPlayers*100}getSessionBookings(t){return this.showPlayersModal&&this.selectedSessionForPlayers?.id===t.id?this.currentSessionBookings:this.myBookings.filter(e=>e.sessionId===t.id)}getActivePlayers(t){return this.getSessionBookings(t).filter(i=>i.status==="PAYMENT_VERIFIED").map(i=>({fullname:i.fullname,username:i.username,numberOfPlayers:i.numberOfPlayers,status:i.status}))}getVerifiedPlayers(t){return this.getActivePlayers(t)}getPendingPlayers(t){return this.getSessionBookings(t).filter(i=>i.status==="PENDING_PAYMENT").map(i=>({fullname:i.fullname,username:i.username,numberOfPlayers:i.numberOfPlayers,status:i.status}))}getActiveBookings(t){return this.myBookings.filter(e=>e.sessionId===t.id&&e.status!=="CANCELLED"&&e.status!=="EXPIRED")}toggleSessionDetails(t){this.expandedSessionId=this.expandedSessionId===t?null:t}openSessionChat(t){this.activeChatSession=this.activeChatSession?.id===t.id?null:t}closeSessionChat(){this.activeChatSession=null}handleDeepLinkParams(){let t=this.route.snapshot.queryParamMap,e=t.get("tab");e==="bookings"?this.activeTab="myBookings":e==="refundHistory"&&(this.activeTab="refundHistory",this.loadMyRefunds());let i=t.get("openChat");if(i){let o=this.allSessionsInRange.find(s=>s.id===i)||this.sessions.find(s=>s.id===i);o?this.activeChatSession=o:this.apiService.getOpenPlaySessionById(i).subscribe({next:s=>{this.activeChatSession=s},error:()=>{}})}}openPlayersModal(t){this.selectedSessionForPlayers=t,this.isLoadingSessionPlayers=!0,this.sessionFollowers=[],this.sessionQrPlayers=[];let e=!1,i=!1,o=!1,s=()=>{e&&i&&o&&(this.showPlayersModal=!0,this.isLoadingSessionPlayers=!1)};this.openPlayService.loadSessionBookings(t.id).subscribe({next:m=>{this.currentSessionBookings=m,e=!0,s()},error:m=>{console.error("Error loading session bookings:",m),this.currentSessionBookings=[],e=!0,s()}}),this.openPlayService.getSessionFollowers(t.id).subscribe({next:m=>{this.sessionFollowers=m,i=!0,s()},error:m=>{console.error("Error loading session followers:",m),this.sessionFollowers=[],i=!0,s()}}),this.openPlayService.getSessionPlayers(t.id).subscribe({next:m=>{this.sessionQrPlayers=m,o=!0,s()},error:()=>{this.sessionQrPlayers=[],o=!0,s()}})}closePlayersModal(){this.showPlayersModal=!1,this.selectedSessionForPlayers=null,this.currentSessionBookings=[],this.sessionFollowers=[],this.sessionQrPlayers=[],this.playerSearchQuery="",this.isLoadingSessionPlayers=!1}openPlayerProfile(t){this.selectedPlayerProfile=t,this.showPlayerProfileModal=!0,this.fullUserProfile=null,t.userId&&(this.isLoadingUserProfile=!0,this.apiService.getUserProfile(t.userId).subscribe({next:e=>{this.fullUserProfile=e,this.isLoadingUserProfile=!1},error:e=>{console.error("Error loading user profile:",e),this.isLoadingUserProfile=!1}}))}openFollowerProfile(t){this.openPlayerProfile({name:t.fullname,username:t.username,userId:t.userId,profilePictureUrl:t.profilePictureUrl,isBookingOwner:!0,isFollower:!0})}closePlayerProfile(){this.showPlayerProfileModal=!1,this.selectedPlayerProfile=null,this.fullUserProfile=null,this.isLoadingUserProfile=!1}getSelectedPlayerBooking(){if(this.selectedPlayerProfile){if(this.selectedPlayerProfile.bookingId)return this.currentSessionBookings.find(t=>
68t.id===this.selectedPlayerProfile.bookingId);if(this.selectedPlayerProfile.userId)return this.currentSessionBookings.find(t=>t.userId===this.selectedPlayerProfile.userId)}}openReceiptFromProfile(t){this.closePlayerProfile(),this.openReceiptView(t)}getPlayerInitials(t){let e=t.trim().split(" ");return e.length>=2?(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase():t.substring(0,2).toUpperCase()}formatMemberSinceDate(t){return new Date(t).toLocaleDateString("en-US",{year:"numeric",month:"long",day:"numeric"})}getWinRate(t){return!t.gamesPlayed||t.gamesPlayed===0?"0":(t.gamesWon/t.gamesPlayed*100).toFixed(1)}getParsedSportsProfiles(){if(!this.fullUserProfile?.sportsProfiles)return[];try{let t=JSON.parse(this.fullUserProfile.sportsProfiles);return Array.isArray(t)?t:[]}catch{return[]}}getSportLevelClass(t){switch(t){case"Beginner":return"level-beginner";case"Intermediate":return"level-intermediate";case"Advanced":return"level-advanced";case"Pro":return"level-pro";default:return""}}getProfilePictureUrl(t){if(t)return t.startsWith("http://")||t.startsWith("https://")?t:Be.apiBase.replace("/api","")+t}formatTime12Hour(t){if(!t)return"";let[e,i]=t.split(":").map(Number),o=e>=12?"PM":"AM";return`${e%12||12}:${i.toString().padStart(2,"0")} ${o}`}formatSessionDate(t){return t?new Date(t).toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric",year:"numeric"}):""}getSkillLevelCounts(t){let e=this.getAllVerifiedPlayersExpanded(t),i={Beginner:0,Intermediate:0,Advanced:0,Pro:0,Unknown:0};return e.forEach(o=>{o.isRegistered&&o.skillLevel?i[o.skillLevel]=(i[o.skillLevel]||0)+1:o.isRegistered&&!o.skillLevel&&i.Unknown++}),i}getPlayerStatusCounts(t){let e=this.getAllVerifiedPlayersExpanded(t).length,i=this.sessionQrPlayers.filter(m=>m.status==="PLAYING").length,o=this.sessionQrPlayers.filter(m=>m.status==="PLAYED").length,s=this.sessionQrPlayers.filter(m=>m.status==="READY_TO_PLAY").length;return{onCourt:i,played:o,readyToPlay:s,total:e}}getSkillLevelColor(t){switch(t){case"Beginner":return"#10b981";case"Intermediate":return"#3b82f6";case"Advanced":return"#f59e0b";case"Pro":return"#ef4444";default:return"#6b7280"}}getAllVerifiedPlayersExpanded(t){let e=this.getSessionBookings(t),i=[];return e.filter(o=>o.status==="PAYMENT_VERIFIED").sort((o,s)=>{let m=o.paymentVerifiedAt?new Date(o.paymentVerifiedAt).getTime():0,f=s.paymentVerifiedAt?new Date(s.paymentVerifiedAt).getTime():0;return m-f}).forEach(o=>{o.playerNames&&o.playerNames.length>0&&o.playerNames.forEach(s=>{let m=!!o.isGuestBooking,f=!m&&s.toLowerCase().trim()===o.fullname.toLowerCase().trim(),v=this.sessionQrPlayers.find(I=>I.playerName.toLowerCase().trim()===s.toLowerCase().trim()),y=f||!m&&!!v?.userId,M=f&&o.displayName||s;i.push({name:M,bookedBy:o.displayName||o.fullname,isBookingOwner:f,isRegistered:y,username:f?o.username:void 0,userId:f?o.userId:m?void 0:v?.userId||void 0,bookingId:o.id,profilePictureUrl:f?o.profilePictureUrl:m?void 0:v?.profilePictureUrl||void 0,skillLevel:f?o.skillLevel:m?void 0:v?.skillLevel||void 0,duprRating:f?o.duprRating:void 0,qrStatus:v?.status,scannedAt:v?.scannedAt??null,scannedBy:v?.scannedBy??null})})}),i}getAllCancelledConfirmedPlayersExpanded(t){let e=this.getSessionBookings(t),i=[];return e.filter(o=>o.status==="CANCELLED"&&!!o.paymentVerifiedAt).sort((o,s)=>{let m=o.paymentVerifiedAt?new Date(o.paymentVerifiedAt).getTime():0,f=s.paymentVerifiedAt?new Date(s.paymentVerifiedAt).getTime():0;return m-f}).forEach(o=>{o.playerNames&&o.playerNames.length>0&&o.playerNames.forEach(s=>{let f=!!!o.isGuestBooking&&s.toLowerCase().trim()===o.fullname.toLowerCase().trim(),v=f&&o.displayName||s;i.push({name:v,bookedBy:o.displayName||o.fullname,isBookingOwner:f,username:f?o.username:void 0,userId:f?o.userId:void 0,bookingId:o.id,profilePictureUrl:f?o.profilePictureUrl:void 0,skillLevel:f?o.skillLevel:void 0,duprRating:f?o.duprRating:void 0,cancellationReason:o.cancellationReason,paymentProofUrl:o.paymentProofUrl||void 0})})}),i}getSelectedPlayerBookingById(t){return this.currentSessionBookings.find(e=>e.id===t)}verifyPaymentFromModal(t){this.apiService.verifyOpenPlayPayment(t).subscribe({next:e=>{this.closeReceiptView();let i=this.currentSessionBookings.findIndex(o=>o.id===t);i!==-1&&(this.currentSessionBookings[i]=e,this.currentSessionBookings=[...this.currentSessionBookings]),this.selectedSessionForPlayers&&this.loadAllSessionsForDateRange()},error:e=>{console.error("Failed to verify payment:",e)}})}getFilteredCancelledPlayers(t){let e=this.getAllCancelledConfirmedPlayersExpanded(t),i=this.playerSearchQuery.trim().toLowerCase();return i?e.filter(o=>o.name.toLowerCase().includes(i)):e}getAllPendingPlayersExpanded(t){let e=this.getSessionBookings(t),i=[];return e.filter(o=>o.status==="PENDING_PAYMENT").forEach(o=>{o.playerNames&&o.playerNames.length>
680&&o.playerNames.forEach(s=>{let m=s.toLowerCase().trim()===o.fullname.toLowerCase().trim(),f=m&&o.displayName||s;i.push({name:f,bookedBy:o.displayName||o.fullname,isBookingOwner:m,username:m?o.username:void 0,userId:m?o.userId:void 0,bookingId:o.id,profilePictureUrl:m?o.profilePictureUrl:void 0,skillLevel:m?o.skillLevel:void 0,duprRating:m?o.duprRating:void 0,paymentProofUrl:o.paymentProofUrl||void 0})})}),i}getFilteredVerifiedPlayers(t){let e=this.getAllVerifiedPlayersExpanded(t),i=this.playerSearchQuery.trim().toLowerCase();return i?e.filter(o=>o.name.toLowerCase().includes(i)):e}getPendingNoReceiptPlayers(t){return this.getAllPendingPlayersExpanded(t).filter(e=>!e.paymentProofUrl)}getAwaitingVerificationPlayers(t){return this.getAllPendingPlayersExpanded(t).filter(e=>!!e.paymentProofUrl)}getFilteredPendingPlayers(t){let e=this.getPendingNoReceiptPlayers(t),i=this.playerSearchQuery.trim().toLowerCase();return i?e.filter(o=>o.name.toLowerCase().includes(i)):e}getFilteredAwaitingVerificationPlayers(t){let e=this.getAwaitingVerificationPlayers(t),i=this.playerSearchQuery.trim().toLowerCase();return i?e.filter(o=>o.name.toLowerCase().includes(i)):e}get activeFollowers(){let t=new Set(this.currentSessionBookings.filter(e=>e.status==="PAYMENT_VERIFIED"||e.status==="PENDING_PAYMENT").map(e=>e.userId));return this.sessionFollowers.filter(e=>!t.has(e.userId))}getTotalActivePlayersCount(t){return this.getSessionBookings(t).filter(i=>i.status==="PAYMENT_VERIFIED"||i.status==="PENDING_PAYMENT").reduce((i,o)=>i+(o.playerNames?.length||0),0)}getUserBookingForSession(t){return this.myBookings.find(e=>e.sessionId===t.id&&e.status!=="CANCELLED"&&e.status!=="EXPIRED")}getUserBookingsForSession(t){return this.myBookings.filter(e=>e.sessionId===t.id&&e.status!=="CANCELLED"&&e.status!=="EXPIRED")}hasUserJoined(t){return!!this.getUserBookingForSession(t)}goToMyBookings(){this.activeTab="myBookings",setTimeout(()=>{document.querySelector(".my-bookings-tab")?.scrollIntoView({behavior:"smooth",block:"start"})},50)}openBookingModal(t){if(this.currentUserSportsProfiles.length===0){this.pendingSessionForBooking=t,this.showSportsProfileRequiredModal=!0;return}if(t.status==="COMPLETED"){this.showAlert("This session has ended.");return}if(this.getAvailableSlots(t)<=0){this.showAlert("This session is full. Please try another session or time slot.");return}let i=this.hasUserJoined(t),o=()=>{if(this.selectedSessionForBooking=t,this.bookingPlayerNames=i?[""]:[this.currentFullname],this.bookingTaggedUserIds=i?[null]:[this.currentUserId||null],this.discountFiles=[],this.useCredits=!0,i)this.selectedDiscountTypeId="";else{let s=this.myDiscountEligibility.find(m=>m.status==="VERIFIED");this.selectedDiscountTypeId=s?s.discountTypeId:"",console.log("[Discount] Cached eligibility on modal open:",this.myDiscountEligibility),console.log("[Discount] Auto-selected from cache:",this.selectedDiscountTypeId||"(none)")}this.updateBookingTotals(),this.showBookingModal=!0,this.loadRegisteredPlayers(),i||this.openPlayService.getMyDiscountEligibility().subscribe({next:s=>{this.myDiscountEligibility=s;let m=s.find(f=>f.status==="VERIFIED");this.selectedDiscountTypeId=m?m.discountTypeId:"",console.log("[Discount] Fresh eligibility after refresh:",s),console.log("[Discount] Auto-selected after refresh:",this.selectedDiscountTypeId||"(none)"),this.updateBookingTotals()},error:s=>console.error("[Discount] Failed to refresh discount eligibility",s)})};if(i){this.openConfirmDialog("You already have a booking for this session. Are you sure you want to book again?",o);return}o()}loadRegisteredPlayers(){this.apiService.getAllUsers().subscribe({next:t=>{this.allRegisteredPlayers=t},error:t=>{console.error("Error loading registered players:",t),this.allRegisteredPlayers=[]}})}get isBookingForSelf(){return this.bookingTaggedUserIds[0]===this.currentUserId}assignSelfToFirstSlot(){this.bookingPlayerNames[0]=this.currentFullname,this.bookingTaggedUserIds[0]=this.currentUserId||null;let t=this.myDiscountEligibility.find(e=>e.status==="VERIFIED");this.selectedDiscountTypeId=t?t.discountTypeId:"",this.updateBookingTotals()}onPlayerNameInput(t,e){this.activeInputIndex=e,this.bookingTaggedUserIds[e]=null,e===0&&this.selectedDiscountTypeId&&(this.selectedDiscountTypeId="",this.discountFiles=[],this.updateBookingTotals());let i=t.lastIndexOf("@");if(i!==-1&&i===t.length-1)this.filteredPlayers=this.allRegisteredPlayers,this.showPlayerSuggestions=!0;else if(i!==-1){let o=t.substring(i+1).toLowerCase();this.filteredPlayers=this.allRegisteredPlayers.filter(s=>s.fullname&&s.fullname.toLowerCase().includes(o)||s.username&&s.username.toLowerCase().includes(o)||s.email&&s.email.toLowerCase().includes(o)||s.nickname&&s.nickname.toLowerCase().includes(o)),this.showPlayerSuggestions=this.filteredPlayers.length>0}else this.showPlayerSuggestions=!1}selectPlayer(t){this.activeInputIndex>=0&&(this.bookingPlayerNames[this.activeInputIndex]=t.fullname,this.bookingTaggedUserIds[this.activeInputIndex]=t.userId||t.id||null,this.showPlayerSuggestions=!1,this.activeInputIndex===0&&this.bookingTaggedUserIds[0]!==this.currentUserId&&(this.selectedDiscountTypeId="",this.discountFiles=[]),this.updateBookingTotals())}onPlayerInputFocus(t){this.activeInputIndex=t,this.allRegisteredPlayers.length>0&&(this.filteredPlayers=this.allRegisteredPlayers,this.showPlayerSuggestions=!0)}closePlayerSuggestions(){setTimeout(()=>{this.showPlayerSuggestions=!1},200)}closeBookingModal(){this.showConfirmCloseModal=!0}confirmCloseModal(){this.showConfirmCloseModal=!1,this.showBookingModal=!1,this.selectedSessionForBooking=null,this.bookingPlayerNames=[],this.bookingTaggedUserIds=[],this.selectedDiscountTypeId="",this.discountFiles=[],this.bookingOriginalCost=0,this.bookingDiscountAmount=0,this.bookingVatDeduction=0,this.bookingPureDiscount=0,this.bookingIsCashPayment=!1}cancelCloseModal(){this.showConfirmCloseModal=!1}addBookingPlayer(){if(!this.selectedSessionForBooking)return;if(this.selectedDiscountTypeId){this.showDiscountPlayerLimitDialog=!0;return}let t=this.getAvailableSlots(this.selectedSessionForBooking);if(this.bookingPlayerNames.length>=t){this.showAlert(`Only ${t} slot${t===1?"":"s"} available for this session.`);return}this.bookingPlayerNames.push(""),this.bookingTaggedUserIds.push(null),this.updateBookingTotals()}closeDiscountPlayerLimitDialog(){this.showDiscountPlayerLimitDialog=!1}removeBookingPlayer(t){if(this.bookingPlayerNames.length<=1){this.showAlert("You must have at least one player.");return}this.bookingPlayerNames.splice(t,1),this.bookingTaggedUserIds.splice(t,1),this.updateBookingTotals()}get selectedDiscountType(){return this.discountTypes.find(t=>
68t.id===this.selectedDiscountTypeId)}get availableCreditCount(){return this.isBookingForSelf?this.myBookingCredits.length:0}get creditsToApply(){return this.useCredits?Math.min(this.bookingPlayerNames.length,this.availableCreditCount):0}get slotsToPay(){return this.bookingPlayerNames.length-this.creditsToApply}updateBookingTotals(){let t=this.bookingPlayerNames.length,e=this.selectedSessionForBooking?.pricePerPerson||0;this.bookingOriginalCost=t*e,this.bookingVatDeduction=0,this.bookingPureDiscount=0,this.bookingDiscountAmount=0;let i=this.creditsToApply>0?void 0:this.selectedDiscountType;if(i){if(i.vatTreatment==="VAT_EXCLUSIVE"){let o=i.vatRate||12,s=this.bookingOriginalCost/(1+o/100);this.bookingVatDeduction=this.bookingOriginalCost-s,this.bookingPureDiscount=i.discountMode==="PERCENTAGE"?s*(i.discountValue/100):Math.min(i.discountValue,s)}else this.bookingPureDiscount=i.discountMode==="PERCENTAGE"?this.bookingOriginalCost*(i.discountValue/100):Math.min(i.discountValue,this.bookingOriginalCost);this.bookingDiscountAmount=this.bookingVatDeduction+this.bookingPureDiscount}this.bookingCreditAmount=this.creditsToApply*e,this.bookingTotalCost=Math.max(0,this.bookingOriginalCost-this.bookingDiscountAmount-this.bookingCreditAmount)}loadDiscountTypes(){this.openPlayService.loadDiscountTypes().subscribe({next:t=>{this.discountTypes=t},error:t=>console.error("Failed to load discount types",t)})}loadMyDiscountEligibility(){this.openPlayService.getMyDiscountEligibility().subscribe({next:t=>{this.myDiscountEligibility=t,console.log("[Discount] Loaded eligibility on init:",t)},error:t=>console.error("[Discount] Failed to load discount eligibility",t)})}loadMyBookingCredits(){this.openPlayService.getMyBookingCredits().subscribe({next:t=>{this.myBookingCredits=t},error:()=>{this.myBookingCredits=[]}})}loadMyBookingStats(){this.openPlayService.getMyBookingStats().subscribe({next:t=>{this.myBookingStats=t},error:()=>{this.myBookingStats=null}})}getDiscountEligibilityStatus(t){return this.myDiscountEligibility.find(e=>e.discountTypeId===t)}get isDiscountProofNeeded(){if(!this.selectedDiscountTypeId)return!1;let t=this.getDiscountEligibilityStatus(this.selectedDiscountTypeId);return t?.status==="VERIFIED"||t?.status==="PENDING_VERIFICATION"?!1:this.discountFiles.length===0}onDiscountTypeChange(t){this.selectedDiscountTypeId=t,this.discountFiles=[],t&&this.bookingPlayerNames.length>1&&(this.bookingPlayerNames=[this.bookingPlayerNames[0]],this.bookingTaggedUserIds=[this.bookingTaggedUserIds[0]]),this.updateBookingTotals()}onUseCreditsChange(t){this.useCredits=t,this.updateBookingTotals()}onDiscountFileChange(t){let e=t.target;e.files&&(this.discountFiles=Array.from(e.files))}requestBookingConfirm(){if(!this.selectedSessionForBooking)return;if(this.bookingPlayerNames.filter(i=>!i.trim()).length>0){this.showAlert("Please enter names for all players.");return}if(this.isDiscountProofNeeded){this.showAlert("Please upload your government-issued ID proof for the selected discount before confirming.");return}let e=this.getAvailableSlots(this.selectedSessionForBooking);if(this.bookingPlayerNames.length>e){this.warningMessage=`Not enough slots. Only ${e} slots remaining.`,this.showWarningDialog=!0;return}this.showBookingConfirmDialog=!0}confirmBooking(){if(this.showBookingConfirmDialog=!1,!this.selectedSessionForBooking)return;if(this.bookingPlayerNames.filter(i=>!i.trim()).length>0){this.showAlert("Please enter names for all players.");return}if(this.isDiscountProofNeeded){this.showAlert("Please upload your government-issued ID proof for the selected discount before confirming.");return}let e=this.getAvailableSlots(this.selectedSessionForBooking);if(this.bookingPlayerNames.length>e){this.warningMessage=`Not enough slots. Only ${e} slots remaining.`,this.showWarningDialog=!0;return}this.isBooking=!0,this.errorMessage="",this.openPlayService.createBooking(this.selectedSessionForBooking.id,this.bookingPlayerNames.length,this.bookingPlayerNames,this.bookingTaggedUserIds,this.selectedDiscountTypeId||void 0,this.creditsToApply>0).subscribe({next:i=>{let o=this.selectedDiscountTypeId?this.getDiscountEligibilityStatus(this.selectedDiscountTypeId):void 0,s=this.selectedDiscountTypeId&&this.discountFiles.length>0&&o?.status!=="VERIFIED",m=(f=!1)=>{f&&this.loadMyDiscountEligibility(),this.creditsToApply>0&&this.loadMyBookingCredits(),this.loadMyBookingStats(),this.bookingIsCashPayment&&this.currentUserRole.toLowerCase()==="admin"?this.apiService.verifyOpenPlayPayment(i.id).subscribe({next:()=>{this.allSessionsInRange=[],this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.loadMyBookings(),this.isBooking=!1,this.successDialogType="booking-cash",this.showSuccessDialog=!0},error:v=>{console.error("Failed to verify cash payment:",v),this.allSessionsInRange=[],this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.loadMyBookings(),this.isBooking=!1,this.successDialogType="booking",this.showSuccessDialog=!0}}):(this.allSessionsInRange=[],this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.loadMyBookings(),this.isBooking=!1,this.successDialogType="booking",this.showSuccessDialog=!0)};s?this.openPlayService.uploadDiscountProof(i.id,this.discountFiles).subscribe({next:()=>m(!0),error:f=>{console.error("Failed to upload discount proof:",f),m()}}):m()},error:i=>{console.error("Error creating booking:",i),this.isBooking=!1,this.showAlert(i.message||"Failed to create booking. Session may be full.")}})}openAdminGuestModal(t){this.adminGuestSession=t,this.adminGuestNames=[""],this.adminGuestDiscountTypeId="",this.adminGuestReceiptFile=null,this.adminGuestIsCash=!0,this.adminGuestCreatedBookingId=null,this.adminGuestUploadError="",this.showAdminGuestModal=!0}closeAdminGuestModal(){this.showAdminGuestModal=!1,this.adminGuestSession=null,this.adminGuestNames=[""],this.adminGuestDiscountTypeId="",this.adminGuestReceiptFile=null,this.adminGuestIsCash=!0,this.adminGuestCreatedBookingId=null,this.adminGuestUploadError=""}onAdminGuestReceiptSelected(t){return ue(this,null,function*(){let i=t.target.files?.[0]??null;if(!i){this.adminGuestReceiptFile=null;return}try{[this.adminGuestReceiptFile]=yield Dr([i])}catch{this.adminGuestReceiptFile=null,this.adminGuestUploadError="Could not read the selected photo. Please select it again."}})}addAdminGuest(){if(!this.adminGuestSession)return;let t=this.getAvailableSlots(this.adminGuestSession);if(this.adminGuestNames.length>=t){this.showToastNotification(`Only ${t} slot(s) available.`,"error");return}this.adminGuestNames.push("")}removeAdminGuest(t){this.adminGuestNames.length<=1||this.adminGuestNames.splice(t,1)}get adminGuestCostBreakdown(){let t=this.adminGuestSession?.pricePerPerson??0,i=this.adminGuestNames.length*t,o=0,s=0,m=this.discountTypes.find(v=>v.id===this.adminGuestDiscountTypeId);if(m)if(m.vatTreatment==="VAT_EXCLUSIVE"){let v=m.vatRate||12,y=i/(1+v/100);o=i-y,s=m.discountMode==="PERCENTAGE"?y*(m.discountValue/100):Math.min(m.discountValue,y)}else s=m.discountMode==="PERCENTAGE"?i*(m.discountValue/100):Math.min(m.discountValue,i);let f=Math.max(0,i-o-s);return{original:i,vatDeduction:o,pureDiscount:s,total:f,discountType:m}}get adminGuestTotalCost(){return this.adminGuestCostBreakdown.total}submitAdminGuestBooking(){if(!this.adminGuestSession)return;if(this.adminGuestCreatedBookingId){this._uploadGuestReceipt(this.adminGuestCreatedBookingId);return}if(this.adminGuestNames.filter(i=>!i.trim()).length>0){this.showToastNotification("Please enter names for all guests.","error");return}let e=this.getAvailableSlots(this.adminGuestSession);if(this.adminGuestNames.length>e){this.showToastNotification(`Only ${e} slot(s) available.`,"error");return}if(!this.adminGuestIsCash&&!this.adminGuestReceiptFile){this.showToastNotification("Please attach a re
68ceipt for non-cash payments.","error");return}this.isSubmittingGuestBooking=!0,this.adminGuestUploadError="",this.openPlayService.adminCreateGuestBooking(this.adminGuestSession.id,this.adminGuestNames.length,[...this.adminGuestNames],this.adminGuestDiscountTypeId||void 0,this.adminGuestIsCash?"CASH":"ONLINE").subscribe({next:i=>{this.adminGuestReceiptFile?(this.adminGuestCreatedBookingId=i.id,this._uploadGuestReceipt(i.id)):(this.isSubmittingGuestBooking=!1,this.closeAdminGuestModal(),this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.successDialogType="booking-guest",this.showSuccessDialog=!0)},error:i=>{this.isSubmittingGuestBooking=!1;let o=i?.payload?.error||i?.message||"Failed to create guest booking.";this.showToastNotification(o,"error",6e3)}})}_uploadGuestReceipt(t){if(!this.adminGuestReceiptFile)return;this.isSubmittingGuestBooking=!0,this.adminGuestUploadError="";let e=new FormData;e.append("files",this.adminGuestReceiptFile),this.apiService.adminUploadOpenPlayReceipt(t,e).subscribe({next:()=>{this.isSubmittingGuestBooking=!1,this.closeAdminGuestModal(),this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.successDialogType="booking-guest",this.showSuccessDialog=!0},error:()=>{this.isSubmittingGuestBooking=!1,this.adminGuestUploadError="Receipt upload failed. Please select the file again and retry.",this.adminGuestReceiptFile=null}})}closeSuccessDialog(){this.showSuccessDialog=!1,this.successDialogType==="booking"||this.successDialogType==="booking-cash"||this.successDialogType==="booking-guest"?(this.showBookingModal=!1,this.selectedSessionForBooking=null,this.bookingPlayerNames=[],this.bookingTaggedUserIds=[],this.selectedDiscountTypeId="",this.discountFiles=[],this.bookingOriginalCost=0,this.bookingDiscountAmount=0,this.bookingVatDeduction=0,this.bookingPureDiscount=0,this.bookingIsCashPayment=!1):this.successDialogType==="transfer"&&this.selectedBookingForQr&&this.openQrModal(this.selectedBookingForQr)}showToastNotification(t,e="success",i=3500){this.toastTimer&&clearTimeout(this.toastTimer),this.toastMessage=t,this.toastType=e,this.toastVisible=!0,e!=="error"&&(this.toastTimer=setTimeout(()=>{this.toastVisible=!1},i))}describeUploadError(t){return t?.error?.description?t.error.description:t?.status===0?"Could not reach the server. Check your connection and try again. (error 0)":t?.status===4
6813?"Your receipt files are too large. Please upload fewer images at a time. (error 413)":`${t?.message||"Please try again."}${t?.status?` (error ${t.status})`:""}`}openConfirmDialog(t,e){this.confirmModalMessage=t,this.confirmCallback=e,this.showConfirmModal=!0}confirmDialogYes(){this.showConfirmModal=!1,this.confirmCallback&&this.confirmCallback(),this.confirmCallback=null}confirmDialogNo(){this.showConfirmModal=!1,this.confirmCallback=null}closeWarningDialog(){this.showWarningDialog=!1}showAlert(t){this.warningMessage=t,this.showWarningDialog=!0}loadCurrentUserSportsProfiles(){this.currentUserId&&this.apiService.getUserProfile(this.currentUserId).subscribe({next:t=>{try{let e=t?.sportsProfiles?JSON.parse(t.sportsProfiles):[];this.currentUserSportsProfiles=Array.isArray(e)?e:[]}catch{this.currentUserSportsProfiles=[]}},error:()=>{this.currentUserSportsProfiles=[]}})}closeSportsProfileRequiredModal(){this.showSportsProfileRequiredModal=!1,this.pendingSessionForBooking=null,this.sportProfileForm={level:"Beginner",duprRating:""}}saveSportProfileAndBook(){return ue(this,null,function*(){this.isSavingSportProfile=!0;try{let t=yield this.apiService.getUserProfile(this.currentUserId).toPromise(),e=[];try{e=t?.sportsProfiles?JSON.parse(t.sportsProfiles):[]}catch{e=[]}let i={sport:"Pickleball",level:this.sportProfileForm.level,remarks:"",achievements:""};this.sportProfileForm.duprRating.trim()&&(i.duprRating=this.sportProfileForm.duprRating.trim()),e.push(i),yield this.apiService.updateUserProfile(this.currentUserId,{sportsProfiles:JSON.stringify(e)}).toPromise(),this.currentUserSportsProfiles=e;let o=this.pendingSessionForBooking;this.showSportsProfileRequiredModal=!1,this.pendingSessionForBooking=null,this.sportProfileForm={level:"Beginner",duprRating:""},o&&this.openBookingModal(o)}catch{this.showAlert("Failed to save your sport profile. Please try again.")}finally{this.isSavingSportProfile=!1}})}openPaymentInstructions(t){this.paymentInstructionsForBooking=t,this.showPaymentInstructionsModal=!0}closePaymentInstructions(){this.showPaymentInstructionsModal=!1,this.paymentInstructionsForBooking=null}openReceiptUpload(t){this.selectedBookingForReceipt=t,this.receiptFiles=[],this.isReplacingReceipt=!1,this.showReceiptUpload=!0}openReceiptReplace(t){this.selectedBookingForReceipt=t,this.receiptFiles=[],this.isReplacingReceipt=!0,this.showReceiptUpload=!0}closeReceiptUpload(){this.showReceiptUpload=!1,this.isReplacingReceipt=!1,this.selectedBookingForReceipt=null,this.receiptFiles=[]}openReceiptView(t){this.selectedBookingForView=t,this.showReceiptView=!0;let e=this.getReceiptUrls(t).length;this.receiptImagesLoading=new Set(Array.from({length:e},(i,o)=>o))}closeReceiptView(){this.showReceiptView=!1,this.selectedBookingForView=null,this.receiptImagesLoading.clear(),this.receiptZoomLevels.clear()}getReceiptZoom(t){return this.receiptZoomLevels.get(t)??1}zoomReceipt(t,e){let i=this.getReceiptZoom(t),o=Math.min(3,Math.max(.5,Math.round((i+e)*10)/10));this.receiptZoomLevels.set(t,o)}resetReceiptZoom(t){this.receiptZoomLevels.delete(t)}isDraggingReceipt=!1;dragStartX=0;dragStartY=0;dragScrollLeft=0;dragScrollTop=0;onReceiptDragStart(t){let e=t.currentTarget;this.isDraggingReceipt=!0,this.dragStartX=t.pageX-e.getBoundingClientRect().left+e.scrollLeft,this.dragStartY=t.pageY-e.getBoundingClientRect().top+e.scrollTop,this.dragScrollLeft=e.scrollLeft,this.dragScrollTop=e.scrollTop,e.style.cursor="grabbing",t.preventDefault()}onReceiptDragMove(t){if(!this.isDraggingReceipt)return;t.preventDefault();let e=t.currentTarget,i=t.pageX-e.getBoundingClientRect().left+e.scrollLeft,o=t.pageY-e.getBoundingClientRect().top+e.scrollTop;e.scrollLeft=this.dragScrollLeft-(i-this.dragStartX),e.scrollTop=this.dragScrollTop-(o-this.dragStartY)}onReceiptDragEnd(t){this.isDraggingReceipt=!1,t.currentTarget.style.cursor="grab"}onReceiptTouchStart(t){let e=t.touches[0],i=t.currentTarget;this.isDraggingReceipt=!0,this.dragStartX=e.pageX-i.getBoundingClientRect().left+i.scrollLeft,this.dragStartY=e.pageY-i.getBoundingClientRect().top+i.scrollTop,this.dragScrollLeft=i.scrollLeft,this.dragScrollTop=i.scrollTop}onReceiptTouchMove(t){if(!this.isDraggingReceipt)return;t.preventDefault();let e=t.touches[0],i=t.currentTarget,o=e.pageX-i.getBoundingClientRect().left+i.scrollLeft,s=e.pageY-i.getBoundingClientRect().top+i.scrollTop;i.scrollLeft=this.dragScrollLeft-(o-this.dragStartX),i.scrollTop=this.dragScrollTop-(s-this.dragStartY)}onReceiptTouchEnd(){this.isDraggingReceipt=!1}onReceiptImageLoad(t){this.receiptImagesLoading.delete(t)}onReceiptImageError(t){this.receiptImagesLoading.delete(t),console.error(`Failed to load receipt image ${t+1}`)}isReceiptImageLoading(t){return this.receiptImagesLoading.has(t)}onReceiptFileChange(t){return ue(this,null,function*(){let e=t.target;if(e.files&&e.files.length>0)try{this.receiptFiles=yield Dr(Array.from(e.files))}catch{this.receiptFiles=[],this.showAlert("Could not read the selected photo. Please select it again.")}})}formatFileSize(t){return xa(t)}totalReceiptBytes(){return va(this.receiptFiles)}isOverUploadLimit(){return this.totalReceiptBytes()>52428800}uploadReceipt(){if(!this.selectedBookingForReceipt)return;if(this.receiptFiles.length===0){this.showAlert("Please select at least one receipt file.");return}let t=ba(this.receiptFiles);if(t){this.showAlert(t);return}let e=this.selectedBookingForReceipt.id,i=[...this.receiptFiles],o=this.isReplacingReceipt;this.closeReceiptUpload(),o?(this.replacingBookingIds.add(e),this.openPlayService.replaceReceipt(e,i).subscribe({next:()=>{this.replacingBookingIds.delete(e),this.loadMyBookings(),this.loadSessionsForDate(this.selectedDate),this.successDialogType="receipt-replaced",this.showSuccessDialog=!0},error:s=>{this.replacingBookingIds.delete(e),console.error("Error replacing receipt:",s),this.showToastNotification("Receipt replacement failed: "+this.describeUploadError(s),"error")}})):(this.uploadingBookingIds.add(e),this.openPlayService.uploadReceipt(e,i).subscribe({next:()=>{this.uploadingBookingIds.delete(e),this.loadMyBookings(),this.loadSessionsForDate(this.selectedDate),this.successDialogType="receipt",this.showSuccessDialog=!0},error:s=>{this.uploadingBookingIds.delete(e),console.error("Error uploading receipt:",s),this.showToastNotification("Receipt upload failed: "+this.describeUploadError(s),"error")}}))}canReplaceReceipt(t){return t.status==="PENDING_PAYMENT"&&!!t.paymentProofUrl}
68promptCancelBooking(t){this.bookingToCancel=t,this.showCancelConfirm=!0}confirmCancelBooking(t){this.promptCancelBooking(t)}isCancelBlocked(){return!1}executeCancelBooking(){if(!this.bookingToCancel)return;let t=this.myBookingCredits.length;this.creditBalanceBefore=t,this.creditsEarnedFromCancel=0,this.creditBalanceAfter=t,this.creditBreakdownReady=!1,this.cancelledBookingHadCash=(this.bookingToCancel.totalAmount||0)>0&&(this.bookingToCancel.status==="PAYMENT_VERIFIED"||this.bookingToCancel.status==="PENDING_PAYMENT"&&!!this.bookingToCancel.paymentProofUrl),this.openPlayService.cancelBooking(this.bookingToCancel.id).subscribe({next:()=>{this.allSessionsInRange=[],this.loadSessionsForDate(this.selectedDate),this.loadAllSessionsForDateRange(),this.loadMyBookings(),this.openPlayService.getMyBookingCredits().subscribe({next:e=>{this.myBookingCredits=e,this.creditBalanceAfter=e.length,this.creditsEarnedFromCancel=Math.max(0,e.length-t),this.creditBreakdownReady=!0},error:()=>{}}),this.loadMyBookingStats(),this.showCancelConfirm=!1,this.bookingToCancel=null,this.successDialogType="cancel",this.showSuccessDialog=!0},error:e=>{console.error("Error cancelling booking:",e);let i=e?.payload?.error||e?.payload?.description||e?.message||"Failed to cancel booking.";this.showCancelConfirm=!1,this.bookingToCancel=null,this.cancelledBookingHadCash=!1,this.showToastNotification(i,"error")}})}closeCancelConfirm(){this.showCancelConfirm=!1,this.bookingToCancel=null}loadMyRefunds(){this.isLoadingRefunds=!0,this.openPlayService.getMyRefunds().subscribe({next:t=>{this.myRefunds=t,this.isLoadingRefunds=!1},error:()=>{this.myRefunds=[],this.isLoadingRefunds=!1}})}getPendingRefundCount(){return this.myRefunds.filter(t=>t.status==="PENDING").length}hasPaymentForCancellation(t){return!!t.paymentProofUrl||t.status==="PAYMENT_VERIFIED"}viewRefundPaymentProof(t){this.selectedRefundForReceipt=t,this.refundReceiptViewUrl=this.parseReceiptUrls(t.paymentProofUrl||""),this.showRefundReceiptModal=!0}viewRefundProof(t){this.selectedRefundForReceipt=t,this.refundReceiptViewUrl=this.parseReceiptUrls(t.refundProofUrl||""),this.showRefundReceiptModal=!0}closeRefundReceiptModal(){this.showRefundReceiptModal=!1,this.selectedRefundForReceipt=null,this.refundReceiptViewUrl=[]}parseReceiptUrls(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(i=>{let o=i;if(typeof i=="string")try{o=JSON.parse(i)}catch{return""}return o?.fileId?`${Be.apiBase}/drive/receipt/${o.fileId}`:""}).filter(Boolean):[]}catch{return[]}}startPaymentTimerCheck(){this.timerSubscription=Jg(3e4).subscribe(()=>{this.loadMyBookings()})}getTimeRemaining(t){if(!t.paymentDeadline)return{minutes:0,seconds:0,expired:!0,totalSeconds:0};let e=this.openPlayService.getTimeRemaining(t.paymentDeadline),i=e.minutes*60+e.seconds;return Ye(ze({},e),{totalSeconds:i})}formatTimeRemaining(t){let{minutes:e,seconds:i,expired:o}=this.getTimeRemaining(t);return o?"Expired":`${e}:${i.toString().padStart(2,"0")}`}getStatusLabel(t){switch(t){case"PENDING_PAYMENT":return"Pending Payment";case"PAYMENT_VERIFIED":return"Verified";case"CANCELLED":return"Cancelled";case"EXPIRED":return"Expired";default:return t}}getStatusShortLabel(t){switch(t){case"PENDING_PAYMENT":return"Pending";case"PAYMENT_VERIFIED":return"Verified";case"CANCELLED":return"Cancelled";case"EXPIRED":return"Expired";default:return t}}getStatusClass(t){switch(t){case"PENDING_PAYMENT":return"status-pending-receipt";case"PAYMENT_VERIFIED":return"status-verified";case"CANCELLED":return"status-cancelled";case"EXPIRED":return"status-expired";default:return""}}formatBookingDateTime(t){return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}formatDeadline(t){return new Date(t).toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})}formatScanTime(t){return t?new Date(t).toLocaleTimeString("en-PH",{hour:"2-digit",minute:"2-digit",hour12:!0}):""}canUploadReceipt(t){return t.status==="PENDING_PAYMENT"&&!t.paymentProofUrl}canCancelBooking(t){if(t.status!=="PENDING_PAYMENT"&&t.status!=="PAYMENT_VERIFIED")return!1;if(t.status==="PENDING_PAYMENT"&&!t.paymentProofUrl)return!0;
68if(t.sessionDate&&t.sessionStartTime){let e=new Date(`${t.sessionDate}T${t.sessionStartTime}`),i=new Date(e.getTime()-12*60*60*1e3);if(new Date>=i)return!1}else if(t.sessionDate){let e=new Date;e.setHours(0,0,0,0);let i=new Date(t.sessionDate);if(i.setHours(0,0,0,0),i<=e)return!1}return!0}setActiveTab(t){this.activeTab=t,t==="myBookings"&&this.applyBookingsFilter(),t==="receivedSlots"&&this.loadReceivedSlots(),t==="transferHistory"&&(this.loadIncomingTransfers(),this.loadTransferHistory()),t==="refundHistory"&&this.loadMyRefunds()}setBookingsFilter(t){this.filterDate="",this.bookingsFilter=t,this.myBookingsPage=0,this.loadMyBookings()}onFilterDateChange(){this.applyBookingsFilter()}clearFilterDate(){this.filterDate="",this.applyBookingsFilter()}applyBookingsFilter(){if(this.filterDate){this.filteredMyBookings=this.myBookings.filter(o=>o.sessionDate===this.filterDate),this.filteredMyBookings.sort((o,s)=>o.sessionStartTime&&s.sessionStartTime?this.compareSessionTimes(o.sessionStartTime,s.sessionStartTime):new Date(o.bookingDateTime).getTime()-new Date(s.bookingDateTime).getTime());return}let t=new Date,e=new Date(t.getFullYear(),t.getMonth(),t.getDate()),i=new Date(e);switch(i.setDate(i.getDate()+1),this.bookingsFilter){case"today":this.filteredMyBookings=this.myBookings.filter(o=>{if(!o.sessionDate)return!1;let s=new Date(o.sessionDate);return s>=e&&s<i});break;case"upcoming":this.filteredMyBookings=this.myBookings.filter(o=>o.sessionDate?new Date(o.sessionDate)>=i:!1);break;case"past":this.filteredMyBookings=this.myBookings.filter(o=>o.sessionDate?new Date(o.sessionDate)<e:!1);break;case"all":default:this.filteredMyBookings=[...this.myBookings];break}this.filteredMyBookings.sort((o,s)=>{let m=o.sessionDate?new Date(o.sessionDate).getTime():new Date(o.bookingDateTime).getTime(),f=s.sessionDate?new Date(s.sessionDate).getTime():new Date(s.bookingDateTime).getTime();return this.bookingsFilter==="upcoming"||this.bookingsFilter==="today"?m-f:f-m})}canViewReceipt(t){return!!t.paymentProofUrl}setReceivedSlotsFilter(t){this.receivedSlotsFilterDate="",this.receivedSlotsFilter=t,this.applyReceivedSlotsFilter()}onReceivedSlotsFilterDateChange(){this.applyReceivedSlotsFilter()}clearReceivedSlotsFilterDate(){this.receivedSlotsFilterDate="",this.applyReceivedSlotsFilter()}applyReceivedSlotsFilter(){if(this.receivedSlotsFilterDate){this.filteredReceivedSlots=this.receivedSlots.filter(o=>o.sessionDate===this.receivedSlotsFilterDate),this.filteredReceivedSlots.sort((o,s)=>o.sessionStartTime&&s.sessionStartTime?this.compareSessionTimes(o.sessionStartTime,s.sessionStartTime):0);return}let t=new Date,e=new Date(t.getFullYear(),t.getMonth(),t.getDate()),i=new Date(e);switch(i.setDate(i.getDate()+1),this.receivedSlotsFilter){case"today":this.filteredReceivedSlots=this.receivedSlots.filter(o=>{if(!o.sessionDate)return!1;let s=new Date(o.sessionDate);return s>=e&&s<i});break;case"upcoming":this.filteredReceivedSlots=this.receivedSlots.filter(o=>o.sessionDate?new Date(o.sessionDate)>=i:!1);break;case"past":this.filteredReceivedSlots=this.receivedSlots.filter(o=>o.sessionDate?new Date(o.sessionDate)<e:!1);break;case"all":default:this.filteredReceivedSlots=[...this.receivedSlots];break}this.filteredReceivedSlots.sort((o,s)=>{let m=o.sessionDate?new Date(o.sessionDate).getTime():0,f=s.sessionDate?new Date(s.sessionDate).getTime():0;return this.receivedSlotsFilter==="upcoming"||this.receivedSlotsFilter==="today"?m-f:f-m})}getReceiptUrls(t){if(!t.paymentProofUrl)return console.log("No paymentProofUrl found"),[];console.log("Raw paymentProofUrl:",t.paymentProofUrl);try{let e=JSON.parse(t.paymentProofUrl);if(console.log("Parsed receipts array:",e),!Array.isArray(e))return console.error("Receipts is not an array:",e),[];let i=e.map((o,s)=>{console.log(`Processing receipt ${s}:`,o);let m=o;if(typeof o=="string")try{m=JSON.parse(o),console.log(`Parsed metadata ${s}:`,m)}catch(f){return console.error(`Error parsing receipt ${s}:`,f),""}if(m.fileId){let f=`${Be.apiBase}/drive/receipt/${m.fileId}`;return console.log(`Generated URL ${s}:`,f),f}return""}).filter(o=>o!=="");return console.log("Final URLs:",i),i}catch(e){return console.error("Error parsing receipt URLs:",e),[]}}getSessionStatusText(t){switch(t.status){case"ONGOING":return"Live Now";case"UPCOMING":return"Upcoming";case"COMPLETED":return"Completed";default:return""}}isDateSelected(t){return this.isSameDay(t,this.selectedDate)}isSameDay(t,e){return t.getFullYear()===e.getFullYear()&&t.getMonth()===e.getMonth()&&t.getDate()===e.getDate()}isPastDate(t){let e=new Date;e.setHours(0,0,0,0);let i=new Date(t);return i.setHours(0,0,0,0),i<e}hasSessionStarted(t){if(t?.sessionDate&&t?.sessionStartTime){let e=new Date(`${t.sessionDate}T${t.sessionStartTime}`);return new Date>=e}return!1}isToday(t){return this.isSameDay(t,new Date)}getMassNotice(){let t=this.selectedDate.getDay();return t===6?{label:"Saturday",time:"5:00 PM \u2013 6:00 PM"}:t===0?{label:"Sunday",time:"11:00 AM \u2013 12:00 PM"}:null}formatDate(t){return t.toLocaleDateString("en-US",{month:"short",day:"numeric"})}formatDateFull(t){return t.toLocaleDateString("en-US",{weekday:"long",month:"long",day:"numeric",year:"numeric"})}getDayName(t){return t.toLocaleDateString("en-US",{weekday:"short"})}formatDateForApi(t){let e=t.getFullYear(),i=String(t.getMonth()+1).padStart(2,"0"),o=String(t.getDate()).padStart(2,"0");return`${e}-${i}-${o}`}getSessionsWithBookingsCount(t){let e=this.formatDateForApi(t);return this.allSessionsInRange.filter(o=>o.sessionDate===e).filter(o=>(o.currentPlayers||0)>0).length}hasSessionsOnDate(t){let e=this.formatDateForApi(t);return this.allSessionsInRange.some(i=>i.sessionDate===e)}trackByIndex(t){return t}trackByPlayerKey(t,e){return(e.userId||e.name)+"_"+e.bookedBy}openQrModal(t){this.selectedBookingForQr=t,this.bookingPlayers=[],this.playerQrImages=new Map,this.isLoadingQrCodes=!0,this.showQrModal=!0,this.openPlayService.getBookingPlayers(t.id).subscribe({next:e=>ue(this,null,function*(){this.bookingPlayers=e;for(let i of e)if(i.qrToken)try{let o=yield this.generateQrWithLogo(i.qrToken);this.playerQrImages.set(i.id,o)}catch(o){console.error("QR generation error for player",i.playerName,o)}this.isLoadingQrCodes=!1}),error:e=>{console.error("Error loading booking players:",e),this.isLoadingQrCodes=!1}})}generateQrWithLogo(t){return ue(this,null,function*(){let e=document.createElement("canvas");return yield O_.default.toCanvas(e,t,{width:512,margin:2,errorCorrectionLevel:"M",color:{dar
68k:"#1a1a2e",light:"#ffffff"}}),e.toDataURL("image/png",1)})}closeQrModal(){this.showQrModal=!1,this.selectedBookingForQr=null,this.bookingPlayers=[],this.playerQrImages=new Map}downloadQrCode(t){let e=this.playerQrImages.get(t.id);if(!e)return;let i=document.createElement("a");i.href=e,i.download=`qr-${t.playerName.replace(/\s+/g,"-").toLowerCase()}.png`,i.click()}getPlayerQrImage(t){return this.playerQrImages.get(t)}openTransferModal(t,e){this.showQrModal=!1,this.transferPlayerRecord=t,this.transferBookingId=e,this.transferNote="",this.transferToUsername="",this.transferInputValue="",this.transferSelectedUser=null,this.transferSearchResults=[],this.showTransferModal=!0}closeTransferModal(){this.showTransferModal=!1,this.selectedBookingForQr&&(this.showQrModal=!0)}onTransferSearch(t){let e=t.target.value;this.transferInputValue=e,this.transferSelectedUser&&(this.transferSelectedUser=null,this.transferToUsername="");let i=e.startsWith("@")?e.substring(1):e.trim();this.transferSearching=!0,this.openPlayService.searchUsers(i).subscribe({next:o=>{this.transferSearchResults=o,this.transferSearching=!1},error:()=>{this.transferSearchResults=[],this.transferSearching=!1}})}onTransferInputFocus(){!this.transferSelectedUser&&this.transferSearchResults.length===0&&(this.transferSearching=!0,this.openPlayService.searchUsers("").subscribe({next:t=>{this.transferSearchResults=t,this.transferSearching=!1},error:()=>{this.transferSearchResults=[],this.transferSearching=!1}}))}selectTransferUser(t){this.transferSelectedUser=t,this.transferToUsername=t.username,this.transferSearchResults=[],this.transferInputValue="",this.transferSearching=!1}submitTransfer(){if(!this.transferSelectedUser||!this.transferPlayerRecord)return;this.transferSubmitting=!0;let t={playerRecordId:this.transferPlayerRecord.id,toUsername:this.transferSelectedUser.username,transferNote:this.transferNote};this.openPlayService.initiateTransfer(this.transferBookingId,t).subscribe({next:e=>{this.transferSubmitting=!1,this.showTransferModal=!1,this.successMessage=`Your transfer request has been sent to ${e.toFullname}. They will need to accept it.`,this.successDialogType="transfer",this.showSuccessDialog=!0},error:e=>{this.transferSubmitting=!1,this.showToastNotification(e.payload?.error||e.message||"Failed to initiate transfer","error")}})}loadIncomingTransfers(){this.openPlayService.getIncomingTransfers().subscribe({next:t=>{this.incomingTransfers=t}})}openIncomingTransfersModal(){this.loadIncomingTransfers(),this.showIncomingTransfersModal=!0}acceptTransfer(t){this.openConfirmDialog(`Accept slot transfer from ${t.fromFullname}?`,()=>{this.openPlayService.acceptTransfer(t.transferToken).subscribe({next:()=>{this.loadIncomingTransfers(),this.loadMyBookings(),this.loadReceivedSlots(),this.activeTab==="transferHistory"&&this.loadTransferHistory(),this.successMessage='Slot accepted! You can now find your QR code in My Bookings under "Received Slots".',this.successDialogType="accept",this.showSuccessDialog=!0},error:e=>{this.showToastNotification(e.payload?.error||e.message||"Failed to accept transfer","error")}})})}initiateRejectTransfer(t){this.respondingToTransfer=t,this.showRejectReasonInput=!0,this.rejectReason=""}confirmRejectTransfer(){this.respondingToTransfer&&this.openPlayService.rejectTransfer(this.respondingToTransfer.transferToken,this.rejectReason||void 0).subscribe({next:()=>{this.showToastNotification("Transfer rejected.","info"),this.showRejectReasonInput=!1,this.respondingToTransfer=null,this.loadIncomingTransfers(),this.activeTab==="transferHistory"&&this.loadTransferHistory()},error:t=>{this.showToastNotification(t.payload?.error||t.message||"Failed to reject transfer","error")}})}cancelTransferRequest(t){this.openConfirmDialog("Cancel this transfer request?",()=>
68{this.openPlayService.cancelTransfer(t.id).subscribe({next:()=>{this.showToastNotification("Transfer request cancelled.","info"),this.selectedBookingForQr&&this.selectedBookingForQr.id===t.bookingId&&this.openQrModal(this.selectedBookingForQr)},error:e=>{this.showToastNotification(e.payload?.error||e.message||"Failed to cancel transfer","error")}})})}cancelPendingTransferForPlayer(t){this.openPlayService.getOutgoingTransfers().subscribe({next:e=>{let i=e.find(o=>o.playerRecordId===t.id&&o.status==="PENDING");i&&this.cancelTransferRequest(i)}})}loadReceivedSlots(){this.openPlayService.getReceivedSlots().subscribe({next:t=>{this.receivedSlots=t,this.applyReceivedSlotsFilter()},error:()=>{this.receivedSlots=[],this.filteredReceivedSlots=[]}})}openReceivedSlotQrView(t){this.selectedReceivedSlot=t,this.receivedSlotQrImage="",this.isLoadingReceivedSlotQr=!0,this.showReceivedSlotQrModal=!0,t.qrToken?this.generateQrWithLogo(t.qrToken).then(e=>{this.receivedSlotQrImage=e,this.isLoadingReceivedSlotQr=!1}).catch(()=>{this.isLoadingReceivedSlotQr=!1}):this.isLoadingReceivedSlotQr=!1}closeReceivedSlotQrModal(){this.showReceivedSlotQrModal=!1,this.selectedReceivedSlot=null,this.receivedSlotQrImage=""}openTransferFromReceivedSlot(){let t=this.selectedReceivedSlot;t&&(this.closeReceivedSlotQrModal(),this.openTransferModal(t,t.bookingId))}promptCancelReceivedSlot(t){if(!t.transferredBy){this.cancelRestrictionBookedByName=t.bookedByName||"the booking owner",this.showCancelRestrictionModal=!0;return}this.openConfirmDialog(`Cancel your received slot for "${t.playerName}"? This cannot be undone.`,()=>this.executeCancelReceivedSlot(t))}closeCancelRestrictionModal(){this.showCancelRestrictionModal=!1,this.cancelRestrictionBookedByName=""}executeCancelReceivedSlot(t){this.openPlayService.cancelReceivedSlot(t.id).subscribe({next:()=>{this.showToastNotification("Slot cancelled successfully.","info"),this.closeReceivedSlotQrModal(),this.loadReceivedSlots(),this.loadMyBookings(),this.loadSessionsForDate(this.selectedDate)},error:e=>{this.showToastNotification(e.payload?.error||e.message||"Failed to cancel slot","error")}})}canCancelReceivedSlot(t){if(t.status!=="READY_TO_PLAY"||!t.sessionDate||!t.sessionStartTime)return!1;let e=new Date(`${t.sessionDate}T${t.sessionStartTime}`),i=new Date(e.getTime()-12*60*60*1e3);return new Date<i}downloadReceivedSlotQr(t){if(!this.receivedSlotQrImage)return;let e=document.createElement("a");e.href=this.receivedSlotQrImage,e.download=`qr-${(t.playerName||"slot").replace(/\s+/g,"-").toLowerCase()}.png`,e.click()}loadTransferHistory(){this.isLoadingTransferHistory=!0;let t=!1,e=!1,i=()=>{t&&e&&(this.isLoadingTransferHistory=!1)};this.openPlayService.getOutgoingTransfers().subscribe({next:o=>{this.transferHistoryOutgoing=o,t=!0,i()},error:()=>{this.transferHistoryOutgoing=[],t=!0,i()}}),this.openPlayService.getAllIncomingTransfers().subscribe({next:o=>{this.transferHistoryIncoming=o,e=!0,i()},error:()=>{this.transferHistoryIncoming=[],e=!0,i()}})}get allTransferHistory(){let t=new Set;return[...this.transferHistoryOutgoing,...this.transferHistoryIncoming].filter(e=>t.has(e.id)?!1:(t.add(e.id),!0)).sort((e,i)=>new Date(i.createdAt).getTime()-new Date(e.createdAt).getTime())}getTransferStatusClass(t){switch(t){case"PENDING":return"transfer-status-pending";case"ACCEPTED":return"transfer-status-accepted";case"REJECTED":return"transfer-status-rejected";case"CANCELLED":return"transfer-status-cancelled";case"EXPIRED":return"transfer-status-expired";default:return""}}getTransferStatusLabel(t){switch(t){case"PENDING":return"Pending";case"ACCEPTED":return"Accepted";case"REJECTED":return"Declined";case"CANCELLED":return"Cancelled";case"EXPIRED":return"Expired";default:return t}}static \u0275fac=function(e){return new(e||n)(ae(nt),ae(qo),ae(Va),ae(it),ae(je),ae(Fn))};static \u0275cmp=We({type:n,selectors:[["app-open-play"]],decls:56,vars:44,consts:[["noDiscount",""],["taggedAtBookingTab",""],["vatInclusive",""],["noReceipt",""],[1,"open-play-container"],[1,"page-header"],[1,"subtitle"],["class","browse-quick-stats",4,"ngIf"],[1,"tab-navigation",2,"display","flex","align-items","center","gap","8px","flex-wrap","wrap"],[1,"tab-btn",3,"click"],[1,"bi","bi-calendar3"],[1,"bi","bi-bookmark-fill"],["class","badge",4,"ngIf"],[1,"bi","bi-arrow-down-left-circle-fill"],[1,"bi","bi-clock-history"],["class","badge badge-pending-transfers",4,"ngIf"],[1,"bi","bi-arrow-counterclockwise"],["class","badge badge-pending",4,"ngIf"],[4,"ngIf"],["class","my-bookings-tab",4,"ngIf"],["class","modal-overlay",3,"click",4,"ngIf"],["class","modal-overlay",4,"ngIf"],["class","modal-overlay","style","z-index: 1100;",4,"ngIf"],["class","modal-overlay modal-overlay-top",4,"ngIf"],["class","modal-overlay-fullscreen",3,"click",4,"ngIf"],["class","modal-overlay modal-overlay-supreme",3,"click",4,"ngIf"],["class","modal-overlay modal-overlay-top",3,"click",4,"ngIf"],["class","toast-notification",3,"ngClass",4,"ngIf"],[3,"session","onClose","showBack",4,"ngIf"],[1,"browse-quick-stats"],["title","View upcoming bookings",1,"quick-stat-pill","upcoming",3,"click"],[1,"bi","bi-calendar2-check"],[1,"qs-value"],[1,"qs-label"],["title","View rebooking credits",1,"quick-stat-pill","credits",3,"click"],[1,"bi","bi-coin"],[1,"badge"],[1,"badge","badge-pending-transfers"],[1,"badge","badge-pending"],[1,"date-browser"],[1,"date-scroll"],["class","load-more-past","type","button","title","Load more past sessions",3,"click",4,"ngIf"],[4,"ngFor","ngForOf"],[1,"selected-date-info"],["class","mass-notice-banner",4,"ngIf"],["class","loading-container",4,"ngIf"],["class","sessions-container",4,"ngIf"],["type","button","title","Load more past sessions",1,"load-more-past",3,"click"],[1,"bi","bi-arrow-left-short"],["class","past-divider","type","button",3,"title","click",4,"ngIf"],["class","date-card",3,"id","selected","past","today","has-sessions","click",4,"ngIf"],["type","button",1,"past-divider",3,"click","title"],[1,"bi"],[1,"date-card",3,"click","id"],[1,"day-name"],[1,"day-number"],[1,"month-name"],["class","date-dot",4,"ngIf"],[1,"date-dot"],[1,"mass-notice-banner"],[1,"bi","bi-calendar2-x"],[1,"mass-notice-title"],[1,"loading-container"],[1,"loading-spinner"],[1,"sessions-container"],["class","session-card",3,"expanded",4,"ngFor","ngForOf"],["class","no-sessions",4,"ngIf"],[1,"session-card"],[1,"session-header",3,"click"],[1,"session-time-info"],[1,"time-range"],[1,"session-status"],[1,"status-badge"],[1,"price"],[1,"capacity-info"],[1,"capacity-header"],[1,"label"],[1,"count"],[1,"progress-bar"],[1,"progress-fill"],["class","slots-info",4,"ngIf"],["class","slots-info full",4,"ngIf"],["class","session-action-bar",4,"ngIf"],[1,"players-preview-compact"],[1,"btn-view-players",3,"click"],[1,"btn-players-content"],["class","player-avatars-mini",4,"ngIf"],["class","player-avatars-mini empty-state",4,"ngIf"],[1,"btn-players-text"],[1,"bi","bi-people-fill"],[1,"bi","bi-arrow-right"],["class","my-session-bookings",4,"ngIf"],["class","session-actions",4,"ngIf"],[1,"slots-info"],[1,"slots-info","full"],[1,"session-action-bar"],[1,"session-action-left"],[1,"btn-follow",3,"click","title"],["class","follow-count",4,"ngIf"],["class","btn-admin-walkin",3,"click",4,"ngIf"],[1,"follow-count"],[1,"btn-admin-walkin",3,"click"],[1,"bi","bi-pers
68on-plus-fill"],[1,"player-avatars-mini"],["class","avatar-mini",3,"class",4,"ngFor","ngForOf"],["class","avatar-mini-more",4,"ngIf"],[1,"avatar-mini"],[1,"avatar-mini-more"],[1,"player-avatars-mini","empty-state"],[1,"bi","bi-person-plus"],[1,"my-session-bookings"],[1,"session-bookings-header"],[1,"btn-compact","btn-chat-compact","session-bookings-chat",3,"click","title"],[1,"bi","bi-chat-dots-fill"],["class","session-booking-pill","title","View in My Bookings",3,"click",4,"ngFor","ngForOf"],[1,"session-bookings-footer"],["class","btn-compact btn-book-another-compact","title","Book additional slots for this session",3,"click",4,"ngIf"],["title","View in My Bookings",1,"session-booking-pill",3,"click"],[1,"session-booking-pill-main"],[1,"session-booking-pill-left"],[1,"session-booking-index"],[1,"session-booking-details"],[1,"session-booking-id"],[1,"session-booking-meta"],["class","session-booking-credit-badge",4,"ngIf"],[1,"session-booking-pill-right"],["class","session-booking-timer",3,"urgent",4,"ngIf"],["class","session-booking-receipt-pending",4,"ngIf"],[1,"booking-status-badge-sm"],[1,"bi","bi-chevron-right","session-booking-arrow"],["class","session-booking-loading",3,"click",4,"ngIf"],["class","session-booking-actions",3,"click",4,"ngIf"],[1,"session-booking-credit-badge"],[1,"session-booking-timer"],[1,"bi","bi-clock"],[1,"session-booking-receipt-pending"],[1,"bi","bi-hourglass-split"],[1,"session-booking-loading",3,"click"],[1,"upload-spinner-small"],[1,"session-booking-actions",3,"click"],["class","btn-compact btn-pay-info-compact",3,"click",4,"ngIf"],["class","btn-compact btn-upload-compact",3,"click",4,"ngIf"],["class","btn-compact btn-replace-compact",3,"click",4,"ngIf"],["class","btn-compact btn-view-compact",3,"click",4,"ngIf"],["class","btn-compact btn-cancel-compact",3,"click",4,"ngIf"],[1,"btn-compact","btn-pay-info-compact",3,"click"],[1,"bi","bi-info-circle-fill"],[1,"btn-compact","btn-upload-compact",3,"click"],[1,"bi","bi-cloud-arrow-up"],[1,"btn-compact","btn-replace-compact",3,"click"],[1,"bi","bi-arrow-repeat"],[1,"btn-compact","btn-view-compact",3,"click"],[1,"bi","bi-eye"],[1,"btn-compact","btn-cancel-compact",3,"click"],[1,"bi","bi-x-circle"],["title","Book additional slots for this session",1,"btn-compact","btn-book-another-compact",3,"click"],[1,"bi","bi-plus-circle"],[1,"session-actions"],[1,"session-action-row"],[1,"btn-session-chat-icon",3,"click","title"],["class","btn btn-primary btn-book",3,"click",4,"ngIf"],["class","full-message",4,"ngIf"],["class","completed-message",4,"ngIf"],[1,"btn","btn-primary","btn-book",3,"click"],[1,"full-message"],[1,"bi","bi-exclamation-circle"],[1,"completed-message"],[1,"bi","bi-check-circle"],[1,"no-sessions"],[1,"bi","bi-calendar-x","empty-icon"],[1,"no-sessions-hint"],[1,"my-bookings-tab"],[1,"my-bookings-header"],["class","all-bookings-container",4,"ngIf"],[1,"all-bookings-container"],["class","no-bookings-message",4,"ngIf"],["class","booking-card-full",4,"ngFor","ngForOf"],[1,"no-bookings-message"],[1,"bi","bi-arrow-left-right"],[1,"booking-card-full"],[1,"booking-card-header-full"],[1,"booking-session-date"],[1,"booking-status-badge"],[1,"booking-session-meta"],["class","booking-time-range",4,"ngIf"],["class","booking-ref-id",4,"ngIf"],[1,"booking-card-body-full"],[1,"booking-info-row"],[1,"info-item"],[1,"info-label"],[1,"bi","bi-person-badge"],[1,"info-value"],[1,"bi","bi-calendar-plus"],[1,"info-value","info-value-sm"],["class","transfer-note-block","style","margin-top: 8px;",4,"ngIf"],["class","status-message cancelled-message","style","margin-top: 8px;",4,"ngIf"],["class","booking-info-row","style","margin-top: 6px;",4,"ngIf"],[1,"bi","bi-arrow-up-right-circle",2,"color","#f59e0b"],[1,"transfer-card-username"],[1,"bi","bi-arrow-down-left-circle",2,"color","#10b981"],[1,"booking-time-range"],[1,"booking-ref-id"],[1,"bi","bi-ticket-perforated"],[1,"transfer-note-block",2,"margin-top","8px"],[1,"bi","bi-chat-left-text"],[1,"status-message","cancelled-message",2,"margin-top","8px"],[1,"bi","bi-x-circle-fill"],[1,"booking-info-row",2,"margin-top","6px"],[1,"bi","bi-check2-all"],["class","booking-card-actions-full",4,"ngIf"],["class","transfer-reject-form","style","padding: 0 16px 16px;",4,"ngIf"],[1,"booking-card-actions-full"],[1,"btn-transfer-accept",3,"click"],[1,"bi","bi-check-lg"],[1,"btn-transfer-reject",3,"click"],[1,"bi","bi-x-lg"],[1,"transfer-reject-form",2,"padding","0 16px 16px"],["rows","2","placeholder","Reason for rejection (optional)...",1,"transfer-reject-textarea",3,"ngModelChange","ngModel"],[1,"transfer-reject-actions"],[1,"btn","btn-danger",3,"click"],[1,"btn","btn-secondary",3,"click"],[1,"refund-self-service-banner"],[1,"rssb-title"],[1,"rssb-body"],["class","booking-card-full refund-card",4,"ngFor","ngForOf"],[1,"booking-card-full","refund-card"],[1,"session-time"],[1,"booking-card-body"],[1,"info-value","booking-id-tag"],[1,"info-value","amount-highlight"],["class","booking-info-row",4,"ngIf"],["class","refund-decline-reason",4,"ngIf"],[1,"booking-card-actions"],[1,"refund-decline-reason"],[1,"bi","bi-info-circle"],[1,"bi","bi-receipt"],[1,"bi","bi-image"],[1,"modal-overlay",3,"click"],[1,"modal-content","receipt-view-modal",3,"click"],[1,"modal-header"],[1,"close-btn",3,"click"],[1,"bi","bi-x"],[1,"modal-body","receipt-body"],["class","no-receipt-placeholder",4,"ngIf"],["class","receipt-image-wrapper",4,"ngFor","ngForOf"],[1,"no-receipt-placeholder"],[1,"bi","bi-image-fill"],[1,"receipt-image-wrapper"],[1,"receipt-image",3,"src","alt"],["class","booking-stats-grid",4,"ngIf"],[1,"bookings-filter-bar"],[1,"filter-btn",3,"click"],[1,"bi","bi-list-ul"],[1,"filter-count"],[1,"bi","bi-calendar-day"],[1,"bi","bi-calendar-check"],[1,"bi","bi-calendar-x"],[1,"filter-date-wrapper"],["type","date","title","Jump to a specific date",1,"filter-date-input",3,"ngModelChange","change","ngModel"],["class","filter-date-clear","type","button","title","Clear date filter",3,"click",4,"ngIf"],["class","loading-container","style","padding: 20px; text-align: center;
68",4,"ngIf"],["class","my-bookings-pagination",4,"ngIf"],[1,"booking-stats-grid"],[1,"stat-tile"],[1,"stat-tile-icon","accent"],[1,"stat-tile-body"],[1,"stat-tile-value"],[1,"stat-tile-label"],[1,"stat-tile-icon","green"],[1,"bi","bi-trophy"],[1,"stat-tile-icon","gold"],[1,"stat-tile-icon","muted"],[1,"bi","bi-journal-bookmark"],[1,"stat-tile-icon","danger"],[1,"stat-tile-icon","blue"],[1,"bi","bi-people"],["type","button","title","Clear date filter",1,"filter-date-clear",3,"click"],[1,"bi","bi-calendar-event"],[1,"bi","bi-cash"],[4,"ngIf","ngIfElse"],["class","info-item",4,"ngIf"],["class","booking-credit-strip",4,"ngIf"],["class","booking-discount-strip",3,"strip-approved","strip-pending",4,"ngIf"],["class","booking-player-names",4,"ngIf"],["class","status-message warning-message",4,"ngIf"],["class","status-message info-message",4,"ngIf"],["class","status-message success-message",4,"ngIf"],["class","status-message cancelled-message",4,"ngIf"],["class","status-message expired-message",4,"ngIf"],["class","btn btn-upload",3,"click",4,"ngIf"],["class","btn btn-upload btn-uploading","disabled","",4,"ngIf"],["class","btn btn-replace",3,"click",4,"ngIf"],["class","btn btn-replace btn-uploading","disabled","",4,"ngIf"],["class","btn btn-view",3,"click",4,"ngIf"],["class","btn btn-qr",3,"click",4,"ngIf"],[1,"amount-original"],[1,"amount-discounted"],[1,"bi","bi-credit-card"],[1,"payment-method-badge"],[1,"booking-credit-strip"],[1,"strip-type"],[1,"strip-savings"],[1,"strip-status"],[1,"booking-discount-strip"],[1,"booking-player-names"],[1,"player-name-tags"],["class","player-name-tag",4,"ngFor","ngForOf"],[1,"player-name-tag"],[1,"status-message","warning-message"],[1,"bi","bi-exclamation-triangle-fill"],[1,"status-message","info-message"],[1,"status-message","success-message"],[1,"bi","bi-check-circle-fill"],[1,"status-message","cancelled-message"],[1,"status-message","expired-message"],[1,"bi","bi-clock-fill"],[1,"btn","btn-upload",3,"click"],["disabled","",1,"btn","btn-upload","btn-uploading"],[1,"btn","btn-replace",3,"click"],["disabled","",1,"btn","btn-replace","btn-uploading"],[1,"btn","btn-view",3,"click"],[1,"btn","btn-qr",3,"click"],[1,"bi","bi-qr-code"],[1,"freeze-notice-inline"],[1,"bi","bi-lock-fill"],["class","btn-transfer-slot",3,"click",4,"ngIf"],[1,"btn-transfer-slot",3,"click"],[1,"bi","bi-inbox"],[1,"no-bookings-actions"],["class","btn btn-secondary",3,"click",4,"ngIf"],[1,"btn","btn-primary",3,"click"],[1,"loading-container",2,"padding","20px","text-align","center"],[1,"spinner"],[1,"loading-text"],[1,"my-bookings-pagination"],[1,"btn-page",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"page-info"],[1,"bi","bi-chevron-right"],["class","booking-card-full received-slot-card",4,"ngFor","ngForOf"],[1,"booking-card-full","received-slot-card"],[1,"qr-player-badge"],[3,"ngSwitch"],[4,"ngSwitchCase"],[1,"bi","bi-person-fill"],[1,"transfer-history-note",2,"margin-top","8px"],["class","checkin-timestamp-row",4,"ngIf"],["class","btn-compact btn-cancel-compact",3,"btn-cancel-disabled","click",4,"ngIf"],[1,"bi","bi-play-circle-fill"],[1,"bi","bi-trophy-fill"],[1,"bi","bi-person-dash-fill"],[1,"bi","bi-person-check-fill"],[1,"checkin-timestamp-row"],[1,"bi","bi-qr-code-scan"],[1,"modal-overlay"],[1,"modal-content","booking-modal",3,"click"],[1,"modal-body"],[1,"booking-session-info"],[1,"session-info-row"],[1,"booking-players-section"],[1,"players-hint"],[1,"booking-players-list"],["class","booking-player-item",4,"ngFor","ngForOf","ngForTrackBy"],[1,"add-player-section"],[1,"btn","btn-add-player",3,"click","disabled","title"],["class","discount-solo-notice",4,"ngIf"],["class","booking-credit-section",4,"ngIf"],["class","booking-discount-section",4,"ngIf"],[1,"booking-summary"],[1,"summary-row"],["class","summary-row discount-row",4,"ngIf"],[1,"summary-row","total"],["class","payment-info-box",4,"ngIf"],["class","credit-info-box",4,"ngIf"],[1,"modal-footer"],[1,"btn","btn-secondary",3,"click","disabled"],[1,"btn","btn-primary",3,"click","disabled"],[1,"booking-player-item"],[1,"player-number"],["class","tagged-user-badge","title","Registered player",4,"ngIf"],[1,"player-input-wrapper"],["type","text","autocomplete","off",1,"player-name-input",3,"ngModelChange","input","focus","blur","ngModel","placeholder"],["class","player-suggestions",4,"ngIf"],["class","assign-self-btn","title","Assign this slot to me",3,"click",4,"ngIf"],["class","remove-player
68-btn",3,"click",4,"ngIf"],["title","Registered player",1,"tagged-user-badge"],[1,"player-suggestions"],["class","suggestion-item",3,"mousedown",4,"ngFor","ngForOf"],["class","no-suggestions",4,"ngIf"],[1,"suggestion-item",3,"mousedown"],[1,"suggestion-avatar"],["alt","",3,"src",4,"ngIf"],["class","suggestion-avatar-placeholder",4,"ngIf"],[1,"suggestion-info"],[1,"suggestion-name"],[1,"suggestion-username"],["alt","",3,"src"],[1,"suggestion-avatar-placeholder"],[1,"no-suggestions"],["title","Assign this slot to me",1,"assign-self-btn",3,"click"],[1,"bi","bi-person-fill-add"],[1,"remove-player-btn",3,"click"],[1,"discount-solo-notice"],[1,"booking-credit-section"],[1,"credit-section-header"],[1,"credit-count-badge"],[1,"credit-section-body"],[1,"credit-description"],[1,"credit-toggle"],["type","checkbox","name","useCredits",3,"ngModelChange","ngModel"],["class","credit-summary",4,"ngIf"],["class","credit-applied-note",4,"ngIf"],["class","credit-applied-note partial",4,"ngIf"],[1,"credit-summary"],[1,"credit-summary-row"],[1,"credit-summary-row","applied"],[1,"credit-summary-row","remaining"],[1,"credit-applied-note"],[1,"bi","bi-patch-check-fill"],[1,"credit-applied-note","partial"],[1,"booking-discount-section"],[1,"discount-section-header"],[1,"bi","bi-tag-fill"],[1,"discount-body"],[1,"discount-select",3,"ngModelChange","ngModel"],["value",""],[3,"value",4,"ngFor","ngForOf"],["class","discount-status verified",4,"ngIf"],["class","discount-status pending",4,"ngIf"],["class","discount-status needs-upload",3,"proof-missing",4,"ngIf"],["class","discount-vat-breakdown",4,"ngIf"],[3,"value"],[1,"discount-status","verified"],[1,"discount-status","pending"],[1,"discount-status","needs-upload"],[1,"upload-label"],[1,"bi","bi-upload"],["type","file","multiple","","accept","image/*,.pdf",1,"discount-file-input",3,"change"],["class","file-count",4,"ngIf"],["class","proof-required-hint",4,"ngIf"],[1,"file-count"],[1,"bi","bi-paperclip"],[1,"proof-required-hint"],[1,"discount-vat-breakdown"],[1,"summary-row","vat-deduction-row"],[1,"vat-deduction-value"],[1,"summary-row","discount-row"],[1,"discount-value"],[1,"payment-info-box"],[1,"gcash-info"],["class","payment-options-text",4,"ngIf"],[1,"payment-options-text"],[1,"credit-info-box"],[1,"modal-overlay",2,"z-index","1100"],[1,"modal-content","booking-confirm-dialog",3,"click"],[1,"modal-header","booking-confirm-header"],[1,"booking-confirm-icon"],[1,"modal-body","booking-confirm-body"],[1,"booking-confirm-schedule"],[1,"confirm-schedule-row"],[1,"confirm-label"],[1,"confirm-value"],[1,"bi","bi-geo-alt"],[1,"booking-confirm-warning"],[1,"warning-icon-wrap"],[1,"bi","bi-shield-exclamation"],[1,"warning-text"],[1,"warning-title"],[1,"warning-body"],[1,"booking-confirm-acknowledge"],[1,"modal-footer","booking-confirm-footer"],[1,"bi","bi-check2-circle"],[1,"modal-content",3,"click"],["class","pending-amount-banner",4,"ngIf"],["class","warning replace-warning",4,"ngIf"],["class","warning",4,"ngIf"],[1,"upload-area"],[1,"upload-icon"],[1,"upload-text"],[1,"help-text"],["type","file","id","receipt-file-input","accept","image/*,.pdf","multiple","",2,"display","none",3,"change"],["for","receipt-file-input","class","btn btn-upload-select",4,"ngIf"],["class","selected-files",4,"ngIf"],[1,"payment-info"],[1,"bi","bi-phone"],[1,"app-version-label"],[1,"pending-amount-banner"],[1,"pending-amount-banner-label"],[1,"bi","bi-cash-coin"],[1,"pending-amount-banner-value"],[1,"pending-amount-banner-sub"],[1,"warning","replace-warning"],[1,"warning"],[1,"bi","bi-exclamation-triangle"],["for","receipt-file-input",1,"btn","btn-upload-select"],[1,"bi","bi-folder2-open"],[1,"selected-files"],[1,"selected-files-total"],[1,"file-name"],[1,"file-size"],["class","modal-body",4,"ngIf"],["class","btn btn-success",3,"click",4,"ngIf"],[1,"receipt-info"],[1,"receipt-row"],["class","receipt-row",4,"ngIf"],["class","receipt-row credit-applied-row",4,"ngIf"],[1,"receipt-images-area"],[1,"receipt-row","credit-applied-row"],[1,"bi","bi-tag"],["class","receipt-image-container",4,"ngFor","ngForOf"],[1,"receipt-image-container"],[1,"receipt-image-header"],[1,"receipt-zoom-control
68s"],["title","Zoom out",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-zoom-out"],[1,"zoom-level"],["title","Zoom in",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-zoom-in"],["title","Reset zoom",1,"zoom-btn","zoom-reset",3,"click","disabled"],[1,"bi","bi-arrows-angle-contract"],[1,"receipt-image-wrapper",3,"mousedown","mousemove","mouseup","mouseleave","touchstart","touchmove","touchend"],["class","receipt-loading-overlay",4,"ngIf"],[1,"receipt-image",3,"load","error","src","alt"],[1,"receipt-loading-overlay"],["role","status",1,"spinner-border"],[1,"visually-hidden"],[1,"receipt-placeholder"],[1,"btn","btn-success",3,"click"],[1,"modal-content","warning-modal",3,"click"],[2,"margin-top","8px","color","var(--color-text-secondary, #6b7280)","font-size","0.9rem"],[1,"modal-content",2,"max-width","420px",3,"click"],[1,"bi","bi-activity"],[2,"margin-bottom","1rem","font-size","0.9rem","color","var(--color-text-secondary, #666)"],[1,"form-group",2,"margin-bottom","1rem"],[2,"font-size","0.8rem","font-weight","600","margin-bottom","4px","display","block"],["type","text","value","Pickleball","disabled","",1,"form-control",2,"opacity","0.7","cursor","not-allowed"],[2,"color","var(--color-danger, #e53e3e)"],[1,"form-control",3,"ngModelChange","ngModel"],["value","Beginner"],["value","Intermediate"],["value","Advanced"],["value","Pro"],[1,"form-group",2,"margin-bottom","0.5rem"],[2,"font-weight","400","color","var(--color-text-secondary, #888)"],["type","text","placeholder","e.g. 3.50",1,"form-control",3,"ngModelChange","ngModel"],[1,"modal-footer",2,"gap","8px"],[1,"modal-content","confirm-modal",3,"click"],[1,"modal-overlay","modal-overlay-top"],[1,"bi","bi-exclamation-triangle","text-danger"],["class","cancellation-contact-admin-notice",4,"ngIf"],["class","cancellation-credit-restore-notice",4,"ngIf"],["class","cancel-details",4,"ngIf"],[1,"btn","btn-danger",3,"click","disabled"],[1,"cancellation-contact-admin-notice"],[1,"contact-admin-heading"],[1,"contact-admin-body"],[1,"cancellation-credit-restore-notice"],[1,"cancel-details"],[1,"modal-follow",3,"click"],[1,"close-btn","modal-follow-close",3,"click"],[1,"modal-follow-icon"],[1,"bi","bi-bell"],[1,"modal-follow-title"],[1,"modal-follow-body"],[1,"modal-follow-note"],[1,"modal-follow-actions"],[1,"btn-follow-confirm",3,"click"],[1,"bi","bi-bell-fill"],[1,"btn-follow-cancel",3,"click"],[1,"modal-follow-icon","following"],[1,"btn-follow-remove",3,"click"],[1,"bi","bi-bell-slash"],[1,"modal-overlay-fullscreen",3,"click"],[1,"modal-players-fullscreen",3,"click"],[1,"modal-players-header"],[1,"modal-players-title"],["class","session-info-sub",4,"ngIf"],[1,"close-btn-fullscreen",3,"click"],["class","modal-players-body",4,"ngIf"],[1,"session-info-sub"],[1,"modal-players-body"],[1,"loading-indicator"],[1,"players-stats"],[1,"stat-card","verified-stat"],[1,"stat-number"],[1,"stat-label"],[1,"stat-card","pending-stat"],[1,"stat-card","total-stat"],["class","stat-card interested-stat",4,"ngIf"],[1,"player-search-bar"],[1,"bi","bi-search","player-search-icon"],["type","text","placeholder","Search players...","autocomplete","off",1,"player-search-input",3,"ngModelChange","ngModel"],["class","player-search-clear",3,"click",4,"ngIf"],[1,"skill-level-breakdown"],[1,"breakdown-title"],[1,"bi","bi-bar-chart-fill"],[1,"skill-tiles"],["class","skill-tile",3,"border-color",4,"ngFor","ngForOf"],["class","players-section",4,"ngIf"],["class","no-players-modal",4,"ngIf"],[1,"stat-card","interested-stat"],[1,"player-search-clear",3,"click"],[1,"skill-tile"],[1,"skill-tile-icon"],[1,"skill-tile-info"],[1,"skill-tile-count"],[1,"skill-tile-label"],["class","skill-level-breakdown",4,"ngIf"],["class","skill-tile","style","border-color: #10b981;",4,"ngIf"],["class","skill-tile","style","border-color: #3b82f6;",4,"ngIf"],["class","skill-tile","style","border-color: #f59e0b;",4,"ngIf"],[1,"skill-tile",2,"border-color","#10b981"],[1,"skill-tile-icon",2,"background","#10b981"],[1,"skill-tile",2,"border-color","#3b82f6"],[1,"skill-tile-icon",2,"background","#3b82f6"],[1,"skill-tile",2,"border-color","#f59e0b"],[1,"skill-tile-icon",2,"background","#f59e0b"],[1,"players-section"],[1,"section-title","confirmed-section"],["class","player-search-empty",4,"ngIf"],[1,"players-grid-compact"],["class","player-avatar-compact verified",3,"is-owner","is-guest","is-playing","t
68itle","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"player-search-empty"],[1,"player-avatar-compact","verified",3,"click","title"],["class","avatar-initials",4,"ngIf"],["class","avatar-image",3,"src","alt",4,"ngIf"],["class","bi bi-person-badge-fill guest-icon",4,"ngIf"],["class","player-status-badge badge-playing",4,"ngIf"],["class","player-status-badge badge-ready",4,"ngIf"],["class","player-status-badge badge-played",4,"ngIf"],[1,"avatar-name"],["class","avatar-checkin-time",4,"ngIf"],["class","plus-one-label",4,"ngIf"],["class","player-stats",4,"ngIf"],[1,"avatar-initials"],[1,"avatar-image",3,"src","alt"],[1,"bi","bi-person-badge-fill","guest-icon"],[1,"player-status-badge","badge-playing"],[1,"player-status-badge","badge-ready"],[1,"player-status-badge","badge-played"],[1,"avatar-checkin-time"],[1,"plus-one-label"],[1,"player-stats"],["class","player-dupr",4,"ngIf"],["class","player-skill",3,"background",4,"ngIf"],[1,"player-dupr"],[1,"player-skill"],[1,"section-title","awaiting-verification-section"],[1,"interested-hint"],["class","player-avatar-compact awaiting-verification",3,"is-owner","is-guest","title","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"player-avatar-compact","awaiting-verification",3,"click","title"],["class","bi bi-receipt cant-go-receipt-icon","title","View receipt",3,"click",4,"ngIf"],["title","View receipt",1,"bi","bi-receipt","cant-go-receipt-icon",3,"click"],[1,"section-title","pending-section"],["class","player-avatar-compact pending",3,"is-owner","is-guest","title","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"player-avatar-compact","pending",3,"click","title"],[1,"section-title","cant-go-section"],["class","player-avatar-compact cant-go",3,"is-owner","is-guest","title","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"player-avatar-compact","cant-go",3,"click","title"],[1,"section-title","interested-section"],["class","player-avatar-compact interested",3,"title","click",4,"ngFor","ngForOf"],[1,"player-avatar-compact","interested",3,"click","title"],[1,"no-players-modal"],[1,"modal-profile",3,"click"],[1,"modal-profile-header"],["class","modal-profile-body",4,"ngIf"],[1,"modal-profile-body"],[1,"profile-picture-large"],["class","profile-img",3,"src","alt",4,"ngIf"],["class","profile-placeholder",4,"ngIf"],[1,"profile-info"],[1,"profile-name"],["class","profile-username",4,"ngIf"],[1,"profile-role"],["class","role-badge interested-badge",4,"ngIf"],["class","role-badge",3,"owner","registered","guest",4,"ngIf"],["class","booked-by",4,"ngIf"],["class","loading-indicator",4,"ngIf"],["class","profile-bio",4,"ngIf"],["class","modal-sports-section",4,"ngIf"],["class","profile-stats",4,"ngIf"],["class","profile-achievements",4,"ngIf"],["class","guest-note",4,"ngIf"],[1,"profile-img",3,"src","alt"],[1,"profile-placeholder"],[1,"profile-username"],[1,"role-badge","interested-badge"],[1,"role-badge"],[1,"booked-by"],[1,"spinner-small"],[1,"profile-bio"],[1,"modal-sports-section"],[1,"modal-sports-title"],[1,"bi","bi-dribbble"],[1,"modal-sport-cards"],["class","modal-sport-card",4,"ngFor","ngForOf"],[1,"modal-sport-card"],[1,"modal-sport-card-header"],[1,"modal-sport-name"],[1,"modal-sport-badge",3,"ngClass"],["class","modal-sport-dupr",4,"ngIf"],["class","modal-sport-remarks",4,"ngIf"],["class","modal-sport-achievements",4,"ngIf"],[1,"modal-sport-dupr"],[1,"bi","bi-star-fill"],[1,"modal-sport-remarks"],[1,"modal-sport-meta-label"],[1,"modal-sport-achievements"],[1,"profile-stats"],["class","stat-item",4,"ngIf"],[1,"stat-item"],[1,"bi","bi-lightning-fill"],[1,"stat-content"],[1,"stat-value"],[1,"bi","bi-geo-alt-fill"],[1,"bi","bi-calendar2-range"],[1,"bi","bi-controller"],[1,"bi","bi-calendar-check-fill"],[1,"profile-achievements"],[1,"bi","bi-award"],[1,"guest-note"],[1,"admin-profile-receipt"],["class","no-receipt-label",4,"ngIf"],[1,"no-receipt-label"],[1,"modal-content","qr-modal",3,"click"],[1,"qr-confidentiality-notice"],[1,"bi","bi-shield-lock-fill"],["class","qr-loading",4,"ngIf"],["class","qr-empty",4,"ngIf"],["class","qr-players-list",4,"ngIf"],[1,"qr-loading"],[1,"qr-empty"],[1,"qr-players-list"],["class","qr-player-card",4,"ngFor","ngForOf"],[1,"qr-player-card"],[1,"qr-player-header"],[1,"qr-player-info"],[1,"qr-player-name"],["class","qr-player-badge badge-ready",4,"ngIf"],["class","qr-player-badge badge-playing",4,"ngIf"],["class","qr-player-badge badge-played",4,"ngIf"],["class","qr-player-badge badge-no-show",4,"ngIf"],["class","qr-scanned-badge",4,"ngIf"],["class","qr-image-container",4,"ngIf"],["class","transfer-history-note",4,"ngIf"],["class","qr-post-scan qr-on-court",4,"ngIf"],["class","qr-post-scan qr-played",4,"ngIf"],["class","qr-post-scan qr-no-show",4,"ngIf"],[1,"qr-player-badge","badge-ready"],[1,"qr-player-badge","badge-playing"],[1,"qr-player-badge","badge-played"],[1,"qr-player-badge","badge-no-show"],[1,"qr-scanned-badge"],[1,"qr-image-container"],["class","qr-image",3,"src","alt",4,"ngIf"],["class","qr-generating",4,"ngIf"],["class","btn-download-qr","title","Save QR code to device",3,"click",4,"ngIf"],["class","transfer-pending-indicator",4,"ngIf"],[1,"qr-image",3,"src","alt"],[1,"qr-generating"],[1,"loading-spinner","small"],["title","Save QR code to device",1,"btn-download-qr",3,"click"],[1,"bi","bi-download"],[1,"transfer-pending-indicator"],[1,"btn-cancel-transfer",3,"click"],[1,"transfer-history-note"],[1,"qr-post-scan","qr-
68on-court"],["class","scan-timestamp",4,"ngIf"],[1,"scan-timestamp"],[1,"qr-post-scan","qr-played"],[1,"qr-post-scan","qr-no-show"],[1,"bi","bi-person-slash"],["class","btn btn-danger",3,"click",4,"ngIf"],["alt","QR Code","class","qr-image",3,"src",4,"ngIf"],["class","btn-download-qr",3,"click",4,"ngIf"],["alt","QR Code",1,"qr-image",3,"src"],[1,"btn-download-qr",3,"click"],[1,"modal-content","transfer-modal",3,"click"],[1,"transfer-player-info"],[1,"transfer-form-group"],[1,"transfer-form-label"],[1,"transfer-input-wrapper"],["type","text","placeholder","Type @ or name to search players...","autocomplete","off",1,"transfer-search-input",3,"input","focus","value"],["class","transfer-search-spinner",4,"ngIf"],["class","transfer-search-dropdown",4,"ngIf"],["class","transfer-selected-chip-wrapper",4,"ngIf"],["rows","3","placeholder","Add a message for the receiving player...",1,"transfer-note-area",3,"ngModelChange","ngModel"],[1,"transfer-info-notice"],[1,"btn","btn-transfer-submit",3,"click","disabled"],[1,"transfer-search-spinner"],[1,"transfer-search-dropdown"],["class","transfer-search-option",3,"mousedown",4,"ngFor","ngForOf"],[1,"transfer-search-option",3,"mousedown"],[1,"transfer-option-name"],[1,"transfer-option-username"],[1,"transfer-selected-chip-wrapper"],[1,"transfer-selected-chip"],[1,"bi","bi-person-check"],["type","button",1,"transfer-chip-remove",3,"click"],[1,"modal-content","transfers-inbox-modal",3,"click"],["class","transfers-empty-state",4,"ngIf"],["class","transfer-card",4,"ngFor","ngForOf"],[1,"transfers-empty-state"],[1,"transfer-card"],[1,"transfer-card-header"],[1,"transfer-card-info"],[1,"transfer-card-from"],[1,"bi","bi-person"],[1,"transfer-card-meta"],[1,"bi","bi-ticket"],[1,"transfer-badge-pending"],["class","transfer-note-block",4,"ngIf"],["class","transfer-actions",4,"ngIf"],["class","transfer-reject-form",4,"ngIf"],[1,"transfer-note-block"],[1,"transfer-actions"],[1,"transfer-reject-form"],[1,"modal-overlay","modal-overlay-supreme",3,"click"],[1,"modal-content","success-modal",3,"click"],[1,"success-icon"],[1,"success-warning"],[1,"success-icon","cancel-icon"],["class","credit-earned-notice",4,"ngIf"],["class","credit-earned-notice subtle",4,"ngIf"],["class","credit-earned-notice contact-admin",4,"ngIf"],[1,"credit-earned-notice"],[1,"credit-earned-headline"],[1,"credit-earned-breakdown"],[1,"ceb-row"],[1,"ceb-row","earned"],[1,"ceb-row","total"],[1,"credit-earned-formula"],[1,"credit-earned-notice","subtle"],[1,"credit-earned-notice","contact-admin"],[1,"success-icon","transfer-icon"],[1,"bi","bi-receipt-cutoff"],[1,"modal-overlay","modal-overlay-top",3,"click"],[1,"modal-body",2,"text-align","center"],[1,"bi","bi-lock-fill",2,"font-size","2.5rem","color","#d97706","margin-bottom","1rem","display","block"],[2,"margin","0 0 0.75rem","font-size","1.1rem"],[2,"margin","0","color","var(--color-text-secondary)","line-height","1.6"],[1,"modal-footer",2,"justify-content","center"],[1,"bi","bi-question-circle","confirm-modal-icon"],[1,"modal-content","admin-guest-modal",3,"click"],[1,"guest-session-info"],[1,"guest-session-time"],[1,"guest-session-slots"],[1,"guest-modal-note"],[1,"guest-names-section"],[1,"guest-section-label"],["class","guest-name-row",4,"ngFor","ngForOf","ngForTrackBy"],["class","btn-add-guest","type","button",3,"click",4,"ngIf"],["class","guest-discount-section",4,"ngIf"],[1,"guest-payment-method-section"],[1,"payment-method-toggle"],[1,"payment-method-option"],["type","radio","name","guestPaymentMethod",3,"ngModelChange","value","ngModel","disabled"],[1,"guest-receipt-section"],["class","required-badge",4,"ngIf"],["class","optional-badge",4,"ngIf"],["class","guest-upload-error",4,"ngIf"],[1,"receipt-upload-label"],["type","file","accept","image/*,.pdf",2,"display","none",3,"change"],[1,"bi",3,"ngClass"],["class","receipt-required-hint",4,"ngIf"],["class","receipt-upload-hint",4,"ngIf"],[1,"guest-cost-summary"],[1,"cost-row"],[1,"cost-row","cost-total"],[1,"guest-name-row"],["type","text","maxlength","100",1,"guest-name-input",3,"ngModelChange","placeholder","ngModel"],["class","btn-remove-guest","type","button","title","Remove guest",3,"click",4,"ngIf"],["type","button","title","Remove guest",1,"btn-remove-guest",3,"click"],["type","button",1,"btn-add-guest",3,"click"],[1,"guest-discount-section"],["class","discount-hint",4,"ngIf"],[1,"discount-hint"],[1,"required-badge"],[1,"optional-badge"],[1,"guest-upload-error"],[1,"receipt-required-hint"],[1,"receipt-upload-hint"],["class","cost-row cost-deduction",4,"ngIf"],[1,"cost-row","cost-deduction"],[1,"toast-notification",3,"ngClass"],[1,"toast-close",3,"click"],[1,"modal-content","pay-instructions-modal",3,"click"],[1,"modal-title"],[1,"modal-close",3,"click"],["class","pay-instructions-amount",4,"ngIf"],["class","pay-timer-row",3,"pay-timer-urgent",4,"ngIf"],[1,"pay-instructions-steps"],[1,"pay-step"],[1,"pay-step-num"],[1,"pay-instructions-options"],[1,"pay-options-title"],[1,"bi","bi-wallet2"],["class","no-payment-info",4,"ngIf"],[1,"pay-instructions-note"],[1,"pay-instructions-amount"],[1,"pay-label"],[1,"pay-amount"],[1,"pay-timer-row"],[1,"pay-timer-label"],[1,"pay-timer-value"],[1,"no-payment-info"],[3,"session","onClose","showBack"]],template:function(e,i){e&1&&(r(0,"div",4)(1,"div",5)(2,"h1"),l(3,"Open Play"),a(),r(4,"p",6),l(5,"Join casual drop-in pickleball sessions"),a()(),A(6,Zk,13,3,"div",7),r(7,"div",8)(8,"button",9),S("click",function(){return i.setActiveTab("browse")}
68),w(9,"i",10),l(10," Browse Sessions "),a(),r(11,"button",9),S("click",function(){return i.setActiveTab("myBookings")}),w(12,"i",11),l(13," My Bookings "),A(14,Qk,2,1,"span",12),a(),r(15,"button",9),S("click",function(){return i.setActiveTab("receivedSlots")}),w(16,"i",13),l(17," Received Slots "),A(18,Kk,2,1,"span",12),a(),r(19,"button",9),S("click",function(){return i.setActiveTab("transferHistory")}),w(20,"i",14),l(21," Transfer History "),A(22,Jk,2,1,"span",15),a(),r(23,"button",9),S("click",function(){return i.setActiveTab("refundHistory")}),w(24,"i",16),l(25," Refund History "),A(26,e4,2,1,"span",17),a()(),A(27,L4,11,6,"div",18)(28,iO,9,2,"div",19)(29,gO,20,2,"div",19)(30,hO,11,3,"div",20)(31,pE,31,18,"div",19)(32,FE,29,15,"div",19)(33,v5,68,26,"div",21)(34,b5,56,8,"div",22)(35,R5,36,15,"div",21)(36,W5,13,2,"div",20)(37,G5,17,0,"div",21)(38,Y5,39,6,"div",21)(39,X5,12,1,"div",21)(40,Z5,15,0,"div",21)(41,eT,19,4,"div",23)(42,iT,6,2,"div",20)(43,l8,13,3,"div",24)(44,V8,8,1,"div",20)(45,lI,19,3,"div",20)(46,bI,13,2,"div",20)(47,SI,38,8,"div",20)(48,AI,14,2,"div",20)(49,WI,12,8,"div",25)(50,GI,20,1,"div",26)(51,qI,11,1,"div",26)(52,m6,15,7,"div",20)(53,g6,6,7,"div",27),a(),A(54,x6,43,4,"div",20)(55,v6,1,3,"app-session-chat",28)),e&2&&(d(6),x("ngIf",i.myBookingStats),d(2),te("active",i.activeTab==="browse"),d(3),te("active",i.activeTab==="myBookings"),d(3),x("ngIf",i.myBookingsTotalElements>0),d(),te("active",i.activeTab==="receivedSlots"),d(3),x("ngIf",i.receivedSlots.length>0),d(),te("active",i.activeTab==="transferHistory"),d(3),x("ngIf",i.incomingTransfers.length>0),d(),te("active",i.activeTab==="refundHistory"),d(3),x("ngIf",i.getPendingRefundCount()>0),d(),x("ngIf",i.activeTab==="browse"),d(),x("ngIf",i.activeTab==="transferHistory"),d(),x("ngIf",i.activeTab==="refundHistory"),d(),x("ngIf",i.showRefundReceiptModal),d(),x("ngIf",i.activeTab==="myBookings"),d(),x("ngIf",i.activeTab==="receivedSlots"),d(),x("ngIf",i.showBookingModal),d(),x("ngIf",i.showBookingConfirmDialog),d(),x("ngIf",i.showReceiptUpload),d(),x("ngIf",i.showReceiptView),d(),x("ngIf",i.showDiscountPlayerLimitDialog),d(),x("ngIf",i.showSportsProfileRequiredModal),d(),x("ngIf",i.showWarningDialog),d(),x("ngIf",i.showConfirmCloseModal),d(),x("ngIf",i.showCancelConfirm),d(),x("ngIf",i.showFollowModal),d(),x("ngIf",i.showPlayersModal||i.isLoadingSessionPlayers),d(),x("ngIf",i.showPlayerProfileModal),d(),x("ngIf",i.showQrModal),d(),x("ngIf",i.showReceivedSlotQrModal),d(),x("ngIf",i.showTransferModal),d(),x("ngIf",i.showIncomingTransfersModal),d(),x("ngIf",i.showSuccessDialog),d(),x("ngIf",i.showCancelRestrictionModal),d(),x("ngIf",i.showConfirmModal),d(),x("ngIf",i.showAdminGuestModal),d(),x("ngIf",i.toastVisible),d(),x("ngIf",i.showPaymentInstructionsModal),d(),x("ngIf",i.activeChatSession))},dependencies:[Ge,cn,rt,$e,hu,_u,fa,Wo,lt,yn,Cn,at,bn,Vn,Ql,st,ha,ut,Ia],styles:['.open-play-container[_ngcontent-%COMP%]{max-width:1200px;margin:0 auto;padding:2rem;background:var(--color-background);min-height:100vh;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif}.page-header[_ngcontent-%COMP%]{margin-bottom:2rem;position:relative;padding-bottom:1rem}.page-header[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:0;left:0;width:60px;height:3px;background:var(--color-accent);border-radius:2px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2.25rem;font-weight:700;color:var(--color-text);margin:0 0 .5rem}.subtitle[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text-muted);margin:0}.browse-quick-stats[_ngcontent-%COMP%]{display:flex;gap:.6rem;padding:0 0 .75rem}.quick-stat-pill[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.45rem;padding:.45rem .85rem;border-radius:20px;border:1px solid var(--color-border);background:var(--color-background-card);cursor:pointer;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);transition:background .15s,box-shadow .15s;white-space:nowrap}.quick-stat-pill[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);box-shadow:var(--shadow-sm)}.quick-stat-pill[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.85rem}.quick-stat-pill.upcoming[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.quick-stat-pill.credits[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#ca8a04}.qs-value[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.qs-label[_ngcontent-%COMP%]{color:var(--color-text-muted)}.date-browser[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;padding:1rem;margin-bottom:1.5rem;box-shadow:var(--shadow-sm);overflow-x:auto;border:1px solid var(--color-border-light)}.date-scroll[_ngcontent-%COMP%]{display:flex;gap:.75rem;overflow-x:auto;padding-bottom:.5rem}.date-scroll[_ngcontent-%COMP%]::-webkit-scrollbar{height:6px}.date-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-surface-hover);border-radius:3px}.date-scroll[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.date-card[_ngcontent-%COMP%]{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;padding:.75rem 1rem;background:var(--color-surface);border:2px solid var(--color-border);border-radius:8px;
68cursor:pointer;transition:all .2s ease;min-width:70px;position:relative}.date-card[_ngcontent-%COMP%]:hover:not(:disabled):not(.selected){border-color:var(--color-accent);background:var(--color-accent-bg-subtle)}.date-card.selected[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent-dark);box-shadow:0 0 12px var(--color-accent-shadow)}.date-card.selected[_ngcontent-%COMP%] .day-name[_ngcontent-%COMP%], .date-card.selected[_ngcontent-%COMP%] .day-number[_ngcontent-%COMP%], .date-card.selected[_ngcontent-%COMP%] .month-name[_ngcontent-%COMP%]{color:#fff}.date-card.today[_ngcontent-%COMP%]:not(.selected){border-color:var(--color-accent)}.date-card.today[_ngcontent-%COMP%]:not(.selected) .day-number[_ngcontent-%COMP%]{color:var(--color-accent)}.past-divider[_ngcontent-%COMP%]{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:.5rem .6rem;padding-right:12px;color:var(--color-text-muted);font-size:.7rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;border:1px dashed var(--color-border);border-radius:8px;background:transparent;cursor:pointer;transition:all .2s;-webkit-user-select:none;user-select:none;margin-right:4px;position:relative}.past-divider[_ngcontent-%COMP%]:after{content:"";position:absolute;right:-6px;top:20%;height:60%;width:2px;background:var(--color-border);border-radius:1px}.past-divider[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.past-divider[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.2rem}.load-more-past[_ngcontent-%COMP%]{flex:0 0 auto;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:.5rem .6rem;color:var(--color-text-muted);font-size:.7rem;font-weight:600;letter-spacing:.03em;text-transform:uppercase;border:1px dashed var(--color-border);border-radius:8px;background:transparent;cursor:pointer;transition:all .2s;-webkit-user-select:none;user-select:none;margin-right:4px}.load-more-past[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent);background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.load-more-past[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.2rem}.date-card.past[_ngcontent-%COMP%]:not(.selected){opacity:.55;border-style:dashed}.date-card.past[_ngcontent-%COMP%]:not(.selected):hover{opacity:.8;border-color:var(--color-text-muted);background:var(--color-surface-hover)}.date-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;background:var(--color-accent);margin-top:4px}.day-name[_ngcontent-%COMP%]{font-size:.75rem;font-weight:500;color:var(--color-text-muted);text-transform:uppercase}.day-number[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;color:var(--color-text);margin:.25rem 0}.month-name[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted);text-transform:uppercase}.selected-date-info[_ngcontent-%COMP%]{margin-bottom:1rem}.selected-date-info[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:600;color:var(--color-text);margin:0}.mass-notice-banner[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.65rem;background:color-mix(in srgb,var(--color-warning, #f59e0b) 10%,transparent);border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 35%,transparent);border-left:4px solid var(--color-warning, #f59e0b);padding:.75rem 1rem;border-radius:8px;margin-bottom:1.25rem;font-size:.825rem;line-height:1.55}.mass-notice-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.15rem;color:var(--color-warning, #f59e0b);flex-shrink:0;margin-top:.15rem}.mass-notice-title[_ngcontent-%COMP%]{display:block;font-weight:600;color:color-mix(in srgb,var(--color-warning, #f59e0b) 75%,var(--color-text));margin-bottom:.2rem;font-size:.85rem}.mass-notice-banner[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.mass-notice-banner[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text)}.loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:4rem 2rem;gap:1rem}.loading-spinner[_ngcontent-%COMP%]{width:40px;height:40px;border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.loading-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.9rem;font-weight:500;margin:0}.sessions-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.5rem}.session-card[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;padding:1.5rem;box-shadow:var(--shadow-sm);border:1px solid var(--color-border);border-left:4px solid var(--color-accent);transition:transform .2s ease,box-shadow .2s ease;position:relative}.session-card[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}.session-card.expanded[_ngcontent-%COMP%]{box-shadow:var(--shadow-lg);border-left-width:4px}.session-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.5rem;padding-bottom:1rem;border-bottom:1px solid var(--color-border);cursor:pointer}.session-time-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:600;color:var(--color-text);margin:0 0 .5rem}.time-range[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-muted);margin:.25rem 0}.session-status[_ngcontent-%COMP%]{position:absolute;top:1rem;right:1rem;z-index:10}.status-badge[_ngcontent-%COMP%]{display:inline-block;padding:.35rem .85rem;border-radius:20px;font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;box-shadow:var(--shadow-sm)}.status-badge.status-upcoming[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.status-badge.status-ongoing[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.status-badge.status-completed[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-secondary);border:1px solid var(--color-border)}.price[_ngcontent-%COMP%]{font-size:1.125rem;font-weight:700;color:var(--color-accent-dark);margin:.5rem 0 0}.capacity-info[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-radius:8px;padding:1rem;margin-bottom:1rem}.capacity-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem}.capacity-header[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text)}.capacity-header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text)}
68.progress-bar[_ngcontent-%COMP%]{height:10px;background:var(--color-border);border-radius:5px;overflow:hidden;margin-bottom:.5rem}.progress-fill[_ngcontent-%COMP%]{height:100%;background:var(--color-success);transition:width .5s ease;border-radius:5px;background-image:linear-gradient(45deg,rgba(255,255,255,.1) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.1) 50%,rgba(255,255,255,.1) 75%,transparent 75%,transparent);background-size:20px 20px}.progress-fill.medium[_ngcontent-%COMP%]{background-color:var(--color-warning)}.progress-fill.high[_ngcontent-%COMP%]{background-color:var(--color-danger)}.slots-info[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary);margin:0;text-align:center;font-weight:600}.slots-info.full[_ngcontent-%COMP%]{color:var(--color-danger);font-weight:700}.session-action-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:1rem}.session-action-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.btn-admin-walkin[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;padding:.45rem .85rem;background:var(--color-accent);border:1.5px solid var(--color-accent);color:#fff;border-radius:20px;font-size:.82rem;font-weight:600;cursor:pointer;white-space:nowrap;transition:opacity .15s}.btn-admin-walkin[_ngcontent-%COMP%]:hover{opacity:.85}.admin-guest-modal[_ngcontent-%COMP%]{max-width:460px;width:95%}.guest-session-info[_ngcontent-%COMP%]{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:.75rem;font-size:.9rem;color:var(--color-text-secondary)}.guest-session-time[_ngcontent-%COMP%], .guest-session-slots[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem}.guest-modal-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.4rem;font-size:.82rem;color:var(--color-text-muted);background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:6px;padding:.5rem .75rem;margin-bottom:1rem;line-height:1.5}.guest-names-section[_ngcontent-%COMP%]{margin-bottom:1rem}.guest-section-label[_ngcontent-%COMP%]{display:block;font-size:.82rem;font-weight:600;color:var(--color-text-secondary);margin-bottom:.5rem;text-transform:uppercase;letter-spacing:.04em}.guest-name-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;margin-bottom:.5rem}.guest-name-input[_ngcontent-%COMP%]{flex:1;min-width:0;padding:.5rem .75rem;border:2px solid var(--color-border);border-radius:6px;font-size:.875rem;outline:none;background:var(--color-surface);color:var(--color-text);transition:border-color .2s,box-shadow .2s}.guest-name-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.guest-name-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.btn-remove-guest[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-danger);cursor:pointer;padding:.2rem;font-size:1.1rem;display:flex;align-items:center;opacity:.75;transition:opacity .15s}.btn-remove-guest[_ngcontent-%COMP%]:hover{opacity:1}.btn-add-guest[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .75rem;background:none;border:1.5px dashed var(--color-border);color:var(--color-text-secondary);border-radius:6px;font-size:.82rem;cursor:pointer;transition:border-color .15s,color .15s;margin-top:.25rem}.btn-add-guest[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.guest-discount-section[_ngcontent-%COMP%]{margin-bottom:1rem}.discount-hint[_ngcontent-%COMP%]{display:block;margin-top:.35rem;color:var(--color-text-muted);font-size:.78rem}.guest-payment-method-section[_ngcontent-%COMP%]{margin-bottom:1rem}.payment-method-toggle[_ngcontent-%COMP%]{display:flex;gap:.5rem}.payment-method-option[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;gap:.4rem;padding:.55rem .75rem;border:1.5px solid var(--color-border);border-radius:8px;cursor:pointer;font-size:.83rem;color:var(--color-text-secondary);background:var(--color-surface);transition:border-color .15s,background .15s,color .15s;-webkit-user-select:none;user-select:none}.payment-method-option[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{display:none}.payment-method-option.selected[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-bg-subtle);color:var(--color-accent);font-weight:600}.payment-method-option[_ngcontent-%COMP%]:hover:not(.selected){border-color:var(--color-accent);color:var(--color-accent)}.required-badge[_ngcontent-%COMP%]{margin-left:.4rem;font-size:.72rem;font-weight:600;color:var(--color-danger);background:var(--color-danger-bg-subtle);padding:.1rem .4rem;border-radius:4px}.optional-badge[_ngcontent-%COMP%]{margin-left:.4rem;font-size:.72rem;font-weight:500;color:var(--color-text-muted);background:var(--color-surface-hover);padding:.1rem .4rem;border-radius:4px}.receipt-upload-label.required-upload[_ngcontent-%COMP%]{border-color:var(--color-danger);color:var(--color-danger)}.receipt-required-hint[_ngcontent-%COMP%]{display:block;margin-top:.35rem;color:var(--color-danger);font-size:.75rem}.guest-upload-error[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;padding:.5rem .75rem;margin-bottom:.5rem;background:var(--color-danger-bg-subtle);color:var(--color-danger);border-radius:7px;font-size:.82rem;font-weight:500}.section-locked[_ngcontent-%COMP%]{opacity:.6;pointer-events:none}.payment-method-option.disabled[_ngcontent-%COMP%]{opacity:.6;cursor:not-allowed}.guest-receipt-section[_ngcontent-%COMP%]{margin-bottom:1rem}.receipt-upload-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.6rem .85rem;border:1.5px dashed var(--color-border);border-radius:8px;
68cursor:pointer;font-size:.83rem;color:var(--color-text-secondary);background:var(--color-surface)}.receipt-upload-label[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.receipt-upload-label.has-file[_ngcontent-%COMP%]{border-color:var(--color-success, #22c55e);color:var(--color-success, #22c55e);background:var(--color-surface-hover)}.receipt-upload-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0}.receipt-upload-hint[_ngcontent-%COMP%]{display:block;margin-top:.35rem;color:var(--color-text-muted);font-size:.75rem}.guest-cost-summary[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:8px;padding:.75rem 1rem}.cost-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;font-size:.88rem;color:var(--color-text-secondary);padding:.2rem 0}.cost-deduction[_ngcontent-%COMP%]{color:var(--color-accent)}.cost-total[_ngcontent-%COMP%]{border-top:1px solid var(--color-border-light);margin-top:.4rem;padding-top:.5rem;color:var(--color-text);font-size:.95rem}.btn-follow[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem 1rem;border-radius:20px;border:1.5px solid var(--color-accent, #1abc9c);background:transparent;color:var(--color-accent, #1abc9c);font-size:.85rem;font-weight:600;cursor:pointer;transition:background .18s,color .18s,border-color .18s}.btn-follow[_ngcontent-%COMP%]:hover{background:var(--color-accent, #1abc9c);color:#fff}.btn-follow.following[_ngcontent-%COMP%]{background:var(--color-accent, #1abc9c);color:#fff;border-color:var(--color-accent, #1abc9c)}.btn-follow[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.9rem}.follow-count[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary)}.modal-follow[_ngcontent-%COMP%]{background:var(--color-surface, #fff);border-radius:16px;padding:2rem 1.75rem 1.5rem;max-width:380px;width:90%;margin:auto;position:relative;text-align:center;box-shadow:0 20px 60px #0000002e}.modal-follow-close[_ngcontent-%COMP%]{position:absolute;top:.75rem;right:.75rem}.modal-follow-icon[_ngcontent-%COMP%]{width:64px;height:64px;border-radius:50%;background:#1abc9c1f;display:flex;align-items:center;justify-content:center;margin:0 auto 1rem;font-size:1.75rem;color:var(--color-accent, #1abc9c)}.modal-follow-icon.following[_ngcontent-%COMP%]{background:#1abc9c33}.modal-follow-title[_ngcontent-%COMP%]{font-size:1.2rem;font-weight:700;margin:0 0 .6rem;color:var(--color-text, #111)}.modal-follow-body[_ngcontent-%COMP%]{font-size:.92rem;color:var(--color-text-secondary);margin:0 0 .75rem;line-height:1.5}.modal-follow-note[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);background:var(--color-surface-hover, #f3f4f6);border-radius:8px;padding:.5rem .75rem;margin:0 0 1.25rem;display:flex;align-items:flex-start;gap:.4rem;text-align:left}.modal-follow-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-top:2px;flex-shrink:0;color:var(--color-accent, #1abc9c)}.modal-follow-actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.6rem}.btn-follow-confirm[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem 1.5rem;border-radius:10px;border:none;background:var(--color-accent, #1abc9c);color:#fff;font-size:.95rem;font-weight:700;cursor:pointer;transition:background .18s}.btn-follow-confirm[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark, #16a085)}.btn-follow-remove[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem 1.5rem;border-radius:10px;border:1.5px solid var(--color-danger, #ef4444);background:transparent;color:var(--color-danger, #ef4444);font-size:.95rem;font-weight:700;cursor:pointer;transition:background .18s,color .18s}.btn-follow-remove[_ngcontent-%COMP%]:hover{background:var(--color-danger, #ef4444);color:#fff}.btn-follow-cancel[_ngcontent-%COMP%]{padding:.6rem;border:none;background:none;color:var(--color-text-secondary);font-size:.88rem;cursor:pointer;text-decoration:underline}.interested-stat[_ngcontent-%COMP%]{background:linear-gradient(135deg,#f59e0b14,#f59e0b0a);border:1px solid rgba(245,158,11,.25)}.interested-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .section-title.interested-section[_ngcontent-%COMP%]{color:#f59e0b}.interested-hint[_ngcontent-%COMP%]{font-size:.82rem;color:var(--color-text-secondary);margin:-.25rem 0 .75rem}.admin-profile-receipt[_ngcontent-%COMP%]{margin-top:1.25rem;padding-top:1rem;border-top:1px solid var(--color-border-light);display:flex;justify-content:center}.no-receipt-label[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.4rem}.admin-booking-receipt-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.admin-booking-receipt-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.6rem .75rem;background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:8px}.admin-receipt-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;flex:1;min-width:0}
68.admin-receipt-name[_ngcontent-%COMP%]{font-weight:600;font-size:.9rem;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.admin-receipt-players[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);white-space:nowrap}.no-receipt-tag[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.3rem;white-space:nowrap}.player-avatar-compact.interested[_ngcontent-%COMP%]{cursor:pointer}.player-avatar-compact.interested[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,#f59e0b,#d97706);border-color:#f59e0b;box-shadow:0 2px 10px #f59e0b59;color:#fff}.player-avatar-compact.interested[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:#f59e0b;box-shadow:0 2px 10px #f59e0b59}.player-avatar-compact.interested[_ngcontent-%COMP%]:hover .avatar-initials[_ngcontent-%COMP%], .player-avatar-compact.interested[_ngcontent-%COMP%]:hover .avatar-image[_ngcontent-%COMP%]{box-shadow:0 4px 18px #f59e0b80}.player-avatar-compact.interested[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:#d97706;font-weight:700}.role-badge.interested-badge[_ngcontent-%COMP%]{background:#f59e0b26;color:#d97706;border:1px solid rgba(245,158,11,.3)}.players-preview[_ngcontent-%COMP%]{margin-bottom:1rem;border:1px solid var(--color-border-light);border-radius:8px;padding:.75rem 1rem;background:var(--color-surface)}.preview-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;cursor:pointer;margin-bottom:.5rem}.preview-label[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text-secondary);display:flex;align-items:center;gap:.5rem}.preview-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-accent)}.expand-icon[_ngcontent-%COMP%]{transition:transform .3s ease;color:var(--color-text-muted)}.expand-icon.rotated[_ngcontent-%COMP%]{transform:rotate(180deg)}.player-avatars[_ngcontent-%COMP%]{display:flex;gap:.35rem;flex-wrap:wrap}.avatar-item[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;color:#fff;cursor:default;transition:transform .2s ease}.avatar-item[_ngcontent-%COMP%]:hover{transform:scale(1.15)}.avatar-item.status-verified[_ngcontent-%COMP%]{background:var(--color-success);border:2px solid var(--color-success-bg-medium)}.avatar-item.status-pending-verify[_ngcontent-%COMP%]{background:var(--color-warning);border:2px solid var(--color-warning-bg-medium)}.avatar-item.status-pending-receipt[_ngcontent-%COMP%]{background:var(--color-info);border:2px solid var(--color-info-bg-medium)}.avatar-more[_ngcontent-%COMP%]{width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.7rem;font-weight:700;color:var(--color-text-secondary);background:var(--color-surface-hover);border:2px solid var(--color-border)}.players-detail[_ngcontent-%COMP%]{margin-bottom:1rem;animation:_ngcontent-%COMP%_slideDown .3s ease}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;max-height:0;transform:translateY(-10px)}to{opacity:1;max-height:1000px;transform:translateY(0)}}.player-group[_ngcontent-%COMP%]{margin-bottom:1rem}.group-title[_ngcontent-%COMP%]{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;margin:0 0 .75rem;display:flex;align-items:center;gap:.5rem}.group-title.confirmed-title[_ngcontent-%COMP%]{color:var(--color-success)}.group-title.pending-title[_ngcontent-%COMP%]{color:var(--color-warning)}.players-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:.5rem}.player-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:8px;border:1px solid var(--color-border);background:var(--color-surface);transition:all .2s ease}.player-chip[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);background:var(--color-surface-hover)}.player-chip.verified[_ngcontent-%COMP%]{border-color:var(--color-success);background:var(--color-success-bg-light)}.player-chip.status-pending-verify[_ngcontent-%COMP%]{border-color:var(--color-warning);background:var(--color-warning-bg-light)}.player-chip.status-pending-receipt[_ngcontent-%COMP%]{border-color:var(--color-info);background:var(--color-info-bg-subtle)}
68.chip-avatar[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700;color:#fff;background:var(--color-accent);flex-shrink:0}.player-chip.verified[_ngcontent-%COMP%] .chip-avatar[_ngcontent-%COMP%]{background:var(--color-success)}.player-chip.status-pending-verify[_ngcontent-%COMP%] .chip-avatar[_ngcontent-%COMP%]{background:var(--color-warning)}.player-chip.status-pending-receipt[_ngcontent-%COMP%] .chip-avatar[_ngcontent-%COMP%]{background:var(--color-info)}.chip-name[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.chip-status[_ngcontent-%COMP%]{font-size:.7rem;font-weight:700;color:var(--color-success);display:flex;align-items:center;gap:.25rem;white-space:nowrap}.chip-status-text[_ngcontent-%COMP%]{font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.3px;color:var(--color-text-muted);white-space:nowrap}.player-chip.status-pending-verify[_ngcontent-%COMP%] .chip-status-text[_ngcontent-%COMP%]{color:var(--color-warning)}.player-chip.status-pending-receipt[_ngcontent-%COMP%] .chip-status-text[_ngcontent-%COMP%]{color:var(--color-info)}.no-players[_ngcontent-%COMP%]{text-align:center;padding:1.5rem;background:var(--color-surface-hover);border-radius:8px;border:2px dashed var(--color-border)}.no-players[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-muted);font-weight:500}.players-preview-compact[_ngcontent-%COMP%]{margin-bottom:1rem}.btn-view-players[_ngcontent-%COMP%]{width:100%;padding:.75rem 1rem;background:var(--color-surface-hover);border:1px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .2s ease;display:flex;justify-content:space-between;align-items:center;gap:1rem}.btn-view-players[_ngcontent-%COMP%]:hover{background:var(--color-surface);border-color:var(--color-accent);transform:translateY(-1px);box-shadow:0 2px 8px #00000014}.btn-players-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;flex:1}.player-avatars-mini[_ngcontent-%COMP%]{display:flex;gap:.25rem}.avatar-mini[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:700;color:#fff;background:var(--color-accent);border:2px solid var(--color-background)}.avatar-mini.status-verified[_ngcontent-%COMP%], .avatar-mini.status-payment-verified[_ngcontent-%COMP%]{background:var(--color-success)}.avatar-mini.status-pending-payment[_ngcontent-%COMP%]{background:var(--color-warning)}.avatar-mini-more[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.65rem;font-weight:700;color:var(--color-text-secondary);background:var(--color-surface);border:2px solid var(--color-border)}.player-avatars-mini.empty-state[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.875rem;color:var(--color-text-muted);background:var(--color-surface);border:2px dashed var(--color-border)}.btn-players-text[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.btn-players-text[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1rem}.btn-view-players[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:1rem;transition:transform .2s ease}.btn-view-players[_ngcontent-%COMP%]:hover > i[_ngcontent-%COMP%]{transform:translate(4px);color:var(--color-accent)}.modal-overlay-fullscreen[_ngcontent-%COMP%]{position:fixed;inset:0;background:#000000b3;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:10000;padding:1rem;animation:_ngcontent-%COMP%_fadeIn .2s ease}.modal-players-fullscreen[_ngcontent-%COMP%]{background:var(--color-background);border-radius:16px;width:100%;max-width:1200px;max-height:85vh;display:flex;flex-direction:column;box-shadow:0 20px 60px #0000004d;animation:_ngcontent-%COMP%_slideUp .3s ease;overflow:hidden}@keyframes _ngcontent-%COMP%_slideUp{0%{opacity:0;transform:translateY(30px)}to{opacity:1;transform:translateY(0)}}.modal-players-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem 2rem;border-bottom:2px solid var(--color-border);background:var(--color-surface);border-radius:16px 16px 0 0}.modal-players-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.modal-players-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;color:var(--color-accent)}.modal-players-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.5rem;font-weight:700;color:var(--color-text)}.session-info-sub[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.875rem;color:var(--color-text-secondary);font-weight:500}.close-btn-fullscreen[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;background:var(--color-surface-hover);border:1px solid var(--color-border);color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s ease;font-size:1.25rem}.close-btn-fullscreen[_ngcontent-%COMP%]:hover{background:var(--color-danger);border-color:var(--color-danger);color:#fff;transform:rotate(90deg)}.modal-players-body[_ngcontent-%COMP%]{padding:2rem;overflow-y:auto;overflow-x:hidden;flex:1;min-height:0}.modal-players-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.modal-players-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-surface);border-radius:4px}.modal-players-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.modal-players-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent)}.players-stats[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:2rem}.stat-card[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-radius:12px;padding:1.25rem;display:flex;align-items:center;gap:1rem;border:2px solid var(--color-border);transition:all .2s ease}.stat-card[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 4px 12px #00000014}.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem}.verified-stat[_ngcontent-%COMP%]{border-color:var(--color-success)}.verified-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-success)}.pending-stat[_ngcontent-%COMP%]{border-color:var(--color-warning)}.pending-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning)}.total-stat[_ngcontent-%COMP%]{border-color:var(--color-accent)}.total-stat[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.stat-number[_ngcontent-%COMP%]{display:block;font-size:1.75rem;font-weight:700;color:var(--color-text);line-height:1}.stat-label[_ngcontent-%COMP%]{display:block;font-size:.875rem;color:var(--color-text-secondary);font-weight:500;margin-top:.25rem}.skill-level-breakdown[_ngcontent-%COMP%]{margin-bottom:2rem;padding:1.25rem;background:var(--color-surface-hover);border-radius:12px;border:2px solid var(--color-border)}.breakdown-title[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;margin:0 0 1rem;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.breakdown-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.skill-tiles[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(4,1fr);gap:.75rem}.skill-tile[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.75rem;background:var(--color-background);border-radius:8px;border:2px solid;transition:all .2s ease}.skill-tile[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 4px 12px #0000001a}.skill-tile-icon[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;font-size:1rem;flex-shrink:0}.skill-tile-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem}.skill-tile-count[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:700;color:var(--color-text);line-height:1}.skill-tile-label[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-secondary);font-weight:500}.player-stats[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-top:.25rem}
68.player-dupr[_ngcontent-%COMP%], .player-skill[_ngcontent-%COMP%]{font-size:.625rem;font-weight:700;padding:.125rem .375rem;border-radius:4px;line-height:1}.player-dupr[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.player-skill[_ngcontent-%COMP%]{color:#fff;text-transform:uppercase}.player-status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.2rem;font-size:.6rem;font-weight:700;padding:.15rem .4rem;border-radius:10px;color:#fff;text-transform:uppercase;letter-spacing:.03em;margin-top:.2rem}.badge-playing[_ngcontent-%COMP%]{background:#10b981}.badge-ready[_ngcontent-%COMP%]{background:#3b82f6}.badge-played[_ngcontent-%COMP%]{background:#f59e0b}.player-search-bar[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;margin-bottom:1.25rem}.player-search-icon[_ngcontent-%COMP%]{position:absolute;left:.875rem;color:var(--color-text-muted);font-size:.9rem;pointer-events:none}.player-search-input[_ngcontent-%COMP%]{width:100%;padding:.6rem 2.5rem .6rem 2.25rem;font-size:.9rem;background:var(--color-surface-hover);border:1px solid var(--color-border-light);border-radius:10px;color:var(--color-text);outline:none;transition:border-color .2s,box-shadow .2s;box-sizing:border-box}.player-search-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.player-search-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.player-search-clear[_ngcontent-%COMP%]{position:absolute;right:.5rem;background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:.25rem .4rem;border-radius:6px;line-height:1;font-size:1rem;transition:color .15s}.player-search-clear[_ngcontent-%COMP%]:hover{color:var(--color-text)}.player-search-empty[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-muted);font-style:italic;margin:0 0 .75rem}.players-section[_ngcontent-%COMP%]{margin-bottom:2.5rem}.section-title[_ngcontent-%COMP%]{font-size:1.125rem;font-weight:700;margin-bottom:1rem;display:flex;align-items:center;gap:.5rem;padding-bottom:.75rem;border-bottom:2px solid var(--color-border)}.section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.25rem}.confirmed-section[_ngcontent-%COMP%]{color:var(--color-success)}.pending-section[_ngcontent-%COMP%]{color:var(--color-warning)}.awaiting-verification-section[_ngcontent-%COMP%]{color:var(--color-accent)}.cant-go-section[_ngcontent-%COMP%]{color:var(--color-danger)}.players-grid-compact[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(5,1fr);gap:.75rem;padding:0}.player-avatar-compact[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.35rem;cursor:pointer;transition:transform .2s ease;position:relative;min-width:0;width:100%}.player-avatar-compact[_ngcontent-%COMP%]:hover{transform:translateY(-2px)}.player-avatar-compact[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{width:55px;height:55px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.125rem;font-weight:700;color:#fff;background:linear-gradient(135deg,var(--color-accent),var(--color-accent-dark, #2563eb));border:3px solid transparent;box-shadow:0 2px 8px #0000001f;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;position:relative}.avatar-image[_ngcontent-%COMP%]{width:55px;height:55px;border-radius:50%;object-fit:cover;border:3px solid transparent;box-shadow:0 2px 8px #0000001f;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease;-webkit-backface-visibility:hidden;backface-visibility:hidden}.player-avatar-compact.verified.is-owner[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-success);box-shadow:0 2px 10px #10b98159}.player-avatar-compact.verified.is-guest[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-success);box-shadow:0 2px 8px #10b98140}.player-avatar-compact.awaiting-verification.is-owner[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-accent);box-shadow:0 2px 10px #6366f159}.player-avatar-compact.awaiting-verification.is-guest[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-accent);box-shadow:0 2px 8px #6366f140}
68.player-avatar-compact.pending.is-owner[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-warning);box-shadow:0 2px 10px #f59e0b59}.player-avatar-compact[_ngcontent-%COMP%]:hover .avatar-image[_ngcontent-%COMP%]{transform:scale(1.08);box-shadow:0 4px 16px #0000002e}.player-avatar-compact.verified.is-owner[_ngcontent-%COMP%]:hover .avatar-image[_ngcontent-%COMP%]{box-shadow:0 4px 18px #10b98180}.player-avatar-compact.pending.is-owner[_ngcontent-%COMP%]:hover .avatar-image[_ngcontent-%COMP%]{box-shadow:0 4px 18px #f59e0b80}.player-avatar-compact.verified.is-owner[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success),var(--color-success-dark, #059669));border-color:var(--color-success);box-shadow:0 2px 10px #10b98159}.player-avatar-compact.awaiting-verification.is-owner[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent),#4f46e5);border-color:var(--color-accent);box-shadow:0 2px 10px #6366f159}.player-avatar-compact.awaiting-verification.is-guest[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent),#4f46e5);border-color:var(--color-accent);box-shadow:0 2px 8px #6366f140;opacity:.9}.player-avatar-compact.pending.is-owner[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-warning),var(--color-warning-dark, #d97706));border-color:var(--color-warning);box-shadow:0 2px 10px #f59e0b59}.player-avatar-compact.verified.is-guest[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,#10b981,#059669);border-color:var(--color-success);box-shadow:0 2px 8px #10b98140;opacity:.9}.player-avatar-compact.pending.is-guest[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,#fbbf24,#f59e0b);border-color:var(--color-warning);box-shadow:0 2px 8px #f59e0b40;opacity:.9}.player-avatar-compact[_ngcontent-%COMP%]:hover .avatar-initials[_ngcontent-%COMP%]{transform:scale(1.08);box-shadow:0 4px 16px #0000002e}.player-avatar-compact.verified.is-owner[_ngcontent-%COMP%]:hover .avatar-initials[_ngcontent-%COMP%]{box-shadow:0 4px 18px #10b98180}.player-avatar-compact.pending.is-owner[_ngcontent-%COMP%]:hover .avatar-initials[_ngcontent-%COMP%]{box-shadow:0 4px 18px #f59e0b80}.player-avatar-compact.is-guest[_ngcontent-%COMP%]:hover .avatar-initials[_ngcontent-%COMP%]{opacity:1;box-shadow:0 4px 16px #64748b66}.guest-icon[_ngcontent-%COMP%]{position:absolute;bottom:0;right:0;width:18px;height:18px;background:var(--color-surface);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.625rem;color:var(--color-text-secondary);border:2px solid var(--color-background);box-shadow:0 1px 3px #0003}.avatar-name[_ngcontent-%COMP%]{font-size:.7rem;font-weight:600;color:var(--color-text);text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word;line-height:1.2}.plus-one-label[_ngcontent-%COMP%]{font-size:.6rem;color:var(--color-text-muted);background:var(--color-surface-hover);border:1px solid var(--color-border-light);border-radius:10px;padding:1px 5px;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:break-word}.player-avatar-compact.verified.is-owner[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-success);font-weight:700}.player-avatar-compact.pending.is-owner[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-warning);font-weight:700}.player-avatar-compact.verified.is-guest[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-success);font-weight:500;opacity:.85}.player-avatar-compact.pending.is-guest[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-warning);font-weight:500;opacity:.85}.player-avatar-compact.awaiting-verification.is-owner[_ngcontent-%COMP%] .avatar-name[_ng
68content-%COMP%]{color:var(--color-accent);font-weight:700}.player-avatar-compact.awaiting-verification.is-guest[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:500;opacity:.85}.cant-go-receipt-icon[_ngcontent-%COMP%]{position:absolute;top:-4px;left:-4px;width:20px;height:20px;background:var(--color-surface);border:1.5px solid var(--color-danger, #ef4444);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.6rem;color:var(--color-danger, #ef4444);cursor:pointer;z-index:2;transition:background .15s,color .15s}.cant-go-receipt-icon[_ngcontent-%COMP%]:hover{background:var(--color-danger, #ef4444);color:#fff}.verify-payment-icon[_ngcontent-%COMP%]{position:absolute;top:-4px;right:-4px;width:20px;height:20px;background:var(--color-surface);border:1.5px solid var(--color-success, #22c55e);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.6rem;color:var(--color-success, #22c55e);cursor:pointer;z-index:2;transition:background .15s,color .15s}.verify-payment-icon[_ngcontent-%COMP%]:hover{background:var(--color-success, #22c55e);color:#fff}.player-avatar-compact.cant-go[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-danger, #ef4444),#dc2626);border-color:var(--color-danger, #ef4444);box-shadow:0 2px 8px #ef444440;opacity:.75}.player-avatar-compact.cant-go[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{border-color:var(--color-danger, #ef4444);box-shadow:0 2px 8px #ef444440;opacity:.75}.player-avatar-compact.cant-go[_ngcontent-%COMP%] .avatar-name[_ngcontent-%COMP%]{color:var(--color-danger, #ef4444);font-weight:500;opacity:.85}.no-players-modal[_ngcontent-%COMP%]{text-align:center;padding:4rem 2rem;color:var(--color-text-muted)}.no-players-modal[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:4rem;opacity:.3;margin-bottom:1rem}.no-players-modal[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.5rem;margin:0 0 .5rem;color:var(--color-text-secondary)}.no-players-modal[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:1rem}@media (max-width: 1024px){.players-grid-compact[_ngcontent-%COMP%]{grid-template-columns:repeat(4,1fr);gap:.625rem}.player-avatar-compact[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%], .player-avatar-compact[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{width:52px;height:52px;font-size:1rem}.avatar-name[_ngcontent-%COMP%]{font-size:.65rem}}@media (max-width: 768px){.session-card[_ngcontent-%COMP%]{padding:1rem;border-radius:10px;border-left-width:3px}.session-status[_ngcontent-%COMP%]{top:.75rem;right:.75rem}.session-header[_ngcontent-%COMP%]{margin-bottom:1rem;padding-bottom:.75rem;padding-right:0}.session-time-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.125rem;margin-bottom:.25rem;padding-right:0}.time-range[_ngcontent-%COMP%]{font-size:.8125rem}.status-badge[_ngcontent-%COMP%]{font-size:.6875rem;padding:.25rem .625rem}.price[_ngcontent-%COMP%]{font-size:.9375rem;margin-top:.25rem}.capacity-info[_ngcontent-%COMP%]{padding:.75rem;margin-bottom:.75rem}.capacity-header[_ngcontent-%COMP%]{margin-bottom:.5rem}.capacity-header[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{font-size:.8125rem}.capacity-header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{font-size:.9375rem}.progress-bar[_ngcontent-%COMP%]{height:6px}.slots-info[_ngcontent-%COMP%]{font-size:.75rem;margin-top:.5rem}.players-preview-compact[_ngcontent-%COMP%]{margin-bottom:.75rem}.avatar-mini[_ngcontent-%COMP%], .avatar-mini-more[_ngcontent-%COMP%]{width:24px;height:24px;font-size:.625rem}.my-booking-compact[_ngcontent-%COMP%]{padding:.875rem;margin-bottom:.75rem}.booking-compact-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:.8125rem}.booking-player-count[_ngcontent-%COMP%]{font-size:.75rem}.booking-compact-details[_ngcontent-%COMP%]{gap:.5rem;margin-top:.5rem}.booking-detail-item[_ngcontent-%COMP%]{font-size:.75rem}.booking-card-actions-full[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:.5rem .75rem;font-size:.8125rem}.session-actions[_ngcontent-%COMP%]{margin-top:.75rem}.btn-book[_ngcontent-%COMP%]{padding:.75rem 1.25rem;font-size:.9375rem}.full-message[_ngcontent-%COMP%], .completed-message[_ngcontent-%COMP%]{padding:.625rem;font-size:.8125rem}.modal-overlay-fullscreen[_ngcontent-%COMP%]{padding:.5rem}.modal-players-fullscreen[_ngcontent-%COMP%]{max-height:96vh;height:96vh;border-radius:12px}.modal-players-header[_ngcontent-%COMP%]{padding:.875rem 1rem;flex-shrink:0}.modal-players-title[_ngcontent-%COMP%]{gap:.75rem}.modal-players-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.5rem}.modal-players-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.125rem}.session-info-sub[_ngcontent-%COMP%]{font-size:.75rem}.modal-players-body[_ngcontent-%COMP%]{padding:1rem;flex:1;min-height:0}.players-stats[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:.625rem;margin-bottom:1.25rem}.stat-card[_ngcontent-%COMP%]{padding:.875rem}.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .stat-number[_ngcontent-%COMP%]{font-size:1.5rem}.skill-level-breakdown[_ngcontent-%COMP%]{padding:1rem;margin-bottom:1.25rem}.breakdown-title[_ngcontent-%COMP%]{font-size:.9375rem;margin-bottom:.75rem}.skill-tiles[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr);gap:.625rem}.skill-tile[_ngcontent-%COMP%]{padding:.625rem;gap:.625rem}.skill-tile-icon[_ngcontent-%COMP%]{width:32px;height:32px;font-size:.875rem}.skill-tile-count[_ngcontent-%COMP%]{font-size:1.125rem}.skill-tile-label[_ngcontent-%COMP%]{font-size:.65rem}.players-section[_ngcontent-%COMP%]{margin-bottom:1.5rem}.section-title[_ngcontent-%COMP%]{font-size:1rem;margin-bottom:.75rem;padding-bottom:.5rem}.players-grid-compact[_ngcontent-%COMP%]{grid-template-columns:repeat(4,1fr);gap:.5rem}.player-avatar-compact[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%], .player-avatar-compact[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{width:48px;height:48px;font-size:.9375rem;border-width:2.5px}
68.avatar-name[_ngcontent-%COMP%]{font-size:.625rem}.btn-view-players[_ngcontent-%COMP%]{padding:.625rem .875rem}.avatar-mini[_ngcontent-%COMP%], .avatar-mini-more[_ngcontent-%COMP%]{width:24px;height:24px;font-size:.6rem}.btn-players-text[_ngcontent-%COMP%]{font-size:.8125rem}}@media (max-width: 480px){.session-card[_ngcontent-%COMP%]{padding:.875rem;border-radius:8px}.session-status[_ngcontent-%COMP%]{top:.625rem;right:.625rem}.session-header[_ngcontent-%COMP%]{margin-bottom:.75rem;padding-bottom:.625rem}.session-time-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1rem;margin-bottom:.125rem}.time-range[_ngcontent-%COMP%]{font-size:.75rem}.status-badge[_ngcontent-%COMP%]{font-size:.625rem;padding:.1875rem .5rem;border-radius:12px}.price[_ngcontent-%COMP%]{font-size:.875rem}.capacity-info[_ngcontent-%COMP%]{padding:.625rem;margin-bottom:.625rem}.capacity-header[_ngcontent-%COMP%] .label[_ngcontent-%COMP%]{font-size:.75rem}.capacity-header[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{font-size:.875rem}.progress-bar[_ngcontent-%COMP%]{height:5px}.slots-info[_ngcontent-%COMP%]{font-size:.6875rem}.btn-view-players[_ngcontent-%COMP%]{padding:.5rem .75rem}.btn-players-text[_ngcontent-%COMP%]{font-size:.75rem}.btn-players-text[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem}.avatar-mini[_ngcontent-%COMP%], .avatar-mini-more[_ngcontent-%COMP%]{width:20px;height:20px;font-size:.5625rem}.my-booking-compact[_ngcontent-%COMP%]{padding:.75rem}.booking-compact-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:.75rem}.booking-detail-item[_ngcontent-%COMP%]{font-size:.6875rem}.btn-book[_ngcontent-%COMP%]{padding:.625rem 1rem;font-size:.875rem}.modal-overlay-fullscreen[_ngcontent-%COMP%]{padding:.25rem}.modal-players-fullscreen[_ngcontent-%COMP%]{max-height:98vh;height:98vh;border-radius:8px}.modal-players-header[_ngcontent-%COMP%]{padding:.75rem .875rem}.modal-players-title[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1rem}.modal-players-body[_ngcontent-%COMP%]{padding:.875rem}.players-stats[_ngcontent-%COMP%]{margin-bottom:1rem}.stat-card[_ngcontent-%COMP%]{padding:.75rem;gap:.75rem}.stat-card[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .stat-number[_ngcontent-%COMP%]{font-size:1.25rem}.stat-label[_ngcontent-%COMP%]{font-size:.75rem}.section-title[_ngcontent-%COMP%]{font-size:.9375rem}.players-grid-compact[_ngcontent-%COMP%]{grid-template-columns:repeat(3,1fr);gap:.5rem}.player-avatar-compact[_ngcontent-%COMP%] .avatar-initials[_ngcontent-%COMP%], .player-avatar-compact[_ngcontent-%COMP%] .avatar-image[_ngcontent-%COMP%]{width:50px;height:50px;font-size:1rem}.avatar-name[_ngcontent-%COMP%]{font-size:.625rem}}.my-booking-info[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-radius:8px;padding:1.25rem;margin-bottom:1rem;border:2px solid var(--color-accent);border-left:4px solid var(--color-accent)}.booking-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.5rem}.booking-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text);margin:0;display:flex;align-items:center;gap:.5rem}.booking-status-badge[_ngcontent-%COMP%]{font-size:.7rem;font-weight:700;padding:.3rem .75rem;border-radius:12px;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}.booking-status-badge.status-pending-receipt[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info);border:1px solid var(--color-info)}.booking-status-badge.status-pending-verify[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.booking-status-badge.status-verified[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.booking-status-badge.status-declined[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger);border:1px solid var(--color-danger)}.booking-status-badge.status-cancelled[_ngcontent-%COMP%], .booking-status-badge.status-expired[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted);border:1px solid var(--color-border)}.booking-details[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem}.detail-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;font-size:.9rem}.detail-label[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-weight:500}.detail-value[_ngcontent-%COMP%]{color:var(--color-text);font-weight:600}.price-value[_ngcontent-%COMP%]{color:var(--color-accent-dark);font-weight:700;font-size:1rem}.payment-timer[_ngcontent-%COMP%]{margin-top:.75rem;padding:.75rem;background:color-mix(in srgb,var(--color-warning) 10%,transparent);border-radius:8px;border:1px solid var(--color-warning)}.timer-warning[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;color:var(--color-warning);font-weight:600;font-size:.875rem}.timer-icon[_ngcontent-%COMP%]{font-size:1.125rem}.timer-text[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.countdown[_ngcontent-%COMP%]{font-size:1.5rem;font-weight:700;color:var(--color-text);margin-top:.5rem;text-align:center}.countdown.urgent[_ngcontent-%COMP%]{color:var(--color-danger);animation:_ngcontent-%COMP%_pulse 1s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.6}}.receipt-uploaded-info[_ngcontent-%COMP%], .verified-info[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem;border-radius:8px;font-size:.875rem;font-weight:600;margin-top:.5rem}.info-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;flex:1}.receipt-uploaded-info[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.receipt-uploaded-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.125rem}.verified-info[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.verified-info[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.125rem}.btn-view-receipt[_ngcontent-%COMP%]{padding:.375rem .75rem;background:var(--color-background);color:var(--color-text);border:1px solid var(--color-border);border-radius:6px;font-size:.75rem;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:.25rem;transition:all .2s ease;white-space:nowrap}.btn-view-receipt[_ngcontent-%COMP%]:hover{background:var(--color-accent);border-color:var(--color-accent);color:#fff;transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.btn-view-receipt[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem}.my-player-names[_ngcontent-%COMP%]{margin-top:.75rem}.name-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.35rem}.name-tag[_ngcontent-%COMP%]{display:inline-block;padding:.25rem .6rem;background:var(--color-accent-bg-light, color-mix(in srgb, var(--color-accent) 10%, transparent));color:var(--color-accent-dark);border-radius:6px;font-size:.8rem;font-weight:600;border:1px solid color-mix(in srgb,var(--color-accent) 30%,transparent)}.booking-actions[_ngcontent-%COMP%]{margin-top:1rem;display:flex;gap:.75rem;flex-wrap:wrap}.my-session-bookings[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent-bg-light),var(--color-surface-hover));border-radius:8px;padding:.75rem;margin-bottom:.75rem;border:1px solid var(--color-border)}.session-bookings-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.8rem;font-weight:600;color:var(--color-accent);margin-bottom:.5rem}.session-bookings-header[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{flex:1}
68.session-bookings-chat[_ngcontent-%COMP%]{padding:.3rem .5rem!important;font-size:.75rem!important}.session-booking-pill[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border-light);border-radius:6px;padding:.5rem .625rem;margin-bottom:.375rem;cursor:pointer;transition:background .15s,border-color .15s,transform .1s}.session-booking-pill[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-accent);transform:translate(2px)}.session-booking-pill[_ngcontent-%COMP%]:last-of-type{margin-bottom:0}.session-booking-pill-main[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.session-booking-pill-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;min-width:0}.session-booking-index[_ngcontent-%COMP%]{font-size:.7rem;font-weight:700;color:var(--color-text-muted);min-width:1.25rem}.session-booking-details[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0}.session-booking-id[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-booking-meta[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted)}.session-booking-credit-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.65rem;font-weight:700;color:#a16207;background:#eab3081f;border:1px solid rgba(234,179,8,.4);border-radius:4px;padding:.1rem .4rem}[_ngcontent-%COMP%]:root[data-theme=dark] .session-booking-credit-badge[_ngcontent-%COMP%]{color:#fbbf24;background:#eab30826;border-color:#fbbf2459}.session-booking-pill-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.375rem;flex-shrink:0}.session-booking-timer[_ngcontent-%COMP%]{font-size:.7rem;font-weight:600;color:var(--color-text-secondary);white-space:nowrap}.session-booking-timer.urgent[_ngcontent-%COMP%]{color:var(--color-danger);animation:_ngcontent-%COMP%_pulse 1s infinite}.session-booking-receipt-pending[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted)}.session-booking-arrow[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-muted)}.session-bookings-footer[_ngcontent-%COMP%]{margin-top:.5rem;display:flex;justify-content:flex-end}.session-booking-loading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;margin-top:.375rem;font-size:.72rem;color:var(--color-text-muted);padding-left:.125rem}.session-booking-actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem;margin-top:.375rem;padding-top:.375rem;border-top:1px solid var(--color-border-light)}.session-booking-actions[_ngcontent-%COMP%]:empty{display:none}.my-booking-compact[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent-bg-light),var(--color-surface-hover));border-radius:8px;padding:.75rem;margin-bottom:.75rem;border-left:3px solid var(--color-accent);border:1px solid var(--color-border)}.booking-compact-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.booking-compact-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.875rem;font-weight:600;color:var(--color-text)}.booking-compact-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1rem}.booking-compact-info[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.booking-status-badge-sm[_ngcontent-%COMP%]{font-size:.65rem;font-weight:700;padding:.25rem .6rem;border-radius:10px;text-transform:uppercase;letter-spacing:.3px}.booking-status-badge-sm.status-pending-payment[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info);border:1px solid var(--color-info)}.booking-status-badge-sm.status-verified[_ngcontent-%COMP%], .booking-status-badge-sm.status-payment-verified[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.booking-status-badge-sm.status-cancelled[_ngcontent-%COMP%], .booking-status-badge-sm.status-expired[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted);border:1px solid var(--color-border)}.pending-payment-amount-compact[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:.5rem .75rem;background:var(--color-accent-bg-subtle, rgba(99,102,241,.06));border:1px solid var(--color-accent);border-radius:6px;margin-bottom:.5rem;gap:.5rem}.pending-amount-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;font-size:.78rem;color:var(--color-text-secondary)}
68.pending-amount-left[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:.9rem}.pending-amount-label[_ngcontent-%COMP%]{font-weight:500}.pending-amount-value[_ngcontent-%COMP%]{font-size:1rem;font-weight:800;color:var(--color-accent);white-space:nowrap}.pending-amount-banner[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;padding:1rem 1.25rem;margin-bottom:1rem;background:var(--color-accent-bg-subtle, rgba(99,102,241,.06));border:2px solid var(--color-accent);border-radius:10px;gap:.25rem}.pending-amount-banner-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.5px}.pending-amount-banner-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:4px;color:var(--color-accent)}.pending-amount-banner-value[_ngcontent-%COMP%]{font-size:2rem;font-weight:900;color:var(--color-accent);line-height:1.1}.pending-amount-banner-sub[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted);margin-top:2px}.payment-timer-compact[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--color-warning-bg-light);border-radius:6px;border:1px solid var(--color-warning);margin-bottom:.5rem;font-size:.8125rem;font-weight:600;color:var(--color-warning)}.payment-timer-compact.urgent[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border-color:var(--color-danger);color:var(--color-danger);animation:_ngcontent-%COMP%_pulse 1s ease-in-out infinite}.payment-timer-compact[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.receipt-status-compact[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;border-radius:6px;margin-bottom:.5rem;font-size:.8125rem;font-weight:600}.receipt-status-compact.pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.receipt-status-compact.verified[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.receipt-status-compact.uploading[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);color:var(--color-accent);border:1px solid var(--color-accent)}.receipt-status-compact[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.upload-spinner-small[_ngcontent-%COMP%]{display:inline-block;width:12px;height:12px;border:2px solid currentColor;border-top-color:transparent;border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite;flex-shrink:0}.btn-uploading[_ngcontent-%COMP%]{opacity:.8;cursor:not-allowed;pointer-events:none;display:inline-flex;align-items:center;gap:.5rem}.booking-actions-compact[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.btn-compact[_ngcontent-%COMP%]{padding:.4rem .75rem;border-radius:6px;font-size:.75rem;font-weight:600;cursor:pointer;transition:all .2s ease;display:inline-flex;align-items:center;gap:.35rem;border:1px solid;white-space:nowrap}.btn-compact[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem}.btn-upload-compact[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;border-color:var(--color-accent)}.btn-upload-compact[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);transform:translateY(-1px);box-shadow:0 2px 4px #0000001a}.btn-view-compact[_ngcontent-%COMP%]{background:var(--color-background);color:var(--color-text);border-color:var(--color-border)}.btn-view-compact[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-accent);color:var(--color-accent);transform:translateY(-1px)}.btn-cancel-compact[_ngcontent-%COMP%]{background:var(--color-background);color:var(--color-danger);border-color:var(--color-danger)}.freeze-notice-inline[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;font-size:.775rem;color:var(--color-warning, #f59e0b);margin-bottom:4px}.freeze-notice-inline[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.75rem;flex-shrink:0}.btn-replace-compact[_ngcontent-%COMP%]{background:var(--color-background);color:var(--color-warning);border-color:var(--color-warning)}.btn-replace-compact[_ngcontent-%COMP%]:hover{background:var(--color-warning);color:#fff;transform:translateY(-1px);box-shadow:0 2px 4px #eab30833}.btn-cancel-compact[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff;transform:translateY(-1px);box-shadow:0 2px 4px #dc262633}.btn-book-another-compact[_ngcontent-%COMP%]{background:var(--color-background);color:var(--color-primary);border-color:var(--color-primary)}.btn-book-another-compact[_ngcontent-%COMP%]:hover{background:var(--color-primary);color:#fff;transform:translateY(-1px);box-shadow:0 2px 4px #00000026}@media (max-width: 768px){.my-booking-compact[_ngcontent-%COMP%]{padding:.625rem}.booking-compact-header[_ngcontent-%COMP%]{margin-bottom:.4rem}.booking-compact-left[_ngcontent-%COMP%]{font-size:.8125rem}.booking-status-badge-sm[_ngcontent-%COMP%]{font-size:.625rem;padding:.2rem .5rem}.payment-timer-compact[_ngcontent-%COMP%], .receipt-status-compact[_ngcontent-%COMP%]{font-size:.75rem;padding:.4rem .625rem}.btn-compact[_ngcontent-%COMP%]{padding:.35rem .625rem;font-size:.7rem}.btn-compact[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.8125rem}}.session-actions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.btn[_ngcontent-%COMP%]{padding:.75rem 1.5rem;border:none;border-radius:8px;font-size:.9375rem;font-weight:600;cursor:pointer;transition:all .25s ease;text-align:center;display:inline-flex;align-items:center;justify-content:center;gap:.5rem}.btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{line-height:1;display:inline-flex;align-items:center}.btn[_ngcontent-%COMP%]:hover:not(:disabled){transform:translateY(-1px)}.btn[_ngcontent-%COMP%]:active:not(:disabled){transform:translateY(0)}.btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-weight:700}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 4px 16px var(--color-accent-shadow)}.btn-secondary[_ngcontent-%COMP%]{background:transparent;color:var(--color-text-secondary);border:2px solid var(--color-border);font-weight:600}.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);border-color:var(--color-text-muted);color:var(--color-text)}.btn-upload[_ngcontent-%COMP%]{background:var(--color-success);color:#fff;font-weight:700}.btn-upload[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-success) 85%,black);box-shadow:0 4px 12px color-mix(in srgb,var(--color-success) 30%,transparent)}.btn-danger-outline[_ngcontent-%COMP%]{background:transparent;color:var(--color-danger);border:2px solid var(--color-danger);font-weight:700}.btn-danger-outline[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-danger) 10%,transparent)}.btn-danger[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;font-weight:700}.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-danger) 85%,black)}
68.btn-book[_ngcontent-%COMP%]{width:100%;padding:.85rem 1.5rem;font-size:1rem}.btn-add-player[_ngcontent-%COMP%]{background:transparent;color:var(--color-accent);border:2px dashed var(--color-accent);font-weight:600;width:100%;padding:.65rem 1rem}.btn-add-player[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent) 8%,transparent)}.btn-upload-select[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-weight:700;padding:.65rem 1.5rem;margin-top:.75rem}.btn-upload-select[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark)}.full-message[_ngcontent-%COMP%], .completed-message[_ngcontent-%COMP%]{padding:.85rem;border-radius:8px;font-size:.9rem;font-weight:600;text-align:center;display:flex;align-items:center;justify-content:center;gap:.5rem}.full-message[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-danger) 10%,transparent);color:var(--color-danger);border:2px solid var(--color-danger)}.completed-message[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-secondary);border:2px solid var(--color-border)}.no-sessions[_ngcontent-%COMP%]{text-align:center;padding:4rem 2rem;background:var(--color-surface);border-radius:12px;border:2px dashed var(--color-border)}.no-sessions[_ngcontent-%COMP%] .empty-icon[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-text-muted);margin-bottom:1rem;display:block}.no-sessions[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-muted);font-size:1rem;font-weight:500}.no-sessions-hint[_ngcontent-%COMP%]{margin-top:.5rem!important;font-size:.875rem!important;color:var(--color-text-muted)}.modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000080;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;animation:_ngcontent-%COMP%_fadeIn .2s ease}.modal-overlay-top[_ngcontent-%COMP%]{z-index:1200}.modal-overlay-supreme[_ngcontent-%COMP%]{z-index:10100;pointer-events:all}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}to{opacity:1}}@keyframes _ngcontent-%COMP%_slideUp{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.modal-content[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;max-width:500px;width:100%;box-shadow:0 10px 25px #0003;border:1px solid var(--color-border-light);animation:_ngcontent-%COMP%_slideUp .25s ease;max-height:90vh;display:flex;flex-direction:column;overflow:hidden}.modal-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid var(--color-border)}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{flex:1;min-width:0;font-size:1.25rem;font-weight:600;color:var(--color-text);margin:0;display:flex;align-items:center;gap:.5rem;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.close-btn[_ngcontent-%COMP%]{flex-shrink:0;background:none;border:none;font-size:1.5rem;color:var(--color-text-muted);cursor:pointer;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;border-radius:4px;transition:all .2s ease}.close-btn[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);color:var(--color-text)}.modal-body[_ngcontent-%COMP%]{padding:1.5rem;overflow-y:auto;overflow-x:hidden;flex:1;min-height:0}.modal-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 1rem;color:var(--color-text-secondary);line-height:1.5}.modal-body[_ngcontent-%COMP%] p.warning[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);padding:.85rem;border-radius:8px;border-left:4px solid var(--color-warning);font-weight:600}.modal-body[_ngcontent-%COMP%] p.replace-warning[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-danger) 8%,transparent);color:var(--color-danger);border-left-color:var(--color-danger)}.modal-footer[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding:1.5rem;border-top:1px solid var(--color-border);flex-shrink:0}.modal-footer[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{flex:1;min-height:2.5rem}.app-version-label[_ngcontent-%COMP%]{flex-shrink:0;margin:0;padding:0 1.5rem .75rem;text-align:center;font-size:.7rem;color:var(--color-text-muted)}.booking-modal[_ngcontent-%COMP%]{max-width:600px}.booking-session-info[_ngcontent-%COMP%]{background:var(--color-accent-bg-light, color-mix(in srgb, var(--color-accent) 10%, transparent));border-radius:8px;padding:1rem;margin-bottom:1.5rem;display:flex;flex-direction:column;gap:.5rem}.session-info-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;font-size:.9rem;font-weight:600;color:var(--color-accent-dark)}.session-info-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem;width:20px;text-align:center}.booking-players-section[_ngcontent-%COMP%]{margin-bottom:1.5rem}
68.booking-players-section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text);margin:0 0 .25rem}.players-hint[_ngcontent-%COMP%]{font-size:.825rem!important;color:var(--color-text-muted)!important;margin-bottom:.75rem!important}.booking-players-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:.75rem}.booking-player-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.5rem;background:var(--color-surface-hover);border:1px solid var(--color-border);border-radius:8px}.player-number[_ngcontent-%COMP%]{width:28px;height:28px;background:var(--color-accent);color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.8rem;font-weight:700;flex-shrink:0}.player-name-input[_ngcontent-%COMP%]{width:100%;min-width:0;box-sizing:border-box;padding:.5rem .75rem;border:2px solid var(--color-border);border-radius:6px;font-size:.875rem;outline:none;transition:all .2s ease;background:var(--color-surface);color:var(--color-text)}.player-name-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.player-name-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.remove-player-btn[_ngcontent-%COMP%]{width:28px;height:28px;padding:0;border:none;background:var(--color-danger);color:#fff;border-radius:6px;font-size:1rem;font-weight:700;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;flex-shrink:0}.remove-player-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 85%,black)}.assign-self-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem;padding:.3rem .6rem;border:1.5px solid var(--color-accent);background:transparent;color:var(--color-accent);border-radius:6px;font-size:.72rem;font-weight:600;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background .15s,color .15s}.assign-self-btn[_ngcontent-%COMP%]:hover{background:var(--color-accent);color:#fff}.mention-dropdown[_ngcontent-%COMP%]{position:absolute;top:100%;left:0;right:0;z-index:1100;background:var(--color-surface);border:1px solid var(--color-border);border-top:2px solid var(--color-accent);border-radius:0 0 10px 10px;box-shadow:var(--shadow-md);max-height:260px;overflow-y:auto;margin-top:2px}.mention-hint[_ngcontent-%COMP%]{padding:6px 12px;font-size:.7rem;color:var(--color-text-muted);border-bottom:1px solid var(--color-border-light);display:flex;align-items:center;gap:5px;text-transform:uppercase;letter-spacing:.4px;font-weight:600}.mention-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.mention-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.65rem;padding:.55rem .75rem;cursor:pointer;transition:background-color .12s ease;border-left:3px solid transparent}.mention-item[_ngcontent-%COMP%]:hover, .mention-item.active[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle)}.mention-item.active[_ngcontent-%COMP%]{border-left-color:var(--color-accent)}.mention-avatar[_ngcontent-%COMP%]{width:30px;height:30px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.78rem;font-weight:700;flex-shrink:0}.mention-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-width:0}.mention-name[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-username[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mention-skill[_ngcontent-%COMP%]{font-size:.68rem;font-weight:700;color:var(--color-accent);background:var(--color-accent-bg-light);padding:2px 8px;border-radius:10px;white-space:nowrap;flex-shrink:0}.mention-no-results[_ngcontent-%COMP%]{padding:0}.mention-empty[_ngcontent-%COMP%]{padding:1rem;text-align:center;color:var(--color-text-muted);font-size:.82rem;display:flex;align-items:center;justify-content:center;gap:6px}.mention-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem;opacity:.5}.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar{width:5px}.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:transparent}.mention-dropdown[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:3px}.add-player-section[_ngcontent-%COMP%]{margin-bottom:1rem}.discount-solo-notice[_ngcontent-%COMP%]{margin:6px 0 0;font-size:.85rem;color:var(--color-accent);display:flex;align-items:center;gap:5px}.booking-summary[_ngcontent-%COMP%]{background:var(--color-accent-bg-light, color-mix(in srgb, var(--color-accent) 8%, transparent));border-radius:8px;padding:1rem;margin-bottom:1rem}.summary-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;font-size:1rem;font-weight:600;color:var(--color-text)}.summary-row.total[_ngcontent-%COMP%]{padding-top:1rem;border-top:2px dashed var(--color-border);font-weight:700;font-size:1.125rem;color:var(--color-accent-dark)}.admin-cash-toggle[_ngcontent-%COMP%]{margin-bottom:1rem;padding:.75rem 1rem;background:var(--color-accent-bg-subtle);border:1.5px solid var(--color-accent);border-radius:8px}.cash-toggle-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.6rem;cursor:pointer;margin:0}.cash-toggle-checkbox[_ngcontent-%COMP%]{width:1.1rem;height:1.1rem;accent-color:var(--color-accent);cursor:pointer;flex-shrink:0}.cash-toggle-text[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.35rem}
68.cash-toggle-hint[_ngcontent-%COMP%]{margin:.5rem 0 0;font-size:.82rem;color:var(--color-text-secondary);display:flex;align-items:center;gap:.35rem}.payment-info-box[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:1.25rem;border-radius:8px;border:1px solid var(--color-border)}.payment-info-box[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:.875rem;font-weight:700;color:var(--color-text);margin:0 0 .75rem;display:flex;align-items:center;gap:.5rem}.payment-info-box[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.5rem 0;font-size:.85rem;color:var(--color-text-secondary);font-weight:500}.gcash-info[_ngcontent-%COMP%]{margin-top:.75rem;padding-top:.75rem;border-top:1px solid var(--color-border)}.gcash-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.35rem 0!important;font-size:.9rem!important}.payment-options-text[_ngcontent-%COMP%]{font-family:inherit;font-size:.9rem;margin:.35rem 0 0;white-space:pre-line;background:none;border:none;padding:0;color:inherit}.upload-area[_ngcontent-%COMP%]{margin:1.5rem 0;text-align:center;padding:2rem;border:2px dashed var(--color-border);border-radius:12px;background:var(--color-surface-hover)}.upload-icon[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-accent);margin-bottom:.75rem}.upload-text[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--color-text);margin-bottom:.25rem!important}.payment-info[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:1.25rem;border-radius:8px;margin-top:1rem;border:1px solid var(--color-border)}.payment-info[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:.875rem;font-weight:700;color:var(--color-text);margin:0 0 .75rem;text-transform:uppercase;letter-spacing:.5px}.payment-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.5rem 0;font-size:.9rem;color:var(--color-text-secondary);font-weight:500}.help-text[_ngcontent-%COMP%]{font-size:.8rem!important;color:var(--color-text-muted)!important;margin-top:.25rem!important}.confirm-modal[_ngcontent-%COMP%]{max-width:420px}.confirm-modal[_ngcontent-%COMP%] .modal-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text)}.cancel-details[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:.75rem;border-radius:8px;text-align:center;font-weight:600}.text-danger[_ngcontent-%COMP%]{color:var(--color-danger)}.warning-modal[_ngcontent-%COMP%]{max-width:400px}.success-modal[_ngcontent-%COMP%]{max-width:400px;text-align:center;padding:2rem 1.5rem}.success-modal[_ngcontent-%COMP%] .success-icon[_ngcontent-%COMP%]{width:80px;height:80px;background:var(--color-success-bg-light);color:var(--color-success);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:2.5rem;font-weight:700;margin:0 auto 1.5rem;border:3px solid var(--color-success);animation:_ngcontent-%COMP%_scaleIn .3s ease}.success-modal[_ngcontent-%COMP%] .success-icon.cancel-icon[_ngcontent-%COMP%]{background:var(--color-danger-bg-subtle, rgba(239, 68, 68, .1));color:var(--color-danger, #ef4444);border-color:var(--color-danger, #ef4444)}@keyframes _ngcontent-%COMP%_scaleIn{0%{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}.success-modal[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--color-text);margin:0 0 .5rem}.success-modal[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text-secondary);margin:0 0 .5rem}.success-warning[_ngcontent-%COMP%]{font-size:.85rem!important;color:var(--color-warning)!important;font-weight:600;margin-bottom:1.5rem!important}.success-modal[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{width:100%}.success-modal[_ngcontent-%COMP%] .success-icon.transfer-icon[_ngcontent-%COMP%]{background:#6366f11a;color:#6366f1;border-color:#6366f1}.confirm-modal[_ngcontent-%COMP%]{max-width:380px;text-align:center}.confirm-modal[_ngcontent-%COMP%] .modal-body[_ngcontent-%COMP%]{padding:1.5rem 1.5rem .5rem}.confirm-modal-icon[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-warning, #f59e0b);display:block;margin-bottom:.75rem}.confirm-modal[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text);margin:0}
68.confirm-modal[_ngcontent-%COMP%] .modal-footer[_ngcontent-%COMP%]{display:flex;gap:.75rem;padding:1rem 1.5rem 1.5rem}.confirm-modal[_ngcontent-%COMP%] .modal-footer[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{flex:1}.toast-notification[_ngcontent-%COMP%]{position:fixed;bottom:1.5rem;left:50%;transform:translate(-50%);display:inline-flex;align-items:center;gap:.6rem;padding:.75rem 1rem .75rem 1.25rem;border-radius:10px;font-size:.9rem;font-weight:500;width:max-content;min-width:260px;max-width:min(480px,90vw);box-shadow:0 4px 20px #0000002e;z-index:9999;animation:_ngcontent-%COMP%_toastSlideUp .3s ease}@keyframes _ngcontent-%COMP%_toastSlideUp{0%{opacity:0;transform:translate(-50%) translateY(16px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.toast-success[_ngcontent-%COMP%]{background:#dcfce7;color:#166534;border:1px solid #86efac}.toast-error[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}.toast-info[_ngcontent-%COMP%]{background:#e0e7ff;color:#3730a3;border:1px solid #a5b4fc}.toast-notification[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.1rem;flex-shrink:0}.toast-notification[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.toast-close[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;padding:0;line-height:1;opacity:.6;color:inherit;flex-shrink:0}.booking-stats-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;margin:1rem 0 1.5rem}.stat-tile[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;background:var(--color-background-card);border:1px solid var(--color-border);border-radius:10px;padding:.875rem 1rem;box-shadow:var(--shadow-sm);transition:box-shadow .15s}.stat-tile[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-md)}.stat-tile-icon[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:1.15rem;flex-shrink:0}.stat-tile-icon.accent[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);color:var(--color-accent)}.stat-tile-icon.green[_ngcontent-%COMP%]{background:#22c55e1f;color:#22c55e}.stat-tile-icon.gold[_ngcontent-%COMP%]{background:#eab3081f;color:#ca8a04}.stat-tile-icon.muted[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text-muted)}.stat-tile-icon.danger[_ngcontent-%COMP%]{background:var(--color-danger-bg-subtle);color:var(--color-danger)}.stat-tile-icon.blue[_ngcontent-%COMP%]{background:#3b82f61f;color:#3b82f6}.stat-tile-body[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0}.stat-tile-value[_ngcontent-%COMP%]{font-size:1.35rem;font-weight:700;color:var(--color-text);line-height:1.1}.stat-tile-label[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted);margin-top:.15rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media (max-width: 576px){.booking-stats-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}}.booking-credit-section[_ngcontent-%COMP%]{margin-bottom:1.5rem;border:1px solid var(--color-accent);border-radius:10px;overflow:hidden;background:var(--color-accent-bg-subtle)}.credit-section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.65rem 1rem;background:var(--color-accent-bg-light);font-weight:600;font-size:.9rem;color:var(--color-accent)}.credit-count-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.4rem;height:1.4rem;border-radius:50%;background:var(--color-accent);color:#fff;font-size:.75rem;font-weight:700;margin-left:.25rem}.credit-section-body[_ngcontent-%COMP%]{padding:.75rem 1rem}.credit-description[_ngcontent-%COMP%]{font-size:.82rem;color:var(--color-text-secondary);margin-bottom:.75rem}.credit-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:.75rem}.credit-item[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.6rem;padding:.6rem .75rem;border-radius:8px;border:1px solid var(--color-border);background:var(--color-background-card);cursor:pointer;transition:border-color .15s,background .15s}.credit-item.selected[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-bg-subtle)}.credit-item[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:.2rem;accent-color:var(--color-accent)}.credit-item-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.15rem;font-size:.82rem}.credit-item-from[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text)}.credit-item-session[_ngcontent-%COMP%], .credit-item-note[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.78rem}.credit-applied-note[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem;font-size:.82rem;color:var(--color-accent);font-weight:600;padding:.4rem .6rem;background:var(--color-accent-bg-subtle);border-radius:6px}.credit-applied-note.partial[_ngcontent-%COMP%]{color:var(--color-warning, #b26a00);
68background:var(--color-warning-bg-subtle, #fff4e0)}.credit-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.85rem;font-weight:600;cursor:pointer;margin:.5rem 0}.credit-toggle[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:1rem;height:1rem;cursor:pointer}.credit-summary[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;padding:.5rem .6rem;background:var(--color-accent-bg-subtle);border-radius:6px;margin-bottom:.5rem}.credit-summary-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:.82rem}.credit-summary-row.applied[_ngcontent-%COMP%]{font-weight:700;color:var(--color-accent)}.credit-summary-row.remaining[_ngcontent-%COMP%]{color:var(--color-text-muted, #666)}.credit-info-box[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.6rem;padding:.75rem 1rem;background:var(--color-accent-bg-subtle);border:1px solid var(--color-accent);border-radius:8px;font-size:.82rem;color:var(--color-accent);font-weight:500;margin-bottom:1.25rem}.credit-info-box[_ngcontent-%COMP%] .bi[_ngcontent-%COMP%]{font-size:1.1rem;flex-shrink:0;margin-top:.05rem}.credit-earned-notice[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.55rem;margin-top:.75rem;padding:.75rem .9rem;background:var(--color-accent-bg-subtle);border:1px solid var(--color-accent);border-radius:8px;font-size:.82rem;color:var(--color-accent);text-align:left}.credit-earned-notice.subtle[_ngcontent-%COMP%]{flex-direction:row;align-items:center;gap:.5rem}.credit-earned-headline[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.9rem;font-weight:700}.credit-earned-headline[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:1.05rem}.credit-earned-breakdown[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.2rem;padding:.5rem .6rem;background:var(--color-surface, #fff);border-radius:6px}.ceb-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;font-size:.8rem;color:var(--color-text, #333)}.ceb-row.earned[_ngcontent-%COMP%]{font-weight:700;color:var(--color-accent)}.ceb-row.total[_ngcontent-%COMP%]{font-weight:700;border-top:1px solid var(--color-border, #e0e0e0);padding-top:.25rem;margin-top:.1rem}.credit-earned-formula[_ngcontent-%COMP%]{text-align:center;font-size:.85rem;font-weight:600}.booking-discount-section[_ngcontent-%COMP%]{margin-bottom:1.5rem;border:1px solid var(--color-border);border-radius:10px;overflow:hidden}.discount-section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.65rem 1rem;background:var(--color-surface-hover);border-bottom:1px solid var(--color-border);font-size:.8rem;font-weight:700;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.6px}.discount-section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:.9rem}.discount-body[_ngcontent-%COMP%]{padding:1rem;background:var(--color-surface)}.discount-select[_ngcontent-%COMP%]{width:100%;padding:.6rem .75rem;background:var(--color-surface-hover);border:2px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:.9rem;outline:none;transition:border-color .2s,box-shadow .2s;margin-bottom:.75rem;cursor:pointer}.discount-select[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.discount-status[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.6rem;padding:.75rem 1rem;border-radius:8px;font-size:.875rem;font-weight:500;line-height:1.4}.discount-status[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.05rem;flex-shrink:0;margin-top:.1rem}.discount-status.verified[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);border:1px solid var(--color-success-bg-medium);color:var(--color-success)}.discount-status.pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-subtle);border:1px solid var(--color-warning-bg-medium);color:var(--color-warning)}.discount-status.needs-upload[_ngcontent-%COMP%]{background:var(--color-info-bg-subtle);border:1px solid var(--color-info-bg-medium);color:var(--color-info);flex-direction:column;gap:.5rem}.upload-label[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem}.discount-file-input[_ngcontent-%COMP%]{width:100%;padding:.45rem .5rem;background:var(--color-surface);border:2px dashed var(--color-info-bg-medium);border-radius:6px;color:var(--color-text-secondary);font-size:.8rem;cursor:pointer}.file-count[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;font-weight:600;color:var(--color-info);background:var(--color-info-bg-subtle);padding:.2rem .65rem;border-radius:20px;border:1px solid var(--color-info-bg-medium)}.discount-status.needs-upload.proof-missing[_ngcontent-%COMP%]{border-color:var(--color-danger, #dc3545);background:#dc35450f;color:var(--color-danger, #dc3545)}.proof-required-hint[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;font-weight:600;color:var(--color-danger, #dc3545)}.summary-row.discount-row[_ngcontent-%COMP%]{color:var(--color-success);font-size:.95rem}.summary-row.discount-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.85rem}.discount-value[_ngcontent-%COMP%]{color:var(--color-success);font-weight:700}.discount-vat-breakdown[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;margin-top:8px;padding:8px 12px;border-radius:8px;background:#eab30814;border:1px solid rgba(234,179,8,.25);font-size:.8rem;color:var(--color-text-secondary);line-height:1.45}.discount-vat-breakdown[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{flex-shrink:0;margin-top:2px;color:#b45309}.summary-row.vat-deduction-row[_ngcontent-%COMP%]{font-size:.88rem;color:#b45309}.summary-row.vat-deduction-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.82rem}.vat-deduction-value[_ngcontent-%COMP%]{color:#b45309;font-weight:600}.toast-close[_ngcontent-%COMP%]:hover{opacity:1}@media (max-width: 768px){.open-play-container[_ngcontent-%COMP%]{padding:1rem}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.5rem}.session-header[_ngcontent-%COMP%]{flex-direction:column;gap:1rem}.session-status[_ngcontent-%COMP%]{text-align:left}.players-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.date-card[_ngcontent-%COMP%]{min-width:60px;padding:.5rem .75rem}.day-number[_ngcontent-%COMP%]{font-size:1.25rem}.booking-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}@media (max-width: 480px){.modal-content[_ngcontent-%COMP%]{margin:0;max-height:92vh;max-height:92dvh;border-radius:12px}.modal-footer[_ngcontent-%COMP%]{flex-direction:column;padding-bottom:max(1.5rem,env(safe-area-inset-bottom))}.player-avatars[_ngcontent-%COMP%]{gap:.25rem}.avatar-item[_ngcontent-%COMP%]{width:28px;height:28px;font-size:.7rem}}.selected-files[_ngcontent-%COMP%]{margin-top:16px;padding:12px;background:var(--color-background);border-radius:8px;border:1px solid var(--color-border)}.selected-files[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 8px;font-size:.875rem;color:var(--color-text)}.selected-files[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{list-style:none;padding:0;margin:0}.selected-files[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{padding:6px 10px;background:var(--color-card-background);border-radius:4px;margin-bottom:4px;font-size:.85rem;color:var(--color-text-muted);display:flex;align-items:center;gap:8px}.selected-files[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:last-child{margin-bottom:0}.selected-files[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"\\f15b";font-family:bootstrap-icons;color:var(--color-primary);flex-shrink:0}
68.file-name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-size[_ngcontent-%COMP%]{flex-shrink:0;font-variant-numeric:tabular-nums;opacity:.75}.selected-files-total[_ngcontent-%COMP%]{margin:8px 0 0!important;text-align:right;font-size:.8rem!important;color:var(--color-text-muted)!important;font-variant-numeric:tabular-nums}.selected-files-total.over-limit[_ngcontent-%COMP%]{color:var(--color-danger, #e5484d)!important;font-weight:600}.receipt-view-modal[_ngcontent-%COMP%]{max-width:700px}.receipt-info[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:8px;padding:1rem;margin-bottom:1.5rem}.receipt-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:.5rem 0;border-bottom:1px solid var(--color-border)}.receipt-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.receipt-row[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.875rem}.receipt-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text);font-weight:600;overflow-wrap:break-word;word-break:break-word;text-align:right;max-width:65%}.receipt-row.credit-applied-row[_ngcontent-%COMP%] span[_ngcontent-%COMP%], .receipt-row.credit-applied-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#a16207}.receipt-row.credit-applied-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#ca8a04;margin-right:.25rem}[_ngcontent-%COMP%]:root[data-theme=dark] .receipt-row.credit-applied-row[_ngcontent-%COMP%] span[_ngcontent-%COMP%], [_ngcontent-%COMP%]:root[data-theme=dark] .receipt-row.credit-applied-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#fbbf24}[_ngcontent-%COMP%]:root[data-theme=dark] .receipt-row.credit-applied-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#fbbf24}.receipt-images-area[_ngcontent-%COMP%]{border:2px dashed var(--color-border);border-radius:12px;padding:1.5rem;background:var(--color-background)}.receipt-image-container[_ngcontent-%COMP%]{max-width:100%;margin-bottom:1rem;border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:#fff}.receipt-image-container[_ngcontent-%COMP%]:last-child{margin-bottom:0}.receipt-image-header[_ngcontent-%COMP%]{background:var(--color-surface);padding:.5rem .75rem;border-bottom:1px solid var(--color-border);font-size:.75rem;font-weight:600;color:var(--color-text-secondary);display:flex;align-items:center;justify-content:space-between}.receipt-zoom-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem}.zoom-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:1px solid var(--color-border);border-radius:6px;color:var(--color-text-secondary);cursor:pointer;font-size:.8rem;transition:background .15s,color .15s}.zoom-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);color:var(--color-text)}.zoom-btn[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:not-allowed}.zoom-btn.zoom-reset[_ngcontent-%COMP%]{border-color:transparent}.zoom-level[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text-secondary);min-width:38px;text-align:center}.receipt-image-wrapper[_ngcontent-%COMP%]{position:relative;min-height:200px;background:var(--color-surface);overflow:hidden}.receipt-image-wrapper.zoomed[_ngcontent-%COMP%]{overflow:auto;cursor:grab;-webkit-user-select:none;user-select:none}.receipt-image[_ngcontent-%COMP%]{width:100%;max-height:500px;object-fit:contain;display:block;transition:opacity .3s ease,transform .2s ease}.receipt-image.loading[_ngcontent-%COMP%]{opacity:0}.receipt-loading-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;background:var(--color-surface);z-index:1}.receipt-loading-overlay[_ngcontent-%COMP%] .spinner-border[_ngcontent-%COMP%]{width:3rem;height:3rem;border:.3em solid var(--color-border);border-right-color:var(--color-primary);border-radius:50%;animation:_ngcontent-%COMP%_spinner-border .75s linear infinite}@keyframes _ngcontent-%COMP%_spinner-border{to{transform:rotate(360deg)}}.receipt-loading-overlay[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:1rem;color:var(--color-text-secondary);font-size:.875rem}.visually-hidden[_ngcontent-%COMP%]{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.receipt-placeholder[_ngcontent-%COMP%]{text-align:center;color:var(--color-text-muted);padding:2rem}.receipt-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:3rem;display:block;margin-bottom:.5rem;opacity:.4}.receipt-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.875rem}.tab-navigation[_ngcontent-%COMP%]{display:flex;gap:.5rem;margin-bottom:2rem;border-bottom:2px solid var(--color-border);padding-bottom:0}.tab-btn[_ngcontent-%COMP%]{padding:.75rem 1.5rem;background:transparent;border:none;border-bottom:3px solid transparent;color:var(--color-text-secondary);font-weight:600;font-size:.95rem;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.5rem;margin-bottom:-2px}.tab-btn[_ngcontent-%COMP%]:hover{color:var(--color-accent);background:var(--color-surface)}.tab-btn.active[_ngcontent-%COMP%]{color:var(--color-accent);border-bottom-color:var(--color-accent)}.tab-btn[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;padding:.125rem .5rem;border-radius:12px;font-size:.75rem;font-weight:700}.tab-btn[_ngcontent-%COMP%] .badge-pending-transfers[_ngcontent-%COMP%]{background:var(--color-warning, #f59e0b)}.my-bookings-tab[_ngcontent-%COMP%]{min-height:400px}.my-bookings-header[_ngcontent-%COMP%]{margin-bottom:1.5rem}.bookings-filter-bar[_ngcontent-%COMP%]{display:flex;gap:.75rem;margin-bottom:2rem;flex-wrap:wrap}.filter-btn[_ngcontent-%COMP%]{padding:.625rem 1.25rem;background:var(--color-surface);border:2px solid var(--color-border);border-radius:8px;color:var(--color-text);font-weight:600;font-size:.875rem;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;gap:.5rem}.filter-btn[_ngcontent-%COMP%]:hover{background:var(--color-background);border-color:var(--color-accent);color:var(--color-accent);transform:translateY(-1px)}.filter-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff;box-shadow:0 2px 8px #00000026}.filter-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.filter-count[_ngcontent-%COMP%]{background:#fff3;padding:.125rem .5rem;border-radius:12px;font-size:.75rem;font-weight:700}.filter-btn.active[_ngcontent-%COMP%] .filter-count[_ngcontent-%COMP%]{background:#ffffff4d}.filter-date-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.625rem 1.25rem;background:var(--color-surface);border:2px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:.875rem;font-weight:600;transition:all .2s ease;cursor:pointer}.filter-date-wrapper[_ngcontent-%COMP%]:has(.filter-date-input:focus), .filter-date-wrapper[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.filter-date-wrapper.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff;box-shadow:0 2px 8px #00000026}.filter-date-wrapper[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{font-size:1rem;flex-shrink:0}.filter-date-input[_ngcontent-%COMP%]{border:none;background:transparent;color:inherit;font-size:.875rem;font-weight:600;font-family:inherit;cursor:pointer;outline:none;padding:0;width:auto;max-width:100%;min-width:0;color-scheme:dark;-webkit-appearance:none;appearance:none}.filter-date-clear[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:1.25rem;height:1.25rem;border:none;border-radius:50%;background:#fff3;color:#fff;cursor:pointer;padding:0;flex-shrink:0;transition:background .15s}.filter-date-clear[_ngcontent-%COMP%]:hover{background:#fff;color:var(--color-accent)}.filter-date-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.8rem}.my-bookings-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.75rem;font-weight:700;color:var(--color-text);margin-bottom:.5rem;display:flex;align-items:center;gap:.5rem}.my-bookings-header[_ngcontent-%COMP%] .subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.95rem}.all-bookings-container[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem}.booking-card-full[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:1rem;transition:all .2s ease;min-width:0;overflow:hidden}.booking-card-full[_ngcontent-%COMP%]:hover{box-shadow:0 2px 8px #00000014;border-color:var(--color-accent)}.booking-card-header-full[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:.5rem;margin-bottom:.75rem;padding-bottom:.625rem;border-bottom:1px solid var(--color-border)}.booking-session-date[_ngcontent-%COMP%]{flex:1;min-width:0;color:var(--color-text);font-size:.9375rem;font-weight:700;display:flex;align-items:center;gap:.375rem;overflow:hidden}.booking-session-date[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;min-width:0}.booking-session-date[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.booking-session-meta[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;margin-bottom:.75rem;flex-wrap:wrap}.booking-time-range[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.35rem;font-size:.875rem;font-weight:600;color:var(--color-accent)}.booking-time-range[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.8125rem}.booking-ref-id[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.35rem;font-size:.75rem;color:var(--color-text-secondary);background:var(--color-surface-alt, rgba(0,0,0,.04));padding:.2rem .5rem;border-radius:6px;font-family:monospace;letter-spacing:.3px;min-width:0;max-width:100%}.booking-ref-id[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.booking-ref-id[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-accent)}.info-value-sm[_ngcontent-%COMP%]{font-size:.75rem!important}.booking-status-badge[_ngcontent-%COMP%]{padding:.375rem .75rem;border-radius:16px;font-size:.6875rem;font-weight:700;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}.booking-card-body-full[_ngcontent-%COMP%]{margin-bottom:.75rem}.booking-info-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:.75rem;margin-bottom:.75rem}.info-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;min-width:0}.info-label[_ngcontent-%COMP%]{font-size:.6875rem;color:var(--color-text-secondary);font-weight:600;display:flex;align-items:center;gap:.25rem}.info-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.75rem}.info-value[_ngcontent-%COMP%]{font-size:.875rem;color:var(--color-text);font-weight:700;overflow-wrap:break-word;word-break:break-word}.amount-original[_ngcontent-%COMP%]{font-size:.78rem;text-decoration:line-through;color:var(--color-text-muted);margin-right:.35rem}.amount-discounted[_ngcontent-%COMP%]{font-weight:700;color:var(--color-success)}.payment-method-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;font-weight:600;padding:.15rem .5rem;border-radius:5px}.payment-method-badge.badge-cash[_ngcontent-%COMP%]{background:#22c55e1f;color:#16a34a}.payment-method-badge.badge-online[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);color:var(--color-accent)}.booking-credit-strip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.45rem .75rem;border-radius:8px;font-size:.8rem;margin-bottom:.75rem;flex-wrap:wrap;background:#eab3081a;border:1px solid rgba(234,179,8,.3);color:#a16207}[_ngcontent-%COMP%]:root[data-theme=dark] .booking-credit-strip[_ngcontent-%COMP%]{color:#fbbf24}.booking-credit-strip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#ca8a04}[_ngcontent-%COMP%]:root[data-theme=dark] .booking-credit-strip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#fbbf24}.booking-discount-strip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.45rem .75rem;border-radius:8px;font-size:.8rem;margin-bottom:.75rem;flex-wrap:wrap}.booking-discount-strip.strip-approved[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);border:1px solid var(--color-success-bg-medium);color:var(--color-success)}.booking-discount-strip.strip-pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-subtle);border:1px solid var(--color-warning-bg-medium);color:var(--color-warning)}.strip-type[_ngcontent-%COMP%]{font-weight:600}
68.strip-savings[_ngcontent-%COMP%]{font-weight:700}.strip-status[_ngcontent-%COMP%]{margin-left:auto;font-size:.75rem;opacity:.85}.booking-player-names[_ngcontent-%COMP%]{margin-bottom:.75rem}.booking-player-names[_ngcontent-%COMP%] .info-label[_ngcontent-%COMP%]{margin-bottom:.375rem}.player-name-tags[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem}.player-name-tag[_ngcontent-%COMP%]{padding:.25rem .625rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:5px;font-size:.75rem;color:var(--color-text);font-weight:500}.status-message[_ngcontent-%COMP%]{padding:.5rem .75rem;border-radius:6px;font-size:.75rem;font-weight:600;display:flex;align-items:center;gap:.375rem;margin-bottom:.5rem;line-height:1.3}.status-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem;flex-shrink:0}.warning-message[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.info-message[_ngcontent-%COMP%]{background:#e3f2fd;color:#1976d2;border:1px solid #1976d2}.success-message[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.cancelled-message[_ngcontent-%COMP%]{background:#fce4ec;color:#c2185b;border:1px solid #c2185b}.expired-message[_ngcontent-%COMP%]{background:#f3e5f5;color:#7b1fa2;border:1px solid #7b1fa2}.booking-card-actions-full[_ngcontent-%COMP%]{display:flex;gap:.5rem;flex-wrap:wrap}.booking-card-actions-full[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:.5rem .875rem;font-size:.8125rem;border-radius:6px;display:flex;align-items:center;gap:.375rem;font-weight:600}.booking-card-actions-full[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem}.btn-upload[_ngcontent-%COMP%]{background:var(--color-primary);color:#fff;border:none}.btn-upload[_ngcontent-%COMP%]:hover{background:var(--color-primary-dark)}.btn-replace[_ngcontent-%COMP%]{background:var(--color-warning);color:#fff;border:none;font-weight:700}.btn-replace[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-warning) 85%,black);box-shadow:0 4px 12px color-mix(in srgb,var(--color-warning) 30%,transparent)}.btn-view[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;border:none}.btn-view[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark)}.btn-cancel[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;border:none}.btn-cancel[_ngcontent-%COMP%]:hover{background:var(--color-danger-dark)}.no-bookings-message[_ngcontent-%COMP%]{text-align:center;padding:4rem 2rem;background:var(--color-surface);border-radius:12px;border:2px dashed var(--color-border)}.no-bookings-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:4rem;color:var(--color-text-muted);opacity:.5;margin-bottom:1rem}.no-bookings-message[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--color-text);margin-bottom:.5rem}.no-bookings-message[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin-bottom:1.5rem}.no-bookings-actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.625rem;justify-content:center;align-items:center;margin-top:.25rem}.no-bookings-actions[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{padding:.45rem 1.1rem;font-size:.8125rem;font-weight:600;border-radius:20px;gap:.375rem;min-width:unset}.my-bookings-pagination[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:16px;padding:16px 0;margin-top:8px}.my-bookings-pagination[_ngcontent-%COMP%] .btn-page[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:8px;color:var(--color-text);cursor:pointer;padding:6px 14px;font-size:.8rem;font-weight:500;display:flex;align-items:center;gap:4px;transition:all .15s}.my-bookings-pagination[_ngcontent-%COMP%] .btn-page[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-bg-subtle);border-color:var(--color-accent);color:var(--color-accent)}.my-bookings-pagination[_ngcontent-%COMP%] .btn-page[_ngcontent-%COMP%]:disabled{opacity:.4;cursor:not-allowed}
68.my-bookings-pagination[_ngcontent-%COMP%] .page-info[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);font-weight:500}.warning-box[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:1px solid var(--color-accent);color:var(--color-text);padding:.875rem 1rem;border-radius:8px;margin:1rem 0;display:flex;align-items:flex-start;gap:.6rem;font-size:.825rem;line-height:1.55}.warning-box[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.1rem;flex-shrink:0;margin-top:.1rem;color:var(--color-accent)}.warning-box[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-accent)}.cancel-details[_ngcontent-%COMP%]{background:var(--color-surface);padding:.75rem;border-radius:6px;margin-top:.75rem;color:var(--color-text-secondary)}@media (max-width: 1200px){.all-bookings-container[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}}@media (max-width: 768px){.all-bookings-container[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:.75rem}.tab-navigation[_ngcontent-%COMP%]{gap:.25rem}.tab-btn[_ngcontent-%COMP%]{padding:.625rem 1rem;font-size:.875rem}.bookings-filter-bar[_ngcontent-%COMP%]{gap:.5rem}.filter-btn[_ngcontent-%COMP%]{padding:.5rem .875rem;font-size:.8125rem;flex:1;min-width:calc(50% - .25rem);justify-content:center}.filter-btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.875rem}.booking-card-full[_ngcontent-%COMP%]{padding:.75rem;border-radius:8px}.booking-card-header-full[_ngcontent-%COMP%]{margin-bottom:.625rem;padding-bottom:.5rem}.booking-session-date[_ngcontent-%COMP%]{font-size:.875rem}.booking-session-meta[_ngcontent-%COMP%]{gap:.625rem;margin-bottom:.625rem}.booking-status-badge[_ngcontent-%COMP%]{font-size:.625rem;padding:.3125rem .625rem}.booking-card-body-full[_ngcontent-%COMP%]{margin-bottom:.625rem}.booking-info-row[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr;gap:.625rem;margin-bottom:.625rem}.info-label[_ngcontent-%COMP%]{font-size:.625rem}.info-value[_ngcontent-%COMP%]{font-size:.8125rem}.player-name-tags[_ngcontent-%COMP%]{gap:.3125rem}.player-name-tag[_ngcontent-%COMP%]{font-size:.6875rem;padding:.1875rem .5rem}.status-message[_ngcontent-%COMP%]{padding:.4375rem .625rem;font-size:.6875rem;margin-bottom:.5rem}.status-message[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.8125rem}.booking-card-actions-full[_ngcontent-%COMP%]{gap:.375rem}.booking-card-actions-full[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{flex:1;padding:.4375rem .625rem;font-size:.75rem;justify-content:center}.booking-card-actions-full[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.8125rem}}.modal-profile[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:16px;width:90%;max-width:500px;max-height:85vh;display:flex;flex-direction:column;overflow:hidden;box-shadow:var(--shadow-xl);animation:_ngcontent-%COMP%_slideUp .3s ease-out;position:relative;margin:auto}.modal-profile-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:1.25rem 1.5rem;border-bottom:1px solid var(--color-border);flex-shrink:0}.modal-profile-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.modal-profile-body[_ngcontent-%COMP%]{padding:2rem 1.5rem;display:flex;flex-direction:column;align-items:center;gap:1.5rem;overflow-y:auto;flex:1;min-height:0}.profile-picture-large[_ngcontent-%COMP%]{width:120px;height:120px;border-radius:50%;overflow:hidden;box-shadow:var(--shadow-md);border:4px solid var(--color-border)}.profile-picture-large[_ngcontent-%COMP%] .profile-img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover}.profile-picture-large[_ngcontent-%COMP%] .profile-placeholder[_ngcontent-%COMP%]{width:100%;height:100%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:2.5rem;font-weight:600;text-transform:uppercase}.profile-info[_ngcontent-%COMP%]{width:100%;display:flex;flex-direction:column;align-items:center;gap:1rem}.profile-bio[_ngcontent-%COMP%]{width:100%;padding:1rem 1.25rem;background:var(--color-background);border-radius:12px;border:1px solid var(--color-border);text-align:center;box-sizing:border-box}.profile-bio[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);line-height:1.6;font-size:.9375rem;font-style:italic}.modal-sports-section[_ngcontent-%COMP%]{width:100%;box-sizing:border-box}.modal-sports-title[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.modal-sports-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.1rem}.modal-sport-cards[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.modal-sport-card[_ngcontent-%COMP%]{padding:.875rem 1rem;background:var(--color-background);border:1px solid var(--color-border);border-radius:12px;display:flex;flex-direction:column;gap:.375rem}.modal-sport-card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.5rem}
68.modal-sport-name[_ngcontent-%COMP%]{font-weight:600;font-size:.9375rem;color:var(--color-text)}.modal-sport-badge[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;padding:.2rem .6rem;border-radius:20px;white-space:nowrap}.modal-sport-badge.level-beginner[_ngcontent-%COMP%]{background:#dbeafe;color:#1d4ed8}.modal-sport-badge.level-intermediate[_ngcontent-%COMP%]{background:#fef3c7;color:#d97706}.modal-sport-badge.level-advanced[_ngcontent-%COMP%]{background:#fee2e2;color:#dc2626}.modal-sport-badge.level-pro[_ngcontent-%COMP%]{background:#f3e8ff;color:#7c3aed}.modal-sport-dupr[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-accent);font-weight:500;display:flex;align-items:center;gap:.375rem}.modal-sport-dupr[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.75rem}.modal-sport-remarks[_ngcontent-%COMP%], .modal-sport-achievements[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text-secondary);line-height:1.5}.modal-sport-meta-label[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text-muted)}.profile-achievements[_ngcontent-%COMP%]{width:100%;padding:1rem 1.25rem;background:linear-gradient(135deg,var(--color-warning-bg) 0%,var(--color-success-bg) 100%);border-radius:12px;border:1px solid var(--color-warning);box-sizing:border-box}.profile-achievements[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 .75rem;font-size:1rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:.5rem}.profile-achievements[_ngcontent-%COMP%] h4[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning);font-size:1.25rem}.profile-achievements[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);line-height:1.6;font-size:.9375rem}.profile-name[_ngcontent-%COMP%]{margin:0;font-size:1.75rem;font-weight:700;color:var(--color-text);text-align:center}.profile-username[_ngcontent-%COMP%]{margin:-.5rem 0 0;font-size:1rem;color:var(--color-text-secondary);text-align:center}.profile-role[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.5rem}.role-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.5rem 1rem;border-radius:20px;font-size:.875rem;font-weight:600}.role-badge.owner[_ngcontent-%COMP%]{background:var(--color-success-bg);color:var(--color-success)}.role-badge.guest[_ngcontent-%COMP%]{background:var(--color-info-bg);color:var(--color-info)}.role-badge.registered[_ngcontent-%COMP%]{background:#6366f11f;color:#6366f1}.booked-by[_ngcontent-%COMP%]{font-size:.875rem;color:var(--color-text-muted);text-align:center}.profile-stats[_ngcontent-%COMP%]{width:100%;display:flex;flex-direction:column;gap:1rem;margin-top:.5rem}.stat-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:1rem;background:var(--color-background);border-radius:12px;border:1px solid var(--color-border)}.stat-item[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--color-accent)}.stat-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;flex:1}.stat-label[_ngcontent-%COMP%]{font-size:.875rem;color:var(--color-text-secondary);font-weight:500}.stat-value[_ngcontent-%COMP%]{font-size:1.125rem;font-weight:700;color:var(--color-text)}.stat-value-small[_ngcontent-%COMP%]{font-size:.9rem;word-break:break-all}.spinner-small[_ngcontent-%COMP%]{border:2px solid var(--color-border);border-top:2px solid var(--color-accent);border-radius:50%;width:24px;height:24px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto}.loading-indicator[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1rem;color:var(--color-text-secondary)}.loading-indicator[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.875rem}.guest-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:var(--color-info-bg);border-radius:12px;border:1px solid var(--color-info);margin-top:.5rem}.guest-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-info);font-size:1.25rem;flex-shrink:0;margin-top:.125rem}.guest-note[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--color-text-secondary);line-height:1.5}.btn-cancel-compact.btn-cancel-disabled[_ngcontent-%COMP%]{opacity:.45;cursor:not-allowed}.player-avatar-compact[_ngcontent-%COMP%]{cursor:pointer;transition:transform .2s ease,box-shadow .2s ease}.player-avatar-compact[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}@media (max-width: 768px){.modal-overlay[_ngcontent-%COMP%]{padding:0}.modal-profile[_ngcontent-%COMP%]{width:100%;max-width:100%;height:100vh;max-height:100vh;margin:0;border-radius:0;display:flex;flex-direction:column}.modal-profile-header[_ngcontent-%COMP%]{padding:1rem 1.25rem;flex-shrink:0;border-bottom:1px solid var(--color-border)}.modal-profile-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:1.5rem 1rem}
68.profile-picture-large[_ngcontent-%COMP%]{width:100px;height:100px;border:3px solid var(--color-border);flex-shrink:0}.profile-picture-large[_ngcontent-%COMP%] .profile-img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover;object-position:center;display:block}.profile-picture-large[_ngcontent-%COMP%] .profile-placeholder[_ngcontent-%COMP%]{font-size:2rem}.profile-name[_ngcontent-%COMP%]{font-size:1.5rem}.stat-item[_ngcontent-%COMP%]{padding:.875rem 1rem}.profile-stats[_ngcontent-%COMP%]{gap:.75rem}.profile-bio[_ngcontent-%COMP%], .profile-achievements[_ngcontent-%COMP%]{padding:1rem}}@media (max-width: 480px){.modal-profile-header[_ngcontent-%COMP%]{padding:.875rem 1rem}.modal-profile-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.125rem}.modal-profile-body[_ngcontent-%COMP%]{padding:1.25rem .875rem}.profile-picture-large[_ngcontent-%COMP%]{width:90px;height:90px;border:2px solid var(--color-border)}.profile-picture-large[_ngcontent-%COMP%] .profile-img[_ngcontent-%COMP%]{object-fit:cover;object-position:center}.profile-picture-large[_ngcontent-%COMP%] .profile-placeholder[_ngcontent-%COMP%]{font-size:1.75rem}.profile-name[_ngcontent-%COMP%]{font-size:1.375rem}}.player-input-wrapper[_ngcontent-%COMP%]{position:relative;flex:1;min-width:0}.player-suggestions[_ngcontent-%COMP%]{position:absolute;top:100%;left:0;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-lg);max-height:250px;overflow-y:auto;z-index:1000;margin-top:4px}.suggestion-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.75rem;cursor:pointer;transition:background .2s}.suggestion-item[_ngcontent-%COMP%]:hover{background:var(--color-background)}.suggestion-avatar[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;overflow:hidden;flex-shrink:0}.suggestion-avatar[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover}.suggestion-avatar-placeholder[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.875rem;text-transform:uppercase}.suggestion-info[_ngcontent-%COMP%]{flex:1;min-width:0}.suggestion-name[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text);font-size:.9375rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.suggestion-username[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--color-text-secondary)}.no-suggestions[_ngcontent-%COMP%]{padding:1rem;text-align:center;color:var(--color-text-muted);font-size:.875rem}.btn-qr[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-weight:700}.btn-qr[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent) 85%,black);box-shadow:0 4px 12px color-mix(in srgb,var(--color-accent) 30%,transparent)}.qr-modal[_ngcontent-%COMP%]{max-width:500px;width:95%}.qr-confidentiality-notice[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.6rem;background:color-mix(in srgb,var(--color-warning, #f59e0b) 12%,transparent);border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 40%,transparent);border-radius:8px;padding:.75rem 1rem;margin-bottom:1.25rem;font-size:.875rem;color:var(--color-text)}.qr-confidentiality-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning, #f59e0b);font-size:1rem;flex-shrink:0;margin-top:1px}.qr-loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:2rem 0}.qr-players-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.qr-player-card[_ngcontent-%COMP%]{border:1px solid var(--color-border-light);border-radius:12px;padding:1rem;background:var(--color-surface)}.qr-player-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.75rem;flex-wrap:wrap;gap:.5rem}.qr-player-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.3rem}.qr-player-name[_ngcontent-%COMP%]{font-weight:700;font-size:1rem;color:var(--color-text)}.qr-player-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.3rem;font-size:.75rem;font-weight:600;padding:.2rem .6rem;border-radius:20px}.badge-ready[_ngcontent-%COMP%]{background:color-mix(in srgb,#6366f1 12%,transparent);color:#6366f1}.badge-playing[_ngcontent-%COMP%]{background:color-mix(in srgb,#10b981 15%,transparent);color:#10b981}.badge-played[_ngcontent-%COMP%]{background:color-mix(in srgb,#3b82f6 12%,transparent);color:#3b82f6}.badge-no-show[_ngcontent-%COMP%]{background:color-mix(in srgb,#ef4444 10%,transparent);color:#ef4444}.qr-scanned-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.3rem;font-size:.75rem;font-weight:600;padding:.25rem .65rem;border-radius:20px;background:color-mix(in srgb,#10b981 15%,transparent);color:#10b981}.qr-image-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.75rem;padding:.5rem}.btn-download-qr[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem 1rem;font-size:.8rem;font-weight:500;color:var(--color-text-secondary);background:var(--color-surface-hover);border:1px solid var(--color-border-light);border-radius:20px;cursor:pointer;transition:background .2s,border-color .2s,color .2s}.btn-download-qr[_ngcontent-%COMP%]:hover{color:var(--color-text);background:var(--color-border);border-color:var(--color-border)}.qr-image[_ngcontent-%COMP%]{width:240px;height:240px;border-radius:8px;border:1px solid var(--color-border);box-shadow:var(--shadow-md);background:#fff}.qr-generating[_ngcontent-%COMP%]{width:240px;height:240px;display:flex;align-items:center;justify-content:center}.qr-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.4rem;padding:2rem 1rem;color:var(--color-text-muted);text-align:center}.qr-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;opacity:.5}.qr-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-weight:600;font-size:.95rem}.qr-empty[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:.8rem;opacity:.75}.qr-post-scan[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.25rem;padding:1rem;text-align:center}.qr-post-scan[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem}.qr-post-scan[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-weight:600;font-size:.9rem}.qr-post-scan[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.8rem}.qr-post-scan[_ngcontent-%COMP%] .scan-timestamp[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.3rem;font-size:.78rem;color:var(--color-text-muted)}.qr-on-court[_ngcontent-%COMP%]{color:#10b981}.qr-played[_ngcontent-%COMP%]{color:#3b82f6}.qr-no-show[_ngcontent-%COMP%]{color:#ef4444;opacity:.75}.loading-spinner.small[_ngcontent-%COMP%]{width:24px;height:24px;border-width:2px}
68.btn-transfers[_ngcontent-%COMP%]{margin-left:auto;position:relative;display:inline-flex;align-items:center;gap:.4rem;padding:6px 14px;font-size:.85rem;font-weight:600;background:color-mix(in srgb,var(--color-warning, #f59e0b) 15%,transparent);color:color-mix(in srgb,var(--color-warning, #f59e0b) 85%,#3a2e00);border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 45%,transparent);border-radius:8px;cursor:pointer;transition:background .2s,border-color .2s}.btn-transfers[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-warning, #f59e0b) 25%,transparent);border-color:color-mix(in srgb,var(--color-warning, #f59e0b) 70%,transparent)}.badge-transfers-count[_ngcontent-%COMP%]{position:absolute;top:-7px;right:-7px;background:var(--color-danger, #ef4444);color:#fff;border-radius:50%;width:18px;height:18px;font-size:.65rem;display:flex;align-items:center;justify-content:center;font-weight:700;line-height:1}.btn-transfer-slot[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;gap:.4rem;width:100%;padding:6px 12px;border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 55%,transparent);background:transparent;color:color-mix(in srgb,var(--color-warning, #f59e0b) 75%,var(--color-text));border-radius:6px;cursor:pointer;font-size:.85rem;font-weight:500;transition:background .2s,border-color .2s}.btn-transfer-slot[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-warning, #f59e0b) 12%,transparent);border-color:var(--color-warning, #f59e0b)}.transfer-pending-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:6px 10px;background:color-mix(in srgb,var(--color-warning, #f59e0b) 12%,transparent);border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 40%,transparent);border-radius:6px;font-size:.82rem;color:color-mix(in srgb,var(--color-warning, #f59e0b) 75%,var(--color-text))}.btn-cancel-transfer[_ngcontent-%COMP%]{border:none;background:none;color:var(--color-danger, #ef4444);cursor:pointer;font-size:.78rem;padding:0 4px;transition:opacity .15s}.btn-cancel-transfer[_ngcontent-%COMP%]:hover{opacity:.75}.transfer-history-note[_ngcontent-%COMP%]{margin-top:6px;padding:6px 10px;background:color-mix(in srgb,#6366f1 8%,var(--color-surface));border:1px solid color-mix(in srgb,#6366f1 22%,transparent);border-radius:6px;font-size:.82rem;color:var(--color-text-secondary)}.transfer-history-note[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{color:var(--color-text-muted)}.checkin-timestamp-row[_ngcontent-%COMP%]{margin-top:6px;padding:5px 10px;background:color-mix(in srgb,var(--color-success, #22c55e) 8%,var(--color-surface));border:1px solid color-mix(in srgb,var(--color-success, #22c55e) 22%,transparent);border-radius:6px;font-size:.8rem;color:var(--color-text-secondary);display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.checkin-timestamp-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-success, #22c55e)}.avatar-checkin-time[_ngcontent-%COMP%]{font-size:.62rem;color:var(--color-text-muted);display:flex;align-items:center;gap:3px;justify-content:center;line-height:1}.transfer-modal[_ngcontent-%COMP%]{max-width:480px}.transfer-player-info[_ngcontent-%COMP%]{padding:10px 14px;background:var(--color-surface-hover);border:1px solid var(--color-border-light);border-radius:8px;margin-bottom:1.25rem;font-size:.9rem;color:var(--color-text)}.transfer-form-group[_ngcontent-%COMP%]{margin-bottom:1.25rem}.transfer-form-label[_ngcontent-%COMP%]{display:block;font-weight:600;margin-bottom:6px;font-size:.9rem;color:var(--color-text)}.transfer-input-wrapper[_ngcontent-%COMP%]{position:relative}.transfer-search-input[_ngcontent-%COMP%]{width:100%;padding:8px 36px 8px 12px;border:1px solid var(--color-border);border-radius:8px;font-size:.9rem;background:var(--color-surface);color:var(--color-text);box-sizing:border-box;transition:border-color .2s,box-shadow .2s}.transfer-search-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.transfer-search-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.transfer-search-spinner[_ngcontent-%COMP%]{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:var(--color-text-muted);font-size:.8rem;pointer-events:none}.transfer-search-dropdown[_ngcontent-%COMP%]{position:absolute;top:calc(100% + 4px);left:0;right:0;background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-md);z-index:1060;max-height:180px;overflow-y:auto}.transfer-search-option[_ngcontent-%COMP%]{display:block;width:100%;text-align:left;padding:8px 12px;border:none;border-bottom:1px solid var(--color-border-light);background:none;cursor:pointer;transition:background .15s}.transfer-search-option[_ngcontent-%COMP%]:last-child{border-bottom:none}.transfer-search-option[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}
68.transfer-option-name[_ngcontent-%COMP%]{font-weight:600;font-size:.88rem;color:var(--color-text)}.transfer-option-username[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.78rem}.transfer-selected-chip-wrapper[_ngcontent-%COMP%]{margin-top:8px}.transfer-selected-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;background:color-mix(in srgb,var(--color-success, #10b981) 15%,transparent);color:color-mix(in srgb,var(--color-success, #10b981) 85%,var(--color-text));border:1px solid color-mix(in srgb,var(--color-success, #10b981) 35%,transparent);border-radius:20px;font-size:.82rem;font-weight:500}.transfer-chip-remove[_ngcontent-%COMP%]{border:none;background:none;color:inherit;cursor:pointer;padding:0;margin-left:2px;font-size:1rem;line-height:1;opacity:.65;transition:opacity .15s}.transfer-chip-remove[_ngcontent-%COMP%]:hover{opacity:1}.transfer-note-area[_ngcontent-%COMP%]{width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;font-size:.9rem;resize:vertical;background:var(--color-surface);color:var(--color-text);box-sizing:border-box;transition:border-color .2s,box-shadow .2s;font-family:inherit}.transfer-note-area[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--color-accent) 15%,transparent)}.transfer-note-area[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.transfer-info-notice[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:10px 12px;background:color-mix(in srgb,#6366f1 8%,var(--color-surface));border:1px solid color-mix(in srgb,#6366f1 22%,transparent);border-radius:8px;font-size:.82rem;color:var(--color-text-secondary)}.transfer-info-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#6366f1;flex-shrink:0;margin-top:1px}.btn-transfer-submit[_ngcontent-%COMP%]{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:.5rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--color-warning, #f59e0b) 90%,transparent);color:color-mix(in srgb,var(--color-warning, #f59e0b) 20%,#1a0f00);border:none;border-radius:8px;font-size:.9375rem;font-weight:700;cursor:pointer;transition:background .2s,transform .15s}.btn-transfer-submit[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-warning, #f59e0b);transform:translateY(-1px)}.btn-transfer-submit[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.transfers-inbox-modal[_ngcontent-%COMP%]{max-width:560px}.transfers-empty-state[_ngcontent-%COMP%]{text-align:center;padding:2rem;color:var(--color-text-muted)}.transfers-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;display:block;margin-bottom:.5rem}.transfers-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.9rem}.transfer-card[_ngcontent-%COMP%]{border:1px solid var(--color-border-light);border-radius:10px;padding:14px;margin-bottom:12px;background:var(--color-surface)}.transfer-card[_ngcontent-%COMP%]:last-child{margin-bottom:0}.transfer-card-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:flex-start;gap:8px;margin-bottom:8px}.transfer-card-info[_ngcontent-%COMP%]{flex:1;min-width:0}.transfer-card-from[_ngcontent-%COMP%]{font-weight:700;font-size:.95rem;color:var(--color-text)}.transfer-card-username[_ngcontent-%COMP%]{color:var(--color-text-muted);font-weight:400;font-size:.82rem}.transfer-card-meta[_ngcontent-%COMP%]{font-size:.82rem;color:var(--color-text-muted);margin-top:3px}.transfer-badge-pending[_ngcontent-%COMP%]{display:inline-flex;align-items:center;flex-shrink:0;padding:3px 10px;background:color-mix(in srgb,var(--color-warning, #f59e0b) 18%,transparent);color:color-mix(in srgb,var(--color-warning, #f59e0b) 80%,#3a2e00);border:1px solid color-mix(in srgb,var(--color-warning, #f59e0b) 40%,transparent);border-radius:12px;font-size:.75rem;font-weight:600;white-space:nowrap}.transfer-note-block[_ngcontent-%COMP%]{padding:8px 10px;background:color-mix(in srgb,var(--color-warning, #f59e0b) 10%,var(--color-surface));border-left:3px solid color-mix(in srgb,var(--color-warning, #f59e0b) 65%,transparent);border-radius:4px;font-size:.82rem;margin-bottom:10px;color:var(--color-text-secondary)}.transfer-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.btn-transfer-accept[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;background:color-mix(in srgb,var(--color-success, #10b981) 90%,transparent);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:.85rem;font-weight:500;transition:background .2s}.btn-transfer-accept[_ngcontent-%COMP%]:hover{background:var(--color-success, #10b981)}.btn-transfer-reject[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:6px 14px;background:transparent;color:var(--color-danger, #ef4444);border:1px solid var(--color-danger, #ef4444);border-radius:6px;cursor:pointer;font-size:.85rem;font-weight:500;transition:background .2s}.btn-transfer-reject[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger, #ef4444) 10%,transparent)}.transfer-reject-form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.transfer-reject-textarea[_ngcontent-%COMP%]{width:100%;padding:8px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:.85rem;background:var(--color-surface);color:var(--color-text);box-sizing:border-box;resize:vertical;font-family:inherit;transition:border-color .2s}.transfer-reject-textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent)}.transfer-reject-textarea[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.transfer-reject-actions[_ngcontent-%COMP%]{display:flex;gap:8px}.received-slots-section[_ngcontent-%COMP%]{margin-top:32px;padding-top:24px;border-top:2px dashed var(--color-border)}.received-slots-header[_ngcontent-%COMP%]{margin-bottom:16px}.received-slots-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.1rem;font-weight:700;color:var(--color-text);margin:0 0 4px;display:flex;align-items:center;gap:8px}.received-slots-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#10b981}.received-slot-card[_ngcontent-%COMP%]{border-left:3px solid #10b981}.transfer-status-pending[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e}.transfer-status-accepted[_ngcontent-%COMP%]{background:#d1fae5;color:#065f46}.transfer-status-rejected[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b}.transfer-status-cancelled[_ngcontent-%COMP%]{background:#f3f4f6;color:#374151}.transfer-status-expired[_ngcontent-%COMP%]{background:#f3f4f6;color:#6b7280}.session-action-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.session-action-row[_ngcontent-%COMP%] .btn-book[_ngcontent-%COMP%], .session-action-row[_ngcontent-%COMP%] .full-message[_ngcontent-%COMP%], .session-action-row[_ngcontent-%COMP%] .completed-message[_ngcontent-%COMP%]{flex:1}.btn-session-chat-icon[_ngcontent-%COMP%]{width:44px;height:44px;border-radius:10px;border:1.5px solid var(--color-accent, #2563eb);background:transparent;color:var(--color-accent, #2563eb);font-size:1.1rem;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background .15s,color .15s}.btn-session-chat-icon[_ngcontent-%COMP%]:hover, .btn-session-chat-icon.active[_ngcontent-%COMP%]{background:var(--color-accent, #2563eb);color:#fff}.btn-pay-info-compact[_ngcontent-%COMP%]{background:var(--color-background);color:var(--color-accent);border-color:var(--color-accent)}.btn-pay-info-compact[_ngcontent-%COMP%]:hover{background:var(--color-accent);color:#fff;transform:translateY(-1px);box-shadow:0 2px 4px #2563eb33}.pay-instructions-modal[_ngcontent-%COMP%]{max-width:420px}
68.pay-instructions-amount[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;background:var(--color-accent-bg-subtle);border:1px solid var(--color-accent);border-radius:10px;padding:.875rem 1rem;margin-bottom:1.25rem}.pay-label[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary);font-weight:500}.pay-amount[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:700;color:var(--color-accent)}.pay-timer-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-size:.875rem;color:var(--color-text-secondary);background:var(--color-surface);border:1px solid var(--color-border);border-radius:8px;padding:.625rem .875rem;margin-bottom:1.25rem}.pay-timer-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{flex-shrink:0}.pay-timer-label[_ngcontent-%COMP%]{flex:1}.pay-timer-value[_ngcontent-%COMP%]{font-size:1rem;font-variant-numeric:tabular-nums;color:var(--color-text)}.pay-timer-urgent[_ngcontent-%COMP%]{border-color:var(--color-danger);background:var(--color-danger-bg-subtle);color:var(--color-danger)}.pay-timer-urgent[_ngcontent-%COMP%] .pay-timer-value[_ngcontent-%COMP%]{color:var(--color-danger)}.pay-instructions-steps[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.625rem;margin-bottom:1.25rem}.pay-step[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;font-size:.875rem;color:var(--color-text);line-height:1.5}.pay-step-num[_ngcontent-%COMP%]{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--color-accent);color:#fff;font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px}.pay-instructions-options[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;padding:.875rem 1rem;margin-bottom:1rem}.pay-options-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text);margin:0 0 .625rem;display:flex;align-items:center;gap:.375rem}.no-payment-info[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.375rem;margin:0}.pay-instructions-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;font-size:.8rem;color:var(--color-text-secondary);background:var(--color-danger-bg-subtle);border-radius:8px;padding:.625rem .75rem}.pay-instructions-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger);flex-shrink:0;margin-top:1px}.btn-chat-compact[_ngcontent-%COMP%]{border:1.5px solid var(--color-accent, #2563eb);background:transparent;color:var(--color-accent, #2563eb);transition:background .15s,color .15s}.btn-chat-compact[_ngcontent-%COMP%]:hover, .btn-chat-compact.active[_ngcontent-%COMP%]{background:var(--color-accent, #2563eb);color:#fff}@media (max-width: 600px){.booking-discount-section[_ngcontent-%COMP%]{margin-bottom:1.25rem}.discount-body[_ngcontent-%COMP%]{padding:.875rem}.discount-select[_ngcontent-%COMP%]{font-size:1rem;padding:.65rem .75rem}.discount-status[_ngcontent-%COMP%]{font-size:.82rem;padding:.65rem .875rem}.discount-file-input[_ngcontent-%COMP%]{font-size:.82rem}}.booking-confirm-dialog[_ngcontent-%COMP%]{max-width:480px;width:95%}.booking-confirm-header[_ngcontent-%COMP%]{flex-direction:column;align-items:center;gap:.5rem;padding:1.5rem 1.5rem .75rem;border-bottom:none}.booking-confirm-icon[_ngcontent-%COMP%]{width:52px;height:52px;border-radius:50%;background:var(--color-accent-bg-subtle);display:flex;align-items:center;justify-content:center;margin-bottom:.25rem}.booking-confirm-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.6rem;color:var(--color-accent)}.booking-confirm-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:700;color:var(--color-text);margin:0;text-align:center}.booking-confirm-body[_ngcontent-%COMP%]{padding:.75rem 1.5rem .5rem;display:flex;flex-direction:column;gap:1rem}.booking-confirm-schedule[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:10px;padding:1rem 1.1rem;display:flex;flex-direction:column;gap:.65rem}.confirm-schedule-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.confirm-schedule-row[_ngcontent-%COMP%] > i[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-accent);flex-shrink:0;width:18px;text-align:center}.confirm-schedule-row[_ngcontent-%COMP%] > div[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.05rem}.confirm-label[_ngcontent-%COMP%]{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;
68color:var(--color-text-muted)}.confirm-value[_ngcontent-%COMP%]{font-size:.95rem;font-weight:600;color:var(--color-text)}.booking-confirm-warning[_ngcontent-%COMP%]{display:flex;gap:.75rem;align-items:flex-start;background:var(--color-danger-bg-subtle, rgba(220, 53, 69, .08));border:1px solid rgba(220,53,69,.2);border-radius:10px;padding:.9rem 1rem}.warning-icon-wrap[_ngcontent-%COMP%]{flex-shrink:0;margin-top:.1rem}.warning-icon-wrap[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.2rem;color:var(--color-danger, #dc3545)}.warning-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.3rem}.warning-title[_ngcontent-%COMP%]{font-size:.88rem;font-weight:700;color:var(--color-danger, #dc3545);margin:0}.warning-body[_ngcontent-%COMP%]{font-size:.83rem;color:var(--color-text-secondary);margin:0;line-height:1.5}.booking-confirm-acknowledge[_ngcontent-%COMP%]{font-size:.82rem;color:var(--color-text-muted);text-align:center;margin:0;line-height:1.5}.booking-confirm-footer[_ngcontent-%COMP%]{padding:.75rem 1.5rem 1.25rem;border-top:none;gap:.75rem}.booking-confirm-footer[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{flex:1}.booking-confirm-footer[_ngcontent-%COMP%] .btn-primary[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:.3rem}.cancellation-choice-section[_ngcontent-%COMP%]{margin:1rem 0}.choice-heading[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--color-text);margin-bottom:.75rem;display:flex;align-items:center;gap:.4rem}.choice-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.6rem}.choice-card[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem 1rem;border:2px solid var(--color-border);border-radius:8px;cursor:pointer;transition:border-color .15s,background-color .15s;background:var(--color-background-card)}.choice-card[_ngcontent-%COMP%]:hover, .choice-card.selected[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-bg-subtle)}.choice-radio[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:2px;accent-color:var(--color-accent)}.choice-body[_ngcontent-%COMP%]{flex:1}.choice-title[_ngcontent-%COMP%]{font-size:.88rem;font-weight:600;color:var(--color-text);margin-bottom:.2rem;display:flex;align-items:center;gap:.35rem}.choice-desc[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);line-height:1.4}.refund-details-form[_ngcontent-%COMP%]{margin-top:.9rem;padding:.9rem 1rem;border:1px solid var(--color-border);border-radius:8px;background:var(--color-background-card);text-align:left;box-sizing:border-box}.refund-details-heading[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text);margin:0 0 .75rem;display:flex;align-items:center;gap:.4rem}.refund-details-form[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%]{margin-bottom:.7rem}.refund-details-form[_ngcontent-%COMP%] .form-label[_ngcontent-%COMP%]{display:block;font-size:.8rem;font-weight:600;color:var(--color-text);margin-bottom:.3rem}.refund-details-form[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{display:block;width:100%;box-sizing:border-box;padding:.55rem .7rem;font-size:.88rem;color:var(--color-text);background-color:var(--color-surface-hover);border:1px solid var(--color-border);border-radius:6px;outline:none;transition:border-color .2s}.refund-details-form[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.refund-details-form[_ngcontent-%COMP%] .required[_ngcontent-%COMP%]{color:var(--color-danger, #dc3545)}.refund-details-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.4rem;font-size:.76rem;color:var(--color-text-secondary);line-height:1.4;margin:.5rem 0 0;text-align:left}.refund-intro-note[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:.6rem .75rem;margin:0 0 .85rem;border-radius:8px;background:var(--color-info-bg-subtle, rgba(59, 130, 246, .08));border:1px solid var(--color-info-bg-medium, rgba(59, 130, 246, .25));color:var(--color-info, #2563eb);font-size:.8rem;line-height:1.45;text-align:left}[_ngcontent-%COMP%]:root[data-theme=dark] .refund-intro-note[_ngcontent-%COMP%]{color:#93c5fd}.cancellation-credit-restore-notice[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.6rem .75rem;margin:.75rem 0 0;border-radius:8px;background:#eab3081a;border:1px solid rgba(234,179,8,.3);color:#a16207;font-size:.82rem;line-height:1.45}.cancellation-credit-restore-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#ca8a04;font-size:1rem;flex-shrink:0}[_ngcontent-%COMP%]:root[data-theme=dark] .cancellation-credit-restore-notice[_ngcontent-%COMP%]{color:#fbbf24}[_ngcontent-%COMP%]:root[data-theme=dark] .cancellation-credit-restore-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#fbbf24}.cancellation-contact-admin-notice[_ngcontent-%COMP%]{display:flex;gap:.6rem;
68align-items:flex-start;padding:.75rem .9rem;margin:.75rem 0 0;border-radius:8px;background:#3b82f61a;border:1px solid rgba(59,130,246,.3);color:#1e40af;font-size:.85rem;line-height:1.45}.cancellation-contact-admin-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#3b82f6;font-size:1.05rem;flex-shrink:0;margin-top:1px}.cancellation-contact-admin-notice[_ngcontent-%COMP%] .contact-admin-heading[_ngcontent-%COMP%]{margin:0 0 4px;font-size:.9rem}.cancellation-contact-admin-notice[_ngcontent-%COMP%] .contact-admin-body[_ngcontent-%COMP%]{margin:0}[_ngcontent-%COMP%]:root[data-theme=dark] .cancellation-contact-admin-notice[_ngcontent-%COMP%]{color:#93c5fd}[_ngcontent-%COMP%]:root[data-theme=dark] .cancellation-contact-admin-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#93c5fd}.credit-earned-notice.contact-admin[_ngcontent-%COMP%]{background:#3b82f61a;border:1px solid rgba(59,130,246,.3);color:#1e40af}.credit-earned-notice.contact-admin[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#3b82f6}[_ngcontent-%COMP%]:root[data-theme=dark] .credit-earned-notice.contact-admin[_ngcontent-%COMP%]{color:#93c5fd}[_ngcontent-%COMP%]:root[data-theme=dark] .credit-earned-notice.contact-admin[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#93c5fd}.refund-self-service-banner[_ngcontent-%COMP%]{display:flex;gap:.75rem;
68align-items:flex-start;padding:.85rem 1rem;margin:0 0 1rem;border-radius:10px;background:#3b82f614;border:1px solid rgba(59,130,246,.3);color:#1e40af;font-size:.88rem;line-height:1.5}.refund-self-service-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#3b82f6;font-size:1.15rem;flex-shrink:0;margin-top:1px}.refund-self-service-banner[_ngcontent-%COMP%] .rssb-title[_ngcontent-%COMP%]{margin:0 0 4px;font-size:.95rem}.refund-self-service-banner[_ngcontent-%COMP%] .rssb-body[_ngcontent-%COMP%]{margin:0}[_ngcontent-%COMP%]:root[data-theme=dark] .refund-self-service-banner[_ngcontent-%COMP%]{color:#93c5fd}[_ngcontent-%COMP%]:root[data-theme=dark] .refund-self-service-banner[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#93c5fd}.refund-card[_ngcontent-%COMP%]{border-left:3px solid var(--color-border)}.refund-decline-reason[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;padding:.6rem .75rem;background:var(--color-danger-bg-subtle);border-radius:6px;font-size:.82rem;color:var(--color-text);margin-top:.5rem}.refund-decline-reason[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger);flex-shrink:0;margin-top:1px}.amount-highlight[_ngcontent-%COMP%]{font-weight:700;color:var(--color-accent)}.badge-pending[_ngcontent-%COMP%]{background:#f59e0b;color:#fff}.badge-pending-refunds[_ngcontent-%COMP%]{background:#3b82f6;color:#fff}']})};var b6=()=>({standalone:!0}),y6=(n,t,e)=>({pending:n,paid:t,declined:e});function C6(n,t){if(n&1&&(r(0,"div",186)(1,"div",187),w(2,"i",188),r(3,"span"),l(4),a()(),r(5,"div",189)(6,"div",190),w(7,"div"),a(),r(8,"div",191),l(9),a()()()),n&2){let e=h().$implicit,i=h();d(4),R(i.getPaymentDeadlineCountdown(e).timeText),d(3),Qt("progress-bar-fill "+i.getPaymentDeadlineCountdown(e).cssClass),le("width",i.getPaymentDeadlineCountdown(e).percentage,"%"),d(2),F("",i.getPaymentDeadlineCountdown(e).percentage,"%")}}function w6(n,t){if(n&1&&(r(0,"span",192),l(1),a()),n&2){let e=h().$implicit,i=h();d(),R(i.getReceiptCount(e))}}function P6(n,t){if(n&1){let e=L();r(0,"button",193),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.openModalById(o.id))}),w(1,"i",194),a()}}function M6(n,t){if(n&1){let e=L();r(0,"button",195),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.cancelBookingById(o.id))}),w(1,"i",123),a()}}function S6(n,t){if(n&1){let e=L();r(0,"button",196),S("click",function(){k(e);let o=h().$implicit,s=h();return O(o.id&&s.deleteBookingById(o.id))}),w(1,"i",197),a()}}function k6(n,t){if(n&1){let e=L();r(0,"tr",163),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.openViewDetailsModal(o.id))}),r(1,"td",164),l(2),a(),r(3,"td",165),l(4),a(),r(5,"td",166),l(6),a(),r(7,"td",167),l(8),a(),r(9,"td",168),l(10),a(),r(11,"td",169),l(12),a(),r(13,"td",170),l(14),a(),r(15,"td",171),l(16),a(),r(17,"td",172),l(18),a(),r(19,"td",173),w(20,"div",174),a(),r(21,"td",175),l(22),a(),r(23,"td",176),S("click",function(o){return k(e),O(o.stopPropagation())}),r(24,"div",177),A(25,C6,10,6,"div",178),r(26,"button",179),S("click",function(){let o=k(e).$implicit,s=h();return O(o.id&&s.openReceiptUploadModal(o.id))}),w(27,"i",180),A(28,w6,2,1,"span",181),a()()(),r(29,"td",182),S("click",function(o){return k(e),O(o.stopPropagation())}),A(30,P6,2,0,"button",183)(31,M6,2,0,"button",184)(32,S6,2,0,"button",185),a()()}if(n&2){let e=t.$implicit,i=h();d(2),R(e.id),d(2),R(i.formatDateTime(e.bookingDateTime||e.createdAt)),d(2),R(e.lastUpdatedAt||e.updatedAt?i.formatDateTime(e.lastUpdatedAt||e.updatedAt):"Not modified"),d(2),R(e.date),d(2),R(i.getTimeDisplay(e)),d(2),R(e.court),d(2),R(e.totalPersonPlaying||""),d(2),R(e.name),d(2),R(e.type),d(2),x("innerHTML",i.formatStatusBadge(e.status),Zt),d(2),R(e.notes||""),d(3),x("ngIf",i.shouldShowCountdown(e)),d(),te("has-receipts",i.getReceiptCount(e)>0),x("title",i.getReceiptCount(e)>0?"Manage Receipts ("+i.getReceiptCount(e)+")":i.canUploadReceipts(e)?"Upload Receipt":"View upload requirements"),d(),x("ngClass",i.getReceiptCount(e)>0?"bi-file-earmark-check-fill":"bi-cloud-upload"),d(),x("ngIf",i.getReceiptC
68ount(e)>0),d(2),x("ngIf",e.status!=="Cancelled"&&e.status!=="Declined"),d(),x("ngIf",e.status!=="Cancelled"&&e.status!=="Declined"),d(),x("ngIf",e.status==="Booking Request Submitted")}}function O6(n,t){n&1&&(r(0,"tr")(1,"td",198),l(2,"No bookings found."),a()())}function E6(n,t){if(n&1){let e=L();r(0,"button",202),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.changeBookingPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(2);te("active",e===i.currentPage),x("disabled",e===i.currentPage),d(),R(e)}}function T6(n,t){if(n&1){let e=L();r(0,"div",199)(1,"button",200),S("click",function(){k(e);let o=h();return O(o.changeBookingPage(o.currentPage-1))}),l(2,"\xAB Prev"),a(),A(3,E6,2,4,"button",201),r(4,"button",200),S("click",function(){k(e);let o=h();return O(o.changeBookingPage(o.currentPage+1))}),l(5,"Next \xBB"),a()()}if(n&2){let e=h();d(),x("disabled",e.currentPage===1),d(2),x("ngForOf",e.getPageNumbers()),d(),x("disabled",e.currentPage===e.totalPages)}}function I6(n,t){if(n&1&&(r(0,"option",203),l(1),a()),n&2){let e=t.$implicit;x("value",e.fullname),d(),Se("",e.fullname,"",e.hourlyRate?" \u2014 \u20B1"+e.hourlyRate+"/hr":"","")}}function A6(n,t){if(n&1&&(r(0,"small",204),l(1),a()),n&2){let e=h();d(),F("Rate: \u20B1",e.selectedCoachRate,"/hr")}}function D6(n,t){n&1&&(r(0,"div",47)(1,"label",205),l(2,"External Coach Name "),r(3,"span",206),l(4,"*"),a()(),w(5,"input",207),r(6,"label",208),l(7,"Coach Contact Number "),r(8,"span",206),l(9,"*"),a()(),w(10,"input",209),r(11,"label",210),l(12,"Coach Email "),r(13,"span",206),l(14,"*"),a()(),w(15,"input",211),a())}function R6(n,t){if(n&1&&(r(0,"div",213)(1,"label"),l(2,"Coach Name:"),a(),r(3,"div"),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.coachName)}}function B6(n,t){if(n&1&&(r(0,"div",213)(1,"label"),l(2,"Approver Name:"),a(),r(3,"div"),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.approverName)}}function N6(n,t){if(n&1&&(r(0,"div",212)(1,"div",213)(2,"label"),l(3,"Date:"),a(),r(4,"div"),l(5),a()(),r(6,"div",213)(7,"label"),l(8,"Time:"),a(),r(9,"div"),l(10),a()(),r(11,"div",213)(12,"label"),l(13,"Duration:"),a(),r(14,"div"),l(15),a()(),r(16,"div",213)(17,"label"),l(18,"Total Amount Payable:"),a(),r(19,"div"),l(20),a()(),r(21,"div",213)(22,"label"),l(23,"Court:"),a(),r(24,"div"),l(25),a()(),r(26,"div",213)(27,"label"),l(28,"Booking Type:"),a(),r(29,"div"),l(30),a()(),r(31,"div",213)(32,"label"),l(33,"Name:"),a(),r(34,"div"),l(35),a()(),A(36,R6,5,1,"div",214),r(37,"div",213)(38,"label"),l(39,"Total Person Playing:"),a(),r(40,"div"),l(41),a()(),r(42,"div",213)(43,"label"),l(44,"Contact:"),a(),r(45,"div"),l(46),a()(),r(47,"div",213)(48,"label"),l(49,"Email:"),a(),r(50,"div"),l(51),a()(),r(52,"div",213)(53,"label"),l(54,"Status:"),a(),w(55,"div",174),a(),r(56,"div",213)(57,"label"),l(58,"Booking Made:"),a(),r(59,"div"),l(60),a()(),r(61,"div",213)(62,"label"),l(63,"Last Updated:"),a(),r(64,"div"),l(65),a()(),r(66,"div",213)(67,"label"),l(68,"Remarks:"),a(),r(69,"div"),l(70),a()(),r(71,"div",213)(72,"label"),l(73,"Last Updated By:"),a(),r(74,"div"),l(75),a()(),A(76,B6,5,1,"div",214),a()),n&2){let e=h();d(5),R(e.selectedBooking.date),d(5),R(e.getTimeDisplay(e.selectedBooking)),d(5),R(e.selectedBooking.duration?e.selectedBooking.duration+" hour(s)":"1 hour"),d(5),F("\u20B1",e.calculateAmount(e.selectedBooking).toLocaleString(),""),d(5),R(e.selectedBooking.court),d(5),R(e.selectedBooking.type),d(5),R(e.selectedBooking.name),d(),x("ngIf",e.selectedBooking.type==="coaching"&&e.selectedBooking.coachName),d(5),R(e.selectedBooking.totalPersonPlaying||""),d(5),R(e.selectedBooking.contact),d(5),R(e.selectedBooking.email),d(4),x("innerHTML",e.formatStatusBadge(e.selectedBooking.status),Zt),d(5),R(e.formatDateTime(e.selectedBooking.bookingDateTime||e.selectedBooking.createdAt)),d(5),R(e.selectedBooking.lastUpdatedAt||e.selectedBooking.updatedAt?e.formatDateTime(e.selectedBooking.lastUpdatedAt||e.selectedBooking.updatedAt):"Not modified since creation"),d(5),R(e.selectedBooking.notes||"No remarks"),d(5),R(e.selectedBooking.lastUpdatedBy||"N/A"),d(),x("ngIf",e.selectedBooking==null?null:e.selectedBooking.approverName)}
68}function V6(n,t){if(n&1&&(r(0,"p",215),l(1," Booking ID: "),r(2,"strong"),l(3),a(),l(4),a()),n&2){let e=h();d(3),R(e.selectedBooking.id),d(),Se(" | ",e.selectedBooking.date," | ",e.selectedBooking.court," ")}}function L6(n,t){n&1&&(r(0,"span"),l(1," However, you can still view your previously uploaded receipts below."),a())}function F6(n,t){if(n&1&&(r(0,"div",220)(1,"div",221),w(2,"i",222),r(3,"div")(4,"h4")(5,"strong"),l(6,"Receipt Upload Not Available"),a()(),r(7,"p"),l(8," You can only upload payment receipts for bookings with status "),r(9,"strong"),l(10,'"Reserved - Pending Payment"'),a(),l(11,". Your current booking status is "),r(12,"strong"),l(13),a(),l(14,". "),A(15,L6,2,0,"span",34),a()()()()),n&2){let e=h(2);d(13),F('"',e.selectedBooking.status,'"'),d(2),x("ngIf",e.hasReceipts())}}function z6(n,t){if(n&1){let e=L();r(0,"div",228)(1,"div",229),w(2,"i",230),a(),r(3,"div",231)(4,"span",232),l(5),a(),r(6,"span",233),w(7,"i",234),l(8),a()(),r(9,"div",235)(10,"button",236),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openReceiptUrl(o))}),w(11,"i",237),a(),r(12,"button",238),S("click",function(o){let s=k(e).index,m=h(3);return O(m.deleteReceipt(m.getReceiptMetadata(m.selectedBooking)[s],o))}),w(13,"i",239),a()()()}if(n&2){let e=t.index,i=h(3);d(5),R(i.getReceiptMetadata(i.selectedBooking)[e].fileName||"Receipt "+(e+1)),d(3),F(" ",i.getFormattedUploadDate(i.getReceiptMetadata(i.selectedBooking)[e].uploadedAt||"")," ")}}function U6(n,t){if(n&1&&(r(0,"div",223)(1,"div",224),w(2,"i",225),r(3,"h4"),l(4),a()(),r(5,"div",226),A(6,z6,14,2,"div",227),a()()),n&2){let e=h(2);d(4),F("Uploaded Receipts (",e.getReceiptUrls().length,")"),d(2),x("ngForOf",e.getReceiptUrls())}}function j6(n,t){if(n&1){let e=L();r(0,"div",257)(1,"div",258),w(2,"i",131),a(),r(3,"div",259)(4,"span",260),l(5),a(),r(6,"span",261),l(7),a()(),r(8,"button",262),S("click",function(){let o=k(e).index,s=h(4);return O(s.removeSelectedFile(o))}),w(9,"i",136),a()()}if(n&2){let e=t.$implicit,i=h(4);d(5),R(e.name),d(2),R(i.formatFileSize(e.size)),d(),x("disabled",i.isUploadingReceipts)}}function H6(n,t){if(n&1&&(r(0,"div",251)(1,"div",252)(2,"span"),w(3,"i",253),l(4),a(),r(5,"span",254),l(6),a()(),r(7,"div",255),A(8,j6,10,3,"div",256),a()()),n&2){let e=h(3);d(4),F(" Selected Files (",e.selectedFiles.length,")"),d(2),F("Total: ",e.formatFileSize(e.totalReceiptBytes())," of 50 MB"),d(2),x("ngForOf",e.selectedFiles)}}function W6(n,t){if(n&1){let e=L();r(0,"div",240)(1,"div",224),w(2,"i",241),r(3,"h4"),l(4,"Add New Receipts"),a()(),r(5,"div",242)(6,"div",243),w(7,"i",244),a(),r(8,"p",245),l(9,"Choose images to upload"),a(),r(10,"p",246),l(11,"PNG, JPG, JPEG \xB7 up to 50MB total"),a(),r(12,"label",247),w(13,"i",248),l(14," Select Files "),a(),r(15,"input",249),S("change",function(o){k(e);let s=h(2);return O(s.onFileSelected(o))}),a()(),A(16,H6,9,3,"div",250),a()}if(n&2){let e=h(2);d(15),x("disabled",e.isUploadingReceipts),d(),x("ngIf",e.selectedFiles.length>0)}}function G6(n,t){if(n&1&&(r(0,"div",216),A(1,F6,16,2,"div",217)(2,U6,7,2,"div",218)(3,W6,17,2,"div",219),a()),n&2){let e=h();d(),x("ngIf",!e.canUploadReceipts(e.selectedBooking)),d(),x("ngIf",e.hasReceipts()),d(),x("ngIf",e.canUploadReceipts(e.selectedBooking))}}function q6(n,t){n&1&&(r(0,"div",263)(1,"div",264),w(2,"div",265),r(3,"p",266),l(4,"Uploading receipts..."),a(),r(5,"p",267),l(6,"Please wait, this may take a moment"),a()()())}function $6(n,t){if(n&1&&(r(0,"p",268),l(1),a()),n&2){let e=h();d(),F("Zoom: ",(e.imageZoom*100).toFixed(0),"%")}}function Y6(n,t){if(n&1){let e=L();r(0,"div",269)(1,"button",270),S("click",function(){k(e);let o=h();return O(o.zoomOut())}),w(2,"i",271),a(),r(3,"button",272),S("click",function(){k(e);let o=h();return O(o.resetZoom())}),w(4,"i",273),a(),r(5,"button",274),S("click",function(){k(e);let o=h();return O(o.zoomIn())}),w(6,"i",241),a()()}if(n&2){let e=h();d(),x("disabled",e.imageZoom<=.5),d(4),x("disabled",e.imageZoom>=3)}}function X6(n,t){n&1&&(r(0,"div",275),w(1,"div",265),r(2,"p",42),l(3,"Loading receipt..."),a()())}function Z6(n,t){if(n&1&&(r(0,"div",276),w(1,"i",99),r(2,"h4"),l(3,"Unable to Load Receipt"),a(),r(4,"p"),l(5,"The receipt image could not be loaded. This may be due to:"),a(),r(6,"ul")(7,"li"),l(8,"Google Drive sharing permissions"),a(),r(9,"li"),l(10,"
68Network connectivity issues"),a(),r(11,"li"),l(12,"Invalid image format"),a()(),r(13,"p",277),l(14),a()()),n&2){let e=h();d(14),F("URL: ",e.currentReceiptUrl,"")}}function Q6(n,t){if(n&1){let e=L();r(0,"div",278)(1,"img",279),S("load",function(){k(e);let o=h();return O(o.onReceiptImageLoad())})("error",function(){k(e);let o=h();return O(o.onReceiptImageError())})("dblclick",function(){k(e);let o=h();return O(o.imageZoom===1?o.zoomIn():o.resetZoom())}),a()()}if(n&2){let e=h();le("display",e.isLoadingReceipt?"none":"flex"),d(),le("transform","scale("+e.imageZoom+")"),Kt("alt","Receipt ",e.currentReceiptIndex+1,""),x("src",e.currentReceiptUrl,Ie)}}function K6(n,t){if(n&1){let e=L();r(0,"button",280),S("click",function(){k(e);let o=h();return O(o.downloadReceipt())}),w(1,"i",281),l(2," Download "),a()}}function J6(n,t){if(n&1&&(r(0,"div",287)(1,"span",288),l(2,"Coach"),a(),r(3,"span",290),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.coachName)}}function e7(n,t){if(n&1&&(r(0,"div",287)(1,"span",288),l(2,"Remarks"),a(),r(3,"span",290),l(4),a()()),n&2){let e=h(2);d(4),R(e.selectedBooking.notes)}}function t7(n,t){if(n&1){let e=L();r(0,"div",282),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"div",283)(2,"div",284),w(3,"i",156),r(4,"h3"),l(5,"Booking Details"),a()(),r(6,"button",285),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(7,"i",136),a()(),r(8,"div",286)(9,"div",287)(10,"span",288),l(11,"Booking ID"),a(),r(12,"span",289),l(13),a()(),r(14,"div",287)(15,"span",288),l(16,"Date"),a(),r(17,"span",290),l(18),a()(),r(19,"div",287)(20,"span",288),l(21,"Time"),a(),r(22,"span",290),l(23),a()(),r(24,"div",287)(25,"span",288),l(26,"Duration"),a(),r(27,"span",290),l(28),a()(),r(29,"div",287)(30,"span",288),l(31,"Court"),a(),r(32,"span",290),l(33),a()(),r(34,"div",287)(35,"span",288),l(36,"Type"),a(),r(37,"span",290),l(38),a()(),A(39,J6,5,1,"div",291),r(40,"div",287)(41,"span",288),l(42,"Total Players"),a(),r(43,"span",290),l(44),a()(),r(45,"div",287)(46,"span",288),l(47,"Name"),a(),r(48,"span",290),l(49),a()(),r(50,"div",287)(51,"span",288),l(52,"Contact"),a(),r(53,"span",290),l(54),a()(),r(55,"div",287)(56,"span",288),l(57,"Email"),a(),r(58,"span",290),l(59),a()(),r(60,"div",287)(61,"span",288),l(62,"Status"),a(),r(63,"span",292),l(64),a()(),r(65,"div",287)(66,"span",288),l(67,"Amount Payable"),a(),r(68,"span",289),l(69),a()(),A(70,e7,5,1,"div",291),a(),r(71,"div",293)(72,"button",294),S("click",function(){k(e);let o=h();return O(o.closeBookingDetailsModal())}),w(73,"i",160),l(74," Got It "),a()()()}if(n&2){let e=h();d(13),R(e.selectedBooking.id),d(5),R(e.selectedBooking.date),d(5),R(e.getTimeDisplay(e.selectedBooking)),d(5),F("",e.selectedBooking.duration||1," hour(s)"),d(5),R(e.selectedBooking.court),d(5),R(e.selectedBooking.type),d(),x("ngIf",e.selectedBooking.type==="coaching"&&e.selectedBooking.coachName),d(5),R(e.selectedBooking.totalPersonPlaying||"N/A"),d(5),R(e.selectedBooking.name),d(5),R(e.selectedBooking.contact),d(5),R(e.selectedBooking.email),d(4),x("ngClass",jo(15,y6,e.selectedBooking.status==="Reserved - Pending Payment"||e.selectedBooking.status==="Booking Request Submitted",e.selectedBooking.status==="Reserved - Paid",e.selectedBooking.status==="Declined"||e.selectedBooking.status==="Cancelled")),d(),F(" ",e.selectedBooking.status," "),d(5),F("\u20B1",e.calculateAmount(e.selectedBooking).toLocaleString(),""),d(),x("ngIf",e.selectedBooking.notes)}}function n7(n,t){if(n&1&&(r(0,"div",295)(1,"p"),l(2," You can only upload payment receipts for bookings with status "),r(3,"strong",296),l(4,'"Reserved - Pending Payment"'),a(),l(5,". "),a(),r(6,"div",297)(7,"p")(8,"strong"),l(9,"Current Status:"),a(),r(10,"span",298),l(11),a()()()()),n&2){let e=h();d(11),R(e.selectedBooking.status)}}function i7(n,t){if(n&1&&(r(0,"p"),l(1,"Are you sure you want to delete "),r(2,"strong"),l(3),a(),l(4,"?"),a()),n&2){let e=h();d(3),F('"',e.pendingDeleteReceipt.fileName,'"')}}var qc=class n{constructor(t,e,i,o){this.fb=t;this.apiService=e;this.authService=i;this.bookingConfigService=o;this.bookingForm=this.fb.group({date:["",Oe.required],startTime:["",Oe.required],duration:[1,Oe.required],court:["",Oe.required],type:["rental",Oe.required],coachName:[""],totalPersonPlaying:["",[Oe.required,Oe.min(1),Oe.max(20)]],name:["",Oe.required],contact:["",Oe.required],email:["",[Oe.required,Oe.email]],status:["Reserved - Pending Payment",Oe.required],notes:[""],externalCoachName:[""],externalCoachContact:[""],externalCoachEmail:[""]}),this.apiService.getActiveCoaches().subscribe({next:s=>{this.coaches=s.filter(m=>m.fullname)},error:()=>{this.coaches=[]}})}showBookingModal=!1;showCancelModal=!1;showDeleteModal=!1;showSaveModal=!1;showDeclineModal=!1;showViewDetailsModal=!1;showCoachField=!1;hasExternalCoach=!1;showCriticalWarningModal=!1;showCancelRestrictionModal=!1;showReceiptUploadModal=!1;showReceiptViewerModal=!1;showBookingDetailsModal=!1;showDeleteReceiptModal=!1;showReceiptStatusRestrictionModal=!1;pendingDeleteReceipt=null;isLoading=!1;isSubmittingBooking=!1;isProcessingCancel=!1;isProcessingDelete=!1;loadingActionId=null;isUploadingReceipts=!1;selectedFiles=[];uploadProgress=0;appVersion=_a;currentReceiptUrl="";currentReceiptIndex=0;allReceiptUrls=[];isLoadingReceipt=!1;receiptLoadError=!1;imageZoom=1;bookingForm;bookings=[];filteredBookings=[];paginatedBookings=[];
68selectedBooking=null;editingBooking=null;criticalFieldsChanged=!1;pendingCancelId=null;pendingDeleteId=null;filters={date:new Date().toLocaleDateString("en-CA"),time:"",type:"",status:""};searchTerm="";declineReason="";currentPage=1;pageSize=10;totalPages=0;timeRangeDisplay="Select a start time and duration";totalAmount=0;coaches=[];currentSort={key:"bookingDateTime",ascending:!1};countdownInterval;ngOnInit(){this.setDefaultFilters(),this.setupFormWatchers(),this.loadBookingsFromBackend(),this.countdownInterval=setInterval(()=>{this.paginatedBookings=[...this.paginatedBookings]},1e3)}ngOnDestroy(){this.countdownInterval&&clearInterval(this.countdownInterval)}setDefaultFilters(){let t=new Date().toLocaleDateString("en-CA");this.filters.date=t;let e=document.getElementById("booking-date");if(e){let i=new Date;i.setMonth(i.getMonth()+1),e.min=t,e.max=i.toLocaleDateString("en-CA")}}setupFormWatchers(){this.bookingForm.get("type")?.valueChanges.subscribe(()=>{this.toggleCoachField(),this.updateCourtOptions(),this.updateAdminAmountPayable()}),this.bookingForm.get("duration")?.valueChanges.subscribe(()=>{this.updateAdminTimeDisplay(),this.updateAdminAmountPayable(),this.checkCriticalFieldsChanged()}),this.bookingForm.get("startTime")?.valueChanges.subscribe(()=>{this.updateAdminTimeDisplay(),this.checkCriticalFieldsChanged()}),this.bookingForm.get("date")?.valueChanges.subscribe(()=>{this.checkCriticalFieldsChanged()}),this.bookingForm.get("court")?.valueChanges.subscribe(()=>{this.checkCriticalFieldsChanged()})}checkCriticalFieldsChanged(){if(!this.editingBooking){this.criticalFieldsChanged=!1;return}let t=this.bookingForm.value;this.criticalFieldsChanged=this.editingBooking.date!==t.date||this.editingBooking.startTime!==t.startTime||this.editingBooking.time!==t.startTime||this.editingBooking.duration!==t.duration||this.editingBooking.court!==t.court}loadBookingsFromBackend(){return ue(this,null,function*(){try{this.isLoading=!0;let t=(yield this.apiService.getBookings().toPromise())||[],e=JSON.parse(localStorage.getItem("pickle_user_details")||"{}"),i=(e.userId||e.id||"").toString().trim().toLowerCase(),o=(e.username||"").toString().trim().toLowerCase();this.bookings=t.filter(s=>{let m=(s.userId||"").toString().trim().toLowerCase(),f=(s.username||"").toString().trim().toLowerCase();return i&&m&&m===i||o&&f&&f===o}),this.applyFilters(),setTimeout(()=>{this.isLoading=!1},200)}catch(t){this.isLoading=!1;let e="Unable to load bookings";t?.error?.description?e=t.error.description:t?.message?e=t.message:typeof t?.error=="string"&&(e=t.error),this.showToast(e,"error")}})}applyFilters(){this.filteredBookings=this.bookings.filter(t=>{if(this.filters.date&&t.date!==this.filters.date)return!1;if(this.filters.time){if(t.duration&&t.duration>1){let e=this.parseTimeStr(t.startTime||t.time||""),i=new Date(e.getTime()+t.duration*60*60*1e3),o=this.parseTimeStr(this.filters.time);if(!(o>=e&&o<i))return!1}else if((t.startTime||t.time)!==this.filters.time)return!1}return!(this.filters.type&&t.type!==this.filters.type||this.filters.status&&t.status!==this.filters.status||this.searchTerm&&![t.id,t.name,t.court,t.type,t.status,t.contact,t.email,t.notes,t.timeDisplay||t.time].join(" ").toLowerCase().includes(this.searchTerm.toLowerCase()))}),this.applySorting(),this.updatePagination()}clearFilters(){this.filters={date:new Date().toLocaleDateString("en-CA"),time:"",type:"",status:""},this.searchTerm="",this.applyFilters()}sortTable(t){this.currentSort.key===t?this.currentSort.ascending=!this.currentSort.ascending:this.currentSort={key:t,ascending:!0},this.applySorting(),this.updatePagination()}applySorting(){this.currentSort.key&&this.filteredBookings.sort((t,e)=>{let i=t[this.currentSort.key]||"",o=e[this.currentSort.key]||"";return this.currentSort.key==="bookingDateTime"||this.currentSort.key==="lastUpdatedAt"?this.currentSort.ascending?i.localeCompare(o):o.localeCompare(i):(i=i.toString().toLowerCase(),o=o.toString().toLowerCase(),i<o?this.currentSort.ascending?-1:1:i>o?this.currentSort.ascending?1:-1:0)})}updatePagination(){this.totalPages=Math.ceil(this.filteredBookings.length/this.pageSize)||1,this.currentPage>this.totalPages&&(this.currentPage=this.totalPages),this.currentPage<1&&(this.currentPage=1);let t=(this.currentPage-1)*this.pageSize,e=t+this.pageSize;this.paginatedBookings=this.filteredBookings.slice(t,e)}changeBookingPage(t){t<1||t>this.totalPages||(this.currentPage=t,this.updatePagination())}getPageNumbers(){let t=[],e=Math.max(1,this.currentPage-2),i=Math.min(this.totalPages,e+4);i-e<4&&(e=Math.max(1,i-4));for(let o=e;o<=i;o++)t.push(o);return t}openModal(t){if(this.isLoading){this.showToast("Please wait for bookings to load before adding/editing.");return}if(t&&(t.status==="Cancelled"||t.status==="Declined")){this.showToast("Cancelled or declined bookings cannot be edited","warning");return}if(this.editingBooking=t||null,this.showBookingModal=!0,t){let e=t.externalCoachName||this.parseExternalCoachField(t.notes,"Name"),i=t.externalCoachContact||this.parseExternalCoachField(t.notes,"Contact"),o=t.externalCoachEmail||this.parseExternalCoachField(t.notes,"Email");this.hasExternalCoach=!!e,this.bookingForm.patchValue({date:t.date,startTime:t.startTime||t.time,duration:t.duration||1,court:t.court,type:t.type,coachName:t.coachName||"",totalPersonPlaying:t.totalPersonPlaying||"",name:t.name,contact:t.contact,email:t.email,status:t.status,notes:t.notes||"",externalCoachName:e,externalCoachContact:i,externalCoachEmail:o})}else{let e=new Date().toISOString().split("T")[0];this.bookingForm.patchValue({date:e,duration:1,type:"rental",status:"Reserved - Pending Payment"})}this.toggleCoachField(),this.updateCourtOptions(),this.updateAdminTimeDisplay(),this.updateAdminAmountPayable()}openModalById(t){let e=this.bookings.find(i=>i.id===t);e&&this.openModal(e)}closeModal(){this.isSubmittingBooking||(this.showBookingModal=!1,this.editingBooking=null,this.hasExternalCoach=!1,this.bookingForm.reset())}validateBookingDate(t){let e=new Date(t.target.value),i=new Date;i.setHours(0,0,0,0);let o=new Date;return o.setMonth(o.getMonth()+1),o.setHours(23,59,59,999),e<i?(this.showToast("\u26A0\uFE0F Please select a future date"),t.target.value="",!1):e>o?(this.showToast("\u26A0\uFE0F Bookings are only allowed within the next 30 days"),t.target.value="",!1):!0}toggleCoachField(){let t=this.bookingForm.get("type")?.value;this.showCoachField=t==="coaching",this.showCoachField?this.bookingForm.get("coachName")?.setValidators([Oe.required]):(this.bookingForm.get("coachName")?.clearValidators(),this.bookingForm.get("coachName")?.setValue("")),this.bookingForm.get("coachName")?.updateValueAndValidity()}get selectedCoachRate(){let t=this.bookingForm.get("coachName")?.value;return this.coaches.find(e=>e.fullname===t)?.hourlyRate||null}updateCourtOptions(){let t=this.bookingForm.get("type")?.value,e=document.getElementById("court");if(!e)return;let i=e.value;for(;e.options.length>1;)e.remove(1);t==="coaching"?["Court 10","Court 11"].forEach(s=>{let m=document.createElement("option");m.value=s,m.text=s+" (Coaching)",e.appendChild(m)}):t==="rental"&&["Court 1","Court 2","Court 3","Court 7","Court 8","Court 9"].forEach(s=>{let m=document.createElement("option");m.value=s,m.text=s,e.appendChild(m)}),Array.from(e.options).map(s=>s.value).includes(i)?e.value=i:this.bookingForm.patchValue({court:""})}updateAdminTimeDisplay(){let t=this.bookingForm.get("startTime")?.value,e=parseInt(this.bookingForm.get("duration")?.value||"1");if(!t){this.timeRangeDisplay="Select a start time and duration";return}let i=this.parseTimeStr(t),o=new Date(i.getTime()+e*60*60*1e3);this.timeRangeDisplay=`${this.formatTimeStr(i)} - ${this.formatTimeStr(o)}`}updateAdminAmountPayable(){let t=parseInt(this.bookingForm.get("duration")?.value||"1");this.totalAmount=this.bookingConfigService.BOOKING_RATE*t}onBookingSubmit(){return ue(this,null,function*(){if(this.bookingForm.invali
68d){this.showToast("Please fill in all required fields correctly","warning");return}let t=this.bookingForm.value;if(this.bookingConfigService.validateTotalPersonPlaying){let i=this.bookingConfigService.validateTotalPersonPlaying({court:t.court,date:t.date,startTime:t.startTime,totalPerson:t.totalPersonPlaying,bookingType:t.type});if(!i.valid){this.showToast(i.message||"Validation failed","error");return}}let e=this.findConflicts(t.date,t.startTime,t.court,t.duration,this.editingBooking?.id);if(e.length>0){let i=e.map(o=>`${o.name} (${this.getTimeDisplay(o)})`).join(", ");this.showToast(`Booking conflict: The requested time slot at ${t.court} overlaps with existing booking(s) by ${i}`);return}if(this.editingBooking&&this.criticalFieldsChanged&&this.editingBooking.status!=="Reserved - Pending Payment"){this.showCriticalWarningModal=!0;return}this.showSaveModal=!0})}confirmSaveClick(){this.confirmSave()}confirmCriticalWarning(){this.showCriticalWarningModal=!1,this.showSaveModal=!0}cancelCriticalWarning(){this.showCriticalWarningModal=!1}confirmSave(){return ue(this,null,function*(){let t=!1;try{this.isSubmittingBooking=!0;let e=this.bookingForm.value,i=e.startTime,o=parseInt(e.duration),s=this.parseTimeStr(i),m=new Date(s.getTime()+o*60*60*1e3),f=this.formatTimeStr(m),v=`${i} - ${f}`,y=e.type==="coaching"?this.coaches.find(I=>I.fullname===e.coachName):null,M=Ye(ze(Ye(ze({},e),{coachName:e.type==="coaching"?e.coachName:""}),y&&{coachId:y.userId}),{externalCoachName:this.hasExternalCoach&&e.externalCoachName||"",externalCoachContact:this.hasExternalCoach&&e.externalCoachContact||"",externalCoachEmail:this.hasExternalCoach&&e.externalCoachEmail||"",endTime:f,timeDisplay:v,duration:o,id:this.editingBooking?.id,userId:this.editingBooking?.userId,username:this.editingBooking?.username,fullname:this.editingBooking?.fullname});if(this.editingBooking){let I=JSON.parse(localStorage.getItem("pickle_user_details")||"{}");M.lastUpdatedBy=I.username||"",(this.editingBooking.date!==e.date||this.editingBooking.startTime!==e.startTime||this.editingBooking.time!==e.startTime||this.editingBooking.duration!==e.duration||this.editingBooking.court!==e.court)&&this.editingBooking.status!=="Reserved - Pending Payment"&&(M.status="Reserved - Pending Payment",this.showToast('Status reset to "Reserved - Pending Payment" due to critical field changes',"info")),yield this.apiService.updateBooking(this.editingBooking.id,M).toPromise(),this.showToast("Booking updated successfully")}else yield this.apiService.createBooking(M).toPromise(),this.showToast("Booking created successfully");yield this.loadBookingsFromBackend(),this.closeModal()}catch(e){t=!0;let i="Failed to save booking";e?.error?.description?i=e.error.description:e?.message?i=e.message:typeof e?.error=="string"&&(i=e.error),this.showToast(i,"error")}finally{this.isSubmittingBooking=!1,this.closeSaveModal(),t||this.closeModal()}})}closeSaveModal(){this.isSubmittingBooking||(this.showSaveModal=!1)}canCancelBooking(t){if(t.status!=="Reserved - Paid")return{allowed:!0};let e=new Date(t.date),i=this.parseTimeStr(t.startTime||t.time||""),o=new Date(e.getFullYear(),e.getMonth(),e.getDate(),i.getHours(),i.getMinutes(),0,0),s=new Date;return(o.getTime()-s.getTime())/(1e3*60*60)>=48?{allowed:!0}:{allowed:!1,reason:"Paid bookings can only be cancelled at least 48 hours before the scheduled time."}}cancelBookingById(t){let e=this.bookings.find(o=>o.id===t);if(!e){this.showToast("Booking not found","error");return}if(!this.canCancelBooking(e).allowed){this.showCancelRestrictionModal=!0;return}this.pendingCancelId=t,this.showCancelModal=!0}closeCancelRestrictionModal(){this.showCancelRestrictionModal=!1}confirmCancel(){return ue(this,null,function*(){if(!this.pendingCancelId)return;this.isProcessingCancel=!0;let t=this.bookings.find(e=>e.id===this.pendingCancelId);if(!t){this.showToast("Booking not found","error"),this.isProcessingCancel=!1;return}try{let e=JSON.parse(localStorage.getItem("pickle_user_details")||"{}"),i=t.startTime||t.time||"",o=parseInt(t.duration?.toString()||"1"),s=this.parseTimeStr(i),m=new Date(s.getTime()+o*60*60*1e3),f=this.formatTimeStr(m),v=`${i} - ${f}`,y={date:t.date,startTime:t.startTime||t.time,duration:t.duration||1,court:t.court,type:t.type,coachName:t.coachName||"",coachId:t.coachId||"",totalPersonPlaying:typeof t.totalPersonPlaying=="string"?parseInt(t.totalPersonPlaying)||0:t.totalPersonPlaying||0,name:t.name,contact:t.contact,email:t.email,status:"Cancelled",notes:t.notes||"",externalCoachName:t.externalCoachName||"",externalCoachContact:t.externalCoachContact||"",externalCoachEmail:t.externalCoachEmail||"",endTime:f,timeDisplay:v,id:t.id,userId:t.userId,username:t.username,fullname:t.fullname,lastUpdatedBy:e.username||""};yield this.apiService.updateBooking(this.pendingCancelId,y).toPromise(),yield this.loadBookingsFromBackend(),this.showToast("Booking cancelled successfully")}catch(e){if(e?.status===200||e?.status===201||e?.status===204)yield this.loadBookingsFromBackend(),this.showToast("Booking cancelled successfully");else{let i="Failed to cancel booking";e?.error?.description?i=e.error.description:e?.message?i=e.message:typeof e?.error=="string"&&(i=e.error),this.showToast(i,"error")}}finally{this.isProcessingCancel=!1,this.showCancelModal=!1,this.pendingCancelId=null}})}closeCancelModal(){this.isProcessingCancel||(this.showCancelModal=!1,this.pendingCancelId=null)}deleteBookingById(t){this.pendingDeleteId=t,this.showDeleteModal=!0}confirmDelete(){return ue(this,null,function*(){if(!this.pendingDeleteId)return;this.isProcessingDelete=!0;let t=this.pendingDeleteId,e=null;try{let o=JSON.parse(localStorage.getItem("pickle_user_details")||"{}");yield this.apiService.deleteBooking(this.pendingDeleteId,o.username||"").toProm
68ise()}catch(o){e=o}if(this.isProcessingDelete=!1,this.showDeleteModal=!1,this.pendingDeleteId=null,yield this.loadBookingsFromBackend(),!this.bookings.some(o=>o.id===t))this.showToast("Booking deleted successfully");else{let o="Failed to delete booking";e?.error?.description?o=e.error.description:e?.message?o=e.message:typeof e?.error=="string"&&(o=e.error),this.showToast(o,"error")}})}closeDeleteModal(){this.isProcessingDelete||(this.showDeleteModal=!1,this.pendingDeleteId=null)}openViewDetailsModal(t){this.selectedBooking=this.bookings.find(e=>e.id===t)||null,this.showViewDetailsModal=!0}closeViewDetailsModal(){this.showViewDetailsModal=!1,this.selectedBooking=null}downloadFilteredBookings(){if(this.filteredBookings.length===0){this.showToast("No filtered bookings to extract.");return}let t=[["Created","Last Updated","Date","Time","Court","Name","Type","Status","Contact","Email","Remarks"]];this.filteredBookings.forEach(s=>{let m=this.getTimeDisplay(s);t.push([this.formatDateTime(s.bookingDateTime||s.createdAt),s.lastUpdatedAt||s.updatedAt?this.formatDateTime(s.lastUpdatedAt||s.updatedAt):"Not modified",s.date,m,s.court,s.name,s.type,s.status,s.contact,s.email,s.notes||""])});let e=t.map(s=>s.map(m=>`"${m}"`).join(",")).join(` 69`),i=new Blob([e],{type:"text/csv;charset=utf-8;"}),o=document.createElement("a");o.setAttribute("href",URL.createObjectURL(i)),o.setAttribute("download","filtered_bookings.csv"),o.style.display="none",document.body.appendChild(o),o.click(),document.body.removeChild(o)}addHoursToTimeString(t,e){let[i,o]=t.split(" "),[s,m]=i.split(":").map(Number);o==="PM"&&s!==12?s+=12:o==="AM"&&s===12&&(s=0),s+=e;let f=s>=12?"PM":"AM";return`${s>12?s-12:s===0?12:s}:${m.toString().padStart(2,"0")} ${f}`}findConflicts(t,e,i,o,s){return this.bookings.filter(m=>{if(m.date!==t||m.court!==i||m.id===s||m.status==="Declined"||m.status==="Cancelled")return!1;let f=this.parseTimeStr(m.startTime||m.time||""),v=m.endTime?this.parseTimeStr(m.endTime):new Date(f.getTime()+60*60*1e3),y=this.parseTimeStr(e),M=new Date(y.getTime()+o*60*60*1e3);return y<v&&M>f})}parseTimeStr(t){let[e,i]=t.split(" "),[o,s]=e.split(":").map(Number);i==="PM"&&o!==12&&(o+=12),i==="AM"&&o===12&&(o=0);let m=new Date;return m.setHours(o,s,0,0),m}formatTimeStr(t){let e=t.getHours(),i=t.getMinutes(),o=e>=12?"PM":"AM";return e>12&&(e-=12),e===0&&(e=12),`${e}:${i.toString().padStart(2,"0")} ${o}`}getTimeDisplay(t){return t.timeDisplay||(t.duration&&t.duration>1?`${t.startTime||t.time} - ${t.endTime}`:t.time||t.startTime||"")}onExternalCoachToggle(){this.hasExternalCoach||this.bookingForm.patchValue({externalCoachName:"",externalCoachContact:"",externalCoachEmail:""})}parseExternalCoachField(t,e){if(!t)return"";let i=t.match(new RegExp(`\\[External Coach\\][\\s\\S]*?${e}:\\s*([^\\n]+)`));return i?i[1].trim():""}formatDateTime(t){if(!t)return"N/A";let e=new Date(t),i=["January","February","March","April","May","June","July","August","September","October","November","December"],o=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],s=e.getFullYear(),m=i[e.getMonth()],f=e.getDate().toString().padStart(2,"0"),v=o[e.getDay()],y=e.getHours()%12||12,M=e.getMinutes().toString().padStart(2,"0"),I=e.getSeconds().toString().padStart(2,"0"),B=e.getHours()>=12?"PM":"AM";return`${s} ${m} ${f} ${v} ${y}:${M}:${I} ${B}`}formatStatusBadge(t){let e="";switch(t){case"Booking Request Submitted":e="badge booking-request";break;case"Reserved - Pending Payment":e="badge pending-payment";break;case"Reserved - Paid":e="badge reserved-paid";break;case"Declined":e="badge declined";break;case"Cancelled":e="badge cancelled";break;default:e="badge";break}return`<span class="${e}">${t}</span>`}calculateAmount(t){let e=t.duration?parseInt(t.duration.toString()):1;return this.bookingConfigService.BOOKING_RATE*e}showToast(t,e="success"){let i=document.getElementById("toast"),o=document.getElementById("toast-message");i&&o&&(t.includes(` 70`)?o.innerHTML=t.split(` 71`).map(s=>s.trim().replace(/</g,"<").replace(/>/g,">")).join("<br>"):o.textContent=t,i.className="toast",i.classList.add(e),setTimeout(()=>{i.classList.add("show")},10),e!=="error"&&setTimeout(()=>{this.hideToast()},5e3))}hideToast(){let t=document.getElementById("toast");t&&t.classList.remove("show")}describeUploadError(t){return t?.error?.description?t.error.description:t?.status===0?"Could not reach the server. Check your connection and try again. (error 0)":t?.status===4
7113?"Your receipt files are too large. Please upload fewer images at a time. (error 413)":`${t?.message||"Please try again."}${t?.status?` (error ${t.status})`:""}`}onFileSelected(t){return ue(this,null,function*(){let e=t.target.files;if(e&&e.length>0)try{this.selectedFiles=yield Dr(Array.from(e))}catch{this.selectedFiles=[],this.showToast("Could not read the selected photo. Please select it again.","error")}})}uploadReceipts(){return ue(this,null,function*(){if(!this.selectedBooking||!this.selectedBooking.id){this.showToast("No booking selected","error");return}if(this.selectedFiles.length===0){this.showToast("Please select at least one file","warning");return}if(this.selectedFiles.filter(i=>!i.type.startsWith("image/")).length>0){this.showToast("Only image files are allowed","error");return}let e=ba(this.selectedFiles);if(e){this.showToast(e,"error");return}try{this.isUploadingReceipts=!0,this.uploadProgress=0;let i=new FormData;this.selectedFiles.forEach(s=>{i.append("files",s)});let o=yield this.apiService.uploadReceipts(this.selectedBooking.id,i).toPromise();if(o&&o.result==="success"){yield this.loadBookingsFromBackend(),this.showToast(`Successfully uploaded ${o.count} receipt(s)`,"success"),this.isUploadingReceipts=!1,this.uploadProgress=0,this.selectedFiles=[];let s=document.getElementById("receipt-upload-input");s&&(s.value=""),this.closeReceiptUploadModal()}else this.isUploadingReceipts=!1,this.uploadProgress=0,this.showToast("Failed to upload receipts","error")}catch(i){this.isUploadingReceipts=!1,this.uploadProgress=0,this.showToast("Failed to upload receipts: "+this.describeUploadError(i),"error")}})}removeSelectedFile(t){this.selectedFiles.splice(t,1)}openReceiptUrl(t){this.allReceiptUrls=this.selectedBooking?.receiptUrls||[],this.currentReceiptIndex=this.allReceiptUrls.indexOf(t),this.currentReceiptIndex===-1&&(this.currentReceiptIndex=0),this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1;let i=this.parseReceiptMetadata(t)?.url||t;this.currentReceiptUrl=this.convertGoogleDriveUrl(i),this.showReceiptViewerModal=!0}closeReceiptViewer(){this.showReceiptViewerModal=!1,this.currentReceiptUrl="",this.currentReceiptIndex=0,this.allReceiptUrls=[],this.isLoadingReceipt=!1,this.receiptLoadError=!1,this.imageZoom=1}nextReceipt(){this.currentReceiptIndex<this.allReceiptUrls.length-1&&(this.currentReceiptIndex++,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}previousReceipt(){this.currentReceiptIndex>0&&(this.currentReceiptIndex--,this.isLoadingReceipt=!0,this.receiptLoadError=!1,this.imageZoom=1,this.currentReceiptUrl=this.convertGoogleDriveUrl(this.allReceiptUrls[this.currentReceiptIndex]))}canNavigatePrevious(){return this.currentReceiptIndex>0}canNavigateNext(){return this.currentReceiptIndex<this.allReceiptUrls.length-1}onReceiptImageLoad(){this.isLoadingReceipt=!1,this.receiptLoadError=!1}onReceiptImageError(){this.isLoadingReceipt=!1,this.receiptLoadError=!0,
71console.error("Failed to load receipt image from URL:",this.currentReceiptUrl),console.log("Original URL:",this.allReceiptUrls[this.currentReceiptIndex])}zoomIn(){this.imageZoom<3&&(this.imageZoom+=.25)}zoomOut(){this.imageZoom>.5&&(this.imageZoom-=.25)}resetZoom(){this.imageZoom=1}convertGoogleDriveUrl(t){console.log("Converting URL:",t);let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);if(e){let i=this.apiService.getReceiptImageUrl(e);return console.log("Using backend URL:",i),i}return console.log("Could not extract file ID, using original URL"),t}openReceiptInNewTab(){this.currentReceiptIndex>=0&&this.currentReceiptIndex<this.allReceiptUrls.length&&window.open(this.allReceiptUrls[this.currentReceiptIndex],"_blank")}downloadReceipt(){if(this.currentReceiptIndex>=0&&this.currentReceiptIndex<this.allReceiptUrls.length){let t=document.createElement("a");t.href=this.currentReceiptUrl,t.download=`receipt_${this.currentReceiptIndex+1}.jpg`,t.target="_blank",t.setAttribute("download",`receipt_${this.currentReceiptIndex+1}.jpg`),document.body.appendChild(t),t.click(),document.body.removeChild(t)}}hasReceipts(){return!!this.selectedBooking?.receiptUrls&&this.selectedBooking.receiptUrls.length>0}getReceiptUrls(){return this.selectedBooking?.receiptUrls||[]}canUploadReceipts(t){return t.status==="Reserved - Pending Payment"}openReceiptUploadModal(t){this.selectedBooking=this.bookings.find(e=>e.id===t)||null,this.selectedBooking&&(!this.canUploadReceipts(this.selectedBooking)&&!this.hasReceipts()?this.showReceiptStatusRestrictionModal=!0:(this.showReceiptUploadModal=!0,this.selectedFiles=[]))}closeReceiptStatusRestrictionModal(){this.showReceiptStatusRestrictionModal=!1,this.selectedBooking=null}closeReceiptUploadModal(){if(this.isUploadingReceipts)return;this.showReceiptUploadModal=!1,this.selectedBooking=null,this.selectedFiles=[];let t=document.getElementById("receipt-upload-input");t&&(t.value="")}
71getReceiptCount(t){return t.receiptUrls?.length||0}formatFileSize(t){return xa(t)}totalReceiptBytes(){return va(this.selectedFiles)}openBookingDetailsModal(){this.showBookingDetailsModal=!0}closeBookingDetailsModal(){this.showBookingDetailsModal=!1}parseReceiptMetadata(t){try{return JSON.parse(t)}catch{let e=this.apiService.extractFileIdFromGoogleDriveUrl(t);return{url:t,fileId:e||"unknown",fileName:"receipt.jpg",uploadedAt:""}}}getReceiptMetadata(t){return!t.receiptUrls||t.receiptUrls.length===0?[]:t.receiptUrls.map(e=>this.parseReceiptMetadata(e)).filter(e=>e!==null)}getFormattedUploadDate(t){if(!t)return"N/A";try{return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}catch{return"N/A"}}deleteReceipt(t,e){e.stopPropagation(),this.pendingDeleteReceipt=t,this.showDeleteReceiptModal=!0}confirmDeleteReceipt(){return ue(this,null,function*(){if(!this.pendingDeleteReceipt||!this.selectedBooking)return;this.isLoading=!0;let t=this.pendingDeleteReceipt,e=this.selectedBooking.id;try{yield this.apiService.deleteReceipt(e,t.fileId).toPromise(),yield this.loadBookingsFromBackend(),this.selectedBooking=this.bookings.find(i=>i.id===e)||null,this.showToast("Receipt deleted successfully","success"),this.closeDeleteReceiptModal()}catch(i){console.error("Error deleting receipt:",i),this.showToast("Failed to delete receipt: "+(i.error?.message||"Unknown error"),"error")}finally{this.isLoading=!1}})}closeDeleteReceiptModal(){this.showDeleteReceiptModal=!1,this.pendingDeleteReceipt=null}getPaymentDeadlineCountdown(t){if(t.status!=="Reserved - Pending Payment")return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};if(t.receiptUrls&&t.receiptUrls.length>0)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};if(!t.bookingDateTime)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};let i=new Date(t.bookingDateTime),o=new Date(2025,11,16);if(i<o)return{text:"",timeText:"",cssClass:"",isExpired:!1,percentage:0};let s=new Date,m=60*60*1e3,v=new Date(i.getTime()+m).getTime()-s.getTime();if(v<=0)return{text:"EXPIRED",timeText:"\u23F0 EXPIRED - Auto-cancelling",cssClass:"countdown-expired",isExpired:!0,percentage:0};let y=Math.round(v/m*100),M=Math.floor(v/6e4),I=Math.floor(v%6e4/1e3),B="",N="";return M>=30?(B=`${M}m ${I}s left`,N="countdown-safe"):M>=15?(B=`\u26A0\uFE0F ${M}m ${I}s left`,N="countdown-warning"):(B=`\u{1F6A8} ${M}m ${I}s left`,N="countdown-critical"),{text:`${M}m ${I}s`,timeText:B,cssClass:N,isExpired:!1,percentage:y}}shouldShowCountdown(t){return this.getPaymentDeadlineCountdown(t).text!==""}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(it),ae(je),ae(Yo))};static \u0275cmp=We({type:n,selectors:[["app-my-bookings"]],decls:420,vars:113,consts:[["id","manage-content"],[1,"calendar-container"],[1,"filter-panel"],["type","date",1,"filter-field",3,"ngModelChange","change","ngModel"],[1,"filter-field",3,"ngModelChange","change","ngModel"],["value",""],["value","8:00 AM"],["value","9:00 AM"],["value","10:00 AM"],["value","11:00 AM"],["value","12:00 PM"],["value","1:00 PM"],["value","2:00 PM"],["value","3:00 PM"],["value","4:00 PM"],["value","5:00 PM"],["value","6:00 PM"],["value","7:00 PM"],["value","8:00 PM"],["value","9:00 PM"],["value","10:00 PM"],["value","rental"],["value","coaching"],["value","Booking Request Submitted"],["value","Reserved - Pending Payment"],["value","Reserved - Paid"],["value","Declined"],["type","text","placeholder","Search by ID, name, court...",1,"filter-field",3,"ngModelChange","input","ngModel"],["type","button",1,"action-btn",3,"click"],["type","button",1,"action-btn","edit",3,"click"],[2,"width","100%","margin-top","20px","table-layout","fixed","word-wrap","break-word"],[2,"cursor","pointer",3,"click"],[2,"text-align","center"],["class","booking-row","style","cursor: pointer;",3,"click",4,"ngFor","ngForOf"],[4,"ngIf"],["id","pagination-controls","style","margin: 16px 0; text-align: center;",4,"ngIf"],["id","toast-container",1,"toast-container"],["id","toast",1,"toast"],["id","toast-message"],["id","toast-close",1,"toast-close",3,"click"],["id","add-booking-overlay"],[1,"spinner"],[1,"loading-text"],["id","booking-modal",1,"modal-overlay"],[1,"modal-content"],["id","modal-title"],[3,"ngSubmit","formGroup"],[1,"form-group"],["for","booking-date"],["type","date","id","booking-date","formControlName","date","required","",1,"modal-field",3,"change"],["for","start-time"],["id","start-time","formControlName","startTime","required","",1,"modal-field",3,"change"],["for","duration"],["id","duration","formControlName","duration","required","",1,"modal-field",3,"change"],["value","1"],["value","2"],["value","3"],["value","4"],["value","5"],["id","admin-time-range-display",1,"time-range-display"],["type","text","disabled","",1,"modal-field","amount-display",3,"value"],["for","court"],["id","court","formControlName","court","required","",1,"modal-field"],["value","Court 1"],["value","Court 2"],["value","Court 3"],["value","Court 7"],["value","Court 8"],["value","Court 9"],["value","Court 10"],["value","Court 11"],["for","type"],["id","type","formControlName","type","required","",1,"modal-field",3,"change"],["for","admin-booking-coach"],["id","admin-booking-coach","formControlName","coachName",1,"modal-field"],[3,"value",4,"ngFor","ngForOf"],["class","coach-rate-hint",4,"ngIf"],["for","admin-total-person"],["type","number","id","admin-total-person","formControlName","totalPersonPlaying","min","1","max","20","required","","placeholder","Enter number of players",1,"modal-field"],["for","name"],["type","text","id","name","formControlName","name","required","",1,"modal-field"],["for","contact"],["type","text","id","contact","formControlName","contact","required","",1,"modal-field"],["for","email"],["type","email","id","email","formControlName","email","required","",1,"modal-field"],["for","status"],["type","text","id","status","formControlName","status","readonly","",1,"modal-field","status-readonly"],["for","notes"],["id","notes","formControlName","notes","rows","3","placeholder","Any additional info...",1,"modal-field"],[1,"form-group","external-coach-group"],["type","checkbox","id","my-external-coach-checkbox",3,"ngModelChange","change","ngModel","ngModelOptions"],["for","my-external-coach-checkbox"],["class","form-group",4,"ngIf"],[1,"modal-actions"],["type","submit",3,"disabled"],[1,"button-spinner"],["type","button",3,"click","disabled"],["id","cancel-restr
71iction-modal",1,"modal-overlay"],[1,"modal-content","confirm-style"],[1,"bi","bi-exclamation-triangle"],[1,"action-btn","edit",3,"click"],["id","confirm-modal",1,"modal-overlay"],[1,"action-btn","delete",3,"click","disabled"],[1,"action-btn","edit",3,"click","disabled"],["id","delete-modal",1,"modal-overlay"],["id","save-modal",1,"modal-overlay"],[1,"button-text"],["id","critical-warning-modal",1,"modal-overlay"],["id","view-details-modal",1,"modal-overlay"],[1,"bi","bi-search"],["class","details-container",4,"ngIf"],["id","loading-overlay"],["id","booking-overlay"],["id","receipt-upload-modal",1,"modal-overlay"],[1,"modal-content","receipt-modal"],[1,"receipt-modal-header"],[1,"receipt-modal-icon"],[1,"bi","bi-cloud-upload-fill"],["class","receipt-modal-subtitle",4,"ngIf"],["class","receipt-modal-body",4,"ngIf"],["class","upload-overlay",4,"ngIf"],[1,"receipt-modal-footer"],["type","button",1,"modal-btn","secondary",3,"click","disabled"],[1,"bi","bi-x-circle"],["type","button",1,"modal-btn","primary",3,"click","disabled"],[1,"bi","bi-cloud-upload"],[1,"app-version-label"],["id","receipt-viewer-modal",1,"modal-overlay","receipt-viewer-overlay",3,"click"],[1,"receipt-viewer-modal",3,"click"],[1,"receipt-viewer-header"],[1,"receipt-viewer-info"],[1,"bi","bi-file-earmark-image"],["class","receipt-viewer-zoom-level",4,"ngIf"],[1,"receipt-viewer-controls"],["class","zoom-controls",4,"ngIf"],["title","Close",1,"receipt-viewer-close",3,"click"],[1,"bi","bi-x-lg"],[1,"receipt-viewer-body"],["title","Previous Receipt",1,"receipt-nav-btn","receipt-nav-prev",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"receipt-image-container"],["class","receipt-loading",4,"ngIf"],["class","receipt-error",4,"ngIf"],["class","receipt-image-wrapper",3,"display",4,"ngIf"],["title","Next Receipt",1,"receipt-nav-btn","receipt-nav-next",3,"click","disabled"],[1,"bi","bi-chevron-right"],[1,"receipt-viewer-footer"],["title","View Booking Details",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-info-circle"],["class","receipt-viewer-action-btn secondary","title","Download Receipt",3,"click",4,"ngIf"],[1,"receipt-viewer-action-btn","primary",3,"click"],["id","booking-details-modal",1,"modal-overlay",3,"click"],["class","modal-content booking-details-modal",3,"click",4,"ngIf"],["id","receipt-status-restriction-modal",1,"modal-overlay"],[1,"modal-content","confirm-style","receipt-restriction-modal"],[1,"receipt-restriction-icon"],[1,"bi","bi-info-circle-fill"],[1,"receipt-restriction-title"],["class","receipt-restriction-body",4,"ngIf"],[1,"receipt-restriction-help"],[1,"bi","bi-check-circle"],["id","delete-receipt-modal",1,"modal-overlay"],[1,"delete-receipt-warning"],[1,"booking-row",2,"cursor","pointer",3,"click"],["data-label","Booking ID",2,"width","10%"],["data-label","Created",2,"width","12%"],["data-label","Last Updated",2,"width","12%"],["data-label","Date",2,"width","8%"],["data-label","Time",2,"width","8%"],["data-label","Court",2,"width","6%"],["data-label","Total Person Playing",2,"width","6%"],["data-label","Name",2,"width","10%"],["data-label","Type",2,"width","6%"],["data-label","Status",2,"width","10%"],[3,"innerHTML"],["data-label","Remarks",2,"width","8%"],["data-label","Receipts",2,"width","10%","text-align","center",3,"click"],[2,"display","flex","flex-direction","column","align-items","center","gap","8px"],["class","receipt-timer-container",4,"ngIf"],[1,"receipt-btn",3,"click","title"],[1,"bi",3,"ngClass"],["class","receipt-count",4,"ngIf"],["data-label","Actions",2,"width","10%","text-align","center",3,"click"],["class","icon-btn edit","title","Edit Booking",3,"click",4,"ngIf"],["class","icon-btn cancel","title","Cancel Booking",3,"click",4,"ngIf"],["class","icon-btn delete","title","Delete Booking",3,"click",4,"ngIf"],[1,"receipt-timer-container"],[1,"timer-label"],[1,"bi","bi-clock-fill"],[1,"progress-bar-container"],[1,"progress-bar-bg"],[1,"progress-text"],[1,"receipt-count"],["title","Edit Booking",1,"icon-btn","edit",3,"click"],[1,"bi","bi-pencil"],["title","Cancel Booking",1,"icon-btn","cancel",3,"click"],["title","Delete Booking",1,"icon-btn","delete",3,"click"],[1,"bi","bi-trash"],["colspan","14",2,"text-align","center"],["id","pagination-controls",2,"margin","16px 0","text-align","center"],[1,"pagination-btn","nav-btn",3,"click","disabled"],["class","pagination-btn page-btn",3,"active","disabled","click",4,"ngFor","ngForOf"],[1,"pagination-btn","page-btn",3,"click","disabled"],[3,"value"],[1,"coach-rate-hint"],["for","my-external-coach-name"],[1,"required-asterisk"],["type","text","id","my-external-coach-name","formControlName","externalCoachName","placeholder","Enter coach name",1,"modal-field"],["for","my-external-coach-contact",2,"margin-top","8px"],["type","text","id","my-external-coach-contact","formControlName","externalCoachContact","placeholder","Enter coach contact number",1,"modal-field"],["for","my-external-coach-email",2,"margin-top","8px"],["type","email","id","my-external-coach-email","formControlName","externalCoachEmail","placeholder","Enter coach email",1,"modal-field"],[1,"details-container"],[1,"detail-group"],["class","detail-group",4,"ngIf"],[1,"receipt-modal-subtitle"],[1,"receipt-modal-body"],["class","receipt-notice",4,"ngIf"],["class","receipt-section existing-receipts-section",4,"ngIf"],["class","receipt-section upload-section",4,"ngIf"],[1,"receipt-notice"],[1,"receipt-notice-content"],[1,"bi","bi-info-circle-fill","receipt-notice-icon"],[1,"receipt-section","existing-receipts-section"],[1,"section-header"],[1,"bi","bi-file-earmark-check"],[1,"receipts-list"],["class","receipt-item",4,"ngFor","ngForOf"],[1,"receipt-item"],[1,"receipt-item-icon"],[1,"bi","bi-file-earmark-image-fill"],[1,"receipt-item-content"],[1,"receipt-item-title"],[1,"receipt-item-date"],[1,"bi","bi-clock"],[1,"receipt-item-actions"],["type","button","title","View Receipt",1,"receipt-action-btn","view",3,"click"],[1,"bi","bi-eye-fill"],["type","button","title","Delete Receipt",1,"receipt-action-btn","delete",3,"click"],[1,"bi","bi-trash-fill"],[1,"receipt-section","upload-section"],[1,"bi","bi-plus-circle"],[1,"upload-zone"],[1,"upload-zone-icon"],[1,"bi","bi-cloud-arrow-up"],[1,"upload-zone-text"],[1,"upload-zone-subtext"],["for","receipt-upload-input",1,"upload-zone-button"],[1,"bi","bi-folder2-open"],["type","file","id","receipt-upload-input","accept","image/*","multiple","",2,"display","none",3,"change","disabled"],["class","selected-files-section",4,"ngIf"],[1,"selected-files-section"],[1,"selected-files-header"],[1,"bi","bi-images"],[1,"selected-files-size"],[1,"selected-files-list"],["class","selected-file-item",4,"ngFor","ngForOf"],[1,"selected-file-item"],[1,"file-item-icon"],[1,"file-item-info"],[1,"file-item-name"],[1,"file-item-size"],["type","button","title","Remove file",1,"file-item-remove",3,"click","disabled"],[1,"upload-overlay"],[1,"upload-overlay-content"],[1,"spinner-large"],[1,"upload-overlay-text"],[1,"upload-overlay-subtext"],[1,"receipt-viewer-zoom-level"],[1,"zoom-control
71s"],["title","Zoom Out",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-dash-circle"],["title","Reset Zoom",1,"zoom-btn",3,"click"],[1,"bi","bi-arrow-clockwise"],["title","Zoom In",1,"zoom-btn",3,"click","disabled"],[1,"receipt-loading"],[1,"receipt-error"],[1,"error-url"],[1,"receipt-image-wrapper"],[1,"receipt-image",3,"load","error","dblclick","src","alt"],["title","Download Receipt",1,"receipt-viewer-action-btn","secondary",3,"click"],[1,"bi","bi-download"],[1,"modal-content","booking-details-modal",3,"click"],[1,"booking-details-modal-header"],[1,"booking-details-title"],["title","Close",1,"modal-close-btn",3,"click"],[1,"booking-details-modal-body"],[1,"booking-detail-item"],[1,"booking-detail-label"],[1,"booking-detail-value","highlight"],[1,"booking-detail-value"],["class","booking-detail-item",4,"ngIf"],[1,"booking-detail-value","status",3,"ngClass"],[1,"booking-details-modal-footer"],[1,"modal-btn","primary",3,"click"],[1,"receipt-restriction-body"],[1,"status-highlight"],[1,"receipt-restriction-status-box"],[1,"status-current"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"h2"),l(3,"My Bookings"),a(),r(4,"div",2)(5,"input",3),pe("ngModelChange",function(s){return de(i.filters.date,s)||(i.filters.date=s),s}),S("change",function(){return i.applyFilters()}),a(),r(6,"select",4),pe("ngModelChange",function(s){return de(i.filters.time,s)||(i.filters.time=s),s}),S("change",function(){return i.applyFilters()}),r(7,"option",5),l(8,"All Times"),a(),r(9,"option",6),l(10,"8:00 AM"),a(),r(11,"option",7),l(12,"9:00 AM"),a(),r(13,"option",8),l(14,"10:00 AM"),a(),r(15,"option",9),l(16,"11:00 AM"),a(),r(17,"option",10),l(18,"12:00 PM"),a(),r(19,"option",11),l(20,"1:00 PM"),a(),r(21,"option",12),l(22,"2:00 PM"),a(),r(23,"option",13),l(24,"3:00 PM"),a(),r(25,"option",14),l(26,"4:00 PM"),a(),r(27,"option",15),l(28,"5:00 PM"),a(),r(29,"option",16),l(30,"6:00 PM"),a(),r(31,"option",17),l(32,"7:00 PM"),a(),r(33,"option",18),l(34,"8:00 PM"),a(),r(35,"option",19),l(36,"9:00 PM"),a(),r(37,"option",20),l(38,"10:00 PM"),a()(),r(39,"select",4),pe("ngModelChange",function(s){return de(i.filters.type,s)||(i.filters.type=s),s}),S("change",function(){return i.applyFilters()}),r(40,"option",5),l(41,"All Types"),a(),r(42,"option",21),l(43,"Rental"),a(),r(44,"option",22),l(45,"Coaching"),a()(),r(46,"select",4),pe("ngModelChange",function(s){return de(i.filters.status,s)||(i.filters.status=s),s}),S("change",function(){return i.applyFilters()}),r(47,"option",5),l(48,"All Statuses"),a(),r(49,"option",23),l(50,"Booking Request Submitted"),a(),r(51,"option",24),l(52,"Reserved - Pending Payment"),a(),r(53,"option",25),l(54,"Reserved - Paid"),a(),r(55,"option",26),l(56,"Declined"),a()(),r(57,"input",27),pe("ngModelChange",function(s){return de(i.searchTerm,s)||(i.searchTerm=s),s}),S("input",function(){return i.applyFilters()}),a(),r(58,"button",28),S("click",function(){return i.clearFilters()}),l(59,"Clear Filters"),a(),r(60,"button",29),S("click",function(){return i.downloadFilteredBookings()}),l(61,"Extract Bookings"),a()(),r(62,"table",30)(63,"thead")(64,"tr")(65,"th",31),S("click",function(){return i.sortTable("id")}),l(66,"Booking ID"),a(),r(67,"th",31),S("click",function(){return i.sortTable("bookingDateTime")}),l(68,"Created"),a(),r(69,"th",31),S("click",function(){return i.sortTable("lastUpdatedAt")}),l(70,"Last Updated"),a(),r(71,"th",31),S("click",function(){return i.sortTable("date")}),l(72,"Date"),a(),r(73,"th",31),S("click",function(){return i.sortTable("time")}),l(74,"Time"),a(),r(75,"th",31),S("click",function(){return i.sortTable("court")}),l(76,"Court"),a(),r(77,"th",31),S("click",function(){return i.sortTable("totalPersonPlaying")}),l(78,"Total Person Playing"),a(),r(79,"th",31),S("click",function(){return i.sortTable("name")}),l(80,"Name"),a(),r(81,"th",31),S("click",function(){return i.sortTable("type")}),l(82,"Type"),a(),r(83,"th",31),S("click",function(){return i.sortTable("status")}),l(84,"Status"),a(),r(85,"th",31),S("click",function(){return i.sortTable("notes")}),l(86,"Remarks"),a(),r(87,"th",32),l(88,"Receipts"),a(),r(89,"th",32),l(90,"Actions"),a()()(),r(91,"tbody"),A(92,k6,33,20,"tr",33)(93,O6,3,0,"tr",34),a()(),A(94,T6,6,3,"div",35),a()(),r(95,"div",36)(96,"div",37),w(97,"span",38),r(98,"button",39),S("click",function(){return i.hideToast()}),l(99,"\xD7"),a()()(),r(100,"div",40),w(101,"div",41),r(102,"div",42),l(103,"Loading bookings..."),a()(),r(104,"div",43)(105,"div",44)(106,"h3",45),l(107),a(),r(108,"form",46),S("ngSubmit",function(){return i.onBookingSubmit()}
71),r(109,"div",47)(110,"label",48),l(111,"Date (within next 30 days)"),a(),r(112,"input",49),S("change",function(s){return i.validateBookingDate(s)}),a()(),r(113,"div",47)(114,"label",50),l(115,"Start Time"),a(),r(116,"select",51),S("change",function(){return i.updateAdminTimeDisplay()}),r(117,"option",5),l(118,"Select start time"),a(),r(119,"option",6),l(120,"8:00 AM"),a(),r(121,"option",7),l(122,"9:00 AM"),a(),r(123,"option",8),l(124,"10:00 AM"),a(),r(125,"option",9),l(126,"11:00 AM"),a(),r(127,"option",10),l(128,"12:00 PM"),a(),r(129,"option",11),l(130,"1:00 PM"),a(),r(131,"option",12),l(132,"2:00 PM"),a(),r(133,"option",13),l(134,"3:00 PM"),a(),r(135,"option",14),l(136,"4:00 PM"),a(),r(137,"option",15),l(138,"5:00 PM"),a(),r(139,"option",16),l(140,"6:00 PM"),a(),r(141,"option",17),l(142,"7:00 PM"),a(),r(143,"option",18),l(144,"8:00 PM"),a(),r(145,"option",19),l(146,"9:00 PM"),a(),r(147,"option",20),l(148,"10:00 PM"),a()()(),r(149,"div",47)(150,"label",52),l(151,"Duration (Hours)"),a(),r(152,"select",53),S("change",function(){return i.updateAdminTimeDisplay(),i.updateAdminAmountPayable()}),r(153,"option",54),l(154,"1 Hour"),a(),r(155,"option",55),l(156,"2 Hours"),a(),r(157,"option",56),l(158,"3 Hours"),a(),r(159,"option",57),l(160,"4 Hours"),a(),r(161,"option",58),l(162,"5 Hours"),a()()(),r(163,"div",47)(164,"label"),l(165,"Booking Time Range"),a(),r(166,"div",59),l(167),a()(),r(168,"div",47)(169,"label"),l(170,"Total Amount Payable"),a(),w(171,"input",60),a(),r(172,"div",47)(173,"label",61),l(174,"Court"),a(),r(175,"select",62)(176,"option",5),l(177,"Select court"),a(),r(178,"option",63),l(179,"Court 1"),a(),r(180,"option",64),l(181,"Court 2"),a(),r(182,"option",65),l(183,"Court 3"),a(),r(184,"option",66),l(185,"Court 7"),a(),r(186,"option",67),l(187,"Court 8"),a(),r(188,"option",68),l(189,"Court 9"),a(),r(190,"option",69),l(191,"Court 10 (Coaching)"),a(),r(192,"option",70),l(193,"Court 11 (Coaching)"),a()()(),r(194,"div",47)(195,"label",71),l(196,"Booking Type"),a(),r(197,"select",72),S("change",function(){return i.updateAdminAmountPayable(),i.toggleCoachField()}),r(198,"option",21),l(199,"Rental"),a(),r(200,"option",22),l(201,"Coaching"),a()()(),r(202,"div",47)(203,"label",73),l(204,"Coach Name"),a(),r(205,"select",74)(206,"option",5),l(207,"Select Coach"),a(),A(208,I6,2,3,"option",75),a(),A(209,A6,2,1,"small",76),a(),r(210,"div",47)(211,"label",77),l(212,"Total Person Playing"),a(),w(213,"input",78),a(),r(214,"div",47)(215,"label",79),l(216,"Full Name"),a(),w(217,"input",80),a(),r(218,"div",47)(219,"label",81),l(220,"Contact Number"),a(),w(221,"input",82),a(),r(222,"div",47)(223,"label",83),l(224,"Email Address"),a(),w(225,"input",84),a(),r(226,"div",47)(227,"label",85),l(228,"Status"),a(),w(229,"input",86),a(),r(230,"div",47)(231,"label",87),l(232,"Remarks"),a(),w(233,"textarea",88),a(),r(234,"div",89)(235,"input",90),pe("ngModelChange",function(s){return de(i.hasExternalCoach,s)||(i.hasExternalCoach=s),s}),S("change",function(){return i.onExternalCoachToggle()}),a(),r(236,"label",91),l(237,"I have an external coach"),a()(),A(238,D6,16,0,"div",92),r(239,"div",93)(240,"button",94)(241,"span"),l(242),a(),w(243,"span",95),a(),r(244,"button",96),S("click",function(){return i.closeModal()}),l(245,"Cancel"),a()()()()(),r(246,"div",97)(247,"div",98)(248,"h3"),w(249,"i",99),l(250," Cannot Cancel Booking"),a(),r(251,"p")(252,"strong"),l(253,"Paid bookings"),a(),l(254," can only be cancelled at least 48 hours before the scheduled date and time."),a(),r(255,"p"),l(256,"This booking has been paid and is within the 48-hour window, so it cannot be cancelled at this time."),a(),r(257,"div",93)(258,"button",100),S("click",function(){return i.closeCancelRestrictionModal()}),l(259,"OK"),a()()()(),r(260,"div",101)(261,"div",98)(262,"h3"),w(263,"i",99),l(264," Confirm Cancellation"),a(),r(265,"p"),l(266,"Are you sure you want to cancel this booking?"),a(),r(267,"div",93)(268,"button",102),S("click",function(){return i.confirmCancel()}),r(269,"span"),l(270,"Yes, Cancel Booking"),a(),w(271,"span",95),a(),r(272,"button",103),S("click",function(){return i.closeCancelModal()}),r(273,"span"),l(274,"No, Keep It"),a()()()()(),r(275,"div",104)(276,"div",98)(277,"h3"),w(278,"i",99),l(279," Confirm Deletion"),a(),r(280,"p"),l(281,"Are you sure you want to delete this booking?"),a(),r(282,"div",93)(283,"button",102),S("click",function(){return i.confirmDelete()}),r(284,"span"),l(285,"Yes, Delete"),a(),w(286,"span",95),a(),r(287,"button",103),S("click",function(){return i.closeDeleteModal()}),r(288,"span"),l(289,"Cancel"),a()()()()(),r(290,"div",105)(291,"div",98)(292,"h3"),l(293),a(),r(294,"p"),l(295),a(),r(296,"div",93)(297,"button",103),S("click",function(){return i.confirmSaveClick()}),r(298,"span"),l(299),a(),w(300,"span",95)(301,"span",106),a(),r(302,"button",102),S("click",function(){return i.closeSaveModal()}),l(303,"Cancel"),a()()()(),r(304,"div",107)(305,"div",98)(306,"h3"),w(307,"i",99),l(308," Important Update"),a(),r(309,"p"),l(310," You are about to change one or more critical fields (Date, Time, C
71ourt, or Duration)."),w(311,"br"),l(312," This will reset the booking status to "),r(313,"b"),l(314,"Booking Request Submitted"),a(),l(315," and may require admin re-approval."),w(316,"br"),l(317," Do you want to proceed? "),a(),r(318,"div",93)(319,"button",103),S("click",function(){return i.confirmCriticalWarning()}),l(320," Yes, Proceed "),a(),r(321,"button",102),S("click",function(){return i.cancelCriticalWarning()}),l(322," Cancel "),a()()()(),r(323,"div",108)(324,"div",44)(325,"h3"),w(326,"i",109),l(327," Booking Details"),a(),A(328,N6,77,17,"div",110),r(329,"div",111),w(330,"div",41),r(331,"div",42),l(332,"Loading bookings..."),a()(),r(333,"div",112),w(334,"div",41),r(335,"div",42),l(336,"Processing booking..."),a()(),r(337,"div",93)(338,"button",28),S("click",function(){return i.closeViewDetailsModal()}),l(339,"Close"),a()()()(),r(340,"div",113)(341,"div",114)(342,"div",115)(343,"div",116),w(344,"i",117),a(),r(345,"h3"),l(346,"Upload Payment Receipts"),a(),A(347,V6,5,3,"p",118),a(),A(348,G6,4,3,"div",119)(349,q6,7,0,"div",120),r(350,"div",121)(351,"button",122),S("click",function(){return i.closeReceiptUploadModal()}),w(352,"i",123),l(353," Cancel "),a(),r(354,"button",124),S("click",function(){return i.uploadReceipts()}),w(355,"i",125),l(356),a()(),r(357,"p",126),l(358),a()()(),r(359,"div",127),S("click",function(){return i.closeReceiptViewer()}),r(360,"div",128),S("click",function(s){return s.stopPropagation()}),r(361,"div",129)(362,"div",130)(363,"h3"),w(364,"i",131),l(365),a(),A(366,$6,2,1,"p",132),a(),r(367,"div",133),A(368,Y6,7,2,"div",134),r(369,"button",135),S("click",function(){return i.closeReceiptViewer()}),w(370,"i",136),a()()(),r(371,"div",137)(372,"button",138),S("click",function(){return i.previousReceipt()}),w(373,"i",139),a(),r(374,"div",140),A(375,X6,4,0,"div",141)(376,Z6,15,1,"div",142)(377,Q6,2,7,"div",143),a(),r(378,"button",144),S("click",function(){return i.nextReceipt()}),w(379,"i",145),a()(),r(380,"div",146)(381,"button",147),S("click",function(){return i.openBookingDetailsModal()}),w(382,"i",148),l(383," Booking Details "),a(),A(384,K6,3,0,"button",149),r(385,"button",150),S("click",function(){return i.closeReceiptViewer()}),w(386,"i",123),l(387," Close "),a()()()(),r(388,"div",151),S("click",function(){return i.closeBookingDetailsModal()}),A(389,t7,75,19,"div",152),a(),r(390,"div",153)(391,"div",154)(392,"div",155),w(393,"i",156),a(),r(394,"h3",157),l(395,"Receipt Upload Not Available"),a(),A(396,n7,12,1,"div",158),r(397,"p",159),l(398,' Once your booking is approved and marked as "Reserved - Pending Payment" by the admin, you will be able to upload your payment receipts. '),a(),r(399,"div",93)(400,"button",100),S("click",function(){return i.closeReceiptStatusRestrictionModal()}),w(401,"i",160),r(402,"span"),l(403,"Got It"),a()()()()(),r(404,"div",161)(405,"div",98)(406,"h3"),w(407,"i",99),l(408," Delete Receipt"),a(),A(409,i7,5,1,"p",34),r(410,"p",162),l(411,"This action cannot be undone. The receipt will be permanently deleted from Google Drive."),a(),r(412,"div",93)(413,"button",102),S("click",function(){return i.confirmDeleteReceipt()}),r(414,"span"),l(415,"Yes, Delete"),a(),w(416,"span",95),a(),r(417,"button",103),S("click",function(){return i.closeDeleteReceiptModal()}),r(418,"span"),l(419,"Cancel"),a()()()()()),e&2&&(d(5),ce("ngModel",i.filters.date),d(),ce("ngModel",i.filters.time),d(33),ce("ngModel",i.filters.type),d(7),ce("ngModel",i.filters.status),d(11),ce("ngModel",i.searchTerm),d(35),x("ngForOf",i.paginatedBookings),d(),x("ngIf",i.paginatedBookings.length===0),d(),x("ngIf",i.totalPages>1),d(6),le("display",i.isLoading?"flex":"none"),d(4),le("display",i.showBookingModal?"flex":"none"),d(3),R(i.editingBooking?"Update Booking":"Add Booking"),d(),x("formGroup",i.bookingForm),d(59),F(" ",i.timeRangeDisplay," "),d(4),x("value","\u20B1"+i.totalAmount.toLocaleString()),d(31),le("display",i.showCoachField?"block":"none"),d(6),x("ngForOf",i.coaches),d(),x("ngIf",i.showCoachField&&i.selectedCoachRate),d(26),ce("ngModel",i.hasExternalCoach),x("ngModelOptions",ji(112,b6)),d(3),x("ngIf",i.hasExternalCoach),d(2),x("disabled",i.bookingForm.invali
71d||i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),R(i.editingBooking?"Update":"Save"),d(),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),x("disabled",i.isSubmittingBooking),d(2),le("display",i.showCancelRestrictionModal?"flex":"none"),d(14),le("display",i.showCancelModal?"flex":"none"),d(8),x("disabled",i.isProcessingCancel),d(),le("display",i.isProcessingCancel?"none":"inline"),d(2),le("display",i.isProcessingCancel?"inline-block":"none"),d(),x("disabled",i.isProcessingCancel),d(3),le("display",i.showDeleteModal?"flex":"none"),d(8),x("disabled",i.isProcessingDelete),d(),le("display",i.isProcessingDelete?"none":"inline"),d(2),le("display",i.isProcessingDelete?"inline-block":"none"),d(),x("disabled",i.isProcessingDelete),d(3),le("display",i.showSaveModal?"flex":"none"),d(3),R(i.editingBooking?"Confirm Update":"Confirm Save"),d(2),R(i.editingBooking?"Are you sure you want to update this booking?":"Are you sure you want to save this booking?"),d(2),x("disabled",i.isSubmittingBooking),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),R(i.editingBooking?"Yes, Update":"Yes, Save"),d(),le("display",i.isSubmittingBooking?"inline-block":"none"),d(),le("display",i.isSubmittingBooking?"none":"inline"),d(),x("disabled",i.isSubmittingBooking),d(2),le("display",i.showCriticalWarningModal?"flex":"none"),d(15),x("disabled",i.isSubmittingBooking),d(2),x("disabled",i.isSubmittingBooking),d(2),le("display",i.showViewDetailsModal?"flex":"none"),d(5),x("ngIf",i.selectedBooking),d(),le("display",i.isLoading?"flex":"none"),d(4),le("display",i.isSubmittingBooking?"flex":"none"),d(7),le("display",i.showReceiptUploadModal?"flex":"none"),d(7),x("ngIf",i.selectedBooking),d(),x("ngIf",i.selectedBooking),d(),x("ngIf",i.isUploadingReceipts),d(2),x("disabled",i.isUploadingReceipts),d(3),x("disabled",i.isUploadingReceipts||i.selectedFiles.length===0),d(2),F(" ",i.isUploadingReceipts?"Uploading...":"Upload "+i.selectedFiles.length+" File
71(s)"," "),d(2),F("Version ",i.appVersion,""),d(),le("display",i.showReceiptViewerModal?"flex":"none"),d(6),Se(" Receipt ",i.currentReceiptIndex+1," of ",i.allReceiptUrls.length,""),d(),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(2),x("ngIf",!i.isLoadingReceipt&&!i.receiptLoadError),d(4),te("disabled",!i.canNavigatePrevious()),x("disabled",!i.canNavigatePrevious()),d(3),x("ngIf",i.isLoadingReceipt),d(),x("ngIf",i.receiptLoadError&&!i.isLoadingReceipt),d(),x("ngIf",!i.receiptLoadError),d(),te("disabled",!i.canNavigateNext()),x("disabled",!i.canNavigateNext()),d(6),x("ngIf",!i.receiptLoadError),d(4),le("display",i.showBookingDetailsModal?"flex":"none"),d(),x("ngIf",i.selectedBooking),d(),le("display",i.showReceiptStatusRestrictionModal?"flex":"none"),d(6),x("ngIf",i.selectedBooking),d(8),le("display",i.showDeleteReceiptModal?"flex":"none"),d(5),x("ngIf",i.pendingDeleteReceipt),d(4),x("disabled",i.isLoading),d(),le("display",i.isLoading?"none":"inline"),d(2),le("display",i.isLoading?"inline-block":"none"),d(),x("disabled",i.isLoading))},dependencies:[Ge,cn,rt,$e,bi,Xn,yn,Cn,at,qi,bn,Vn,st,Yn,xi,$i,$o,hi,_i,lt,ut],styles:['.modal-content[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:10px;padding:32px 24 32px 24px;box-shadow:var(--shadow-lg);max-width:30%;width:100%;color:var(--color-text);margin:auto;position:relative;inset:0;transform:none;overflow-y:auto;scrollbar-width:none;-ms-overflow-style:none}.modal-content[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.spinner[_ngcontent-%COMP%]{border:8px solid var(--color-border-light);border-top:8px solid var(--color-accent);border-radius:50%;width:64px;height:64px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin-bottom:16px}.loading-text[_ngcontent-%COMP%]{color:var(--color-text);font-size:16px;font-weight:600;text-align:center;margin-top:16px}.button-spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border-light);border-top:3px solid var(--color-accent);border-radius:50%;width:16px;height:16px;animation:_ngcontent-%COMP%_spin 1s linear infinite;display:none;margin:0 auto}.button-spinner[_ngcontent-%COMP%], .button-text[_ngcontent-%COMP%]{pointer-events:none}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.button[_ngcontent-%COMP%]:disabled, .action-btn[_ngcontent-%COMP%]:disabled, .add-booking-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.icon-btn[_ngcontent-%COMP%]{border:none;color:#fff;cursor:pointer;padding:6px 10px;font-size:18px;border-radius:4px;margin:0 2px;vertical-align:middle;display:inline-flex;align-items:center;justify-content:center}.icon-btn.edit[_ngcontent-%COMP%]{background:var(--color-info)}.icon-btn.edit[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-info) 80%,black)}.icon-btn.cancel[_ngcontent-%COMP%]{background:var(--color-warning)}.icon-btn.cancel[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-warning) 80%,black)}.icon-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger)}.icon-btn.delete[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,black)}.icon-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.icon-btn[_ngcontent-%COMP%] .icon[_ngcontent-%COMP%]{font-size:18px;margin-right:0;display:inline-block}#loading-overlay[_ngcontent-%COMP%], #add-booking-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:color-mix(in srgb,var(--color-surface) 70%,transparent);z-index:10000;display:flex;align-items:center;justify-content:center;flex-direction:column}#booking-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:color-mix(in srgb,var(--color-surface) 90%,transparent);z-index:10001;display:flex;align-items:center;justify-content:center;flex-direction:column}#pagination-controls[_ngcontent-%COMP%], .pagination-controls[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:10px;margin-top:30px;flex-wrap:wrap}.pagination-btn[_ngcontent-%COMP%]{padding:10px 15px;border:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:6px;cursor:pointer;transition:all .3s ease;font-weight:500}.pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);background:var(--color-accent);color:#fff}.pagination-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.pagination-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.nav-btn[_ngcontent-%COMP%]{font-weight:600}.page-btn[_ngcontent-%COMP%]{min-width:40px}@media (max-width: 768px){#pagination-controls[_ngcontent-%COMP%], .pagination-controls[_ngcontent-%COMP%]{flex-wrap:wrap}.modal-content[_ngcontent-%COMP%]{max-width:100%}}.toast-container[_ngcontent-%COMP%]{position:fixed;top:40px;right:32px;left:auto;transform:none;z-index:100001;pointer-events:none}.toast[_ngcontent-%COMP%], .toast-close[_ngcontent-%COMP%]{pointer-events:auto}.toast[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);padding:16px 20px;border-radius:8px;box-shadow:var(--shadow-lg);border-left:4px solid var(--color-accent);display:flex;align-items:center;justify-content:space-between;min-width:300px;max-width:450px;transform:translate(500px);opacity:0;transition:all .3s ease-in-out}.toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1}.toast.success[_ngcontent-%COMP%]{border-left-color:var(--color-accent)}.toast.error[_ngcontent-%COMP%]{border-left-color:var(--color-danger)}.toast.warning[_ngcontent-%COMP%]{border-left-color:var(--color-warning)}.toast.info[_ngcontent-%COMP%]{border-left-color:var(--color-info)}.filter-field[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box;margin-right:8px}.filter-field[_ngcontent-%COMP%], .filter-field[type=date][_ngcontent-%COMP%], .filter-field[type=text][_ngcontent-%COMP%], .filter-field[type=number][_ngcontent-%COMP%], .filter-field[type=email][_ngcontent-%COMP%], .filter-field[_ngcontent-%COMP%] select[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box}#admin-time-range-display[_ngcontent-%COMP%]{width:305px;min-width:0;max-width:100%;box-sizing:border-box;display:block}.modal-field[_ngcontent-%COMP%]{width:100%;min-width:0;max-width:100%;box-sizing:border-box}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text);font-size:20px;cursor:pointer;margin-left:15px;padding:0;line-height:1}.toast-close[_ngcontent-%COMP%]:hover{opacity:.7}#toast-message[_ngcontent-%COMP%]{flex:1;font-weight:500}#save-modal[_ngcontent-%COMP%], #confirm-modal[_ngcontent-%COMP%], #delete-modal[_ngcontent-%COMP%]{z-index:100000!important}
71#save-modal[_ngcontent-%COMP%] .modal-content[_ngcontent-%COMP%], #confirm-modal[_ngcontent-%COMP%] .modal-content[_ngcontent-%COMP%], #delete-modal[_ngcontent-%COMP%] .modal-content[_ngcontent-%COMP%]{max-width:500px}.confirm-style[_ngcontent-%COMP%]{text-align:center}.confirm-style[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-bottom:20px;font-size:24px}.confirm-style[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-bottom:30px;font-size:16px;color:var(--color-text-secondary)}.receipt-timer-container[_ngcontent-%COMP%]{width:100%;padding:8px;background:var(--color-surface-hover);border-radius:8px;border:1px solid var(--color-border)}.timer-label[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:6px;margin-bottom:8px;font-size:11px;font-weight:600;color:var(--color-text);text-transform:uppercase;letter-spacing:.5px}.timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:14px}.progress-bar-container[_ngcontent-%COMP%]{position:relative;width:100%}.progress-bar-bg[_ngcontent-%COMP%]{width:100%;height:24px;background:#0006;border-radius:12px;overflow:hidden;border:1px solid var(--color-border);box-shadow:inset 0 2px 4px #0000004d}.progress-bar-fill[_ngcontent-%COMP%]{height:100%;transition:width .3s ease;position:relative;overflow:hidden}.progress-bar-fill[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,#fff0,#ffffff4d,#fff0);animation:_ngcontent-%COMP%_shimmer 2s infinite}.progress-text[_ngcontent-%COMP%]{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:11px;font-weight:800;color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.8);pointer-events:none;z-index:1}.countdown-safe[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-success) 0%,var(--color-accent) 100%);box-shadow:0 0 10px var(--color-success-shadow)}.countdown-warning[_ngcontent-%COMP%]{background:linear-gradient(90deg,color-mix(in srgb,var(--color-warning) 80%,red) 0%,var(--color-warning) 100%);box-shadow:0 0 10px var(--color-warning-shadow);animation:_ngcontent-%COMP%_pulse-glow 1s ease-in-out infinite}.countdown-critical[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-danger) 0%,color-mix(in srgb,var(--color-danger) 80%,black) 100%);box-shadow:0 0 15px var(--color-danger-shadow-bright);animation:_ngcontent-%COMP%_pulse-glow-critical .5s ease-in-out infinite}.countdown-expired[_ngcontent-%COMP%]{background:linear-gradient(90deg,var(--color-text-muted) 0%,color-mix(in srgb,var(--color-text-muted) 70%,black) 100%);box-shadow:0 0 5px color-mix(in srgb,var(--color-text-muted) 30%,transparent)}.countdown-safe[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-safe[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-success)}.countdown-warning[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-warning[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning);animation:_ngcontent-%COMP%_pulse-icon 1s ease-in-out infinite}.countdown-critical[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-critical[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger);animation:_ngcontent-%COMP%_shake .3s infinite}.countdown-expired[_ngcontent-%COMP%] + .progress-bar-container[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%], .countdown-expired[_ngcontent-%COMP%] .timer-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-text-muted)}@keyframes _ngcontent-%COMP%_shimmer{0%{transform:translate(-100%)}to{transform:translate(100%)}}@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{box-shadow:0 0 10px var(--color-warning-shadow)}50%{box-shadow:0 0 20px var(--color-warning-shadow-bright)}}@keyframes _ngcontent-%COMP%_pulse-glow-critical{0%,to{box-shadow:0 0 15px var(--color-danger-sh
71adow-bright)}50%{box-shadow:0 0 25px var(--color-danger-shadow-bright)}}@keyframes _ngcontent-%COMP%_pulse-icon{0%,to{transform:scale(1);opacity:1}50%{transform:scale(1.1);opacity:.8}}@keyframes _ngcontent-%COMP%_shake{0%,to{transform:translate(0) rotate(0)}25%{transform:translate(-2px) rotate(-5deg)}75%{transform:translate(2px) rotate(5deg)}}table[_ngcontent-%COMP%] th[style*="cursor: pointer"][_ngcontent-%COMP%]{-webkit-user-select:none;user-select:none;position:relative;padding-right:20px;transition:background-color .2s ease}table[_ngcontent-%COMP%] th[style*="cursor: pointer"][_ngcontent-%COMP%]:hover{background-color:var(--color-accent-bg-subtle)}table[_ngcontent-%COMP%] th[style*="cursor: pointer"][_ngcontent-%COMP%]:after{content:"\\21c5";position:absolute;right:5px;opacity:.3;font-size:12px}table[_ngcontent-%COMP%] th[style*="cursor: pointer"][_ngcontent-%COMP%]:hover:after{opacity:.6}.time-range-display[_ngcontent-%COMP%]{padding:8px;background:var(--color-surface-hover);border-radius:4px;color:var(--color-text)}.amount-display[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text);border-radius:4px;padding:8px;border:none}.status-readonly[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text);border-radius:4px;padding:8px;border:none;cursor:not-allowed}.receipt-restriction-modal[_ngcontent-%COMP%]{max-width:500px}.receipt-restriction-icon[_ngcontent-%COMP%]{text-align:center;margin-bottom:20px}.receipt-restriction-icon[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px;color:var(--color-warning)}.receipt-restriction-title[_ngcontent-%COMP%]{text-align:center;margin-bottom:16px}.receipt-restriction-body[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:16px;border-radius:8px;margin-bottom:20px}.receipt-restriction-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 12px;color:var(--color-text-secondary);font-size:15px;line-height:1.6}.receipt-restriction-status-box[_ngcontent-%COMP%]{background:var(--color-surface);padding:12px;border-radius:6px;border-left:4px solid var(--color-danger)}.receipt-restriction-status-box[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:14px}.receipt-restriction-status-box[_ngcontent-%COMP%] .status-highlight[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600}.receipt-restriction-status-box[_ngcontent-%COMP%] .status-current[_ngcontent-%COMP%]{color:var(--color-danger);font-weight:600}.receipt-restriction-help[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:14px;margin-bottom:20px;line-height:1.6}.receipt-notice[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);border:1px solid var(--color-warning);border-radius:8px;padding:16px;margin-bottom:16px}.receipt-notice-content[_ngcontent-%COMP%]{display:flex;align-items:start;gap:12px}.receipt-notice-icon[_ngcontent-%COMP%]{color:var(--color-warning);font-size:20px;flex-shrink:0;margin-top:2px}.receipt-notice[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--color-warning);font-size:16px}.receipt-notice[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:14px;line-height:1.5}.delete-receipt-warning[_ngcontent-%COMP%]{color:var(--color-warning);margin-top:8px}.app-version-label[_ngcontent-%COMP%]{flex-shrink:0;margin:0;padding:0 1.5rem .75rem;text-align:center;font-size:.7rem;opacity:.6}','.receipt-btn[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-accent) 0%,color-mix(in srgb,var(--color-accent) 70%,var(--color-primary)) 100%);border:none;border-radius:8px;padding:8px 12px;color:#fff;font-size:18px;cursor:pointer;transition:all .3s ease;position:relative;display:inline-flex;align-items:center;justify-content:center;gap:4px;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow-bright)}.receipt-btn.has-receipts[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success) 0%,color-mix(in srgb,var(--color-success) 70%,var(--color-accent)) 100%);box-shadow:0 2px 8px var(--color-success-shadow)}.receipt-btn.has-receipts[_ngcontent-%COMP%]:hover{box-shadow:0 4px 12px var(--color-success-shadow-bright)}.receipt-count[_ngcontent-%COMP%]{background:#ffffff4d;border-radius:10px;padding:2px 6px;font-size:11px;font-weight:700;margin-left:4px}.receipt-modal[_ngcontent-%COMP%]{max-width:550px!important;padding:0!important;background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px}.receipt-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:20px 24px;border-radius:10px 10px 0 0;text-align:center}.receipt-modal-icon[_ngcontent-%COMP%]{font-size:40px;margin-bottom:8px;color:#fff}.receipt-modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 6px;font-size:20px;color:#fff;font-weight:600}.receipt-modal-subtitle[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#ffffffe6}.receipt-modal-subtitle[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:#fff;font-weight:600}.receipt-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:450px;overflow-y:auto}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-bg-medium);border-radius:3px}.receipt-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow)}.receipt-section[_ngcontent-%COMP%]{margin-bottom:24px}.section-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid var(--color-border)}.section-header[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:18px;color:var(--color-accent)}
71.section-header[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:15px;color:var(--color-text);font-weight:600}.receipts-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.receipt-item[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:12px 14px;display:flex;align-items:center;gap:12px;transition:all .3s ease}.receipt-item[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow)}.receipt-item-icon[_ngcontent-%COMP%]{font-size:32px;color:var(--color-accent)}.receipt-item-content[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}.receipt-item-title[_ngcontent-%COMP%]{font-size:13px;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.receipt-item-date[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);display:flex;align-items:center;gap:4px}.receipt-item-date[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:10px}.receipt-item-actions[_ngcontent-%COMP%]{display:flex;gap:6px}.receipt-action-btn[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border:1px solid var(--color-accent-shadow);border-radius:6px;padding:8px 10px;color:var(--color-accent);cursor:pointer;transition:all .3s ease;font-size:14px;display:flex;align-items:center;justify-content:center}.receipt-action-btn[_ngcontent-%COMP%]:hover{transform:translateY(-2px)}.receipt-action-btn.view[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border-color:var(--color-accent-shadow);color:var(--color-accent)}.receipt-action-btn.view[_ngcontent-%COMP%]:hover{background:var(--color-accent);color:#fff;box-shadow:0 4px 8px var(--color-accent-shadow)}.receipt-action-btn.delete[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border-color:var(--color-danger-shadow);color:var(--color-danger)}.receipt-action-btn.delete[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff;box-shadow:0 4px 8px var(--color-danger-shadow)}.upload-zone[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border:2px dashed var(--color-accent-shadow);border-radius:10px;padding:32px 20px;text-align:center;transition:all .3s ease;cursor:pointer}.upload-zone[_ngcontent-%COMP%]:hover{background:var(--color-accent-bg-light);border-color:var(--color-accent)}.upload-zone-icon[_ngcontent-%COMP%]{font-size:56px;color:var(--color-accent);margin-bottom:12px}.upload-zone-text[_ngcontent-%COMP%]{font-size:16px;font-weight:600;color:var(--color-text);margin:0 0 6px}.upload-zone-subtext[_ngcontent-%COMP%]{font-size:12px;color:var(--color-text-muted);margin:0 0 16px}.upload-zone-button[_ngcontent-%COMP%]{display:inline-block;background:var(--color-accent);color:#fff;padding:10px 20px;border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;box-shadow:0 2px 8px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.upload-zone-button[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-right:8px}.selected-files-section[_ngcontent-%COMP%]{margin-top:20px;background:var(--color-accent-bg-subtle);border:1px solid var(--color-border);border-radius:8px;padding:16px}.selected-files-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;padding-bottom:12px;border-bottom:1px solid var(--color-border);font-size:14px;font-weight:600;color:var(--color-text)}.selected-files-size[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:12px}.selected-files-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.selected-file-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:6px;padding:10px 12px;transition:all .2s ease}.selected-file-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-border-light)}.file-item-icon[_ngcontent-%COMP%]{font-size:22px;color:var(--color-accent)}.file-item-info[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;gap:2px}
71.file-item-name[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.file-item-size[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted)}.file-item-remove[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);border:1px solid var(--color-danger-shadow);border-radius:4px;padding:6px 10px;color:var(--color-danger);cursor:pointer;transition:all .2s ease;font-size:12px}.file-item-remove[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff}.file-item-remove[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.upload-overlay[_ngcontent-%COMP%]{position:absolute;inset:0;background:color-mix(in srgb,var(--color-surface) 98%,transparent);border-radius:10px;display:flex;align-items:center;justify-content:center;z-index:1000}.upload-overlay-content[_ngcontent-%COMP%]{text-align:center}.spinner-large[_ngcontent-%COMP%]{border:6px solid var(--color-border);border-top:6px solid var(--color-accent);border-radius:50%;width:60px;height:60px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto 20px}.upload-overlay-text[_ngcontent-%COMP%]{font-size:18px;font-weight:600;color:var(--color-text);margin:0 0 8px}.upload-overlay-subtext[_ngcontent-%COMP%]{font-size:14px;color:var(--color-text-muted);margin:0}.receipt-modal-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;gap:12px;justify-content:flex-end}.modal-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.modal-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.modal-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.modal-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.modal-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.modal-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed;transform:none!important}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.receipt-viewer-overlay[_ngcontent-%COMP%]{background:#000000f2!important;z-index:10000}.receipt-viewer-modal[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:10px;width:95vw;height:95vh;max-width:1400px;display:flex;flex-direction:column;overflow:hidden;box-shadow:0 20px 60px #00000080}.receipt-viewer-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:16px 24px;background:var(--color-accent);border-bottom:1px solid var(--color-border)}.receipt-viewer-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:22px;color:#fff;font-weight:600;display:flex;align-items:center;gap:10px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{margin:0;font-size:13px;color:#fffc;font-weight:500}.receipt-viewer-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.zoom-controls[_ngcontent-%COMP%]{display:flex;gap:6px;background:#ffffff1a;padding:6px;border-radius:8px}.zoom-btn[_ngcontent-%COMP%]{background:#ffffff26;border:1px solid rgba(255,255,255,.2);border-radius:6px;padding:8px 12px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:18px;display:flex;align-items:center;justify-content:center}.zoom-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:#ffffff40;transform:scale(1.1)}.zoom-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:not-allowed}.receipt-viewer-close[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:8px;padding:10px 14px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:20px;display:flex;align-items:center;justify-content:center}.receipt-viewer-close[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.05)}.receipt-viewer-body[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;padding:0;position:relative;background:#0006;overflow:hidden}.receipt-image-container[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;justify-content:center;width:100%;height:100%;overflow:auto;position:relative;scroll-behavior:smooth}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar{width:10px;height:10px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:5px}.receipt-image-container[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent-shadow-bright)}.receipt-image-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:100%;height:100%;padding:20px}.receipt-image[_ngcontent-%COMP%]{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;border-radius:8px;box-shadow:0 10px 40px #00000080;transition:transform .3s ease;transform-origin:center center;cursor:zoom-in;-webkit-user-select:none;user-select:none;-webkit-user-drag:none}.receipt-image[style*="scale(1)"][_ngcontent-%COMP%]{cursor:zoom-in}.receipt-image[style*="scale(2)"][_ngcontent-%COMP%], .receipt-image[style*="scale(3)"][_ngcontent-%COMP%]{max-width:none;max-height:none;cursor:zoom-out}.receipt-image-wrapper[_ngcontent-%COMP%]{transition:all .3s ease}.receipt-loading[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:20px;color:var(--color-text)}
71.receipt-loading[_ngcontent-%COMP%] .spinner-large[_ngcontent-%COMP%]{border:8px solid var(--color-border);border-top:8px solid var(--color-accent);border-radius:50%;width:80px;height:80px;animation:_ngcontent-%COMP%_spin 1s linear infinite}.receipt-loading[_ngcontent-%COMP%] .loading-text[_ngcontent-%COMP%]{font-size:16px;color:var(--color-text-secondary);font-weight:500}.receipt-error[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--color-text);text-align:center;max-width:600px;padding:40px;background:var(--color-danger-bg-subtle);border:2px solid var(--color-danger-shadow);border-radius:12px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:64px;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:24px;font-weight:600;color:var(--color-danger)}.receipt-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:14px;color:var(--color-text-secondary);line-height:1.6}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%]{text-align:left;margin:8px 0;padding-left:24px;font-size:13px;color:var(--color-text-muted)}.receipt-error[_ngcontent-%COMP%] ul[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{margin:4px 0}.error-url[_ngcontent-%COMP%]{font-size:11px!important;color:var(--color-text-muted)!important;word-break:break-all;background:var(--color-surface-hover);padding:8px 12px;border-radius:6px;font-family:monospace}.retry-btn[_ngcontent-%COMP%]{background:var(--color-accent);border:none;border-radius:6px;padding:10px 20px;color:#fff;font-size:13px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px;margin-top:8px}.retry-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.receipt-nav-btn[_ngcontent-%COMP%]{position:absolute;background:color-mix(in srgb,var(--color-accent) 90%,transparent);border:2px solid rgba(255,255,255,.2);border-radius:50%;width:45px;height:45px;display:flex;align-items:center;justify-content:center;color:#fff;font-size:20px;cursor:pointer;transition:all .3s ease;box-shadow:0 4px 12px #0000004d;z-index:10}.receipt-nav-btn[_ngcontent-%COMP%]:hover:not(.disabled){background:var(--color-accent);transform:scale(1.1);box-shadow:0 6px 20px var(--color-accent-shadow-bright)}.receipt-nav-btn.disabled[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-color:var(--color-border);color:var(--color-text-muted);cursor:not-allowed;opacity:.5}.receipt-nav-prev[_ngcontent-%COMP%]{left:20px}.receipt-nav-next[_ngcontent-%COMP%]{right:20px}.receipt-viewer-footer[_ngcontent-%COMP%]{padding:20px 24px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);display:flex;gap:12px;justify-content:flex-end}.receipt-viewer-action-btn[_ngcontent-%COMP%]{padding:12px 24px;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .3s ease;display:inline-flex;align-items:center;gap:8px}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text);border:1px solid var(--color-border)}.receipt-viewer-action-btn.secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);transform:translateY(-2px)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 2px 8px var(--color-accent-shadow)}.receipt-viewer-action-btn.primary[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 85%,black);transform:translateY(-2px);box-shadow:0 4px 12px var(--color-accent-shadow)}.booking-details-modal[_ngcontent-%COMP%]{background:var(--color-surface)!important;border:1px solid var(--color-border);border-radius:10px;max-width:500px!important;padding:0!important}.booking-details-modal-header[_ngcontent-%COMP%]{background:var(--color-accent);padding:16px 20px;border-radius:10px 10px 0 0;display:flex;justify-content:space-between;align-items:center}.booking-details-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;color:#fff}.booking-details-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:22px}.booking-details-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:18px;font-weight:600}.modal-close-btn[_ngcontent-%COMP%]{background:#fff3;border:none;border-radius:6px;padding:6px 10px;color:#fff;cursor:pointer;transition:all .3s ease;font-size:16px}.modal-close-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,transparent);transform:scale(1.1)}.booking-details-modal-body[_ngcontent-%COMP%]{padding:20px;max-height:500px;overflow-y:auto;display:flex;flex-direction:column;gap:14px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:6px}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-accent-bg-subtle)}.booking-details-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-accent-shadow);border-radius:3px}.booking-detail-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.booking-detail-label[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);text-transform:uppercase;font-weight:600;letter-spacing:.5px}.booking-detail-value[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text);font-weight:500}.booking-detail-value.highlight[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600;font-size:14px}.booking-detail-value.status[_ngcontent-%COMP%]{display:inline-block;padding:5px 12px;border-radius:4px;font-size:12px;font-weight:600;width:fit-content}.booking-detail-value.status.pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning-shadow)}.booking-detail-value.status.paid[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);color:var(--color-accent);border:1px solid var(--color-accent-shadow)}.booking-detail-value.status.declined[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger);
71border:1px solid var(--color-danger-shadow)}.booking-details-modal-footer[_ngcontent-%COMP%]{padding:16px 20px;background:var(--color-surface-hover);border-top:1px solid var(--color-border);border-radius:0 0 10px 10px;display:flex;justify-content:center}@media (max-width: 768px){.receipt-viewer-modal[_ngcontent-%COMP%]{width:100vw;height:100vh;max-width:100vw;border-radius:0}.receipt-viewer-header[_ngcontent-%COMP%]{padding:12px 16px;flex-wrap:wrap;gap:8px}.receipt-viewer-info[_ngcontent-%COMP%]{flex:1}.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:16px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:12px}.zoom-controls[_ngcontent-%COMP%]{padding:4px;gap:4px}.zoom-btn[_ngcontent-%COMP%]{padding:6px 10px;font-size:16px}.receipt-viewer-close[_ngcontent-%COMP%]{padding:8px 12px;font-size:18px}.receipt-viewer-body[_ngcontent-%COMP%]{padding:0}.receipt-image-wrapper[_ngcontent-%COMP%]{padding:10px}.receipt-nav-btn[_ngcontent-%COMP%]{width:36px;height:36px;font-size:16px}.receipt-nav-prev[_ngcontent-%COMP%]{left:8px}.receipt-nav-next[_ngcontent-%COMP%]{right:8px}.receipt-viewer-footer[_ngcontent-%COMP%]{flex-direction:column;padding:12px 16px;gap:8px}.receipt-viewer-action-btn[_ngcontent-%COMP%]{width:100%;justify-content:center;padding:10px 20px;font-size:13px}.receipt-error[_ngcontent-%COMP%]{padding:20px;font-size:13px}.receipt-error[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:48px}.receipt-error[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:18px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 80px);max-height:calc(100vh - 200px)}}@media (max-width: 480px){.receipt-viewer-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:14px}.receipt-viewer-zoom-level[_ngcontent-%COMP%]{font-size:11px}.zoom-controls[_ngcontent-%COMP%]{gap:3px}.zoom-btn[_ngcontent-%COMP%]{padding:5px 8px;font-size:14px}.receipt-nav-btn[_ngcontent-%COMP%]{width:32px;height:32px;font-size:14px}.receipt-image[_ngcontent-%COMP%]{max-width:calc(100vw - 70px)}.booking-details-modal[_ngcontent-%COMP%]{max-width:95vw!important}.booking-details-modal-body[_ngcontent-%COMP%]{max-height:60vh}}']})};var Ee=function(n){return n[n.QR_CODE=0]="QR_CODE",n[n.AZTEC=1]="AZTEC",n[n.CODABAR=2]="CODABAR",n[n.CODE_39=3]="CODE_39",n[n.CODE_93=4]="CODE_93",n[n.CODE_128=5]="CODE_128",n[n.DATA_MATRIX=6]="DATA_MATRIX",n[n.MAXICODE=7]="MAXICODE",n[n.ITF=8]="ITF",n[n.EAN_13=9]="EAN_13",n[n.EAN_8=10]="EAN_8",n[n.PDF_417=11]="PDF_417",n[n.RSS_14=12]="RSS_14",n[n.RSS_EXPANDED=13]="RSS_EXPANDED",n[n.UPC_A=14]="UPC_A",n[n.UPC_E=15]="UPC_E",n[n.UPC_EAN_EXTENSION=16]="UPC_EAN_EXTENSION",n}(Ee||{}),E_=new Map([[Ee.QR_CODE,"QR_CODE"],[Ee.AZTEC,"AZTEC"],[Ee.CODABAR,"CODABAR"],[Ee.CODE_39,"CODE_39"],[Ee.CODE_93,"CODE_93"],[Ee.CODE_128,"CODE_128"],[Ee.DATA_MATRIX,"DATA_MATRIX"],[Ee.MAXICODE,"MAXICODE"],[Ee.ITF,"ITF"],[Ee.EAN_13,"EAN_13"],[Ee.EAN_8,"EAN_8"],[Ee.PDF_417,"PDF_417"],[Ee.RSS_14,"RSS_14"],[Ee.RSS_EXPANDED,"RSS_EXPANDED"],[Ee.UPC_A,"UPC_A"],[Ee.UPC_E,"UPC_E"],[Ee.UPC_EAN_EXTENSION,"UPC_EAN_EXTENSION"]]);function T_(n){return Object.values(Ee).includes(n)}var to=function(n){return n[n.SCAN_TYPE_CAMERA=0]="SCAN_TYPE_CAMERA",n[n.SCAN_TYPE_FILE=1]="SCAN_TYPE_FILE",n}(to||{}),Qn=function(){function n(){}return n.GITHUB_PROJECT_URL="https://github.com/mebjas/html5-qrcode",n.SCAN_DEFAULT_FPS=2,n.DEFAULT_DISABLE_FLIP=!1,n.DEFAULT_REMEMBER_LAST_CAMERA_USED=!0,n.DEFAULT_SUPPORTED_SCAN_TYPE=[to.SCAN_TYPE_CAMERA,to.SCAN_TYPE_FILE],n}();var $c=function(){function n(t,e){this.format=t,this.formatName=e}return n.prototype.toString=function(){return this.formatName},n.create=function(t){if(!E_.has(t))throw"".concat(t," not in html5QrcodeSupportedFormatsTextMap");return new n(t,E_.get(t))},n}();var Yp=function(){function n(){}return n.createFromText=function(t){var e={text:t};return{decodedText:t,result:e}},n.createFromQrcodeResult=function(t){return{decodedText:t.text,result:t}},n}();var I_=function(n){return n[n.UNKWOWN_ERROR=0]="UNKWOWN_ERROR",n[n.IMPLEMENTATION_ERROR=1]="IMPLEMENTATION_ERROR",n[n.NO_CODE_FOUND_ERROR=2]="NO_CODE_FOUND_ERROR",n}(I_||{}),Yc=function(){function n(){}return n.createFrom=function(t){return{errorMessage:t,type:I_.UNKWOWN_ERROR}},n}();var Xc=function(){function n(t){this.verbose=t}return n.prototype.log=function(t){this.verbose&&console.log(t)},n.prototype.warn=function(t){this.verbose&&console.warn(t)},n.prototype.logError=function(t,e){(this.verbose||e===!0)&&console.error(t)},n.prototype.logErrors=function(t){if(t.length===0)throw"Logger#logError called without arguments";this.verbose&&console.error(t)},n}();function wi(n){return typeof n>"u"||n===null}function A_(n,t,e){return n>e?e:n<t?t:n}var or=function(){function n(){}return n.codeParseError=function(t){return"QR code parse error, error = ".concat(t)},n.errorGettingUserMedia=function(t){return"Error getting userMedia, error = ".concat(t)},n.onlyDeviceSupportedError=function(){return"The device doesn't support navigator.mediaDevices , only supported cameraIdOrConfig in this case is deviceId parameter (string)."},n.cameraStreamingNotSupported=function(){return"Camera streaming not supported by the browser."},n.unableToQuerySupportedDevices=function(){return"Unable to query supported devices, unknown error."},n.insecureContextCameraQueryError=function(){return"Camera access is only supported in secure context like https or localhost."},n.scannerPaused=function(){return"Scanner paused"},n}();var ct=function(){function n(){}return n.scanningStatus=function(){return"Scanning"},n.idleStatus=function(){return"Idle"},n.errorStatus=function(){return"Error"},n.permissionStatus=function(){return"Permission"},n.noCameraFoundErrorStatus=function(){return"No Cameras"},n.lastMatch=function(t){return"Last Match: ".concat(t)},n.codeScannerTitle=function(){return"Code Scanner"},n.cameraPermissionTitle=function(){return"Request Camera Permissions"},n.cameraPermissionRequesting=function(){return"Requesting camera permissions..."},n.noCameraFound=function(){return"No camera found"},n.scanButtonStopScanningText=function(){return"Stop Scanning"}
71,n.scanButtonStartScanningText=function(){return"Start Scanning"},n.torchOnButton=function(){return"Switch On Torch"},n.torchOffButton=function(){return"Switch Off Torch"},n.torchOnFailedMessage=function(){return"Failed to turn on torch"},n.torchOffFailedMessage=function(){return"Failed to turn off torch"},n.scanButtonScanningStarting=function(){return"Launching Camera..."},n.textIfCameraScanSelected=function(){return"Scan an Image File"},n.textIfFileScanSelected=function(){return"Scan using camera directly"},n.selectCamera=function(){return"Select Camera"},n.fileSelectionChooseImage=function(){return"Choose Image"},n.fileSelectionChooseAnother=function(){return"Choose Another"},n.fileSelectionNoImageSelected=function(){return"No image choosen"},n.anonymousCameraPrefix=function(){return"Anonymous Camera"},n.dragAndDropMessage=function(){return"Or drop an image to scan"},n.dragAndDropMessageOnlyImages=function(){return"Or drop an image to scan (other files not supported)"},n.zoom=function(){return"zoom"},n.loadingImage=function(){return"Loading image..."},n.cameraScanAltText=function(){return"Camera based scan"},n.fileScanAltText=function(){return"Fule based scan"},n}();var Xp=function(){function n(){}return n.poweredBy=function(){return"Powered by "},n.reportIssues=function(){return"Report issues"},n}();var Zp=function(){function n(){}return n.isMediaStreamConstraintsValid=function(t,e){if(typeof t!="object"){var i=typeof t;return e.logError("videoConstraints should be of type object, the "+"object passed is of type ".concat(i,"."),!0),!1}for(var o=["autoGainControl","channelCount","echoCancellation","latency","noiseSuppression","sampleRate","sampleSize","volume"],s=new Set(o),m=Object.keys(t),f=0,v=m;f<v.length;f++){var y=v[f];if(s.has(y))return e.logError("".concat(y," is not supported videoConstaints."),!0),!1}return!0},n}();var kt=Ri(R_());var Qp=function(){function n(t,e,i){if(this.formatMap=new Map([[Ee.QR_CODE,kt.BarcodeFormat.QR_CODE],[Ee.AZTEC,kt.BarcodeFormat.AZTEC],[Ee.CODABAR,kt.BarcodeFormat.CODABAR],[Ee.CODE_39,kt.BarcodeFormat.CODE_39],[Ee.CODE_93,kt.BarcodeFormat.CODE_93],[Ee.CODE_128,kt.BarcodeFormat.CODE_128],[Ee.DATA_MATRIX,kt.BarcodeFormat.DATA_MATRIX],[Ee.MAXICODE,kt.BarcodeFormat.MAXICODE],[Ee.ITF,kt.BarcodeFormat.ITF],[Ee.EAN_13,kt.BarcodeFormat.EAN_13],[Ee.EAN_8,kt.BarcodeFormat.EAN_8],[Ee.PDF_417,kt.BarcodeFormat.PDF_417],[Ee.RSS_14,kt.BarcodeFormat.RSS_14],[Ee.RSS_EXPANDED,kt.BarcodeFormat.RSS_EXPANDED],[Ee.UPC_A,kt.BarcodeFormat.UPC_A],[Ee.UPC_E,kt.BarcodeFormat.UPC_E],[Ee.UPC_EAN_EXTENSION,kt.BarcodeFormat.UPC_EAN_EXTENSION]]),this.reverseFormatMap=this.createReverseFormatMap(),!kt)throw"Use html5qrcode.min.js without edit, ZXing not found.";this.verbose=e,this.logger=i;var o=this.createZXingFormats(t),s=new Map;s.set(kt.DecodeHintType.POSSIBLE_FORMATS,o),s.set(kt.DecodeHintType.TRY_HARDER,!1),this.hints=s}return n.prototype.decodeAsync=function(t){var e=this;return new Promise(function(i,o){try{i(e.decode(t))}catch(s){o(s)}})},n.prototype.decode=function(t){var e=new kt.MultiFormatReader(this.verbose,this.hints),i=new kt.HTMLCanvasElementLuminanceSource(t),o=new kt.BinaryBitmap(new kt.HybridBinarizer(i)),s=e.decode(o);return{text:s.text,format:$c.create(this.toHtml5QrcodeSupportedFormats(s.format)),debugData:this.createDebugData()}},n.prototype.createReverseFormatMap=function(){var t=new Map;return this.formatMap.forEach(function(e,i,o){t.set(e,i)}),t},n.prototype.toHtml5QrcodeSupportedFormats=function(t){if(!this.reverseFormatMap.has(t))throw"reverseFormatMap doesn't have ".concat(t);return this.reverseFormatMap.get(t)},n.prototype.createZXingFormats=function(t){for(var e=[],i=0,o=t;i<o.length;i++){var s=o[i];this.formatMap.has(s)?e.push(this.formatMap.get(s)):this.logger.logError("".concat(s," is not supported by")+"ZXingHtml5QrcodeShim")}return e},n.prototype.createDebugData=function(){return{decoderName:"zxing-js"}},n}();var o7=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},r7=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},Kp=function(){function n(t,e,i){if(this.formatMap=new Map([[Ee.QR_CODE,"qr_code"],[Ee.AZTEC,"aztec"],[Ee.CODABAR,"codabar"],[Ee.CODE_39,"code_39"],[Ee.CODE_93,"code_93"],[Ee.CODE_128,"code_
71128"],[Ee.DATA_MATRIX,"data_matrix"],[Ee.ITF,"itf"],[Ee.EAN_13,"ean_13"],[Ee.EAN_8,"ean_8"],[Ee.PDF_417,"pdf417"],[Ee.UPC_A,"upc_a"],[Ee.UPC_E,"upc_e"]]),this.reverseFormatMap=this.createReverseFormatMap(),!n.isSupported())throw"Use html5qrcode.min.js without edit, Use BarcodeDetectorDelegate only if it isSupported();";this.verbose=e,this.logger=i;var o=this.createBarcodeDetectorFormats(t);if(this.detector=new BarcodeDetector(o),!this.detector)throw"BarcodeDetector detector not supported"}return n.isSupported=function(){if(!("BarcodeDetector"in window))return!1;var t=new BarcodeDetector({formats:["qr_code"]});return typeof t<"u"},n.prototype.decodeAsync=function(t){return o7(this,void 0,void 0,function(){var e,i;return r7(this,function(o){switch(o.label){case 0:return[4,this.detector.detect(t)];case 1:if(e=o.sent(),!e||e.length===0)throw"No barcode or QR code detected.";return i=this.selectLargestBarcode(e),[2,{text:i.rawValue,format:$c.create(this.toHtml5QrcodeSupportedFormats(i.format)),debugData:this.createDebugData()}]}})})},n.prototype.selectLargestBarcode=function(t){for(var e=null,i=0,o=0,s=t;o<s.length;o++){var m=s[o],f=m.boundingBox.width*m.boundingBox.height;f>i&&(i=f,e=m)}if(!e)throw"No largest barcode found";return e},n.prototype.createBarcodeDetectorFormats=function(t){for(var e=[],i=0,o=t;i<o.length;i++){var s=o[i];this.formatMap.has(s)?e.push(this.formatMap.get(s)):this.logger.warn("".concat(s," is not supported by")+"BarcodeDetectorDelegate")}return{formats:e}},n.prototype.toHtml5QrcodeSupportedFormats=function(t){if(!this.reverseFormatMap.has(t))throw"reverseFormatMap doesn't have ".concat(t);return this.reverseFormatMap.get(t)},n.prototype.createReverseFormatMap=function(){var t=new Map;return this.formatMap.forEach(function(e,i,o){t.set(e,i)}),t},n.prototype.createDebugData=function(){return{decoderName:"BarcodeDetector"}},n}();var B_=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},N_=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},V_=function(){function n(t,e,i,o){this.EXECUTIONS_TO_REPORT_PERFORMANCE=100,this.executions=0,this.executionResults=[],this.wasPrimaryDecoderUsedInLastDecode=!1,this.verbose=i,e&&Kp.isSupported()?(this.primaryDecoder=new Kp(t,i,o),this.secondaryDecoder=new Qp(t,i,o)):this.primaryDecoder=new Qp(t,i,o)}return n.prototype.decodeAsync=function(t){return B_(this,void 0,void 0,function(){var e;return N_(this,function(i){switch(i.label){case 0:e=performance.now(),i.label=1;case 1:return i.trys.push([1,,3,4]),[4,this.getDecoder().decodeAsync(t)];case 2:return[2,i.sent()];case 3:return this.possiblyLogPerformance(e),[7];case 4:return[2]}})})},n.prototype.decodeRobustlyAsync=function(t){return B_(this,void 0,void 0,function(){var e,i;return N_(this,function(o){switch(o.label){case 0:e=performance.now(),o.label=1;case 1:return o.trys.push([1,3,4,5]),[4,this.primaryDecoder.decodeAsync(t)];case 2:return[2,o.sent()];
71case 3:if(i=o.sent(),this.secondaryDecoder)return[2,this.secondaryDecoder.decodeAsync(t)];throw i;case 4:return this.possiblyLogPerformance(e),[7];case 5:return[2]}})})},n.prototype.getDecoder=function(){return this.secondaryDecoder?this.wasPrimaryDecoderUsedInLastDecode===!1?(this.wasPrimaryDecoderUsedInLastDecode=!0,this.primaryDecoder):(this.wasPrimaryDecoderUsedInLastDecode=!1,this.secondaryDecoder):this.primaryDecoder},n.prototype.possiblyLogPerformance=function(t){if(this.verbose){var e=performance.now()-t;this.executionResults.push(e),this.executions++,this.possiblyFlushPerformanceReport()}},n.prototype.possiblyFlushPerformanceReport=function(){if(!(this.executions<this.EXECUTIONS_TO_REPORT_PERFORMANCE)){for(var t=0,e=0,i=this.executionResults;e<i.length;e++){var o=i[e];t+=o}var s=t/this.executionResults.length;console.log("".concat(s," ms for ").concat(this.executionResults.length," last runs.")),this.executions=0,this.executionResults=[]}},n}();var Jp=function(){var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,o){i.__proto__=o}||function(i,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(i[s]=o[s])},n(t,e)};return function(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");n(t,e);function i(){this.constructor=t}t.prototype=e===null?Object.create(e):(i.prototype=e.prototype,new i)}}(),Qc=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},Kc=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},L_=function(){function n(t,e){this.name=t,this.track=e}return n.prototype.isSupported=function(){return this.track.getCapabilities?this.name in this.track.getCapabilities():!1},n.prototype.apply=function(t){var e={};e[this.name]=t;var i={advanced:[e]};return this.track.applyConstraints(i)},n.prototype.value=function(){var t=this.track.getSettings();if(this.name in t){var e=t[this.name];return e}return null},n}(),a7=function(n){Jp(t,n);function t(e,i){return n.call(this,e,i)||this}return t.prototype.min=function(){return this.getCapabilities().min},t.prototype.max=function(){return this.getCapabilities().max},t.prototype.step=function(){return this.getCapabilities().step},t.prototype.apply=function(e){var i={};i[this.name]=e;var o={advanced:[i]};return this.track.applyConstraints(o)},t.prototype.getCapabilities=function(){this.failIfNotSupported();var e=this.track.getCapabilities(),i=e[this.name];return{min:i.min,max:i.max,step:i.step}},t.prototype.failIfNotSupported=function(){if(!this.isSupported())throw new Error("".concat(this.name," capability not supported"))},t}(L_),s7=function(n){Jp(t,n);function t(e){return n.call(this,"zoom",e)||this}return t}(a7),l7=function(n){Jp(t,n);function t(e){return n.call(this,"torch",e)||this}return t}(L_),c7=function(){function n(t){this.track=t}return n.prototype.zoomFeature=function(){return new s7(this.track)},n.prototype.torchFeature=function(){return new l7(this.track)},n}(),d7=function(){function n(t,e,i){this.isClosed=!1,this.parentElement=t,this.mediaStream=e,this.callbacks=i,this.surface=this.createVideoElement(this.parentElement.clientWidth),t.append(this.surface)}return n.prototype.createVideoElement=function(t){var e=document.createElement("video");return e.style.width="".concat(t,"px"),e.style.display="block",e.muted=!0,e.setAttribute("muted","true"),e.playsInl
71ine=!0,e},n.prototype.setupSurface=function(){var t=this;this.surface.onabort=function(){throw"RenderedCameraImpl video surface onabort() called"},this.surface.onerror=function(){throw"RenderedCameraImpl video surface onerror() called"};var e=function(){var i=t.surface.clientWidth,o=t.surface.clientHeight;t.callbacks.onRenderSurfaceReady(i,o),t.surface.removeEventListener("playing",e)};this.surface.addEventListener("playing",e),this.surface.srcObject=this.mediaStream,this.surface.play()},n.create=function(t,e,i,o){return Qc(this,void 0,void 0,function(){var s,m;return Kc(this,function(f){switch(f.label){case 0:return s=new n(t,e,o),i.aspectRatio?(m={aspectRatio:i.aspectRatio},[4,s.getFirstTrackOrFail().applyConstraints(m)]):[3,2];case 1:f.sent(),f.label=2;case 2:return s.setupSurface(),[2,s]}})})},n.prototype.failIfClosed=function(){if(this.isClosed)throw"The RenderedCamera has already been closed."},n.prototype.getFirstTrackOrFail=function(){if(this.failIfClosed(),this.mediaStream.getVideoTracks().length===0)throw"No video tracks found";return this.mediaStream.getVideoTracks()[0]},n.prototype.pause=function(){this.failIfClosed(),this.surface.pause()},n.prototype.resume=function(t){this.failIfClosed();var e=this,i=function(){setTimeout(t,200),e.surface.removeEventListener("playing",i)};this.surface.addEventListener("playing",i),this.surface.play()},n.prototype.isPaused=function(){return this.failIfClosed(),this.surface.paused},n.prototype.getSurface=function(){return this.failIfClosed(),this.surface},n.prototype.getRunningTrackCapabilities=function(){return this.getFirstTrackOrFail().getCapabilities()},n.prototype.getRunningTrackSettings=function(){return this.getFirstTrackOrFail().getSettings()},n.prototype.applyVideoConstraints=function(t){return Qc(this,void 0,void 0,function(){return Kc(this,function(e){if("aspectRatio"in t)throw"Changing 'aspectRatio' in run-time is not yet supported.";return[2,this.getFirstTrackOrFail().applyConstraints(t)]})})},n.prototype.close=function(){if(this.isClosed)return Promise.resolve();var t=this;return new Promise(function(e,i){var o=t.mediaStream.getVideoTracks(),s=o.length,m=0;t.mediaStream.getVideoTracks().forEach(function(f){t.mediaStream.removeTrack(f),f.stop(),++m,m>=s&&(t.isClosed=!0,t.parentElement.removeChild(t.surface),e())})})},n.prototype.getCapabilities=function(){return new c7(this.getFirstTrackOrFail())},n}(),F_=function(){function n(t){this.mediaStream=t}return n.prototype.render=function(t,e,i){return Qc(this,void 0,void 0,function(){return Kc(this,function(o){return[2,d7.create(t,this.mediaStream,e,i)]})})},n.create=function(t){return Qc(this,void 0,void 0,function(){var e,i;return Kc(this,function(o){switch(o.label){case 0:if(!navigator.mediaDevices)throw"navigator.mediaDevices not supported";return e={audio:!1,video:t},[4,navigator.mediaDevices.getUserMedia(e)];case 1:return i=o.sent(),[2,new n(i)]}})})},n}();var z_=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},U_=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},j_=function(){function n(){}return n.failIfNotSupported=function(){return z_(this,void 0,void 0,function(){return U_(this,function(t){if(!navigator.mediaDevices)throw"navigator.mediaDevices not supported";return[2,new n]})})},n.prototype.create=function(t){return z_(this,void 0,void 0,function(){return U_(this,function(e){return[2,F_.create(t)]})})},n}();var p7=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},m7=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},H_=function(){function n(){}return n.retrieve=function(){if(navigator.mediaDevices)return n.getCamerasFromMediaDevices();var t=MediaStreamTrack;return MediaStreamTrack&&t.getSources?n.getCamerasFromMediaStreamTrack():n.rejectWithError()},n.rejectWithError=function(){var t=or.unableToQuerySupportedDevices();return n.isHttpsOrLocalhost()||(t=or.insecureContextCameraQueryError()),Promise.reject(t)},n.isHttpsOrLocalhost=function(){if(location.protocol==="https:")return!0;var t=location.host.split(":")[0];return t==="127.0.0.1"||t==="localhost"},n.getCamerasFromMediaDevices=function(){return p7(this,void 0,void 0,function(){var t,e,i,o,s,m,f;return m7(this,function(v){switch(v.label){case 0:return t=function(y){for(var M=y.getVideoTracks(),I=0,B=M;I<B.length;I++){var N=B[I];N.enabled=!1,N.stop(),y.removeTrack(N)}},[4,navigator.mediaDevices.getUserMedia({audio:!1,video:!0})];case 1:return e=v.sent(),[4,navigator.mediaDevices.enumerateDevices()];case 2:for(i=v.sent(),o=[],s=0,m=i;s<m.length;s++)f=m[s],f.kind==="videoinput"&&o.push({id:f.deviceId,label:f.label});
71return t(e),[2,o]}})})},n.getCamerasFromMediaStreamTrack=function(){return new Promise(function(t,e){var i=function(s){for(var m=[],f=0,v=s;f<v.length;f++){var y=v[f];y.kind==="video"&&m.push({id:y.id,label:y.label})}t(m)},o=MediaStreamTrack;o.getSources(i)})},n}();var Wt=function(n){return n[n.UNKNOWN=0]="UNKNOWN",n[n.NOT_STARTED=1]="NOT_STARTED",n[n.SCANNING=2]="SCANNING",n[n.PAUSED=3]="PAUSED",n}(Wt||{}),g7=function(){function n(){this.state=Wt.NOT_STARTED,this.onGoingTransactionNewState=Wt.UNKNOWN}return n.prototype.directTransition=function(t){this.failIfTransitionOngoing(),this.validateTransition(t),this.state=t},n.prototype.startTransition=function(t){return this.failIfTransitionOngoing(),this.validateTransition(t),this.onGoingTransactionNewState=t,this},n.prototype.execute=function(){if(this.onGoingTransactionNewState===Wt.UNKNOWN)throw"Transaction is already cancelled, cannot execute().";var t=this.onGoingTransactionNewState;this.onGoingTransactionNewState=Wt.UNKNOWN,this.directTransition(t)},n.prototype.cancel=function(){if(this.onGoingTransactionNewState===Wt.UNKNOWN)throw"Transaction is already cancelled, cannot cancel().";this.onGoingTransactionNewState=Wt.UNKNOWN},n.prototype.getState=function(){return this.state},n.prototype.failIfTransitionOngoing=function(){if(this.onGoingTransactionNewState!==Wt.UNKNOWN)throw"Cannot transition to a new state, already under transition"},n.prototype.validateTransition=function(t){switch(this.state){case Wt.UNKNOWN:throw"Transition from unknown is not allowed";case Wt.NOT_STARTED:this.failIfNewStateIs(t,[Wt.PAUSED]);break;case Wt.SCANNING:break;case Wt.PAUSED:break}},n.prototype.failIfNewStateIs=function(t,e){for(var i=0,o=e;i<o.length;i++){var s=o[i];if(t===s)throw"Cannot transition from ".concat(this.state," to ").concat(t)}},n}(),u7=function(){function n(t){this.stateManager=t}return n.prototype.startTransition=function(t){return this.stateManager.startTransition(t)},n.prototype.directTransition=function(t){this.stateManager.directTransition(t)},n.prototype.getState=function(){return this.stateManager.getState()},n.prototype.canScanFile=function(){return this.stateManager.getState()===Wt.NOT_STARTED},n.prototype.isScanning=function(){return this.stateManager.getState()!==Wt.NOT_STARTED},n.prototype.isStrictlyScanning=function(){return this.stateManager.getState()===Wt.SCANNING},n.prototype.isPaused=function(){return this.stateManager.getState()===Wt.PAUSED},n}();var W_=function(){function n(){}return n.create=function(){return new u7(new g7)},n}();
71var f7=function(){var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,o){i.__proto__=o}||function(i,o){for(var s in o)Object.prototype.hasOwnProperty.call(o,s)&&(i[s]=o[s])},n(t,e)};return function(t,e){if(typeof e!="function"&&e!==null)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");n(t,e);function i(){this.constructor=t}t.prototype=e===null?Object.create(e):(i.prototype=e.prototype,new i)}}(),di=function(n){f7(t,n);function t(){return n!==null&&n.apply(this,arguments)||this}return t.DEFAULT_WIDTH=300,t.DEFAULT_WIDTH_OFFSET=2,t.FILE_SCAN_MIN_HEIGHT=300,t.FILE_SCAN_HIDDEN_CANVAS_PADDING=100,t.MIN_QR_BOX_SIZE=50,t.SHADED_LEFT=1,t.SHADED_RIGHT=2,t.SHADED_TOP=3,t.SHADED_BOTTOM=4,t.SHADED_REGION_ELEMENT_ID="qr-shaded-region",t.VERBOSE=!1,t.BORDER_SHADER_DEFAULT_COLOR="#ffffff",t.BORDER_SHADER_MATCH_COLOR="rgb(90, 193, 56)",t}(Qn),h7=function(){function n(t,e){this.logger=e,this.fps=di.SCAN_DEFAULT_FPS,t?(t.fps&&(this.fps=t.fps),this.disableFlip=t.disableFlip===!0,this.qrbox=t.qrbox,this.aspectRatio=t.aspectRatio,this.videoConstraints=t.videoConstraints):this.disableFlip=di.DEFAULT_DISABLE_FLIP}return n.prototype.isMediaStreamConstraintsValid=function(){return this.videoConstraints?Zp.isMediaStreamConstraintsValid(this.videoConstraints,this.logger):(this.logger.logError("Empty videoConstraints",!0),!1)},n.prototype.isShadedBoxEnabled=function(){return!wi(this.qrbox)},n.create=function(t,e){return new n(t,e)},n}(),$r=function(){function n(t,e){if(this.element=null,this.canvasElement=null,this.scannerPausedUiElement=null,this.hasBorderShaders=null,this.borderShaders=null,this.qrMatch=null,this.renderedCamera=null,this.qrRegion=null,this.context=null,this.lastScanImageFile=null,this.isScanning=!1,!document.getElementById(t))throw"HTML Element with id=".concat(t," not found");this.elementId=t,this.verbose=!1;var i,o;typeof e=="boolean"?this.verbose=e===!0:e&&(o=e,this.verbose=o.verbose===!0,i=o.experimentalFeatures),this.logger=new Xc(this.verbose),this.qrcode=new V_(this.getSupportedFormats(e),this.getUseBarCodeDetectorIfSupported(o),this.verbose,this.logger),this.foreverScanTimeout,this.shouldScan=!0,this.stateManagerProxy=W_.create()}return n.prototype.start=function(t,e,i,o){var s=this;if(!t)throw"cameraIdOrConfig is required";if(!i||typeof i!="function")throw"qrCodeSuccessCallback is required and should be a function.";var m;o?m=o:m=this.verbose?this.logger.log:function(){};var f=h7.create(e,this.logger);this.clearElement();var v=!1;f.videoConstraints&&(f.isMediaStreamConstraintsValid()?v=!0:this.logger.logError("'videoConstraints' is not valid 'MediaStreamConstraints, it will be ignored.'",!0));var y=v,M=document.getElementById(this.elementId),I=M.clientWidth?M.clientWidth:di.DEFAULT_WIDTH;M.style.position="relative",this.shouldScan=!0,this.element=M;var B=this,N=this.stateManagerProxy.startTransition(Wt.SCANNING);return new Promise(function(H,W){var G=y?f.videoConstraints:B.createVideoConstraints(t);if(!G){N.cancel(),W("videoConstraints should be defined");return}var Z={};(!y||f.aspectRatio)&&(Z.aspectRatio=f.aspectRatio);var Q={onRenderSurfaceReady:function(j,Y){B.setupUi(j,Y,f),B.isScanning=!0,B.foreverScan(f,i,m)}};j_.failIfNotSupported().then(function(j){j.create(G).then(function(Y){return Y.render(s.element,Z,Q).then(function(U){B.renderedCamera=U,N.execute(),H(null)}).catch(function(U){N.cancel(),W(U)})}).catch(function(Y){N.cancel(),W(or.errorGettingUserMedia(Y))})}).catch(function(j){N.cancel(),W(or.cameraStreamingNotSupported())})})},n.prototype.pause=function(t){if(!this.stateManagerProxy.isStrictlyScanning())throw"Cannot pause, scanner is not scanning.";this.stateManagerProxy.directTransition(Wt.PAUSED),this.showPausedState(),(wi(t)||t!==!0)&&(t=!1),t&&this.renderedCamera&&this.renderedCamera.pause()},n.prototype.resume=function(){if(!this.stateManagerProxy.isPaused())throw"Cannot result, scanner is not paused.";if(!this.renderedCamera)throw"renderedCamera doesn't exist while trying resume()";var t=this,e=function(){t.stateManagerProxy.directTransition(Wt.SCANNING),t.hidePausedState()};if(!this.renderedCamera.isPaused()){e();return}this.renderedCamera.resume(function(){e()})},n.prototype.getState=function(){return this.stateManagerProxy.getState()},n.prototype.stop=function(){var t=this;if(!this.stateManagerProxy.isScanning())throw"Cannot stop, scanner is not running or paused.";var e=this.stateManagerProxy.startTransition(Wt.NOT_STARTED);this.shouldScan=!1,this.foreverScanTimeout&&clearTimeout(this.foreverScanTimeout);var i=function(){if(t.element){var s=document.getElementById(di.SHADED_REGION_ELEMENT_ID);s&&t.element.removeChild(s)}},o=this;return this.renderedCamera.close().then(function(){return o.renderedCamera=null,o.element&&(o.element.removeChild(o.canvasElement),o.canvasElement=null),i(),o.qrRegion&&(o.qrRegion=null),o.context&&(o.context=null),e.execute(),o.hidePausedState(),o.isScanning=!1,Promise.resolve()})},n.prototype.scanFile=function(t,e){return this.scanFileV2(t,e).then(function(i){return i.decodedText})},n.prototype.scanFileV2=function(t,e){var i=this;if(!t||!(t instanceof File))throw"imageFile argument is mandatory and should be instance of File. Use 'event.target.files[0]'.";if(wi(e)&&(e=!0),!this.stateManagerProxy.canScanFile())throw"Cannot start file scan - ongoing camera scan";return new Promise(function(o,s){i.possiblyCloseLastScanImageFile(),i.clearElement(),i.lastScanImageFile=URL.createObjectURL(t);var m=new Image;m.onload=function(){var f=m.width,v=m.height,y=document.getElementById(i.elementId),M=y.clientWidth?y.clientWidth:di.DEFAULT_WIDTH,I=Math.max(y.clientHeight?y.clientHeight:v,di.FILE_SCAN_MIN_HEIGHT),B=i.computeCanvasDrawConfig(f,v,M,I);if(e){var N=i.createCanvasElement(M,I,"qr-canvas-visible");N.style.display="inline-block",y.appendChild(N);var H=N.getContext("2d");if(!H)throw"Unable to get 2d context from canvas";H.canvas.width=M,H.canvas.height=I,H.drawImage(m,0,0,f,v,B.x,B.y,B.width,B.height)}var W=di.FILE_SCAN_HIDDEN_CANVAS_PADDING,G=Math.max(m.width,B.width),Z=Math.max(m.height,B.height),Q=G+2*W,
71j=Z+2*W,Y=i.createCanvasElement(Q,j);y.appendChild(Y);var U=Y.getContext("2d");if(!U)throw"Unable to get 2d context from canvas";U.canvas.width=Q,U.canvas.height=j,U.drawImage(m,0,0,f,v,W,W,G,Z);try{i.qrcode.decodeRobustlyAsync(Y).then(function(K){o(Yp.createFromQrcodeResult(K))}).catch(s)}catch(K){s("QR code parse error, error = ".concat(K))}},m.onerror=s,m.onabort=s,m.onstalled=s,m.onsuspend=s,m.src=URL.createObjectURL(t)})},n.prototype.clear=function(){this.clearElement()},n.getCameras=function(){return H_.retrieve()},n.prototype.getRunningTrackCapabilities=function(){return this.getRenderedCameraOrFail().getRunningTrackCapabilities()},n.prototype.getRunningTrackSettings=function(){return this.getRenderedCameraOrFail().getRunningTrackSettings()},n.prototype.getRunningTrackCameraCapabilities=function(){return this.getRenderedCameraOrFail().getCapabilities()},n.prototype.applyVideoConstraints=function(t){if(t){if(!Zp.isMediaStreamConstraintsValid(t,this.logger))throw"invalid videoConstaints passed, check logs for more details"}else throw"videoConstaints is required argument.";return this.getRenderedCameraOrFail().applyVideoConstraints(t)},n.prototype.getRenderedCameraOrFail=function(){if(this.renderedCamera==null)throw"Scanning is not in running state, call this API only when QR code scanning using camera is in running state.";return this.renderedCamera},n.prototype.getSupportedFormats=function(t){var e=[Ee.QR_CODE,Ee.AZTEC,Ee.CODABAR,Ee.CODE_39,Ee.CODE_93,Ee.CODE_128,Ee.DATA_MATRIX,Ee.MAXICODE,Ee.ITF,Ee.EAN_13,Ee.EAN_8,Ee.PDF_417,Ee.RSS_14,Ee.RSS_EXPANDED,Ee.UPC_A,Ee.UPC_E,Ee.UPC_EAN_EXTENSION];if(!t||typeof t=="boolean"||!t.formatsToSupport)return e;if(!Array.isArray(t.formatsToSupport))throw"configOrVerbosityFlag.formatsToSupport should be undefined or an array.";if(t.formatsToSupport.length===0)throw"Atleast 1 formatsToSupport is needed.";for(var i=[],o=0,s=t.formatsToSupport;o<s.length;o++){var m=s[o];T_(m)?i.push(m):this.logger.warn("Invalid format: ".concat(m," passed in config, ignoring."))}if(i.length===0)throw"None of formatsToSupport match supported values.";return i},n.prototype.getUseBarCodeDetectorIfSupported=function(t){if(wi(t))return!0;if(!wi(t.useBarCodeDetectorIfSupported))return t.useBarCodeDetectorIfSupported!==!1;if(wi(t.experimentalFeatures))return!0;var e=t.experimentalFeatures;return wi(e.useBarCodeDetectorIfSupported)?!0:e.useBarCodeDetectorIfSupported!==!1},n.prototype.validateQrboxSize=function(t,e,i){var o=this,s=i.qrbox;this.validateQrboxConfig(s);var m=this.toQrdimensions(t,e,s),f=function(y){if(y<di.MIN_QR_BOX_SIZE)throw"minimum size of 'config.qrbox' dimension value is"+" ".concat(di.MIN_QR_BOX_SIZE,"px.")},v=function(y){return y>t&&(o.logger.warn("`qrbox.width` or `qrbox` is larger than the width of the root element. The width will be truncated to the width of root element."),y=t),y};f(m.width),f(m.height),m.width=v(m.width)},n.prototype.validateQrboxConfig=function(t){if(typeof t!="number"&&typeof t!="function"&&(t.width===void 0||t.height===void 0))throw"Invalid instance of QrDimensions passed for 'config.qrbox'. Both 'width' and 'height' should be set."},n.prototype.toQrdimensions=function(t,e,i){if(typeof i=="number")return{width:i,height:i};if(typeof i=="function")try{return i(t,e)}catch(o){throw new Error("qrbox config was passed as a function but it failed with unknown error"+o)}return i},n.prototype.setupUi=function(t,e,i){i.isShadedBoxEnabled()&&this.validateQrboxSize(t,e,i);var o=wi(i.qrbox)?{width:t,height:e}:i.qrbox;this.validateQrboxConfig(o);var s=this.toQrdimensions(t,e,o);s.height>e&&this.logger.warn("[Html5Qrcode] config.qrbox has height that isgreater than the height of the video stream. Shading will be ignored");var m=i.isShadedBoxEnabled()&&s.height<=e,f={x:0,y:0,width:t,height:e},v=m?this.getShadedRegionBounds(t,e,s):f,y=this.createCanvasElement(v.width,v.height),M={willReadFrequently:!0},I=y.getContext("2d",M);I.canvas.width=v.width,I.canvas.height=v.height,this.element.append(y),m&&this.possiblyInsertShadingElement(this.element,t,e,s),this.createScannerPausedUiElement(this.element),this.qrRegion=v,this.context=I,this.canvasElement=y},n.prototype.createScannerPausedUiElement=function(t){var e=document.createElement("div");e.innerText=or.scannerPaused(),e.style.display="none",e.style.position="absolute",e.style.top="0px",e.style.zIndex="1",e.style.background="rgba(9, 9, 9, 0.46)",e.style.color="#FFECEC",e.style.textAlign="center",e.style.width="100%",t.appendChild(e),this.scannerPausedUiElement=e},n.prototype.scanContext=function(t,e){var i=this;return this.stateManagerProxy.isPaused()?Promise.resolve(!1):this.qrcode.decodeAsync(this.canvasElement).then(function(o){return t(o.text,Yp.createFromQrcodeResult(o)),i.possiblyUpdateShaders(!0),!0}).catch(function(o){i.possiblyUpdateShaders(!1);var s=or.codeParseError(o);return e(s,Yc.createFrom(s)),!1})}
71,n.prototype.foreverScan=function(t,e,i){var o=this;if(this.shouldScan&&this.renderedCamera){var s=this.renderedCamera.getSurface(),m=s.videoWidth/s.clientWidth,f=s.videoHeight/s.clientHeight;if(!this.qrRegion)throw"qrRegion undefined when localMediaStream is ready.";var v=this.qrRegion.width*m,y=this.qrRegion.height*f,M=this.qrRegion.x*m,I=this.qrRegion.y*f;this.context.drawImage(s,M,I,v,y,0,0,this.qrRegion.width,this.qrRegion.height);var B=function(){o.foreverScanTimeout=setTimeout(function(){o.foreverScan(t,e,i)},o.getTimeoutFps(t.fps))};this.scanContext(e,i).then(function(N){!N&&t.disableFlip!==!0?(o.context.translate(o.context.canvas.width,0),o.context.scale(-1,1),o.scanContext(e,i).finally(function(){B()})):B()}).catch(function(N){o.logger.logError("Error happend while scanning context",N),B()})}},n.prototype.createVideoConstraints=function(t){if(typeof t=="string")return{deviceId:{exact:t}};if(typeof t=="object"){var e="facingMode",i="deviceId",o={user:!0,environment:!0},s="exact",m=function(H){if(H in o)return!0;throw"config has invalid 'facingMode' value = "+"'".concat(H,"'")},f=Object.keys(t);if(f.length!==1)throw"'cameraIdOrConfig' object should have exactly 1 key,"+" if passed as an object, found ".concat(f.length," keys");var v=Object.keys(t)[0];if(v!==e&&v!==i)throw"Only '".concat(e,"' and '").concat(i,"' ")+" are supported for 'cameraIdOrConfig'";if(v===e){var y=t.facingMode;if(typeof y=="string"){if(m(y))return{facingMode:y}}else if(typeof y=="object")if(s in y){if(m(y["".concat(s)]))return{facingMode:{exact:y["".concat(s)]}}}else throw"'facingMode' should be string or object with"+" ".concat(s," as key.");else{var M=typeof y;throw"Invalid type of 'facingMode' = ".concat(M)}}else{var I=t.deviceId;if(typeof I=="string")return{deviceId:I};if(typeof I=="object"){if(s in I)return{deviceId:{exact:I["".concat(s)]}};throw"'deviceId' should be string or object with"+" ".concat(s," as key.")}else{var B=typeof I;throw"Invalid type of 'deviceId' = ".concat(B)}}}var N=typeof t;throw"Invalid type of 'cameraIdOrConfig' = ".concat(N)},n.prototype.computeCanvasDrawConfig=function(t,e,i,o){if(t<=i&&e<=o){var s=(i-t)/2,m=(o-e)/2;return{x:s,y:m,width:t,height:e}}else{var f=t,v=e;return t>i&&(e=i/t*e,t=i),e>o&&(t=o/e*t,e=o),this.logger.log("Image downsampled from "+"".concat(f,"X").concat(v)+" to ".concat(t,"X").concat(e,".")),this.computeCanvasDrawConfig(t,e,i,o)}},n.prototype.clearElement=function(){if(this.stateManagerProxy.isScanning())throw"Cannot clear while scan is ongoing, close it first.";var t=document.getElementById(this.elementId);t&&(t.innerHTML="")},n.prototype.possiblyUpdateShaders=function(t){this.qrMatch!==t&&(this.hasBorderShaders&&this.borderShaders&&this.borderShaders.length&&this.borderShaders.forEach(function(e){e.style.backgroundColor=t?di.BORDER_SHADER_MATCH_COLOR:di.BORDER_SHADER_DEFAULT_COLOR}),this.qrMatch=t)},n.prototype.possiblyCloseLastScanImageFile=function(){this.lastScanImageFile&&(URL.revokeObjectURL(this.lastScanImageFile),this.lastScanImageFile=null)},n.prototype.createCanvasElement=function(t,e,i){var o=t,s=e,m=document.createElement("canvas");return m.style.width="".concat(o,"px"),m.style.height="".concat(s,"px"),m.style.display="none",m.id=wi(i)?"qr-canvas":i,m},n.prototype.getShadedRegionBounds=function(t,e,i){if(i.width>t||i.height>e)throw"'config.qrbox' dimensions should not be greater than the dimensions of the root HTML element.";return{x:(t-i.width)/2,y:(e-i.height)/2,width:i.width,height:i.height}},n.prototype.possiblyInsertShadingElement=function(t,e,i,o){if(!(e-o.width<1||i-o.height<1)){var s=document.createElement("div");s.style.position="absolute";var m=(e-o.width)/2,f=(i-o.height)/2;if(s.style.borderLeft="".concat(m,"px solid rgba(0, 0, 0, 0.48)"),s.style.borderRight="".concat(m,"px solid rgba(0, 0, 0, 0.48)"),s.style.borderTop="".concat(f,"px solid rgba(0, 0, 0, 0.48)"),s.style.borderBottom="".concat(f,"px solid rgba(0, 0, 0, 0.48)"),s.style.boxSizing="border-box",s.style.top="0px",s.style.bottom="0px",s.style.left="0px",s.style.right="0px",s.id="".concat(di.SHADED_REGION_ELEMENT_ID),e-o.width<11||i-o.height<11)this.hasBorderShaders=!1;else{var v=5,y=40;this.insertShaderBorders(s,y,v,-v,null,0,!0),this.insertShaderBorders(s,y,v,-v,null,0,!1),this.insertShaderBorders(s,y,v,null,-v,0,!0),this.insertShaderBorders(s,y,v,null,-v,0,!1),this.insertShaderBorders(s,v,y+v,
71-v,null,-v,!0),this.insertShaderBorders(s,v,y+v,null,-v,-v,!0),this.insertShaderBorders(s,v,y+v,-v,null,-v,!1),this.insertShaderBorders(s,v,y+v,null,-v,-v,!1),this.hasBorderShaders=!0}t.append(s)}},n.prototype.insertShaderBorders=function(t,e,i,o,s,m,f){var v=document.createElement("div");v.style.position="absolute",v.style.backgroundColor=di.BORDER_SHADER_DEFAULT_COLOR,v.style.width="".concat(e,"px"),v.style.height="".concat(i,"px"),o!==null&&(v.style.top="".concat(o,"px")),s!==null&&(v.style.bottom="".concat(s,"px")),f?v.style.left="".concat(m,"px"):v.style.right="".concat(m,"px"),this.borderShaders||(this.borderShaders=[]),this.borderShaders.push(v),t.appendChild(v)},n.prototype.showPausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="block"},n.prototype.hidePausedState=function(){if(!this.scannerPausedUiElement)throw"[internal error] scanner paused UI element not found";this.scannerPausedUiElement.style.display="none"},n.prototype.getTimeoutFps=function(t){return 1e3/t},n}();var em="data:image/svg+xml;base64,",G_=em+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzNzEuNjQzIDM3MS42NDMiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDM3MS42NDMgMzcxLjY0MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+PHBhdGggZD0iTTEwNS4wODQgMzguMjcxaDE2My43Njh2MjBIMTA1LjA4NHoiLz48cGF0aCBkPSJNMzExLjU5NiAxOTAuMTg5Yy03LjQ0MS05LjM0Ny0xOC40MDMtMTYuMjA2LTMyLjc0My0yMC41MjJWMzBjMC0xNi41NDItMTMuNDU4LTMwLTMwLTMwSDEyNS4wODRjLTE2LjU0MiAwLTMwIDEzLjQ1OC0zMCAzMHYxMjAuMTQzaC04LjI5NmMtMTYuNTQyIDAtMzAgMTMuNDU4LTMwIDMwdjEuMzMzYTI5LjgwNCAyOS44MDQgMCAwIDAgNC42MDMgMTUuOTM5Yy03LjM0IDUuNDc0LTEyLjEwMyAxNC4yMjEtMTIuMTAzIDI0LjA2MXYxLjMzM2MwIDkuODQgNC43NjMgMTguNTg3IDEyLjEwMyAyNC4wNjJhMjkuODEgMjkuODEgMCAwIDAtNC42MDMgMTUuOTM4djEuMzMzYzAgMTYuNTQyIDEzLjQ1OCAzMCAzMCAzMGg4LjMyNGMuNDI3IDExLjYzMSA3LjUwMyAyMS41ODcgMTcuNTM0IDI2LjE3Ny45MzEgMTAuNTAzIDQuMDg0IDMwLjE4NyAxNC43NjggNDUuNTM3YTkuOTg4IDkuOTg4IDAgMCAwIDguMjE2IDQuMjg4IDkuOTU4IDkuOTU4IDAgMCAwIDUuNzA0LTEuNzkzYzQuNTMzLTMuMTU1IDUuNjUtOS4zODggMi40OTUtMTMuOTIxLTYuNzk4LTkuNzY3LTkuNjAyLTIyLjYwOC0xMC43Ni0zMS40aDgyLjY4NWMuMjcyLjQxNC41NDUuODE4LjgxNSAxLjIxIDMuMTQyIDQuNTQxIDkuMzcyIDUuNjc5IDEzLjkxMyAyLjUzNCA0LjU0Mi0zLjE0MiA1LjY3Ny05LjM3MSAyLjUzNS0xMy45MTMtMTEuOTE5LTE3LjIyOS04Ljc4Ny0zNS44ODQgOS41ODEtNTcuMDEyIDMuMDY3LTIuNjUyIDEyLjMwNy0xMS43MzIgMTEuMjE3LTI0LjAzMy0uODI4LTkuMzQzLTcuMTA5LTE3LjE5NC0xOC42NjktMjMuMzM3YTkuODU3IDkuODU3IDAgMCAwLTEuMDYxLS40ODZjLS40NjYtLjE4Mi0xMS40MDMtNC41NzktOS43NDEtMTUuNzA2IDEuMDA3LTYuNzM3IDE0Ljc2OC04LjI3MyAyMy43NjYtNy42NjYgMjMuMTU2IDEuNTY5IDM5LjY5OCA3LjgwMyA0Ny44MzYgMTguMDI2IDUuNzUyIDcuMjI1IDcuNjA3IDE2LjYyMyA1LjY3MyAyOC43MzMtLjQxMyAyLjU4NS0uODI0IDUuMjQxLTEuMjQ1IDcuOTU5LTUuNzU2IDM3LjE5NC0xMi45MTkgODMuNDgzLTQ5Ljg3IDExNC42NjEtNC4yMjEgMy41NjEtNC43NTYgOS44Ny0xLjE5NCAxNC4wOTJhOS45OCA5Ljk4IDAgMCAwIDcuNjQ4IDMuNTUxIDkuOTU1IDkuOTU1IDAgMCAwIDYuNDQ0LTIuMzU4YzQyLjY3Mi0zNi4wMDUgNTAuODAyLTg4LjUzMyA1Ni43MzctMTI2Ljg4OC40MTUtMi42ODQuODIxLTUuMzA5IDEuMjI5LTcuODYzIDIuODM0LTE3LjcyMS0uNDU1LTMyLjY0MS05Ljc3Mi00NC4zNDV6bS0yMzIuMzA4IDQyLjYyYy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM2MwLTUuNTE0IDQuNDg2LTEwIDEwLTEwaDE1djIxLjMzM2gtMTV6bS0yLjUtNTIuNjY2YzAtNS41MTQgNC40ODYtMTAgMTAtMTBoNy41djIxLjMzM2gtNy41Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi0xLjMzM3ptMTcuNSA5My45OTloLTcuNWMtNS41MTQgMC0xMC00LjQ4Ni0xMC0xMHYtMS4zMzNjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGg3LjV2MjEuMzMzem0zMC43OTYgMjguODg3Yy01LjUxNCAwLTEwLTQuNDg2LTEwLTEwdi04LjI3MWg5MS40NTdjLS44NTEgNi42NjgtLjQzNyAxMi43ODcuNzMxIDE4LjI3MWgtODIuMTg4em03OS40ODItMTEzLjY5OGMtMy4xMjQgMjAuOTA2IDEyLjQyNyAzMy4xODQgMjEuNjI1IDM3LjA0IDUuNDQxIDIuOTY4IDcuNTUxIDUuNjQ3IDcuNzAxIDcuMTg4LjIxIDIuMTUtMi41NTMgNS42ODQtNC40NzcgNy4yNTEtLjQ4Mi4zNzgtLjkyOS44LTEuMzM1IDEuMjYxLTYuOTg3IDcuOTM2LTExLjk4MiAxNS41Mi0xNS40MzIgMjIuNjg4aC05Ny41NjRWMzBjMC01LjUxNCA0LjQ4Ni0xMCAxMC0xMGgxMjMuNzY5YzUuNTE0IDAgMTAgNC40ODYgMTAgMTB2MTM1LjU3OWMtMy4wMzItLjM4MS02LjE1LS42OTQtOS4zODktLjkxNC0yNS4xNTktMS42OTQtNDIuMzcgNy43NDgtNDQuODk4IDI0LjY2NnoiLz48cGF0aCBkPSJNMTc5LjEyOSA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXpNMTcyLjYyOSAxNDIuODZoLTEyLjU2VjEzMC44YTUgNSAwIDEgMC0xMCAwdjE3LjA2MWE1IDUgMCAwIDAgNSA1aDE3LjU2YTUgNSAwIDEgMCAwLTEwLjAwMXpNMjE2LjU2OCA4My4xNjdoLTI0LjA2YTUgNSAwIDAgMC01IDV2MjQuMDYxYTUgNSAwIDAgMCA1IDVoMjQuMDZhNSA1IDAgMCAwIDUtNVY4OC4xNjdhNSA1IDAgMCAwLTUtNXptLTUgMjQuMDYxaC0xNC4wNlY5My4xNjdoMTQuMDZ2MTQuMDYxek0yMTEuNjY5IDEyNS45MzZIMTk3LjQxYTUgNSAwIDAgMC01IDV2MTQuMjU3YTUgNSAwIDAgMCA1IDVoMTQuMjU5YTUgNSAwIDAgMCA1LTV2LTE0LjI1N2E1IDUgMCAwIDAtNS01eiIvPjwvc3ZnPg==",q_=em+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA1OS4wMTggNTkuMDE4IiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA1OS4wMTggNTkuMDE4IiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJtNTguNzQxIDU0LjgwOS01Ljk2OS02LjI0NGExMC43NCAxMC43NCAwIDAgMCAyLjgyLTcuMjVjMC01Ljk1My00Ljg0My0xMC43OTYtMTAuNzk2LTEwLjc5NlMzNCAzNS4zNjEgMzQgNDEuMzE0IDM4Ljg0MyA1Mi4xMSA0NC43OTYgNTIuMTFjMi40NDEgMCA0LjY4OC0uODI0IDYuNDk5LTIuMTk2bDYuMDAxIDYuMjc3YS45OTguOTk4IDAgMCAwIDEuNDE0LjAzMiAxI
71DEgMCAwIDAgLjAzMS0xLjQxNHpNMzYgNDEuMzE0YzAtNC44NSAzLjk0Ni04Ljc5NiA4Ljc5Ni04Ljc5NnM4Ljc5NiAzLjk0NiA4Ljc5NiA4Ljc5Ni0zLjk0NiA4Ljc5Ni04Ljc5NiA4Ljc5NlMzNiA0Ni4xNjQgMzYgNDEuMzE0ek0xMC40MzEgMTYuMDg4YzAgMy4wNyAyLjQ5OCA1LjU2OCA1LjU2OSA1LjU2OHM1LjU2OS0yLjQ5OCA1LjU2OS01LjU2OGMwLTMuMDcxLTIuNDk4LTUuNTY5LTUuNTY5LTUuNTY5cy01LjU2OSAyLjQ5OC01LjU2OSA1LjU2OXptOS4xMzggMGMwIDEuOTY4LTEuNjAyIDMuNTY4LTMuNTY5IDMuNTY4cy0zLjU2OS0xLjYwMS0zLjU2OS0zLjU2OCAxLjYwMi0zLjU2OSAzLjU2OS0zLjU2OSAzLjU2OSAxLjYwMSAzLjU2OSAzLjU2OXoiLz48cGF0aCBkPSJtMzAuODgyIDI4Ljk4NyA5LjE4LTEwLjA1NCAxMS4yNjIgMTAuMzIzYTEgMSAwIDAgMCAxLjM1MS0xLjQ3NWwtMTItMTFhMSAxIDAgMCAwLTEuNDE0LjA2M2wtOS43OTQgMTAuNzI3LTQuNzQzLTQuNzQzYTEuMDAzIDEuMDAzIDAgMCAwLTEuMzY4LS4wNDRMNi4zMzkgMzcuNzY4YTEgMSAwIDEgMCAxLjMyMiAxLjUwMWwxNi4zMTMtMTQuMzYyIDcuMzE5IDcuMzE4YS45OTkuOTk5IDAgMSAwIDEuNDE0LTEuNDE0bC0xLjgyNS0xLjgyNHoiLz48cGF0aCBkPSJNMzAgNDYuNTE4SDJ2LTQyaDU0djI4YTEgMSAwIDEgMCAyIDB2LTI5YTEgMSAwIDAgMC0xLTFIMWExIDEgMCAwIDAtMSAxdjQ0YTEgMSAwIDAgMCAxIDFoMjlhMSAxIDAgMSAwIDAtMnoiLz48L3N2Zz4=",tm=em+"PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA0NjAgNDYwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0NjAgNDYwIiB4bWw6c3BhY2U9InByZXNlcnZlIj48cGF0aCBkPSJNMjMwIDBDMTAyLjk3NSAwIDAgMTAyLjk3NSAwIDIzMHMxMDIuOTc1IDIzMCAyMzAgMjMwIDIzMC0xMDIuOTc0IDIzMC0yMzBTMzU3LjAyNSAwIDIzMCAwem0zOC4zMzMgMzc3LjM2YzAgOC42NzYtNy4wMzQgMTUuNzEtMTUuNzEgMTUuNzFoLTQzLjEwMWMtOC42NzYgMC0xNS43MS03LjAzNC0xNS43MS0xNS43MVYyMDIuNDc3YzAtOC42NzYgNy4wMzMtMTUuNzEgMTUuNzEtMTUuNzFoNDMuMTAxYzguNjc2IDAgMTUuNzEgNy4wMzMgMTUuNzEgMTUuNzFWMzc3LjM2ek0yMzAgMTU3Yy0yMS41MzkgMC0zOS0xNy40NjEtMzktMzlzMTcuNDYxLTM5IDM5LTM5IDM5IDE3LjQ2MSAzOSAzOS0xNy40NjEgMzktMzkgMzl6Ii8+PC9zdmc+",$_="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAAQgAAAEIBarqQRAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAE1SURBVDiNfdI7S0NBEAXgLya1otFgpbYSbISAgpXYi6CmiH9KCAiChaVga6OiWPgfRDQ+0itaGVNosXtluWwcuMzePfM4M3sq8lbHBubwg1dc4m1E/J/N4ghDPOIsfk/4xiEao5KX0McFljN4C9d4QTPXuY99jP3DsIoDPGM6BY5i5yI5R7O4q+ImFkJY2DCh3cAH2klyB+9J1xUMMAG7eCh1a+Mr+k48b5diXrFVwwLuS+BJ9MfR7+G0FHOHhTHhnXNWS87VDF4pcnfQK4Ep7XScNLmPTZgURNKKYENYWDpzW1BhscS1WHS8CDgURFJQrWcoF3c13KKbgg1BYQfy8xZWEzTTw1QZbAoKu8FqJnktdu5hcVSHmchiILzzuaDQvjBzV2m8yohCE1jHfPx/xhU+y4G/D75ELlRJsSYAAAAASUVORK5CYII=";var Y_=function(){function n(){}return n.createDefault=function(){return{hasPermission:!1,lastUsedCameraId:null}},n}(),X_=function(){function n(){this.data=Y_.createDefault();var t=localStorage.getItem(n.LOCAL_STORAGE_KEY);t?this.data=JSON.parse(t):this.reset()}return n.prototype.hasCameraPermissions=function(){return this.data.hasPermission},n.prototype.getLastUsedCameraId=function(){return this.data.lastUsedCameraId},n.prototype.setHasPermission=function(t){this.data.hasPermission=t,this.flush()},n.prototype.setLastUsedCameraId=function(t){this.data.lastUsedCameraId=t,this.flush()},n.prototype.resetLastUsedCameraId=function(){this.data.lastUsedCameraId=null,this.flush()},n.prototype.reset=function(){this.data=Y_.createDefault(),this.flush()},n.prototype.flush=function(){localStorage.setItem(n.LOCAL_STORAGE_KEY,JSON.stringify(this.data))},n.LOCAL_STORAGE_KEY="HTML5_QRCODE_DATA",n}();var _7=function(){function n(){this.infoDiv=document.createElement("div")}return n.prototype.renderInto=function(t){this.infoDiv.style.position="absolute",this.infoDiv.style.top="10px",this.infoDiv.style.right="10px",this.infoDiv.style.zIndex="2",this.infoDiv.style.display="none",this.infoDiv.style.padding="5pt",this.infoDiv.style.border="1px solid #171717",this.infoDiv.style.fontSize="10pt",this.infoDiv.style.background="rgb(0 0 0 / 69%)",this.infoDiv.style.borderRadius="5px",this.infoDiv.style.textAlign="center",this.infoDiv.style.fontWeight="400",this.infoDiv.style.color="white",this.infoDiv.innerText=Xp.poweredBy();var e=document.createElement("a");e.innerText="ScanApp",e.href="https://scanapp.org",e.target="new",e.style.color="white",this.infoDiv.appendChild(e);var i=document.createElement("br"),o=document.createElement("br");this.infoDiv.appendChild(i),this.infoDiv.appendChild(o);var s=document.createElement("a");s.innerText=Xp.reportIssues(),s.href="https://github.com/mebjas/html5-qrcode/issues",s.target="new",s.style.color="white",this.infoDiv.appendChild(s),t.appendChild(this.infoDiv)},n.prototype.show=function(){this.infoDiv.style.display="block"},n.prototype.hide=function(){this.infoDiv.style.display="none"},n}(),x7=function(){function n(t,e){this.isShowingInfoIcon=!0,this.onTapIn=t,this.onTapOut=e,this.infoIcon=document.createElement("img")}return n.prototype.renderInto=function(t){var e=this;this.infoIcon.alt="Info icon",this.infoIcon.src=tm,this.infoIcon.style.position="absolute",this.infoIcon.style.top="4px",this.infoIcon.style.right="4px",this.infoIcon.style.opacity="0.6",this.infoIcon.style.cursor="pointer",this.infoIcon.style.zIndex="2",this.infoIcon.style.width="16px",this.infoIcon.style.height="16px",this.infoIcon.onmouseover=function(i){return e.onHoverIn()},this.infoIcon.onmouseout=function(i){return e.onHoverOut()},this.infoIcon.onclick=function(i){return e.onClick()},t.appendChild(this.infoIcon)},n.prototype.onHoverIn=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="1")},n.prototype.onHoverOut=function(){this.isShowingInfoIcon&&(this.infoIcon.style.opacity="0.6")},n.prototype.onClick=function(){this.isShowingInfoIcon?(this.isShowingInfoIcon=!1,this.onTapIn(),this.infoIcon.src=$_,this.infoIcon.style.opacity="1"):(this.isShowingInfoIcon=!0,this.onTapOut(),this.infoIcon.src=tm,this.infoIcon.style.opacity="0.6")},n}
71(),Z_=function(){function n(){var t=this;this.infoDiv=new _7,this.infoIcon=new x7(function(){t.infoDiv.show()},function(){t.infoDiv.hide()})}return n.prototype.renderInto=function(t){this.infoDiv.renderInto(t),this.infoIcon.renderInto(t)},n}();var v7=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},b7=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},nm=function(){function n(){}return n.hasPermissions=function(){return v7(this,void 0,void 0,function(){var t,e,i,o;return b7(this,function(s){switch(s.label){case 0:return[4,navigator.mediaDevices.enumerateDevices()];case 1:for(t=s.sent(),e=0,i=t;e<i.length;e++)if(o=i[e],o.kind==="videoinput"&&o.label)return[2,!0];return[2,!1]}})})},n}();var Co=function(){function n(t){this.supportedScanTypes=this.validateAndReturnScanTypes(t)}return n.prototype.getDefaultScanType=function(){return this.supportedScanTypes[0]},n.prototype.hasMoreThanOneScanType=function(){return this.supportedScanTypes.length>1},n.prototype.isCameraScanRequired=function(){for(var t=0,e=this.supportedScanTypes;t<e.length;t++){var i=e[t];if(n.isCameraScanType(i))return!0}return!1},n.isCameraScanType=function(t){return t===to.SCAN_TYPE_CAMERA},n.isFileScanType=function(t){return t===to.SCAN_TYPE_FILE},n.prototype.validateAndReturnScanTypes=function(t){if(!t||t.length===0)return Qn.DEFAULT_SUPPORTED_SCAN_TYPE;var e=Qn.DEFAULT_SUPPORTED_SCAN_TYPE.length;if(t.length>e)throw"Max ".concat(e," values expected for ")+"supportedScanTypes";for(var i=0,o=t;i<o.length;i++){var s=o[i];if(!Qn.DEFAULT_SUPPORTED_SCAN_TYPE.includes(s))throw"Unsupported scan type ".concat(s)}return t},n}();var wn=function(){function n(){}return n.ALL_ELEMENT_CLASS="html5-qrcode-element",n.CAMERA_PERMISSION_BUTTON_ID="html5-qrcode-button-camera-permission",n.CAMERA_START_BUTTON_ID="html5-qrcode-button-camera-start",n.CAMERA_STOP_BUTTON_ID="html5-qrcode-button-camera-stop",n.TORCH_BUTTON_ID="html5-qrcode-button-torch",n.CAMERA_SELECTION_SELECT_ID="html5-qrcode-select-camera",n.FILE_SELECTION_BUTTON_ID="html5-qrcode-button-file-selection",n.ZOOM_SLIDER_ID="html5-qrcode-input-range-zoom",n.SCAN_TYPE_CHANGE_ANCHOR_ID="html5-qrcode-anchor-scan-type-change",n.TORCH_BUTTON_CLASS_TORCH_ON="html5-qrcode-button-torch-on",n.TORCH_BUTTON_CLASS_TORCH_OFF="html5-qrcode-button-torch-off",n}();var Kn=function(){function n(){}return n.createElement=function(t,e){var i=document.createElement(t);return i.id=e,i.classList.add(wn.ALL_ELEMENT_CLASS),t==="button"&&i.setAttribute("type","button"),i},n}();var K_=function(n,t,e,i){function o(s){return s instanceof e?s:new e(function(m){m(s)})}return new(e||(e=Promise))(function(s,m){function f(M){try{y(i.next(M))}catch(I){m(I)}}function v(M){try{y(i.throw(M))}catch(I){m(I)}}function y(M){M.done?s(M.value):o(M.value).then(f,v)}y((i=i.apply(n,t||[])).next())})},J_=function(n,t){var e={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},i,o,s,m;return m={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(m[Symbol.iterator]=function(){return this}),m;function f(y){return function(M){return v([y,M])}}function v(y){if(i)throw new TypeError("Generator is already executing.");for(;m&&(m=0,y[0]&&(e=0)),e;)try{if(i=1,o&&(s=y[0]&2?o.return:y[0]?o.throw||((s=o.return)&&s.call(o),0):o.next)&&!(s=s.call(o,y[1])).done)return s;switch(o=0,s&&(y=[y[0]&2,s.value]),y[0]){case 0:case 1:s=y;break;case 4:return e.label++,{value:y[1],done:!1};case 5:e.label++,o=y[1],y=[0];continue;case 7:y=e.ops.pop(),e.trys.pop();continue;default:if(s=e.trys,!(s=s.length>0&&s[s.length-1])&&(y[0]===6||y[0]===2)){e=0;continue}if(y[0]===3&&(!s||y[1]>s[0]&&y[1]<s[3])){e.label=y[1];break}if(y[0]===6&&e.label<s[1]){e.label=s[1],s=y;break}if(s&&e.label<s[2]){e.label=s[2],e.ops.push(y);break}s[2]&&e.ops.pop(),e.trys.pop();continue}y=t.call(n,e)}catch(M){y=[6,M],o=0}finally{i=s=0}if(y[0]&5)throw y[1];return{value:y[0]?y[1]:void 0,done:!0}}},Q_=function(){function n(t,e,i){this.isTorchOn=!1,this.torchCapability=t,this.buttonController=e,this.onTorchActionFailureCallback=i}return n.prototype.isTorchEnabled=function(){return this.isTorchOn},n.prototype.flipState=function(){return K_(this,void 0,void 0,function(){var t,e;return J_(this,function(i){switch(i.label){case 0:this.buttonController.disable(),t=!this.isTorchOn,i.label=1;case 1:return i.trys.push([1,3,,4]),[4,this.torchCapability.apply(t)];case 2:return i.sent(),this.updateUiBasedOnLatestSettings(this.torchCapability.value(
71),t),[3,4];case 3:return e=i.sent(),this.propagateFailure(t,e),this.buttonController.enable(),[3,4];case 4:return[2]}})})},n.prototype.updateUiBasedOnLatestSettings=function(t,e){t===e?(this.buttonController.setText(e?ct.torchOffButton():ct.torchOnButton()),this.isTorchOn=e):this.propagateFailure(e),this.buttonController.enable()},n.prototype.propagateFailure=function(t,e){var i=t?ct.torchOnFailedMessage():ct.torchOffFailedMessage();e&&(i+="; Error = "+e),this.onTorchActionFailureCallback(i)},n.prototype.reset=function(){this.isTorchOn=!1},n}(),ex=function(){function n(t,e){this.onTorchActionFailureCallback=e,this.torchButton=Kn.createElement("button",wn.TORCH_BUTTON_ID),this.torchController=new Q_(t,this,e)}return n.prototype.render=function(t,e){var i=this;this.torchButton.innerText=ct.torchOnButton(),this.torchButton.style.display=e.display,this.torchButton.style.marginLeft=e.marginLeft;var o=this;this.torchButton.addEventListener("click",function(s){return K_(i,void 0,void 0,function(){return J_(this,function(m){switch(m.label){case 0:return[4,o.torchController.flipState()];case 1:return m.sent(),o.torchController.isTorchEnabled()?(o.torchButton.classList.remove(wn.TORCH_BUTTON_CLASS_TORCH_OFF),o.torchButton.classList.add(wn.TORCH_BUTTON_CLASS_TORCH_ON)):(o.torchButton.classList.remove(wn.TORCH_BUTTON_CLASS_TORCH_ON),o.torchButton.classList.add(wn.TORCH_BUTTON_CLASS_TORCH_OFF)),[2]}})})}),t.appendChild(this.torchButton)},n.prototype.updateTorchCapability=function(t){this.torchController=new Q_(t,this,this.onTorchActionFailureCallback)},n.prototype.getTorchButton=function(){return this.torchButton},n.prototype.hide=function(){this.torchButton.style.display="none"},n.prototype.show=function(){this.torchButton.style.display="inline-block"},n.prototype.disable=function(){this.torchButton.disabled=!0},n.prototype.enable=function(){this.torchButton.disabled=!1},n.prototype.setText=function(t){this.torchButton.innerText=t},n.prototype.reset=function(){this.torchButton.innerText=ct.torchOnButton(),this.torchController.reset()},n.create=function(t,e,i,o){var s=new n(e,o);return s.render(t,i),s},n}();var tx=function(){function n(t,e,i){this.fileBasedScanRegion=this.createFileBasedScanRegion(),this.fileBasedScanRegion.style.display=e?"block":"none",t.appendChild(this.fileBasedScanRegion);var o=document.createElement("label");o.setAttribute("for",this.getFileScanInputId()),o.style.display="inline-block",this.fileBasedScanRegion.appendChild(o),this.fileSelectionButton=Kn.createElement("button",wn.FILE_SELECTION_BUTTON_ID),this.setInitialValueToButton(),this.fileSelectionButton.addEventListener("click",function(f){o.click()}),o.append(this.fileSelectionButton),this.fileScanInput=Kn.createElement("input",this.getFileScanInputId()),this.fileScanInput.type="file",this.fileScanInput.accept="image/*",this.fileScanInput.style.display="none",o.appendChild(this.fileScanInput);var s=this;this.fileScanInput.addEventListener("change",function(f){if(!(f==null||f.target==null)){var v=f.target;if(!(v.files&&v.files.length===0)){var y=v.files,M=y[0],I=M.name;s.setImageNameToButton(I),i(M)}}});var m=this.createDragAndDropMessage();this.fileBasedScanRegion.appendChild(m),this.fileBasedScanRegion.addEventListener("dragenter",function(f){s.fileBasedScanRegion.style.border=s.fileBasedScanRegionActiveBorder(),f.stopPropagation(),f.preventDefault()}),this.fileBasedScanRegion.addEventListener("dragleave",function(f){s.fileBasedScanRegion.style.border=s.fileBasedScanRegionDefaultBorder(),f.stopPropagation(),f.preventDefault()}),this.fileBasedScanRegion.addEventListener("dragover",function(f){s.fileBasedScanRegion.style.border=s.fileBasedScanRegionActiveBorder(),f.stopPropagation(),f.preventDefault()}),this.fileBasedScanRegion.addEventListener("drop",function(f){f.stopPropagation(),f.preventDefault(),s.fileBasedScanRegion.style.border=s.fileBasedScanRegionDefaultBorder();var v=f.dataTransfer;if(v){var y=v.files;if(!y||y.length===0)return;for(var M=!1,I=0;I<y.length;++I){var B=y.item(I);if(B){var N=/image.*/;if(B.type.match(N)){M=!0;var H=B.name;s.setImageNameToButton(H),i(B),m.innerText=ct.dragAndDropMessage();break}}}M||(m.innerText=ct.dragAndDropMessageOnlyImages())}})}return n.prototype.hide=function(){this.fileBasedScanRegion.style.display="none",this.fileScanInput.disabled=!0},n.prototype.show=function(){this.fileBasedScanRegion.style.display="block",this.fileScanInput.disabled=!1},n.prototype.isShowing=function(){return this.fileBasedScanRegion.style.display==="block"},n.prototype.resetValue=function(){this.fileScanInput.value="",this.setInitialValueToButton()},n.prototype.createFileBasedScanRegion=function(){var t=document.createElement("div");return t.style.textAlign="center",t.style.margin="auto",t.style.width="80%",t.style.maxWidth="600px",t.style.border=this.fileBasedScanRegionDefaultBorder(),t.style.padding="10px",t.style.marginBottom="10px",t},n.prototype.fileBasedScanRegionDefaultBorder=function(){return"6px dashed #ebebeb"},n.prototype.fileBasedScanRegionActiveBorder=function(){return"6px dashed rgb(153 151 151)"},n.prototype.createDragAndDropMessage=function(){var t=document.createElement("div");return t.innerText=ct.dragAndDropMessage(),t.style.fontWeight="400",t},n.prototype.setImageNameToButton=function(t){var e=20;if(t.length>e){var i=t.substring(0,8),o=t.length,s=t.substring(o-8,o);t="".concat(i,"....").concat(s)}var m=ct.fileSelectionChooseAnother()+" - "+t;this.fileSelectionButton.innerText=m},n.prototype.setInitialValueToButton=function(){var t=ct.fileSelectionChooseImage()+" - "+ct.fileSelectionNoImageSelected();this.fileSelectionButton.innerText=t},n.prototype.getFileScanInputId=function(){return"html5-qrcode-private-filescan-input"}
71,n.create=function(t,e,i){var o=new n(t,e,i);return o},n}();var nx=function(){function n(t){this.selectElement=Kn.createElement("select",wn.CAMERA_SELECTION_SELECT_ID),this.cameras=t,this.options=[]}return n.prototype.render=function(t){var e=document.createElement("span");e.style.marginRight="10px";var i=this.cameras.length;if(i===0)throw new Error("No cameras found");if(i===1)e.style.display="none";else{var o=ct.selectCamera();e.innerText="".concat(o," (").concat(this.cameras.length,") ")}for(var s=1,m=0,f=this.cameras;m<f.length;m++){var v=f[m],y=v.id,M=v.label==null?y:v.label;(!M||M==="")&&(M=[ct.anonymousCameraPrefix(),s++].join(" "));var I=document.createElement("option");I.value=y,I.innerText=M,this.options.push(I),this.selectElement.appendChild(I)}e.appendChild(this.selectElement),t.appendChild(e)},n.prototype.disable=function(){this.selectElement.disabled=!0},n.prototype.isDisabled=function(){return this.selectElement.disabled===!0},n.prototype.enable=function(){this.selectElement.disabled=!1},n.prototype.getValue=function(){return this.selectElement.value},n.prototype.hasValue=function(t){for(var e=0,i=this.options;e<i.length;e++){var o=i[e];if(o.value===t)return!0}return!1},n.prototype.setValue=function(t){if(!this.hasValue(t))throw new Error("".concat(t," is not present in the camera list."));this.selectElement.value=t},n.prototype.hasSingleItem=function(){return this.cameras.length===1},n.prototype.numCameras=function(){return this.cameras.length},n.create=function(t,e){var i=new n(e);return i.render(t),i},n}();var ix=function(){function n(){this.onChangeCallback=null,this.zoomElementContainer=document.createElement("div"),this.rangeInput=Kn.createElement("input",wn.ZOOM_SLIDER_ID),this.rangeInput.type="range",this.rangeText=document.createElement("span"),this.rangeInput.min="1",this.rangeInput.max="5",this.rangeInput.value="1",this.rangeInput.step="0.1"}return n.prototype.render=function(t,e){this.zoomElementContainer.style.display=e?"block":"none",this.zoomElementContainer.style.padding="5px 10px",this.zoomElementContainer.style.textAlign="center",t.appendChild(this.zoomElementContainer),this.rangeInput.style.display="inline-block",this.rangeInput.style.width="50%",this.rangeInput.style.height="5px",this.rangeInput.style.background="#d3d3d3",this.rangeInput.style.outline="none",this.rangeInput.style.opacity="0.7";var i=ct.zoom();this.rangeText.innerText="".concat(this.rangeInput.value,"x ").concat(i),this.rangeText.style.marginRight="10px";var o=this;this.rangeInput.addEventListener("input",function(){return o.onValueChange()}),this.rangeInput.addEventListener("change",function(){return o.onValueChange()}),this.zoomElementContainer.appendChild(this.rangeInput),this.zoomElementContainer.appendChild(this.rangeText)},n.prototype.onValueChange=function(){var t=ct.zoom();this.rangeText.innerText="".concat(this.rangeInput.value,"x ").concat(t),this.onChangeCallback&&this.onChangeCallback(parseFloat(this.rangeInput.value))},n.prototype.setValues=function(t,e,i,o){this.rangeInput.min=t.toString(),this.rangeInput.max=e.toString(),this.rangeInput.step=o.toString(),this.rangeInput.value=i.toString(),this.onValueChange()},n.prototype.show=function(){this.zoomElementContainer.style.display="block"},n.prototype.hide=function(){this.zoomElementContainer.style.display="none"},n.prototype.setOnCameraZoomValueChangeCallback=function(t){this.onChangeCallback=t},n.prototype.removeOnCameraZoomValueChangeCallback=function(){this.onChangeCallback=null},n.create=function(t,e){var i=new n;return i.render(t,e),i},n}();var Pi=function(n){return n[n.STATUS_DEFAULT=0]="STATUS_DEFAULT",n[n.STATUS_SUCCESS=1]="STATUS_SUCCESS",n[n.STATUS_WARNING=2]="STATUS_WARNING",n[n.STATUS_REQUESTING_PERMISSION=3]="STATUS_REQUESTING_PERMISSION",n}(Pi||{});function y7(n){return{fps:n.fps,qrbox:n.qrbox,aspectRatio:n.aspectRatio,disableFlip:n.disableFlip,videoConstraints:n.videoConstraints}}function C7(n,t){return{formatsToSupport:n.formatsToSupport,useBarCodeDetectorIfSupported:n.useBarCodeDetectorIfSupported,experimentalFeatures:n.experimentalFeatures,verbose
71:t}}var w7=function(){function n(t,e,i){if(this.lastMatchFound=null,this.cameraScanImage=null,this.fileScanImage=null,this.fileSelectionUi=null,this.elementId=t,this.config=this.createConfig(e),this.verbose=i===!0,!document.getElementById(t))throw"HTML Element with id=".concat(t," not found");this.scanTypeSelector=new Co(this.config.supportedScanTypes),this.currentScanType=this.scanTypeSelector.getDefaultScanType(),this.sectionSwapAllowed=!0,this.logger=new Xc(this.verbose),this.persistedDataManager=new X_,e.rememberLastUsedCamera!==!0&&this.persistedDataManager.reset()}return n.prototype.render=function(t,e){var i=this;this.lastMatchFound=null,this.qrCodeSuccessCallback=function(s,m){if(t)t(s,m);else{if(i.lastMatchFound===s)return;i.lastMatchFound=s,i.setHeaderMessage(ct.lastMatch(s),Pi.STATUS_SUCCESS)}},this.qrCodeErrorCallback=function(s,m){e&&e(s,m)};var o=document.getElementById(this.elementId);if(!o)throw"HTML Element with id=".concat(this.elementId," not found");o.innerHTML="",this.createBasicLayout(o),this.html5Qrcode=new $r(this.getScanRegionId(),C7(this.config,this.verbose))},n.prototype.pause=function(t){(wi(t)||t!==!0)&&(t=!1),this.getHtml5QrcodeOrFail().pause(t)},n.prototype.resume=function(){this.getHtml5QrcodeOrFail().resume()},n.prototype.getState=function(){return this.getHtml5QrcodeOrFail().getState()},n.prototype.clear=function(){var t=this,e=function(){var i=document.getElementById(t.elementId);i&&(i.innerHTML="",t.resetBasicLayout(i))};return this.html5Qrcode?new Promise(function(i,o){if(!t.html5Qrcode){i();return}t.html5Qrcode.isScanning?t.html5Qrcode.stop().then(function(s){if(!t.html5Qrcode){i();return}t.html5Qrcode.clear(),e(),i()}).catch(function(s){t.verbose&&t.logger.logError("Unable to stop qrcode scanner",s),o(s)}):(t.html5Qrcode.clear(),e(),i())}):Promise.resolve()},n.prototype.getRunningTrackCapabilities=function(){return this.getHtml5QrcodeOrFail().getRunningTrackCapabilities()},n.prototype.getRunningTrackSettings=function(){return this.getHtml5QrcodeOrFail().getRunningTrackSettings()},n.prototype.applyVideoConstraints=function(t){return this.getHtml5QrcodeOrFail().applyVideoConstraints(t)},n.prototype.getHtml5QrcodeOrFail=function(){if(!this.html5Qrcode)throw"Code scanner not initialized.";return this.html5Qrcode},n.prototype.createConfig=function(t){return t?(t.fps||(t.fps=Qn.SCAN_DEFAULT_FPS),t.rememberLastUsedCamera!==!Qn.DEFAULT_REMEMBER_LAST_CAMERA_USED&&(t.rememberLastUsedCamera=Qn.DEFAULT_REMEMBER_LAST_CAMERA_USED),t.supportedScanTypes||(t.supportedScanTypes=Qn.DEFAULT_SUPPORTED_SCAN_TYPE),t):{fps:Qn.SCAN_DEFAULT_FPS,rememberLastUsedCamera:Qn.DEFAULT_REMEMBER_LAST_CAMERA_USED,supportedScanTypes:Qn.DEFAULT_SUPPORTED_SCAN_TYPE}},n.prototype.createBasicLayout=function(t){t.style.position="relative",t.style.padding="0px",t.style.border="1px solid silver",this.createHeader(t);var e=document.createElement("div"),i=this.getScanRegionId();e.id=i,e.style.width="100%",e.style.minHeight="100px",e.style.textAlign="center",t.appendChild(e),Co.isCameraScanType(this.currentScanType)?this.insertCameraScanImageToScanRegion():this.insertFileScanImageToScanRegion();var o=document.createElement("div"),s=this.getDashboardId();o.id=s,o.style.width="100%",t.appendChild(o),this.setupInitialDashboard(o)},n.prototype.resetBasicLayout=function(t){t.style.border="none"},n.prototype.setupInitialDashboard=function(t){this.createSection(t),this.createSectionControlPanel(),this.scanTypeSelector.hasMoreThanOneScanType()&&this.createSectionSwap()},n.prototype.createHeader=function(t){var e=document.createElement("div");e.style.textAlign="left",e.style.margin="0px",t.appendChild(e);var i=new Z_;i.renderInto(e);var o=document.createElement("div");o.id=this.getHeaderMessageContainerId(),o.style.display="none",o.style.textAlign="center",o.style.fontSize="14px",o.style.padding="2px 10px",o.style.margin="4px",o.style.borderTop="1px solid #f6f6f6",e.appendChild(o)},n.prototype.createSection=function(t){var e=document.createElement("div");e.id=this.getDashboardSectionId(),e.style.width="100%",e.style.padding="10px 0px 10px 0px",e.style.textAlign="left",t.appendChild(e)}
71,n.prototype.createCameraListUi=function(t,e,i){var o=this;o.showHideScanTypeSwapLink(!1),o.setHeaderMessage(ct.cameraPermissionRequesting());var s=function(){i||o.createPermissionButton(t,e)};$r.getCameras().then(function(m){o.persistedDataManager.setHasPermission(!0),o.showHideScanTypeSwapLink(!0),o.resetHeaderMessage(),m&&m.length>0?(t.removeChild(e),o.renderCameraSelection(m)):(o.setHeaderMessage(ct.noCameraFound(),Pi.STATUS_WARNING),s())}).catch(function(m){o.persistedDataManager.setHasPermission(!1),i?i.disabled=!1:s(),o.setHeaderMessage(m,Pi.STATUS_WARNING),o.showHideScanTypeSwapLink(!0)})},n.prototype.createPermissionButton=function(t,e){var i=this,o=Kn.createElement("button",this.getCameraPermissionButtonId());o.innerText=ct.cameraPermissionTitle(),o.addEventListener("click",function(){o.disabled=!0,i.createCameraListUi(t,e,o)}),e.appendChild(o)},n.prototype.createPermissionsUi=function(t,e){var i=this;if(Co.isCameraScanType(this.currentScanType)&&this.persistedDataManager.hasCameraPermissions()){nm.hasPermissions().then(function(o){o?i.createCameraListUi(t,e):(i.persistedDataManager.setHasPermission(!1),i.createPermissionButton(t,e))}).catch(function(o){i.persistedDataManager.setHasPermission(!1),i.createPermissionButton(t,e)});return}this.createPermissionButton(t,e)},n.prototype.createSectionControlPanel=function(){var t=document.getElementById(this.getDashboardSectionId()),e=document.createElement("div");t.appendChild(e);var i=document.createElement("div");i.id=this.getDashboardSectionCameraScanRegionId(),i.style.display=Co.isCameraScanType(this.currentScanType)?"block":"none",e.appendChild(i);var o=document.createElement("div");o.style.textAlign="center",i.appendChild(o),this.scanTypeSelector.isCameraScanRequired()&&this.createPermissionsUi(i,o),this.renderFileScanUi(e)},n.prototype.renderFileScanUi=function(t){var e=Co.isFileScanType(this.currentScanType),i=this,o=function(s){if(!i.html5Qrcode)throw"html5Qrcode not defined";Co.isFileScanType(i.currentScanType)&&(i.setHeaderMessage(ct.loadingImage()),i.html5Qrcode.scanFileV2(s,!0).then(function(m){i.resetHeaderMessage(),i.qrCodeSuccessCallback(m.decodedText,m)}).catch(function(m){i.setHeaderMessage(m,Pi.STATUS_WARNING),i.qrCodeErrorCallback(m,Yc.createFrom(m))}))};this.fileSelectionUi=tx.create(t,e,o)},n.prototype.renderCameraSelection=function(t){var e=this,i=this,o=document.getElementById(this.getDashboardSectionCameraScanRegionId());o.style.textAlign="center";var s=ix.create(o,!1),m=function(W){var G=W.zoomFeature();if(G.isSupported()){s.setOnCameraZoomValueChangeCallback(function(Q){G.apply(Q)});var Z=1;e.config.defaultZoomValueIfSupported&&(Z=e.config.defaultZoomValueIfSupported),Z=A_(Z,G.min(),G.max()),s.setValues(G.min(),G.max(),Z,G.step()),s.show()}},f=nx.create(o,t),v=document.createElement("span"),y=Kn.createElement("button",wn.CAMERA_START_BUTTON_ID);y.innerText=ct.scanButtonStartScanningText(),v.appendChild(y);var M=Kn.createElement("button",wn.CAMERA_STOP_BUTTON_ID);M.innerText=ct.scanButtonStopScanningText(),M.style.display="none",M.disabled=!0,v.appendChild(M);var I,B=function(W){if(!W.torchFeature().isSupported()){I&&I.hide();return}I?I.updateTorchCapability(W.torchFeature()):I=ex.create(v,W.torchFeature(),{display:"none",marginLeft:"5px"},function(G){i.setHeaderMessage(G,Pi.STATUS_WARNING)}),I.show()};o.appendChild(v);var N=function(W){W||(y.style.display="none"),y.innerText=ct.scanButtonStartScanningText(),y.style.opacity="1",y.disabled=!1,W&&(y.style.display="inline-block")};if(y.addEventListener("click",function(W){y.innerText=ct.scanButtonScanningStarting(),f.disable(),y.disabled=!0,y.style.opacity="0.5",e.scanTypeSelector.hasMoreThanOneScanType()&&i.showHideScanTypeSwapLink(!1),i.resetHeaderMessage();var G=f.getValue();i.persistedDataManager.setLastUsedCameraId(G),i.html5Qrcode.start(G,y7(i.config),i.qrCodeSuccessCallback,i.qrCodeErrorCallback).then(function(Z){M.disabled=!1,M.style.display="inline-block",N(!1);var Q=i.html5Qrcode.getRunningTrackCameraCapabilities();e.config.showTorchButtonIfSupported===!0&&B(Q),e.config.showZoomSliderIfSupported===!0&&m(Q)}).catch(function(Z){i.showHideScanTypeSwapLink(!0),f.enable(),N(!0),i.setHeaderMessage(Z,Pi.STATUS_WARNING)})}),f.hasSingleItem()&&y.click(),M.addEventListener("click",function(W){if(!i.html5Qrcode)throw"html5Qrcode not defined";M.disabled=!0,i.html5Qrcode.stop().then(function(G){e.scanTypeSelector.hasMoreThanOneScanType()&&i.showHideScanTypeSwapLink(!0),f.enable(),y.disabled=!1,M.style.display="none",y.style.display="inline-block",I&&(I.reset(),I.hide()),s.removeOnCameraZoomValueChangeCallback(),s.hide(),i.insertCameraScanImageToScanRegion()}).catch(function(G){M.disabled=!1,i.setHeaderMessage(G,Pi.STATUS_WARNING)})}),i.persistedDataManager.getLastUsedCameraId()){var H=i.persistedDataManager.getLastUsedCameraId();f.hasValue(H)?(f.setValue(H),y.click()):i.persistedDataManager.resetLastUsedCameraId()}},n.prototype.createSectionSwap=function(){var t=this,e=ct.textIfCameraScanSelected(),i=ct.textIfFileScanSelected(),o=document.getElementById(this.getDashboardSectionId()),s=document.createElement("div");s.style.textAlign="center";var m=Kn.createElement("span",this.getDashboardSectionSwapLinkId());m.style.textDecoration="underline",m.style.cursor="pointer",m.innerText=Co.isCameraScanType(this.currentScanType)?e:i,m.addEventListener("click",function(){if(!t.sectionSwapAllowed){t.verbose&&t.logger.logError("Section swap called when not allowed");return}t.resetHeaderMessage(),t.fileSelectionUi.resetValue(),t.sectionSwapAllowed=!1,Co.isCameraScanType(t.currentScanType)?(t.clearScanRegion(),t.getCameraScanRegion().style.display="none",t.fileSelectionUi.show(),m.innerText=i,t.currentScanType=to.SCAN_TYPE_FILE,t.insertFileScanImageToScanRegion()):(t.clearScanRegion(),t.getCameraScanRegion().style.display="block",t.fileSelectionUi.hide(),m.innerText=e,t.currentScanType=to.SCAN_TYPE_CAMERA,t.insertCameraScanImageToScanRegion(),t.startCameraScanIfPermissionExistsOnSwap()),t.sectionSwapAllowed=!0}),s.appendChild(m),o.appendChild(s)},n.prototype.startCameraScanIfPermissionExistsOnSwap=function(){var t=this,e=this;if(this.persistedDataManager.hasCameraPermissions()){nm.hasPermissions().then(function(i){if(i){var o=document.getElementById(e.getCameraPermissionButtonId());if(!o)throw t.logger.logError("Permission button not found, fail;"),"Permission button not found";o.click()}else e.persistedDataManager.setHasPermission(!1)}).catch(function(i){e.persistedDataManager.setHasPermission(!1)});return}},n.prototype.resetHeaderMessage=function(){var t=document.getElementById(this.getHeaderMessageContainerId());t.style.display="none"},n.prototype.setHeaderMessage=function(t,e){e||(e=Pi.STATUS_DEFAULT);var i=this.getHeaderMessageDiv();switch(i.innerText=t,i.style.display="block",e){case Pi.STATUS_SUCCESS:i.style.background="rgba(106, 175, 80, 0.26)",i.style.color="#477735";break;case Pi.STATUS_WARNING:i.style.background="rgba(203, 36, 49, 0.14)",i.style.color="#cb2431";break;case Pi.STATUS_DEFAULT:default:i.style.background="rgba(0, 0, 0, 0)",i.style.color="rgb(17, 17, 17)";break}},n.prototype.showHideScanTypeSwapLink=function(t){this.scanTypeSelector.hasMoreThanOneScanType()&&(t!==!0&&(t=!1),this.sectionSwapAllowed=t,this.getDashboardSectionSwapLink().style.display=t?"inline-block":"none")},n.prototype.insertCameraScanImageToScanRegion=function(){var t=this,e=document.getElementById(this.getScanRegionId());if(this.cameraScanImage){e.innerHTML="<br>",e.appendChild(this.cameraScanImage);return}this.cameraScanImage=new Image,this.cameraScanImage.onload=function(i){e.innerHTML="<br>",e.appendChild(t.cameraScanImage)},this.cameraScanImage.width=64,this.cameraScanImage.style.opacity="0.8",this.cameraScanImage.src=G_,this.cameraScanImage.alt=ct.cameraScanAltText()},n.prototype.insertFileScanImageToScanRegion=function(){var t=this,e=document.getElementById(this.getScanRegionId());if(this.fileScanImage){e.innerHTML="<br>",e.appendChild(this.fileScanImage);return}this.fileScanImage=new Image,this.fileScanImage.onload=function(i){e.innerHTML="<br>",e.appendChild(t.fileScanImage)},this.fileScanImage.width=64,this.fileScanImage.style.opacity="0.8",this.fileScanImage.src=q_,this.fileScanImage.alt=ct.fileScanAltText()},n.prototype.clearScanRegion=function(){var t=document.getElementById(this.getScanRegionId());t.innerHTML=""},n.prototype.getDashboardSectionId=function(){return"".concat(this.elementId,"__dashboard_section")},n.prototype.getDashboardSectionCameraScanRegionId=function(){return"".concat(this.elementId,"__dashboard_section_csr")},n.prototype.getDashboardSectionSwapLinkId=function(){return wn.SCAN_TYPE_CHANGE_ANCHOR_ID},n.prototype.getScanRegionId=function(){return"".concat(this.elementId,"__scan_regi
71on")},n.prototype.getDashboardId=function(){return"".concat(this.elementId,"__dashboard")},n.prototype.getHeaderMessageContainerId=function(){return"".concat(this.elementId,"__header_message")},n.prototype.getCameraPermissionButtonId=function(){return wn.CAMERA_PERMISSION_BUTTON_ID},n.prototype.getCameraScanRegion=function(){return document.getElementById(this.getDashboardSectionCameraScanRegionId())},n.prototype.getDashboardSectionSwapLink=function(){return document.getElementById(this.getDashboardSectionSwapLinkId())},n.prototype.getHeaderMessageDiv=function(){return document.getElementById(this.getHeaderMessageContainerId())},n}();var el=()=>({standalone:!0});function P7(n,t){if(n&1&&(r(0,"div",25),w(1,"i",26),r(2,"strong"),l(3,"Success!"),a(),l(4),a()),n&2){let e=h();d(4),F(" ",e.successMessage," ")}}function M7(n,t){if(n&1&&(r(0,"div",27),w(1,"i",28),r(2,"strong"),l(3,"Error!"),a(),l(4),a()),n&2){let e=h();d(4),F(" ",e.errorMessage," ")}}function S7(n,t){if(n&1&&(r(0,"span",29),l(1),a()),n&2){let e=h();d(),F(" ",e.getTotalPendingVerifications()," ")}}function k7(n,t){if(n&1&&(r(0,"span",29),l(1),a()),n&2){let e=h();d(),F(" ",e.pendingDiscountBookings.length," ")}}function O7(n,t){if(n&1&&(r(0,"span",30),l(1),a()),n&2){let e=h();d(),F(" ",e.pendingRefundCount," ")}}function E7(n,t){n&1&&(r(0,"div",40),w(1,"div",41),r(2,"p",42),l(3,"Loading sessions..."),a()())}function T7(n,t){if(n&1&&(r(0,"option",65),l(1),a()),n&2){let e=t.$implicit;x("value",e),d(),R(e)}}function I7(n,t){if(n&1){let e=L();r(0,"div",43)(1,"div",44)(2,"h3"),l(3,"Filter & Sort"),a(),r(4,"button",45),S("click",function(){k(e);let o=h(2);return O(o.clearFilters())}),l(5,"Clear All Filters"),a()(),r(6,"div",46)(7,"div",47)(8,"label"),l(9,"Search"),a(),r(10,"input",48),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.filters.searchTerm,o)||(s.filters.searchTerm=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),a()(),r(11,"div",47)(12,"label"),l(13,"Status"),a(),r(14,"select",49),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.filters.status,o)||(s.filters.status=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),r(15,"option",50),l(16,"All Statuses"),a(),r(17,"option",51),l(18,"Upcoming"),a(),r(19,"option",52),l(20,"Ongoing"),a(),r(21,"option",53),l(22,"Completed"),a()()(),r(23,"div",47)(24,"label"),l(25,"Session Type"),a(),r(26,"select",49),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.filters.sessionType,o)||(s.filters.sessionType=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),r(27,"option",50),l(28,"All Types"),a(),A(29,T7,2,2,"option",54),a()(),r(30,"div",47)(31,"label"),l(32,"Date From"),a(),r(33,"input",55),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.filters.dateFrom,o)||(s.filters.dateFrom=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),a()(),r(34,"div",47)(35,"label"),l(36,"Date To"),a(),r(37,"input",55),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.filters.dateTo,o)||(s.filters.dateTo=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),a()(),r(38,"div",47)(39,"label"),l(40,"Sort By"),a(),r(41,"select",49),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.sortBy,o)||(s.sortBy=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),r(42,"option",56),l(43,"Date"),a(),r(44,"option",57),l(45,"Session Type"),a(),r(46,"option",58),l(47,"Time"),a(),r(48,"option",59),l(49,"Max Players"),a(),r(50,"option",60),l(51,"Price"),a(),r(52,"option",61),l(53,"Current Players"),a(),r(54,"option",62),l(55,"Status"),a()()(),r(56,"div",47)(57,"label"),l(58,"Direction"),a(),r(59,"select",49),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.sortDirection,o)||(s.sortDirection=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.applyFiltersAndSort())}),r(60,"option",63),l(61,"Ascending"),a(),r(62,"option",64),l(63,"Descending"),a()()()()()}if(n&2){let e=h(2);d(10),ce("ngModel",e.filters.searchTerm),d(4),ce("ngModel",e.filters.status),d(12),ce("ngModel",e.filters.sessionType),d(3),x("ngForOf",e.getUniqueSessionTypes()),d(4),ce("ngModel",e.filters.dateFrom),d(4),ce("ngModel",e.filters.dateTo),d(4),ce("ngModel",e.sortBy),d(18),ce("ngModel",e.sortDirection)}}function A7(n,t){if(n&1&&(r(0,"span",76),l(1),a()),n&2){let e=h(3);d(),F(" ",e.selectedSessions.size," selected ")}}function D7(n,t){n&1&&w(0,"span",77)}function R7(n,t){if(n&1){let e=L();r(0,"div",66)(1,"div",67)(2,"button",68),S("click",function(){k(e);let o=h(2);return O(o.selectAllSessions())}),w(3,"i",69),l(4," Select All "),a(),r(5,"button",68),S("click",function(){k(e);let o=h(2);return O(o.deselectAllSessions())}),w(6,"i",70),l(7," Deselect All "),a(),A(8,A7,2,1,"span",71),a(),r(9,"div",72)(10,"button",73),S("click",function(){k(e);let o=h(2);return O(o.deleteSelectedSessions())}),w(11,"i",74),l(12," Delete Selected "),A(13,D7,1,0,"span",75),a()()()}if(n&2){let e=h(2);d(2),x("disabled",e.isDeleting),d(3),x("disabled",e.isDeleting||e.selectedSessions.size===0),d(3),x("ngIf",e.selectedSessions.size>0),d(2),x("disabled",e.isDeleting||e.selectedSessions.size===0),d(3),x("ngIf",e.isDeleting)}}function B7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function N7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function V7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function L7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function F7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function z7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function U7(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h(4);d(),R(e.sortDirection==="asc"?"\u2191":"\u2193")}}function j7(n,t){if(n&1){let e=L();r(0,"tr")(1,"td",84)(2,"input",85),S("change",function(){let o=k(e).$implicit,s=h(4);return O(s.toggleSessionSelection(o.id))}),a()(),r(3,"td",90),l(4),a(),r(5,"td",91),l(6),a(),r(7,"td",92),l(8),a(),r(9,"td",93),l(10),a(),r(11,"td",94)(12,"span",95),l(13),a()(),r(14,"td",96),l(15),a(),r(16,"td",97)(17,"span",98),l(18),a()(),r(19,"td",99)(20,"div",100)(21,"button",101),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.openEditModal(o))}),w(22,"i",102),a(),r(23,"button",103),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.deleteSession(o))}),w(24,"i",74),a()()()()}if(n&2){let e=t.$implicit,i=h(4);te("selected-row",i.isSessionSelected(e.id))("session-with-bookings",i.hasBookings(e)),d(2),x("checked",i.isSessionSelected(e.id))("disabled",i.isDeleting),d(2),R(i.formatDate(e.sessionDate)),d(2),R(e.sessionType),d(2),Se("",e.startTime," - ",e.endTime,""),d(2),R(e.maxPlayers),d(2),te("has-players",e.currentPlayers>0),d(),F(" ",e.currentPlayers||0," "),d(2),F("\u20B1",e.pricePerPerson,""),d(2),Qt("status-"+e.status.toLowerCase()),d(),R(e.status),d(3),x("disabled",i.isDeleting),d(2),te("has-bookings",i.hasBookings(e)),x("title",i.hasBookings(e)?"Session has active bookings":"Delete session")("disabled",i.isDeleting)}}function H7(n,t){if(n&1){let e=L();r(0,"table",83)(1,"thead")(2,"tr")(3,"th",84)(4,"input",85),S("change",function(){k(e);let o=h(3);return O(o.selectedSessions.size===o.paginatedSessions.length?o.deselectAllSessions():o.selectAllSessions())}),a()(),r(5,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("date"))}),l(6,"Date "),A(7,B7,2,1,"span",87),a(),r(8,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("sessionType"))}),l(9,"Type "),A(10,N7,2,1,"span",87),a(),r(11,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("time"))}),l(12,"Time "),A(13,V7,2,1,"span",87),a(),r(14,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("maxPlayers"))}),l(15,"Max "),A(16,L7,2,1,"span",87),a(),r(17,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("currentPlayers"))}),l(18,"Players "),A(19,F7,2,1,"span",87),a(),r(20,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("price"))}
71),l(21,"Price "),A(22,z7,2,1,"span",87),a(),r(23,"th",86),S("click",function(){k(e);let o=h(3);return O(o.changeSort("status"))}),l(24,"Status "),A(25,U7,2,1,"span",87),a(),r(26,"th"),l(27,"Actions"),a()()(),r(28,"tbody"),A(29,j7,25,23,"tr",88),a()()}if(n&2){let e=h(3);d(4),x("checked",e.selectedSessions.size>0&&e.selectedSessions.size===e.paginatedSessions.length)("disabled",e.isDeleting),d(3),x("ngIf",e.sortBy==="date"),d(3),x("ngIf",e.sortBy==="sessionType"),d(3),x("ngIf",e.sortBy==="time"),d(3),x("ngIf",e.sortBy==="maxPlayers"),d(3),x("ngIf",e.sortBy==="currentPlayers"),d(3),x("ngIf",e.sortBy==="price"),d(3),x("ngIf",e.sortBy==="status"),d(4),x("ngForOf",e.paginatedSessions)}}function W7(n,t){n&1&&(r(0,"div",104)(1,"p"),l(2,"No sessions match your filters."),a()())}function G7(n,t){n&1&&(r(0,"div",104)(1,"p"),l(2,'No sessions found. Click "Generate New Sessions" to create sessions.'),a()())}function q7(n,t){if(n&1){let e=L();r(0,"button",108),S("click",function(){let o=k(e).$implicit,s=h(4);return O(s.changeSessionPage(o))}),l(1),a()}if(n&2){let e=t.$implicit,i=h(4);te("active",e===i.currentPage),x("disabled",e===i.currentPage),d(),R(e)}}function $7(n,t){if(n&1){let e=L();r(0,"div",105)(1,"button",106),S("click",function(){k(e);let o=h(3);return O(o.changeSessionPage(o.currentPage-1))}),l(2,"\xAB Prev"),a(),A(3,q7,2,4,"button",107),r(4,"button",106),S("click",function(){k(e);let o=h(3);return O(o.changeSessionPage(o.currentPage+1))}),l(5,"Next \xBB"),a()()}if(n&2){let e=h(3);d(),x("disabled",e.currentPage===1),d(2),x("ngForOf",e.getPageNumbers()),d(),x("disabled",e.currentPage===e.totalPages)}}function Y7(n,t){if(n&1&&(r(0,"div",78)(1,"div",79),A(2,H7,30,10,"table",80)(3,W7,3,0,"div",81)(4,G7,3,0,"div",81),a(),A(5,$7,6,3,"div",82),a()),n&2){let e=h(2);d(2),x("ngIf",e.filteredSessions.length>0),d(),x("ngIf",e.filteredSessions.length===0&&e.existingSessions.length>0),d(),x("ngIf",e.existingSessions.length===0),d(),x("ngIf",e.totalPages>1)}}function X7(n,t){if(n&1){let e=L();r(0,"div")(1,"div",31)(2,"div",32)(3,"div",33)(4,"h2"),l(5,"Open Play Sessions"),a(),r(6,"p",34),l(7),a()(),r(8,"button",35),S("click",function(){k(e);let o=h();return O(o.openGenerateModal())}),l(9," + Generate New Sessions "),a()(),A(10,E7,4,0,"div",36)(11,I7,64,8,"div",37)(12,R7,14,5,"div",38)(13,Y7,6,4,"div",39),a()()}if(n&2){let e=h();d(7),Se("",e.filteredSessions.length," of ",e.existingSessions.length," session(s)"),d(3),x("ngIf",e.isLoadingExisting),d(),x("ngIf",!e.isLoadingExisting),d(),x("ngIf",!e.isLoadingExisting&&e.filteredSessions.length>0),d(),x("ngIf",!e.isLoadingExisting)}}function Z7(n,t){n&1&&(r(0,"div",40),w(1,"div",41),r(2,"p",42),l(3,"Loading bookings..."),a()())}function Q7(n,t){if(n&1){let e=L();r(0,"button",127),S("click",function(){k(e);let o=h(3);return o.bookingSessionDateFrom="",o.bookingSessionDateTo="",O(o.onBookingSessionDateFilterChange())}),w(1,"i",128),a()}}function K7(n,t){if(n&1&&(r(0,"span",142),w(1,"i",143),l(2),a()),n&2){let e=h().$implicit;d(2),F(" ",e.courtName,"")}}function J7(n,t){if(n&1&&(r(0,"span",144),w(1,"i",145),l(2),a()),n&2){let e=h().$implicit;d(2),F(" ",e.pendingWithReceiptCount," pending ")}}function eA(n,t){if(n&1){let e=L();r(0,"div",129),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.selectBookingSession(o))}),r(1,"div",130)(2,"div",131)(3,"span",132),l(4),a(),r(5,"span",133),l(6),a()(),r(7,"span",134),l(8),a(),r(9,"span",135),w(10,"i",136),l(11),a(),A(12,K7,3,1,"span",137),a(),r(13,"div",138)(14,"span",139),w(15,"i",140),l(16),a(),A(17,J7,3,1,"span",141),a()()}if(n&2){let e=t.$implicit,i=h(3);te("active",(i.selectedBookingSession==null?null:i.selectedBookingSession.sessionId)===e.sessionId)("has-pending",e.pendingWithReceiptCount>0),d(4),R(e.customSessionName||e.sessionType),d(),Qt("mini-"+e.status.toLowerCase()),d(),F(" ",e.status==="ONGOING"?"Live":e.status==="UPCOMING"?"Upcoming":"Done"," "),d(2),R(i.formatSessionDate(e.sessionDate)),d(3),Se(" ",e.startTime," - ",e.endTime,""),d(),x("ngIf",e.courtName),d(4),Se(" ",e.totalVerifiedPlayers,"/",e.maxPlayers,""),d(),x("ngIf",e.pen
71dingWithReceiptCount>0)}}function tA(n,t){n&1&&(r(0,"div",146),w(1,"i",147),r(2,"p"),l(3,"No sessions with bookings found."),a()())}function nA(n,t){if(n&1){let e=L();r(0,"div",148)(1,"button",149),S("click",function(){k(e);let o=h(3);return O(o.onBookingSessionsPageChange(o.bookingSessionsPage-1))}),w(2,"i",150),a(),r(3,"span",151),l(4),a(),r(5,"button",149),S("click",function(){k(e);let o=h(3);return O(o.onBookingSessionsPageChange(o.bookingSessionsPage+1))}),w(6,"i",152),a()()}if(n&2){let e=h(3);d(),x("disabled",e.bookingSessionsPage===0),d(3),Se("",e.bookingSessionsPage+1," / ",e.bookingSessionsTotalPages,""),d(),x("disabled",e.bookingSessionsPage>=e.bookingSessionsTotalPages-1)}}function iA(n,t){n&1&&(r(0,"div",153),w(1,"div",41),r(2,"p"),l(3,"Loading bookings..."),a()())}function oA(n,t){n&1&&(r(0,"div",153),w(1,"i",154),r(2,"p"),l(3,"Select a session from the left panel to view and manage bookings"),a()())}function rA(n,t){if(n&1&&(r(0,"div",180)(1,"span",164),l(2),a(),r(3,"span",165),l(4,"Verified"),a()()),n&2){let e=h(4);d(2),R(e.getSelectedSessionBookingStats().verified)}}function aA(n,t){if(n&1&&(r(0,"div",181)(1,"span",164),l(2),a(),r(3,"span",165),l(4,"Needs Review"),a()()),n&2){let e=h(4);d(2),R(e.getSelectedSessionBookingStats().pendingVerify)}}function sA(n,t){if(n&1&&(r(0,"div",182)(1,"span",164),l(2),a(),r(3,"span",165),l(4,"Awaiting Receipt"),a()()),n&2){let e=h(4);d(2),R(e.getSelectedSessionBookingStats().pendingPayment)}}function lA(n,t){if(n&1&&(we(0),r(1,"span",207),l(2),_e(3,"number"),a(),r(4,"span",208),l(5),_e(6,"number"),a(),Pe()),n&2){let e=h().$implicit;d(2),F("\u20B1",be(3,2,e.originalAmount||e.totalAmount,"1.2-2"),""),d(3),F("\u20B1",be(6,5,e.totalAmount,"1.2-2"),"")}}function cA(n,t){if(n&1&&l(0),n&2){let e=h().$implicit;F("\u20B1",e.totalAmount,"")}}function dA(n,t){if(n&1&&(r(0,"div",192)(1,"span",193),w(2,"i",209),l(3," Payment"),a(),r(4,"span",194)(5,"span",210),w(6,"i",211),l(7),a()()()),n&2){let e=h().$implicit;d(5),te("badge-cash",e.paymentMethod==="CASH")("badge-online",e.paymentMethod==="ONLINE"),d(),te("bi-cash",e.paymentMethod==="CASH")("bi-qr-code",e.paymentMethod==="ONLINE"),d(),F(" ",e.paymentMethod==="CASH"?"Cash":"GCash / Online"," ")}}function pA(n,t){if(n&1&&(r(0,"div",212),w(1,"i",211),r(2,"span",213),l(3),a(),r(4,"span",214),l(5),_e(6,"number"),a(),r(7,"span",215),l(8),a()()),n&2){let e=h().$implicit;te("admin-discount-approved",e.discountStatus==="APPROVED")("admin-discount-pending",e.discountStatus==="PENDING_VERIFICATION"),d(),te("bi-patch-check-fill",e.discountStatus==="APPROVED")("bi-hourglass-split",e.discountStatus==="PENDING_VERIFICATION"),d(2),R((e.discountType==null?null:e.discountType.name)||"Discount"),d(2),F("\u2212\u20B1",be(6,11,e.discountAmount,"1.2-2"),""),d(3),R(e.discountStatus==="APPROVED"?"Approved":"Pending")}}function mA(n,t){if(n&1){let e=L();r(0,"div",216),w(1,"i",217),r(2,"span",218),l(3,"Rebooking Credit"),a(),r(4,"span",219),l(5),_e(6,"number"),a(),r(7,"span",220),l(8),a(),r(9,"button",221),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openCreditHistory(o))}),w(10,"i",222),l(11," Credit History "),a()()}if(n&2){let e=h().$implicit;d(5),ui("\u2212",e.creditsApplied||1," credit",(e.creditsApplied||1)===1?"":"s"," (\u20B1",be(6,4,e.creditAmount||0,"1.2-2"),")"),d(3),R(e.totalAmount===0?"Fully Covered":"Partial")}}function gA(n,t){if(n&1&&(r(0,"span",229),l(1),a()),n&2){let e=h(2).ngIf;d(),F("by ",e.scannedBy,"")}}function uA(n,t){if(n&1&&(r(0,"span",227),w(1,"i",136),l(2),A(3,gA,2,1,"span",228),a()),n&2){let e=h().ngIf,i=h(6);d(2),F(" ",i.formatScanTime(e.scannedAt)," "),d(),x("ngIf",e.scannedBy)}}function fA(n,t){if(n&1&&(we(0),r(1,"div",223),w(2,"i",211),r(3,"span",224),l(4),a(),r(5,"span",225),l(6),_e(7,"titlecase"),a(),A(8,uA,4,2,"span",226),a(),Pe()),n&2){let e=t.ngIf,i=h().$implicit;d(),te("scan-playing",e.status==="PLAYING")("scan-played",e.status==="PLAYED")("scan-no-show",e.status==="NO_SHOW")("scan-ready",e.status==="READY_TO_PLAY"),d(),te("bi-play-circle-fill",e.status==="PLAYING")("bi-check-circle-fill",e.status==="PLAYED")("bi-x-circle-fill",e.status==="NO_SHOW")("bi-qr-code",e.status==="READY_TO_PLAY"),d(2),R(i),d(2),R(Hi(7,19,e.status)),d(2),x("ngIf",e.scanned&&e.scannedAt)}}function hA(n,t){if(n&1&&(r(0,"span",230),w(1,"i",231),l(2),a()),n&2){let e=h().$implicit;d(2),F(" ",e," ")}}function _A(n,t){if(n&1&&(we(0),A(1,fA,9,21,"ng-container",196)(2,hA,3,1,"ng-template",null,1,ln),Pe()),n&2){let e=t.$implicit,i=Jt(3),o=h().$implicit,s=h(4);d(),x("ngIf",s.getPlayerScanInfo(o.id,e))("ngIfElse",i)}}function xA(n,t){if(n&1){let e=L();we(0),r(1,"button",232),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openReceiptReview(o))}),w(2,"i",233),l(3," View Receipt "),a(),r(4,"button",234),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.verifyPayment(o))}),w(5,"i",26),l(6," Verify "),a(),r(7,"button",235),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openDeclineModal(o))}),w(8,"i",128),l(9," Decline "),a(),Pe()}}function vA(n,t){if(n&1){let e=L();r(0,"button",232),S("click",function(){k(e);let o=h(2).$implicit,s=h(4);return O(s.openReceiptReview(o))}),w(1,"i",233),l(2," View Receipt "),a()}}function bA(n,t){if(n&1){let e=L();r(0,"div",236)(1,"div",237),w(2,"i",238),l(3),a(),A(4,vA,3,0,"button",239),r(5,"button",240),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openCancelBookingModal(o))}),w(6,"i",128),l(7," Cancel Booking "),a()()}if(n&2){let e=h().$implicit;d(3),F(" Verified",e.paymentVerifiedBy?" by "+e.paymentVerifiedBy:""," "),d(),x("ngIf",e.paymentProofUrl)}}function yA(n,t){n&1&&(r(0,"div",241),w(1,"i",242),l(2," Waiting for receipt upload "),a())}function CA(n,t){if(n&1){let e=L();r(0,"button",232),S("click",function(){k(e);let o=h(2).$implicit,s=h(4);return O(s.openReceiptReview(o))}),w(1,"i",233),l(2," View Receipt "),a()}}function wA(n,t){n&1&&(r(0,"span",246),w(1,"i",233),l(2," No receipt uploaded "),a())}function PA(n,t){if(n&1&&(we(0),r(1,"div",243),w(2,"i",244),l(3),a(),A(4,CA,3,0,"button",239)(5,wA,3,0,"span",245),Pe()),n&2){let e=h().$implicit;d(3),F(" ",e.cancellationReason||"Cancelled"," "),d(),x("ngIf",e.paymentProofUrl),d(),x("ngIf",!e.paymentProofUrl)}}function MA(n,t){n&1&&(r(0,"div",247),w(1,"i",222),l(2," Expired - Payment deadline passed "),a())}function SA(n,t){if(n&1){let e=L();we(0),r(1,"span",248),w(2,"i",14),l(3," DISCOUNT PENDING"),a(),r(4,"button",249),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openIdProofModal(o))}),w(5,"i",250),l(6," View ID Proof "),a(),r(7,"button",234),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.approveDiscount(o.id))}),w(8,"i",26),l(9," Approve Discount "),a(),r(10,"button",235),S("click",function(){k(e);let o=h().$implicit,s=h(4);return O(s.openRejectDiscountModal(o))}),w(11,"i",128),l(12," Reject Discount "),a(),Pe()}}function kA(n,t){n&1&&(we(0),r(1,"span",251),w(2,"i",238),l(3," DISCOUNT APPROVED"),a(),Pe())}function OA(n,t){if(n&1&&(r(0,"div",183)(1,"div",184)(2,"div",185)(3,"span",186),l(4),a(),r(5,"div")(6,"span",187),l(7),a(),r(8,"span",188),l(9),a()()(),r(10,"span",189),l(11),a()(),r(12,"div",190)(13,"div",191)(14,"div",192)(15,"span",193),w(16,"i",12),l(17," Players"),a(),r(18,"span",194),l(19),a()(),r(20,"div",192)(21,"span",193),w(22,"i",195),l(23," Amount"),a(),r(24,"span",194),A(25,lA,7,8,"ng-container",196)(26,cA,1,1,"ng-template",null,0,ln),a()(),A(28,dA,8,9,"div",197),r(29,"div",192)(30,"span",193),w(31,"i",198),l(32," Booked"),a(),r(33,"span",194),l(34),a()()(),A(35,pA,9,14,"div",199)(36,mA,12,7,"div",200),r(37,"div",201),A(38,_A,4,2,"ng-container",202),a()(),r(39,"div",203),A(40,xA,10,0,"ng-container",17)(41,bA,8,2,"div",204)(42,yA,3,0,"div",205)(43,PA,6,3,"ng-container",17)(44,MA,3,0,"div",206)(45,SA,13,0,"ng-container",17)(46,kA,4,0,"ng-container",17),a()()),n&2){let e=t.$implicit,i=Jt(27),o=h(4);Qt(o.getStatusClass(e.status)),d(4),R(e.fullname.charAt(0).toUpperCase()),d(3),R(e.fullname),d(2),F("@",e.username,""),d(),Qt(o.getStatusClass(e.status)),d(),F(" ",o.getStatusShortLabel(e.status)," "),d(8),R(e.numberOfPlayers),d(6),x("ngIf",e.discountAmount&&e.discountAmount>0||(e.creditsApplied||0)>0||e.creditId)("ngIfElse",i),d(3),x("ngIf",e.paymentMethod),d(6),R(o.formatBookingDate(e.bookingDateTime)),d(),x("ngIf",e.discountAmount&&e.discountAmount>0),d(),x("ngIf",(e.creditsApplied||0)>0||e.creditId),d(2),x("ngForOf",e.playerNames),d(2),x("ngIf",e.status==="PENDING_PAYMENT"&&e.paymentProofUrl),d(),x("ngIf",e.status==="PAYMENT_VERIFIED"),d(),x("ngIf",e.status==="PENDING_PAYMENT"&&!e.paymentProofUrl),d(),x("ngIf",e.status==="CANCELLED"),d(),x("ngIf",e.status==="EXPIRED"),d(),x("ngIf",e.discountStatus==="PENDING_VERIFICATION"),d(),x("ngIf",e.discountStatus==="APPROVED")}}function EA(n,t){n&1&&(r(0,"div",252),w(1,"i",171),r(2,"p"),l(3,"No bookings found matching your filters."),a()())}function TA(n,t){if(n&1){let e=L();r(0,"div",155)(1,"div",156)(2,"div",157)(3,"div",158)(4,"h3"),l(5),a(),r(6,"span",159),l(7),a()(),r(8,"button",160),S("click",function(){k(e);let o=h(3);return O(o.openScanModal(o.selectedSessionWithBookings.session.id))}
71),w(9,"i",161),l(10," Scan QR "),a()(),r(11,"div",162)(12,"div",163)(13,"span",164),l(14),a(),r(15,"span",165),l(16,"Bookings"),a()(),A(17,rA,5,1,"div",166)(18,aA,5,1,"div",167)(19,sA,5,1,"div",168),a()(),r(20,"div",169)(21,"div",170),w(22,"i",171),r(23,"input",172),pe("ngModelChange",function(o){k(e);let s=h(3);return de(s.bookingFilter,o)||(s.bookingFilter=o),O(o)}),a()(),r(24,"select",49),pe("ngModelChange",function(o){k(e);let s=h(3);return de(s.bookingStatusFilter,o)||(s.bookingStatusFilter=o),O(o)}),r(25,"option",50),l(26,"All Statuses"),a(),r(27,"option",173),l(28,"Pending Payment"),a(),r(29,"option",174),l(30,"Verified"),a(),r(31,"option",175),l(32,"Cancelled"),a(),r(33,"option",176),l(34,"Expired"),a()()(),r(35,"div",177),A(36,OA,47,23,"div",178)(37,EA,4,0,"div",179),a()()}if(n&2){let e=h(3);d(5),R(e.selectedSessionWithBookings.session.sessionType),d(2),ui(" ",e.formatSessionDate(e.selectedSessionWithBookings.session.sessionDate)," \xB7 ",e.selectedSessionWithBookings.session.startTime," - ",e.selectedSessionWithBookings.session.endTime," "),d(),x("disabled",e.selectedSessionWithBookings.session.status==="COMPLETED"||!e.isSessionToday(e.selectedSessionWithBookings.session.sessionDate))("title",e.selectedSessionWithBookings.session.status==="COMPLETED"?"Check-in closed \u2014 session has ended":e.isSessionToday(e.selectedSessionWithBookings.session.sessionDate)?"Scan player QR code for check-in":"Check-in is only available on the day of the session"),d(6),R(e.getSelectedSessionBookingStats().total),d(3),x("ngIf",e.getSelectedSessionBookingStats().verified>0),d(),x("ngIf",e.getSelectedSessionBookingStats().pendingVerify>0),d(),x("ngIf",e.getSelectedSessionBookingStats().pendingPayment>0),d(4),ce("ngModel",e.bookingFilter),d(),ce("ngModel",e.bookingStatusFilter),d(12),x("ngForOf",e.getFilteredBookings()),d(),x("ngIf",e.getFilteredBookings().length===0)}}function IA(n,t){if(n&1){let e=L();r(0,"div",111)(1,"div",112)(2,"div",113)(3,"h3"),w(4,"i",114),l(5," Sessions"),a(),r(6,"span",115),l(7),a()(),r(8,"div",116)(9,"input",117),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.bookingSessionDateFrom,o)||(s.bookingSessionDateFrom=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.onBookingSessionDateFilterChange())}),a(),r(10,"input",118),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.bookingSessionDateTo,o)||(s.bookingSessionDateTo=o),O(o)}),S("ngModelChange",function(){k(e);let o=h(2);return O(o.onBookingSessionDateFilterChange())}),a(),A(11,Q7,2,0,"button",119),a(),r(12,"div",120),A(13,eA,18,15,"div",121)(14,tA,4,0,"div",122),a(),A(15,nA,7,4,"div",123),a(),r(16,"div",124),A(17,iA,4,0,"div",125)(18,oA,4,0,"div",125)(19,TA,38,14,"div",126),a()()}if(n&2){let e=h(2);d(7),F("",e.bookingSessionsTotalElements," session(s)"),d(2),ce("ngModel",e.bookingSessionDateFrom),d(),ce("ngModel",e.bookingSessionDateTo),d(),x("ngIf",e.bookingSessionDateFrom||e.bookingSessionDateTo),d(2),x("ngForOf",e.bookingSessions),d(),x("ngIf",e.bookingSessions.length===0),d(),x("ngIf",e.bookingSessionsTotalPages>1),d(2),x("ngIf",e.isLoadingSessionBookings),d(),x("ngIf",!e.selectedSessionWithBookings&&!e.isLoadingSessionBookings),d(),x("ngIf",e.selectedSessionWithBookings)}}function AA(n,t){if(n&1&&(r(0,"div",109),A(1,Z7,4,0,"div",36)(2,IA,20,10,"div",110),a()),n&2){let e=h();d(),x("ngIf",e.isLoadingBookings),d(),x("ngIf",!e.isLoadingBookings)}}function DA(n,t){if(n&1){let e=L();r(0,"div",273)(1,"div",274),l(2),a(),r(3,"div",275)(4,"div",276)(5,"label",277),l(6,"Session Name"),a(),r(7,"input",278),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.name,o)||(s.name=o),O(o)}),a()(),r(8,"div",262)(9,"label",277),l(10,"Start Time"),a(),r(11,"input",279),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.startTime,o)||(s.startTime=o),O(o)}),a()(),r(12,"div",262)(13,"label",277),l(14,"End Time"),a(),r(15,"input",279),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.endTime,o)||(s.endTime=o),O(o)}),a()(),r(16,"div",262)(17,"label",277),l(18,"Max Slots"),a(),r(19,"input",280),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.maxPlayers,o)||(s.maxPlayers=o),O(o)}),a()(),r(20,"div",262)(21,"label",277),l(22,"Price (\u20B1)"),a(),r(23,"input",281),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.pricePerPerson,o)||(s.pricePerPerson=o),O(o)}),a()(),r(24,"div",282)(25,"label"),l(26,"\xA0"),a(),r(27,"button",283),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.removeSession(o.id))}),w(28,"i",74),l(29," Remove"),a()()()()}if(n&2){let e=t.$implicit,i=t.index,o=h(2);d(2),R(i+1),d(3),x("for","sessionName-"+e.id),d(2),x("id","sessionName-"+e.id),ce("ngModel",e.name),x("ngModelOptions",ji(22,el)),d(2),x("for","sessionStart-"+e.id),d(2),x("id","sessionStart-"+e.id),ce("ngModel",e.startTime),x("ngModelOptions",ji(23,el)),d(2),x("for","sessionEnd-"+e.id),d(2),x("id","sessionEnd-"+e.id),ce("ngModel",e.endTime),x("ngModelOptions",ji(24,el)),d(2),x("for","sessionMax-"+e.id),d(2),x("id","sessionMax-"+e.id),ce("ngModel",e.maxPlayers),x("ngModelOptions",ji(25,el)),d(2),x("for","sessionPrice-"+e.id),d(2),x("id","sessionPrice-"+e.id),ce("ngModel",e.pricePerPerson),x("ngModelOptions",ji(26,el)),d(4),x("disabled",o.sessions.length<=1)}}function RA(n,t){if(n&1){let e=L();r(0,"div",253),S("click",function(){k(e);let o=h();return O(o.closeGenerateModal())}),r(1,"div",254),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),l(4,"Generate New Sessions"),a(),r(5,"button",256),S("click",function(){k(e);let o=h();return O(o.closeGenerateModal())}),w(6,"i",257),a()(),r(7,"div",258)(8,"form",259),S("ngSubmit",function(){k(e);let o=h();return O(o.generateSessions())}),r(9,"div",260)(10,"h2"),l(11,"Date Range"),a(),r(12,"div",261)(13,"div",262)(14,"label",263),l(15,"Start Date"),a(),w(16,"input",264),a(),r(17,"div",262)(18,"label",265),l(19,"End Date"),a(),w(20,"input",266),a()()(),r(21,"div",260)(22,"h2"),l(23,"Time Slots"),a(),r(24,"div",267),A(25,DA,30,27,"div",268),a(),r(26,"button",269),S("click",function(){k(e);let o=h();return O(o.addSession())}),l(27,"Add Another Session"),a()()()(),r(28,"div",270)(29,"button",271),S("click",function(){k(e);let o=h();return O(o.resetForm())}),l(30,"Reset"),a(),r(31,"button",271),S("click",function(){k(e);let o=h();return O(o.closeGenerateModal())}),l(32,"Cancel"),a(),r(33,"button",272),l(34),a()()()()}if(n&2){let e=h();
71d(8),x("formGroup",e.sessionForm),d(17),x("ngForOf",e.sessions),d(4),x("disabled",e.isGenerating),d(2),x("disabled",e.isGenerating),d(2),x("disabled",e.isGenerating),d(),F(" ",e.isGenerating?"Generating...":"Generate Sessions"," ")}}function BA(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeEditModal())}),r(1,"div",285),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),l(4,"Edit Session"),a(),r(5,"button",256),S("click",function(){k(e);let o=h();return O(o.closeEditModal())}),w(6,"i",257),a()(),r(7,"div",286)(8,"p",287)(9,"strong"),l(10,"Date:"),a(),l(11),w(12,"br"),r(13,"strong"),l(14,"Type:"),a(),l(15),a(),r(16,"div",262)(17,"label",288),l(18,"Max Players"),a(),r(19,"input",289),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editForm.maxPlayers,o)||(s.editForm.maxPlayers=o),O(o)}),a()(),r(20,"div",262)(21,"label",290),l(22,"Price per Person (\u20B1)"),a(),r(23,"input",291),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editForm.pricePerPerson,o)||(s.editForm.pricePerPerson=o),O(o)}),a()(),r(24,"div",261)(25,"div",262)(26,"label",292),l(27,"Start Time"),a(),r(28,"input",293),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editForm.startTime,o)||(s.editForm.startTime=o),O(o)}),a()(),r(29,"div",262)(30,"label",294),l(31,"End Time"),a(),r(32,"input",295),pe("ngModelChange",function(o){k(e);let s=h();return de(s.editForm.endTime,o)||(s.editForm.endTime=o),O(o)}),a()()()(),r(33,"div",270)(34,"button",296),S("click",function(){k(e);let o=h();return O(o.closeEditModal())}),l(35,"Cancel"),a(),r(36,"button",297),S("click",function(){k(e);let o=h();return O(o.saveEditedSession())}),l(37,"Save Changes"),a()()()()}if(n&2){let e=h();d(11),F(" ",e.formatDate((e.editingSession==null?null:e.editingSession.sessionDate)||""),""),d(4),F(" ",e.editingSession==null?null:e.editingSession.sessionType," "),d(4),ce("ngModel",e.editForm.maxPlayers),d(4),ce("ngModel",e.editForm.pricePerPerson),d(5),ce("ngModel",e.editForm.startTime),d(4),ce("ngModel",e.editForm.endTime)}}function NA(n,t){if(n&1&&(r(0,"div",301)(1,"span"),l(2,"Original Amount:"),a(),r(3,"strong"),l(4),_e(5,"number"),a()()),n&2){let e=h(3);d(4),F("\u20B1",be(5,1,e.selectedBookingForReview.originalAmount||e.selectedBookingForReview.totalAmount,"1.2-2"),"")}}function VA(n,t){if(n&1&&(r(0,"div",301)(1,"span"),w(2,"i",217),l(3," Credit Applied:"),a(),r(4,"strong"),l(5),_e(6,"number"),a()()),n&2){let e=h(3);d(5),ui("\u2212",e.selectedBookingForReview.creditsApplied||1," credit",(e.selectedBookingForReview.creditsApplied||1)===1?"":"s"," (\u20B1",be(6,3,e.selectedBookingForReview.creditAmount||0,"1.2-2"),")")}}function LA(n,t){if(n&1){let e=L();r(0,"div",305)(1,"div",306)(2,"span"),l(3),a(),r(4,"div",307)(5,"button",308),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.receiptZoomLevels,o,-.25))}),w(6,"i",309),a(),r(7,"span",310),l(8),a(),r(9,"button",311),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.receiptZoomLevels,o,.25))}),w(10,"i",312),a(),r(11,"button",313),S("click",function(){let o=k(e).index,s=h(4);return O(s.resetZoom(s.receiptZoomLevels,o))}),w(12,"i",314),a()()(),r(13,"div",315),S("mousedown",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.receiptZoomLevels,s)>1&&m.onImageDragStart(o))})("mousemove",function(o){k(e);let s=h(4);return O(s.onImageDragMove(o))})("mouseup",function(o){k(e);let s=h(4);return O(s.onImageDragEnd(o))})("mouseleave",function(o){k(e);let s=h(4);return O(s.onImageDragEnd(o))})("touchstart",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.receiptZoomLevels,s)>1&&m.onImageTouchStart(o))})("touchmove",function(o){k(e);let s=h(4);return O(s.onImageTouchMove(o))})("touchend",function(){k(e);let o=h(4);return O(o.onImageTouchEnd())}),w(14,"img",316),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(4);d(3),Se("Receipt ",i+1," of ",o.getReceiptUrls(o.selectedBookingForReview).length,""),d(2),x("disabled",o.getZoom(o.receiptZoomLevels,i)<=.5),d(3),F("",(o.getZoom(o.receiptZoomLevels,i)*100).toFixed(0),"%"),d(),x("disabled",o.getZoom(o.receiptZoomLevels,i)>=3),d(2),x("disabled",o.getZoom(o.receiptZoomLevels,i)===1),d(2),te("zoomed",o.getZoom(o.receiptZoomLevels,i)>1),d(),le("transform","scale("+o.getZoom(o.receiptZoomLevels,i)+")")("transform-origin","top center"),Kt("alt","Payment Receipt ",i+1,""),x("src",e,Ie)}}function FA(n,t){if(n&1&&(r(0,"div"),A(1,LA,15,15,"div",304),a()),n&2){let e=h(3);d(),x("ngForOf",e.getReceiptUrls(e.selectedBookingForReview))}}function zA(n,t){n&1&&(r(0,"div",317),w(1,"i",318),r(2,"p"),l(3,"No receipt uploaded"),a()())}function UA(n,t){if(n&1&&(r(0,"div",286)(1,"div",300)(2,"div",301)(3,"span"),l(4,"Booked By:"),a(),r(5,"strong"),l(6),a()(),r(7,"div",301)(8,"span"),l(9,"Players:"),a(),r(10,"strong"),l(11),a()(),A(12,NA,6,4,"div",302)(13,VA,7,6,"div",302),r(14,"div",301)(15,"span"),l(16),a(),r(17,"strong"),l(18),_e(19,"number"),a()(),r(20,"div",301)(21,"span"),l(22,"Player Names:"),a(),r(23,"strong"),l(24),a()()(),r(25,"div",303),A(26,FA,2,1,"div",196)(27,zA,4,0,"ng-template",null,2,ln),a()()),n&2){let e=Jt(28),i=h(2);d(6),R(i.selectedBookingForReview.fullname),d(5),R(i.selectedBookingForReview.numberOfPlayers),d(),x("ngIf",(i.selectedBookingForReview.creditsApplied||0)>0||i.selectedBookingForReview.creditId),d(),x("ngIf",(i.selectedBookingForReview.creditsApplied||0)>0||i.selectedBookingForReview.creditId),d(3),F("Amount",(i.selectedBookingForReview.creditsApplied||0)>0||i.selectedBookingForReview.creditId?" to Pay":"",":"),d(2),F("\u20B1",be(19,9,i.selectedBookingForReview.totalAmount,"1.2-2"),""),d(6),R(i.selectedBookingForReview.playerNames.join(", ")),d(2),x("ngIf",i.getReceiptUrls(i.selectedBookingForReview).length>0)("ngIfElse",e)}}function jA(n,t){if(n&1){let e=L();we(0),r(1,"button",319),S("click",function(){k(e);let o=h(2);return O(o.openDeclineModal(o.selectedBookingForReview))}),w(2,"i",320),l(3," Decline "),a(),r(4,"button",321),S("click",function(){k(e);let o=h(2);return O(o.verifyPayment(o.selectedBookingForReview))}),w(5,"i",322),l(6," Verify Payment "),a(),Pe()}}function HA(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeReceiptReview())}),r(1,"div",298),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",233),l(5," Payment Receipt"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeReceiptReview())}),w(7,"i",257),a()(),A(8,UA,29,12,"div",299),r(9,"div",270)(10,"button",296),S("click",function(){k(e);let o=h();return O(o.closeReceiptReview())}),l(11,"Close"),a(),A(12,jA,7,0,"ng-container",17),a()()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedBookingForReview),d(4),x("ngIf",(e.selectedBookingForReview==null?null:e.selectedBookingForReview.status)==="PENDING_PAYMENT")}}function WA(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeDeclineModal())}),r(1,"div",323),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",324),l(5," Decline Payment"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeDeclineModal())}),w(7,"i",257),a()(),r(8,"div",286)(9,"p"),l(10,"Decline payment for "),r(11,"strong"),l(12),a(),l(13,"?"),a(),r(14,"div",262)(15,"label"),l(16,"Reason for declining:"),a(),r(17,"textarea",325),pe("ngModelChange",function(o){k(e);let s=h();return de(s.declineReason,o)||(s.declineReason=o),O(o)}),a()()(),r(18,"div",270)(19,"button",296),S("click",function(){k(e);let o=h();return O(o.closeDeclineModal())}),l(20,"Cancel"),a(),r(21,"button",326),S("click",function(){k(e);let o=h();return O(o.confirmDecline())}),l(22,"Confirm Decline"),a()()()()}if(n&2){let e=h();d(12),R(e.selectedBookingForReview==null?null:e.selectedBookingForReview.fullname),d(5),ce("ngModel",e.declineReason)}}function GA(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeCancelBookingModal())}),r(1,"div",323),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",327),l(5," Cancel Booking"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeCancelBookingModal())}),w(7,"i",257),a()(),r(8,"div",286)(9,"p"),l(10,"Cancel verified booking for "),r(11,"strong"),l(12),a(),l(13,"?"),a(),r(14,"p",328),l(15,"The user will be notified via email about this cancellation."),a(),r(16,"div",262)(17,"label"),l(18,"Reason for cancellation:"),a(),r(19,"textarea",329),pe("ngModelChange",function(o){k(e);let s=h();return de(s.cancelReason,o)||(s.cancelReason=o),O(o)}),a()()(),r(20,"div",270)(21,"button",296),S("click",function(){k(e);let o=h();return O(o.closeCancelBookingModal())}),l(22,"Go Back"),a(),r(23,"button",326),S("click",function(){k(e);let o=h();return O(o.confirmCancelBooking())}),l(24,"Confirm Cancellation"),a()()()()}if(n&2){let e=h();d(12),R(e.selectedBookingForCancel==null?null:e.selectedBookingForCancel.fullname),d(7),ce("ngModel",e.cancelReason)}}function qA(n,t){if(n&1){let e=L();r(0,"button",296),S("click",function(){k(e);let o=h(2);return O(o.closeConfirmModal())}),l(1),a()}if(n&2){let e=h(2);d(),F(" ",e.confirmModalConfig.cancelText," ")}}function $A(n,t){if(n&1){let e=L();r(0,"div",330),S("click",function(){k(e);let o=h();return O(o.closeConfirmModal())}),r(1,"div",331),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",211),l(5),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeConfirmModal())}),w(7,"i",257),a()(),r(8,"div",286)(9,"p",332),l(10),a()(),r(11,"div",270),A(12,qA,2,1,"button",333),r(13,"button",334),S("click",function(){k(e);let o=h();return O(o.confirmModalAction())}),l(14),a()()()()}if(n&2){let e=h();d(2),te("danger-header",e.confirmModalConfig.isDanger),d(2),te("bi-exclamation-triangle",e.confirmModalConfig.isDanger)("bi-question-circle",!e.confirmModalConfig.isDanger),d(),F(" ",e.confirmModalConfig.title," "),d(5),R(e.confirmModalConfig.message),d(2),x("ngIf",e.confirmModalConfig.cancelText),d(),te("btn-danger",e.confirmModalConfig.isDanger)("btn-primary",!e.confirmModalConfig.isDanger),d(),F(" ",e.confirmModalConfig.confirmText," ")}}function YA(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.cancelEarlyCheckIn())}),r(1,"div",335),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",336),l(5," Session Not Started Yet"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.cancelEarlyCheckIn())}),w(7,"i",257),a()(),r(8,"div",337)(9,"p"),l(10,"This session will start in "),r(11,"strong"),l(12),a(),l(13,". Are you sure you want to scan players in early?"),a()(),r(14,"div",338)(15,"button",296),S("click",function(){k(e);let o=h();return O(o.cancelEarlyCheckIn())}),l(16,"Cancel"),a(),r(17,"button",297),S("click",function(){k(e);let o=h();return O(o.confirmEarlyCheckIn())}),w(18,"i",161),l(19," Yes, Continue"),a()()()()}if(n&2){let e=h();d(12),Se("",e.earlyCheckInMinutes," minute",e.earlyCheckInMinutes!==1?"s":"","")}}function XA(n,t){if(n&1){let e=L();r(0,"div",348)(1,"button",349),S("click",function(){k(e);let o=h(2);return O(o.switchScanMode("camera"))}),w(2,"i",350),l(3," Camera "),a(),r(4,"button",349),S("click",function(){k(e);let o=h(2);return O(o.switchScanMode("upload"))}),w(5,"i",318),l(6," Upload Image "),a()()}if(n&2){let e=h(2);d(),te("active",e.scanMode==="camera"),d(3),te("active",e.scanMode==="upload")}}function ZA(n,t){n&1&&(we(0),w(1,"i",354),r(2,"span"),l(3,"Click to choose a QR code image"),a(),r(4,"small"),l(5,"JPG, PNG, GIF, WebP supported"),a(),Pe())}function QA(n,t){n&1&&(we(0),w(1,"div",355),r(2,"span"),l(3,"Reading QR code\u2026"),a(),Pe())}function KA(n,t){if(n&1){let e=L();r(0,"div",351)(1,"label",352),A(2,ZA,6,0,"ng-container",17)(3,QA,4,0,"ng-container",17),a(),r(4,"input",353),S("change",function(o){k(e);let s=h(2);
71return O(s.onUploadQrFile(o))}),a()()}if(n&2){let e=h(2);d(),te("processing",e.isProcessingUpload),d(),x("ngIf",!e.isProcessingUpload),d(),x("ngIf",e.isProcessingUpload),d(),x("disabled",e.isProcessingUpload)}}function JA(n,t){if(n&1&&(r(0,"div",356)(1,"div",357),w(2,"i",358),a(),r(3,"h4"),l(4,"Check-In Successful!"),a(),r(5,"p",359),l(6),a(),r(7,"div",360)(8,"span"),w(9,"i",11),l(10),a(),r(11,"span"),w(12,"i",136),l(13),a(),r(14,"span"),w(15,"i",361),l(16),a()(),r(17,"span",362),w(18,"i",363),l(19," Now Playing"),a()()),n&2){let e=h(2);d(6),R(e.scanResult.playerName),d(4),F(" ",e.scanResult.sessionDate,""),d(3),Se(" ",e.scanResult.sessionStartTime," \u2013 ",e.scanResult.sessionEndTime,""),d(3),F(" ",e.scanResult.bookingId,"")}}function eD(n,t){if(n&1&&(r(0,"div",364)(1,"div",357),w(2,"i",365),a(),r(3,"h4"),l(4,"Scan Failed"),a(),r(5,"p"),l(6),a()()),n&2){let e=h(2);d(6),R(e.scanError)}}function tD(n,t){if(n&1){let e=L();r(0,"button",297),S("click",function(){k(e);let o=h(2);return O(o.rescanQr())}),w(1,"i",366),l(2," Try Again "),a()}}function nD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeScanModal())}),r(1,"div",339),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",161),l(5," Scan Player QR Code"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeScanModal())}),w(7,"i",257),a()(),r(8,"div",340),A(9,XA,7,4,"div",341),w(10,"div",342),A(11,KA,5,5,"div",343)(12,JA,20,5,"div",344)(13,eD,7,1,"div",345),a(),r(14,"div",346),A(15,tD,3,0,"button",347),r(16,"button",296),S("click",function(){k(e);let o=h();return O(o.closeScanModal())}),l(17,"Close"),a()()()()}if(n&2){let e=h();d(9),x("ngIf",!e.scanResult&&!e.scanError),d(),te("hidden",e.scanMode!=="camera"||e.scanResult||e.scanError),d(),x("ngIf",e.scanMode==="upload"&&!e.scanResult&&!e.scanError),d(),x("ngIf",e.scanResult),d(),x("ngIf",e.scanError&&!e.scanResult),d(2),x("ngIf",e.scanResult||e.scanError)}}function iD(n,t){n&1&&(r(0,"div",390),w(1,"div",41),r(2,"span"),l(3,"Loading discount types..."),a()())}function oD(n,t){if(n&1){let e=L();r(0,"div",391),w(1,"i",371),r(2,"p"),l(3,"No discount types configured yet."),a(),r(4,"button",372),S("click",function(){k(e);let o=h(2);return O(o.openDiscountModal())}),w(5,"i",373),l(6," Create First Discount Type"),a()()}}function rD(n,t){if(n&1){let e=L();r(0,"div",394)(1,"div",395)(2,"div",396),w(3,"i",397),a(),r(4,"div",398)(5,"div",399),l(6),a(),r(7,"div",400),l(8),a(),r(9,"div",401)(10,"span",402),l(11),a(),r(12,"span",403),l(13),a(),r(14,"span",404),w(15,"i",233),l(16),a()()()(),r(17,"div",405)(18,"span",406),w(19,"i",211),l(20),a(),r(21,"div",407)(22,"button",408),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openDiscountModal(o))}),w(23,"i",102),l(24," Edit "),a(),r(25,"button",409),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.toggleDiscountActive(o))}),w(26,"i",211),l(27),a()()()()}if(n&2){let e=t.$implicit;te("inactive",!e.isActive),d(2),te("icon-active",e.isActive)("icon-inactive",!e.isActive),d(4),R(e.name),d(2),R(e.description||"No description"),d(3),F(" ",e.discountMode==="PERCENTAGE"?e.discountValue+"% off":"\u20B1"+e.discountValue+" off"," "),d(2),R(e.discountMode==="PERCENTAGE"?"Percentage":"Fixed Amount"),d(),te("vat-exclusive",e.vatTreatment==="VAT_EXCLUSIVE")("vat-inclusive",e.vatTreatment!=="VAT_EXCLUSIVE"),d(2),F(" ",e.vatTreatment==="VAT_EXCLUSIVE"?"VAT-Exclusive (VAT "+(e.vatRate||12)+"%)":"VAT-Inclusive"," "),d(2),te("status-active",e.isActive)("status-inactive",!e.isActive),d(),te("bi-check-circle-fill",e.isActive)("bi-dash-circle",!e.isActive),d(),F(" ",e.isActive?"Active":"Inactive"," "),d(5),te("btn-decline",e.isActive)("btn-approve",!e.isActive),x("title",e.isActive?"Deactivate":"Activate"),d(),te("bi-toggle-on",e.isActive)("bi-toggle-off",!e.isActive),d(),F(" ",e.isActive?"Deactivate":"Activate"," ")}}function aD(n,t){if(n&1&&(r(0,"div",392),A(1,rD,28,34,"div",393),a()),n&2){let e=h(2);d(),x("ngForOf",e.adminDiscountTypes)}}function sD(n,t){if(n&1&&(r(0,"span",410),l(1),a()),n&2){let e=h(2);d(),R(e.pendingDiscountBookings.length)}}function lD(n,t){n&1&&(r(0,"div",391),w(1,"i",26),r(2,"p"),l(3,"All caught up! No pending discount approvals."),a()())}function cD(n,t){if(n&1){let e=L();r(0,"div",413)(1,"div",414)(2,"div",415)(3,"div",416),l(4),a(),r(5,"div")(6,"div",417),l(7),a(),r(8,"div",418),l(9),a()()(),r(10,"span",419),w(11,"i",397),l(12),a()(),r(13,"div",420)(14,"div",421)(15,"span",422),l(16,"Original"),a(),r(17,"span",423),l(18),_e(19,"number"),a()(),w(20,"i",424),r(21,"div",421)(22,"span",422),l(23,"After Discount"),a(),r(24,"span",425),l(25),_e(26,"number"),a()(),r(27,"div",421)(28,"span",422),l(29,"Savings"),a(),r(30,"span",426),l(31),_e(32,"number"),a()()(),r(33,"div",427)(34,"button",232),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openIdProofModal(o))}),w(35,"i",250),l(36," View ID Proof "),a(),r(37,"button",428),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.approveDiscount(o.id))}),w(38,"i",26),l(39),a(),r(40,"button",235),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openRejectDiscountModal(o))}),w(41,"i",128),l(42," Reject "),a()()()}if(n&2){let e=t.$implicit,i=h(3);d(4),R((e.fullname||"?")[0].toUpperCase()),d(3),R(e.fullname),d(2),R(e.bookingId),d(3),F(" ",(e.discountType==null?null:e.discountType.name)||"\u2014"," "),d(6),F("\u20B1",be(19,9,e.originalAmount,"1.2-2"),""),d(7),F("\u20B1",be(26,12,e.totalAmount,"1.2-2"),""),d(6),F("\u2212\u20B1",be(32,15,(e.originalAmount||0)-(e.totalAmount||0),"1.2-2"),""),d(6),x("disabled",i.isApprovingDiscount),d(2),F(" ",i.isApprovingDiscount?"Approving...":"Approve"," ")}}function dD(n,t){if(n&1&&(r(0,"div",411),A(1,cD,43,18,"div",412),a()),n&2){let e=h(2);d(),x("ngForOf",e.pendingDiscountBookings)}}function pD(n,t){if(n&1&&(r(0,"span",429),l(1),a()),n&2){let e=h(2);d(),R(e.verifiedEligibilities.length)}}function mD(n,t){n&1&&(r(0,"div",391),w(1,"i",430),r(2,"p"),l(3,"No verified beneficiaries yet."),a()())}function gD(n,t){if(n&1&&(r(0,"div",445),l(1),a()),n&2){let e=h().$implicit;d(),F("@",e.username,"")}}function uD(n,t){if(n&1&&(r(0,"span",449),l(1),a()),n&2){let e=h(2).$implicit;d(),F("by ",e.verifiedBy,"")}}function fD(n,t){if(n&1&&(r(0,"div",446)(1,"span",447),l(2),_e(3,"date"),a(),A(4,uD,2,1,"span",448),a()),n&2){let e=h().$implicit;d(2),R(be(3,2,e.verifiedAt,"MMM d, y")),d(2),x("ngIf",e.verifiedBy)}}function hD(n,t){if(n&1){let e=L();r(0,"div",433),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openVerifiedDetailModal(o))}),w(1,"div",434),r(2,"div",435)(3,"div",436),l(4),a(),r(5,"div",437)(6,"div",438),l(7),a(),A(8,gD,2,1,"div",439),r(9,"div",440),w(10,"i",397),l(11),a()(),r(12,"div",441)(13,"span",442),w(14,"i",238),l(15," Verified "),a(),A(16,fD,5,5,"div",443),a(),w(17,"i",444),a()()}if(n&2){let e=t.$implicit;d(4),R((e.fullname||e.username||"?")[0].toUpperCase()),d(3),R(e.fullname||e.username||e.userId),d(),x("ngIf",e.username),d(3),F(" ",e.discountTypeName," "),d(5),x("ngIf",e.verifiedAt)}}function _D(n,t){if(n&1&&(r(0,"div",431),A(1,hD,18,5,"div",432),a()),n&2){let e=h(2);d(),x("ngForOf",e.verifiedEligibilities)}}function xD(n,t){if(n&1&&(r(0,"div",445),l(1),a()),n&2){let e=h().$implicit;d(),F("@",e.username,"")}}function vD(n,t){if(n&1&&(r(0,"span",449),l(1),a()),n&2){let e=h(2).$implicit;d(),F("by ",e.revokedBy,"")}}function bD(n,t){if(n&1&&(r(0,"div",446)(1,"span",447),l(2),_e(3,"date"),a(),A(4,vD,2,1,"span",448),a()),n&2){let e=h().$implicit;d(2),R(be(3,2,e.revokedAt,"MMM d, y")),d(2),x("ngIf",e.revokedBy)}}function yD(n,t){if(n&1){let e=L();r(0,"div",454),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openRevokedDetailModal(o))}),w(1,"div",455),r(2,"div",435)(3,"div",456),l(4),a(),r(5,"div",437)(6,"div",438),l(7),a(),A(8,xD,2,1,"div",439),r(9,"div",440),w(10,"i",397),l(11),a()(),r(12,"div",441)(13,"span",457),w(14,"i",458),l(15," Revoked "),a(),A(16,bD,5,5,"div",443),a(),w(17,"i",444),a()()}if(n&2){let e=t.$implicit;d(4),R((e.fullname||e.username||"?")[0].toUpperCase()),d(3),R(e.fullname||e.username||e.userId),d(),x("ngIf",e.username),d(3),F(" ",e.discountTypeName," "),d(5),x("ngIf",e.revokedAt)}}function CD(n,t){if(n&1&&(r(0,"div",450)(1,"div",383)(2,"div",384),w(3,"i",451),r(4,"span"),l(5,"Revoked Beneficiaries"),a(),r(6,"span",452),l(7),a()(),r(8,"p",387),l(9,"Players whose discount eligibility was revoked. They can re-submit proof on their next booking."),a()(),r(10,"div",431),A(11,yD,18,5,"div",453),a()()),n&2){let e=h(2);d(7),R(e.revokedEligibilities.length),d(4),x("ngForOf",e.revokedEligibilities)}}function wD(n,t){if(n&1){let e=L();r(0,"div",367)(1,"div",368)(2,"div",369)(3,"div",370),w(4,"i",371),r(5,"span"),l(6,"Discount Types"),a()(),r(7,"button",372),S("click",function(){k(e);let o=h();return O(o.openDiscountModal())}),w(8,"i",373),l(9," Add Discount Type "),a()(),A(10,iD,4,0,"div",374)(11,oD,7,0,"div",375)(12,aD,2,1,"div",376),a(),r(13,"div",377)(14,"div",378)(15,"div",379),w(16,"i",242),r(17,"span"),l(18,"Pending Discount Approvals"),a(),A(19,sD,2,1,"span",380),a()(),A(20,lD,4,0,"div",375)(21,dD,2,1,"div",381),a(),r(22,"div",382)(23,"div",383)(24,"div",384),w(25,"i",385),r(26,"span"),l(27,"Verified Beneficiaries"),a(),A(28,pD,2,1,"span",386),a(),r(29,"p",387),l(30,"Players with approved discount eligibility. Click a card to view details or revoke."),a()(),A(31,mD,4,0,"div",375)(32,_D,2,1,"div",388),a(),A(33,CD,12,2,"div",389),a()}if(n&2){let e=h();d(10),x("ngIf",e.isLoadingDiscounts),d(),x("ngIf",!e.isLoadingDiscounts&&e.adminDiscountTypes.length===0),d(),x("ngIf",!e.isLoadingDiscounts&&e.adminDiscountTypes.length>
710),d(7),x("ngIf",e.pendingDiscountBookings.length>0),d(),x("ngIf",e.pendingDiscountBookings.length===0),d(),x("ngIf",e.pendingDiscountBookings.length>0),d(7),x("ngIf",e.verifiedEligibilities.length>0),d(3),x("ngIf",e.verifiedEligibilities.length===0),d(),x("ngIf",e.verifiedEligibilities.length>0),d(),x("ngIf",e.revokedEligibilities.length>0)}}function PD(n,t){if(n&1){let e=L();r(0,"div",262)(1,"label"),l(2,"VAT Rate (%) "),r(3,"span",460),l(4,"*"),a()(),r(5,"div",478)(6,"input",479),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.discountForm.vatRate,o)||(s.discountForm.vatRate=o),O(o)}),a(),r(7,"span",480),l(8,"%"),a()(),r(9,"p",481),w(10,"i",482),l(11),a()()}if(n&2){let e=h(2);d(6),ce("ngModel",e.discountForm.vatRate),d(5),F(" Base price = Gross \xF7 (1 + ",e.discountForm.vatRate||12,"%). Discount is then applied to the base price. ")}}function MD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.showDiscountModal=!1)}),r(1,"div",459),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",14),l(5),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.showDiscountModal=!1)}),w(7,"i",257),a()(),r(8,"div",286)(9,"div",262)(10,"label"),l(11,"Name "),r(12,"span",460),l(13,"*"),a()(),r(14,"input",461),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.name,o)||(s.discountForm.name=o),O(o)}),a()(),r(15,"div",262)(16,"label"),l(17,"Description"),a(),r(18,"input",462),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.description,o)||(s.discountForm.description=o),O(o)}),a()(),r(19,"div",261)(20,"div",262)(21,"label"),l(22,"Discount Mode "),r(23,"span",460),l(24,"*"),a()(),r(25,"select",49),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.discountMode,o)||(s.discountForm.discountMode=o),O(o)}),r(26,"option",463),l(27,"Percentage (%)"),a(),r(28,"option",464),l(29,"Fixed Amount (\u20B1)"),a()()(),r(30,"div",262)(31,"label"),l(32,"Value "),r(33,"span",460),l(34,"*"),a()(),r(35,"input",465),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.discountValue,o)||(s.discountForm.discountValue=o),O(o)}),a()()(),r(36,"div",262)(37,"label"),l(38,"VAT Treatment "),r(39,"span",460),l(40,"*"),a()(),r(41,"div",466)(42,"label",467)(43,"input",468),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.vatTreatment,o)||(s.discountForm.vatTreatment=o),O(o)}),a(),r(44,"span",469)(45,"span",470),l(46,"VAT-Inclusive"),a(),r(47,"span",471),l(48,"Discount is applied to the gross (VAT-inclusive) price. Standard behavior."),a()()(),r(49,"label",467)(50,"input",472),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.vatTreatment,o)||(s.discountForm.vatTreatment=o),O(o)}),a(),r(51,"span",469)(52,"span",470),l(53,"VAT-Exclusive"),a(),r(54,"span",471),l(55,"VAT is removed first; discount applies only to the ex-VAT base price. Used for PWD/Senior discounts per RA."),a()()()()(),A(56,PD,12,2,"div",473),r(57,"div",474)(58,"label",475)(59,"input",476),pe("ngModelChange",function(o){k(e);let s=h();return de(s.discountForm.isActive,o)||(s.discountForm.isActive=o),O(o)}),a(),w(60,"i",211),l(61),a()()(),r(62,"div",270)(63,"button",296),S("click",function(){k(e);let o=h();return O(o.showDiscountModal=!1)}),l(64,"Cancel"),a(),r(65,"button",477),S("click",function(){k(e);let o=h();return O(o.saveDiscountType())}),w(66,"i",211),l(67),a()()()()}if(n&2){let e=h();d(5),F(" ",e.editingDiscountType?"Edit Discount Type":"New Discount Type",""),d(9),ce("ngModel",e.discountForm.name),d(4),ce("ngModel",e.discountForm.description),d(7),ce("ngModel",e.discountForm.discountMode),d(10),ce("ngModel",e.discountForm.discountValue),x("placeholder",e.discountForm.discountMode==="PERCENTAGE"?"e.g. 20 for 20%":"e.g. 50 for \u20B150"),d(7),te("selected",e.discountForm.vatTreatment==="VAT_INCLUSIVE"),d(),ce("ngModel",e.discountForm.vatTreatment),d(6),te("selected",e.discountForm.vatTreatment==="VAT_EXCLUSIVE"),d(),ce("ngModel",e.discountForm.vatTreatment),d(6),x("ngIf",e.discountForm.vatTreatment==="VAT_EXCLUSIVE"),d(2),te("checked",e.discountForm.isActive),d(),ce("ngModel",e.discountForm.isActive),d(),te("bi-check-circle-fill",e.discountForm.isActive)("bi-circle",!e.discountForm.isActive),d(),F(" ",e.discountForm.isActive?"Active \u2014 visible to players in booking form":"Inactive \u2014 hidden from players"," "),d(4),x("disabled",e.isSavingDiscount),d(),te("bi-save",!e.isSavingDiscount)("bi-hourglass-split",e.isSavingDiscount),d(),F(" ",e.isSavingDiscount?"Saving...":"Save Discount Type"," ")}}function SD(n,t){n&1&&(r(0,"div",500),w(1,"div",501),r(2,"span"),l(3,"Loading ID images..."),a()())}function kD(n,t){n&1&&(r(0,"div",502),w(1,"i",318),r(2,"span"),l(3,"No ID images uploaded yet."),a()())}function OD(n,t){if(n&1){let e=L();r(0,"div",505)(1,"div",306)(2,"span",506),l(3),a(),r(4,"div",307)(5,"button",308),S("click",function(){let o=k(e).index,s=h(3);return O(s.zoom(s.idProofZoomLevels,o,-.25))}),w(6,"i",309),a(),r(7,"span",310),l(8),a(),r(9,"button",311),S("click",function(){let o=k(e).index,s=h(3);return O(s.zoom(s.idProofZoomLevels,o,.25))}),w(10,"i",312),a(),r(11,"button",313),S("click",function(){let o=k(e).index,s=h(3);return O(s.resetZoom(s.idProofZoomLevels,o))}),w(12,"i",314),a()()(),r(13,"div",315),S("mousedown",function(o){let s=k(e).index,m=h(3);return O(m.getZoom(m.idProofZoomLevels,s)>1&&m.onImageDragStart(o))})("mousemove",function(o){k(e);let s=h(3);return O(s.onImageDragMove(o))})("mouseup",function(o){k(e);let s=h(3);
71return O(s.onImageDragEnd(o))})("mouseleave",function(o){k(e);let s=h(3);return O(s.onImageDragEnd(o))})("touchstart",function(o){let s=k(e).index,m=h(3);return O(m.getZoom(m.idProofZoomLevels,s)>1&&m.onImageTouchStart(o))})("touchmove",function(o){k(e);let s=h(3);return O(s.onImageTouchMove(o))})("touchend",function(){k(e);let o=h(3);return O(o.onImageTouchEnd())}),w(14,"img",507),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(3);d(3),Se("",i+1," / ",o.idProofUrls.length,""),d(2),x("disabled",o.getZoom(o.idProofZoomLevels,i)<=.5),d(3),F("",(o.getZoom(o.idProofZoomLevels,i)*100).toFixed(0),"%"),d(),x("disabled",o.getZoom(o.idProofZoomLevels,i)>=3),d(2),x("disabled",o.getZoom(o.idProofZoomLevels,i)===1),d(2),te("zoomed",o.getZoom(o.idProofZoomLevels,i)>1),d(),le("transform","scale("+o.getZoom(o.idProofZoomLevels,i)+")")("transform-origin","top center"),Kt("alt","ID Proof ",i+1,""),x("src",e,Ie)}}function ED(n,t){if(n&1&&(r(0,"div",503),A(1,OD,15,15,"div",504),a()),n&2){let e=h(2);d(),x("ngForOf",e.idProofUrls)}}function TD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.showIdProofModal=!1)}),r(1,"div",459),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",250),l(5," Review ID Proof"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.showIdProofModal=!1)}),w(7,"i",257),a()(),r(8,"div",286)(9,"div",483)(10,"div",416),l(11),a(),r(12,"div")(13,"div",484),l(14),a(),r(15,"div",485),l(16),a()()(),r(17,"div",486)(18,"div",487)(19,"span",488),l(20,"Discount Type"),a(),r(21,"span",489),l(22),a()(),r(23,"div",487)(24,"span",488),l(25,"Original Amount"),a(),r(26,"span",490),l(27),_e(28,"number"),a()(),r(29,"div",487)(30,"span",488),l(31,"After Discount"),a(),r(32,"span",491),l(33),_e(34,"number"),a()(),r(35,"div",487)(36,"span",488),l(37,"Savings"),a(),r(38,"span",492),l(39),_e(40,"number"),a()()(),r(41,"div",493)(42,"div",494),w(43,"i",250),l(44," Uploaded ID Proof "),a(),A(45,SD,4,0,"div",495)(46,kD,4,0,"div",496)(47,ED,2,1,"div",497),a()(),r(48,"div",270)(49,"button",296),S("click",function(){k(e);let o=h();return O(o.showIdProofModal=!1)}),l(50,"Close"),a(),r(51,"button",498),S("click",function(){k(e);let o=h();return o.openRejectDiscountModal(o.selectedDiscountBooking),O(o.showIdProofModal=!1)}),w(52,"i",128),l(53," Reject "),a(),r(54,"button",499),S("click",function(){k(e);let o=h();return O(o.approveDiscount(o.selectedDiscountBooking.id))}),w(55,"i",26),l(56),a()()()()}if(n&2){let e,i=h();d(11),R(i.selectedDiscountBooking==null||i.selectedDiscountBooking.fullname==null||(e=i.selectedDiscountBooking.fullname.charAt(0))==null?null:e.toUpperCase()),d(3),R(i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.fullname),d(2),R(i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.bookingId),d(6),R((i.selectedDiscountBooking==null||i.selectedDiscountBooking.discountType==null?null:i.selectedDiscountBooking.discountType.name)||"\u2014"),d(5),F("\u20B1",be(28,12,i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.originalAmount,"1.2-2"),""),d(6),F("\u20B1",be(34,15,i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.totalAmount,"1.2-2"),""),d(6),F("\u2212\u20B1",be(40,18,((i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.originalAmount)||0)-((i.selectedDiscountBooking==null?null:i.selectedDiscountBooking.totalAmount)||0),"1.2-2"),""),d(6),x("ngIf",i.isLoadingIdProof),d(),x("ngIf",!i.isLoadingIdProof&&i.idProofUrls.length===0),d(),x("ngIf",!i.isLoadingIdProof&&i.idProofUrls.length>0),d(7),x("disabled",i.isApprovingDiscount),d(2),F(" ",i.isApprovingDiscount?"Approving...":"Approve Discount"," ")}}function ID(n,t){if(n&1&&(r(0,"div",485),l(1),a()),n&2){let e=h(3);d(),F("@",e.selectedVerifiedEligibility.username,"")}}function AD(n,t){n&1&&(r(0,"div",500),w(1,"div",501),r(2,"span"),l(3,"Loading..."),a()())}function DD(n,t){n&1&&(r(0,"div",502),w(1,"i",318),r(2,"span"),l(3,"No ID images on file."),a()())}function RD(n,t){if(n&1){let e=L();r(0,"div",505)(1,"div",306)(2,"span",506),l(3),a(),r(4,"div",307)(5,"button",308),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.verifiedProofZoomLevels,o,-.25))}),w(6,"i",309),a(),r(7,"span",310),l(8),a(),r(9,"button",311),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.verifiedProofZoomLevels,o,.25))}),w(10,"i",312),a(),r(11,"button",313),S("click",function(){let o=k(e).index,s=h(4);return O(s.resetZoom(s.verifiedProofZoomLevels,o))}),w(12,"i",314),a()()(),r(13,"div",315),S("mousedown",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.verifiedProofZoomLevels,s)>1&&m.onImageDragStart(o))})("mousemove",function(o){k(e);let s=h(4);return O(s.onImageDragMove(o))})("mouseup",function(o){k(e);let s=h(4);
71return O(s.onImageDragEnd(o))})("mouseleave",function(o){k(e);let s=h(4);return O(s.onImageDragEnd(o))})("touchstart",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.verifiedProofZoomLevels,s)>1&&m.onImageTouchStart(o))})("touchmove",function(o){k(e);let s=h(4);return O(s.onImageTouchMove(o))})("touchend",function(){k(e);let o=h(4);return O(o.onImageTouchEnd())}),w(14,"img",507),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(4);d(3),Se("",i+1," / ",o.verifiedDetailProofUrls.length,""),d(2),x("disabled",o.getZoom(o.verifiedProofZoomLevels,i)<=.5),d(3),F("",(o.getZoom(o.verifiedProofZoomLevels,i)*100).toFixed(0),"%"),d(),x("disabled",o.getZoom(o.verifiedProofZoomLevels,i)>=3),d(2),x("disabled",o.getZoom(o.verifiedProofZoomLevels,i)===1),d(2),te("zoomed",o.getZoom(o.verifiedProofZoomLevels,i)>1),d(),le("transform","scale("+o.getZoom(o.verifiedProofZoomLevels,i)+")")("transform-origin","top center"),Kt("alt","ID Proof ",i+1,""),x("src",e,Ie)}}function BD(n,t){if(n&1&&(r(0,"div",503),A(1,RD,15,15,"div",504),a()),n&2){let e=h(3);d(),x("ngForOf",e.verifiedDetailProofUrls)}}function ND(n,t){if(n&1&&(r(0,"div",286)(1,"div",483)(2,"div",511),l(3),a(),r(4,"div")(5,"div",484),l(6),a(),A(7,ID,2,1,"div",512),a()(),r(8,"div",486)(9,"div",487)(10,"span",488),l(11,"Discount Type"),a(),r(12,"span",489),l(13),a()(),r(14,"div",487)(15,"span",488),l(16,"Status"),a(),r(17,"span",513),w(18,"i",238),l(19," Verified "),a()(),r(20,"div",487)(21,"span",488),l(22,"Verified On"),a(),r(23,"span",490),l(24),_e(25,"date"),a()(),r(26,"div",487)(27,"span",488),l(28,"Verified By"),a(),r(29,"span",490),l(30),a()(),r(31,"div",487)(32,"span",488),l(33,"Submitted On"),a(),r(34,"span",490),l(35),_e(36,"date"),a()()(),r(37,"div",493)(38,"div",494),w(39,"i",250),l(40," Uploaded ID Proof "),a(),A(41,AD,4,0,"div",495)(42,DD,4,0,"div",496)(43,BD,2,1,"div",497),a()()),n&2){let e=h(2);d(3),F(" ",(e.selectedVerifiedEligibility.fullname||e.selectedVerifiedEligibility.username||"?")[0].toUpperCase()," "),d(3),R(e.selectedVerifiedEligibility.fullname||e.selectedVerifiedEligibility.username),d(),x("ngIf",e.selectedVerifiedEligibility.username),d(6),R(e.selectedVerifiedEligibility.discountTypeName),d(11),R(e.selectedVerifiedEligibility.verifiedAt?be(25,10,e.selectedVerifiedEligibility.verifiedAt,"MMM d, y, h:mm a"):"\u2014"),d(6),R(e.selectedVerifiedEligibility.verifiedBy||"\u2014"),d(5),R(be(36,13,e.selectedVerifiedEligibility.submittedAt,"MMM d, y, h:mm a")),d(6),x("ngIf",e.isLoadingVerifiedProof),d(),x("ngIf",!e.isLoadingVerifiedProof&&e.verifiedDetailProofUrls.length===0),d(),x("ngIf",!e.isLoadingVerifiedProof&&e.verifiedDetailProofUrls.length>0)}}function VD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.showVerifiedDetailModal=!1)}),r(1,"div",508),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",509)(3,"h3"),w(4,"i",510),l(5," Verified Beneficiary"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.showVerifiedDetailModal=!1)}),w(7,"i",257),a()(),A(8,ND,44,16,"div",299),r(9,"div",270)(10,"button",296),S("click",function(){k(e);let o=h();return O(o.showVerifiedDetailModal=!1)}),l(11,"Close"),a(),r(12,"button",326),S("click",function(){k(e);let o=h();return O(o.requestRevoke(o.selectedVerifiedEligibility))}),w(13,"i",244),l(14," Revoke Verification "),a()()()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedVerifiedEligibility)}}function LD(n,t){if(n&1&&(r(0,"div",485),l(1),a()),n&2){let e=h(3);d(),F("@",e.selectedRevokedEligibility.username,"")}}function FD(n,t){n&1&&(r(0,"div",500),w(1,"div",501),r(2,"span"),l(3,"Loading..."),a()())}function zD(n,t){n&1&&(r(0,"div",502),w(1,"i",318),r(2,"span"),l(3,"No ID images on file."),a()())}function UD(n,t){if(n&1){let e=L();r(0,"div",505)(1,"div",306)(2,"span",506),l(3),a(),r(4,"div",307)(5,"button",308),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.revokedProofZoomLevels,o,-.25))}),w(6,"i",309),a(),r(7,"span",310),l(8),a(),r(9,"button",311),S("click",function(){let o=k(e).index,s=h(4);return O(s.zoom(s.revokedProofZoomLevels,o,.25))}),w(10,"i",312),a(),r(11,"button",313),S("click",function(){let o=k(e).index,s=h(4);return O(s.resetZoom(s.revokedProofZoomLevels,o))}),w(12,"i",314),a()()(),r(13,"div",315),S("mousedown",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.revokedProofZoomLevels,s)>1&&m.onImageDragStart(o))})("mousemove",function(o){k(e);let s=h(4);return O(s.onImageDragMove(o))})("mouseup",function(o){k(e);let s=h(4);
71return O(s.onImageDragEnd(o))})("mouseleave",function(o){k(e);let s=h(4);return O(s.onImageDragEnd(o))})("touchstart",function(o){let s=k(e).index,m=h(4);return O(m.getZoom(m.revokedProofZoomLevels,s)>1&&m.onImageTouchStart(o))})("touchmove",function(o){k(e);let s=h(4);return O(s.onImageTouchMove(o))})("touchend",function(){k(e);let o=h(4);return O(o.onImageTouchEnd())}),w(14,"img",507),a()()}if(n&2){let e=t.$implicit,i=t.index,o=h(4);d(3),Se("",i+1," / ",o.revokedDetailProofUrls.length,""),d(2),x("disabled",o.getZoom(o.revokedProofZoomLevels,i)<=.5),d(3),F("",(o.getZoom(o.revokedProofZoomLevels,i)*100).toFixed(0),"%"),d(),x("disabled",o.getZoom(o.revokedProofZoomLevels,i)>=3),d(2),x("disabled",o.getZoom(o.revokedProofZoomLevels,i)===1),d(2),te("zoomed",o.getZoom(o.revokedProofZoomLevels,i)>1),d(),le("transform","scale("+o.getZoom(o.revokedProofZoomLevels,i)+")")("transform-origin","top center"),Kt("alt","ID Proof ",i+1,""),x("src",e,Ie)}}function jD(n,t){if(n&1&&(r(0,"div",503),A(1,UD,15,15,"div",504),a()),n&2){let e=h(3);d(),x("ngForOf",e.revokedDetailProofUrls)}}function HD(n,t){if(n&1&&(r(0,"div",286)(1,"div",483)(2,"div",517),l(3),a(),r(4,"div")(5,"div",484),l(6),a(),A(7,LD,2,1,"div",512),a()(),r(8,"div",486)(9,"div",487)(10,"span",488),l(11,"Discount Type"),a(),r(12,"span",489),l(13),a()(),r(14,"div",487)(15,"span",488),l(16,"Status"),a(),r(17,"span",518),w(18,"i",458),l(19," Revoked "),a()(),r(20,"div",487)(21,"span",488),l(22,"Revoked On"),a(),r(23,"span",490),l(24),_e(25,"date"),a()(),r(26,"div",487)(27,"span",488),l(28,"Revoked By"),a(),r(29,"span",490),l(30),a()(),r(31,"div",487)(32,"span",488),l(33,"Submitted On"),a(),r(34,"span",490),l(35),_e(36,"date"),a()()(),r(37,"div",493)(38,"div",494),w(39,"i",250),l(40," Uploaded ID Proof "),a(),A(41,FD,4,0,"div",495)(42,zD,4,0,"div",496)(43,jD,2,1,"div",497),a(),r(44,"div",519),w(45,"i",482),l(46," This player can re-submit their ID proof when booking again with a discount. "),a()()),n&2){let e=h(2);d(3),F(" ",(e.selectedRevokedEligibility.fullname||e.selectedRevokedEligibility.username||"?")[0].toUpperCase()," "),d(3),R(e.selectedRevokedEligibility.fullname||e.selectedRevokedEligibility.username),d(),x("ngIf",e.selectedRevokedEligibility.username),d(6),R(e.selectedRevokedEligibility.discountTypeName),d(11),R(e.selectedRevokedEligibility.revokedAt?be(25,10,e.selectedRevokedEligibility.revokedAt,"MMM d, y, h:mm a"):"\u2014"),d(6),R(e.selectedRevokedEligibility.revokedBy||"\u2014"),d(5),R(be(36,13,e.selectedRevokedEligibility.submittedAt,"MMM d, y, h:mm a")),d(6),x("ngIf",e.isLoadingRevokedProof),d(),x("ngIf",!e.isLoadingRevokedProof&&e.revokedDetailProofUrls.length===0),d(),x("ngIf",!e.isLoadingRevokedProof&&e.revokedDetailProofUrls.length>0)}}function WD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.showRevokedDetailModal=!1)}),r(1,"div",508),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",514)(3,"h3"),w(4,"i",515),l(5," Revoked Beneficiary"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.showRevokedDetailModal=!1)}),w(7,"i",257),a()(),A(8,HD,47,16,"div",299),r(9,"div",270)(10,"button",296),S("click",function(){k(e);let o=h();return O(o.showRevokedDetailModal=!1)}),l(11,"Close"),a(),r(12,"button",516),S("click",function(){k(e);let o=h();return O(o.restoreEligibility(o.selectedRevokedEligibility))}),w(13,"i",430),l(14),a()()()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedRevokedEligibility),d(4),x("disabled",e.isRestoring),d(2),F(" ",e.isRestoring?"Restoring...":"Restore to Verified"," ")}}function GD(n,t){if(n&1&&(r(0,"div",286)(1,"div",525)(2,"div",526),l(3),a(),r(4,"div",527)(5,"div",528),l(6),a(),r(7,"div",529),w(8,"i",397),l(9),a()()(),r(10,"p",530),l(11," Are you sure you want to revoke the "),r(12,"strong"),l(13),a(),l(14," discount eligibility for "),r(15,"strong"),l(16),a(),l(17,"? "),a(),r(18,"p",531),w(19,"i",482),l(20," The player's discount will be suspended. They can re-submit their ID proof on their next booking, or you can restore it manually. "),a()()),n&2){let e=h(2);d(3),F(" ",(e.eligibilityPendingRevoke.fullname||e.eligibilityPendingRevoke.username||"?")[0].toUpperCase()," "),d(3),R(e.eligibilityPendingRevoke.fullname||e.eligibilityPendingRevoke.username),d(3),F(" ",e.eligibilityPendingRevoke.discountTypeName," "),d(4),R(e.eligibilityPendingRevoke.discountTypeName),d(3),R(e.eligibilityPendingRevoke.fullname||e.eligibilityPendingRevoke.username)}}function qD(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.cancelRevoke())}),r(1,"div",520),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",521)(3,"h3"),w(4,"i",522),l(5," Confirm Revoke"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.cancelRevoke())}),w(7,"i",257),a()(),A(8,GD,21,5,"div",299),r(9,"div",270)(10,"button",523),S("click",function(){k(e);let o=h();return O(o.cancelRevoke())}),l(11,"Cancel"),a(),r(12,"button",524),S("click",function(){k(e);let o=h();return O(o.confirmRevoke())}),w(13,"i",244),l(14),a()()()()}if(n&2){let e=h();d(8),x("ngIf",e.eligibilityPendingRevoke),d(2),x("disabled",e.isUnverifying),d(2),x("disabled",e.isUnverifying),d(2),F(" ",e.isUnverifying?"Revoking...":"Yes, Revoke"," ")}}function $D(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.showRejectDiscountModal=!1)}),r(1,"div",459),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",128),l(5," Reject Discount"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.showRejectDiscountModal=!1)}),w(7,"i",257),a()(),r(8,"div",286)(9,"div",532),w(10,"i",533),r(11,"div")(12,"div",534),l(13),a(),r(14,"div",535),l(15),a()()(),r(16,"div",536)(17,"label"),l(18,"Re
71jection Reason "),r(19,"span",460),l(20,"*"),a()(),r(21,"textarea",537),pe("ngModelChange",function(o){k(e);let s=h();return de(s.rejectDiscountReason,o)||(s.rejectDiscountReason=o),O(o)}),a()()(),r(22,"div",270)(23,"button",296),S("click",function(){k(e);let o=h();return O(o.showRejectDiscountModal=!1)}),l(24,"Cancel"),a(),r(25,"button",538),S("click",function(){k(e);let o=h();return O(o.confirmRejectDiscount())}),w(26,"i",128),l(27," Confirm Rejection "),a()()()()}if(n&2){let e=h();d(13),R(e.selectedDiscountBooking==null?null:e.selectedDiscountBooking.fullname),d(2),Se("",e.selectedDiscountBooking==null?null:e.selectedDiscountBooking.bookingId," \u2022 ",e.selectedDiscountBooking==null||e.selectedDiscountBooking.discountType==null?null:e.selectedDiscountBooking.discountType.name,""),d(6),ce("ngModel",e.rejectDiscountReason)}}function YD(n,t){if(n&1&&(r(0,"span",544),l(1),a()),n&2){let e=h(2);d(),R(e.pendingRefundCount)}}function XD(n,t){n&1&&(r(0,"div",40),w(1,"div",41),r(2,"p",42),l(3,"Loading refund requests..."),a()())}function ZD(n,t){n&1&&(r(0,"div",545),w(1,"i",546),r(2,"p"),l(3,"No refund requests found."),a()())}function QD(n,t){if(n&1&&(r(0,"div",562),l(1),_e(2,"slice"),a()),n&2){let e=h().$implicit;d(),Se(" ",Ho(2,2,e.declineReason,0,60),"",e.declineReason.length>60?"\u2026":""," ")}}function KD(n,t){if(n&1){let e=L();r(0,"button",232),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.viewRefundPaymentProof(o))}),w(1,"i",233),l(2," View Receipt "),a()}}function JD(n,t){if(n&1){let e=L();r(0,"button",249),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.viewRefundProof(o))}),w(1,"i",250),l(2," View Proof "),a()}}function e9(n,t){if(n&1){let e=L();r(0,"button",234),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.openApproveRefundModal(o))}),w(1,"i",26),l(2," Approve "),a()}}function t9(n,t){if(n&1){let e=L();r(0,"button",235),S("click",function(){k(e);let o=h().$implicit,s=h(3);return O(s.openDeclineRefundModal(o))}),w(1,"i",128),l(2," Decline "),a()}}function n9(n,t){if(n&1&&(r(0,"tr")(1,"td")(2,"span",550),l(3),a()(),r(4,"td")(5,"div",551)(6,"strong"),l(7),a(),r(8,"small",328),l(9),a()()(),r(10,"td")(11,"div",552)(12,"span"),l(13),a(),r(14,"small",328),l(15),a()()(),r(16,"td",553),l(17),_e(18,"number"),a(),r(19,"td",554),l(20),_e(21,"date"),w(22,"br"),r(23,"small"),l(24),_e(25,"date"),a()(),r(26,"td")(27,"span",555),w(28,"i",211),l(29),a(),A(30,QD,3,6,"div",556),a(),r(31,"td",557)(32,"div",558),A(33,KD,3,0,"button",239)(34,JD,3,0,"button",559)(35,e9,3,0,"button",560)(36,t9,3,0,"button",561),a()()()),n&2){let e=t.$implicit,i=h(3);d(3),R(e.bookingDisplayId||"\u2014"),d(4),R(e.fullname),d(2),F("@",e.username,""),d(4),R(e.sessionDate||"\u2014"),d(2),Se("",e.sessionStartTime," - ",e.sessionEndTime,""),d(2),F("\u20B1",be(18,22,e.refundAmount,"1.2-2"),""),d(3),R(be(21,25,e.requestedAt,"MMM d, yyyy")),d(4),R(be(25,28,e.requestedAt,"h:mm a")),d(3),x("ngClass",i.getRefundStatusClass(e.status)),d(),te("bi-hourglass-split",e.status==="PENDING")("bi-check-circle-fill",e.status==="APPROVED")("bi-x-circle-fill",e.status==="DECLINED"),d(),F(" ",e.status," "),d(),x("ngIf",e.declineReason),d(3),x("ngIf",e.paymentProofUrl),d(),x("ngIf",e.status==="APPROVED"&&e.refundProofUrl),d(),x("ngIf",e.status==="PENDING"),d(),x("ngIf",e.status==="PENDING")}}function i9(n,t){if(n&1){let e=L();r(0,"div",563)(1,"button",149),S("click",function(){k(e);let o=h(3);return O(o.refundRequestsPrevPage())}),w(2,"i",150),a(),r(3,"span",151),l(4),a(),r(5,"button",149),S("click",function(){k(e);let o=h(3);return O(o.refundRequestsNextPage())}),w(6,"i",152),a()()}if(n&2){let e=h(3);d(),x("disabled",e.refundRequestsPage===0),d(3),Se("Page ",e.refundRequestsPage+1," of ",e.refundRequestsTotalPages,""),d(),x("disabled",e.refundRequestsPage>=e.refundRequestsTotalPages-1)}}function o9(n,t){if(n&1&&(r(0,"div",547)(1,"table",548)(2,"thead")(3,"tr")(4,"th"),l(5,"Booking ID"),a(),r(6,"th"),l(7,"Player"),a(),r(8,"th"),l(9,"Session"),a(),r(10,"th"),l(11,"Amount"),a(),r(12,"th"),l(13,"Requested"),a(),r(14,"th"),l(15,"Status"),a(),r(16,"th"),l(1
717,"Actions"),a()()(),r(18,"tbody"),A(19,n9,37,31,"tr",202),a()(),A(20,i9,7,4,"div",549),a()),n&2){let e=h(2);d(19),x("ngForOf",e.refundRequests),d(),x("ngIf",e.refundRequestsTotalPages>1)}}function r9(n,t){if(n&1){let e=L();r(0,"div")(1,"div",31)(2,"div",32)(3,"div",33)(4,"h2"),w(5,"i",15),l(6," Refund Requests"),a(),r(7,"p",34),l(8),a()()(),r(9,"div",539)(10,"button",540),S("click",function(){k(e);let o=h();return O(o.setRefundStatusFilter("ALL"))}),l(11,"All"),a(),r(12,"button",540),S("click",function(){k(e);let o=h();return O(o.setRefundStatusFilter("PENDING"))}),l(13," Pending "),A(14,YD,2,1,"span",541),a(),r(15,"button",540),S("click",function(){k(e);let o=h();return O(o.setRefundStatusFilter("APPROVED"))}),l(16,"Approved"),a(),r(17,"button",540),S("click",function(){k(e);let o=h();return O(o.setRefundStatusFilter("DECLINED"))}),l(18,"Declined"),a()(),A(19,XD,4,0,"div",36)(20,ZD,4,0,"div",542)(21,o9,21,2,"div",543),a()()}if(n&2){let e=h();d(8),F("",e.refundRequestsTotalElements," total request(s)"),d(2),te("active",e.refundStatusFilter==="ALL"),d(2),te("active",e.refundStatusFilter==="PENDING"),d(2),x("ngIf",e.pendingRefundCount>0),d(),te("active",e.refundStatusFilter==="APPROVED"),d(2),te("active",e.refundStatusFilter==="DECLINED"),d(2),x("ngIf",e.isLoadingRefunds),d(),x("ngIf",!e.isLoadingRefunds&&e.refundRequests.length===0),d(),x("ngIf",!e.isLoadingRefunds&&e.refundRequests.length>0)}}function a9(n,t){if(n&1&&(r(0,"div",570)(1,"p",571),w(2,"i",572),l(3," Send refund to"),a(),r(4,"div",573)(5,"span"),l(6,"Bank / e-Wallet"),a(),r(7,"strong"),l(8),a()(),r(9,"div",573)(10,"span"),l(11,"Account Number"),a(),r(12,"strong"),l(13),a()(),r(14,"div",573)(15,"span"),l(16,"Account Name"),a(),r(17,"strong"),l(18),a()()()),n&2){let e=h(2);d(8),R(e.selectedRefund==null?null:e.selectedRefund.refundBankName),d(5),R(e.selectedRefund==null?null:e.selectedRefund.refundAccountNumber),d(5),R(e.selectedRefund==null?null:e.selectedRefund.refundAccountName)}}function s9(n,t){if(n&1&&(r(0,"div",574),l(1),a()),n&2){let e=h(2);d(),Se(" ",e.refundProofFiles.length," ",e.refundProofFiles.length===1?"file":"files"," selected ")}}function l9(n,t){n&1&&(r(0,"span"),w(1,"i",26),l(2," Confirm Refund"),a())}function c9(n,t){n&1&&(r(0,"span"),w(1,"i",242),l(2," Processing..."),a())}function d9(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeApproveRefundModal())}),r(1,"div",459),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",564),l(5," Approve Refund"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeApproveRefundModal())}),w(7,"i",257),a()(),r(8,"div",286)(9,"p"),l(10,"Approving refund for booking "),r(11,"strong"),l(12),a(),l(13," \u2014 amount: "),r(14,"strong"),l(15),_e(16,"number"),a(),l(17,"."),a(),A(18,a9,19,3,"div",565),r(19,"p",566),l(20,"Please attach a screenshot or proof of the refund transfer."),a(),r(21,"div",536)(22,"label",567),w(23,"i",318),l(24," Refund Proof Screenshot *"),a(),r(25,"input",568),S("change",function(o){k(e);let s=h();return O(s.onRefundProofFilesSelected(o))}),a(),r(26,"small",328),l(27,"Attach the screenshot showing the refund has been sent (GCash, bank transfer, etc.)."),a(),A(28,s9,2,2,"div",569),a()(),r(29,"div",270)(30,"button",296),S("click",function(){k(e);let o=h();return O(o.closeApproveRefundModal())}),l(31,"Cancel"),a(),r(32,"button",516),S("click",function(){k(e);let o=h();return O(o.submitApproveRefund())}),A(33,l9,3,0,"span",17)(34,c9,3,0,"span",17),a()()()()}if(n&2){let e=h();d(12),R(e.selectedRefund==null?null:e.selectedRefund.bookingDisplayId),d(3),F("\u20B1",be(16,7,e.selectedRefund==null?null:e.selectedRefund.refundAmount,"1.2-2"),""),d(3),x("ngIf",e.selectedRefund==null?null:e.selectedRefund.refundBankName),d(10),x("ngIf",e.refundProofFiles.length>0),d(4),x("disabled",e.isSubmittingRefund),d(),x("ngIf",!e.isSubmittingRefund),d(),x("ngIf",e.isSubmittingRefund)}}function p9(n,t){n&1&&(r(0,"span"),w(1,"i",128),l(2," Decline Request"),a())}function m9(n,t){n&1&&(r(0,"span"),w(1,"i",242),l(2," Processing..."),a())}function g9(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeDeclineRefundModal())}),r(1,"div",459),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",324),l(5," Decline Refund Request"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeDeclineRefundModal())}),w(7,"i",257),a()(),r(8,"div",286)(9,"p"),l(10,"Declining refund for booking "),r(11,"strong"),l(12),a(),l(13,"."),a(),r(14,"div",536)(15,"label",567),l(16,"Reason for Declining *"),a(),r(17,"textarea",575),pe("ngModelChange",function(o){k(e);let s=h();return de(s.refundDeclineReason,o)||(s.refundDeclineReason=o),O(o)}),a()()(),r(18,"div",270)(19,"button",296),S("click",function(){k(e);let o=h();return O(o.closeDeclineRefundModal())}),l(20,"Cancel"),a(),r(21,"button",524),S("click",function(){k(e);let o=h();return O(o.submitDeclineRefund())}),A(22,p9,3,0,"span",17)(23,m9,3,0,"span",17),a()()()()}if(n&2){let e=h();d(12),R(e.selectedRefund==null?null:e.selectedRefund.bookingDisplayId),d(5),ce("ngModel",e.refundDeclineReason),d(4),x("disabled",e.isSubmittingRefund||!e.refundDeclineReason.trim()),d(),x("ngIf",!e.isSubmittingRefund),d(),x("ngIf",e.isSubmittingRefund)}}function u9(n,t){n&1&&(r(0,"div",580),w(1,"i",581),r(2,"p"),l(3,"No image available."),a()())}function f9(n,t){if(n&1&&(r(0,"div",582),w(1,"img",316),a()),n&2){let e=t.$implicit,i=t.index;d(),Kt("alt","Image ",i+1,""),x("src",e,Ie)}}function h9(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeRefundReceiptModal())}),r(1,"div",576),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",318),l(5," Image Preview"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeRefundReceiptModal())}),w(7,"i",257),a()(),r(8,"div",577),A(9,u9,4,0,"div",578)(10,f9,2,3,"div",579),a()()()}if(n&2){let e=h();d(9),x("ngIf",e.refundReceiptViewUrls.length===0),d(),x("ngForOf",e.refundReceiptViewUrls)}}function _9(n,t){if(n&1&&(r(0,"div",589)(1,"p"),l(2," Rebooking credits spent on "),r(3,"strong"),l(4),a(),l(5," by "),r(6,"strong"),l(7),a(),l(8,". Each credit is traced back to the original paid booking it was earned from. "),a()()),n&2){let e=h(2);d(4),R(e.creditHistoryBooking.bookingId||"this booking"),d(3),R(e.creditHistoryBooking.fullname)}}function x9(n,t){n&1&&(r(0,"div",590),w(1,"i",591),l(2," Loading credit history\u2026 "),a())}function v9(n,t){if(n&1&&(r(0,"div",592),w(1,"i",593),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.creditHistoryError," ")}}function b9(n,t){n&1&&(r(0,"div",594),w(1,"i",147),r(2,"p"),l(3,"No credit history found for this booking."),a()())}function y9(n,t){if(n&1&&(r(0,"div",603)(1,"span",604),w(2,"i",611),l(3," Earned From Booking"),a(),r(4,"span",612),l(5),a()()),n&2){let e=h().$implicit;d(5),R(e.sourceBookingDisplayId)}}function C9(n,t){if(n&1&&(r(0,"div",603)(1,"span",604),w(2,"i",613),l(3," Original Session"),a(),r(4,"span",612),l(5),a()()),n&2){let e=h().$implicit;d(5),R(e.sourceSessionName)}}function w9(n,t){if(n&1&&(we(0),l(1),Pe()),n&2){let e=h(3).$implicit;d(),F(" - ",e.sourceSessionEndTime,"")}}function P9(n,t){if(n&1&&(we(0),l(1),A(2,w9,2,1,"ng-container",17),Pe()),n&2){let e=h(2).$implicit;d(),F(" \xB7 ",e.sourceSessionStartTime,""),d(),x("ngIf",e.sourceSessionEndTime)}}function M9(n,t){if(n&1&&(r(0,"div",603)(1,"span",604),w(2,"i",614),l(3," Session Date"),a(),r(4,"span",612),l(5),A(6,P9,3,2,"ng-container",17),a()()),n&2){let e=h().$implicit,i=h(3);d(5),F(" ",i.formatSessionDate(e.sourceSessionDate)," "),d(),x("ngIf",e.sourceSessionStartTime)}}function S9(n,t){if(n&1&&(r(0,"div",603)(1,"span",604),w(2,"i",136),l(3," Credit Earned"),a(),r(4,"span",612),l(5),a()()),n&2){let e=h().$implicit,i=h(3);d(5),R(i.formatBookingDate(e.createdAt))}}function k9(n,t){if(n&1&&(r(0,"div",603)(1,"span",604),w(2,"i",615),l(3," Used On"),a(),r(4,"span",612),l(5),a()()),n&2){let e=h().$implicit,i=h(3);d(5),R(i.formatBookingDate(e.usedAt))}}function O9(n,t){if(n&1&&(r(0,"div",616),w(1,"i",482),l(2),a()),n&2){let e=h().$implicit;d(2),F(" ",e.note," ")}}function E9(n,t){if(n&1){let e=L();r(0,"button",619),S("click",function(){let o=k(e).index,s=h(2).$implicit,m=h(3);return O(m.viewCreditReceipt(s,o))}),w(1,"img",620),a()}if(n&2){let e=t.$implicit,i=t.index,o=h(2).index;d(),gu("alt","Receipt ",i+1," for credit ",o+1,""),x("src",e,Ie)}}function T9(n,t){if(n&1&&(r(0,"div",617),A(1,E9,2,4,"button",618),a()),n&2){let e=h().$implicit,i=h(3);d(),x("ngForOf",i.getCreditReceiptUrls(e))}}function I9(n,t){n&1&&(r(0,"div",621),w(1,"i",318),l(2," No receipt was uploaded when this credit was earned. "),a())}function A9(n,t){if(n&1&&(r(0,"div",598)(1,"div",599)(2,"span",600),l(3),a(),r(4,"span",601),l(5),a()(),r(6,"div",602)(7,"div",603)(8,"span",604),w(9,"i",361),l(10," Credit ID"),a(),r(11,"span",605),l(12),a()(),A(13,y9,6,1,"div",606)(14,C9,6,1,"div",606)(15,M9,7,2,"div",606)(16,S9,6,1,"div",606)(17,k9,6,1,"div",606),a(),A(18,O9,3,1,"div",607),r(19,"div",608)(20,"div",609),w(21,"i",318),l(22," Original Payment Receipt "),a(),A(23,T9,2,1,"div",610)(24,I9,3,0,"ng-template",null,3,ln),a()()),n&2){let e=t.$implicit,i=t.index,o=Jt(25),s=h(3);d(3),F("Credit ",i+1,""),d(),te("badge-available",e.status==="AVAILABLE")("badge-used",e.status==="USED")("badge-expired",e.status==="EXPIRED"),d(),F(" ",e.status," "),d(7),R(e.id),d(),x("ngIf",e.sourceBookingDisplayId),d(),x("ngIf",e.sourceSessionName),d(),x("ngIf",e.sourceSessionDate),d(),x("ngIf",e.createdAt),d(),x("ngIf",e.usedAt),d(),x("ngIf",e.note),d(5),x("ngIf",s.getCreditReceiptUrls(e).length>0)("ngIfElse",o)}}function D9(n,t){if(n&1&&(r(0,"div",595)(1,"div",596),w(2,"i",217),l(3),a(),A(4,A9,26,17,"div",597),a()),n&2){let e=h(2);d(3),Se(" ",e.creditHistory.length," credit",e.creditHistory.length===1?"":"s"," applied to this booking "),d(),x("ngForOf",e.creditHistory)}}function R9(n,t){if(n&1){let e=L();r(0,"div",284),S("click",function(){k(e);let o=h();return O(o.closeCreditHistory())}),r(1,"div",583),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",222),l(5," Credit History"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeCreditHistory())}),w(7,"i",257),a()(),r(8,"div",286),A(9,_9,9,2,"div",584)(10,x9,3,0,"div",585)(11,v9,3,1,"div",586)(12,b9,4,0,"div",587)(13,D9,5,3,"div",588),a(),r(14,"div",270)(15,"button",296),S("click",function(){k(e);let o=h();return O(o.closeCreditHistory())}),l(16,"Close"),a()()()()}if(n&2){let e=h();d(9),x("ngIf",e.creditHistoryBooking),d(),x("ngIf",e.creditHistoryLoading),d(),x("ngIf",!e.creditHistoryLoading&&e.creditHistoryError),d(),x("ngIf",!e.creditHistoryLoading&&!e.creditHistoryError&&e.creditHistory.length===0),d(),x("ngIf",!e.creditHistoryLoading&&!e.creditHistoryError&&e.creditHistory.length>0)}}function B9(n,t){n&1&&(r(0,"div",580),w(1,"i",581),r(2,"p"),l(3,"No image available."),a()())}function N9(n,t){if(n&1&&(r(0,"div",582),w(1,"img",316),a()),n&2){let e=t.$implicit,i=t.index;d(),Kt("alt","Receipt ",i+1,""),x("src",e,Ie)}}function V9(n,t){if(n&1){let e=L();r(0,"div",622),S("click",function(){k(e);let o=h();return O(o.closeCreditReceiptPreview())}),r(1,"div",576),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",255)(3,"h3"),w(4,"i",318),l(5," Payment Receipt"),a(),r(6,"button",256),S("click",function(){k(e);let o=h();return O(o.closeCreditReceiptPreview())}),w(7,"i",257),a()(),r(8,"div",577),A(9,B9,4,0,"div",578)(10,N9,2,3,"div",579),a()()()}if(n&2){let e=h();d(9),x("ngIf",e.creditReceiptPreviewUrls.length===0),d(),x("ngForOf",e.creditReceiptPreviewUrls)}}var Jc=class n{constructor(t,e,i,o,s,m){this.fb=t;this.authService=e;this.openPlayService=i;this.apiService=o;this.router=s;this.route=m;this.sessions=[{id:this.generateId(),name:"AM Session",startTime:"08:00",endTime:"12:00",maxPlayers:12,pricePerPerson:150},{id:this.generateId(),name:"PM Session",startTime:"14:00",endTime:"18:00",maxPlayers:12,pricePerPerson:150}
71],this.sessionForm=this.fb.group({startDate:[this.getTodayDate(),Oe.required],endDate:[this.getDateAfterDays(14),Oe.required]})}activeTab="sessions";sessionForm;isGenerating=!1;successMessage="";errorMessage="";sessions=[];existingSessions=[];filteredSessions=[];paginatedSessions=[];isLoadingExisting=!1;viewStartDate="";viewEndDate="";showExistingSessions=!1;currentPage=1;itemsPerPage=15;totalPages=0;filters={searchTerm:"",status:"",sessionType:"",dateFrom:"",dateTo:""};sortBy="date";sortDirection="asc";showEditModal=!1;editingSession=null;editForm={};showGenerateModal=!1;selectedSessions=new Set;isDeleting=!1;showConfirmModal=!1;confirmModalConfig={title:"",message:"",confirmText:"Confirm",cancelText:"Cancel",isDanger:!1,onConfirm:()=>{}};allBookings=[];sessionsWithBookings=[];selectedSessionWithBookings=null;sessionBookings=[];bookingSessions=[];bookingSessionsPage=0;bookingSessionsPageSize=15;bookingSessionsTotalPages=0;bookingSessionsTotalElements=0;bookingSessionDateFrom="";bookingSessionDateTo="";isLoadingSessionBookings=!1;pendingVerificationCount=0;selectedBookingSession=null;bookingFilter="";bookingStatusFilter="";showReceiptModal=!1;selectedBookingForReview=null;receiptZoomLevels=new Map;showCreditHistoryModal=!1;creditHistoryBooking=null;creditHistory=[];creditHistoryLoading=!1;creditHistoryError="";showCreditReceiptPreview=!1;creditReceiptPreviewUrls=[];creditReceiptPreviewIndex=0;idProofZoomLevels=new Map;verifiedProofZoomLevels=new Map;revokedProofZoomLevels=new Map;isDraggingImage=!1;dragStartX=0;dragStartY=0;dragScrollLeft=0;dragScrollTop=0;showDeclineModal=!1;declineReason="";isLoadingBookings=!1;showCancelBookingModal=!1;selectedBookingForCancel=null;cancelReason="";sessionAttendancePlayers=[];showScanModal=!1;isScannerRunning=!1;scanResult=null;scanError="";scanMode="camera";isProcessingUpload=!1;scanningSessionId="";showEarlyCheckInWarning=!1;earlyCheckInMinutes=0;pendingScanSessionId="";html5QrCode=null;scannerStartToken=0;refundRequests=[];refundRequestsTotalPages=0;refundRequestsTotalElements=0;refundRequestsPage=0;refundRequestsPageSize=15;refundStatusFilter="ALL";pendingRefundCount=0;isLoadingRefunds=!1;showApproveRefundModal=!1;showDeclineRefundModal=!1;selectedRefund=null;refundDeclineReason="";refundProofFiles=[];isSubmittingRefund=!1;refundReceiptViewUrls=[];showRefundReceiptModal=!1;adminDiscountTypes=[];isLoadingDiscounts=!1;showDiscountModal=!1;editingDiscountType=null;discountForm={name:"",description:"",discountMode:"PERCENTAGE",discountValue:0,isActive:!0,vatTreatment:"VAT_INCLUSIVE",vatRate:12};isSavingDiscount=!1;pendingDiscountBookings=[];verifiedEligibilities=[];revokedEligibilities=[];showIdProofModal=!1;selectedDiscountBooking=null;idProofUrls=[];isLoadingIdProof=!1;isApprovingDiscount=!1;rejectDiscountReason="";showRejectDiscountModal=!1;showVerifiedDetailModal=!1;selectedVerifiedEligibility=null;verifiedDetailProofUrls=[];isLoadingVerifiedProof=!1;isUnverifying=!1;showRevokedDetailModal=!1;selectedRevokedEligibility=null;revokedDetailProofUrls=[];isLoadingRevokedProof=!1;isRestoring=!1;showRevokeConfirmModal=!1;eligibilityPendingRevoke=null;ngOnInit(){this.isAdmin()||(this.showCustomAlert("Access denied. Admin privileges required."),setTimeout(()=>this.router.navigate(["/"]),2e3)),this.viewStartDate=this.getTodayDate(),this.viewEndDate=this.getDateAfterDays(30),this.loadExistingSessions(),this.loadBookingsAndSessions(),this.route.snapshot.queryParamMap.get("tab")==="refunds"&&this.setActiveTab("refunds")}setActiveTab(t){this.activeTab=t,t==="bookings"?this.loadBookingsAndSessions():t==="discounts"?(this.loadAdminDiscountTypes(),this.loadPendingDiscountBookings(),this.loadVerifiedEligibilities(),this.loadRevokedEligibilities()):t==="refunds"&&this.loadAdminRefunds()}loadBookingsAndSessions(){this.isLoadingBookings=!0,this.errorMessage="",this.apiService.getBookingSessionsPaginated(this.bookingSessionsPage,this.bookingSessionsPageSize,this.bookingSessionDateFrom||void 0,this.bookingSessionDateTo||void 0).subscribe({next:t=>{this.bookingSessions=t.content,this.bookingSessionsTotalPages=t.totalPages,this.bookingSessionsTotalElements=t.totalElements,this.isLoadingBookings=!1},error:t=>{console.error("Error loading booking sessions:",t),this.errorMessage="Failed to load bookings.",this.isLoadingBookings=!1,setTimeout(()=>{this.errorMessage=""},5e3)}}),this.apiService.getPendingVerificationCount().subscribe({next:t=>{this.pendingVerificationCount=t.count},error:()=>{}})}onBookingSessionsPageChange(t){this.bookingSessionsPage=t,this.loadBookingsAndSessions()}onBookingSessionDateFilterChange(){this.bookingSessionsPage=0,this.loadBookingsAndSessions()}selectSession(t){this.selectedSessionWithBookings=t,this.sessionBookings=[...t.bookings],this.bookingFilter="",this.bookingStatusFilter="",this.sessionAttendancePlayers=[],this.apiService.getSessionAttendance(t.session.id).subscribe({next:e=>{this.sessionAttendancePlayers=e},error:()=>{this.sessionAttendancePlayers=[]}})}selectBookingSession(t){this.selectedBookingSession=t,this.isLoadingSessionBookings=!0,this.bookingFilter="",this.bookingStatusFilter="",this.sessionAttendancePlayers=[],this.sessionBookings=[],this.selectedSessionWithBookings=null,this.apiService.getAdminSessionBookings(t.sessionId).subscribe({next:e=>{this.sessionBookings=e,this.selectedSessionWithBookings={session:{id:t.sessionId,sessionDate:t.sessionDate,sessionType:t.sessionType,startTime:t.startTime,endTime:t.endTime,maxPlayers:t.maxPlayers,pricePerPerson:t.pricePerPerson,status:t.status,currentPlayers:t.totalVerifiedPlayers,availableSlots:t.maxPlayers-t.totalVerifiedPlayers},bookings:e},this.isLoadingSessionBookings=!1,this.apiService.getSessionAttendance(t.sessionId).subscribe({next:i=>{this.sessionAttendancePlayers=i},error:()=>{this.sessionAttendancePlayers=[]}})},error:e=>{console.error("Error loading session bookings:",e),this.isLoadingSessionBookings=!1,this.errorMessage="Failed to load bookings for this session.",setTimeout(()=>{this.errorMessage=""},3e3)}})}getPlayerScanInfo(t,e){return this.sessionAttendancePlayers.find(i=>i.bookingId===t&&i.playerName===e)??null}formatScanTime(t){return t?new Date(t).toLocaleTimeString("en-PH",{hour:"2-digit",minute:"2-digit",hour12:!0}):""}getFilteredBookings(){let t=[...this.sessionBookings];if(this.bookingStatusFilter&&(t=t.filter(e=>e.status===this.bookingStatusFilter)),this.bookingFilter){let e=this.bookingFilter.toLowerCase();t=t.filter(i=>i.fullname.toLowerCase().includes(e)||i.playerNames.some(o=>o.toLowerCase().includes(e)))}return t}getSessionPlayerCount(t){return!t||!t.bookings?0:t.bookings.filter(e=>e.status==="PAYMENT_VERIFIED").reduce((e,i)=>e+i.numberOfPlayers,0)}getBookingCountByStatus(t,e){return!t||!t.bookings?0:t.bookings.filter(i=>i.status===e).length}hasPendingVerifications(t){return!t||!t.bookings?!1:t.bookings.some(e=>e.status==="PENDING_PAYMENT"&&e.paymentProofUrl)}getTotalPendingVerifications(){return this.pendingVerificationCount}getStatusLabel(t){switch(t){case"PENDING_PAYMENT":return"Pending Payment";case"PAYMENT_VERIFIED":return"Verified";case"CANCELLED":return"Cancelled";case"EXPIRED":return"Expired";default:return t}}getStatusShortLabel(t){switch(t){case"PENDING_PAYMENT":return"Pending";case"PAYMENT_VERIFIED":return"Verified";case"CANCELLED":return"Cancelled";case"EXPIRED":return"Expired";default:return t}}getStatusClass(t){switch(t){case"PENDING_PAYMENT":return"status-pending-receipt";case"PAYMENT_VERIFIED":return"status-verified";case"CANCELLED":return"status-cancelled";case"EXPIRED":return"status-expired";default:return""}}openReceiptReview(t){this.selectedBookingForReview=t,this.showReceiptModal=!0}closeReceiptReview(){this.showReceiptModal=!1,this.selectedBookingForReview=null,this.receiptZoomLevels.clear()}getZoom(t,e){return t.get(e)??1}zoom(t,e,i){let o=this.getZoom(t,e),s=Math.min(3,Math.max(.5,Math.round((o+i)*10)/10));t.set(e,s)}resetZoom(t,e){t.delete(e)}onImageDragStart(t){let e=t.currentTarget;this.isDraggingImage=!0,this.dragStartX=t.pageX-e.getBoundingClientRect().left+e.scrollLeft,this.dragStartY=t.pageY-e.getBoundingClientRect().top+e.scrollTop,this.dragScrollLeft=e.scrollLeft,this.dragScrollTop=e.scrollTop,e.style.cursor="grabbing",t.preventDefault()}onImageDragMove(t){if(!this.isDraggingImage)return;t.preventDefault();let e=t.currentTarget,i=t.pageX-e.getBoundingClientRect().left+e.scrollLeft,o=t.pageY-e.getBoundingClientRect().top+e.scrollTop;e.scrollLeft=this.dragScrollLeft-(i-this.dragStartX),e.scrollTop=this.dragScrollTop-(o-this.dragStartY)}onImageDragEnd(t){this.isDraggingImage=!1,t.currentTarget.style.cursor="grab"}onImageTouchStart(t){let e=t.touches[0],i=t.currentTarget;this.isDraggingImage=!0,this.dragStartX=e.pageX-i.getBoundingClientRect().left+i.scrollLeft,this.dragStartY=e.pageY-i.getBoundingClientRect().top+i.scrollTop,this.dragScrollLeft=i.scrollLeft,this.dragScrollTop=i.scrollTop}onImageTouchMove(t){if(!this.isDraggingImage)return;t.preventDefault();let e=t.touches[0],i=t.currentTarget,o=e.pageX-i.getBoundingClientRect().left+i.scrollLeft,s=e.pageY-i.getBoundingClientRect().top+i.scrollTop;i.scrollLeft=this.dragScrollLeft-(o-this.dragStartX),i.scrollTop=this.dragScrollTop-(s-this.dragStartY)}onImageTouchEnd(){this.isDraggingImage=!1}verifyPayment(t){this.apiService.verifyOpenPlayPayment(t.id).subscribe({next:e=>{this.successMessage=`Payment verified for ${t.fullname}`,this.refreshSelectedSession(),this.closeReceiptReview(),setTimeout(()=>{this.successMessage=""},3e3)},error:e=>{console.error("Error verifying payment:",e),this.errorMessage=e.message||"Failed to verify payment.",setTimeout(()=>{this.errorMessage=""},3e3)}})}openDeclineModal(t){this.selectedBookingForReview=t,this.declineReason="",this.showDeclineModal=!0}closeDeclineModal(){this.showDeclineModal=!1,this.declineReason=""}confirmDecline(){if(this.selectedBookingForReview){if(!this.declineReason.trim()){this.showCustomAlert("Please provide a reason for declining.");return}this.apiService.rejectOpenPlayPayment(this.selectedBookingForReview.id,this.declineReason).subscribe({next:()=>{this.successMessage=`Payment declined for ${this.selectedBookingForReview.fullname}`,this.refreshSelectedSession(),this.closeDeclineModal(),this.closeReceiptReview(),setTimeout(()=>{this.successMessage=""},3e3)},error:t=>{console.error("Error declining payment:",t),this.errorMessage=t.message||"Failed to decline payment.",setTimeout(()=>{this.errorMessage=""},3e3)}})}}openCancelBookingModal(t){this.selectedBookingForCancel=t,this.cancelReason="",this.showCancelBookingModal=!0}closeCancelBookingModal(){this.showCancelBookingModal=!1,this.selectedBookingForCancel=null,this.cancelReason=""}confirmCancelBooking(){if(this.selectedBookingForCancel){if(!this.cancelReason.trim()){this.showCustomAlert("Please provide a reason for cancellation.");return}this.apiService.adminCancelOpenPlayBooking(this.selectedBookingForCancel.id,this.cancelReason).subscribe({next:()=>{this.successMessage=`Booking cancelled for ${this.selectedBookingForCancel.fullname}. User has been notified.`,this.refreshSelectedSession(),this.closeCancelBookingModal(),setTimeout(()=>{this.successMessage=""},5e3)},error:t=>{console.error("Error cancelling booking:",t),this.errorMessage=t.message||"Failed to cancel booking.",setTimeout(()=>{this.errorMessage=""},3e3)}})}}refreshSelectedSession(){if(this.loadBookingsAndSessions(),this.selectedBookingSession){let t=this.selectedBookingSession;this.selectBookingSession(t)}else this.selectedSessionWithBookings=null,this.sessionBookings=[]}
71formatBookingDate(t){return new Date(t).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}formatSessionDate(t){return new Date(t+"T00:00:00").toLocaleDateString("en-US",{weekday:"short",month:"short",day:"numeric"})}getSessionStatusLabel(t){if(!t||!t.status)return"";switch(t.status){case"ONGOING":return"Live";case"UPCOMING":return"Upcoming";case"COMPLETED":return"Done";default:return""}}getSelectedSessionBookingStats(){if(!this.selectedSessionWithBookings)return{total:0,verified:0,pendingPayment:0,pendingVerify:0,cancelled:0,expired:0};let t=this.selectedSessionWithBookings.bookings;return{total:t.length,verified:t.filter(e=>e.status==="PAYMENT_VERIFIED").length,pendingPayment:t.filter(e=>e.status==="PENDING_PAYMENT"&&!e.paymentProofUrl).length,pendingVerify:t.filter(e=>e.status==="PENDING_PAYMENT"&&e.paymentProofUrl).length,cancelled:t.filter(e=>e.status==="CANCELLED").length,expired:t.filter(e=>e.status==="EXPIRED").length}}toggleSessionSelection(t){this.selectedSessions.has(t)?this.selectedSessions.delete(t):this.selectedSessions.add(t)}isSessionSelected(t){return this.selectedSessions.has(t)}selectAllSessions(){this.paginatedSessions.forEach(t=>{this.selectedSessions.add(t.id)})}deselectAllSessions(){this.selectedSessions.clear()}deleteSelectedSessions(){if(this.selectedSessions.size===0){this.showCustomAlert("Please select at least one session to delete.");return}let t=this.paginatedSessions.filter(s=>this.selectedSessions.has(s.id)),e=t.filter(s=>this.hasBookings(s)),i=t.filter(s=>!this.hasBookings(s));if(e.length>0){let s=e.map(f=>`\u2022 ${this.formatDate(f.sessionDate)} - ${f.sessionType} (${f.currentPlayers} player${f.currentPlayers===1?"":"s"})`).join(` 72`),m=i.length>0?`${e.length} session(s) cannot be deleted because they have active bookings: 73 74${s} 75 76These sessions will be deselected. You can proceed to delete the remaining ${i.length} session(s).`:`Cannot delete ${e.length} session(s) with existing bookings: 77 78${s} 79 80Please cancel all bookings first before deleting these sessions.`;this.showCustomConfirm("Sessions with Active Bookings",m,i.length>0?"Continue":"OK",!1,()=>{if(e.forEach(f=>this.selectedSessions.delete(f.id)),i.length>0){let f=i.map(v=>`\u2022 ${this.formatDate(v.sessionDate)} - ${v.sessionType} (${v.startTime} - ${v.endTime})`).join(` 81`);this.showCustomConfirm("Delete Multiple Sessions",`Are you sure you want to delete ${i.length} session(s)? 82 83${f} 84 85This action cannot be undone.`,"Delete All",!0,()=>ue(this,null,function*(){yield this.performBulkDelete(i)}))}});return}let o=i.map(s=>`\u2022 ${this.formatDate(s.sessionDate)} - ${s.sessionType} (${s.startTime} - ${s.endTime})`).join(` 86`);this.showCustomConfirm("Delete Multiple Sessions",`Are you sure you want to delete ${i.length} session(s)? 87 88${o} 89 90This action cannot be undone.`,"Delete All",!0,()=>ue(this,null,function*(){yield this.performBulkDelete(i)}))}performBulkDelete(t){return ue(this,null,function*(){this.isDeleting=!0;let e=[];for(let i of t)e.push(this.deleteSingleSession(i.id));try{yield Promise.all(e),this.successMessage=`Successfully deleted ${t.length} session(s)!`,this.selectedSessions.clear(),this.loadExistingSessions(),setTimeout(()=>{this.successMessage=""},5e3)}catch(i){this.errorMessage=`Failed to delete some sessions: ${i.message}`,setTimeout(()=>{this.errorMessage=""},5e3)}finally{this.isDeleting=!1}})}deleteSingleSession(t){return ue(this,null,function*(){let e=this.authService.getToken();if(!e)throw new Error("Authentication token not found");if(!(yield fetch(`${Be.apiBase}/open-play/admin/sessions/${t}`,{method:"DELETE",headers:{Authorization:`Bearer ${e}`}})).ok)throw new Error("Failed to delete session")})}showCustomConfirm(t,e,i,o,s){this.confirmModalConfig={title:t,message:e,confirmText:i,cancelText:"Cancel",isDanger:o,onConfirm:s},this.showConfirmModal=!0}showCustomAlert(t){this.confirmModalConfig={title:"Notice",message:t,confirmText:"OK",cancelText:"",isDanger:!1,onConfirm:()=>{}},this.showConfirmModal=!0}confirmModalAction(){this.confirmModalConfig.onConfirm(),this.closeConfirmModal()}closeConfirmModal(){this.showConfirmModal=!1}isAdmin(){return this.authService.getCurrentUser()?.role?.toUpperCase()==="ADMIN"}
90getTodayDate(){return new Date().toISOString().split("T")[0]}getDateAfterDays(t){let e=new Date;return e.setDate(e.getDate()+t),e.toISOString().split("T")[0]}generateId(){return"_"+Math.random().toString(36).substr(2,9)}addSession(){this.sessions.push({id:this.generateId(),name:"New Session",startTime:"09:00",endTime:"11:00",maxPlayers:12,pricePerPerson:150})}removeSession(t){if(this.sessions.length<=1){this.showCustomAlert("You must have at least one session");return}this.sessions=this.sessions.filter(e=>e.id!==t)}updateSessionName(t,e){let i=this.sessions.find(o=>o.id===t);i&&(i.name=e)}updateSessionStartTime(t,e){let i=this.sessions.find(o=>o.id===t);i&&(i.startTime=e)}updateSessionEndTime(t,e){let i=this.sessions.find(o=>o.id===t);i&&(i.endTime=e)}updateSessionMaxPlayers(t,e){let i=this.sessions.find(o=>o.id===t);i&&(i.maxPlayers=e)}generateSessions(){return ue(this,null,function*(){if(!this.sessionForm.value.startDate){this.showCustomAlert("Please select a start date.");return}if(!this.sessionForm.value.endDate){this.showCustomAlert("Please select an end date.");return}if(this.sessions.length===0){this.showCustomAlert("Please add at least one session.");return}for(let i of this.sessions){if(!i.name||!i.name.trim()){this.showCustomAlert("All sessions must have a name.");return}if(!i.startTime||!i.endTime){this.showCustomAlert("All sessions must have start and end times.");return}if(i.startTime>=i.endTime){this.showCustomAlert(`Session "${i.name}": Start time must be before end time.`);return}if(!i.maxPlayers||i.maxPlayers<2||i.maxPlayers>200){this.showCustomAlert(`Session "${i.name}": Max players must be between 2 and 200.`);return}if(i.pricePerPerson===null||i.pricePerPerson===void 0||i.pricePerPerson<0){this.showCustomAlert(`Session "${i.name}": Price must be 0 or more.`);return}}let t=new Date(this.sessionForm.value.startDate);if(new Date(this.sessionForm.value.endDate)<t){this.showCustomAlert("End date must be after start date.");return}this.checkExistingSessions()})}performGenerateSessions(){return ue(this,null,function*(){this.isGenerating=!0,this.successMessage="",this.errorMessage="";try{let t=this.authService.getToken();if(!t)throw new Error("Authentication token not found");let e={startDate:this.sessionForm.value.startDate,endDate:this.sessionForm.value.endDate,sessions:this.sessions.map(s=>({name:s.name,startTime:s.startTime,endTime:s.endTime,maxPlayers:s.maxPlayers,pricePerPerson:s.pricePerPerson})),daysOfWeek:{monday:!0,tuesday:!0,wednesday:!0,thursday:!0,friday:!0,saturday:!0,sunday:!0}},i=yield fetch(`${Be.apiBase}/open-play/admin/generate-sessions-custom`,{method:"POST",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify(e)});if(!i.ok){let s="Failed to generate sessions";try{let m=yield i.json();s=m.error||m.message||s}catch{}throw new Error(s)}let o;try{o=yield i.json()}catch{o={sessionsCreated:"multiple"}}this.successMessage=`Successfully generated ${o.sessionsCreated||"multiple"} sessions!`,this.closeGenerateModal(),this.loadExistingSessions(),setTimeout(()=>{this.successMessage=""},5e3)}catch(t){this.errorMessage=t.message||"Failed to generate sessions. Please try again.",setTimeout(()=>{this.errorMessage=""},5e3)}finally{this.isGenerating=!1}})}resetForm(){this.sessionForm.reset({startDate:this.getTodayDate(),endDate:this.getDateAfterDays(14)}),this.sessions=[{id:this.generateId(),name:"AM Session",startTime:"08:00",endTime:"12:00",maxPlayers:12,pricePerPerson:150},{id:this.generateId(),name:"PM Session",startTime:"14:00",endTime:"18:00",maxPlayers:12,pricePerPerson:150}],this.successMessage="",this.errorMessage=""}loadExistingSessions(){this.isLoadingExisting=!0,this.successMessage="",this.errorMessage="",this.openPlayService.loadSessions(this.viewStartDate,this.viewEndDate).subscribe({next:t=>{this.existingSessions=t,this.applyFiltersAndSort(),this.showExistingSessions=!0,this.isLoadingExisting=!1},error:t=>{console.error("Error loading sessions:",t),this.errorMessage="Failed to load existing sessions.",this.isLoadingExisting=!1,setTimeout(()=>{this.errorMessage=""},5e3)}})}applyFiltersAndSort(){let t=[...this.existingSessions];if(this.filters.searchTerm){let e=this.filters.searchTerm.toLowerCase();t=t.filter(i=>i.sessionType.toLowerCase().includes(e)||i.sessionDate.toLowerCase().includes(e))}this.filters.status&&(t=t.filter(e=>e.status===this.filters.status)),this.filters.sessionType&&(t=t.filter(e=>e.sessionType===this.filters.sessionType)),this.filters.dateFrom&&(t=t.filter(e=>e.sessionDate>=this.filters.dateFrom)),this.filters.dateTo&&(t=t.filter(e=>e.sessionDate<=this.filters.dateTo)),t.sort((e,i)=>{let o=0;switch(this.sortBy){case"date":o=e.sessionDate.localeCompare(i.sessionDate);break;case"sessionType":o=e.sessionType.localeCompare(i.sessionType);break;case"time":o=e.startTime.localeCompare(i.startTime);break;case"maxPlayers":o=e.maxPlayers-i.maxPlayers;break;case"price":o=e.pricePerPerson-i.pricePerPerson;break;case"currentPlayers":o=(e.currentPlayers||0)-(i.currentPlayers||0);break;case"status":o=e.status.localeCompare(i.status);break}return this.sortDirection==="asc"?o:-o}),this.filteredSessions=t,this.updatePagination()}updatePagination(){this.totalPages=Math.ceil(this.filteredSessions.length/this.itemsPerPage),this.currentPage>this.totalPages&&this.totalPages>0&&(this.currentPage=1);let t=(this.currentPage-1)*this.itemsPerPage;this.paginatedSessions=this.filteredSessions.slice(t,t+this.itemsPerPage)}changeSessionPage(t){t<1||t>this.totalPages||(this.currentPage=t,this.updatePagination())}getPageNumbers(){let t=[];if(this.totalPages<=5)for(let i=1;i<=this.totalPages;i++)t.push(i);else{let i=Math.max(1,this.currentPage-2),o=Math.min(this.totalPages,this.currentPage+2);this.currentPage<=3&&(o=5),this.currentPage>=this.totalPages-2&&(i=this.totalPages-5+1);for(let s=i;s<=o;s++)t.push(s)}return t}clearFilters(){this.filters={searchTerm:"",status:"",sessionType:"",dateFrom:"",dateTo:""},this.applyFiltersAndSort()}changeSort(t){this.sortBy===t?this.sortDirection=this.sortDirection==="asc"?"desc":"asc":(this.sortBy=t,this.sortDirection="asc"),this.applyFiltersAndSort()}getUniqueSessionTypes(){return Array.from(new Set(this.existingSessions.map(t=>t.sessionType))).sort()}checkExistingSessions(){this.openPlayService.loadSessions(this.sessionForm.value.startDate,this.sessionForm.value.endDate).subscribe({next:t=>{let e=this.sessions.map(o=>o.startTime),i=t.filter(o=>e.includes(o.startTime));i.length>0?this.showCustomConfirm("Duplicate Warning",`Warning: ${i.length} session(s) with the same time slot(s) already exist in this date range. Continuing may create duplicates. Do you want to proceed?`,"Continue Anyway",!0,()=>this.performGenerateSessions()):this.showCustomConfirm("Generate Sessions","Are you sure you want to generate sessions with these settings?","Generate",!1,()=>this.performGenerateSessions())},error:()=>{this.showCustomConfirm("Generate Sessions","Are you sure you want to generate sessions with these settings?","Generate",!1,()=>this.performGenerateSessions())}})}openEditModal(t){this.editingSession=t,this.editForm={maxPlayers:t.maxPlayers,pricePerPerson:t.pricePerPerson,startTime:t.startTime,endTime:t.endTime},this.showEditModal=!0}closeEditModal(){this.showEditModal=!1,this.editingSession=null,this.editForm={}}saveEditedSession(){return ue(this,null,function*(){if(this.editingSession)try{let t=this.authService.getToken();if(!t)throw new Error("Authentication token not found");if(!(yield fetch(`${Be.apiBase}/open-play/admin/sessions/${this.editingSession.id}`,{method:"PUT",headers:{Authorization:`Bearer ${t}`,"Content-Type":"application/json"},body:JSON.stringify(this.editForm)})).ok)throw new Error("Failed to update session");this.successMessage="Session updated successfully!",this.closeEditModal(),this.loadExistingSessions(),setTimeout(()=>{this.successMessage=""},5e3)}catch(t){this.errorMessage=t.message||"Failed to update session.",setTimeout(()=>{this.errorMessage=""},5e3)}})}deleteSession(t){if(this.hasBookings(t)){this.showCustomConfirm("Cannot Delete Session",`This session cannot be deleted because there ${t.currentPlayers===1?"is":"are"} ${t.currentPlayers} active player${t.currentPlayers===1?"":"s"} already joined. 91 92Session Details: 93\u2022 Date: ${this.formatDate(t.sessionDate)} 94\u2022 Type: ${t.sessionType} 95\u2022 Time: ${t.startTime} - ${t.endTime} 96\u2022 Players: ${t.currentPlayers}/${t.maxPlayers} 97 98Please cancel all bookings first before deleting this session.`,"OK",!1,()=>{});return}this.showCustomConfirm("Delete Session",`Are you sure you want to delete this session? 99 100Date: ${this.formatDate(t.sessionDate)} 101Type: ${t.sessionType} 102Time: ${t.startTime} - ${t.endTime} 103 104This action cannot be undone.`,"Delete",!0,()=>ue(this,null,function*(){try{yield this.deleteSingleSession(t.id),this.successMessage="Session deleted successfully!",this.loadExistingSessions(),setTimeout(()=>{this.successMessage=""},5e3)}catch(e){this.errorMessage=e.message||"Failed to delete session.",setTimeout(()=>{this.errorMessage=""},5e3)}}))}formatDate(t){return new Date(t).toLocaleDateString("en-US",{weekday:"short",year:"numeric",month:"short",day:"numeric"})}hasBookings(t){return(t.currentPlayers||0)>0}isSessionToday(t){let e=new Date().toISOString().slice(0,10);return t===e}openGenerateModal(){this.showGenerateModal=!0}closeGenerateModal(){this.showGenerateModal=!1}getReceiptUrls(t){if(!t.paymentProofUrl)return console.log("No paymentProofUrl found"),[];console.log("Raw paymentProofUrl:",t.paymentProofUrl);try{let e=JSON.parse(t.paymentProofUrl);if(console.log("Parsed receipts array:",e),!Array.isArray(e))return console.error("Receipts is not an array:",e),[];let i=e.map((o,s)=>{console.log(`Processing receipt ${s}:`,o);let m=o;
104if(typeof o=="string")try{m=JSON.parse(o),console.log(`Parsed metadata ${s}:`,m)}catch(f){return console.error(`Error parsing receipt ${s}:`,f),""}if(m.fileId){let f=`${Be.apiBase}/drive/receipt/${m.fileId}`;return console.log(`Generated URL ${s}:`,f),f}return""}).filter(o=>o!=="");return console.log("Final URLs:",i),i}catch(e){return console.error("Error parsing receipt URLs:",e),[]}}getFirstReceiptUrl(t){let e=this.getReceiptUrls(t);return e.length>0?e[0]:""}openCreditHistory(t){this.creditHistoryBooking=t,this.creditHistory=[],this.creditHistoryError="",this.creditHistoryLoading=!0,this.showCreditHistoryModal=!0,this.apiService.getBookingCreditHistory(t.id).subscribe({next:e=>{this.creditHistory=e||[],this.creditHistoryLoading=!1},error:()=>{this.creditHistoryError="Failed to load credit history. Please try again.",this.creditHistoryLoading=!1}})}closeCreditHistory(){this.showCreditHistoryModal=!1,this.creditHistoryBooking=null,this.creditHistory=[],this.creditHistoryError="",this.creditHistoryLoading=!1}getCreditReceiptUrls(t){return this.buildRefundImageUrls(t.sourcePaymentProofUrl||"")}viewCreditReceipt(t,e=0){this.creditReceiptPreviewUrls=this.getCreditReceiptUrls(t),this.creditReceiptPreviewIndex=e,this.showCreditReceiptPreview=!0}closeCreditReceiptPreview(){this.showCreditReceiptPreview=!1,this.creditReceiptPreviewUrls=[],this.creditReceiptPreviewIndex=0}ngOnDestroy(){this.stopScanner()}openScanModal(t){let e=this.selectedSessionWithBookings?.session;if(e?.status==="UPCOMING"){let i=this.getMinutesUntilSessionStart(e.sessionDate,e.startTime);this.earlyCheckInMinutes=i,this.pendingScanSessionId=t,this.showEarlyCheckInWarning=!0;return}this.launchScanModal(t)}confirmEarlyCheckIn(){this.showEarlyCheckInWarning=!1,this.launchScanModal(this.pendingScanSessionId),this.pendingScanSessionId=""}cancelEarlyCheckIn(){this.showEarlyCheckInWarning=!1,this.pendingScanSessionId=""}launchScanModal(t){this.scanningSessionId=t,this.showScanModal=!0,this.scanResult=null,this.scanError="",this.scanMode="camera",this.isProcessingUpload=!1,setTimeout(()=>this.startScanner(),300)}getMinutesUntilSessionStart(t,e){let i=new Date,[o,s]=e.split(":").map(Number),m=new Date(t);return m.setHours(o,s,0,0),Math.max(0,Math.round((m.getTime()-i.getTime())/6e4))}closeScanModal(){this.stopScanner().then(()=>{this.showScanModal=!1,this.scanResult=null,this.scanError="",this.isProcessingUpload=!1})}switchScanMode(t){this.scanMode!==t&&(this.scanMode=t,this.scanResult=null,this.scanError="",this.isProcessingUpload=!1,t==="camera"?setTimeout(()=>this.startScanner(),300):this.stopScanner())}onUploadQrFile(t){let e=t.target;if(!e.files||e.files.length===0)return;let i=e.files[0];e.value="",this.isProcessingUpload=!0,this.scanResult=null,this.scanError="",new $r("qr-file-scratch").scanFile(i,!1).then(s=>{this.isProcessingUpload=!1,this.onScanSuccess(s)}).catch(()=>{this.isProcessingUpload=!1,this.scanError="Could not read a QR code from this image. Please try a clearer photo."})}startScanner(){if(!this.showScanModal||this.scanMode!=="camera")return;let t=++this.scannerStartToken,e="qr-reader";this.html5QrCode=new $r(e);let i={fps:10,qrbox:{width:250,height:250}};this.html5QrCode.start({facingMode:"environment"},i,o=>this.onScanSuccess(o),o=>{}).then(()=>{t===this.scannerStartToken&&(this.isScannerRunning=!0)}).catch(o=>{t===this.scannerStartToken&&(o?.name==="AbortError"||o?.name==="NotAllowedError"&&this.isScannerRunning||(console.error("Camera start error:",o),this.scanError="Could not access camera. Please check camera permissions or use Upload Image instead."))})}stopScanner(){return this.scannerStartToken++,this.html5QrCode&&this.isScannerRunning?this.html5QrCode.stop().then(()=>{this.isScannerRunning=!1,this.html5QrCode=null}).catch(()=>{this.isScannerRunning=!1,this.html5QrCode=null}):(this.isScannerRunning=!1,this.html5QrCode=null,Promise.resolve())}onScanSuccess(t){this.stopScanner().then(()=>{this.openPlayService.scanQrCode(t,this.scanningSessionId).subscribe({next:e=>{this.scanResult=e,this.scanError="",this.scanningSessionId&&this.apiService.getSessionAttendance(this.scanningSessionId).subscribe({next:i=>{this.sessionAttendancePlayers=i},error:()=>{}})},error:e=>{let i=e?.payload?.error||e?.message||"Invalid or already-used QR code.";this.scanError=i,this.scanResult=null}})})}rescanQr(){this.scanResult=null,this.scanError="",this.isProcessingUpload=!1,this.scanMode==="camera"&&setTimeout(()=>this.startScanner(),300)}loadAdminDiscountTypes(){this.isLoadingDiscounts=!0,this.apiService.getAdminDiscountTypes().subscribe({next:t=>{this.adminDiscountTypes=t,this.isLoadingDiscounts=!1},error:t=>{console.error("Failed to load discount types",t),this.isLoadingDiscounts=!1}})}loadPendingDiscountBookings(){this.apiService.getPendingDiscountBookings().subscribe({next:t=>{this.pendingDiscountBookings=t},error:t=>console.error("Failed to load pending discount bookings",t)})}loadVerifiedEligibilities(){this.apiService.getVerifiedBeneficiaries().subscribe({next:t=>{this.verifiedEligibilities=t},error:t=>console.error("Failed to load verified beneficiaries",t)})}loadRevokedEligibilities(){this.apiService.getRevokedBeneficiaries().subscribe({next:t=>{this.revokedEligibilities=t},error:t=>console.error("Failed to load revoked beneficiaries",t)})}openVerifiedDetailModal(t){this.selectedVerifiedEligibility=t,this.verifiedDetailProofUrls=[],this.isLoadingVerifiedProof=!0,this.showVerifiedDetailModal=!0,this.verifiedProofZoomLevels.clear();let e=t.idProofFileIds||[];e.length>0&&(this.verifiedDetailProofUrls=e.map(i=>`${Be.apiBase}/drive/receipt/${i}`)),this.isLoadingVerifiedProof=!1}openRevokedDetailModal(t){this.selectedRevokedEligibility=t,this.revokedDetailProofUrls=[],this.isLoadingRevokedProof=!0,this.showRevokedDetailModal=!0,this.revokedProofZoomLevels.clear();let e=t.idProofFileIds||[];e.length>0&&(this.revokedDetailProofUrls=e.map(i=>`${Be.apiBase}/drive/receipt/${i}`)),this.isLoadingRevokedProof=!1}requestRevoke(t){this.eligibilityPendingRevoke=t,this.showVerifiedDetailModal=!1,this.showRevokeConfirmModal=!0}cancelRevoke(){this.showRevokeConfirmModal=!1,this.eligibilityPendingRevoke=null}confirmRevoke(){this.eligibilityPendingRevoke&&(this.isUnverifying=!0,this.apiService.unverifyBeneficiary(this.eligibilityPendingRevoke.id).subscribe({next:()=>{this.isUnverifying=!1,this.showRevokeConfirmModal=!1,this.eligibilityPendingRevoke=null,this.selectedVerifiedEligibility=null,this.loadVerifiedEligibilities(),this.loadRevokedEligibilities(),this.successMessage="Verification has been revoked. The player will need to re-submit proof on their next booking.",setTimeout(()=>{this.successMessage=""},6e3)},error:t=>{console.error("Failed to revoke verification",t),this.isUnverifying=!1,this.showRevokeConfirmModal=!1,this.eligibilityPendingRevoke=null;let e=t?.payload?.error||t?.payload?.description||t?.message||"Failed to revoke verification";this.errorMessage=e,setTimeout(()=>{this.errorMessage=""},6e3)}}))}restoreEligibility(t){this.isRestoring=!0,this.apiService.restoreEligibility(t.id).subscribe({next:()=>{this.isRestoring=!1,this.showRevokedDetailModal=!1,this.selectedRevokedEligibility=null,this.loadVerifiedEligibilities(),this.loadRevokedEligibilities(),this.successMessage="Eligibility restored. The player'
104s discount is verified again.",setTimeout(()=>{this.successMessage=""},6e3)},error:e=>{console.error("Failed to restore eligibility",e),this.isRestoring=!1;let i=e?.payload?.error||e?.payload?.description||e?.message||"Failed to restore eligibility";this.errorMessage=i,setTimeout(()=>{this.errorMessage=""},6e3)}})}openDiscountModal(t){this.editingDiscountType=t||null,t?this.discountForm={name:t.name,description:t.description||"",discountMode:t.discountMode,discountValue:t.discountValue,isActive:t.isActive,vatTreatment:t.vatTreatment||"VAT_INCLUSIVE",vatRate:t.vatRate||12}:this.discountForm={name:"",description:"",discountMode:"PERCENTAGE",discountValue:0,isActive:!0,vatTreatment:"VAT_INCLUSIVE",vatRate:12},this.showDiscountModal=!0}saveDiscountType(){if(!this.discountForm.name.trim()){alert("Discount name is required");return}this.isSavingDiscount=!0;let t=Ye(ze({},this.discountForm),{discountMode:this.discountForm.discountMode});(this.editingDiscountType?this.apiService.updateDiscountType(this.editingDiscountType.id,t):this.apiService.createDiscountType(t)).subscribe({next:()=>{this.isSavingDiscount=!1,this.showDiscountModal=!1,this.loadAdminDiscountTypes()},error:i=>{console.error("Failed to save discount type",i),this.isSavingDiscount=!1,alert(i.message||"Failed to save discount type")}})}toggleDiscountActive(t){this.apiService.toggleDiscountType(t.id).subscribe({next:()=>this.loadAdminDiscountTypes(),error:e=>{console.error("Failed to toggle discount type",e),alert(e.message||"Failed to toggle discount type")}})}openIdProofModal(t){this.selectedDiscountBooking=t,this.idProofUrls=[],this.isLoadingIdProof=!0,this.showIdProofModal=!0,this.idProofZoomLevels.clear(),this.apiService.getBookingDiscountProof(t.id).subscribe({next:e=>{let i=e.idProofFileIds||[];this.idProofUrls=i.map(o=>`${Be.apiBase}/drive/receipt/${o}`),this.isLoadingIdProof=!1},error:e=>{console.error("Failed to load ID proof",e),this.isLoadingIdProof=!1}})}approveDiscount(t){this.isApprovingDiscount=!0,this.apiService.approveBookingDiscount(t).subscribe({next:()=>{this.isApprovingDiscount=!1,this.showIdProofModal=!1,this.loadPendingDiscountBookings(),this.loadVerifiedEligibilities(),this.loadBookingsAndSessions()},error:e=>{console.error("Failed to approve discount",e),this.isApprovingDiscount=!1,alert(e.message||"Failed to approve discount")}})}openRejectDiscountModal(t){this.selectedDiscountBooking=t,this.rejectDiscountReason="",this.showRejectDiscountModal=!0}confirmRejectDiscount(){if(!this.selectedDiscountBooking||!this.rejectDiscountReason.trim()){alert("Rejection reason is required");return}this.apiService.rejectBookingDiscount(this.selectedDiscountBooking.id,this.rejectDiscountReason).subscribe({next:()=>{this.showRejectDiscountModal=!1,this.selectedDiscountBooking=null,this.rejectDiscountReason="",this.loadPendingDiscountBookings(),this.loadBookingsAndSessions()},error:t=>{console.error("Failed to reject discount",t),alert(t.message||"Failed to reject discount")}})}getDiscountBadgeClass(t){switch(t.discountStatus){case"PENDING_VERIFICATION":return"badge-discount-pending";case"APPROVED":return"badge-discount-approved";case"REJECTED":return"badge-discount-rejected";default:return""}}loadAdminRefunds(){this.isLoadingRefunds=!0,this.apiService.getAdminRefunds(this.refundStatusFilter,this.refundRequestsPage,this.refundRequestsPageSize).subscribe({next:t=>{this.refundRequests=t.content||[],this.refundRequestsTotalPages=t.totalPages||0,this.refundRequestsTotalElements=t.totalElements||0,this.pendingRefundCount=t.pendingCount||0,this.isLoadingRefunds=!1},error:t=>{console.error("Failed to load refund requests:",t),this.refundRequests=[],this.isLoadingRefunds=!1,this.errorMessage="Failed to load refund requests. Please try again.",setTimeout(()=>{this.errorMessage=""},5e3)}})}setRefundStatusFilter(t){this.refundStatusFilter=t,this.refundRequestsPage=0,this.loadAdminRefunds()}refundRequestsNextPage(){this.refundRequestsPage<this.refundRequestsTotalPages-1&&(this.refundRequestsPage++,this.loadAdminRefunds())}refundRequestsPrevPage(){this.refundRequestsPage>0&&(this.refundRequestsPage--,this.loadAdminRefunds())}openApproveRefundModal(t){this.selectedRefund=t,this.refundProofFiles=[],this.showApproveRefundModal=!0}closeApproveRefundModal(){this.showApproveRefundModal=!1,this.selectedRefund=null,this.refundProofFiles=[]}openDeclineRefundModal(t){this.selectedRefund=t,this.refundDeclineReason="",this.showDeclineRefundModal=!0}closeDeclineRefundModal(){this.showDeclineRefundModal=!1,this.selectedRefund=null,this.refundDeclineReason=""}onRefundProofFilesSelected(t){let e=t.target;e.files&&(this.refundProofFiles=Array.from(e.files))}submitApproveRefund(){if(!this.selectedRefund)return;if(this.refundProofFiles.length===0){this.showErrorMessage("Please attach a screenshot of the refund proof.");return}this.isSubmittingRefund=!0;let t=new FormData;
104this.refundProofFiles.forEach(e=>t.append("files",e)),this.apiService.approveRefund(this.selectedRefund.id,t).subscribe({next:()=>{this.isSubmittingRefund=!1,this.closeApproveRefundModal(),this.loadAdminRefunds(),this.showSuccessMsg("Refund approved and player notified.")},error:e=>{this.isSubmittingRefund=!1;let i=e?.payload?.error||e?.message||"Failed to approve refund.";this.showErrorMessage(i)}})}submitDeclineRefund(){if(this.selectedRefund){if(!this.refundDeclineReason.trim()){this.showErrorMessage("A reason is required to decline the refund request.");return}this.isSubmittingRefund=!0,this.apiService.declineRefund(this.selectedRefund.id,this.refundDeclineReason).subscribe({next:()=>{this.isSubmittingRefund=!1,this.closeDeclineRefundModal(),this.loadAdminRefunds(),this.showSuccessMsg("Refund request declined and player notified.")},error:t=>{this.isSubmittingRefund=!1;let e=t?.payload?.error||t?.message||"Failed to decline refund.";this.showErrorMessage(e)}})}}viewRefundPaymentProof(t){this.selectedRefund=t,this.refundReceiptViewUrls=this.buildRefundImageUrls(t.paymentProofUrl||""),this.showRefundReceiptModal=!0}viewRefundProof(t){this.selectedRefund=t,this.refundReceiptViewUrls=this.buildRefundImageUrls(t.refundProofUrl||""),this.showRefundReceiptModal=!0}closeRefundReceiptModal(){this.showRefundReceiptModal=!1,this.selectedRefund=null,this.refundReceiptViewUrls=[]}buildRefundImageUrls(t){if(!t)return[];try{let e=JSON.parse(t);return Array.isArray(e)?e.map(i=>{let o=i;if(typeof i=="string")try{o=JSON.parse(i)}catch{return""}return o?.fileId?`${Be.apiBase}/drive/receipt/${o.fileId}`:""}).filter(Boolean):[]}catch{return[]}}getRefundStatusClass(t){switch(t){case"PENDING":return"badge-pending";case"APPROVED":return"badge-verified";case"DECLINED":return"badge-cancelled";default:return""}}showSuccessMsg(t){this.successMessage=t,setTimeout(()=>{this.successMessage=""},4e3)}showErrorMessage(t){this.errorMessage=t,setTimeout(()=>{this.errorMessage=""},5e3)}static \u0275fac=function(e){return new(e||n)(ae(vi),ae(je),ae(Va),ae(it),ae(nt),ae(qo))};static \u0275cmp=We({type:n,selectors:[["app-open-play-management"]],decls:48,vars:36,consts:[["noAdjustmentAdmin",""],["noScanInfo",""],["noReceipt",""],["noCreditReceipt",""],[1,"open-play-management-container"],[1,"page-header"],[1,"subtitle"],["class","alert alert-success",4,"ngIf"],["class","alert alert-error",4,"ngIf"],[1,"tab-navigation"],[1,"tab-btn",3,"click"],[1,"bi","bi-calendar3"],[1,"bi","bi-people"],["class","badge",4,"ngIf"],[1,"bi","bi-tag"],[1,"bi","bi-arrow-counterclockwise"],["class","badge badge-warning",4,"ngIf"],[4,"ngIf"],["class","bookings-management",4,"ngIf"],["class","modal-overlay generate-modal-overlay",3,"click",4,"ngIf"],["class","modal-overlay",3,"click",4,"ngIf"],["class","modal-overlay confirm-modal-overlay",3,"click",4,"ngIf"],["id","qr-file-scratch",2,"display","none"],["class","discounts-tab",4,"ngIf"],["class","modal-overlay credit-receipt-preview-overlay",3,"click",4,"ngIf"],[1,"alert","alert-success"],[1,"bi","bi-check-circle"],[1,"alert","alert-error"],[1,"bi","bi-exclamation-circle"],[1,"badge"],[1,"badge","badge-warning"],[1,"sessions-section"],[1,"sessions-header"],[1,"sessions-title-group"],[1,"sessions-count"],[1,"add-booking-btn",3,"click"],["class","loading-container",4,"ngIf"],["class","filters-container",4,"ngIf"],["class","bulk-actions-bar",4,"ngIf"],["class","existing-sessions-container",4,"ngIf"],[1,"loading-container"],[1,"spinner"],[1,"loading-text"],[1,"filters-container"],[1,"filters-header"],[1,"btn-clear-filters",3,"click"],[1,"filters-grid"],[1,"filter-group"],["type","text","placeholder","Search session type or date...",1,"form-control",3,"ngModelChange","ngModel"],[1,"form-control",3,"ngModelChange","ngModel"],["value",""],["value","UPCOMING"],["value","ONGOING"],["value","COMPLETED"],[3,"value",4,"ngFor","ngForOf"],["type","date",1,"form-control",3,"ngModelChange","ngModel"],["value","date"],["value","sessionType"],["value","time"],["value","maxPlayers"],["value","price"],["value","currentPlayers"],["value","status"],["value","asc"],["value","desc"],[3,"value"],[1,"bulk-actions-bar"],[1,"bulk-actions-left"],[1,"btn-bul
104k",3,"click","disabled"],[1,"bi","bi-check-square"],[1,"bi","bi-square"],["class","selection-count",4,"ngIf"],[1,"bulk-actions-right"],[1,"btn-bulk","btn-bulk-delete",3,"click","disabled"],[1,"bi","bi-trash"],["class","spinner-small",4,"ngIf"],[1,"selection-count"],[1,"spinner-small"],[1,"existing-sessions-container"],[1,"sessions-table-wrapper"],["class","sessions-table",4,"ngIf"],["class","no-sessions",4,"ngIf"],["style","margin: 16px 0; text-align: center;",4,"ngIf"],[1,"sessions-table"],[1,"checkbox-col"],["type","checkbox",3,"change","checked","disabled"],[1,"sortable",3,"click"],["class","sort-icon",4,"ngIf"],[3,"selected-row","session-with-bookings",4,"ngFor","ngForOf"],[1,"sort-icon"],["data-label","Date"],["data-label","Type"],["data-label","Time"],["data-label","Max"],["data-label","Players"],[1,"player-count-badge"],["data-label","Price"],["data-label","Status"],[1,"status-badge"],["data-label","Actions"],[1,"action-buttons"],["title","Edit",1,"btn-action","btn-edit",3,"click","disabled"],[1,"bi","bi-pencil"],[1,"btn-action","btn-delete",3,"click","title","disabled"],[1,"no-sessions"],[2,"margin","16px 0","text-align","center"],[1,"pagination-btn","nav-btn",3,"click","disabled"],["class","pagination-btn page-btn",3,"active","disabled","click",4,"ngFor","ngForOf"],[1,"pagination-btn","page-btn",3,"click","disabled"],[1,"bookings-management"],["class","bookings-layout",4,"ngIf"],[1,"bookings-layout"],[1,"session-list-panel"],[1,"session-list-header"],[1,"bi","bi-calendar3-event"],[1,"session-list-count"],[1,"session-date-filter"],["type","date","placeholder","From",1,"form-control","form-control-sm",3,"ngModelChange","ngModel"],["type","date","placeholder","To",1,"form-control","form-control-sm",3,"ngModelChange","ngModel"],["class","btn-clear-sm","title","Clear date filter",3,"click",4,"ngIf"],[1,"session-list"],["class","session-list-item",3,"active","has-pending","click",4,"ngFor","ngForOf"],["class","no-sessions-msg",4,"ngIf"],["class","session-pagination",4,"ngIf"],[1,"booking-detail-panel"],["class","no-selection",4,"ngIf"],["class","booking-detail-content",4,"ngIf"],["title","Clear date filter",1,"btn-clear-sm",3,"click"],[1,"bi","bi-x-circle"],[1,"session-list-item",3,"click"],[1,"session-list-info"],[1,"session-list-top-row"],[1,"session-list-type"],[1,"session-status-mini"],[1,"session-list-date"],[1,"session-list-time"],[1,"bi","bi-clock"],["class","session-list-court",4,"ngIf"],[1,"session-list-stats"],[1,"player-count"],[1,"bi","bi-people-fill"],["class","pending-badge",4,"ngIf"],[1,"session-list-court"],[1,"bi","bi-geo-alt"],[1,"pending-badge"],[1,"bi","bi-exclamation-circle-fill"],[1,"no-sessions-msg"],[1,"bi","bi-inbox"],[1,"session-pagination"],[1,"btn-page",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"page-info"],[1,"bi","bi-chevron-right"],[1,"no-selection"],[1,"bi","bi-arrow-left-circle"],[1,"booking-detail-content"],[1,"booking-panel-header"],[1,"booking-panel-top-row"],[1,"booking-panel-title"],[1,"booking-panel-subtitle"],[1,"btn-scan-qr",3,"click","disabled","title"],[1,"bi","bi-qr-code-scan"],[1,"booking-stats-row"],[1,"stat-chip","stat-total"],[1,"stat-number"],[1,"stat-label"],["class","stat-chip stat-verified",4,"ngIf"],["class","stat-chip stat-pending",4,"ngIf"],["class","stat-chip stat-waiting",4,"ngIf"],[1,"booking-filters"],[1,"filter-input-wrapper"],[1,"bi","bi-search"],["type","text","placeholder","Search by player name...",1,"form-control",3,"ngModelChange","ngModel"],["value","PENDING_PAYMENT"],["value","PAYMENT_VERIFIED"],["value","CANCELLED"],["value","EXPIRED"],[1,"bookings-list"],["class","booking-card",3,"class",4,"ngFor","ngForOf"],["class","no-bookings",4,"ngIf"],[1,"stat-chip","stat-verified"],[1,"stat-chip","stat-pending"],[1,"stat-chip","stat-waiting"],[1,"booking-card"],[1,"booking-card-header"],[1,"booker-info"],[1,"booker-avatar"],[1,"booker-name"],[1,"booker-username"],[1,"booking-status-tag"],[1,"booking-card-body"],[1,"booking-info-grid"],[1,"info-item"],[1,"info-label"],[1,"info-value"],[1,"bi","bi-cash"],[4,"ngIf","ngIfElse"],["class","info-item",4,"ngIf"],[1,"bi","bi-calendar-check"],["class","admin-discount-row",3,"admin-discount-approved","admin-discount-pending",4,"ngIf"],["class","admin-credit-row",4,"ngIf"],[1,"player-names-list"],[4,"ngFor","ngForOf"],[1,"booking-card-actions"],["class","verified-container",4,"ngIf"],["class","waiting-tag",4,"ngIf"],["class","expired-tag",4,"ngIf"],[1,"amount-original"],[1,"amount-discounted"],[1,"bi","bi-credit-card"],[1,"payment-method-badge"],[1,"bi"],[1,"admin-discount-row"],[1,"admin-discount-type"],[1,"admin-discount-savings"],[1,"admin-discount-status"],[1,"admin-credit-row"],[1,"bi","bi-coin"],[1,"admin-credit-type"],[1,"admin-credit-savings"],[1,"admin-credit-status"],["type","button","title","Trace where these credits came from",1,"credit-history-btn",3,"click"],[1,"bi","bi-clock-history"],[1,"player-scan-row"],[1,"player-scan-name"],[1,"player-scan-status"],["class","player-scan-time",4,"ngIf"],[1,"player-scan-time"],["class","player-scan-by",4,"ngIf"],[1,"player-scan-by"],[1,"player-name-tag"],[1,"bi","bi-pers
104on-fill"],[1,"btn-sm","btn-verify",3,"click"],[1,"bi","bi-receipt"],[1,"btn-sm","btn-approve",3,"click"],[1,"btn-sm","btn-decline",3,"click"],[1,"verified-container"],[1,"verified-tag"],[1,"bi","bi-patch-check-fill"],["class","btn-sm btn-verify",3,"click",4,"ngIf"],[1,"btn-sm","btn-cancel-booking",3,"click"],[1,"waiting-tag"],[1,"bi","bi-hourglass-split"],[1,"cancelled-tag"],[1,"bi","bi-slash-circle"],["class","no-receipt-note",4,"ngIf"],[1,"no-receipt-note"],[1,"expired-tag"],[1,"badge","badge-discount-pending"],[1,"btn-sm","btn-view-proof",3,"click"],[1,"bi","bi-file-earmark-image"],[1,"badge","badge-discount-approved"],[1,"no-bookings"],[1,"modal-overlay","generate-modal-overlay",3,"click"],[1,"modal-content","generate-modal-content",3,"click"],[1,"modal-header"],[1,"close-btn",3,"click"],[1,"bi","bi-x"],[1,"modal-body","generate-modal-body"],["id","generateForm",1,"session-form",3,"ngSubmit","formGroup"],[1,"form-section"],[1,"form-row"],[1,"form-group"],["for","startDate"],["type","date","id","startDate","formControlName","startDate","required","",1,"form-control"],["for","endDate"],["type","date","id","endDate","formControlName","endDate","required","",1,"form-control"],[1,"sessions-list"],["class","session-item",4,"ngFor","ngForOf"],["type","button",1,"btn-add-session",3,"click"],[1,"modal-footer"],["type","button",1,"btn","btn-secondary",3,"click","disabled"],["type","submit","form","generateForm",1,"btn","btn-primary",3,"disabled"],[1,"session-item"],[1,"session-number"],[1,"session-fields-grid"],[1,"form-group","session-name-group"],[3,"for"],["type","text","placeholder","e.g., AM Session","required","",1,"form-control",3,"ngModelChange","id","ngModel","ngModelOptions"],["type","time","required","",1,"form-control",3,"ngModelChange","id","ngModel","ngModelOptions"],["type","number","min","2","max","200","placeholder","12","required","",1,"form-control",3,"ngModelChange","id","ngModel","ngModelOptions"],["type","number","min","0","placeholder","150","required","",1,"form-control",3,"ngModelChange","id","ngModel","ngModelOptions"],[1,"form-group","session-remove-group"],["type","button","title","Remove Session",1,"btn-remove-session",3,"click","disabled"],[1,"modal-overlay",3,"click"],[1,"modal-content","edit-modal",3,"click"],[1,"modal-body"],[1,"session-info"],["for","editMaxPlayers"],["type","number","id","editMaxPlayers","min","2","max","200",1,"form-control",3,"ngModelChange","ngModel"],["for","editPrice"],["type","number","id","editPrice","min","0",1,"form-control",3,"ngModelChange","ngModel"],["for","editStartTime"],["type","time","id","editStartTime",1,"form-control",3,"ngModelChange","ngModel"],["for","editEndTime"],["type","time","id","editEndTime",1,"form-control",3,"ngModelChange","ngModel"],[1,"btn","btn-secondary",3,"click"],[1,"btn","btn-primary",3,"click"],[1,"modal-content","receipt-modal",3,"click"],["class","modal-body",4,"ngIf"],[1,"receipt-info"],[1,"receipt-row"],["class","receipt-row",4,"ngIf"],[1,"receipt-image-area"],["class","receipt-image-container",4,"ngFor","ngForOf"],[1,"receipt-image-container"],[1,"receipt-image-header"],[1,"receipt-zoom-controls"],["title","Zoom out",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-zoom-out"],[1,"zoom-level"],["title","Zoom in",1,"zoom-btn",3,"click","disabled"],[1,"bi","bi-zoom-in"],["title","Reset zoom",1,"zoom-btn","zoom-reset",3,"click","disabled"],[1,"bi","bi-arrows-angle-contract"],[1,"zoomable-image-wrapper",3,"mousedown","mousemove","mouseup","mouseleave","touchstart","touchmove","touchend"],[1,"receipt-image",3,"src","alt"],[1,"receipt-placeholder"],[1,"bi","bi-image"],[1,"btn","btn-decline-outline",3,"click"],[1,"bi","bi-x-lg"],[1,"btn","btn-verify-fill",3,"click"],[1,"bi","bi-check-lg"],[1,"modal-content","decline-modal",3,"click"],[1,"bi","bi-x-circle","text-danger"],["rows","3","placeholder","e.g., Invalid receipt, wrong amount...",1,"form-control",3,"ngModelChange","ngModel"],[1,"btn","btn-danger",3,"click"],[1,"bi","bi-exclamation-triangle","text-danger"],[1,"text-muted"],["rows","3","placeholder","e.g., Session cancelled, overbooking issue, maintenance...",1,"form-control",3,"ngModelChange","ngModel"],[1,"modal-overlay","confirm-modal-overlay",3,"click"],[1,"modal-content","confirm-modal-content",3,"click"],[1,"confirm-message",2,"white-space","pre-line"],["class","btn btn-secondary",3,"click",4,"ngIf"],[1,"btn",3,"click"],[1,"modal-content",2,"max-width","420px",3,"click"],[1,"bi","bi-exclamation-triangle-fill",2,"color","var(--color-accent)"],[1,"modal-body",2,"padding","1.5rem"],[1,"modal-footer",2,"display","flex","gap","0.75rem","justify-content","flex-end","padding","1rem 1.5rem"],[1,"modal-content","scan-modal",3,"click"],[1,"modal-body","scan-modal-body"],["class","scan-mode-tabs",4,"ngIf"],["id","qr-reader",1,"qr-reader-container"],["class","qr-upload-area",4,"ngIf"],["class","scan-result scan-success",4,"ngIf"],["class","scan-result scan-error",4,"ngIf"],[1,"modal-footer","scan-modal-footer"],["class","btn btn-primary",3,"click",4,"ngIf"],[1,"scan-mode-tabs"],[1,"scan-tab-btn",3,"click"],[1,"bi","bi-camera-video"],[1,"qr-upload-area"],["for","qr-file-input",1,"qr-upload-label"],["id","qr-file-input","type","file","accept","image/*",3,"change","disabled"],[1,"bi","bi-cloud-upload"],[1,"loading-spinner","small"],[1,"scan-result","scan-success"],[1,"scan-result-icon"],[1,"bi","bi-check-circle-fill"],[1,"scan-player-name"],[1,"scan-detail
104s"],[1,"bi","bi-hash"],[1,"now-playing-badge"],[1,"bi","bi-play-circle-fill"],[1,"scan-result","scan-error"],[1,"bi","bi-x-circle-fill"],[1,"bi","bi-arrow-repeat"],[1,"discounts-tab"],[1,"discount-types-section"],[1,"discount-section-header"],[1,"discount-section-title"],[1,"bi","bi-tags"],[1,"btn-add-discount",3,"click"],[1,"bi","bi-plus-circle"],["class","discount-loading",4,"ngIf"],["class","discount-empty-state",4,"ngIf"],["class","discount-types-grid",4,"ngIf"],[1,"pending-discounts-section"],[1,"pending-discounts-header"],[1,"pending-discounts-title"],["class","pending-count-badge",4,"ngIf"],["class","discount-pending-list",4,"ngIf"],[1,"beneficiaries-section","beneficiaries-section--verified"],[1,"beneficiaries-section-header"],[1,"beneficiaries-section-title"],[1,"bi","bi-patch-check-fill","beneficiaries-icon","beneficiaries-icon--verified"],["class","beneficiaries-count-badge beneficiaries-count-badge--verified",4,"ngIf"],[1,"beneficiaries-section-hint"],["class","beneficiaries-grid",4,"ngIf"],["class","beneficiaries-section beneficiaries-section--revoked",4,"ngIf"],[1,"discount-loading"],[1,"discount-empty-state"],[1,"discount-types-grid"],["class","discount-type-card",3,"inactive",4,"ngFor","ngForOf"],[1,"discount-type-card"],[1,"discount-type-card-left"],[1,"discount-type-icon"],[1,"bi","bi-tag-fill"],[1,"discount-type-info"],[1,"discount-type-name"],[1,"discount-type-desc"],[1,"discount-type-value"],[1,"discount-badge-pill"],[1,"discount-mode-label"],[1,"discount-vat-badge"],[1,"discount-type-card-right"],[1,"discount-status-badge"],[1,"discount-type-actions"],["title","Edit",1,"btn-sm","btn-verify",3,"click"],[1,"btn-sm",3,"click","title"],[1,"pending-count-badge"],[1,"discount-pending-list"],["class","discount-pending-card",4,"ngFor","ngForOf"],[1,"discount-pending-card"],[1,"pending-card-top"],[1,"pending-player-info"],[1,"pending-avatar"],[1,"pending-player-name"],[1,"pending-booking-id"],[1,"pending-discount-badge"],[1,"pending-card-amounts"],[1,"amount-item"],[1,"amount-label"],[1,"amount-value"],[1,"bi","bi-arrow-right","amount-arrow"],[1,"amount-value","discounted"],[1,"amount-value","savings"],[1,"pending-card-actions"],[1,"btn-sm","btn-approve",3,"click","disabled"],[1,"beneficiaries-count-badge","beneficiaries-count-badge--verified"],[1,"bi","bi-patch-check"],[1,"beneficiaries-grid"],["class","beneficiary-card beneficiary-card--verified",3,"click",4,"ngFor","ngForOf"],[1,"beneficiary-card","beneficiary-card--verified",3,"click"],[1,"beneficiary-card-accent","beneficiary-card-accent--verified"],[1,"beneficiary-card-body"],[1,"beneficiary-avatar","beneficiary-avatar--verified"],[1,"beneficiary-info"],[1,"beneficiary-name"],["class","beneficiary-username",4,"ngIf"],[1,"beneficiary-type-badge"],[1,"beneficiary-status-col"],[1,"beneficiary-status-pill","beneficiary-status-pill--verified"],["class","beneficiary-date-info",4,"ngIf"],[1,"bi","bi-chevron-right","beneficiary-chevron"],[1,"beneficiary-username"],[1,"beneficiary-date-info"],[1,"beneficiary-date"],["class","beneficiary-by",4,"ngIf"],[1,"beneficiary-by"],[1,"beneficiaries-section","beneficiaries-section--revoked"],[1,"bi","bi-slash-circle-fill","beneficiaries-icon","beneficiaries-icon--revoked"],[1,"beneficiaries-count-badge","beneficiaries-count-badge--revoked"],["class","beneficiary-card beneficiary-card--revoked",3,"click",4,"ngFor","ngForOf"],[1,"beneficiary-card","beneficiary-card--revoked",3,"click"],[1,"beneficiary-card-accent","beneficiary-card-accent--revoked"],[1,"beneficiary-avatar","beneficiary-avatar--revoked"],[1,"beneficiary-status-pill","beneficiary-status-pill--revoked"],[1,"bi","bi-slash-circle-fill"],[1,"modal-content",3,"click"],[2,"color","var(--color-danger)"],["type","text","placeholder","e.g. PWD, Senior Citizen",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","Brief note shown to players in the booking form",1,"form-control",3,"ngModelChange","ngModel"],["value","PERCENTAGE"],["value","FIXED_AMOUNT"],["type","number","min","0",1,"form-control",3,"ngModelChange","ngModel","placeholder"],[1,"vat-treatment-options"],[1,"vat-option-label"],["type","radio","name","vatTreatment","value","VAT_INCLUSIVE",3,"ngModelChange","ngModel"],[1,"vat-option-content"],[1,"vat-option-title"],[1,"vat-option-desc"],["type","radio","name","vatTreatment","value","VAT_EXCLUSIVE",3,"ngModelChange","ngModel"],["class","form-group",4,"ngIf"],[1,"discount-active-toggle"],[1,"checkbox-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"btn","btn-primary",3,"click","disabled"],[1,"vat-rate-input-wrap"],["type","number","min","0","max","100","step","0.01","placeholder","e.g. 12",1,"form-control","vat-rate-input",3,"ngModelChange","ngModel"],[1,"vat-rate-suffix"],[1,"vat-rate-hint"],[1,"bi","bi-info-circle"],[1,"id-proof-player
104-row"],[1,"id-proof-player-name"],[1,"id-proof-booking-id"],[1,"id-proof-detail-grid"],[1,"id-proof-detail-item"],[1,"id-proof-label"],[1,"id-proof-value","accent"],[1,"id-proof-value"],[1,"id-proof-value","success"],[1,"id-proof-value","savings"],[1,"id-proof-images-section"],[1,"id-proof-images-label"],["class","id-proof-loading",4,"ngIf"],["class","id-proof-empty",4,"ngIf"],["class","id-proof-image-list",4,"ngIf"],[1,"btn","btn-decline","btn-danger",3,"click"],[1,"btn","btn-approve","btn-primary",3,"click","disabled"],[1,"id-proof-loading"],[1,"spinner",2,"width","24px","height","24px","border-width","3px"],[1,"id-proof-empty"],[1,"id-proof-image-list"],["class","id-proof-image-wrap",4,"ngFor","ngForOf"],[1,"id-proof-image-wrap"],[1,"id-proof-image-num"],[1,"id-proof-image",3,"src","alt"],[1,"modal-content","verified-detail-modal",3,"click"],[1,"modal-header",2,"border-bottom","2px solid var(--color-success-bg-medium)"],[1,"bi","bi-patch-check-fill",2,"color","var(--color-success)"],[1,"beneficiary-avatar","beneficiary-avatar--verified",2,"width","44px","height","44px","font-size","1.1rem"],["class","id-proof-booking-id",4,"ngIf"],[1,"id-proof-value",2,"color","var(--color-success)","font-weight","700"],[1,"modal-header",2,"border-bottom","2px solid var(--color-danger-bg-medium, rgba(239,68,68,0.2))"],[1,"bi","bi-slash-circle-fill",2,"color","var(--color-danger)"],[1,"btn","btn-success",3,"click","disabled"],[1,"beneficiary-avatar","beneficiary-avatar--revoked",2,"width","44px","height","44px","font-size","1.1rem"],[1,"id-proof-value",2,"color","var(--color-danger)","font-weight","700"],[1,"revoked-info-note"],[1,"modal-content","revoke-confirm-modal",3,"click"],[1,"modal-header","revoke-confirm-header"],[1,"bi","bi-exclamation-triangle-fill"],[1,"btn","btn-secondary",3,"click","disabled"],[1,"btn","btn-danger",3,"click","disabled"],[1,"revoke-confirm-body"],[1,"revoke-confirm-avatar"],[1,"revoke-confirm-info"],[1,"revoke-confirm-name"],[1,"revoke-confirm-type"],[1,"revoke-confirm-message"],[1,"revoke-confirm-note"],[1,"reject-player-context"],[1,"bi","bi-exclamation-triangle-fill",2,"color","var(--color-warning)","font-size","1.5rem"],[2,"font-weight","700","color","var(--color-text)"],[2,"font-size","0.8rem","color","var(--color-text-muted)"],[1,"form-group",2,"margin-top","1rem"],["rows","3","placeholder","e.g. ID is expired, photo is unclear, not a valid PWD card...",1,"form-control",3,"ngModelChange","ngModel"],[1,"btn","btn-primary",2,"background","var(--color-danger)",3,"click"],[1,"refund-filter-bar"],[1,"refund-filter-btn",3,"click"],["class","badge-inline",4,"ngIf"],["class","no-bookings-placeholder",4,"ngIf"],["class","refund-table-wrapper",4,"ngIf"],[1,"badge-inline"],[1,"no-bookings-placeholder"],[1,"bi","bi-arrow-counterclockwise",2,"font-size","2.5rem","color","var(--color-text-muted)"],[1,"refund-table-wrapper"],[1,"refund-table"],["class","pagination-row",4,"ngIf"],[1,"booking-id-tag"],[1,"player-cell"],[1,"session-cell"],[1,"amount-cell"],[1,"date-cell"],[1,"status-badge",3,"ngClass"],["class","decline-reason-snippet",4,"ngIf"],[1,"actions-cell"],[1,"action-buttons-row"],["class","btn-sm btn-view-proof",3,"click",4,"ngIf"],["class","btn-sm btn-approve",3,"click",4,"ngIf"],["class","btn-sm btn-decline",3,"click",4,"ngIf"],[1,"decline-reason-snippet"],[1,"pagination-row"],[1,"bi","bi-check-circle","text-success"],["class","refund-destination-box",4,"ngIf"],[1,"text-muted",2,"font-size","0.85rem"],[1,"form-label"],["type","file","accept","image/*,.pdf","multiple","",1,"form-control",3,"change"],["style","margin-top:0.5rem; font-size:0.82rem; color: var(--color-accent);",4,"ngIf"],[1,"refund-destination-box"],[1,"refund-destination-title"],[1,"bi","bi-bank"],[1,"refund-destination-row"],[2,"margin-top","0.5rem","font-size","0.82rem","color","var(--color-accent)"],["rows","3","placeholder","Explain why the refund request is being declined...",1,"form-control",3,"ngModelChange","ngModel"],[1,"modal-content","receipt-view-modal",3,"click"],[1,"modal-body","receipt-body"],["class","no-receipt-placeholder",4,"ngIf"],["class","receipt-image-wrapper",4,"ngFor","ngForOf"],[1,"no-receipt-placeholder"],[1,"bi","bi-image-fill"],[1,"receipt-image-wrapper"],[1,"modal-content","credit-history-modal",3,"click"],["class","credit-history-intro",4,"ngIf"],["class","credit-history-loading",4,"ngIf"],["class","credit-history-error",4,"ngIf"],["class","credit-history-empty",4,"ngIf"],["class","credit-history-list",4,"ngIf"],[1,"credit-history-intro"],[1,"credit-history-loading"],[1,"bi","bi-arrow-repeat","spin"],[1,"credit-history-error"],[1,"bi","bi-exclamation-triangle"],[1,"credit-history-empty"],[1,"credit-history-list"],[1,"credit-history-summary"],["class","credit-history-card",4,"ngFor","ngForOf"],[1,"credit-history-card"],[1,"credit-history-card-header"],[1,"credit-index"],[1,"credit-status-badge"],[1,"credit-detail-grid"],[1,"credit-detail"],[1,"credit-detail-label"],[1,"credit-detail-value","mono"],["class","credit-detail",4,"ngIf"],["class","credit-note",4,"ngIf"],[1,"credit-receipt-section"],[1,"credit-receipt-title"],["class","credit-receipt-images",4,"ngIf","ngIfElse"],[1,"bi","bi-receipt-cutoff"],[1,"credit-detail-value"],[1,"bi","bi-controller"],[1,"bi","bi-calendar-event"],[1,"bi","bi-check2-circle"],[1,"credit-note"],[1,"credit-receipt-images"],["type","button","class","credit-receipt-thumb","title","Click to view receipt",3,"click",4,"ngFor","ngForOf"],["type","button","title","Click to view receipt",1,"credit-receipt-thumb",3,"click"],[3,"src","alt"],[1,"credit-receipt-none"],[1,"modal-overlay","credit-receipt-preview-overlay",3,"click"]],template:function(e,i){e&1&&(r(0,"div",4)(1,"div",5)(2,"h1"),l(3,"Manage Open Play"),a(),r(4,"p",6),l(5,"Configure sessions and manage player bookings"),a()(),A(6,P7,5,1,"div",7)(7,M7,5,1,"div",8),r(8,"div",9)(9,"button",10),S("click",function(){return i.setActiveTab("sessions")}),w(10,"i",11),l(11," Sessions "),a(),r(12,"button",10),S("click",function(){return i.setActiveTab("bookings")}),w(13,"i",12),l(14," Bookings & Payments "),A(15,S7,2,1,"span",13),a(),r(16,"button",10),S("click",function(){return i.setActiveTab("discounts")}),w(17,"i",14),l(18," Discounts "),A(19,k7,2,1,"span",13),a(),r(20,"button",10),S("click",function(){return i.setActiveTab("refunds")}),w(21,"i",15),l(22," Refunds "),A(23,O7,2,1,"span",16),a()(),A(24,X7,14,6,"div",17)(25,AA,3,2,"div",18)(26,RA,35,6,"div",19)(27,BA,38,6,"div",20)(28,HA,13,2,"div",20)(29,WA,23,2,"div",20)(30,GA,25,2,"div",20)(31,$A,15,14,"div",21)(32,YA,20,2,"div",20)(33,nD,18,7,"div",20),w(34,"div",22),A(35,wD,34,10,"div",23)(36,MD,68,27,"div",20)(37,TD,57,21,"div",20)(38,VD,15,1,"div",20)(39,WD,15,3,"div",20)(40,qD,15,4,"div",20)(41,$D,28,4,"div",20)(42,r9,22,13,"div",17)(43,d9,35,10,"div",20)(44,g9,24,5,"div",20)(45,h9,11,2,"div",20)(46,R9,17,5,"div",20)(47,V9,11,2,"div",24),a()),e&2&&(d(6),x("ngIf",i.successMessage),d(),x("ngIf",i.errorMessage),d(2),te("active",i.activeTab==="sessions"),d(3),te("active",i.activeTab==="bookings"),d(3),x("ngIf",i.getTotalPendingVerifications()>0),d(),te("active",i.activeTab==="discounts"),d(3),x("ngIf",i.pendingDiscountBookings.length>0),d(),te("active",i.activeTab==="refunds"),d(3),x("ngIf",i.pendingRefundCount>0),d(),x("ngIf",i.activeTab==="sessions"),d(),x("ngIf",i.activeTab==="bookings"),d(),x("ngIf",i.showGenerateModal),d(),x("ngIf",i.showEditModal),d(),x("ngIf",i.showReceiptModal),d(),x("ngIf",i.showDeclineModal),d(),x("ngIf",i.showCancelBookingModal),d(),x("ngIf",i.showConfirmModal),d(),x("ngIf",i.showEarlyC
104heckInWarning),d(),x("ngIf",i.showScanModal),d(2),x("ngIf",i.activeTab==="discounts"),d(),x("ngIf",i.showDiscountModal),d(),x("ngIf",i.showIdProofModal),d(),x("ngIf",i.showVerifiedDetailModal),d(),x("ngIf",i.showRevokedDetailModal),d(),x("ngIf",i.showRevokeConfirmModal),d(),x("ngIf",i.showRejectDiscountModal),d(),x("ngIf",i.activeTab==="refunds"),d(),x("ngIf",i.showApproveRefundModal),d(),x("ngIf",i.showDeclineRefundModal),d(),x("ngIf",i.showRefundReceiptModal),d(),x("ngIf",i.showCreditHistoryModal),d(),x("ngIf",i.showCreditReceiptPreview))},dependencies:[Ge,cn,rt,$e,Go,fa,xu,Wo,lt,Xn,yn,Cn,at,qi,bn,Vn,Ql,st,Yn,xi,$i,$o,ut,bi,hi,_i],styles:['.open-play-management-container[_ngcontent-%COMP%]{max-width:1400px;margin:0 auto;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;min-height:100vh;background:transparent;color:var(--color-text);box-sizing:border-box}.open-play-management-container[_ngcontent-%COMP%] *[_ngcontent-%COMP%]{box-sizing:border-box}.open-play-management-container[_ngcontent-%COMP%], .session-form[_ngcontent-%COMP%], .view-sessions-section[_ngcontent-%COMP%]{overflow-x:hidden}.page-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:40px;padding-bottom:20px;border-bottom:3px solid var(--color-border);position:relative}.page-header[_ngcontent-%COMP%]:after{content:"";position:absolute;bottom:-3px;left:50%;transform:translate(-50%);width:80px;height:3px;background:var(--color-accent);border-radius:2px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-text);margin-bottom:12px;font-weight:800;letter-spacing:-.5px}.subtitle[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--color-text-secondary);margin-bottom:0;font-weight:400;line-height:1.6}.btn-generate[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 6px var(--color-accent-shadow);margin-top:20px;font-size:1.1rem;padding:14px 32px}.btn-generate[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 6px 8px var(--color-accent-shadow);transform:translateY(-2px)}.alert[_ngcontent-%COMP%]{padding:15px 20px;margin-bottom:20px;border-radius:8px;font-size:1rem;display:flex;align-items:center;gap:8px}.alert-success[_ngcontent-%COMP%]{background-color:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.alert-error[_ngcontent-%COMP%]{background-color:var(--color-danger-bg-light);color:var(--color-danger);border:1px solid var(--color-danger)}.session-form[_ngcontent-%COMP%]{background:transparent;border-radius:0;box-shadow:none;padding:0;border:none}.form-section[_ngcontent-%COMP%]{margin-bottom:20px;padding-bottom:16px;border-bottom:1px solid var(--color-border-light)}.form-section[_ngcontent-%COMP%]:last-of-type{border-bottom:none;margin-bottom:0;padding-bottom:0}.form-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:.875rem;color:var(--color-accent);margin-bottom:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px}.section-description[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin-bottom:10px;font-size:13px;line-height:1.5}.form-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-bottom:0}.form-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;margin-bottom:12px}.form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text-secondary);margin-bottom:4px;font-size:13px;display:block}.form-control[_ngcontent-%COMP%]{padding:8px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:14px;transition:border-color .3s;background-color:var(--color-surface-hover);color:var(--color-text);outline:none;width:100%;box-sizing:border-box}.form-control[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.form-control[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.form-control[_ngcontent-%COMP%]:disabled{background-color:var(--color-surface);cursor:not-allowed;opacity:.6}.help-text[_ngcontent-%COMP%]{font-size:11px;color:var(--color-text-muted);margin-top:3px;display:block}.checkbox-group[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}.checkbox-group.days-of-week[_ngcontent-%COMP%]{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}.checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;padding:8px 12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:6px;cursor:pointer;transition:all .2s ease;-webkit-user-select:none;user-select:none}.checkbox-label[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-accent)}.checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked + span[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:700}.checkbox-label[_ngcontent-%COMP%]:has(input[type=checkbox]:checked){background:var(--color-accent-bg-light);border-color:var(--color-accent)}.checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;margin-right:8px;
104cursor:pointer;accent-color:var(--color-accent);flex-shrink:0;-webkit-appearance:none;-moz-appearance:none;appearance:none;border:2px solid var(--color-border);border-radius:4px;background-color:transparent;position:relative}.checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked{background-color:var(--color-accent);border-color:var(--color-accent)}.checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]:checked:after{content:"\\2713";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);color:#fff;font-size:14px;font-weight:700}.checkbox-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;line-height:1.3}.sessions-list[_ngcontent-%COMP%]{margin-bottom:10px}.session-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin-bottom:8px;padding:10px 12px;background:var(--color-surface);border-radius:8px;border:1px solid var(--color-border);transition:all .2s ease}.session-item[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);box-shadow:var(--shadow-sm)}.session-number[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:28px;height:28px;min-width:28px;min-height:28px;background:var(--color-accent);color:#fff;border-radius:6px;font-weight:700;font-size:.85rem;flex-shrink:0}.session-fields[_ngcontent-%COMP%]{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:10px;flex:1;align-items:end}.session-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%]{margin-bottom:0}.session-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:11px;margin-bottom:3px}.session-fields-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;flex:1}.session-fields-grid[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%]{margin-bottom:0;display:flex;flex-direction:column}.session-fields-grid[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:11px;font-weight:600;color:var(--color-text-secondary);margin-bottom:4px;white-space:nowrap}.session-name-group[_ngcontent-%COMP%]{grid-column:1 / -1}.session-remove-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;justify-content:flex-end}.session-remove-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{visibility:hidden;height:15px;margin-bottom:4px}.session-actions-group[_ngcontent-%COMP%]{margin-bottom:0;display:flex;align-items:flex-end;justify-content:center}.session-actions-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:none}.btn-remove-session[_ngcontent-%COMP%]{padding:8px 14px;background:var(--color-danger);color:#fff;border:none;border-radius:6px;cursor:pointer;font-size:13px;font-weight:600;transition:all .2s ease;height:34px;display:flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap;width:100%}.btn-remove-session[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-danger) 80%,black);box-shadow:0 2px 8px var(--color-danger-shadow)}.btn-remove-session[_ngcontent-%COMP%]:disabled{background:var(--color-text-muted);cursor:not-allowed;opacity:.5}.btn-remove-session[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:16px;line-height:1}.btn-add-session[_ngcontent-%COMP%]{width:100%;padding:8px 16px;background-color:transparent;color:var(--color-success);border:1px dashed var(--color-success);border-radius:6px;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:6px}.btn-add-session[_ngcontent-%COMP%]:hover{background-color:var(--color-success-bg-subtle);border-style:solid}.btn-add-session[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.btn-add-session[_ngcontent-%COMP%]:before{content:"+";font-size:18px;font-weight:700;line-height:1}.form-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:15px;margin-top:30px;padding-top:20px;border-top:2px solid var(--color-border)}.btn[_ngcontent-%COMP%]{padding:10px 18px;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:all .25s ease;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap}.btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.btn-action[_ngcontent-%COMP%], .btn-edit[_ngcontent-%COMP%], .btn-delete[_ng
104content-%COMP%], .close-btn[_ngcontent-%COMP%]{min-width:44px;min-height:44px}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-weight:600}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 4px 12px var(--color-accent-shadow)}.btn-secondary[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;font-weight:500}.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-danger) 80%,black)}.divider[_ngcontent-%COMP%]{height:2px;background:linear-gradient(90deg,transparent,var(--color-accent),transparent);margin:40px 0;box-shadow:0 0 10px var(--color-accent-bg-medium)}.sessions-section[_ngcontent-%COMP%]{background:transparent;border-radius:0;box-shadow:none;padding:0;margin-bottom:30px;border:none}.sessions-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;flex-wrap:wrap;gap:20px;padding-bottom:20px;border-bottom:2px solid var(--color-border)}.sessions-title-group[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.6rem;color:var(--color-text);margin:0 0 8px;font-weight:700;letter-spacing:-.5px}.sessions-count[_ngcontent-%COMP%]{font-size:.95rem;color:var(--color-text-secondary);margin:0;font-weight:500;padding:6px 14px;background:var(--color-surface);border-radius:20px;border:1px solid var(--color-border);display:inline-block}.btn-generate-inline[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 6px var(--color-accent-shadow);padding:12px 24px;font-size:1rem;border:none;border-radius:8px;cursor:pointer;font-weight:600;transition:all .3s;text-transform:uppercase;letter-spacing:.5px;white-space:nowrap}.btn-generate-inline[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 6px 12px var(--color-accent-shadow);transform:translateY(-2px)}.add-booking-btn[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:0 4px 6px var(--color-accent-shadow);padding:12px 24px;font-size:1rem;border:none;border-radius:8px;cursor:pointer;font-weight:600;transition:all .3s;letter-spacing:.5px;white-space:nowrap}.add-booking-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 6px 12px var(--color-accent-shadow);transform:translateY(-2px)}.loading-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:60px 20px;color:var(--color-text)}.spinner[_ngcontent-%COMP%]{border:4px solid var(--color-border);border-top:4px solid var(--color-accent);border-radius:50%;width:50px;height:50px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin-bottom:20px}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.loading-text[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text-secondary)}.filters-container[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;padding:25px;margin-bottom:30px;border:2px solid var(--color-border);box-shadow:var(--shadow-sm)}.filters-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px;flex-wrap:wrap;gap:10px}.filters-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.3rem;color:var(--color-text);margin:0;font-weight:700;display:flex;align-items:center;gap:10px}.filters-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]:before{content:"";width:4px;height:20px;background:var(--color-accent);border-radius:2px}.btn-clear-filters[_ngcontent-%COMP%]{background:transparent;color:var(--color-danger);border:2px solid var(--color-danger);padding:8px 16px;border-radius:6px;cursor:pointer;font-size:.9rem;font-weight:600;transition:all .3s;white-space:nowrap;min-height:38px}.btn-clear-filters[_ngcontent-%COMP%]:hover{background:var(--color-danger);color:#fff;transform:translateY(-1px);box-shadow:0 2px 6px var(--color-danger-shadow)}.filters-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:15px}.filter-group[_ngcontent-%COMP%]{display:flex;flex-direction:column}.filter-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text);margin-bottom:6px;font-size:.9rem}.filter-group[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{background:var(--color-surface-hover);border:2px solid var(--color-border);color:var(--color-text);padding:10px 12px;border-radius:6px;font-size:.95rem}.filter-group[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.sortable[_ngcontent-%COMP%]{cursor:pointer;-webkit-user-select:none;user-select:none;transition:all .2s;position:relative}.sortable[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);color:#fff}.sort-icon[_ngcontent-%COMP%]{margin-left:5px;font-weight:700;color:#fff;display:inline-block;font-size:.9em}.existing-sessions-container[_ngcontent-%COMP%]{margin-top:20px}.sessions-table-wrapper[_ngcontent-%COMP%]{overflow-x:auto;margin-top:15px;-webkit-overflow-scrolling:touch}.sessions-table-wrapper[_ngcontent-%COMP%]::-webkit-scrollbar{height:8px}.sessions-table-wrapper[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-surface);border-radius:4px}.sessions-table-wrapper[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}.sessions-table-wrapper[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent)}.sessions-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;background:var(--color-surface);border-radius:8px;overflow:hidden;box-shadow:var(--shadow-sm)}.sessions-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.sessions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:12px 15px;text-align:left;border-bottom:1px solid var(--color-border);color:var(--color-text)}.sessions-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{font-weight:600;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px;color:#fff}.sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{transition:background .2s}.sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.status-badge[_ngcontent-%COMP%]{padding:4px 12px;border-radius:12px;font-size:.8rem;font-weight:600;text-transform:uppercase;display:inline-block}.status-upcoming[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info);border:1px solid var(--color-info)}.status-ongoing[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);border:1px solid var(--color-warning)}.status-completed[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.player-count-badge[_ngcontent-%COMP%]{display:inline-block;padding:4px 12px;border-radius:12px;font-size:.85rem;font-weight:600;background:var(--color-surface-hover);color:var(--color-text-secondary);border:1px solid var(--color-border)}.player-count-badge.has-players[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);color:var(--color-accent);border:1px solid var(--color-accent)}.action-buttons[_ngcontent-%COMP%]{display:flex;gap:8px}.btn-action[_ngcontent-%COMP%]{padding:6px 10px;border:none;border-radius:6px;cursor:pointer;font-size:18px;transition:all .2s;margin:0 2px;vertical-align:middle;display:inline-flex;align-items:center;justify-content:center}.btn-edit[_ngcontent-%COMP%]{background:var(--color-info);color:#fff}.btn-edit[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-info) 80%,black);box-shadow:0 2px 8px var(--color-info-shadow)}
104.btn-delete[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff}.btn-delete[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-danger) 80%,black);box-shadow:0 2px 8px var(--color-danger-shadow)}.btn-delete.has-bookings[_ngcontent-%COMP%]{background:var(--color-text-muted);opacity:.6;cursor:not-allowed}.btn-delete.has-bookings[_ngcontent-%COMP%]:hover{background:var(--color-text-muted);box-shadow:none}.sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.session-with-bookings[_ngcontent-%COMP%]{background:var(--color-warning-bg-subtle);border-left:3px solid var(--color-warning)}.no-sessions[_ngcontent-%COMP%]{text-align:center;padding:40px;color:var(--color-text-secondary);font-size:1.1rem}.modal-overlay[_ngcontent-%COMP%]{position:fixed;top:0;left:0;width:100%;height:100%;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000;backdrop-filter:blur(4px);animation:_ngcontent-%COMP%_fadeIn .2s ease-in-out}@keyframes _ngcontent-%COMP%_fadeIn{0%{opacity:0}
104to{opacity:1}}.modal-content[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;box-shadow:var(--shadow-lg);max-width:500px;width:90%;max-height:90vh;overflow:hidden;animation:_ngcontent-%COMP%_slideUp .3s ease-out;border:1px solid var(--color-border-light);display:flex;flex-direction:column}@keyframes _ngcontent-%COMP%_slideUp{0%{transform:translateY(30px);opacity:0}to{transform:translateY(0);opacity:1}}.generate-modal-content[_ngcontent-%COMP%]{max-width:720px;width:95%;max-height:90vh}.generate-modal-body[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:20px!important;background:var(--color-surface);min-height:0}.generate-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar{width:8px}.generate-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-track{background:var(--color-surface-hover);border-radius:4px;margin:4px}.generate-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px;border:2px solid var(--color-surface-hover)}.generate-modal-body[_ngcontent-%COMP%]::-webkit-scrollbar-thumb:hover{background:var(--color-accent)}.modal-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:14px 20px;border-bottom:1px solid var(--color-border);background:var(--color-surface);flex-shrink:0}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--color-text);font-size:1.1rem;font-weight:700}.close-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.5rem;color:var(--color-text-muted);cursor:pointer;padding:0;width:30px;height:30px;display:flex;align-items:center;justify-content:center;transition:all .2s ease;line-height:1;border-radius:4px}.close-btn[_ngcontent-%COMP%]:hover{color:var(--color-danger);background:var(--color-surface-hover)}.modal-body[_ngcontent-%COMP%]{padding:20px;color:var(--color-text);flex:1;overflow-y:auto;min-height:0}.session-info[_ngcontent-%COMP%]{background:var(--color-surface-hover);padding:12px 15px;border-radius:8px;margin-bottom:20px;line-height:1.6;color:var(--color-text);border:1px solid var(--color-border);font-size:14px}.session-info[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:700}.modal-footer[_ngcontent-%COMP%]{padding:14px 20px;border-top:1px solid var(--color-border);background:var(--color-surface);display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap;flex-shrink:0}.modal-footer[_ngcontent-%COMP%] .btn[_ngcontent-%COMP%]{min-width:100px;padding:8px 16px;font-size:13px}.edit-modal[_ngcontent-%COMP%]{max-width:550px}.edit-modal[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{color:var(--color-text)}@media (max-width: 1024px){.open-play-management-container[_ngcontent-%COMP%]{padding:15px 10px}.form-row[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:15px}.sessions-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{display:none}.sessions-table[_ngcontent-%COMP%], .sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%], .sessions-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%], .sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{display:block;width:100%}.sessions-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{margin-bottom:20px;border:2px solid var(--color-border);border-radius:8px;padding:15px;background:var(--color-surface)}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{border:none;position:relative;padding:10px 0 10px 50%;text-align:right;min-height:30px}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:before{content:attr(data-label);position:absolute;left:0;width:45%;padding-left:10px;font-weight:600;text-align:left;color:var(--color-accent)}.player-count-badge[_ngcontent-%COMP%]{display:inline-block}.action-buttons[_ngcontent-%COMP%]{justify-content:flex-end;margin-top:10px;padding-left:0!important}.action-buttons[_ngcontent-%COMP%]:before{display:none}.session-item[_ngcontent-%COMP%]{flex-direction:column;gap:10px;align-items:stretch}.session-number[_ngcontent-%COMP%]{align-self:flex-start}.session-fields[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:8px}
104.filters-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr);gap:12px}}@media (max-width: 768px){.open-play-management-container[_ngcontent-%COMP%]{padding:10px}.session-form[_ngcontent-%COMP%], .sessions-section[_ngcontent-%COMP%]{padding:15px;border-radius:8px}.sessions-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.btn-generate-inline[_ngcontent-%COMP%], .add-booking-btn[_ngcontent-%COMP%]{width:100%;max-width:none}.sessions-title-group[_ngcontent-%COMP%]{width:100%}.page-header[_ngcontent-%COMP%]{margin-bottom:20px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.8rem}.subtitle[_ngcontent-%COMP%]{font-size:1rem}.form-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:.85rem}.view-sessions-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.3rem}.form-row[_ngcontent-%COMP%]{grid-template-columns:1fr}.checkbox-group[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:8px}.checkbox-group.days-of-week[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.checkbox-label[_ngcontent-%COMP%]{padding:8px 10px}.form-control[_ngcontent-%COMP%]{padding:8px 10px;font-size:16px}.btn[_ngcontent-%COMP%]{width:100%;padding:10px 16px}
104.form-actions[_ngcontent-%COMP%], .modal-footer[_ngcontent-%COMP%]{flex-direction:row;gap:8px}.session-fields-grid[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr}.session-name-group[_ngcontent-%COMP%]{grid-column:1 / -1}.modal-content[_ngcontent-%COMP%]{width:95%;max-height:92vh;padding:0;margin:10px}.generate-modal-content[_ngcontent-%COMP%]{width:98%;max-width:98%;max-height:95vh}.generate-modal-body[_ngcontent-%COMP%]{padding:14px!important}.modal-header[_ngcontent-%COMP%], .modal-footer[_ngcontent-%COMP%]{padding:12px 14px}.modal-body[_ngcontent-%COMP%]{padding:14px}.btn-generate[_ngcontent-%COMP%]{width:100%;max-width:400px;margin:20px auto 0}.session-item[_ngcontent-%COMP%]{padding:15px}.sessions-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]{padding:12px}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:8px 0;font-size:.9rem}.btn-action[_ngcontent-%COMP%]{padding:8px 12px;font-size:1.1rem}.alert[_ngcontent-%COMP%]{padding:12px 15px;font-size:.9rem}.session-number[_ngcontent-%COMP%]{width:28px;height:28px;min-width:28px;min-height:28px;font-size:.8rem}.session-fields[_ngcontent-%COMP%]{gap:12px}.filters-container[_ngcontent-%COMP%]{padding:15px}.filters-grid[_ngcontent-%COMP%]{grid-template-columns:1fr;gap:12px}.filters-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.btn-clear-filters[_ngcontent-%COMP%]{width:100%}.filter-group[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{font-size:16px}}@media (max-width: 480px){.open-play-management-container[_ngcontent-%COMP%]{padding:8px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.5rem}.subtitle[_ngcontent-%COMP%]{font-size:.9rem}.session-form[_ngcontent-%COMP%], .view-sessions-section[_ngcontent-%COMP%]{padding:12px}.form-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:.8rem}.view-sessions-section[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.2rem}.checkbox-group.days-of-week[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding-left:45%;font-size:.85rem}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:before{width:40%;font-size:.8rem}.btn[_ngcontent-%COMP%]{font-size:.85rem;padding:8px 12px}.form-control[_ngcontent-%COMP%]{font-size:16px;padding:8px}.modal-content[_ngcontent-%COMP%]{width:98%;margin:5px;max-height:95vh}.generate-modal-content[_ngcontent-%COMP%]{width:100%;max-width:100%;margin:0;border-radius:8px 8px 0 0;max-height:100vh}.generate-modal-body[_ngcontent-%COMP%]{padding:10px!important}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1rem}.session-fields[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr;gap:6px}.session-fields[_ngcontent-%COMP%] .form-group[_ngcontent-%COMP%]:first-child{grid-column:1 / -1}.session-fields-grid[_ngcontent-%COMP%]{grid-template-columns:1fr 1fr;gap:8px}.session-name-group[_ngcontent-%COMP%], .session-remove-group[_ngcontent-%COMP%]{grid-column:1 / -1}.session-remove-group[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:none}.btn-generate[_ngcontent-%COMP%]{width:100%;font-size:1rem;padding:12px 20px}.session-number[_ngcontent-%COMP%]{width:24px;height:24px;min-width:24px;min-height:24px;font-size:.75rem}.session-item[_ngcontent-%COMP%]{padding:8px 10px;gap:8px}.btn-remove-session[_ngcontent-%COMP%]{width:100%;padding:8px 12px;height:30px;min-width:30px;min-height:30px;font-size:12px}.status-badge[_ngcontent-%COMP%]{font-size:.7rem;padding:3px 8px}.action-buttons[_ngcontent-%COMP%]{gap:6px}.filters-container[_ngcontent-%COMP%]{padding:12px}.filters-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:1.1rem}.btn-clear-filters[_ngcontent-%COMP%]{font-size:.85rem;padding:8px 12px}}#pagination-controls[_ngcontent-%COMP%], .pagination-controls[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;gap:10px;margin-top:30px;flex-wrap:wrap}.pagination-btn[_ngcontent-%COMP%]{padding:10px 15px;border:2px solid var(--color-border);background:var(--color-surface);color:var(--color-text);border-radius:6px;cursor:pointer;transition:all .3s ease;font-weight:500}.pagination-btn[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent);background:var(--color-accent);color:#fff}.pagination-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.pagination-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.nav-btn[_ngcontent-%COMP%]{font-weight:600}.page-btn[_ngcontent-%COMP%]{min-width:40px}@media (max-width: 360px){.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.3rem}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding-left:0;text-align:left;padding-top:5px;padding-bottom:5px}.sessions-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]:before{position:static;display:block;width:100%;margin-bottom:3px;font-size:.75rem}.action-buttons[_ngcontent-%COMP%]{flex-direction:row;justify-content:flex-start;flex-wrap:wrap}}.tab-navigation[_ngcontent-%COMP%]{display:flex;gap:0;border-bottom:2px solid var(--color-border);margin-bottom:24px}.tab-btn[_ngcontent-%COMP%]{padding:12px 24px;background:none;border:none;font-size:.95rem;font-weight:500;color:var(--color-text-secondary);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-2px;transition:all .2s ease;display:flex;align-items:center;gap:8px}.tab-btn[_ngcontent-%COMP%]:hover{color:var(--color-text);background:var(--color-surface-hover)}.tab-btn.active[_ngcontent-%COMP%]{color:var(--color-accent);border-bottom-color:var(--color-accent);font-weight:600}.tab-btn[_ngcontent-%COMP%] .badge[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;font-size:.7rem;padding:2px 6px;border-radius:10px;font-weight:600;min-width:18px;text-align:center}.bookings-management[_ngcontent-%COMP%]{height:calc(100vh - 220p
104x);min-height:500px}.bookings-layout[_ngcontent-%COMP%]{display:grid;grid-template-columns:320px 1fr;gap:0;height:100%;border:1px solid var(--color-border);border-radius:12px;overflow:hidden}.session-list-panel[_ngcontent-%COMP%]{background:var(--color-surface);border-right:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden}.session-list-header[_ngcontent-%COMP%]{padding:14px 16px;border-bottom:1px solid var(--color-border);display:flex;align-items:center;justify-content:space-between}.session-list-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:.9rem;font-weight:600;color:var(--color-text);display:flex;align-items:center;gap:6px}.session-list-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:.95rem}.session-list-count[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-muted);font-weight:500}.session-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:8px}.session-list-item[_ngcontent-%COMP%]{padding:10px 12px;border-radius:8px;cursor:pointer;margin-bottom:4px;transition:all .2s ease;border:1px solid transparent;display:flex;justify-content:space-between;align-items:flex-start;gap:8px}.session-list-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.session-list-item.active[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);border-color:var(--color-accent)}.session-list-item.has-pending[_ngcontent-%COMP%]{border-left:3px solid var(--color-warning)}.session-list-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px;min-width:0}.session-list-top-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.session-list-type[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.session-status-mini[_ngcontent-%COMP%]{font-size:.62rem;padding:1px 6px;border-radius:8px;font-weight:600;text-transform:uppercase;letter-spacing:.3px;flex-shrink:0}.session-status-mini.mini-ongoing[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success)}.session-status-mini.mini-upcoming[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info)}.session-status-mini.mini-completed[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted)}.session-list-date[_ngcontent-%COMP%]{font-size:.73rem;color:var(--color-text-muted)}.session-list-time[_ngcontent-%COMP%]{font-size:.73rem;color:var(--color-text-secondary);display:flex;align-items:center;gap:4px}.session-list-time[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.session-list-stats[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-end;gap:4px;flex-shrink:0}.player-count[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-secondary);font-weight:500;display:flex;align-items:center;gap:4px}.player-count[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-accent)}.pending-badge[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning);font-size:.65rem;padding:2px 7px;border-radius:10px;font-weight:600;white-space:nowrap;display:flex;align-items:center;gap:3px}.pending-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.65rem}.no-sessions-msg[_ngcontent-%COMP%]{text-align:center;padding:40px 16px;color:var(--color-text-muted)}.no-sessions-msg[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2.5rem;display:block;margin-bottom:10px;opacity:.3}.no-sessions-msg[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.85rem;margin:0}.session-date-filter[_ngcontent-%COMP%]{display:flex;gap:6px;padding:8px 12px;border-bottom:1px solid var(--color-border);align-items:center}.session-date-filter[_ngcontent-%COMP%] .form-control-sm[_ngcontent-%COMP%]{font-size:.72rem;padding:4px 8px;border:1px solid var(--color-border);border-radius:6px;background:var(--color-background-card);color:var(--color-text);flex:1;min-width:0}.btn-clear-sm[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:2px;font-size:.85rem;display:flex;align-items:center;flex-shrink:0}.btn-clear-sm[_ngcontent-%COMP%]:hover{color:var(--color-danger)}.session-list-court[_ngcontent-%COMP%]{font-size:.68rem;color:var(--color-text-muted);display:flex;align-items:center;gap:3px}.session-list-court[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.65rem}.session-pagination[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:12px;padding:8px 12px;border-top:1px solid var(--color-border)}.btn-page[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:6px;color:var(--color-text);cursor:pointer;padding:4px 10px;font-size:.8rem;display:flex;align-items:center;transition:all .15s}.btn-page[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-bg-subtle);border-color:var(--color-accent);color:var(--color-accent)}.page-info[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);font-weight:500}.booking-detail-panel[_ngcontent-%COMP%]{background:var(--color-background);
104display:flex;flex-direction:column;overflow:hidden}.booking-detail-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.no-selection[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:var(--color-text-muted);text-align:center;padding:40px}.no-selection[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:3rem;margin-bottom:16px;opacity:.25}.no-selection[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.9rem;margin:0;max-width:240px;line-height:1.5}.no-bookings[_ngcontent-%COMP%]{text-align:center;padding:40px 16px;color:var(--color-text-muted)}.no-bookings[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;display:block;margin-bottom:10px;opacity:.3}.no-bookings[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.85rem;margin:0}.booking-panel-header[_ngcontent-%COMP%]{padding:16px 20px;background:var(--color-surface);border-bottom:1px solid var(--color-border)}.booking-panel-top-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;margin-bottom:12px;flex-wrap:wrap}.booking-panel-title[_ngcontent-%COMP%]{margin-bottom:0}.booking-panel-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:700;color:var(--color-text)}.booking-panel-subtitle[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary);margin-top:2px;display:block}.booking-stats-row[_ngcontent-%COMP%]{display:flex;gap:8px;flex-wrap:wrap}.stat-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;padding:4px 10px;border-radius:20px;font-size:.75rem}.stat-chip[_ngcontent-%COMP%] .stat-number[_ngcontent-%COMP%]{font-weight:700}.stat-chip[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%]{font-weight:400;opacity:.85}.stat-chip.stat-total[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text)}.stat-chip.stat-verified[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);color:var(--color-success)}.stat-chip.stat-pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-subtle);color:var(--color-warning)}.stat-chip.stat-waiting[_ngcontent-%COMP%]{background:var(--color-info-bg-subtle);color:var(--color-info)}.booking-filters[_ngcontent-%COMP%]{display:flex;gap:8px;padding:10px 20px;border-bottom:1px solid var(--color-border);background:var(--color-surface)}.filter-input-wrapper[_ngcontent-%COMP%]{position:relative;flex:1}.filter-input-wrapper[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{position:absolute;left:10px;top:50%;transform:translateY(-50%);color:var(--color-text-muted);font-size:.85rem}.filter-input-wrapper[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{padding-left:32px}.booking-filters[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{background:var(--color-background);border-color:var(--color-border);color:var(--color-text)}.booking-filters[_ngcontent-%COMP%] select.form-control[_ngcontent-%COMP%]{max-width:200px}.bookings-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;overflow-x:hidden;padding:16px 20px;display:flex;flex-direction:column;gap:12px;min-height:0}.booking-card[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;overflow:visible;transition:box-shadow .2s ease;display:flex;flex-direction:column}.booking-card[_ngcontent-%COMP%]:hover{box-shadow:var(--shadow-sm)}.booking-card.status-pending-verify[_ngcontent-%COMP%]{border-left:3px solid var(--color-warning)}.booking-card.status-verified[_ngcontent-%COMP%]{border-left:3px solid var(--color-success)}.booking-card.status-pending-receipt[_ngcontent-%COMP%]{border-left:3px solid var(--color-info)}.booking-card.status-declined[_ngcontent-%COMP%]{border-left:3px solid var(--color-danger)}.booking-card.status-cancelled[_ngcontent-%COMP%], .booking-card.status-expired[_ngcontent-%COMP%]{border-left:3px solid var(--color-text-muted);opacity:.65}.booking-card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--color-border-light);border-radius:12px 12px 0 0;background:var(--color-surface)}.booker-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}
104.booker-avatar[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.85rem;flex-shrink:0}.booker-name[_ngcontent-%COMP%]{font-weight:600;font-size:.9rem;color:var(--color-text);display:block}.booker-username[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted);display:block}.booking-status-tag[_ngcontent-%COMP%]{padding:4px 10px;border-radius:20px;font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.3px;white-space:nowrap}.booking-status-tag.status-pending-receipt[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info)}.booking-status-tag.status-pending-verify[_ngcontent-%COMP%]{background:var(--color-warning-bg-light);color:var(--color-warning)}.booking-status-tag.status-verified[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success)}.booking-status-tag.status-declined[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger)}.booking-status-tag.status-cancelled[_ngcontent-%COMP%], .booking-status-tag.status-expired[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted)}.booking-card-body[_ngcontent-%COMP%]{padding:12px 16px;flex:1;min-height:0}.booking-info-grid[_ngcontent-%COMP%]{display:flex;gap:16px;margin-bottom:10px;flex-wrap:wrap}.info-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.info-label[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px;font-weight:500;display:flex;align-items:center;gap:4px}.info-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.72rem}.info-value[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text);font-weight:600}.player-names-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:5px;margin-top:8px}.player-scan-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:5px 10px;border-radius:8px;font-size:.75rem;font-weight:500;border:1px solid var(--color-border-light);background:var(--color-surface-hover);flex-wrap:wrap}.player-scan-row.scan-ready[_ngcontent-%COMP%]{border-color:var(--color-border);color:var(--color-text-secondary)}.player-scan-row.scan-playing[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-bg-subtle);color:var(--color-accent)}.player-scan-row.scan-played[_ngcontent-%COMP%]{border-color:var(--color-success, #22c55e);background:color-mix(in srgb,var(--color-success, #22c55e) 10%,transparent);color:var(--color-success, #22c55e)}.player-scan-row.scan-no-show[_ngcontent-%COMP%]{border-color:var(--color-danger);background:var(--color-danger-bg-subtle);color:var(--color-danger)}.player-scan-name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--color-text)}.player-scan-status[_ngcontent-%COMP%]{font-size:.7rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;opacity:.85}.player-scan-time[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;font-size:.7rem;color:var(--color-text-muted);font-weight:400}.player-scan-by[_ngcontent-%COMP%]{opacity:.8}.player-name-tag[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-secondary);padding:4px 10px;border-radius:20px;font-size:.75rem;font-weight:500;border:1px solid var(--color-border-light);display:inline-flex;align-items:center;gap:4px}.player-name-tag[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted)}.booking-card-actions[_ngcontent-%COMP%]{padding:10px 16px;border-top:1px solid var(--color-border-light);display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap;align-items:center;background:var(--color-surface);border-radius:0 0 12px 12px;min-height:50px}.btn-sm[_ngcontent-%COMP%]{padding:6px 14px;border:none;border-radius:8px;font-size:.8rem;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .2s ease}.btn-sm[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.85rem}.btn-verify[_ngcontent-%COMP%]{background:var(--color-info-bg-light);color:var(--color-info);border:1px solid var(--color-info-bg-medium)}.btn-verify[_ngcontent-%COMP%]:hover{background:var(--color-info-bg-medium)}.btn-approve[_ngcontent-%COMP%]{background:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success-bg-medium)}.btn-approve[_ngcontent-%COMP%]:hover{background:var(--color-success-bg-medium)}.btn-decline[_ngcontent-%COMP%]{background:var(--color-danger-bg-light);color:var(--color-danger);border:1px solid var(--color-danger-bg-medium)}.btn-decline[_ngcontent-%COMP%]:hover{background:var(--color-danger-bg-medium)}.verified-tag[_ngcontent-%COMP%], .waiting-tag[_ngcontent-%COMP%], .cancelled-tag[_ngcontent-%COMP%], .expired-tag[_ngcontent-%COMP%], .declined-tag[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:.8rem;font-weight:500;padding:6px 12px;border-radius:8px}.verified-container[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;width:100%;justify-content:space-between}.verified-tag[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);color:var(--color-success)}.btn-cancel-booking[_ngcontent-%COMP%]{background:var(--color-warning-bg-light, #fff4e5);color:var(--color-warning-dark, #b76e00);border:1px solid var(--color-warning-bg-medium, #ffe5b3);padding:6px 12px;border-radius:6px;font-size:.75rem;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:4px;transition:all .2s ease}.btn-cancel-booking[_ngcontent-%COMP%]:hover{background:var(--color-warning-bg-medium, #ffe5b3);transform:translateY(-1px)}.waiting-tag[_ngcontent-%COMP%]{background:var(--color-info-bg-subtle);color:var(--color-info)}.cancelled-tag[_ngcontent-%COMP%], .expired-tag[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted)}.declined-tag[_ngcontent-%COMP%]{background:var(--color-danger-bg-subtle);color:var(--color-danger)}.no-receipt-note[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted);display:flex;align-items:center;gap:.3rem}.receipt-modal[_ngcontent-%COMP%]{max-width:520px}.receipt-info[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-radius:10px;padding:14px 16px;margin-bottom:20px}.receipt-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:5px 0;font-size:.85rem;color:var(--color-text-secondary)}.receipt-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text)}.receipt-image-area[_ngcontent-%COMP%]{border:2px dashed var(--color-border);border-radius:12px;padding:32px 20px;text-align:center;margin-bottom:16px;background:var(--color-background)}.receipt-image-container[_ngcontent-%COMP%]{max-width:100%;margin-bottom:16px;border:1px solid var(--color-border);border-radius:8px;overflow:hidden;background:#fff}.receipt-image-container[_ngcontent-%COMP%]:last-child{margin-bottom:0}.receipt-image-header[_ngcontent-%COMP%]{background:var(--color-surface);padding:8px 12px;border-bottom:1px solid var(--color-border);font-size:.85rem;font-weight:600;color:var(--color-text-secondary);display:flex;align-items:center;justify-content:space-between}
104.receipt-zoom-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.25rem}.zoom-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;background:transparent;border:1px solid var(--color-border);border-radius:6px;color:var(--color-text-secondary);cursor:pointer;font-size:.8rem;transition:background .15s,color .15s}.zoom-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);color:var(--color-text)}.zoom-btn[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:not-allowed}.zoom-btn.zoom-reset[_ngcontent-%COMP%]{border-color:transparent}.zoom-level[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text-secondary);min-width:38px;text-align:center}.zoomable-image-wrapper[_ngcontent-%COMP%]{position:relative;background:var(--color-surface);overflow:hidden}.zoomable-image-wrapper.zoomed[_ngcontent-%COMP%]{overflow:auto;cursor:grab;-webkit-user-select:none;user-select:none}.receipt-image[_ngcontent-%COMP%]{width:100%;max-height:500px;object-fit:contain;display:block;transition:transform .2s ease}.receipt-placeholder[_ngcontent-%COMP%]{color:var(--color-text-muted)}.receipt-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:3rem;display:block;margin-bottom:8px;opacity:.4}.receipt-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:4px 0 0;font-size:.85rem}.btn-verify-fill[_ngcontent-%COMP%]{background:var(--color-success);color:#fff;border:none;padding:8px 20px;border-radius:8px;font-size:.85rem;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .2s ease}.btn-verify-fill[_ngcontent-%COMP%]:hover{opacity:.85;box-shadow:0 2px 8px var(--color-success-shadow)}.btn-decline-outline[_ngcontent-%COMP%]{background:transparent;color:var(--color-danger);border:1px solid var(--color-danger);padding:8px 20px;border-radius:8px;font-size:.85rem;font-weight:500;cursor:pointer;display:flex;align-items:center;gap:6px;transition:all .2s ease}.btn-decline-outline[_ngcontent-%COMP%]:hover{background:var(--color-danger-bg-subtle)}.decline-modal[_ngcontent-%COMP%]{max-width:420px}.decline-modal[_ngcontent-%COMP%] .modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .text-danger[_ngcontent-%COMP%]{color:var(--color-danger)}@media (max-width: 900px){.bookings-layout[_ngcontent-%COMP%]{grid-template-columns:1fr;height:auto}.session-list-panel[_ngcontent-%COMP%]{border-right:none;border-bottom:1px solid var(--color-border);max-height:250px}.booking-detail-panel[_ngcontent-%COMP%]{min-height:400px}.booking-stats-row[_ngcontent-%COMP%]{gap:6px}.booking-filters[_ngcontent-%COMP%]{flex-direction:column}.booking-filters[_ngcontent-%COMP%] select.form-control[_ngcontent-%COMP%]{max-width:none}}@media (max-width: 480px){.tab-btn[_ngcontent-%COMP%]{padding:10px 16px;font-size:.85rem}.booking-card-header[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:8px}.booking-info-grid[_ngcontent-%COMP%]{flex-direction:column;gap:6px}.booking-card-actions[_ngcontent-%COMP%]{flex-direction:column;min-height:auto}.booking-card-actions[_ngcontent-%COMP%] .btn-sm[_ngcontent-%COMP%]{justify-content:center;width:100%}.verified-container[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:8px}.btn-cancel-booking[_ngcontent-%COMP%]{width:100%}.booking-panel-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:.95rem}.stat-chip[_ngcontent-%COMP%]{font-size:.7rem;padding:3px 8px}}@media (max-width: 900px){.booking-card[_ngcontent-%COMP%]{overflow:visible}.booking-card-actions[_ngcontent-%COMP%]{padding:12px 16px}.verified-container[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}}.bulk-actions-bar[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;background:var(--color-background);border:1px solid var(--color-border);border-radius:8px;margin-bottom:16px}.bulk-actions-left[_ngcontent-%COMP%], .bulk-actions-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.btn-bulk[_ngcontent-%COMP%]{padding:8px 16px;border:1px solid var(--color-border);background:var(--color-card-background);color:var(--color-text);border-radius:6px;cursor:pointer;font-size:.875rem;font-weight:500;display:flex;align-items:center;gap:6px;transition:all .2s ease}.btn-bulk[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-hover);border-color:var(--color-primary)}.btn-bulk[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}
104.btn-bulk-delete[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;border-color:var(--color-danger)}.btn-bulk-delete[_ngcontent-%COMP%]:hover:not(:disabled){background:#c53030;border-color:#c53030}.selection-count[_ngcontent-%COMP%]{padding:4px 12px;background:var(--color-primary-light);color:var(--color-primary);border-radius:12px;font-size:.75rem;font-weight:600}.checkbox-col[_ngcontent-%COMP%]{width:50px;text-align:center}.checkbox-col[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:18px;height:18px;cursor:pointer}.sessions-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr.selected-row[_ngcontent-%COMP%]{background:var(--color-primary-light);border-left:3px solid var(--color-primary)}.spinner-small[_ngcontent-%COMP%]{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.3);border-top-color:#fff;border-radius:50%;animation:_ngcontent-%COMP%_spin .8s linear infinite}.confirm-modal-overlay[_ngcontent-%COMP%]{z-index:2000}.confirm-modal-content[_ngcontent-%COMP%]{max-width:500px;border-radius:12px;box-shadow:0 10px 40px #0003}.confirm-modal-content[_ngcontent-%COMP%] .modal-header[_ngcontent-%COMP%]{padding:20px 24px;border-bottom:1px solid var(--color-border);background:var(--color-background);border-radius:12px 12px 0 0}.confirm-modal-content[_ngcontent-%COMP%] .modal-header.danger-header[_ngcontent-%COMP%]{background:#f443360d;border-bottom-color:#f4433633}.confirm-modal-content[_ngcontent-%COMP%] .modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.confirm-modal-content[_ngcontent-%COMP%] .modal-header.danger-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-danger)}.confirm-modal-content[_ngcontent-%COMP%] .modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.5rem}.confirm-modal-content[_ngcontent-%COMP%] .modal-body[_ngcontent-%COMP%]{padding:24px}.confirm-message[_ngcontent-%COMP%]{margin:0;font-size:.95rem;line-height:1.6;color:var(--color-text-muted)}.confirm-modal-content[_ngcontent-%COMP%] .modal-footer[_ngcontent-%COMP%]{padding:16px 24px;border-top:1px solid var(--color-border);background:var(--color-background);display:flex;justify-content:flex-end;gap:12px;border-radius:0 0 12px 12px}.btn-primary[_ngcontent-%COMP%]{background:var(--color-primary);color:#fff;border:none;padding:10px 20px;border-radius:8px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease}.btn-primary[_ngcontent-%COMP%]:hover{background:#2980b9;box-shadow:0 2px 8px #3498db4d}.btn-danger[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;border:none;padding:10px 20px;border-radius:8px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease}.btn-danger[_ngcontent-%COMP%]:hover{background:#c53030;box-shadow:0 2px 8px #f443364d}.btn-secondary[_ngcontent-%COMP%]{background:transparent;color:var(--color-text-muted);border:1px solid var(--color-border);padding:10px 20px;border-radius:8px;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s ease}.btn-secondary[_ngcontent-%COMP%]:hover{background:var(--color-hover);border-color:var(--color-text-muted)}@media (max-width: 768px){.bulk-actions-bar[_ngcontent-%COMP%]{flex-direction:column;gap:12px;align-items:stretch}.bulk-actions-left[_ngcontent-%COMP%], .bulk-actions-right[_ngcontent-%COMP%]{width:100%;justify-content:center}.btn-bulk[_ngcontent-%COMP%]{flex:1;justify-content:center}}.btn-scan-qr[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.4rem;padding:.5rem 1rem;background:var(--color-accent, #6366f1);color:#fff;border:none;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;transition:background .2s;white-space:nowrap}.btn-scan-qr[_ngcontent-%COMP%]:hover:not(:disabled){background:color-mix(in srgb,var(--color-accent, #6366f1) 85%,black)}.btn-scan-qr[_ngcontent-%COMP%]:disabled{background:var(--color-border, #374151);color:var(--color-text-muted, #9ca3af);cursor:not-allowed;opacity:.6}.scan-modal[_ngcontent-%COMP%]{max-width:460px;width:95%}.scan-modal-body[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:1rem;min-height:280px}.scan-mode-tabs[_ngcontent-%COMP%]{display:flex;gap:.5rem;width:100%}.scan-tab-btn[_ngcontent-%COMP%]{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;padding:.5rem 1rem;font-size:.85rem;font-weight:500;border-radius:8px;border:1px solid var(--color-border-light);background:var(--color-surface-hover);color:var(--color-text-secondary);cursor:pointer;transition:background .2s,color .2s,border-color .2s}.scan-tab-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.scan-tab-btn[_ngcontent-%COMP%]:not(.active):hover{background:var(--color-border);color:var(--color-text)}.qr-upload-area[_ngcontent-%COMP%]{width:100%}.qr-upload-area[_ngcontent-%COMP%] input[type=file][_ngcontent-%COMP%]{display:none}.qr-upload-label[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.5rem;width:100%;min-height:180px;border:2px dashed var(--color-border);border-radius:12px;background:var(--color-surface-hover);color:var(--color-text-secondary);cursor:pointer;transition:border-color .2s,background .2s;padding:1.5rem;box-sizing:border-box}.qr-upload-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;color:var(--color-accent)}.qr-upload-label[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.9rem;font-weight:500;color:var(--color-text)}.qr-upload-label[_ngcontent-%COMP%] small[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted)}.qr-upload-label[_ngcontent-%COMP%]:hover:not(.processing){border-color:var(--color-accent);background:var(--color-accent-bg-subtle)}.qr-upload-label.processing[_ngcontent-%COMP%]{cursor:default;opacity:.7}.qr-reader-container[_ngcontent-%COMP%]{width:100%;border-radius:12px;overflow:hidden}.qr-reader-container.hidden[_ngcontent-%COMP%]{visibility:hidden;height:0!important;min-height:0!important;overflow:hidden;padding:0;margin:0}.scan-result[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.6rem;text-align:center;width:100%;padding:1rem 0}.scan-result-icon[_ngcontent-%COMP%]{font-size:3rem;line-height:1}.scan-success[_ngcontent-%COMP%] .scan-result-icon[_ngcontent-%COMP%]{color:#10b981}.scan-error[_ngcontent-%COMP%] .scan-result-icon[_ngcontent-%COMP%]{color:#ef4444}
104.scan-result[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:1.1rem;font-weight:700;color:var(--color-text)}.scan-player-name[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:700;color:var(--color-text);margin:0}.scan-details[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.3rem;font-size:.875rem;color:var(--color-text-muted);background:var(--color-background, #f9fafb);border-radius:8px;padding:.75rem 1rem;width:100%}.scan-details[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.4rem}.now-playing-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.35rem;background:color-mix(in srgb,#10b981 15%,transparent);color:#10b981;font-weight:700;font-size:.875rem;padding:.35rem .9rem;border-radius:20px;margin-top:.25rem}.scan-error[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.9rem;margin:0}.scan-modal-footer[_ngcontent-%COMP%]{display:flex;gap:.75rem;justify-content:flex-end}.discounts-tab[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:28px}.discount-types-section[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;border:1px solid var(--color-border);overflow:hidden}.discount-section-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;background:var(--color-surface-hover);border-bottom:1px solid var(--color-border);flex-wrap:wrap;gap:10px}.discount-section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;color:var(--color-text)}.discount-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.1rem}.btn-add-discount[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:8px 16px;background:var(--color-accent);color:#fff;border:none;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;transition:background .2s,box-shadow .2s}.btn-add-discount[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);box-shadow:0 4px 12px var(--color-accent-shadow)}.discount-loading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:24px 20px;color:var(--color-text-secondary);font-size:.9rem}.discount-loading[_ngcontent-%COMP%] .spinner[_ngcontent-%COMP%]{width:24px;height:24px;margin:0}.discount-empty-state[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:40px 20px;color:var(--color-text-muted);text-align:center}.discount-empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-border)}.discount-empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:.95rem;color:var(--color-text-secondary)}.discount-types-grid[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:0}.discount-type-card[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--color-border);gap:16px;transition:background .2s}.discount-type-card[_ngcontent-%COMP%]:last-child{border-bottom:none}.discount-type-card[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.discount-type-card.inactive[_ngcontent-%COMP%]{opacity:.6}.discount-type-card-left[_ngcontent-%COMP%]{display:flex;align-items:center;gap:14px;flex:1;min-width:0}.discount-type-icon[_ngcontent-%COMP%]{width:42px;height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:1.2rem;flex-shrink:0}.discount-type-icon.icon-active[_ngcontent-%COMP%]{background:var(--color-accent-bg-light);color:var(--color-accent);border:1px solid var(--color-accent-bg-medium)}.discount-type-icon.icon-inactive[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted);border:1px solid var(--color-border)}.discount-type-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px;min-width:0}.discount-type-name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.discount-type-desc[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.discount-type-value[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin-top:2px}.discount-badge-pill[_ngcontent-%COMP%]{display:inline-block;padding:2px 10px;background:var(--color-accent-bg-medium);color:var(--color-accent);border-radius:20px;font-size:.78rem;font-weight:700;border:1px solid var(--color-accent-bg-medium)}.discount-mode-label[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted)}.discount-vat-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;border-radius:20px;font-size:.72rem;font-weight:600}.discount-vat-badge.vat-inclusive[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted);border:1px solid var(--color-border)}.discount-vat-badge.vat-exclusive[_ngcontent-%COMP%]{background:#eab3081f;color:#b45309;border:1px solid rgba(234,179,8,.3)}.vat-treatment-options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px}.vat-option-label[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;border-radius:8px;border:2px solid var(--color-border);background:var(--color-surface-hover);cursor:pointer;transition:all .2s}.vat-option-label.selected[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent-bg-subtle, rgba(99, 102, 241, .06))}.vat-option-label[_ngcontent-%COMP%] input[type=radio][_ngcontent-%COMP%]{margin-top:3px;flex-shrink:0;accent-color:var(--color-accent)}.vat-option-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.vat-option-title[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text)}.vat-option-desc[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted);line-height:1.4}.vat-rate-input-wrap[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.vat-rate-input[_ngcontent-%COMP%]{max-width:120px}.vat-rate-suffix[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text-secondary)}.vat-rate-hint[_ngcontent-%COMP%]{margin:6px 0 0;font-size:.78rem;color:var(--color-text-muted);display:flex;align-items:flex-start;gap:5px}.vat-rate-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{flex-shrink:0;margin-top:2px}.discount-type-card-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;flex-shrink:0}.discount-status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;border-radius:20px;font-size:.78rem;font-weight:600}.discount-status-badge.status-active[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);color:var(--color-success);border:1px solid var(--color-success-bg-medium)}.discount-status-badge.status-inactive[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text-muted);border:1px solid var(--color-border)}.discount-type-actions[_ngcontent-%COMP%]{display:flex;gap:6px}
104.pending-discounts-section[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;border:1px solid var(--color-border);overflow:hidden}.pending-discounts-header[_ngcontent-%COMP%]{padding:14px 20px;background:var(--color-surface-hover);border-bottom:1px solid var(--color-border)}.pending-discounts-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:1rem;font-weight:700;color:var(--color-text)}.pending-discounts-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-warning);font-size:1.05rem}.pending-count-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;background:var(--color-danger);color:#fff;border-radius:10px;font-size:.72rem;font-weight:700}.discount-pending-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:0}.discount-pending-card[_ngcontent-%COMP%]{padding:16px 20px;border-bottom:1px solid var(--color-border);display:flex;flex-direction:column;gap:12px;transition:background .2s}.discount-pending-card[_ngcontent-%COMP%]:last-child{border-bottom:none}.discount-pending-card[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.pending-card-top[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}.pending-player-info[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.pending-avatar[_ngcontent-%COMP%]{width:38px;height:38px;border-radius:50%;background:linear-gradient(135deg,var(--color-accent),var(--color-accent-dark));color:#fff;display:flex;align-items:center;justify-content:center;font-size:1rem;font-weight:700;flex-shrink:0}.pending-player-name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.pending-booking-id[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted);font-family:monospace;margin-top:1px}.pending-discount-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:4px 12px;background:var(--color-warning-bg-subtle);color:var(--color-warning);border:1px solid var(--color-warning-bg-medium);border-radius:20px;font-size:.8rem;font-weight:600}.pending-card-amounts[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--color-background-elevated, var(--color-surface-hover));border-radius:8px;border:1px solid var(--color-border);flex-wrap:wrap}.amount-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.amount-label[_ngcontent-%COMP%]{font-size:.7rem;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);font-weight:600}.amount-value[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.amount-value.discounted[_ngcontent-%COMP%]{color:var(--color-accent)}.amount-value.savings[_ngcontent-%COMP%]{color:var(--color-success)}.amount-arrow[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.85rem;flex-shrink:0}.pending-card-actions[_ngcontent-%COMP%]{display:flex;gap:8px;flex-wrap:wrap}.id-proof-player-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;margin-bottom:16px}.id-proof-player-name[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text)}.id-proof-booking-id[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted);font-family:monospace}.id-proof-detail-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:16px}.id-proof-detail-item[_ngcontent-%COMP%]{background:var(--color-surface-hover);border-radius:8px;padding:10px 14px;border:1px solid var(--color-border);display:flex;flex-direction:column;gap:3px}.id-proof-label[_ngcontent-%COMP%]{font-size:.7rem;text-transform:uppercase;letter-spacing:.4px;color:var(--color-text-muted);font-weight:600}.id-proof-value[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.id-proof-value.accent[_ngcontent-%COMP%], .id-proof-value.success[_ngcontent-%COMP%]{color:var(--color-accent)}.id-proof-value.savings[_ngcontent-%COMP%]{color:var(--color-success)}.id-proof-drive-notice[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;padding:12px 14px;background:var(--color-info-bg-subtle);border:1px solid var(--color-info-bg-medium);border-radius:8px;font-size:.85rem;color:var(--color-info)}.id-proof-drive-notice[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.1rem;flex-shrink:0;margin-top:1px}.id-proof-drive-notice[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.id-proof-drive-notice[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted)}.id-proof-images-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.id-proof-images-label[_ngcontent-%COMP%]{font-size:.82rem;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em;display:flex;align-items:center;gap:6px}.id-proof-loading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:16px 0;font-size:.85rem;color:var(--color-text-muted)}.id-proof-empty[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:14px;background:var(--color-bg-subtle);border-radius:8px;font-size:.85rem;color:var(--color-text-muted)}.id-proof-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.2rem}.id-proof-image-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.id-proof-image-wrap[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.id-proof-image-num[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted)}.id-proof-image[_ngcontent-%COMP%]{width:100%;max-height:400px;object-fit:contain;border-radius:8px;border:1px solid var(--color-border);background:var(--color-bg-subtle);display:block;transition:transform .2s ease}
104.reject-player-context[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px 14px;background:var(--color-warning-bg-subtle);border:1px solid var(--color-warning-bg-medium);border-radius:8px}.badge-discount-pending[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--color-warning-bg-subtle);color:var(--color-warning);border:1px solid var(--color-warning-bg-medium);border-radius:10px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.badge-discount-approved[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:2px 8px;background:var(--color-success-bg-subtle);color:var(--color-success);border:1px solid var(--color-success-bg-medium);border-radius:10px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.3px}.amount-original[_ngcontent-%COMP%]{font-size:.78rem;text-decoration:line-through;color:var(--color-text-muted);margin-right:.3rem}.amount-discounted[_ngcontent-%COMP%]{font-weight:700;color:var(--color-success)}.payment-method-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.3rem;font-size:.78rem;font-weight:600;padding:.15rem .5rem;border-radius:5px}.payment-method-badge.badge-cash[_ngcontent-%COMP%]{background:#22c55e1f;color:#16a34a}.payment-method-badge.badge-online[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);color:var(--color-accent)}.admin-discount-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.35rem .65rem;border-radius:6px;font-size:.78rem;margin:6px 0 4px;flex-wrap:wrap}.admin-discount-row.admin-discount-approved[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);border:1px solid var(--color-success-bg-medium);color:var(--color-success)}.admin-discount-row.admin-discount-pending[_ngcontent-%COMP%]{background:var(--color-warning-bg-subtle);border:1px solid var(--color-warning-bg-medium);color:var(--color-warning)}.admin-discount-type[_ngcontent-%COMP%]{font-weight:600}.admin-discount-savings[_ngcontent-%COMP%]{font-weight:700}.admin-discount-status[_ngcontent-%COMP%]{margin-left:auto;font-size:.72rem;opacity:.85;text-transform:uppercase;letter-spacing:.3px}.admin-credit-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;padding:.35rem .65rem;border-radius:6px;font-size:.78rem;margin:6px 0 4px;flex-wrap:wrap;background:#eab3081a;border:1px solid rgba(234,179,8,.3);color:#a16207}[_ngcontent-%COMP%]:root[data-theme=dark] .admin-credit-row[_ngcontent-%COMP%]{color:#fbbf24}.admin-credit-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#ca8a04}[_ngcontent-%COMP%]:root[data-theme=dark] .admin-credit-row[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:#fbbf24}.admin-credit-type[_ngcontent-%COMP%]{font-weight:600}.admin-credit-savings[_ngcontent-%COMP%]{font-weight:700}.admin-credit-status[_ngcontent-%COMP%]{margin-left:auto;font-size:.72rem;opacity:.85;text-transform:uppercase;letter-spacing:.3px}.credit-history-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:3px 9px;border-radius:999px;border:1px solid rgba(202,138,4,.5);background:#eab30826;color:#a16207;font-size:.72rem;font-weight:600;cursor:pointer;transition:background .15s ease,transform .15s ease}.credit-history-btn[_ngcontent-%COMP%]:hover{background:#eab30847;transform:translateY(-1px)}[_ngcontent-%COMP%]:root[data-theme=dark] .credit-history-btn[_ngcontent-%COMP%]{color:#fbbf24;border-color:#fbbf2466}.credit-history-modal[_ngcontent-%COMP%]{max-width:640px;width:100%}.credit-history-intro[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 1rem;font-size:.88rem;color:var(--color-text-secondary, #6b7280);line-height:1.5}.credit-history-loading[_ngcontent-%COMP%], .credit-history-error[_ngcontent-%COMP%], .credit-history-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:2rem 1rem;text-align:center;color:var(--color-text-secondary, #6b7280)}.credit-history-error[_ngcontent-%COMP%]{color:#b91c1c}.credit-history-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.8rem;opacity:.5}.credit-history-loading[_ngcontent-%COMP%] .spin[_ngcontent-%COMP%]{display:inline-block;animation:_ngcontent-%COMP%_credit-spin .9s linear infinite}@keyframes _ngcontent-%COMP%_credit-spin{to{transform:rotate(360deg)}}.credit-history-summary[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;font-weight:600;font-size:.85rem;color:#a16207;margin-bottom:.75rem}[_ngcontent-%COMP%]:root[data-theme=dark] .credit-history-summary[_ngcontent-%COMP%]{color:#fbbf24}.credit-history-card[_ngcontent-%COMP%]{border:1px solid var(--color-border, #e5e7eb);border-radius:10px;padding:.85rem 1rem;margin-bottom:.85rem;background:var(--color-surface, #fff)}.credit-history-card-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.65rem}.credit-index[_ngcontent-%COMP%]{font-weight:700;font-size:.85rem}
104.credit-status-badge[_ngcontent-%COMP%]{font-size:.68rem;font-weight:700;text-transform:uppercase;letter-spacing:.4px;padding:2px 8px;border-radius:999px}.credit-status-badge.badge-available[_ngcontent-%COMP%]{background:#10b98126;color:#047857}.credit-status-badge.badge-used[_ngcontent-%COMP%]{background:#eab3082e;color:#a16207}.credit-status-badge.badge-expired[_ngcontent-%COMP%]{background:#6b72802e;color:#4b5563}.credit-detail-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.6rem 1rem}.credit-detail[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:2px}.credit-detail-label[_ngcontent-%COMP%]{font-size:.7rem;text-transform:uppercase;letter-spacing:.3px;color:var(--color-text-secondary, #9ca3af);display:flex;align-items:center;gap:4px}.credit-detail-value[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600}.credit-detail-value.mono[_ngcontent-%COMP%]{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.72rem;font-weight:500;word-break:break-all}.credit-note[_ngcontent-%COMP%]{margin-top:.65rem;padding:.5rem .65rem;border-radius:8px;background:var(--color-surface-hover, #f9fafb);font-size:.8rem;color:var(--color-text-secondary, #6b7280);line-height:1.4}.credit-receipt-section[_ngcontent-%COMP%]{margin-top:.75rem;padding-top:.75rem;border-top:1px dashed var(--color-border, #e5e7eb)}.credit-receipt-title[_ngcontent-%COMP%]{font-size:.78rem;font-weight:600;margin-bottom:.5rem;display:flex;align-items:center;gap:5px}.credit-receipt-images[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.6rem}.credit-receipt-thumb[_ngcontent-%COMP%]{padding:0;border:none;background:none;cursor:zoom-in;line-height:0;border-radius:8px}.credit-receipt-thumb[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:110px;height:110px;object-fit:cover;border-radius:8px;border:1px solid var(--color-border, #e5e7eb);display:block;transition:transform .15s ease}.credit-receipt-thumb[_ngcontent-%COMP%]:hover img[_ngcontent-%COMP%]{transform:scale(1.03)}.credit-receipt-preview-overlay[_ngcontent-%COMP%]{z-index:1100}.credit-receipt-none[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-secondary, #9ca3af);font-style:italic;display:flex;align-items:center;gap:5px}.discount-active-toggle[_ngcontent-%COMP%]{margin-top:4px}.discount-active-toggle[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:8px;border:2px solid var(--color-border);background:var(--color-surface-hover);cursor:pointer;font-size:.875rem;font-weight:500;color:var(--color-text-secondary);transition:all .2s}.discount-active-toggle[_ngcontent-%COMP%] .checkbox-label.checked[_ngcontent-%COMP%]{border-color:var(--color-success-bg-medium);background:var(--color-success-bg-subtle);color:var(--color-success)}.discount-active-toggle[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{display:none}.discount-active-toggle[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.1rem}@media (max-width: 900px){.discount-mode-label[_ngcontent-%COMP%], .discount-vat-badge[_ngcontent-%COMP%]{display:none}.discount-type-card[_ngcontent-%COMP%]{padding:12px 16px;gap:12px}.discount-section-header[_ngcontent-%COMP%], .pending-discounts-header[_ngcontent-%COMP%]{padding:12px 16px}.discount-pending-card[_ngcontent-%COMP%]{padding:14px 16px}}@media (max-width: 640px){.discount-type-card[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;padding:14px 16px;gap:12px}.discount-type-card-left[_ngcontent-%COMP%]{gap:12px}.discount-type-icon[_ngcontent-%COMP%]{width:38px;height:38px;font-size:1rem}.discount-type-card-right[_ngcontent-%COMP%]{flex-direction:row;justify-content:space-between;align-items:center;padding-top:10px;border-top:1px solid var(--color-border)}.discount-type-actions[_ngcontent-%COMP%]{gap:6px}.discount-type-actions[_ngcontent-%COMP%] .btn-sm[_ngcontent-%COMP%]{flex:1;justify-content:center;padding:8px 10px;min-height:38px;font-size:.82rem}.discount-section-header[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;gap:10px;padding:12px 16px}.btn-add-discount[_ngcontent-%COMP%]{width:100%;justify-content:center;padding:10px 16px}.discount-pending-card[_ngcontent-%COMP%]{padding:14px 16px}.pending-card-top[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:8px}.pending-discount-badge[_ngcontent-%COMP%]{align-self:flex-start}.pending-card-amounts[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px}.amount-arrow[_ngcontent-%COMP%]{display:none}.pending-card-actions[_ngcontent-%COMP%]{flex-direction:column}.pending-card-actions[_ngcontent-%COMP%] .btn-sm[_ngcontent-%COMP%]{width:100%;justify-content:center;padding:10px 14px;min-height:40px;font-size:.875rem}.id-proof-detail-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.discount-active-toggle[_ngcontent-%COMP%] .checkbox-label[_ngcontent-%COMP%]{font-size:.82rem}.discounts-tab[_ngcontent-%COMP%]{gap:20px}}
104.beneficiaries-section[_ngcontent-%COMP%]{border-radius:12px;border:1px solid var(--color-border);overflow:hidden;margin-bottom:20px;background:var(--color-surface)}.beneficiaries-section--verified[_ngcontent-%COMP%]{border-color:var(--color-success-bg-medium)}.beneficiaries-section--revoked[_ngcontent-%COMP%]{border-color:#ef444440}.beneficiaries-section-header[_ngcontent-%COMP%]{padding:16px 20px 12px;border-bottom:1px solid var(--color-border)}.beneficiaries-section--verified[_ngcontent-%COMP%] .beneficiaries-section-header[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);border-bottom-color:var(--color-success-bg-medium)}.beneficiaries-section--revoked[_ngcontent-%COMP%] .beneficiaries-section-header[_ngcontent-%COMP%]{background:#ef44440d;border-bottom-color:#ef444433}.beneficiaries-section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;font-size:.95rem;font-weight:700;color:var(--color-text);margin-bottom:4px}.beneficiaries-icon[_ngcontent-%COMP%]{font-size:1rem}.beneficiaries-icon--verified[_ngcontent-%COMP%]{color:var(--color-success)}
104.beneficiaries-icon--revoked[_ngcontent-%COMP%]{color:var(--color-danger)}.beneficiaries-count-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;border-radius:10px;font-size:.72rem;font-weight:700;color:#fff}.beneficiaries-count-badge--verified[_ngcontent-%COMP%]{background:var(--color-success)}.beneficiaries-count-badge--revoked[_ngcontent-%COMP%]{background:var(--color-danger)}.beneficiaries-section-hint[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted);margin:0}.beneficiaries-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr;gap:0}@media (min-width: 768px){.beneficiaries-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}}.beneficiary-card[_ngcontent-%COMP%]{display:flex;position:relative;overflow:hidden;cursor:pointer;border-bottom:1px solid var(--color-border);transition:background .18s}.beneficiary-card[_ngcontent-%COMP%]:last-child, .beneficiary-card[_ngcontent-%COMP%]:nth-last-child(-n+2):nth-child(odd):last-child{border-bottom:none}@media (min-width: 768px){.beneficiary-card[_ngcontent-%COMP%]:nth-last-child(-n+2){border-bottom:none}.beneficiary-card[_ngcontent-%COMP%]:nth-child(odd){border-right:1px solid var(--color-border)}}.beneficiary-card--verified[_ngcontent-%COMP%]:hover{background:var(--color-success-bg-subtle)}.beneficiary-card--revoked[_ngcontent-%COMP%]:hover{background:#ef44440a}.beneficiary-card-accent[_ngcontent-%COMP%]{width:4px;flex-shrink:0}.beneficiary-card-accent--verified[_ngcontent-%COMP%]{background:var(--color-success)}
104.beneficiary-card-accent--revoked[_ngcontent-%COMP%]{background:var(--color-danger)}.beneficiary-card-body[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:14px 16px;flex:1;min-width:0}.beneficiary-avatar[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1rem;font-weight:700;color:#fff;flex-shrink:0}.beneficiary-avatar--verified[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-success),color-mix(in srgb,var(--color-success) 70%,black));border:2px solid var(--color-success-bg-medium)}.beneficiary-avatar--revoked[_ngcontent-%COMP%]{background:linear-gradient(135deg,var(--color-danger, #ef4444),color-mix(in srgb,var(--color-danger, #ef4444) 70%,black));border:2px solid rgba(239,68,68,.3)}.beneficiary-info[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.beneficiary-name[_ngcontent-%COMP%]{font-size:.9rem;font-weight:700;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.beneficiary-username[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted)}.beneficiary-type-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;font-size:.75rem;font-weight:600;color:var(--color-accent)}.beneficiary-type-badge[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.68rem}.beneficiary-status-col[_ngcontent-%COMP%]{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:4px}.beneficiary-status-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;padding:3px 10px;border-radius:20px;font-size:.73rem;font-weight:700;white-space:nowrap}.beneficiary-status-pill--verified[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);color:var(--color-success);border:1px solid var(--color-success-bg-medium)}.beneficiary-status-pill--revoked[_ngcontent-%COMP%]{background:#ef444414;color:var(--color-danger);border:1px solid rgba(239,68,68,.25)}.beneficiary-date-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:flex-end;gap:1px}.beneficiary-date[_ngcontent-%COMP%]{font-size:.73rem;color:var(--color-text-muted);white-space:nowrap}.beneficiary-by[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted);font-style:italic;white-space:nowrap}.beneficiary-chevron[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);flex-shrink:0;margin-left:4px}.revoked-info-note[_ngcontent-%COMP%]{margin-top:14px;padding:10px 14px;background:#ef44440f;border:1px solid rgba(239,68,68,.2);border-radius:8px;font-size:.82rem;color:var(--color-text-muted);display:flex;align-items:center;gap:8px}.revoked-info-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger);flex-shrink:0}.verified-count-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;min-width:20px;height:20px;padding:0 6px;background:var(--color-success);color:#fff;border-radius:10px;font-size:.72rem;font-weight:700}@media (max-width: 640px){.beneficiary-status-col[_ngcontent-%COMP%]{display:none}}.revoke-confirm-modal[_ngcontent-%COMP%]{max-width:420px}.revoke-confirm-header[_ngcontent-%COMP%]{background:#ef44440f;border-bottom:2px solid rgba(239,68,68,.2)!important}.revoke-confirm-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-danger);display:flex;align-items:center;gap:8px}.revoke-confirm-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger)}.revoke-confirm-body[_ngcontent-%COMP%]{display:flex;align-items:center;gap:14px;padding:14px 0 16px;border-bottom:1px solid var(--color-border);margin-bottom:16px}.revoke-confirm-avatar[_ngcontent-%COMP%]{width:46px;height:46px;border-radius:50%;background:linear-gradient(135deg,var(--color-success),color-mix(in srgb,var(--color-success) 70%,black));border:2px solid var(--color-success-bg-medium);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.1rem;font-weight:700;flex-shrink:0}.revoke-confirm-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}
104.revoke-confirm-name[_ngcontent-%COMP%]{font-size:.95rem;font-weight:700;color:var(--color-text)}.revoke-confirm-type[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-accent);font-weight:600;display:flex;align-items:center;gap:4px}.revoke-confirm-message[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text);margin:0 0 12px;line-height:1.5}.revoke-confirm-note[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);margin:0;padding:10px 12px;background:var(--color-surface-alt, var(--color-bg));border:1px solid var(--color-border);border-radius:8px;display:flex;align-items:flex-start;gap:8px;line-height:1.5}.revoke-confirm-note[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{flex-shrink:0;margin-top:1px;color:var(--color-text-muted)}.refund-filter-bar[_ngcontent-%COMP%]{display:flex;gap:.5rem;margin-bottom:1.25rem;flex-wrap:wrap}.refund-filter-btn[_ngcontent-%COMP%]{padding:.4rem .9rem;border:1px solid var(--color-border);border-radius:20px;background:var(--color-background-card);color:var(--color-text);cursor:pointer;font-size:.85rem;transition:all .15s;display:flex;align-items:center;gap:.35rem}.refund-filter-btn[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.refund-filter-btn.active[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.badge-inline[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;background:#ffffff4d;color:inherit;border-radius:10px;padding:0 6px;font-size:.75rem;min-width:18px;height:18px}.refund-filter-btn[_ngcontent-%COMP%]:not(.active) .badge-inline[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.refund-table-wrapper[_ngcontent-%COMP%]{overflow-x:auto}.refund-destination-box[_ngcontent-%COMP%]{margin:.9rem 0;padding:.75rem .9rem;border:1px solid var(--color-border);border-radius:8px;background:var(--color-surface-hover)}.refund-destination-title[_ngcontent-%COMP%]{font-size:.82rem;font-weight:600;color:var(--color-text);margin:0 0 .5rem;display:flex;align-items:center;gap:.4rem}.refund-destination-row[_ngcontent-%COMP%]{display:flex;justify-content:space-between;gap:1rem;font-size:.84rem;padding:.2rem 0}.refund-destination-row[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary)}.refund-destination-row[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text);text-align:right;word-break:break-word}.refund-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.88rem}.refund-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:.6rem .75rem;text-align:left;background:var(--color-surface);color:var(--color-text-secondary);font-weight:600;border-bottom:1px solid var(--color-border);white-space:nowrap}.refund-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:.65rem .75rem;border-bottom:1px solid var(--color-border-light);vertical-align:middle}.refund-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.player-cell[_ngcontent-%COMP%], .session-cell[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.1rem}.amount-cell[_ngcontent-%COMP%]{font-weight:700;color:var(--color-accent);white-space:nowrap}.date-cell[_ngcontent-%COMP%]{white-space:nowrap;font-size:.83rem}.action-buttons-row[_ngcontent-%COMP%]{display:flex;gap:.4rem;flex-wrap:wrap;align-items:center}.decline-reason-snippet[_ngcontent-%COMP%]{font-size:.76rem;color:var(--color-text-muted);margin-top:.25rem;font-style:italic}.pagination-row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:1rem;padding:1rem 0}.btn-page[_ngcontent-%COMP%]{padding:.4rem .75rem;border:1px solid var(--color-border);border-radius:6px;background:var(--color-background-card);color:var(--color-text);cursor:pointer;transition:all .15s}.btn-page[_ngcontent-%COMP%]:disabled{opacity:.4;cursor:not-allowed}.btn-page[_ngcontent-%COMP%]:not(:disabled):hover{border-color:var(--color-accent);color:var(--color-accent)}.page-info[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary)}.badge-warning[_ngcontent-%COMP%]{background:#f59e0b;color:#fff}.no-bookings-placeholder[_ngcontent-%COMP%]{text-align:center;padding:3rem 1rem;color:var(--color-text-muted)}.no-bookings-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin-top:.75rem;font-size:.9rem}.receipt-view-modal[_ngcontent-%COMP%] .receipt-body[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1rem;max-height:70vh;overflow-y:auto}.receipt-image-wrapper[_ngcontent-%COMP%]{text-align:center}.receipt-image-wrapper[_ngcontent-%COMP%] .receipt-image[_ngcontent-%COMP%]{max-width:100%;border-radius:8px;border:1px solid var(--color-border)}.no-receipt-placeholder[_ngcontent-%COMP%]{text-align:center;padding:2rem;color:var(--color-text-muted)}.no-receipt-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;display:block;margin-bottom:.5rem}']})};function L9(n,t){n&1&&(r(0,"span"),l(1," Theme saved to your account!"),a())}function F9(n,t){n&1&&(r(0,"span"),l(1," Theme applied locally. Log in to sync across devices."),a())}function z9(n,t){if(n&1&&(r(0,"div",62)(1,"strong"),l(2,"\u2713 Success!"),a(),A(3,L9,2,0,"span",63)(4,F9,2,0,"span",63),a()),n&2){let e=h();d(3),x("ngIf",e.isLoggedIn),d(),x("ngIf",!e.isLoggedIn)}}function U9(n,t){n&1&&(r(0,"div",71),Le(),r(1,"svg",72),w(2,"polyline",73),a()())}function j9(n,t){if(n&1){let e=L();r(0,"div",64),S("click",function(){let o=k(e).$implicit,s=h();return O(s.applyPreset(o))}),r(1,"div",65),A(2,U9,3,0,"div",66),a(),r(3,"div",67)(4,"h3",68),l(5),a(),r(6,"div",69),w(7,"span",70)(8,"span",70),a()()()}if(n&2){let e=t.$implicit,i=h();te("active",i.isPresetSelected(e)),d(),le("background",i.getPresetGradient(e)),d(),x("ngIf",i.isPresetSelected(e)),d(3),R(e.label),d(2),le("background",e.colors.primary),d(),le("background",e.colors.accent)}}var ed=class n{constructor(t,e){this.themeService=t;this.authService=e}currentTheme={mode:"dark",primaryColor:"#2c3e50",accentColor:"#1abc9c"};presets=[];customPrimaryColor="#2c3e50";customAccentColor="#1abc9c";selectedPreset="";showSuccessMessage=!1;isLoggedIn=!1;ngOnInit(){this.isLoggedIn=this.authService.isAuthenticated(),this.currentTheme=this.themeService.getCurrentTheme(
104),this.customPrimaryColor=this.currentTheme.primaryColor,this.customAccentColor=this.currentTheme.accentColor,this.presets=this.themeService.presets,this.themeService.theme$.subscribe(t=>{this.currentTheme=t}),this.themeService.syncWithServer()}toggleMode(){this.themeService.toggleMode(),this.showSuccess()}applyPreset(t){this.selectedPreset=t.name,this.themeService.applyPreset(t),this.customPrimaryColor=t.colors.primary,this.customAccentColor=t.colors.accent,this.showSuccess()}applyPrimaryColor(){this.themeService.setPrimaryColor(this.customPrimaryColor),this.selectedPreset="",this.showSuccess()}applyAccentColor(){this.themeService.setAccentColor(this.customAccentColor),this.selectedPreset="",this.showSuccess()}applyCustomColors(){this.themeService.setPrimaryColor(this.customPrimaryColor),this.themeService.setAccentColor(this.customAccentColor),this.selectedPreset="",this.showSuccess()}resetToDefault(){this.themeService.resetToDefault(),this.currentTheme=this.themeService.getCurrentTheme(),this.customPrimaryColor=this.currentTheme.primaryColor,this.customAccentColor=this.currentTheme.accentColor,this.selectedPreset="",this.showSuccess()}showSuccess(){this.showSuccessMessage=!0,setTimeout(()=>{this.showSuccessMessage=!1},2e3)}getPresetGradient(t){return`linear-gradient(135deg, ${t.colors.primary} 0%, ${t.colors.accent} 100%)`}isPresetSelected(t){return this.currentTheme.primaryColor===t.colors.primary&&this.currentTheme.accentColor===t.colors.accent}static \u0275fac=function(e){return new(e||n)(ae(Yi),ae(je))};static \u0275cmp=We({type:n,selectors:[["app-theme-customizer"]],decls:124,vars:20,consts:[[1,"theme-customizer-container"],[1,"page-header"],[1,"subtitle"],["class","alert alert-success",4,"ngIf"],[1,"section","mode-section"],[1,"section-header"],[1,"section-description"],[1,"mode-toggle-container"],[1,"mode-option",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"mode-icon"],["d","M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"],[1,"mode-label"],[1,"mode-description"],["cx","12","cy","12","r","5"],["x1","12","y1","1","x2","12","y2","3"],["x1","12","y1","21","x2","12","y2","23"],["x1","4.22","y1","4.22","x2","5.64","y2","5.64"],["x1","18.36","y1","18.36","x2","19.78","y2","19.78"],["x1","1","y1","12","x2","3","y2","12"],["x1","21","y1","12","x2","23","y2","12"],["x1","4.22","y1","19.78","x2","5.64","y2","18.36"],["x1","18.36","y1","5.64","x2","19.78","y2","4.22"],[1,"section","presets-section"],[1,"presets-grid"],["class","preset-card",3,"active","click",4,"ngFor","ngForOf"],[1,"section","custom-section"],[1,"custom-colors-container"],[1,"color-picker-group"],[1,"color-label"],[1,"label-text"],[1,"label-description"],[1,"color-input-wrapper"],["type","color",1,"color-input",3,"ngModelChange","change","ngModel"],["type","text","placeholder","#2c3e50",1,"color-text-input",3,"ngModelChange","blur","ngModel"],[1,"color-preview"],["type","text","placeholder","#1abc9c",1,"color-text-input",3,"ngModelChange","blur","ngModel"],[1,"btn","btn-apply-custom",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2"],["d","M22 11.08V12a10 10 0 11-5.93-9.14"],["points","22 4 12 14.01 9 11.01"],[1,"section","preview-section"],[1,"preview-container"],[1,"preview-card"],[1,"preview-header"],[1,"preview-btn-primary"],[1,"preview-text"],[1,"preview-actions"],[1,"preview-btn-secondary"],[1,"preview-btn-accent"],[1,"preview-colors-info"],[1,"preview-color-item"],[1,"preview-color-swatch"],[1,"preview-color-details"],[1,"preview-color-name"],[1,"preview-color-value"],[1,"section","reset-section"],[1,"reset-container"],[1,"reset-info"],[1,"btn","btn-reset",3,"click"],["points","1 4 1 10 7 10"],["points","23 20 23 14 17 14"],["d","M20.49 9A9 9 0 005.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 013.51 15"],[1,"alert","alert-success"],[4,"ngIf"],[1,"preset-card",3,"click"],[1,"preset-preview"],["class","preset-check",4,"ngIf"],[1,"preset-info"],[1,"preset-name"],[1,"preset-colors"],[1,"color-dot"],[1,"preset-check"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","3"],["points","20 6 9 17 4 12"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"h1"),l(3,"\u{1F3A8} Theme Customizer"),a(),r(4,"p",2),l(5,"Personalize your PickleHub experience with custom themes and colors"),a()(),A(6,z9,5,2,"div",3),r(7,"div",4)(8,"div",5)(9,"h2"),l(10,"\u{1F317} Appearance Mode"),a(),r(11,"p",6),l(12,"Switch between dark and light themes"),a()(),r(13,"div",7)(14,"button",8),S("click",function(){return i.currentTheme.mode==="light"&&i.toggleMode()}),Le(),r(15,"svg",9),w(16,"path",10),a(),Mt(),r(17,"span",11),l(18,"Dark Mode"),a(),r(19,"span",12),l(20,"Easy on the eyes"),a()(),r(21,"button",8),S("click",function(){return i.currentTheme.mode==="dark"&&i.toggleMode()}),Le(),r(22,"svg",9),w(23,"circle",13)(24,"line",14)(25,"line",15)(26,"line",16)(27,"line",17)(28,"line",18)(29,"line",19)(30,"line",20)(31,"line",21),a(),Mt(),r(32,"span",11),l(33,"Light Mode"),a(),r(34,"span",12),l(35,"Bright and clean"),a()()()(),r(36,"div",22)(37,"div",5)(38,"h2"),l(39,"\u{1F3AF} Preset Themes"),a(),r(40,"p",6),l(41,"Choose from our carefully crafted color combinations"),a()(),r(42,"div",23),A(43,j9,9,10,"div",24),a()(),r(44,"div",25)(45,"div",5)(46,"h2"),l(47,"\u{1F3A8} Custom Colors"),a(),r(48,"p",6),l(49,"Create your own unique color scheme"),a()(),r(50,"div",26)(51,"div",27)(52,"label",28)(53,"span",29),l(54,"Primary Color"),a(),r(55,"span",30),l(56,"Main brand color for headers and navigation"),a()(),r(57,"div",31)(58,"input",32),pe("ngModelChange",function(s){return de(i.customPrimaryColor,s)||(i.customPrimaryColor=s),s}),S("change",function(){return i.applyPrimaryColor()}),a(),r(59,"input",33),pe("ngModelChange",function(s){return de(i.customPrimaryColor,s)||(i.customPrimaryColor=s),s}),S("blur",function(){return i.applyPrimaryColor()}),a(),w(60,"div",34),a()(),r(61,"div",27)(62,"label",28)(63,"span",29),l(64,"Accent Color"),a(),r(65,"span",30),l(66,"Highlights, buttons, and active states"),a()(),r(67,"div",31)(68,"input",32),pe("ngModelChange",function(s){return de(i.customAccentColor,s)||(i.customAccentColor=s),s}),S("change",function(){return i.applyAccentColor()}),a(),r(69,"input",35),pe("ngModelChange",function(s){return de(i.customAccentColor,s)||(i.customAccentColor=s),s}),S("blur",function(){return i.applyAccentColor()}),a(),w(70,"div",34),a()(),r(71,"button",36),S("click",function(){return i.applyCustomColors()}),Le(),r(72,"svg",37),w(73,"path",38)(74,"polyline",39),a(),l(75," Apply Custom Colors "),a()()(),Mt(),r(76,"div",40)(77,"div",5)(78,"h2"),l(79,"\u{1F441}\uFE0F Live Preview"),a(),r(80,"p",6),l(81,"See how your theme looks in action"),a()(),r(82,"div",41)(83,"div",42)(84,"div",43)(85,"h3"),l(86,"Sample Card"),a(),r(87,"button",44),l(88,"Primary Button"),a()(),r(89,"p",45),l(90,"This is how your text will look with the current theme."),a(),r(91,"div",46)(92,"button",47),l(93,"Secondary"),a(),r(94,"button",48),l(95,"Accent"),a()()(),r(96,"div",49)(97,"div",50),w(98,"div",51),r(99,"div",52)(100,"span",53),l(101,"Primary"),a(),r(102,"span",54),l(103),a()()(),r(104,"div",50),w(105,"div",51),r(106,"div",52)(107,"span",53),l(108,"Accent"),a(),r(109,"span",54),l(110),a()()()()()(),r(111,"div",55)(112,"div",56)(113,"div",57)(114,"h3"),l(115,"Reset to Default"),a(),r(116,"p"),l(117,"Restore the original Ocean Blue theme (Dark mode with #2c3e50 and #1abc9c)"),a()(),r(118,"button",58),S("click",function(){return i.resetToDefault()}),Le(),r(119,"svg",37),w(120,"polyline",59)(121,"polyline",60)(122,"path",61),a(),l(123," Reset Theme "),a()()()()),e&2&&(d(6),x("ngIf",i.showSuccessMessage),d(8),te("active",i.currentTheme.mode==="dark"),d(7),te("active",i.currentTheme.mode==="light"),d(22),x("ngForOf",i.presets),d(15),ce("ngModel",i.customPrimaryColor),d(),ce("ngModel",i.customPrimaryColor),d(),le("background",i.customPrimaryColor),d(8),ce("ngModel",i.customAccentColor),d(),ce("ngModel",i.customAccentColor),d(),le("background",i.customAccentColor),d(28),le("background",i.currentTheme.primaryColor),d(5),R(i.currentTheme.primaryColor),d(2),le("background",i.currentTheme.accentColor),d(5),R(i.currentTheme.accentColor))},dependencies:[Ge,rt,$e,lt,at,st,ut],styles:['.theme-customizer-container[_ngcontent-%COMP%]{max-width:1200px;margin:0 auto;padding:20px;min-height:calc(100vh - 200px)}.page-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:40px;padding:30px 20px;background:var(--color-background-card);border-radius:16px;border:2px solid var(--color-border);box-shadow:var(--shadow-md)}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-accent);margin:0 0 10px;font-weight:700}.subtitle[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--color-text-secondary);margin:0}.alert[_ngcontent-%COMP%]{padding:15px 20px;margin-bottom:20px;border-radius:12px;display:flex;align-items:center;gap:10px;animation:_ngcontent-%COMP%_slideDown .3s ease}.alert-success[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-success) 15%,transparent);border:2px solid var(--color-success);color:var(--color-success)}@keyframes _ngcontent-%COMP%_slideDown{0%{opacity:0;transform:translateY(-20px)}to{opacity:1;transform:translateY(0)}}.section[_ngcontent-%COMP%]{background:var(--color-background-card);border-radius:16px;padding:30px;margin-bottom:30px;border:2px solid var(--color-border);box-shadow:var(--shadow-md)}.section-header[_ngcontent-%COMP%]{margin-bottom:25px}.section-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.8rem;color:var(--color-text);margin:0 0 8px;font-weight:600}.section-description[_ngcontent-%COMP%]{font-size:1rem;color:var(--color-text-secondary);margin:0}.mode-toggle-container[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px}.mode-option[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:12px;padding:30px 20px;background:var(--color-surface);border:3px solid var(--color-border);border-radius:16px;cursor:pointer;transition:all .3s ease;position:relative;overflow:hidden}.mode-option[_ngcontent-%COMP%]:before{content:"";position:absolute;inset:0;background:var(--color-accent);opacity:0;transition:opacity .3s ease}.mode-option[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);transform:translateY(-5px);box-shadow:var(--shadow-lg)}.mode-option.active[_ngcontent-%COMP%]{border-color:var(--color-accent);background:var(--color-accent);color:#fff}.mode-option.active[_ngcontent-%COMP%]:before{opacity:.1}.mode-icon[_ngcontent-%COMP%]{width:48px;height:48px;stroke:currentColor;position:relative;z-index:1}.mode-label[_ngcontent-%COMP%]{font-size:1.2rem;font-weight:700;position:relative;z-index:1}.mode-description[_ngcontent-%COMP%]{font-size:.9rem;opacity:.8;position:relative;z-index:1}.presets-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:20px}.preset-card[_ngcontent-%COMP%]{background:var(--color-surface);border:3px solid var(--color-border);border-radius:16px;overflow:hidden;cursor:pointer;transition:all .3s ease}.preset-card[_ngcontent-%COMP%]:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg);border-color:var(--color-accent)}.preset-card.active[_ngcontent-%COMP%]{border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-medium)}.preset-preview[_ngcontent-%COMP%]{height:120px;position:relative;display:flex;align-items:center;justify-content:center}.preset-check[_ngcontent-%COMP%]{width:60px;height:60px;background:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 12px #0000004d;animation:_ngcontent-%COMP%_checkPop .3s cubic-bezier(.68,-.55,.265,1.55)}.preset-check[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:32px;height:32px;color:var(--color-success)}@keyframes _ngcontent-%COMP%_checkPop{0%{transform:scale(0);opacity:0}
10450%{transform:scale(1.2)}to{transform:scale(1);opacity:1}}.preset-info[_ngcontent-%COMP%]{padding:16px}.preset-name[_ngcontent-%COMP%]{font-size:1.1rem;font-weight:600;color:var(--color-text);margin:0 0 10px}.preset-colors[_ngcontent-%COMP%]{display:flex;gap:8px}.color-dot[_ngcontent-%COMP%]{width:24px;height:24px;border-radius:50%;border:2px solid var(--color-border);box-shadow:var(--shadow-sm)}.custom-colors-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:25px}.color-picker-group[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.color-label[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.label-text[_ngcontent-%COMP%]{font-size:1.1rem;font-weight:600;color:var(--color-text)}.label-description[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary)}.color-input-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:12px;background:var(--color-surface);border:2px solid var(--color-border);border-radius:12px}.color-input[_ngcontent-%COMP%]{width:60px;height:60px;border:3px solid var(--color-border);border-radius:8px;cursor:pointer;transition:all .3s ease}.color-input[_ngcontent-%COMP%]:hover{transform:scale(1.1);border-color:var(--color-accent)}.color-text-input[_ngcontent-%COMP%]{flex:1;padding:12px 16px;background:var(--color-background);border:2px solid var(--color-border);border-radius:8px;color:var(--color-text);font-size:1rem;font-weight:600;text-transform:uppercase}.color-text-input[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent)}.color-preview[_ngcontent-%COMP%]{width:60px;height:60px;border-radius:8px;border:3px solid var(--color-border);box-shadow:var(--shadow-sm)}.btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:10px;padding:14px 28px;border:none;border-radius:12px;font-size:1rem;font-weight:600;cursor:pointer;transition:all .3s ease;text-transform:uppercase;letter-spacing:.5px}.btn[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:20px;height:20px}.btn-apply-custom[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;box-shadow:var(--shadow-md)}.btn-apply-custom[_ngcontent-%COMP%]:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.btn-reset[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;box-shadow:var(--shadow-md)}.btn-reset[_ngcontent-%COMP%]:hover{background:var(--color-danger);transform:translateY(-2px);box-shadow:var(--shadow-lg)}.preview-container[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:30px}.preview-card[_ngcontent-%COMP%]{background:var(--color-surface);border:2px solid var(--color-border);border-radius:12px;padding:25px;box-shadow:var(--shadow-md)}.preview-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:20px}.preview-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;color:var(--color-text);font-size:1.3rem}.preview-btn-primary[_ngcontent-%COMP%]{padding:10px 20px;background:var(--color-primary);color:#fff;border:none;border-radius:8px;font-weight:600;cursor:pointer}.preview-text[_ngcontent-%COMP%]{color:var(--color-text-secondary);line-height:1.6;margin-bottom:20px}.preview-actions[_ngcontent-%COMP%]{display:flex;gap:12px}.preview-btn-secondary[_ngcontent-%COMP%], .preview-btn-accent[_ngcontent-%COMP%]{padding:10px 20px;border:none;border-radius:8px;font-weight:600;cursor:pointer}.preview-btn-secondary[_ngcontent-%COMP%]{background:var(--color-surface-hover);color:var(--color-text)}.preview-btn-accent[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.preview-colors-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:20px}.preview-color-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:15px;padding:15px;background:var(--color-surface);border:2px solid var(--color-border);border-radius:12px}.preview-color-swatch[_ngcontent-%COMP%]{width:60px;height:60px;border-radius:8px;border:2px solid var(--color-border);box-shadow:var(--shadow-sm)}.preview-color-details[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}
104.preview-color-name[_ngcontent-%COMP%]{font-size:1rem;font-weight:600;color:var(--color-text)}.preview-color-value[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary);font-family:Courier New,monospace}.reset-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;gap:20px}.reset-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 8px;color:var(--color-text);font-size:1.3rem}.reset-info[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:.95rem}@media (max-width: 1024px){.preview-container[_ngcontent-%COMP%]{grid-template-columns:1fr}}@media (max-width: 768px){.theme-customizer-container[_ngcontent-%COMP%]{padding:15px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2rem}.section[_ngcontent-%COMP%]{padding:20px}.presets-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:15px}.reset-container[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start}.btn-reset[_ngcontent-%COMP%]{width:100%}}@media (max-width: 480px){.mode-toggle-container[_ngcontent-%COMP%]{grid-template-columns:1fr}.presets-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.color-input-wrapper[_ngcontent-%COMP%]{flex-wrap:wrap}.color-input[_ngcontent-%COMP%], .color-preview[_ngcontent-%COMP%]{width:50px;height:50px}}']})};var ox=Ri(Ac());var La=class n{constructor(t){this.authService=t}rxStompClient;connectionStatus$=new fn(!1);messages$=new Et;messagesSub=null;connect(){if(this.rxStompClient?.active)return;let t=this.authService.getToken();if(!t){console.error("No JWT token found. Cannot connect to WebSocket.");return}this.rxStompClient=new Xo;let e={webSocketFactory:()=>new ox.default(`${Be.apiBase.replace("/api","")}/ws-chat`),connectHeaders:{Authorization:`Bearer ${t}`},heartbeatIncoming:1e4,heartbeatOutgoing:1e4,reconnectDelay:5e3};this.rxStompClient.configure(e),this.rxStompClient.activate(),this.rxStompClient.connectionState$.subscribe(i=>{this.connectionStatus$.next(i===Tn.OPEN),i===Tn.OPEN&&console.log("WebSocket connected successfully")}),this.messagesSub?.unsubscribe(),this.messagesSub=this.rxStompClient.watch("/topic/messages").pipe(On(i=>JSON.parse(i.body))).subscribe(i=>this.messages$.next(i))}disconnect(){this.messagesSub?.unsubscribe(),this.messagesSub=null,this.rxStompClient&&(this.rxStompClient.deactivate(),this.connectionStatus$.next(!1),console.log("WebSocket disconnected"))}sendMessage(t,e,i){if(!this.rxStompClient||!this.connectionStatus$.value){console.error("WebSocket not connected");return}this.rxStompClient.publish({destination:"/app/chat.sendMessage",body:JSON.stringify({content:t,messageType:"TEXT",replyToMessageId:e??null,mentionedUserIds:i??[]})})}watchMessages(){return this.messages$.asObservable()}watchOnlineStatus(){return this.rxStompClient.watch("/topic/online-status").pipe(On(t=>JSON.parse(t.body)))}watchDeletedMessages(){return this.rxStompClient.watch("/topic/messages/deleted").pipe(On(t=>JSON.parse(t.body)))}watchMessageUpdates(){return this.rxStompClient.watch("/topic/message-updated").pipe(On(t=>JSON.parse(t.body)))}joinChat(){if(!this.rxStompClient||!this.connectionStatus$.value){console.error("WebSocket not connected");return}this.rxStompClient.publish({destination:"/app/chat.join",body:"{}"})}leaveChat(){if(!this.rxStompClient||!this.connectionStatus$.value){console.error("WebSocket not connected");return}this.rxStompClient.publish({destination:"/app/chat.leave",body:"{}"})}sendTyping(t){!this.rxStompClient||!this.connectionStatus$.value||this.rxStompClient.publish({destination:"/app/chat.typing",body:JSON.stringify({isTyping:t})})}watchTypingEvents(){return this.rxStompClient.watch("/topic/typing").pipe(On(t=>JSON.parse(t.body)))}getConnectionStatus(){return this.connectionStatus$.asObservable()}isConnected(){return this.connectionStatus$.value}static \u0275fac=function(e){return new(e||n)(on(je))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var rr=Ri(Ss());var Fa=class n{constructor(t){this.http=t}apiUrl=`${Be.apiBase}/group-chat`;getAuthHeaders(){let t={"Content-Type":"application/json"},e=localStorage.getItem("pickle_jwt_token");if(e)try{let i=rr.AES.decrypt(e,"picklehub_secret_key").toString(rr.enc.Utf8);i&&(t.Authorization=`Bearer ${i}`)}catch(i){console.error("Error decrypting token:",i)}return new si(t)}getMessages(t=50,e){let i={limit:t.toString()};return e&&(i.before=e),this.http.get(`${this.apiUrl}/messages`,{headers:this.getAuthHeaders(),params:i})}deleteMessage(t){return this.http.delete(`${this.apiUrl}/messages/${t}`,{headers:this.getAuthHeaders()})}getOnlineUsers(){return this.http.get(`${this.apiUrl}/online-users`,{headers:this.getAuthHeaders()})}searchUsers(t,e=8){return this.http.get(`${Be.apiBase}/users/search`,{headers:this.getAuthHeaders(),params:{q:t,limit:e.toString()}})}reactToMessage(t,e){return this.http.post(`${this.apiUrl}/messages/${t}/react`,{emoji:e},{headers:this.getAuthHeaders()})}sendImageMessage(t){let e=new FormData;e.append("file",t);let i=localStorage.getItem("pickle_jwt_token"),o=new si;if(i)try{let s=rr.AES.decrypt(i,"picklehub_secret_key").toString(rr.enc.Utf8);s&&(o=o.set("Authorization",`Bearer ${s}`))}catch{}return this.http.post(`${this.apiUrl}/messages/image`,e,{headers:o})}uploadAttachment(t,e){let i=new FormData;i.append("file",e);let o=localStorage.getItem("pickle_jwt_token"),s=new si;if(o)try{let m=rr.AES.decrypt(o,"picklehub_secret_key").toString(rr.enc.Utf8);m&&(s=s.set("Authorization",`Bearer ${m}`))}catch(m){console.error("Error decrypting token:",m)}return this.http.post(`${this.apiUrl}/messages/${t}/attachment`,i,{headers:s})}static \u0275fac=function(e){return new(e||n)(on(Wi))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var H9=["messagesContainer"],W9=["messageInputEl"];function G9(n,t){if(n&1&&(r(0,"div",13),w(1,"i",14),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.onlineUsers.length," online ")}}function q9(n,t){n&1&&Uo(0)}function $9(n,t){if(n&1&&(we(0),A(1,q9,1,0,"ng-container",15),Pe()),n&2){h(2);let e=Jt(3);d(),x("ngTemplateOutlet",e)}}function Y9(n,t){if(n&1){let e=L();r(0,"div",5)(1,"div",6),S("click",function(){k(e);let o=h();return O(o.isMinimized&&o.toggleMinimize())}),r(2,"button",7),S("click",function(o){return k(e),h().goBack(),O(o.stopPropagation())}),w(3,"i",8),a(),r(4,"h2"),w(5,"i",9),l(6," Group Chat"),a(),r(7,"div",10),A(8,G9,3,1,"div",11),r(9,"button",12),S("click",function(o){return k(e),h().toggleMinimize(),O(o.stopPropagation())}),w(10,"i"),a()()(),A(11,$9,2,1,"ng-container",4),a()}if(n&2){let e=h();te("minimized",e.isMinimized),d(),te("chat-header-clickable",e.isMinimized),d(7),x("ngIf",!e.isMinimized),d(),x("title",e.isMinimized?"Open chat":"Close chat"),d(),Qt(e.isMinimized?"bi bi-chevron-up":"bi bi-x-lg"),d(),x("ngIf",!e.isMinimized)}}function X9(n,t){n&1&&Uo(0)}function Z9(n,t){if(n&1&&(we(0),A(1,X9,1,0,"ng-container",15),Pe()),n&2){h();let e=Jt(3);d(),x("ngTemplateOutlet",e)}}function Q9(n,t){if(n&1){let e=L();r(0,"button",36),S("click",function(){k(e);let o=h(2);
104return O(o.loadMoreMessages())}),w(1,"i",37),l(2," Load older messages "),a()}}function K9(n,t){n&1&&(r(0,"div",38),w(1,"div",39),r(2,"span",40),l(3,"Loading older messages\u2026"),a()())}function J9(n,t){if(n&1){let e=L();r(0,"img",50),S("error",function(){k(e);let o=h(2).$implicit,s=h(2);return O(s.onAvatarError(o.senderAvatarFileId))})("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),a()}if(n&2){let e=h(2).$implicit,i=h(2);x("src",i.getProfilePictureUrl(e.senderAvatarFileId),Ie)("alt",e.senderName)}}function eR(n,t){if(n&1){let e=L();r(0,"div",51),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),l(1),a()}if(n&2){let e=h(2).$implicit,i=h(2);d(),F(" ",i.getSenderInitials(e.senderName)," ")}}function tR(n,t){n&1&&(r(0,"div",52),w(1,"i",53),l(2," Message unsent "),a())}function nR(n,t){if(n&1&&(r(0,"div",64)(1,"span",65),l(2),a(),r(3,"span",66),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function iR(n,t){if(n&1&&(r(0,"div",61),A(1,nR,5,2,"div",62),w(2,"span",63),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function oR(n,t){if(n&1){let e=L();r(0,"div",67)(1,"img",68),S("click",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.openLightbox(m.getAttachmentImageUrl(s.attachmentFileId),s.senderName+"'s photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h(2);d(),x("src",i.getAttachmentImageUrl(e.attachmentFileId),Ie)}}function rR(n,t){if(n&1){let e=L();r(0,"button",71),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function aR(n,t){if(n&1){let e=L();r(0,"div",69),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,rR,2,1,"button",70),a()}if(n&2){let e=h(5);d(),x("ngForOf",e.EMOJIS)}}function sR(n,t){if(n&1){let e=L();r(0,"span",74),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function lR(n,t){if(n&1&&(r(0,"div",72),A(1,sR,2,5,"span",73),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngForOf",i.getReactionEntries(e))}}function cR(n,t){if(n&1){let e=L();we(0),r(1,"div",54),A(2,iR,3,2,"div",55)(3,oR,2,1,"div",56),r(4,"button",57),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.toggleReactionPicker(s.id,o))}),w(5,"i",58),a()(),A(6,aR,2,1,"div",59)(7,lR,2,1,"div",60),Pe()}if(n&2){let e=h(2).$implicit,i=h(2);d(2),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function dR(n,t){if(n&1){let e=L();r(0,"div",43),A(1,J9,1,2,"img",44)(2,eR,2,1,"div",45),r(3,"div",46)(4,"div",47),S("click",function(o){k(e);let s=h().$implicit,m=h(2);return O(m.openPlayerPopup(s,o))}),l(5),a(),A(6,tR,3,0,"div",48)(7,cR,8,4,"ng-container",4),r(8,"div",49),l(9),a()()()}if(n&2){let e=h().$implicit,i=h(2);d(),x("ngIf",i.showAvatar(e.senderAvatarFileId)),d(),x("ngIf",!i.showAvatar(e.senderAvatarFileId)),d(3),R(e.senderName),d(),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function pR(n,t){n&1&&(r(0,"div",77),w(1,"i",53),l(2," Message unsent "),a())}function mR(n,t){if(n&1&&(r(0,"div",88)(1,"span",65),l(2),a(),r(3,"span",66),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function gR(n,t){if(n&1&&(r(0,"div",86),A(1,mR,5,2,"div",87),w(2,"span",63),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function uR(n,t){if(n&1){let e=L();r(0,"div",89)(1,"img",68),S("click",function(o){k(e);let s=h(3).$implicit,m=h(2);return O(m.openLightbox(m.getAttachmentImageUrl(s.attachmentFileId),"My photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h(2);d(),x("src",i.getAttachmentImageUrl(e.attachmentFileId),Ie)}}function fR(n,t){if(n&1){let e=L();r(0,"div",90),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"span"),l(2,"Delete this message?"),a(),r(3,"button",91),S("click",function(){k(e);let o=h(5);return O(o.confirmDelete())}),l(4,"Delete"),a(),r(5,"button",92),S("click",function(){k(e);let o=h(5);return O(o.cancelDelete())}),l(6,"Cancel"),a()()}}function hR(n,t){if(n&1){let e=L();r(0,"button",71),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function _R(n,t){if(n&1){let e=L();r(0,"div",93),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,hR,2,1,"button",70),a()}if(n&2){let e=h(5);d(),x("ngForOf",e.EMOJIS)}}function xR(n,t){if(n&1){let e=L();r(0,"span",74),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h(2);return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function vR(n,t){if(n&1&&(r(0,"div",94),A(1,xR,2,5,"span",73),a()),n&2){let e=h(3).$implicit,i=h(2);d(),x("ngForOf",i.getReactionEntries(e))}}function bR(n,t){if(n&1){let e=L();we(0),r(1,"div",78)(2,"button",57),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.toggleReactionPicker(s.id,o))}),w(3,"i",58),a(),A(4,gR,3,2,"div",79)(5,uR,2,1,"div",80),r(6,"button",81),S("click",function(o){k(e);let s=h(2).$implicit,m=h(2);return O(m.requestDelete(s.id,o))}),w(7,"i",82),a()(),A(8,fR,7,0,"div",83)(9,_R,2,1,"div",84)(10,vR,2,1,"div",85),Pe()}if(n&2){let e=h(2).$implicit,i=h(2);d(4),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.pendingDeleteMessageId===e.id),d(),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function yR(n,t){if(n&1&&(r(0,"div",43)(1,"div",46),A(2,pR,3,0,"div",75)(3,bR,11,5,"ng-container",4),r(4,"div",76),l(5),a()()()),n&2){let e=h().$implicit,i=h(2);d(2),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function CR(n,t){if(n&1&&(r(0,"div",41),A(1,dR,10,6,"div",42)(2,yR,6,3,"div",42),a()),n&2){let e=t.$implicit,i=h(2);te("my-message",i.isMyMessage(e)),x("@messageEnter",void 0),vn("data-message-id",e.id),d(),x("ngIf",!i.isMyMessage(e)),d(),x("ngIf",i.isMyMessage(e))}}function wR(n,t){n&1&&(r(0,"div",95)(1,"div",43)(2,"div",46)(3,"div",78)(4,"div",96),w(5,"span",97)(6,"i",31),r(7,"span"),l(8,"Uploading..."),a()()()()()())}function PR(n,t){n&1&&(r(0,"div",98),w(1,"i",99),r(2,"p"),l(3,"No messages yet. Start the conversation!"),a()())}function MR(n,t){if(n&1){let e=L();r(0,"button",100),S("click",function(){k(e);let o=h(2);return O(o.scrollToBottom())}),w(1,"i",101),a()}if(n&2){let e=h(2);le("bottom",(e.imagePreview?174:90)+(e.typingUsers.size>0?42:0)+"px")}}function SR(n,t){if(n&1){let e=L();r(0,"img",111),S("error",function(){k(e);let o=h().$implicit,s=h(3);return O(s.onAvatarError(s.getTypingUserAvatar(o.userId)))}),a()}if(n&2){let e=h().$implicit,i=h(3);
104x("src",i.getProfilePictureUrl(i.getTypingUserAvatar(e.userId)),Ie)("alt",e.name)}}function kR(n,t){if(n&1&&(r(0,"div",112),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),F(" ",i.getSenderInitials(e.name)," ")}}function OR(n,t){if(n&1&&(r(0,"div",105),A(1,SR,1,2,"img",106)(2,kR,2,1,"div",107),r(3,"div",108)(4,"span",109),w(5,"span")(6,"span")(7,"span"),a()(),r(8,"span",110),l(9),a()()),n&2){let e=t.$implicit,i=h(3);d(),x("ngIf",i.showAvatar(i.getTypingUserAvatar(e.userId))),d(),x("ngIf",!i.showAvatar(i.getTypingUserAvatar(e.userId))),d(7),R(e.name)}}function ER(n,t){if(n&1&&(r(0,"div",102)(1,"div",103),A(2,OR,10,3,"div",104),a()()),n&2){let e=h(2);d(2),x("ngForOf",e.typingUsersArray)}}function TR(n,t){if(n&1){let e=L();r(0,"div",113),w(1,"img",114),r(2,"div",115)(3,"button",116),S("click",function(){k(e);let o=h(2);return O(o.clearImage())}),w(4,"i",117),a(),r(5,"button",118),S("click",function(){k(e);let o=h(2);return O(o.sendImageMessage())}),w(6,"i",35),l(7),a()()()}if(n&2){let e=h(2);d(),x("src",e.imagePreview,Ie),d(4),x("disabled",e.isUploading),d(2),F(" ",e.isUploading?"Sending...":"Send"," ")}}function IR(n,t){if(n&1&&(r(0,"div",123),l(1),a()),n&2){let e=h(3);d(),R(e.lightboxAlt)}}function AR(n,t){if(n&1){let e=L();r(0,"div",119),S("click",function(){k(e);let o=h(2);return O(o.closeLightbox())}),r(1,"button",120),S("click",function(){k(e);let o=h(2);return O(o.closeLightbox())}),w(2,"i",117),a(),r(3,"img",121),S("click",function(o){return k(e),O(o.stopPropagation())}),a(),A(4,IR,2,1,"div",122),a()}if(n&2){let e=h(2);d(3),x("src",e.lightboxUrl,Ie)("alt",e.lightboxAlt),d(),x("ngIf",e.lightboxAlt)}}function DR(n,t){if(n&1){let e=L();r(0,"div",124)(1,"div",125),w(2,"i",126),r(3,"span",127),l(4),a(),r(5,"span",128),l(6),_e(7,"slice"),a()(),r(8,"button",129),S("click",function(){k(e);let o=h(2);return O(o.replyingTo=null)}),w(9,"i",130),a()()}if(n&2){let e=h(2);d(4),R(e.replyingTo.senderName),d(2),R(Ho(7,2,e.replyingTo.content,0,80))}}function RR(n,t){n&1&&(r(0,"div",135),w(1,"div",136),a())}function BR(n,t){if(n&1){let e=L();r(0,"img",146),S("error",function(){k(e);let o=h(4);return O(o.onAvatarError(o.playerPopup.avatarFileId))}),a()}if(n&2){let e=h(4);x("src",e.getProfilePictureUrl(e.playerPopup.avatarFileId),Ie)("alt",e.playerPopup.name)}}function NR(n,t){if(n&1&&(r(0,"div",147),l(1),a()),n&2){let e=h(4);d(),F(" ",e.getSenderInitials(e.playerPopup.name)," ")}}function VR(n,t){if(n&1&&(r(0,"div",148),l(1),a()),n&2){let e=h(4);d(),F("@",e.playerPopup.data.username,"")}}function LR(n,t){if(n&1&&(r(0,"div",149)(1,"span",150),l(2),a()()),n&2){let e=h(4);d(2),R(e.playerPopup.data.role)}}function FR(n,t){if(n&1&&(r(0,"div",153)(1,"span",154),l(2,"Skill"),a(),r(3,"span",155),l(4),a()()),n&2){let e=h(5);d(4),R(e.playerPopup.data.skillLevel)}}function zR(n,t){if(n&1&&(r(0,"div",153)(1,"span",154),l(2,"DUPR"),a(),r(3,"span",155),l(4),a()()),n&2){let e=h(5);d(4),R(e.playerPopup.data.duprRating)}}function UR(n,t){if(n&1&&(r(0,"div",151),A(1,FR,5,1,"div",152)(2,zR,5,1,"div",152),a()),n&2){let e=h(4);d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.skillLevel),d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.duprRating)}}function jR(n,t){if(n&1){let e=L();we(0),r(1,"div",137),A(2,BR,1,2,"img",138)(3,NR,2,1,"div",139),a(),r(4,"div",140),l(5),a(),A(6,VR,2,1,"div",141)(7,LR,3,1,"div",142)(8,UR,3,2,"div",143),r(9,"button",144),S("click",function(){k(e);let o=h(3);return O(o.goToDirectMessage())}),w(10,"i",145),l(11," Send Message "),a(),Pe()}if(n&2){let e=h(3);d(2),x("ngIf",e.showAvatar(e.playerPopup.avatarFileId)),d(),x("ngIf",!e.showAvatar(e.playerPopup.avatarFileId)),d(2),R((e.playerPopup.data==null?null:e.playerPopup.data.fullname)||e.playerPopup.name),d(),x("ngIf",e.playerPopup.data==null?null:e.playerPopup.data.username),d(),x("ngIf",(e.playerPopup.data==null?null:e.playerPopup.data.role)&&e.playerPopup.data.role!=="user"),d(),x("ngIf",(e.playerPopup.data==null?null:e.playerPopup.data.skillLevel)||(e.playerPopup.data==null?null:e.playerPopup.data.duprRating))}}function HR(n,t){if(n&1){let e=L();r(0,"div",131),S("click",function(){k(e);let o=h(2);return O(o.closePlayerPopup())}),r(1,"div",132),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"button",133),S("click",function(){k(e);let o=h(2);return O(o.closePlayerPopup())}),w(3,"i",130),a(),A(4,RR,2,0,"div",134)(5,jR,12,6,"ng-container",4),a()()}if(n&2){let e=h(2);d(4),x("ngIf",e.playerPopup.loading),d(),x("ngIf",!e.playerPopup.loading)}}function WR(n,t){if(n&1){let e=L();r(0,"img",163),S("error",function(){k(e);let o=h().$implicit;return O(o.profilePictureUrl=void 0)}),a()}if(n&2){let e=h().$implicit,i=h(3);x("src",i.getMentionAvatarUrl(e.profilePictureUrl),Ie)("alt",e.username)}}function GR(n,t){if(n&1&&(r(0,"span",164),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),R(i.getSenderInitials(e.fullname||e.username))}}function qR(n,t){if(n&1&&(r(0,"span",165),l(1),a()),n&2){let e=h().$implicit;d(),R(e.fullname)}}function $R(n,t){if(n&1){let e=L();r(0,"div",158),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.selectMention(o))}),A(1,WR,1,2,"img",159)(2,GR,2,1,"span",160),r(3,"span",161),l(4),a(),A(5,qR,2,1,"span",162),a()}if(n&2){let e=t.$implicit,i=h(3);d(),x("ngIf",i.getMentionAvatarUrl(e.profilePictureUrl)),d(),x("ngIf",!i.getMentionAvatarUrl(e.profilePictureUrl)),d(2),R(e.username),d(),x("ngIf",e.fullname)}}function YR(n,t){if(n&1){let e=L();r(0,"div",156),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,$R,6,4,"div",157),a()}if(n&2){let e=h(2);d(),x("ngForOf",e.mentionResults)}}function XR(n,t){if(n&1){let e=L();r(0,"div",16,1),S("scroll",function(o){k(e);let s=h();return O(s.onScroll(o))}),A(2,Q9,3,0,"button",17)(3,K9,4,0,"div",18)(4,CR,3,6,"div",19)(5,wR,9,0,"div",20)(6,PR,4,0,"div",21),a(),A(7,MR,2,2,"button",22)(8,ER,3,1,"div",23)(9,TR,8,3,"div",24)(10,AR,5,3,"div",25)(11,DR,10,6,"div",26)(12,HR,6,2,"div",27)(13,YR,2,1,"div",28),r(14,"div",29)(15,"label",30),w(16,"i",31),r(17,"input",32),S("change",function(o){k(e);let s=h();return O(s.onImageSelected(o))}),a()(),r(18,"textarea",33,2),pe("ngModelChange",function(o){k(e);let s=h();return de(s.messageContent,o)||(s.messageContent=o),O(o)}),S("keydown.enter",function(o){k(e);let s=h();return O(s.onEnterKey(o))})("input",function(o){k(e);let s=h();return s.onInputResize(o),s.onTyping(),O(s.onMentionInput(o))}),a(),r(20,"button",34),S("click",function(){k(e);let o=h();return O(o.sendMessage())}),w(21,"i",35),a()()}if(n&2){let e=h();d(2),x("ngIf",e.hasMoreMessages&&!e.isLoadingMore),d(),x("ngIf",e.isLoadingMore),d(),x("ngForOf",e.messages)("ngForTrackBy",e.trackById),d(),x("ngIf",e.isUploading),d(),x("ngIf",e.messages.length===0),d(),x("ngIf",e.showScrollToBottom),d(),x("ngIf",e.typingUsers.size>0),d(),x("ngIf",e.imagePreview),d(),x("ngIf",e.lightboxUrl),d(),x("ngIf",e.replyingTo),d(),x("ngIf",e.playerPopup),d(),x("ngIf",e.mentionDropdownVisible&&e.mentionResults.length>0),d(5),ce("ngModel",e.messageContent),d(2),x("disabled",!e.messageContent.trim())}}var td=class n{constructor(t,e,i,o,s,m,f,v,y){this.wsService=t;this.chatService=e;this.authService=i;this.location=o;this.router=s;this.soundService=m;this.sanitizer=f;this.ngZone=v;this.apiService=y;this.currentUser=this.authService.getCurrentUser()}embedded=!1;messagesContainerRef;messageInputRef;messages=[];onlineUsers=[];messageContent="";currentUser;isMinimized=!1;isLoadingMore=!1;hasMoreMessages=!0;showScrollToBottom=!1;oldestTimestamp=null;PAGE_SIZE=10;reactionPickerMessageId=null;
104EMOJIS=["\u{1F44D}","\u2764\uFE0F","\u{1F602}","\u{1F62E}","\u{1F622}","\u{1F621}","\u{1F525}","\u{1F389}","\u{1F44F}","\u{1F64F}","\u{1F4AF}","\u{1F60D}"];pendingDeleteMessageId=null;failedAvatarIds=new Set;typingUsers=new Map;typingInput$=new Et;typingTimer=null;selectedImageFile=null;imagePreview=null;isUploading=!1;lightboxUrl=null;lightboxAlt="";playerPopup=null;replyingTo=null;draggedMessageId=null;dragOffsetX=0;dragStartX=0;pendingDragMessageId=null;currentDragEl=null;dragCleanupFns=[];mentionDropdownVisible=!1;mentionResults=[];mentionedUserIds=[];mentionQuery="";mentionStartIndex=-1;mentionDebounceTimer=null;destroy$=new Et;ngOnInit(){this.currentUser&&(this.loadInitialMessages(),this.connectWebSocket(),this.setupDragListeners())}loadOnlineUsers(){this.chatService.getOnlineUsers().subscribe({next:t=>{this.onlineUsers=t},error:t=>console.error("Error fetching online users:",t)})}loadInitialMessages(){this.chatService.getMessages(this.PAGE_SIZE).subscribe({next:t=>{this.messages=t,this.hasMoreMessages=t.length>=this.PAGE_SIZE,this.oldestTimestamp=t.length>0?t[0].timestamp:null,setTimeout(()=>this.jumpToBottom(),100)},error:t=>console.error("Error loading messages:",t)})}jumpToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTop=t.scrollHeight,this.showScrollToBottom=!1)}connectWebSocket(){this.wsService.connect(),this.wsService.getConnectionStatus().pipe(bt(this.destroy$)).subscribe(t=>{t&&(this.wsService.joinChat(),this.loadOnlineUsers())}),this.wsService.watchMessages().pipe(bt(this.destroy$)).subscribe({next:t=>{if(!this.messages.some(i=>i.id===t.id)){this.messages.push(t),t.senderId!==this.currentUser?.id&&this.soundService.playReceive();let i=this.messagesContainerRef?.nativeElement;!i||i.scrollHeight-i.scrollTop-i.clientHeight<200?setTimeout(()=>this.scrollToBottom(),100):this.showScrollToBottom=!0}},error:t=>console.error("Error receiving message:",t)}),this.wsService.watchDeletedMessages().pipe(bt(this.destroy$)).subscribe(t=>{let e=this.messages.find(i=>i.id===t.id);e&&(e.isDeleted=!0)}),this.wsService.watchMessageUpdates().pipe(bt(this.destroy$)).subscribe(t=>{let e=this.messages.findIndex(i=>i.id===t.id);e!==-1&&(this.messages[e]=Ye(ze({},this.messages[e]),{reactions:t.reactions}))}),this.wsService.watchTypingEvents().pipe(bt(this.destroy$)).subscribe(t=>{t.userId!==this.currentUser?.id&&(t.isTyping?this.typingUsers.set(t.userId,t.userName):this.typingUsers.delete(t.userId))}),this.wsService.watchOnlineStatus().pipe(bt(this.destroy$)).subscribe({next:t=>this.updateOnlineStatus(t),error:t=>console.error("Error receiving status:",t)})}onTyping(){this.wsService.sendTyping(!0),clearTimeout(this.typingTimer),this.typingTimer=setTimeout(()=>{this.wsService.sendTyping(!1)},1500)}onEnterKey(t){t.shiftKey||(t.preventDefault(),this.sendMessage())}onInputResize(t){let e=t.target;e.style.overflowY="auto",e.style.height="auto";let i=120,o=e.scrollHeight;e.style.height=Math.min(o,i)+"px",e.style.overflowY=o>i?"auto":"hidden"}sendMessage(){if(this.messageContent.trim()&&(clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.wsService.sendTyping(!1),this.wsService.sendMessage(this.messageContent,this.replyingTo?.id,this.mentionedUserIds.length>0?[...this.mentionedUserIds]:void 0),this.soundService.playSend(),this.messageContent="",this.replyingTo=null,this.mentionedUserIds=[],this.mentionDropdownVisible=!1,this.messageInputRef)){let t=this.messageInputRef.nativeElement;t.style.height="auto",t.style.overflowY="hidden"}}onMentionInput(t){let e=t.target,i=e.value,o=e.selectionStart??i.length,s=i.substring(0,o),m=s.match(/@(\w*)$/);m?(this.mentionQuery=m[1],this.mentionStartIndex=s.lastIndexOf("@"),clearTimeout(this.mentionDebounceTimer),this.mentionQuery.length>=2?this.mentionDebounceTimer=setTimeout(()=>this.fetchMentionResults(this.mentionQuery),300):this.mentionDropdownVisible=!1):(this.mentionDropdownVisible=!1,this.mentionResults=[])}fetchMentionResults(t){this.chatService.searchUsers(t,8).subscribe({next:e=>{this.mentionResults=e,this.mentionDropdownVisible=e.length>0},error:()=>{}})}selectMention(t){let e=this.messageInputRef?.nativeElement;if(!e)return;let i=this.messageContent.substring(0,this.mentionStartIndex),o=this.messageContent.substring(e.selectionStart??this.messageContent.length),s=`@${t.nickname||t.username} `;this.messageContent=i+s+o,this.mentionedUserIds.includes(t.id)||this.mentionedUserIds.push(t.id),this.mentionDropdownVisible=!1,this.mentionResults=[],setTimeout(()=>{e.focus();let m=(i+s).length;e.setSelectionRange(m,m)})}getMentionAvatarUrl(t){if(t)return t.startsWith("/api/")?`${Be.apiBase.replace("/api","")}${t}`:`${Be.apiBase}/drive/profile-picture/${t}`}highlightMentions(t){let i=t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/@(\w+)/g,'<span class="mention">@$1</span>');return this.sanitizer.bypassSecurityTrustHtml(i)}get typingUsersArray(){return Array.from(this.typingUsers.entries()).map(([t,e])=>({userId:t,name:e}))}getTypingUserAvatar(t){return this.messages.find(e=>e.senderId===t)?.senderAvatarFileId}loadMoreMessages(){if(this.isLoadingMore||!this.hasMoreMessages||!this.oldestTimestamp)return;this.isLoadingMore=!0;let t=this.messagesContainerRef?.nativeElement,e=t?t.scrollHeight:0;this.chatService.getMessages(this.PAGE_SIZE,this.oldestTimestamp).subscribe({next:i=>{i.length===0?this.hasMoreMessages=!1:(this.messages=[...i,...this.messages],this.oldestTimestamp=i[0].timestamp,this.hasMoreMessages=i.length>=this.PAGE_SIZE,requestAnimationFrame(()=>{t&&(t.scrollTop=t.scrollHeight-e)})),this.isLoadingMore=!1},error:i=>{console.error("Error loading more messages:",i),this.isLoadingMore=!1}})}requestDelete(t,e){e.stopPropagation(),this.pendingDeleteMessageId=t,this.reactionPickerMessageId=null}cancelDelete(){this.pendingDeleteMessageId=null}confirmDelete(){let t=this.pendingDeleteMessageId;t&&(this.pendingDeleteMessageId=null,this.chatService.deleteMessage(t).subscribe({next:()=>{let e=this.messages.find(i=>i.id===t);e&&(e.isDeleted=!0)},error:e=>console.error("Error deleting message:",e)}))}onDocumentClick(){this.reactionPickerMessageId=null,this.pendingDeleteMessageId=null,this.mentionDropdownVisible=!1}setupDragListeners(){this.ngZone.runOutsideAngular(()=>
104{let t=o=>{if(!o.isPrimary)return;let s=o.target.closest(".message-wrapper[data-message-id]");s&&(this.dragStartX=o.clientX,this.pendingDragMessageId=s.getAttribute("data-message-id"),this.currentDragEl=s)},e=o=>{o.isPrimary&&(this.pendingDragMessageId&&Math.abs(o.clientX-this.dragStartX)>10&&(this.draggedMessageId=this.pendingDragMessageId,this.pendingDragMessageId=null,this.currentDragEl&&(this.currentDragEl.style.willChange="transform",this.currentDragEl.style.transition="none")),!(!this.draggedMessageId||!this.currentDragEl)&&(o.preventDefault(),this.dragOffsetX=Math.max(0,Math.min(o.clientX-this.dragStartX,80)),this.currentDragEl.style.transform=`translateX(${this.dragOffsetX}px)`))},i=o=>{if(o.isPrimary){if(this.pendingDragMessageId=null,this.currentDragEl){this.currentDragEl.style.transition="transform 0.15s ease",this.currentDragEl.style.transform="";let s=this.currentDragEl;setTimeout(()=>{s.style.willChange=""},160)}if(this.draggedMessageId&&this.dragOffsetX>60){let s=this.draggedMessageId;this.ngZone.run(()=>{let m=this.messages.find(f=>f.id===s);m&&!m.isDeleted&&(this.replyingTo=m)})}this.draggedMessageId=null,this.dragOffsetX=0,this.currentDragEl=null}};document.addEventListener("pointerdown",t,{passive:!0}),document.addEventListener("pointermove",e,{passive:!1}),document.addEventListener("pointerup",i,{passive:!0}),document.addEventListener("pointercancel",i,{passive:!0}),this.dragCleanupFns=[()=>document.removeEventListener("pointerdown",t),()=>document.removeEventListener("pointermove",e),()=>document.removeEventListener("pointerup",i),()=>document.removeEventListener("pointercancel",i)]})}onEscKey(){this.closeLightbox()}openLightbox(t,e,i){i.stopPropagation(),this.lightboxUrl=t,this.lightboxAlt=e}closeLightbox(){this.lightboxUrl=null,this.lightboxAlt=""}openPlayerPopup(t,e){e.stopPropagation(),t.senderId!==this.currentUser?.id&&(this.playerPopup={userId:t.senderId,name:t.senderName,avatarFileId:t.senderAvatarFileId,data:null,loading:!0},this.apiService.getUserProfile(t.senderId).subscribe({next:i=>{this.playerPopup&&(this.playerPopup.data=i,this.playerPopup.loading=!1)},error:()=>{this.playerPopup&&(this.playerPopup.loading=!1)}}))}closePlayerPopup(){this.playerPopup=null}goToDirectMessage(){if(!this.playerPopup)return;let t=this.playerPopup.userId;this.playerPopup=null,this.router.navigate(["/group-chat"],{queryParams:{dm:t}})}toggleReactionPicker(t,e){e.stopPropagation(),this.reactionPickerMessageId=this.reactionPickerMessageId===t?null:t}reactToMessage(t,e,i){i.stopPropagation();let o=e.trim();o&&(this.reactionPickerMessageId=null,this.chatService.reactToMessage(t,o).subscribe({error:s=>console.error("Error reacting:",s)}))}getReactionEntries(t){return t.reactions?Object.entries(t.reactions).filter(([,e])=>Object.keys(e).length>0).map(([e,i])=>({emoji:e,count:Object.keys(i).length,reacted:!!(this.currentUser?.id&&i[this.currentUser.id]!==void 0),tooltip:Object.values(i).join(", ")})):[]}onImageSelected(t){let e=t.target;if(!e.files?.length)return;let i=e.files[0];if(!i.type.startsWith("image/"))return;this.selectedImageFile=i;let o=new FileReader;o.onload=s=>{this.imagePreview=s.target?.result},o.readAsDataURL(i),e.value=""}clearImage(){this.selectedImageFile=null,this.imagePreview=null}sendImageMessage(){if(!this.selectedImageFile||this.isUploading)return;this.isUploading=!0;let t=this.selectedImageFile;this.clearImage(),setTimeout(()=>this.jumpToBottom(),50),this.chatService.sendImageMessage(t).subscribe({next:()=>{this.isUploading=!1,this.soundService.playSend(),setTimeout(()=>this.jumpToBottom(),50)},error:e=>{console.error("Error sending image:",e),this.isUploading=!1}})}getAttachmentImageUrl(t){return`${Be.apiBase}/drive/profile-picture/${t}`}isMyMessage(t){return t.senderId===this.currentUser?.id}getProfilePictureUrl(t){if(t)return`${Be.apiBase}/drive/profile-picture/${t}`}onAvatarError(t){this.failedAvatarIds.add(t)}showAvatar(t){return!!t&&!this.failedAvatarIds.has(t)}getSenderInitials(t){if(!t)return"?";let e=t.trim().split(/\s+/);return e.length===1?e[0].charAt(0).toUpperCase():(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase()}formatTimestamp(t){let e=new Date(t),i=Date.now()-e.getTime(),o=Math.floor(i/1e3),s=Math.floor(o/60),m=Math.floor(s/60),f=Math.floor(m/24),v=Math.floor(f/7),y=Math.floor(f/30),M=Math.floor(f/365);return o<30?"Just now":s<1?`${o}s ago`:s<60?`${s}m ago`:m<24?`${m}h ago`:f<7?f===1?"Yesterday":`${f} days ago`:v<4?v===1?"1 week ago":`${v} weeks ago`:y<12?y===1?"1 month ago":`${y}
104 months ago`:M===1?"1 year ago":`${M} years ago`}goBack(){this.location.back()}toggleMinimize(){this.isMinimized?(this.isMinimized=!1,setTimeout(()=>this.jumpToBottom(),50)):this.router.navigate(["/open-play"])}trackById(t,e){return e.id}scrollToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTo({top:t.scrollHeight,behavior:"smooth"}),this.showScrollToBottom=!1)}onScroll(t){let e=t.target;e.scrollTop<100&&this.loadMoreMessages(),this.showScrollToBottom=e.scrollHeight-e.scrollTop-e.clientHeight>200}updateOnlineStatus(t){let e=this.onlineUsers.findIndex(i=>i.userId===t.userId);t.isOnline?e===-1?this.onlineUsers.push(t):this.onlineUsers[e]=t:e!==-1&&this.onlineUsers.splice(e,1)}ngOnDestroy(){this.dragCleanupFns.forEach(t=>t()),clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.wsService.sendTyping(!1),this.wsService.leaveChat(),this.wsService.disconnect(),this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(e){return new(e||n)(ae(La),ae(Fa),ae(je),ae($l),ae(nt),ae(Jo),ae(fi),ae(Nn),ae(it))};static \u0275cmp=We({type:n,selectors:[["app-group-chat"]],viewQuery:function(e,i){if(e&1&&(oi(H9,5),oi(W9,5)),e&2){let o;ri(o=ai())&&(i.messagesContainerRef=o.first),ri(o=ai())&&(i.messageInputRef=o.first)}},hostBindings:function(e,i){e&1&&S("click",function(){return i.onDocumentClick()},!1,mo)("keydown.escape",function(){return i.onEscKey()},!1,mo)},inputs:{embedded:"embedded"},decls:4,vars:2,consts:[["chatBody",""],["messagesContainer",""],["messageInputEl",""],["class","chat-container",3,"minimized",4,"ngIf"],[4,"ngIf"],[1,"chat-container"],[1,"chat-header",3,"click"],["title","Go back",1,"back-btn",3,"click"],[1,"bi","bi-arrow-left"],[1,"bi","bi-chat-dots"],[1,"header-right"],["class","online-count",4,"ngIf"],[1,"minimize-btn",3,"click","title"],[1,"online-count"],[1,"bi","bi-circle-fill","online-indicator"],[4,"ngTemplateOutlet"],[1,"messages-container",3,"scroll"],["class","load-more-btn",3,"click",4,"ngIf"],["class","loading-indicator",4,"ngIf"],["class","message-wrapper",3,"my-message",4,"ngFor","ngForOf","ngForTrackBy"],["class","message-wrapper my-message",4,"ngIf"],["class","empty-state",4,"ngIf"],["class","scroll-to-bottom-btn","title","Scroll to bottom",3,"bottom","click",4,"ngIf"],["class","typing-indicator-wrapper",4,"ngIf"],["class","image-preview-bar",4,"ngIf"],["class","lightbox-overlay",3,"click",4,"ngIf"],["class","reply-bar",4,"ngIf"],["class","player-popup-overlay",3,"click",4,"ngIf"],["class","mention-dropdown",3,"click",4,"ngIf"],[1,"chat-input-container"],["title","Send image",1,"attach-btn"],[1,"bi","bi-image"],["type","file","accept","image/*",2,"display","none",3,"change"],["placeholder","Type a message...","rows","1",1,"message-input",3,"ngModelChange","keydown.enter","input","ngModel"],[1,"send-btn",3,"click","disabled"],[1,"bi","bi-send-fill"],[1,"load-more-btn",3,"click"],[1,"bi","bi-arrow-up-circle"],[1,"loading-indicator"],[1,"spinner"],[1,"loading-text"],[1,"message-wrapper"],["class","message-row",4,"ngIf"],[1,"message-row"],["class","avatar clickable-avatar","title","View profile",3,"src","alt","error","click",4,"ngIf"],["class","avatar-placeholder clickable-avatar","title","View profile",3,"click",4,"ngIf"],[1,"message-content"],[1,"sender-name","clickable-name",3,"click"],["class","message-unsent",4,"ngIf"],[1,"message-time"],["title","View profile",1,"avatar","clickable-avatar",3,"error","click","src","alt"],["t
104itle","View profile",1,"avatar-placeholder","clickable-avatar",3,"click"],[1,"message-unsent"],[1,"bi","bi-slash-circle"],[1,"message-bubble-wrapper"],["class","message-bubble",4,"ngIf"],["class","message-bubble image-bubble",4,"ngIf"],["title","React",1,"react-btn",3,"click"],[1,"bi","bi-emoji-smile"],["class","emoji-picker",3,"click",4,"ngIf"],["class","reactions-bar",4,"ngIf"],[1,"message-bubble"],["class","reply-preview",4,"ngIf"],[3,"innerHTML"],[1,"reply-preview"],[1,"reply-sender"],[1,"reply-content"],[1,"message-bubble","image-bubble"],["alt","Image","title","Click to view full size",1,"chat-image","clickable-image",3,"click","src"],[1,"emoji-picker",3,"click"],["class","emoji-btn",3,"click",4,"ngFor","ngForOf"],[1,"emoji-btn",3,"click"],[1,"reactions-bar"],["class","reaction-pill",3,"reacted","click",4,"ngFor","ngForOf"],[1,"reaction-pill",3,"click"],["class","message-unsent message-unsent-mine",4,"ngIf"],[1,"message-time",2,"text-align","right"],[1,"message-unsent","message-unsent-mine"],[1,"message-bubble-wrapper","my-bubble-wrapper"],["class","message-bubble my-bubble",4,"ngIf"],["class","message-bubble image-bubble my-bubble",4,"ngIf"],["title","Delete",1,"delete-btn",3,"click"],[1,"bi","bi-trash3"],["class","delete-confirm",3,"click",4,"ngIf"],["class","emoji-picker emoji-picker-right",3,"click",4,"ngIf"],["class","reactions-bar reactions-bar-right",4,"ngIf"],[1,"message-bubble","my-bubble"],["class","reply-preview reply-preview-mine",4,"ngIf"],[1,"reply-preview","reply-preview-mine"],[1,"message-bubble","image-bubble","my-bubble"],[1,"delete-confirm",3,"click"],[1,"delete-confirm-yes",3,"click"],[1,"delete-confirm-no",3,"click"],[1,"emoji-picker","emoji-picker-right",3,"click"],[1,"reactions-bar","reactions-bar-right"],[1,"message-wrapper","my-message"],[1,"message-bubble","my-bubble","uploading-bubble"],[1,"uploading-spinner"],[1,"empty-state"],[1,"bi","bi-chat-text"],["title","Scroll to bottom",1,"scroll-to-bottom-btn",3,"click"],[1,"bi","bi-chevron-double-down"],[1,"typing-indicator-wrapper"],[1,"typing-users-list"],["class","typing-user-chip",4,"ngFor","ngForOf"],[1,"typing-user-chip"],["class","typing-avatar",3,"src","alt","error",4,"ngIf"],["class","typing-avatar-placeholder",4,"ngIf"],[1,"typing-bubble"],[1,"typing-dots"],[1,"typing-name"],[1,"typing-avatar",3,"error","src","alt"],[1,"typing-avatar-placeholder"],[1,"image-preview-bar"],["alt","Preview",1,"image-preview-thumb",3,"src"],[1,"image-preview-actions"],["title","Cancel",1,"preview-cancel-btn",3,"click"],[1,"bi","bi-x-lg"],[1,"preview-send-btn",3,"click","disabled"],[1,"lightbox-overlay",3,"click"],["title","Close (Esc)",1,"lightbox-close",3,"click"],[1,"lightbox-img",3,"click","src","alt"],["class","lightbox-caption",4,"ngIf"],[1,"lightbox-caption"],[1,"reply-bar"],[1,"reply-bar-content"],[1,"bi","bi-reply-fill"],[1,"reply-bar-sender"],[1,"reply-bar-text"],["title","Cancel reply",1,"reply-bar-close",3,"click"],[1,"bi","bi-x"],[1,"player-popup-overlay",3,"click"],[1,"player-popup-card",3,"click"],[1,"player-popup-close",3,"click"],["class","player-popup-loading",4,"ngIf"],[1,"player-popup-loading"],[1,"loading-spinner-sm"],[1,"player-popup-avatar-wrap"],["class","player-popup-avatar",3,"src","alt","error",4,"ngIf"],["class","player-popup-avatar-placeholder",4,"ngIf"],[1,"player-popup-name"],["class","player-popup-username",4,"ngIf"],["class","player-popup-badge-row",4,"ngIf"],["class","player-popup-stats",4,"ngIf"],[1,"player-popup-dm-btn",3,"click"],[1,"bi","bi-chat-dots-fill"],[1,"player-popup-avatar",3,"error","src","alt"],[1,"player-popup-avatar-placeholder"],[1,"player-popup-username"],[1,"player-popup-badge-row"],[1,"player-popup-role-badge"],[1,"player-popup-stats"],["class","player-popup-stat",4,"ngIf"],[1,"player-popup-stat"],[1,"stat-label"],[1,"stat-value"],[1,"mention-dropdown",3,"click"],["class","mention-item",3,"click",4,"ngFor","ngForOf"],[1,"mention-item",3,"click"],["class","mention-avatar",3,"src","alt","error",4,"ngIf"],["class","mention-initials",4,"ngIf"],[1,"mention-name"],["class","mention-fullname",4,"ngIf"],[1,"mention-avatar",3,"error","src","alt"],[1,"mention-initials"],[1,"mention-fullname"]],template:function(e,i){e&1&&A(0,Y9,12,9,"div",3)(1,Z9,2,1,"ng-container",4)(2,XR,22,15,"ng-template",null,0,ln),e&2&&(x("ngIf",!i.embedded),d(),x("ngIf",i.embedded))},dependencies:[Ge,rt,$e,ua,Go,lt,at,st,ut],styles:[".chat-container[_ngcontent-%COMP%]{display:flex;flex-direction:column;position:fixed;bottom:20px;right:20px;width:420px;height:620px;background:var(--color-background);border-radius:12px;overflow:hidden;box-shadow:var(--shadow-lg);z-index:1000}.chat-container.minimized[_ngcontent-%COMP%]{height:auto;border-radius:12px}.chat-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:var(--color-surface);border-bottom:1px solid var(--color-border);-webkit-user-select:none;user-select:none}.chat-header-clickable[_ngcontent-%COMP%]{cursor:pointer;border-radius:12px}.chat-header-clickable[_ngcontent-%COMP%]:hover{background:var(--color-border)}.header-right[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.minimize-btn[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.85rem;transition:background .15s,color .15s}.minimize-btn[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 15%,transparent);color:var(--color-accent)}.back-btn[_ngcontent-%COMP%]{display:none;flex-shrink:0;width:32px;height:32px;border-radius:50%;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;align-items:center;justify-content:center;font-size:1rem;transition:background .15s,color .15s}.back-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.chat-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;font-size:1.25rem;color:var(--color-text);display:flex;align-items:center;gap:10px}.online-count[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:.9rem;color:var(--color-text-secondary)}.online-indicator[_ngcontent-%COMP%]{color:var(--color-success);font-size:.5rem;animation:_ngcontent-%COMP%_pulse 2s infinite}@keyframes _ngcontent-%COMP%_pulse{0%,to{opacity:1}50%{opacity:.5}}.messages-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;
104display:flex;flex-direction:column;gap:12px;background:var(--color-background);scrollbar-width:none;-ms-overflow-style:none}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.load-more-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:6px;align-self:center;padding:6px 18px;border:1px solid var(--color-border);border-radius:20px;background:var(--color-surface);color:var(--color-text-secondary);font-size:.8rem;cursor:pointer;transition:background .2s,color .2s,border-color .2s;margin-bottom:4px}.load-more-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text);border-color:var(--color-accent)}.loading-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 10px;animation:_ngcontent-%COMP%_slide-down .3s ease-out}.loading-text[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)}@keyframes _ngcontent-%COMP%_slide-down{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}.spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border);border-top:3px solid var(--color-accent);border-radius:50%;width:20px;height:20px;animation:_ngcontent-%COMP%_spin .8s linear infinite;flex-shrink:0}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.message-wrapper[_ngcontent-%COMP%]{width:100%;touch-action:pan-y}.message-row[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:flex-end;max-width:70%}.message-wrapper.my-message[_ngcontent-%COMP%] .message-row[_ngcontent-%COMP%]{margin-left:auto;flex-direction:row-reverse}.avatar[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0}.avatar-placeholder[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.875rem;flex-shrink:0;text-transform:uppercase}.message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;min-width:0}.sender-name[_ngcontent-%COMP%]{font-size:.75rem;font-weight:600;color:var(--color-text-secondary);padding-left:12px}
104.clickable-name[_ngcontent-%COMP%]{cursor:pointer}.clickable-name[_ngcontent-%COMP%]:hover{color:var(--color-accent);text-decoration:underline}.message-bubble-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;position:relative}.my-bubble-wrapper[_ngcontent-%COMP%]{flex-direction:row-reverse}.message-bubble[_ngcontent-%COMP%]{background:var(--color-surface);padding:10px 14px;border-radius:18px;overflow-wrap:break-word;word-break:break-word;white-space:pre-wrap;color:var(--color-text);box-shadow:var(--shadow-sm);max-width:100%;min-width:0}.my-bubble[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.image-bubble[_ngcontent-%COMP%]{padding:4px;background:transparent;box-shadow:none}.my-bubble.image-bubble[_ngcontent-%COMP%]{background:transparent}.chat-image[_ngcontent-%COMP%]{max-width:280px;max-height:300px;border-radius:14px;display:block;object-fit:cover;cursor:pointer}.react-btn[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.85rem;opacity:0;transition:opacity .15s,background .15s}.message-row[_ngcontent-%COMP%]:hover .react-btn[_ngcontent-%COMP%]{opacity:1}.react-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.delete-btn[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--color-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.8rem;opacity:0;transition:opacity .15s,color .15s}.message-row[_ngcontent-%COMP%]:hover .delete-btn[_ngcontent-%COMP%]{opacity:1}.delete-btn[_ngcontent-%COMP%]:hover{color:#ff6b6b}.message-unsent[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-style:italic;color:var(--color-text-muted);border:1px dashed var(--color-border);border-radius:14px;padding:6px 12px}.message-unsent-mine[_ngcontent-%COMP%]{margin-left:auto}.delete-confirm[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:6px 10px;font-size:.8rem;color:var(--color-text);box-shadow:var(--shadow-md);margin-left:auto;width:fit-content}.delete-confirm[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);white-space:nowrap}.delete-confirm-yes[_ngcontent-%COMP%]{padding:3px 10px;border-radius:8px;border:none;background:var(--color-danger, #e74c3c);color:#fff;font-size:.78rem;font-weight:600;cursor:pointer;transition:opacity .15s}.delete-confirm-yes[_ngcontent-%COMP%]:hover{opacity:.85}.delete-confirm-no[_ngcontent-%COMP%]{padding:3px 10px;border-radius:8px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:.78rem;cursor:pointer;transition:background .15s}.delete-confirm-no[_ngcontent-%COMP%]:hover{background:var(--color-border)}.emoji-picker[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:24px;padding:6px 10px;box-shadow:var(--shadow-md);max-width:100%}.emoji-picker-right[_ngcontent-%COMP%]{margin-left:auto}.emoji-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.25rem;cursor:pointer;padding:2px 4px;border-radius:8px;transition:transform .1s,background .1s;line-height:1}.emoji-btn[_ngcontent-%COMP%]:hover{transform:scale(1.3);background:var(--color-border)}.custom-emoji-input[_ngcontent-%COMP%]{width:36px;height:28px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-background);color:var(--color-text);font-size:1.1rem;text-align:center;outline:none;padding:0 2px;cursor:text}.custom-emoji-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);width:56px}.reactions-bar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.reactions-bar-right[_ngcontent-%COMP%]{justify-content:flex-end;padding-left:0;padding-right:4px}.reaction-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:2px 8px;font-size:.8rem;cursor:pointer;transition:background .15s,border-color .15s;-webkit-user-select:none;user-select:none}.reaction-pill[_ngcontent-%COMP%]:hover{background:var(--color-border)}.reaction-pill.reacted[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);border-color:var(--color-accent);color:var(--color-accent)}.reaction-pill[data-tooltip][_ngcontent-%COMP%]{position:relative}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:before{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:#000000d1;color:#fff;font-size:.7rem;padding:4px 8px;border-radius:6px;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none;transition:opacity .15s;z-index:200}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:hover:before{opacity:1}.uploading-bubble[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;animation:_ngcontent-%COMP%_ghost-pulse 1.4s ease-in-out infinite;opacity:.8}@keyframes _ngcontent-%COMP%_ghost-pulse{0%,to{opacity:.5}50%{opacity:.9}}.uploading-spinner[_ngcontent-%COMP%]{display:inline-block;width:14px;
104height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:_ngcontent-%COMP%_spin .75s linear infinite;flex-shrink:0}.message-time[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted);padding:0 12px}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:60px 20px;color:var(--color-text-secondary)}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:4rem;opacity:.3;margin-bottom:16px}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:1rem}.image-preview-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:10px 20px;background:var(--color-surface);border-top:1px solid var(--color-border)}.image-preview-thumb[_ngcontent-%COMP%]{height:64px;width:64px;object-fit:cover;border-radius:10px;flex-shrink:0}.image-preview-actions[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center}.preview-cancel-btn[_ngcontent-%COMP%]{padding:6px 12px;border-radius:20px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);cursor:pointer;font-size:.85rem;display:flex;align-items:center;gap:6px;transition:background .2s}.preview-cancel-btn[_ngcontent-%COMP%]:hover{background:var(--color-border)}.preview-send-btn[_ngcontent-%COMP%]{padding:6px 16px;border-radius:20px;border:none;background:var(--color-accent);color:#fff;cursor:pointer;font-size:.85rem;font-weight:600;display:flex;align-items:center;gap:6px;transition:background .2s}.preview-send-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark)}.preview-send-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.chat-input-container[_ngcontent-%COMP%]{display:flex;align-items:flex-end;gap:10px;padding:16px 20px;background:var(--color-surface);border-top:1px solid var(--color-border)}.attach-btn[_ngcontent-%COMP%]{flex-shrink:0;width:40px;height:40px;border-radius:50%;background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.1rem;transition:background .2s,color .2s}.attach-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.message-input[_ngcontent-%COMP%]{flex:1;padding:10px 16px;border:1px solid var(--color-border);border-radius:24px;background:var(--color-background);color:var(--color-text);font-size:.95rem;outline:none;transition:border-color .2s;resize:none;overflow-y:hidden;box-sizing:border-box;min-height:40px;max-height:120px;line-height:1.4;font-family:inherit}.message-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted);opacity:1}.message-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.send-btn[_ngcontent-%COMP%]{flex-shrink:0;width:44px;height:44px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.send-btn[_ngcontent-%COMP%]:hover:not(:disabled){transform:scale(1.1);background:var(--color-accent-dark)}.send-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.scroll-to-bottom-btn[_ngcontent-%COMP%]{position:absolute;bottom:90px;right:24px;width:40px;height:40px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.1rem;box-shadow:var(--shadow-md);z-index:10;transition:background .2s,transform .2s;animation:_ngcontent-%COMP%_fade-in .15s ease}.scroll-to-bottom-btn[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);transform:scale(1.1)}@keyframes _ngcontent-%COMP%_fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.typing-indicator-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;padding:6px 16px;background:var(--color-background);border-top:1px solid var(--color-border);min-height:42px;animation:_ngcontent-%COMP%_slide-down .2s ease-out}.typing-users-list[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.typing-user-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px}
104.typing-avatar[_ngcontent-%COMP%]{width:24px;height:24px;border-radius:50%;object-fit:cover;flex-shrink:0}.typing-avatar-placeholder[_ngcontent-%COMP%]{width:24px;height:24px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.6rem;font-weight:600;flex-shrink:0;text-transform:uppercase}.typing-bubble[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:var(--color-surface);border-radius:12px;padding:5px 8px;box-shadow:var(--shadow-sm)}.typing-dots[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--color-text-muted);animation:_ngcontent-%COMP%_typing-bounce 1.2s ease-in-out infinite}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_typing-bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}
104.typing-name[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);white-space:nowrap}@media (max-width: 768px){.chat-container[_ngcontent-%COMP%]{right:0;bottom:0;width:100%;height:100dvh;border-radius:0}.back-btn[_ngcontent-%COMP%]{display:flex}.message-row[_ngcontent-%COMP%]{max-width:88%}.chat-input-container[_ngcontent-%COMP%]{padding:12px}.avatar[_ngcontent-%COMP%], .avatar-placeholder[_ngcontent-%COMP%]{width:32px;height:32px;font-size:.75rem}.chat-image[_ngcontent-%COMP%]{max-width:200px;max-height:220px}.react-btn[_ngcontent-%COMP%], .delete-btn[_ngcontent-%COMP%]{opacity:1}}.lightbox-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:9999;background:#000000e0;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:_ngcontent-%COMP%_lightbox-fade-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-fade-in{0%{opacity:0}to{opacity:1}}.lightbox-img[_ngcontent-%COMP%]{max-width:95vw;max-height:90vh;object-fit:contain;border-radius:6px;box-shadow:0 8px 40px #0009;image-rendering:high-quality;animation:_ngcontent-%COMP%_lightbox-zoom-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-zoom-in{0%{transform:scale(.92);opacity:0}
104to{transform:scale(1);opacity:1}}.lightbox-caption[_ngcontent-%COMP%]{margin-top:12px;color:#ffffffd9;font-size:.9rem;text-align:center;max-width:80vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lightbox-close[_ngcontent-%COMP%]{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1rem;cursor:pointer;transition:background .15s;z-index:10000}.lightbox-close[_ngcontent-%COMP%]:hover{background:#ffffff4d}.clickable-avatar[_ngcontent-%COMP%], .clickable-image[_ngcontent-%COMP%]{cursor:zoom-in}.reply-preview[_ngcontent-%COMP%]{border-left:3px solid var(--color-accent);padding:4px 8px;margin-bottom:6px;border-radius:4px;background:var(--color-accent-bg-subtle);font-size:12px}.reply-preview-mine[_ngcontent-%COMP%]{background:#ffffff26;border-left-color:#ffffffb3}.reply-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);display:block}.reply-preview-mine[_ngcontent-%COMP%] .reply-sender[_ngcontent-%COMP%]{color:#ffffffe6}.reply-content[_ngcontent-%COMP%]{color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;max-width:240px}.reply-preview-mine[_ngcontent-%COMP%] .reply-content[_ngcontent-%COMP%]{color:#ffffffbf}.reply-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--color-accent-bg-subtle);border-left:3px solid var(--color-accent);border-top:1px solid var(--color-border);font-size:13px}.reply-bar-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;min-width:0;flex:1;color:var(--color-text-secondary)}.reply-bar-content[_ngcontent-%COMP%] .bi-reply-fill[_ngcontent-%COMP%]{color:var(--color-accent);flex-shrink:0}.reply-bar-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);flex-shrink:0}.reply-bar-text[_ngcontent-%COMP%]{color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reply-bar-close[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;color:var(--color-text-muted);font-size:1rem;padding:2px 4px;flex-shrink:0;transition:color .15s}.reply-bar-close[_ngcontent-%COMP%]:hover{color:var(--color-text)}.mention-dropdown[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-bottom:none;border-radius:10px 10px 0 0;box-shadow:var(--shadow-md);max-height:200px;overflow-y:auto}.mention-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;transition:background .15s}.mention-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.mention-avatar[_ngcontent-%COMP%], .mention-initials[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;flex-shrink:0}.mention-avatar[_ngcontent-%COMP%]{object-fit:cover}.mention-initials[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:var(--color-accent);color:#fff;font-size:11px;font-weight:600}.mention-name[_ngcontent-%COMP%]{font-weight:600;font-size:.875rem;color:var(--color-text)}.mention-fullname[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)} .mention{color:#1d6ef5;font-weight:600}.player-popup-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000073;z-index:9999;display:flex;align-items:center;justify-content:center;padding:1rem}.player-popup-card[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:16px;padding:1.5rem 1.25rem 1.25rem;width:100%;max-width:280px;box-shadow:var(--shadow-lg);position:relative;text-align:center}.player-popup-close[_ngcontent-%COMP%]{position:absolute;top:10px;right:10px;background:none;border:none;color:var(--color-text-muted);cursor:pointer;font-size:1.1rem;line-height:1;padding:4px 6px;border-radius:6px}.player-popup-close[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);color:var(--color-text)}.player-popup-avatar-wrap[_ngcontent-%COMP%]{width:72px;height:72px;border-radius:50%;overflow:hidden;margin:0 auto .75rem}
104.player-popup-avatar[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover}.player-popup-avatar-placeholder[_ngcontent-%COMP%]{width:72px;height:72px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1.5rem;font-weight:700;margin:0 auto .75rem}.player-popup-name[_ngcontent-%COMP%]{font-size:1rem;font-weight:700;color:var(--color-text);margin-bottom:.2rem}.player-popup-username[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);margin-bottom:.5rem}.player-popup-badge-row[_ngcontent-%COMP%]{margin-bottom:.5rem}.player-popup-role-badge[_ngcontent-%COMP%]{display:inline-block;font-size:.68rem;font-weight:600;padding:2px 8px;border-radius:20px;background:var(--color-accent-bg-subtle);color:var(--color-accent);text-transform:uppercase;letter-spacing:.5px}.player-popup-stats[_ngcontent-%COMP%]{display:flex;justify-content:center;gap:1.5rem;padding:.6rem 1rem;background:var(--color-surface);border-radius:10px;margin:.5rem 0 .75rem}.player-popup-stat[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:2px}.player-popup-stat[_ngcontent-%COMP%] .stat-label[_ngcontent-%COMP%]{font-size:.68rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.5px}.player-popup-stat[_ngcontent-%COMP%] .stat-value[_ngcontent-%COMP%]{font-size:.875rem;font-weight:600;color:var(--color-text)}.player-popup-dm-btn[_ngcontent-%COMP%]{width:100%;padding:.55rem 1rem;background:var(--color-accent);color:#fff;border:none;border-radius:8px;font-size:.875rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:.45rem;margin-top:.5rem;transition:opacity .15s}.player-popup-dm-btn[_ngcontent-%COMP%]:hover{opacity:.85}.player-popup-loading[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;min-height:100px}.loading-spinner-sm[_ngcontent-%COMP%]{width:26px;height:26px;border:3px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}"],data:{animation:[Tr("messageEnter",[Ar(":enter",[Gi({opacity:0,transform:"translateY(20px)"}),Ir("200ms ease-out",Gi({opacity:1,transform:"translateY(0)"}))])])]}})};var za=Ri(Ss());var ar=class n{constructor(t){this.http=t}apiUrl=`${Be.apiBase}/dm`;usersUrl=`${Be.apiBase}/users`;getAuthHeaders(){let t={"Content-Type":"application/json"},e=localStorage.getItem("pickle_jwt_token");if(e)try{let i=za.AES.decrypt(e,"picklehub_secret_key").toString(za.enc.Utf8);i&&(t.Authorization=`Bearer ${i}`)}catch{}return new si(t)}getFileAuthHeaders(){let t=new si,e=localStorage.getItem("pickle_jwt_token");if(e)try{let i=za.AES.decrypt(e,"picklehub_secret_key").toString(za.enc.Utf8);i&&(t=t.set("Authorization",`Bearer ${i}`))}catch{}return t}searchUsers(t,e=10){return this.http.get(`${this.usersUrl}/search`,{headers:this.getAuthHeaders(),params:{q:t,limit:e.toString()}})}getInbox(t=50){return this.http.get(`${this.apiUrl}/inbox`,{headers:this.getAuthHeaders(),params:{limit:t.toString()}})}getUnreadCount(){return this.http.get(`${this.apiUrl}/unread-count`,{headers:this.getAuthHeaders()})}startConversation(t){return this.http.post(`${this.apiUrl}/conversations`,{recipientId:t},{headers:this.getAuthHeaders()})}markAsRead(t){return this.http.post(`${this.apiUrl}/conversations/${t}/read`,{},{headers:this.getAuthHeaders()})}getMessages(t,e=20,i){let o={limit:e.toString()};return i&&(o.before=i),this.http.get(`${this.apiUrl}/conversations/${t}/messages`,{headers:this.getAuthHeaders(),params:o})}deleteMessage(t){return this.http.delete(`${this.apiUrl}/messages/${t}`,{headers:this.getAuthHeaders()})}reactToMessage(t,e){return this.http.post(`${this.apiUrl}/messages/${t}/react`,{emoji:e},{headers:this.getAuthHeaders()})}sendImageMessage(t,e){let i=new FormData;return i.append("file",e),this.http.post(`${this.apiUrl}/conversations/${t}/messages/image`,i,{headers:this.getFileAuthHeaders()})}static \u0275fac=function(e){return new(e||n)(on(Wi))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};var sx=Ri(Ac());var Ua=class n{constructor(t){this.authService=t}rxStomp;connectionStatus$=new fn(!1);dmMessages$=new Et;dmDeleted$=new Et;dmUpdated$=new Et;dmTyping$=new Et;inboxUpdate$=new Et;subs=[];connect(){if(this.rxStomp?.active)return;let t=this.authService.getToken();if(!t)return;this.rxStomp=new Xo;let e={webSocketFactory:()=>new sx.default(`${Be.apiBase.replace("/api","")}/ws-chat`),connectHeaders:{Authorization:`Bearer ${t}`},heartbeatIncoming:1e4,heartbeatOutgoing:1e4,reconnectDelay:5e3};this.rxStomp.configure(e),this.rxStomp.activate(),this.rxStomp.connectionState$.subscribe(i=>{let o=i===Tn.OPEN;
104this.connectionStatus$.next(o),o&&this.setupSubscriptions()})}setupSubscriptions(){this.subs.forEach(t=>t.unsubscribe()),this.subs=[],this.subs.push(this.rxStomp.watch("/user/queue/dm").pipe(On(t=>JSON.parse(t.body))).subscribe(t=>this.dmMessages$.next(t))),this.subs.push(this.rxStomp.watch("/user/queue/dm-deleted").pipe(On(t=>JSON.parse(t.body))).subscribe(t=>this.dmDeleted$.next(t))),this.subs.push(this.rxStomp.watch("/user/queue/dm-updated").pipe(On(t=>JSON.parse(t.body))).subscribe(t=>this.dmUpdated$.next(t))),this.subs.push(this.rxStomp.watch("/user/queue/dm-typing").pipe(On(t=>JSON.parse(t.body))).subscribe(t=>this.dmTyping$.next(t))),this.subs.push(this.rxStomp.watch("/user/queue/inbox-update").pipe(On(t=>JSON.parse(t.body))).subscribe(t=>this.inboxUpdate$.next(t)))}disconnect(){this.subs.forEach(t=>t.unsubscribe()),this.subs=[],this.rxStomp&&(this.rxStomp.deactivate(),this.connectionStatus$.next(!1))}sendMessage(t,e,i,o){this.rxStomp?.active&&this.rxStomp.publish({destination:`/app/dm.${t}.sendMessage`,body:JSON.stringify({content:e,messageType:"TEXT",replyToMessageId:i??null,mentionedUserIds:o??[]})})}sendTyping(t,e){this.rxStomp?.active&&this.rxStomp.publish({destination:`/app/dm.${t}.typing`,body:JSON.stringify({isTyping:e})})}sendRead(t){this.rxStomp?.active&&this.rxStomp.publish({destination:`/app/dm.${t}.read`,body:"{}"})}watchMessages(){return this.dmMessages$.asObservable()}watchDeleted(){return this.dmDeleted$.asObservable()}watchUpdated(){return this.dmUpdated$.asObservable()}watchTyping(){return this.dmTyping$.asObservable()}watchInboxUpdate(){return this.inboxUpdate$.asObservable()}getConnectionStatus(){return this.connectionStatus$.asObservable()}isConnected(){return this.connectionStatus$.value}ngOnDestroy(){this.disconnect()}static \u0275fac=function(e){return new(e||n)(on(je))};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};function ZR(n,t){if(n&1){let e=L();r(0,"button",8),S("click",function(){k(e);let o=h();return O(o.clearSearch())}),w(1,"i",9),a()}}function QR(n,t){n&1&&(r(0,"div",15),w(1,"span",16),r(2,"span"),l(3,"Searching\u2026"),a()())}function KR(n,t){if(n&1&&(r(0,"div",17),w(1,"i",18),r(2,"p"),l(3),a()()),n&2){let e=h(2);d(3),F('No players found for "',e.searchQuery,'"')}}function JR(n,t){if(n&1){let e=L();r(0,"img",29),S("error",function(){k(e);let o=h().$implicit,s=h(2);return O(s.onAvatarError(o.profilePictureUrl))}),a()}if(n&2){let e=h().$implicit,i=h(2);x("src",i.getAvatarUrl(e.profilePictureUrl),Ie)("alt",i.getUserDisplayName(e))}}function eB(n,t){if(n&1&&(r(0,"span",30),l(1),a()),n&2){let e=h().$implicit,i=h(2);d(),F(" ",i.getInitials(i.getUserDisplayName(e))," ")}}function tB(n,t){if(n&1){let e=L();r(0,"button",19),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.openFromSearch(o))}),r(1,"div",20),A(2,JR,1,2,"img",21)(3,eB,2,1,"span",22),a(),r(4,"div",23)(5,"div",24)(6,"span",25),l(7),a()(),r(8,"div",26)(9,"span",27),l(10),a(),w(11,"i",28),a()()()}if(n&2){let e=t.$implicit,i=h(2);d(2),x("ngIf",i.showAvatar(e.profilePictureUrl)),d(),x("ngIf",!i.showAvatar(e.profilePictureUrl)),d(4),R(i.getUserDisplayName(e)),d(3),R("@"+e.username)}}function nB(n,t){if(n&1&&(we(0),r(1,"div",10),w(2,"i",11),l(3," Search results "),a(),A(4,QR,4,0,"div",12)(5,KR,4,1,"div",13)(6,tB,12,4,"button",14),Pe()),n&2){let e=h();d(4),x("ngIf",e.isSearching),d(),x("ngIf",!e.isSearching&&e.searchResults.length===0),d(),x("ngForOf",e.searchResults)}}function iB(n,t){n&1&&(r(0,"div",15),w(1,"span",16),r(2,"span"),l(3,"Loading messages\u2026"),a()())}function oB(n,t){n&1&&(r(0,"div",17),w(1,"i",32),r(2,"p"),l(3,"No direct messages yet."),w(4,"br"),l(5,"Search for a player above to start a conversation."),a()())}function rB(n,t){if(n&1){let e=L();r(0,"img",29),S("error",function(){k(e);let o=h().$implicit,s=h(2);return O(s.onAvatarError(o.otherUserAvatarFileId))}),a()}if(n&2){let e=h().$implicit,i=h(2);x("src",i.getAvatarUrl(e.otherUserAvatarFileId),Ie)("alt",e.otherUserName)}}function aB(n,t){if(n&1&&(r(0,"span",30),l(1),a()),n&2){let e=h().$implicit,i=h(2);d(),F(" ",i.getInitials(e.otherUserName)," ")}}function sB(n,t){n&1&&w(0,"span",36)}function lB(n,t){if(n&1&&(r(0,"span",37),l(1),a()),n&2){let e=h().$implicit,i=h(2);d(),F(" ",i.formatLastTime(e.lastMessageAt)," ")}}function cB(n,t){if(n&1&&(r(0,"span",38),l(1),a()),n&2){let e=h().$implicit;d(),F(" ",e.unreadCount>99?"99+":e.unreadCount," ")}}function dB(n,t){if(n&1){let e=L();r(0,"button",19),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.openFromList(o))}),r(1,"div",20),A(2,rB,1,2,"img",21)(3,aB,2,1,"span",22)(4,sB,1,0,"span",33),a(),r(5,"div",23)(6,"div",24)(7,"span",25),l(8),a(),A(9,lB,2,1,"span",34),a(),r(10,"div",26)(11,"span",27),l(12),a(),A(13,cB,2,1,"span",35),a()()()}if(n&2){let e=t.$implicit,i=h(2);d(),te("dm-avatar-online",e.otherUserOnline),d(),x("ngIf",i.showAvatar(e.otherUserAvatarFileId)),d(),x("ngIf",!i.showAvatar(e.otherUserAvatarFileId)),d(),x("ngIf",e.otherUserOnline),d(4),R(e.otherUserName),d(),x("ngIf",e.lastMessageAt),d(3),F(" ",e.lastMessagePreview||"Say hi!"," "),d(),x("ngIf",e.unreadCount>0)}}function pB(n,t){if(n&1&&(we(0),A(1,iB,4,0,"div",12)(2,oB,6,0,"div",13)(3,dB,14,9,"button",31),Pe()),n&2){let e=h();d(),x("ngIf",e.isLoadingInbox),d(),x("ngIf",!e.isLoadingInbox&&e.conversations.length===0),d(),x("ngForOf",e.conversations)("ngForTrackBy",e.trackById)}}var nd=class n{constructor(t,e,i){this.dmService=t;this.dmWsService=e;this.authService=i}openConversation=new Or;conversations=[];searchQuery="";searchResults=[];isSearching=!1;isLoadingInbox=!1;searchInput$=new Et;destroy$=new Et;inboxSub=null;failedAvatarIds=new Set;ngOnInit(){this.loadInbox(),this.connectWs(),this.searchInput$.pipe(pa(300),Ul(),bt(this.destroy$)).subscribe(t=>this.performSearch(t))}loadInbox(){this.isLoadingInbox=!0,this.dmService.getInbox().pipe(bt(this.destroy$)).subscribe({next:t=>{this.conversations=t,this.isLoadingInbox=!1},error:()=>{this.isLoadingInbox=!1}})}connectWs(){this.dmWsService.connect(),this.inboxSub=this.dmWsService.watchInboxUpdate().pipe(bt(this.destroy$)).subscribe(t=>{let e=this.conversations.findIndex(i=>i.id===t.id);e!==-1?this.conversations[e]=t:this.conversations.unshift(t),this.conversations.sort((i,o)=>{let s=i.lastMessageAt?new Date(i.lastMessageAt).getTime():0;return(o.lastMessageAt?new Date(o.lastMessageAt).getTime():0)-s})})}get isSearchMode(){return this.searchQuery.trim().replace(/^@+/,"").length>=1}onSearchChange(t){this.searchQuery=t;let e=t.trim().replace(/^@+/,"");if(e.length<1){this.searchResults=[],this.isSearching=!1;return}this.isSearching=!0,this.searchInput$.next(e)}performSearch(t){this.dmService.searchUsers(t).pipe(bt(this.destroy$)).subscribe({next:e=>{this.searchResults=e,this.isSearching=!1},error:()=>{this.isSearching=!1}})}clearSearch(){this.searchQuery="",this.searchResults=[],this.isSearching=!1}openFromSearch(t){this.dmService.startConversation(t.id).pipe(bt(this.destroy$)).subscribe({next:e=>{this.clearSearch(),this.conversations.findIndex(o=>o.id===e.id)===-1&&this.conversations.unshift(e),this.emitOpen(e)},error:e=>console.error("Failed to start conversation:",e)})}openFromList(t){this.emitOpen(t)}emitOpen(t){this.openConversation.emit({conversationId:t.id,participantName:t.otherUserName,participantAvatarFileId:t.otherUserAvatarFileId,participantOnline:t.otherUserOnline,participantId:t.otherUserId})}getAvatarUrl(t){if(t)return`${Be.apiBase}/drive/profile-picture/${t}`}onAvatarError(t){this.failedAvatarIds.add(t)}showAvatar(t){return!!t&&!this.failedAvatarIds.has(t)}getInitials(t){if(!t)return"?";let e=t.trim().split(/\s+/);return e.length===1?e[0].charAt(0).toUpperCase():(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase()}formatLastTime(t){if(!t)return"";let e=new Date(t),i=Date.now()-e.getTime(),o=Math.floor(i/6e4),s=Math.floor(o/60),m=Math.floor(s/24);return o<1?"now":o<60?`${o}m`:s<24?`${s}h`:m===1?"Yesterday":m<7?e.toLocaleDateString("en-US",{weekday:"short"}):e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}getUserDisplayName(t){return t.nickname||t.fullname||t.username}trackById(t,e){return e.id}ngOnDestroy(){this.destroy$.next(),this.destroy$.complete(),this.inboxSub?.unsubscribe()}static \u0275fac=function(e){return new(e||n)(ae(ar),ae(Ua),ae(je))};static \u0275cmp=We({type:n,selectors:[["app-dm-inbox"]],outputs:{openConversation:"openConversation"},decls:9,vars:4,consts:[[1,"dm-inbox"],[1,"dm-search-wrap"],[1,"dm-search-box"],[1,"bi","bi-search","dm-search-icon"],["type","text","placeholder","Search players\u2026",1,"dm-search-input",3,"ngModelChange","ngModel"],["class","dm-search-clear",3,"click",4,"ngIf"],[1,"dm-conv-list"],[4,"ngIf"],[1,"dm-search-clear",3,"click"],[1,"bi","bi-x-lg"],[1,"dm-search-label"],[1,"bi","bi-search"],["class","dm-state-msg",4,"ngIf"],["class","dm-state-msg dm-empty",4,"ngIf"],["class","dm-conv-item",3,"click",4,"ngFor","ngForOf"],[1,"dm-state-msg"],[1,"spinner-border","spinner-border-sm"],[1,"dm-state-msg","dm-empty"],[1,"bi","bi-pers
104on-x"],[1,"dm-conv-item",3,"click"],[1,"dm-avatar"],[3,"src","alt","error",4,"ngIf"],["class","dm-initials",4,"ngIf"],[1,"dm-conv-body"],[1,"dm-conv-row-top"],[1,"dm-conv-name"],[1,"dm-conv-row-bot"],[1,"dm-conv-preview"],[1,"bi","bi-chat-dots","dm-start-chat-icon"],[3,"error","src","alt"],[1,"dm-initials"],["class","dm-conv-item",3,"click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"bi","bi-chat-square-dots"],["class","online-dot",4,"ngIf"],["class","dm-conv-time",4,"ngIf"],["class","dm-unread-badge",4,"ngIf"],[1,"online-dot"],[1,"dm-conv-time"],[1,"dm-unread-badge"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"div",2),w(3,"i",3),r(4,"input",4),S("ngModelChange",function(s){return i.onSearchChange(s)}),a(),A(5,ZR,2,0,"button",5),a()(),r(6,"div",6),A(7,nB,7,3,"ng-container",7)(8,pB,4,4,"ng-container",7),a()()),e&2&&(d(4),x("ngModel",i.searchQuery),d(),x("ngIf",i.searchQuery),d(2),x("ngIf",i.isSearchMode),d(),x("ngIf",!i.isSearchMode))},dependencies:[Ge,rt,$e,lt,at,st,ut],styles:[".dm-inbox[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%}.dm-search-wrap[_ngcontent-%COMP%]{padding:12px 12px 8px;flex-shrink:0}.dm-search-box[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center}.dm-search-icon[_ngcontent-%COMP%]{position:absolute;left:10px;color:var(--color-text-muted);font-size:.85rem;pointer-events:none}.dm-search-input[_ngcontent-%COMP%]{width:100%;padding:8px 32px;border:1px solid var(--color-border);border-radius:20px;background:var(--color-surface);color:var(--color-text);font-size:.9rem;outline:none;transition:border-color .15s}.dm-search-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.dm-search-clear[_ngcontent-%COMP%]{position:absolute;right:8px;background:none;border:none;color:var(--color-text-muted);cursor:pointer;padding:2px 4px;font-size:.75rem}.dm-search-label[_ngcontent-%COMP%]{padding:6px 14px 4px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);display:flex;align-items:center;gap:6px}.dm-conv-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;display:flex;flex-direction:column}.dm-state-msg[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:24px;color:var(--color-text-muted);font-size:.88rem}.dm-empty[_ngcontent-%COMP%]{flex-direction:column;text-align:center}.dm-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2rem;margin-bottom:8px;opacity:.4}.dm-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;line-height:1.5}.dm-conv-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;width:100%;padding:10px 14px;background:none;border:none;border-bottom:1px solid var(--color-border);cursor:pointer;text-align:left;transition:background .12s;color:var(--color-text)}.dm-conv-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.dm-avatar[_ngcontent-%COMP%]{position:relative;width:44px;height:44px;border-radius:50%;flex-shrink:0;overflow:hidden;background:var(--color-accent);display:flex;align-items:center;justify-content:center}.dm-avatar[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover;border-radius:50%}.dm-initials[_ngcontent-%COMP%]{color:#fff;font-weight:700;font-size:.85rem;-webkit-user-select:none;user-select:none}.online-dot[_ngcontent-%COMP%]{position:absolute;bottom:2px;right:2px;width:10px;height:10px;border-radius:50%;background:#22c55e;border:2px solid var(--color-surface)}.dm-conv-body[_ngcontent-%COMP%]{flex:1;min-width:0}.dm-conv-row-top[_ngcontent-%COMP%], .dm-conv-row-bot[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:4px}.dm-conv-name[_ngcontent-%COMP%]{font-weight:600;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--color-text)}.dm-conv-time[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);white-space:nowrap;flex-shrink:0}.dm-conv-preview[_ngcontent-%COMP%]{font-size:.82rem;color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1}.dm-unread-badge[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-size:.7rem;font-weight:700;border-radius:12px;padding:1px 6px;min-width:18px;text-align:center;flex-shrink:0}.dm-start-chat-icon[_ngcontent-%COMP%]{color:var(--color-accent);font-size:.9rem;flex-shrink:0}"]})};var mB=["messagesContainer"],gB=["messageInputEl"];function uB(n,t){if(n&1){let e=L();r(0,"button",22),S("click",function(){k(e);let o=h();
104return O(o.loadMoreMessages())}),w(1,"i",23),l(2," Load older messages "),a()}}function fB(n,t){n&1&&(r(0,"div",24),w(1,"div",25),r(2,"span",26),l(3,"Loading older messages\u2026"),a()())}function hB(n,t){if(n&1){let e=L();r(0,"img",36),S("error",function(){k(e);let o=h(2).$implicit,s=h();return O(s.onAvatarError(o.senderAvatarFileId))})("click",function(o){k(e);let s=h(2).$implicit,m=h();return O(m.openLightbox(m.getAvatarUrl(s.senderAvatarFileId),s.senderName,o))}),a()}if(n&2){let e=h(2).$implicit,i=h();x("src",i.getAvatarUrl(e.senderAvatarFileId),Ie)("alt",e.senderName)}}function _B(n,t){if(n&1&&(r(0,"div",37),l(1),a()),n&2){let e=h(2).$implicit,i=h();d(),F(" ",i.getInitials(e.senderName)," ")}}function xB(n,t){n&1&&(r(0,"div",38),w(1,"i",39),l(2," Message unsent "),a())}function vB(n,t){if(n&1&&(r(0,"div",50)(1,"span",51),l(2),a(),r(3,"span",52),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function bB(n,t){if(n&1&&(r(0,"div",47),A(1,vB,5,2,"div",48),w(2,"span",49),a()),n&2){let e=h(3).$implicit,i=h();d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function yB(n,t){if(n&1){let e=L();r(0,"div",53)(1,"img",54),S("click",function(o){k(e);let s=h(3).$implicit,m=h();return O(m.openLightbox(m.getAttachmentUrl(s.attachmentFileId),s.senderName+"'s photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h();d(),x("src",i.getAttachmentUrl(e.attachmentFileId),Ie)}}function CB(n,t){if(n&1){let e=L();r(0,"button",57),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h();return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function wB(n,t){if(n&1){let e=L();r(0,"div",55),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,CB,2,1,"button",56),a()}if(n&2){let e=h(4);d(),x("ngForOf",e.EMOJIS)}}function PB(n,t){if(n&1){let e=L();r(0,"span",60),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h();return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function MB(n,t){if(n&1&&(r(0,"div",58),A(1,PB,2,5,"span",59),a()),n&2){let e=h(3).$implicit,i=h();d(),x("ngForOf",i.getReactionEntries(e))}}function SB(n,t){if(n&1){let e=L();we(0),r(1,"div",40),A(2,bB,3,2,"div",41)(3,yB,2,1,"div",42),r(4,"button",43),S("click",function(o){k(e);let s=h(2).$implicit,m=h();return O(m.toggleReactionPicker(s.id,o))}),w(5,"i",44),a()(),A(6,wB,2,1,"div",45)(7,MB,2,1,"div",46),Pe()}if(n&2){let e=h(2).$implicit,i=h();d(2),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function kB(n,t){if(n&1&&(r(0,"div",29),A(1,hB,1,2,"img",30)(2,_B,2,1,"div",31),r(3,"div",32),A(4,xB,3,0,"div",33)(5,SB,8,4,"ng-container",34),r(6,"div",35),l(7),a()()()),n&2){let e=h().$implicit,i=h();d(),x("ngIf",i.showAvatar(e.senderAvatarFileId)),d(),x("ngIf",!i.showAvatar(e.senderAvatarFileId)),d(2),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function OB(n,t){n&1&&(r(0,"div",63),w(1,"i",39),l(2," Message unsent "),a())}function EB(n,t){if(n&1&&(r(0,"div",74)(1,"span",51),l(2),a(),r(3,"span",52),l(4),a()()),n&2){let e=h(4).$implicit;d(2),R(e.replyToSenderName),d(2),R(e.replyToContent)}}function TB(n,t){if(n&1&&(r(0,"div",72),A(1,EB,5,2,"div",73),w(2,"span",49),a()),n&2){let e=h(3).$implicit,i=h();d(),x("ngIf",e.replyToMessageId),d(),x("innerHTML",i.highlightMentions(e.content),Zt)}}function IB(n,t){if(n&1){let e=L();r(0,"div",75)(1,"img",54),S("click",function(o){k(e);let s=h(3).$implicit,m=h();return O(m.openLightbox(m.getAttachmentUrl(s.attachmentFileId),"My photo",o))}),a()()}if(n&2){let e=h(3).$implicit,i=h();d(),x("src",i.getAttachmentUrl(e.attachmentFileId),Ie)}}function AB(n,t){if(n&1){let e=L();r(0,"div",76),S("click",function(o){return k(e),O(o.stopPropagation())}),r(1,"span"),l(2,"Delete this message?"),a(),r(3,"button",77),S("click",function(){k(e);let o=h(4);return O(o.confirmDelete())}),l(4,"Delete"),a(),r(5,"button",78),S("click",function(){k(e);let o=h(4);return O(o.cancelDelete())}),l(6,"Cancel"),a()()}}function DB(n,t){if(n&1){let e=L();r(0,"button",57),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h();return O(f.reactToMessage(m.id,s,o))}),l(1),a()}if(n&2){let e=t.$implicit;d(),R(e)}}function RB(n,t){if(n&1){let e=L();r(0,"div",79),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,DB,2,1,"button",56),a()}if(n&2){let e=h(4);d(),x("ngForOf",e.EMOJIS)}}function BB(n,t){if(n&1){let e=L();r(0,"span",60),S("click",function(o){let s=k(e).$implicit,m=h(4).$implicit,f=h();return O(f.reactToMessage(m.id,s.emoji,o))}),l(1),a()}if(n&2){let e=t.$implicit;te("reacted",e.reacted),vn("data-tooltip",e.tooltip),d(),Se(" ",e.emoji," ",e.count," ")}}function NB(n,t){if(n&1&&(r(0,"div",80),A(1,BB,2,5,"span",59),a()),n&2){let e=h(3).$implicit,i=h();d(),x("ngForOf",i.getReactionEntries(e))}}function VB(n,t){if(n&1){let e=L();we(0),r(1,"div",64)(2,"button",43),S("click",function(o){k(e);let s=h(2).$implicit,m=h();return O(m.toggleReactionPicker(s.id,o))}),w(3,"i",44),a(),A(4,TB,3,2,"div",65)(5,IB,2,1,"div",66),r(6,"button",67),S("click",function(o){k(e);let s=h(2).$implicit,m=h();return O(m.requestDelete(s.id,o))}),w(7,"i",68),a()(),A(8,AB,7,0,"div",69)(9,RB,2,1,"div",70)(10,NB,2,1,"div",71),Pe()}if(n&2){let e=h(2).$implicit,i=h();d(4),x("ngIf",e.messageType==="TEXT"),d(),x("ngIf",e.messageType==="IMAGE"&&e.attachmentFileId),d(3),x("ngIf",i.pendingDeleteMessageId===e.id),d(),x("ngIf",i.reactionPickerMessageId===e.id),d(),x("ngIf",i.getReactionEntries(e).length>0)}}function LB(n,t){if(n&1&&(r(0,"div",29)(1,"div",32),A(2,OB,3,0,"div",61)(3,VB,11,5,"ng-container",34),r(4,"div",62),l(5),a()()()),n&2){let e=h().$implicit,i=h();d(2),x("ngIf",e.isDeleted),d(),x("ngIf",!e.isDeleted),d(2),R(i.formatTimestamp(e.timestamp))}}function FB(n,t){if(n&1&&(r(0,"div",27),A(1,kB,8,5,"div",28)(2,LB,6,3,"div",28),a()),n&2){let e=t.$implicit,i=h();te("my-message",i.isMyMessage(e)),x("@messageEnter",void 0),vn("data-message-id",e.id),d(),x("ngIf",!i.isMyMessage(e)),d(),x("ngIf",i.isMyMessage(e))}}function zB(n,t){n&1&&(r(0,"div",81)(1,"div",29)(2,"div",32)(3,"div",64)(4,"div",82),w(5,"span",83)(6,"i",17),r(7,"span"),l(8,"Uploading..."),a()()()()()())}function UB(n,t){n&1&&(r(0,"div",84),w(1,"i",85),r(2,"p"),l(3,"No messages yet. Say hello!"),a()())}function jB(n,t){if(n&1){let e=L();r(0,"button",86),S("click",function(){k(e);let o=h();return O(o.scrollToBottom())}),w(1,"i",87),a()}if(n&2){let e=h();le("bottom",(e.imagePreview?174:90)+(e.isTyping?42:0)+"px")}}function HB(n,t){if(n&1){let e=L();r(0,"img",96),S("error",function(){k(e);let o=h(2);return O(o.onAvatarError(o.participantAvatarFileId))}),a()}if(n&2){let e=h(2);x("src",e.getAvatarUrl(e.participantAvatarFileId),Ie)("alt",e.participantName)}}function WB(n,t){if(n&1&&(r(0,"div",97),l(1),a()),n&2){let e=h(2);d(),F(" ",e.getInitials(e.participantName)," ")}}function GB(n,t){if(n&1&&(r(0,"div",88)(1,"div",89)(2,"div",90),A(3,HB,1,2,"img",91)(4,WB,2,1,"div",92),r(5,"div",93)(6,"span",94),w(7,"span")(8,"span")(9,"span"),a()(),r(10,"span",95),l(11),a()()()()),n&2){let e=h();d(3),x("ngIf",e.showAvatar(e.participantAvatarFileId)),d(),x("ngIf",!e.showAvatar(e.participantAvatarFileId)),d(7),R(e.participantName)}}function qB(n,t){if(n&1){let e=L();r(0,"div",98),w(1,"img",99),r(2,"div",100)(3,"button",101),S("click",function(){k(e);let o=h();return O(o.clearImage())}),w(4,"i",102),a(),r(5,"button",103),S("click",function(){k(e);let o=h();return O(o.sendImageMessage())}),w(6,"i",21),l(7),a()()()}if(n&2){let e=h();d(),x("src",e.imagePreview,Ie),d(4),x("disabled",e.isUploading),d(2),F(" ",e.isUploading?"Sending...":"Send"," ")}}function $B(n,t){if(n&1&&(r(0,"div",108),l(1),a()),n&2){let e=h(2);d(),R(e.lightboxAlt)}}function YB(n,t){if(n&1){let e=L();r(0,"div",104),S("click",function(){k(e);let o=h();return O(o.closeLightbox())}),r(1,"button",105),S("click",function(){k(e);let o=h();return O(o.closeLightbox())}),w(2,"i",102),a(),r(3,"img",106),S("click",function(o){return k(e),O(o.stopPropagation())}),a(),A(4,$B,2,1,"div",107),a()}if(n&2){let e=h();d(3),x("src",e.lightboxUrl,Ie)("alt",e.lightboxAlt),d(),x("ngIf",e.lightboxAlt)}}function XB(n,t){if(n&1){let e=L();r(0,"div",109)(1,"div",110),w(2,"i",111),r(3,"span",112),l(4),a(),r(5,"span",113),l(6),_e(7,"slice"),a()(),r(8,"button",114),S("click",function(){k(e);let o=h();return O(o.replyingTo=null)}
104),w(9,"i",115),a()()}if(n&2){let e=h();d(4),R(e.replyingTo.senderName),d(2),R(Ho(7,2,e.replyingTo.content,0,80))}}function ZB(n,t){if(n&1){let e=L();r(0,"img",123),S("error",function(){k(e);let o=h().$implicit;return O(o.profilePictureUrl=void 0)}),a()}if(n&2){let e=h().$implicit,i=h(2);x("src",i.getAvatarUrl(e.profilePictureUrl),Ie)("alt",e.username)}}function QB(n,t){if(n&1&&(r(0,"span",124),l(1),a()),n&2){let e=h().$implicit,i=h(2);d(),R(i.getInitials(e.fullname||e.username))}}function KB(n,t){if(n&1&&(r(0,"span",125),l(1),a()),n&2){let e=h().$implicit;d(),R(e.fullname)}}function JB(n,t){if(n&1){let e=L();r(0,"div",118),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.selectMention(o))}),A(1,ZB,1,2,"img",119)(2,QB,2,1,"span",120),r(3,"span",121),l(4),a(),A(5,KB,2,1,"span",122),a()}if(n&2){let e=t.$implicit,i=h(2);d(),x("ngIf",i.getAvatarUrl(e.profilePictureUrl)),d(),x("ngIf",!i.getAvatarUrl(e.profilePictureUrl)),d(2),R(e.username),d(),x("ngIf",e.fullname)}}function eN(n,t){if(n&1){let e=L();r(0,"div",116),S("click",function(o){return k(e),O(o.stopPropagation())}),A(1,JB,6,4,"div",117),a()}if(n&2){let e=h();d(),x("ngForOf",e.mentionResults)}}var id=class n{constructor(t,e,i,o,s,m){this.dmService=t;this.dmWsService=e;this.authService=i;this.soundService=o;this.sanitizer=s;this.ngZone=m;this.currentUser=this.authService.getCurrentUser()}conversationId;participantName="";participantAvatarFileId;participantOnline=!1;participantId="";goBack=new Or;messagesContainerRef;messageInputRef;messages=[];messageContent="";currentUser;isLoadingMore=!1;hasMoreMessages=!0;showScrollToBottom=!1;oldestTimestamp=null;PAGE_SIZE=20;reactionPickerMessageId=null;EMOJIS=["\u{1F44D}","\u2764\uFE0F","\u{1F602}","\u{1F62E}","\u{1F622}","\u{1F621}","\u{1F525}","\u{1F389}","\u{1F44F}","\u{1F64F}","\u{1F4AF}","\u{1F60D}"];pendingDeleteMessageId=null;isTyping=!1;typingTimer=null;selectedImageFile=null;imagePreview=null;isUploading=!1;lightboxUrl=null;lightboxAlt="";failedAvatarIds=new Set;replyingTo=null;draggedMessageId=null;dragOffsetX=0;dragStartX=0;pendingDragMessageId=null;currentDragEl=null;dragCleanupFns=[];mentionDropdownVisible=!1;mentionResults=[];mentionedUserIds=[];mentionQuery="";mentionStartIndex=-1;mentionDebounceTimer=null;destroy$=new Et;ngOnInit(){this.loadInitialMessages(),this.connectWs(),this.markRead(),this.setupDragListeners()}ngOnChanges(t){t.conversationId&&!t.conversationId.firstChange&&(this.destroy$.next(),this.messages=[],this.messageContent="",this.isLoadingMore=!1,this.hasMoreMessages=!0,this.oldestTimestamp=null,this.showScrollToBottom=!1,this.reactionPickerMessageId=null,this.pendingDeleteMessageId=null,this.isTyping=!1,this.selectedImageFile=null,this.imagePreview=null,this.replyingTo=null,this.mentionedUserIds=[],this.mentionDropdownVisible=!1,this.loadInitialMessages(),this.connectWs(),this.markRead())}loadInitialMessages(){this.dmService.getMessages(this.conversationId,this.PAGE_SIZE).pipe(bt(this.destroy$)).subscribe({next:t=>{this.messages=t,this.hasMoreMessages=t.length>=this.PAGE_SIZE,this.oldestTimestamp=t.length>0?t[0].timestamp:null,setTimeout(()=>this.jumpToBottom(),100)},error:t=>console.error("Error loading DM messages:",t)})}connectWs(){this.dmWsService.connect(),this.dmWsService.watchMessages().pipe(bt(this.destroy$),xn(t=>t.conversationId===this.conversationId)).subscribe(t=>{if(!this.messages.some(i=>i.id===t.id)){this.messages.push(t),t.senderId!==this.currentUser?.id&&this.soundService.playReceive();let i=this.messagesContainerRef?.nativeElement;!i||i.scrollHeight-i.scrollTop-i.clientHeight<200?setTimeout(()=>this.scrollToBottom(),80):this.showScrollToBottom=!0,this.markRead()}}),this.dmWsService.watchDeleted().pipe(bt(this.destroy$),xn(t=>t.conversationId===this.conversationId)).subscribe(t=>{let e=this.messages.find(i=>i.id===t.id);e&&(e.isDeleted=!0)}),this.dmWsService.watchUpdated().pipe(bt(this.destroy$),xn(t=>t.conversationId===this.conversationId)).subscribe(t=>{let e=this.messages.findIndex(i=>i.id===t.id);e!==-1&&(this.messages[e]=Ye(ze({},this.messages[e]),{reactions:t.reactions}))}),this.dmWsService.watchTyping().pipe(bt(this.destroy$),xn(t=>t.conversationId===this.conversationId)).subscribe(t=>{this.isTyping=t.isTyping})}markRead(){this.dmService.markAsRead(this.conversationId).subscribe(),this.dmWsService.sendRead(this.conversationId)}onEnterKey(t){t.shiftKey||(t.preventDefault(),this.sendMessage())}onInputResize(t){let e=t.target;e.style.overflowY="auto",e.style.height="auto";let i=120,o=e.scrollHeight;e.style.height=Math.min(o,i)+"px",e.style.overflowY=o>i?"auto":"hidden"}sendMessage(){let t=this.messageContent.trim();if(t&&(clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.dmWsService.sendTyping(this.conversationId,!1),this.dmWsService.sendMessage(this.conversationId,t,this.replyingTo?.id,this.mentionedUserIds.length>0?[...this.mentionedUserIds]:void 0),this.soundService.playSend(),this.messageContent="",this.replyingTo=null,this.mentionedUserIds=[],this.mentionDropdownVisible=!1,this.messageInputRef)){let e=this.messageInputRef.nativeElement;e.style.height="auto",e.style.overflowY="hidden"}}onTyping(){this.dmWsService.sendTyping(this.conversationId,!0),clearTimeout(this.typingTimer),this.typingTimer=setTimeout(()=>{this.dmWsService.sendTyping(this.conversationId,!1)},1500)}loadMoreMessages(){if(this.isLoadingMore||!this.hasMoreMessages||!this.oldestTimestamp)return;this.isLoadingMore=!0;let t=this.messagesContainerRef?.nativeElement,e=t?t.scrollHeight:0;this.dmService.getMessages(this.conversationId,this.PAGE_SIZE,this.oldestTimestamp).pipe(bt(this.destroy$)).subscribe({next:i=>{i.length===0?this.hasMoreMessages=!1:(this.messages=[...i,...this.messages],this.oldestTimestamp=i[0].timestamp,this.hasMoreMessages=i.length>=this.PAGE_SIZE,requestAnimationFrame(()=>{t&&(t.scrollTop=t.scrollHeight-e)})),this.isLoadingMore=!1},error:()=>{this.isLoadingMore=!1}})}requestDelete(t,e){e.stopPropagation(),this.pendingDeleteMessageId=t,this.reactionPickerMessageId=null}cancelDelete(){this.pendingDeleteMessageId=null}confirmDelete(){let t=this.pendingDeleteMessageId;t&&(this.pendingDeleteMessageId=null,this.dmService.deleteMessage(t).subscribe({next:()=>{let e=this.messages.find(i=>i.id===t);e&&(e.isDeleted=!0)},error:e=>console.error("Error deleting DM:",e)}))}onDocumentClick(){this.reactionPickerMessageId=null,this.pendingDeleteMessageId=null,this.mentionDropdownVisible=!1}setupDragListeners(){this.ngZone.runOutsideAngular(()=>
104{let t=o=>{if(!o.isPrimary)return;let s=o.target.closest(".message-wrapper[data-message-id]");s&&(this.dragStartX=o.clientX,this.pendingDragMessageId=s.getAttribute("data-message-id"),this.currentDragEl=s)},e=o=>{o.isPrimary&&(this.pendingDragMessageId&&Math.abs(o.clientX-this.dragStartX)>10&&(this.draggedMessageId=this.pendingDragMessageId,this.pendingDragMessageId=null,this.currentDragEl&&(this.currentDragEl.style.willChange="transform",this.currentDragEl.style.transition="none")),!(!this.draggedMessageId||!this.currentDragEl)&&(o.preventDefault(),this.dragOffsetX=Math.max(0,Math.min(o.clientX-this.dragStartX,80)),this.currentDragEl.style.transform=`translateX(${this.dragOffsetX}px)`))},i=o=>{if(o.isPrimary){if(this.pendingDragMessageId=null,this.currentDragEl){this.currentDragEl.style.transition="transform 0.15s ease",this.currentDragEl.style.transform="";let s=this.currentDragEl;setTimeout(()=>{s.style.willChange=""},160)}if(this.draggedMessageId&&this.dragOffsetX>60){let s=this.draggedMessageId;this.ngZone.run(()=>{let m=this.messages.find(f=>f.id===s);m&&!m.isDeleted&&(this.replyingTo=m)})}this.draggedMessageId=null,this.dragOffsetX=0,this.currentDragEl=null}};document.addEventListener("pointerdown",t,{passive:!0}),document.addEventListener("pointermove",e,{passive:!1}),document.addEventListener("pointerup",i,{passive:!0}),document.addEventListener("pointercancel",i,{passive:!0}),this.dragCleanupFns=[()=>document.removeEventListener("pointerdown",t),()=>document.removeEventListener("pointermove",e),()=>document.removeEventListener("pointerup",i),()=>document.removeEventListener("pointercancel",i)]})}onMentionInput(t){let e=t.target,i=e.value,o=e.selectionStart??i.length,s=i.substring(0,o),m=s.match(/@(\w*)$/);m?(this.mentionQuery=m[1],this.mentionStartIndex=s.lastIndexOf("@"),clearTimeout(this.mentionDebounceTimer),this.mentionQuery.length>=2?this.mentionDebounceTimer=setTimeout(()=>this.fetchMentionResults(this.mentionQuery),300):this.mentionDropdownVisible=!1):(this.mentionDropdownVisible=!1,this.mentionResults=[])}fetchMentionResults(t){this.dmService.searchUsers(t,8).subscribe({next:e=>{this.mentionResults=e,this.mentionDropdownVisible=e.length>0},error:()=>{}})}selectMention(t){let e=this.messageInputRef?.nativeElement;if(!e)return;let i=this.messageContent.substring(0,this.mentionStartIndex),o=this.messageContent.substring(e.selectionStart??this.messageContent.length),s=`@${t.nickname||t.username} `;this.messageContent=i+s+o,this.mentionedUserIds.includes(t.id)||this.mentionedUserIds.push(t.id),this.mentionDropdownVisible=!1,this.mentionResults=[],setTimeout(()=>{e.focus();let m=(i+s).length;e.setSelectionRange(m,m)})}highlightMentions(t){let i=t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/@(\w+)/g,'<span class="mention">@$1</span>');return this.sanitizer.bypassSecurityTrustHtml(i)}onEscKey(){this.closeLightbox()}openLightbox(t,e,i){i.stopPropagation(),this.lightboxUrl=t,this.lightboxAlt=e}closeLightbox(){this.lightboxUrl=null,this.lightboxAlt=""}toggleReactionPicker(t,e){e.stopPropagation(),this.reactionPickerMessageId=this.reactionPickerMessageId===t?null:t}reactToMessage(t,e,i){i.stopPropagation();let o=e.trim();o&&(this.reactionPickerMessageId=null,this.dmService.reactToMessage(t,o).subscribe({error:s=>console.error("Error reacting:",s)}))}getReactionEntries(t){return t.reactions?Object.entries(t.reactions).filter(([,e])=>Object.keys(e).length>0).map(([e,i])=>({emoji:e,count:Object.keys(i).length,reacted:!!(this.currentUser?.id&&i[this.currentUser.id]!==void 0),tooltip:Object.values(i).join(", ")})):[]}onImageSelected(t){let e=t.target;if(!e.files?.length)return;let i=e.files[0];if(!i.type.startsWith("image/"))return;this.selectedImageFile=i;let o=new FileReader;o.onload=s=>{this.imagePreview=s.target?.result},o.readAsDataURL(i),e.value=""}clearImage(){this.selectedImageFile=null,this.imagePreview=null}sendImageMessage(){if(!this.selectedImageFile||this.isUploading)return;this.isUploading=!0;let t=this.selectedImageFile;this.clearImage(),setTimeout(()=>this.jumpToBottom(),50),this.dmService.sendImageMessage(this.conversationId,t).subscribe({next:()=>{this.isUploading=!1,this.soundService.playSend(),setTimeout(()=>this.jumpToBottom(),50)},error:e=>{console.error("Error sending image:",e),this.isUploading=!1}})}jumpToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTop=t.scrollHeight,this.showScrollToBottom=!1)}scrollToBottom(){let t=this.messagesContainerRef?.nativeElement;t&&(t.scrollTo({top:t.scrollHeight,behavior:"smooth"}),this.showScrollToBottom=!1)}onScroll(t){let e=t.target;e.scrollTop<100&&this.loadMoreMessages(),this.showScrollToBottom=e.scrollHeight-e.scrollTop-e.clientHeight>200}isMyMessage(t){return t.senderId===this.currentUser?.id}getAvatarUrl(t){if(t)return`${Be.apiBase}/drive/profile-picture/${t}`}getAttachmentUrl(t){return`${Be.apiBase}/drive/profile-picture/${t}`}onAvatarError(t){this.failedAvatarIds.add(t)}showAvatar(t){return!!t&&!this.failedAvatarIds.has(t)}getInitials(t){if(!t)return"?";let e=t.trim().split(/\s+/);return e.length===1?e[0].charAt(0).toUpperCase():(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase()}formatTimestamp(t){let e=new Date(t),i=Date.now()-e.getTime(),o=Math.floor(i/1e3),s=Math.floor(o/60),m=Math.floor(s/60),f=Math.floor(m/24);return o<30?"Just now":s<1?`${o}s ago`:s<60?`${s}m ago`:m<24?`${m}h ago`:f<7?f===1?"Yesterday":`${f} days ago`:e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}trackById(t,e){return e.id}ngOnDestroy(){this.dragCleanupFns.forEach(t=>t()),clearTimeout(this.typingTimer),clearTimeout(this.mentionDebounceTimer),this.dmWsService.sendTyping(this.conversationId,!1),this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(e){return new(e||n)(ae(ar),ae(Ua),ae(je),ae(Jo),ae(fi),ae(Nn))};static \u0275cmp=We({type:n,selectors:[["app-player-chat"]],viewQuery:function(e,i){if(e&1&&(oi(mB,5),oi(gB,5)),e&2){let o;
104ri(o=ai())&&(i.messagesContainerRef=o.first),ri(o=ai())&&(i.messageInputRef=o.first)}},hostBindings:function(e,i){e&1&&S("click",function(){return i.onDocumentClick()},!1,mo)("keydown.escape",function(){return i.onEscKey()},!1,mo)},inputs:{conversationId:"conversationId",participantName:"participantName",participantAvatarFileId:"participantAvatarFileId",participantOnline:"participantOnline",participantId:"participantId"},outputs:{goBack:"goBack"},features:[ma],decls:22,vars:14,consts:[["messagesContainer",""],["messageInputEl",""],[1,"pc-wrapper"],[1,"messages-container",3,"scroll"],["class","load-more-btn",3,"click",4,"ngIf"],["class","loading-indicator",4,"ngIf"],["class","message-wrapper",3,"my-message",4,"ngFor","ngForOf","ngForTrackBy"],["class","message-wrapper my-message",4,"ngIf"],["class","empty-state",4,"ngIf"],["class","scroll-to-bottom-btn","title","Scroll to bottom",3,"bottom","click",4,"ngIf"],["class","typing-indicator-wrapper",4,"ngIf"],["class","image-preview-bar",4,"ngIf"],["class","lightbox-overlay",3,"click",4,"ngIf"],["class","reply-bar",4,"ngIf"],["class","mention-dropdown",3,"click",4,"ngIf"],[1,"chat-input-container"],["title","Send image",1,"attach-btn"],[1,"bi","bi-image"],["type","file","accept","image/*",2,"display","none",3,"change"],["placeholder","Type a message...","rows","1",1,"message-input",3,"ngModelChange","keydown.enter","input","ngModel"],[1,"send-btn",3,"click","disabled"],[1,"bi","bi-send-fill"],[1,"load-more-btn",3,"click"],[1,"bi","bi-arrow-up-circle"],[1,"loading-indicator"],[1,"spinner"],[1,"loading-text"],[1,"message-wrapper"],["class","message-row",4,"ngIf"],[1,"message-row"],["class","avatar clickable-avatar","title","View photo",3,"src","alt","error","click",4,"ngIf"],["class","avatar-placeholder",4,"ngIf"],[1,"message-content"],["class","message-unsent",4,"ngIf"],[4,"ngIf"],[1,"message-time"],["title","View photo",1,"avatar","clickable-avatar",3,"error","click","src","alt"],[1,"avatar-placeholder"],[1,"message-unsent"],[1,"bi","bi-slash-circle"],[1,"message-bubble-wrapper"],["class","message-bubble",4,"ngIf"],["class","message-bubble image-bubble",4,"ngIf"],["title","React",1,"react-btn",3,"click"],[1,"bi","bi-emoji-smile"],["class","emoji-picker",3,"click",4,"ngIf"],["class","reactions-bar",4,"ngIf"],[1,"message-bubble"],["class","reply-preview",4,"ngIf"],[3,"innerHTML"],[1,"reply-preview"],[1,"reply-sender"],[1,"reply-content"],[1,"message-bubble","image-bubble"],["alt","Image","title","Click to view full size",1,"chat-image","clickable-image",3,"click","src"],[1,"emoji-picker",3,"click"],["class","emoji-btn",3,"click",4,"ngFor","ngForOf"],[1,"emoji-btn",3,"click"],[1,"reactions-bar"],["class","reaction-pill",3,"reacted","click",4,"ngFor","ngForOf"],[1,"reaction-pill",3,"click"],["class","message-unsent message-unsent-mine",4,"ngIf"],[1,"message-time",2,"text-align","right"],[1,"message-unsent","message-unsent-mine"],[1,"message-bubble-wrapper","my-bubble-wrapper"],["class","message-bubble my-bubble",4,"ngIf"],["class","message-bubble image-bubble my-bubble",4,"ngIf"],["title","Delete",1,"delete-btn",3,"click"],[1,"bi","bi-trash3"],["class","delete-confirm",3,"click",4,"ngIf"],["class","emoji-picker emoji-picker-right",3,"click",4,"ngIf"],["class","reactions-bar reactions-bar-right",4,"ngIf"],[1,"message-bubble","my-bubble"],["class","reply-preview reply-preview-mine",4,"ngIf"],[1,"reply-preview","reply-preview-mine"],[1,"message-bubble","image-bubble","my-bubble"],[1,"delete-confirm",3,"click"],[1,"delete-confirm-yes",3,"click"],[1,"delete-confirm-no",3,"click"],[1,"emoji-picker","emoji-picker-right",3,"click"],[1,"reactions-bar","reactions-bar-right"],[1,"message-wrapper","my-message"],[1,"message-bubble","my-bubble","uploading-bubble"],[1,"uploading-spinner"],[1,"empty-state"],[1,"bi","bi-chat-text"],["title","Scroll to bottom",1,"scroll-to-bottom-btn",3,"click"],[1,"bi","bi-chevron-double-down"],[1,"typing-indicator-wrapper"],[1,"typing-users-list"],[1,"typing-user-chip"],["class","typing-avatar",3,"src","alt","error",4,"ngIf"],["class","typing-avatar-placeholder",4,"ngIf"],[1,"typing-bubble"],[1,"typing-dots"],[1,"typing-name"],[1,"typing-avatar",3,"error","src","alt"],[1,"typing-avatar-placeholder"],[1,"image-preview-bar"],["alt","Preview",1,"image-preview-thumb",3,"src"],[1,"image-preview-actions"],["title","Cancel",1,"preview-cancel-btn",3,"click"],[1,"bi","bi-x-lg"],[1,"preview-send-btn",3,"click","disabled"],[1,"lightbox-overlay",3,"click"],["title","Close (Esc)",1,"lightbox-close",3,"click"],[1,"lightbox-img",3,"click","
104src","alt"],["class","lightbox-caption",4,"ngIf"],[1,"lightbox-caption"],[1,"reply-bar"],[1,"reply-bar-content"],[1,"bi","bi-reply-fill"],[1,"reply-bar-sender"],[1,"reply-bar-text"],["title","Cancel reply",1,"reply-bar-close",3,"click"],[1,"bi","bi-x"],[1,"mention-dropdown",3,"click"],["class","mention-item",3,"click",4,"ngFor","ngForOf"],[1,"mention-item",3,"click"],["class","mention-avatar",3,"src","alt","error",4,"ngIf"],["class","mention-initials",4,"ngIf"],[1,"mention-name"],["class","mention-fullname",4,"ngIf"],[1,"mention-avatar",3,"error","src","alt"],[1,"mention-initials"],[1,"mention-fullname"]],template:function(e,i){if(e&1){let o=L();r(0,"div",2)(1,"div",3,0),S("scroll",function(m){return k(o),O(i.onScroll(m))}),A(3,uB,3,0,"button",4)(4,fB,4,0,"div",5)(5,FB,3,6,"div",6)(6,zB,9,0,"div",7)(7,UB,4,0,"div",8),a(),A(8,jB,2,2,"button",9)(9,GB,12,3,"div",10)(10,qB,8,3,"div",11)(11,YB,5,3,"div",12)(12,XB,10,6,"div",13)(13,eN,2,1,"div",14),r(14,"div",15)(15,"label",16),w(16,"i",17),r(17,"input",18),S("change",function(m){return k(o),O(i.onImageSelected(m))}),a()(),r(18,"textarea",19,1),pe("ngModelChange",function(m){return k(o),de(i.messageContent,m)||(i.messageContent=m),O(m)}),S("keydown.enter",function(m){return k(o),O(i.onEnterKey(m))})("input",function(m){return k(o),i.onInputResize(m),i.onTyping(),O(i.onMentionInput(m))}),a(),r(20,"button",20),S("click",function(){return k(o),O(i.sendMessage())}),w(21,"i",21),a()()()}e&2&&(d(3),x("ngIf",i.hasMoreMessages&&!i.isLoadingMore),d(),x("ngIf",i.isLoadingMore),d(),x("ngForOf",i.messages)("ngForTrackBy",i.trackById),d(),x("ngIf",i.isUploading),d(),x("ngIf",i.messages.length===0),d(),x("ngIf",i.showScrollToBottom),d(),x("ngIf",i.isTyping),d(),x("ngIf",i.imagePreview),d(),x("ngIf",i.lightboxUrl),d(),x("ngIf",i.replyingTo),d(),x("ngIf",i.mentionDropdownVisible&&i.mentionResults.length>0),d(5),ce("ngModel",i.messageContent),d(2),x("disabled",!i.messageContent.trim()))},dependencies:[Ge,rt,$e,Go,lt,at,st,ut],styles:[".pc-wrapper[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;position:relative}.messages-container[_ngcontent-%COMP%]{flex:1;overflow-y:auto;overflow-x:hidden;padding:20px;display:flex;flex-direction:column;gap:12px;background:var(--color-background);scrollbar-width:none;-ms-overflow-style:none}.messages-container[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.load-more-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:6px;align-self:center;padding:6px 18px;border:1px solid var(--color-border);border-radius:20px;background:var(--color-surface);color:var(--color-text-secondary);font-size:.8rem;cursor:pointer;transition:background .2s,color .2s,border-color .2s;margin-bottom:4px}.load-more-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text);border-color:var(--color-accent)}.loading-indicator[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:8px;padding:12px 10px;animation:_ngcontent-%COMP%_slide-down .3s ease-out}.loading-text[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)}@keyframes _ngcontent-%COMP%_slide-down{0%{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:translateY(0)}}.spinner[_ngcontent-%COMP%]{border:3px solid var(--color-border);border-top:3px solid var(--color-accent);border-radius:50%;width:20px;height:20px;animation:_ngcontent-%COMP%_spin .8s linear infinite;flex-shrink:0}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.message-wrapper[_ngcontent-%COMP%]{width:100%;touch-action:pan-y}.message-row[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:flex-end;max-width:70%}.message-wrapper.my-message[_ngcontent-%COMP%] .message-row[_ngcontent-%COMP%]{margin-left:auto;flex-direction:row-reverse}.avatar[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;object-fit:cover;flex-shrink:0}.avatar-placeholder[_ngcontent-%COMP%]{width:40px;height:40px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-weight:600;font-size:.875rem;flex-shrink:0;text-transform:uppercase}.message-content[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px;min-width:0}.message-bubble-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;position:relative}.my-bubble-wrapper[_ngcontent-%COMP%]{flex-direction:row-reverse}.message-bubble[_ngcontent-%COMP%]{background:var(--color-surface);padding:10px 14px;border-radius:18px;word-wrap:break-word;word-break:break-word;color:var(--color-text);box-shadow:var(--shadow-sm);max-width:100%}.my-bubble[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.image-bubble[_ngcontent-%COMP%]{padding:4px;background:transparent;box-shadow:none}.my-bubble.image-bubble[_ngcontent-%COMP%]{background:transparent}.chat-image[_ngcontent-%COMP%]{max-width:280px;max-height:300px;border-radius:14px;display:block;object-fit:cover;cursor:pointer}.react-btn[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text-secondary);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.85rem;opacity:0;transition:opacity .15s,background .15s}.message-row[_ngcontent-%COMP%]:hover .react-btn[_ngcontent-%COMP%]{opacity:1}.react-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.delete-btn[_ngcontent-%COMP%]{flex-shrink:0;width:28px;height:28px;border-radius:50%;border:none;background:transparent;color:var(--color-text-muted);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.8rem;opacity:0;transition:opacity .15s,color .15s}.message-row[_ngcontent-%COMP%]:hover .delete-btn[_ngcontent-%COMP%]{opacity:1}.delete-btn[_ngcontent-%COMP%]:hover{color:#ff6b6b}
104.message-unsent[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;font-style:italic;color:var(--color-text-muted);border:1px dashed var(--color-border);border-radius:14px;padding:6px 12px}.message-unsent-mine[_ngcontent-%COMP%]{margin-left:auto}.delete-confirm[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:6px 10px;font-size:.8rem;color:var(--color-text);box-shadow:var(--shadow-md);margin-left:auto;width:fit-content}.delete-confirm[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary);white-space:nowrap}.delete-confirm-yes[_ngcontent-%COMP%]{padding:3px 10px;border-radius:8px;border:none;background:var(--color-danger, #e74c3c);color:#fff;font-size:.78rem;font-weight:600;cursor:pointer;transition:opacity .15s}.delete-confirm-yes[_ngcontent-%COMP%]:hover{opacity:.85}.delete-confirm-no[_ngcontent-%COMP%]{padding:3px 10px;border-radius:8px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);font-size:.78rem;cursor:pointer;transition:background .15s}.delete-confirm-no[_ngcontent-%COMP%]:hover{background:var(--color-border)}.emoji-picker[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:24px;padding:6px 10px;box-shadow:var(--shadow-md);max-width:100%}.emoji-picker-right[_ngcontent-%COMP%]{margin-left:auto}.emoji-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.25rem;cursor:pointer;padding:2px 4px;border-radius:8px;transition:transform .1s,background .1s;line-height:1}.emoji-btn[_ngcontent-%COMP%]:hover{transform:scale(1.3);background:var(--color-border)}.custom-emoji-input[_ngcontent-%COMP%]{width:36px;height:28px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-background);color:var(--color-text);font-size:1.1rem;text-align:center;outline:none;padding:0 2px;cursor:text}.custom-emoji-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent);width:56px}.reactions-bar[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px;padding-left:4px}.reactions-bar-right[_ngcontent-%COMP%]{justify-content:flex-end;padding-left:0;padding-right:4px}.reaction-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:3px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:12px;padding:2px 8px;font-size:.8rem;cursor:pointer;transition:background .15s,border-color .15s;-webkit-user-select:none;user-select:none}.reaction-pill[_ngcontent-%COMP%]:hover{background:var(--color-border)}.reaction-pill.reacted[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 15%,transparent);border-color:var(--color-accent);color:var(--color-accent)}.reaction-pill[data-tooltip][_ngcontent-%COMP%]{position:relative}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:before{content:attr(data-tooltip);position:absolute;bottom:calc(100% + 6px);left:50%;transform:translate(-50%);background:#000000d1;color:#fff;font-size:.7rem;padding:4px 8px;border-radius:6px;white-space:nowrap;max-width:220px;overflow:hidden;text-overflow:ellipsis;opacity:0;pointer-events:none;transition:opacity .15s;z-index:200}.reaction-pill[data-tooltip][_ngcontent-%COMP%]:hover:before{opacity:1}.uploading-bubble[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;animation:_ngcontent-%COMP%_ghost-pulse 1.4s ease-in-out infinite;opacity:.8}@keyframes _ngcontent-%COMP%_ghost-pulse{0%,to{opacity:.5}50%{opacity:.9}}.uploading-spinner[_ngcontent-%COMP%]{display:inline-block;width:14px;height:14px;border:2px solid rgba(255,255,255,.35);border-top-color:#fff;border-radius:50%;animation:_ngcontent-%COMP%_spin .75s linear infinite;flex-shrink:0}.message-time[_ngcontent-%COMP%]{font-size:.7rem;color:var(--color-text-muted);padding:0 12px}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:60px 20px;color:var(--color-text-secondary)}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:4rem;opacity:.3;margin-bottom:16px}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;font-size:1rem}
104.image-preview-bar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:10px 20px;background:var(--color-surface);border-top:1px solid var(--color-border)}.image-preview-thumb[_ngcontent-%COMP%]{height:64px;width:64px;object-fit:cover;border-radius:10px;flex-shrink:0}.image-preview-actions[_ngcontent-%COMP%]{display:flex;gap:8px;align-items:center}.preview-cancel-btn[_ngcontent-%COMP%]{padding:6px 12px;border-radius:20px;border:1px solid var(--color-border);background:transparent;color:var(--color-text-secondary);cursor:pointer;font-size:.85rem;display:flex;align-items:center;gap:6px;transition:background .2s}.preview-cancel-btn[_ngcontent-%COMP%]:hover{background:var(--color-border)}.preview-send-btn[_ngcontent-%COMP%]{padding:6px 16px;border-radius:20px;border:none;background:var(--color-accent);color:#fff;cursor:pointer;font-size:.85rem;font-weight:600;display:flex;align-items:center;gap:6px;transition:background .2s}.preview-send-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark)}.preview-send-btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.chat-input-container[_ngcontent-%COMP%]{display:flex;align-items:flex-end;gap:10px;padding:16px 20px;background:var(--color-surface);border-top:1px solid var(--color-border)}.attach-btn[_ngcontent-%COMP%]{flex-shrink:0;width:40px;height:40px;border-radius:50%;background:transparent;color:var(--color-text-secondary);border:1px solid var(--color-border);cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.1rem;transition:background .2s,color .2s}.attach-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.message-input[_ngcontent-%COMP%]{flex:1;padding:10px 16px;border:1px solid var(--color-border);border-radius:24px;background:var(--color-background);color:var(--color-text);font-size:.95rem;outline:none;transition:border-color .2s;resize:none;overflow-y:hidden;box-sizing:border-box;min-height:40px;max-height:120px;line-height:1.4;font-family:inherit}.message-input[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted);opacity:1}.message-input[_ngcontent-%COMP%]:focus{border-color:var(--color-accent)}.send-btn[_ngcontent-%COMP%]{flex-shrink:0;width:44px;height:44px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .2s}.send-btn[_ngcontent-%COMP%]:hover:not(:disabled){transform:scale(1.1);background:var(--color-accent-dark)}.send-btn[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.scroll-to-bottom-btn[_ngcontent-%COMP%]{position:absolute;bottom:90px;right:24px;width:40px;height:40px;border-radius:50%;background:var(--color-accent);color:#fff;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:1.1rem;box-shadow:var(--shadow-md);z-index:10;transition:background .2s,transform .2s;animation:_ngcontent-%COMP%_fade-in .15s ease}.scroll-to-bottom-btn[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark);transform:scale(1.1)}@keyframes _ngcontent-%COMP%_fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}.typing-indicator-wrapper[_ngcontent-%COMP%]{display:flex;align-items:center;padding:6px 16px;background:var(--color-background);border-top:1px solid var(--color-border);min-height:42px;animation:_ngcontent-%COMP%_slide-down .2s ease-out}.typing-users-list[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.typing-user-chip[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px}.typing-avatar[_ngcontent-%COMP%]{width:24px;height:24px;border-radius:50%;object-fit:cover;flex-shrink:0}.typing-avatar-placeholder[_ngcontent-%COMP%]{width:24px;height:24px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:.6rem;font-weight:600;flex-shrink:0;text-transform:uppercase}.typing-bubble[_ngcontent-%COMP%]{display:inline-flex;align-items:center;background:var(--color-surface);border-radius:12px;padding:5px 8px;box-shadow:var(--shadow-sm)}.typing-dots[_ngcontent-%COMP%]{display:flex;align-items:center;gap:3px}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--color-text-muted);animation:_ngcontent-%COMP%_typing-bounce 1.2s ease-in-out infinite}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(2){animation-delay:.2s}.typing-dots[_ngcontent-%COMP%] span[_ngcontent-%COMP%]:nth-child(3){animation-delay:.4s}@keyframes _ngcontent-%COMP%_typing-bounce{0%,60%,to{transform:translateY(0);opacity:.4}30%{transform:translateY(-4px);opacity:1}}
104.typing-name[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-secondary);white-space:nowrap}@media (max-width: 768px){.message-row[_ngcontent-%COMP%]{max-width:88%}.chat-input-container[_ngcontent-%COMP%]{padding:12px}.avatar[_ngcontent-%COMP%], .avatar-placeholder[_ngcontent-%COMP%]{width:32px;height:32px;font-size:.75rem}.chat-image[_ngcontent-%COMP%]{max-width:200px;max-height:220px}.react-btn[_ngcontent-%COMP%], .delete-btn[_ngcontent-%COMP%]{opacity:1}}.lightbox-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:9999;background:#000000e0;display:flex;flex-direction:column;align-items:center;justify-content:center;animation:_ngcontent-%COMP%_lightbox-fade-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-fade-in{0%{opacity:0}to{opacity:1}}.lightbox-img[_ngcontent-%COMP%]{max-width:95vw;max-height:90vh;object-fit:contain;border-radius:6px;box-shadow:0 8px 40px #0009;image-rendering:high-quality;animation:_ngcontent-%COMP%_lightbox-zoom-in .18s ease}@keyframes _ngcontent-%COMP%_lightbox-zoom-in{0%{transform:scale(.92);opacity:0}
104to{transform:scale(1);opacity:1}}.lightbox-caption[_ngcontent-%COMP%]{margin-top:12px;color:#ffffffd9;font-size:.9rem;text-align:center;max-width:80vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.lightbox-close[_ngcontent-%COMP%]{position:absolute;top:16px;right:16px;background:#ffffff26;border:none;color:#fff;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1rem;cursor:pointer;transition:background .15s;z-index:10000}.lightbox-close[_ngcontent-%COMP%]:hover{background:#ffffff4d}.clickable-avatar[_ngcontent-%COMP%], .clickable-image[_ngcontent-%COMP%]{cursor:zoom-in}.reply-preview[_ngcontent-%COMP%]{border-left:3px solid var(--color-accent);padding:4px 8px;margin-bottom:6px;border-radius:4px;background:var(--color-accent-bg-subtle);font-size:12px}.reply-preview-mine[_ngcontent-%COMP%]{background:#ffffff26;border-left-color:#ffffffb3}.reply-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);display:block}.reply-preview-mine[_ngcontent-%COMP%] .reply-sender[_ngcontent-%COMP%]{color:#ffffffe6}.reply-content[_ngcontent-%COMP%]{color:var(--color-text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:block;max-width:240px}.reply-preview-mine[_ngcontent-%COMP%] .reply-content[_ngcontent-%COMP%]{color:#ffffffbf}.reply-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:6px 12px;background:var(--color-accent-bg-subtle);border-left:3px solid var(--color-accent);border-top:1px solid var(--color-border);font-size:13px}.reply-bar-content[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;min-width:0;flex:1;color:var(--color-text-secondary)}.reply-bar-content[_ngcontent-%COMP%] .bi-reply-fill[_ngcontent-%COMP%]{color:var(--color-accent);flex-shrink:0}.reply-bar-sender[_ngcontent-%COMP%]{font-weight:600;color:var(--color-accent);flex-shrink:0}.reply-bar-text[_ngcontent-%COMP%]{color:var(--color-text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.reply-bar-close[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;color:var(--color-text-muted);font-size:1rem;padding:2px 4px;flex-shrink:0;transition:color .15s}.reply-bar-close[_ngcontent-%COMP%]:hover{color:var(--color-text)}.mention-dropdown[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-bottom:none;border-radius:10px 10px 0 0;box-shadow:var(--shadow-md);max-height:200px;overflow-y:auto}.mention-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;transition:background .15s}.mention-item[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.mention-avatar[_ngcontent-%COMP%], .mention-initials[_ngcontent-%COMP%]{width:28px;height:28px;border-radius:50%;flex-shrink:0}.mention-avatar[_ngcontent-%COMP%]{object-fit:cover}.mention-initials[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;background:var(--color-accent);color:#fff;font-size:11px;font-weight:600}.mention-name[_ngcontent-%COMP%]{font-weight:600;font-size:.875rem;color:var(--color-text)}.mention-fullname[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)} .mention{color:#1d6ef5;font-weight:600}"],data:{animation:[Tr("messageEnter",[Ar(":enter",[Gi({opacity:0,transform:"translateY(20px)"}),Ir("200ms ease-out",Gi({opacity:1,transform:"translateY(0)"}))])])]}})};function tN(n,t){if(n&1&&(r(0,"span",29),l(1),a()),n&2){let e=h(2);d(),F(" ",e.formatLastTime(e.globalPreview.lastTime)," ")}}function nN(n,t){n&1&&w(0,"span",30)}function iN(n,t){n&1&&(r(0,"div",31),w(1,"div",32),r(2,"span"),l(3,"Loading sessions\u2026"),a()())}function oN(n,t){n&1&&(r(0,"div",33),w(1,"i",34),r(2,"p"),l(3,"No sessions yet."),w(4,"br"),l(5,"Book or follow a session to see it here."),a()())}function rN(n,t){if(n&1&&(r(0,"span",29),l(1),a()),n&2){let e,i=h().$implicit,o=h(2);d(),F(" ",o.formatLastTime((e=o.sessionPreviews.get(i.id))==null?null:e.lastTime)," ")}}function aN(n,t){n&1&&w(0,"span",30)}function sN(n,t){if(n&1){let e=L();r(0,"button",15),S("click",function(){let o=k(e).$implicit,s=h(2);return O(s.openSessionChat(o))}),r(1,"div",35),w(2,"i",36),a(),r(3,"div",18)(4,"div",19)(5,"span",20),l(6),a(),A(7,rN,2,1,"span",21),a(),r(8,"div",22)(9,"span",23),l(10),a(),r(11,"span",37),l(12),a(),A(13,aN,1,0,"span",24),a()()()}if(n&2){let e,i=t.$implicit,o=h(2);te("active",(o.activeChatSession==null?null:o.activeChatSession.id)===i.id&&o.currentView==="session-chat")("unread",o.isSessionUnread(i.id))("item-ongoing",i.status==="ONGOING"),d(),te("avatar-ongoing",i.status==="ONGOING"),d(5),R(o.getSessionLabel(i)),d(),x("ngIf",(e=o.sessionPreviews.get(i.id))==null?null:e.lastTime),d(3),R(o.getSessionSub(i)),d(),Qt(o.getStatusClass(i.status)),d(),F(" ",i.status," "),d(),x("ngIf",o.isSessionUnread(i.id))}}function lN(n,t){if(n&1){let e=L();r(0,"div",14)(1,"button",15),S("click",function(){k(e);let o=h();return O(o.openGlobalChat())}),r(2,"div",16),w(3,"i",17),a(),r(4,"div",18)(5,"div",19)(6,"span",20),l(7,"Global Chat"),a(),A(8,tN,2,1,"span",21),a(),r(9,"div",22)(10,"span",23),l(11),a(),A(12,nN,1,0,"span",24),a()()(),r(13,"div",25),l(14,"My Sessions"),a(),A(15,iN,4,0,"div",26)(16,oN,6,0,"div",27)(17,sN,14,15,"button",28),a()}if(n&2){let e=h();d(),te("active",e.currentView==="global-chat")("unread",e.isGlobalUnread()),d(7),x("ngIf",e.globalPreview.lastTime),d(3),F(" ",e.globalPreview.lastText||"Community chat for all members"," "),d(),x("ngIf",e.isGlobalUnread()),d(3),x("ngIf",e.isLoadingSessions),d(),x("ngIf",!e.isLoadingSessions&&e.mySessions.length===0),d(),x("ngForOf",e.sortedSessions)("ngForTrackBy",e.trackBySessionId)}}function cN(n,t){if(n&1){let e=L();r(0,"div",38)(1,"app-dm-inbox",39),S("openConversation",function(o){k(e);let s=h();return O(s.onOpenConversation(o))}),a()()}}function dN(n,t){n&1&&(r(0,"p"),l(1,"Select a conversation to start chatting"),a())}function pN(n,t){n&1&&(r(0,"p"),l(1,"Search for a player or select a conversation"),a())}function mN(n,t){if(n&1&&(r(0,"div",40),w(1,"i",41),A(2,dN,2,0,"p",13)(3,pN,2,0,"p",13),a()),n&2){let e=h();d(2),x("ngIf",e.activeTab==="chats"),d(),x("ngIf",e.activeTab==="messages")}}function gN(n,t){n&1&&w(0,"app-group-chat",51),n&2&&x("embedded",!0)}function uN(n,t){if(n&1&&w(0,"app-session-chat",52),n&2){let e=h(2);x("embedded",!0)("session",e.activeChatSession)("onClose",e.goBackToList.bind(e))}}function fN(n,t){if(n&1){let e=L();we(0),r(1,"div",42)(2,"button",43),S("click",function(){k(e);let o=h();return O(o.goBackToList())}),w(3,"i",44),a(),r(4,"div",45),w(5,"i",46),r(6,"span",47),l(7),a()()(),r(8,"div",48),A(9,gN,1,1,"app-group-chat",49)(10,uN,1,3,"app-session-chat",50),a(),Pe()}if(n&2){let e=h();d(5),te("bi-globe2",e.currentView==="global-chat")("bi-people-fill",e.currentView==="session-chat"),d(2),R(e.panelTitle),d(2),x("ngIf",e.currentView==="global-chat"),d(),x("ngIf",e.currentView==="session-chat"&&e.activeChatSession)}}function hN(n,t){n&1&&w(0,"i",59)}function _N(n,t){if(n&1&&w(0,"img",60),n&2){let e=h(2);x("src",e.apiBase+"/drive/profile-picture/"+e.activeParticipantAvatarFileId,Ie)("alt",e.activeParticipantName)}}function xN(n,t){n&1&&(r(0,"span",61),w(1,"i",62),l(2," Online "),a())}function vN(n,t){if(n&1){let e=L();we(0),r(1,"div",42)(2,"button",43),S("click",function(){k(e);let o=h();return O(o.goBackToInbox())}),w(3,"i",44),a(),r(4,"div",53)(5,"div",54),A(6,hN,1,0,"i",55)(7,_N,1,2,"img",56),a(),r(8,"div")(9,"span",47),l(10),a(),A(11,xN,3,0,"span",57),a()()(),r(12,"div",48)(13,"a
104pp-player-chat",58),S("goBack",function(){k(e);let o=h();return O(o.goBackToInbox())}),a()(),Pe()}if(n&2){let e=h();d(6),x("ngIf",!e.activeParticipantAvatarFileId),d(),x("ngIf",e.activeParticipantAvatarFileId),d(3),R(e.activeParticipantName),d(),x("ngIf",e.activeParticipantOnline),d(2),x("conversationId",e.activeConversationId)("participantName",e.activeParticipantName)("participantAvatarFileId",e.activeParticipantAvatarFileId)("participantOnline",e.activeParticipantOnline)("participantId",e.activeParticipantId)}}var od=class n{constructor(t,e,i,o,s,m,f,v,y){this.apiService=t;this.groupChatService=e;this.sessionChatService=i;this.groupChatWsService=o;this.ngZone=s;this.authService=m;this.route=f;this.router=v;this.dmService=y}activeTab="chats";currentView="list";mySessions=[];activeChatSession=null;isLoadingSessions=!1;globalPreview={lastText:"",lastTime:null,sortKey:0};sessionPreviews=new Map;READ_KEY_GLOBAL="chat_read_global";sessionPollTimer=null;destroy$=new Et;globalWsSub=null;activeConversationId=null;activeParticipantName="";activeParticipantAvatarFileId;apiBase=Be.apiBase;activeParticipantOnline=!1;activeParticipantId="";ngOnInit(){this.loadMySessions(),this.loadGlobalPreview(),this.initGlobalChatWs(),this.startSessionPolling(),this.handleDmQueryParam()}handleDmQueryParam(){this.route.queryParams.pipe(bt(this.destroy$)).subscribe(t=>{let e=t.dm;e&&(this.router.navigate([],{relativeTo:this.route,queryParams:{},replaceUrl:!0}),this.activeTab="messages",this.dmService.startConversation(e).subscribe({next:i=>this.onOpenConversation({conversationId:i.id,participantName:i.otherUserName,participantAvatarFileId:i.otherUserAvatarFileId,participantOnline:i.otherUserOnline,participantId:i.otherUserId}),error:()=>{}}))})}setTab(t){this.activeTab=t,t==="chats"&&(this.activeConversationId=null)}onOpenConversation(t){this.activeConversationId=t.conversationId,this.activeParticipantName=t.participantName,this.activeParticipantAvatarFileId=t.participantAvatarFileId,this.activeParticipantOnline=t.participantOnline,this.activeParticipantId=t.participantId}goBackToInbox(){this.activeConversationId=null}initGlobalChatWs(){this.groupChatWsService.connect(),this.globalWsSub=this.groupChatWsService.watchMessages().pipe(bt(this.destroy$)).subscribe(t=>this.ngZone.run(()=>this.onGlobalMessage(t))),this.groupChatWsService.getConnectionStatus().pipe(iu(1),xn(t=>!t),pa(400),bt(this.destroy$)).subscribe(()=>this.groupChatWsService.connect())}onGlobalMessage(t){let e=new Date(t.timestamp).getTime();e>this.globalPreview.sortKey&&(this.globalPreview={lastText:this.messagePreviewText(t),lastTime:t.timestamp,sortKey:e});let i=this.authService.getCurrentUser()?.id;(t.senderId===i||this.currentView==="global-chat")&&this.markRead(this.READ_KEY_GLOBAL)}startSessionPolling(){this.stopSessionPolling(),this.sessionPollTimer=setInterval(()=>{this.currentView==="list"&&this.mySessions.length>0&&this.loadSessionPreviews()},6e4)}stopSessionPolling(){clearInterval(this.sessionPollTimer),this.sessionPollTimer=null}loadMySessions(){this.isLoadingSessions=!0,this.apiService.getMyOpenPlaySessions().pipe(bt(this.destroy$)).subscribe({next:t=>{this.mySessions=t,this.isLoadingSessions=!1,this.loadSessionPreviews()},error:()=>{this.isLoadingSessions=!1}})}loadGlobalPreview(){this.groupChatService.getMessages(1).subscribe({next:t=>{if(t.length>0){let e=t[0],i=new Date(e.timestamp).getTime();i>=this.globalPreview.sortKey&&(this.globalPreview={lastText:this.messagePreviewText(e),lastTime:e.timestamp,sortKey:i});let o=this.authService.getCurrentUser()?.id;e.senderId===o&&this.markRead(this.READ_KEY_GLOBAL)}},error:()=>{}})}loadSessionPreviews(){for(let t of this.mySessions)this.sessionChatService.getMessages(t.id,1).subscribe({next:e=>{if(e.length>0){let i=e[0];this.sessionPreviews.set(t.id,{lastText:this.messagePreviewText(i),lastTime:i.timestamp,sortKey:new Date(i.timestamp).getTime()})}else this.sessionPreviews.set(t.id,{lastText:"",lastTime:null,sortKey:0})},error:()=>{this.sessionPreviews.set(t.id,{lastText:"",lastTime:null,sortKey:0})}})}messagePreviewText(t){return t.isDeleted?"Message unsent":t.messageType==="IMAGE"?"\u{1F4F7} Image":t.content??""}get sortedSessions(){let t=new Date().toLocaleDateString("en-CA");return[...this.mySessions].sort((e,i)=>{let o=e.sessionDate,s=i.sessionDate,m=o===t?0:o>t?1:2,f=s===t?0:s>t?1:2;if(m!==f)return m-f;if(m===2){let y=s.localeCompare(o);return y!==0?y:e.startTime.localeCompare(i.startTime)}let v=o.localeCompare(s);return v!==0?v:e.startTime.localeCompare(i.startTime)})}sessionReadKey(t){return`chat_read_session_${t}`}isGlobalUnread(){if(!this.globalPreview.lastTime)return!1;let t=localStorage.getItem(this.READ_KEY_GLOBAL);return t?new Date(this.globalPreview.lastTime)>new Date(t):!0}isSessionUnread(t){let e=this.sessionPreviews.get(t);if(!e?.lastTime)return!1;let i=localStorage.getItem(this.sessionReadKey(t));return i?new Date(e.lastTime)>new Date(i):!0}markRead(t){localStorage.setItem(t,new Date().toISOString())}openGlobalChat(){this.markRead(this.READ_KEY_GLOBAL),this.currentView="global-chat"}openSessionChat(t){this.markRead(this.sessionReadKey(t.id)),this.activeChatSession=t,this.currentView="session-chat"}goBackToList(){this.currentView="list",this.activeChatSession=null,this.loadGlobalPreview(),this.loadSessionPreviews()}get panelTitle(){return this.currentView==="global-chat"?"Global Chat":this.currentView==="session-chat"&&this.activeChatSession?this.get
104SessionLabel(this.activeChatSession):""}getSessionLabel(t){let e=new Date(t.sessionDate+"T00:00:00").toLocaleDateString("en-US",{month:"short",day:"numeric"});return`${t.sessionType} \xB7 ${e}`}getSessionSub(t){let e=this.sessionPreviews.get(t.id);return e?.lastText?e.lastText:`${this.formatTime(t.startTime)} \u2013 ${this.formatTime(t.endTime)}`}formatTime(t){if(!t)return"";let[e,i]=t.split(":").map(Number),o=e>=12?"PM":"AM";return`${e%12||12}:${i.toString().padStart(2,"0")} ${o}`}formatLastTime(t){if(!t)return"";let e=new Date(t),o=new Date().getTime()-e.getTime(),s=Math.floor(o/6e4),m=Math.floor(s/60),f=Math.floor(m/24);return s<1?"now":s<60?`${s}m`:m<24?`${m}h`:f===1?"Yesterday":f<7?e.toLocaleDateString("en-US",{weekday:"short"}):e.toLocaleDateString("en-US",{month:"short",day:"numeric"})}getStatusClass(t){switch(t){case"UPCOMING":return"status-upcoming";case"ONGOING":return"status-ongoing";case"COMPLETED":return"status-completed";default:return""}}trackBySessionId(t,e){return e.id}ngOnDestroy(){this.stopSessionPolling(),this.globalWsSub?.unsubscribe(),this.currentView!=="global-chat"&&this.groupChatWsService.disconnect(),this.destroy$.next(),this.destroy$.complete()}static \u0275fac=function(e){return new(e||n)(ae(it),ae(Fa),ae(Ta),ae(La),ae(Nn),ae(je),ae(qo),ae(nt),ae(ar))};static \u0275cmp=We({type:n,selectors:[["app-inbox"]],decls:19,vars:11,consts:[[1,"messenger-layout"],[1,"messenger-sidebar"],[1,"sidebar-header"],[1,"sidebar-title"],[1,"bi","bi-chat-dots-fill"],[1,"sidebar-tabs"],[1,"sidebar-tab",3,"click"],[1,"bi","bi-people-fill"],[1,"bi","bi-chat-heart-fill"],["class","sidebar-list",4,"ngIf"],["class","sidebar-list dm-sidebar-list",4,"ngIf"],[1,"messenger-main"],["class","no-chat-placeholder",4,"ngIf"],[4,"ngIf"],[1,"sidebar-list"],[1,"chat-item",3,"click"],[1,"chat-item-avatar","avatar-global"],[1,"bi","bi-globe2"],[1,"chat-item-body"],[1,"chat-item-row-top"],[1,"chat-item-name"],["class","chat-item-time",4,"ngIf"],[1,"chat-item-row-bot"],[1,"chat-item-preview"],["class","unread-dot",4,"ngIf"],[1,"sidebar-section-label"],["class","sidebar-loading",4,"ngIf"],["class","sidebar-empty",4,"ngIf"],["class","chat-item",3,"active","unread","item-ongoing","click",4,"ngFor","ngForOf","ngForTrackBy"],[1,"chat-item-time"],[1,"unread-dot"],[1,"sidebar-loading"],[1,"sidebar-spinner"],[1,"sidebar-empty"],[1,"bi","bi-calendar-x"],[1,"chat-item-avatar","avatar-session"],[1,"bi","bi-calendar2-event"],[1,"status-pill"],[1,"sidebar-list","dm-sidebar-list"],[3,"openConversation"],[1,"no-chat-placeholder"],[1,"bi","bi-chat-square-dots"],[1,"panel-header"],["title","Back",1,"panel-back-btn",3,"click"],[1,"bi","bi-arrow-left"],[1,"panel-title-area"],[1,"bi"],[1,"panel-title-text"],[1,"panel-body"],[3,"embedded",4,"ngIf"],[3,"embedded","session","onClose",4,"ngIf"],[3,"embedded"],[3,"embedded","session","onClose"],[1,"panel-title-area","dm-header-info"],[1,"dm-header-avatar"],["class","bi bi-person-fill",4,"ngIf"],["class","dm-header-img",3,"src","alt",4,"ngIf"],["class","dm-online-label",4,"ngIf"],[3,"goBack","conversationId","participantName","participantAvatarFileId","participantOnline","participantId"],[1,"bi","bi-person-fill"],[1,"dm-header-img",3,"src","alt"],[1,"dm-online-label"],[1,"bi","bi-circle-fill"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"aside",1)(2,"div",2)(3,"h2",3),w(4,"i",4),l(5," Messages "),a(),r(6,"div",5)(7,"button",6),S("click",function(){return i.setTab("chats")}),w(8,"i",7),l(9," Chats "),a(),r(10,"button",6),S("click",function(){return i.setTab("messages")}),w(11,"i",8),l(12," Direct "),a()()(),A(13,lN,18,11,"div",9)(14,cN,2,0,"div",10),a(),r(15,"main",11),A(16,mN,4,2,"div",12)(17,fN,11,7,"ng-container",13)(18,vN,14,9,"ng-container",13),a()()),e&2&&(te("show-chat",i.currentView!=="list"||i.activeConversationId),d(7),te("active",i.activeTab==="chats"),d(3),te("active",i.activeTab==="messages"),d(3),x("ngIf",i.activeTab==="chats"),d(),x("ngIf",i.activeTab==="messages"),d(2),x("ngIf",i.activeTab==="chats"&&i.currentView==="list"||i.activeTab==="messages"&&!i.activeConversationId),d(),x("ngIf",i.activeTab==="chats"&&i.currentView!=="list"),d(),x("ngIf",i.activeTab==="messages"&&i.activeConversationId))},dependencies:[Ge,rt,$e,td,Ia,nd,id],styles:[".messenger-layout[_ngcontent-%COMP%]{display:flex;flex-direction:row;height:calc(100dvh - 130px);width:100%;overflow:hidden;background:var(--color-background)}.messenger-sidebar[_ngcontent-%COMP%]{width:320px;flex-shrink:0;display:flex;flex-direction:column;border-right:1px solid var(--color-border);background:var(--color-surface);overflow:hidden}.sidebar-header[_ngcontent-%COMP%]{padding:16px 20px;border-bottom:1px solid var(--color-border);flex-shrink:0}.sidebar-title[_ngcontent-%COMP%]{margin:0;font-size:1.2rem;font-weight:700;color:var(--color-text);display:flex;align-items:center;gap:10px}.sidebar-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.sidebar-list[_ngcontent-%COMP%]{flex:1;overflow-y:auto;display:flex;flex-direction:column}.dm-sidebar-list[_ngcontent-%COMP%]{overflow:hidden;padding:0}.sidebar-tabs[_ngcontent-%COMP%]{display:flex;gap:4px;margin-top:10px;background:var(--color-border);border-radius:10px;padding:3px}.sidebar-tab[_ngcontent-%COMP%]{flex:1;padding:6px 10px;border:none;border-radius:8px;background:transparent;color:var(--color-text-muted);font-size:.82rem;font-weight:600;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px;transition:background .15s,color .15s}.sidebar-tab.active[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-accent);box-shadow:0 1px 4px #0000001a}.dm-header-info[_ngcontent-%COMP%]{gap:10px}
104.dm-header-avatar[_ngcontent-%COMP%]{width:36px;height:36px;border-radius:50%;background:var(--color-accent);color:#fff;display:flex;align-items:center;justify-content:center;font-size:1rem;overflow:hidden;flex-shrink:0}.dm-header-img[_ngcontent-%COMP%]{width:100%;height:100%;object-fit:cover;border-radius:50%}.dm-online-label[_ngcontent-%COMP%]{font-size:.75rem;color:#22c55e;display:flex;align-items:center;gap:4px}.dm-online-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.5rem;color:#22c55e}.dm-sidebar-list[_ngcontent-%COMP%] app-dm-inbox[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.panel-body[_ngcontent-%COMP%] app-player-chat[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden}.sidebar-section-label[_ngcontent-%COMP%]{padding:10px 16px 4px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted)}.chat-item[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:10px 16px;background:transparent;border:none;border-bottom:1px solid var(--color-border);border-left:3px solid transparent;cursor:pointer;text-align:left;width:100%;transition:background .12s,border-left-color .12s;color:var(--color-text)}.chat-item[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-border) 50%,transparent)}.chat-item.active[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 10%,transparent);border-left-color:var(--color-accent)}.chat-item.unread[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--color-accent) 6%,var(--color-surface))}.chat-item.unread[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--color-accent) 12%,transparent)}.chat-item-avatar[_ngcontent-%COMP%]{width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.15rem;flex-shrink:0}.avatar-global[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.avatar-session[_ngcontent-%COMP%]{background:var(--color-border);color:var(--color-text-secondary)}.avatar-ongoing[_ngcontent-%COMP%]{background:#f59e0b;color:#fff;animation:_ngcontent-%COMP%_pulse-glow 1.5s ease-in-out infinite}@keyframes _ngcontent-%COMP%_pulse-glow{0%,to{box-shadow:0 0 #f59e0b66}50%{box-shadow:0 0 0 6px #f59e0b00}}.chat-item-body[_ngcontent-%COMP%]{flex:1;overflow:hidden;min-width:0;display:flex;flex-direction:column;gap:3px}.chat-item-row-top[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:6px}.chat-item-name[_ngcontent-%COMP%]{font-weight:500;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;color:var(--color-text);transition:font-weight .1s}.chat-item.unread[_ngcontent-%COMP%] .chat-item-name[_ngcontent-%COMP%]{font-weight:700}.chat-item-time[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-muted);white-space:nowrap;flex-shrink:0;transition:color .1s}.chat-item.unread[_ngcontent-%COMP%] .chat-item-time[_ngcontent-%COMP%]{color:var(--color-accent);font-weight:600}.chat-item-row-bot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px}.chat-item-preview[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0;transition:color .1s,font-weight .1s}.chat-item.unread[_ngcontent-%COMP%] .chat-item-preview[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-weight:600}.status-pill[_ngcontent-%COMP%]{font-size:.6rem;font-weight:700;padding:1px 6px;border-radius:999px;text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;flex-shrink:0}.status-upcoming[_ngcontent-%COMP%]{background:#dbeafe;color:#1d4ed8}.status-ongoing[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e}.status-completed[_ngcontent-%COMP%]{background:#f3f4f6;color:#6b7280}.unread-dot[_ngcontent-%COMP%]{display:inline-block;width:10px;height:10px;border-radius:50%;background:var(--color-accent);flex-shrink:0;animation:_ngcontent-%COMP%_dot-pop .3s cubic-bezier(.34,1.56,.64,1) both;box-shadow:0 0 0 2px color-mix(in srgb,var(--color-accent) 25%,transparent)}@keyframes _ngcontent-%COMP%_dot-pop{0%{transform:scale(0);opacity:0}
104to{transform:scale(1);opacity:1}}.sidebar-loading[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:20px 16px;color:var(--color-text-muted);font-size:.85rem}.sidebar-spinner[_ngcontent-%COMP%]{width:18px;height:18px;border:2px solid var(--color-border);border-top-color:var(--color-accent);border-radius:50%;animation:_ngcontent-%COMP%_spin .7s linear infinite;flex-shrink:0}@keyframes _ngcontent-%COMP%_spin{to{transform:rotate(360deg)}}.sidebar-empty[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;padding:32px 16px;color:var(--color-text-muted);text-align:center}.sidebar-empty[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2.5rem;margin-bottom:12px;opacity:.5}.sidebar-empty[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:.85rem;line-height:1.5;margin:0}.messenger-main[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0;background:var(--color-background)}.no-chat-placeholder[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;color:var(--color-text-muted)}.no-chat-placeholder[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:4rem;opacity:.2}.no-chat-placeholder[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{font-size:1rem;margin:0}.panel-header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px;padding:14px 20px;background:var(--color-surface);border-bottom:1px solid var(--color-border);flex-shrink:0}.panel-back-btn[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:50%;border:none;background:transparent;color:var(--color-text-secondary);cursor:pointer;font-size:1rem;transition:background .15s,color .15s;flex-shrink:0}.panel-back-btn[_ngcontent-%COMP%]:hover{background:var(--color-border);color:var(--color-text)}.panel-title-area[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;overflow:hidden;flex:1}.panel-title-area[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--color-accent);flex-shrink:0}.panel-title-text[_ngcontent-%COMP%]{font-weight:600;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--color-text)}.panel-body[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;position:relative}.panel-body[_ngcontent-%COMP%] app-group-chat[_ngcontent-%COMP%], .panel-body[_ngcontent-%COMP%] app-session-chat[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;overflow:hidden;position:relative}@media (min-width: 769px){.panel-back-btn[_ngcontent-%COMP%]{opacity:.55}.panel-back-btn[_ngcontent-%COMP%]:hover{opacity:1}}@media (max-width: 768px){.messenger-layout[_ngcontent-%COMP%]{flex-direction:column;height:calc(100dvh - 130px - env(safe-area-inset-bottom))}.messenger-sidebar[_ngcontent-%COMP%]{width:100%;flex:1;border-right:none;height:100%}.messenger-main[_ngcontent-%COMP%]{display:none;flex:1;height:100%}.messenger-layout.show-chat[_ngcontent-%COMP%] .messenger-sidebar[_ngcontent-%COMP%]{display:none}.messenger-layout.show-chat[_ngcontent-%COMP%] .messenger-main[_ngcontent-%COMP%]{display:flex}.panel-back-btn[_ngcontent-%COMP%]{opacity:1}}"]})};function il(n){return n+.5|0}var sr=(n,t,e)=>Math.max(Math.min(n,e),t);function tl(n){return sr(il(n*2.55),0,255)}function lr(n){return sr(il(n*255),0,255)}function wo(n){return sr(il(n/2.55)/100,0,1)}function cx(n){return sr(il(n*100),0,100)}var Mi={0:0,1:1,2:2,3:3,4:4,5:5,6:6,7:7,8:8,9:9,A:10,B:11,C:12,D:13,E:14,F:15,a:10,b:11,c:12,d:13,e:14,f:15},rm=[..."0123456789ABCDEF"],bN=n=>rm[n&15],yN=n=>rm[(n&240)>>4]+rm[n&15],rd=n=>(n&240)>>4===(n&15),CN=n=>rd(n.r)&&rd(n.g)&&rd(n.b)&&rd(n.a);function wN(n){var t=n.length,e;return n[0]==="#"&&(t===4||t===5?e={r:255&Mi[n[1]]*17,g:255&Mi[n[2]]*1
vendor: 19,288 bytes, line 104
1047,b:255&Mi[n[3]]*17,a:t===5?Mi[n[4]]*17:255}:(t===7||t===9)&&(e={r:Mi[n[1]]<<4|Mi[n[2]],g:Mi[n[3]]<<4|Mi[n[4]],b:Mi[n[5]]<<4|Mi[n[6]],a:t===9?Mi[n[7]]<<4|Mi[n[8]]:255})),e}var PN=(n,t)=>n<255?t(n):"";function MN(n){var t=CN(n)?bN:yN;return n?"#"+t(n.r)+t(n.g)+t(n.b)+PN(n.a,t):void 0}var SN=/^(hsla?|hwb|hsv)\(\s*([-+.e\d]+)(?:deg)?[\s,]+([-+.e\d]+)%[\s,]+([-+.e\d]+)%(?:[\s,]+([-+.e\d]+)(%)?)?\s*\)$/;function gx(n,t,e){let i=t*Math.min(e,1-e),o=(s,m=(s+n/30)%12)=>e-i*Math.max(Math.min(m-3,9-m,1),-1);return[o(0),o(8),o(4)]}function kN(n,t,e){let i=(o,s=(o+n/60)%6)=>e-e*t*Math.max(Math.min(s,4-s,1),0);return[i(5),i(3),i(1)]}function ON(n,t,e){let i=gx(n,1,.5),o;for(t+e>1&&(o=1/(t+e),t*=o,e*=o),o=0;o<3;o++)i[o]*=1-t-e,i[o]+=t;return i}function EN(n,t,e,i,o){return n===o?(t-e)/i+(t<e?6:0):t===o?(e-n)/i+2:(n-t)/i+4}function am(n){let e=n.r/255,i=n.g/255,o=n.b/255,s=Math.max(e,i,o),m=Math.min(e,i,o),f=(s+m)/2,v,y,M;return s!==m&&(M=s-m,y=f>.5?M/(2-s-m):M/(s+m),v=EN(e,i,o,M,s),v=v*60+.5),[v|0,y||0,f]}function sm(n,t,e,i){return(Array.isArray(t)?n(t[0],t[1],t[2]):n(t,e,i)).map(lr)}function lm(n,t,e){return sm(gx,n,t,e)}function TN(n,t,e){return sm(ON,n,t,e)}function IN(n,t,e){return sm(kN,n,t,e)}function ux(n){return(n%360+360)%360}function AN(n){let t=SN.exec(n),e=255,i;if(!t)return;t[5]!==i&&(e=t[6]?tl(+t[5]):lr(+t[5]));let o=ux(+t[2]),s=+t[3]/100,m=+t[4]/100;return t[1]==="hwb"?i=TN(o,s,m):t[1]==="hsv"?i=IN(o,s,m):i=lm(o,s,m),{r:i[0],g:i[1],b:i[2],a:e}}function DN(n,t){var e=am(n);e[0]=ux(e[0]+t),e=lm(e),n.r=e[0],n.g=e[1],n.b=e[2]}function RN(n){if(!n)return;let t=am(n),e=t[0],i=cx(t[1]),o=cx(t[2]);return n.a<255?`hsla(${e}, ${i}%, ${o}%, ${wo(n.a)})`:`hsl(${e}, ${i}%, ${o}%)`}var dx={x:"dark",Z:"light",Y:"re",X:"blu",W:"gr",V:"medium",U:"slate",A:"ee",T:"ol",S:"or",B:"ra",C:"lateg",D:"ights",R:"in",Q:"turquois",E:"hi",P:"ro",O:"al",N:"le",M:"de",L:"yello",F:"en",K:"ch",G:"arks",H:"ea",I:"ightg",J:"wh"},px={OiceXe:"f0f8ff",antiquewEte:"faebd7",aqua:"ffff",aquamarRe:"7fffd4",azuY:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"0",blanKedOmond:"ffebcd",Xe:"ff",XeviTet:"8a2be2",bPwn:"a52a2a",burlywood:"deb887",caMtXe:"5f9ea0",KartYuse:"7fff00",KocTate:"d2691e",cSO:"ff7f50",cSnflowerXe:"6495ed",cSnsilk:"fff8dc",crimson:"dc143c",cyan:"ffff",xXe:"8b",xcyan:"8b8b",xgTMnPd:"b8860b",xWay:"a9a9a9",xgYF:"6400",xgYy:"a9a9a9",xkhaki:"bdb76b",xmagFta:"8b008b",xTivegYF:"556b2f",xSange:"ff8c00",xScEd:"9932cc",xYd:"8b0000",xsOmon:"e9967a",xsHgYF:"8fbc8f",xUXe:"483d8b",xUWay:"2f4f4f",xUgYy:"2f4f4f",xQe:"ced1",xviTet:"9400d3",dAppRk:"ff1493",dApskyXe:"bfff",dimWay:"696969",dimgYy:"696969",dodgerXe:"1e90ff",fiYbrick:"b22222",flSOwEte:"fffaf0",foYstWAn:"228b22",fuKsia:"ff00ff",gaRsbSo:"dcdcdc",ghostwEte:"f8f8ff",gTd:"ffd700",gTMnPd:"daa520",Way:"808080",gYF:"8000",gYFLw:"adff2f",gYy:"808080",honeyMw:"f0fff0",hotpRk:"ff69b4",RdianYd:"cd5c5c",Rdigo:"4b0082",ivSy:"fffff0",khaki:"f0e68c",lavFMr:"e6e6fa",lavFMrXsh:"fff0f5",lawngYF:"7cfc00",NmoncEffon:"fffacd",ZXe:"add8e6",ZcSO:"f08080",Zcyan:"e0ffff",ZgTMnPdLw:"fafad2",ZWay:"d3d3d3",ZgYF:"90ee90",ZgYy:"d3d3d3",ZpRk:"ffb6c1",ZsOmon:"ffa07a",ZsHgYF:"20b2aa",ZskyXe:"87cefa",ZUWay:"778899",ZUgYy:"778899",ZstAlXe:"b0c4de",ZLw:"ffffe0",lime:"ff00",limegYF:"32cd32",lRF:"faf0e6",magFta:"ff00ff",maPon:"800000",VaquamarRe:"66cdaa",VXe:"cd",VScEd:"ba55d3",VpurpN:"9370db",VsHgYF:"3cb371",VUXe:"7b68ee",VsprRggYF:"fa9a",VQe:"48d1cc",VviTetYd:"c71585",midnightXe:"191970",mRtcYam:"f5fffa",mistyPse:"ffe4e1",moccasR:"ffe4b5",navajowEte:"ffdead",navy:"80",Tdlace:"fdf5e6",Tive:"808000",TivedBb:"6b8e23",Sange:"ffa500",SangeYd:"ff4500",ScEd:"da70d6",pOegTMnPd:"eee8aa",pOegYF:"98fb98",pOeQe:"afeeee",pOeviTetYd:"db7093",papayawEp:"ffefd5",pHKpuff:"ffdab9",peru:"cd853f",pRk:"ffc0cb",plum:"dda0dd",powMrXe:"b0e0e6",purpN:"800080",YbeccapurpN:"663399",Yd:"ff0000",Psybrown:"bc8f8f",PyOXe:"4169e1",saddNbPwn:"8b4513",sOmon:"fa8072",sandybPwn:"f4a460",sHgYF:"2e8b57",sHshell:"fff5ee",siFna:"a0522d",silver:"c0c0c0",skyXe:"87ceeb",UXe:"6a5acd",UWay:"708090",UgYy:"708090",snow:"fffafa",sprRggYF:"ff7f",stAlXe:"4682b4",tan:"d2b48c",teO:"8080",tEstN:"d8bfd8",tomato:"ff6347",Qe:"40e0d0",viTet:"ee82ee",JHt:"f5deb3",wEte:"ffffff",wEtesmoke:"f5f5f5",Lw:"ffff00",LwgYF:"9acd32"};function BN(){let n={},t=Object.keys(px),e=Object.keys(dx),i,o,s,m,f;for(i=0;i<t.length;i++){for(m=f=t[i],o=0;o<e.length;o++)s=e[o],f=f.replace(s,dx[s]);s=parseInt(px[m],16),n[f]=[s>>16&255,s>>8&255,s&255]}return n}var ad;function NN(n){ad||(ad=BN(),ad.transparent=[0,0,0,0]);let t=ad[n.toLowerCase()];return t&&{r:t[0],g:t[1],b:t[2],a:t.length===4?t[3]:255}}var VN=/^rgba?\(\s*([-+.\d]+)(%)?[\s,]+([-+.e\d]+)(%)?[\s,]+([-+.e\d]+)(%)?(?:[\s,/]+([-+.e\d]+)(%)?)?\s*\)$/;function LN(n){let t=VN.exec(n),e=255,i,o,s;if(t){if(t[7]!==i){let m=+t[7];e=t[8]?tl(m):sr(m*255,0,255)}return i=+t[1],o=+t[3],s=+t[5],i=255&(t[2]?tl(i):sr(i,0,255)),o=255&(t[4]?tl(o):sr(o,0,255)),s=255&(t[6]?tl(s):sr(s,0,255)),{r:i,g:o,b:s,a:e}}}function FN(n){return n&&(n.a<255?`rgba(${n.r}, ${n.g}, ${n.b}, ${wo(n.a)})`:`rgb(${n.r}, ${n.g}, ${n.b})`)}var om=n=>n<=.0031308?n*12.92:Math.pow(n,1/2.4)*1.055-.055,ja=n=>n<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4);function zN(n,t,e){let i=ja(wo(n.r)),o=ja(wo(n.g)),s=ja(wo(n.b));return{r:lr(om(i+e*(ja(wo(t.r))-i))),g:lr(om(o+e*(ja(wo(t.g))-o))),b:lr(om(s+e*(ja(wo(t.b))-s))),a:n.a+e*(t.a-n.a)}}function sd(n,t,e){if(n){let i=am(n);i[t]=Math.max(0,Math.min(i[t]+i[t]*e,t===0?360:1)),i=lm(i),n.r=i[0],n.g=i[1],n.b=i[2]}}function fx(n,t){return n&&Object.assign(t||{},n)}function mx(n){var t={r:0,g:0,b:0,a:255};return Array.isArray(n)?n.length>=3&&(t={r:n[0],g:n[1],b:n[2],a:255},n.length>3&&(t.a=lr(n[3]))):(t=fx(n,{r:0,g:0,b:0,a:1}),t.a=lr(t.a)),t}function UN(n){return n.charAt(0)==="r"?LN(n):AN(n)}var nl=class n{constructor(t){if(t instanceof n)return t;let e=typeof t,i;e==="object"?i=mx(t):e==="string"&&(i=wN(t)||NN(t)||UN(t)),this._rgb=i,this._valid=!!i}get valid(){return this._valid}get rgb(){var t=fx(this._rgb);return t&&(t.a=wo(t.a)),t}set rgb(t){this._rgb=mx(t)}rgbString(){return this._valid?FN(this._rgb):void 0}hexString(){return this._valid?MN(this._rgb):void 0}hslString(){return this._valid?RN(this._rgb):void 0}mix(t,e){if(t){let i=this.rgb,o=t.rgb,s,m=e===s?.5:e,f=2*m-1,v=i.a-o.a,y=((f*v===-1?f:(f+v)/(1+f*v))+1)/2;s=1-y,i.r=255&y*i.r+s*o.r+.5,i.g=255&y*i.g+s*o.g+.5,i.b=255&y*i.b+s*o.b+.5,i.a=m*i.a+(1-m)*o.a,this.rgb=i}return this}interpolate(t,e){return t&&(this._rgb=zN(this._rgb,t._rgb,e)),this}clone(){return new n(this.rgb)}alpha(t){return this._rgb.a=lr(t),this}clearer(t){let e=this._rgb;return e.a*=1-t,this}greyscale(){let t=this._rgb,e=il(t.r*.3+t.g*.59+t.b*.11);return t.r=t.g=t.b=e,this}opaquer(t){let e=this._rgb;return e.a*=1+t,this}negate(){let t=this._rgb;return t.r=255-t.r,t.g=255-t.g,t.b=255-t.b,this}lighten(t){return sd(this._rgb,2,t),this}darken(t){return sd(this._rgb,2,-t),this}saturate(t){return sd(this._rgb,1,t),this}desaturate(t){return sd(this._rgb,1,-t),this}rotate(t){return DN(this._rgb,t),this}};function oo(){}var Sx=(()=>{let n=0;return()=>n++})();function et(n){return n==null}function Ft(n){if(Array.isArray&&Array.isArray(n))return!0;let t=Object.prototype.toString.call(n);return t.slice(0,7)==="[object"&&t.slice(-6)==="Array]"}function tt(n){return n!==null&&Object.prototype.toString.call(n)==="[object Object]"}function Gt(n){return(typeof n=="number"||n instanceof Number)&&isFinite(+n)}function Jn(n,t){return Gt(n)?n:t}function qe(n,t){return typeof n>"u"?t:n}var kx=(n,t)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100:+n/t,mm=(n,t)=>typeof n=="string"&&n.endsWith("%")?parseFloat(n)/100*t:+n;function Dt(n,t,e){if(n&&typeof n.call=="function")return n.apply(e,t)}function Ot(n,t,e,i){let o,s,m;if(Ft(n))if(s=n.length,i)for(o=s-1;o>=0;o--)t.call(e,n[o],o);else for(o=0;o<s;o++)t.call(e,n[o],o);else if(tt(n))for(m=Object.keys(n),s=m.length,o=0;o<s;o++)t.call(e,n[m[o]],m[o])}function al(n,t){let e,i,o,s;if(!n||!t||n.length!==t.length)return!1;for(e=0,i=n.length;e<i;++e)if(o=n[e],s=t[e],o.datasetIndex!==s.datasetIndex||o.index!==s.index)return!1;return!0}function pd(n){if(Ft(n))return n.map(pd);if(tt(n)){let t=Object.create(null),e=Object.keys(n),i=e.length,o=0;for(;o<i;++o)t[e[o]]=pd(n[e[o]]);return t}return n}function Ox(n){return["__proto__","prototype","constructor"].indexOf(n)===-1}function jN(n,t,e,i){if(!Ox(n))return;let o=t[n],s=e[n];tt(o)&&tt(s)?Wa(o,s,i):t[n]=pd(s)}function Wa(n,t,e){let i=Ft(t)?t:[t],o=i.length;if(!tt(n))return n;e=e||{};let s=e.merger||jN,m;for(let f=0;f<o;++f){if(m=i[f],!tt(m))continue;let v=Object.keys(m);for(let y=0,M=v.length;y<M;++y)s(v[y],n,m,e)}return n}function qa(n,t){return Wa(n,t,{merger:HN})}function HN(n,t,e){if(!Ox(n))return;let i=t[n],o=e[n];tt(i)&&tt(o)?qa(i,o):Object.prototype.hasOwnProperty.call(t,n)||(t[n]=pd(o))}var hx={"":n=>n,x:n=>n.x,y:n=>n.y};function WN(n){let t=n.split("."),e=[],i="";for(let o of t)i+=o,i.endsWith("\\")?i=i.slice(0,-1)+".":(e.push(i),i="");return e}function GN(n){let t=WN(n);return e=>{for(let i of t){if(i==="")break;e=e&&e[i]}return e}}function So(n,t){return(hx[t]||(hx[t]=GN(t)))(n)}function fd(n){return n.charAt(0).toUpperCase()+n.slice(1)}var $a=n=>typeof n<"u",Po=n=>typeof n=="function",gm=(n,t)=>{if(n.size!==t.size)return!1;for(let e of n)if(!t.has(e))return!1;return!0};function Ex(n){return n.type==="mouseup"||n.type==="click"||n.type==="contextmenu"}var mt=Math.PI,zt=2*mt,qN=zt+mt,md=Number.POSITIVE_INFINITY,$N=mt/180,tn=mt/2,Yr=mt/4,_x=mt*2/3,Mo=Math.log10,Vi=Math.sign;function Ya(n,t,e){return Math.abs(n-t)<e}function um(n){let t=Math.round(n);n=Ya(n,t,n/1e3)?t:n;let e=Math.pow(10,Math.floor(Mo(n))),i=n/e;return(i<=1?1:i<=2?2:i<=5?5:10)*e}function Tx(n){let t=[],e=Math.sqrt(n),i;for(i=1;i<e;i++)n%i===0&&(t.push(i),t.push(n/i));return e===(e|0)&&t.push(e),t.sort((o,s)=>o-s).pop(),t}function YN(n){return typeof n=="symbol"||typeof n=="object"&&n!==null&&!(Symbol.toPrimitive in n||"toString"in n||"valueOf"in n)}function Qr(n){return!YN(n)&&!isNaN(parseFloat(n))&&isFinite(n)}function Ix(n,t){let e=Math.round(n);return e-t<=n&&e+t>=n}function fm(n,t,e){let i,o,s;for(i=0,o=n.length;i<o;i++)s=n[i][e],isNaN(s)||(t.min=Math.min(t.min,s),t.max=Math.max(t.max,s))}function Si(n){return n*(mt/180)}function hd(n){return n*(180/mt)}function hm(n){if(!Gt(n))return;let t=1,e=0;for(;Math.round(n*t)/t!==n;)t*=10,e++;return e}function _m(n,t){let e=t.x-n.x,i=t.y-n.y,o=Math.sqrt(e*e+i*i),s=Math.atan2(i,e);return s<-.5*mt&&(s+=zt),{angle:s,distance:o}}function gd(n,t){return Math.sqrt(Math.pow(t.x-n.x,2)+Math.pow(t.y-n.y,2))}function XN(n,t){return(n-t+qN)%zt-mt}function In(n){return(n%zt+zt)%zt}function Xa(n,t,e,i){let o=In(n),s=In(t),m=In(e),f=In(s-o),v=In(m-o),y=In(o-s),M=In(o-m);return o===s||o===m||i&&s===m||f>v&&y<M}function hn(n,t,e){return Math.max(t,Math.min(e,n))}function Ax(n){return hn(n,-32768,32767)}function ro(n,t,e,i=1e-6){return n>=Math.min(t,e)-i&&n<=Math.max(t,e)+i}function _d(n,t,e){e=e||(m=>n[m]<t);let i=n.length-1,o=0,s;for(;i-o>1;)s=o+i>>1,e(s)?o=s:i=s;return{lo:o,hi:i}}var no=(n,t,e,i)=>_d(n,e,i?o=>{let s=n[o][t];return s<e||s===e&&n[o+1][t]===e}:o=>n[o][t]<e),Dx=(n,t,e)=>_d(n,e,i=>n[i][t]>=e);function Rx(n,t,e){let i=0,o=n.length;for(;i<o&&n[i]<t;)i++;for(;o>i&&n[o-1]>e;)o--;return i>0||o<n.length?n.slice(i,o):n}var Bx=["push","pop","shift","splice","unshift"];function Nx(n,t){if(n._chartjs){n._chartjs.listeners.push(t);return}Object.defineProperty(n,"_chartjs",{configurable:!0,enumerable:!1,value:{listeners:[t]}}),Bx.forEach(e=>{let i="_onData"+fd(e),o=n[e];Object.defineProperty(n,e,{configurable:!0,enumerable:!1,value(...s){let m=o.apply(this,s);return n._chartjs.listeners.forEach(f=>{typeof f[i]=="function"&&f[i](...s)}),m}})})}function xm(n,t){let e=n._chartjs;if(!e)return;let i=e.listeners,o=i.indexOf(t);o!==-1&&i.splice(o,1),!(i.length>0)&&(Bx.forEach(s=>{delete n[s]}),delete n._chartjs)}function vm(n){let t=new Set(n);return t.size===n.length?n:Array.from(t)}var bm=function(){return typeof window>"u"?function(n){return n()}:window.requestAnimationFrame}();function ym(n,t){let e=[],i=!1;return function(...o){e=o,i||(i=!0,bm.call(window,()=>{i=!1,n.apply(t,e)}))}}function Vx(n,t){let e;return function(...i){return t?(clearTimeout(e),e=setTimeout(n,t,i)):n.apply(this,i),t}}var xd=n=>n==="start"?"left":n==="end"?"right":"center",An=(n,t,e)=>n==="start"?t:n==="end"?e:(t+e)/2,Lx=(n,t,e,i)=>n===(i?"left":"right")?e:n==="center"?(t+e)/2:t;function Cm(n,t,e){let i=t.length,o=0,s=i;if(n._sorted){let{iScale:m,vScale:f,_parsed:v}=n,y=n.dataset&&n.dataset.options?n.dataset.options.spanGaps:null,M=m.axis,{min:I,max:B,minDefined:N,maxDefined:H}=m.getUserBounds();if(N){if(o=Math.min(no(v,M,I).lo,e?i:no(t,M,m.getPixelForValue(I)).lo),y){let W=v.slice(0,o+1).reverse().findIndex(G=>!et(G[f.axis]));o-=Math.max(0,W)}o=hn(o,0,i-1)}if(H){let W=Math.max(no(v,m.axis,B,!0).hi+1,e?0:no(t,M,m.getPixelForValue(B),!0).hi+1);if(y){let G=v.slice(W-1).findIndex(Z=>!et(Z[f.axis]));W+=Math.max(0,G)}s=hn(W,o,i)-o}else s=i-o}return{start:o,count:s}}function wm(n){let{xScale:t,yScale:e,_scaleRanges:i}=n,o={xmin:t.min,xmax:t.max,ymin:e.min,ymax:e.max};if(!i)return n._scaleRanges=o,!0;let s=i.xmin!==t.min||i.xmax!==t.max||i.ymin!==e.min||i.ymax!==e.max;return Object.assign(i,o),s}var ld=n=>n===0||n===1,xx=(n,t,e)=>-(Math.pow(2,10*(n-=1))*Math.sin((n-t)*zt/e)),vx=(n,t,e)=>Math.pow(2,-10*n)*Math.sin((n-t)*zt/e)+1,Ha={linear:n=>n,easeInQuad:n=>n*n,easeOutQuad:n=>-n*(n-2),easeInOutQuad:n=>(n/=.5)<1?.5*n*n:-.5*(--n*(n-2)-1),easeInCubic:n=>n*n*n,easeOutCubic:n=>(n-=1)*n*n+1,easeInOutCubic:n=>(n/=.5)<1?.5*n*n*n:.5*((n-=2)*n*n+2),easeInQuart:n=>n*n*n*n,easeOutQuart:n=>-((n-=1)*n*n*n-1),easeInOutQuart:n=>(n/=.5)<1?.5*n*n*n*n:-.5*((n-=2)*n*n*n-2),easeInQuint:n=>n*n*n*n*n,easeOutQuint:n=>(n-=1)*n*n*n*n+1,easeInOutQuint:n=>(n/=.5)<1?.5*n*n*n*n*n:.5*((n-=2)*n*n*n*n+2),easeInSine:n=>-Math.cos(n*tn)+1,easeOutSine:n=>Math.sin(n*tn),easeInOutSine:n=>-.5*(Math.cos(mt*n)-1),easeInExpo:n=>n===0?0:Math.pow(2,10*(n-1)),easeOutExpo:n=>n===1?1:-Math.pow(2,-10*n)+1,easeInOutExpo:n=>ld(n)?n:n<.5?.5*Math.pow(2,10*(n*2-1)):.5*(-Math.pow(2,-10*(n*2-1))+2),easeInCirc:n=>n>=1?n:-(Math.sqrt(1-n*n)-1),easeOutCirc:n=>Math.sqrt(1-(n-=1)*n),easeInOutCirc:n=>(n/=.5)<1?-.5*(Math.sqrt(1-n*n)-1):.5*(Math.sqrt(1-(n-=2)*n)+1),easeInElastic:n=>ld(n)?n:xx(n,.075,.3),easeOutElastic:n=>ld(n)?n:vx(n,.075,.3),easeInOutElastic(n){return ld(n)?n:n<.5?.5*xx(n*2,.1125,.45):.5+.5*vx(n*2-1,.1125,.45)},easeInBack(n){return n*n*((1.70158+1)*n-1.70158)},easeOutBack(n){return(n-=1)*n*((1.70158+1)*n+1.70158)+1},easeInOutBack(n){let t=1.70158;return(n/=.5)<1?.5*(n*n*(((t*=1.525)+1)*n-t)):.5*((n-=2)*n*(((t*=1.525)+1)*n+t)+2)},easeInBounce:n=>1-Ha.easeOutBounce(1-n),easeOutBounce(n){return n<1/2.75?7.5625*n*n:n<2/2.75?7.5625*(n-=1.5/2.75)*n+.75:n<2.5/2.75?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375},easeInOutBounce:n=>n<.5?Ha.easeInBounce(n*2)*.5:Ha.easeOutBounce(n*2-1)*.5+.5};function Pm(n){if(n&&typeof n=="object"){let t=n.toString();return t==="[object CanvasPattern]"||t==="[object CanvasGradient]"}return!1}function Mm(n){return Pm(n)?n:new nl(n)}function cm(n){return Pm(n)?n:new nl(n).saturate(.5).darken(.1).hexString()}var ZN=["x","y","borderWidth","radius","tension"],QN=["color","borderColor","backgroundColor"];function KN(n){n.set("animation",{delay:void 0,duration:1e3,easing:"easeOutQuart",fn:void 0,from:void 0,loop:void 0,to:void 0,type:void 0}),n.describe("animation",{_fallback:!1,_indexable:!1,_scriptable:t=>t!=="onProgress"&&t!=="onComplete"&&t!=="fn"}),n.set("animations",{colors:{type:"color",properties:QN},numbers:{type:"number",properties:ZN}}),n.describe("animations",{_fallback:"animation"}),n.set("transitions",{active:{animation:{duration:400}},resize:{animation:{duration:0}},show:{animations:{colors:{from:"transparent"},visible:{type:"boolean",duration:0}}},hide:{animations:{colors:{to:"transparent"},visible:{type:"boolean",easing:"linear",fn:t=>t|0}}}})}function JN(n){n.set("layout",{autoPadding:!0,padding:{top:0,right:0,bottom:0,left:0}})}var bx=new Map;function eV(n,t){t=t||{};let e=n+JSON.stringify(t),i=bx.get(e);return i||(i=new Intl.NumberFormat(n,t),bx.set(e,i)),i}function Za(n,t,e){return eV(t,e).format(n)}var Fx={values(n){return Ft(n)?n:""+n},numeric(n,t,e){if(n===0)return"0";let i=this.chart.options.locale,o,s=n;if(e.length>1){let y=Math.max(Math.abs(e[0].value),Math.abs(e[e.length-1].value));(y<1e-4||y>1e15)&&(o="scientific"),s=tV(n,e)}let m=Mo(Math.abs(s)),f=isNaN(m)?1:Math.max(Math.min(-1*Math.floor(m),20),0),v={notation:o,minimumFractionDigits:f,maximumFractionDigits:f};return Object.assign(v,this.options.ticks.format),Za(n,i,v)},logarithmic(n,t,e){if(n===0)return"0";let i=e[t].significand||n/Math.pow(10,Math.floor(Mo(n)));return[1,2,3,5,10,15].includes(i)||t>.8*e.length?Fx.numeric.call(this,n,t,e):""}};function tV(n,t){let e=t.length>3?t[2].value-t[1].value:t[1].value-t[0].value;return Math.abs(e)>=1&&n!==Math.floor(n)&&(e=n-Math.floor(n)),e}var sl={formatters:Fx};function nV(n){n.set("scale",{display:!0,offset:!1,reverse:!1,beginAtZero:!1,bounds:"ticks",clip:!0,grace:0,grid:{display:!0,lineWidth:1,drawOnChartArea:!0,drawTicks:!0,tickLength:8,tickWidth:(t,e)=>e.lineWidth,tickColor:(t,e)=>e.color,offset:!1},border:{display:!0,dash:[],dashOffset:0,width:1},title:{display:!1,text:"",padding:{top:4,bottom:4}},ticks:{minRotation:0,maxRotation:50,mirror:!1,textStrokeWidth:0,textStrokeColor:"",padding:3,display:!0,autoSkip:!0,autoSkipPadding:3,labelOffset:0,callback:sl.formatters.values,minor:{},major:{},align:"center",crossAlign:"near",showLabelBackdrop:!1,backdropColor:"rgba(255, 255, 255, 0.75)",backdropPadding:2}}),n.route("scale.ticks","color","","color"),n.route("scale.grid","color","","borderColor"),n.route("scale.border","color","","borderColor"),n.route("scale.title","color","","color"),n.describe("scale",{_fallback:!1,_scriptable:t=>!t.startsWith("before")&&!t.startsWith("after")&&t!=="callback"&&t!=="parser",_indexable:t=>t!=="borderDash"&&t!=="tickBorderDash"&&t!=="dash"}),n.describe("scales",{_fallback:"scale"}),n.describe("scale.ticks",{_scriptable:t=>t!=="backdropPadding"&&t!=="callback",_indexable:t=>t!=="backdropPadding"})}var pr=Object.create(null),vd=Object.create(null);function ol(n,t){if(!t)return n;let e=t.split(".");for(let i=0,o=e.length;i<o;++i){let s=e[i];n=n[s]||(n[s]=Object.create(null))}return n}function dm(n,t,e){return typeof t=="string"?Wa(ol(n,t),e):Wa(ol(n,""),t)}var pm=class{constructor(t,e){this.animation=void 0,this.backgroundColor="rgba(0,0,0,0.1)",this.borderColor="rgba(0,0,0,0.1)",this.color="#666",this.datasets={},this.devicePixelRatio=i=>i.chart.platform.getDevicePixelRatio(),this.elements={},this.events=["mousemove","mouseout","click","touchstart","touchmove"],this.font={family:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",size:12,style:"normal",lineHeight:1.2,weight:null},this.hover={},this.hoverBackgroundColor=(i,o)=>cm(o.backgroundColor),this.hoverBorderColor=(i,o)=>cm(o.borderColor),this.hoverColor=(i,o)=>cm(o.color),this.indexAxis="x",this.interaction={mode:"nearest",intersect:!0,includeInvisible:!1},this.maintainAspectRatio=!0,this.onHover=null,this.onClick=null,this.parsing=!0,this.plugins={},this.responsive=!0,this.scale=void 0,this.scales={}
vendor: 5,064 bytes, line 104
104,this.showLine=!0,this.drawActiveElementsOnTop=!0,this.describe(t),this.apply(e)}set(t,e){return dm(this,t,e)}get(t){return ol(this,t)}describe(t,e){return dm(vd,t,e)}override(t,e){return dm(pr,t,e)}route(t,e,i,o){let s=ol(this,t),m=ol(this,i),f="_"+e;Object.defineProperties(s,{[f]:{value:s[e],writable:!0},[e]:{enumerable:!0,get(){let v=this[f],y=m[o];return tt(v)?Object.assign({},y,v):qe(v,y)},set(v){this[f]=v}}})}apply(t){t.forEach(e=>e(this))}},Rt=new pm({_scriptable:n=>!n.startsWith("on"),_indexable:n=>n!=="events",hover:{_fallback:"interaction"},interaction:{_scriptable:!1,_indexable:!1}},[KN,JN,nV]);function iV(n){return!n||et(n.size)||et(n.family)?null:(n.style?n.style+" ":"")+(n.weight?n.weight+" ":"")+n.size+"px "+n.family}function rl(n,t,e,i,o){let s=t[o];return s||(s=t[o]=n.measureText(o).width,e.push(o)),s>i&&(i=s),i}function zx(n,t,e,i){i=i||{};let o=i.data=i.data||{},s=i.garbageCollect=i.garbageCollect||[];i.font!==t&&(o=i.data={},s=i.garbageCollect=[],i.font=t),n.save(),n.font=t;let m=0,f=e.length,v,y,M,I,B;for(v=0;v<f;v++)if(I=e[v],I!=null&&!Ft(I))m=rl(n,o,s,m,I);else if(Ft(I))for(y=0,M=I.length;y<M;y++)B=I[y],B!=null&&!Ft(B)&&(m=rl(n,o,s,m,B));n.restore();let N=s.length/2;if(N>e.length){for(v=0;v<N;v++)delete o[s[v]];s.splice(0,N)}return m}function mr(n,t,e){let i=n.currentDevicePixelRatio,o=e!==0?Math.max(e/2,.5):0;return Math.round((t-o)*i)/i+o}function Sm(n,t){!t&&!n||(t=t||n.getContext("2d"),t.save(),t.resetTransform(),t.clearRect(0,0,n.width,n.height),t.restore())}function bd(n,t,e,i){km(n,t,e,i,null)}function km(n,t,e,i,o){let s,m,f,v,y,M,I,B,N=t.pointStyle,H=t.rotation,W=t.radius,G=(H||0)*$N;if(N&&typeof N=="object"&&(s=N.toString(),s==="[object HTMLImageElement]"||s==="[object HTMLCanvasElement]")){n.save(),n.translate(e,i),n.rotate(G),n.drawImage(N,-N.width/2,-N.height/2,N.width,N.height),n.restore();return}if(!(isNaN(W)||W<=0)){switch(n.beginPath(),N){default:o?n.ellipse(e,i,o/2,W,0,0,zt):n.arc(e,i,W,0,zt),n.closePath();break;case"triangle":M=o?o/2:W,n.moveTo(e+Math.sin(G)*M,i-Math.cos(G)*W),G+=_x,n.lineTo(e+Math.sin(G)*M,i-Math.cos(G)*W),G+=_x,n.lineTo(e+Math.sin(G)*M,i-Math.cos(G)*W),n.closePath();break;case"rectRounded":y=W*.516,v=W-y,m=Math.cos(G+Yr)*v,I=Math.cos(G+Yr)*(o?o/2-y:v),f=Math.sin(G+Yr)*v,B=Math.sin(G+Yr)*(o?o/2-y:v),n.arc(e-I,i-f,y,G-mt,G-tn),n.arc(e+B,i-m,y,G-tn,G),n.arc(e+I,i+f,y,G,G+tn),n.arc(e-B,i+m,y,G+tn,G+mt),n.closePath();break;case"rect":if(!H){v=Math.SQRT1_2*W,M=o?o/2:v,n.rect(e-M,i-v,2*M,2*v);break}G+=Yr;case"rectRot":I=Math.cos(G)*(o?o/2:W),m=Math.cos(G)*W,f=Math.sin(G)*W,B=Math.sin(G)*(o?o/2:W),n.moveTo(e-I,i-f),n.lineTo(e+B,i-m),n.lineTo(e+I,i+f),n.lineTo(e-B,i+m),n.closePath();break;case"crossRot":G+=Yr;case"cross":I=Math.cos(G)*(o?o/2:W),m=Math.cos(G)*W,f=Math.sin(G)*W,B=Math.sin(G)*(o?o/2:W),n.moveTo(e-I,i-f),n.lineTo(e+I,i+f),n.moveTo(e+B,i-m),n.lineTo(e-B,i+m);break;case"star":I=Math.cos(G)*(o?o/2:W),m=Math.cos(G)*W,f=Math.sin(G)*W,B=Math.sin(G)*(o?o/2:W),n.moveTo(e-I,i-f),n.lineTo(e+I,i+f),n.moveTo(e+B,i-m),n.lineTo(e-B,i+m),G+=Yr,I=Math.cos(G)*(o?o/2:W),m=Math.cos(G)*W,f=Math.sin(G)*W,B=Math.sin(G)*(o?o/2:W),n.moveTo(e-I,i-f),n.lineTo(e+I,i+f),n.moveTo(e+B,i-m),n.lineTo(e-B,i+m);break;case"line":m=o?o/2:Math.cos(G)*W,f=Math.sin(G)*W,n.moveTo(e-m,i-f),n.lineTo(e+m,i+f);break;case"dash":n.moveTo(e,i),n.lineTo(e+Math.cos(G)*(o?o/2:W),i+Math.sin(G)*W);break;case!1:n.closePath();break}n.fill(),t.borderWidth>0&&n.stroke()}}function io(n,t,e){return e=e||.5,!t||n&&n.x>t.left-e&&n.x<t.right+e&&n.y>t.top-e&&n.y<t.bottom+e}function ll(n,t){n.save(),n.beginPath(),n.rect(t.left,t.top,t.right-t.left,t.bottom-t.top),n.clip()}function cl(n){n.restore()}function Ux(n,t,e,i,o){if(!t)return n.lineTo(e.x,e.y);if(o==="middle"){let s=(t.x+e.x)/2;n.lineTo(s,t.y),n.lineTo(s,e.y)}else o==="after"!=!!i?n.lineTo(t.x,e.y):n.lineTo(e.x,t.y);n.lineTo(e.x,e.y)}function jx(n,t,e,i){if(!t)return n.lineTo(e.x,e.y);n.bezierCurveTo(i?t.cp1x:t.cp2x,i?t.cp1y:t.cp2y,i?e.cp2x:e.cp1x,i?e.cp2y:e.cp1y,e.x,e.y)}function oV(n,t){t.translation&&n.translate(t.translation[0],t.translation[1]),et(t.rotation)||n.rotate(t.rotation),t.color&&(n.fillStyle=t.color),t.textAlign&&(n.textAlign=t.textAlign),t.textBaseline&&(n.textBaseline=t.textBaseline)}function rV(n,t,e,i,o){if(o.strikethrough||o.underline){let s=n.measureText(i),m=t-s.actualBoundingBoxLeft,f=t+s.actualBoundingBoxRight,v=e-s.actualBoundingBoxAscent,y=e+s.actualBoundingBoxDescent,M=o.strikethrough?(v+y)/2:y;n.strokeStyle=n.fillStyle,n.beginPath(),n.lineWidth=o.decorationWidth||2,n.moveTo(m,M),n.lineTo(f,M),n.stroke()}}function aV(n,t){let e=n.fillStyle;n.fillStyle=t.color,n.fillRect(t.left,t.top,t.width,t.height),n.fillStyle=e}function gr(n,t,e,i,o,s={}){let m=Ft(t)?t:[t],f=s.strokeWidth>0&&s.strokeColor!=="",v,y;for(n.save(),n.font=o.string,oV(n,s),v=0;v<m.length;++v)y=m[v],s.backdrop&&aV(n,s.backdrop),f&&(s.strokeColor&&(n.strokeStyle=s.strokeColor),et(s.strokeWidth)||(n.lineWidth=s.strokeWidth),n.strokeText(y,e,i,s.maxWidth)),n.fillText(y,e,i,s.maxWidth),rV(n,e,i,y,s),i+=Number(o.lineHeight);
vendor: 4,330 bytes, line 104
104n.restore()}function Qa(n,t){let{x:e,y:i,w:o,h:s,radius:m}=t;n.arc(e+m.topLeft,i+m.topLeft,m.topLeft,1.5*mt,mt,!0),n.lineTo(e,i+s-m.bottomLeft),n.arc(e+m.bottomLeft,i+s-m.bottomLeft,m.bottomLeft,mt,tn,!0),n.lineTo(e+o-m.bottomRight,i+s),n.arc(e+o-m.bottomRight,i+s-m.bottomRight,m.bottomRight,tn,0,!0),n.lineTo(e+o,i+m.topRight),n.arc(e+o-m.topRight,i+m.topRight,m.topRight,0,-tn,!0),n.lineTo(e+m.topLeft,i)}var sV=/^(normal|(\d+(?:\.\d+)?)(px|em|%)?)$/,lV=/^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;function cV(n,t){let e=(""+n).match(sV);if(!e||e[1]==="normal")return t*1.2;switch(n=+e[2],e[3]){case"px":return n;case"%":n/=100;break}return t*n}var dV=n=>+n||0;function yd(n,t){let e={},i=tt(t),o=i?Object.keys(t):t,s=tt(n)?i?m=>qe(n[m],n[t[m]]):m=>n[m]:()=>n;for(let m of o)e[m]=dV(s(m));return e}function Om(n){return yd(n,{top:"y",right:"x",bottom:"y",left:"x"})}function ur(n){return yd(n,["topLeft","topRight","bottomLeft","bottomRight"])}function Dn(n){let t=Om(n);return t.width=t.left+t.right,t.height=t.top+t.bottom,t}function mn(n,t){n=n||{},t=t||Rt.font;let e=qe(n.size,t.size);typeof e=="string"&&(e=parseInt(e,10));let i=qe(n.style,t.style);i&&!(""+i).match(lV)&&(console.warn('Invalid font style specified: "'+i+'"'),i=void 0);let o={family:qe(n.family,t.family),lineHeight:cV(qe(n.lineHeight,t.lineHeight),e),size:e,style:i,weight:qe(n.weight,t.weight),string:""};return o.string=iV(o),o}function Ka(n,t,e,i){let o=!0,s,m,f;for(s=0,m=n.length;s<m;++s)if(f=n[s],f!==void 0&&(t!==void 0&&typeof f=="function"&&(f=f(t),o=!1),e!==void 0&&Ft(f)&&(f=f[e%f.length],o=!1),f!==void 0))return i&&!o&&(i.cacheable=!1),f}function Hx(n,t,e){let{min:i,max:o}=n,s=mm(t,(o-i)/2),m=(f,v)=>e&&f===0?0:f+v;return{min:m(i,-Math.abs(s)),max:m(o,s)}}function ko(n,t){return Object.assign(Object.create(n),t)}function Cd(n,t=[""],e,i,o=()=>n[0]){let s=e||n;typeof i>"u"&&(i=qx("_fallback",n));let m={[Symbol.toStringTag]:"Object",_cacheable:!0,_scopes:n,_rootScopes:s,_fallback:i,_getTarget:o,override:f=>Cd([f,...n],t,s,i)};return new Proxy(m,{deleteProperty(f,v){return delete f[v],delete f._keys,delete n[0][v],!0},get(f,v){return Wx(f,v,()=>xV(v,t,n,f))},getOwnPropertyDescriptor(f,v){return Reflect.getOwnPropertyDescriptor(f._scopes[0],v)},getPrototypeOf(){return Reflect.getPrototypeOf(n[0])},has(f,v){return Cx(f).includes(v)},ownKeys(f){return Cx(f)},set(f,v,y){let M=f._storage||(f._storage=o());return f[v]=M[v]=y,delete f._keys,!0}})}function Zr(n,t,e,i){let o={_cacheable:!1,_proxy:n,_context:t,_subProxy:e,_stack:new Set,_descriptors:Em(n,i),setContext:s=>Zr(n,s,e,i),override:s=>Zr(n.override(s),t,e,i)};return new Proxy(o,{deleteProperty(s,m){return delete s[m],delete n[m],!0},get(s,m,f){return Wx(s,m,()=>mV(s,m,f))},getOwnPropertyDescriptor(s,m){return s._descriptors.allKeys?Reflect.has(n,m)?{enumerable:!0,configurable:!0}:void 0:Reflect.getOwnPropertyDescriptor(n,m)},getPrototypeOf(){return Reflect.getPrototypeOf(n)},has(s,m){return Reflect.has(n,m)},ownKeys(){return Reflect.ownKeys(n)},set(s,m,f){return n[m]=f,delete s[m],!0}})}function Em(n,t={scriptable:!0,indexable:!0}){let{_scriptable:e=t.scriptable,_indexable:i=t.indexable,_allKeys:o=t.allKeys}=n;return{allKeys:o,scriptable:e,indexable:i,isScriptable:Po(e)?e:()=>e,isIndexable:Po(i)?i:()=>i}}var pV=(n,t)=>n?n+fd(t):t,Tm=(n,t)=>tt(t)&&n!=="adapters"&&(Object.getPrototypeOf(t)===null||t.constructor===Object);function Wx(n,t,e){if(Object.prototype.hasOwnProperty.call(n,t)||t==="constructor")return n[t];let i=e();return n[t]=i,i}function mV(n,t,e){let{_proxy:i,_context:o,_subProxy:s,_descriptors:m}=n,f=i[t];return Po(f)&&m.isScriptable(t)&&(f=gV(t,f,n,e)),Ft(f)&&f.length&&(f=uV(t,f,n,m.isIndexable)),Tm(t,f)&&(f=Zr(f,o,s&&s[t],m)),f}function gV(n,t,e,i){let{_proxy:o,_context:s,_subProxy:m,_stack:f}=e;if(f.has(n))throw new Error("Recursion detected: "+Array.from(f).join("->")+"->"+n);f.add(n);let v=t(s,m||i);return f.delete(n),Tm(n,v)&&(v=Im(o._scopes,o,n,v)),v}function uV(n,t,e,i){let{_proxy:o,_context:s,_subProxy:m,_descriptors:f}=e;if(typeof s.index<"u"&&i(n))return t[s.index%t.length];if(tt(t[0])){let v=t,y=o._scopes.filter(M=>M!==v);t=[];for(let M of v){let I=Im(y,o,n,M);t.push(Zr(I,s,m&&m[n],f))}}return t}function Gx(n,t,e){return Po(n)?n(t,e):n}var fV=(n,t)=>n===!0?t:typeof n=="string"?So(t,n):void 0;
104function hV(n,t,e,i,o){for(let s of t){let m=fV(e,s);if(m){n.add(m);let f=Gx(m._fallback,e,o);if(typeof f<"u"&&f!==e&&f!==i)return f}else if(m===!1&&typeof i<"u"&&e!==i)return null}return!1}function Im(n,t,e,i){let o=t._rootScopes,s=Gx(t._fallback,e,i),m=[...n,...o],f=new Set;f.add(i);let v=yx(f,m,e,s||e,i);return v===null||typeof s<"u"&&s!==e&&(v=yx(f,m,s,v,i),v===null)?!1:Cd(Array.from(f),[""],o,s,()=>_V(t,e,i))}function yx(n,t,e,i,o){for(;e;)e=hV(n,t,e,i,o);return e}function _V(n,t,e){let i=n._getTarget();t in i||(i[t]={});let o=i[t];return Ft(o)&&tt(e)?e:o||{}}function xV(n,t,e,i){let o;for(let s of t)if(o=qx(pV(s,n),e),typeof o<"u")return Tm(n,o)?Im(e,i,n,o):o}function qx(n,t){for(let e of t){if(!e)continue;let i=e[n];if(typeof i<"u")return i}}function Cx(n){let t=n._keys;return t||(t=n._keys=vV(n._scopes)),t}function vV(n){let t=new Set;for(let e of n)for(let i of Object.keys(e).filter(o=>!o.startsWith("_")))t.add(i);return Array.from(t)}function Am(n,t,e,i){let{iScale:o}=n,{key:s="r"}=this._parsing,m=new Array(i),f,v,y,M;for(f=0,v=i;f<v;++f)y=f+e,M=t[y],m[f]={r:o.parse(So(M,s),y)};return m}var bV=Number.EPSILON||1e-14,Ga=(n,t)=>t<n.length&&!n[t].skip&&n[t],$x=n=>n==="x"?"y":"x";function yV(n,t,e,i){let o=n.skip?t:n,s=t,m=e.skip?t:e,f=gd(s,o),v=gd(m,s),y=f/(f+v),M=v/(f+v);y=isNaN(y)?0:y,M=isNaN(M)?0:M;let I=i*y,B=i*M;return{previous:{x:s.x-I*(m.x-o.x),y:s.y-I*(m.y-o.y)},next:{x:s.x+B*(m.x-o.x),y:s.y+B*(m.y-o.y)}}}function CV(n,t,e){let i=n.length,o,s,m,f,v,y=Ga(n,0);for(let M=0;M<i-1;++M)if(v=y,y=Ga(n,M+1),!(!v||!y)){if(Ya(t[M],0,bV)){e[M]=e[M+1]=0;continue}o=e[M]/t[M],s=e[M+1]/t[M],f=Math.pow(o,2)+Math.pow(s,2),!(f<=9)&&(m=3/Math.sqrt(f),e[M]=o*m*t[M],e[M+1]=s*m*t[M])}}function wV(n,t,e="x"){let i=$x(e),o=n.length,s,m,f,v=Ga(n,0);for(let y=0;y<o;++y){if(m=f,f=v,v=Ga(n,y+1),!f)continue;let M=f[e],I=f[i];m&&(s=(M-m[e])/3,f[`cp1${e}`]=M-s,f[`cp1${i}`]=I-s*t[y]),v&&(s=(v[e]-M)/3,f[`cp2${e}`]=M+s,f[`cp2${i}`]=I+s*t[y])}}function PV(n,t="x"){let e=$x(t),i=n.length,o=Array(i).fill(0),s=Array(i),m,f,v,y=Ga(n,0);for(m=0;m<i;++m)if(f=v,v=y,y=Ga(n,m+1),!!v){if(y){let M=y[t]-v[t];o[m]=M!==0?(y[e]-v[e])/M:0}s[m]=f?y?Vi(o[m-1])!==Vi(o[m])?0:(o[m-1]+o[m])/2:o[m-1]:o[m]}CV(n,o,s),wV(n,s,t)}function cd(n,t,e){return Math.max(Math.min(n,e),t)}function MV(n,t){let e,i,o,s,m,f=io(n[0],t);for(e=0,i=n.length;e<i;++e)m=s,s=f,f=e<i-1&&io(n[e+1],t),s&&(o=n[e],m&&(o.cp1x=cd(o.cp1x,t.left,t.right),o.cp1y=cd(o.cp1y,t.top,t.bottom)),f&&(o.cp2x=cd(o.cp2x,t.left,t.right),o.cp2y=cd(o.cp2y,t.top,t.bottom)))}function Yx(n,t,e,i,o){let s,m,f,v;if(t.spanGaps&&(n=n.filter(y=>!y.skip)),t.cubicInterpolationMode==="monotone")PV(n,o);else{let y=i?n[n.length-1]:n[0];for(s=0,m=n.length;s<m;++s)f=n[s],v=yV(y,f,n[Math.min(s+1,m-(i?0:1))%m],t.tension),f.cp1x=v.previous.x,f.cp1y=v.previous.y,f.cp2x=v.next.x,f.cp2y=v.next.y,y=f}t.capBezierPoints&&MV(n,e)}function wd(){return typeof window<"u"&&typeof document<"u"}function Pd(n){let t=n.parentNode;return t&&t.toString()==="[object ShadowRoot]"&&(t=t.host),t}function ud(n,t,e){let i;return typeof n=="string"?(i=parseInt(n,10),n.indexOf("%")!==-1&&(i=i/100*t.parentNode[e])):i=n,i}var Md=n=>n.ownerDocument.defaultView.getComputedStyle(n,null);function SV(n,t){return Md(n).getPropertyValue(t)}var kV=["top","right","bottom","left"];function Xr(n,t,e){let i={};e=e?"-"+e:"";for(let o=0;o<4;o++){let s=kV[o];i[s]=parseFloat(n[t+"-"+s+e])||0}return i.width=i.left+i.right,i.height=i.top+i.bottom,i}var OV=(n,t,e)=>(n>0||t>0)&&(!e||!e.shadowRoot);function EV(n,t){let e=n.touches,i=e&&e.length?e[0]:n,{offsetX:o,offsetY:s}=i,m=!1,f,v;if(OV(o,s,n.target))f=o,v=s;else{let y=t.getBoundingClientRect();f=i.clientX-y.left,v=i.clientY-y.top,m=!0}return{x:f,y:v,box:m}}function fr(n,t){if("native"in n)return n;let{canvas:e,currentDevicePixelRatio:i}=t,o=Md(e),s=o.boxSizing==="border-box",m=Xr(o,"padding"),f=Xr(o,"border","width"),{x:v,y,box:M}=EV(n,e),I=m.left+(M&&f.left),B=m.top+(M&&f.top),{width:N,height:H}=t;return s&&(N-=m.width+f.width,H-=m.height+f.height),{x:Math.round((v-I)/N*e.width/i),y:Math.round((y-B)/H*e.height/i)}}function TV(n,t,e){let i,o;if(t===void 0||e===void 0){let s=n&&Pd(n);if(!s)t=n.clientWidth,e=n.clientHeight;else{let m=s.getBoundingClientRect(),f=Md(s),v=Xr(f,"border","width"),y=Xr(f,"padding");t=m.width-y.width-v.width,e=m.height-y.height-v.height,i=ud(f.maxWidth,s,"clientWidth"),o=ud(f.maxHeight,s,"clientHeight")}}return{width:t,height:e,maxWidth:i||md,maxHeight:o||md}}var dr=n=>Math.round(n*10)/10;function Xx(n,t,e,i){let o=Md(n),s=Xr(o,"margin"),m=ud(o.maxWidth,n,"clientWidth")||md,f=ud(o.maxHeight,n,"clientHeight")||md,v=TV(n,t,e),{width:y,height:M}=v;if(o.boxSizing==="content-box"){let B=Xr(o,"border","width"),N=Xr(o,"padding");y-=N.width+B.width,M-=N.height+B.height}return y=Math.max(0,y-s.width),M=Math.max(0,i?y/i:M-s.height),y=dr(Math.min(y,m,v.maxWidth)),M=dr(Math.min(M,f,v.maxHeight)),y&&!M&&(M=dr(y/2)),(t!==void 0||e!==void 0)&&i&&v.height&&M>v.height&&(M=v.height,y=dr(Math.floor(M*i))),{width:y,height:M}}function Dm(n,t,e){let i=t||1,o=dr(n.height*i),s=dr(n.width*i);n.height=dr(n.height),n.width=dr(n.width);let m=n.canvas;return m.style&&(e||!m.style.height&&!m.style.width)&&(m.style.height=`${n.height}px`,m.style.width=`${n.width}px`),n.currentDevicePixelRatio!==i||m.height!==o||m.width!==s?(n.currentDevicePixelRatio=i,m.height=o,m.width=s,n.ctx.setTransform(i,0,0,i,0,0),!0):!1}var Zx=function(){let n=!1;
vendor: 4,133 bytes, line 104
104try{let t={get passive(){return n=!0,!1}};wd()&&(window.addEventListener("test",null,t),window.removeEventListener("test",null,t))}catch{}return n}();function Rm(n,t){let e=SV(n,t),i=e&&e.match(/^(\d+)(\.\d+)?px$/);return i?+i[1]:void 0}function cr(n,t,e,i){return{x:n.x+e*(t.x-n.x),y:n.y+e*(t.y-n.y)}}function Qx(n,t,e,i){return{x:n.x+e*(t.x-n.x),y:i==="middle"?e<.5?n.y:t.y:i==="after"?e<1?n.y:t.y:e>0?t.y:n.y}}function Kx(n,t,e,i){let o={x:n.cp2x,y:n.cp2y},s={x:t.cp1x,y:t.cp1y},m=cr(n,o,e),f=cr(o,s,e),v=cr(s,t,e),y=cr(m,f,e),M=cr(f,v,e);return cr(y,M,e)}var IV=function(n,t){return{x(e){return n+n+t-e},setWidth(e){t=e},textAlign(e){return e==="center"?e:e==="right"?"left":"right"},xPlus(e,i){return e-i},leftForLtr(e,i){return e-i}}},AV=function(){return{x(n){return n},setWidth(n){},textAlign(n){return n},xPlus(n,t){return n+t},leftForLtr(n,t){return n}}};function Kr(n,t,e){return n?IV(t,e):AV()}function Bm(n,t){let e,i;(t==="ltr"||t==="rtl")&&(e=n.canvas.style,i=[e.getPropertyValue("direction"),e.getPropertyPriority("direction")],e.setProperty("direction",t,"important"),n.prevTextDirection=i)}function Nm(n,t){t!==void 0&&(delete n.prevTextDirection,n.canvas.style.setProperty("direction",t[0],t[1]))}function Jx(n){return n==="angle"?{between:Xa,compare:XN,normalize:In}:{between:ro,compare:(t,e)=>t-e,normalize:t=>t}}function wx({start:n,end:t,count:e,loop:i,style:o}){return{start:n%e,end:t%e,loop:i&&(t-n+1)%e===0,style:o}}function DV(n,t,e){let{property:i,start:o,end:s}=e,{between:m,normalize:f}=Jx(i),v=t.length,{start:y,end:M,loop:I}=n,B,N;if(I){for(y+=v,M+=v,B=0,N=v;B<N&&m(f(t[y%v][i]),o,s);++B)y--,M--;y%=v,M%=v}return M<y&&(M+=v),{start:y,end:M,loop:I,style:n.style}}function Vm(n,t,e){if(!e)return[n];let{property:i,start:o,end:s}=e,m=t.length,{compare:f,between:v,normalize:y}=Jx(i),{start:M,end:I,loop:B,style:N}=DV(n,t,e),H=[],W=!1,G=null,Z,Q,j,Y=()=>v(o,j,Z)&&f(o,j)!==0,U=()=>f(s,Z)===0||v(s,j,Z),K=()=>W||Y(),J=()=>!W||U();for(let ge=M,xe=M;ge<=I;++ge)Q=t[ge%m],!Q.skip&&(Z=y(Q[i]),Z!==j&&(W=v(Z,o,s),G===null&&K()&&(G=f(Z,o)===0?ge:xe),G!==null&&J()&&(H.push(wx({start:G,end:ge,loop:B,count:m,style:N})),G=null),xe=ge,j=Z));return G!==null&&H.push(wx({start:G,end:I,loop:B,count:m,style:N})),H}function Lm(n,t){let e=[],i=n.segments;for(let o=0;o<i.length;o++){let s=Vm(i[o],n.points,t);s.length&&e.push(...s)}return e}function RV(n,t,e,i){let o=0,s=t-1;if(e&&!i)for(;o<t&&!n[o].skip;)o++;for(;o<t&&n[o].skip;)o++;for(o%=t,e&&(s+=o);s>o&&n[s%t].skip;)s--;return s%=t,{start:o,end:s}}function BV(n,t,e,i){let o=n.length,s=[],m=t,f=n[t],v;for(v=t+1;v<=e;++v){let y=n[v%o];y.skip||y.stop?f.skip||(i=!1,s.push({start:t%o,end:(v-1)%o,loop:i}),t=m=y.stop?v:null):(m=v,f.skip&&(t=v)),f=y}return m!==null&&s.push({start:t%o,end:m%o,loop:i}),s}function ev(n,t){let e=n.points,i=n.options.spanGaps,o=e.length;if(!o)return[];let s=!!n._loop,{start:m,end:f}=RV(e,o,s,i);if(i===!0)return Px(n,[{start:m,end:f,loop:s}],e,t);let v=f<m?f+o:f,y=!!n._fullLoop&&m===0&&f===o-1;return Px(n,BV(e,m,v,y),e,t)}function Px(n,t,e,i){return!i||!i.setContext||!e?t:NV(n,t,e,i)}function NV(n,t,e,i){let o=n._chart.getContext(),s=Mx(n.options),{_datasetIndex:m,options:{spanGaps:f}}=n,v=e.length,y=[],M=s,I=t[0].start,B=I;function N(H,W,G,Z){let Q=f?-1:1;if(H!==W){for(H+=v;e[H%v].skip;)H-=Q;for(;e[W%v].skip;)W+=Q;H%v!==W%v&&(y.push({start:H%v,end:W%v,loop:G,style:Z}),M=Z,I=W%v)}}for(let H of t){I=f?I:H.start;let W=e[I%v],G;for(B=I+1;B<=H.end;B++){let Z=e[B%v];G=Mx(i.setContext(ko(o,{type:"segment",p0:W,p1:Z,p0DataIndex:(B-1)%v,p1DataIndex:B%v,datasetIndex:m}))),VV(G,M)&&N(I,B-1,H.loop,M),W=Z,M=G}I<B-1&&N(I,B-1,H.loop,M)}return y}function Mx(n){return{backgroundColor:n.backgroundColor,borderCapStyle:n.borderCapStyle,borderDash:n.borderDash,borderDashOffset:n.borderDashOffset,borderJoinStyle:n.borderJoinStyle,borderWidth:n.borderWidth,borderColor:n.borderColor}}function VV(n,t){if(!t)return!1;let e=[],i=function(o,s){return Pm(s)?(e.includes(s)||e.push(s),e.indexOf(s)):s};return JSON.stringify(n,i)!==JSON.stringify(t,i)}function dd(n,t,e){return n.options.clip?n[e]:t[e]}function LV(n,t){let{xScale:e,yScale:i}=n;
vendor: 10,954 bytes, line 104
104return e&&i?{left:dd(e,t,"left"),right:dd(e,t,"right"),top:dd(i,t,"top"),bottom:dd(i,t,"bottom")}:t}function Fm(n,t){let e=t._clip;if(e.disabled)return!1;let i=LV(t,n.chartArea);return{left:e.left===!1?0:i.left-(e.left===!0?0:e.left),right:e.right===!1?n.width:i.right+(e.right===!0?0:e.right),top:e.top===!1?0:i.top-(e.top===!0?0:e.top),bottom:e.bottom===!1?n.height:i.bottom+(e.bottom===!0?0:e.bottom)}}var Qm=class{constructor(){this._request=null,this._charts=new Map,this._running=!1,this._lastDate=void 0}_notify(t,e,i,o){let s=e.listeners[o],m=e.duration;s.forEach(f=>f({chart:t,initial:e.initial,numSteps:m,currentStep:Math.min(i-e.start,m)}))}_refresh(){this._request||(this._running=!0,this._request=bm.call(window,()=>{this._update(),this._request=null,this._running&&this._refresh()}))}_update(t=Date.now()){let e=0;this._charts.forEach((i,o)=>{if(!i.running||!i.items.length)return;let s=i.items,m=s.length-1,f=!1,v;for(;m>=0;--m)v=s[m],v._active?(v._total>i.duration&&(i.duration=v._total),v.tick(t),f=!0):(s[m]=s[s.length-1],s.pop());f&&(o.draw(),this._notify(o,i,t,"progress")),s.length||(i.running=!1,this._notify(o,i,t,"complete"),i.initial=!1),e+=s.length}),this._lastDate=t,e===0&&(this._running=!1)}_getAnims(t){let e=this._charts,i=e.get(t);return i||(i={running:!1,initial:!0,items:[],listeners:{complete:[],progress:[]}},e.set(t,i)),i}listen(t,e,i){this._getAnims(t).listeners[e].push(i)}add(t,e){!e||!e.length||this._getAnims(t).items.push(...e)}has(t){return this._getAnims(t).items.length>0}start(t){let e=this._charts.get(t);e&&(e.running=!0,e.start=Date.now(),e.duration=e.items.reduce((i,o)=>Math.max(i,o._duration),0),this._refresh())}running(t){if(!this._running)return!1;let e=this._charts.get(t);return!(!e||!e.running||!e.items.length)}stop(t){let e=this._charts.get(t);if(!e||!e.items.length)return;let i=e.items,o=i.length-1;for(;o>=0;--o)i[o].cancel();e.items=[],this._notify(t,e,Date.now(),"complete")}remove(t){return this._charts.delete(t)}},Oo=new Qm,tv="transparent",FV={boolean(n,t,e){return e>.5?t:n},color(n,t,e){let i=Mm(n||tv),o=i.valid&&Mm(t||tv);return o&&o.valid?o.mix(i,e).hexString():t},number(n,t,e){return n+(t-n)*e}},Km=class{constructor(t,e,i,o){let s=e[i];o=Ka([t.to,o,s,t.from]);let m=Ka([t.from,s,o]);this._active=!0,this._fn=t.fn||FV[t.type||typeof m],this._easing=Ha[t.easing]||Ha.linear,this._start=Math.floor(Date.now()+(t.delay||0)),this._duration=this._total=Math.floor(t.duration),this._loop=!!t.loop,this._target=e,this._prop=i,this._from=m,this._to=o,this._promises=void 0}active(){return this._active}update(t,e,i){if(this._active){this._notify(!1);let o=this._target[this._prop],s=i-this._start,m=this._duration-s;this._start=i,this._duration=Math.floor(Math.max(m,t.duration)),this._total+=s,this._loop=!!t.loop,this._to=Ka([t.to,e,o,t.from]),this._from=Ka([t.from,o,e])}}cancel(){this._active&&(this.tick(Date.now()),this._active=!1,this._notify(!1))}tick(t){let e=t-this._start,i=this._duration,o=this._prop,s=this._from,m=this._loop,f=this._to,v;if(this._active=s!==f&&(m||e<i),!this._active){this._target[o]=f,this._notify(!0);return}if(e<0){this._target[o]=s;return}v=e/i%2,v=m&&v>1?2-v:v,v=this._easing(Math.min(1,Math.max(0,v))),this._target[o]=this._fn(s,f,v)}wait(){let t=this._promises||(this._promises=[]);return new Promise((e,i)=>{t.push({res:e,rej:i})})}_notify(t){let e=t?"res":"rej",i=this._promises||[];for(let o=0;o<i.length;o++)i[o][e]()}},Rd=class{constructor(t,e){this._chart=t,this._properties=new Map,this.configure(e)}configure(t){if(!tt(t))return;let e=Object.keys(Rt.animation),i=this._properties;Object.getOwnPropertyNames(t).forEach(o=>{let s=t[o];if(!tt(s))return;let m={};for(let f of e)m[f]=s[f];(Ft(s.properties)&&s.properties||[o]).forEach(f=>{(f===o||!i.has(f))&&i.set(f,m)})})}_animateOptions(t,e){let i=e.options,o=UV(t,i);if(!o)return[];let s=this._createAnimations(o,i);return i.$shared&&zV(t.options.$animations,i).then(()=>{t.options=i},()=>{}),s}_createAnimations(t,e){let i=this._properties,o=[],s=t.$animations||(t.$animations={}),m=Object.keys(e),f=Date.now(),v;for(v=m.length-1;v>=0;--v){let y=m[v];if(y.charAt(0)==="$")continue;if(y==="options"){o.push(...this._animateOptions(t,e));continue}let M=e[y],I=s[y],B=i.get(y);if(I)if(B&&I.active()){I.update(B,M,f);continue}else I.cancel();if(!B||!B.duration){t[y]=M;continue}s[y]=I=new Km(B,t,y,M),o.push(I)}return o}update(t,e){if(this._properties.size===0){Object.assign(t,e);return}let i=this._createAnimations(t,e);if(i.length)return Oo.add(this._chart,i),!0}};function zV(n,t){let e=[],i=Object.keys(t);for(let o=0;o<i.length;o++){let s=n[i[o]];s&&s.active()&&e.push(s.wait())}return Promise.all(e)}function UV(n,t){if(!t)return;let e=n.options;if(!e){n.options=t;return}return e.$shared&&(n.options=e=Object.assign({},e,{$shared:!1,$animations:{}})),e}function nv(n,t){let e=n&&n.options||{},i=e.reverse,o=e.min===void 0?t:0,s=e.max===void 0?t:0;return{start:i?s:o,end:i?o:s}}function jV(n,t,e){if(e===!1)return!1;let i=nv(n,e),o=nv(t,e);return{top:o.end,right:i.end,bottom:o.start,left:i.start}}function HV(n){let t,e,i,o;return tt(n)?(t=n.top,e=n.right,i=n.bottom,o=n.left):t=e=i=o=n,{top:t,right:e,bottom:i,left:o,disabled:n===!1}}function tb(n,t){let e=[],i=n._getSortedDatasetMetas(t),o,s;for(o=0,s=i.length;o<s;++o)e.push(i[o].index);return e}function iv(n,t,e,i={}){let o=n.keys,s=i.mode==="single",m,f,v,y;if(t===null)return;let M=!1;for(m=0,f=o.length;m<f;++m){if(v=+o[m],v===e){if(M=!0,i.all)continue;break}y=n.values[v],Gt(y)&&(s||t===0||Vi(t)===Vi(y))&&(t+=y)}return!M&&!i.all?0:t}function WV(n,t){let{iScale:e,vScale:i}=t,o=e.axis==="x"?"x":"y",s=i.axis==="x"?"x":"y",m=Object.keys(n),f=new Array(m.length),v,y,M;for(v=0,y=m.length;v<y;++v)M=m[v],f[v]={[o]:M,[s]:n[M]};return f}function zm(n,t){let e=n&&n.options.stacked;return e||e===void 0&&t.stack!==void 0}function GV(n,t,e){return`${n.id}.${t.id}.${e.stack||e.type}`}function qV(n){let{min:t,max:e,minDefined:i,maxDefined:o}=n.getUserBounds();return{min:i?t:Number.NEGATIVE_INFINITY,max:o?e:Number.POSITIVE_INFINITY}}function $V(n,t,e){let i=n[t]||(n[t]={});return i[e]||(i[e]={})}function ov(n,t,e,i){for(let o of t.getMatchingVisibleMetas(i).reverse()){let s=n[o.index];if(e&&s>0||!e&&s<0)return o.index}return null}function rv(n,t){let{chart:e,_cachedMeta:i}=n,o=e._stacks||(e._stacks={}),{iScale:s,vScale:m,index:f}=i,v=s.axis,y=m.axis,M=GV(s,m,i),I=t.length,B;for(let N=0;N<I;++N){let H=t[N],{[v]:W,[y]:G}=H,Z=H._stacks||(H._stacks={});B=Z[y]=$V(o,M,W),B[f]=G,B._top=ov(B,m,!0,i.type),B._bottom=ov(B,m,!1,i.type);let Q=B._visualValues||(B._visualValues={});Q[f]=G}}function Um(n,t){let e=n.scales;return Object.keys(e).filter(i=>e[i].axis===t).shift()}function YV(n,t){return ko(n,{active:!1,dataset:void 0,datasetIndex:t,index:t,mode:"default",type:"dataset"})}function XV(n,t,e){return ko(n,{active:!1,dataIndex:t,parsed:void 0,raw:void 0,element:e,index:t,mode:"default",type:"data"})}function dl(n,t){let e=n.controller.index,i=n.vScale&&n.vScale.axis;if(i){t=t||n._parsed;for(let o of t){let s=o._stacks;if(!s||s[i]===void 0||s[i][e]===void 0)return;delete s[i][e],s[i]._visualValues!==void 0&&s[i]._visualValues[e]!==void 0&&delete s[i]._visualValues[e]}}}var jm=n=>n==="reset"||n==="none",av=(n,t)=>t?n:Object.assign({},n),ZV=(n,t,e)=>n&&!t.hidden&&t._stacked&&{keys:tb(e,!0),values:null},_r=(()=>{class n{static defaults={};static datasetElementType=null;static dataElementType=null;constructor(e,i){this.chart=e,this._ctx=e.ctx,this.index=i,this._cachedDataOpts={},this._cachedMeta=this.getMeta(),this._type=this._cachedMeta.type,this.options=void 0,this._parsing=!1,this._data=void 0,this._objectData=void 0,this._sharedOptions=void 0,this._drawStart=void 0,this._drawCount=void 0,this.enableOptionSharing=!1,this.supportsDecimation=!1,this.$context=void 0,this._syncList=[],this.datasetElementType=new.target.datasetElementType,this.dataElementType=new.target.dataElementType,this.initialize()}initialize(){let e=this._cachedMeta;this.configure(),this.linkScales(),e._stacked=zm(e.vScale,e),this.addElements(),this.options.fill&&!this.chart.isPluginEnabled("filler")&&console.warn("Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options")}updateIndex(e){this.index!==e&&dl(this._cachedMeta),this.index=e}linkScales(){let e=this.chart,i=this._cachedMeta,o=this.getDataset(),s=(B,N,H,W)=>B==="x"?N:B==="r"?W:H,m=i.xAxisID=qe(o.xAxisID,Um(e,"x")),f=i.yAxisID=qe(o.yAxisID,Um(e,"y")),v=i.rAxisID=qe(o.rAxisID,Um(e,"r")),y=i.indexAxis,M=i.iAxisID=s(y,m,f,v),I=i.vAxisID=s(y,f,m,v);i.xScale=this.getScaleForId(m),i.yScale=this.getScaleForId(f),i.rScale=this.getScaleForId(v),i.iScale=this.getScaleForId(M),i.vScale=this.getScaleForId(I)}getDataset(){return this.chart.data.datasets[this.index]}getMeta(){return this.chart.getDatasetMeta(this.index)}getScaleForId(e){return this.chart.scales[e]}_getOtherScale(e){let i=this._cachedMeta;return e===i.iScale?i.vScale:i.iScale}reset(){this._update("reset")}_destroy(){let e=this._cachedMeta;this._data&&xm(this._data,this),e._stacked&&dl(e)}_dataCheck(){let e=this.getDataset(),i=e.data||(e.data=[]),o=this._data;if(tt(i)){let s=this._cachedMeta;this._data=WV(i,s)}else if(o!==i){if(o){xm(o,this);let s=this._cachedMeta;dl(s),s._parsed=[]}i&&Object.isExtensible(i)&&Nx(i,this),this._syncList=[],this._data=i}}addElements(){let e=this._cachedMeta;this._dataCheck(),this.datasetElementType&&(e.dataset=new this.datasetElementType)}buildOrUpdateElements(e){let i=this._cachedMeta,o=this.getDataset(),s=!1;this._dataCheck();let m=i._stacked;i._stacked=zm(i.vScale,i),i.stack!==o.stack&&(s=!0,dl(i),i.stack=o.stack),this._resyncElements(e),(s||m!==i._stacked)&&(rv(this,i._parsed),i._stacked=zm(i.vScale,i))}configure(){let e=this.chart.config,i=e.datasetScopeKeys(this._type),o=e.getOptionScopes(this.getDataset(),i,!0);this.options=e.createResolver(o,this.getContext()),this._parsing=this.options.parsing,this._cachedDataOpts={}}parse(e,i){let{_cachedMeta:o,_data:s}=this,{iScale:m,_stacked:f}=o,v=m.axis,y=e===0&&i===s.length?!0:o._sorted,M=e>0&&o._parsed[e-1],I,B,N;if(this._parsing===!1)o._parsed=s,o._sorted=!0,N=s;else{Ft(s[e])?N=this.parseArrayData(o,s,e,i):tt(s[e])?N=this.parseObjectData(o,s,e,i):N=this.parsePrimitiveData(o,s,e,i);let H=()=>B[v]===null||M&&B[v]<M[v];for(I=0;I<i;++I)o._parsed[I+e]=B=N[I],y&&(H()&&(y=!1),M=B);o._sorted=y}f&&rv(this,N)}parsePrimitiveData(e,i,o,s){let{iScale:m,vScale:f}=e,v=m.axis,y=f.axis,M=m.getLabels(),I=m===f,B=new Array(s),N,H,W;for(N=0,H=s;N<H;++N)W=N+o,B[N]={[v]:I||m.parse(M[W],W),[y]:f.parse(i[W],W)};return B}parseArrayData(e,i,o,s){let{xScale:m,yScale:f}=e,v=new Array(s),y,M,I,B;for(y=0,M=s;y<M;++y)I=y+o,B=i[I],v[y]={x:m.parse(B[0],I),y:f.parse(B[1],I)};return v}parseObjectData(e,i,o,s){let{xScale:m,yScale:f}=e,{xAxisKey:v="x",yAxisKey:y="y"}=this._parsing,M=new Array(s),I,B,N,H;for(I=0,B=s;I<B;
vendor: 6,496 bytes, line 104
104++I)N=I+o,H=i[N],M[I]={x:m.parse(So(H,v),N),y:f.parse(So(H,y),N)};return M}getParsed(e){return this._cachedMeta._parsed[e]}getDataElement(e){return this._cachedMeta.data[e]}applyStack(e,i,o){let s=this.chart,m=this._cachedMeta,f=i[e.axis],v={keys:tb(s,!0),values:i._stacks[e.axis]._visualValues};return iv(v,f,m.index,{mode:o})}updateRangeFromParsed(e,i,o,s){let m=o[i.axis],f=m===null?NaN:m,v=s&&o._stacks[i.axis];s&&v&&(s.values=v,f=iv(s,m,this._cachedMeta.index)),e.min=Math.min(e.min,f),e.max=Math.max(e.max,f)}getMinMax(e,i){let o=this._cachedMeta,s=o._parsed,m=o._sorted&&e===o.iScale,f=s.length,v=this._getOtherScale(e),y=ZV(i,o,this.chart),M={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY},{min:I,max:B}=qV(v),N,H;function W(){H=s[N];let G=H[v.axis];return!Gt(H[e.axis])||I>G||B<G}for(N=0;N<f&&!(!W()&&(this.updateRangeFromParsed(M,e,H,y),m));++N);if(m){for(N=f-1;N>=0;--N)if(!W()){this.updateRangeFromParsed(M,e,H,y);break}}return M}getAllParsedValues(e){let i=this._cachedMeta._parsed,o=[],s,m,f;for(s=0,m=i.length;s<m;++s)f=i[s][e.axis],Gt(f)&&o.push(f);return o}getMaxOverflow(){return!1}getLabelAndValue(e){let i=this._cachedMeta,o=i.iScale,s=i.vScale,m=this.getParsed(e);return{label:o?""+o.getLabelForValue(m[o.axis]):"",value:s?""+s.getLabelForValue(m[s.axis]):""}}_update(e){let i=this._cachedMeta;this.update(e||"default"),i._clip=HV(qe(this.options.clip,jV(i.xScale,i.yScale,this.getMaxOverflow())))}update(e){}draw(){let e=this._ctx,i=this.chart,o=this._cachedMeta,s=o.data||[],m=i.chartArea,f=[],v=this._drawStart||0,y=this._drawCount||s.length-v,M=this.options.drawActiveElementsOnTop,I;for(o.dataset&&o.dataset.draw(e,m,v,y),I=v;I<v+y;++I){let B=s[I];B.hidden||(B.active&&M?f.push(B):B.draw(e,m))}for(I=0;I<f.length;++I)f[I].draw(e,m)}getStyle(e,i){let o=i?"active":"default";return e===void 0&&this._cachedMeta.dataset?this.resolveDatasetElementOptions(o):this.resolveDataElementOptions(e||0,o)}getContext(e,i,o){let s=this.getDataset(),m;if(e>=0&&e<this._cachedMeta.data.length){let f=this._cachedMeta.data[e];m=f.$context||(f.$context=XV(this.getContext(),e,f)),m.parsed=this.getParsed(e),m.raw=s.data[e],m.index=m.dataIndex=e}else m=this.$context||(this.$context=YV(this.chart.getContext(),this.index)),m.dataset=s,m.index=m.datasetIndex=this.index;return m.active=!!i,m.mode=o,m}resolveDatasetElementOptions(e){return this._resolveElementOptions(this.datasetElementType.id,e)}resolveDataElementOptions(e,i){return this._resolveElementOptions(this.dataElementType.id,i,e)}_resolveElementOptions(e,i="default",o){let s=i==="active",m=this._cachedDataOpts,f=e+"-"+i,v=m[f],y=this.enableOptionSharing&&$a(o);if(v)return av(v,y);let M=this.chart.config,I=M.datasetElementScopeKeys(this._type,e),B=s?[`${e}Hover`,"hover",e,""]:[e,""],N=M.getOptionScopes(this.getDataset(),I),H=Object.keys(Rt.elements[e]),W=()=>this.getContext(o,s,i),G=M.resolveNamedOptions(N,H,W,B);return G.$shared&&(G.$shared=y,m[f]=Object.freeze(av(G,y))),G}_resolveAnimations(e,i,o){let s=this.chart,m=this._cachedDataOpts,f=`animation-${i}`,v=m[f];if(v)return v;let y;if(s.options.animation!==!1){let I=this.chart.config,B=I.datasetAnimationScopeKeys(this._type,i),N=I.getOptionScopes(this.getDataset(),B);y=I.createResolver(N,this.getContext(e,o,i))}let M=new Rd(s,y&&y.animations);return y&&y._cacheable&&(m[f]=Object.freeze(M)),M}getSharedOptions(e){if(e.$shared)return this._sharedOptions||(this._sharedOptions=Object.assign({},e))}includeOptions(e,i){return!i||jm(e)||this.chart._animationsDisabled}_getSharedOptions(e,i){let o=this.resolveDataElementOptions(e,i),s=this._sharedOptions,m=this.getSharedOptions(o),f=this.includeOptions(i,m)||m!==s;return this.updateSharedOptions(m,i,o),{sharedOptions:m,includeOptions:f}}updateElement(e,i,o,s){jm(s)?Object.assign(e,o):this._resolveAnimations(i,s).update(e,o)}updateSharedOptions(e,i,o){e&&!jm(i)&&this._resolveAnimations(void 0,i).update(e,o)}_setStyle(e,i,o,s){e.active=s;let m=this.getStyle(i,s);this._resolveAnimations(i,o,s).update(e,{options:!s&&this.getSharedOptions(m)||m})}removeHoverStyle(e,i,o){this._setStyle(e,o,"active",!1)}setHoverStyle(e,i,o){this._setStyle(e,o,"active",!0)}_removeDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!1)}_setDatasetHoverStyle(){let e=this._cachedMeta.dataset;e&&this._setStyle(e,void 0,"active",!0)}_resyncElements(e){let i=this._data,o=this._cachedMeta.data;for(let[v,y,M]of this._syncList)this[v](y,M);this._syncList=[];let s=o.length,m=i.length,f=Math.min(m,s);f&&this.parse(0,f),m>s?this._insertElements(s,m-s,e):m<s&&this._removeElements(m,s-m)}_insertElements(e,i,o=!0){let s=this._cachedMeta,m=s.data,f=e+i,v,y=M=>{for(M.length+=i,v=M.length-1;v>=f;v--)M[v]=M[v-i]};for(y(m),v=e;v<f;++v)m[v]=new this.dataElementType;this._parsing&&y(s._parsed),this.parse(e,i),o&&this.updateElements(m,e,i,"reset")}updateElements(e,i,o,s){}_removeElements(e,i){let o=this._cachedMeta;if(this._parsing){let s=o._parsed.splice(e,i);o._stacked&&dl(o,s)}o.data.splice(e,i)}_sync(e){if(this._parsing)this._syncList.push(e);else{let[i,o,s]=e;this[i](o,s)}this.chart._dataChanges.push([this.index,...e])}_onDataPush(){let e=arguments.length;this._sync(["_insertElements",this.getDataset().data.length-e,e])}_onDataPop(){this._sync(["_removeElements",this._cachedMeta.data.length-1,1])}_onDataShift(){this._sync(["_removeElements",0,1])}_onDataSplice(e,i){i&&this._sync(["_removeElements",e,i]);let o=arguments.length-2;o&&this._sync(["_insertElements",e,o])}_onDataUnshift(){this._sync(["_insertElements",0,arguments.length])}}return n})();function QV(n,t){if(!n._cache.$bar){let e=n.getMatchingVisibleMetas(t),i=[];for(let o=0,s=e.length;o<s;o++)i=i.concat(e[o].controller.getAllParsedValues(n));n._cache.$bar=vm(i.sort((o,s)=>o-s))}return n._cache.$bar}function KV(n){let t=n.iScale,e=QV(t,n.type),i=t._length,o,s,m,f,v=()=>{m===32767||m===-32768||($a(f)&&(i=Math.min(i,Math.abs(m-f)||i)),f=m)};for(o=0,s=e.length;o<s;++o)m=t.getPixelForValue(e[o]),v();for(f=void 0,o=0,s=t.ticks.length;o<s;++o)m=t.getPixelForTick(o),v();return i}function JV(n,t,e,i){let o=e.barThickness,s,m;return et(o)?(s=t.min*e.categoryPercentage,m=e.barPercentage):(s=o*i,m=1),{chunk:s/i,ratio:m,start:t.pixels[n]-s/2}}function eL(n,t,e,i){let o=t.pixels,s=o[n],m=n>0?o[n-1]:null,f=n<o.length-1?o[n+1]:null,v=e.categoryPercentage;m===null&&(m=s-(f===null?t.end-t.start:f-s)),f===null&&(f=s+s-m);let y=s-(s-Math.min(m,f))/2*v;return{chunk:Math.abs(f-m)/2*v/i,ratio:e.barPercentage,start:y}}
104function tL(n,t,e,i){let o=e.parse(n[0],i),s=e.parse(n[1],i),m=Math.min(o,s),f=Math.max(o,s),v=m,y=f;Math.abs(m)>Math.abs(f)&&(v=f,y=m),t[e.axis]=y,t._custom={barStart:v,barEnd:y,start:o,end:s,min:m,max:f}}function nb(n,t,e,i){return Ft(n)?tL(n,t,e,i):t[e.axis]=e.parse(n,i),t}function sv(n,t,e,i){let o=n.iScale,s=n.vScale,m=o.getLabels(),f=o===s,v=[],y,M,I,B;for(y=e,M=e+i;y<M;++y)B=t[y],I={},I[o.axis]=f||o.parse(m[y],y),v.push(nb(B,I,s,y));return v}function Hm(n){return n&&n.barStart!==void 0&&n.barEnd!==void 0}function nL(n,t,e){return n!==0?Vi(n):(t.isHorizontal()?1:-1)*(t.min>=e?1:-1)}function iL(n){let t,e,i,o,s;return n.horizontal?(t=n.base>n.x,e="left",i="right"):(t=n.base<n.y,e="bottom",i="top"),t?(o="end",s="start"):(o="start",s="end"),{start:e,end:i,reverse:t,top:o,bottom:s}}function oL(n,t,e,i){let o=t.borderSkipped,s={};if(!o){n.borderSkipped=s;return}if(o===!0){n.borderSkipped={top:!0,right:!0,bottom:!0,left:!0};return}let{start:m,end:f,reverse:v,top:y,bottom:M}=iL(n);o==="middle"&&e&&(n.enableBorderRadius=!0,(e._top||0)===i?o=y:(e._bottom||0)===i?o=M:(s[lv(M,m,f,v)]=!0,o=y)),s[lv(o,m,f,v)]=!0,n.borderSkipped=s}function lv(n,t,e,i){return i?(n=rL(n,t,e),n=cv(n,e,t)):n=cv(n,t,e),n}function rL(n,t,e){return n===t?e:n===e?t:n}function cv(n,t,e){return n==="start"?t:n==="end"?e:n}function aL(n,{inflateAmount:t},e){n.inflateAmount=t==="auto"?e===1?.33:0:t}var sL=(()=>{class n extends _r{static id="bar";static defaults={datasetElementType:!1,dataElementType:"bar",categoryPercentage:.8,barPercentage:.9,grouped:!0,animations:{numbers:{type:"number",properties:["x","y","base","width","height"]}}};static overrides={scales:{_index_:{type:"category",offset:!0,grid:{offset:!0}},_value_:{type:"linear",beginAtZero:!0}}};parsePrimitiveData(e,i,o,s){return sv(e,i,o,s)}parseArrayData(e,i,o,s){return sv(e,i,o,s)}parseObjectData(e,i,o,s){let{iScale:m,vScale:f}=e,{xAxisKey:v="x",yAxisKey:y="y"}=this._parsing,M=m.axis==="x"?v:y,I=f.axis==="x"?v:y,B=[],N,H,W,G;for(N=o,H=o+s;N<H;++N)G=i[N],W={},W[m.axis]=m.parse(So(G,M),N),B.push(nb(So(G,I),W,f,N));return B}updateRangeFromParsed(e,i,o,s){super.updateRangeFromParsed(e,i,o,s);let m=o._custom;m&&i===this._cachedMeta.vScale&&(e.min=Math.min(e.min,m.min),e.max=Math.max(e.max,m.max))}getMaxOverflow(){return 0}getLabelAndValue(e){let i=this._cachedMeta,{iScale:o,vScale:s}=i,m=this.getParsed(e),f=m._custom,v=Hm(f)?"["+f.start+", "+f.end+"]":""+s.getLabelForValue(m[s.axis]);return{label:""+o.getLabelForValue(m[o.axis]),value:v}}initialize(){this.enableOptionSharing=!0,super.initialize();let e=this._cachedMeta;e.stack=this.getDataset().stack}update(e){let i=this._cachedMeta;this.updateElements(i.data,0,i.data.length,e)}updateElements(e,i,o,s){let m=s==="reset",{index:f,_cachedMeta:{vScale:v}}=this,y=v.getBasePixel(),M=v.isHorizontal(),I=this._getRuler(),{sharedOptions:B,includeOptions:N}=this._getSharedOptions(i,s);for(let H=i;H<i+o;H++){let W=this.getParsed(H),G=m||et(W[v.axis])?{base:y,head:y}:this._calculateBarValuePixels(H),Z=this._calculateBarIndexPixels(H,I),Q=(W._stacks||{})[v.axis],j={horizontal:M,base:G.base,enableBorderRadius:!Q||Hm(W._custom)||f===Q._top||f===Q._bottom,x:M?G.head:Z.center,y:M?Z.center:G.head,height:M?Z.size:Math.abs(G.size),width:M?Math.abs(G.size):Z.size};N&&(j.options=B||this.resolveDataElementOptions(H,e[H].active?"active":s));let Y=j.options||e[H].options;oL(j,Y,Q,f),aL(j,Y,I.ratio),this.updateElement(e[H],H,j,s)}}_getStacks(e,i){let{iScale:o}=this._cachedMeta,s=o.getMatchingVisibleMetas(this._type).filter(I=>I.controller.options.grouped),m=o.options.stacked,f=[],v=this._cachedMeta.controller.getParsed(i),y=v&&v[o.axis],M=I=>{let B=I._parsed.find(H=>H[o.axis]===y),N=B&&B[I.vScale.axis];if(et(N)||isNaN(N))return!0};for(let I of s)if(!(i!==void 0&&M(I))&&((m===!1||f.indexOf(I.stack)===-1||m===void 0&&I.stack===void 0)&&f.push(I.stack),I.index===e))break;return f.length||f.push(void 0),f}_getStackCount(e){return this._getStacks(void 0,e).length}_getAxisCount(){return this._getAxis().length}getFirstScaleIdForIndexAxis(){let e=this.chart.scales,i=this.chart.options.indexAxis;return Object.keys(e).filter(o=>e[o].axis===i).shift()}_getAxis(){let e={},i=this.getFirstScaleIdForIndexAxis();for(let o of this.chart.data.datasets)e[qe(this.chart.options.indexAxis==="x"?o.xAxisID:o.yAxisID,i)]=!0;return Object.keys(e)}_getStackIndex(e,i,o){let s=this._getStacks(e,o),m=i!==void 0?s.indexOf(i):-1;return m===-1?s.length-1:m}_getRuler(){let e=this.options,i=this._cachedMeta,o=i.iScale,s=[],m,f;for(m=0,f=i.data.length;m<f;++m)s.push(o.getPixelForValue(this.getParsed(m)[o.axis],m));let v=e.barThickness;return{min:v||KV(i),pixels:s,start:o._startPixel,end:o._endPixel,stackCount:this._getStackCount(),scale:o,grouped:e.grouped,ratio:v?1:e.categoryPercentage*e.barPercentage}}_calculateBarValuePixels(e){let{_cachedMeta:{vScale:i,_stacked:o,index:s},options:{base:m,minBarLength:f}}=this,v=m||0,y=this.getParsed(e),M=y._custom,I=Hm(M),B=y[i.axis],N=0,H=o?this.applyStack(i,y,o):B,W,G;H!==B&&(N=H-B,H=B),I&&(B=M.barStart,H=M.barEnd-M.barStart,B!==0&&Vi(B)!==Vi(M.barEnd)&&(N=0),N+=B);let Z=!et(m)&&!I?m:N,Q=i.getPixelForValue(Z);if(this.chart.getDataVisibility(e)?W=i.getPixelForValue(N+H):W=Q,G=W-Q,Math.abs(G)<f){G=nL(G,i,v)*f,B===v&&(Q-=G/2);let j=i.getPixelForDecimal(0),Y=i.getPixelForDecimal(1),U=Math.min(j,Y),K=Math.max(j,Y);Q=Math.max(Math.min(Q,K),U),W=Q+G,o&&!I&&(y._stacks[i.axis]._visualValues[s]=i.getValueForPixel(W)-i.getValueForPixel(Q))}if(Q===i.getPixelForValue(v)){let j=Vi(G)*i.getLineWidthForValue(v)/2;Q+=j,G-=j}return{size:G,base:Q,head:W,center:W+G/2}}_calculateBarIndexPixels(e,i){let o=i.scale,s=this.options,m=s.skipNull,f=qe(s.maxBarThickness,1/0),v,y,M=this._getAxisCount();if(i.grouped){let I=m?this._getStackCount(e):i.stackCount,B=s.barThickness==="flex"?eL(e,i,s,I*M):JV(e,i,s,I*M),N=this.chart.options.indexAxis==="x"?this.getDataset().xAxisID:this.getDataset().yAxisID,H=this._getAxis().indexOf(qe(N,this.getFirstScaleIdForIndexAxis())),W=this._getStackIndex(this.index,this._cachedMeta.stack,m?e:void 0)+H;v=B.start+B.chunk*W+B.chunk/2,y=Math.min(f,B.chunk*B.ratio)}else v=o.getPixelForValue(this.getParsed(e)[o.axis],e),y=Math.min(f,i.min*i.ratio);return{base:v-y/2,head:v+y/2,center:v,size:y}}draw(){let e=this._cachedMeta,i=e.vScale,o=e.data,s=o.length,m=0;for(;m<s;++m)this.getParsed(m)[i.axis]!==null&&!o[m].hidden&&o[m].draw(this._ctx)}}return n})(),lL=(()=>{class n extends _r{static id="bubble";static defaults={datasetElementType:!1,dataElementType:"point",animations:{numbers:{type:"number",properties:["x","y","borderWidth","radius"]}}};static overrides={scales:{x:{type:"linear"},y:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,super.initialize()}parsePrimitiveData(e,i,o,s){let m=super.parsePrimitiveData(e,i,o,s);for(let f=0;f<m.length;f++)m[f]._custom=this.resolveDataElementOptions(f+o).radius;return m}parseArrayData(e,i,o,s){let m=super.parseArrayData(e,i,o,s);for(let f=0;f<m.length;f++){let v=i[o+f];m[f]._custom=qe(v[2],this.resolveDataElementOptions(f+o).radius)}return m}parseObjectData(e,i,o,s){let m=super.parseObjectData(e,i,o,s);for(let f=0;f<m.length;f++){let v=i[o+f];m[f]._custom=qe(v&&v.r&&+v.r,this.resolveDataElementOptions(f+o).radius)}return m}getMaxOverflow(){let e=this._cachedMeta.data,i=0;for(let o=e.length-1;o>=0;--o)i=Math.max(i,e[o].size(this.resolveDataElementOptions(o))/2);return i>0&&i}getLabelAndValue(e){let i=this._cachedMeta,o=this.chart.data.labels||[],{xScale:s,yScale:m}=i,f=this.getParsed(e),v=s.getLabelForValue(f.x),y=m.getLabelForValue(f.y),M=f._custom;return{label:o[e]||"",value:"("+v+", "+y+(M?", "+M:"")+")"}}update(e){let i=this._cachedMeta.data;this.updateElements(i,0,i.length,e)}updateElements(e,i,o,s){let m=s==="reset",{iScale:f,vScale:v}=this._cachedMeta,{sharedOptions:y,includeOptions:M}=this._getSharedOptions(i,s),I=f.axis,B=v.axis;for(let N=i;N<i+o;N++){let H=e[N],W=!m&&this.getParsed(N),G={},Z=G[I]=m?f.getPixelForDecimal(.5):f.getPixelForValue(W[I]),Q=G[B]=m?v.getBasePixel():v.getPixelForValue(W[B]);G.skip=isNaN(Z)||isNaN(Q),M&&(G.options=y||this.resolveDataElementOptions(N,H.active?"active":s),m&&(G.options.radius=0)),this.updateElement(H,N,G,s)}}resolveDataElementOptions(e,i){let o=this.getParsed(e),s=super.resolveDataElementOptions(e,i);s.$shared&&(s=Object.assign({},s,{$shared:!1}));let m=s.radius;return i!=="active"&&(s.radius=0),s.radius+=qe(o&&o._custom,m),s}}return n})();function cL(n,t,e){let i=1,o=1,s=0,m=0;if(t<zt){let f=n,v=f+t,y=Math.cos(f),M=Math.sin(f),I=Math.cos(v),B=Math.sin(v),N=(j,Y,U)=>Xa(j,f,v,!0)?1:Math.max(Y,Y*e,U,U*e),H=(j,Y,U)=>Xa(j,f,v,!0)?-1:Math.min(Y,Y*e,U,U*e),W=N(0,y,I),G=N(tn,M,B),Z=H(mt,y,I),Q=H(mt+tn,M,B);i=(W-Z)/2,o=(G-Q)/2,s=-(W+Z)/2,m=-(G+Q)/2}return{ratioX:i,ratioY:o,offsetX:s,offsetY:m}}
vendor: 4,571 bytes, line 104
104var xg=(()=>{class n extends _r{static id="doughnut";static defaults={datasetElementType:!1,dataElementType:"arc",animation:{animateRotate:!0,animateScale:!1},animations:{numbers:{type:"number",properties:["circumference","endAngle","innerRadius","outerRadius","startAngle","x","y","offset","borderWidth","spacing"]}},cutout:"50%",rotation:0,circumference:360,radius:"100%",spacing:0,indexAxis:"r"};static descriptors={_scriptable:e=>e!=="spacing",_indexable:e=>e!=="spacing"&&!e.startsWith("borderDash")&&!e.startsWith("hoverBorderDash")};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let i=e.data,{labels:{pointStyle:o,textAlign:s,color:m,useBorderRadius:f,borderRadius:v}}=e.legend.options;return i.labels.length&&i.datasets.length?i.labels.map((y,M)=>{let B=e.getDatasetMeta(0).controller.getStyle(M);return{text:y,fillStyle:B.backgroundColor,fontColor:m,hidden:!e.getDataVisibility(M),lineDash:B.borderDash,lineDashOffset:B.borderDashOffset,lineJoin:B.borderJoinStyle,lineWidth:B.borderWidth,strokeStyle:B.borderColor,textAlign:s,pointStyle:o,borderRadius:f&&(v||B.borderRadius),index:M}}):[]}},onClick(e,i,o){o.chart.toggleDataVisibility(i.index),o.chart.update()}}}};constructor(e,i){super(e,i),this.enableOptionSharing=!0,this.innerRadius=void 0,this.outerRadius=void 0,this.offsetX=void 0,this.offsetY=void 0}linkScales(){}parse(e,i){let o=this.getDataset().data,s=this._cachedMeta;if(this._parsing===!1)s._parsed=o;else{let m=y=>+o[y];if(tt(o[e])){let{key:y="value"}=this._parsing;m=M=>+So(o[M],y)}let f,v;for(f=e,v=e+i;f<v;++f)s._parsed[f]=m(f)}}_getRotation(){return Si(this.options.rotation-90)}_getCircumference(){return Si(this.options.circumference)}_getRotationExtents(){let e=zt,i=-zt;for(let o=0;o<this.chart.data.datasets.length;++o)if(this.chart.isDatasetVisible(o)&&this.chart.getDatasetMeta(o).type===this._type){let s=this.chart.getDatasetMeta(o).controller,m=s._getRotation(),f=s._getCircumference();e=Math.min(e,m),i=Math.max(i,m+f)}return{rotation:e,circumference:i-e}}update(e){let i=this.chart,{chartArea:o}=i,s=this._cachedMeta,m=s.data,f=this.getMaxBorderWidth()+this.getMaxOffset(m)+this.options.spacing,v=Math.max((Math.min(o.width,o.height)-f)/2,0),y=Math.min(kx(this.options.cutout,v),1),M=this._getRingWeight(this.index),{circumference:I,rotation:B}=this._getRotationExtents(),{ratioX:N,ratioY:H,offsetX:W,offsetY:G}=cL(B,I,y),Z=(o.width-f)/N,Q=(o.height-f)/H,j=Math.max(Math.min(Z,Q)/2,0),Y=mm(this.options.radius,j),U=Math.max(Y*y,0),K=(Y-U)/this._getVisibleDatasetWeightTotal();this.offsetX=W*Y,this.offsetY=G*Y,s.total=this.calculateTotal(),this.outerRadius=Y-K*this._getRingWeightOffset(this.index),this.innerRadius=Math.max(this.outerRadius-K*M,0),this.updateElements(m,0,m.length,e)}_circumference(e,i){let o=this.options,s=this._cachedMeta,m=this._getCircumference();return i&&o.animation.animateRotate||!this.chart.getDataVisibility(e)||s._parsed[e]===null||s.data[e].hidden?0:this.calculateCircumference(s._parsed[e]*m/zt)}updateElements(e,i,o,s){let m=s==="reset",f=this.chart,v=f.chartArea,M=f.options.animation,I=(v.left+v.right)/2,B=(v.top+v.bottom)/2,N=m&&M.animateScale,H=N?0:this.innerRadius,W=N?0:this.outerRadius,{sharedOptions:G,includeOptions:Z}=this._getSharedOptions(i,s),Q=this._getRotation(),j;for(j=0;j<i;++j)Q+=this._circumference(j,m);for(j=i;j<i+o;++j){let Y=this._circumference(j,m),U=e[j],K={x:I+this.offsetX,y:B+this.offsetY,startAngle:Q,endAngle:Q+Y,circumference:Y,outerRadius:W,innerRadius:H};Z&&(K.options=G||this.resolveDataElementOptions(j,U.active?"active":s)),Q+=Y,this.updateElement(U,j,K,s)}}calculateTotal(){let e=this._cachedMeta,i=e.data,o=0,s;for(s=0;s<i.length;s++){let m=e._parsed[s];m!==null&&!isNaN(m)&&this.chart.getDataVisibility(s)&&!i[s].hidden&&(o+=Math.abs(m))}return o}calculateCircumference(e){let i=this._cachedMeta.total;return i>0&&!isNaN(e)?zt*(Math.abs(e)/i):0}getLabelAndValue(e){let i=this._cachedMeta,o=this.chart,s=o.data.labels||[],m=Za(i._parsed[e],o.options.locale);return{label:s[e]||"",value:m}}getMaxBorderWidth(e){let i=0,o=this.chart,s,m,f,v,y;if(!e){for(s=0,m=o.data.datasets.length;s<m;++s)if(o.isDatasetVisible(s)){f=o.getDatasetMeta(s),e=f.data,v=f.controller;break}}if(!e)return 0;for(s=0,m=e.length;s<m;++s)y=v.resolveDataElementOptions(s),y.borderAlign!=="inner"&&(i=Math.max(i,y.borderWidth||0,y.hoverBorderWidth||0));return i}getMaxOffset(e){let i=0;for(let o=0,s=e.length;o<s;++o){let m=this.resolveDataElementOptions(o);i=Math.max(i,m.offset||0,m.hoverOffset||0)}return i}_getRingWeightOffset(e){let i=0;for(let o=0;o<e;
104++o)this.chart.isDatasetVisible(o)&&(i+=this._getRingWeight(o));return i}_getRingWeight(e){return Math.max(qe(this.chart.data.datasets[e].weight,1),0)}_getVisibleDatasetWeightTotal(){return this._getRingWeightOffset(this.chart.data.datasets.length)||1}}return n})(),dL=(()=>{class n extends _r{static id="line";static defaults={datasetElementType:"line",dataElementType:"point",showLine:!0,spanGaps:!1};static overrides={scales:{_index_:{type:"category"},_value_:{type:"linear"}}};initialize(){this.enableOptionSharing=!0,this.supportsDecimation=!0,super.initialize()}update(e){let i=this._cachedMeta,{dataset:o,data:s=[],_dataset:m}=i,f=this.chart._animationsDisabled,{start:v,count:y}=Cm(i,s,f);this._drawStart=v,this._drawCount=y,wm(i)&&(v=0,y=s.length),o._chart=this.chart,o._datasetIndex=this.index,o._decimated=!!m._decimated,o.points=s;let M=this.resolveDatasetElementOptions(e);this.options.showLine||(M.borderWidth=0),M.segment=this.options.segment,this.updateElement(o,void 0,{animated:!f,options:M},e),this.updateElements(s,v,y,e)}updateElements(e,i,o,s){let m=s==="reset",{iScale:f,vScale:v,_stacked:y,_dataset:M}=this._cachedMeta,{sharedOptions:I,includeOptions:B}=this._getSharedOptions(i,s),N=f.axis,H=v.axis,{spanGaps:W,segment:G}=this.options,Z=Qr(W)?W:Number.POSITIVE_INFINITY,Q=this.chart._animationsDisabled||m||s==="none",j=i+o,Y=e.length,U=i>0&&this.getParsed(i-1);for(let K=0;K<Y;++K){let J=e[K],ge=Q?J:{};if(K<i||K>=j){ge.skip=!0;continue}let xe=this.getParsed(K),he=et(xe[H]),Ce=ge[N]=f.getPixelForValue(xe[N],K),De=ge[H]=m||he?v.getBasePixel():v.getPixelForValue(y?this.applyStack(v,xe,y):xe[H],K);ge.skip=isNaN(Ce)||isNaN(De)||he,ge.stop=K>0&&Math.abs(xe[N]-U[N])>Z,G&&(ge.parsed=xe,ge.raw=M.data[K]),B&&(ge.options=I||this.resolveDataElementOptions(K,J.active?"active":s)),Q||this.updateElement(J,K,ge,s),U=xe}}getMaxOverflow(){let e=this._cachedMeta,i=e.dataset,o=i.options&&i.options.borderWidth||0,s=e.data||[];if(!s.length)return o;let m=s[0].size(this.resolveDataElementOptions(0)),f=s[s.length-1].size(this.resolveDataElementOptions(s.length-1));return Math.max(o,m,f)/2}draw(){let e=this._cachedMeta;e.dataset.updateControlPoints(this.chart.chartArea,e.iScale.axis),super.draw()}}return n})(),ib=(()=>{class n extends _r{static id="polarArea";static defaults={dataElementType:"arc",animation:{animateRotate:!0,animateScale:!0},animations:{numbers:{type:"number",properties:["x","y","startAngle","endAngle","innerRadius","outerRadius"]}},indexAxis:"r",startAngle:0};static overrides={aspectRatio:1,plugins:{legend:{labels:{generateLabels(e){let i=e.data;if(i.labels.length&&i.datasets.length){let{labels:{pointStyle:o,color:s}}=e.legend.options;return i.labels.map((m,f)=>{let y=e.getDatasetMeta(0).controller.getStyle(f);return{text:m,fillStyle:y.backgroundColor,strokeStyle:y.borderColor,fontColor:s,lineWidth:y.borderWidth,pointStyle:o,hidden:!e.getDataVisibility(f),index:f}})}return[]}},onClick(e,i,o){o.chart.toggleDataVisibility(i.index),o.chart.update()}}},scales:{r:{type:"radialLinear",angleLines:{display:!1},beginAtZero:!0,grid:{circular:!0},pointLabels:{display:!1},startAngle:0}}};constructor(e,i){super(e,i),this.innerRadius=void 0,this.outerRadius=void 0}getLabelAndValue(e){let i=this._cachedMeta,o=this.chart,s=o.data.labels||[],m=Za(i._parsed[e].r,o.options.locale);return{label:s[e]||"",value:m}}parseObjectData(e,i,o,s){return Am.bind(this)(e,i,o,s)}update(e){let i=this._cachedMeta.data;this._updateRadius(),this.updateElements(i,0,i.length,e)}getMinMax(){let e=this._cachedMeta,i={min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY};return e.data.forEach((o,s)=>{let m=this.getParsed(s).r;!isNaN(m)&&this.chart.getDataVisibility(s)&&(m<i.min&&(i.min=m),m>i.max&&(i.max=m))}),i}_updateRadius(){let e=this.chart,i=e.chartArea,o=e.options,s=Math.min(i.right-i.left,i.bottom-i.top),m=Math.max(s/2,0),f=Math.max(o.cutoutPercentage?m/100*o.cutoutPercentage:1,0),v=(m-f)/e.getVisibleDatasetCount();this.outerRadius=m-v*this.index,this.innerRadius=this.outerRadius-v}updateElements(e,i,o,s){let m=s==="reset",f=this.chart,y=f.options.animation,M=this._cachedMeta.rScale,I=M.xCenter,B=M.yCenter,N=M.getIndexAngle(0)-.5*mt,H=N,W,G=360/this.countVisibleElements();for(W=0;W<i;++W)H+=this._computeAngle(W,s,G);for(W=i;W<i+o;W++){let Z=e[W],Q=H,j=H+this._computeAngle(W,s,G),Y=f.getDataVisibility(W)?M.getDistanceFromCenterForValue(this.getParsed(W).r):0;H=j,m&&(y.animateScale&&(Y=0),y.animateRotate&&(Q=j=N));let U={x:I,y:B,innerRadius:0,outerRadius:Y,startAngle:Q,endAngle:j,options:this.resolveDataElementOptions(W,Z.active?"active":s)};this.updateElement(Z,W,U,s)}}countVisibleElements(){let e=this._cachedMeta,i=0;return e.data.forEach((o,s)=>{!isNaN(this.getParsed(s).r)&&this.chart.getDataVisibility(s)&&i++}
104),i}_computeAngle(e,i,o){return this.chart.getDataVisibility(e)?Si(this.resolveDataElementOptions(e,i).angle||o):0}}return n})(),pL=(()=>{class n extends xg{static id="pie";static defaults={cutout:0,rotation:0,circumference:360,radius:"100%"}}return n})(),mL=(()=>{class n extends _r{static id="radar";static defaults={datasetElementType:"line",dataElementType:"point",indexAxis:"r",showLine:!0,elements:{line:{fill:"start"}}};static overrides={aspectRatio:1,scales:{r:{type:"radialLinear"}}};getLabelAndValue(e){let i=this._cachedMeta.vScale,o=this.getParsed(e);return{label:i.getLabels()[e],value:""+i.getLabelForValue(o[i.axis])}}parseObjectData(e,i,o,s){return Am.bind(this)(e,i,o,s)}update(e){let i=this._cachedMeta,o=i.dataset,s=i.data||[],m=i.iScale.getLabels();if(o.points=s,e!=="resize"){let f=this.resolveDatasetElementOptions(e);this.options.showLine||(f.borderWidth=0);let v={_loop:!0,_fullLoop:m.length===s.length,options:f};this.updateElement(o,void 0,v,e)}this.updateElements(s,0,s.length,e)}updateElements(e,i,o,s){let m=this._cachedMeta.rScale,f=s==="reset";for(let v=i;v<i+o;v++){let y=e[v],M=this.resolveDataElementOptions(v,y.active?"active":s),I=m.getPointPositionForValue(v,this.getParsed(v).r),B=f?m.xCenter:I.x,N=f?m.yCenter:I.y,H={x:B,y:N,angle:I.angle,skip:isNaN(B)||isNaN(N),options:M};this.updateElement(y,v,H,s)}}}return n})(),gL=(()=>{class n extends _r{static id="scatter";static defaults={datasetElementType:!1,dataElementType:"point",showLine:!1,fill:!1};static overrides={interaction:{mode:"point"},scales:{x:{type:"linear"},y:{type:"linear"}}};getLabelAndValue(e){let i=this._cachedMeta,o=this.chart.data.labels||[],{xScale:s,yScale:m}=i,f=this.getParsed(e),v=s.getLabelForValue(f.x),y=m.getLabelForValue(f.y);return{label:o[e]||"",value:"("+v+", "+y+")"}}update(e){let i=this._cachedMeta,{data:o=[]}=i,s=this.chart._animationsDisabled,{start:m,count:f}=Cm(i,o,s);if(this._drawStart=m,this._drawCount=f,wm(i)&&(m=0,f=o.length),this.options.showLine){this.datasetElementType||this.addElements();let{dataset:v,_dataset:y}=i;v._chart=this.chart,v._datasetIndex=this.index,v._decimated=!!y._decimated,v.points=o;let M=this.resolveDatasetElementOptions(e);M.segment=this.options.segment,this.updateElement(v,void 0,{animated:!s,options:M},e)}else this.datasetElementType&&(delete i.dataset,this.datasetElementType=!1);this.updateElements(o,m,f,e)}addElements(){let{showLine:e}=this.options;!this.datasetElementType&&e&&(this.datasetElementType=this.chart.registry.getElement("line")),super.addElements()}updateElements(e,i,o,s){let m=s==="reset",{iScale:f,vScale:v,_stacked:y,_dataset:M}=this._cachedMeta,I=this.resolveDataElementOptions(i,s),B=this.getSharedOptions(I),N=this.includeOptions(s,B),H=f.axis,W=v.axis,{spanGaps:G,segment:Z}=this.options,Q=Qr(G)?G:Number.POSITIVE_INFINITY,j=this.chart._animationsDisabled||m||s==="none",Y=i>0&&this.getParsed(i-1);for(let U=i;U<i+o;++U){let K=e[U],J=this.getParsed(U),ge=j?K:{},xe=et(J[W]),he=ge[H]=f.getPixelForValue(J[H],U),Ce=ge[W]=m||xe?v.getBasePixel():v.getPixelForValue(y?this.applyStack(v,J,y):J[W],U);ge.skip=isNaN(he)||isNaN(Ce)||xe,ge.stop=U>0&&Math.abs(J[H]-Y[H])>Q,Z&&(ge.parsed=J,ge.raw=M.data[U]),N&&(ge.options=B||this.resolveDataElementOptions(U,K.active?"active":s)),j||this.updateElement(K,U,ge,s),Y=J}this.updateSharedOptions(B,s,I)}getMaxOverflow(){let e=this._cachedMeta,i=e.data||[];if(!this.options.showLine){let v=0;for(let y=i.length-1;y>=0;--y)v=Math.max(v,i[y].size(this.resolveDataElementOptions(y))/2);return v>0&&v}let o=e.dataset,s=o.options&&o.options.borderWidth||0;if(!i.length)return s;let m=i[0].size(this.resolveDataElementOptions(0)),f=i[i.length-1].size(this.resolveDataElementOptions(i.length-1));return Math.max(s,m,f)/2}}return n})(),uL=Object.freeze({__proto__:null,BarController:sL,BubbleController:lL,DoughnutController:xg,LineController:dL,PieController:pL,PolarAreaController:ib,RadarController:mL,ScatterController:gL});function Jr(){throw new Error("This method is not implemented: Check that a complete date adapter is provided.")}var Jm=class n{static override(t){Object.assign(n.prototype,t)}options;constructor(t){this.options=t||{}}init(){}formats(){return Jr()}parse(){return Jr()}format(){return Jr()}add(){return Jr()}diff(){return Jr()}startOf(){return Jr()}endOf(){return Jr()}},fL={_date:Jm};function hL(n,t,e,i){let{controller:o,data:s,_sorted:m}=n,f=o._cachedMeta.iScale,v=n.dataset&&n.dataset.options?n.dataset.options.spanGaps:null;if(f&&t===f.axis&&t!=="r"&&m&&s.length){let y=f._reversePixels?Dx:no;if(i){if(o._sharedOptions){let M=s[0],I=typeof M.getRange=="function"&&M.getRange(t);if(I){let B=y(s,t,e-I),N=y(s,t,e+I);return{lo:B.lo,hi:N.hi}}}}else{let M=y(s,t,e);if(v){let{vScale:I}=o._cachedMeta,{_parsed:B}=n,N=B.slice(0,M.lo+1).reverse().findIndex(W=>!et(W[I.axis]));M.lo-=Math.max(0,N);let H=B.slice(M.hi).findIndex(W=>!et(W[I.axis]));M.hi+=Math.max(0,H)}return M}}return{lo:0,hi:s.length-1}}function bl(n,t,e,i,o){let s=n.getSortedVisibleDatasetMetas(),m=e[t];for(let f=0,v=s.length;f<v;++f){let{index:y,data:M}=s[f],{lo:I,hi:B}=hL(s[f],t,m,o);for(let N=I;N<=B;++N){let H=M[N];H.skip||i(H,y,N)}}}function _L(n){let t=n.indexOf("x")!==-1,e=n.indexOf("y")!==-1;return function(i,o){let s=t?Math.abs(i.x-o.x):0,m=e?Math.abs(i.y-o.y):0;return Math.sqrt(Math.pow(s,2)+Math.pow(m,2))}}function Wm(n,t,e,i,o){let s=[];return!o&&!n.isPointInArea(t)||bl(n,e,t,function(f,v,y){!o&&!io(f,n.chartArea,0)||f.inRange(t.x,t.y,i)&&s.push({element:f,datasetIndex:v,index:y})},!0),s}function xL(n,t,e,i){let o=[];function s(m,f,v){let{startAngle:y,endAngle:M}=m.getProps(["startAngle","endAngle"],i),{angle:I}=_m(m,{x:t.x,y:t.y});Xa(I,y,M)&&o.push({element:m,datasetIndex:f,index:v})}return bl(n,e,t,s),o}function vL(n,t,e,i,o,s){let m=[],f=_L(e),v=Number.POSITIVE_INFINITY;function y(M,I,B){let N=M.inRange(t.x,t.y,o);if(i&&!N)return;let H=M.getCenterPoint(o);if(!(!!s||n.isPointInArea(H))&&!N)return;let G=f(t,H);G<v?(m=[{element:M,datasetIndex:I,index:B}],v=G):G===v&&m.push({element:M,datasetIndex:I,index:B})}return bl(n,e,t,y),m}function Gm(n,t,e,i,o,s){return!s&&!n.isPointInArea(t)?[]:e==="r"&&!i?xL(n,t,e,o):vL(n,t,e,i,o,s)}function dv(n,t,e,i,o){let s=[],m=e==="x"?"inXRange":"inYRange",f=!1;return bl(n,e,t,(v,y,M)=>{v[m]&&v[m](t[e],o)&&(s.push({element:v,datasetIndex:y,index:M}),f=f||v.inRange(t.x,t.y,o))}),i&&!f?[]:s}var bL={evaluateInteractionItems:bl,modes:{index(n,t,e,i){let o=fr(t,n),s=e.axis||"x",m=e.includeInvisible||!1,f=e.intersect?Wm(n,o,s,i,m):Gm(n,o,s,!1,i,m),v=[];
vendor: 56,559 bytes, line 104
104return f.length?(n.getSortedVisibleDatasetMetas().forEach(y=>{let M=f[0].index,I=y.data[M];I&&!I.skip&&v.push({element:I,datasetIndex:y.index,index:M})}),v):[]},dataset(n,t,e,i){let o=fr(t,n),s=e.axis||"xy",m=e.includeInvisible||!1,f=e.intersect?Wm(n,o,s,i,m):Gm(n,o,s,!1,i,m);if(f.length>0){let v=f[0].datasetIndex,y=n.getDatasetMeta(v).data;f=[];for(let M=0;M<y.length;++M)f.push({element:y[M],datasetIndex:v,index:M})}return f},point(n,t,e,i){let o=fr(t,n),s=e.axis||"xy",m=e.includeInvisible||!1;return Wm(n,o,s,i,m)},nearest(n,t,e,i){let o=fr(t,n),s=e.axis||"xy",m=e.includeInvisible||!1;return Gm(n,o,s,e.intersect,i,m)},x(n,t,e,i){let o=fr(t,n);return dv(n,o,"x",e.intersect,i)},y(n,t,e,i){let o=fr(t,n);return dv(n,o,"y",e.intersect,i)}}},ob=["left","top","right","bottom"];function pl(n,t){return n.filter(e=>e.pos===t)}function pv(n,t){return n.filter(e=>ob.indexOf(e.pos)===-1&&e.box.axis===t)}function ml(n,t){return n.sort((e,i)=>{let o=t?i:e,s=t?e:i;return o.weight===s.weight?o.index-s.index:o.weight-s.weight})}function yL(n){let t=[],e,i,o,s,m,f;for(e=0,i=(n||[]).length;e<i;++e)o=n[e],{position:s,options:{stack:m,stackWeight:f=1}}=o,t.push({index:e,box:o,pos:s,horizontal:o.isHorizontal(),weight:o.weight,stack:m&&s+m,stackWeight:f});return t}function CL(n){let t={};for(let e of n){let{stack:i,pos:o,stackWeight:s}=e;if(!i||!ob.includes(o))continue;let m=t[i]||(t[i]={count:0,placed:0,weight:0,size:0});m.count++,m.weight+=s}return t}function wL(n,t){let e=CL(n),{vBoxMaxWidth:i,hBoxMaxHeight:o}=t,s,m,f;for(s=0,m=n.length;s<m;++s){f=n[s];let{fullSize:v}=f.box,y=e[f.stack],M=y&&f.stackWeight/y.weight;f.horizontal?(f.width=M?M*i:v&&t.availableWidth,f.height=o):(f.width=i,f.height=M?M*o:v&&t.availableHeight)}return e}function PL(n){let t=yL(n),e=ml(t.filter(y=>y.box.fullSize),!0),i=ml(pl(t,"left"),!0),o=ml(pl(t,"right")),s=ml(pl(t,"top"),!0),m=ml(pl(t,"bottom")),f=pv(t,"x"),v=pv(t,"y");return{fullSize:e,leftAndTop:i.concat(s),rightAndBottom:o.concat(v).concat(m).concat(f),chartArea:pl(t,"chartArea"),vertical:i.concat(o).concat(v),horizontal:s.concat(m).concat(f)}}function mv(n,t,e,i){return Math.max(n[e],t[e])+Math.max(n[i],t[i])}function rb(n,t){n.top=Math.max(n.top,t.top),n.left=Math.max(n.left,t.left),n.bottom=Math.max(n.bottom,t.bottom),n.right=Math.max(n.right,t.right)}function ML(n,t,e,i){let{pos:o,box:s}=e,m=n.maxPadding;if(!tt(o)){e.size&&(n[o]-=e.size);let I=i[e.stack]||{size:0,count:1};I.size=Math.max(I.size,e.horizontal?s.height:s.width),e.size=I.size/I.count,n[o]+=e.size}s.getPadding&&rb(m,s.getPadding());let f=Math.max(0,t.outerWidth-mv(m,n,"left","right")),v=Math.max(0,t.outerHeight-mv(m,n,"top","bottom")),y=f!==n.w,M=v!==n.h;return n.w=f,n.h=v,e.horizontal?{same:y,other:M}:{same:M,other:y}}function SL(n){let t=n.maxPadding;function e(i){let o=Math.max(t[i]-n[i],0);return n[i]+=o,o}n.y+=e("top"),n.x+=e("left"),e("right"),e("bottom")}function kL(n,t){let e=t.maxPadding;function i(o){let s={left:0,top:0,right:0,bottom:0};return o.forEach(m=>{s[m]=Math.max(t[m],e[m])}),s}return i(n?["left","right"]:["top","bottom"])}function fl(n,t,e,i){let o=[],s,m,f,v,y,M;for(s=0,m=n.length,y=0;s<m;++s){f=n[s],v=f.box,v.update(f.width||t.w,f.height||t.h,kL(f.horizontal,t));let{same:I,other:B}=ML(t,e,f,i);y|=I&&o.length,M=M||B,v.fullSize||o.push(f)}return y&&fl(o,t,e,i)||M}function Sd(n,t,e,i,o){n.top=e,n.left=t,n.right=t+i,n.bottom=e+o,n.width=i,n.height=o}function gv(n,t,e,i){let o=e.padding,{x:s,y:m}=t;for(let f of n){let v=f.box,y=i[f.stack]||{count:1,placed:0,weight:1},M=f.stackWeight/y.weight||1;if(f.horizontal){let I=t.w*M,B=y.size||v.height;$a(y.start)&&(m=y.start),v.fullSize?Sd(v,o.left,m,e.outerWidth-o.right-o.left,B):Sd(v,t.left+y.placed,m,I,B),y.start=m,y.placed+=I,m=v.bottom}else{let I=t.h*M,B=y.size||v.width;$a(y.start)&&(s=y.start),v.fullSize?Sd(v,s,o.top,B,e.outerHeight-o.bottom-o.top):Sd(v,s,t.top+y.placed,B,I),y.start=s,y.placed+=I,s=v.right}}t.x=s,t.y=m}var Un={addBox(n,t){n.boxes||(n.boxes=[]),t.fullSize=t.fullSize||!1,t.position=t.position||"top",t.weight=t.weight||0,t._layers=t._layers||function(){return[{z:0,draw(e){t.draw(e)}}]},n.boxes.push(t)},removeBox(n,t){let e=n.boxes?n.boxes.indexOf(t):-1;e!==-1&&n.boxes.splice(e,1)},configure(n,t,e){t.fullSize=e.fullSize,t.position=e.position,t.weight=e.weight},update(n,t,e,i){if(!n)return;let o=Dn(n.options.layout.padding),s=Math.max(t-o.width,0),m=Math.max(e-o.height,0),f=PL(n.boxes),v=f.vertical,y=f.horizontal;Ot(n.boxes,W=>{typeof W.beforeLayout=="function"&&W.beforeLayout()});let M=v.reduce((W,G)=>G.box.options&&G.box.options.display===!1?W:W+1,0)||1,I=Object.freeze({outerWidth:t,outerHeight:e,padding:o,availableWidth:s,availableHeight:m,vBoxMaxWidth:s/2/M,hBoxMaxHeight:m/2}),B=Object.assign({},o);rb(B,Dn(i));let N=Object.assign({maxPadding:B,w:s,h:m,x:o.left,y:o.top},o),H=wL(v.concat(y),I);fl(f.fullSize,N,I,H),fl(v,N,I,H),fl(y,N,I,H)&&fl(v,N,I,H),SL(N),gv(f.leftAndTop,N,I,H),N.x+=N.w,N.y+=N.h,gv(f.rightAndBottom,N,I,H),n.chartArea={left:N.left,top:N.top,right:N.left+N.w,bottom:N.top+N.h,height:N.h,width:N.w},Ot(f.chartArea,W=>{let G=W.box;Object.assign(G,n.chartArea),G.update(N.w,N.h,{left:0,top:0,right:0,bottom:0})})}},Bd=class{acquireContext(t,e){}releaseContext(t){return!1}addEventListener(t,e,i){}removeEventListener(t,e,i){}getDevicePixelRatio(){return 1}getMaximumSize(t,e,i,o){return e=Math.max(0,e||t.width),i=i||t.height,{width:e,height:Math.max(0,o?Math.floor(e/o):i)}}isAttached(t){return!0}updateConfig(t){}},eg=class extends Bd{acquireContext(t){return t&&t.getContext&&t.getContext("2d")||null}updateConfig(t){t.options.animation=!1}},Ad="$chartjs",OL={touchstart:"mousedown",touchmove:"mousemove",touchend:"mouseup",pointerenter:"mouseenter",pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointerleave:"mouseout",pointerout:"mouseout"},uv=n=>n===null||n==="";function EL(n,t){let e=n.style,i=n.getAttribute("height"),o=n.getAttribute("width");if(n[Ad]={initial:{height:i,width:o,style:{display:e.display,height:e.height,width:e.width}}},e.display=e.display||"block",e.boxSizing=e.boxSizing||"border-box",uv(o)){let s=Rm(n,"width");s!==void 0&&(n.width=s)}if(uv(i))if(n.style.height==="")n.height=n.width/(t||2);else{let s=Rm(n,"height");s!==void 0&&(n.height=s)}return n}var ab=Zx?{passive:!0}:!1;function TL(n,t,e){n&&n.addEventListener(t,e,ab)}function IL(n,t,e){n&&n.canvas&&n.canvas.removeEventListener(t,e,ab)}function AL(n,t){let e=OL[n.type]||n.type,{x:i,y:o}=fr(n,t);return{type:e,chart:t,native:n,x:i!==void 0?i:null,y:o!==void 0?o:null}}function Nd(n,t){for(let e of n)if(e===t||e.contains(t))return!0}function DL(n,t,e){let i=n.canvas,o=new MutationObserver(s=>{let m=!1;for(let f of s)m=m||Nd(f.addedNodes,i),m=m&&!Nd(f.removedNodes,i);m&&e()});return o.observe(document,{childList:!0,subtree:!0}),o}function RL(n,t,e){let i=n.canvas,o=new MutationObserver(s=>{let m=!1;for(let f of s)m=m||Nd(f.removedNodes,i),m=m&&!Nd(f.addedNodes,i);m&&e()});return o.observe(document,{childList:!0,subtree:!0}),o}var _l=new Map,fv=0;function sb(){let n=window.devicePixelRatio;n!==fv&&(fv=n,_l.forEach((t,e)=>{e.currentDevicePixelRatio!==n&&t()}))}function BL(n,t){_l.size||window.addEventListener("resize",sb),_l.set(n,t)}function NL(n){_l.delete(n),_l.size||window.removeEventListener("resize",sb)}function VL(n,t,e){let i=n.canvas,o=i&&Pd(i);if(!o)return;let s=ym((f,v)=>{let y=o.clientWidth;e(f,v),y<o.clientWidth&&e()},window),m=new ResizeObserver(f=>{let v=f[0],y=v.contentRect.width,M=v.contentRect.height;y===0&&M===0||s(y,M)});return m.observe(o),BL(n,s),m}function qm(n,t,e){e&&e.disconnect(),t==="resize"&&NL(n)}function LL(n,t,e){let i=n.canvas,o=ym(s=>{n.ctx!==null&&e(AL(s,n))},n);return TL(i,t,o),o}var tg=class extends Bd{acquireContext(t,e){let i=t&&t.getContext&&t.getContext("2d");return i&&i.canvas===t?(EL(t,e),i):null}releaseContext(t){let e=t.canvas;if(!e[Ad])return!1;let i=e[Ad].initial;["height","width"].forEach(s=>{let m=i[s];et(m)?e.removeAttribute(s):e.setAttribute(s,m)});let o=i.style||{};return Object.keys(o).forEach(s=>{e.style[s]=o[s]}),e.width=e.width,delete e[Ad],!0}addEventListener(t,e,i){this.removeEventListener(t,e);let o=t.$proxies||(t.$proxies={}),m={attach:DL,detach:RL,resize:VL}[e]||LL;o[e]=m(t,e,i)}removeEventListener(t,e){let i=t.$proxies||(t.$proxies={}),o=i[e];if(!o)return;({attach:qm,detach:qm,resize:qm}[e]||IL)(t,e,o),i[e]=void 0}getDevicePixelRatio(){return window.devicePixelRatio}getMaximumSize(t,e,i,o){return Xx(t,e,i,o)}isAttached(t){let e=t&&Pd(t);return!!(e&&e.isConnected)}};function FL(n){return!wd()||typeof OffscreenCanvas<"u"&&n instanceof OffscreenCanvas?eg:tg}var Li=class{static defaults={};static defaultRoutes=void 0;x;y;active=!1;options;$animations;tooltipPosition(t){let{x:e,y:i}=this.getProps(["x","y"],t);return{x:e,y:i}}hasValue(){return Qr(this.x)&&Qr(this.y)}getProps(t,e){let i=this.$animations;if(!e||!i)return this;let o={};return t.forEach(s=>{o[s]=i[s]&&i[s].active()?i[s]._to:this[s]}),o}};function zL(n,t){let e=n.options.ticks,i=UL(n),o=Math.min(e.maxTicksLimit||i,i),s=e.major.enabled?HL(t):[],m=s.length,f=s[0],v=s[m-1],y=[];if(m>o)return WL(t,y,s,m/o),y;let M=jL(s,t,o);if(m>0){let I,B,N=m>1?Math.round((v-f)/(m-1)):null;for(kd(t,y,M,et(N)?0:f-N,f),I=0,B=m-1;I<B;I++)kd(t,y,M,s[I],s[I+1]);return kd(t,y,M,v,et(N)?t.length:v+N),y}return kd(t,y,M),y}function UL(n){let t=n.options.offset,e=n._tickSize(),i=n._length/e+(t?0:1),o=n._maxLength/e;return Math.floor(Math.min(i,o))}function jL(n,t,e){let i=GL(n),o=t.length/e;if(!i)return Math.max(o,1);let s=Tx(i);for(let m=0,f=s.length-1;m<f;m++){let v=s[m];if(v>o)return v}return Math.max(o,1)}function HL(n){let t=[],e,i;for(e=0,i=n.length;e<i;e++)n[e].major&&t.push(e);return t}function WL(n,t,e,i){let o=0,s=e[0],m;for(i=Math.ceil(i),m=0;m<n.length;m++)m===s&&(t.push(n[m]),o++,s=e[o*i])}function kd(n,t,e,i,o){let s=qe(i,0),m=Math.min(qe(o,n.length),n.length),f=0,v,y,M;for(e=Math.ceil(e),o&&(v=o-i,e=v/Math.floor(v/e)),M=s;M<0;)f++,M=Math.round(s+f*e);for(y=Math.max(s,0);y<m;y++)y===M&&(t.push(n[y]),f++,M=Math.round(s+f*e))}function GL(n){let t=n.length,e,i;if(t<2)return!1;for(i=n[0],e=1;e<t;++e)if(n[e]-n[e-1]!==i)return!1;return i}var qL=n=>n==="left"?"right":n==="right"?"left":n,hv=(n,t,e)=>t==="top"||t==="left"?n[t]+e:n[t]-e,_v=(n,t)=>Math.min(t||n,n);function xv(n,t){let e=[],i=n.length/t,o=n.length,s=0;for(;s<o;s+=i)e.push(n[Math.floor(s)]);return e}function $L(n,t,e){let i=n.ticks.length,o=Math.min(t,i-1),s=n._startPixel,m=n._endPixel,f=1e-6,v=n.getPixelForTick(o),y;if(!(e&&(i===1?y=Math.max(v-s,m-v):t===0?y=(n.getPixelForTick(1)-v)/2:y=(v-n.getPixelForTick(o-1))/2,v+=o<t?y:-y,v<s-f||v>m+f)))return v}function YL(n,t){Ot(n,e=>{let i=e.gc,o=i.length/2,s;if(o>t){for(s=0;s<o;++s)delete e.data[i[s]];i.splice(0,o)}})}function gl(n){return n.drawTicks?n.tickLength:0}function vv(n,t){if(!n.display)return 0;let e=mn(n.font,t),i=Dn(n.padding);return(Ft(n.text)?n.text.length:1)*e.lineHeight+i.height}function XL(n,t){return ko(n,{scale:t,type:"scale"})}function ZL(n,t,e){return ko(n,{tick:e,index:t,type:"tick"})}function QL(n,t,e){let i=xd(n);return(e&&t!=="right"||!e&&t==="right")&&(i=qL(i)),i}function KL(n,t,e,i){let{top:o,left:s,bottom:m,right:f,chart:v}=n,{chartArea:y,scales:M}=v,I=0,B,N,H,W=m-o,G=f-s;if(n.isHorizontal()){if(N=An(i,s,f),tt(e)){let Z=Object.keys(e)[0],Q=e[Z];H=M[Z].getPixelForValue(Q)+W-t}else e==="center"?H=(y.bottom+y.top)/2+W-t:H=hv(n,e,t);B=f-s}else{if(tt(e)){let Z=Object.keys(e)[0],Q=e[Z];N=M[Z].getPixelForValue(Q)-G+t}else e==="center"?N=(y.left+y.right)/2-G+t:N=hv(n,e,t);H=An(i,m,o),I=e==="left"?-tn:tn}return{titleX:N,titleY:H,maxWidth:B,rotation:I}}var ta=class n extends Li{constructor(t){super(),this.id=t.id,this.type=t.type,this.options=void 0,this.ctx=t.ctx,this.chart=t.chart,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this._margins={left:0,right:0,top:0,bottom:0},this.maxWidth=void 0,this.maxHeight=void 0,this.paddingTop=void 0,this.paddingBottom=void 0,this.paddingLeft=void 0,this.paddingRight=void 0,this.axis=void 0,this.labelRotation=void 0,this.min=void 0,this.max=void 0,this._range=void 0,this.ticks=[],this._gridLineItems=null,this._labelItems=null,this._labelSizes=null,this._length=0,this._maxLength=0,this._longestTextCache={},this._startPixel=void 0,this._endPixel=void 0,this._reversePixels=!1,this._userMax=void 0,this._userMin=void 0,this._suggestedMax=void 0,this._suggestedMin=void 0,this._ticksLength=0,this._borderValue=0,this._cache={},this._dataLimitsCached=!1,this.$context=void 0}init(t){this.options=t.setContext(this.getContext()),this.axis=t.axis,this._userMin=this.parse(t.min),this._userMax=this.parse(t.max),this._suggestedMin=this.parse(t.suggestedMin),this._suggestedMax=this.parse(t.suggestedMax)}parse(t,e){return t}getUserBounds(){let{_userMin:t,_userMax:e,_suggestedMin:i,_suggestedMax:o}=this;return t=Jn(t,Number.POSITIVE_INFINITY),e=Jn(e,Number.NEGATIVE_INFINITY),i=Jn(i,Number.POSITIVE_INFINITY),o=Jn(o,Number.NEGATIVE_INFINITY),{min:Jn(t,i),max:Jn(e,o),minDefined:Gt(t),maxDefined:Gt(e)}}getMinMax(t){let{min:e,max:i,minDefined:o,maxDefined:s}=this.getUserBounds(),m;if(o&&s)return{min:e,max:i};let f=this.getMatchingVisibleMetas();for(let v=0,y=f.length;v<y;++v)m=f[v].controller.getMinMax(this,t),o||(e=Math.min(e,m.min)),s||(i=Math.max(i,m.max));return e=s&&e>i?i:e,i=o&&e>i?e:i,{min:Jn(e,Jn(i,e)),max:Jn(i,Jn(e,i))}}getPadding(){return{left:this.paddingLeft||0,top:this.paddingTop||0,right:this.paddingRight||0,bottom:this.paddingBottom||0}}getTicks(){return this.ticks}getLabels(){let t=this.chart.data;return this.options.labels||(this.isHorizontal()?t.xLabels:t.yLabels)||t.labels||[]}getLabelItems(t=this.chart.chartArea){return this._labelItems||(this._labelItems=this._computeLabelItems(t))}beforeLayout(){this._cache={},this._dataLimitsCached=!1}beforeUpdate(){Dt(this.options.beforeUpdate,[this])}update(t,e,i){let{beginAtZero:o,grace:s,ticks:m}=this.options,f=m.sampleSize;this.beforeUpdate(),this.maxWidth=t,this.maxHeight=e,this._margins=i=Object.assign({left:0,right:0,top:0,bottom:0},i),this.ticks=null,this._labelSizes=null,this._gridLineItems=null,this._labelItems=null,this.beforeSetDimensions(),this.setDimensions(),this.afterSetDimensions(),this._maxLength=this.isHorizontal()?this.width+i.left+i.right:this.height+i.top+i.bottom,this._dataLimitsCached||(this.beforeDataLimits(),this.determineDataLimits(),this.afterDataLimits(),this._range=Hx(this,s,o),this._dataLimitsCached=!0),this.beforeBuildTicks(),this.ticks=this.buildTicks()||[],this.afterBuildTicks();let v=f<this.ticks.length;this._convertTicksToLabels(v?xv(this.ticks,f):this.ticks),this.configure(),this.beforeCalculateLabelRotation(),this.calculateLabelRotation(),this.afterCalculateLabelRotation(),m.display&&(m.autoSkip||m.source==="auto")&&(this.ticks=zL(this,this.ticks),this._labelSizes=null,this.afterAutoSkip()),v&&this._convertTicksToLabels(this.ticks),this.beforeFit(),this.fit(),this.afterFit(),this.afterUpdate()}configure(){let t=this.options.reverse,e,i;this.isHorizontal()?(e=this.left,i=this.right):(e=this.top,i=this.bottom,t=!t),this._startPixel=e,this._endPixel=i,this._reversePixels=t,this._length=i-e,this._alignToPixels=this.options.alignToPixels}afterUpdate(){Dt(this.options.afterUpdate,[this])}beforeSetDimensions(){Dt(this.options.beforeSetDimensions,[this])}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=0,this.right=this.width):(this.height=this.maxHeight,this.top=0,this.bottom=this.height),this.paddingLeft=0,this.paddingTop=0,this.paddingRight=0,this.paddingBottom=0}afterSetDimensions(){Dt(this.options.afterSetDimensions,[this])}_callHooks(t){this.chart.notifyPlugins(t,this.getContext()),Dt(this.options[t],[this])}beforeDataLimits(){this._callHooks("beforeDataLimits")}determineDataLimits(){}afterDataLimits(){this._callHooks("afterDataLimits")}beforeBuildTicks(){this._callHooks("beforeBuildTicks")}buildTicks(){return[]}afterBuildTicks(){this._callHooks("afterBuildTicks")}beforeTickToLabelConversion(){Dt(this.options.beforeTickToLabelConversion,[this])}generateTickLabels(t){let e=this.options.ticks,i,o,s;for(i=0,o=t.length;i<o;i++)s=t[i],s.label=Dt(e.callback,[s.value,i,t],this)}afterTickToLabelConversion(){Dt(this.options.afterTickToLabelConversion,[this])}beforeCalculateLabelRotation(){Dt(this.options.beforeCalculateLabelRotation,[this])}calculateLabelRotation(){let t=this.options,e=t.ticks,i=_v(this.ticks.length,t.ticks.maxTicksLimit),o=e.minRotation||0,s=e.maxRotation,m=o,f,v,y;if(!this._isVisible()||!e.display||o>=s||i<=1||!this.isHorizontal()){this.labelRotation=o;return}let M=this._getLabelSizes(),I=M.widest.width,B=M.highest.height,N=hn(this.chart.width-I,0,this.maxWidth);f=t.offset?this.maxWidth/i:N/(i-1),I+6>f&&(f=N/(i-(t.offset?.5:1)),v=this.maxHeight-gl(t.grid)-e.padding-vv(t.title,this.chart.options.font),y=Math.sqrt(I*I+B*B),m=hd(Math.min(Math.asin(hn((M.highest.height+6)/f,-1,1)),Math.asin(hn(v/y,-1,1))-Math.asin(hn(B/y,-1,1)))),m=Math.max(o,Math.min(s,m))),this.labelRotation=m}afterCalculateLabelRotation(){Dt(this.options.afterCalculateLabelRotation,[this])}afterAutoSkip(){}beforeFit(){Dt(this.options.beforeFit,[this])}fit(){let t={width:0,height:0},{chart:e,options:{ticks:i,title:o,grid:s}}=this,m=this._isVisible(),f=this.isHorizontal();if(m){let v=vv(o,e.options.font);if(f?(t.width=this.maxWidth,t.height=gl(s)+v):(t.height=this.maxHeight,t.width=gl(s)+v),i.display&&this.ticks.length){let{first:y,last:M,widest:I,highest:B}=this._getLabelSizes(),N=i.padding*2,H=Si(this.labelRotation),W=Math.cos(H),G=Math.sin(H);if(f){let Z=i.mirror?0:G*I.width+W*B.height;t.height=Math.min(this.maxHeight,t.height+Z+N)}else{let Z=i.mirror?0:W*I.width+G*B.height;t.width=Math.min(this.maxWidth,t.width+Z+N)}this._calculatePadding(y,M,G,W)}}this._handleMargins(),f?(this.width=this._length=e.width-this._margins.left-this._margins.right,this.height=t.height):(this.width=t.width,this.height=this._length=e.height-this._margins.top-this._margins.bottom)}_calculatePadding(t,e,i,o){let{ticks:{align:s,padding:m},position:f}=this.options,v=this.labelRotation!==0,y=f!=="top"&&this.axis==="x";if(this.isHorizontal()){let M=this.getPixelForTick(0)-this.left,I=this.right-this.getPixelForTick(this.ticks.length-1),B=0,N=0;v?y?(B=o*t.width,N=i*e.height):(B=i*t.height,N=o*e.width):s==="start"?N=e.width:s==="end"?B=t.width:s!=="inner"&&(B=t.width/2,N=e.width/2),this.paddingLeft=Math.max((B-M+m)*this.width/(this.width-M),0),this.paddingRight=Math.max((N-I+m)*this.width/(this.width-I),0)}else{let M=e.height/2,I=t.height/2;s==="start"?(M=0,I=t.height):s==="end"&&(M=e.height,I=0),this.paddingTop=M+m,this.paddingBottom=I+m}}_handleMargins(){this._margins&&(this._margins.left=Math.max(this.paddingLeft,this._margins.left),this._margins.top=Math.max(this.paddingTop,this._margins.top),this._margins.right=Math.max(this.paddingRight,this._margins.right),this._margins.bottom=Math.max(this.paddingBottom,this._margins.bottom))}afterFit(){Dt(this.options.afterFit,[this])}isHorizontal(){let{axis:t,position:e}=this.options;return e==="top"||e==="bottom"||t==="x"}isFullSize(){return this.options.fullSize}_convertTicksToLabels(t){this.beforeTickToLabelConversion(),this.generateTickLabels(t);let e,i;for(e=0,i=t.length;e<i;e++)et(t[e].label)&&(t.splice(e,1),i--,e--);this.afterTickToLabelConversion()}_getLabelSizes(){let t=this._labelSizes;if(!t){let e=this.options.ticks.sampleSize,i=this.ticks;e<i.length&&(i=xv(i,e)),this._labelSizes=t=this._computeLabelSizes(i,i.length,this.options.ticks.maxTicksLimit)}return t}_computeLabelSizes(t,e,i){let{ctx:o,_longestTextCache:s}=this,m=[],f=[],v=Math.floor(e/_v(e,i)),y=0,M=0,I,B,N,H,W,G,Z,Q,j,Y,U;for(I=0;I<e;I+=v){if(H=t[I].label,W=this._resolveTickFontOptions(I),o.font=G=W.string,Z=s[G]=s[G]||{data:{},gc:[]},Q=W.lineHeight,j=Y=0,!et(H)&&!Ft(H))j=rl(o,Z.data,Z.gc,j,H),Y=Q;else if(Ft(H))for(B=0,N=H.length;B<N;++B)U=H[B],!et(U)&&!Ft(U)&&(j=rl(o,Z.data,Z.gc,j,U),Y+=Q);m.push(j),f.push(Y),y=Math.max(j,y),M=Math.max(Y,M)}YL(s,e);let K=m.indexOf(y),J=f.indexOf(M),ge=xe=>({width:m[xe]||0,height:f[xe]||0});return{first:ge(0),last:ge(e-1),widest:ge(K),highest:ge(J),widths:m,heights:f}}getLabelForValue(t){return t}getPixelForValue(t,e){return NaN}getValueForPixel(t){}getPixelForTick(t){let e=this.ticks;return t<0||t>e.length-1?null:this.getPixelForValue(e[t].value)}getPixelForDecimal(t){this._reversePixels&&(t=1-t);let e=this._startPixel+t*this._length;return Ax(this._alignToPixels?mr(this.chart,e,0):e)}getDecimalForPixel(t){let e=(t-this._startPixel)/this._length;return this._reversePixels?1-e:e}getBasePixel(){return this.getPixelForValue(this.getBaseValue())}getBaseValue(){let{min:t,max:e}=this;return t<0&&e<0?e:t>0&&e>0?t:0}getContext(t){let e=this.ticks||[];if(t>=0&&t<e.length){let i=e[t];return i.$context||(i.$context=ZL(this.getContext(),t,i))}return this.$context||(this.$context=XL(this.chart.getContext(),this))}_tickSize(){let t=this.options.ticks,e=Si(this.labelRotation),i=Math.abs(Math.cos(e)),o=Math.abs(Math.sin(e)),s=this._getLabelSizes(),m=t.autoSkipPadding||0,f=s?s.widest.width+m:0,v=s?s.highest.height+m:0;return this.isHorizontal()?v*i>f*o?f/i:v/o:v*o<f*i?v/i:f/o}_isVisible(){let t=this.options.display;return t!=="auto"?!!t:this.getMatchingVisibleMetas().length>0}_computeGridLineItems(t){let e=this.axis,i=this.chart,o=this.options,{grid:s,position:m,border:f}=o,v=s.offset,y=this.isHorizontal(),I=this.ticks.length+(v?1:0),B=gl(s),N=[],H=f.setContext(this.getContext()),W=H.display?H.width:0,G=W/2,Z=function(yt){return mr(i,yt,W)},Q,j,Y,U,K,J,ge,xe,he,Ce,De,se;if(m==="top")Q=Z(this.bottom),J=this.bottom-B,xe=Q-G,Ce=Z(t.top)+G,se=t.bottom;else if(m==="bottom")Q=Z(this.top),Ce=t.top,se=Z(t.bottom)-G,J=Q+G,xe=this.top+B;else if(m==="left")Q=Z(this.right),K=this.right-B,ge=Q-G,he=Z(t.left)+G,De=t.right;else if(m==="right")Q=Z(this.left),he=t.left,De=Z(t.right)-G,K=Q+G,ge=this.left+B;else if(e==="x"){if(m==="center")Q=Z((t.top+t.bottom)/2+.5);else if(tt(m)){let yt=Object.keys(m)[0],Ct=m[yt];Q=Z(this.chart.scales[yt].getPixelForValue(Ct))}Ce=t.top,se=t.bottom,J=Q+G,xe=J+B}else if(e==="y"){if(m==="center")Q=Z((t.left+t.right)/2);else if(tt(m)){let yt=Object.keys(m)[0],Ct=m[yt];Q=Z(this.chart.scales[yt].getPixelForValue(Ct))}K=Q-G,ge=K-B,he=t.left,De=t.right}let gt=qe(o.ticks.maxTicksLimit,I),Te=Math.max(1,Math.ceil(I/gt));for(j=0;j<I;j+=Te){let yt=this.getContext(j),Ct=s.setContext(yt),an=f.setContext(yt),gn=Ct.lineWidth,qt=Ct.color,pi=an.dash||[],$t=an.dashOffset,Io=Ct.tickWidth,Ne=Ct.tickColor,Ao=Ct.tickBorderDash||[],Bt=Ct.tickBorderDashOffset;Y=$L(this,j,v),Y!==void 0&&(U=mr(i,Y,gn),y?K=ge=he=De=U:J=xe=Ce=se=U,N.push({tx1:K,ty1:J,tx2:ge,ty2:xe,x1:he,y1:Ce,x2:De,y2:se,width:gn,color:qt,borderDash:pi,borderDashOffset:$t,tickWidth:Io,tickColor:Ne,tickBorderDash:Ao,tickBorderDashOffset:Bt}))}return this._ticksLength=I,this._borderValue=Q,N}_computeLabelItems(t){let e=this.axis,i=this.options,{position:o,ticks:s}=i,m=this.isHorizontal(),f=this.ticks,{align:v,crossAlign:y,padding:M,mirror:I}=s,B=gl(i.grid),N=B+M,H=I?-M:N,W=-Si(this.labelRotation),G=[],Z,Q,j,Y,U,K,J,ge,xe,he,Ce,De,se="middle";if(o==="top")K=this.bottom-H,J=this._getXAxisLabelAlignment();else if(o==="bottom")K=this.top+H,J=this._getXAxisLabelAlignment();else if(o==="left"){let Te=this._getYAxisLabelAlignment(B);J=Te.textAlign,U=Te.x}else if(o==="right"){let Te=this._getYAxisLabelAlignment(B);J=Te.textAlign,U=Te.x}else if(e==="x"){if(o==="center")K=(t.top+t.bottom)/2+N;else if(tt(o)){let Te=Object.keys(o)[0],yt=o[Te];K=this.chart.scales[Te].getPixelForValue(yt)+N}J=this._getXAxisLabelAlignment()}else if(e==="y"){if(o==="center")U=(t.left+t.right)/2-N;else if(tt(o)){let Te=Object.keys(o)[0],yt=o[Te];U=this.chart.scales[Te].getPixelForValue(yt)}J=this._getYAxisLabelAlignment(B).textAlign}e==="y"&&(v==="start"?se="top":v==="end"&&(se="bottom"));let gt=this._getLabelSizes();for(Z=0,Q=f.length;Z<Q;++Z){j=f[Z],Y=j.label;let Te=s.setContext(this.getContext(Z));ge=this.getPixelForTick(Z)+s.labelOffset,xe=this._resolveTickFontOptions(Z),he=xe.lineHeight,Ce=Ft(Y)?Y.length:1;let yt=Ce/2,Ct=Te.color,an=Te.textStrokeColor,gn=Te.textStrokeWidth,qt=J;m?(U=ge,J==="inner"&&(Z===Q-1?qt=this.options.reverse?"left":"right":Z===0?qt=this.options.reverse?"right":"left":qt="center"),o==="top"?y==="near"||W!==0?De=-Ce*he+he/2:y==="center"?De=-gt.highest.height/2-yt*he+he:De=-gt.highest.height+he/2:y==="near"||W!==0?De=he/2:y==="center"?De=gt.highest.height/2-yt*he:De=gt.highest.height-Ce*he,I&&(De*=-1),W!==0&&!Te.showLabelBackdrop&&(U+=he/2*Math.sin(W))):(K=ge,De=(1-Ce)*he/2);let pi;if(Te.showLabelBackdrop){let $t=Dn(Te.backdropPadding),Io=gt.heights[Z],Ne=gt.widths[Z],Ao=De-$t.top,Bt=0-$t.left;switch(se){case"middle":Ao-=Io/2;break;case"bottom":Ao-=Io;break}switch(J){case"center":Bt-=Ne/2;break;case"right":Bt-=Ne;break;case"inner":Z===Q-1?Bt-=Ne:Z>0&&(Bt-=Ne/2);break}pi={left:Bt,top:Ao,width:Ne+$t.width,height:Io+$t.height,color:Te.backdropColor}}G.push({label:Y,font:xe,textOffset:De,options:{rotation:W,color:Ct,strokeColor:an,strokeWidth:gn,textAlign:qt,textBaseline:se,translation:[U,K],backdrop:pi}})}return G}_getXAxisLabelAlignment(){let{position:t,ticks:e}=this.options;if(-Si(this.labelRotation))return t==="top"?"left":"right";let o="center";return e.align==="start"?o="left":e.align==="end"?o="right":e.align==="inner"&&(o="inner"),o}_getYAxisLabelAlignment(t){let{position:e,ticks:{crossAlign:i,mirror:o,padding:s}}=this.options,m=this._getLabelSizes(),f=t+s,v=m.widest.width,y,M;return e==="left"?o?(M=this.right+s,i==="near"?y="left":i==="center"?(y="center",M+=v/2):(y="right",M+=v)):(M=this.right-f,i==="near"?y="right":i==="center"?(y="center",M-=v/2):(y="left",M=this.left)):e==="right"?o?(M=this.left+s,i==="near"?y="right":i==="center"?(y="center",M-=v/2):(y="left",M-=v)):(M=this.left+f,i==="near"?y="left":i==="center"?(y="center",M+=v/2):(y="right",M=this.right)):y="right",{textAlign:y,x:M}}_computeLabelArea(){if(this.options.ticks.mirror)return;let t=this.chart,e=this.options.position;if(e==="left"||e==="right")return{top:0,left:this.left,bottom:t.height,right:this.right};if(e==="top"||e==="bottom")return{top:this.top,left:0,bottom:this.bottom,right:t.width}}drawBackground(){let{ctx:t,options:{backgroundColor:e},left:i,top:o,width:s,height:m}=this;e&&(t.save(),t.fillStyle=e,t.fillRect(i,o,s,m),t.restore())}getLineWidthForValue(t){let e=this.options.grid;if(!this._isVisible()||!e.display)return 0;let o=this.ticks.findIndex(s=>s.value===t);return o>=0?e.setContext(this.getContext(o)).lineWidth:0}drawGrid(t){let e=this.options.grid,i=this.ctx,o=this._gridLineItems||(this._gridLineItems=this._computeGridLineItems(t)),s,m,f=(v,y,M)=>{!M.width||!M.color||(i.save(),i.lineWidth=M.width,i.strokeStyle=M.color,i.setLineDash(M.borderDash||[]),i.lineDashOffset=M.borderDashOffset,i.beginPath(),i.moveTo(v.x,v.y),i.lineTo(y.x,y.y),i.stroke(),i.restore())};if(e.display)for(s=0,m=o.length;s<m;++s){let v=o[s];e.drawOnChartArea&&f({x:v.x1,y:v.y1},{x:v.x2,y:v.y2},v),e.drawTicks&&f({x:v.tx1,y:v.ty1},{x:v.tx2,y:v.ty2},{color:v.tickColor,width:v.tickWidth,borderDash:v.tickBorderDash,borderDashOffset:v.tickBorderDashOffset})}}drawBorder(){let{chart:t,ctx:e,options:{border:i,grid:o}}=this,s=i.setContext(this.getContext()),m=i.display?s.width:0;if(!m)return;let f=o.setContext(this.getContext(0)).lineWidth,v=this._borderValue,y,M,I,B;this.isHorizontal()?(y=mr(t,this.left,m)-m/2,M=mr(t,this.right,f)+f/2,I=B=v):(I=mr(t,this.top,m)-m/2,B=mr(t,this.bottom,f)+f/2,y=M=v),e.save(),e.lineWidth=s.width,e.strokeStyle=s.color,e.beginPath(),e.moveTo(y,I),e.lineTo(M,B),e.stroke(),e.restore()}drawLabels(t){if(!this.options.ticks.display)return;let i=this.ctx,o=this._computeLabelArea();o&&ll(i,o);let s=this.getLabelItems(t);for(let m of s){let f=m.options,v=m.font,y=m.label,M=m.textOffset;gr(i,y,0,M,v,f)}o&&cl(i)}drawTitle(){let{ctx:t,options:{position:e,title:i,reverse:o}}=this;if(!i.display)return;let s=mn(i.font),m=Dn(i.padding),f=i.align,v=s.lineHeight/2;e==="bottom"||e==="center"||tt(e)?(v+=m.bottom,Ft(i.text)&&(v+=s.lineHeight*(i.text.length-1))):v+=m.top;let{titleX:y,titleY:M,maxWidth:I,rotation:B}=KL(this,v,e,f);gr(t,i.text,0,0,s,{color:i.color,maxWidth:I,rotation:B,textAlign:QL(f,e,o),textBaseline:"middle",translation:[y,M]})}draw(t){this._isVisible()&&(this.drawBackground(),this.drawGrid(t),this.drawBorder(),this.drawTitle(),this.drawLabels(t))}_layers(){let t=this.options,e=t.ticks&&t.ticks.z||0,i=qe(t.grid&&t.grid.z,-1),o=qe(t.border&&t.border.z,0);return!this._isVisible()||this.draw!==n.prototype.draw?[{z:e,draw:s=>{this.draw(s)}}]:[{z:i,draw:s=>{this.drawBackground(),this.drawGrid(s),this.drawTitle()}},{z:o,draw:()=>{this.drawBorder()}},{z:e,draw:s=>{this.drawLabels(s)}}]}getMatchingVisibleMetas(t){let e=this.chart.getSortedVisibleDatasetMetas(),i=this.axis+"AxisID",o=[],s,m;for(s=0,m=e.length;s<m;++s){let f=e[s];f[i]===this.id&&(!t||f.type===t)&&o.push(f)}return o}_resolveTickFontOptions(t){let e=this.options.ticks.setContext(this.getContext(t));return mn(e.font)}_maxDigits(){let t=this._resolveTickFontOptions(0).lineHeight;return(this.isHorizontal()?this.width:this.height)/t}},es=class{constructor(t,e,i){this.type=t,this.scope=e,this.override=i,this.items=Object.create(null)}isForType(t){return Object.prototype.isPrototypeOf.call(this.type.prototype,t.prototype)}register(t){let e=Object.getPrototypeOf(t),i;tF(e)&&(i=this.register(e));let o=this.items,s=t.id,m=this.scope+"."+s;if(!s)throw new Error("class does not have id: "+t);return s in o||(o[s]=t,JL(t,m,i),this.override&&Rt.override(t.id,t.overrides)),m}get(t){return this.items[t]}unregister(t){let e=this.items,i=t.id,o=this.scope;i in e&&delete e[i],o&&i in Rt[o]&&(delete Rt[o][i],this.override&&delete pr[i])}};function JL(n,t,e){let i=Wa(Object.create(null),[e?Rt.get(e):{},Rt.get(t),n.defaults]);Rt.set(t,i),n.defaultRoutes&&eF(t,n.defaultRoutes),n.descriptors&&Rt.describe(t,n.descriptors)}function eF(n,t){Object.keys(t).forEach(e=>{let i=e.split("."),o=i.pop(),s=[n].concat(i).join("."),m=t[e].split("."),f=m.pop(),v=m.join(".");Rt.route(s,o,v,f)})}function tF(n){return"id"in n&&"defaults"in n}var ng=class{constructor(){this.controllers=new es(_r,"datasets",!0),this.elements=new es(Li,"elements"),this.plugins=new es(Object,"plugins"),this.scales=new es(ta,"scales"),this._typedRegistries=[this.controllers,this.scales,this.elements]}add(...t){this._each("register",t)}remove(...t){this._each("unregister",t)}addControllers(...t){this._each("register",t,this.controllers)}addElements(...t){this._each("register",t,this.elements)}addPlugins(...t){this._each("register",t,this.plugins)}addScales(...t){this._each("register",t,this.scales)}getController(t){return this._get(t,this.controllers,"controller")}getElement(t){return this._get(t,this.elements,"element")}getPlugin(t){return this._get(t,this.plugins,"plugin")}getScale(t){return this._get(t,this.scales,"scale")}removeControllers(...t){this._each("unregister",t,this.controllers)}removeElements(...t){this._each("unregister",t,this.elements)}removePlugins(...t){this._each("unregister",t,this.plugins)}removeScales(...t){this._each("unregister",t,this.scales)}_each(t,e,i){[...e].forEach(o=>{let s=i||this._getRegistryForType(o);i||s.isForType(o)||s===this.plugins&&o.id?this._exec(t,s,o):Ot(o,m=>{let f=i||this._getRegistryForType(m);this._exec(t,f,m)})})}_exec(t,e,i){let o=fd(t);Dt(i["before"+o],[],i),e[t](i),Dt(i["after"+o],[],i)}_getRegistryForType(t){for(let e=0;e<this._typedRegistries.length;e++){let i=this._typedRegistries[e];if(i.isForType(t))return i}return this.plugins}_get(t,e,i){let o=e.get(t);if(o===void 0)throw new Error('"'+t+'" is not a registered '+i+".");return o}},so=new ng,ig=class{constructor(){this._init=void 0}notify(t,e,i,o){if(e==="beforeInit"&&(this._init=this._createDescriptors(t,!0),this._notify(this._init,t,"install")),this._init===void 0)return;let s=o?this._descriptors(t).filter(o):this._descriptors(t),m=this._notify(s,t,e,i);return e==="afterDestroy"&&(this._notify(s,t,"stop"),this._notify(this._init,t,"uninstall"),this._init=void 0),m}_notify(t,e,i,o){o=o||{};for(let s of t){let m=s.plugin,f=m[i],v=[e,o,s.options];if(Dt(f,v,m)===!1&&o.cancelable)return!1}return!0}invalidate(){et(this._cache)||(this._oldCache=this._cache,this._cache=void 0)}_descriptors(t){if(this._cache)return this._cache;let e=this._cache=this._createDescriptors(t);return this._notifyStateChanges(t),e}_createDescriptors(t,e){let i=t&&t.config,o=qe(i.options&&i.options.plugins,{}),s=nF(i);return o===!1&&!e?[]:oF(t,s,o,e)}_notifyStateChanges(t){let e=this._oldCache||[],i=this._cache,o=(s,m)=>s.filter(f=>!m.some(v=>f.plugin.id===v.plugin.id));this._notify(o(e,i),t,"stop"),this._notify(o(i,e),t,"start")}};function nF(n){let t={},e=[],i=Object.keys(so.plugins.items);for(let s=0;s<i.length;s++)e.push(so.getPlugin(i[s]));let o=n.plugins||[];for(let s=0;s<o.length;s++){let m=o[s];e.indexOf(m)===-1&&(e.push(m),t[m.id]=!0)}return{plugins:e,localIds:t}}function iF(n,t){return!t&&n===!1?null:n===!0?{}:n}function oF(n,{plugins:t,localIds:e},i,o){let s=[],m=n.getContext();for(let f of t){let v=f.id,y=iF(i[v],o);y!==null&&s.push({plugin:f,options:rF(n.config,{plugin:f,local:e[v]},y,m)})}return s}function rF(n,{plugin:t,local:e},i,o){let s=n.pluginScopeKeys(t),m=n.getOptionScopes(i,s);return e&&t.defaults&&m.push(t.defaults),n.createResolver(m,o,[""],{scriptable:!1,indexable:!1,allKeys:!0})}function og(n,t){let e=Rt.datasets[n]||{};return((t.datasets||{})[n]||{}).indexAxis||t.indexAxis||e.indexAxis||"x"}function aF(n,t){let e=n;return n==="_index_"?e=t:n==="_value_"&&(e=t==="x"?"y":"x"),e}function sF(n,t){return n===t?"_index_":"_value_"}function bv(n){if(n==="x"||n==="y"||n==="r")return n}function lF(n){if(n==="top"||n==="bottom")return"x";if(n==="left"||n==="right")return"y"}function rg(n,...t){if(bv(n))return n;for(let e of t){let i=e.axis||lF(e.position)||n.length>1&&bv(n[0].toLowerCase());if(i)return i}throw new Error(`Cannot determine type of '${n}' axis. Please provide 'axis' or 'position' option.`)}function yv(n,t,e){if(e[t+"AxisID"]===n)return{axis:t}}function cF(n,t){if(t.data&&t.data.datasets){let e=t.data.datasets.filter(i=>i.xAxisID===n||i.yAxisID===n);if(e.length)return yv(n,"x",e[0])||yv(n,"y",e[0])}return{}}function dF(n,t){let e=pr[n.type]||{scales:{}},i=t.scales||{},o=og(n.type,t),s=Object.create(null);return Object.keys(i).forEach(m=>{let f=i[m];if(!tt(f))return console.error(`Invalid scale configuration for scale: ${m}`);if(f._proxy)return console.warn(`Ignoring resolver passed as options for scale: ${m}`);let v=rg(m,f,cF(m,n),Rt.scales[f.type]),y=sF(v,o),M=e.scales||{};s[m]=qa(Object.create(null),[{axis:v},f,M[v],M[y]])}),n.data.datasets.forEach(m=>{let f=m.type||n.type,v=m.indexAxis||og(f,t),M=(pr[f]||{}).scales||{};Object.keys(M).forEach(I=>{let B=aF(I,v),N=m[B+"AxisID"]||B;s[N]=s[N]||Object.create(null),qa(s[N],[{axis:B},i[N],M[I]])})}),Object.keys(s).forEach(m=>{let f=s[m];qa(f,[Rt.scales[f.type],Rt.scale])}),s}function lb(n){let t=n.options||(n.options={});t.plugins=qe(t.plugins,{}),t.scales=dF(n,t)}function cb(n){return n=n||{},n.datasets=n.datasets||[],n.labels=n.labels||[],n}function pF(n){return n=n||{},n.data=cb(n.data),lb(n),n}var Cv=new Map,db=new Set;function Od(n,t){let e=Cv.get(n);return e||(e=t(),Cv.set(n,e),db.add(e)),e}var ul=(n,t,e)=>{let i=So(t,e);i!==void 0&&n.add(i)},ag=class{constructor(t){this._config=pF(t),this._scopeCache=new Map,this._resolverCache=new Map}get platform(){return this._config.platform}get type(){return this._config.type}set type(t){this._config.type=t}get data(){return this._config.data}set data(t){this._config.data=cb(t)}get options(){return this._config.options}set options(t){this._config.options=t}get plugins(){return this._config.plugins}update(){let t=this._config;this.clearCache(),lb(t)}clearCache(){this._scopeCache.clear(),this._resolverCache.clear()}datasetScopeKeys(t){return Od(t,()=>[[`datasets.${t}`,""]])}datasetAnimationScopeKeys(t,e){return Od(`${t}.transition.${e}`,()=>[[`datasets.${t}.transitions.${e}`,`transitions.${e}`],[`datasets.${t}`,""]])}datasetElementScopeKeys(t,e){return Od(`${t}-${e}`,()=>[[`datasets.${t}.elements.${e}`,`datasets.${t}`,`elements.${e}`,""]])}pluginScopeKeys(t){let e=t.id,i=this.type;return Od(`${i}-plugin-${e}`,()=>[[`plugins.${e}`,...t.additionalOptionScopes||[]]])}_cachedScopes(t,e){let i=this._scopeCache,o=i.get(t);return(!o||e)&&(o=new Map,i.set(t,o)),o}getOptionScopes(t,e,i){let{options:o,type:s}=this,m=this._cachedScopes(t,i),f=m.get(e);if(f)return f;let v=new Set;e.forEach(M=>{t&&(v.add(t),M.forEach(I=>ul(v,t,I))),M.forEach(I=>ul(v,o,I)),M.forEach(I=>ul(v,pr[s]||{},I)),M.forEach(I=>ul(v,Rt,I)),M.forEach(I=>ul(v,vd,I))});let y=Array.from(v);return y.length===0&&y.push(Object.create(null)),db.has(e)&&m.set(e,y),y}chartOptionScopes(){let{options:t,type:e}=this;return[t,pr[e]||{},Rt.datasets[e]||{},{type:e},Rt,vd]}resolveNamedOptions(t,e,i,o=[""]){let s={$shared:!0},{resolver:m,subPrefixes:f}=wv(this._resolverCache,t,o),v=m;if(gF(m,e)){s.$shared=!1,i=Po(i)?i():i;let y=this.createResolver(t,i,f);v=Zr(m,i,y)}for(let y of e)s[y]=v[y];return s}createResolver(t,e,i=[""],o){let{resolver:s}=wv(this._resolverCache,t,i);return tt(e)?Zr(s,e,void 0,o):s}};function wv(n,t,e){let i=n.get(t);i||(i=new Map,n.set(t,i));let o=e.join(),s=i.get(o);return s||(s={resolver:Cd(t,e),subPrefixes:e.filter(f=>!f.toLowerCase().includes("hover"))},i.set(o,s)),s}var mF=n=>tt(n)&&Object.getOwnPropertyNames(n).some(t=>Po(n[t]));function gF(n,t){let{isScriptable:e,isIndexable:i}=Em(n);for(let o of t){let s=e(o),m=i(o),f=(m||s)&&n[o];if(s&&(Po(f)||mF(f))||m&&Ft(f))return!0}return!1}var uF="4.5.1",fF=["top","bottom","left","right","chartArea"];function Pv(n,t){return n==="top"||n==="bottom"||fF.indexOf(n)===-1&&t==="x"}function Mv(n,t){return function(e,i){return e[n]===i[n]?e[t]-i[t]:e[n]-i[n]}}function Sv(n){let t=n.chart,e=t.options.animation;t.notifyPlugins("afterRender"),Dt(e&&e.onComplete,[n],t)}function hF(n){let t=n.chart,e=t.options.animation;Dt(e&&e.onProgress,[n],t)}function pb(n){return wd()&&typeof n=="string"?n=document.getElementById(n):n&&n.length&&(n=n[0]),n&&n.canvas&&(n=n.canvas),n}var Dd={},kv=n=>{let t=pb(n);return Object.values(Dd).filter(e=>e.canvas===t).pop()};function _F(n,t,e){let i=Object.keys(n);for(let o of i){let s=+o;if(s>=t){let m=n[o];delete n[o],(e>0||s>t)&&(n[s+e]=m)}}}function xF(n,t,e,i){return!e||n.type==="mouseout"?null:i?t:n}var ns=(()=>{class n{static defaults=Rt;static instances=Dd;static overrides=pr;static registry=so;static version=uF;static getChart=kv;static register(...e){so.add(...e),Ov()}static unregister(...e){so.remove(...e),Ov()}constructor(e,i){let o=this.config=new ag(i),s=pb(e),m=kv(s);if(m)throw new Error("Canvas is already in use. Chart with ID '"+m.id+"' must be destroyed before the canvas with ID '"+m.canvas.id+"' can be reused.");let f=o.createResolver(o.chartOptionScopes(),this.getContext());this.platform=new(o.platform||FL(s)),this.platform.updateConfig(o);let v=this.platform.acquireContext(s,f.aspectRatio),y=v&&v.canvas,M=y&&y.height,I=y&&y.width;if(this.id=Sx(),this.ctx=v,this.canvas=y,this.width=I,this.height=M,this._options=f,this._aspectRatio=this.aspectRatio,this._layers=[],this._metasets=[],this._stacks=void 0,this.boxes=[],this.currentDevicePixelRatio=void 0,this.chartArea=void 0,this._active=[],this._lastEvent=void 0,this._listeners={},this._responsiveListeners=void 0,this._sortedMetasets=[],this.scales={},this._plugins=new ig,this.$proxies={},this._hiddenIndices={},this.attached=!1,this._animationsDisabled=void 0,this.$context=void 0,this._doResize=Vx(B=>this.update(B),f.resizeDelay||0),this._dataChanges=[],Dd[this.id]=this,!v||!y){console.error("Failed to create chart: can't acquire context from the given item");return}Oo.listen(this,"complete",Sv),Oo.listen(this,"progress",hF),this._initialize(),this.attached&&this.update()}get aspectRatio(){let{options:{aspectRatio:e,maintainAspectRatio:i},width:o,height:s,_aspectRatio:m}=this;return et(e)?i&&m?m:s?o/s:null:e}get data(){return this.config.data}set data(e){this.config.data=e}get options(){return this._options}set options(e){this.config.options=e}get registry(){return so}_initialize(){return this.notifyPlugins("beforeInit"),this.options.responsive?this.resize():Dm(this,this.options.devicePixelRatio),this.bindEvents(),this.notifyPlugins("afterInit"),this}clear(){return Sm(this.canvas,this.ctx),this}stop(){return Oo.stop(this),this}resize(e,i){Oo.running(this)?this._resizeBeforeDraw={width:e,height:i}:this._resize(e,i)}_resize(e,i){let o=this.options,s=this.canvas,m=o.maintainAspectRatio&&this.aspectRatio,f=this.platform.getMaximumSize(s,e,i,m),v=o.devicePixelRatio||this.platform.getDevicePixelRatio(),y=this.width?"resize":"attach";this.width=f.width,this.height=f.height,this._aspectRatio=this.aspectRatio,Dm(this,v,!0)&&(this.notifyPlugins("resize",{size:f}),Dt(o.onResize,[this,f],this),this.attached&&this._doResize(y)&&this.render())}ensureScalesHaveIDs(){let i=this.options.scales||{};Ot(i,(o,s)=>{o.id=s})}buildOrUpdateScales(){let e=this.options,i=e.scales,o=this.scales,s=Object.keys(o).reduce((f,v)=>(f[v]=!1,f),{}),m=[];i&&(m=m.concat(Object.keys(i).map(f=>{let v=i[f],y=rg(f,v),M=y==="r",I=y==="x";return{options:v,dposition:M?"chartArea":I?"bottom":"left",dtype:M?"radialLinear":I?"category":"linear"}}))),Ot(m,f=>{let v=f.options,y=v.id,M=rg(y,v),I=qe(v.type,f.dtype);(v.position===void 0||Pv(v.position,M)!==Pv(f.dposition))&&(v.position=f.dposition),s[y]=!0;let B=null;if(y in o&&o[y].type===I)B=o[y];else{let N=so.getScale(I);B=new N({id:y,type:I,ctx:this.ctx,chart:this}),o[B.id]=B}B.init(v,e)}),Ot(s,(f,v)=>{f||delete o[v]}),Ot(o,f=>{Un.configure(this,f,f.options),Un.addBox(this,f)})}_updateMetasets(){let e=this._metasets,i=this.data.datasets.length,o=e.length;if(e.sort((s,m)=>s.index-m.index),o>i){for(let s=i;s<o;++s)this._destroyDatasetMeta(s);e.splice(i,o-i)}this._sortedMetasets=e.slice(0).sort(Mv("order","index"))}_removeUnreferencedMetasets(){let{_metasets:e,data:{datasets:i}}=this;e.length>i.length&&delete this._stacks,e.forEach((o,s)=>{i.filter(m=>m===o._dataset).length===0&&this._destroyDatasetMeta(s)})}buildOrUpdateControllers(){let e=[],i=this.data.datasets,o,s;for(this._removeUnreferencedMetasets(),o=0,s=i.length;o<s;o++){let m=i[o],f=this.getDatasetMeta(o),v=m.type||this.config.type;if(f.type&&f.type!==v&&(this._destroyDatasetMeta(o),f=this.getDatasetMeta(o)),f.type=v,f.indexAxis=m.indexAxis||og(v,this.options),f.order=m.order||0,f.index=o,f.label=""+m.label,f.visible=this.isDatasetVisible(o),f.controller)f.controller.updateIndex(o),f.controller.linkScales();else{let y=so.getController(v),{datasetElementType:M,dataElementType:I}=Rt.datasets[v];Object.assign(y,{dataElementType:so.getElement(I),datasetElementType:M&&so.getElement(M)}),f.controller=new y(this,o),e.push(f.controller)}}return this._updateMetasets(),e}_resetElements(){Ot(this.data.datasets,(e,i)=>{this.getDatasetMeta(i).controller.reset()},this)}reset(){this._resetElements(),this.notifyPlugins("reset")}update(e){let i=this.config;i.update();let o=this._options=i.createResolver(i.chartOptionScopes(),this.getContext()),s=this._animationsDisabled=!o.animation;if(this._updateScales(),this._checkEventBindings(),this._updateHiddenIndices(),this._plugins.invalidate(),this.notifyPlugins("beforeUpdate",{mode:e,cancelable:!0})===!1)return;let m=this.buildOrUpdateControllers();this.notifyPlugins("beforeElementsUpdate");let f=0;for(let M=0,I=this.data.datasets.length;M<I;M++){let{controller:B}=this.getDatasetMeta(M),N=!s&&m.indexOf(B)===-1;B.buildOrUpdateElements(N),f=Math.max(+B.getMaxOverflow(),f)}f=this._minPadding=o.layout.autoPadding?f:0,this._updateLayout(f),s||Ot(m,M=>{M.reset()}),this._updateDatasets(e),this.notifyPlugins("afterUpdate",{mode:e}),this._layers.sort(Mv("z","_idx"));let{_active:v,_lastEvent:y}=this;y?this._eventHandler(y,!0):v.length&&this._updateHoverStyles(v,v,!0),this.render()}_updateScales(){Ot(this.scales,e=>{Un.removeBox(this,e)}),this.ensureScalesHaveIDs(),this.buildOrUpdateScales()}_checkEventBindings(){let e=this.options,i=new Set(Object.keys(this._listeners)),o=new Set(e.events);(!gm(i,o)||!!this._responsiveListeners!==e.responsive)&&(this.unbindEvents(),this.bindEvents())}_updateHiddenIndices(){let{_hiddenIndices:e}=this,i=this._getUniformDataChanges()||[];for(let{method:o,start:s,count:m}of i){let f=o==="_removeElements"?-m:m;_F(e,s,f)}}_getUniformDataChanges(){let e=this._dataChanges;if(!e||!e.length)return;this._dataChanges=[];let i=this.data.datasets.length,o=m=>new Set(e.filter(f=>f[0]===m).map((f,v)=>v+","+f.splice(1).join(","))),s=o(0);for(let m=1;m<i;m++)if(!gm(s,o(m)))return;return Array.from(s).map(m=>m.split(",")).map(m=>({method:m[1],start:+m[2],count:+m[3]}))}_updateLayout(e){if(this.notifyPlugins("beforeLayout",{cancelable:!0})===!1)return;Un.update(this,this.width,this.height,e);let i=this.chartArea,o=i.width<=0||i.height<=0;this._layers=[],Ot(this.boxes,s=>{o&&s.position==="chartArea"||(s.configure&&s.configure(),this._layers.push(...s._layers()))},this),this._layers.forEach((s,m)=>{s._idx=m}),this.notifyPlugins("afterLayout")}_updateDatasets(e){if(this.notifyPlugins("beforeDatasetsUpdate",{mode:e,cancelable:!0})!==!1){for(let i=0,o=this.data.datasets.length;i<o;++i)this.getDatasetMeta(i).controller.configure();for(let i=0,o=this.data.datasets.length;i<o;++i)this._updateDataset(i,Po(e)?e({datasetIndex:i}):e);this.notifyPlugins("afterDatasetsUpdate",{mode:e})}}_updateDataset(e,i){let o=this.getDatasetMeta(e),s={meta:o,index:e,mode:i,cancelable:!0};this.notifyPlugins("beforeDatasetUpdate",s)!==!1&&(o.controller._update(i),s.cancelable=!1,this.notifyPlugins("afterDatasetUpdate",s))}render(){this.notifyPlugins("beforeRender",{cancelable:!0})!==!1&&(Oo.has(this)?this.attached&&!Oo.running(this)&&Oo.start(this):(this.draw(),Sv({chart:this})))}draw(){let e;if(this._resizeBeforeDraw){let{width:o,height:s}=this._resizeBeforeDraw;this._resizeBeforeDraw=null,this._resize(o,s)}if(this.clear(),this.width<=0||this.height<=0||this.notifyPlugins("beforeDraw",{cancelable:!0})===!1)return;let i=this._layers;for(e=0;e<i.length&&i[e].z<=0;++e)i[e].draw(this.chartArea);for(this._drawDatasets();e<i.length;++e)i[e].draw(this.chartArea);this.notifyPlugins("afterDraw")}_getSortedDatasetMetas(e){let i=this._sortedMetasets,o=[],s,m;for(s=0,m=i.length;s<m;++s){let f=i[s];(!e||f.visible)&&o.push(f)}return o}getSortedVisibleDatasetMetas(){return this._getSortedDatasetMetas(!0)}_drawDatasets(){if(this.notifyPlugins("beforeDatasetsDraw",{cancelable:!0})===!1)return;let e=this.getSortedVisibleDatasetMetas();for(let i=e.length-1;i>=0;--i)this._drawDataset(e[i]);this.notifyPlugins("afterDatasetsDraw")}_drawDataset(e){let i=this.ctx,o={meta:e,index:e.index,cancelable:!0},s=Fm(this,e);this.notifyPlugins("beforeDatasetDraw",o)!==!1&&(s&&ll(i,s),e.controller.draw(),s&&cl(i),o.cancelable=!1,this.notifyPlugins("afterDatasetDraw",o))}isPointInArea(e){return io(e,this.chartArea,this._minPadding)}getElementsAtEventForMode(e,i,o,s){let m=bL.modes[i];return typeof m=="function"?m(this,e,o,s):[]}getDatasetMeta(e){let i=this.data.datasets[e],o=this._metasets,s=o.filter(m=>m&&m._dataset===i).pop();return s||(s={type:null,data:[],dataset:null,controller:null,hidden:null,xAxisID:null,yAxisID:null,order:i&&i.order||0,index:e,_dataset:i,_parsed:[],_sorted:!1},o.push(s)),s}getContext(){return this.$context||(this.$context=ko(null,{chart:this,type:"chart"}))}getVisibleDatasetCount(){return this.getSortedVisibleDatasetMetas().length}isDatasetVisible(e){let i=this.data.datasets[e];if(!i)return!1;let o=this.getDatasetMeta(e);return typeof o.hidden=="boolean"?!o.hidden:!i.hidden}setDatasetVisibility(e,i){let o=this.getDatasetMeta(e);o.hidden=!i}toggleDataVisibility(e){this._hiddenIndices[e]=!this._hiddenIndices[e]}getDataVisibility(e){return!this._hiddenIndices[e]}_updateVisibility(e,i,o){let s=o?"show":"hide",m=this.getDatasetMeta(e),f=m.controller._resolveAnimations(void 0,s);$a(i)?(m.data[i].hidden=!o,this.update()):(this.setDatasetVisibility(e,o),f.update(m,{visible:o}),this.update(v=>v.datasetIndex===e?s:void 0))}hide(e,i){this._updateVisibility(e,i,!1)}show(e,i){this._updateVisibility(e,i,!0)}_destroyDatasetMeta(e){let i=this._metasets[e];i&&i.controller&&i.controller._destroy(),delete this._metasets[e]}_stop(){let e,i;for(this.stop(),Oo.remove(this),e=0,i=this.data.datasets.length;e<i;++e)this._destroyDatasetMeta(e)}destroy(){this.notifyPlugins("beforeDestroy");let{canvas:e,ctx:i}=this;this._stop(),this.config.clearCache(),e&&(this.unbindEvents(),Sm(e,i),this.platform.releaseContext(i),this.canvas=null,this.ctx=null),delete Dd[this.id],this.notifyPlugins("afterDestroy")}toBase64Image(...e){return this.canvas.toDataURL(...e)}bindEvents(){this.bindUserEvents(),this.options.responsive?this.bindResponsiveEvents():this.attached=!0}bindUserEvents(){let e=this._listeners,i=this.platform,o=(m,f)=>{i.addEventListener(this,m,f),e[m]=f},s=(m,f,v)=>{m.offsetX=f,m.offsetY=v,this._eventHandler(m)};Ot(this.options.events,m=>o(m,s))}bindResponsiveEvents(){this._responsiveListeners||(this._responsiveListeners={});let e=this._responsiveListeners,i=this.platform,o=(y,M)=>{i.addEventListener(this,y,M),e[y]=M},s=(y,M)=>{e[y]&&(i.removeEventListener(this,y,M),delete e[y])},m=(y,M)=>{this.canvas&&this.resize(y,M)},f,v=()=>{s("attach",v),this.attached=!0,this.resize(),o("resize",m),o("detach",f)};f=()=>{this.attached=!1,s("resize",m),this._stop(),this._resize(0,0),o("attach",v)},i.isAttached(this.canvas)?v():f()}unbindEvents(){Ot(this._listeners,(e,i)=>{this.platform.removeEventListener(this,i,e)}),this._listeners={},Ot(this._responsiveListeners,(e,i)=>{this.platform.removeEventListener(this,i,e)}),this._responsiveListeners=void 0}updateHoverStyle(e,i,o){let s=o?"set":"remove",m,f,v,y;for(i==="dataset"&&(m=this.getDatasetMeta(e[0].datasetIndex),m.controller["_"+s+"DatasetHoverStyle"]()),v=0,y=e.length;v<y;++v){f=e[v];let M=f&&this.getDatasetMeta(f.datasetIndex).controller;M&&M[s+"HoverStyle"](f.element,f.datasetIndex,f.index)}}getActiveElements(){return this._active||[]}setActiveElements(e){let i=this._active||[],o=e.map(({datasetIndex:m,index:f})=>{let v=this.getDatasetMeta(m);if(!v)throw new Error("No dataset found at index "+m);return{datasetIndex:m,element:v.data[f],index:f}});!al(o,i)&&(this._active=o,this._lastEvent=null,this._updateHoverStyles(o,i))}notifyPlugins(e,i,o){return this._plugins.notify(this,e,i,o)}isPluginEnabled(e){return this._plugins._cache.filter(i=>i.plugin.id===e).length===1}_updateHoverStyles(e,i,o){let s=this.options.hover,m=(y,M)=>y.filter(I=>!M.some(B=>I.datasetIndex===B.datasetIndex&&I.index===B.index)),f=m(i,e),v=o?e:m(e,i);f.length&&this.updateHoverStyle(f,s.mode,!1),v.length&&s.mode&&this.updateHoverStyle(v,s.mode,!0)}_eventHandler(e,i){let o={event:e,replay:i,cancelable:!0,inChartArea:this.isPointInArea(e)},s=f=>(f.options.events||this.options.events).includes(e.native.type);if(this.notifyPlugins("beforeEvent",o,s)===!1)return;let m=this._handleEvent(e,i,o.inChartArea);return o.cancelable=!1,this.notifyPlugins("afterEvent",o,s),(m||o.changed)&&this.render(),this}_handleEvent(e,i,o){let{_active:s=[],options:m}=this,f=i,v=this._getActiveElements(e,s,o,f),y=Ex(e),M=xF(e,this._lastEvent,o,y);o&&(this._lastEvent=null,Dt(m.onHover,[e,v,this],this),y&&Dt(m.onClick,[e,v,this],this));let I=!al(v,s);return(I||i)&&(this._active=v,this._updateHoverStyles(v,s,i)),this._lastEvent=M,I}_getActiveElements(e,i,o,s){if(e.type==="mouseout")return[];if(!o)return i;let m=this.options.hover;return this.getElementsAtEventForMode(e,m.mode,m,s)}}return n})();function Ov(){return Ot(ns.instances,n=>n._plugins.invalidate())}function vF(n,t,e){let{startAngle:i,x:o,y:s,outerRadius:m,innerRadius:f,options:v}=t,{borderWidth:y,borderJoinStyle:M}=v,I=Math.min(y/m,In(i-e));if(n.beginPath(),n.arc(o,s,m-y/2,i+I/2,e-I/2),f>0){let B=Math.min(y/f,In(i-e));n.arc(o,s,f+y/2,e-B/2,i+B/2,!0)}else{let B=Math.min(y/2,m*In(i-e));if(M==="round")n.arc(o,s,B,e-mt/2,i+mt/2,!0);else if(M==="bevel"){let N=2*B*B,H=-N*Math.cos(e+mt/2)+o,W=-N*Math.sin(e+mt/2)+s,G=N*Math.cos(i+mt/2)+o,Z=N*Math.sin(i+mt/2)+s;n.lineTo(H,W),n.lineTo(G,Z)}}n.closePath(),n.moveTo(0,0),n.rect(0,0,n.canvas.width,n.canvas.height),n.clip("evenodd")}function bF(n,t,e){let{startAngle:i,pixelMargin:o,x:s,y:m,outerRadius:f,innerRadius:v}=t,y=o/f;n.beginPath(),n.arc(s,m,f,i-y,e+y),v>o?(y=o/v,n.arc(s,m,v,e+y,i-y,!0)):n.arc(s,m,o,e+tn,i-tn),n.closePath(),n.clip()}function yF(n){return yd(n,["outerStart","outerEnd","innerStart","innerEnd"])}function CF(n,t,e,i){let o=yF(n.options.borderRadius),s=(e-t)/2,m=Math.min(s,i*t/2),f=v=>{let y=(e-Math.min(s,v))*i/2;return hn(v,0,Math.min(s,y))};return{outerStart:f(o.outerStart),outerEnd:f(o.outerEnd),innerStart:hn(o.innerStart,0,m),innerEnd:hn(o.innerEnd,0,m)}}function Ja(n,t,e,i){return{x:e+n*Math.cos(t),y:i+n*Math.sin(t)}}function Vd(n,t,e,i,o,s){let{x:m,y:f,startAngle:v,pixelMargin:y,innerRadius:M}=t,I=Math.max(t.outerRadius+i+e-y,0),B=M>0?M+i+e+y:0,N=0,H=o-v;if(i){let Te=M>0?M-i:0,yt=I>0?I-i:0,Ct=(Te+yt)/2,an=Ct!==0?H*Ct/(Ct+i):H;N=(H-an)/2}let W=Math.max(.001,H*I-e/mt)/I,G=(H-W)/2,Z=v+G+N,Q=o-G-N,{outerStart:j,outerEnd:Y,innerStart:U,innerEnd:K}=CF(t,B,I,Q-Z),J=I-j,ge=I-Y,xe=Z+j/J,he=Q-Y/ge,Ce=B+U,De=B+K,se=Z+U/Ce,gt=Q-K/De;if(n.beginPath(),s){let Te=(xe+he)/2;if(n.arc(m,f,I,xe,Te),n.arc(m,f,I,Te,he),Y>0){let gn=Ja(ge,he,m,f);n.arc(gn.x,gn.y,Y,he,Q+tn)}let yt=Ja(De,Q,m,f);if(n.lineTo(yt.x,yt.y),K>0){let gn=Ja(De,gt,m,f);n.arc(gn.x,gn.y,K,Q+tn,gt+Math.PI)}let Ct=(Q-K/B+(Z+U/B))/2;if(n.arc(m,f,B,Q-K/B,Ct,!0),n.arc(m,f,B,Ct,Z+U/B,!0),U>0){let gn=Ja(Ce,se,m,f);n.arc(gn.x,gn.y,U,se+Math.PI,Z-tn)}let an=Ja(J,Z,m,f);if(n.lineTo(an.x,an.y),j>0){let gn=Ja(J,xe,m,f);n.arc(gn.x,gn.y,j,Z-tn,xe)}}else{n.moveTo(m,f);let Te=Math.cos(xe)*I+m,yt=Math.sin(xe)*I+f;n.lineTo(Te,yt);let Ct=Math.cos(he)*I+m,an=Math.sin(he)*I+f;n.lineTo(Ct,an)}n.closePath()}function wF(n,t,e,i,o){let{fullCircles:s,startAngle:m,circumference:f}=t,v=t.endAngle;if(s){Vd(n,t,e,i,v,o);for(let y=0;y<s;++y)n.fill();isNaN(f)||(v=m+(f%zt||zt))}return Vd(n,t,e,i,v,o),n.fill(),v}function PF(n,t,e,i,o){let{fullCircles:s,startAngle:m,circumference:f,options:v}=t,{borderWidth:y,borderJoinStyle:M,borderDash:I,borderDashOffset:B,borderRadius:N}=v,H=v.borderAlign==="inner";if(!y)return;n.setLineDash(I||[]),n.lineDashOffset=B,H?(n.lineWidth=y*2,n.lineJoin=M||"round"):(n.lineWidth=y,n.lineJoin=M||"bevel");let W=t.endAngle;if(s){Vd(n,t,e,i,W,o);for(let G=0;G<s;++G)n.stroke();isNaN(f)||(W=m+(f%zt||zt))}H&&bF(n,t,W),v.selfJoin&&W-m>=mt&&N===0&&M!=="miter"&&vF(n,t,W),s||(Vd(n,t,e,i,W,o),n.stroke())}var sg=class extends Li{static id="arc";static defaults={borderAlign:"center",borderColor:"#fff",borderDash:[],borderDashOffset:0,borderJoinStyle:void 0,borderRadius:0,borderWidth:2,offset:0,spacing:0,angle:void 0,circular:!0,selfJoin:!1};static defaultRoutes={backgroundColor:"backgroundColor"};static descriptors={_scriptable:!0,_indexable:t=>t!=="borderDash"};circumference;endAngle;fullCircles;innerRadius;outerRadius;pixelMargin;startAngle;constructor(t){super(),this.options=void 0,this.circumference=void 0,this.startAngle=void 0,this.endAngle=void 0,this.innerRadius=void 0,this.outerRadius=void 0,this.pixelMargin=0,this.fullCircles=0,t&&Object.assign(this,t)}inRange(t,e,i){let o=this.getProps(["x","y"],i),{angle:s,distance:m}=_m(o,{x:t,y:e}),{startAngle:f,endAngle:v,innerRadius:y,outerRadius:M,circumference:I}=this.getProps(["startAngle","endAngle","innerRadius","outerRadius","circumference"],i),B=(this.options.spacing+this.options.borderWidth)/2,N=qe(I,v-f),H=Xa(s,f,v)&&f!==v,W=N>=zt||H,G=ro(m,y+B,M+B);return W&&G}getCenterPoint(t){let{x:e,y:i,startAngle:o,endAngle:s,innerRadius:m,outerRadius:f}=this.getProps(["x","y","startAngle","endAngle","innerRadius","outerRadius"],t),{offset:v,spacing:y}=this.options,M=(o+s)/2,I=(m+f+y+v)/2;return{x:e+Math.cos(M)*I,y:i+Math.sin(M)*I}}tooltipPosition(t){return this.getCenterPoint(t)}draw(t){let{options:e,circumference:i}=this,o=(e.offset||0)/4,s=(e.spacing||0)/2,m=e.circular;if(this.pixelMargin=e.borderAlign==="inner"?.33:0,this.fullCircles=i>zt?Math.floor(i/zt):0,i===0||this.innerRadius<0||this.outerRadius<0)return;t.save();let f=(this.startAngle+this.endAngle)/2;t.translate(Math.cos(f)*o,Math.sin(f)*o);let v=1-Math.sin(Math.min(mt,i||0)),y=o*v;t.fillStyle=e.backgroundColor,t.strokeStyle=e.borderColor,wF(t,this,y,s,m),PF(t,this,y,s,m),t.restore(
vendor: 5,376 bytes, line 104
104)}};function mb(n,t,e=t){n.lineCap=qe(e.borderCapStyle,t.borderCapStyle),n.setLineDash(qe(e.borderDash,t.borderDash)),n.lineDashOffset=qe(e.borderDashOffset,t.borderDashOffset),n.lineJoin=qe(e.borderJoinStyle,t.borderJoinStyle),n.lineWidth=qe(e.borderWidth,t.borderWidth),n.strokeStyle=qe(e.borderColor,t.borderColor)}function MF(n,t,e){n.lineTo(e.x,e.y)}function SF(n){return n.stepped?Ux:n.tension||n.cubicInterpolationMode==="monotone"?jx:MF}function gb(n,t,e={}){let i=n.length,{start:o=0,end:s=i-1}=e,{start:m,end:f}=t,v=Math.max(o,m),y=Math.min(s,f),M=o<m&&s<m||o>f&&s>f;return{count:i,start:v,loop:t.loop,ilen:y<v&&!M?i+y-v:y-v}}function kF(n,t,e,i){let{points:o,options:s}=t,{count:m,start:f,loop:v,ilen:y}=gb(o,e,i),M=SF(s),{move:I=!0,reverse:B}=i||{},N,H,W;for(N=0;N<=y;++N)H=o[(f+(B?y-N:N))%m],!H.skip&&(I?(n.moveTo(H.x,H.y),I=!1):M(n,W,H,B,s.stepped),W=H);return v&&(H=o[(f+(B?y:0))%m],M(n,W,H,B,s.stepped)),!!v}function OF(n,t,e,i){let o=t.points,{count:s,start:m,ilen:f}=gb(o,e,i),{move:v=!0,reverse:y}=i||{},M=0,I=0,B,N,H,W,G,Z,Q=Y=>(m+(y?f-Y:Y))%s,j=()=>{W!==G&&(n.lineTo(M,G),n.lineTo(M,W),n.lineTo(M,Z))};for(v&&(N=o[Q(0)],n.moveTo(N.x,N.y)),B=0;B<=f;++B){if(N=o[Q(B)],N.skip)continue;let Y=N.x,U=N.y,K=Y|0;K===H?(U<W?W=U:U>G&&(G=U),M=(I*M+Y)/++I):(j(),n.lineTo(Y,U),H=K,I=0,W=G=U),Z=U}j()}function lg(n){let t=n.options,e=t.borderDash&&t.borderDash.length;return!n._decimated&&!n._loop&&!t.tension&&t.cubicInterpolationMode!=="monotone"&&!t.stepped&&!e?OF:kF}function EF(n){return n.stepped?Qx:n.tension||n.cubicInterpolationMode==="monotone"?Kx:cr}function TF(n,t,e,i){let o=t._path;o||(o=t._path=new Path2D,t.path(o,e,i)&&o.closePath()),mb(n,t.options),n.stroke(o)}function IF(n,t,e,i){let{segments:o,options:s}=t,m=lg(t);for(let f of o)mb(n,s,f.style),n.beginPath(),m(n,t,f,{start:e,end:e+i-1})&&n.closePath(),n.stroke()}var AF=typeof Path2D=="function";function DF(n,t,e,i){AF&&!t.options.segment?TF(n,t,e,i):IF(n,t,e,i)}var zd=(()=>{class n extends Li{static id="line";static defaults={borderCapStyle:"butt",borderDash:[],borderDashOffset:0,borderJoinStyle:"miter",borderWidth:3,capBezierPoints:!0,cubicInterpolationMode:"default",fill:!1,spanGaps:!1,stepped:!1,tension:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};static descriptors={_scriptable:!0,_indexable:e=>e!=="borderDash"&&e!=="fill"};constructor(e){super(),this.animated=!0,this.options=void 0,this._chart=void 0,this._loop=void 0,this._fullLoop=void 0,this._path=void 0,this._points=void 0,this._segments=void 0,this._decimated=!1,this._pointsUpdated=!1,this._datasetIndex=void 0,e&&Object.assign(this,e)}updateControlPoints(e,i){let o=this.options;if((o.tension||o.cubicInterpolationMode==="monotone")&&!o.stepped&&!this._pointsUpdated){let s=o.spanGaps?this._loop:this._fullLoop;Yx(this._points,o,e,s,i),this._pointsUpdated=!0}}set points(e){this._points=e,delete this._segments,delete this._path,this._pointsUpdated=!1}get points(){return this._points}get segments(){return this._segments||(this._segments=ev(this,this.options.segment))}first(){let e=this.segments,i=this.points;return e.length&&i[e[0].start]}last(){let e=this.segments,i=this.points,o=e.length;return o&&i[e[o-1].end]}interpolate(e,i){let o=this.options,s=e[i],m=this.points,f=Lm(this,{property:i,start:s,end:s});if(!f.length)return;let v=[],y=EF(o),M,I;for(M=0,I=f.length;M<I;++M){let{start:B,end:N}=f[M],H=m[B],W=m[N];if(H===W){v.push(H);continue}let G=Math.abs((s-H[i])/(W[i]-H[i])),Z=y(H,W,G,o.stepped);Z[i]=e[i],v.push(Z)}return v.length===1?v[0]:v}pathSegment(e,i,o){return lg(this)(e,this,i,o)}path(e,i,o){let s=this.segments,m=lg(this),f=this._loop;i=i||0,o=o||this.points.length-i;for(let v of s)f&=m(e,this,v,{start:i,end:i+o-1});return!!f}draw(e,i,o,s){let m=this.options||{};(this.points||[]).length&&m.borderWidth&&(e.save(),DF(e,this,o,s),e.restore()),this.animated&&(this._pointsUpdated=!1,this._path=void 0)}}return n})();function Ev(n,t,e,i){let o=n.options,{[e]:s}=n.getProps([e],i);return Math.abs(t-s)<o.radius+o.hitRadius}var RF=(()=>{class n extends Li{static id="point";parsed;skip;stop;static defaults={borderWidth:1,hitRadius:1,hoverBorderWidth:1,hoverRadius:4,pointStyle:"circle",radius:3,rotation:0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(e){super(),this.options=void 0,this.parsed=void 0,this.skip=void 0,this.stop=void 0,e&&Object.assign(this,e)}inRange(e,i,o){let s=this.options,{x:m,y:f}=this.getProps(["x","y"],o);return Math.pow(e-m,2)+Math.pow(i-f,2)<Math.pow(s.hitRadius+s.radius,2)}inXRange(e,i){return Ev(this,e,"x",i)}inYRange(e,i){return Ev(this,e,"y",i)}getCenterPoint(e){let{x:i,y:o}=this.getProps(["x","y"],e);return{x:i,y:o}}size(e){e=e||this.options||{};let i=e.radius||0;i=Math.max(i,i&&e.hoverRadius||0);let o=i&&e.borderWidth||0;return(i+o)*2}draw(e,i){let o=this.options;this.skip||o.radius<.1||!io(this,i,this.size(o)/2)||(e.strokeStyle=o.borderColor,e.lineWidth=o.borderWidth,e.fillStyle=o.backgroundColor,bd(e,o,this.x,this.y))}getRange(){let e=this.options||{};return e.radius+e.hitRadius}}return n})();function ub(n,t){let{x:e,y:i,base:o,width:s,height:m}=n.getProps(["x","y","base","width","height"],t),f,v,y,M,I;return n.horizontal?(I=m/2,f=Math.min(e,o),v=Math.max(e,o),y=i-I,M=i+I):(I=s/2,f=e-I,v=e+I,y=Math.min(i,o),M=Math.max(i,o)),{left:f,top:y,right:v,bottom:M}}
104function hr(n,t,e,i){return n?0:hn(t,e,i)}function BF(n,t,e){let i=n.options.borderWidth,o=n.borderSkipped,s=Om(i);return{t:hr(o.top,s.top,0,e),r:hr(o.right,s.right,0,t),b:hr(o.bottom,s.bottom,0,e),l:hr(o.left,s.left,0,t)}}function NF(n,t,e){let{enableBorderRadius:i}=n.getProps(["enableBorderRadius"]),o=n.options.borderRadius,s=ur(o),m=Math.min(t,e),f=n.borderSkipped,v=i||tt(o);return{topLeft:hr(!v||f.top||f.left,s.topLeft,0,m),topRight:hr(!v||f.top||f.right,s.topRight,0,m),bottomLeft:hr(!v||f.bottom||f.left,s.bottomLeft,0,m),bottomRight:hr(!v||f.bottom||f.right,s.bottomRight,0,m)}}function VF(n){let t=ub(n),e=t.right-t.left,i=t.bottom-t.top,o=BF(n,e/2,i/2),s=NF(n,e/2,i/2);return{outer:{x:t.left,y:t.top,w:e,h:i,radius:s},inner:{x:t.left+o.l,y:t.top+o.t,w:e-o.l-o.r,h:i-o.t-o.b,radius:{topLeft:Math.max(0,s.topLeft-Math.max(o.t,o.l)),topRight:Math.max(0,s.topRight-Math.max(o.t,o.r)),bottomLeft:Math.max(0,s.bottomLeft-Math.max(o.b,o.l)),bottomRight:Math.max(0,s.bottomRight-Math.max(o.b,o.r))}}}}function $m(n,t,e,i){let o=t===null,s=e===null,f=n&&!(o&&s)&&ub(n,i);return f&&(o||ro(t,f.left,f.right))&&(s||ro(e,f.top,f.bottom))}function LF(n){return n.topLeft||n.topRight||n.bottomLeft||n.bottomRight}function FF(n,t){n.rect(t.x,t.y,t.w,t.h)}function Ym(n,t,e={}){let i=n.x!==e.x?-t:0,o=n.y!==e.y?-t:0,s=(n.x+n.w!==e.x+e.w?t:0)-i,m=(n.y+n.h!==e.y+e.h?t:0)-o;return{x:n.x+i,y:n.y+o,w:n.w+s,h:n.h+m,radius:n.radius}}var cg=class extends Li{static id="bar";static defaults={borderSkipped:"start",borderWidth:0,borderRadius:0,inflateAmount:"auto",pointStyle:void 0};static defaultRoutes={backgroundColor:"backgroundColor",borderColor:"borderColor"};constructor(t){super(),this.options=void 0,this.horizontal=void 0,this.base=void 0,this.width=void 0,this.height=void 0,this.inflateAmount=void 0,t&&Object.assign(this,t)}draw(t){let{inflateAmount:e,options:{borderColor:i,backgroundColor:o}}=this,{inner:s,outer:m}=VF(this),f=LF(m.radius)?Qa:FF;t.save(),(m.w!==s.w||m.h!==s.h)&&(t.beginPath(),f(t,Ym(m,e,s)),t.clip(),f(t,Ym(s,-e,m)),t.fillStyle=i,t.fill("evenodd")),t.beginPath(),f(t,Ym(s,e)),t.fillStyle=o,t.fill(),t.restore()}inRange(t,e,i){return $m(this,t,e,i)}inXRange(t,e){return $m(this,t,null,e)}inYRange(t,e){return $m(this,null,t,e)}getCenterPoint(t){let{x:e,y:i,base:o,horizontal:s}=this.getProps(["x","y","base","horizontal"],t);return{x:s?(e+o)/2:e,y:s?i:(i+o)/2}}getRange(t){return t==="x"?this.width/2:this.height/2}},zF=Object.freeze({__proto__:null,ArcElement:sg,BarElement:cg,LineElement:zd,PointElement:RF}),dg=["rgb(54, 162, 235)","rgb(255, 99, 132)","rgb(255, 159, 64)","rgb(255, 205, 86)","rgb(75, 192, 192)","rgb(153, 102, 255)","rgb(201, 203, 207)"],Tv=dg.map(n=>n.replace("rgb(","rgba(").replace(")",", 0.5)"));function fb(n){return dg[n%dg.length]}function hb(n){return Tv[n%Tv.length]}function UF(n,t){return n.borderColor=fb(t),n.backgroundColor=hb(t),++t}function jF(n,t){return n.backgroundColor=n.data.map(()=>fb(t++)),t}function HF(n,t){return n.backgroundColor=n.data.map(()=>hb(t++)),t}function WF(n){let t=0;return(e,i)=>{let o=n.getDatasetMeta(i).controller;o instanceof xg?t=jF(e,t):o instanceof ib?t=HF(e,t):o&&(t=UF(e,t))}}function Iv(n){let t;for(t in n)if(n[t].borderColor||n[t].backgroundColor)return!0;return!1}function GF(n){return n&&(n.borderColor||n.backgroundColor)}function qF(){return Rt.borderColor!=="rgba(0,0,0,0.1)"||Rt.backgroundColor!=="rgba(0,0,0,0.1)"}var $F={id:"colors",defaults:{enabled:!0,forceOverride:!1},beforeLayout(n,t,e){if(!e.enabled)return;let{data:{datasets:i},options:o}=n.config,{elements:s}=o,m=Iv(i)||GF(o)||s&&Iv(s)||qF();if(!e.forceOverride&&m)return;let f=WF(n);i.forEach(f)}};function YF(n,t,e,i,o){let s=o.samples||i;if(s>=e)return n.slice(t,t+e);let m=[],f=(e-2)/(s-2),v=0,y=t+e-1,M=t,I,B,N,H,W;for(m[v++]=n[M],I=0;I<s-2;I++){let G=0,Z=0,Q,j=Math.floor((I+1)*f)+1+t,Y=Math.min(Math.floor((I+2)*f)+1,e)+t,U=Y-j;for(Q=j;Q<Y;Q++)G+=n[Q].x,Z+=n[Q].y;G/=U,Z/=U;let K=Math.floor(I*f)+1+t,J=Math.min(Math.floor((I+1)*f)+1,e)+t,{x:ge,y:xe}=n[M];for(N=H=-1,Q=K;Q<J;Q++)H=.5*Math.abs((ge-G)*(n[Q].y-xe)-(ge-n[Q].x)*(Z-xe)),H>N&&(N=H,B=n[Q],W=Q);m[v++]=B,M=W}return m[v++]=n[y],m}function XF(n,t,e,i){let o=0,s=0,m,f,v,y,M,I,B,N,H,W,G=[],Z=t+e-1,Q=n[t].x,Y=n[Z].x-Q;for(m=t;m<t+e;++m){f=n[m],v=(f.x-Q)/Y*i,y=f.y;let U=v|0;if(U===M)y<H?(H=y,I=m):y>W&&(W=y,B=m),o=(s*o+f.x)/++s;else{let K=m-1;if(!et(I)&&!et(B)){let J=Math.min(I,B),ge=Math.max(I,B);J!==N&&J!==K&&G.push(Ye(ze({},n[J]),{x:o})),ge!==N&&ge!==K&&G.push(Ye(ze({},n[ge]),{x:o}))}m>0&&K!==N&&G.push(n[K]),G.push(f),M=U,s=0,H=W=y,I=B=N=m}}return G}function _b(n){if(n._decimated){let t=n._data;delete n._decimated,delete n._data,Object.defineProperty(n,"data",{configurable:!0,enumerable:!0,writable:!0,value:t})}}
104function Av(n){n.data.datasets.forEach(t=>{_b(t)})}function ZF(n,t){let e=t.length,i=0,o,{iScale:s}=n,{min:m,max:f,minDefined:v,maxDefined:y}=s.getUserBounds();return v&&(i=hn(no(t,s.axis,m).lo,0,e-1)),y?o=hn(no(t,s.axis,f).hi+1,i,e)-i:o=e-i,{start:i,count:o}}var QF={id:"decimation",defaults:{algorithm:"min-max",enabled:!1},beforeElementsUpdate:(n,t,e)=>{if(!e.enabled){Av(n);return}let i=n.width;n.data.datasets.forEach((o,s)=>{let{_data:m,indexAxis:f}=o,v=n.getDatasetMeta(s),y=m||o.data;if(Ka([f,n.options.indexAxis])==="y"||!v.controller.supportsDecimation)return;let M=n.scales[v.xAxisID];if(M.type!=="linear"&&M.type!=="time"||n.options.parsing)return;let{start:I,count:B}=ZF(v,y),N=e.threshold||4*i;if(B<=N){_b(o);return}et(m)&&(o._data=y,delete o.data,Object.defineProperty(o,"data",{configurable:!0,enumerable:!0,get:function(){return this._decimated},set:function(W){this._data=W}}));let H;switch(e.algorithm){case"lttb":H=YF(y,I,B,i,e);break;case"min-max":H=XF(y,I,B,i);break;default:throw new Error(`Unsupported decimation algorithm '${e.algorithm}'`)}o._decimated=H})},destroy(n){Av(n)}};function KF(n,t,e){let i=n.segments,o=n.points,s=t.points,m=[];for(let f of i){let{start:v,end:y}=f;y=Ud(v,y,o);let M=pg(e,o[v],o[y],f.loop);if(!t.segments){m.push({source:f,target:M,start:o[v],end:o[y]});continue}let I=Lm(t,M);for(let B of I){let N=pg(e,s[B.start],s[B.end],B.loop),H=Vm(f,o,N);for(let W of H)m.push({source:W,target:B,start:{[e]:Dv(M,N,"start",Math.max)},end:{[e]:Dv(M,N,"end",Math.min)}})}}return m}function pg(n,t,e,i){if(i)return;let o=t[n],s=e[n];return n==="angle"&&(o=In(o),s=In(s)),{property:n,start:o,end:s}}function JF(n,t){let{x:e=null,y:i=null}=n||{},o=t.points,s=[];return t.segments.forEach(({start:m,end:f})=>{f=Ud(m,f,o);let v=o[m],y=o[f];i!==null?(s.push({x:v.x,y:i}),s.push({x:y.x,y:i})):e!==null&&(s.push({x:e,y:v.y}),s.push({x:e,y:y.y}))}),s}function Ud(n,t,e){for(;t>n;t--){let i=e[t];if(!isNaN(i.x)&&!isNaN(i.y))break}return t}function Dv(n,t,e,i){return n&&t?i(n[e],t[e]):n?n[e]:t?t[e]:0}function xb(n,t){let e=[],i=!1;return Ft(n)?(i=!0,e=n):e=JF(n,t),e.length?new zd({points:e,options:{tension:0},_loop:i,_fullLoop:i}):null}function Rv(n){return n&&n.fill!==!1}function ez(n,t,e){let o=n[t].fill,s=[t],m;if(!e)return o;for(;o!==!1&&s.indexOf(o)===-1;){if(!Gt(o))return o;if(m=n[o],!m)return!1;if(m.visible)return o;s.push(o),o=m.fill}return!1}function tz(n,t,e){let i=rz(n);if(tt(i))return isNaN(i.value)?!1:i;let o=parseFloat(i);return Gt(o)&&Math.floor(o)===o?nz(i[0],t,o,e):["origin","start","end","stack","shape"].indexOf(i)>=0&&i}function nz(n,t,e,i){return(n==="-"||n==="+")&&(e=t+e),e===t||e<0||e>=i?!1:e}function iz(n,t){let e=null;return n==="start"?e=t.bottom:n==="end"?e=t.top:tt(n)?e=t.getPixelForValue(n.value):t.getBasePixel&&(e=t.getBasePixel()),e}function oz(n,t,e){let i;return n==="start"?i=e:n==="end"?i=t.options.reverse?t.min:t.max:tt(n)?i=n.value:i=t.getBaseValue(),i}function rz(n){let t=n.options,e=t.fill,i=qe(e&&e.target,e);return i===void 0&&(i=!!t.backgroundColor),i===!1||i===null?!1:i===!0?"origin":i}function az(n){let{scale:t,index:e,line:i}=n,o=[],s=i.segments,m=i.points,f=sz(t,e);f.push(xb({x:null,y:t.bottom},i));for(let v=0;v<s.length;v++){let y=s[v];for(let M=y.start;M<=y.end;M++)lz(o,m[M],f)}return new zd({points:o,options:{}})}function sz(n,t){let e=[],i=n.getMatchingVisibleMetas("line");for(let o=0;o<i.length;o++){let s=i[o];if(s.index===t)break;s.hidden||e.unshift(s.dataset)}return e}function lz(n,t,e){let i=[];for(let o=0;o<e.length;o++){let s=e[o],{first:m,last:f,point:v}=cz(s,t,"x");if(!(!v||m&&f)){if(m)i.unshift(v);else if(n.push(v),!f)break}}n.push(...i)}function cz(n,t,e){let i=n.interpolate(t,e);if(!i)return{};let o=i[e],s=n.segments,m=n.points,f=!1,v=!1;for(let y=0;y<s.length;y++){let M=s[y],I=m[M.start][e],B=m[M.end][e];if(ro(o,I,B)){f=o===I,v=o===B;break}}return{first:f,last:v,point:i}}var Ld=class{constructor(t){this.x=t.x,this.y=t.y,this.radius=t.radius}pathSegment(t,e,i){let{x:o,y:s,radius:m}=this;return e=e||{start:0,end:zt},t.arc(o,s,m,e.end,e.start,!0),!i.bounds}interpolate(t){let{x:e,y:i,radius:o}=this,s=t.angle;return{x:e+Math.cos(s)*o,y:i+Math.sin(s)*o,angle:s}}};function dz(n){let{chart:t,fill:e,line:i}=n;if(Gt(e))return pz(t,e);if(e==="stack")return az(n);if(e==="shape")return!0;let o=mz(n);return o instanceof Ld?o:xb(o,i)}function pz(n,t){let e=n.getDatasetMeta(t);return e&&n.isDatasetVisible(t)?e.dataset:null}function mz(n){return(n.scale||{}).getPointPositionForValue?uz(n):gz(n)}function gz(n){let{scale:t={},fill:e}=n,i=iz(e,t);if(Gt(i)){let o=t.isHorizontal();return{x:o?i:null,y:o?null:i}}return null}function uz(n){let{scale:t,fill:e}=n,i=t.options,o=t.getLabels().length,s=i.reverse?t.max:t.min,m=oz(e,t,s),f=[];if(i.grid.circular){let v=t.getPointPositionForValue(0,s);return new Ld({x:v.x,y:v.y,radius:t.getDistanceFromCenterForValue(m)})}for(let v=0;v<o;++v)f.push(t.getPointPositionForValue(v,m));return f}function Xm(n,t,e){let i=dz(t),{chart:o,index:s,line:m,scale:f,axis:v}=t,y=m.options,M=y.fill,I=y.backgroundColor,{above:B=I,below:N=I}=M||{},H=o.getDatasetMeta(s),W=Fm(o,H);i&&m.points.length&&(ll(n,e),fz(n,{line:m,target:i,above:B,below:N,area:e,scale:f,axis:v,clip:W}),cl(n))}function fz(n,t){let{line:e,target:i,above:o,below:s,area:m,scale:f,clip:v}=t,y=e._loop?"angle":t.axis;n.save();let M=s;
vendor: 4,617 bytes, line 104
104s!==o&&(y==="x"?(Bv(n,i,m.top),Zm(n,{line:e,target:i,color:o,scale:f,property:y,clip:v}),n.restore(),n.save(),Bv(n,i,m.bottom)):y==="y"&&(Nv(n,i,m.left),Zm(n,{line:e,target:i,color:s,scale:f,property:y,clip:v}),n.restore(),n.save(),Nv(n,i,m.right),M=o)),Zm(n,{line:e,target:i,color:M,scale:f,property:y,clip:v}),n.restore()}function Bv(n,t,e){let{segments:i,points:o}=t,s=!0,m=!1;n.beginPath();for(let f of i){let{start:v,end:y}=f,M=o[v],I=o[Ud(v,y,o)];s?(n.moveTo(M.x,M.y),s=!1):(n.lineTo(M.x,e),n.lineTo(M.x,M.y)),m=!!t.pathSegment(n,f,{move:m}),m?n.closePath():n.lineTo(I.x,e)}n.lineTo(t.first().x,e),n.closePath(),n.clip()}function Nv(n,t,e){let{segments:i,points:o}=t,s=!0,m=!1;n.beginPath();for(let f of i){let{start:v,end:y}=f,M=o[v],I=o[Ud(v,y,o)];s?(n.moveTo(M.x,M.y),s=!1):(n.lineTo(e,M.y),n.lineTo(M.x,M.y)),m=!!t.pathSegment(n,f,{move:m}),m?n.closePath():n.lineTo(e,I.y)}n.lineTo(e,t.first().y),n.closePath(),n.clip()}function Zm(n,t){let{line:e,target:i,property:o,color:s,scale:m,clip:f}=t,v=KF(e,i,o);for(let{source:y,target:M,start:I,end:B}of v){let{style:{backgroundColor:N=s}={}}=y,H=i!==!0;n.save(),n.fillStyle=N,hz(n,m,f,H&&pg(o,I,B)),n.beginPath();let W=!!e.pathSegment(n,y),G;if(H){W?n.closePath():Vv(n,i,B,o);let Z=!!i.pathSegment(n,M,{move:W,reverse:!0});G=W&&Z,G||Vv(n,i,I,o)}n.closePath(),n.fill(G?"evenodd":"nonzero"),n.restore()}}function hz(n,t,e,i){let o=t.chart.chartArea,{property:s,start:m,end:f}=i||{};if(s==="x"||s==="y"){let v,y,M,I;s==="x"?(v=m,y=o.top,M=f,I=o.bottom):(v=o.left,y=m,M=o.right,I=f),n.beginPath(),e&&(v=Math.max(v,e.left),M=Math.min(M,e.right),y=Math.max(y,e.top),I=Math.min(I,e.bottom)),n.rect(v,y,M-v,I-y),n.clip()}}function Vv(n,t,e,i){let o=t.interpolate(e,i);o&&n.lineTo(o.x,o.y)}var _z={id:"filler",afterDatasetsUpdate(n,t,e){let i=(n.data.datasets||[]).length,o=[],s,m,f,v;for(m=0;m<i;++m)s=n.getDatasetMeta(m),f=s.dataset,v=null,f&&f.options&&f instanceof zd&&(v={visible:n.isDatasetVisible(m),index:m,fill:tz(f,m,i),chart:n,axis:s.controller.options.indexAxis,scale:s.vScale,line:f}),s.$filler=v,o.push(v);for(m=0;m<i;++m)v=o[m],!(!v||v.fill===!1)&&(v.fill=ez(o,m,e.propagate))},beforeDraw(n,t,e){let i=e.drawTime==="beforeDraw",o=n.getSortedVisibleDatasetMetas(),s=n.chartArea;for(let m=o.length-1;m>=0;--m){let f=o[m].$filler;f&&(f.line.updateControlPoints(s,f.axis),i&&f.fill&&Xm(n.ctx,f,s))}},beforeDatasetsDraw(n,t,e){if(e.drawTime!=="beforeDatasetsDraw")return;let i=n.getSortedVisibleDatasetMetas();for(let o=i.length-1;o>=0;--o){let s=i[o].$filler;Rv(s)&&Xm(n.ctx,s,n.chartArea)}},beforeDatasetDraw(n,t,e){let i=t.meta.$filler;!Rv(i)||e.drawTime!=="beforeDatasetDraw"||Xm(n.ctx,i,n.chartArea)},defaults:{propagate:!0,drawTime:"beforeDatasetDraw"}},Lv=(n,t)=>{let{boxHeight:e=t,boxWidth:i=t}=n;return n.usePointStyle&&(e=Math.min(e,t),i=n.pointStyleWidth||Math.min(i,t)),{boxWidth:i,boxHeight:e,itemHeight:Math.max(t,e)}},xz=(n,t)=>n!==null&&t!==null&&n.datasetIndex===t.datasetIndex&&n.index===t.index,Fd=class extends Li{constructor(t){super(),this._added=!1,this.legendHitBoxes=[],this._hoveredItem=null,this.doughnutMode=!1,this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this.legendItems=void 0,this.columnSizes=void 0,this.lineWidths=void 0,this.maxHeight=void 0,this.maxWidth=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.height=void 0,this.width=void 0,this._margins=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e,i){this.maxWidth=t,this.maxHeight=e,this._margins=i,this.setDimensions(),this.buildLabels(),this.fit()}setDimensions(){this.isHorizontal()?(this.width=this.maxWidth,this.left=this._margins.left,this.right=this.width):(this.height=this.maxHeight,this.top=this._margins.top,this.bottom=this.height)}buildLabels(){let t=this.options.labels||{},e=Dt(t.generateLabels,[this.chart],this)||[];t.filter&&(e=e.filter(i=>t.filter(i,this.chart.data))),t.sort&&(e=e.sort((i,o)=>t.sort(i,o,this.chart.data))),this.options.reverse&&e.reverse(),this.legendItems=e}fit(){let{options:t,ctx:e}=this;if(!t.display){this.width=this.height=0;return}let i=t.labels,o=mn(i.font),s=o.size,m=this._computeTitleHeight(),{boxWidth:f,itemHeight:v}=Lv(i,s),y,M;e.font=o.string,this.isHorizontal()?(y=this.maxWidth,M=this._fitRows(m,s,f,v)+10):(M=this.maxHeight,y=this._fitCols(m,o,f,v)+10),this.width=Math.min(y,t.maxWidth||this.maxWidth),this.height=Math.min(M,t.maxHeight||this.maxHeight)}_fitRows(t,e,i,o){let{ctx:s,maxWidth:m,options:{labels:{padding:f}}}=this,v=this.legendHitBoxes=[],y=this.lineWidths=[0],M=o+f,I=t;s.textAlign="left",s.textBaseline="middle";let B=-1,N=-M;
vendor: 4,819 bytes, line 104
104return this.legendItems.forEach((H,W)=>{let G=i+e/2+s.measureText(H.text).width;(W===0||y[y.length-1]+G+2*f>m)&&(I+=M,y[y.length-(W>0?0:1)]=0,N+=M,B++),v[W]={left:0,top:N,row:B,width:G,height:o},y[y.length-1]+=G+f}),I}_fitCols(t,e,i,o){let{ctx:s,maxHeight:m,options:{labels:{padding:f}}}=this,v=this.legendHitBoxes=[],y=this.columnSizes=[],M=m-t,I=f,B=0,N=0,H=0,W=0;return this.legendItems.forEach((G,Z)=>{let{itemWidth:Q,itemHeight:j}=vz(i,e,s,G,o);Z>0&&N+j+2*f>M&&(I+=B+f,y.push({width:B,height:N}),H+=B+f,W++,B=N=0),v[Z]={left:H,top:N,col:W,width:Q,height:j},B=Math.max(B,Q),N+=j+f}),I+=B,y.push({width:B,height:N}),I}adjustHitBoxes(){if(!this.options.display)return;let t=this._computeTitleHeight(),{legendHitBoxes:e,options:{align:i,labels:{padding:o},rtl:s}}=this,m=Kr(s,this.left,this.width);if(this.isHorizontal()){let f=0,v=An(i,this.left+o,this.right-this.lineWidths[f]);for(let y of e)f!==y.row&&(f=y.row,v=An(i,this.left+o,this.right-this.lineWidths[f])),y.top+=this.top+t+o,y.left=m.leftForLtr(m.x(v),y.width),v+=y.width+o}else{let f=0,v=An(i,this.top+t+o,this.bottom-this.columnSizes[f].height);for(let y of e)y.col!==f&&(f=y.col,v=An(i,this.top+t+o,this.bottom-this.columnSizes[f].height)),y.top=v,y.left+=this.left+o,y.left=m.leftForLtr(m.x(y.left),y.width),v+=y.height+o}}isHorizontal(){return this.options.position==="top"||this.options.position==="bottom"}draw(){if(this.options.display){let t=this.ctx;ll(t,this),this._draw(),cl(t)}}_draw(){let{options:t,columnSizes:e,lineWidths:i,ctx:o}=this,{align:s,labels:m}=t,f=Rt.color,v=Kr(t.rtl,this.left,this.width),y=mn(m.font),{padding:M}=m,I=y.size,B=I/2,N;this.drawTitle(),o.textAlign=v.textAlign("left"),o.textBaseline="middle",o.lineWidth=.5,o.font=y.string;let{boxWidth:H,boxHeight:W,itemHeight:G}=Lv(m,I),Z=function(K,J,ge){if(isNaN(H)||H<=0||isNaN(W)||W<0)return;o.save();let xe=qe(ge.lineWidth,1);if(o.fillStyle=qe(ge.fillStyle,f),o.lineCap=qe(ge.lineCap,"butt"),o.lineDashOffset=qe(ge.lineDashOffset,0),o.lineJoin=qe(ge.lineJoin,"miter"),o.lineWidth=xe,o.strokeStyle=qe(ge.strokeStyle,f),o.setLineDash(qe(ge.lineDash,[])),m.usePointStyle){let he={radius:W*Math.SQRT2/2,pointStyle:ge.pointStyle,rotation:ge.rotation,borderWidth:xe},Ce=v.xPlus(K,H/2),De=J+B;km(o,he,Ce,De,m.pointStyleWidth&&H)}else{let he=J+Math.max((I-W)/2,0),Ce=v.leftForLtr(K,H),De=ur(ge.borderRadius);o.beginPath(),Object.values(De).some(se=>se!==0)?Qa(o,{x:Ce,y:he,w:H,h:W,radius:De}):o.rect(Ce,he,H,W),o.fill(),xe!==0&&o.stroke()}o.restore()},Q=function(K,J,ge){gr(o,ge.text,K,J+G/2,y,{strikethrough:ge.hidden,textAlign:v.textAlign(ge.textAlign)})},j=this.isHorizontal(),Y=this._computeTitleHeight();j?N={x:An(s,this.left+M,this.right-i[0]),y:this.top+M+Y,line:0}:N={x:this.left+M,y:An(s,this.top+Y+M,this.bottom-e[0].height),line:0},Bm(this.ctx,t.textDirection);let U=G+M;this.legendItems.forEach((K,J)=>{o.strokeStyle=K.fontColor,o.fillStyle=K.fontColor;let ge=o.measureText(K.text).width,xe=v.textAlign(K.textAlign||(K.textAlign=m.textAlign)),he=H+B+ge,Ce=N.x,De=N.y;v.setWidth(this.width),j?J>0&&Ce+he+M>this.right&&(De=N.y+=U,N.line++,Ce=N.x=An(s,this.left+M,this.right-i[N.line])):J>0&&De+U>this.bottom&&(Ce=N.x=Ce+e[N.line].width+M,N.line++,De=N.y=An(s,this.top+Y+M,this.bottom-e[N.line].height));let se=v.x(Ce);if(Z(se,De,K),Ce=Lx(xe,Ce+H+B,j?Ce+he:this.right,t.rtl),Q(v.x(Ce),De,K),j)N.x+=he+M;else if(typeof K.text!="string"){let gt=y.lineHeight;N.y+=vb(K,gt)+M}else N.y+=U}),Nm(this.ctx,t.textDirection)}drawTitle(){let t=this.options,e=t.title,i=mn(e.font),o=Dn(e.padding);if(!e.display)return;let s=Kr(t.rtl,this.left,this.width),m=this.ctx,f=e.position,v=i.size/2,y=o.top+v,M,I=this.left,B=this.width;if(this.isHorizontal())B=Math.max(...this.lineWidths),M=this.top+y,I=An(t.align,I,this.right-B);else{let H=this.columnSizes.reduce((W,G)=>Math.max(W,G.height),0);M=y+An(t.align,this.top,this.bottom-H-t.labels.padding-this._computeTitleHeight())}let N=An(f,I,I+B);m.textAlign=s.textAlign(xd(f)),m.textBaseline="middle",m.strokeStyle=e.color,m.fillStyle=e.color,m.font=i.string,gr(m,e.text,N,M,i)}_computeTitleHeight(){let t=this.options.title,e=mn(t.font),i=Dn(t.padding);return t.display?e.lineHeight+i.height:0}_getLegendItemAt(t,e){let i,o,s;if(ro(t,this.left,this.right)&&ro(e,this.top,this.bottom)){for(s=this.legendHitBoxes,i=0;i<s.length;++i)if(o=s[i],ro(t,o.left,o.left+o.width)&&ro(e,o.top,o.top+o.height))return this.legendItems[i]}return null}handleEvent(t){let e=this.options;if(!Cz(t.type,e))return;let i=this._getLegendItemAt(t.x,t.y);if(t.type==="mousemove"||t.type==="mouseout"){let o=this._hoveredItem,s=xz(o,i);o&&!s&&Dt(e.onLeave,[t,o,this],this),this._hoveredItem=i,i&&!s&&Dt(e.onHover,[t,i,this],this)}else i&&Dt(e.onClick,[t,i,this],this)}};function vz(n,t,e,i,o){let s=bz(i,n,t,e),m=yz(o,i,t.lineHeight);return{itemWidth:s,itemHeight:m}}
vendor: 5,515 bytes, lines 104-106
104function bz(n,t,e,i){let o=n.text;return o&&typeof o!="string"&&(o=o.reduce((s,m)=>s.length>m.length?s:m)),t+e.size/2+i.measureText(o).width}function yz(n,t,e){let i=n;return typeof t.text!="string"&&(i=vb(t,e)),i}function vb(n,t){let e=n.text?n.text.length:0;return t*e}function Cz(n,t){return!!((n==="mousemove"||n==="mouseout")&&(t.onHover||t.onLeave)||t.onClick&&(n==="click"||n==="mouseup"))}var wz={id:"legend",_element:Fd,start(n,t,e){let i=n.legend=new Fd({ctx:n.ctx,options:e,chart:n});Un.configure(n,i,e),Un.addBox(n,i)},stop(n){Un.removeBox(n,n.legend),delete n.legend},beforeUpdate(n,t,e){let i=n.legend;Un.configure(n,i,e),i.options=e},afterUpdate(n){let t=n.legend;t.buildLabels(),t.adjustHitBoxes()},afterEvent(n,t){t.replay||n.legend.handleEvent(t.event)},defaults:{display:!0,position:"top",align:"center",fullSize:!0,reverse:!1,weight:1e3,onClick(n,t,e){let i=t.datasetIndex,o=e.chart;o.isDatasetVisible(i)?(o.hide(i),t.hidden=!0):(o.show(i),t.hidden=!1)},onHover:null,onLeave:null,labels:{color:n=>n.chart.options.color,boxWidth:40,padding:10,generateLabels(n){let t=n.data.datasets,{labels:{usePointStyle:e,pointStyle:i,textAlign:o,color:s,useBorderRadius:m,borderRadius:f}}=n.legend.options;return n._getSortedDatasetMetas().map(v=>{let y=v.controller.getStyle(e?0:void 0),M=Dn(y.borderWidth);return{text:t[v.index].label,fillStyle:y.backgroundColor,fontColor:s,hidden:!v.visible,lineCap:y.borderCapStyle,lineDash:y.borderDash,lineDashOffset:y.borderDashOffset,lineJoin:y.borderJoinStyle,lineWidth:(M.width+M.height)/4,strokeStyle:y.borderColor,pointStyle:i||y.pointStyle,rotation:y.rotation,textAlign:o||y.textAlign,borderRadius:m&&(f||y.borderRadius),datasetIndex:v.index}},this)}},title:{color:n=>n.chart.options.color,display:!1,position:"center",text:""}},descriptors:{_scriptable:n=>!n.startsWith("on"),labels:{_scriptable:n=>!["generateLabels","filter","sort"].includes(n)}}},xl=class extends Li{constructor(t){super(),this.chart=t.chart,this.options=t.options,this.ctx=t.ctx,this._padding=void 0,this.top=void 0,this.bottom=void 0,this.left=void 0,this.right=void 0,this.width=void 0,this.height=void 0,this.position=void 0,this.weight=void 0,this.fullSize=void 0}update(t,e){let i=this.options;if(this.left=0,this.top=0,!i.display){this.width=this.height=this.right=this.bottom=0;return}this.width=this.right=t,this.height=this.bottom=e;let o=Ft(i.text)?i.text.length:1;this._padding=Dn(i.padding);let s=o*mn(i.font).lineHeight+this._padding.height;this.isHorizontal()?this.height=s:this.width=s}isHorizontal(){let t=this.options.position;return t==="top"||t==="bottom"}_drawArgs(t){let{top:e,left:i,bottom:o,right:s,options:m}=this,f=m.align,v=0,y,M,I;return this.isHorizontal()?(M=An(f,i,s),I=e+t,y=s-i):(m.position==="left"?(M=i+t,I=An(f,o,e),v=mt*-.5):(M=s-t,I=An(f,e,o),v=mt*.5),y=o-e),{titleX:M,titleY:I,maxWidth:y,rotation:v}}draw(){let t=this.ctx,e=this.options;if(!e.display)return;let i=mn(e.font),s=i.lineHeight/2+this._padding.top,{titleX:m,titleY:f,maxWidth:v,rotation:y}=this._drawArgs(s);gr(t,e.text,0,0,i,{color:e.color,maxWidth:v,rotation:y,textAlign:xd(e.align),textBaseline:"middle",translation:[m,f]})}};function Pz(n,t){let e=new xl({ctx:n.ctx,options:t,chart:n});Un.configure(n,e,t),Un.addBox(n,e),n.titleBlock=e}var Mz={id:"title",_element:xl,start(n,t,e){Pz(n,e)},stop(n){let t=n.titleBlock;Un.removeBox(n,t),delete n.titleBlock},beforeUpdate(n,t,e){let i=n.titleBlock;Un.configure(n,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"bold"},fullSize:!0,padding:10,position:"top",text:"",weight:2e3},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},Ed=new WeakMap,Sz={id:"subtitle",start(n,t,e){let i=new xl({ctx:n.ctx,options:e,chart:n});Un.configure(n,i,e),Un.addBox(n,i),Ed.set(n,i)},stop(n){Un.removeBox(n,Ed.get(n)),Ed.delete(n)},beforeUpdate(n,t,e){let i=Ed.get(n);Un.configure(n,i,e),i.options=e},defaults:{align:"center",display:!1,font:{weight:"normal"},fullSize:!0,padding:0,position:"top",text:"",weight:1500},defaultRoutes:{color:"color"},descriptors:{_scriptable:!0,_indexable:!1}},hl={average(n){if(!n.length)return!1;let t,e,i=new Set,o=0,s=0;for(t=0,e=n.length;t<e;++t){let f=n[t].element;if(f&&f.hasValue()){let v=f.tooltipPosition();i.add(v.x),o+=v.y,++s}}return s===0||i.size===0?!1:{x:[...i].reduce((f,v)=>f+v)/i.size,y:o/s}},nearest(n,t){if(!n.length)return!1;let e=t.x,i=t.y,o=Number.POSITIVE_INFINITY,s,m,f;for(s=0,m=n.length;s<m;++s){let v=n[s].element;if(v&&v.hasValue()){let y=v.getCenterPoint(),M=gd(t,y);M<o&&(o=M,f=v)}}if(f){let v=f.tooltipPosition();e=v.x,i=v.y}return{x:e,y:i}}};function ao(n,t){return t&&(Ft(t)?Array.prototype.push.apply(n,t):n.push(t)),n}function Eo(n){return(typeof n=="string"||n instanceof String)&&n.indexOf(` 105`)>-1?n.split(` 106`):n}function kz(n,t){let{element:e,datasetIndex:i,index:o}=t,s=n.getDatasetMeta(i).controller,{label:m,value:f}=s.getLabelAndValue(o);return{chart:n,label:m,parsed:s.getParsed(o),raw:n.data.datasets[i].data[o],formattedValue:f,dataset:s.getDataset(),dataIndex:o,datasetIndex:i,element:e}}function Fv(n,t){let e=n.chart.ctx,{body:i,footer:o,title:s}=n,{boxWidth:m,boxHeight:f}=t,v=mn(t.bodyFont),y=mn(t.titleFont),M=mn(t.footerFont),I=s.length,B=o.length,N=i.length,H=Dn(t.padding),W=H.height,G=0,Z=i.reduce((Y,U)=>Y+U.before.length+U.lines.length+U.after.length,0);if(Z+=n.beforeBody.length+n.afterBody.length,I&&(W+=I*y.lineHeight+(I-1)*t.titleSpacing+t.titleMarginBottom),Z){let Y=t.displayColors?Math.max(f,v.lineHeight):v.lineHeight;
vendor: 10,643 bytes, line 106
106W+=N*Y+(Z-N)*v.lineHeight+(Z-1)*t.bodySpacing}B&&(W+=t.footerMarginTop+B*M.lineHeight+(B-1)*t.footerSpacing);let Q=0,j=function(Y){G=Math.max(G,e.measureText(Y).width+Q)};return e.save(),e.font=y.string,Ot(n.title,j),e.font=v.string,Ot(n.beforeBody.concat(n.afterBody),j),Q=t.displayColors?m+2+t.boxPadding:0,Ot(i,Y=>{Ot(Y.before,j),Ot(Y.lines,j),Ot(Y.after,j)}),Q=0,e.font=M.string,Ot(n.footer,j),e.restore(),G+=H.width,{width:G,height:W}}function Oz(n,t){let{y:e,height:i}=t;return e<i/2?"top":e>n.height-i/2?"bottom":"center"}function Ez(n,t,e,i){let{x:o,width:s}=i,m=e.caretSize+e.caretPadding;if(n==="left"&&o+s+m>t.width||n==="right"&&o-s-m<0)return!0}function Tz(n,t,e,i){let{x:o,width:s}=e,{width:m,chartArea:{left:f,right:v}}=n,y="center";return i==="center"?y=o<=(f+v)/2?"left":"right":o<=s/2?y="left":o>=m-s/2&&(y="right"),Ez(y,n,t,e)&&(y="center"),y}function zv(n,t,e){let i=e.yAlign||t.yAlign||Oz(n,e);return{xAlign:e.xAlign||t.xAlign||Tz(n,t,e,i),yAlign:i}}function Iz(n,t){let{x:e,width:i}=n;return t==="right"?e-=i:t==="center"&&(e-=i/2),e}function Az(n,t,e){let{y:i,height:o}=n;return t==="top"?i+=e:t==="bottom"?i-=o+e:i-=o/2,i}function Uv(n,t,e,i){let{caretSize:o,caretPadding:s,cornerRadius:m}=n,{xAlign:f,yAlign:v}=e,y=o+s,{topLeft:M,topRight:I,bottomLeft:B,bottomRight:N}=ur(m),H=Iz(t,f),W=Az(t,v,y);return v==="center"?f==="left"?H+=y:f==="right"&&(H-=y):f==="left"?H-=Math.max(M,B)+o:f==="right"&&(H+=Math.max(I,N)+o),{x:hn(H,0,i.width-t.width),y:hn(W,0,i.height-t.height)}}function Td(n,t,e){let i=Dn(e.padding);return t==="center"?n.x+n.width/2:t==="right"?n.x+n.width-i.right:n.x+i.left}function jv(n){return ao([],Eo(n))}function Dz(n,t,e){return ko(n,{tooltip:t,tooltipItems:e,type:"tooltip"})}function Hv(n,t){let e=t&&t.dataset&&t.dataset.tooltip&&t.dataset.tooltip.callbacks;return e?n.override(e):n}var bb={beforeTitle:oo,title(n){if(n.length>0){let t=n[0],e=t.chart.data.labels,i=e?e.length:0;if(this&&this.options&&this.options.mode==="dataset")return t.dataset.label||"";if(t.label)return t.label;if(i>0&&t.dataIndex<i)return e[t.dataIndex]}return""},afterTitle:oo,beforeBody:oo,beforeLabel:oo,label(n){if(this&&this.options&&this.options.mode==="dataset")return n.label+": "+n.formattedValue||n.formattedValue;let t=n.dataset.label||"";t&&(t+=": ");let e=n.formattedValue;return et(e)||(t+=e),t},labelColor(n){let e=n.chart.getDatasetMeta(n.datasetIndex).controller.getStyle(n.dataIndex);return{borderColor:e.borderColor,backgroundColor:e.backgroundColor,borderWidth:e.borderWidth,borderDash:e.borderDash,borderDashOffset:e.borderDashOffset,borderRadius:0}},labelTextColor(){return this.options.bodyColor},labelPointStyle(n){let e=n.chart.getDatasetMeta(n.datasetIndex).controller.getStyle(n.dataIndex);return{pointStyle:e.pointStyle,rotation:e.rotation}},afterLabel:oo,afterBody:oo,beforeFooter:oo,footer:oo,afterFooter:oo};function ei(n,t,e,i){let o=n[t].call(e,i);return typeof o>"u"?bb[t].call(e,i):o}var Wv=(()=>{class n extends Li{static positioners=hl;constructor(e){super(),this.opacity=0,this._active=[],this._eventPosition=void 0,this._size=void 0,this._cachedAnimations=void 0,this._tooltipItems=[],this.$animations=void 0,this.$context=void 0,this.chart=e.chart,this.options=e.options,this.dataPoints=void 0,this.title=void 0,this.beforeBody=void 0,this.body=void 0,this.afterBody=void 0,this.footer=void 0,this.xAlign=void 0,this.yAlign=void 0,this.x=void 0,this.y=void 0,this.height=void 0,this.width=void 0,this.caretX=void 0,this.caretY=void 0,this.labelColors=void 0,this.labelPointStyles=void 0,this.labelTextColors=void 0}initialize(e){this.options=e,this._cachedAnimations=void 0,this.$context=void 0}_resolveAnimations(){let e=this._cachedAnimations;if(e)return e;let i=this.chart,o=this.options.setContext(this.getContext()),s=o.enabled&&i.options.animation&&o.animations,m=new Rd(this.chart,s);return s._cacheable&&(this._cachedAnimations=Object.freeze(m)),m}getContext(){return this.$context||(this.$context=Dz(this.chart.getContext(),this,this._tooltipItems))}getTitle(e,i){let{callbacks:o}=i,s=ei(o,"beforeTitle",this,e),m=ei(o,"title",this,e),f=ei(o,"afterTitle",this,e),v=[];return v=ao(v,Eo(s)),v=ao(v,Eo(m)),v=ao(v,Eo(f)),v}getBeforeBody(e,i){return jv(ei(i.callbacks,"beforeBody",this,e))}getBody(e,i){let{callbacks:o}=i,s=[];return Ot(e,m=>{let f={before:[],lines:[],after:[]},v=Hv(o,m);ao(f.before,Eo(ei(v,"beforeLabel",this,m))),ao(f.lines,ei(v,"label",this,m)),ao(f.after,Eo(ei(v,"afterLabel",this,m))),s.push(f)}),s}getAfterBody(e,i){return jv(ei(i.callbacks,"afterBody",this,e))}getFooter(e,i){let{callbacks:o}=i,s=ei(o,"beforeFooter",this,e),m=ei(o,"footer",this,e),f=ei(o,"afterFooter",this,e),v=[];return v=ao(v,Eo(s)),v=ao(v,Eo(m)),v=ao(v,Eo(f)),v}_createItems(e){let i=this._active,o=this.chart.data,s=[],m=[],f=[],v=[],y,M;for(y=0,M=i.length;y<M;++y)v.push(kz(this.chart,i[y]));return e.filter&&(v=v.filter((I,B,N)=>e.filter(I,B,N,o))),e.itemSort&&(v=v.sort((I,B)=>e.itemSort(I,B,o))),Ot(v,I=>{let B=Hv(e.callbacks,I);s.push(ei(B,"labelColor",this,I)),m.push(ei(B,"labelPointStyle",this,I)),f.push(ei(B,"labelTextColor",this,I))}),this.labelColors=s,this.labelPointStyles=m,this.labelTextColors=f,this.dataPoints=v,v}update(e,i){let o=this.options.setContext(this.getContext()),s=this._active,m,f=[];if(!s.length)this.opacity!==0&&(m={opacity:0});else{let v=hl[o.position].call(this,s,this._eventPosition);f=this._createItems(o),this.title=this.getTitle(f,o),this.beforeBody=this.getBeforeBody(f,o),this.body=this.getBody(f,o),this.afterBody=this.getAfterBody(f,o),this.footer=this.getFooter(f,o);let y=this._size=Fv(this,o),M=Object.assign({},v,y),I=zv(this.chart,o,M),B=Uv(o,M,I,this.chart);this.xAlign=I.xAlign,this.yAlign=I.yAlign,m={opacity:1,x:B.x,y:B.y,width:y.width,height:y.height,caretX:v.x,caretY:v.y}}this._tooltipItems=f,this.$context=void 0,m&&this._resolveAnimations().update(this,m),e&&o.external&&o.external.call(this,{chart:this.chart,tooltip:this,replay:i})}drawCaret(e,i,o,s){let m=this.getCaretPosition(e,o,s);i.lineTo(m.x1,m.y1),i.lineTo(m.x2,m.y2),i.lineTo(m.x3,m.y3)}getCaretPosition(e,i,o){let{xAlign:s,yAlign:m}=this,{caretSize:f,cornerRadius:v}=o,{topLeft:y,topRight:M,bottomLeft:I,bottomRight:B}=ur(v),{x:N,y:H}=e,{width:W,height:G}=i,Z,Q,j,Y,U,K;return m==="center"?(U=H+G/2,s==="left"?(Z=N,Q=Z-f,Y=U+f,K=U-f):(Z=N+W,Q=Z+f,Y=U-f,K=U+f),j=Z):(s==="left"?Q=N+Math.max(y,I)+f:s==="right"?Q=N+W-Math.max(M,B)-f:Q=this.caretX,m==="top"?(Y=H,U=Y-f,Z=Q-f,j=Q+f):(Y=H+G,U=Y+f,Z=Q+f,j=Q-f),K=Y),{x1:Z,x2:Q,x3:j,y1:Y,y2:U,y3:K}}drawTitle(e,i,o){let s=this.title,m=s.length,f,v,y;if(m){let M=Kr(o.rtl,this.x,this.width);for(e.x=Td(this,o.titleAlign,o),i.textAlign=M.textAlign(o.titleAlign),i.textBaseline="middle",f=mn(o.titleFont),v=o.titleSpacing,i.fillStyle=o.titleColor,i.font=f.string,y=0;y<m;++y)i.fillText(s[y],M.x(e.x),e.y+f.lineHeight/2),e.y+=f.lineHeight+v,y+1===m&&(e.y+=o.titleMarginBottom-v)}}_drawColorBox(e,i,o,s,m){let f=this.labelColors[o],v=this.labelPointStyles[o],{boxHeight:y,boxWidth:M}=m,I=mn(m.bodyFont),B=Td(this,"left",m),N=s.x(B),H=y<I.lineHeight?(I.lineHeight-y)/2:0,W=i.y+H;if(m.usePointStyle){let G={radius:Math.min(M,y)/2,pointStyle:v.pointStyle,rotation:v.rotation,borderWidth:1},Z=s.leftForLtr(N,M)+M/2,Q=W+y/2;e.strokeStyle=m.multiKeyBackground,e.fillStyle=m.multiKeyBackground,bd(e,G,Z,Q),e.strokeStyle=f.borderColor,e.fillStyle=f.backgroundColor,bd(e,G,Z,Q)}else{e.lineWidth=tt(f.borderWidth)?Math.max(...Object.values(f.borderWidth)):f.borderWidth||1,e.strokeStyle=f.borderColor,e.setLineDash(f.borderDash||[]),e.lineDashOffset=f.borderDashOffset||0;let G=s.leftForLtr(N,M),Z=s.leftForLtr(s.xPlus(N,1),M-2),Q=ur(f.borderRadius);Object.values(Q).some(j=>j!==0)?(e.beginPath(),e.fillStyle=m.multiKeyBackground,Qa(e,{x:G,y:W,w:M,h:y,radius:Q}),e.fill(),e.stroke(),e.fillStyle=f.backgroundColor,e.beginPath(),Qa(e,{x:Z,y:W+1,w:M-2,h:y-2,radius:Q}),e.fill()):(e.fillStyle=m.multiKeyBackground,e.fillRect(G,W,M,y),e.strokeRect(G,W,M,y),e.fillStyle=f.backgroundColor,e.fillRect(Z,W+1,M-2,y-2))}e.fillStyle=this.labelTextColors[o]}drawBody(e,i,o){let{body:s}=this,{bodySpacing:m,bodyAlign:f,displayColors:v,boxHeight:y,boxWidth:M,boxPadding:I}=o,B=mn(o.bodyFont),N=B.lineHeight,H=0,W=Kr(o.rtl,this.x,this.width),G=function(xe){i.fillText(xe,W.x(e.x+H),e.y+N/2),e.y+=N+m},Z=W.textAlign(f),Q,j,Y,U,K,J,ge;for(i.textAlign=f,i.textBaseline="middle",i.font=B.string,e.x=Td(this,Z,o),i.fillStyle=o.bodyColor,Ot(this.beforeBody,G),H=v&&Z!=="right"?f==="center"?M/2+I:M+2+I:0,U=0,J=s.length;U<J;++U){for(Q=s[U],j=this.labelTextColors[U],i.fillStyle=j,Ot(Q.before,G),Y=Q.lines,v&&Y.length&&(this._drawColorBox(i,e,U,W,o),N=Math.max(B.lineHeight,y)),K=0,ge=Y.length;K<ge;++K)G(Y[K]),N=B.lineHeight;Ot(Q.after,G)}H=0,N=B.lineHeight,Ot(this.afterBody,G),e.y-=m}drawFooter(e,i,o){let s=this.footer,m=s.length,f,v;if(m){let y=Kr(o.rtl,this.x,this.width);for(e.x=Td(this,o.footerAlign,o),e.y+=o.footerMarginTop,i.textAlign=y.textAlign(o.footerAlign),i.textBaseline="middle",f=mn(o.footerFont),i.fillStyle=o.footerColor,i.font=f.string,v=0;v<m;++v)i.fillText(s[v],y.x(e.x),e.y+f.lineHeight/2),e.y+=f.lineHeight+o.footerSpacing}}drawBackground(e,i,o,s){let{xAlign:m,yAlign:f}=this,{x:v,y}=e,{width:M,height:I}=o,{topLeft:B,topRight:N,bottomLeft:H,bottomRight:W}=ur(s.cornerRadius);i.fillStyle=s.backgroundColor,i.strokeStyle=s.borderColor,i.lineWidth=s.borderWidth,i.beginPath(),i.moveTo(v+B,y),f==="top"&&this.drawCaret(e,i,o,s),i.lineTo(v+M-N,y),i.quadraticCurveTo(v+M,y,v+M,y+N),f==="center"&&m==="right"&&this.drawCaret(e,i,o,s),i.lineTo(v+M,y+I-W),i.quadraticCurveTo(v+M,y+I,v+M-W,y+I),f==="bottom"&&this.drawCaret(e,i,o,s),i.lineTo(v+H,y+I),i.quadraticCurveTo(v,y+I,v,y+I-H),f==="center"&&m==="left"&&this.drawCaret(e,i,o,s),i.lineTo(v,y+B),i.quadraticCurveTo(v,y,v+B,y),i.closePath(),i.fill(),s.borderWidth>0&&i.stroke()}_updateAnimationTarget(e){let i=this.chart,o=this.$animations,s=o&&o.x,m=o&&o.y;if(s||m){let f=hl[e.position].call(this,this._active,this._eventPosition);if(!f)return;let v=this._size=Fv(this,e),y=Object.assign({},f,this._size),M=zv(i,e,y),I=Uv(e,y,M,i);(s._to!==I.x||m._to!==I.y)&&(this.xAlign=M.xAlign,this.yAlign=M.yAlign,this.width=v.width,this.height=v.height,this.caretX=f.x,this.caretY=f.y,this._resolveAnimations().update(this,I))}}_willRender(){return!!this.opacity}draw(e){let i=this.options.setContext(this.getContext()),o=this.opacity;if(!o)return;this._updateAnimationTarget(i);let s={width:this.width,height:this.height},m={x:this.x,y:this.y};o=Math.abs(o)<.001?0:o;let f=Dn(i.padding),v=this.title.length||this.beforeBody.length||this.body.length||this.afterBody.length||this.footer.length;
vendor: 5,449 bytes, line 106
106i.enabled&&v&&(e.save(),e.globalAlpha=o,this.drawBackground(m,e,s,i),Bm(e,i.textDirection),m.y+=f.top,this.drawTitle(m,e,i),this.drawBody(m,e,i),this.drawFooter(m,e,i),Nm(e,i.textDirection),e.restore())}getActiveElements(){return this._active||[]}setActiveElements(e,i){let o=this._active,s=e.map(({datasetIndex:v,index:y})=>{let M=this.chart.getDatasetMeta(v);if(!M)throw new Error("Cannot find a dataset at index "+v);return{datasetIndex:v,element:M.data[y],index:y}}),m=!al(o,s),f=this._positionChanged(s,i);(m||f)&&(this._active=s,this._eventPosition=i,this._ignoreReplayEvents=!0,this.update(!0))}handleEvent(e,i,o=!0){if(i&&this._ignoreReplayEvents)return!1;this._ignoreReplayEvents=!1;let s=this.options,m=this._active||[],f=this._getActiveElements(e,m,i,o),v=this._positionChanged(f,e),y=i||!al(f,m)||v;return y&&(this._active=f,(s.enabled||s.external)&&(this._eventPosition={x:e.x,y:e.y},this.update(!0,i))),y}_getActiveElements(e,i,o,s){let m=this.options;if(e.type==="mouseout")return[];if(!s)return i.filter(v=>this.chart.data.datasets[v.datasetIndex]&&this.chart.getDatasetMeta(v.datasetIndex).controller.getParsed(v.index)!==void 0);let f=this.chart.getElementsAtEventForMode(e,m.mode,m,o);return m.reverse&&f.reverse(),f}_positionChanged(e,i){let{caretX:o,caretY:s,options:m}=this,f=hl[m.position].call(this,e,i);return f!==!1&&(o!==f.x||s!==f.y)}}return n})(),Rz={id:"tooltip",_element:Wv,positioners:hl,afterInit(n,t,e){e&&(n.tooltip=new Wv({chart:n,options:e}))},beforeUpdate(n,t,e){n.tooltip&&n.tooltip.initialize(e)},reset(n,t,e){n.tooltip&&n.tooltip.initialize(e)},afterDraw(n){let t=n.tooltip;if(t&&t._willRender()){let e={tooltip:t};if(n.notifyPlugins("beforeTooltipDraw",Ye(ze({},e),{cancelable:!0}))===!1)return;t.draw(n.ctx),n.notifyPlugins("afterTooltipDraw",e)}},afterEvent(n,t){if(n.tooltip){let e=t.replay;n.tooltip.handleEvent(t.event,e,t.inChartArea)&&(t.changed=!0)}},defaults:{enabled:!0,external:null,position:"average",backgroundColor:"rgba(0,0,0,0.8)",titleColor:"#fff",titleFont:{weight:"bold"},titleSpacing:2,titleMarginBottom:6,titleAlign:"left",bodyColor:"#fff",bodySpacing:2,bodyFont:{},bodyAlign:"left",footerColor:"#fff",footerSpacing:2,footerMarginTop:6,footerFont:{weight:"bold"},footerAlign:"left",padding:6,caretPadding:2,caretSize:5,cornerRadius:6,boxHeight:(n,t)=>t.bodyFont.size,boxWidth:(n,t)=>t.bodyFont.size,multiKeyBackground:"#fff",displayColors:!0,boxPadding:0,borderColor:"rgba(0,0,0,0)",borderWidth:0,animation:{duration:400,easing:"easeOutQuart"},animations:{numbers:{type:"number",properties:["x","y","width","height","caretX","caretY"]},opacity:{easing:"linear",duration:200}},callbacks:bb},defaultRoutes:{bodyFont:"font",footerFont:"font",titleFont:"font"},descriptors:{_scriptable:n=>n!=="filter"&&n!=="itemSort"&&n!=="external",_indexable:!1,callbacks:{_scriptable:!1,_indexable:!1},animation:{_fallback:!1},animations:{_fallback:"animation"}},additionalOptionScopes:["interaction"]},Bz=Object.freeze({__proto__:null,Colors:$F,Decimation:QF,Filler:_z,Legend:wz,SubTitle:Sz,Title:Mz,Tooltip:Rz}),Nz=(n,t,e,i)=>(typeof t=="string"?(e=n.push(t)-1,i.unshift({index:e,label:t})):isNaN(t)&&(e=null),e);function Vz(n,t,e,i){let o=n.indexOf(t);if(o===-1)return Nz(n,t,e,i);let s=n.lastIndexOf(t);return o!==s?e:o}var Lz=(n,t)=>n===null?null:hn(Math.round(n),0,t);function Gv(n){let t=this.getLabels();return n>=0&&n<t.length?t[n]:n}var Fz=(()=>{class n extends ta{static id="category";static defaults={ticks:{callback:Gv}};constructor(e){super(e),this._startValue=void 0,this._valueRange=0,this._addedLabels=[]}init(e){let i=this._addedLabels;if(i.length){let o=this.getLabels();for(let{index:s,label:m}of i)o[s]===m&&o.splice(s,1);this._addedLabels=[]}super.init(e)}parse(e,i){if(et(e))return null;let o=this.getLabels();return i=isFinite(i)&&o[i]===e?i:Vz(o,e,qe(i,e),this._addedLabels),Lz(i,o.length-1)}determineDataLimits(){let{minDefined:e,maxDefined:i}=this.getUserBounds(),{min:o,max:s}=this.getMinMax(!0);this.options.bounds==="ticks"&&(e||(o=0),i||(s=this.getLabels().length-1)),this.min=o,this.max=s}buildTicks(){let e=this.min,i=this.max,o=this.options.offset,s=[],m=this.getLabels();m=e===0&&i===m.length-1?m:m.slice(e,i+1),this._valueRange=Math.max(m.length-(o?0:1),1),this._startValue=this.min-(o?.5:0);for(let f=e;f<=i;f++)s.push({value:f});return s}getLabelForValue(e){return Gv.call(this,e)}configure(){super.configure(),this.isHorizontal()||(this._reversePixels=!this._reversePixels)}getPixelForValue(e){return typeof e!="number"&&(e=this.parse(e)),e===null?NaN:this.getPixelForDecimal((e-this._startValue)/this._valueRange)}getPixelForTick(e){let i=this.ticks;return e<0||e>i.length-1?null:this.getPixelForValue(i[e].value)}getValueForPixel(e){return Math.round(this._startValue+this.getDecimalForPixel(e)*this._valueRange)}getBasePixel(){return this.bottom}}return n})();function zz(n,t){let e=[],{bounds:o,step:s,min:m,max:f,precision:v,count:y,maxTicks:M,maxDigits:I,includeBounds:B}=n,N=s||1,H=M-1,{min:W,max:G}=t,Z=!et(m),Q=!et(f),j=!et(y),Y=(G-W)/(I+1),U=um((G-W)/H/N)*N,K,J,ge,xe;if(U<1e-14&&!Z&&!Q)return[{value:W},{value:G}];xe=Math.ceil(G/U)-Math.floor(W/U),xe>H&&(U=um(xe*U/H/N)*N),et(v)||(K=Math.pow(10,v),U=Math.ceil(U*K)/K),o==="ticks"?(J=Math.floor(W/U)*U,ge=Math.ceil(G/U)*U):(J=W,ge=G),Z&&Q&&s&&Ix((f-m)/s,U/1e3)?(xe=Math.round(Math.min((f-m)/U,M)),U=(f-m)/xe,J=m,ge=f):j?(J=Z?m:J,ge=Q?f:ge,xe=y-1,U=(ge-J)/xe):(xe=(ge-J)/U,Ya(xe,Math.round(xe),U/1e3)?xe=M
vendor: 4,971 bytes, line 106
106ath.round(xe):xe=Math.ceil(xe));let he=Math.max(hm(U),hm(J));K=Math.pow(10,et(v)?he:v),J=Math.round(J*K)/K,ge=Math.round(ge*K)/K;let Ce=0;for(Z&&(B&&J!==m?(e.push({value:m}),J<m&&Ce++,Ya(Math.round((J+Ce*U)*K)/K,m,qv(m,Y,n))&&Ce++):J<m&&Ce++);Ce<xe;++Ce){let De=Math.round((J+Ce*U)*K)/K;if(Q&&De>f)break;e.push({value:De})}return Q&&B&&ge!==f?e.length&&Ya(e[e.length-1].value,f,qv(f,Y,n))?e[e.length-1].value=f:e.push({value:f}):(!Q||ge===f)&&e.push({value:ge}),e}function qv(n,t,{horizontal:e,minRotation:i}){let o=Si(i),s=(e?Math.sin(o):Math.cos(o))||.001,m=.75*t*(""+n).length;return Math.min(t/s,m)}var ts=class extends ta{constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._endValue=void 0,this._valueRange=0}parse(t,e){return et(t)||(typeof t=="number"||t instanceof Number)&&!isFinite(+t)?null:+t}handleTickRangeOptions(){let{beginAtZero:t}=this.options,{minDefined:e,maxDefined:i}=this.getUserBounds(),{min:o,max:s}=this,m=v=>o=e?o:v,f=v=>s=i?s:v;if(t){let v=Vi(o),y=Vi(s);v<0&&y<0?f(0):v>0&&y>0&&m(0)}if(o===s){let v=s===0?1:Math.abs(s*.05);f(s+v),t||m(o-v)}this.min=o,this.max=s}getTickLimit(){let t=this.options.ticks,{maxTicksLimit:e,stepSize:i}=t,o;return i?(o=Math.ceil(this.max/i)-Math.floor(this.min/i)+1,o>1e3&&(console.warn(`scales.${this.id}.ticks.stepSize: ${i} would result generating up to ${o} ticks. Limiting to 1000.`),o=1e3)):(o=this.computeTickLimit(),e=e||11),e&&(o=Math.min(e,o)),o}computeTickLimit(){return Number.POSITIVE_INFINITY}buildTicks(){let t=this.options,e=t.ticks,i=this.getTickLimit();i=Math.max(2,i);let o={maxTicks:i,bounds:t.bounds,min:t.min,max:t.max,precision:e.precision,step:e.stepSize,count:e.count,maxDigits:this._maxDigits(),horizontal:this.isHorizontal(),minRotation:e.minRotation||0,includeBounds:e.includeBounds!==!1},s=this._range||this,m=zz(o,s);return t.bounds==="ticks"&&fm(m,this,"value"),t.reverse?(m.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),m}configure(){let t=this.ticks,e=this.min,i=this.max;if(super.configure(),this.options.offset&&t.length){let o=(i-e)/Math.max(t.length-1,1)/2;e-=o,i+=o}this._startValue=e,this._endValue=i,this._valueRange=i-e}getLabelForValue(t){return Za(t,this.chart.options.locale,this.options.ticks.format)}},mg=class extends ts{static id="linear";static defaults={ticks:{callback:sl.formatters.numeric}};determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=Gt(t)?t:0,this.max=Gt(e)?e:1,this.handleTickRangeOptions()}computeTickLimit(){let t=this.isHorizontal(),e=t?this.width:this.height,i=Si(this.options.ticks.minRotation),o=(t?Math.sin(i):Math.cos(i))||.001,s=this._resolveTickFontOptions(0);return Math.ceil(e/Math.min(40,s.lineHeight/o))}getPixelForValue(t){return t===null?NaN:this.getPixelForDecimal((t-this._startValue)/this._valueRange)}getValueForPixel(t){return this._startValue+this.getDecimalForPixel(t)*this._valueRange}},vl=n=>Math.floor(Mo(n)),ea=(n,t)=>Math.pow(10,vl(n)+t);function $v(n){return n/Math.pow(10,vl(n))===1}function Yv(n,t,e){let i=Math.pow(10,e),o=Math.floor(n/i);return Math.ceil(t/i)-o}function Uz(n,t){let e=t-n,i=vl(e);for(;Yv(n,t,i)>10;)i++;for(;Yv(n,t,i)<10;)i--;return Math.min(i,vl(n))}function jz(n,{min:t,max:e}){t=Jn(n.min,t);let i=[],o=vl(t),s=Uz(t,e),m=s<0?Math.pow(10,Math.abs(s)):1,f=Math.pow(10,s),v=o>s?Math.pow(10,o):0,y=Math.round((t-v)*m)/m,M=Math.floor((t-v)/f/10)*f*10,I=Math.floor((y-M)/Math.pow(10,s)),B=Jn(n.min,Math.round((v+M+I*Math.pow(10,s))*m)/m);for(;B<e;)i.push({value:B,major:$v(B),significand:I}),I>=10?I=I<15?15:20:I++,I>=20&&(s++,I=2,m=s>=0?1:m),B=Math.round((v+M+I*Math.pow(10,s))*m)/m;let N=Jn(n.max,B);return i.push({value:N,major:$v(N),significand:I}),i}var gg=class extends ta{static id="logarithmic";static defaults={ticks:{callback:sl.formatters.logarithmic,major:{enabled:!0}}};constructor(t){super(t),this.start=void 0,this.end=void 0,this._startValue=void 0,this._valueRange=0}parse(t,e){let i=ts.prototype.parse.apply(this,[t,e]);if(i===0){this._zero=!0;return}return Gt(i)&&i>0?i:null}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!0);this.min=Gt(t)?Math.max(0,t):null,this.max=Gt(e)?Math.max(0,e):null,this.options.beginAtZero&&(this._zero=!0),this._zero&&this.min!==this._suggestedMin&&!Gt(this._userMin)&&(this.min=t===ea(this.min,0)?ea(this.min,-1):ea(this.min,0)),this.handleTickRangeOptions()}handleTickRangeOptions(){let{minDefined:t,maxDefined:e}=this.getUserBounds(),i=this.min,o=this.max,s=f=>i=t?i:f,m=f=>o=e?o:f;i===o&&(i<=0?(s(1),m(10)):(s(ea(i,-1)),m(ea(o,1)))),i<=0&&s(ea(o,-1)),o<=0&&m(ea(i,1)),this.min=i,this.max=o}buildTicks(){let t=this.options,e={min:this._userMin,max:this._userMax},i=jz(e,this);return t.bounds==="ticks"&&fm(i,this,"value"),t.reverse?(i.reverse(),this.start=this.max,this.end=this.min):(this.start=this.min,this.end=this.max),i}getLabelForValue(t){return t===void 0?"0":Za(t,this.chart.options.locale,this.options.ticks.format)}configure(){let t=this.min;
vendor: 5,860 bytes, line 106
106super.configure(),this._startValue=Mo(t),this._valueRange=Mo(this.max)-Mo(t)}getPixelForValue(t){return(t===void 0||t===0)&&(t=this.min),t===null||isNaN(t)?NaN:this.getPixelForDecimal(t===this.min?0:(Mo(t)-this._startValue)/this._valueRange)}getValueForPixel(t){let e=this.getDecimalForPixel(t);return Math.pow(10,this._startValue+e*this._valueRange)}};function ug(n){let t=n.ticks;if(t.display&&n.display){let e=Dn(t.backdropPadding);return qe(t.font&&t.font.size,Rt.font.size)+e.height}return 0}function Hz(n,t,e){return e=Ft(e)?e:[e],{w:zx(n,t.string,e),h:e.length*t.lineHeight}}function Xv(n,t,e,i,o){return n===i||n===o?{start:t-e/2,end:t+e/2}:n<i||n>o?{start:t-e,end:t}:{start:t,end:t+e}}function Wz(n){let t={l:n.left+n._padding.left,r:n.right-n._padding.right,t:n.top+n._padding.top,b:n.bottom-n._padding.bottom},e=Object.assign({},t),i=[],o=[],s=n._pointLabels.length,m=n.options.pointLabels,f=m.centerPointLabels?mt/s:0;for(let v=0;v<s;v++){let y=m.setContext(n.getPointLabelContext(v));o[v]=y.padding;let M=n.getPointPosition(v,n.drawingArea+o[v],f),I=mn(y.font),B=Hz(n.ctx,I,n._pointLabels[v]);i[v]=B;let N=In(n.getIndexAngle(v)+f),H=Math.round(hd(N)),W=Xv(H,M.x,B.w,0,180),G=Xv(H,M.y,B.h,90,270);Gz(e,t,N,W,G)}n.setCenterPoint(t.l-e.l,e.r-t.r,t.t-e.t,e.b-t.b),n._pointLabelItems=Yz(n,i,o)}function Gz(n,t,e,i,o){let s=Math.abs(Math.sin(e)),m=Math.abs(Math.cos(e)),f=0,v=0;i.start<t.l?(f=(t.l-i.start)/s,n.l=Math.min(n.l,t.l-f)):i.end>t.r&&(f=(i.end-t.r)/s,n.r=Math.max(n.r,t.r+f)),o.start<t.t?(v=(t.t-o.start)/m,n.t=Math.min(n.t,t.t-v)):o.end>t.b&&(v=(o.end-t.b)/m,n.b=Math.max(n.b,t.b+v))}function qz(n,t,e){let i=n.drawingArea,{extra:o,additionalAngle:s,padding:m,size:f}=e,v=n.getPointPosition(t,i+o+m,s),y=Math.round(hd(In(v.angle+tn))),M=Qz(v.y,f.h,y),I=Xz(y),B=Zz(v.x,f.w,I);return{visible:!0,x:v.x,y:M,textAlign:I,left:B,top:M,right:B+f.w,bottom:M+f.h}}function $z(n,t){if(!t)return!0;let{left:e,top:i,right:o,bottom:s}=n;return!(io({x:e,y:i},t)||io({x:e,y:s},t)||io({x:o,y:i},t)||io({x:o,y:s},t))}function Yz(n,t,e){let i=[],o=n._pointLabels.length,s=n.options,{centerPointLabels:m,display:f}=s.pointLabels,v={extra:ug(s)/2,additionalAngle:m?mt/o:0},y;for(let M=0;M<o;M++){v.padding=e[M],v.size=t[M];let I=qz(n,M,v);i.push(I),f==="auto"&&(I.visible=$z(I,y),I.visible&&(y=I))}return i}function Xz(n){return n===0||n===180?"center":n<180?"left":"right"}function Zz(n,t,e){return e==="right"?n-=t:e==="center"&&(n-=t/2),n}function Qz(n,t,e){return e===90||e===270?n-=t/2:(e>270||e<90)&&(n-=t),n}function Kz(n,t,e){let{left:i,top:o,right:s,bottom:m}=e,{backdropColor:f}=t;if(!et(f)){let v=ur(t.borderRadius),y=Dn(t.backdropPadding);n.fillStyle=f;let M=i-y.left,I=o-y.top,B=s-i+y.width,N=m-o+y.height;Object.values(v).some(H=>H!==0)?(n.beginPath(),Qa(n,{x:M,y:I,w:B,h:N,radius:v}),n.fill()):n.fillRect(M,I,B,N)}}function Jz(n,t){let{ctx:e,options:{pointLabels:i}}=n;for(let o=t-1;o>=0;o--){let s=n._pointLabelItems[o];if(!s.visible)continue;let m=i.setContext(n.getPointLabelContext(o));Kz(e,m,s);let f=mn(m.font),{x:v,y,textAlign:M}=s;gr(e,n._pointLabels[o],v,y+f.lineHeight/2,f,{color:m.color,textAlign:M,textBaseline:"middle"})}}function yb(n,t,e,i){let{ctx:o}=n;if(e)o.arc(n.xCenter,n.yCenter,t,0,zt);else{let s=n.getPointPosition(0,t);o.moveTo(s.x,s.y);for(let m=1;m<i;m++)s=n.getPointPosition(m,t),o.lineTo(s.x,s.y)}}function eU(n,t,e,i,o){let s=n.ctx,m=t.circular,{color:f,lineWidth:v}=t;!m&&!i||!f||!v||e<0||(s.save(),s.strokeStyle=f,s.lineWidth=v,s.setLineDash(o.dash||[]),s.lineDashOffset=o.dashOffset,s.beginPath(),yb(n,e,m,i),s.closePath(),s.stroke(),s.restore())}function tU(n,t,e){return ko(n,{label:e,index:t,type:"pointLabel"})}var fg=class extends ts{static id="radialLinear";static defaults={display:!0,animate:!0,position:"chartArea",angleLines:{display:!0,lineWidth:1,borderDash:[],borderDashOffset:0},grid:{circular:!1},startAngle:0,ticks:{showLabelBackdrop:!0,callback:sl.formatters.numeric},pointLabels:{backdropColor:void 0,backdropPadding:2,display:!0,font:{size:10},callback(t){return t},padding:5,centerPointLabels:!1}};static defaultRoutes={"angleLines.color":"borderColor","pointLabels.color":"color","ticks.color":"color"};static descriptors={angleLines:{_fallback:"grid"}};constructor(t){super(t),this.xCenter=void 0,this.yCenter=void 0,this.drawingArea=void 0,this._pointLabels=[],this._pointLabelItems=[]}setDimensions(){let t=this._padding=Dn(ug(this.options)/2),e=this.width=this.maxWidth-t.width,i=this.height=this.maxHeight-t.height;this.xCenter=Math.floor(this.left+e/2+t.left),this.yCenter=Math.floor(this.top+i/2+t.top),this.drawingArea=Math.floor(Math.min(e,i)/2)}determineDataLimits(){let{min:t,max:e}=this.getMinMax(!1);this.min=Gt(t)&&!isNaN(t)?t:0,this.max=Gt(e)&&!isNaN(e)?e:0,this.handleTickRangeOptions()}computeTickLimit(){return Math.ceil(this.drawingArea/ug(this.options))}generateTickLabels(t){ts.prototype.generateTickLabels.call(this,t),this._pointLabels=this.getLabels().map((e,i)=>{let o=Dt(this.options.pointLabels.callback,[e,i],this);return o||o===0?o:""}).filter((e,i)=>this.chart.getDataVisibility(i))}fit(){let t=this.options;t.display&&t.pointLabels.display?Wz(this):this.setCenterPoint(0,0,0,0)}setCenterPoint(t,e,i,o){this.xCenter+=Math.floor((t-e)/2),this.yCenter+=Math.floor((i-o)/2),this.drawingArea-=Math.min(this.drawingArea/2,Math.max(t,e,i,o))}getIndexAngle(t){let e=zt/(this._pointLabels.length||1),i=this.options.startAngle||0;return In(t*e+Si(i))}getDistanceFromCenterForValue(t){if(et(t))return NaN;let e=this.drawingArea/(this.max-this.min);return this.options.reverse?(this.max-t)*e:(t-this.min)*e}getValueForDistanceFromCenter(t){if(et(t))return NaN;let e=t/(this.drawingArea/(this.max-this.min));return this.options.reverse?this.max-e:this.min+e}getPointLabelContext(t){let e=this._pointLabels||[];if(t>=0&&t<e.length){let i=e[t];return tU(this.getContext(),t,i)}}
vendor: 4,255 bytes, line 106
106getPointPosition(t,e,i=0){let o=this.getIndexAngle(t)-tn+i;return{x:Math.cos(o)*e+this.xCenter,y:Math.sin(o)*e+this.yCenter,angle:o}}getPointPositionForValue(t,e){return this.getPointPosition(t,this.getDistanceFromCenterForValue(e))}getBasePosition(t){return this.getPointPositionForValue(t||0,this.getBaseValue())}getPointLabelPosition(t){let{left:e,top:i,right:o,bottom:s}=this._pointLabelItems[t];return{left:e,top:i,right:o,bottom:s}}drawBackground(){let{backgroundColor:t,grid:{circular:e}}=this.options;if(t){let i=this.ctx;i.save(),i.beginPath(),yb(this,this.getDistanceFromCenterForValue(this._endValue),e,this._pointLabels.length),i.closePath(),i.fillStyle=t,i.fill(),i.restore()}}drawGrid(){let t=this.ctx,e=this.options,{angleLines:i,grid:o,border:s}=e,m=this._pointLabels.length,f,v,y;if(e.pointLabels.display&&Jz(this,m),o.display&&this.ticks.forEach((M,I)=>{if(I!==0||I===0&&this.min<0){v=this.getDistanceFromCenterForValue(M.value);let B=this.getContext(I),N=o.setContext(B),H=s.setContext(B);eU(this,N,v,m,H)}}),i.display){for(t.save(),f=m-1;f>=0;f--){let M=i.setContext(this.getPointLabelContext(f)),{color:I,lineWidth:B}=M;!B||!I||(t.lineWidth=B,t.strokeStyle=I,t.setLineDash(M.borderDash),t.lineDashOffset=M.borderDashOffset,v=this.getDistanceFromCenterForValue(e.reverse?this.min:this.max),y=this.getPointPosition(f,v),t.beginPath(),t.moveTo(this.xCenter,this.yCenter),t.lineTo(y.x,y.y),t.stroke())}t.restore()}}drawBorder(){}drawLabels(){let t=this.ctx,e=this.options,i=e.ticks;if(!i.display)return;let o=this.getIndexAngle(0),s,m;t.save(),t.translate(this.xCenter,this.yCenter),t.rotate(o),t.textAlign="center",t.textBaseline="middle",this.ticks.forEach((f,v)=>{if(v===0&&this.min>=0&&!e.reverse)return;let y=i.setContext(this.getContext(v)),M=mn(y.font);if(s=this.getDistanceFromCenterForValue(this.ticks[v].value),y.showLabelBackdrop){t.font=M.string,m=t.measureText(f.label).width,t.fillStyle=y.backdropColor;let I=Dn(y.backdropPadding);t.fillRect(-m/2-I.left,-s-M.size/2-I.top,m+I.width,M.size+I.height)}gr(t,f.label,0,-s,M,{color:y.color,strokeColor:y.textStrokeColor,strokeWidth:y.textStrokeWidth})}),t.restore()}drawTitle(){}},jd={millisecond:{common:!0,size:1,steps:1e3},second:{common:!0,size:1e3,steps:60},minute:{common:!0,size:6e4,steps:60},hour:{common:!0,size:36e5,steps:24},day:{common:!0,size:864e5,steps:30},week:{common:!1,size:6048e5,steps:4},month:{common:!0,size:2628e6,steps:12},quarter:{common:!1,size:7884e6,steps:4},year:{common:!0,size:3154e7}},ti=Object.keys(jd);function Zv(n,t){return n-t}function Qv(n,t){if(et(t))return null;let e=n._adapter,{parser:i,round:o,isoWeekday:s}=n._parseOpts,m=t;return typeof i=="function"&&(m=i(m)),Gt(m)||(m=typeof i=="string"?e.parse(m,i):e.parse(m)),m===null?null:(o&&(m=o==="week"&&(Qr(s)||s===!0)?e.startOf(m,"isoWeek",s):e.startOf(m,o)),+m)}function Kv(n,t,e,i){let o=ti.length;for(let s=ti.indexOf(n);s<o-1;++s){let m=jd[ti[s]],f=m.steps?m.steps:Number.MAX_SAFE_INTEGER;if(m.common&&Math.ceil((e-t)/(f*m.size))<=i)return ti[s]}return ti[o-1]}function nU(n,t,e,i,o){for(let s=ti.length-1;s>=ti.indexOf(e);s--){let m=ti[s];if(jd[m].common&&n._adapter.diff(o,i,m)>=t-1)return m}return ti[e?ti.indexOf(e):0]}function iU(n){for(let t=ti.indexOf(n)+1,e=ti.length;t<e;++t)if(jd[ti[t]].common)return ti[t]}function Jv(n,t,e){if(!e)n[t]=!0;else if(e.length){let{lo:i,hi:o}=_d(e,t),s=e[i]>=t?e[i]:e[o];n[s]=!0}}function oU(n,t,e,i){let o=n._adapter,s=+o.startOf(t[0].value,i),m=t[t.length-1].value,f,v;for(f=s;f<=m;f=+o.add(f,1,i))v=e[f],v>=0&&(t[v].major=!0);return t}function eb(n,t,e){let i=[],o={},s=t.length,m,f;for(m=0;m<s;++m)f=t[m],o[f]=m,i.push({value:f,major:!1});return s===0||!e?i:oU(n,i,o,e)}var hg=(()=>{class n extends ta{static id="time";static defaults={bounds:"data",adapters:{},time:{parser:!1,unit:!1,round:!1,isoWeekday:!1,minUnit:"millisecond",displayFormats:{}},ticks:{source:"auto",callback:!1,major:{enabled:!1}}};constructor(e){super(e),this._cache={data:[],labels:[],all:[]},this._unit="day",this._majorUnit=void 0,this._offsets={},this._normalized=!1,this._parseOpts=void 0}init(e,i={}){let o=e.time||(e.time={}),s=this._adapter=new fL._date(e.adapters.date);s.init(i),qa(o.displayFormats,s.formats()),this._parseOpts={parser:o.parser,round:o.roun
vendor: 6,598 bytes, line 106
106d,isoWeekday:o.isoWeekday},super.init(e),this._normalized=i.normalized}parse(e,i){return e===void 0?null:Qv(this,e)}beforeLayout(){super.beforeLayout(),this._cache={data:[],labels:[],all:[]}}determineDataLimits(){let e=this.options,i=this._adapter,o=e.time.unit||"day",{min:s,max:m,minDefined:f,maxDefined:v}=this.getUserBounds();function y(M){!f&&!isNaN(M.min)&&(s=Math.min(s,M.min)),!v&&!isNaN(M.max)&&(m=Math.max(m,M.max))}(!f||!v)&&(y(this._getLabelBounds()),(e.bounds!=="ticks"||e.ticks.source!=="labels")&&y(this.getMinMax(!1))),s=Gt(s)&&!isNaN(s)?s:+i.startOf(Date.now(),o),m=Gt(m)&&!isNaN(m)?m:+i.endOf(Date.now(),o)+1,this.min=Math.min(s,m-1),this.max=Math.max(s+1,m)}_getLabelBounds(){let e=this.getLabelTimestamps(),i=Number.POSITIVE_INFINITY,o=Number.NEGATIVE_INFINITY;return e.length&&(i=e[0],o=e[e.length-1]),{min:i,max:o}}buildTicks(){let e=this.options,i=e.time,o=e.ticks,s=o.source==="labels"?this.getLabelTimestamps():this._generate();e.bounds==="ticks"&&s.length&&(this.min=this._userMin||s[0],this.max=this._userMax||s[s.length-1]);let m=this.min,f=this.max,v=Rx(s,m,f);return this._unit=i.unit||(o.autoSkip?Kv(i.minUnit,this.min,this.max,this._getLabelCapacity(m)):nU(this,v.length,i.minUnit,this.min,this.max)),this._majorUnit=!o.major.enabled||this._unit==="year"?void 0:iU(this._unit),this.initOffsets(s),e.reverse&&v.reverse(),eb(this,v,this._majorUnit)}afterAutoSkip(){this.options.offsetAfterAutoskip&&this.initOffsets(this.ticks.map(e=>+e.value))}initOffsets(e=[]){let i=0,o=0,s,m;this.options.offset&&e.length&&(s=this.getDecimalForValue(e[0]),e.length===1?i=1-s:i=(this.getDecimalForValue(e[1])-s)/2,m=this.getDecimalForValue(e[e.length-1]),e.length===1?o=m:o=(m-this.getDecimalForValue(e[e.length-2]))/2);let f=e.length<3?.5:.25;i=hn(i,0,f),o=hn(o,0,f),this._offsets={start:i,end:o,factor:1/(i+1+o)}}_generate(){let e=this._adapter,i=this.min,o=this.max,s=this.options,m=s.time,f=m.unit||Kv(m.minUnit,i,o,this._getLabelCapacity(i)),v=qe(s.ticks.stepSize,1),y=f==="week"?m.isoWeekday:!1,M=Qr(y)||y===!0,I={},B=i,N,H;if(M&&(B=+e.startOf(B,"isoWeek",y)),B=+e.startOf(B,M?"day":f),e.diff(o,i,f)>1e5*v)throw new Error(i+" and "+o+" are too far apart with stepSize of "+v+" "+f);let W=s.ticks.source==="data"&&this.getDataTimestamps();for(N=B,H=0;N<o;N=+e.add(N,v,f),H++)Jv(I,N,W);return(N===o||s.bounds==="ticks"||H===1)&&Jv(I,N,W),Object.keys(I).sort(Zv).map(G=>+G)}getLabelForValue(e){let i=this._adapter,o=this.options.time;return o.tooltipFormat?i.format(e,o.tooltipFormat):i.format(e,o.displayFormats.datetime)}format(e,i){let s=this.options.time.displayFormats,m=this._unit,f=i||s[m];return this._adapter.format(e,f)}_tickFormatFunction(e,i,o,s){let m=this.options,f=m.ticks.callback;if(f)return Dt(f,[e,i,o],this);let v=m.time.displayFormats,y=this._unit,M=this._majorUnit,I=y&&v[y],B=M&&v[M],N=o[i],H=M&&B&&N&&N.major;return this._adapter.format(e,s||(H?B:I))}generateTickLabels(e){let i,o,s;for(i=0,o=e.length;i<o;++i)s=e[i],s.label=this._tickFormatFunction(s.value,i,e)}getDecimalForValue(e){return e===null?NaN:(e-this.min)/(this.max-this.min)}getPixelForValue(e){let i=this._offsets,o=this.getDecimalForValue(e);return this.getPixelForDecimal((i.start+o)*i.factor)}getValueForPixel(e){let i=this._offsets,o=this.getDecimalForPixel(e)/i.factor-i.end;return this.min+o*(this.max-this.min)}_getLabelSize(e){let i=this.options.ticks,o=this.ctx.measureText(e).width,s=Si(this.isHorizontal()?i.maxRotation:i.minRotation),m=Math.cos(s),f=Math.sin(s),v=this._resolveTickFontOptions(0).size;return{w:o*m+v*f,h:o*f+v*m}}_getLabelCapacity(e){let i=this.options.time,o=i.displayFormats,s=o[i.unit]||o.millisecond,m=this._tickFormatFunction(e,0,eb(this,[e],this._majorUnit),s),f=this._getLabelSize(m),v=Math.floor(this.isHorizontal()?this.width/f.w:this.height/f.h)-1;return v>0?v:1}getDataTimestamps(){let e=this._cache.data||[],i,o;if(e.length)return e;let s=this.getMatchingVisibleMetas();if(this._normalized&&s.length)return this._cache.data=s[0].controller.getAllParsedValues(this);for(i=0,o=s.length;i<o;++i)e=e.concat(s[i].controller.getAllParsedValues(this));return this._cache.data=this.normalize(e)}getLabelTimestamps(){let e=this._cache.labels||[],i,o;if(e.length)return e;let s=this.getLabels();for(i=0,o=s.length;i<o;++i)e.push(Qv(this,s[i]));return this._cache.labels=this._normalized?e:this.normalize(e)}normalize(e){return vm(e.sort(Zv))}}return n})();function Id(n,t,e){let i=0,o=n.length-1,s,m,f,v;e?(t>=n[i].pos&&t<=n[o].pos&&({lo:i,hi:o}=no(n,"pos",t)),{pos:s,time:f}=n[i],{pos:m,time:v}=n[o]):(t>=n[i].time&&t<=n[o].time&&({lo:i,hi:o}=no(n,"time",t)),{time:s,pos:f}=n[i],{time:m,pos:v}=n[o]);let y=m-s;return y?f+(v-f)*(t-s)/y:f}var _g=class extends hg{static id="timeseries";static defaults=hg.defaults;constructor(t){super(t),this._table=[],this._minPos=void 0,this._tableRange=void 0}initOffsets(){let t=this._getTimestampsForTable(),e=this._table=this.buildLookupTable(t);this._minPos=Id(e,this.min),this._tableRange=Id(e,this.max)-this._minPos,super.initOffsets(t)}buildLookupTable(t){let{min:e,max:i}=this,o=[],s=[],m,f,v,y,M;for(m=0,f=t.length;m<f;++m)y=t[m],y>=e&&y<=i&&o.push(y);if(o.length<2)return[{time:e,pos:0},{time:i,pos:1}];for(m=0,f=o.length;m<f;++m)M=o[m+1],v=o[m-1],y=o[m],Math.round((M+v)/2)!==y&&s.push({time:y,pos:m/(f-1)});return s}_generate(){let t=this.min,e=this.max,i=super.getDataTimestamps();return(!i.includes(t)||!i.length)&&i.splice(0,0,t),(!i.includes(e)||i.length===1)&&i.push(e),i.sort((o,s)=>o-s)}_getTimestampsForTable(){let t=this._cache.all||[];if(t.length)return t;let e=this.getDataTimestamps(),i=this.getLabelTimestamps();return e.length&&i.length?t=this.normalize(e.concat(i)):t=e.length?e:i,t=this._cache.all=t,t}getDecimalForValue(t){return(Id(this._table,t)-this._minPos)/this._tableRange}getValueForPixel(t){let e=this._offsets,i=this.getDecimalForPixel(t)/e.factor-e.end;return Id(this._table,i*this._tableRange+this._minPos,!0)}},rU=Object.freeze({__proto__:null,CategoryScale:Fz,LinearScale:mg,LogarithmicScale:gg,RadialLinearScale:fg,TimeScale:hg,TimeSeriesScale:_g}),vg=[uL,zF,Bz,rU];var aU=typeof global=="object"&&global&&global.Object===Object&&global,Hd=aU;var sU=typeof self=="object"&&self&&self.Object===Object&&self,lU=Hd||sU||Function("return this")(),ki=lU;var cU=ki.Symbol,is=cU;var Cb=Object.prototype,dU=Cb.hasOwnProperty,pU=Cb.toString,yl=is?is.toStringTag:void 0;function mU(n){var t=dU.call(n,yl),e=n[yl];try{n[yl]=void 0;var i=!0}catch{}var o=pU.call(n);return i&&(t?n[yl]=e:delete n[yl]),o}var wb=mU;var gU=Object.prototype,uU=gU.toString;function fU(n){return uU.call(n)}var Pb=fU;
vendor: 4,886 bytes, line 106
106var hU="[object Null]",_U="[object Undefined]",Mb=is?is.toStringTag:void 0;function xU(n){return n==null?n===void 0?_U:hU:Mb&&Mb in Object(n)?wb(n):Pb(n)}var xr=xU;function vU(n){return n!=null&&typeof n=="object"}var lo=vU;var bU=Array.isArray,Cl=bU;function yU(n){var t=typeof n;return n!=null&&(t=="object"||t=="function")}var ni=yU;function CU(n){return n}var Wd=CU;var wU="[object AsyncFunction]",PU="[object Function]",MU="[object GeneratorFunction]",SU="[object Proxy]";function kU(n){if(!ni(n))return!1;var t=xr(n);return t==PU||t==MU||t==wU||t==SU}var os=kU;var OU=ki["__core-js_shared__"],Gd=OU;var Sb=function(){var n=/[^.]+$/.exec(Gd&&Gd.keys&&Gd.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}();function EU(n){return!!Sb&&Sb in n}var kb=EU;var TU=Function.prototype,IU=TU.toString;function AU(n){if(n!=null){try{return IU.call(n)}catch{}try{return n+""}catch{}}return""}var Ob=AU;var DU=/[\\^$.*+?()[\]{}|]/g,RU=/^\[object .+?Constructor\]$/,BU=Function.prototype,NU=Object.prototype,VU=BU.toString,LU=NU.hasOwnProperty,FU=RegExp("^"+VU.call(LU).replace(DU,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function zU(n){if(!ni(n)||kb(n))return!1;var t=os(n)?FU:RU;return t.test(Ob(n))}var Eb=zU;function UU(n,t){return n?.[t]}var Tb=UU;function jU(n,t){var e=Tb(n,t);return Eb(e)?e:void 0}var rs=jU;var Ib=Object.create,HU=function(){function n(){}return function(t){if(!ni(t))return{};if(Ib)return Ib(t);n.prototype=t;var e=new n;return n.prototype=void 0,e}}(),Ab=HU;function WU(n,t,e){switch(e.length){case 0:return n.call(t);case 1:return n.call(t,e[0]);case 2:return n.call(t,e[0],e[1]);case 3:return n.call(t,e[0],e[1],e[2])}return n.apply(t,e)}var Db=WU;function GU(n,t){var e=-1,i=n.length;for(t||(t=Array(i));++e<i;)t[e]=n[e];return t}var Rb=GU;var qU=800,$U=16,YU=Date.now;function XU(n){var t=0,e=0;return function(){var i=YU(),o=$U-(i-e);if(e=i,o>0){if(++t>=qU)return arguments[0]}else t=0;return n.apply(void 0,arguments)}}var Bb=XU;function ZU(n){return function(){return n}}var Nb=ZU;var QU=function(){try{var n=rs(Object,"defineProperty");return n({},"",{}),n}catch{}}(),as=QU;var KU=as?function(n,t){return as(n,"toString",{configurable:!0,enumerable:!1,value:Nb(t),writable:!0})}:Wd,Vb=KU;var JU=Bb(Vb),Lb=JU;var ej=9007199254740991,tj=/^(?:0|[1-9]\d*)$/;function nj(n,t){var e=typeof n;return t=t??ej,!!t&&(e=="number"||e!="symbol"&&tj.test(n))&&n>-1&&n%1==0&&n<t}var qd=nj;function ij(n,t,e){t=="__proto__"&&as?as(n,t,{configurable:!0,enumerable:!0,value:e,writable:!0}):n[t]=e}var ss=ij;function oj(n,t){return n===t||n!==n&&t!==t}var vr=oj;var rj=Object.prototype,aj=rj.hasOwnProperty;function sj(n,t,e){var i=n[t];(!(aj.call(n,t)&&vr(i,e))||e===void 0&&!(t in n))&&ss(n,t,e)}var Fb=sj;function lj(n,t,e,i){var o=!e;e||(e={});for(var s=-1,m=t.length;++s<m;){var f=t[s],v=i?i(e[f],n[f],f,e,n):void 0;v===void 0&&(v=n[f]),o?ss(e,f,v):Fb(e,f,v)}return e}var zb=lj;var Ub=Math.max;function cj(n,t,e){return t=Ub(t===void 0?n.length-1:t,0),function(){for(var i=arguments,o=-1,s=Ub(i.length-t,0),m=Array(s);++o<s;)m[o]=i[t+o];o=-1;for(var f=Array(t+1);++o<t;)f[o]=i[o];return f[t]=e(m),Db(n,this,f)}}var jb=cj;function dj(n,t){return Lb(jb(n,t,Wd),n+"")}var Hb=dj;var pj=9007199254740991;function mj(n){return typeof n=="number"&&n>-1&&n%1==0&&n<=pj}var $d=mj;function gj(n){return n!=null&&$d(n.length)&&!os(n)}var ls=gj;function uj(n,t,e){if(!ni(e))return!1;var i=typeof t;return(i=="number"?ls(e)&&qd(t,e.length):i=="string"&&t in e)?vr(e[t],n):!1}var Wb=uj;function fj(n){return Hb(function(t,e){var i=-1,o=e.length,s=o>1?e[o-1]:void 0,m=o>2?e[2]:void 0;for(s=n.length>3&&typeof s=="function"?(o--,s):void 0,m&&Wb(e[0],e[1],m)&&(s=o<3?void 0:s,o=1),t=Object(t);++i<o;){var f=e[i];f&&n(t,f,i,s)}return t})}var Gb=fj;var hj=Object.prototype;function _j(n){var t=n&&n.constructor,e=typeof t=="function"&&t.prototype||hj;return n===e}var Yd=_j;function xj(n,t){for(var e=-1,i=Array(n);++e<n;)i[e]=t(e);return i}var qb=xj;var vj="[object Arguments]";function bj(n){return lo(n)&&xr(n)==vj}var bg=bj;var $b=Object.prototype,yj=$b.hasOwnProperty,Cj=$b.propertyIsEnumerable,wj=bg(function(){return arguments}())?bg:function(n){return lo(n)&&yj.call(n,"callee")&&!Cj.call(n,"callee")},wl=wj;function Pj(){return!1}var Yb=Pj;var Qb=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Xb=Qb&&typeof module=="object"&&module&&!module.nodeType&&module,Mj=Xb&&Xb.exports===Qb,Zb=Mj?ki.Buffer:void 0,Sj=Zb?Zb.isBuffer:void 0,kj=Sj||Yb,Xd=kj;var Oj="[object Arguments]",Ej="[object Array]",Tj="[object Boolean]",Ij="[object Date]",Aj="[object Error]",Dj="[object Function]",Rj="[object Map]",Bj="[object Number]",Nj="[object Object]",Vj="[object RegExp]",Lj="[object Set]",Fj="[object String]",zj="[object WeakMap]",Uj="[object ArrayBuffer]",jj="[object DataView]",Hj="[object Float32Array]",Wj="[object Float64Array
106]",Gj="[object Int8Array]",qj="[object Int16Array]",$j="[object Int32Array]",Yj="[object Uint8Array]",Xj="[object Uint8ClampedArray]",Zj="[object Uint16Array]",Qj="[object Uint32Array]",jt={};jt[Hj]=jt[Wj]=jt[Gj]=jt[qj]=jt[$j]=jt[Yj]=jt[Xj]=jt[Zj]=jt[Qj]=!0;jt[Oj]=jt[Ej]=jt[Uj]=jt[Tj]=jt[jj]=jt[Ij]=jt[Aj]=jt[Dj]=jt[Rj]=jt[Bj]=jt[Nj]=jt[Vj]=jt[Lj]=jt[Fj]=jt[zj]=!1;function Kj(n){return lo(n)&&$d(n.length)&&!!jt[xr(n)]}var Kb=Kj;function Jj(n){return function(t){return n(t)}}var Jb=Jj;var e2=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Pl=e2&&typeof module=="object"&&module&&!module.nodeType&&module,eH=Pl&&Pl.exports===e2,yg=eH&&Hd.process,tH=function(){try{var n=Pl&&Pl.require&&Pl.require("util").types;return n||yg&&yg.binding&&yg.binding("util")}catch{}}(),Cg=tH;var t2=Cg&&Cg.isTypedArray,nH=t2?Jb(t2):Kb,Zd=nH;var iH=Object.prototype,oH=iH.hasOwnProperty;function rH(n,t){var e=Cl(n),i=!e&&wl(n),o=!e&&!i&&Xd(n),s=!e&&!i&&!o&&Zd(n),m=e||i||o||s,f=m?qb(n.length,String):[],v=f.length;for(var y in n)(t||oH.call(n,y))&&!(m&&(y=="length"||o&&(y=="offset"||y=="parent")||s&&(y=="buffer"||y=="byteLength"||y=="byteOffset")||qd(y,v)))&&f.push(y);return f}var n2=rH;function aH(n,t){return function(e){return n(t(e))}}var i2=aH;function sH(n){var t=[];if(n!=null)for(var e in Object(n))t.push(e);return t}var o2=sH;var lH=Object.prototype,cH=lH.hasOwnProperty;function dH(n){if(!ni(n))return o2(n);var t=Yd(n),e=[];for(var i in n)i=="constructor"&&(t||!cH.call(n,i))||e.push(i);return e}var r2=dH;function pH(n){return ls(n)?n2(n,!0):r2(n)}var Qd=pH;var mH=rs(Object,"create"),To=mH;function gH(){this.__data__=To?To(null):{},this.size=0}var a2=gH;function uH(n){var t=this.has(n)&&delete this.__data__[n];return this.size-=t?1:0,t}var s2=uH;var fH="__lodash_hash_undefined__",hH=Object.prototype,_H=hH.hasOwnProperty;function xH(n){var t=this.__data__;if(To){var e=t[n];return e===fH?void 0:e}return _H.call(t,n)?t[n]:void 0}var l2=xH;var vH=Object.prototype,bH=vH.hasOwnProperty;function yH(n){var t=this.__data__;return To?t[n]!==void 0:bH.call(t,n)}var c2=yH;var CH="__lodash_hash_undefined__";function wH(n,t){var e=this.__data__;return this.size+=this.has(n)?0:1,e[n]=To&&t===void 0?CH:t,this}var d2=wH;function cs(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var i=n[t];this.set(i[0],i[1])}}cs.prototype.clear=a2;cs.prototype.delete=s2;cs.prototype.get=l2;cs.prototype.has=c2;cs.prototype.set=d2;var wg=cs;function PH(){this.__data__=[],this.size=0}var p2=PH;function MH(n,t){for(var e=n.length;e--;)if(vr(n[e][0],t))return e;return-1}var br=MH;var SH=Array.prototype,kH=SH.splice;function OH(n){var t=this.__data__,e=br(t,n);if(e<0)return!1;var i=t.length-1;return e==i?t.pop():kH.call(t,e,1),--this.size,!0}var m2=OH;function EH(n){var t=this.__data__,e=br(t,n);return e<0?void 0:t[e][1]}var g2=EH;function TH(n){return br(this.__data__,n)>-1}var u2=TH;function IH(n,t){var e=this.__data__,i=br(e,n);return i<0?(++this.size,e.push([n,t])):e[i][1]=t,this}var f2=IH;function ds(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var i=n[t];this.set(i[0],i[1])}}ds.prototype.clear=p2;ds.prototype.delete=m2;ds.prototype.get=g2;ds.prototype.has=u2;ds.prototype.set=f2;var yr=ds;var AH=rs(ki,"Map"),Kd=AH;function DH(){this.size=0,this.__data__={hash:new wg,map:new(Kd||yr),string:new wg}}var h2=DH;function RH(n){var t=typeof n;return t=="string"||t=="number"||t=="symbol"||t=="boolean"?n!=="__proto__":n===null}var _2=RH;function BH(n,t){var e=n.__data__;return _2(t)?e[typeof t=="string"?"string":"hash"]:e.map}var Cr=BH;function NH(n){var t=Cr(this,n).delete(n);return this.size-=t?1:0,t}var x2=NH;function VH(n){return Cr(this,n).get(n)}var v2=VH;function LH(n){return Cr(this,n).has(n)}var b2=LH;function FH(n,t){var e=Cr(this,n),i=e.size;return e.set(n,t),this.size+=e.size==i?0:1,this}var y2=FH;function ps(n){var t=-1,e=n==null?0:n.length;for(this.clear();++t<e;){var i=n[t];this.set(i[0],i[1])}}ps.prototype.clear=h2;ps.prototype.delete=x2;ps.prototype.get=v2;ps.prototype.has=b2;ps.prototype.set=y2;var C2=ps;var zH=i2(Object.getPrototypeOf,Object),Jd=zH;var UH="[object Object]",jH=Function.prototype,HH=Object.prototype,w2=jH.toString,WH=HH.hasOwnProperty,GH=w2.call(Object);function qH(n){if(!lo(n)||xr(n)!=UH)return!1;var t=Jd(n);if(t===null)return!0;var e=WH.call(t,"constructor")&&t.constructor;return typeof e=="function"&&e instanceof e&&w2.call(e)==GH}var P2=qH;function $H(){this.__data__=new yr,this.size=0}var M2=$H;function YH(n){var t=this.__data__,e=t.delete(n);return this.size=t.size,e}var S2=YH;function XH(n){return this.__data__.get(n)}var k2=XH;function ZH(n){return this.__data__.has(n)}var O2=ZH;var QH=200;function KH(n,t){var e=this.__data__;if(e instanceof yr){var i=e.__data__;if(!Kd||i.length<QH-1)return i.push([n,t]),this.size=++e.size,this;e=this.__data__=new C2(i)}return e.set(n,t),this.size=e.size,this}var E2=KH;function ms(n){var t=this.__data__=new yr(n);this.size=t.size}ms.prototype.clear=M2;ms.prototype.delete=S2;ms.prototype.get=k2;ms.prototype.has=O2;ms.prototype.set=E2;var T2=ms;var R2=typeof exports=="object"&&exports&&!exports.nodeType&&exports,I2=R2&&typeof module=="object"&&module&&!module.nodeType&&module,JH=I2&&I2.exports===R2,A2=JH?ki.Buffer:void 0,D2=A2?A2.allocUnsafe:void 0;function eW(n,t){if(t)return n.slice();var e=n.length,i=D2?D2(e):new n.constructor(e);return n.copy(i),i}var B2=eW;var tW=ki.Uint8Array,Pg=tW;function nW(n){var t=new n.constructor(n.byteLength);return new Pg(t).set(new Pg(n)),t}var N2=nW;function iW(n,t){var e=t?N2(n.buffer):n.buffer;return new n.constructor(e,n.byteOffset,n.length)}var V2=iW;function oW(n){return typeof n.constructor=="function"&&!Yd(n)?Ab(Jd(n)):{}}var L2=oW;
106function rW(n){return function(t,e,i){for(var o=-1,s=Object(t),m=i(t),f=m.length;f--;){var v=m[n?f:++o];if(e(s[v],v,s)===!1)break}return t}}var F2=rW;var aW=F2(),z2=aW;function sW(n,t,e){(e!==void 0&&!vr(n[t],e)||e===void 0&&!(t in n))&&ss(n,t,e)}var Ml=sW;function lW(n){return lo(n)&&ls(n)}var U2=lW;function cW(n,t){if(!(t==="constructor"&&typeof n[t]=="function")&&t!="__proto__")return n[t]}var Sl=cW;function dW(n){return zb(n,Qd(n))}var j2=dW;function pW(n,t,e,i,o,s,m){var f=Sl(n,e),v=Sl(t,e),y=m.get(v);if(y){Ml(n,e,y);return}var M=s?s(f,v,e+"",n,t,m):void 0,I=M===void 0;if(I){var B=Cl(v),N=!B&&Xd(v),H=!B&&!N&&Zd(v);M=v,B||N||H?Cl(f)?M=f:U2(f)?M=Rb(f):N?(I=!1,M=B2(v,!0)):H?(I=!1,M=V2(v,!0)):M=[]:P2(v)||wl(v)?(M=f,wl(f)?M=j2(f):(!ni(f)||os(f))&&(M=L2(v))):I=!1}I&&(m.set(v,M),o(M,v,i,s,m),m.delete(v)),Ml(n,e,M)}var H2=pW;function W2(n,t,e,i,o){n!==t&&z2(t,function(s,m){if(o||(o=new T2),ni(s))H2(n,t,m,e,W2,i,o);else{var f=i?i(Sl(n,m),s,m+"",n,t,o):void 0;f===void 0&&(f=s),Ml(n,m,f)}},Qd)}var G2=W2;var mW=Gb(function(n,t,e){G2(n,t,e)}),Mg=mW;var gW=new jl("Configuration for ngCharts");var uW=(()=>{class n{constructor(){this.colorschemesOptions=new fn(void 0)}setColorschemesOptions(e){this.pColorschemesOptions=e,this.colorschemesOptions.next(e)}getColorschemesOptions(){return this.pColorschemesOptions}static{this.\u0275fac=function(i){return new(i||n)}}static{this.\u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})}}return n})(),q2=(()=>{class n{constructor(e,i,o,s){this.zone=i,this.themeService=o,this.type="bar",this.plugins=[],this.chartClick=new Or,this.chartHover=new Or,this.subs=[],this.themeOverrides={},s?.registerables&&ns.register(...s.registerables),s?.defaults&&Rt.set(s.defaults),this.ctx=e.nativeElement.getContext("2d"),this.subs.push(this.themeService.colorschemesOptions.pipe(Ul()).subscribe(m=>this.themeChanged(m)))}ngOnChanges(e){let i=["type"],o=Object.getOwnPropertyNames(e);if(o.some(s=>i.includes(s))||o.every(s=>e[s].isFirstChange()))this.render();else{let s=this.getChartConfiguration();this.chart&&(Object.assign(this.chart.config.data,s.data),this.chart.config.plugins&&Object.assign(this.chart.config.plugins,s.plugins),this.chart.config.options&&Object.assign(this.chart.config.options,s.options)),this.update()}}ngOnDestroy(){this.chart&&(this.chart.destroy(),this.chart=void 0),this.subs.forEach(e=>e.unsubscribe())}render(){return this.chart&&this.chart.destroy(),this.zone.runOutsideAngular(()=>this.chart=new ns(this.ctx,this.getChartConfiguration()))}update(e){this.chart&&this.zone.runOutsideAngular(()=>this.chart?.update(e))}hideDataset(e,i){this.chart&&(this.chart.getDatasetMeta(e).hidden=i,this.update())}isDatasetHidden(e){return this.chart?.getDatasetMeta(e)?.hidden}toBase64Image(){return this.chart?.toBase64Image()}themeChanged(e){this.themeOverrides=e,this.chart&&(this.chart.config.options&&Object.assign(this.chart.config.options,this.getChartOptions()),this.update())}getChartOptions(){return Mg({onHover:(e,i)=>{!this.chartHover.observed&&!this.chartHover.observers?.length||this.zone.run(()=>this.chartHover.emit({event:e,active:i}))},onClick:(e,i)=>{!this.chartClick.observed&&!this.chartClick.observers?.length||this.zone.run(()=>this.chartClick.emit({event:e,active:i}))}},this.themeOverrides,this.options,{plugins:{legend:{display:this.legend}}})}getChartConfiguration(){return{type:this.type,data:this.getChartData(),options:this.getChartOptions(),plugins:this.plugins}}getChartData(){return this.data?this.data:{labels:this.labels||[],datasets:this.datasets||[]}}static{this.\u0275fac=function(i){return new(i||n)(ae(Wl),ae(Nn),ae(uW),ae(gW,8))}}static{this.\u0275dir=Gl({type:n,selectors:[["canvas","baseChart",""]],inputs:{type:"type",legend:"legend",data:"data",options:"options",plugins:"plugins",labels:"labels",datasets:"datasets"},outputs:{chartClick:"chartClick",chartHover:"chartHover"},exportAs:["base-chart"],features:[ma]})}}return n})();function fW(n,t){if(n&1&&(r(0,"div",18),w(1,"i",19),l(2),a()),n&2){let e=h();d(2),F(" ",e.errorMessage," ")}}function hW(n,t){if(n&1&&(r(0,"div",20),w(1,"i",21),l(2),a()),n&2){let e=h();d(2),F(" Last updated: ",e.lastUpdated," ")}}function _W(n,t){n&1&&(r(0,"div",22),w(1,"div",23),r(2,"p"),l(3,"Loading analytics data..."),a()())}function xW(n,t){if(n&1){let e=L();r(0,"div",24)(1,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="overview")}),w(2,"i",26),l(3," Overview "),a(),r(4,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="revenue")}),w(5,"i",27),l(6," Revenue "),a(),r(7,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="bookings")}),w(8,"i",28),l(9," Bookings "),a(),r(10,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="courts")}),w(11,"i",29),l(12," Courts "),a(),r(13,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="players")}),w(14,"i",30),l(15," Players "),a(),r(16,"button",25),S("click",function(){k(e);let o=h();return O(o.activeTab="coaches")}
106),w(17,"i",31),l(18," Coaches "),a()()}if(n&2){let e=h();d(),te("active",e.activeTab==="overview"),d(3),te("active",e.activeTab==="revenue"),d(3),te("active",e.activeTab==="bookings"),d(3),te("active",e.activeTab==="courts"),d(3),te("active",e.activeTab==="players"),d(3),te("active",e.activeTab==="coaches")}}function vW(n,t){if(n&1&&(r(0,"tr")(1,"td"),l(2),a(),r(3,"td"),l(4),a(),r(5,"td"),l(6),_e(7,"number"),a(),r(8,"td"),l(9),a()()),n&2){let e=t.$implicit,i=h(3);d(2),R(e.typeName),d(2),R(e.bookingCount),d(2),F("\u20B1",be(7,4,e.totalDiscountGiven,"1.2-2"),""),d(3),R(i.discountAnalytics.verifiedBeneficiariesByType[e.typeName]||0)}}function bW(n,t){if(n&1&&(r(0,"div",64)(1,"h3"),w(2,"i",47),l(3," Discount Breakdown"),a(),r(4,"div",65)(5,"table")(6,"thead")(7,"tr")(8,"th"),l(9,"Discount Type"),a(),r(10,"th"),l(11,"Bookings"),a(),r(12,"th"),l(13,"Total Discount Given"),a(),r(14,"th"),l(15,"Verified Beneficiaries"),a()()(),r(16,"tbody"),A(17,vW,10,7,"tr",66),a()()()()),n&2){let e=h(2);d(17),x("ngForOf",e.discountAnalytics.byType)}}function yW(n,t){if(n&1&&w(0,"canvas",67),n&2){let e=h(2);x("data",e.revenueChartData)("options",e.revenueChartOptions)}}function CW(n,t){if(n&1&&w(0,"canvas",68),n&2){let e=h(2);x("data",e.statusPieChartData)("options",e.statusPieChartOptions)}}function wW(n,t){if(n&1&&w(0,"canvas",69),n&2){let e=h(2);x("data",e.courtUtilizationChartData)("options",e.courtUtilizationChartOptions)}}function PW(n,t){if(n&1&&w(0,"canvas",69),n&2){let e=h(2);x("data",e.bookingVolumeChartData)("options",e.bookingVolumeChartOptions)}}function MW(n,t){if(n&1&&(r(0,"div",32)(1,"div",33)(2,"div",34)(3,"div",35),w(4,"i",27),a(),r(5,"div",36)(6,"h3"),l(7,"Total Revenue"),a(),r(8,"p",37),l(9),_e(10,"number"),a()()(),r(11,"div",38)(12,"div",35),w(13,"i",28),a(),r(14,"div",36)(15,"h3"),l(16,"Total Bookings"),a(),r(17,"p",37),l(18),_e(19,"number"),a(),r(20,"div",39)(21,"div",40)(22,"span",41),l(23,"Open Play:"),a(),r(24,"span",42),l(25),_e(26,"number"),a()(),r(27,"div",40)(28,"span",41),l(29,"Court Rental:"),a(),r(30,"span",42),l(31),_e(32,"number"),a()(),r(33,"div",40)(34,"span",41),l(35,"Coaching:"),a(),r(36,"span",42),l(37),_e(38,"number"),a()()()()(),r(39,"div",43)(40,"div",35),w(41,"i",30),a(),r(42,"div",36)(43,"h3"),l(44,"Total Players"),a(),r(45,"p",37),l(46),_e(47,"number"),a()()(),r(48,"div",44)(49,"div",35),w(50,"i",45),a(),r(51,"div",36)(52,"h3"),l(53,"Avg Booking Value"),a(),r(54,"p",37),l(55),_e(56,"number"),a()()(),r(57,"div",46)(58,"div",35),w(59,"i",47),a(),r(60,"div",36)(61,"h3"),l(62,"Discounts Given"),a(),r(63,"p",37),l(64),_e(65,"number"),a(),r(66,"div",39)(67,"div",40)(68,"span",41),l(69,"Discount Bookings:"),a(),r(70,"span",42),l(71),_e(72,"number"),a()(),r(73,"div",40)(74,"span",41),l(75,"Net Revenue:"),a(),r(76,"span",42),l(77),_e(78,"number"),a()()()()()(),r(79,"div",48)(80,"div",49)(81,"h4"),l(82,"Payment Completion Rate"),a(),r(83,"p",50),l(84),_e(85,"number"),a(),r(86,"div",51),w(87,"div",52),a()(),r(88,"div",49)(89,"h4"),l(90,"Cancellation Rate"),a(),r(91,"p",50),l(92),_e(93,"number"),a(),r(94,"div",51),w(95,"div",53),a()(),r(96,"div",49)(97,"h4"),l(98,"Top Court"),a(),r(99,"p",50),l(100),a()(),r(101,"div",49)(102,"h4"),l(103,"Peak Hour"),a(),r(104,"p",50),l(105),a()()(),A(106,bW,18,1,"div",54),r(107,"div",55)(108,"div",56)(109,"h3"),w(110,"i",45),l(111," Revenue Trend"),a(),r(112,"div",57),A(113,yW,1,2,"canvas",58),a()(),r(114,"div",56)(115,"h3"),w(116,"i",59),l(117," Booking Status Distribution"),a(),r(118,"div",57),A(119,CW,1,2,"canvas",60),a()(),r(120,"div",56)(121,"h3"),w(122,"i",61),l(123," Court Utilization"),a(),r(124,"div",57),A(125,wW,1,2,"canvas",62),a()(),r(126,"div",56)(127,"h3"),w(128,"i",63),l(129," Booking Volume"),a(),r(130,"div",57),A(131,PW,1,2,"canvas",62),a()()()()),n&2){let e=h();d(9),F("\u20B1",be(10,23,e.summary==null?null:e.summary.totalRevenue,"1.2-2"),""),d(9),R(Hi(19,26,e.summary==null?null:e.summary.totalBookings)),d(7),R(Hi(26,28,e.summary==null?null:e.summary.openPlayBookings)),d(6),R(Hi(32,30,e.summary==null?null:e.summary.rentalBookings)),d(6),R(Hi(38,32,e.summary==null?null:e.summary.coachingBookings)),d(9),R(Hi(47,34,e.summary==null?null:e.summary.totalPlayers)),d(9),F("\u20B1",be(56,36,e.summary==null?null:e.summary.averageBookingValue,"1.2-2"),""),d(9),F("\u20B1",be(65,39,e.discountAnalytics.totalDiscountGiven,"1.2-2"),""),d(7),R(Hi(72,42,e.discountAnalytics.discountBookingCount)),d(6),F("\u20B1",be(78,44,e.discountAnalytics.netRevenue,"1.2-2"),""),d(7),F("",be(85,47,e.summary==null?null:e.summary.paymentCompletionRate,"1.1-1"),"%"),d(3),le("width",e.summary==null?null:e.summary.paymentCompletionRate,"%"),d(5),F("",be(93,50,e.summary==null?null:e.summary.cancellationRate,"1.1-1"),"%"),d(3),le("width",e.summary==null?null:e.summary.cancellationRate,"%"),d(5),R((e.summary==null?null:e.summary.topCourt)||"N/A"),d(5),R((e.summary==null?null:e.summary.peakBookingHour)||"N/A"),d(),x("ngIf",e.discountAnalytics.byType.length>0),d(7),x("ngIf",e.revenueChartData),d(6),x("ngIf",e.statusPieChartData),d(6),x("ngIf",e.courtUtilizationChartData),d(6),x("ngIf",e.bookingVolumeChartData)}}function SW(n,t){if(n&1&&w(0,"canvas",67),n&2){let e=h(2);x("data",e.revenueChartData)("options",e.revenueChartOptions)}}function kW(n,t){if(n&1&&(r(0,"tr")(1,"td"),l(2),a(),r(3,"td"),l(4),_e(5,"number"),a(),r(6,"td"),l(7),_e(8,"number"),a(),r(9,"td"),l(10),_e(11,"number"),a(),r(12,"td"),l(13),_e(14,"number"),a()()),n&2){let e=t.$implicit;d(2),R(e.periodLabel),d(2),F("\u20B1",be(5,5,e.totalRevenue,"1.2-2"),""),d(3),F("\u20B1",be(8,8,e.openPlayRevenue,"1.2-2"),""),d(3),F("\u20B1",be(11,11,e.rentalRevenue,"1.2-2"),""),d(3),F("\u20B1",be(14,14,e.coachingRevenue,"1.2-2"),"")}}function OW(n,t){if(n&1&&(r(0,"tr")(1,"td"),l(2),a(),r(3,"td"),l(4),a(),r(5,"td"),l(6),_e(7,"number"),a(),r(8,"td"),l(9),a()()),n&2){let e=t.$implicit,i=h(2);d(2),R(e.typeName),d(2),R(e.bookingCount),d(2),F("\u20B1",be(7,4,e.totalDiscountGiven,"1.2-2"),""),d(3),R(i.discountAnalytics.verifiedBeneficiariesByType[e.typeName]||0)}}function EW(n,t){if(n&1){let e=L();r(0,"div",32)(1,"div",70)(2,"h2"),w(3,"i",27),l(4," Revenue Analysis"),a(),r(5,"button",71),S("click",function(){k(e);let o=h();return O(o.exportToCSV("revenue"))}),w(6,"i",72),l(7," Export CSV "),a()(),r(8,"div",73)(9,"h3"),l(10),a(),r(11,"div",74),A(12,SW,1,2,"canvas",58),a()(),r(13,"div",65)(14,"h3"),l(15,"Revenue Breakdown"),a(),r(16,"table")(17,"thead")(18,"tr")(19,"th"),l(20,"Period"),a(),r(21,"th"),l(22,"Total Revenue"),a(),r(23,"th"),l(24,"Open Play"),a(),r(25,"th"),l(26,"Court Rental"),a(),r(27,"th"),l(28,"Coaching"),a()()(),r(29,"tbody"),A(30,kW,15,17,"tr",66),a()()(),r(31,"div",64)(32,"h3"),w(33,"i",47),l(34," Discount Analytics"),a(),r(35,"div",75)(36,"div",76)(37,"div",77),l(38,"Total Discount Given"),a(),r(39,"div",37),l(40),_e(41,"number"),a()(),r(42,"div",76)(43,"div",77),l(44,"Discount Bookings"),a(),r(45,"div",37),l(46),a()(),r(47,"div",76)(48,"div",77),l(49,"Avg Discount / Booking"),a(),r(50,"div",37),l(51),_e(52,"number"),a()(),r(53,"div",76)(54,"div",77),l(55,"Gross Revenue"),a(),r(56,"div",37),l(57),_e(58,"number"),a()(),r(59,"div",76)(60,"div",77),l(61,"Net Revenue (After Discounts)"),a(),r(62,"div",37),l(63),_e(64,"number"),a()()(),r(65,"div",65)(66,"table")(67,"thead")(68,"tr")(69,"th"),l(70,"Discount Type"),a(),r(71,"th"),l(72,"Bookings"),a(),r(73,"th"),l(74,"Total Discount Given"),a(),r(75,"th"),l(76,"Verified Beneficiaries"),a()()(),r(77,"tbody"),A(78,OW,10,7,"tr",66),a()()()()()}if(n&2){let e=h();d(10),F("Revenue Trend (",e.periodType,")"),d(2),x("ngIf",e.revenueChartData),d(18),x("ngForOf",e.revenueData),d(10),F("\u20B1",be(41,9,e.discountAnalytics.totalDiscountGiven,"1.2-2"),""),d(6),R(e.discountAnalytics.discountBookingCount),d(5),F("\u20B1",be(52,12,e.discountAnalytics.averageDiscountPerBooking,"1.2-2"),""),d(6),F("\u20B1",be(58,15,e.discountAnalytics.grossRevenue,"1.2-2"),""),d(6),F("\u20B1",be(64,18,e.discountAnalytics.netRevenue,"1.2-2"),""),d(15),x("ngForOf",e.discountAnalytics.byType)}}function TW(n,t){if(n&1&&w(0,"canvas",69),n&2){let e=h(2);x("data",e.bookingVolumeChartData)("options",e.bookingVolumeChartOptions)}}function IW(n,t){if(n&1&&w(0,"canvas",68),n&2){let e=h(2);x("data",e.statusPieChartData)("options",e.statusPieChartOptions)}}function AW(n,t){if(n&1&&(r(0,"div",81)(1,"span"),l(2),a(),r(3,"strong"),l(4),a()()),n&2){let e=t.$implicit;d(2),F("",e.key,":"),d(2),R(e.value)}}function DW(n,t){if(n&1){let e=L();r(0,"div",32)(1,"div",70)(2,"h2"),w(3,"i",28),l(4," Booking Analysis"),a(),r(5,"button",71),S("click",function(){k(e);let o=h();return O(o.exportToCSV("bookings"))}),w(6,"i",72),l(7," Export CSV "),a()(),r(8,"div",73)(9,"h3"),l(10),a(),r(11,"div",74),A(12,TW,1,2,"canvas",62),a()(),r(13,"div",78)(14,"div",79)(15,"h4"),l(16,"Status Distribution"),a(),r(17,"div",57),A(18,IW,1,2,"canvas",60),a()(),r(19,"div",79)(20,"h4"),l(21,"Cancellation Metrics"),a(),r(22,"div",80)(23,"div",81)(24,"span"),l(25,"Total Cancellations:"),a(),r(26,"strong"),l(27),a()(),r(28,"div",81)(29,"span"),l(30,"Cancellation Rate:"),a(),r(31,"strong"),l(32),_e(33,"number"),a()(),A(34,AW,5,2,"div",82),_e(35,"keyvalue"),a()(),r(36,"div",79)(37,"h4"),l(38,"Payment Metrics"),a(),r(39,"div",80)(40,"div",81)(41,"span"),l(42,"Total Bookings:"),a(),r(43,"strong"),l(44),a()(),r(45,"div",81)(46,"span"),l(47,"Paid Bookings:"),a(),r(48,"
106strong"),l(49),a()(),r(50,"div",81)(51,"span"),l(52,"Pending Payments:"),a(),r(53,"strong"),l(54),a()(),r(55,"div",81)(56,"span"),l(57,"Completion Rate:"),a(),r(58,"strong"),l(59),_e(60,"number"),a()(),r(61,"div",81)(62,"span"),l(63,"Avg Payment Time:"),a(),r(64,"strong"),l(65),_e(66,"number"),a()()()()()()}if(n&2){let e=h();d(10),F("Booking Volume (",e.periodType,")"),d(2),x("ngIf",e.bookingVolumeChartData),d(6),x("ngIf",e.statusPieChartData),d(9),R(e.cancellationMetrics==null?null:e.cancellationMetrics.totalCancellations),d(5),F("",be(33,11,e.cancellationMetrics==null?null:e.cancellationMetrics.cancellationRate,"1.1-1"),"%"),d(2),x("ngForOf",Hi(35,14,e.cancellationMetrics==null?null:e.cancellationMetrics.cancellationsByType)),d(10),R(e.paymentMetrics==null?null:e.paymentMetrics.totalBookings),d(5),R(e.paymentMetrics==null?null:e.paymentMetrics.paidBookings),d(5),R(e.paymentMetrics==null?null:e.paymentMetrics.pendingPayments),d(5),F("",be(60,16,e.paymentMetrics==null?null:e.paymentMetrics.paymentCompletionRate,"1.1-1"),"%"),d(6),F("",be(66,19,e.paymentMetrics==null?null:e.paymentMetrics.averagePaymentTime,"1.1-1")," hrs")}}function RW(n,t){if(n&1&&w(0,"canvas",69),n&2){let e=h(2);x("data",e.courtUtilizationChartData)("options",e.courtUtilizationChartOptions)}}function BW(n,t){if(n&1&&(r(0,"tr")(1,"td")(2,"strong"),l(3),a()(),r(4,"td"),l(5),_e(6,"number"),a(),r(7,"td"),l(8),_e(9,"number"),a(),r(10,"td")(11,"span",83),l(12),_e(13,"number"),a()(),r(14,"td"),l(15),_e(16,"number"),a()()),n&2){let e=t.$implicit;d(3),R(e.courtName),d(2),R(be(6,11,e.totalHoursBooked,"1.1-1")),d(3),R(be(9,14,e.totalHoursAvailable,"1.0-0")),d(3),te("high",e.utilizationRate>=70)("medium",e.utilizationRate>=40&&e.utilizationRate<70)("low",e.utilizationRate<40),d(),F(" ",be(13,17,e.utilizationRate,"1.1-1"),"% "),d(3),F("\u20B1",be(16,20,e.revenueGenerated,"1.2-2"),"")}}function NW(n,t){if(n&1){let e=L();r(0,"div",32)(1,"div",70)(2,"h2"),w(3,"i",29),l(4," Court Utilization"),a(),r(5,"button",71),S("click",function(){k(e);let o=h();return O(o.exportToCSV("courts"))}),w(6,"i",72),l(7," Export CSV "),a()(),r(8,"div",73)(9,"h3"),l(10,"Court Utilization Rates"),a(),r(11,"div",74),A(12,RW,1,2,"canvas",62),a()(),r(13,"div",65)(14,"h3"),l(15,"Court Performance Details"),a(),r(16,"table")(17,"thead")(18,"tr")(19,"th"),l(20,"Court"),a(),r(21,"th"),l(22,"Hours Booked"),a(),r(23,"th"),l(24,"Hours Available"),a(),r(25,"th"),l(26,"Utilization %"),a(),r(27,"th"),l(28,"Revenue Generated"),a()()(),r(29,"tbody"),A(30,BW,17,23,"tr",66),a()()()()}if(n&2){let e=h();d(12),x("ngIf",e.courtUtilizationChartData),d(18),x("ngForOf",e.courtUtilization)}}function VW(n,t){if(n&1&&w(0,"canvas",67),n&2){let e=h(2);x("data",e.playerParticipationChartData)("options",e.playerParticipationChartOptions)}}function LW(n,t){if(n&1&&(r(0,"tr")(1,"td"),l(2),a(),r(3,"td")(4,"strong"),l(5),a()(),r(6,"td"),l(7),a(),r(8,"td"),l(9),a()()),n&2){let e=t.$implicit;d(2),R(e.date),d(3),R(e.totalPlayers),d(2),R(e.openPlayPlayers),d(2),R(e.rentalCoachingPlayers)}}function FW(n,t){if(n&1){let e=L();r(0,"div",32)(1,"div",70)(2,"h2"),w(3,"i",30),l(4," Player Participation"),a(),r(5,"button",71),S("click",function(){k(e);let o=h();return O(o.exportToCSV("players"))}),w(6,"i",72),l(7," Export CSV "),a()(),r(8,"div",73)(9,"h3"),l(10,"Player Participation Trend"),a(),r(11,"div",74),A(12,VW,1,2,"canvas",58),a()(),r(13,"div",65)(14,"h3"),l(15,"Daily Player Breakdown"),a(),r(16,"table")(17,"thead")(18,"tr")(19,"th"),l(20,"Date"),a(),r(21,"th"),l(22,"Total Players"),a(),r(23,"th"),l(24,"Open Play"),a(),r(25,"th"),l(26,"Rental/Coaching"),a()()(),r(27,"tbody"),A(28,LW,10,4,"tr",66),a()()()()}if(n&2){let e=h();d(12),x("ngIf",e.playerParticipationChartData),d(16),x("ngForOf",e.playerParticipation)}}function zW(n,t){if(n&1&&(r(0,"tr")(1,"td"),l(2),a(),r(3,"td"),l(4),a(),r(5,"td"),l(6),_e(7,"number"),a(),r(8,"td"),l(9),_e(10,"number"),a()()),n&2){let e=t.$implicit;d(2),R(e.coachName),d(2),R(e.totalSessions),d(2),F("\u20B1",be(7,4,e.totalEarnings,"1.2-2"),""),d(3),F("\u20B1",be(10,7,e.totalSessions>0?e.totalEarnings/e.totalSessions:0,"1.2-2"),"")}}function UW(n,t){if(n&1&&(r(0,"div",65)(1,"table")(2,"thead")(3,"tr")(4,"th"),l(5,"Coach"),a(),r(6,"th"),l(7,"Sessions"),a(),r(8,"th"),l(9,"Total Earnings"),a(),r(10,"th"),l(11,"Avg per Session"),a()()(),r(12,"tbody"),A(13,zW,11,10,"tr",66),a()()()),n&2){let e=h(2);d(13),x("ngForOf",e.coachAnalytics)}}function jW(n,t){n&1&&(r(0,"div",85),w(1,"i",31),r(2,"p"),l(3,"No coaching sessions foun
106d for the selected date range."),a()())}function HW(n,t){if(n&1&&(r(0,"div",32)(1,"div",70)(2,"h2"),w(3,"i",31),l(4," Coach Performance"),a()(),r(5,"div",33)(6,"div",34)(7,"div",35),w(8,"i",27),a(),r(9,"div",36)(10,"h3"),l(11,"Total Coaching Earnings"),a(),r(12,"p",37),l(13),_e(14,"number"),a()()(),r(15,"div",76)(16,"div",35),w(17,"i",28),a(),r(18,"div",36)(19,"h3"),l(20,"Total Sessions"),a(),r(21,"p",37),l(22),a()()(),r(23,"div",76)(24,"div",35),w(25,"i",31),a(),r(26,"div",36)(27,"h3"),l(28,"Coaches with Bookings"),a(),r(29,"p",37),l(30),a()()()(),A(31,UW,14,1,"div",84)(32,jW,4,0,"ng-template",null,0,ln),a()),n&2){let e=Jt(33),i=h();d(13),F("\u20B1",be(14,5,i.totalCoachEarnings,"1.2-2"),""),d(9),R(i.totalCoachSessions),d(8),R(i.coachAnalytics.length),d(),x("ngIf",i.coachAnalytics.length>0)("ngIfElse",e)}}ns.register(...vg);var e0=class n{constructor(t,e,i){this.apiService=t;this.authService=e;this.router=i}activeTab="overview";dateRange={startDate:this.getDefaultStartDate(),endDate:this.getDefaultEndDate()};periodType="DAILY";summary;revenueData=[];bookingVolumeData=[];statusDistribution=[];courtUtilization=[];playerParticipation=[];cancellationMetrics;paymentMetrics;discountAnalytics={totalDiscountGiven:0,discountBookingCount:0,averageDiscountPerBooking:0,grossRevenue:0,netRevenue:0,byType:[],verifiedBeneficiariesByType:{}};coachAnalytics=[];revenueChartData;revenueChartOptions={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!0,position:"top"},tooltip:{mode:"index",intersect:!1}},scales:{y:{beginAtZero:!0,ticks:{callback:function(t){return"\u20B1"+t.toLocaleString()}}}}};bookingVolumeChartData;bookingVolumeChartOptions={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!0,position:"top"}},scales:{y:{beginAtZero:!0},x:{stacked:!1}}};statusPieChartData;statusPieChartOptions={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!0,position:"right"}}};courtUtilizationChartData;courtUtilizationChartOptions={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!0,position:"top"}},scales:{y:{beginAtZero:!0,max:100,ticks:{callback:function(t){return t+"%"}}}}};playerParticipationChartData;playerParticipationChartOptions={responsive:!0,maintainAspectRatio:!1,plugins:{legend:{display:!0,position:"top"}},scales:{y:{beginAtZero:!0}}};isLoading=!1;errorMessage="";lastUpdated="";ngOnInit(){if(!this.isAdmin()){alert("Access denied. Admin privileges required."),this.router.navigate(["/"]);return}this.loadAllAnalytics()}loadAllAnalytics(){return ue(this,null,function*(){this.isLoading=!0,this.errorMessage="";try{yield Promise.all([this.loadSummary(),this.loadRevenueData(),this.loadBookingVolume(),this.loadStatusDistribution(),this.loadCourtUtilization(),this.loadPlayerParticipation(),this.loadCancellationMetrics(),this.loadPaymentMetrics(),this.loadDiscountAnalytics(),this.loadCoachAnalytics()]),this.lastUpdated=new Date().toLocaleString()}catch(t){console.error("Error loading analytics:",t),this.errorMessage=t.message||"Failed to load analytics data"}finally{this.isLoading=!1}})}loadSummary(){return ue(this,null,function*(){try{this.summary=yield this.apiService.getAnalyticsSummary(this.dateRange.startDate,this.dateRange.endDate).toPromise()}catch(t){throw console.error("Error loading summary:",t),t}})}loadRevenueData(){return ue(this,null,function*(){try{this.revenueData=(yield this.apiService.getRevenueMetrics(this.dateRange.startDate,this.dateRange.endDate,this.periodType).toPromise())||[],this.buildRevenueChart()}catch(t){throw console.error("Error loading revenue data:",t),t}})}loadBookingVolume(){return ue(this,null,function*(){try{this.bookingVolumeData=(yield this.apiService.getBookingV
106olume(this.dateRange.startDate,this.dateRange.endDate,this.periodType==="DAILY"?"DAY":this.periodType==="WEEKLY"?"WEEK":"MONTH").toPromise())||[],this.buildBookingVolumeChart()}catch(t){throw console.error("Error loading booking volume:",t),t}})}loadStatusDistribution(){return ue(this,null,function*(){try{this.statusDistribution=(yield this.apiService.getStatusDistribution(this.dateRange.startDate,this.dateRange.endDate).toPromise())||[],this.buildStatusPieChart()}catch(t){throw console.error("Error loading status distribution:",t),t}})}loadCourtUtilization(){return ue(this,null,function*(){try{this.courtUtilization=(yield this.apiService.getCourtUtilization(this.dateRange.startDate,this.dateRange.endDate).toPromise())||[],this.buildCourtUtilizationChart()}catch(t){throw console.error("Error loading court utilization:",t),t}})}loadPlayerParticipation(){return ue(this,null,function*(){try{this.playerParticipation=(yield this.apiService.getPlayerParticipation(this.dateRange.startDate,this.dateRange.endDate).toPromise())||[],this.buildPlayerParticipationChart()}catch(t){throw console.error("Error loading player participation:",t),t}})}loadCancellationMetrics(){return ue(this,null,function*(){try{this.cancellationMetrics=yield this.apiService.getCancellationMetrics(this.dateRange.startDate,this.dateRange.endDate).toPromise()}catch(t){throw console.error("Error loading cancellation metrics:",t),t}})}loadPaymentMetrics(){return ue(this,null,function*(){try{this.paymentMetrics=yield this.apiService.getPaymentMetrics(this.dateRange.startDate,this.dateRange.endDate).toPromise()}catch(t){throw console.error("Error loading payment metrics:",t),t}})}loadDiscountAnalytics(){return ue(this,null,function*(){try{let t=yield this.apiService.getDiscountAnalytics(this.dateRange.startDate,this.dateRange.endDate).toPromise();t&&(this.discountAnalytics=t)}catch(t){console.error("Error loading discount analytics:",t)}})}loadCoachAnalytics(){return ue(this,null,function*(){try{let t=yield this.apiService.getCoachAnalytics(this.dateRange.startDate,this.dateRange.endDate).toPromise();this.coachAnalytics=t||[]}catch(t){console.error("Error loading coach analytics:",t)}})}get totalCoachEarnings(){return this.coachAnalytics.reduce((t,e)=>t+e.totalEarnings,0)}get totalCoachSessions(){return this.coachAnalytics.reduce((t,e)=>t+e.totalSessions,0)}buildRevenueChart(){this.revenueChartData={labels:this.revenueData.map(t=>t.periodLabel),datasets:[{label:"Total Revenue",data:this.revenueData.map(t=>t.totalRevenue),borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.1)",fill:!0,tension:.4},{label:"Open Play",data:this.revenueData.map(t=>t.openPlayRevenue),borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.1)",fill:!0,tension:.4},{label:"Court Rental",data:this.revenueData.map(t=>t.rentalRevenue),borderColor:"#f59e0b",backgroundColor:"rgba(245, 158, 11, 0.1)",fill:!0,tension:.4},{label:"Coaching",data:this.revenueData.map(t=>t.coachingRevenue),borderColor:"#8b5cf6",backgroundColor:"rgba(139, 92, 246, 0.1)",fill:!0,tension:.4}]}}buildBookingVolumeChart(){this.bookingVolumeChartData={labels:this.bookingVolumeData.map(t=>t.date),datasets:[{label:"Open Play",data:this.bookingVolumeData.map(t=>t.openPlayBookings),backgroundColor:"#3b82f6"},{label:"Court Rental",data:this.bookingVolumeData.map(t=>t.rentalBookings),backgroundColor:"#f59e0b"},{label:"Coaching",data:this.bookingVolumeData.map(t=>t.coachingBookings),backgroundColor:"#8b5cf6"}]}}buildStatusPieChart(){let t=new Map;this.statusDistribution.forEach(s=>{let m=t.get(s.status)||0;t.set(s.status,m+s.count)});let e=Array.from(t.keys()),i=Array.from(t.values()),o=e.map(s=>s.includes("Paid")||s.includes("VERIFIED")?"#10b981":s.includes("Pending")||s.includes("PENDING")?"#f59e0b":s.includes("Cancelled")||s.includes("CANCELLED")?"#ef4444":s.includes("Declined")||s.includes("EXPIRED")?"#6b7280":"#3b82f6");this.statusPieChartData={labels:e,datasets:[{data:i,backgroundColor:o}]}}buildCourtUtilizationChart(){this.courtUtilizationChartData={labels:this.courtUtilization.map(t=>t.courtName),datasets:[{label:"Utilization Rate (%)",data:this.courtUtilization.map(t=>t.utilizationRate),backgroundColor:"#3b82f6"}]}}buildPlayerParticipationChart(){this.playerParticipationChartData={labels:this.playerParticipation.map(t=>t.date),datasets:[{label:"Total Players",data:this.playerParticipation.map(t=>t.totalPlayers),borderColor:"#10b981",backgroundColor:"rgba(16, 185, 129, 0.1)",fill:!0,tension:.4},{label:"Open Play",data:this.playerParticipation.map(t=>t.openPlayPlayers),borderColor:"#3b82f6",backgroundColor:"rgba(59, 130, 246, 0.1)",fill:!0,tension:.4}
106,{label:"Rental/Coaching",data:this.playerParticipation.map(t=>t.rentalCoachingPlayers),borderColor:"#f59e0b",backgroundColor:"rgba(245, 158, 11, 0.1)",fill:!0,tension:.4}]}}applyDateFilter(){this.loadAllAnalytics()}changePeriod(t){this.periodType=t,this.loadRevenueData(),this.loadBookingVolume()}refreshData(){this.loadAllAnalytics()}exportToCSV(t){let e="",i="";t==="revenue"?(e=this.generateRevenueCSV(),i=`revenue-${this.dateRange.startDate}-to-${this.dateRange.endDate}.csv`):t==="bookings"?(e=this.generateBookingVolumeCSV(),i=`booking-volume-${this.dateRange.startDate}-to-${this.dateRange.endDate}.csv`):t==="courts"?(e=this.generateCourtUtilizationCSV(),i=`court-utilization-${this.dateRange.startDate}-to-${this.dateRange.endDate}.csv`):t==="players"&&(e=this.generatePlayerParticipationCSV(),i=`player-participation-${this.dateRange.startDate}-to-${this.dateRange.endDate}.csv`);let o=new Blob([e],{type:"text/csv;charset=utf-8;"}),s=document.createElement("a"),m=URL.createObjectURL(o);s.setAttribute("href",m),s.setAttribute("download",i),s.style.visibility="hidden",document.body.appendChild(s),s.click(),document.body.removeChild(s)}generateRevenueCSV(){let t=`Period,Total Revenue,Open Play Revenue,Rental Revenue,Coaching Revenue 107`;return this.revenueData.forEach(e=>{t+=`${e.periodLabel},${e.totalRevenue},${e.openPlayRevenue},${e.rentalRevenue},${e.coachingRevenue} 108`}),t}generateBookingVolumeCSV(){let t=`Date,Total Bookings,Open Play,Rental,Coaching 109`;return this.bookingVolumeData.forEach(e=>{t+=`${e.date},${e.totalBookings},${e.openPlayBookings},${e.rentalBookings},${e.coachingBookings} 110`}),t}generateCourtUtilizationCSV(){let t=`Court,Hours Booked,Hours Available,Utilization %,Revenue Generated 111`;return this.courtUtilization.forEach(e=>{t+=`${e.courtName},${e.totalHoursBooked},${e.totalHoursAvailable},${e.utilizationRate.toFixed(2)},${e.revenueGenerated} 112`}),t}generatePlayerParticipationCSV(){let t=`Date,Total Players,Open Play Players,Rental/Coaching Players 113`;return this.playerParticipation.forEach(e=>{t+=`${e.date},${e.totalPlayers},${e.openPlayPlayers},${e.rentalCoachingPlayers} 114`}),t}getDefaultStartDate(){let t=new Date;return t.setDate(t.getDate()-30),t.toISOString().split("T")[0]}getDefaultEndDate(){return new Date().toISOString().split("T")[0]}isAdmin(){return this.authService.getCurrentUser()?.role?.toUpperCase()==="ADMIN"}static \u0275fac=function(e){return new(e||n)(ae(it),ae(je),ae(nt))};static \u0275cmp=We({type:n,selectors:[["app-analytics-dashboard"]],decls:37,vars:23,consts:[["noCoachData",""],[1,"analytics-container"],[1,"page-header"],[1,"subtitle"],["class","error-message",4,"ngIf"],[1,"filter-section"],[1,"date-filters"],["type","date",3,"ngModelChange","ngModel"],[1,"btn-apply",3,"click","disabled"],[1,"bi","bi-filter"],[1,"btn-refresh",3,"click","disabled"],[1,"bi","bi-arrow-clockwise"],[1,"period-selector"],[3,"click","disabled"],["class","last-updated",4,"ngIf"],["class","loading-container",4,"ngIf"],["class","tab-navigation",4,"ngIf"],["class","tab-content",4,"ngIf"],[1,"error-message"],[1,"bi","bi-exclamation-triangle"],[1,"last-updated"],[1,"bi","bi-clock"],[1,"loading-container"],[1,"spinner"],[1,"tab-navigation"],[3,"click"],[1,"bi","bi-grid"],[1,"bi","bi-currency-peso"],[1,"bi","bi-calendar-check"],[1,"bi","bi-badge-tm"],[1,"bi","bi-people"],[1,"bi","bi-person-badge"],[1,"tab-content"],[1,"kpi-grid"],[1,"kpi-card","revenue"],[1,"kpi-icon"],[1,"kpi-info"],[1,"kpi-value"],[1,"kpi-card","bookings"],[1,"kpi-breakdown"],[1,"breakdown-item"],[1,"breakdown-label"],[1,"breakdown-value"],[1,"kpi-card","players"],[1,"kpi-card","avg-value"],[1,"bi","bi-graph-up"],[1,"kpi-card","discount"],[1,"bi","bi-tag"],[1,"metrics-row"],[1,"metric-card"],[1,"metric-value"],[1,"progress-bar"],[1,"progress-fill"],[1,"progress-fill","warning"],["class","discount-analytics-section",4,"ngIf"],[1,"charts-grid"],[1,"chart-card"],[1,"chart-container"],["baseChart","","type","line",3,"data","options",4,"ngIf"],[1,"bi","bi-pie-chart"],["baseChart","","type","pie",3,"data","options",4,"ngIf"],[1,"bi","bi-bar-chart"],["baseChart","","type","bar",3,"data","options",4,"ngIf"],[1,"bi","bi-bar-chart-line"],[1,"discount-analytics-section"],[1,"data-table"],[4,"ngFor","ngForOf"],["baseChart","","type","line",3,"data","options"],["baseChart","","type","pie",3,"data","options"],["baseChart","","type","bar",3,"data","options"],[1,"tab-header"],[1,"btn-export",3,"click"],[1,"bi","bi-download"],[1,"chart-full-width"],[1,"chart-container-large"],[1,"kpi-grid",2,"display","grid","grid-template-columns","repeat(auto-fit,minmax(160px,1fr))","gap","1rem","margin-bottom","1.5rem"],[1,"kpi-card"],[1,"kpi-label"],[1,"stats-grid"],[1,"stat-card"],[1,"metric-list"],[1,"metric-item"],["class","metric-item",4,"ngFor","ngForOf"],[1,"utilization-badge"],["class","data-table",4,"ngIf","ngIfElse"],[1,"no-data-message"]],template:function(e,i){e&1&&(r(0,"div",1)(1,"div",2)(2,"h1"),l(3,"\u{1F4CA} Analytics Dashboard"),a(),r(4,"p",3),l(5,"Comprehensive insights from Open Play and Court Bookings"),a()(),A(6,fW,3,1,"div",4),r(7,"div",5)(8,"div",6)(9,"label"),l(10,"From:"),a(),r(11,"input",7),pe("ngModelChange",function(s){return de(i.dateRange.startDate,
114s)||(i.dateRange.startDate=s),s}),a(),r(12,"label"),l(13,"To:"),a(),r(14,"input",7),pe("ngModelChange",function(s){return de(i.dateRange.endDate,s)||(i.dateRange.endDate=s),s}),a(),r(15,"button",8),S("click",function(){return i.applyDateFilter()}),w(16,"i",9),l(17," Apply "),a(),r(18,"button",10),S("click",function(){return i.refreshData()}),w(19,"i",11),l(20," Refresh "),a()(),r(21,"div",12)(22,"button",13),S("click",function(){return i.changePeriod("DAILY")}),l(23," Daily "),a(),r(24,"button",13),S("click",function(){return i.changePeriod("WEEKLY")}),l(25," Weekly "),a(),r(26,"button",13),S("click",function(){return i.changePeriod("MONTHLY")}),l(27," Monthly "),a()(),A(28,hW,3,1,"div",14),a(),A(29,_W,4,0,"div",15)(30,xW,19,12,"div",16)(31,MW,132,53,"div",17)(32,EW,79,21,"div",17)(33,DW,67,22,"div",17)(34,NW,31,2,"div",17)(35,FW,29,2,"div",17)(36,HW,34,8,"div",17),a()),e&2&&(d(6),x("ngIf",i.errorMessage),d(5),ce("ngModel",i.dateRange.startDate),d(3),ce("ngModel",i.dateRange.endDate),d(),x("disabled",i.isLoading),d(3),x("disabled",i.isLoading),d(4),te("active",i.periodType==="DAILY"),x("disabled",i.isLoading),d(2),te("active",i.periodType==="WEEKLY"),x("disabled",i.isLoading),d(2),te("active",i.periodType==="MONTHLY"),x("disabled",i.isLoading),d(2),x("ngIf",i.lastUpdated),d(),x("ngIf",i.isLoading),d(),x("ngIf",!i.isLoading),d(),x("ngIf",i.activeTab==="overview"&&!i.isLoading),d(),x("ngIf",i.activeTab==="revenue"&&!i.isLoading),d(),x("ngIf",i.activeTab==="bookings"&&!i.isLoading),d(),x("ngIf",i.activeTab==="courts"&&!i.isLoading),d(),x("ngIf",i.activeTab==="players"&&!i.isLoading),d(),x("ngIf",i.activeTab==="coaches"&&!i.isLoading))},dependencies:[Ge,rt,$e,fa,vu,lt,at,st,ut,q2],styles:[".analytics-container[_ngcontent-%COMP%]{max-width:1400px;margin:0 auto;padding:20px;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;color:var(--color-text, #1f2937);background-color:var(--color-background, #f9fafb)}.page-header[_ngcontent-%COMP%]{text-align:center;margin-bottom:40px;padding-bottom:20px;border-bottom:3px solid var(--color-accent, #3b82f6)}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-text, #1f2937);margin-bottom:12px;font-weight:800}.subtitle[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--color-text-secondary, #6b7280);margin:0}.error-message[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b;padding:15px 20px;border-radius:8px;margin-bottom:20px;display:flex;align-items:center;gap:10px;border-left:4px solid #dc2626}.filter-section[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:20px;border-radius:12px;margin-bottom:30px;box-shadow:0 2px 8px #0000001a;display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:20px}.date-filters[_ngcontent-%COMP%]{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.date-filters[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text-secondary, #6b7280)}.date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{padding:10px;border:2px solid var(--color-border, #e5e7eb);border-radius:8px;background:var(--color-surface, #ffffff);color:var(--color-text, #1f2937);font-size:.95rem}[data-theme=light][_ngcontent-%COMP%] .date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{color-scheme:light}[data-theme=light][_ngcontent-%COMP%] .date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]::-webkit-calendar-picker-indicator{filter:invert(0);
114cursor:pointer}[data-theme=dark][_ngcontent-%COMP%] .date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{color-scheme:dark;background:var(--color-surface, #1e2b38);border-color:var(--color-border, #34495e)}[data-theme=dark][_ngcontent-%COMP%] .date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]::-webkit-calendar-picker-indicator{filter:invert(1);cursor:pointer}.btn-apply[_ngcontent-%COMP%], .btn-refresh[_ngcontent-%COMP%]{padding:10px 20px;border:none;border-radius:8px;cursor:pointer;font-weight:600;font-size:.95rem;display:flex;align-items:center;gap:8px;transition:all .3s}.btn-apply[_ngcontent-%COMP%]{background:var(--color-accent, #3b82f6);color:#fff}.btn-apply[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark, #2563eb);transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.btn-refresh[_ngcontent-%COMP%]{background:var(--color-text-secondary, #6b7280);color:#fff}.btn-refresh[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-text, #1f2937);transform:translateY(-2px)}.btn-apply[_ngcontent-%COMP%]:disabled, .btn-refresh[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.period-selector[_ngcontent-%COMP%]{display:flex;gap:10px}.period-selector[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:10px 20px;border:2px solid var(--color-border, #e5e7eb);background:var(--color-surface, #ffffff);color:var(--color-text, #1f2937);border-radius:8px;cursor:pointer;font-weight:600;transition:all .3s}.period-selector[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background:var(--color-accent, #3b82f6);color:#fff;border-color:var(--color-accent, #3b82f6)}.period-selector[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled){border-color:var(--color-accent, #3b82f6)}.period-selector[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:disabled{opacity:.5;cursor:not-allowed}.last-updated[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary, #6b7280);display:flex;align-items:center;gap:5px}.loading-container[_ngcontent-%COMP%]{text-align:center;padding:60px 20px}.spinner[_ngcontent-%COMP%]{border:4px solid #f3f4f6;border-top:4px solid var(--color-accent, #3b82f6);border-radius:50%;width:50px;height:50px;animation:_ngcontent-%COMP%_spin 1s linear infinite;margin:0 auto 20px}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.tab-navigation[_ngcontent-%COMP%]{display:flex;gap:10px;margin-bottom:30px;border-bottom:2px solid var(--color-border, #e5e7eb);overflow-x:auto}.tab-navigation[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:15px 30px;border:none;background:transparent;color:var(--color-text-secondary, #6b7280);font-size:1rem;font-weight:600;cursor:pointer;border-bottom:3px solid transparent;transition:all .3s;white-space:nowrap;display:flex;align-items:center;gap:8px}.tab-navigation[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{color:var(--color-accent, #3b82f6);border-bottom-color:var(--color-accent, #3b82f6)}.tab-navigation[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{color:var(--color-accent, #3b82f6)}.kpi-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:20px;margin-bottom:30px}.kpi-card[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:25px;border-radius:12px;box-shadow:0 2px 8px #0000001a;display:flex;align-items:center;gap:20px;border-left:4px solid var(--color-accent, #3b82f6);transition:transform .3s}.kpi-card[_ngcontent-%COMP%]:hover{transform:translateY(-5px);box-shadow:0 4px 16px #00000026}.kpi-card.revenue[_ngcontent-%COMP%]{border-left-color:#10b981}.kpi-card.bookings[_ngcontent-%COMP%]{border-left-color:#3b82f6}.kpi-card.players[_ngcontent-%COMP%]{border-left-color:#f59e0b}.kpi-card.avg-value[_ngcontent-%COMP%]{border-left-color:#8b5cf6}.kpi-card.discount[_ngcontent-%COMP%]{border-left-color:#ec4899}.kpi-icon[_ngcontent-%COMP%]{font-size:2.5rem;color:var(--color-accent, #3b82f6);opacity:.8;flex-shrink:0}.kpi-info[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden}
114.kpi-card.revenue[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%]{color:#10b981}.kpi-card.bookings[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%]{color:#3b82f6}.kpi-card.players[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%]{color:#f59e0b}.kpi-card.avg-value[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%]{color:#8b5cf6}.kpi-card.discount[_ngcontent-%COMP%] .kpi-icon[_ngcontent-%COMP%]{color:#ec4899}.kpi-info[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary, #6b7280);margin:0 0 8px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.kpi-value[_ngcontent-%COMP%]{font-size:clamp(1.1rem,2.5vw,2rem);font-weight:700;color:var(--color-text, #1f2937);margin:0;line-height:1.2;overflow-wrap:break-word;word-break:break-word}.kpi-breakdown[_ngcontent-%COMP%]{margin-top:12px;padding-top:12px;border-top:1px solid var(--color-border, #e5e7eb);display:flex;flex-direction:column;gap:6px}.breakdown-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;font-size:.875rem}.breakdown-label[_ngcontent-%COMP%]{color:var(--color-muted, #6b7280);font-weight:500}.breakdown-value[_ngcontent-%COMP%]{color:var(--color-text, #1f2937);font-weight:600}.metrics-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:20px;margin-bottom:30px}.metric-card[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:20px;border-radius:12px;box-shadow:0 2px 8px #0000001a}.metric-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary, #6b7280);margin:0 0 10px;text-transform:uppercase;letter-spacing:.5px}.metric-value[_ngcontent-%COMP%]{font-size:1.8rem;font-weight:700;color:var(--color-text, #1f2937);margin:0 0 10px}.progress-bar[_ngcontent-%COMP%]{width:100%;height:8px;background:var(--color-border, #e5e7eb);border-radius:4px;overflow:hidden}.progress-fill[_ngcontent-%COMP%]{height:100%;background:#10b981;transition:width .5s ease}.progress-fill.warning[_ngcontent-%COMP%]{background:#f59e0b}.charts-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(500px,1fr));gap:20px;margin-bottom:30px}.chart-card[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:25px;border-radius:12px;box-shadow:0 2px 8px #0000001a}.chart-card[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-top:0;margin-bottom:20px;color:var(--color-text, #1f2937);font-size:1.2rem;display:flex;align-items:center;gap:10px}.chart-container[_ngcontent-%COMP%]{position:relative;height:300px}.chart-container-large[_ngcontent-%COMP%]{position:relative;height:400px}.chart-full-width[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:25px;border-radius:12px;box-shadow:0 2px 8px #0000001a;margin-bottom:30px}.chart-full-width[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-top:0;margin-bottom:20px;color:var(--color-text, #1f2937);font-size:1.2rem}.tab-header[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;flex-wrap:wrap;gap:15px}.tab-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{margin:0;color:var(--color-text, #1f2937);font-size:1.8rem;display:flex;align-items:center;gap:10px}.btn-export[_ngcontent-%COMP%]{padding:12px 24px;background:var(--color-accent, #3b82f6);color:#fff;border:none;border-radius:8px;cursor:pointer;font-weight:600;font-size:.95rem;display:flex;align-items:center;gap:8px;transition:all .3s}.btn-export[_ngcontent-%COMP%]:hover{background:var(--color-accent-dark, #2563eb);transform:translateY(-2px);box-shadow:0 4px 12px #3b82f64d}.data-table[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:25px;border-radius:12px;box-shadow:0 2px 8px #0000001a;margin-bottom:30px;overflow-x:auto}.data-table[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-top:0;margin-bottom:20px;color:var(--color-text, #1f2937);font-size:1.2rem}.data-table[_ngcontent-%COMP%] table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.data-table[_ngcontent-%COMP%] thead[_ngcontent-%COMP%]{background:var(--color-accent, #3b82f6);color:#fff}.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{padding:15px;text-align:left;font-weight:600;font-size:.9rem;text-transform:uppercase;letter-spacing:.5px}.data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:15px;border-bottom:1px solid var(--color-border, #e5e7eb);color:var(--color-text, #1f2937)}.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover, #f9fafb)}.data-table[_ngcontent-%COMP%] tbody[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.stats-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:20px;margin-bottom:30px}.stat-card[_ngcontent-%COMP%]{background:var(--color-surface, #ffffff);padding:25px;border-radius:12px;box-shadow:0 2px 8px #0000001a}
114.stat-card[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin-top:0;margin-bottom:20px;color:var(--color-text, #1f2937);font-size:1.1rem;font-weight:700}.metric-list[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px}.metric-item[_ngcontent-%COMP%]{display:flex;justify-content:space-between;padding:10px;background:var(--color-surface-hover, #f9fafb);border-radius:6px}.metric-item[_ngcontent-%COMP%] span[_ngcontent-%COMP%]{color:var(--color-text-secondary, #6b7280);font-size:.95rem}.metric-item[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--color-text, #1f2937);font-size:1rem}.utilization-badge[_ngcontent-%COMP%]{padding:6px 12px;border-radius:20px;font-weight:600;font-size:.9rem}.utilization-badge.high[_ngcontent-%COMP%]{background:#d1fae5;color:#065f46}.utilization-badge.medium[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e}.utilization-badge.low[_ngcontent-%COMP%]{background:#fee2e2;color:#991b1b}.discount-analytics-section[_ngcontent-%COMP%]{margin-top:30px}.discount-analytics-section[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin-bottom:20px;color:var(--color-text, #1f2937);font-size:1.2rem;display:flex;align-items:center;gap:8px}.discount-analytics-section[_ngcontent-%COMP%] .kpi-card[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:8px}.kpi-label[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary, #6b7280);text-transform:uppercase;letter-spacing:.5px;font-weight:600}.discount-analytics-section[_ngcontent-%COMP%] .kpi-value[_ngcontent-%COMP%]{font-size:1.6rem}@media (max-width: 1024px){.charts-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.filter-section[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.date-filters[_ngcontent-%COMP%], .period-selector[_ngcontent-%COMP%]{width:100%;justify-content:center}}@media (max-width: 768px){.analytics-container[_ngcontent-%COMP%]{padding:15px}.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:2rem}.kpi-grid[_ngcontent-%COMP%]{grid-template-columns:repeat(2,1fr)}.metrics-row[_ngcontent-%COMP%], .charts-grid[_ngcontent-%COMP%], .stats-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.tab-navigation[_ngcontent-%COMP%]{justify-content:flex-start}.tab-navigation[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:12px 20px;font-size:.9rem}.tab-header[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.tab-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.5rem}.btn-export[_ngcontent-%COMP%]{width:100%;justify-content:center}.data-table[_ngcontent-%COMP%]{padding:15px}.data-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%], .data-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:10px;font-size:.85rem}}@media (max-width: 480px){.page-header[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{font-size:1.5rem}.subtitle[_ngcontent-%COMP%]{font-size:.9rem}.kpi-grid[_ngcontent-%COMP%]{grid-template-columns:1fr}.kpi-card[_ngcontent-%COMP%]{flex-direction:column;text-align:center}.kpi-value[_ngcontent-%COMP%]{font-size:2rem}.date-filters[_ngcontent-%COMP%]{flex-direction:column;width:100%}.date-filters[_ngcontent-%COMP%] input[type=date][_ngcontent-%COMP%]{width:100%}.period-selector[_ngcontent-%COMP%]{flex-direction:column}.period-selector[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{width:100%}.tab-navigation[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:1;min-width:120px;padding:10px 15px;font-size:.85rem}.chart-container[_ngcontent-%COMP%]{height:250px}.chart-container-large[_ngcontent-%COMP%]{height:300px}}"]})};function WW(n,t){n&1&&(r(0,"div",34),w(1,"i",35),l(2," Settings saved successfully! "),a())}function GW(n,t){if(n&1&&(r(0,"div",36),w(1,"i",37),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.settingsSaveError," ")}}function qW(n,t){n&1&&(r(0,"span"),w(1,"i",38),l(2," Saving..."),a())}function $W(n,t){n&1&&(r(0,"span"),w(1,"i",39),l(2," Save Settings"),a())}function YW(n,t){if(n&1){let e=L();r(0,"div",12)(1,"div",13)(2,"div",14),w(3,"i",2),r(4,"h3"),l(5,"Court Configuration"),a()()(),A(6,WW,3,0,"div",15)(7,GW,3,1,"div",16),r(8,"div",17)(9,"div",18)(10,"div",19)(11,"label"),l(12,"Court Name"),a(),r(13,"input",20),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.courtName,o)||(s.courtSettingsForm.courtName=o),O(o)}),a()(),r(14,"div",19)(15,"label"),l(16,"Short Name"),a(),r(17,"input",21),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.shortName,o)||(s.courtSettingsForm.shortName=o),O(o)}),a()()(),r(18,"div",19)(19,"label"),l(20,"Tagline"),a(),r(21,"input",22),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.tagline,o)||(s.courtSettingsForm.tagline=o),O(o)}),a()(),r(22,"div",18)(23,"div",19)(24,"label"),l(25,"Logo Path / URL"),a(),r(26,"input",23),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.logoPath,o)||(s.courtSettingsForm.logoPath=o),O(o)}),a()(),r(27,"div",19)(28,"label"),l(29,"Push Notification Icon URL"),a(),r(30,"input",24),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.pushNotificationIcon,o)||(s.courtSettingsForm.pushNotificationIcon=o),O(o)}),a()()(),r(31,"div",19)(32,"label"),l(33,"Location"),a(),r(34,"input",25),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.location,o)||(s.courtSettingsForm.location=o),O(o)}),a()(),r(35,"div",18)(36,"div",19)(37,"label"),l(38,"Contact Email"),a(),r(39,"input",26),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.contactEmail,o)||(s.courtSettingsForm.contactEmail=o),O(o)}),a()(),r(40,"div",19)(41,"label"),l(42,"Website URL"),a(),r(43,"input",27),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.websiteUrl,o)||(s.courtSettingsForm.websiteUrl=o),O(o)}),a()()(),r(44,"div",19)(45,"label"),l(46,"Footer Text"),a(),r(47,"input",28),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.footerText,o)||(s.courtSettingsForm.footerText=o),O(o)}),a()(),r(48,"div",19)(49,"label"),w(50,"i",29),l(51," Payment Options"),a(),r(52,"textarea",30),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtSettingsForm.paymentOptions,o)||(s.courtSettingsForm.paymentOptions=o),O(o)}),a(),r(53,"small",31),l(54,"Enter one payment option per line. Displayed as-is in the app and emails."),a()(),r(55,"div",32)(56,"button",33),S("click",function(){k(e);let o=h();return O(o.saveCourtSettings())}),A(57,qW,3,0,"span",10)(58,$W,3,0,"span",10),a()()()()}if(n&2){let e=h();d(6),x("ngIf",e.settingsSaveSuccess),d(),x("ngIf",e.settingsSaveError),d(6),ce("ngModel",e.courtSettingsForm.courtName),d(4),ce("ngModel",e.courtSettingsForm.shortName),d(4),ce("ngModel",e.courtSettingsForm.tagline),d(5),ce("ngModel",e.courtSettingsForm.logoPath),d(4),ce("ngModel",e.courtSettingsForm.pushNotificationIcon),d(4),ce("ngModel",e.courtSettingsForm.location),d(5),ce("ngModel",e.courtSettingsForm.contactEmail),d(4),ce("ngModel",e.courtSettingsForm.websiteUrl),d(4),ce("ngModel",e.courtSettingsForm.footerText),d(5),ce("ngModel",e.courtSettingsForm.paymentOptions),d(4),x("disabled",e.isSavingSettings),d(),x("ngIf",e.isSavingSettings),d(),x("ngIf",!e.isSavingSettings)}}function XW(n,t){n&1&&(r(0,"div",50),w(1,"i",35),l(2," Legal content saved successfully! "),a())}function ZW(n,t){if(n&1&&(r(0,"div",51),w(1,"i",37),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.legalSaveError," ")}}function QW(n,t){if(n&1){let e=L();r(0,"textarea",52),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.privacyPolicyHtml,o)||(s.privacyPolicyHtml=o),O(o)}),a()}if(n&2){let e=h(2);ce("ngModel",e.privacyPolicyHtml)}}function KW(n,t){if(n&1&&w(0,"div",53),n&2){let e=h(2);x("innerHTML",e.getSafeHtml(e.privacyPolicyHtml),Zt)}}function JW(n,t){if(n&1){let e=L();r(0,"textarea",54),pe("ngModelChange",function(o){k(e);let s=h(2);return de(s.termsAndConditionsHtml,o)||(s.termsAndConditionsHtml=o),O(o)}),a()}if(n&2){let e=h(2);ce("ngModel",e.termsAndConditionsHtml)}}function eG(n,t){if(n&1&&w(0,"div",53),n&2){let e=h(2);x("innerHTML",e.getSafeHtml(e.termsAndConditionsHtml),Zt)}}function tG(n,t){n&1&&(r(0,"span"),w(1,"i",38),l(2," Saving..."),a())}function nG(n,t){n&1&&(r(0,"span"),w(1,"i",39),l(2," Save Legal Content"),a())}function iG(n,t){if(n&1){let e=L();r(0,"div"),A(1,XW,3,0,"div",40)(2,ZW,3,1,"div",41),r(3,"div",42)(4,"div",13)(5,"div",14),w(6,"i",43),r(7,"h3"),l(8,"Privacy Policy"),a()(),r(9,"button",44),S("click",function(){k(e);let o=h();return O(o.privacyPolicyPreview=!o.privacyPolicyPreview)}),w(10,"i",45),l(11),a()(),r(12,"div",46),A(13,QW,1,1,"textarea",47)(14,KW,1,1,"div",48),a()(),r(15,"div",42)(16,"div",13)(17,"div",14),w(18,"i",7),r(19,"h3"),l(20,"Terms & Conditions"),a()(),r(21,"button",44),S("click",function(){k(e);let o=h();return O(o.termsPreview=!o.termsPreview)}),w(22,"i",45),l(23),a()(),r(24,"div",46),A(25,JW,1,1,"textarea",49)(26,eG,1,1,"div",48),a()(),r(27,"div",32)(28,"button",33),S("click",function(){k(e);let o=h();return O(o.saveLegalContent())}),A(29,tG,3,0,"span",10)(30,nG,3,0,"span",10),a()()()}if(n&2){let e=h();d(),x("ngIf",e.legalSaveSuccess),d(),x("ngIf",e.legalSaveError),d(8),te("bi-eye",!e.privacyPolicyPreview)("bi-pencil",e.privacyPolicyPreview),d(),F(" ",e.privacyPolicyPreview?"Edit":"Preview"," "),d(2),x("ngIf",!e.privacyPolicyPreview),d(),x("ngIf",e.privacyPolicyPreview),d(8),te("bi-eye",!e.termsPreview)("bi-pencil",e.termsPreview),d(),F(" ",e.termsPreview?"Edit":"Preview"," "),d(2),x("ngIf",!e.termsPreview),d(),x("ngIf",e.termsPreview),d(2),x("disabled",e.isSavingLegal),d(),x("ngIf",e.isSavingLegal),d(),x("ngIf",!e.isSavingLegal)}}function oG(n,t){n&1&&(r(0,"div",60),w(1,"i",38),l(2," Loading courts... "),a())}function rG(n,t){n&1&&(r(0,"div",61),w(1,"i",62),l(2,' No courts configured yet. Click "Add Court" to create one. '),a())}function aG(n,t){if(n&1){let e=L();r(0,"tr")(1,"td")(2,"strong"),l(3),a()(),r(4,"td"),l(5),a(),r(6,"td")(7,"span",65),l(8),a()(),r(9,"td",66)(10,"button",67),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openEditCourt(o))}),w(11,"i",68),a(),r(12,"button",69),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.toggleCourt(o))}),w(13,"i",70),a(),r(14,"button",71),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.deleteCourt(o))}),w(15,"i",72),a()()()}if(n&2){let e=t.$implicit;d(3),R(e.courtName),d(2),R(e.courtType||"\u2014"),d(2),x("ngClass",e.isActive?"status-active":"status-inactive"),d(),F(" ",e.isActive?"Active":"Inactive"," "),d(4),x("title",e.isActive?"Deactivate":"Activate"),d(),x("ngClass",e.isActive?"bi-toggle-on":"bi-toggle-off")}}function sG(n,t){if(n&1&&(r(0,"table",63)(1,"thead")(2,"tr")(3,"th"),l(4,"Name"),a(),r(5,"th"),l(6,"Type"),a(),r(7,"th"),l(8,"Status"),a(),r(9,"th"),l(10,"Actions"),a()()(),r(11,"tbody"),A(12,aG,16,6,"tr",64),a()()),n&2){let e=h(2);d(12),x("ngForOf",e.courts)}}function lG(n,t){if(n&1){let e=L();r(0,"div",12)(1,"div",13)(2,"div",14),w(3,"i",8),r(4,"h3"),l(5,"Court Rooms"),a()(),r(6,"button",55),S("click",function(){k(e);let o=h();return O(o.openAddCourt())}),w(7,"i",56),l(8," Add Court "),a()(),A(9,oG,3,0,"div",57)(10,rG,3,0,"div",58)(11,sG,13,1,"table",59),a()}if(n&2){let e=h();d(9),x("ngIf",e.isLoadingCourts),d(),x("ngIf",!e.isLoadingCourts&&e.courts.length===0),d(),x("ngIf",!e.isLoadingCourts&&e.courts.length>0)}}function cG(n,t){if(n&1){let e=L();r(0,"button",83),S("click",function(){k(e);let o=h(2);return O(o.closeConfirmModal())}),l(1),a()}if(n&2){let e=h(2);d(),F(" ",e.confirmModalConfig.cancelText," ")}}function dG(n,t){if(n&1){let e=L();r(0,"div",73),S("click",function(){k(e);let o=h();return O(o.closeConfirmModal())}),r(1,"div",74),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",75)(3,"h3"),w(4,"i",70),l(5),a(),r(6,"button",76),S("click",function(){k(e);let o=h();return O(o.closeConfirmModal())}
114),w(7,"i",77),a()(),r(8,"div",78)(9,"p",79),l(10),a()(),r(11,"div",80),A(12,cG,2,1,"button",81),r(13,"button",82),S("click",function(){k(e);let o=h();return O(o.confirmModalAction())}),l(14),a()()()()}if(n&2){let e=h();d(2),te("danger-header",e.confirmModalConfig.isDanger),d(2),x("ngClass",e.confirmModalConfig.isDanger?"bi-exclamation-triangle":"bi-question-circle"),d(),F(" ",e.confirmModalConfig.title," "),d(5),R(e.confirmModalConfig.message),d(2),x("ngIf",e.confirmModalConfig.cancelText),d(),te("btn-danger",e.confirmModalConfig.isDanger)("btn-primary",!e.confirmModalConfig.isDanger),d(),F(" ",e.confirmModalConfig.confirmText," ")}}function pG(n,t){if(n&1&&(r(0,"div",51),l(1),a()),n&2){let e=h(2);d(),R(e.courtSaveError)}}function mG(n,t){n&1&&(r(0,"small",96),w(1,"i",97),l(2," Court name cannot be changed \u2014 existing blocks and bookings reference it by name. "),a())}function gG(n,t){n&1&&(r(0,"span"),w(1,"i",38),l(2," Saving..."),a())}function uG(n,t){n&1&&(r(0,"span"),w(1,"i",39),l(2," Save"),a())}function fG(n,t){if(n&1){let e=L();r(0,"div",73),S("click",function(){k(e);let o=h();return O(o.closeCourt())}),r(1,"div",84),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",75)(3,"h3"),l(4),a(),r(5,"button",76),S("click",function(){k(e);let o=h();return O(o.closeCourt())}),l(6,"\xD7"),a()(),r(7,"div",78),A(8,pG,2,1,"div",41),r(9,"div",18)(10,"div",19)(11,"label"),l(12,"Court Name "),r(13,"span",85),l(14,"*"),a()(),r(15,"input",86),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtForm.courtName,o)||(s.courtForm.courtName=o),O(o)}),a(),A(16,mG,3,0,"small",87),a(),r(17,"div",19)(18,"label"),l(19,"Court Type"),a(),r(20,"select",88),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtForm.courtType,o)||(s.courtForm.courtType=o),O(o)}),r(21,"option",89),l(22,"Select type..."),a(),r(23,"option",90),l(24,"Rental"),a(),r(25,"option",91),l(26,"Coaching"),a()()()(),r(27,"div",19)(28,"label"),l(29,"Description"),a(),r(30,"input",92),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtForm.description,o)||(s.courtForm.description=o),O(o)}),a()(),r(31,"div",93)(32,"label",94)(33,"input",95),pe("ngModelChange",function(o){k(e);let s=h();return de(s.courtForm.isActive,o)||(s.courtForm.isActive=o),O(o)}),a(),l(34," Active "),a()()(),r(35,"div",80)(36,"button",83),S("click",function(){k(e);let o=h();return O(o.closeCourt())}),l(37,"Cancel"),a(),r(38,"button",33),S("click",function(){k(e);let o=h();return O(o.saveCourt())}),A(39,gG,3,0,"span",10)(40,uG,3,0,"span",10),a()()()()}if(n&2){let e=h();d(4),R(e.editingCourt?"Edit Court":"Add Court"),d(4),x("ngIf",e.courtSaveError),d(7),te("input-readonly",!!e.editingCourt),ce("ngModel",e.courtForm.courtName),x("readonly",!!e.editingCourt),d(),x("ngIf",e.editingCourt),d(4),ce("ngModel",e.courtForm.courtType),d(10),ce("ngModel",e.courtForm.description),d(3),ce("ngModel",e.courtForm.isActive),d(5),x("disabled",e.isSavingCourt),d(),x("ngIf",e.isSavingCourt),d(),x("ngIf",!e.isSavingCourt)}}var t0=class n{constructor(t,e,i,o,s){this.authService=t;this.apiService=e;this.router=i;this.courtConfigService=o;this.sanitizer=s}courtSettingsForm={courtName:"",shortName:"",tagline:"",logoPath:"",pushNotificationIcon:"",location:"",contactEmail:"",websiteUrl:"",footerText:"",paymentOptions:""};isSavingSettings=!1;settingsSaveSuccess=!1;settingsSaveError="";activeSettingsTab="general";privacyPolicyHtml="";termsAndConditionsHtml="";privacyPolicyPreview=!1;termsPreview=!1;isSavingLegal=!1;legalSaveSuccess=!1;legalSaveError="";courts=[];isLoadingCourts=!1;showCourtModal=!1;editingCourt=null;courtForm={courtName:"",courtType:"",description:"",isActive:!0};isSavingCourt=!1;courtSaveError="";isDeletingCourt=!1;showConfirmModal=!1;confirmModalConfig={title:"",message:"",confirmText:"Confirm",cancelText:"Cancel",isDanger:!1,onConfirm:()=>{}};configSub;ngOnInit(){let t=this.authService.getCurrentUser();if(!t||t.role!=="admin"){this.router.navigate(["/booking"]);return}this.configSub=this.courtConfigService.getConfig().pipe(xn(e=>e!==null)).subscribe(e=>{this.applyConfigToForm(e)}),this.courtConfigService.load()}ngOnDestroy(){this.configSub?.unsubscribe()}applyConfigToForm(t){this.courtSettingsForm={courtName:t.courtName,shortName:t.shortName,tagline:t.tagline,logoPath:t.logoPath,pushNotificationIcon:t.pushNotificationIcon,location:t.location,contactEmail:t.contactEmail,websiteUrl:t.websiteUrl,footerText:t.footerText,paymentOptions:t.paymentOptions||""},this.privacyPolicyHtml=t.privacyPolicyHtml||"",this.termsAndConditionsHtml=t.termsAndConditionsHtml||""}saveCourtSettings(){this.isSavingSettings=!0,this.settingsSaveSuccess=!1,this.settingsSaveError="",this.apiService.upsertCourtConfig(this.courtSettingsForm).subscribe({next:()=>{this.isSavingSettings=!1,this.settingsSaveSuccess=!0,this.courtConfigService.load(),setTimeout(()=>{this.settingsSaveSuccess=!1},3e3)},error:t=>{this.isSavingSettings=!1,this.settingsSaveError=t?.payload?.description||t?.message||"Failed to save settings."}})}loadLegalContent(){let t=this.courtConfigService.getSnapshot();t&&(this.privacyPolicyHtml=t.privacyPolicyHtml||"",this.termsAndConditionsHtml=t.termsAndConditionsHtml||"")}
114saveLegalContent(){this.isSavingLegal=!0,this.legalSaveSuccess=!1,this.legalSaveError="",this.apiService.upsertCourtConfig({privacyPolicyHtml:this.privacyPolicyHtml,termsAndConditionsHtml:this.termsAndConditionsHtml}).subscribe({next:()=>{this.isSavingLegal=!1,this.legalSaveSuccess=!0,this.courtConfigService.load(),setTimeout(()=>{this.legalSaveSuccess=!1},3e3)},error:t=>{this.isSavingLegal=!1,this.legalSaveError=t?.payload?.description||t?.message||"Failed to save."}})}loadCourts(){this.isLoadingCourts=!0,this.apiService.getAdminCourts().subscribe({next:t=>{this.courts=t,this.isLoadingCourts=!1},error:()=>{this.isLoadingCourts=!1}})}openAddCourt(){this.editingCourt=null,this.courtForm={courtName:"",courtType:"",description:"",isActive:!0},this.courtSaveError="",this.showCourtModal=!0}openEditCourt(t){this.editingCourt=t,this.courtForm={courtName:t.courtName||"",courtType:t.courtType||"",description:t.description||"",isActive:t.isActive},this.courtSaveError="",this.showCourtModal=!0}closeCourt(){this.showCourtModal=!1,this.editingCourt=null,this.courtSaveError=""}saveCourt(){if(!this.courtForm.courtName?.trim()){this.courtSaveError="Court name is required.";return}this.isSavingCourt=!0,this.courtSaveError="";let t=ze({},this.courtForm);(this.editingCourt?this.apiService.updateCourt(this.editingCourt.id,t):this.apiService.createCourt(t)).subscribe({next:()=>{this.isSavingCourt=!1,this.closeCourt(),this.loadCourts()},error:i=>{this.isSavingCourt=!1,this.courtSaveError=i?.payload?.error||i?.payload?.description||i?.message||"Failed to save court."}})}toggleCourt(t){this.apiService.toggleCourt(t.id).subscribe({next:e=>{let i=this.courts.findIndex(o=>o.id===t.id);i>=0&&(this.courts[i]=e)},error:()=>{}})}deleteCourt(t){this.confirmModalConfig={title:"Delete Court",message:`Are you sure you want to delete "${t.courtName}"? This action cannot be undone.`,confirmText:"Delete",cancelText:"Cancel",isDanger:!0,onConfirm:()=>{this.apiService.deleteCourt(t.id).subscribe({next:()=>{this.courts=this.courts.filter(e=>e.id!==t.id)},error:e=>{this.courtSaveError=e?.payload?.error||e?.payload?.description||e?.message||"Failed to delete court."}})}},this.showConfirmModal=!0}confirmModalAction(){this.confirmModalConfig.onConfirm(),this.showConfirmModal=!1}closeConfirmModal(){this.showConfirmModal=!1}getSafeHtml(t){return this.sanitizer.bypassSecurityTrustHtml(t)}static \u0275fac=function(e){return new(e||n)(ae(je),ae(it),ae(nt),ae(Fn),ae(fi))};
vendor: 8,397 bytes, lines 114-116
114static \u0275cmp=We({type:n,selectors:[["app-court-settings"]],decls:22,vars:11,consts:[[1,"page-container"],[1,"page-header"],[1,"bi","bi-gear-fill"],[1,"subtitle"],[1,"settings-tab-nav"],[1,"settings-tab-btn",3,"click"],[1,"bi","bi-gear"],[1,"bi","bi-file-earmark-text"],[1,"bi","bi-buildings"],["class","settings-section",4,"ngIf"],[4,"ngIf"],["class","modal-backdrop",3,"click",4,"ngIf"],[1,"settings-section"],[1,"settings-section-header"],[1,"settings-section-title"],["class","alert alert-success","style","margin-bottom: 16px;",4,"ngIf"],["class","alert alert-danger","style","margin-bottom: 16px;",4,"ngIf"],[1,"settings-form"],[1,"settings-row"],[1,"settings-field"],["type","text","placeholder","e.g. My Court @ Venue Name",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","e.g. PickleHub",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","e.g. Your community pickleball hub",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","assets/images/logo.png or Google Drive URL",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","https://...",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","e.g. Mall Name, City",1,"form-control",3,"ngModelChange","ngModel"],["type","email","placeholder","[email protected]",1,"form-control",3,"ngModelChange","ngModel"],["type","url","placeholder","https://www.example.com",1,"form-control",3,"ngModelChange","ngModel"],["type","text","placeholder","e.g. \xA9 2025 My Court Name",1,"form-control",3,"ngModelChange","ngModel"],[1,"bi","bi-credit-card"],["rows","5","placeholder",`One option per line, e.g.: 115GCash: 09XX-XXX-XXXX (Name) 116Bank Transfer: Account Name - 1234 5678 9012`,1,"form-control",3,"ngModelChange","ngModel"],[1,"text-muted"],[1,"settings-actions"],[1,"btn","btn-primary",3,"click","disabled"],[1,"alert","alert-success",2,"margin-bottom","16px"],[1,"bi","bi-check-circle"],[1,"alert","alert-danger",2,"margin-bottom","16px"],[1,"bi","bi-exclamation-circle"],[1,"bi","bi-hourglass-split"],[1,"bi","bi-floppy"],["class","alert alert-success",4,"ngIf"],["class","alert alert-danger",4,"ngIf"],[1,"settings-section",2,"margin-bottom","20px"],[1,"bi","bi-shield-lock"],[1,"btn-toggle",3,"click"],[1,"bi"],[1,"legal-editor-wrap"],["class","form-control legal-editor","placeholder","Paste Privacy Policy HTML here...",3,"ngModel","ngModelChange",4,"ngIf"],["class","legal-preview",3,"innerHTML",4,"ngIf"],["class","form-control legal-editor","placeholder","Paste Terms & Conditions HTML here...",3,"ngModel","ngModelChange",4,"ngIf"],[1,"alert","alert-success"],[1,"alert","alert-danger"],["placeholder","Paste Privacy Policy HTML here...",1,"form-control","legal-editor",3,"ngModelChange","ngModel"],[1,"legal-preview",3,"innerHTML"],["placeholder","Paste Terms & Conditions HTML here...",1,"form-control","legal-editor",3,"ngModelChange","ngModel"],[1,"btn","btn-primary","btn-sm",3,"click"],[1,"bi","bi-plus-lg"],["style","padding: 20px; text-align: center; color: var(--color-text-muted);",4,"ngIf"],["style","padding: 30px; text-align: center; color: var(--color-text-muted);",4,"ngIf"],["class","courts-table",4,"ngIf"],[2,"padding","20px","text-align","center","color","var(--color-text-muted)"],[2,"padding","30px","text-align","center","color","var(--color-text-muted)"],[1,"bi","bi-buildings",2,"font-size","2rem","display","block","margin-bottom","8px"],[1,"courts-table"],[4,"ngFor","ngForOf"],[1,"court-status",3,"ngClass"],[1,"court-actions"],["title","Edit",1,"btn-icon",3,"click"],[1,"bi","bi-pencil"],[1,"btn-icon",3,"click","title"],[1,"bi",3,"ngClass"],["title","Delete",1,"btn-icon","btn-danger-icon",3,"click"],[1,"bi","bi-trash"],[1,"modal-backdrop",3,"click"],[1,"modal-panel","modal-panel--sm",3,"click"],[1,"modal-header"],[1,"close-btn",3,"click"],[1,"bi","bi-x"],[1,"modal-body"],[1,"confirm-message"],[1,"modal-footer"],["class","btn btn-secondary",3,"click",4,"ngIf"],[1,"btn",3,"click"],[1,"btn","btn-secondary",3,"click"],[1,"modal-panel",3,"click"],[1,"required"],["type","text","placeholder","e.g. Court A",1,"form-control",3,"ngModelChange","ngModel","readonly"],["class","text-muted","style","margin-top: 4px; display: block;",4,"ngIf"],[1,"form-control",3,"ngModelChange","ngModel"],["value",""],["value","Rental"],["value","Coaching"],["type","text","placeholder","Optional description",1,"form-control",3,"ngModelChange","ngModel"],[1,"settings-field",2,"display","flex","align-items","center","gap","8px","padding-top","4px"],[2,"display","flex","align-items","center","gap","8px","cursor","pointer","margin","0"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"text-muted",2,"margin-top","4px","display","block"],[1,"bi","bi-lock-fill"]],template:function(e,i){e&1&&(r(0,"div",0)(1,"div",1)(2,"h2"),w(3,"i",2),l(4," Court Settings"),a(),r(5,"p",3),l(6,"Manage your court branding, contact information, and payment options."),a()(),r(7,"div",4)(8,"button",5),S("click",function(){return i.activeSettingsTab="general"}),w(9,"i",6),l(10," General "),a(),r(11,"button",5),S("click",function(){return i.activeSettingsTab="legal",i.loadLegalContent()}),w(12,"i",7),l(13," Legal Content "),a(),r(14,"button",5),S("click",function(){return i.activeSettingsTab="courts",i.loadCourts()}),w(15,"i",8),l(16," Courts "),a()(),A(17,YW,59,15,"div",9)(18,iG,31,19,"div",10)(19,lG,12,3,"div",9)(20,dG,15,11,"div",11)(21,fG,41,13,"div",11),a()),e&2&&(d(8),te("active",i.activeSettingsTab==="general"),d(3),te("active",i.activeSettingsTab==="legal"),d(3),te("active",i.activeSettingsTab==="courts"),d(3),x("ngIf",i.activeSettingsTab==="general"),d(),x("ngIf",i.activeSettingsTab==="legal"),d(),x("ngIf",i.activeSettingsTab==="courts"),d(),x("ngIf",i.showConfirmModal),d(),x("ngIf",i.showCourtModal))},dependencies:[Ge,cn,rt,$e,lt,yn,Cn,at,bn,Vn,st,ut],styles:[".input-readonly[_ngcontent-%COMP%]{background-color:var(--color-surface);color:var(--color-text-muted);cursor:not-allowed;opacity:.8}.page-container[_ngcontent-%COMP%]{max-width:900px;margin:0 auto;padding:20px}.page-header[_ngcontent-%COMP%]{margin-bottom:28px}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.8rem;font-weight:700;color:var(--color-text);margin-bottom:4px}.subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);font-size:.95rem;margin:0}.form-control[_ngcontent-%COMP%]{padding:8px 10px;border:1px solid var(--color-border);border-radius:6px;font-size:14px;background:var(--color-background);color:var(--color-text);width:100%;box-sizing:border-box}.form-control[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.form-control[_ngcontent-%COMP%]::placeholder{color:var(--color-text-muted)}.btn[_ngcontent-%COMP%]{padding:10px 18px;border:none;border-radius:8px;font-size:14px;font-weight:500;cursor:pointer;transition:all .25s ease;display:inline-flex;align-items:center;justify-content:center;gap:6px;white-space:nowrap}.btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff;font-weight:600}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark);box-shadow:0 4px 12px var(--color-accent-shadow)}.alert[_ngcontent-%COMP%]{padding:15px 20px;margin-bottom:20px;border-radius:8px;font-size:1rem;display:flex;align-items:center;gap:8px}.alert-success[_ngcontent-%COMP%]{background-color:var(--color-success-bg-light);color:var(--color-success);border:1px solid var(--color-success)}.alert-danger[_ngcontent-%COMP%]{background-color:var(--color-danger-bg-light);color:var(--color-danger);border:1px solid var(--color-danger)}.settings-section[_ngcontent-%COMP%]{background:var(--color-surface);border-radius:12px;border:1px solid var(--color-border);overflow:hidden}.settings-section-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:16px 20px;border-bottom:1px solid var(--color-border)}.settings-section-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;color:var(--color-text)}.settings-section-title[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent);font-size:1.1rem}.settings-section-title[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:600}.settings-form[_ngcontent-%COMP%]{padding:20px;
116display:flex;flex-direction:column;gap:16px}.settings-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:16px}.settings-field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px}.settings-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.04em}.settings-actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;padding-top:8px;border-top:1px solid var(--color-border)}.text-muted[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.82rem}@media (max-width: 640px){.settings-row[_ngcontent-%COMP%]{grid-template-columns:1fr}}.settings-tab-nav[_ngcontent-%COMP%]{display:flex;gap:4px;margin-bottom:24px;border-bottom:2px solid var(--color-border)}.settings-tab-btn[_ngcontent-%COMP%]{padding:10px 18px;background:none;border:none;border-bottom:2px solid transparent;margin-bottom:-2px;cursor:pointer;font-size:.9rem;font-weight:500;color:var(--color-text-muted);display:inline-flex;align-items:center;gap:6px;transition:color .2s}.settings-tab-btn.active[_ngcontent-%COMP%]{color:var(--color-accent);border-bottom-color:var(--color-accent)}.settings-tab-btn[_ngcontent-%COMP%]:hover:not(.active){color:var(--color-text)}.legal-editor-wrap[_ngcontent-%COMP%]{padding:16px 20px 20px}.legal-editor[_ngcontent-%COMP%]{font-family:Courier New,Courier,monospace;font-size:13px;resize:vertical;min-height:300px;line-height:1.5}.legal-preview[_ngcontent-%COMP%]{padding:20px;background:var(--color-background);border:1px solid var(--color-border);border-radius:8px;min-height:200px;line-height:1.7;color:var(--color-text);overflow-y:auto}.legal-preview[_ngcontent-%COMP%] h1[_ngcontent-%COMP%], .legal-preview[_ngcontent-%COMP%] h2[_ngcontent-%COMP%], .legal-preview[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{color:var(--color-text);margin-top:1.2em;margin-bottom:.4em}.legal-preview[_ngcontent-%COMP%] ul[_ngcontent-%COMP%], .legal-preview[_ngcontent-%COMP%] ol[_ngcontent-%COMP%]{padding-left:1.5em}.legal-preview[_ngcontent-%COMP%] section[_ngcontent-%COMP%]{margin-bottom:1.5em}.legal-preview[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:.5em 0}.btn-toggle[_ngcontent-%COMP%]{padding:5px 12px;font-size:.82rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:6px;cursor:pointer;color:var(--color-text);display:inline-flex;align-items:center;gap:5px;transition:border-color .2s,color .2s}.btn-toggle[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);color:var(--color-accent)}.courts-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;margin-top:16px}.courts-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{background:var(--color-surface);padding:10px 14px;text-align:left;font-size:.8rem;font-weight:600;color:var(--color-text-secondary);text-transform:uppercase;border-bottom:1px solid var(--color-border)}.courts-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:10px 14px;border-bottom:1px solid var(--color-border-light);font-size:.9rem;color:var(--color-text)}.courts-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.court-status[_ngcontent-%COMP%]{display:inline-block;padding:2px 10px;border-radius:20px;font-size:.75rem;font-weight:600}.status-active[_ngcontent-%COMP%]{background:#d1fae5;color:#065f46}.status-inactive[_ngcontent-%COMP%]{background:#f3f4f6;color:#6b7280}.court-actions[_ngcontent-%COMP%]{display:flex;gap:6px}.btn-icon[_ngcontent-%COMP%]{background:none;border:1px solid var(--color-border);border-radius:6px;padding:4px 8px;cursor:pointer;color:var(--color-text-secondary);transition:all .15s;font-size:.9rem}.btn-icon[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);color:var(--color-accent)}.btn-danger-icon[_ngcontent-%COMP%]:hover, .required[_ngcontent-%COMP%]{color:var(--color-danger)}.modal-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.modal-panel[_ngcontent-%COMP%]{background:var(--color-background-card);border-radius:16px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg)}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:20px 24px 16px;border-bottom:1px solid var(--color-border)}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.1rem;font-weight:700;color:var(--color-text)}.close-btn[_ngcontent-%COMP%]{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--color-text-muted);padding:0}.modal-body[_ngcontent-%COMP%]{padding:20px 24px}.modal-footer[_ngcontent-%COMP%]{padding:16px 24px;display:flex;gap:12px;justify-content:flex-end;border-top:1px solid var(--color-border)}.btn-sm[_ngcontent-%COMP%]{padding:5px 12px;font-size:.85rem}.btn-secondary[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.btn-danger[_ngcontent-%COMP%]{background:var(--color-danger);color:#fff;font-weight:600}.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled){opacity:.88}.modal-panel--sm[_ngcontent-%COMP%]{max-width:420px}.danger-header[_ngcontent-%COMP%]{background:var(--color-danger-bg-subtle);border-bottom-color:var(--color-danger)}.danger-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%], .danger-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-danger)}.confirm-message[_ngcontent-%COMP%]{margin:0;color:var(--color-text);font-size:.95rem;line-height:1.6}"]})};var hG=(n,t)=>({"toast-success":n,"toast-error":t}),$2=n=>[n];function _G(n,t){if(n&1){let e=L();r(0,"div",20),w(1,"i",21),r(2,"span"),l(3),a(),r(4,"button",22),S("click",function(){k(e);let o=h();return O(o.showToast=!1)}),l(5,"\xD7"),a()()}if(n&2){let e=h();x("ngClass",ga(3,hG,e.toastType==="success",e.toastType==="error")),d(),x("ngClass",e.toastType==="success"?"bi-check-circle":"bi-exclamation-circle"),d(2),R(e.toastMessage)}}function xG(n,t){if(n&1&&(r(0,"div",23),w(1,"i",24),l(2),a()),n&2){let e=h();d(2),Se(" ",e.totalUsers," ",e.totalUsers===1?"user":"users"," ")}}function vG(n,t){n&1&&(r(0,"div",25),w(1,"i",26),l(2," Loading users... "),a())}function bG(n,t){if(n&1){let e=L();r(0,"img",45),S("error",function(){k(e);let o=h().$implicit;return O(o.profilePictureUrl="")}),a()}if(n&2){let e=h().$implicit,i=h(3);x("src",i.getProfilePictureUrl(e),Ie)}}function yG(n,t){if(n&1&&(r(0,"div",46),l(1),a()),n&2){let e=h().$implicit,i=h(3);d(),R(i.getInitials(e))}}function CG(n,t){if(n&1&&(r(0,"span",47),l(1),a()),n&2){let e=t.$implicit,i=h(4);x("ngClass",i.getRoleBadgeClass(e)),d(),R(e)}}function wG(n,t){if(n&1){let e=L();r(0,"tr",33),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openUserModal(o))}),r(1,"td")(2,"div",34)(3,"div",35),A(4,bG,1,1,"img",36)(5,yG,2,1,"div",37),a(),r(6,"div",38)(7,"span",39),l(8),a(),r(9,"span",40),l(10),a()()()(),r(11,"td",41),l(12),a(),r(13,"td")(14,"div",42),A(15,CG,2,2,"span",43),a()(),r(16,"td")(17,"span",44),l(18),a()()()}if(n&2){let e=t.$implicit;d(4),x("ngIf",e.profilePictureUrl),d(),x("ngIf",!e.profilePictureUrl),d(3),R(e.fullname||e.username),d(2),F("@",e.username,""),d(2),R(e.email),d(3),x("ngForOf",e.roles||Ms(8,$2,e.role)),d(2),x("ngClass",e.isApproved?"status-approved":"status-pending"),d(),F(" ",e.isApproved?"Approved":"Pending"," ")}}function PG(n,t){if(n&1&&(r(0,"table",30)(1,"thead")(2,"tr")(3,"th"),l(4,"User"),a(),r(5,"th",31),l(6,"Email"),a(),r(7,"th"),l(8,"Roles"),a(),r(9,"th"),l(10,"Status"),a()()(),r(11,"tbody"),A(12,wG,19,10,"tr",32),a()()),n&2){let e=h(2);d(12),x("ngForOf",e.users)}}function MG(n,t){n&1&&(r(0,"div",48),w(1,"i",49),r(2,"p"),l(3,"No users found."),a()())}function SG(n,t){if(n&1&&(r(0,"div",27),A(1,PG,13,1,"table",28)(2,MG,4,0,"div",29),a()),n&2){let e=h();d(),x("ngIf",e.users.length>0),d(),x("ngIf",e.users.length===0)}}function kG(n,t){if(n&1){let e=L();r(0,"div",50)(1,"button",51),S("click",function(){k(e);let o=h();return O(o.prevPage())}),w(2,"i",52),a(),r(3,"span",53),l(4),a(),r(5,"button",51),S("click",function(){k(e);let o=h();return O(o.nextPage())}),w(6,"i",54),a()()}if(n&2){let e=h();d(),x("disabled",e.currentPage===0),d(3),Se("Page ",e.currentPage+1," of ",e.totalPages,""),d(),x("disabled",e.currentPage>=e.totalPages-1)}}function OG(n,t){if(n&1){let e=L();r(0,"img",90),S("error",function(){k(e);let o=h(3);return O(o.selectedUser.profilePictureUrl="")}),a()}if(n&2){let e=h(3);x("src",e.getProfilePictureUrl(e.selectedUser),Ie)}}function EG(n,t){if(n&1&&(r(0,"div",91),l(1),a()),n&2){let e=h(3);d(),R(e.getInitials(e.selectedUser))}}function TG(n,t){if(n&1&&(r(0,"span",47),l(1),a()),n&2){let e=t.$implicit,i=h(3);x("ngClass",i.getRoleBadgeClass(e)),d(),R(e)}}function IG(n,t){if(n&1&&(r(0,"div",70),w(1,"i",92),r(2,"a",93),l(3),a()()),n&2){let e=h(3);d(2),Kt("href","mailto:",e.selectedUser.email,"",Ie),d(),R(e.selectedUser.email)}}function AG(n,t){if(n&1&&(r(0,"div",70),w(1,"i",94),r(2,"a",93),l(3),a()()),n&2){let e=h(3);d(2),Kt("href","tel:",e.selectedUser.contactNumber,"",Ie),d(),R(e.selectedUser.contactNumber)}}function DG(n,t){if(n&1&&(r(0,"div",95),w(1,"i",96),l(2),_e(3,"date"),a()),n&2){let e=h(3);d(2),F(" Joined ",be(3,1,e.selectedUser.createdAt,"MMM d, yyyy")," ")}}function RG(n,t){if(n&1){let e=L();r(0,"button",97),S("click",function(){k(e);let o=h(3);return O(o.sendMessageToUser())}),w(1,"i",98),l(2," Send Message "),a()}}function BG(n,t){if(n&1){let e=L();r(0,"label",99)(1,"input",100),S("change",function(){let o=k(e).$implicit,s=h(3);return O(s.toggleUserRole(o))}),a(),r(2,"span",47),l(3),a()()}if(n&2){let e=t.$implicit,i=h(3);d(),x("checked",i.hasSelectedRole(e))("disabled",i.isSavingRole||i.hasSelectedRole(e)&&i.selectedRoles.length===1),d(),x("ngClass",i.getRoleBadgeClass(e)),d(),R(e)}}function NG(n,t){n&1&&(r(0,"span"),w(1,"i",26),l(2," Saving..."),a())}function VG(n,t){n&1&&(r(0,"span"),w(1,"i",101),l(2," Save Roles"),a())}function LG(n,t){n&1&&(r(0,"span",102),l(1,"No changes"),a())}function FG(n,t){n&1&&(r(0,"span"),w(1,"i",26),a())}function zG(n,t){if(n&1&&(r(0,"span"),l(1),a()),n&2){let e=h(3);d(),R(e.selectedUser.isApproved?"Unapprove":"Approve")}}function UG(n,t){if(n&1){let e=L();r(0,"button",109),S("click",function(){k(e);let o=h(4);return O(o.startEditCoach())}),w(1,"i",110),l(2," Edit "),a()}}function jG(n,t){n&1&&(r(0,"div",111),w(1,"i",26),l(2," Loading..."),a())}function HG(n,t){if(n&1&&(r(0,"span",119),l(1),a()),n&2){let e=t.$implicit;d(),R(e)}}function WG(n,t){n&1&&(r(0,"span",120),l(1,"None set"),a())}function GG(n,t){if(n&1&&(r(0,"div",113)(1,"span",114),l(2,"Experience"),a(),r(3,"span"),l(4),a()()),n&2){let e=h(5);
116d(4),F("",e.coachProfile.experienceYears," years")}}function qG(n,t){if(n&1&&(r(0,"div",113)(1,"span",114),l(2,"Rate"),a(),r(3,"span"),l(4),a()()),n&2){let e=h(5);d(4),F("\u20B1",e.coachProfile.hourlyRate,"/hr")}}function $G(n,t){if(n&1&&(r(0,"div",113)(1,"span",114),l(2,"Certifications"),a(),r(3,"span"),l(4),a()()),n&2){let e=h(5);d(4),R(e.coachProfile.certifications)}}function YG(n,t){if(n&1&&(r(0,"div",113)(1,"span",114),l(2,"Bio"),a(),r(3,"span"),l(4),a()()),n&2){let e=h(5);d(4),R(e.coachProfile.bio)}}function XG(n,t){if(n&1&&(r(0,"div",112)(1,"div",113)(2,"span",114),l(3,"Specializations"),a(),r(4,"div",115),A(5,HG,2,1,"span",116)(6,WG,2,0,"span",117),a()(),A(7,GG,5,1,"div",118)(8,qG,5,1,"div",118)(9,$G,5,1,"div",118)(10,YG,5,1,"div",118),r(11,"div",113)(12,"span",114),l(13,"Available"),a(),r(14,"span",44),l(15),a()(),r(16,"div",113)(17,"span",114),l(18,"Total Sessions"),a(),r(19,"span"),l(20),a()()()),n&2){let e=h(4);d(5),x("ngForOf",e.coachProfile.specializations),d(),x("ngIf",!(e.coachProfile.specializations!=null&&e.coachProfile.specializations.length)),d(),x("ngIf",e.coachProfile.experienceYears),d(),x("ngIf",e.coachProfile.hourlyRate),d(),x("ngIf",e.coachProfile.certifications),d(),x("ngIf",e.coachProfile.bio),d(4),x("ngClass",e.coachProfile.isAvailable?"status-approved":"status-pending"),d(),F(" ",e.co
116achProfile.isAvailable?"Yes":"No"," "),d(5),R(e.coachProfile.totalSessions||0)}}function ZG(n,t){if(n&1){let e=L();r(0,"label",133)(1,"input",134),S("change",function(){let o=k(e).$implicit,s=h(5);return O(s.toggleSpecialization(o))}),a(),l(2),a()}if(n&2){let e=t.$implicit,i=h(5);d(),x("checked",i.coachForm.specializations.includes(e)),d(),F(" ",e," ")}}function QG(n,t){n&1&&(r(0,"span"),w(1,"i",26),l(2," Saving..."),a())}function KG(n,t){n&1&&(r(0,"span"),w(1,"i",101),l(2," Save"),a())}function JG(n,t){if(n&1){let e=L();r(0,"div",121)(1,"div",78)(2,"label",122),l(3,"Specializations"),a(),r(4,"div",123),A(5,ZG,3,2,"label",124),a()(),r(6,"div",78)(7,"label",122),l(8,"Experience (years)"),a(),r(9,"input",125),pe("ngModelChange",function(o){k(e);let s=h(4);return de(s.coachForm.experienceYears,o)||(s.coachForm.experienceYears=o),O(o)}),a()(),r(10,"div",78)(11,"label",122),l(12,"Hourly Rate (\u20B1)"),a(),r(13,"input",125),pe("ngModelChange",function(o){k(e);let s=h(4);return de(s.coachForm.hourlyRate,o)||(s.coachForm.hourlyRate=o),O(o)}),a()(),r(14,"div",78)(15,"label",122),l(16,"Certifications"),a(),r(17,"textarea",126),pe("ngModelChange",function(o){k(e);let s=h(4);return de(s.coachForm.certifications,o)||(s.coachForm.certifications=o),O(o)}),a()(),r(18,"div",78)(19,"label",122),l(20,"Coaching Bio"),a(),r(21,"textarea",127),pe("ngModelChange",function(o){k(e);let s=h(4);return de(s.coachForm.bio,o)||(s.coachForm.bio=o),O(o)}),a()(),r(22,"div",78)(23,"label",128)(24,"input",129),pe("ngModelChange",function(o){k(e);let s=h(4);return de(s.coachForm.isAvailable,o)||(s.coachForm.isAvailable=o),O(o)}),a(),l(25," Available for booking "),a()(),r(26,"div",130)(27,"button",131),S("click",function(){k(e);let o=h(4);return O(o.cancelEditCoach())}),l(28,"Cancel"),a(),r(29,"button",132),S("click",function(){k(e);let o=h(4);return O(o.saveCoachProfile())}),A(30,QG,3,0,"span",84)(31,KG,3,0,"span",84),a()()()}if(n&2){let e=h(4);d(5),x("ngForOf",e.availableSpecializations),d(4),ce("ngModel",e.coachForm.experienceYears),d(4),ce("ngModel",e.coachForm.hourlyRate),d(4),ce("ngModel",e.coachForm.certifications),d(4),ce("ngModel",e.coachForm.bio),d(3),ce("ngModel",e.coachForm.isAvailable),d(5),x("disabled",e.isSavingCoach),d(),x("ngIf",e.isSavingCoach),d(),x("ngIf",!e.isSavingCoach)}}function eq(n,t){if(n&1&&(r(0,"div",103)(1,"div",75)(2,"span",76),w(3,"i",104),l(4," Coaching Profile"),a(),A(5,UG,3,0,"button",105),a(),A(6,jG,3,0,"div",106)(7,XG,21,9,"div",107)(8,JG,32,9,"div",108),a()),n&2){let e=h(3);d(5),x("ngIf",!e.isEditingCoach&&e.coachProfile),d(),x("ngIf",e.isLoadingCoach),d(),x("ngIf",!e.isEditingCoach&&e.coachProfile),d(),x("ngIf",e.isEditingCoach)}}function tq(n,t){if(n&1){let e=L();r(0,"div",62)(1,"div",63)(2,"div",64),A(3,OG,1,1,"img",65)(4,EG,2,1,"div",66),a(),r(5,"div",67)(6,"div",68)(7,"span",69),l(8),a(),r(9,"div",42),A(10,TG,2,2,"span",43),a()(),r(11,"div",70),w(12,"i",71),l(13),a(),A(14,IG,4,3,"div",72)(15,AG,4,3,"div",72)(16,DG,4,4,"div",73)(17,RG,3,0,"button",74),a()(),r(18,"div",75)(19,"span",76),w(20,"i",77),l(21," Roles"),a()(),r(22,"div",78)(23,"p",79),l(24,"Assign one or more roles. At least one role is required."),a(),r(25,"div",80),A(26,BG,4,4,"label",81),a(),r(27,"div",82)(28,"button",83),S("click",function(){k(e);let o=h(2);return O(o.saveRoles())}),A(29,NG,3,0,"span",84)(30,VG,3,0,"span",84),a(),A(31,LG,2,0,"span",85),a()(),r(32,"div",75)(33,"span",76),w(34,"i",86),l(35," Account Status"),a()(),r(36,"div",78)(37,"div",87)(38,"span",44),l(39),a(),r(40,"button",88),S("click",function(){k(e);let o=h(2);return O(o.toggleApproval())}),A(41,FG,2,0,"span",84)(42,zG,2,1,"span",84),a()()(),A(43,eq,9,4,"div",89),a()}if(n&2){let e=h(2);d(3),x("ngIf",e.selectedUser.profilePictureUrl),d(),x("ngIf",!e.selectedUser.profilePictureUrl),d(4),R(e.selectedUser.fullname||e.selectedUser.username),d(2),x("ngForOf",e.selectedUser.roles||Ms(21,$2,e.selectedUser.role)),d(3),R(e.selectedUser.username),d(),x("ngIf",e.selectedUser.email),d(),x("ngIf",e.selectedUser.contactNumber),d(),x("ngIf",e.selectedUser.createdAt),d(),x("ngIf",e.selectedUser.id!==e.currentUserId),d(9),x("ngForOf",e.availableRoles),d(2),x("disabled",e.isSavingRole||!e.rolesChanged),d(),x("ngIf",e.isSavingRole),d(),x("ngIf",!e.isSavingRole),d(),x("ngIf",!e.rolesChanged),d(7),x("ngClass",e.selectedUser.isApproved?"status-approved":"status-pending"),d(),F(" ",e.selectedUser.isApproved?"Approved":"Pending Approval"," "),d(),x("ngClass",e.selectedUser.isApproved?"btn-warning":"btn-success")("disabled",e.isTogglingApproval),d(),x("ngIf",e.isTogglingApproval),d(),x("ngIf",!e.isTogglingApproval),d(),x("ngIf",e.hasSelectedRole("coach"))}}function nq(n,t){if(n&1){let e=L();r(0,"div",55),S("click",function(){k(e);let o=h();return O(o.closeUserModal())}),r(1,"div",56),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",57)(3,"h3"),w(4,"i",58),l(5," Edit User"),a(),r(6,"button",59),S("click",function(){k(e);let o=h();return O(o.closeUserModal())}),w(7,"i",60),a()(),A(8,tq,44,23,"div",61),a()()}if(n&2){let e=h();d(8),x("ngIf",e.selectedUser)}}var n0=class n{constructor(t,e,i){this.authService=t;this.apiService=e;this.router=i}users=[];isLoading=!1;searchQuery="";roleFilter="all";currentPage=0;pageSize=20;totalUsers=0;selectedUser=null;showUserModal=!1;selectedRoles=[];isSavingRole=!1;isTogglingApproval=!1;availableRoles=["user","coach","admin"];toastMessage="";toastType="success";showToast=!1;coachProfile=null;isLoadingCoach=!1;isEditingCoach=!1;coachForm={specializations:[],certifications:"",experienceYears:null,hourlyRate:null,bio:"",isAvailable:!0};isSavingCoach=!1;availableSpecializations=["Pickleball","Basketball","Volleyball","Badminton","Tennis","Swimming","Football","Other"];ngOnInit(){if(!this.authService.hasRole("admin")){this.router.navigate(["/booking"]);return}this.loadUsers()}loadUsers(){this.isLoading=!0,this.apiService.getAdminUsers(this.searchQuery||void 0,this.roleFilter==="all"?void 0:this.roleFilter,this.currentPage,this.pageSize).subscribe({next:t=>{this.users=(t.users||[]).map(e=>Ye(ze({},e),{roles:this.parseRoles(e.role)})),this.totalUsers=t.total||0,this.isLoading=!1},error:()=>{this.isLoading=!1,this.displayToast("Failed to load users","error")}})}parseRoles(t){return(t||"user").toLowerCase().split(",").map(e=>e.trim()).filter(e=>e)}onSearch(){this.currentPage=0,this.loadUsers()}onFilterChange(){this.currentPage=0,this.loadUsers()}get totalPages(){return Math.ceil(this.totalUsers/this.pageSize)}prevPage(){this.currentPage>0&&(this.currentPage--,this.loadUsers())}nextPage(){this.currentPage<this.totalPages-1&&(this.currentPage++,this.loadUsers())}openUserModal(t){this.selectedUser=Ye(ze({},t),{roles:this.parseRoles(t.role)}),this.selectedRoles=[...this.selectedUser.roles||["user"]],this.showUserModal=!0,this.coachProfile=null,this.isEditingCoach=!1,this.selectedRoles.includes("coach")&&this.loadCoachProfile(t.id)}closeUserModal(){this.showUserModal=!1,this.selectedUser=null,this.coachProfile=null,this.isEditingCoach=!1}loadCoachProfile(t){this.isLoadingCoach=!0,this.apiService.getCoachProfile(t).subscribe({next:e=>{this.coachProfile=e,this.isLoadingCoach=!1},error:()=>{this.coachProfile=null,this.isLoadingCoach=!1}})}toggleUserRole(t){let e=this.selectedRoles.indexOf(t);if(e>=0){if(this.selectedRoles.length===1)return;this.selectedRoles.splice(e,1)}else this.selectedRoles.push(t)}hasSelectedRole(t){return this.selectedRoles.includes(t)}
116get rolesChanged(){let t=[...this.selectedUser?.roles||[]].sort().join(","),e=[...this.selectedRoles].sort().join(",");return t!==e}saveRoles(){if(!this.selectedUser||!this.rolesChanged)return;this.isSavingRole=!0;let t=this.selectedRoles.join(",");this.apiService.updateUserRole(this.selectedUser.id,t).subscribe({next:e=>{this.isSavingRole=!1;let i=this.parseRoles(e.role);this.selectedUser=Ye(ze({},e),{roles:i}),this.selectedRoles=[...i],this.displayToast(`Roles updated: ${i.join(", ")}`,"success"),i.includes("coach")?this.loadCoachProfile(e.id):this.coachProfile=null,this.loadUsers()},error:e=>{this.isSavingRole=!1,this.displayToast(e?.error?.error||e?.message||"Failed to update roles","error")}})}toggleApproval(){this.selectedUser&&(this.isTogglingApproval=!0,this.apiService.toggleUserApproval(this.selectedUser.id).subscribe({next:t=>{this.isTogglingApproval=!1,this.selectedUser=Ye(ze({},t),{roles:this.parseRoles(t.role)}),this.displayToast(t.isApproved?"User approved":"User unapproved","success"),this.loadUsers()},error:()=>{this.isTogglingApproval=!1,this.displayToast("Failed to update approval","error")}}))}startEditCoach(){this.coachProfile&&(this.coachForm={specializations:[...this.coachProfile.specializations||[]],certifications:this.coachProfile.certifications||"",experienceYears:this.coachProfile.experienceYears||null,hourlyRate:this.coachProfile.hourlyRate||null,bio:this.coachProfile.bio||"",isAvailable:this.coachProfile.isAvailable},this.isEditingCoach=!0)}cancelEditCoach(){this.isEditingCoach=!1}toggleSpecialization(t){let e=this.coachForm.specializations.indexOf(t);e>=0?this.coachForm.specializations.splice(e,1):this.coachForm.specializations.push(t)}saveCoachProfile(){this.selectedUser&&(this.isSavingCoach=!0,this.apiService.adminUpdateCoachProfile(this.selectedUser.id,{specializations:this.coachForm.specializations,certifications:this.coachForm.certifications,experienceYears:this.coachForm.experienceYears||void 0,hourlyRate:this.coachForm.hourlyRate||void 0,bio:this.coachForm.bio,isAvailable:this.coachForm.isAvailable}).subscribe({next:t=>{this.coachProfile=t,this.isSavingCoach=!1,this.isEditingCoach=!1,this.displayToast("Coach profile saved","success")},error:()=>{this.isSavingCoach=!1,this.displayToast("Failed to save coach profile","error")}}))}get currentUserId(){return this.authService.getCurrentUser()?.id||""}sendMessageToUser(){if(!this.selectedUser)return;let t=this.selectedUser.id;this.closeUserModal(),this.router.navigate(["/group-chat"],{queryParams:{dm:t}})}getProfilePictureUrl(t){if(!t.profilePictureUrl)return"";let e=t.profilePictureUrl;return e.startsWith("/api/drive/profile-picture/")?`${Be.apiBase.replace("/api","")}${e}`:`${Be.apiBase}/drive/profile-picture/${e}`}getInitials(t){let e=(t.fullname||t.username||"").trim();if(!e)return"?";let i=e.split(/\s+/);return i.length===1?i[0].charAt(0).toUpperCase():(i[0].charAt(0)+i[i.length-1].charAt(0)).toUpperCase()}getPrimaryRoleBadgeClass(t){return t.includes("admin")?"badge-admin":t.includes("coach")?"badge-coach":"badge-user"}getRoleBadgeClass(t){switch(t?.toLowerCase()){case"admin":return"badge-admin";case"coach":return"badge-coach";default:return"badge-user"}}displayToast(t,e){this.toastMessage=t,this.toastType=e,this.showToast=!0,setTimeout(()=>{this.showToast=!1},3e3)}static \u0275fac=function(e){return new(e||n)(ae(je),ae(it),ae(nt))};static \u0275cmp=We({type:n,selectors:[["app-user-management"]],decls:28,vars:8,consts:[[1,"page-container"],["class","toast",3,"ngClass",4,"ngIf"],[1,"page-header"],[1,"header-main"],[1,"bi","bi-people-fill"],[1,"subtitle"],["class","total-badge",4,"ngIf"],[1,"filter-bar"],[1,"search-wrap"],[1,"bi","bi-search","search-icon"],["type","text","placeholder","Search by name or username...",1,"form-control","search-input",3,"ngModelChange","input","ngModel"],[1,"form-control","role-filter",3,"ngModelChange","change","ngModel"],["value","all"],["value","admin"],["value","coach"],["value","user"],["class","loading-state",4,"ngIf"],["class","users-table-wrap",4,"ngIf"],["class","pagination-bar",4,"ngIf"],["class","modal-backdrop",3,"click",4,"ngIf"],[1,"toast",3,"ngClass"],[1,"bi",3,"ngClass"],[1,"toast-close",3,"click"],[1,"total-badge"],[1,"bi","bi-pers
116on"],[1,"loading-state"],[1,"bi","bi-hourglass-split"],[1,"users-table-wrap"],["class","users-table",4,"ngIf"],["class","empty-state",4,"ngIf"],[1,"users-table"],[1,"hide-mobile"],["class","user-row",3,"click",4,"ngFor","ngForOf"],[1,"user-row",3,"click"],[1,"user-cell"],[1,"avatar-wrap"],["class","user-avatar-sm",3,"src","error",4,"ngIf"],["class","user-initials-sm",4,"ngIf"],[1,"user-cell-info"],[1,"user-fullname"],[1,"user-username"],[1,"email-cell","hide-mobile"],[1,"role-badges"],["class","role-badge",3,"ngClass",4,"ngFor","ngForOf"],[1,"status-badge",3,"ngClass"],[1,"user-avatar-sm",3,"error","src"],[1,"user-initials-sm"],[1,"role-badge",3,"ngClass"],[1,"empty-state"],[1,"bi","bi-people"],[1,"pagination-bar"],[1,"btn-page",3,"click","disabled"],[1,"bi","bi-chevron-left"],[1,"page-info"],[1,"bi","bi-chevron-right"],[1,"modal-backdrop",3,"click"],[1,"modal-panel",3,"click"],[1,"modal-header"],[1,"bi","bi-person-gear"],[1,"close-btn",3,"click"],[1,"bi","bi-x-lg"],["class","modal-body",4,"ngIf"],[1,"modal-body"],[1,"user-profile-card"],[1,"profile-avatar-wrap"],["class","user-avatar-lg",3,"src","error",4,"ngIf"],["class","user-initials-lg",4,"ngIf"],[1,"profile-info"],[1,"profile-name-row"],[1,"profile-name"],[1,"profile-meta"],[1,"bi","bi-at"],["class","profile-meta",4,"ngIf"],["class","profile-meta text-muted",4,"ngIf"],["class","profile-dm-btn",3,"click",4,"ngIf"],[1,"section-divider"],[1,"section-label"],[1,"bi","bi-shield-check"],[1,"field-group"],[1,"field-hint"],[1,"role-checks"],["class","role-check-label",4,"ngFor","ngForOf"],[1,"role-save-row"],[1,"btn","btn-primary","btn-sm",3,"click","disabled"],[4,"ngIf"],["class","no-changes-hint",4,"ngIf"],[1,"bi","bi-person-check"],[1,"approval-row"],[1,"btn","btn-sm",3,"click","ngClass","disabled"],["class","coach-section",4,"ngIf"],[1,"user-avatar-lg",3,"error","src"],[1,"user-initials-lg"],[1,"bi","bi-envelope"],[1,"profile-meta-link",3,"href"],[1,"bi","bi-phone"],[1,"profile-meta","text-muted"],[1,"bi","bi-calendar3"],[1,"profile-dm-btn",3,"click"],[1,"bi","bi-chat-dots-fill"],[1,"role-check-label"],["type","checkbox",3,"change","checked","disabled"],[1,"bi","bi-floppy"],[1,"no-changes-hint"],[1,"coach-section"],[1,"bi","bi-trophy"],["class","btn btn-sm btn-outline",3,"click",4,"ngIf"],["class","loading-inline",4,"ngIf"],["class","coach-view",4,"ngIf"],["class","coach-edit",4,"ngIf"],[1,"btn","btn-sm","btn-outline",3,"click"],[1,"bi","bi-pencil"],[1,"loading-inline"],[1,"coach-view"],[1,"coach-detail-row"],[1,"detail-label"],[1,"spec-chips"],["class","spec-chip",4,"ngFor","ngForOf"],["class","text-muted",4,"ngIf"],["class","coach-detail-row",4,"ngIf"],[1,"spec-chip"],[1,"text-muted"],[1,"coach-edit"],[1,"field-label"],[1,"spec-checks"],["class","spec-check-label",4,"ngFor","ngForOf"],["type","number","min","0",1,"form-control",3,"ngModelChange","ngModel"],["rows","2",1,"form-control",3,"ngModelChange","ngModel"],["rows","3","maxlength","1000",1,"form-control",3,"ngModelChange","ngModel"],[1,"field-label","available-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"modal-actions"],[1,"btn","btn-secondary",3,"click"],[1,"btn","btn-primary",3,"click","disabled"],[1,"spec-check-label"],["type","checkbox",3,"change","checked"]],template:function(e,i){e&1&&(r(0,"div",0),A(1,_G,6,6,"div",1),r(2,"div",2)(3,"div",3)(4,"div")(5,"h2"),w(6,"i",4),l(7," User Management"),a(),r(8,"p",5),l(9,"Manage users, assign roles, and control access."),a()(),A(10,xG,3,2,"div",6),a()(),r(11,"div",7)(12,"div",8),w(13,"i",9),r(14,"input",10),pe("ngModelChange",function(s){return de(i.searchQuery,s)||(i.searchQuery=s),s}),S("input",function(){return i.onSearch()}),a()(),r(15,"select",11),pe("ngModelChange",function(s){return de(i.roleFilter,s)||(i.roleFilter=s),s}),S("change",function(){return i.onFilterChange()}),r(16,"option",12),l(17,"All Roles"),a(),r(18,"option",13),l(19,"Admin"),a(),r(20,"option",14),l(21,"Coach"),a(),r(22,"option",15),l(23,"User"),a()()(),A(24,vG,3,0,"div",16)(25,SG,3,2,"div",17)(26,kG,7,4,"div",18),a(),A(27,nq,9,1,"div",19)),e&2&&(d(),x("ngIf",i.showToast),d(9),x("ngIf",!i.isLoading),d(4),ce("ngModel",i.searchQuery),d(),ce("ngModel",i.roleFilter),d(9),x("ngIf",i.isLoading),d(),x("ngIf",!i.isLoading),d(),x("ngIf",i.totalPages>1),d(),x("ngIf",i.showUserModal))},dependencies:[Ge,cn,rt,$e,Wo,lt,yn,Cn,at,qi,bn,Vn,st,ha,$i,ut],styles:[".page-container[_ngcontent-%COMP%]{max-width:1100px;margin:0 auto;padding:24px 16px}.page-header[_ngcontent-%COMP%]{margin-bottom:24px}.header-main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.6rem;font-weight:700;color:var(--color-text);margin:0 0 4px;display:flex;align-items:center;gap:10px}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin:0;font-size:.9rem}.total-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:var(--color-accent-bg-subtle);color:var(--color-accent);border:1px solid var(--color-accent-bg-light);padding:5px 14px;border-radius:20px;font-size:.85rem;font-weight:600;white-space:nowrap}.filter-bar[_ngcontent-%COMP%]{display:flex;gap:10px;margin-bottom:16px;flex-wrap:wrap}.search-wrap[_ngcontent-%COMP%]{position:relative;flex:1;
116min-width:200px}.search-icon[_ngcontent-%COMP%]{position:absolute;left:12px;top:50%;transform:translateY(-50%);color:var(--color-text-muted);pointer-events:none}.search-input[_ngcontent-%COMP%]{padding-left:38px!important}.role-filter[_ngcontent-%COMP%]{width:150px;flex-shrink:0}.loading-state[_ngcontent-%COMP%]{text-align:center;padding:60px 20px;color:var(--color-text-secondary);font-size:.95rem}.users-table-wrap[_ngcontent-%COMP%]{background:var(--color-background-card);border-radius:12px;border:1px solid var(--color-border);overflow:hidden}.users-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse}.users-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{background:var(--color-surface);padding:11px 16px;text-align:left;font-size:.78rem;font-weight:700;color:var(--color-text-secondary);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--color-border)}.users-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:12px 16px;border-bottom:1px solid var(--color-border-light);color:var(--color-text);font-size:.9rem;vertical-align:middle}.user-row[_ngcontent-%COMP%]{cursor:pointer;transition:background .15s}.user-row[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.user-row[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.user-cell[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.avatar-wrap[_ngcontent-%COMP%]{flex-shrink:0}.user-avatar-sm[_ngcontent-%COMP%]{width:38px;height:38px;border-radius:50%;object-fit:cover;border:2px solid var(--color-border)}.user-initials-sm[_ngcontent-%COMP%]{width:38px;height:38px;border-radius:50%;background:var(--color-accent-bg-subtle);color:var(--color-accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.85rem;border:2px solid var(--color-accent-bg-light)}.user-cell-info[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:0}.user-fullname[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.user-username[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)}.email-cell[_ngcontent-%COMP%]{font-size:.85rem;color:var(--color-text-secondary);max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700;text-transform:capitalize;letter-spacing:.02em}.badge-admin[_ngcontent-%COMP%]{background:#fee2e2;color:#b91c1c}.badge-coach[_ngcontent-%COMP%]{background:#dbeafe;color:#1d4ed8}.badge-user[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);color:var(--color-accent)}.status-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700}.status-approved[_ngcontent-%COMP%]{background:#d1fae5;color:#065f46}.status-pending[_ngcontent-%COMP%]{background:#fef3c7;color:#92400e}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:60px 20px;color:var(--color-text-muted)}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:3rem;margin-bottom:12px;display:block;opacity:.4}.pagination-bar[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:center;gap:16px;margin-top:20px;color:var(--color-text-secondary)}.page-info[_ngcontent-%COMP%]{font-size:.88rem}.btn-page[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:8px;padding:6px 14px;cursor:pointer;color:var(--color-text);transition:all .15s}.btn-page[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);border-color:var(--color-accent)}.btn-page[_ngcontent-%COMP%]:disabled{opacity:.35;cursor:default}.modal-backdrop[_ngcontent-%COMP%]{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px}.modal-panel[_ngcontent-%COMP%]{background:var(--color-background-card);border-radius:16px;width:100%;max-width:560px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg)}.modal-sm[_ngcontent-%COMP%]{max-width:420px}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--color-border);position:sticky;top:0;background:var(--color-background-card);z-index:1}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:700;color:var(--color-text);display:flex;align-items:center;gap:8px}.close-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;color:var(--color-text-muted);padding:4px;border-radius:6px;display:flex;align-items:center;transition:color .15s,background .15s}.close-btn[_ngcontent-%COMP%]:hover{color:var(--color-text);background:var(--color-surface-hover)}.modal-body[_ngcontent-%COMP%]{padding:20px 24px}.modal-footer[_ngcontent-%COMP%]{padding:16px 24px;display:flex;gap:10px;justify-content:flex-end;border-top:1px solid var(--color-border)}.user-profile-card[_ngcontent-%COMP%]{display:flex;gap:16px;padding:16px;background:var(--color-surface);border-radius:12px;border:1px solid var(--color-border-light);margin-bottom:20px;align-items:flex-start}.profile-avatar-wrap[_ngcontent-%COMP%]{flex-shrink:0}.user-avatar-lg[_ngcontent-%COMP%]{width:68px;height:68px;border-radius:50%;object-fit:cover;border:3px solid var(--color-background-card);box-shadow:var(--shadow-sm)}.user-initials-lg[_ngcontent-%COMP%]{width:68px;height:68px;border-radius:50%;background:var(--color-accent-bg-light);color:var(--color-accent);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:1.4rem;border:3px solid var(--color-background-card);box-shadow:var(--shadow-sm)}.profile-info[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}.profile-name-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
116.profile-name[_ngcontent-%COMP%]{font-weight:700;font-size:1.05rem;color:var(--color-text)}.profile-meta[_ngcontent-%COMP%]{font-size:.83rem;color:var(--color-text-secondary);display:flex;align-items:center;gap:5px}.profile-meta[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.8rem}.profile-meta-link[_ngcontent-%COMP%]{color:var(--color-accent);text-decoration:none;word-break:break-all}.profile-meta-link[_ngcontent-%COMP%]:hover{text-decoration:underline}.profile-dm-btn[_ngcontent-%COMP%]{margin-top:.75rem;display:inline-flex;align-items:center;gap:6px;padding:8px 18px;background:var(--color-accent);color:#fff;border:none;border-radius:8px;font-size:.85rem;font-weight:600;cursor:pointer;transition:opacity .15s}.profile-dm-btn[_ngcontent-%COMP%]:hover:not(:disabled){opacity:.85}.section-divider[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin:16px 0 10px;padding-bottom:8px;border-bottom:1px solid var(--color-border-light)}.section-label[_ngcontent-%COMP%]{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--color-text-muted);display:flex;align-items:center;gap:6px}.section-label[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.field-group[_ngcontent-%COMP%]{margin-bottom:12px}.field-label[_ngcontent-%COMP%]{display:block;font-size:.82rem;font-weight:600;color:var(--color-text-secondary);margin-bottom:6px}.approval-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.saving-indicator[_ngcontent-%COMP%]{margin-top:6px;font-size:.83rem;color:var(--color-text-muted);display:flex;align-items:center;gap:5px}.coach-section[_ngcontent-%COMP%]{margin-top:4px}.loading-inline[_ngcontent-%COMP%]{color:var(--color-text-muted);font-size:.88rem;padding:8px 0}.coach-view[_ngcontent-%COMP%] .coach-detail-row[_ngcontent-%COMP%]{display:flex;gap:12px;padding:6px 0;font-size:.88rem;align-items:flex-start;border-bottom:1px solid var(--color-border-light)}.coach-view[_ngcontent-%COMP%] .coach-detail-row[_ngcontent-%COMP%]:last-child{border-bottom:none}.detail-label[_ngcontent-%COMP%]{font-weight:600;color:var(--color-text-secondary);min-width:100px;flex-shrink:0;font-size:.82rem}.spec-chips[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px}.spec-chip[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);color:var(--color-accent);padding:2px 10px;border-radius:20px;font-size:.78rem;font-weight:600}.spec-checks[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:10px}.spec-check-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;font-size:.88rem;cursor:pointer}.available-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:.88rem}.modal-actions[_ngcontent-%COMP%]{display:flex;gap:10px;justify-content:flex-end;margin-top:16px}.confirm-text[_ngcontent-%COMP%]{margin:0 0 10px;color:var(--color-text);font-size:.95rem;line-height:1.6;display:flex;align-items:center;gap:6px;flex-wrap:wrap}.hint-text[_ngcontent-%COMP%]{font-size:.83rem;color:var(--color-text-secondary);margin:6px 0 0;display:flex;align-items:flex-start;gap:5px;line-height:1.5}.hint-warning[_ngcontent-%COMP%]{color:#92400e}.toast[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;padding:12px 18px;border-radius:10px;color:#fff;font-weight:500;font-size:.9rem;display:flex;align-items:center;gap:8px;z-index:2000;box-shadow:var(--shadow-md);animation:_ngcontent-%COMP%_slideIn .2s ease}@keyframes _ngcontent-%COMP%_slideIn{0%{transform:translate(20px);opacity:0}to{transform:translate(0);opacity:1}}.toast-success[_ngcontent-%COMP%]{background:#059669}.toast-error[_ngcontent-%COMP%]{background:#dc2626}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:#fff;font-size:1.2rem;cursor:pointer;padding:0;line-height:1;opacity:.8;margin-left:4px}.toast-close[_ngcontent-%COMP%]:hover{opacity:1}.btn[_ngcontent-%COMP%]{padding:8px 16px;border-radius:8px;font-weight:500;border:none;cursor:pointer;font-size:.9rem;display:inline-flex;align-items:center;gap:6px;transition:all .2s}.btn[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:default}.btn-sm[_ngcontent-%COMP%]{padding:5px 12px;font-size:.82rem}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);color:#fff}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){opacity:.9}.btn-secondary[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover)}.btn-success[_ngcontent-%COMP%]{background:#059669;color:#fff}.btn-success[_ngcontent-%COMP%]:hover:not(:disabled){background:#047857}.btn-warning[_ngcontent-%COMP%]{background:#d97706;color:#fff}.btn-warning[_ngcontent-%COMP%]:hover:not(:disabled){background:#b45309}.btn-outline[_ngcontent-%COMP%]{background:transparent;border:1px solid var(--color-border);color:var(--color-text)}.btn-outline[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover)}.form-control[_ngcontent-%COMP%]{width:100%;padding:8px 12px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-background);color:var(--color-text);font-size:.9rem;box-sizing:border-box;transition:border-color .2s,box-shadow .2s}.form-control[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.text-muted[_ngcontent-%COMP%]{color:var(--color-text-muted)}.role-badges[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:4px}.role-checks[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:12px}.role-check-label[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;
116cursor:pointer}.role-check-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:16px;height:16px;accent-color:var(--color-accent);cursor:pointer}.role-save-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px}.field-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted);margin:0 0 10px}.no-changes-hint[_ngcontent-%COMP%]{font-size:.8rem;color:var(--color-text-muted)}@media (max-width: 640px){.hide-mobile[_ngcontent-%COMP%]{display:none}.filter-bar[_ngcontent-%COMP%]{flex-direction:column}.role-filter[_ngcontent-%COMP%]{width:100%}.user-profile-card[_ngcontent-%COMP%]{flex-direction:column;align-items:center;text-align:center}.profile-name-row[_ngcontent-%COMP%], .profile-meta[_ngcontent-%COMP%]{justify-content:center}}"]})};var i0=class n{constructor(t){this.el=t}frame=0;ngAfterViewInit(){this.frame=requestAnimationFrame(()=>this.resize())}ngOnDestroy(){this.frame&&cancelAnimationFrame(this.frame)}onInput(){this.resize()}resize(){let t=this.el.nativeElement;t.style.height="auto";let e=getComputedStyle(t),i=e.boxSizing==="border-box"?parseFloat(e.borderTopWidth)+parseFloat(e.borderBottomWidth):0;t.style.height=`${t.scrollHeight+i}px`}static \u0275fac=function(e){return new(e||n)(ae(Wl))};static \u0275dir=Gl({type:n,selectors:[["textarea","appAutoGrow",""]],hostBindings:function(e,i){e&1&&S("input",function(){return i.onInput()})}})};var iq=(n,t)=>({"toast-success":n,"toast-error":t});function oq(n,t){if(n&1){let e=L();r(0,"div",4),w(1,"i",5),r(2,"span"),l(3),a(),r(4,"button",6),S("click",function(){k(e);let o=h();return O(o.showToast=!1)}),l(5,"\xD7"),a()()}if(n&2){let e=h();x("ngClass",ga(3,iq,e.toastType==="success",e.toastType==="error")),d(),x("ngClass",e.toastType==="success"?"bi-check-circle":"bi-exclamation-circle"),d(2),R(e.toastMessage)}}function rq(n,t){if(n&1&&(r(0,"div",18),w(1,"i",19),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.activeCount," live ")}}function aq(n,t){n&1&&(r(0,"div",20),w(1,"i",21),l(2," Loading surveys... "),a())}function sq(n,t){if(n&1){let e=L();r(0,"div",22),w(1,"i",9),r(2,"p"),l(3,"No surveys yet."),a(),r(4,"button",13),S("click",function(){k(e);let o=h(2);return O(o.openBuilder())}),w(5,"i",14),l(6," Create your first survey"),a()()}}function lq(n,t){if(n&1&&(r(0,"p",40),l(1),a()),n&2){let e=h().$implicit;d(),R(e.description)}}function cq(n,t){if(n&1){let e=L();r(0,"div",25),S("click",function(){let o=k(e).$implicit,s=h(3);return O(s.openDetail(o))}),r(1,"div",26)(2,"span",27),w(3,"i",5),l(4),a(),r(5,"div",28)(6,"button",29),S("click",function(o){let s=k(e).$implicit,m=h(3);return O(m.openBuilder(s,o))}),w(7,"i",30),a(),r(8,"button",31),S("click",function(o){let s=k(e).$implicit,m=h(3);return O(m.toggleActive(s,o))}),w(9,"i",5),a(),r(10,"button",32),S("click",function(o){let s=k(e).$implicit,m=h(3);return O(m.confirmDelete(s,o))}),w(11,"i",33),a()()(),r(12,"h3",34),l(13),a(),A(14,lq,2,1,"p",35),r(15,"div",36)(16,"div",37)(17,"span",38),l(18),a(),r(19,"span",39),l(20,"responses"),a()(),r(21,"div",37)(22,"span",38),l(23),a(),r(24,"span",39),l(25,"skipped"),a()(),r(26,"div",37)(27,"span",38),l(28),a(),r(29,"span",39),l(30,"questions"),a()()()()}if(n&2){let e=t.$implicit;d(2),x("ngClass",e.active?"pill-live":"pill-draft"),d(),x("ngClass",e.active?"bi-broadcast":"bi-pause-circle"),d(),F(" ",e.active?"Live":"Inactive"," "),d(4),x("title",e.active?"Deactivate":"Activate"),d(),x("ngClass",e.active?"bi-pause-fill":"bi-play-fill"),d(4),R(e.title),d(),x("ngIf",e.description),d(4),R(e.responseCount||0),d(5),R(e.skipCount||0),d(5),R(e.questions.length)}}function dq(n,t){if(n&1&&(r(0,"div",23),A(1,cq,31,10,"div",24),a()),n&2){let e=h(2);d(),x("ngForOf",e.surveys)}}function pq(n,t){if(n&1){let e=L();we(0),r(1,"div",7)(2,"div",8)(3,"div")(4,"h2"),w(5,"i",9),l(6," Surveys"),a(),r(7,"p",10),l(8,"Ask every player a question when they open the platform, and read the answers here."),a()(),r(9,"div",11),A(10,rq,3,1,"div",12),r(11,"button",13),S("click",function(){k(e);let o=h();return O(o.openBuilder())}),w(12,"i",14),l(13," New Survey "),a()()()(),A(14,aq,3,0,"div",15)(15,sq,7,0,"div",16)(16,dq,2,1,"div",17),Pe()}if(n&2){let e=h();d(10),x("ngIf",!e.isLoading),d(4),x("ngIf",e.isLoading),d(),x("ngIf",!e.isLoading&&e.surveys.length===0),d(),x("ngIf",!e.isLoading&&e.surveys.length>0)}}function mq(n,t){if(n&1&&(r(0,"p",10),l(1),a()),n&2){let e=h(2);d(),R(e.selectedSurvey.description)}}function gq(n,t){n&1&&(r(0,"div",20),w(1,"i",21),l(2," Loading... "),a())}function uq(n,t){n&1&&(r(0,"div",22),w(1,"i",55),r(2,"p"),l(3,"No responses yet. Results appear here as players answer."),a()())}
116function fq(n,t){if(n&1&&(r(0,"div",65)(1,"div",66)(2,"span",67),l(3),a(),r(4,"span",68),l(5),r(6,"span",69),l(7),a()()(),r(8,"div",70),w(9,"div",71),a()()),n&2){let e=t.$implicit;d(3),R(e.option),d(2),F("",e.count," "),d(2),F("(",e.percentage,"%)"),d(2),le("width",e.percentage,"%")}}function hq(n,t){if(n&1&&(r(0,"div",63),A(1,fq,10,5,"div",64),a()),n&2){let e=h().$implicit;d(),x("ngForOf",e.options)}}function _q(n,t){n&1&&(r(0,"p",75),l(1,"No comments submitted."),a())}function xq(n,t){if(n&1&&(r(0,"span"),l(1),_e(2,"date"),a()),n&2){let e=h().$implicit;d(),F(" \xB7 ",be(2,1,e.submittedAt,"MMM d, y, h:mm a"),"")}}function vq(n,t){if(n&1&&(r(0,"div",76)(1,"p",77),l(2),a(),r(3,"div",78),w(4,"i",79),l(5),A(6,xq,3,4,"span",2),a()()),n&2){let e=t.$implicit;d(2),R(e.answer),d(3),F(" ",e.fullname||e.username||"Unknown user"," "),d(),x("ngIf",e.submittedAt)}}function bq(n,t){if(n&1&&(r(0,"div",72),A(1,_q,2,0,"p",73)(2,vq,7,3,"div",74),a()),n&2){let e=h().$implicit;d(),x("ngIf",e.textAnswers.length===0),d(),x("ngForOf",e.textAnswers)}}function yq(n,t){if(n&1&&(r(0,"div",56)(1,"div",57)(2,"span",58),l(3),a(),r(4,"div")(5,"div",59),l(6),a(),r(7,"div",60),l(8),a()()(),A(9,hq,2,1,"div",61)(10,bq,3,2,"div",62),a()),n&2){let e=t.$implicit,i=t.index,o=h(3);d(3),R(i+1),d(3),R(e.questionText),d(2),ui(" ",o.questionTypeLabel(e.questionType)," \xB7 ",e.answeredCount," ",e.answeredCount===1?"answer":"answers"," "),d(),x("ngIf",e.questionType!=="TEXT"),d(),x("ngIf",e.questionType==="TEXT")}}function Cq(n,t){if(n&1&&(we(0),r(1,"div",50)(2,"div",51)(3,"span",52),l(4),a(),r(5,"span",53),l(6,"Responses"),a()(),r(7,"div",51)(8,"span",52),l(9),a(),r(10,"span",53),l(11),a()(),r(12,"div",51)(13,"span",52),l(14),a(),r(15,"span",53),l(16,"Skipped, not yet answered"),a()()(),A(17,uq,4,0,"div",16)(18,yq,11,7,"div",54),Pe()),n&2){let e=h(2);d(4),R(e.results.totalResponses),d(5),F("",e.results.responseRate,"%"),d(2),F("of ",e.results.eligibleUsers," users"),d(3),R(e.results.totalSkipped),d(3),x("ngIf",e.results.totalResponses===0),d(),x("ngForOf",e.results.questions)}}function wq(n,t){n&1&&(r(0,"div",22),w(1,"i",55),r(2,"p"),l(3,"No responses collected yet."),a()())}function Pq(n,t){if(n&1&&(r(0,"th"),l(1),a()),n&2){let e=t.$implicit;d(),R(e.questionText)}}function Mq(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h().$implicit;d(),F("@",e.username,"")}}function Sq(n,t){if(n&1&&(r(0,"span",89),l(1),a()),n&2){let e=h().$implicit;d(),R(e.email)}}function kq(n,t){n&1&&(r(0,"span",92),l(1,"\u2014"),a())}function Oq(n,t){if(n&1&&(r(0,"span",93),l(1),a()),n&2){let e=t.$implicit;d(),R(e)}}function Eq(n,t){if(n&1&&(r(0,"td"),A(1,kq,2,0,"span",90)(2,Oq,2,1,"span",91),a()),n&2){let e=t.$implicit;d(),x("ngIf",e.values.length===0),d(),x("ngForOf",e.values)}}function Tq(n,t){if(n&1&&(r(0,"tr")(1,"td")(2,"div",85)(3,"span",86),l(4),a(),A(5,Mq,2,1,"span",87)(6,Sq,2,1,"span",87),a()(),r(7,"td",88),l(8),_e(9,"date"),a(),A(10,Eq,3,2,"td",84),r(11,"td",83),l(12),a()()),n&2){let e=t.$implicit,i=h(4);d(4),R(i.respondentName(e)),d(),x("ngIf",e.username),d(),x("ngIf",e.email),d(2),R(be(9,6,e.submittedAt,"MMM d, y, h:mm a")),d(2),x("ngForOf",e.answers),d(2),R(e.skipsBeforeAnswer||0)}}function Iq(n,t){if(n&1&&(r(0,"div",81)(1,"table",82)(2,"thead")(3,"tr")(4,"th"),l(5,"Respondent"),a(),r(6,"th",83),l(7,"Submitted"),a(),A(8,Pq,2,1,"th",84),r(9,"th",83),l(10,"Skips"),a()()(),r(11,"tbody"),A(12,Tq,13,9,"tr",84),a()()()),n&2){let e=h(3);d(8),x("ngForOf",e.rawResponses[0].answers),d(4),x("ngForOf",e.rawResponses)}}function Aq(n,t){if(n&1&&(we(0),A(1,wq,4,0,"div",16)(2,Iq,13,2,"div",80),Pe()),n&2){let e=h(2);d(),x("ngIf",e.rawResponses.length===0),d(),x("ngIf",e.rawResponses.length>0)}}function Dq(n,t){if(n&1){let e=L();we(0),r(1,"div",7)(2,"button",41),S("click",function(){k(e);let o=h();return O(o.closeDetail())}),w(3,"i",42),l(4," All surveys"),a(),r(5,"div",8)(6,"div")(7,"h2"),l(8),a(),A(9,mq,2,1,"p",43),a(),r(10,"div",11)(11,"button",44),S("click",function(o){k(e);let s=h();return O(s.openBuilder(s.selectedSurvey,o))}),w(12,"i",30),l(13," Edit "),a(),r(14,"button",45),S("click",function(){k(e);let o=h();return O(o.exportCsv())}),w(15,"i",5),l(16),a()()()(),r(17,"div",46)(18,"button",47),S("click",function(){k(e);let o=h();return O(o.switchTab("results"))}),w(19,"i",48),l(20," Results "),a(),r(21,"button",47),S("click",function(){k(e);let o=h();return O(o.switchTab("raw"))}),w(22,"i",49),l(23," Raw Data "),a()(),A(24,gq,3,0,"div",15)(25,Cq,19,6,"ng-container",2)(26,Aq,3,2,"ng-container",2),Pe()}if(n&2){let e=h();d(8),R(e.selectedSurvey.title),d(),x("ngIf",e.selectedSurvey.description),d(5),x("disabled",e.isExporting),d(),x("ngClass",e.isExporting?"bi-hourglass-split":"bi-download"),d(),F(" ",e.isExporting?"Exporting...":"Export CSV"," "),d(2),te("active",e.detailTab==="results"),d(3),te("active",e.detailTab==="raw"),d(3),x("ngIf",e.isLoadingDetail),d(),x("ngIf",e.detailTab==="results"&&!e.isLoadingDetail&&e.results),d(),x("ngIf",e.detailTab==="raw"&&!e.isLoadingDetail)}}function Rq(n,t){if(n&1&&(r(0,"option",131),l(1),a()),n&2){let e=t.$implicit;x("value",e.value),d(),R(e.label)}}function Bq(n,t){if(n&1){let e=L();r(0,"div",135)(1,"textarea",136),S("keydown.enter",function(o){return k(e),O(o.preventDefault())})("ngModelChange",function(o){let s=k(e).index,m=h(2).$implicit;return O(m.options[s]=o)}),a(),r(2,"button",137),S("click",function(){let o=k(e).index,s=h(2).$implicit,m=h(2);return O(m.removeOption(s,o))}),w(3,"i",138),a()()}if(n&2){let e=t.index,i=h(2).$implicit;d(),Kt("placeholder","Choice ",e+1,""),x("ngModel",i.options[e]),d(),x("disabled",i.options.length<=2)}}function Nq(n,t){if(n&1){let e=L();r(0,"div",132),A(1,Bq,4,4,"div",133),r(2,"button",134),S("click",function(){k(e);let o=h().$implicit,s=h(2);return O(s.addOption(o))}),w(3,"i",14),l(4," Add choice"),a()()}if(n&2){let e=h().$implicit,i=h(2);d(),x("ngForOf",e.options)("ngForTrackBy",i.trackByIndex)}}function Vq(n,t){if(n&1){let e=L();r(0,"div",115)(1,"div",116)(2,"span",117),l(3),a(),r(4,"div",118)(5,"button",119),S("click",function(){let o=k(e).index,s=h(2);return O(s.moveQuestion(o,-1))}),w(6,"i",120),a(),r(7,"button",121),S("click",function(){let o=k(e).index,s=h(2);return O(s.moveQuestion(o,1))}),w(8,"i",122),a(),r(9,"button",123),S("click",function(){let o=k(e).index,s=h(2);return O(s.removeQuestion(o))}),w(10,"i",33),a()()(),r(11,"textarea",124),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.questionText,o)||(s.questionText=o),O(o)}),a(),r(12,"div",125)(13,"select",126),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.questionType,o)||(s.questionType=o),O(o)}),S("ngModelChange",function(){let o=k(e).$implicit,s=h(2);return O(s.onTypeChange(o))}),A(14,Rq,2,2,"option",127),a(),r(15,"label",128)(16,"input",107),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.required,o)||(s.required=o),O(o)}),a(),r(17,"span"),l(18,"Required"),a()()(),r(19,"textarea",129),pe("ngModelChange",function(o){let s=k(e).$implicit;return de(s.helpText,o)||(s.helpText=o),O(o)}),a(),A(20,Nq,5,2,"div",130),a()}if(n&2){let e=t.$implicit,i=t.index,o=h(2);d(3),F("Q",i+1,""),d(2),x("disabled",i===0),d(2),x("disabled",i===o.draft.questions.length-1),d(4),ce("ngModel",e.questionText),d(2),ce("ngModel",e.questionType),d(),x("ngForOf",o.questionTypes),d(2),ce("ngModel",e.required),d(3),ce("ngModel",e.helpText),d(),x("ngIf",e.questionType!=="TEXT")}}function Lq(n,t){if(n&1){let e=L();r(0,"div",94),S("click",function(){k(e);let o=h();return O(o.closeBuilder())}),r(1,"div",95),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",96)(3,"h3"),w(4,"i",97),l(5),a(),r(6,"button",98),S("click",function(){k(e);let o=h();return O(o.closeBuilder())}),l(7,"\xD7"),a()(),r(8,"div",99)(9,"div",100)(10,"label"),l(11,"Title "),r(12,"span",101),l(13,"*"),a()(),r(14,"textarea",102),S("keydown.enter",function(o){return k(e),O(o.preventDefault())}),pe("ngModelChange",function(o){k(e);let s=h();return de(s.draft.title,o)||(s.draft.title=o),O(o)}),a()(),r(15,"div",100)(16,"label"),l(17,"Intro text"),a(),r(18,"textarea",103),pe("ngModelChange",function(o){k(e);let s=h();return de(s.draft.description,o)||(s.draft.description=o),O(o)}),a()(),r(19,"div",100)(20,"label"),l(21,"Closing note"),a(),r(22,"textarea",104),pe("ngModelChange",function(o){k(e);let s=h();return de(s.draft.closingNote,o)||(s.draft.closingNote=o),O(o)}),a()(),r(23,"div",105)(24,"label",106)(25,"input",107),pe("ngModelChange",function(o){k(e);let s=h();return de(s.draft.allowSkip,o)||(s.draft.allowSkip=o),O(o)}),a(),r(26,"span"),l(27,'Allow "Skip for now"'),a()(),r(28,"p",108),l(29," When off, users must answer before they can use the platform. When on, skipping is recorded and the prompt returns on their next app open. "),a()(),r(30,"div",105)(31,"label",106)(32,"input",107),pe("ngModelChange",function(o){k(e);let s=h();return de(s.draft.active,o)||(s.draft.active=o),O(o)}),a(),r(33,"span"),l(34,"Live \u2014 prompt every logged-in user"),a()()(),r(35,"div",109)(36,"div",110)(37,"h4"),l(38,"Questions"),a(),r(39,"button",111),S("click",function(){k(e);let o=h();return O(o.addQuestion())}),w(40,"i",14),l(41," Add question"),a()(),A(42,Vq,21,9,"div",112),a()(),r(43,"div",113)(44,"button",44),S("click",function(){k(e);let o=h();return O(o.closeBuilder())}),l(45,"Cancel"),a(),r(46,"button",114),S("click",function(){k(e);let o=h();return O(o.saveSurvey())}),w(47,"i",5),l(48),a()()()()}if(n&2){let e=h();d(5),F(" ",e.draft.id?"Edit Survey":"New Survey",""),d(9),ce("ngModel",e.draft.title),d(4),ce("ngModel",e.draft.description),d(4),ce("ngModel",e.draft.closingNote),d(3),ce("ngModel",e.draft.allowSkip),d(7),ce("ngModel",e.draft.active),d(10),x("ngForOf",e.draft.questions)("ngForTrackBy",e.trackByIndex),d(4),x("disabled",e.isSaving),d(),x("ngClass",e.isSaving?"bi-hourglass-split":"bi-check-lg"),d(),F(" ",e.isSaving?"Saving...":"Save Survey"," ")}}function Fq(n,t){if(n&1){let e=L();r(0,"div",94),S("click",function(){k(e);let o=h();return O(o.cancelDelete())}),r(1,"div",139),S("click",function(o){return k(e),O(o.stopPropagation())}),r(2,"div",96)(3,"h3"),w(4,"i",140),l(5," Delete survey"),a(),r(6,"button",98),S("click",function(){k(e);let o=h();return O(o.cancelDelete())}),l(7,"\xD7"),a()(),r(8,"div",99)(9,"p"),l(10," Delete "),r(11,"strong"),l(12),a(),l(13),a()(),r(14,"div",113)(15,"button",44),S("click",function(){k(e);let o=h();return O(o.cancelDelete())}),l(16,"Cancel"),a(),r(17,"button",141),S("click",function(){k(e);let o=h();return O(o.deleteSurvey())}),w(18,"i",33),l(19," Delete"),a()()()()}if(n&2){let e=h();
116d(12),R(e.pendingDelete.title),d(),Se(" and all ",e.pendingDelete.responseCount||0," collected ",(e.pendingDelete.responseCount||0)===1?"response":"responses","? This cannot be undone. ")}}var o0=class n{constructor(t,e,i){this.authService=t;this.apiService=e;this.router=i}surveys=[];isLoading=!1;selectedSurvey=null;detailTab="results";results=null;rawResponses=[];isLoadingDetail=!1;showBuilder=!1;draft=null;isSaving=!1;isExporting=!1;pendingDelete=null;toastMessage="";toastType="success";showToast=!1;questionTypes=[{value:"SINGLE_CHOICE",label:"Single choice"},{value:"MULTI_CHOICE",label:"Multiple choice"},{value:"TEXT",label:"Free text"}];ngOnInit(){if(!this.authService.hasRole("admin")){this.router.navigate(["/booking"]);return}this.loadSurveys()}trackByIndex(t){return t}loadSurveys(){this.isLoading=!0,this.apiService.getAdminSurveys().subscribe({next:t=>{this.surveys=t||[],this.isLoading=!1},error:()=>{this.isLoading=!1,this.displayToast("Failed to load surveys","error")}})}get activeCount(){return this.surveys.filter(t=>t.active).length}toggleActive(t,e){e.stopPropagation(),this.apiService.setSurveyActive(t.id,!t.active).subscribe({next:i=>{t.active=i.active,this.displayToast(i.active?"Survey is now live for all users":"Survey deactivated","success")},error:i=>this.displayToast(this.errorText(i,"Failed to update survey status"),"error")})}openDetail(t){this.selectedSurvey=t,this.detailTab="results",this.results=null,this.rawResponses=[],this.loadResults()}closeDetail(){this.selectedSurvey=null,this.results=null,this.rawResponses=[]}switchTab(t){this.detailTab=t,t==="results"&&!this.results&&this.loadResults(),t==="raw"&&this.rawResponses.length===0&&this.loadRawResponses()}loadResults(){this.selectedSurvey?.id&&(this.isLoadingDetail=!0,this.apiService.getSurveyResults(this.selectedSurvey.id).subscribe({next:t=>{this.results=t,this.isLoadingDetail=!1},error:()=>{this.isLoadingDetail=!1,this.displayToast("Failed to load results","error")}}))}loadRawResponses(){this.selectedSurvey?.id&&(this.isLoadingDetail=!0,this.apiService.getSurveyRawResponses(this.selectedSurvey.id).subscribe({next:t=>{this.rawResponses=t||[],this.isLoadingDetail=!1},error:()=>{this.isLoadingDetail=!1,this.displayToast("Failed to load responses","error")}}))}exportCsv(){if(!this.selectedSurvey?.id||this.isExporting)return;this.isExporting=!0;let t=this.selectedSurvey.title;this.apiService.exportSurveyResponses(this.selectedSurvey.id).subscribe({next:e=>{this.isExporting=!1;let i=window.URL.createObjectURL(e),o=document.createElement("a");o.href=i,o.download=`${this.slugify(t)}-responses.csv`,o.click(),window.URL.revokeObjectURL(i)},error:()=>{this.isExporting=!1,this.displayToast("Failed to export responses","error")}})}slugify(t){return(t||"survey").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/(^-|-$)/g,"")||"survey"}openBuilder(t,e){e?.stopPropagation(),this.draft=t?JSON.parse(JSON.stringify(t)):{title:"",description:"",closingNote:"",active:!1,allowSkip:!0,questions:[this.blankQuestion()]},this.showBuilder=!0}closeBuilder(){this.showBuilder=!1,this.draft=null}blankQuestion(){return{questionText:"",questionType:"SINGLE_CHOICE",options:["",""],required:!0,helpText:""}}addQuestion(){this.draft?.questions.push(this.blankQuestion())}removeQuestion(t){this.draft?.questions.splice(t,1)}moveQuestion(t,e){if(!this.draft)return;let i=t+e;if(i<0||i>=this.draft.questions.length)return;let o=this.draft.questions;[o[t],o[i]]=[o[i],o[t]]}onTypeChange(t){t.questionType==="TEXT"?t.options=[]:t.options.length===0&&(t.options=["",""])}addOption(t){t.options.push("")}removeOption(t,e){t.options.splice(e,1)}saveSurvey(){if(!this.draft||this.isSaving)return;let t=this.draft;if(!t.title.trim()){this.displayToast("Survey title is required","error");return}let e=f=>f.replace(/[\r\n]+/g," ").trim(),i=t.questions.filter(f=>f.questionText.trim()).map(f=>Ye(ze({},f),{questionText:f.questionText.trim(),options:f.questionType==="TEXT"?[]:f.options.map(e).filter(v=>v)}));if(i.length===0){this.displayToast("Add at least one question","error");return}let o=i.find(f=>f.questionType!=="TEXT"&&f.options.length<2);if(o){this.displayToast(`"${o.questionText}" needs at least two choices`,"error");return}let s=Ye(ze({},t),{title:e(t.title),questions:i});this.isSaving=!0,(t.id?this.apiService.updateSurvey(t.id,s):this.apiService.createSurvey(s)).subscribe({next:()=>{this.isSaving=!1,this.closeBuilder(),this.displayToast(t.id?"Survey updated":"Survey created","success"),this.loadSurveys(),this.selectedSurvey?.id===t.id&&(this.results=null,this.rawResponses=[],this.loadResults())},error:f=>{this.isSaving=!1,this.displayToast(this.errorText(f,"Failed to save survey"),"error")}})}confirmDelete(t,e){e.stopPropagation(),this.pendingDelete=t}cancelDelete(){this.pendingDelete=null}deleteSurvey(){let t=this.pendingDelete;t?.id&&this.apiService.deleteSurvey(t.id).subscribe({next:()=>{this.pendingDelete=null,this.selectedSurvey?.id===t.id&&this.closeDetail(),this.displayToast("Survey deleted","success"),this.loadSurveys()},error:()=>{this.pendingDelete=null,this.displayToast("Failed to delete survey","error")}})}questionTypeLabel(t){return this.questionTypes.find(e=>e.value===t)?.label||t}respondentName(t){return t.fullname||t.username||"Unknown user"}errorText(t,e){return t?.payload?.error||t?.error?.error||e}displayToast(t,e){this.toastMessage=t,this.toastType=e,this.showToast=!0,setTimeout(()=>{this.showToast=!1},3e3)}static \u0275fac=function(e){return new(e||n)(ae(je),ae(it),ae(nt))};static \u0275cmp=We({type:n,selectors:[["app-survey-management"]],decls:6,vars:5,consts:[[1,"page-container"],["class","toast",3,"ngClass",4,"ngIf"],[4,"ngIf"],["class","modal-overlay",3,"click",4,"ngIf"],[1,"toast",3,"ngClass"],[1,"bi",3,"ngClass"],[1,"toast-close",3,"click"],[1,"page-header"],[1,"header-main"],[1,"bi","bi-clipboard-data"],[1,"subtitle"],[1,"header-actions"],["class","total-badge",4,"ngIf"],[1,"btn-primary",3,"click"],[1,"bi","bi-plus-lg"],["class","loading-state",4,"ngIf"],["class","empty-state",4,"ngIf"],["class","survey-grid",4,"ngIf"],[1,"total-badge"],[1,"bi","bi-broadcast"],[1,"loading-state"],[1,"bi","bi-hourglass-split"],[1,"empty-state"],[1,"survey-grid"],["class","survey-card",3,"click",4,"ngFor","ngForOf"],[1,"survey-card",3,"click"],[1,"card-top"],[1,"status-pill",3,"ngClass"],[1,"card-menu"],["title","Edit survey",1,"icon-btn",3,"click"],[1,"bi","bi-pencil"],[1,"icon-btn",3,"click","title"],["title","Delete survey",1,"icon-btn","icon-danger",3,"click"],[1,"bi","bi-trash"],[1,"card-title"],["class","card-description",4,"ngIf"],[1,"card-stats"],[1,"card-stat"],[1,"stat-value"],[1,"stat-label"],[1,"card-description"],[1,"btn-back",3,"click"],[1,"bi","bi-arrow-left"],["class","subtitle",4,"ngIf"],[1,"btn-secondary",3,"click"],[1,"btn-secondary",3,"click","disabled"],[1,"tab-bar"],[1,"tab-btn",3,"click"],[1,"bi","bi-bar-chart"],[1,"bi","bi-table"],[1,"stat-tiles"],[1,"stat-tile"],[1,"tile-value"],[1,"tile-label"],["class","result-block",4,"ngFor","ngForOf"],[1,"bi","bi-inbox"],[1,"result-block"],[1,"result-question"],[1,"question-number"],[1,"question-title"],[1,"question-meta"],["class","bars",4,"ngIf"],["class","text-answers",4,"ngIf"],[1,"bars"],["class","bar-row",4,"ngFor","ngForOf"],[1,"bar-row"],[1,"bar-head"],[1,"bar-label"],[1,"bar-value"],[1,"bar-percent"],[1,"bar-track"],[1,"bar-fill"],[1,"text-answers"],["class","no-answers",4,"ngIf"],["class","text-answer-card",4,"ngFor","ngForOf"],[1,"no-answers"],[1,"text-answer-card"],[1,"answer-body"],[1,"answer-meta"],[1,"bi","bi-pers
116on-circle"],["class","raw-table-wrap",4,"ngIf"],[1,"raw-table-wrap"],[1,"raw-table"],[1,"hide-mobile"],[4,"ngFor","ngForOf"],[1,"respondent"],[1,"respondent-name"],["class","respondent-sub",4,"ngIf"],[1,"hide-mobile","nowrap"],[1,"respondent-sub"],["class","no-value",4,"ngIf"],["class","value-chip",4,"ngFor","ngForOf"],[1,"no-value"],[1,"value-chip"],[1,"modal-overlay",3,"click"],[1,"modal","builder-modal",3,"click"],[1,"modal-header"],[1,"bi","bi-clipboard-plus"],[1,"close-btn",3,"click"],[1,"modal-body"],[1,"field"],[1,"required-mark"],["appAutoGrow","","rows","1","placeholder","e.g. Interest Check - Late Night Open Play",1,"form-control","auto-grow",3,"keydown.enter","ngModelChange","ngModel"],["appAutoGrow","","rows","3","placeholder","Explain what you're asking about and why.",1,"form-control","auto-grow",3,"ngModelChange","ngModel"],["appAutoGrow","","rows","2","placeholder","e.g. Your feedback will help us decide.",1,"form-control","auto-grow",3,"ngModelChange","ngModel"],[1,"toggle-row"],[1,"switch-label"],["type","checkbox",3,"ngModelChange","ngModel"],[1,"toggle-help"],[1,"questions-section"],[1,"section-head"],[1,"btn-secondary","btn-sm",3,"click"],["class","question-editor",4,"ngFor","ngForOf","ngForTrackBy"],[1,"modal-footer"],[1,"btn-primary",3,"click","disabled"],[1,"question-editor"],[1,"editor-head"],[1,"editor-number"],[1,"editor-tools"],["title","Move up",1,"icon-btn",3,"click","disabled"],[1,"bi","bi-arrow-up"],["title","Move down",1,"icon-btn",3,"click","disabled"],[1,"bi","bi-arrow-down"],["title","Remove question",1,"icon-btn","icon-danger",3,"click"],["appAutoGrow","","rows","2","placeholder","Question text",1,"form-control","auto-grow",3,"ngModelChange","ngModel"],[1,"editor-row"],[1,"form-control",3,"ngModelChange","ngModel"],[3,"value",4,"ngFor","ngForOf"],[1,"switch-label","compact"],["appAutoGrow","","rows","1","placeholder","Helper text (optional)",1,"form-control","auto-grow",3,"ngModelChange","ngModel"],["class","options-editor",4,"ngIf"],[3,"value"],[1,"options-editor"],["class","option-row",4,"ngFor","ngForOf","ngForTrackBy"],[1,"btn-link",3,"click"],[1,"option-row"],["appAutoGrow","","rows","1",1,"form-control","auto-grow",3,"keydown.enter","ngModelChange","placeholder","ngModel"],["title","Remove choice",1,"icon-btn","icon-danger",3,"click","disabled"],[1,"bi","bi-x-lg"],[1,"modal","confirm-modal",3,"click"],[1,"bi","bi-exclamation-triangle"],[1,"btn-danger",3,"click"]],template:function(e,i){e&1&&(r(0,"div",0),A(1,oq,6,6,"div",1)(2,pq,17,4,"ng-container",2)(3,Dq,27,12,"ng-container",2)(4,Lq,49,11,"div",3)(5,Fq,20,3,"div",3),a()),e&2&&(d(),x("ngIf",i.showToast),d(),x("ngIf",!i.selectedSurvey),d(),x("ngIf",i.selectedSurvey),d(),x("ngIf",i.showBuilder&&i.draft),d(),x("ngIf",i.pendingDelete))},dependencies:[Ge,cn,rt,$e,Wo,lt,yn,Cn,at,bn,Vn,st,ut,i0],styles:[".page-container[_ngcontent-%COMP%]{max-width:1100px;margin:0 auto;padding:24px 16px}.toast[_ngcontent-%COMP%]{position:fixed;top:20px;right:20px;padding:12px 18px;border-radius:10px;color:#fff;font-weight:500;font-size:.9rem;display:flex;align-items:center;gap:8px;z-index:2000;box-shadow:var(--shadow-md);animation:_ngcontent-%COMP%_slideIn .2s ease}@keyframes _ngcontent-%COMP%_slideIn{0%{transform:translate(20px);opacity:0}to{transform:translate(0);opacity:1}}.toast-success[_ngcontent-%COMP%]{background:#059669}.toast-error[_ngcontent-%COMP%]{background:#dc2626}.toast-close[_ngcontent-%COMP%]{background:none;border:none;color:#fff;font-size:1.2rem;cursor:pointer;padding:0;line-height:1;opacity:.8;margin-left:4px}.toast-close[_ngcontent-%COMP%]:hover{opacity:1}.page-header[_ngcontent-%COMP%]{margin-bottom:20px}.header-main[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;flex-wrap:wrap}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%]{font-size:1.6rem;font-weight:700;color:var(--color-text);margin:0 0 4px;display:flex;align-items:center;gap:10px}.page-header[_ngcontent-%COMP%] h2[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{color:var(--color-accent)}.subtitle[_ngcontent-%COMP%]{color:var(--color-text-secondary);margin:0;font-size:.9rem;max-width:60ch}.header-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.total-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:var(--color-accent-bg-subtle);color:var(--color-accent);border:1px solid var(--color-accent-bg-light);padding:5px 14px;border-radius:20px;font-size:.85rem;font-weight:600;white-space:nowrap}.btn-back[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-secondary);font-size:.85rem;font-family:inherit;cursor:pointer;padding:0 0 12px;display:inline-flex;align-items:center;gap:6px}.btn-back[_ngcontent-%COMP%]:hover{color:var(--color-accent)}.btn-primary[_ngcontent-%COMP%], .btn-secondary[_ngcontent-%COMP%], .btn-danger[_ngcontent-%COMP%]{padding:8px 16px;border-radius:8px;font-weight:500;font-size:.9rem;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:all .2s}.btn-primary[_ngcontent-%COMP%]{background:var(--color-accent);border:1px solid var(--color-accent);color:#fff}.btn-primary[_ngcontent-%COMP%]:hover:not(:disabled){opacity:.9}.btn-secondary[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover)}.btn-danger[_ngcontent-%COMP%]{background:#dc2626;border:1px solid #dc2626;color:#fff}.btn-danger[_ngcontent-%COMP%]:hover:not(:disabled){background:#b91c1c}.btn-primary[_ngcontent-%COMP%]:disabled, .btn-secondary[_ngcontent-%COMP%]:disabled, .btn-danger[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:default}.btn-sm[_ngcontent-%COMP%]{padding:5px 12px;font-size:.82rem}.btn-link[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-accent);font-size:.85rem;font-family:inherit;cursor:pointer;padding:4px 0;display:inline-flex;align-items:center;gap:6px}.icon-btn[_ngcontent-%COMP%]{background:none;border:1px solid transparent;color:var(--color-text-muted);cursor:pointer;width:30px;height:30px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;transition:all .15s}.icon-btn[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);color:var(--color-text);border-color:var(--color-border)}.icon-btn[_ngcontent-%COMP%]:disabled{opacity:.3;cursor:default}.icon-danger[_ngcontent-%COMP%]:hover:not(:disabled){color:#dc2626;border-color:var(--color-danger-bg-medium)}.loading-state[_ngcontent-%COMP%]{text-align:center;padding:40px 0;color:var(--color-text-secondary)}.empty-state[_ngcontent-%COMP%]{text-align:center;padding:48px 20px;color:var(--color-text-secondary)}.empty-state[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:2.4rem;color:var(--color-text-muted);display:block;margin-bottom:12px}.empty-state[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0 0 16px}.survey-grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px}.survey-card[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:14px;padding:16px;cursor:pointer;transition:border-color .15s,transform .15s}.survey-card[_ngcontent-%COMP%]:hover{border-color:var(--color-accent);transform:translateY(-2px)}.card-top[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:10px}.status-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:3px 10px;border-radius:20px;font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
116.pill-live[_ngcontent-%COMP%]{background:var(--color-success-bg-subtle);color:var(--color-success);border:1px solid var(--color-success-bg-medium)}.pill-draft[_ngcontent-%COMP%]{background:var(--color-surface);color:var(--color-text-muted);border:1px solid var(--color-border)}.card-menu[_ngcontent-%COMP%]{display:flex;gap:2px}.card-title[_ngcontent-%COMP%]{margin:0 0 6px;font-size:1rem;font-weight:700;color:var(--color-text);line-height:1.35}.card-description[_ngcontent-%COMP%]{margin:0 0 14px;font-size:.85rem;color:var(--color-text-secondary);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card-stats[_ngcontent-%COMP%]{display:flex;gap:18px;padding-top:12px;border-top:1px solid var(--color-border-light)}.card-stat[_ngcontent-%COMP%]{display:flex;flex-direction:column}.stat-value[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:700;color:var(--color-text);line-height:1.2}.stat-label[_ngcontent-%COMP%]{font-size:.72rem;color:var(--color-text-muted);text-transform:uppercase;letter-spacing:.03em}.tab-bar[_ngcontent-%COMP%]{display:flex;gap:4px;border-bottom:1px solid var(--color-border);margin-bottom:20px}.tab-btn[_ngcontent-%COMP%]{background:none;border:none;border-bottom:2px solid transparent;color:var(--color-text-secondary);padding:10px 16px;font-size:.9rem;font-weight:600;font-family:inherit;cursor:pointer;display:inline-flex;align-items:center;gap:7px;margin-bottom:-1px}.tab-btn[_ngcontent-%COMP%]:hover{color:var(--color-text)}.tab-btn.active[_ngcontent-%COMP%]{color:var(--color-accent);border-bottom-color:var(--color-accent)}.stat-tiles[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin-bottom:24px}.stat-tile[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:12px;padding:16px;display:flex;flex-direction:column;gap:4px}.tile-value[_ngcontent-%COMP%]{font-size:1.8rem;font-weight:700;color:var(--color-text);line-height:1.1}.tile-label[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted)}.result-block[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:14px;padding:18px;margin-bottom:14px}.result-question[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;margin-bottom:16px}.question-number[_ngcontent-%COMP%]{flex-shrink:0;width:24px;height:24px;border-radius:50%;background:var(--color-accent-bg-light);color:var(--color-accent);font-size:.78rem;font-weight:700;display:flex;align-items:center;justify-content:center}.question-title[_ngcontent-%COMP%]{font-size:.98rem;font-weight:600;color:var(--color-text);line-height:1.4}.question-meta[_ngcontent-%COMP%]{font-size:.78rem;color:var(--color-text-muted);margin-top:3px}.bars[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:14px;padding-left:34px}.bar-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:5px}.bar-label[_ngcontent-%COMP%]{font-size:.88rem;color:var(--color-text)}.bar-value[_ngcontent-%COMP%]{font-size:.85rem;font-weight:600;color:var(--color-text);white-space:nowrap}.bar-percent[_ngcontent-%COMP%]{font-weight:400;color:var(--color-text-muted)}.bar-track[_ngcontent-%COMP%]{height:10px;border-radius:5px;background:var(--color-surface);overflow:hidden}.bar-fill[_ngcontent-%COMP%]{height:100%;border-radius:0 5px 5px 0;background:var(--color-accent);min-width:0;transition:width .4s ease}.text-answers[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px;padding-left:34px}.no-answers[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--color-text-muted)}.text-answer-card[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:10px;padding:12px 14px}.answer-body[_ngcontent-%COMP%]{margin:0 0 8px;font-size:.88rem;color:var(--color-text);line-height:1.55;white-space:pre-wrap}.answer-meta[_ngcontent-%COMP%]{font-size:.75rem;color:var(--color-text-muted);display:flex;align-items:center;gap:5px}.raw-table-wrap[_ngcontent-%COMP%]{background:var(--color-background-card);border:1px solid var(--color-border);border-radius:14px;overflow-x:auto}.raw-table[_ngcontent-%COMP%]{width:100%;border-collapse:collapse;font-size:.86rem;min-width:640px}.raw-table[_ngcontent-%COMP%] th[_ngcontent-%COMP%]{text-align:left;padding:12px 14px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-muted);border-bottom:1px solid var(--color-border);white-space:nowrap}.raw-table[_ngcontent-%COMP%] td[_ngcontent-%COMP%]{padding:12px 14px;border-bottom:1px solid var(--color-border-light);color:var(--color-text);vertical-align:top}.raw-table[_ngcontent-%COMP%] tr[_ngcontent-%COMP%]:last-child td[_ngcontent-%COMP%]{border-bottom:none}.respondent[_ngcontent-%COMP%]{display:flex;flex-direction:column}
116.respondent-name[_ngcontent-%COMP%]{font-weight:600}.respondent-sub[_ngcontent-%COMP%]{font-size:.76rem;color:var(--color-text-muted)}.nowrap[_ngcontent-%COMP%]{white-space:nowrap}.no-value[_ngcontent-%COMP%]{color:var(--color-text-muted)}.value-chip[_ngcontent-%COMP%]{display:inline-block;background:var(--color-accent-bg-subtle);color:var(--color-accent);border:1px solid var(--color-accent-bg-light);border-radius:6px;padding:2px 8px;font-size:.78rem;margin:0 4px 4px 0}.modal-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;box-sizing:border-box;background:#0000008c;display:flex;align-items:center;justify-content:center;z-index:1000;padding:16px;overflow:hidden;overscroll-behavior:contain}.modal[_ngcontent-%COMP%]{background:var(--color-background-card);border-radius:16px;width:100%;max-width:620px;max-height:90vh;display:flex;flex-direction:column;box-shadow:var(--shadow-lg);overflow:hidden}.confirm-modal[_ngcontent-%COMP%]{max-width:440px}.modal-header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;padding:18px 24px;border-bottom:1px solid var(--color-border)}.modal-header[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:700;color:var(--color-text);display:flex;align-items:center;gap:8px}.close-btn[_ngcontent-%COMP%]{background:none;border:none;cursor:pointer;color:var(--color-text-muted);font-size:1.4rem;line-height:1;padding:4px 8px;border-radius:6px}.close-btn[_ngcontent-%COMP%]:hover{color:var(--color-text);background:var(--color-surface-hover)}.modal-body[_ngcontent-%COMP%]{padding:20px 24px;overflow-y:auto;flex:1}.modal-body[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;color:var(--color-text-secondary);font-size:.9rem;line-height:1.6}.modal-footer[_ngcontent-%COMP%]{padding:16px 24px;display:flex;gap:10px;justify-content:flex-end;border-top:1px solid var(--color-border)}.field[_ngcontent-%COMP%]{margin-bottom:16px}.field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:block;font-size:.82rem;font-weight:600;color:var(--color-text-secondary);margin-bottom:6px}.required-mark[_ngcontent-%COMP%]{color:var(--color-danger)}.form-control[_ngcontent-%COMP%]{width:100%;padding:9px 12px;border:1px solid var(--color-border);border-radius:8px;background:var(--color-background);color:var(--color-text);font-size:.9rem;font-family:inherit;box-sizing:border-box;transition:border-color .2s,box-shadow .2s}.form-control[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}textarea.form-control[_ngcontent-%COMP%]{resize:vertical}textarea.auto-grow[_ngcontent-%COMP%]{resize:none;overflow:hidden;line-height:1.45;min-height:0;display:block}.toggle-row[_ngcontent-%COMP%]{margin-bottom:14px}.switch-label[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:8px;font-size:.88rem;color:var(--color-text);cursor:pointer}.switch-label[_ngcontent-%COMP%] input[type=checkbox][_ngcontent-%COMP%]{width:16px;height:16px;accent-color:var(--color-accent);cursor:pointer}.switch-label.compact[_ngcontent-%COMP%]{font-size:.82rem;white-space:nowrap}.toggle-help[_ngcontent-%COMP%]{margin:5px 0 0 24px;font-size:.76rem;color:var(--color-text-muted);line-height:1.5}.questions-section[_ngcontent-%COMP%]{margin-top:22px;padding-top:18px;border-top:1px solid var(--color-border)}.section-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.section-head[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0;font-size:.95rem;font-weight:700;color:var(--color-text)}.question-editor[_ngcontent-%COMP%]{background:var(--color-surface);border:1px solid var(--color-border-light);border-radius:12px;padding:14px;margin-bottom:12px;display:flex;flex-direction:column;gap:10px}.editor-head[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between}.editor-number[_ngcontent-%COMP%]{font-size:.78rem;font-weight:700;color:var(--color-accent);text-transform:uppercase;letter-spacing:.04em}.editor-tools[_ngcontent-%COMP%]{display:flex;gap:2px}.editor-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:12px}.editor-row[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{flex:1}
116.options-editor[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;padding-left:12px;border-left:2px solid var(--color-border)}.option-row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:6px}.option-row[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{flex:1;min-width:0}.option-row[_ngcontent-%COMP%] .icon-btn[_ngcontent-%COMP%]{flex-shrink:0;margin-top:2px}@media (max-width: 640px){.header-main[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch}.header-actions[_ngcontent-%COMP%]{justify-content:flex-start}.hide-mobile[_ngcontent-%COMP%]{display:none}.bars[_ngcontent-%COMP%], .text-answers[_ngcontent-%COMP%]{padding-left:0}.modal[_ngcontent-%COMP%]{max-height:94vh}.editor-row[_ngcontent-%COMP%]{flex-direction:column;align-items:flex-start;gap:8px}.editor-row[_ngcontent-%COMP%] .form-control[_ngcontent-%COMP%]{width:100%}}"]})};var Y2=[{path:"",redirectTo:"/open-play",pathMatch:"full"},{path:"booking",component:nc},{path:"open-play",component:Gc},{path:"open-play-management",component:Jc,canActivate:[Xi]},{path:"analytics-dashboard",component:e0,canActivate:[Xi]},{path:"court-settings",component:t0,canActivate:[Xi]},{path:"user-management",component:n0,canActivate:[Xi]},{path:"survey-management",component:o0,canActivate:[Xi]},{path:"group-chat",component:od,canActivate:[Xi]},{path:"login",component:lc},{path:"manage",component:oc,canActivate:[Xi]},{path:"my-bookings",component:qc,canActivate:[Xi]},{path:"court-management",component:rc,canActivate:[Xi]},{path:"register",component:ac},{path:"profile",loadComponent:()=>import("./chunk-2CKZSEDG.js").then(n=>n.ProfileComponent)},{path:"theme-settings",component:ed},{path:"reset-password",loadComponent:()=>import("./chunk-FUJI7ZPZ.js").then(n=>n.ResetPasswordComponent)},{path:"terms-and-conditions",component:cc},{path:"privacy-policy",component:dc},{path:"**",redirectTo:"/open-play"}];var X2={providers:[uu({eventCoalescing:!0}),Su(Y2,ku({scrollPositionRestoration:"top",anchorScrolling:"enabled"})),Cu(wu([Ru])),Bu(),Iu("ngsw-worker.js",{enabled:!Er(),registrationStrategy:"registerWhenStable:30000"})]};var r0=class n{deferredPrompt=null;canInstall=!1;isIos=!1;isInstalled=!1;constructor(){if(window.matchMedia("(display-mode: standalone)").matches){this.isInstalled=!0;return}let t=navigator.userAgent;this.isIos=/iphone|ipad|ipod/i.test(t)&&!window.MSStream,window.addEventListener("beforeinstallprompt",e=>{e.preventDefault(),this.deferredPrompt=e,this.canInstall=!0}),window.addEventListener("appinstalled",()=>{this.canInstall=!1,this.isInstalled=!0,this.deferredPrompt=null}),Er()&&(this.canInstall=!0)}promptInstall(){return ue(this,null,function*(){if(!this.deferredPrompt)return"dev";this.deferredPrompt.prompt();let{outcome:t}=yield this.deferredPrompt.userChoice;return this.deferredPrompt=null,this.canInstall=!1,t})}static \u0275fac=function(e){return new(e||n)};static \u0275prov=Pt({token:n,factory:n.\u0275fac,providedIn:"root"})};function Uq(n,t){if(n&1){let e=L();r(0,"img",76),S("error",function(){k(e);let o=h(2);return O(o.hasProfilePicture=!1)}),a()}if(n&2){let e=h(2);x("src",e.profilePictureUrl,Ie)}}function jq(n,t){if(n&1&&(r(0,"div",77),l(1),a()),n&2){let e=h(2);d(),R(e.getInitials())}}function Hq(n,t){if(n&1&&(r(0,"div",72),A(1,Uq,1,1,"img",73)(2,jq,2,1,"div",74),r(3,"span",75),l(4),a()()),n&2){let e=h();d(),x("ngIf",e.hasProfilePicture),d(),x("ngIf",!e.hasProfilePicture),d(2),R(e.userLabel)}}function Wq(n,t){n&1&&(Le(),r(0,"svg",78),w(1,"circle",79)(2,"line",80)(3,"line",81)(4,"line",82)(5,"line",83)(6,"line",84)(7,"line",85)(8,"line",86)(9,"line",87),a())}function Gq(n,t){n&1&&(Le(),r(0,"svg",88),w(1,"path",89),a())}function qq(n,t){n&1&&(Le(),r(0,"svg",90),w(1,"path",91)(2,"polyline",92)(3,"line",93),a())}function $q(n,t){n&1&&(Le(),r(0,"svg",90),w(1,"path",94)(2,"polyline",95)(3,"line",96),a())}function Yq(n,t){n&1&&(r(0,"a",97),Le(),r(1,"svg",22),w(2,"path",33)(3,"path",34),a(),Mt(),r(4,"span",27),l(5,"Manage"),a(),r(6,"span",28),l(7,"Manage Bookings"),a()())}function Xq(n,t){n&1&&(r(0,"a",98),Le(),r(1,"svg",22),w(2,"rect",99)(3,"line",100)(4,"line",101),a(),Mt(),r(5,"span",27),l(6,"Courts"),a(),r(7,"span",28),l(8,"Court Management"),a()())}function Zq(n,t){n&1&&(r(0,"a",102),Le(),r(1,"svg",22),w(2,"circle",30)(3,"line",103)(4,"line",104),a(),Mt(),r(5,"span",27),l(6,"Open Play"),a(),r(7,"span",28),l(8,"Manage Open Play"),a()())}function Qq(n,t){n&1&&(r(0,"a",105),Le(),r(1,"svg",22),w(2,"path",106)(3,"path",107),a(),Mt(),r(4,"span",27),l(5,"Analytics"),a(),r(6,"span",28),l(7,"Analytics Dashboard"),a()())}function Kq(n,t){n&1&&(r(0,"a",108),Le(),r(1,"svg",22),w(2,"circle",60)(3,"path",109),a(),Mt(),r(4,"span",27),l(5,"
116Settings"),a(),r(6,"span",28),l(7,"Court Settings"),a()())}function Jq(n,t){n&1&&(r(0,"a",110),Le(),r(1,"svg",22),w(2,"path",111)(3,"circle",112)(4,"path",113)(5,"path",114),a(),Mt(),r(6,"span",27),l(7,"Users"),a(),r(8,"span",28),l(9,"User Management"),a()())}function e$(n,t){n&1&&(r(0,"a",115),Le(),r(1,"svg",22),w(2,"path",116)(3,"path",117),a(),Mt(),r(4,"span",27),l(5,"Surveys"),a(),r(6,"span",28),l(7,"Survey Results"),a()())}function t$(n,t){if(n&1){let e=L();r(0,"img",121),S("error",function(){k(e);let o=h(2);return O(o.hasProfilePicture=!1)}),a()}if(n&2){let e=h(2);x("src",e.profilePictureUrl,Ie)}}function n$(n,t){if(n&1&&(r(0,"div",122),l(1),a()),n&2){let e=h(2);d(),R(e.getInitials())}}function i$(n,t){if(n&1&&(r(0,"div",118),A(1,t$,1,1,"img",119)(2,n$,2,1,"div",120),r(3,"span"),l(4),a()()),n&2){let e=h();d(),x("ngIf",e.hasProfilePicture),d(),x("ngIf",!e.hasProfilePicture),d(2),R(e.userLabel)}}function o$(n,t){if(n&1){let e=L();r(0,"button",123),S("click",function(){k(e);let o=h();return O(o.installApp())}),Le(),r(1,"svg",57),w(2,"path",124)(3,"polyline",125)(4,"line",126),a(),Mt(),r(5,"span"),l(6,"Install App"),a(),r(7,"span",127),l(8,"NEW"),a()()}}function r$(n,t){n&1&&(r(0,"div",128),Le(),r(1,"svg",129),w(2,"path",130)(3,"polyline",131)(4,"line",132),a(),Mt(),r(5,"div")(6,"div",133),l(7,"Add to Home Screen"),a(),r(8,"div",134),l(9,"Tap "),r(10,"strong"),l(11,"Share"),a(),l(12," then "),r(13,"strong"),l(14,'"Add to Home Screen"'),a(),l(15," to install."),a()()())}function a$(n,t){n&1&&w(0,"div",135)}function s$(n,t){if(n&1){let e=L();r(0,"a",136),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"path",33)(3,"path",34),a(),Mt(),r(4,"span"),l(5,"Manage Bookings"),a()()}}function l$(n,t){if(n&1){let e=L();r(0,"a",137),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"rect",99)(3,"line",100)(4,"line",101),a(),Mt(),r(5,"span"),l(6,"Court Management"),a()()}}function c$(n,t){if(n&1){let e=L();r(0,"a",138),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"circle",30)(3,"line",103)(4,"line",104),a(),Mt(),r(5,"span"),l(6,"Manage Open Play"),a()()}}function d$(n,t){if(n&1){let e=L();r(0,"a",139),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"path",106)(3,"path",107),a(),Mt(),r(4,"span"),l(5,"Analytics Dashboard"),a()()}}function p$(n,t){if(n&1){let e=L();r(0,"a",140),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"circle",60)(3,"path",109),a(),Mt(),r(4,"span"),l(5,"Court Settings"),a()()}}function m$(n,t){if(n&1){let e=L();r(0,"a",141),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"path",111)(3,"circle",112)(4,"path",113)(5,"path",114),a(),Mt(),r(6,"span"),l(7,"User Management"),a()()}}function g$(n,t){if(n&1){let e=L();r(0,"a",142),S("click",function(){k(e);let o=h();return O(o.closeMobileMenu())}),Le(),r(1,"svg",57),w(2,"path",116)(3,"path",117),a(),Mt(),r(4,"span"),l(5,"Survey Results"),a()()}}var a0=class n{constructor(t,e,i,o,s,m){this.authService=t;this.apiService=e;this.themeService=i;this.router=o;this.pwaInstall=s;this.courtConfigService=m}mobileMenuOpen=!1;userLabel="";displayName="";isAuthenticated=!1;isUserRegistered=!1;isDarkMode=!0;profilePictureUrl="";hasProfilePicture=!1;courtConfig=null;authSubscription=new Zg;apiBaseUrl=Be.apiBase;ngOnInit(){this.updateAuthState(),this.router.events.subscribe(()=>{this.updateAuthState()}),this.themeService.theme$.subscribe(t=>{this.isDarkMode=t.mode==="dark"}),this.courtConfigService.getConfig().subscribe(t=>{this.courtConfig=t})}updateAuthState(){let t=this.authService.getCurrentUser();this.isAuthenticated=t?.isAuthenticated||!1,this.updateUserLabel()}ngOnDestroy(){}onResize(t){t.target.innerWidth>900&&this.closeMobileMenu()}toggleMobileMenu(){this.mobileMenuOpen?this.closeMobileMenu():this.openMobileMenu()}openMobileMenu(){this.mobileMenuOpen=!0}closeMobileMenu(){this.mobileMenuOpen=!1}logoutAdmin(){this.authService.logout(),this.showToast("Logged out successfully")}loginAdmin(){this.router.navigate(["/login"])}toggleTheme(){this.themeService.toggleMode()}installApp(){return ue(this,null,function*(){let t=yield this.pwaInstall.promptInstall();t==="dev"?this.showToast("Install available on the production build (HTTPS) \u{1F680}"):t==="accepted"&&(this.showToast("App installed successfully!"),this.closeMobileMenu())})}updateUserLabel(){return ue(this,null,function*(){let t=this.authService.getCurrentUser();if(t&&t.isAuthenticated&&t.id)try{let e=yield this.apiService.getUserProfile(t.id).toPromise(),i=e.nickname||t.username;this.displayName=i,this.userLabel=`Hi, ${i}`,this.isUserRegistered=!0,this.updateProfilePicture(e.profilePictureUrl)}catch(e){console.error("\u274C NAV - Failed to fetch profile:",e),this.displayName=t.username,this.userLabel=`Hi, ${t.username}`,this.isUserRegistered=!0,this.updateProfilePicture(void 0)}else try{let e=localStorage.getItem("pickle_user_details");if(e){let i=JSON.parse(e);i&&i.fullname?(this.userLabel=`Hi, ${i.fullname}`,this.isUserRegistered=!0):(this.userLabel="",this.isUserRegistered=!1)}else this.userLabel="",this.isUserRegistered=!1}catch{this.userLabel="",this.isUserRegistered=!1}})}showToast(t){let e=document.getElementById("toast-notification");e&&(e.textContent=t,e.className="toast-notification show",setTimeout(()=>{e.className="toast-notification"},3e3))}updateProfilePicture(t){t?(t.startsWith("/api/drive/profile-picture/")?this.profilePictureUrl=`${Be.apiBase.replace("/api","")}${t}`:this.profilePictureUrl=`${this.apiBaseUrl}/drive/profile-picture/${t}`,this.hasProfilePicture=!0):(this.profilePictureUrl="",this.hasProfilePicture=!1)}getInitials(){let t=this.displayName.trim();if(!t)return"?";let e=t.split(/\s+/);return e.length===1?e[0].charAt(0).toUpperCase():(e[0].charAt(0)+e[e.length-1].charAt(0)).toUpperCase()}static \u0275fac=function(e){return new(e||n)(ae(je),ae(it),ae(Yi),ae(nt),ae(r0
vendor: 4,912 bytes, line 116
116),ae(Fn))};static \u0275cmp=We({type:n,selectors:[["app-navigation"]],hostBindings:function(e,i){e&1&&S("resize",function(s){return i.onResize(s)},!1,cu)},decls:108,vars:29,consts:[[1,"app-header"],[1,"header-container"],["routerLink","/booking",1,"header-logo"],["alt","Court Logo",1,"logo-image",3,"src"],[1,"logo-text"],[1,"logo-title"],[1,"logo-subtitle"],[1,"header-actions"],["class","user-info",4,"ngIf"],[1,"header-theme-btn",3,"click","title"],["class","theme-icon sun-icon","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",4,"ngIf"],["class","theme-icon moon-icon","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",4,"ngIf"],["title","Settings & More",1,"header-more-btn",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"more-icon"],["cx","12","cy","12","r","1"],["cx","12","cy","5","r","1"],["cx","12","cy","19","r","1"],[1,"header-btn",3,"click","title"],["width","22","height","22","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",4,"ngIf"],[1,"main-nav"],[1,"nav-container"],["routerLink","/booking","routerLinkActive","active",1,"nav-item"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"nav-icon"],["x","3","y","4","width","18","height","18","rx","2","ry","2"],["x1","16","y1","2","x2","16","y2","6"],["x1","8","y1","2","x2","8","y2","6"],["x1","3","y1","10","x2","21","y2","10"],[1,"nav-label"],[1,"nav-label-full"],["routerLink","/open-play","routerLinkActive","active",1,"nav-item"],["cx","12","cy","12","r","10"],["d","M12 6v6l4 2"],["routerLink","/my-bookings","routerLinkActive","active",1,"nav-item"],["d","M9 11l3 3L22 4"],["d","M21 12v7a2 2 0 01-2 2H5a2 2 0 01-2-2V5a2 2 0 012-2h11"],["routerLink","/profile","routerLinkActive","active",1,"nav-item"],["cx","12","cy","8","r","4"],["d","M4 20c0-3.314 3.134-6 7-6s7 2.686 7 6"],["routerLink","/manage","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/court-management","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/open-play-management","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/analytics-dashboard","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/court-settings","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/user-management","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],["routerLink","/survey-management","routerLinkActive","active","class","nav-item admin-only",4,"ngIf"],[1,"nav-item","mobile-only",3,"click"],[1,"admin-menu-overlay","settings-menu-overlay",3,"click"],[1,"admin-menu-content","settings-menu-content",3,"click"],[1,"admin-menu-header"],[1,"admin-menu-title"],["width","24","height","24","fill","none","viewBox","0 0 24 24",2,"display","inline-block","vertical-align","middle","margin-right","8px"],["d","M12 15a3 3 0 100-6 3 3 0 000 6z","stroke","currentColor","stroke-width","2","fill","none"],["d","M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z","stroke","currentColor","stroke-width","2","fill","none"],[1,"close-btn",3,"click"],["class","admin-menu-user",4,"ngIf"],[1,"admin-menu-body"],["routerLink","/group-chat","routerLinkActive","active",1,"admin-menu-item",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2"],["d","M21 15a2 2 0 01-2 2H7l-4 4V5a2 2 0 012-2h14a2 2 0 012 2z"],["routerLink","/theme-settings","routerLinkActive","active",1,"admin-menu-item",3,"click"],["cx","12","cy","12","r","3"],["d","M12 1v6m0 6v6M5.64 5.64l4.24 4.24m4.24 4.24l4.24 4.24M1 12h6m6 0h6M5.64 18.36l4.24-4.24m4.24-4.24l4.24-4.24"],["class","admin-menu-item install-app-btn",3,"click",4,"ngIf"],["class","ios-install-tip",4,"ngIf"],["class","menu-divider",4,"ngIf"],["routerLink","/manage","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/court-management","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/open-play-management","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/analytics-dashboard","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/court-sett
116ings","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/user-management","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],["routerLink","/survey-management","routerLinkActive","active","class","admin-menu-item",3,"click",4,"ngIf"],[1,"user-info"],["alt","Profile","class","user-avatar",3,"src","error",4,"ngIf"],["class","user-avatar avatar-initials",4,"ngIf"],[1,"user-name"],["alt","Profile",1,"user-avatar",3,"error","src"],[1,"user-avatar","avatar-initials"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"theme-icon","sun-icon"],["cx","12","cy","12","r","5"],["x1","12","y1","1","x2","12","y2","3"],["x1","12","y1","21","x2","12","y2","23"],["x1","4.22","y1","4.22","x2","5.64","y2","5.64"],["x1","18.36","y1","18.36","x2","19.78","y2","19.78"],["x1","1","y1","12","x2","3","y2","12"],["x1","21","y1","12","x2","23","y2","12"],["x1","4.22","y1","19.78","x2","5.64","y2","18.36"],["x1","18.36","y1","5.64","x2","19.78","y2","4.22"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"theme-icon","moon-icon"],["d","M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"],["width","22","height","22","viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2"],["d","M15 3h4a2 2 0 012 2v14a2 2 0 01-2 2h-4"],["points","10 17 15 12 10 7"],["x1","15","y1","12","x2","3","y2","12"],["d","M9 21H5a2 2 0 01-2-2V5a2 2 0 012-2h4"],["points","16 17 21 12 16 7"],["x1","21","y1","12","x2","9","y2","12"],["routerLink","/manage","routerLinkActive","active",1,"nav-item","admin-only"],["routerLink","/court-management","routerLinkActive","active",1,"nav-item","admin-only"],["x","3","y","3","width","18","height","18","rx","2","ry","2"],["x1","9","y1","3","x2","9","y2","21"],["x1","15","y1","3","x2","15","y2","21"],["routerLink","/open-play-management","routerLinkActive","active",1,"nav-item","admin-only"],["x1","12","y1","8","x2","12","y2","12"],["x1","12","y1","16","x2","12.01","y2","16"],["routerLink","/analytics-dashboard","routerLinkActive","active",1,"nav-item","admin-only"],["d","M3 3v18h18"],["d","M18.7 8l-5.1 5.2-2.8-2.7L7 14.3"],["routerLink","/court-settings","routerLinkActive","active",1,"nav-item","admin-only"],["d","M19.4 15a1.65 1.65 0 00.33 1.82l.06.06a2 2 0 010 2.83 2 2 0 01-2.83 0l-.06-.06a1.65 1.65 0 00-1.82-.33 1.65 1.65 0 00-1 1.51V21a2 2 0 01-4 0v-.09A1.65 1.65 0 009 19.4a1.65 1.65 0 00-1.82.33l-.06.06a2 2 0 01-2.83 0 2 2 0 010-2.83l.06-.06a1.65 1.65 0 00.33-1.82 1.65 1.65 0 00-1.51-1H3a2 2 0 010-4h.09A1.65 1.65 0 004.6 9a1.65 1.65 0 00-.33-1.82l-.06-.06a2 2 0 010-2.83 2 2 0 012.83 0l.06.06a1.65 1.65 0 001.82.33H9a1.65 1.65 0 001-1.51V3a2 2 0 014 0v.09a1.65 1.65 0 001 1.51 1.65 1.65 0 001.82-.33l.06-.06a2 2 0 012.83 0 2 2 0 010 2.83l-.06.06a1.65 1.65 0 00-.33 1.82V9a1.65 1.65 0 001.51 1H21a2 2 0 010 4h-.09a1.65 1.65 0 00-1.51 1z"],["routerLink","/user-management","routerLinkActive","active",1,"nav-item","admin-only"],["d","M17 21v-2a4 4 0 00-4-4H5a4 4 0 00-4 4v2"],["cx","9","cy","7","r","4"],["d","M23 21v-2a4 4 0 00-3-3.87"],["d","M16 3.13a4 4 0 010 7.75"],["routerLink","/survey-management","routerLinkActive","active",1,"nav-item","admin-only"],["d","M9 2h6a1 1 0 011 1v1h2a2 2 0 012 2v14a2 2 0 01-2 2H6a2 2 0 01-2-2V6a2 2 0 012-2h2V3a1 1 0 011-1z"],["d","M9 12l2 2 4-4"],[1,"admin-menu-user"],["alt","Profile","class","user-avatar-menu",3,"src","error",4,"ngIf"],["class","user-avatar-menu avatar-initials",4,"ngIf"],["alt","Profile",1,"user-avatar-menu",3,"error","src"],[1,"user-avatar-menu","avatar-initials"],[1,"admin-menu-item","install-app-btn",3,"click"],["d","M21 15v4a2 2 0 01-2 2H5a2 2 0 01-2-2v-4"],["points","7 10 12 15 17 10"],["x1","12","y1","15","x2","12","y2","3"],[1,"install-badge"],[1,"ios-install-tip"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"ios-tip-icon"],["d","M4 12v8a2 2 0 002 2h12a2 2 0 002-2v-8"],["points","16 6 12 2 8 6"],["x1","12","y1","2","x2","12","y2","15"],[1,"ios-tip-title"],[1,"ios-tip-text"],[1,"menu-divider"],["routerLink","/manage","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/court-management","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/open-play-management","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/analytics-dashboard","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/court-sett
116ings","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/user-management","routerLinkActive","active",1,"admin-menu-item",3,"click"],["routerLink","/survey-management","routerLinkActive","active",1,"admin-menu-item",3,"click"]],template:function(e,i){e&1&&(r(0,"header",0)(1,"div",1)(2,"a",2),w(3,"img",3),r(4,"div",4)(5,"span",5),l(6),a(),r(7,"span",6),l(8,"Reservation System"),a()()(),r(9,"div",7),A(10,Hq,5,3,"div",8),r(11,"button",9),S("click",function(){return i.toggleTheme()}),A(12,Wq,10,0,"svg",10)(13,Gq,2,0,"svg",11),a(),r(14,"button",12),S("click",function(){return i.toggleMobileMenu()}),Le(),r(15,"svg",13),w(16,"circle",14)(17,"circle",15)(18,"circle",16),a()(),Mt(),r(19,"button",17),S("click",function(){return i.isAuthenticated?i.logoutAdmin():i.loginAdmin()}),A(20,qq,4,0,"svg",18)(21,$q,4,0,"svg",18),a()()()(),r(22,"nav",19)(23,"div",20)(24,"a",21),Le(),r(25,"svg",22),w(26,"rect",23)(27,"line",24)(28,"line",25)(29,"line",26),a(),Mt(),r(30,"span",27),l(31,"Schedule"),a(),r(32,"span",28),l(33,"Book Courts"),a()(),r(34,"a",29),Le(),r(35,"svg",22),w(36,"circle",30)(37,"path",31),a(),Mt(),r(38,"span",27),l(39,"Open Play"),a(),r(40,"span",28),l(41,"Open Play Sessions"),a()(),r(42,"a",32),Le(),r(43,"svg",22),w(44,"path",33)(45,"path",34),a(),Mt(),r(46,"span",27),l(47,"Bookings"),a(),r(48,"span",28),l(49,"My Bookings"),a()(),r(50,"a",35),Le(),r(51,"svg",22),w(52,"circle",36)(53,"path",37),a(),Mt(),r(54,"span",27),l(55,"Profile"),a(),r(56,"span",28),l(57,"My Profile"),a()(),A(58,Yq,8,0,"a",38)(59,Xq,9,0,"a",39)(60,Zq,9,0,"a",40)(61,Qq,8,0,"a",41)(62,Kq,8,0,"a",42)(63,Jq,10,0,"a",43)(64,e$,8,0,"a",44),r(65,"button",45),S("click",function(){return i.toggleMobileMenu()}),Le(),r(66,"svg",22),w(67,"circle",14)(68,"circle",15)(69,"circle",16),a(),Mt(),r(70,"span",27),l(71,"More"),a(),r(72,"span",28),l(73,"More Options"),a()()()(),r(74,"div",46),S("click",function(){return i.closeMobileMenu()}),r(75,"div",47),S("click",function(s){return s.stopPropagation()}),r(76,"div",48)(77,"div",49),Le(),r(78,"svg",50),w(79,"path",51)(80,"path",52),a(),Mt(),r(81,"h3"),l(82,"Settings & More"),a()(),r(83,"button",53),S("click",function(){return i.closeMobileMenu()}),l(84,"\xD7"),a()(),A(85,i$,5,3,"div",54),r(86,"div",55)(87,"a",56),S("click",function(){return i.closeMobileMenu()}),Le(),r(88,"svg",57),w(89,"path",58),a(),Mt(),r(90,"span"),l(91,"Messages"),a()(),r(92,"a",59),S("click",function(){return i.closeMobileMenu()}),Le(),r(93,"svg",57),w(94,"circle",60)(95,"path",61),a(),Mt(),r(96,"span"),l(97,"Theme Settings"),a()(),A(98,o$,9,0,"button",62)(99,r$,16,0,"div",63)(100,a$,1,0,"div",64)(101,s$,6,0,"a",65)(102,l$,7,0,"a",66)(103,c$,7,0,"a",67)(104,d$,6,0,"a",68)(105,p$,6,0,"a",69)(106,m$,8,0,"a",70)(107,g$,6,0,"a",71),a()()()),e&2&&(d(3),x("src",(i.courtConfig==null?null:i.courtConfig.logoPath)||"assets/images/pickleball-hub-icon-orange.png",Ie),d(3),R((i.courtConfig==null?null:i.courtConfig.shortName)||"Courtified"),d(4),x("ngIf",i.isAuthenticated),d(),mu("title",i.isDarkMode?"Switch to Light Mode":"Switch to Dark Mode"),d(),x("ngIf",!i.isDarkMode),d(),x("ngIf",i.isDarkMode),d(6),x("title",i.isAuthenticated?"Logout":"Login"),d(),x("ngIf",!i.isAuthenticated),d(),x("ngIf",i.isAuthenticated),d(37),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(10),te("open",i.mobileMenuOpen),d(11),x("ngIf",i.isAuthenticated),d(13),x("ngIf",i.pwaInstall.canInstall&&!i.pwaInstall.isInstalled),d(),x("ngIf",i.pwaInstall.isIos&&!i.pwaInstall.isInstalled),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")),d(),x("ngIf",i.authService.hasRole("admin")))},dependencies:[Ge,$e,Ou,Xl,Mu],encapsulation:2})};function u$(n,t){if(n&1&&(r(0,"p",16),l(1),a()),n&2){let e=h(2);d(),R(e.survey.description)}}function f$(n,t){n&1&&(r(0,"span",24),l(1,"*"),a())}function h$(n,t){if(n&1&&(r(0,"p",25),l(1),a()),n&2){let e=h().$implicit;d(),R(e.helpText)}}function _$(n,t){if(n&1){let e=L();r(0,"button",28),S("click",function(){let o=k(e).$implicit,s=h(2).$implicit,m=h(2);return O(m.selectSingle(s,o))}),r(1,"span",29),w(2,"i",30),a(),r(3,"span",31),l(4),a()()}if(n&2){let e=t.$implicit,i=h(2).$implicit,o=h(2);te("selected",o.isSelected(i,e)),d(4),R(e)}}function x$(n,t){if(n&1&&(r(0,"div",26),A(1,_$,5,3,"button",27),a()),n&2){let e=h().$implicit;d(),x("ngForOf",e.options)}}function v$(n,t){if(n&1){let e=L();r(0,"button",28),S("click",function(){let o=k(e).$implicit,s=h(2).$implicit,m=h(2);return O(m.toggleMulti(s,o))}),r(1,"span",32),w(2,"i",30),a(),r(3,"span",31),l(4),a()()}if(n&2){let e=t.$implicit,i=h(2).$implicit,o=h(2);te("selected",o.isSelected(i,e)),d(4),R(e)}}function b$(n,t){if(n&1&&(r(0,"div",26),A(1,v$,5,3,"button",27),a()),n&2){let e=h().$implicit;d(),x("ngForOf",e.options)}}function y$(n,t){if(n&1){let e=L();r(0,"textarea",33),S("input",function(o){k(e);let s=h().$implicit,m=h(2);return O(m.setText(s,o.target.value))}),a()}if(n&2){let e=h().$implicit,i=h(2);x("value",i.getText(e))}}function C$(n,t){if(n&1&&(r(0,"div",17)(1,"div",18)(2,"span",19),l(3),a(),r(4,"span"),l(5),A(6,f$,2,0,"span",20),a()(),A(7,h$,2,1,"p",21)(8,x$,2,1,"div",22)(9,b$,2,1,"div",22)(10,y$,1,1,"textarea",23),a()),n&2){let e=t.$implicit,i=t.index;d(3),R(i+1),d(2),F(" ",e.questionText," "),d(),x("ngIf",e.required),d(),x("ngIf",e.helpText),d(),x("ngIf",e.questionType==="SINGLE_CHOICE"),d(),x("ngIf",e.questionType==="MULTI_CHOICE"),d(),x("ngIf",e.questionType==="TEXT")}}function w$(n,t){if(n&1&&(r(0,"p",34),l(1),a()),n&2){let e=h(2);d(),R(e.survey.closingNote)}}function P$(n,t){if(n&1&&(r(0,"div",35),w(1,"i",36),l(2),a()),n&2){let e=h(2);d(2),F(" ",e.errorMessage," ")}}function M$(n,t){if(n&1){let e=L();r(0,"button",37),S("click",function(){k(e);let o=h(2);return O(o.skip())}),l(1," Skip for now "),a()}if(n&2){let e=h(2);x("disabled",e.isSubmitting)}}function S$(n,t){n&1&&(r(0,"p",38),l(1," We'll ask again next time you open the app until you've answered. "),a())}function k$(n,t){if(n&1){let e=L();r(0,"div",0)(1,"div",1)(2,"div",2)(3,"div",3),w(4,"i",4),l(5," Quick Survey"),a(),r(6,"h2",5),l(7),a(),A(8,u$,2,1,"p",6),a(),r(9,"div",7),A(10,C$,11,7,"div",8)(11,w$,2,1,"p",9),a(),A(12,P$,3,1,"div",10),r(13,"div",11),A(14,M$,2,1,"button",12),r(15,"button",13),S("click",function(){k(e);let o=h();return O(o.submit())}
116),w(16,"i",14),l(17),a()(),A(18,S$,2,0,"p",15),a()()}if(n&2){let e=h();d(),vn("aria-label",e.survey.title),d(6),R(e.survey.title),d(),x("ngIf",e.survey.description),d(2),x("ngForOf",e.survey.questions),d(),x("ngIf",e.survey.closingNote),d(),x("ngIf",e.errorMessage),d(2),x("ngIf",e.survey.allowSkip),d(),x("disabled",e.isSubmitting),d(),x("ngClass",e.isSubmitting?"bi-hourglass-split":"bi-send"),d(),F(" ",e.isSubmitting?"Submitting...":"Submit Answer"," "),d(),x("ngIf",e.survey.allowSkip)}}var s0=class n{constructor(t,e,i,o){this.apiService=t;this.authService=e;this.router=i;this.ngZone=o}static SUPPRESSED_ROUTES=["/login","/register","/reset-password"];static RESUME_REPROMPT_MS=15*60*1e3;survey=null;visible=!1;isSubmitting=!1;errorMessage="";answers={};skippedAt=0;hiddenAt=0;lastCheckedUserId="";routerSub;previousBodyOverflow="";onVisibilityChange=()=>{if(document.visibilityState==="hidden"){this.hiddenAt=Date.now();return}let t=this.hiddenAt?Date.now()-this.hiddenAt:0;(!this.skippedAt||t>=n.RESUME_REPROMPT_MS)&&(this.skippedAt=0,this.checkPending())};ngOnInit(){this.checkPending(),this.routerSub=this.router.events.pipe(xn(t=>t instanceof Yl)).subscribe(()=>{!this.survey&&(!this.skippedAt||this.userChanged())&&this.checkPending()}),document.addEventListener("visibilitychange",this.onVisibilityChange)}ngOnDestroy(){this.routerSub?.unsubscribe(),document.removeEventListener("visibilitychange",this.onVisibilityChange),this.setVisible(!1)}setVisible(t){t!==this.visible&&(this.visible=t,t?(this.previousBodyOverflow=document.body.style.overflow,document.body.style.overflow="hidden"):document.body.style.overflow=this.previousBodyOverflow)}userChanged(){return(this.authService.getCurrentUser()?.id||"")!==this.lastCheckedUserId}checkPending(){!this.authService.isAuthenticated()||this.visible||this.isSuppressedRoute()||(this.userChanged()&&(this.skippedAt=0),this.lastCheckedUserId=this.authService.getCurrentUser()?.id||"",this.apiService.getPendingSurvey().subscribe({next:t=>{this.isSuppressedRoute()||this.openSurvey(t?.pending||null)},error:()=>{}}))}isSuppressedRoute(){return n.SUPPRESSED_ROUTES.some(t=>this.router.url.startsWith(t))}openSurvey(t){this.ngZone.run(()=>{this.survey=t,this.setVisible(!!t),this.errorMessage="",this.answers={},(t?.questions||[]).forEach(e=>{this.answers[e.id]=[]})})}isSelected(t,e){return(this.answers[t.id]||[]).includes(e)}selectSingle(t,e){this.answers[t.id]=[e],this.errorMessage=""}toggleMulti(t,e){let i=this.answers[t.id]||[],o=i.indexOf(e);o>=0?i.splice(o,1):i.push(e),this.answers[t.id]=i,this.errorMessage=""}getText(t){return(this.answers[t.id]||[])[0]||""}setText(t,e){this.answers[t.id]=e.trim()?[e]:[],this.errorMessage=""}firstUnansweredRequired(){for(let t of this.survey?.questions||[])if(t.required&&(this.answers[t.id]||[]).length===0)return t;return null}submit(){if(!this.survey?.id||this.isSubmitting)return;let t=this.firstUnansweredRequired();if(t){this.errorMessage=`Please answer: ${t.questionText}`;return}this.isSubmitting=!0;let e=Object.keys(this.answers).filter(i=>this.answers[i].length>0).map(i=>({questionId:i,values:this.answers[i]}));this.apiService.submitSurveyResponse(this.survey.id,e).subscribe({next:i=>{this.isSubmitting=!1,this.setVisible(!1),i?.pending?setTimeout(()=>this.openSurvey(i.pending),400):this.survey=null},error:i=>{this.isSubmitting=!1,this.errorMessage=i?.payload?.error||i?.error?.error||"Could not submit your answers. Please try again."}})}skip(){if(!this.survey?.id||this.isSubmitting)return;let t=this.survey.id;this.setVisible(!1),this.survey=null,this.skippedAt=Date.now(),this.apiService.skipSurvey(t).subscribe({next:()=>{},error:()=>{}})}static \u0275fac=function(e){return new(e||n)(ae(it),ae(je),ae(nt),ae(Nn))};static \u0275cmp=We({type:n,selectors:[["app-survey-prompt"]],decls:1,vars:1,consts:[[1,"survey-overlay"],["role","dialog","aria-modal","true",1,"survey-modal"],[1,"survey-header"],[1,"survey-badge"],[1,"bi","bi-clipboard-check"],[1,"survey-title"],["class","survey-description",4,"ngIf"],[1,"survey-body"],["class","survey-question",4,"ngFor","ngForOf"],["class","survey-closing",4,"ngIf"],["class","survey-error",4,"ngIf"],[1,"survey-actions"],["type","button","class","btn-skip",3,"disabled","click",4,"ngIf"],["type","button",1,"btn-submit",3,"click","disabled"],[1,"bi",3,"ngClass"],["class","survey-footnote",4,"ngIf"],[1,"survey-description"],[1,"survey-question"],[1,"question-text"],[1,"question-number"],["class","required-mark",4,"ngIf"],["class","question-help",4,"ngIf"],["class","options",4,"ngIf"],["class","text-answer","rows","3","placeholder","Type your answer here...",3,"value","input",4,"ngIf"],[1,"required-mark"],[1,"question-help"],[1,"options"],["type","button","class","option-btn",3,"selected","click",4,"ngFor","ngForOf"],["type","button",1,"option-btn",3,"click"],[1,"option-marker","radio"],[1,"bi","bi-check"],[1,"option-label"],[1,"option-marker","checkbox"],["rows","3","placeholder","Type your answer here...",1,"text-answer",3,"input","value"],[1,"survey-closing"],[1,"survey-error"],[1,"bi","bi-exclamation-circle"],["type","button",1,"btn-skip",3,"click","disabled"],[1,"survey-footnote"]],template:function(e,i){e&1&&A(0,k$,19,11,"div",0),e&2&&ql(i.visible&&i.survey?0:-1)},dependencies:[Ge,cn,rt,$e,lt],styles:[".survey-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;box-sizing:border-box;z-index:99998;background:#000000bf;display:flex;align-items:center;justify-content:center;padding:1rem;overflow:hidden;overscroll-behavior:contain;animation:_ngcontent-%COMP%_survey-fade-in .2s ease}@keyframes _ngcontent-%COMP%_survey-fade-in{0%{opacity:0}
116to{opacity:1}}.survey-modal[_ngcontent-%COMP%]{width:100%;max-width:540px;max-height:90vh;max-height:90dvh;display:flex;flex-direction:column;background:var(--color-background-elevated);border:1px solid var(--color-border);border-radius:16px;box-shadow:var(--shadow-lg);overflow:hidden;animation:_ngcontent-%COMP%_survey-slide-up .25s ease}@keyframes _ngcontent-%COMP%_survey-slide-up{0%{transform:translateY(16px);opacity:0}to{transform:translateY(0);opacity:1}}.survey-header[_ngcontent-%COMP%]{padding:20px 22px 16px;border-bottom:1px solid var(--color-border-light)}.survey-badge[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;background:var(--color-accent-bg-subtle);color:var(--color-accent);border:1px solid var(--color-accent-bg-light);padding:4px 12px;border-radius:20px;font-size:.75rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;margin-bottom:10px}.survey-title[_ngcontent-%COMP%]{margin:0 0 8px;font-size:1.25rem;font-weight:700;color:var(--color-text);line-height:1.3}.survey-description[_ngcontent-%COMP%]{margin:0;font-size:.9rem;line-height:1.5;color:var(--color-text-secondary)}.survey-body[_ngcontent-%COMP%]{padding:18px 22px;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;flex:1;min-height:0}.survey-question[_ngcontent-%COMP%] + .survey-question[_ngcontent-%COMP%]{margin-top:22px;padding-top:22px;border-top:1px dashed var(--color-border-light)}.question-text[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:10px;font-size:.95rem;font-weight:600;color:var(--color-text);line-height:1.45}.question-number[_ngcontent-%COMP%]{flex-shrink:0;width:22px;height:22px;border-radius:50%;background:var(--color-accent-bg-light);color:var(--color-accent);font-size:.75rem;font-weight:700;display:flex;align-items:center;justify-content:center;margin-top:1px}.required-mark[_ngcontent-%COMP%]{color:var(--color-danger);margin-left:2px}.question-help[_ngcontent-%COMP%]{margin:6px 0 0 32px;font-size:.8rem;color:var(--color-text-muted)}.options[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;margin:12px 0 0 32px}.option-btn[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;width:100%;text-align:left;padding:11px 14px;border-radius:10px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font-size:.9rem;font-family:inherit;cursor:pointer;transition:background .15s ease,border-color .15s ease}.option-btn[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover);border-color:var(--color-accent-bg-medium)}.option-btn.selected[_ngcontent-%COMP%]{background:var(--color-accent-bg-subtle);border-color:var(--color-accent)}.option-marker[_ngcontent-%COMP%]{flex-shrink:0;width:20px;height:20px;border:2px solid var(--color-border);display:flex;align-items:center;justify-content:center;color:transparent;font-size:.75rem}.option-marker.radio[_ngcontent-%COMP%]{border-radius:50%}.option-marker.checkbox[_ngcontent-%COMP%]{border-radius:5px}.option-btn.selected[_ngcontent-%COMP%] .option-marker[_ngcontent-%COMP%]{background:var(--color-accent);border-color:var(--color-accent);color:#fff}.option-label[_ngcontent-%COMP%]{flex:1}.text-answer[_ngcontent-%COMP%]{box-sizing:border-box;width:calc(100% - 32px);margin:12px 0 0 32px;padding:11px 14px;border-radius:10px;border:1px solid var(--color-border);background:var(--color-surface);color:var(--color-text);font-size:.9rem;font-family:inherit;resize:vertical}.text-answer[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--color-accent);box-shadow:0 0 0 3px var(--color-accent-bg-subtle)}.survey-closing[_ngcontent-%COMP%]{margin:20px 0 0;font-size:.85rem;font-style:italic;color:var(--color-text-muted);line-height:1.5}.survey-error[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;margin:0 22px;padding:10px 14px;border-radius:10px;background:var(--color-danger-bg-subtle);border:1px solid var(--color-danger-bg-medium);color:var(--color-danger);font-size:.85rem}.survey-actions[_ngcontent-%COMP%]{display:flex;gap:10px;padding:16px 22px 8px;border-top:1px solid var(--color-border-light);margin-top:16px}.btn-skip[_ngcontent-%COMP%], .btn-submit[_ngcontent-%COMP%]{padding:11px 18px;border-radius:10px;font-size:.9rem;font-weight:600;font-family:inherit;cursor:pointer;transition:opacity .15s ease,background .15s ease}.btn-skip[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;border:1px solid var(--color-border);color:var(--color-text-secondary)}.btn-skip[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-surface-hover);color:var(--color-text)}.btn-submit[_ngcontent-%COMP%]{flex:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;background:var(--color-accent);border:1px solid var(--color-accent);color:#fff}.btn-submit[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--color-accent-dark)}.btn-skip[_ngcontent-%COMP%]:disabled, .btn-submit[_ngcontent-%COMP%]:disabled{opacity:.6;cursor:not-allowed}.survey-footnote[_ngcontent-%COMP%]{margin:0;padding:0 22px 16px;font-size:.75rem;color:var(--color-text-muted);text-align:center}@media (max-width: 480px){.survey-overlay[_ngcontent-%COMP%]{padding:0;align-items:flex-end}.survey-modal[_ngcontent-%COMP%]{max-width:100%;max-height:94vh;max-height:94dvh;border-radius:16px 16px 0 0;border-bottom:none}.survey-header[_ngcontent-%COMP%]{padding:18px 16px 14px}.survey-body[_ngcontent-%COMP%]{padding:16px}.survey-error[_ngcontent-%COMP%]{margin:0 16px}.survey-actions[_ngcontent-%COMP%]{padding:14px 16px 8px}.survey-footnote[_ngcontent-%COMP%]{padding:0 16px 14px}.options[_ngcontent-%COMP%], .text-answer[_ngcontent-%COMP%]{margin-left:0}.text-answer[_ngcontent-%COMP%]{width:100%}.question-help[_ngcontent-%COMP%]{margin-left:0}}"]})};function O$(n,t){if(n&1){let e=L();r(0,"div",0)(1,"div",12)(2,"div",13),w(3,"i",14),a(),r(4,"h2",15),l(5,"Update Required"),a(),r(6,"p",16),l(7,"A new version of the app is available. Please update to continue."),a(),r(8,"button",17),S("click",function(){k(e);let o=h();return O(o.applyUpdate())}
116),w(9,"i",18),l(10," Update Now "),a()()()}}var l0=class n{constructor(t,e,i,o,s,m,f){this.themeService=t;this.router=e;this.pushService=i;this.authService=o;this.swUpdate=s;this.ngZone=m;this.courtConfigService=f}title="court-reservation-system";updateAvailable=!1;courtConfig=null;pushToastVisible=!1;pushToastTitle="";pushToastBody="";pushToastUrl="";pushToastTimer=null;initialNgswTimestamp=null;appOpenedAt=Date.now();static AUTO_UPDATE_WINDOW_MS=3e4;onVisibilityChange=()=>{document.visibilityState==="visible"&&(this.authService.evictExpiredSession(),this.checkForUpdate(),Er()||this.pollNgswVersion())};ngOnInit(){this.authService.evictExpiredSession(),this.courtConfigService.load(),this.courtConfigService.getConfig().subscribe(t=>{this.courtConfig=t,t&&(t.logoPath&&this.updateFavicon(t.logoPath),this.updatePwaMetadata(t))}),this.themeService.syncWithServer(),this.authService.isAuthenticated()&&this.pushService.subscribe(),this.router.events.subscribe(t=>{t instanceof Yl&&this.authService.isAuthenticated()&&this.pushService.subscribe()}),this.pushService.initListeners((t,e,i)=>{this.showPushToast(t,e,i)}),this.initServiceWorkerUpdates(),document.addEventListener("visibilitychange",this.onVisibilityChange)}ngOnDestroy(){document.removeEventListener("visibilitychange",this.onVisibilityChange)}initServiceWorkerUpdates(){Er()||(this.pollNgswVersion(),setInterval(()=>this.pollNgswVersion(),5*60*1e3)),this.swUpdate.isEnabled&&(navigator.serviceWorker?.ready.then(()=>this.checkForUpdate()).catch(()=>{}),setInterval(()=>this.checkForUpdate(),6*60*60*1e3),this.swUpdate.versionUpdates.pipe(xn(t=>t.type==="VERSION_READY")).subscribe(()=>{this.ngZone.run(()=>this.onNewVersionDetected())}),this.swUpdate.unrecoverable.subscribe(()=>{window.location.reload()}))}checkForUpdate(){this.swUpdate.isEnabled&&this.swUpdate.checkForUpdate().catch(()=>{})}pollNgswVersion(){return ue(this,null,function*(){try{let t=yield fetch("/ngsw.json?ts="+Date.now(),{cache:"no-store",headers:{"ngsw-bypass":"true"}});if(!t.ok)return;let i=(yield t.json()).timestamp;if(!i)return;this.initialNgswTimestamp===null?this.initialNgswTimestamp=i:i!==this.initialNgswTimestamp&&this.ngZone.run(()=>this.onNewVersionDetected())}catch{}})}onNewVersionDetected(){Date.now()-this.appOpenedAt<n.AUTO_UPDATE_WINDOW_MS?this.applyUpdate():this.updateAvailable=!0}applyUpdate(){this.swUpdate.activateUpdate().catch(()=>{}).finally(()=>this.clearCachesAndReload())}clearCachesAndReload(){return ue(this,null,function*(){try{if("caches"in window){let t=yield caches.keys();yield Promise.all(t.map(e=>caches.delete(e)))}}catch{}window.location.reload()})}closePushToast(){this.pushToastVisible=!1,this.pushToastTimer&&(clearTimeout(this.pushToastTimer),this.pushToastTimer=null)}navigatePushToast(){this.pushToastUrl&&this.router.navigateByUrl(this.pushToastUrl),this.closePushToast()}showPushToast(t,e,i){this.ngZone.run(()=>{this.pushToastTimer&&clearTimeout(this.pushToastTimer),this.pushToastTitle=t,this.pushToastBody=e,this.pushToastUrl=i||"",this.pushToastVisible=!0,this.pushToastTimer=setTimeout(()=>{this.pushToastVisible=!1,this.pushToastTimer=null},6e3)})}updateFavicon(t){let e=document.querySelector('link[rel="icon"]'),i=document.querySelector('link[rel="apple-touch-icon"]');e&&(e.href=t),i&&(i.href=t)}updatePwaMetadata(t){document.title=t.courtName||document.title;let e=document.querySelector('meta[name="apple-mobile-web-app-title"]');e&&(e.content=t.shortName||t.courtName||document.title)}get isGroupChatRoute(){return this.router.url.startsWith("/group-chat")}get isFullscreenRoute(){return this.router.url.startsWith("/group-chat")}static \u0275fac=function(e){return new(e||n)(ae(Yi),ae(nt),ae(Au),ae(je),ae(Tu),ae(Nn),ae(Fn))};static \u0275cmp=We({type:n,selectors:[["app-root"]],hostVars:2,hostBindings:function(e,i){e&2&&te("no-page-scroll",i.isFullscreenRoute)},decls:28,vars:10,consts:[[1,"update-overlay"],[1,"push-toast",3,"click"],[1,"push-toast-icon"],[1,"bi","bi-bell-fill"],[1,"push-toast-content"],[1,"push-toast-title"],[1,"push-toast-body"],["aria-label","Close",1,"push-toast-close",3,"click"],[1,"footer"],["routerLink","/terms-and-conditions",1,"footer-link"],["routerLink","/privacy-policy",1,"footer-link"],["href","https://trendstartdigital.com/","target","_blank","rel","noopener",1,"footer-link"],[1,"update-modal"],[1,"update-modal-icon"],[1,"bi","bi-arrow-up-circle-fill"],[1,"update-modal-title"],[1,"update-modal-body"],[1,"update-modal-btn",3,"click"],[1,"bi","bi-download"]],template:function(e,i){e&1&&(w(0,"app-navigation"),A(1,O$,11,0,"div",0),w(2,"app-survey-prompt"),r(3,"div",1),S("click",function(){return i.navigatePushToast()}),r(4,"div",2),w(5,"i",3),a(),r(6,"div",4)(7,"div",5),l(8),a(),r(9,"div",6),l(10),a()(),r(11,"button",7),S("click",function(s){return s.stopPropagation(),i.closePushToast()}),l(12,"\xD7"),a()(),w(13,"router-outlet"),r(14,"footer",8)(15,"a",9),l(16,"Terms & Conditions"),a(),l(17," \xB7 "),r(18,"a",10),l(19,"Privacy Policy"),a(),w(20,"br"),r(21,"span"),l(22),a(),w(23,"br"),r(24,"span"),l(25,"Powered by "),r(26,"a",11),l(27,"Trend Start Digital PH"),a()()()),e&2&&(d(),ql(i.updateAvailable?1:-1),d(2),te("show",i.pushToastVisible)("push-toast-clickable",!!i.pushToastUrl),d(5),R(i.pushToastTitle),d(2),R(i.pushToastBody),d(4),te("footer-hidden-mobile",i.isGroupChatRoute),d(8),R((i.courtConfig==null?null:i.courtConfig.footerText)||"\xA9 2025 Pickleball Hub @ Tiendesitas"))},dependencies:[Pu,Xl,Ge,a0,s0],styles:[".update-overlay[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:99999;background:#000000bf;display:flex;align-items:center;justify-content:center;padding:1.25rem;overflow-y:auto}.update-modal[_ngcontent-%COMP%]{background:var(--color-surface, #fff);color:var(--color-text, #111);border-radius:16px;padding:2rem 1.75rem;max-width:360px;width:100%;text-align:center;box-shadow:0 8px 40px #0000004d;box-sizing:border-box;margin:auto}.update-modal-icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--color-accent);margin-bottom:.75rem}.update-modal-title[_ngcontent-%COMP%]{font-size:1.25rem;font-weight:700;margin:0 0 .5rem}.update-modal-body[_ngcontent-%COMP%]{font-size:.9rem;color:var(--color-text-secondary, #555);margin:0 0 1.5rem;line-height:1.5}.update-modal-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.5rem;padding:.65rem 1.75rem;background:var(--color-accent);color:#fff;border:none;border-radius:24px;font-size:.95rem;font-weight:700;cursor:pointer;transition:opacity .2s}.update-modal-btn[_ngcontent-%COMP%]:active{opacity:.85}.push-toast[_ngcontent-%COMP%]{position:fixed;top:40px;right:32px;z-index:99999;display:flex;align-items:flex-start;gap:12px;background:var(--color-surface);color:var(--color-text);border-left:4px solid var(--color-accent);border-radius:8px;box-shadow:var(--shadow-lg);padding:14px 16px;min-width:300px;max-width:420px;transform:translate(500px);opacity:0;pointer-events:none;transition:transform .35s cubic-bezier(.4,0,.2,1),opacity .35s}.push-toast.show[_ngcontent-%COMP%]{transform:translate(0);opacity:1;pointer-events:auto}.push-toast-icon[_ngcontent-%COMP%]{font-size:20px;color:var(--color-accent);flex-shrink:0;margin-top:1px}.push-toast-content[_ngcontent-%COMP%]{flex:1;min-width:0}.push-toast-title[_ngcontent-%COMP%]{font-weight:700;font-size:14px;color:var(--color-text);margin-bottom:3px}.push-toast-body[_ngcontent-%COMP%]{font-size:13px;color:var(--color-text-secondary);line-height:1.4;word-break:break-word}.push-toast-close[_ngcontent-%COMP%]{background:none;border:none;color:var(--color-text-muted);font-size:20px;cursor:pointer;padding:0;line-height:1;flex-shrink:0;
116opacity:0;transition:opacity .2s,color .2s}.push-toast-clickable[_ngcontent-%COMP%]{cursor:pointer}.push-toast-clickable[_ngcontent-%COMP%]:hover{background:var(--color-surface-hover)}.push-toast[_ngcontent-%COMP%]:hover .push-toast-close[_ngcontent-%COMP%]{opacity:1}.push-toast-close[_ngcontent-%COMP%]:hover{color:var(--color-danger)}@media (max-width: 480px){.push-toast[_ngcontent-%COMP%]{top:12px;right:12px;left:12px;max-width:100%}}"]})};yu(l0,X2).catch(n=>console.error(n));
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.