Files
prod/frontend/dist/assets/GameView-CoeLxBN4.js
T
2026-10-11 02:38:28 +07:00

7 lines
70 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{Ct as e,Dt as t,Fn as n,In as r,It as i,Jt as a,Kt as o,Ln as s,Mt as c,Ot as l,Q as u,Rt as d,St as f,U as p,Ut as m,Vt as h,Wt as g,Xt as _,Yt as v,Zt as y,_n as b,an as x,bt as S,d as C,en as w,f as T,g as E,hn as D,ht as O,in as k,kt as A,l as ee,nn as j,nt as M,p as te,tt as ne,u as re,wt as N,xt as P,yn as F}from"./client-Cr-cm5gA.js";import{d as ie,t as I}from"./Card-BKTR7RSt.js";import{n as ae,r as oe,t as se}from"./es-B8t08Ksa.js";import{i as ce}from"./Suffix-CvlR_XVb.js";import{t as L}from"./Modal-p242D5VD.js";import{t as le}from"./use-merged-state-3avmaBFV.js";import{n as ue,t as R}from"./Button-ywRLIydo.js";import{n as de,t as fe}from"./Tabs-DXT16ZKz.js";import{t as pe}from"./Select-BtP2ekMJ.js";import{i as z,o as B,s as V,t as H}from"./_plugin-vue_export-helper-D-vCjaLb.js";import{t as me}from"./Upload-COQNiRj-.js";import{n as he}from"./use-form-item-D5MDIr54.js";import{t as ge}from"./Add-C0eb93oO.js";import{t as U}from"./Input-DQgehthd.js";import{n as _e,t as ve}from"./Switch-CR7nht5f.js";import{t as W}from"./Alert-CzuICZ6p.js";import{t as G}from"./Space-DlNRQ2oe.js";import{t as K}from"./Flex-lSz649iM.js";import{t as ye}from"./Rate-C4fTGXsf.js";import{t as be}from"./QrCode-DCMU89nB.js";import{t as xe}from"./text-BZwhTg6j.js";import{E as Se,G as Ce,Q as q,at as we,n as Te,ot as J,st as Y,t as Ee,w as X}from"./index-DvRZPtUt.js";import{n as De,t as Oe}from"./HeaderMenu-BACZAM90.js";import{t as ke}from"./binary_client-VPfMswPT.js";import{n as Ae,r as je}from"./application-BJsoYEct.js";import{n as Me,t as Ne}from"./datetime-BJNH0M1T.js";import{t as Pe}from"./useSimplePolling-BMeRWyaB.js";function Fe(e){let{textColorDisabled:t}=e;return{iconColorDisabled:t}}var Ie=T({name:`InputNumber`,common:C,peers:{Button:X,Input:Se},self:Fe}),Le=ne([M(`input-number-suffix`,`
display: inline-block;
margin-right: 10px;
`),M(`input-number-prefix`,`
display: inline-block;
margin-left: 10px;
`)]);function Re(e){return e==null||typeof e==`string`&&e.trim()===``?null:Number(e)}function ze(e){return e.includes(`.`)&&(/^(-)?\d+.*(\.|0)$/.test(e)||/^-?\d*$/.test(e))||e===`-`||e===`-0`}function Be(e){return e==null?!0:!Number.isNaN(e)}function Ve(e,t){return typeof e==`number`?t===void 0?String(e):e.toFixed(t):``}function He(e){if(e===null)return null;if(typeof e==`number`)return e;{let t=Number(e);return Number.isNaN(t)?null:t}}var Ue=800,We=100,Ge=A({name:`InputNumber`,props:Object.assign(Object.assign({},te.props),{autofocus:Boolean,loading:{type:Boolean,default:void 0},placeholder:String,defaultValue:{type:Number,default:null},value:Number,step:{type:[Number,String],default:1},min:[Number,String],max:[Number,String],size:String,disabled:{type:Boolean,default:void 0},validator:Function,bordered:{type:Boolean,default:void 0},showButton:{type:Boolean,default:!0},buttonPlacement:{type:String,default:`right`},inputProps:Object,readonly:Boolean,clearable:Boolean,keyboard:{type:Object,default:{}},updateValueOnInput:{type:Boolean,default:!0},round:{type:Boolean,default:void 0},parse:Function,format:Function,precision:Number,status:String,"onUpdate:value":[Function,Array],onUpdateValue:[Function,Array],onFocus:[Function,Array],onBlur:[Function,Array],onClear:[Function,Array],onChange:[Function,Array]}),slots:Object,setup(e){let{mergedBorderedRef:t,mergedClsPrefixRef:n,mergedRtlRef:r,mergedComponentPropsRef:i}=p(e),a=te(`InputNumber`,`-input-number`,Le,Ie,e,n),{localeRef:o}=ce(`InputNumber`),s=he(e,{mergedSize:t=>{let{size:n}=e;if(n)return n;let{mergedSize:r}=t||{};return r?.value?r.value:i?.value?.InputNumber?.size||`medium`}}),{mergedSizeRef:c,mergedDisabledRef:l,mergedStatusRef:f}=s,m=D(null),h=D(null),g=D(null),_=D(e.defaultValue),v=le(b(e,`value`),_),y=D(``),x=e=>{let t=String(e).split(`.`)[1];return t?t.length:0},C=t=>{let n=[e.min,e.max,e.step,t].map(e=>e===void 0?0:x(e));return Math.max(...n)},w=q(()=>{let{placeholder:t}=e;return t===void 0?o.value.placeholder:t}),T=q(()=>{let t=He(e.step);return t===null||t===0?1:Math.abs(t)}),O=q(()=>{let t=He(e.min);return t===null?null:t}),k=q(()=>{let t=He(e.max);return t===null?null:t}),A=()=>{let{value:t}=v;if(Be(t)){let{format:n,precision:r}=e;n?y.value=n(t):t===null||r===void 0||x(t)>r?y.value=Ve(t,void 0):y.value=Ve(t,r)}else y.value=String(t)};A();let ee=t=>{let{value:n}=v;if(t===n){A();return}let{"onUpdate:value":r,onUpdateValue:i,onChange:a}=e,{nTriggerFormInput:o,nTriggerFormChange:c}=s;a&&V(a,t),i&&V(i,t),r&&V(r,t),_.value=t,o(),c()},M=({offset:t,doUpdateIfValid:n,fixPrecision:r,isInputing:i})=>{let{value:a}=y;if(i&&ze(a))return!1;let o=(e.parse||Re)(a);if(o===null)return n&&ee(null),null;if(Be(o)){let a=x(o),{precision:s}=e;if(s!==void 0&&s<a&&!r)return!1;let c=Number.parseFloat((o+t).toFixed(s??C(o)));if(Be(c)){let{value:t}=k,{value:r}=O;if(t!==null&&c>t){if(!n||i)return!1;c=t}if(r!==null&&c<r){if(!n||i)return!1;c=r}return e.validator&&!e.validator(c)?!1:(n&&ee(c),c)}}return!1},ne=q(()=>M({offset:0,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1})===!1),re=q(()=>{let{value:t}=v;if(e.validator&&t===null)return!1;let{value:n}=T;return M({offset:-n,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1})!==!1}),N=q(()=>{let{value:t}=v;if(e.validator&&t===null)return!1;let{value:n}=T;return M({offset:+n,doUpdateIfValid:!1,isInputing:!1,fixPrecision:!1})!==!1});function P(t){let{onFocus:n}=e,{nTriggerFormFocus:r}=s;n&&V(n,t),r()}function F(t){if(t.target===m.value?.wrapperElRef)return;let n=M({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0});if(n!==!1){let e=m.value?.inputElRef;e&&(e.value=String(n||``)),v.value===n&&A()}else A();let{onBlur:r}=e,{nTriggerFormBlur:i}=s;r&&V(r,t),i(),d(()=>{A()})}function I(t){let{onClear:n}=e;n&&V(n,t)}function ae(){let{value:t}=N;if(!t){me();return}let{value:n}=v;if(n===null)e.validator||ee(ue());else{let{value:e}=T;M({offset:e,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})}}function oe(){let{value:t}=re;if(!t){B();return}let{value:n}=v;if(n===null)e.validator||ee(ue());else{let{value:e}=T;M({offset:-e,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})}}let se=P,L=F;function ue(){if(e.validator)return null;let{value:t}=O,{value:n}=k;return t===null?n===null?0:Math.min(0,n):Math.max(0,t)}function R(e){I(e),ee(null)}function de(e){var t;g.value?.$el.contains(e.target)&&e.preventDefault(),h.value?.$el.contains(e.target)&&e.preventDefault(),(t=m.value)==null||t.activate()}let fe=null,pe=null,z=null;function B(){z&&=(window.clearTimeout(z),null),fe&&=(window.clearInterval(fe),null)}let H=null;function me(){H&&=(window.clearTimeout(H),null),pe&&=(window.clearInterval(pe),null)}function ge(){B(),z=window.setTimeout(()=>{fe=window.setInterval(()=>{oe()},We)},Ue),ie(`mouseup`,document,B,{once:!0})}function U(){me(),H=window.setTimeout(()=>{pe=window.setInterval(()=>{ae()},We)},Ue),ie(`mouseup`,document,me,{once:!0})}let _e=()=>{pe||ae()},ve=()=>{fe||oe()};function W(t){var n;if(t.key===`Enter`){if(t.target===m.value?.wrapperElRef)return;M({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})!==!1&&((n=m.value)==null||n.deactivate())}else if(t.key===`ArrowUp`){if(!N.value||e.keyboard.ArrowUp===!1)return;t.preventDefault(),M({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})!==!1&&ae()}else if(t.key===`ArrowDown`){if(!re.value||e.keyboard.ArrowDown===!1)return;t.preventDefault(),M({offset:0,doUpdateIfValid:!0,isInputing:!1,fixPrecision:!0})!==!1&&oe()}}function G(t){y.value=t,e.updateValueOnInput&&!e.format&&!e.parse&&e.precision===void 0&&M({offset:0,doUpdateIfValid:!0,isInputing:!0,fixPrecision:!1})}j(v,()=>{A()});let K={focus:()=>m.value?.focus(),blur:()=>m.value?.blur(),select:()=>m.value?.select()},ye=E(`InputNumber`,r,n);return Object.assign(Object.assign({},K),{rtlEnabled:ye,inputInstRef:m,minusButtonInstRef:h,addButtonInstRef:g,mergedClsPrefix:n,mergedBordered:t,uncontrolledValue:_,mergedValue:v,mergedPlaceholder:w,displayedValueInvalid:ne,mergedSize:c,mergedDisabled:l,displayedValue:y,addable:N,minusable:re,mergedStatus:f,handleFocus:se,handleBlur:L,handleClear:R,handleMouseDown:de,handleAddClick:_e,handleMinusClick:ve,handleAddMousedown:U,handleMinusMousedown:ge,handleKeyDown:W,handleUpdateDisplayedValue:G,mergedTheme:a,inputThemeOverrides:{paddingSmall:`0 8px 0 10px`,paddingMedium:`0 8px 0 12px`,paddingLarge:`0 8px 0 14px`},buttonThemeOverrides:S(()=>{let{self:{iconColorDisabled:e}}=a.value,[t,n,r,i]=u(e);return{textColorTextDisabled:`rgb(${t}, ${n}, ${r})`,opacityDisabled:`${i}`}})})},render(){let{mergedClsPrefix:e,$slots:t}=this,n=()=>c(ue,{text:!0,disabled:!this.minusable||this.mergedDisabled||this.readonly,focusable:!1,theme:this.mergedTheme.peers.Button,themeOverrides:this.mergedTheme.peerOverrides.Button,builtinThemeOverrides:this.buttonThemeOverrides,onClick:this.handleMinusClick,onMousedown:this.handleMinusMousedown,ref:`minusButtonInstRef`},{icon:()=>z(t[`minus-icon`],()=>[c(Ce,{clsPrefix:e},{default:()=>c(_e,null)})])}),r=()=>c(ue,{text:!0,disabled:!this.addable||this.mergedDisabled||this.readonly,focusable:!1,theme:this.mergedTheme.peers.Button,themeOverrides:this.mergedTheme.peerOverrides.Button,builtinThemeOverrides:this.buttonThemeOverrides,onClick:this.handleAddClick,onMousedown:this.handleAddMousedown,ref:`addButtonInstRef`},{icon:()=>z(t[`add-icon`],()=>[c(Ce,{clsPrefix:e},{default:()=>c(ge,null)})])});return c(`div`,{class:[`${e}-input-number`,this.rtlEnabled&&`${e}-input-number--rtl`]},c(U,{ref:`inputInstRef`,autofocus:this.autofocus,status:this.mergedStatus,bordered:this.mergedBordered,loading:this.loading,value:this.displayedValue,onUpdateValue:this.handleUpdateDisplayedValue,theme:this.mergedTheme.peers.Input,themeOverrides:this.mergedTheme.peerOverrides.Input,builtinThemeOverrides:this.inputThemeOverrides,size:this.mergedSize,placeholder:this.mergedPlaceholder,disabled:this.mergedDisabled,readonly:this.readonly,round:this.round,textDecoration:this.displayedValueInvalid?`line-through`:void 0,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeydown:this.handleKeyDown,onMousedown:this.handleMouseDown,onClear:this.handleClear,clearable:this.clearable,inputProps:this.inputProps,internalLoadingBeforeSuffix:!0},{prefix:()=>this.showButton&&this.buttonPlacement===`both`?[n(),B(t.prefix,t=>t?c(`span`,{class:`${e}-input-number-prefix`},t):null)]:t.prefix?.call(t),suffix:()=>this.showButton?[B(t.suffix,t=>t?c(`span`,{class:`${e}-input-number-suffix`},t):null),this.buttonPlacement===`right`?n():null,r()]:t.suffix?.call(t)}))}}),Z={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 32 32`},Ke=A({name:`Flag`,render:function(e,t){return o(),N(`svg`,Z,t[0]||=[P(`path`,{d:`M6 30H4V2h24l-5.8 9l5.8 9H6zm0-12h18.33l-4.53-7l4.53-7H6z`,fill:`currentColor`},null,-1)])}}),qe={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 32 32`},Je=A({name:`Pause`,render:function(e,t){return o(),N(`svg`,qe,t[0]||=[P(`path`,{d:`M12 8v16H8V8h4m0-2H8a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2z`,fill:`currentColor`},null,-1),P(`path`,{d:`M24 8v16h-4V8h4m0-2h-4a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h4a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2z`,fill:`currentColor`},null,-1)])}}),Ye={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 32 32`},Xe=A({name:`Play`,render:function(e,t){return o(),N(`svg`,Ye,t[0]||=[P(`path`,{d:`M7 28a1 1 0 0 1-1-1V5a1 1 0 0 1 1.482-.876l20 11a1 1 0 0 1 0 1.752l-20 11A1 1 0 0 1 7 28zM8 6.69V25.31L24.925 16z`,fill:`currentColor`},null,-1)])}}),Ze={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 32 32`},Qe=A({name:`Reset`,render:function(e,t){return o(),N(`svg`,Ze,t[0]||=[P(`path`,{d:`M18 28A12 12 0 1 0 6 16v6.2l-3.6-3.6L1 20l6 6l6-6l-1.4-1.4L8 22.2V16a10 10 0 1 1 10 10z`,fill:`currentColor`},null,-1)])}}),$e={xmlns:`http://www.w3.org/2000/svg`,"xmlns:xlink":`http://www.w3.org/1999/xlink`,viewBox:`0 0 32 32`},et=A({name:`Trophy`,render:function(e,t){return o(),N(`svg`,$e,t[0]||=[P(`path`,{d:`M26 7h-2V6a2.002 2.002 0 0 0-2-2H10a2.002 2.002 0 0 0-2 2v1H6a2.002 2.002 0 0 0-2 2v3a4.005 4.005 0 0 0 4 4h.322A8.169 8.169 0 0 0 15 21.934V26h-5v2h12v-2h-5v-4.069A7.966 7.966 0 0 0 23.74 16H24a4.005 4.005 0 0 0 4-4V9a2.002 2.002 0 0 0-2-2zM8 14a2.002 2.002 0 0 1-2-2V9h2zm14 0a6 6 0 0 1-6.186 5.997A6.2 6.2 0 0 1 10 13.707V6h12zm4-2a2.002 2.002 0 0 1-2 2V9h2z`,fill:`currentColor`},null,-1)])}}),tt={key:0,class:`timer-preview`},nt=[`src`],rt=[`src`],it={key:3,class:`preview-message`},at={key:4,class:`preview-message`},ot={key:5,class:`preview-message`},st={key:6,class:`preview-message`},ct={key:7,class:`preview-results`},lt=[`src`],ut=H(A({__name:`ScreenPreview`,props:{state:{},questions:{},teams:{}},setup(t){let n=t,i=D(Date.now()),c=D(0),l=D(Date.now()),u=D(),d=null,f=S(()=>{let e=n.state.backgroundImage||n.state.coverImage;return e?{backgroundImage:`linear-gradient(rgb(0 0 0 / 55%), rgb(0 0 0 / 55%)), url("${e}")`}:{}}),p=S(()=>n.state.timerState===`SCREEN_TIMER_STATE_RUNNING`?Math.max(0,c.value-(i.value-l.value)/1e3):c.value),h=S(()=>{let e=Math.floor(p.value/60),t=Math.floor(p.value%60);return`${String(e).padStart(2,`0`)}:${String(t).padStart(2,`0`)}`}),_=S(()=>je(n.state.introAudio)),v=S(()=>je(n.state.conclusionVideo));return j(()=>[n.state.timerRemainingSeconds,n.state.timerState,n.state.stateVersion],()=>{let e=Math.max(0,Number(n.state.timerRemainingSeconds||0));if(n.state.timerState===`SCREEN_TIMER_STATE_RUNNING`&&u.value===n.state.timerState){let t=Math.max(0,c.value-(Date.now()-l.value)/1e3);if(Math.abs(e-t)<=.5)return}c.value=e,l.value=Date.now(),u.value=n.state.timerState},{immediate:!0}),m(()=>{d=window.setInterval(()=>{i.value=Date.now()},250)}),g(()=>{d!=null&&window.clearInterval(d)}),(n,i)=>(o(),N(`div`,{class:`screen-preview`,style:r(f.value)},[t.state.mode===`SCREEN_MODE_TIMER`?(o(),N(`div`,tt,[P(`h2`,null,s(t.state.timerLabel||`Перерыв`),1),P(`strong`,null,s(h.value),1)])):t.state.mode===`SCREEN_MODE_INTRO`&&_.value?(o(),N(`audio`,{key:1,src:_.value,controls:``},null,8,nt)):t.state.mode===`SCREEN_MODE_CONCLUSION`&&v.value?(o(),N(`video`,{key:2,src:v.value,autoplay:``,class:`preview-video`,loop:``,muted:``,playsinline:``},null,8,rt)):t.state.mode===`SCREEN_MODE_CONCLUSION`?(o(),N(`div`,it,` Видео закрывашки не задано `)):t.state.mode===`SCREEN_MODE_INTRO_DONE`?(o(),N(`div`,at,`Успехов`)):t.state.mode===`SCREEN_MODE_CONCLUSION_DONE`?(o(),N(`div`,ot,` Спасибо за игру! `)):t.state.mode===`SCREEN_MODE_TEXT`?(o(),N(`div`,st,s(t.state.text),1)):t.state.mode===`SCREEN_MODE_RESULTS`?(o(),N(`div`,ct,[i[4]||=P(`h2`,null,`Результаты`,-1),P(`table`,null,[P(`thead`,null,[P(`tr`,null,[i[0]||=P(`th`,null,`Место`,-1),i[1]||=P(`th`,null,`Команда`,-1),(o(!0),N(O,null,a(t.questions,e=>(o(),N(`th`,{key:e.code},s(e.code),1))),128)),i[2]||=P(`th`,null,`Сумма`,-1),i[3]||=P(`th`,null,`Ходы`,-1)])]),P(`tbody`,null,[(o(!0),N(O,null,a(t.teams,e=>(o(),N(`tr`,{key:e.team?.ID},[P(`td`,null,s(e.place),1),P(`td`,null,s(e.team?.name),1),(o(!0),N(O,null,a(t.questions,t=>(o(),N(`td`,{key:t.code},s(e.answers?.find(e=>e.questionCode===t.code)?.score??0),1))),128)),P(`td`,null,s(e.totalScore),1),P(`td`,null,s(e.actionsCount),1)]))),128))])])])):t.state.coverImage?(o(),N(`img`,{key:8,src:t.state.coverImage,alt:`Обложка дела`,class:`preview-cover`},null,8,lt)):e(``,!0)],4))}}),[[`__scopeId`,`data-v-d5134fb8`]]),Q=H(A({__name:`UiBlock`,props:{tag:{default:`div`}},setup(e){return(t,n)=>(o(),f(y(e.tag),{class:`ui-block`},{default:k(()=>[v(t.$slots,`default`,{},void 0,!0)]),_:3}))}}),[[`__scopeId`,`data-v-80193f22`]]),dt={class:`map-preview-layout`},ft=[`onPointerdown`],pt=[`onPointerdown`],mt={key:2},ht=[`onClick`],gt={key:1,class:`screen-preview-placeholder`},_t={class:`screen-plan`},vt={key:0,class:`screen-empty`},yt=20,bt=H(A({__name:`GameMapPanel`,props:{mapItems:{},teams:{},screens:{},previewQuestions:{},previewTeams:{},screenPlan:{},screenPlanDraft:{},screenPlanDirty:{type:Boolean},screenPlanSaving:{type:Boolean},screenPlanMode:{},screenVolume:{},screenPosition:{}},emits:[`saveItem`,`dragging`,`giveApplication`,`addStep`,`edit`,`cancel`,`removeStep`,`moveStep`,`dirty`,`clearPlan`,`save`,`setStep`,`command`,`update:screenVolume`,`update:screenPosition`],setup(i,{emit:c}){let u=i,d=c,p=D(1),m=D({x:0,y:0}),g=D(),_=S(()=>u.screens.find(e=>e.status===`connected`)||u.screens[0]),v=S(()=>new Map(u.teams.filter(e=>e.applications?.length).map(e=>[e.ID,e]))),y=[{label:`Обложка`,value:`SCREEN_MODE_COVER`},{label:`Введение`,value:`SCREEN_MODE_INTRO`},{label:`Успехов`,value:`SCREEN_MODE_INTRO_DONE`},{label:`Закрывашка`,value:`SCREEN_MODE_CONCLUSION`},{label:`Спасибо за игру`,value:`SCREEN_MODE_CONCLUSION_DONE`},{label:`Результаты`,value:`SCREEN_MODE_RESULTS`},{label:`Таймер`,value:`SCREEN_MODE_TIMER`},{label:`Текст`,value:`SCREEN_MODE_TEXT`}],b,C;function w(e){let t=g.value;if(!t)return;let n=t.getBoundingClientRect();return{x:(e.clientX-n.left-t.clientLeft-m.value.x)/p.value,y:(e.clientY-n.top-t.clientTop-m.value.y)/p.value}}function T(e,t){let n=w(t);n&&(b={item:e,offsetX:n.x-(e.x||0),offsetY:n.y-(e.y||0)},d(`dragging`,!0),window.addEventListener(`pointermove`,E),window.addEventListener(`pointerup`,A,{once:!0}),window.addEventListener(`pointercancel`,A,{once:!0}))}function E(e){if(!b)return;let t=w(e);t&&(b.item.x=Math.round((t.x-b.offsetX)/yt)*yt,b.item.y=Math.round((t.y-b.offsetY)/yt)*yt)}function A(){if(!b)return;let e=b.item;b=void 0,window.removeEventListener(`pointermove`,E),window.removeEventListener(`pointerup`,A),window.removeEventListener(`pointercancel`,A),d(`dragging`,!1),d(`saveItem`,e)}function ee(e){e.hidden=!e.hidden,d(`saveItem`,e,e.hidden)}function j(e){p.value=Math.min(2,Math.max(.5,Number((p.value+e).toFixed(2))))}function M(){p.value=1,m.value={x:0,y:0}}function te(e){e.button===0&&(C={startX:e.clientX,startY:e.clientY,offsetX:m.value.x,offsetY:m.value.y},window.addEventListener(`pointermove`,ne),window.addEventListener(`pointerup`,re,{once:!0}))}function ne(e){C&&(m.value={x:C.offsetX+e.clientX-C.startX,y:C.offsetY+e.clientY-C.startY})}function re(){C=void 0,window.removeEventListener(`pointermove`,ne)}function ie(e){e.preventDefault(),j(e.deltaY<0?.1:-.1)}return h(()=>{b&&d(`dragging`,!1),window.removeEventListener(`pointermove`,E),window.removeEventListener(`pointerup`,A),window.removeEventListener(`pointercancel`,A),window.removeEventListener(`pointermove`,ne),window.removeEventListener(`pointerup`,re)}),(c,u)=>(o(),N(`div`,dt,[l(Q,null,{default:k(()=>[l(F(K),{align:`center`,justify:`space-between`,class:`screen-header`},{default:k(()=>[u[18]||=P(`p`,{class:`screens-title`},`Карта помещения`,-1),l(F(G),null,{default:k(()=>[l(F(R),{size:`small`,onClick:u[0]||=e=>j(-.1)},{default:k(()=>[...u[15]||=[t(`−`,-1)]]),_:1}),l(F(xe),null,{default:k(()=>[t(s(Math.round(p.value*100))+`%`,1)]),_:1}),l(F(R),{size:`small`,onClick:u[1]||=e=>j(.1)},{default:k(()=>[...u[16]||=[t(`+`,-1)]]),_:1}),l(F(R),{size:`small`,onClick:M},{default:k(()=>[...u[17]||=[t(`Сбросить`,-1)]]),_:1})]),_:1})]),_:1}),P(`div`,{ref_key:`mapField`,ref:g,class:`map-field`,onPointerdown:te,onWheel:ie},[P(`div`,{class:`map-canvas`,style:r({transform:`translate(${m.value.x}px, ${m.value.y}px) scale(${p.value})`})},[(o(!0),N(O,null,a(i.mapItems,i=>x((o(),N(`div`,{key:`${i.kind}-${i.itemID}`,class:n([`map-item`,[i.kind===`screen`?`map-screen`:i.kind===`organizer_desk`?`map-organizer-desk`:`map-team`,{"map-team-needs-applications":i.kind===`team`&&v.value.has(i.itemID)}]]),style:r({left:`${i.x||0}px`,top:`${i.y||0}px`}),onPointerdown:Y(e=>i.kind!==`team`&&T(i,e),[`stop`])},[i.kind===`team`?(o(),N(`div`,{key:0,class:`map-team-handle`,onPointerdown:Y(e=>T(i,e),[`stop`])},null,40,pt)):e(``,!0),P(`span`,null,s(i.label),1),i.kind===`team`&&v.value.has(i.itemID)?(o(),f(F(G),{key:1,class:`map-team-applications`,vertical:``},{default:k(()=>[(o(!0),N(O,null,a(v.value.get(i.itemID)?.applications,e=>(o(),f(F(R),{key:e.name,size:`small`,onClick:t=>d(`giveApplication`,v.value.get(i.itemID),e)},{default:k(()=>[t(` Выдать: `+s(e.name),1)]),_:2},1032,[`onClick`]))),128))]),_:2},1024)):e(``,!0),i.kind===`screen`?(o(),N(`small`,mt,s(i.status)+s(i.soundEnabled?` · звук`:``),1)):e(``,!0),P(`button`,{class:`map-item-hide`,type:`button`,onPointerdown:u[2]||=Y(()=>{},[`stop`]),onClick:Y(e=>ee(i),[`stop`])},` × `,40,ht)],46,ft)),[[we,!i.hidden]])),128))],4)],544),i.mapItems.some(e=>e.hidden)?(o(),f(F(G),{key:0,class:`map-hidden-items`},{default:k(()=>[(o(!0),N(O,null,a(i.mapItems.filter(e=>e.hidden),e=>(o(),f(F(R),{key:`hidden-${e.kind}-${e.itemID}`,size:`small`,onClick:t=>ee(e)},{default:k(()=>[t(` Добавить `+s(e.label),1)]),_:2},1032,[`onClick`]))),128))]),_:1})):e(``,!0)]),_:1}),l(Q,{tag:`aside`,class:`screen-preview-panel`},{default:k(()=>[u[41]||=P(`p`,{class:`screens-title`},`Превью экрана`,-1),_.value?.status===`connected`?(o(),f(ut,{key:0,state:_.value,questions:i.previewQuestions,teams:i.previewTeams},null,8,[`state`,`questions`,`teams`])):(o(),N(`div`,gt,`Экран не подключён`)),P(`div`,_t,[l(F(K),{align:`center`,justify:`space-between`,class:`screen-header`},{default:k(()=>[u[23]||=P(`p`,{class:`screens-title`},`План экранов`,-1),l(F(G),null,{default:k(()=>[!i.screenPlan&&i.screenPlanMode===`use`?(o(),f(F(R),{key:0,size:`small`,onClick:u[3]||=e=>d(`addStep`)},{default:k(()=>[...u[19]||=[t(` Создать план `,-1)]]),_:1})):e(``,!0),i.screenPlan&&i.screenPlanMode===`use`?(o(),f(F(R),{key:1,size:`small`,onClick:u[4]||=e=>d(`edit`)},{default:k(()=>[...u[20]||=[t(` Редактировать `,-1)]]),_:1})):e(``,!0),i.screenPlanMode===`edit`?(o(),N(O,{key:2},[l(F(R),{size:`small`,disabled:i.screenPlanSaving,onClick:u[5]||=e=>d(`cancel`)},{default:k(()=>[...u[21]||=[t(` Отменить `,-1)]]),_:1},8,[`disabled`]),l(F(R),{size:`small`,type:`primary`,loading:i.screenPlanSaving,disabled:i.screenPlanSaving,onClick:u[6]||=e=>d(`save`)},{default:k(()=>[...u[22]||=[t(` Сохранить план `,-1)]]),_:1},8,[`loading`,`disabled`])],64)):e(``,!0)]),_:1})]),_:1}),!i.screenPlan&&i.screenPlanMode===`use`?(o(),N(`p`,vt,` План экранов ещё не создан. `)):i.screenPlanMode===`edit`?(o(),N(O,{key:1},[(o(!0),N(O,null,a(i.screenPlanDraft,(n,r)=>(o(),f(F(G),{key:r,class:`screen-plan-step`,align:`center`,justify:`space-between`,wrap:``},{default:k(()=>[l(F(G),{align:`center`,wrap:``},{default:k(()=>[l(F(xe),null,{default:k(()=>[t(s(r+1),1)]),_:2},1024),l(F(pe),{value:n.mode,"onUpdate:value":[e=>n.mode=e,u[7]||=e=>d(`dirty`)],options:y,disabled:i.screenPlanSaving,size:`small`,style:{width:`180px`}},null,8,[`value`,`onUpdate:value`,`disabled`]),n.mode===`SCREEN_MODE_TEXT`?(o(),f(F(U),{key:0,value:n.text,"onUpdate:value":[e=>n.text=e,u[8]||=e=>d(`dirty`)],disabled:i.screenPlanSaving,size:`small`,placeholder:`Текст экрана`,style:{"min-width":`240px`}},null,8,[`value`,`onUpdate:value`,`disabled`])):e(``,!0),n.mode===`SCREEN_MODE_TIMER`?(o(),N(O,{key:1},[l(F(U),{value:n.timerLabel,"onUpdate:value":[e=>n.timerLabel=e,u[9]||=e=>d(`dirty`)],disabled:i.screenPlanSaving,size:`small`,placeholder:`Надпись таймера`},null,8,[`value`,`onUpdate:value`,`disabled`]),l(F(Ge),{value:n.timerDurationSeconds,"onUpdate:value":[e=>n.timerDurationSeconds=e,u[10]||=e=>d(`dirty`)],min:1,max:86400,disabled:i.screenPlanSaving,size:`small`,placeholder:`Секунды`},null,8,[`value`,`onUpdate:value`,`disabled`])],64)):e(``,!0)]),_:2},1024),l(F(G),{class:`screen-plan-actions`},{default:k(()=>[l(F(R),{size:`small`,disabled:i.screenPlanSaving||r===0,onClick:e=>d(`moveStep`,r,-1)},{default:k(()=>[...u[24]||=[t(` ↑ `,-1)]]),_:1},8,[`disabled`,`onClick`]),l(F(R),{size:`small`,disabled:i.screenPlanSaving||r===i.screenPlanDraft.length-1,onClick:e=>d(`moveStep`,r,1)},{default:k(()=>[...u[25]||=[t(` ↓ `,-1)]]),_:1},8,[`disabled`,`onClick`]),l(F(R),{size:`small`,type:`error`,ghost:``,disabled:i.screenPlanSaving,onClick:e=>d(`removeStep`,r)},{default:k(()=>[...u[26]||=[t(` Удалить `,-1)]]),_:1},8,[`disabled`,`onClick`])]),_:2},1024)]),_:2},1024))),128)),l(F(G),null,{default:k(()=>[l(F(R),{size:`small`,disabled:i.screenPlanSaving,onClick:u[11]||=e=>d(`addStep`)},{default:k(()=>[...u[27]||=[t(` Добавить шаг `,-1)]]),_:1},8,[`disabled`]),i.screenPlanDraft.length?(o(),f(F(R),{key:0,size:`small`,disabled:i.screenPlanSaving,onClick:u[12]||=e=>d(`clearPlan`)},{default:k(()=>[...u[28]||=[t(` Удалить план `,-1)]]),_:1},8,[`disabled`])):e(``,!0)]),_:1})],64)):i.screenPlan?(o(!0),N(O,{key:2},a(i.screenPlan.steps||[],(n,r)=>(o(),f(F(G),{key:r,class:`screen-plan-step`,align:`center`,justify:`space-between`,wrap:``},{default:k(()=>[l(F(G),{align:`center`},{default:k(()=>[l(F(xe),null,{default:k(()=>[t(s(r+1),1)]),_:2},1024),l(F(xe),null,{default:k(()=>[t(s(y.find(e=>e.value===n.mode)?.label)+` `,1),n.mode===`SCREEN_MODE_TEXT`?(o(),N(O,{key:0},[t(`: `+s(n.text),1)],64)):n.mode===`SCREEN_MODE_TIMER`?(o(),N(O,{key:1},[t(` : `+s(n.timerLabel)+` (`+s(n.timerDurationSeconds)+` с) `,1)],64)):e(``,!0)]),_:2},1024)]),_:2},1024),l(F(G),{class:`screen-plan-actions`},{default:k(()=>[l(F(R),{size:`small`,type:i.screenPlan.currentStep===r?`primary`:`default`,disabled:i.screenPlan.currentStep===r,onClick:e=>d(`setStep`,r)},{default:k(()=>[...u[29]||=[t(` Показать `,-1)]]),_:1},8,[`type`,`disabled`,`onClick`]),i.screenPlan.currentStep===r?(o(),N(O,{key:0},[n.mode===`SCREEN_MODE_TIMER`?(o(),N(O,{key:0},[l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_TIMER_START`)},{default:k(()=>[...u[30]||=[t(` Старт `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_TIMER_PAUSE`)},{default:k(()=>[...u[31]||=[t(` Пауза `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_TIMER_RESUME`)},{default:k(()=>[...u[32]||=[t(` Продолжить `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_TIMER_RESET`)},{default:k(()=>[...u[33]||=[t(` Сбросить `,-1)]]),_:1},8,[`onClick`])],64)):n.mode===`SCREEN_MODE_INTRO`||n.mode===`SCREEN_MODE_CONCLUSION`?(o(),N(O,{key:1},[l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_PLAY`)},{default:k(()=>[...u[34]||=[t(` Запуск `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_PAUSE`)},{default:k(()=>[...u[35]||=[t(` Пауза `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_RESUME`)},{default:k(()=>[...u[36]||=[t(` Продолжить `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_STOP`)},{default:k(()=>[...u[37]||=[t(` Стоп `,-1)]]),_:1},8,[`onClick`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_REPLAY`)},{default:k(()=>[...u[38]||=[t(` Повтор `,-1)]]),_:1},8,[`onClick`]),l(F(Ge),{value:i.screenVolume,min:0,max:100,step:5,size:`small`,"onUpdate:value":u[13]||=e=>d(`update:screenVolume`,e)},null,8,[`value`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_VOLUME`)},{default:k(()=>[...u[39]||=[t(` Громкость `,-1)]]),_:1},8,[`onClick`]),l(F(Ge),{value:i.screenPosition,min:0,step:5,size:`small`,"onUpdate:value":u[14]||=e=>d(`update:screenPosition`,e)},null,8,[`value`]),l(F(R),{size:`small`,onClick:e=>d(`command`,n.mode,`SCREEN_COMMAND_SEEK`)},{default:k(()=>[...u[40]||=[t(` Перемотать `,-1)]]),_:1},8,[`onClick`])],64)):e(``,!0)],64)):e(``,!0)]),_:2},1024)]),_:2},1024))),128)):e(``,!0)])]),_:1})]))}}),[[`__scopeId`,`data-v-1e1af018`]]),xt=H(A({__name:`ScreenBindingModal`,props:i({binding:{type:Boolean}},{show:{type:Boolean,required:!0},showModifiers:{}}),emits:i([`scanned`],[`update:show`]),setup(n,{emit:r}){let i=w(n,`show`),a=r,c=D(``),u=D(),p=D(!1),m,g=0;function _(){cancelAnimationFrame(g),m?.getTracks().forEach(e=>e.stop()),m=void 0,p.value=!1}function v(e){try{let t=new URL(e,window.location.origin),n=t.searchParams.get(`screenId`),r=t.searchParams.get(`accessToken`);return t.pathname!==`/screen`||!n||!r?void 0:{screenID:n,accessToken:r}}catch{return}}async function y(){let e=window.BarcodeDetector;if(!e||!navigator.mediaDevices?.getUserMedia){c.value=`Сканирование камерой не поддерживается в этом браузере.`;return}c.value=``;try{if(m=await navigator.mediaDevices.getUserMedia({video:{facingMode:`environment`}}),p.value=!0,await d(),!u.value)return;u.value.srcObject=m,await u.value.play();let t=new e,n=async()=>{if(!(!u.value||!m))try{let e=(await t.detect(u.value))[0]?.rawValue;if(e){let t=v(e);if(t){_(),i.value=!1,a(`scanned`,t.screenID,t.accessToken);return}c.value=`Это не QR-код экрана.`}g=requestAnimationFrame(n)}catch{c.value=`Не удалось распознать QR-код.`,_()}};g=requestAnimationFrame(n)}catch{c.value=`Не удалось открыть камеру.`,_()}}function b(){_(),i.value=!1}return j(i,e=>{e?y():_()}),h(_),(r,a)=>(o(),f(F(L),{show:i.value,"onUpdate:show":a[0]||=e=>i.value=e},{default:k(()=>[l(F(I),{style:{width:`min(600px, 94vw)`},title:`Привязать экран`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:b},{default:k(()=>[...a[1]||=[t(` x `,-1)]]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[P(`video`,{ref_key:`scannerVideo`,ref:u,class:`screen-scanner-video`,muted:``,playsinline:``},null,512),c.value?(o(),f(F(W),{key:0,type:`error`},{default:k(()=>[t(s(c.value),1)]),_:1})):e(``,!0),!p.value&&!n.binding?(o(),f(F(R),{key:1,type:`primary`,onClick:y},{default:k(()=>[...a[2]||=[t(` Сканировать QR-код `,-1)]]),_:1})):e(``,!0),p.value?(o(),f(F(R),{key:2,onClick:_},{default:k(()=>[...a[3]||=[t(`Остановить камеру`,-1)]]),_:1})):e(``,!0),n.binding?(o(),f(F(R),{key:3,type:`primary`,loading:``},{default:k(()=>[...a[4]||=[t(`Привязка…`,-1)]]),_:1})):e(``,!0)]),_:1})]),_:1})]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-5f530845`]]),St={key:1,class:`screen-empty`},Ct={class:`screen-status`},wt={key:0,class:`screen-error`},Tt={key:0,class:`track-list`},Et={key:0,class:`track-empty`},Dt={class:`track-main`},Ot={class:`track-number`},kt={class:`track-details`},At={class:`track-name`},jt={class:`volume-control`},Mt=H(A({__name:`GameScreensPanel`,props:{screens:{},screenBinding:{type:Boolean},playlists:{},music:{}},emits:[`bind`,`setSound`,`unbind`,`setMusic`,`createPlaylist`,`deletePlaylist`,`uploadTrack`,`deleteTrack`],setup(r,{emit:i}){let c=r,u=i,d=D(!1),p=D(``);function m(e){e.file.file&&u(`uploadTrack`,e.file.file)}function h(e){e!==c.music?.trackIndex&&u(`setMusic`,{trackIndex:e,positionMs:0})}return(i,g)=>{let v=_(`n-tag`);return o(),N(O,null,[l(Q,null,{default:k(()=>[l(F(K),{align:`center`,justify:`space-between`,class:`screen-header`},{default:k(()=>[g[13]||=P(`p`,{class:`screens-title`},`Экраны`,-1),l(F(R),{size:`small`,onClick:g[0]||=e=>d.value=!0},{default:k(()=>[...g[12]||=[t(` Привязать экран `,-1)]]),_:1})]),_:1}),r.screens.some(e=>e.status===`disconnected`)?(o(),f(F(W),{key:0,type:`warning`,title:`Проверьте подключение экрана`},{default:k(()=>[...g[14]||=[t(` Один или несколько экранов не выходят на связь более минуты. `,-1)]]),_:1})):e(``,!0),r.screens.length===0?(o(),N(`p`,St,`К игре пока не привязаны экраны.`)):(o(!0),N(O,{key:2},a(r.screens,n=>(o(),N(`div`,{key:n.ID,class:`screen-row`},[P(`div`,null,[P(`div`,null,`Экран `+s(n.ID),1),P(`div`,Ct,s(n.status===`connected`?`Онлайн`:`Оффлайн`),1),n.error?(o(),N(`div`,wt,s(n.error),1)):e(``,!0)]),l(F(K),{justify:`end`},{default:k(()=>[n.soundEnabled?(o(),f(v,{key:0,type:`success`},{default:k(()=>[...g[15]||=[t(`Со звуком`,-1)]]),_:1})):(o(),f(F(R),{key:1,size:`small`,onClick:e=>u(`setSound`,n)},{default:k(()=>[...g[16]||=[t(`Назначить звук`,-1)]]),_:1},8,[`onClick`])),l(F(R),{size:`small`,type:`error`,ghost:``,onClick:e=>u(`unbind`,n)},{default:k(()=>[...g[17]||=[t(` Отвязать `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]))),128))]),_:1}),l(xt,{show:d.value,"onUpdate:show":g[1]||=e=>d.value=e,binding:c.screenBinding,onScanned:g[2]||=(e,t)=>u(`bind`,e,t)},null,8,[`show`,`binding`]),l(Q,{class:`music-block`},{default:k(()=>[g[29]||=P(`p`,{class:`screens-title`},`Музыка`,-1),l(F(K),{align:`center`,wrap:``,class:`playlist-actions`},{default:k(()=>[l(F(U),{value:p.value,"onUpdate:value":g[3]||=e=>p.value=e,placeholder:`Новый плейлист`,style:{"max-width":`220px`}},null,8,[`value`]),l(F(R),{size:`small`,disabled:!p.value.trim(),onClick:g[4]||=e=>{u(`createPlaylist`,p.value.trim()),p.value=``}},{default:k(()=>[...g[18]||=[t(` Создать `,-1)]]),_:1},8,[`disabled`]),c.music?.playlist?.ID?(o(),f(F(R),{key:0,size:`small`,type:`error`,ghost:``,onClick:g[5]||=e=>u(`deletePlaylist`,c.music.playlist.ID)},{default:k(()=>[...g[19]||=[t(` Удалить плейлист `,-1)]]),_:1})):e(``,!0),l(F(me),{accept:`.mp3,audio/mpeg`,"default-upload":!1,"show-file-list":!1,onChange:m},{default:k(()=>[l(F(R),{size:`small`},{default:k(()=>[...g[20]||=[t(`Добавить MP3`,-1)]]),_:1})]),_:1})]),_:1}),l(F(K),{align:`center`,wrap:``},{default:k(()=>[l(F(pe),{value:c.music?.playlist?.ID,options:c.playlists.map(e=>({label:e.name,value:e.ID})),placeholder:`Плейлист`,clearable:``,style:{"min-width":`220px`},"onUpdate:value":g[6]||=e=>u(`setMusic`,{playlistID:e||0,trackIndex:0,playback:`MUSIC_PLAYBACK_STOPPED`})},null,8,[`value`,`options`]),c.music?.playlist?(o(),N(`div`,Tt,[c.music.playlist.tracks?.length?e(``,!0):(o(),N(`p`,Et,`В плейлисте пока нет треков.`)),(o(!0),N(O,null,a(c.music.playlist.tracks,(e,r)=>(o(),N(`div`,{key:e.ID,class:n([`track-row`,{"track-row-active":r===(c.music.trackIndex??0)}])},[P(`div`,Dt,[P(`span`,Ot,s(r+1),1),P(`span`,kt,[P(`span`,At,s(e.name||`Трек ${r+1}`),1)])]),l(F(K),{align:`center`,class:`track-actions`},{default:k(()=>[l(F(R),{size:`small`,type:r===(c.music.trackIndex??0)?`success`:`primary`,ghost:``,class:n({"track-switch-active":r===(c.music.trackIndex??0)}),onClick:e=>h(r)},{default:k(()=>[t(s(r===(c.music.trackIndex??0)?c.music.playback===`MUSIC_PLAYBACK_PLAYING`?`Играет`:`Выбран`:`Включить`),1)]),_:2},1032,[`type`,`class`,`onClick`]),l(F(R),{size:`small`,type:`error`,ghost:``,onClick:t=>u(`deleteTrack`,e.ID)},{default:k(()=>[...g[21]||=[t(` Удалить `,-1)]]),_:1},8,[`onClick`])]),_:2},1024)],2))),128))])):e(``,!0),l(F(R),{size:`small`,onClick:g[7]||=e=>u(`setMusic`,{playback:`MUSIC_PLAYBACK_PLAYING`})},{default:k(()=>[...g[22]||=[t(`Старт`,-1)]]),_:1}),l(F(R),{size:`small`,onClick:g[8]||=e=>u(`setMusic`,{playback:`MUSIC_PLAYBACK_PAUSED`})},{default:k(()=>[...g[23]||=[t(`Пауза`,-1)]]),_:1}),l(F(R),{size:`small`,onClick:g[9]||=e=>u(`setMusic`,{playback:`MUSIC_PLAYBACK_STOPPED`,positionMs:0})},{default:k(()=>[...g[24]||=[t(`Стоп`,-1)]]),_:1}),P(`div`,jt,[g[26]||=P(`span`,{class:`volume-label`},`Громкость`,-1),l(F(Ge),{value:c.music?.volume??100,min:0,max:100,step:5,size:`small`,"show-button":!0,"aria-label":`Громкость музыки`,class:`volume-input`,"onUpdate:value":g[10]||=e=>e!=null&&u(`setMusic`,{volume:e})},{suffix:k(()=>[...g[25]||=[t(`%`,-1)]]),_:1},8,[`value`])]),l(F(ve),{value:c.music?.loop,round:!1,"onUpdate:value":g[11]||=e=>u(`setMusic`,{loop:e})},{checked:k(()=>[...g[27]||=[t(`Loop`,-1)]]),unchecked:k(()=>[...g[28]||=[t(`Loop`,-1)]]),_:1},8,[`value`])]),_:1})]),_:1})],64)}}}),[[`__scopeId`,`data-v-c8e2dfff`]]),Nt={class:`team-content-block`},$={class:`title-block`},Pt={class:`team-name-block`},Ft={key:0},It={key:1},Lt={key:0},Rt={key:0},zt={key:1},Bt={key:2},Vt={key:3},Ht={key:4},Ut=H(A({__name:`GameTeamsPanel`,props:{teams:{},participationOptions:{}},emits:[`add`,`open-qr`,`preview`,`delete`,`give-application`],setup(n,{emit:r}){let i=r;return(r,c)=>(o(),N(O,null,[l(Q,{class:`team-block-hover`,onClick:c[0]||=e=>i(`add`)},{default:k(()=>[...c[1]||=[P(`p`,{class:`place-image-plus`},`+`,-1)]]),_:1}),(o(!0),N(O,null,a(n.teams,r=>(o(),f(Q,{key:r.ID},{default:k(()=>[P(`div`,Nt,[l(F(K),{justify:`space-between`},{default:k(()=>[P(`div`,$,[P(`span`,Pt,[t(s(r.name)+` `,1),r.captainEmail?(o(),N(`small`,Ft,` — `+s(r.captainEmail),1)):e(``,!0),r.participantsCount?(o(),N(`small`,It,` · Участников: `+s(r.participantsCount),1)):e(``,!0)]),r.captainEmail||r.participationStatus!==`pending`?(o(),N(`div`,Lt,[t(s(n.participationOptions.find(e=>e.value===r.participationStatus)?.label),1),r.participationSource===`automatic`?(o(),N(`span`,Rt,` · автоматически`)):e(``,!0)])):e(``,!0),r.captainEmail?r.participationEmailError?(o(),N(`div`,Bt,` Ошибка отправки: `+s(r.participationEmailError),1)):r.participationEmailSent?(o(),N(`div`,Vt,`Письмо отправлено`)):e(``,!0):(o(),N(`div`,zt,`Почта капитана не указана`)),r.participationStatus===`cancelled`?e(``,!0):(o(),N(`div`,Ht,` Поездки: `+s(r.actionsCount),1))]),l(F(K),{justify:`end`},{default:k(()=>[r.participationStatus===`cancelled`?e(``,!0):(o(),f(F(R),{key:0,onClick:e=>i(`open-qr`,r)},{default:k(()=>[...c[2]||=[t(`QR`,-1)]]),_:1},8,[`onClick`])),r.participationStatus===`cancelled`?e(``,!0):(o(),f(F(R),{key:1,onClick:e=>i(`preview`,r.ID,r.password)},{default:k(()=>[...c[3]||=[t(`Подсмотреть игру`,-1)]]),_:1},8,[`onClick`])),l(F(R),{type:`error`,ghost:``,onClick:e=>i(`delete`,r)},{default:k(()=>[...c[4]||=[t(`Удалить`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024),(o(!0),N(O,null,a(r.applications,e=>(o(),f(F(R),{key:e.name,class:`link-button`,onClick:t=>i(`give-application`,r,e)},{default:k(()=>[t(` Выдать: `+s(e.name),1)]),_:2},1032,[`onClick`]))),128))])]),_:2},1024))),128))],64))}}),[[`__scopeId`,`data-v-561486cb`]]),Wt={key:0},Gt={key:1},Kt={key:2},qt=H(A({__name:`TicketCheckModal`,props:{show:{type:Boolean,required:!0},showModifiers:{}},emits:[`update:show`],setup(n){let r=w(n,`show`),i=Te(),a=ae(),c=D(``),u=D(),p=D(``),m=D(!1),g=D(),_=D(!1),v,y=0,b=S(()=>{try{return new URL(c.value.trim()).pathname.match(/\/tickets\/([^/]+)/)?.[1]||``}catch{return c.value.trim()}});async function x(){if(!(!b.value||m.value)){m.value=!0,p.value=``,u.value=void 0;try{let e=await i.GetTicket({token:b.value});e.ticket?u.value=e.ticket:p.value=`Билет не найден`}catch(e){p.value=e instanceof Error?e.message:`Не удалось проверить билет`}finally{m.value=!1}}}async function C(){if(!(!b.value||m.value)){m.value=!0,p.value=``;try{let e=await i.AcceptTicket({token:b.value});e.ticket?(u.value=e.ticket,a.success(`Билет принят`)):p.value=`Не удалось принять билет`}catch(e){p.value=e instanceof Error?e.message:`Не удалось принять билет`}finally{m.value=!1}}}async function T(){let e=window.BarcodeDetector;if(!e||!navigator.mediaDevices?.getUserMedia){p.value=`Сканирование камерой не поддерживается. Введите ссылку вручную.`;return}p.value=``;try{if(v=await navigator.mediaDevices.getUserMedia({video:{facingMode:`environment`}}),_.value=!0,await d(),!g.value)return;g.value.srcObject=v,await g.value.play();let t=new e,n=async()=>{if(!(!_.value||!g.value))try{let e=(await t.detect(g.value))[0]?.rawValue;if(e){c.value=e,E(),await x();return}y=requestAnimationFrame(n)}catch{p.value=`Не удалось распознать QR-код.`,E()}};y=requestAnimationFrame(n)}catch{p.value=`Не удалось открыть камеру. Введите ссылку вручную.`,E()}}function E(){cancelAnimationFrame(y),v?.getTracks().forEach(e=>e.stop()),v=void 0,_.value=!1}function A(){E(),r.value=!1}return j(r,e=>{e?T():E()}),h(E),(n,i)=>(o(),f(F(L),{show:r.value,"onUpdate:show":i[1]||=e=>r.value=e},{default:k(()=>[l(F(I),{style:{width:`min(600px, 94vw)`},title:`Проверка билета`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:A},{default:k(()=>[...i[2]||=[t(` x `,-1)]]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[_.value?(o(),N(`video`,{key:0,ref_key:`video`,ref:g,class:`ticket-scanner-video`,muted:``,playsinline:``},null,512)):e(``,!0),p.value?(o(),f(F(W),{key:1,type:`error`},{default:k(()=>[t(s(p.value),1)]),_:1})):e(``,!0),_.value?(o(),f(F(R),{key:3,onClick:E},{default:k(()=>[...i[4]||=[t(`Остановить камеру`,-1)]]),_:1})):(o(),f(F(R),{key:2,onClick:T},{default:k(()=>[...i[3]||=[t(`Сканировать QR-код`,-1)]]),_:1})),l(F(U),{value:c.value,"onUpdate:value":i[0]||=e=>c.value=e,placeholder:`Или вставьте ссылку на билет`,onKeyup:J(x,[`enter`])},null,8,[`value`]),l(F(R),{type:`primary`,loading:m.value,onClick:x},{default:k(()=>[...i[5]||=[t(` Проверить билет `,-1)]]),_:1},8,[`loading`]),u.value?(o(),N(O,{key:4},[l(F(W),{type:u.value.status===`active`?`success`:`warning`},{default:k(()=>[t(s(u.value.gameName),1),i[6]||=P(`br`,null,null,-1),t(` Статус: `+s(u.value.status===`active`?`действителен`:`уже использован`)+` `,1),u.value.usedBy?(o(),N(`span`,Wt,` · `+s(u.value.usedBy),1)):e(``,!0),u.value.usedAt?(o(),N(`br`,Gt)):e(``,!0),u.value.usedAt?(o(),N(`span`,Kt,`Использован: `+s(F(Ne)(u.value.usedAt)),1)):e(``,!0)]),_:1},8,[`type`]),u.value.status===`active`&&u.value.gameStatus!==`finish`?(o(),f(F(R),{key:0,type:`primary`,loading:m.value,onClick:C},{default:k(()=>[...i[7]||=[t(` Принять билет `,-1)]]),_:1},8,[`loading`])):e(``,!0)],64)):e(``,!0)]),_:1})]),_:1})]),_:1},8,[`show`]))}}),[[`__scopeId`,`data-v-fe322487`]]),Jt={class:`center-block-custom`},Yt={class:`width1200`},Xt={class:`game-tab-content`},Zt={key:5},Qt=[`href`],$t={class:`game-tab-content`},en={class:`game-tab-content`},tn={class:`game-tab-content`},nn={class:`game-tab-content`},rn={class:`qr-block`},an={class:`game-tab-content`},on={key:0,class:`answers-empty`},sn={class:`answers-question-title`},cn={class:`answers-question-answer`},ln={class:`correct-answer`},un={class:`answers-team-name`},dn={class:`answers-team-answer`},fn={key:0,class:`give-application-image-block`},pn=[`src`],mn=[`src`],hn=[`href`],gn={class:`qr-block`},_n={key:0,class:`answers-empty`},vn=`https://www.sberbank.ru/ru/choise_bank?requisiteNumber=79609361994&bankCode=100000000111`,yn=H(A({__name:`GamePage`,setup(n){let r=Te(),i=ke(),c=D(!1),u=re(),d=ee(),p=d.params.id;function m(e){return[`settings`,`teams`,`screens`,`game`,`payment`,`answers`].includes(e)}let h=typeof d.query.tab==`string`?d.query.tab:``,g=D(m(h)?h:`game`);async function _(e){m(e)&&(g.value=e,await u.replace({query:{...d.query,tab:e}}),e===`answers`&&await Nn())}let v=ae(),y=D({name:``,description:``,format:`online`,location:``}),b=D(!1),x=D(!1),C=D(!1),w=D(!1),T=D(!1),E=D(``),A=D(``),j=D(1),M=D(``),te=D(!1),ne=D(``),ie=D(``),ce=D(!1),le=D(1),ue=D([]),z=D(!1),B=D(!1),V=D({ID:void 0,name:void 0,description:void 0,startAt:void 0,status:void 0,format:void 0,location:void 0,scenario:void 0,teams:void 0,export:void 0}),H=Ee(),me=De(),he=S(()=>me.environment===`prod`&&H.hasAnyRole([`admin`,`organizer`,`developer`])),ge=D(!1),_e=D(!1),ve=[{label:`Ожидает ответа`,value:`pending`},{label:`Подтверждено`,value:`confirmed`},{label:`Отменено`,value:`cancelled`}],Se=S(()=>(V.value.teams||[]).filter(e=>e.participationStatus!==`cancelled`).length),Ce=D([]),q=D([]),we=D(),J=D(),Y=D([]),X=D(!1),Fe=D(!1),Ie=D(`use`),Le=0,Re=D([]),ze=D([]),Be=D([]),Ve=D(!1),He=D(!1),Ue=D(100),We=D(0);async function Z(e){let t=await r.GetGame({ID:e});V.value=t.game,b.value||=(y.value={name:V.value.name||``,description:V.value.description||``,format:V.value.format||`online`,location:V.value.location||``},!0),V.value.teams=V.value.teams?.sort((e,t)=>{let n=0;(e.applications?.length||0)>0&&(n=1);let r=0;if((t.applications?.length||0)>0&&(r=1),n>r)return-1;if(n<r)return 1;let i=e.name||``,a=t.name||``;return i>a?1:i<a?-1:0})}Z(Number(p));async function qe(){let e=await r.GetGameScreens({gameID:Number(p)});if(Ce.value=e.screens||[],(Ce.value.find(e=>e.status===`connected`)||Ce.value[0])?.mode===`SCREEN_MODE_RESULTS`){let e=await r.GetGameResults({gameID:Number(p)});Re.value=e.questions||[],ze.value=e.teams||[]}else Re.value=[],ze.value=[]}qe();async function Ye(){try{let e=await r.GetGameMusic({gameID:Number(p)});q.value=e.playlists||[],we.value=e.state}catch(e){v.error(e instanceof Error?e.message:`Не удалось получить музыку игры`)}}Ye();function Ze(){return Ie.value===`edit`}async function $e(){if(console.log(`getScreenPlan`),Ze()||X.value)return;console.log(`no skip getScreenPlan`);let e=++Le,t=await r.GetScreenPlan({gameID:Number(p)});e!==Le||Ze()||X.value||(J.value=t.plan,Y.value=t.plan?.steps?.map(e=>({...e}))||[])}$e();function tt(){Y.value.push({mode:`SCREEN_MODE_TEXT`,text:`Новый экран`,timerLabel:`Перерыв`,timerDurationSeconds:600}),X.value=!0,Ie.value=`edit`}function nt(){J.value&&(Y.value=J.value.steps?.map(e=>({...e}))||[],Ie.value=`edit`)}function rt(){X.value&&!window.confirm(`Отменить несохранённые изменения плана?`)||(Y.value=J.value?.steps?.map(e=>({...e}))||[],X.value=!1,Ie.value=`use`)}function it(e){Y.value.splice(e,1),X.value=!0}function at(e,t){let n=e+t;if(n<0||n>=Y.value.length)return;let[r]=Y.value.splice(e,1);Y.value.splice(n,0,r),X.value=!0}function ot(){X.value=!0}function st(){Y.value=[],ot()}async function ct(){if(!Fe.value){Le+=1,Fe.value=!0;try{let e=Math.min(J.value?.currentStep||0,Math.max(0,Y.value.length-1)),t=await r.SaveScreenPlan({gameID:Number(p),steps:Y.value,currentStep:e});J.value=t.plan,Y.value=t.plan?.steps?.map(e=>({...e}))||[],X.value=!1,Ie.value=`use`,v.success(t.plan?`План экранов сохранён`:`План экранов удалён`)}catch(e){v.error(e instanceof Error?e.message:`Не удалось сохранить план экранов`)}finally{Fe.value=!1}}}async function lt(e){if(!(X.value||!J.value))try{let t=await r.SetScreenPlanStep({gameID:Number(p),currentStep:e});J.value=t.plan,await qe()}catch(e){v.error(e instanceof Error?e.message:`Не удалось перейти на шаг плана`)}}async function ut(e,t){if(!(X.value||e!==`SCREEN_MODE_TIMER`&&e!==`SCREEN_MODE_INTRO`&&e!==`SCREEN_MODE_CONCLUSION`))try{await r.SendScreenCommand({gameID:Number(p),command:t,positionMs:Math.max(0,Math.round(We.value*1e3)),volume:Math.max(0,Math.min(100,Math.round(Ue.value)))}),await qe()}catch(e){v.error(e instanceof Error?e.message:`Не удалось управлять экраном`)}}async function dt(e,t){if(!B.value){B.value=!0;try{await r.BindScreen({screenID:e,accessToken:t,gameID:Number(p)}),v.success(`Экран привязан к игре`),await qe()}catch(e){v.error(e instanceof Error?e.message:`Не удалось привязать экран`)}finally{B.value=!1}}}async function ft(){if(Ve.value||He.value)return;let e=await r.GetGameMap({gameID:Number(p)});Ve.value||He.value||(Be.value=e.items||[])}ft();async function pt(e,t=e.hidden){Ve.value=!0;try{await r.UpdateGameMapItem({gameID:Number(p),kind:e.kind,itemID:e.itemID,x:Math.round(e.x||0),y:Math.round(e.y||0),hidden:t})}finally{Ve.value=!1}}async function mt(e,t=e.hidden){await pt(e,t),await ft()}async function ht(e){await r.SetScreenSound({screenID:e.ID,soundEnabled:!0}),await qe()}async function gt(e){let t=we.value;try{let n=await r.SetGameMusic({gameID:Number(p),playlistID:e.playlistID??t?.playlist?.ID??0,trackIndex:e.trackIndex??t?.trackIndex??0,positionMs:e.positionMs??t?.positionMs??0,volume:e.volume??t?.volume??100,loop:e.loop??t?.loop??!1,playback:e.playback??t?.playback??`MUSIC_PLAYBACK_STOPPED`});we.value=n.state}catch(e){v.error(e instanceof Error?e.message:`Не удалось изменить музыку`)}}async function _t(e){try{await r.CreatePlaylist({name:e}),await Ye()}catch(e){v.error(e instanceof Error?e.message:`Не удалось создать плейлист`)}}async function vt(e){try{await r.DeletePlaylist({ID:e}),await Ye()}catch(e){v.error(e instanceof Error?e.message:`Не удалось удалить плейлист`)}}async function yt(e){let t=we.value?.playlist?.ID;if(!t){v.warning(`Сначала выберите плейлист`);return}try{let n=St(new Uint8Array(await e.arrayBuffer()));await r.UploadPlaylistTrack({playlistID:t,name:e.name,filename:e.name,data:n}),await Ye()}catch(e){v.error(e instanceof Error?e.message:`Не удалось загрузить MP3`)}}async function xt(e){let t=we.value?.playlist?.ID;if(t)try{await r.DeletePlaylistTrack({playlistID:t,trackID:e}),await Ye()}catch(e){v.error(e instanceof Error?e.message:`Не удалось удалить трек`)}}function St(e){let t=``;for(let n=0;n<e.length;n+=32768)t+=String.fromCharCode(...e.subarray(n,n+32768));return btoa(t)}async function Ct(e){await r.UnbindScreen({screenID:e.ID}),await qe()}async function wt(e,t,n=!1){let r=`/team-story/`+e+`?password=`+t;if(n){window.open(r,`_blank`);return}u.push(r)}async function Tt(){if(!(!he.value||ge.value||V.value.export?.state===`preparing`||V.value.export?.state===`ready`||V.value.status!==`draft`)){ge.value=!0;try{let e=await r.StartGameExport({ID:V.value.ID});V.value.export=e.export}catch(e){v.error(e instanceof Error?e.message:`Не удалось подготовить пакет`)}finally{ge.value=!1}}}async function Et(){if(!(!he.value||_e.value||V.value.export?.state!==`ready`)){_e.value=!0;try{let{blob:e,filename:t}=await i.downloadGamePackage(V.value.ID),n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}catch(e){v.error(e instanceof Error?e.message:`Не удалось скачать пакет`)}finally{_e.value=!1}}}async function Dt(){if(!(c.value||!V.value.teams?.length)){c.value=!0;try{let{blob:e,filename:t}=await i.downloadTeamQR(V.value.ID),n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,document.body.appendChild(r),r.click(),r.remove(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}catch(e){v.error(e instanceof Error?e.message:`Не удалось скачать QR команд`)}finally{c.value=!1}}}function Ot(){u.push(`/games/`+p+`/results`)}async function kt(){await r.UpdateGame({ID:V.value.ID,name:y.value.name,description:y.value.description,format:y.value.format,location:y.value.location.trim(),startAt:V.value.startAt,scenarioID:V.value.scenario?.ID}),await Z(V.value.ID)}let At=D({ID:0,name:``,status:``,password:``,actionsCount:0,applications:[],captainEmail:void 0,participantsCount:void 0,participationStatus:void 0,participationSource:void 0,participationEmailError:void 0,participationEmailSent:void 0}),jt=D(``),Nt=D({ID:0,name:``,status:``,password:``,actionsCount:0,applications:[],captainEmail:void 0,participantsCount:void 0,participationStatus:void 0,participationSource:void 0,participationEmailError:void 0,participationEmailSent:void 0}),$=D({name:``,image:``,file_type:``}),Pt=window.location.href;function Ft(e,t){At.value=e,$.value=t,x.value=!0}async function It(){if(j.value<1||j.value>8){v.error(`Укажите от 1 до 8 игроков`);return}await r.AddTeam({gameID:V.value.ID,name:E.value,captainEmail:A.value.trim(),participantsCount:j.value}),await Z(V.value.ID),C.value=!1,A.value=``,j.value=1}async function Lt(){await r.GiveTeamApplications({ID:At.value.ID,name:$.value.name}),await Z(V.value.ID),x.value=!1}async function Rt(e){Nt.value=e,w.value=!0}async function zt(){await r.DeleteTeam({ID:Nt.value.ID}),await Z(V.value.ID),w.value=!1}async function Bt(){await r.DeleteGame({ID:V.value.ID}),v.success(`Игра удалена`),u.push(`/games`)}function Vt(e,t){let n=new URL(`/team-story/${e}`,window.location.origin);return n.searchParams.set(`password`,t),n.toString()}function Ht(e){Wt(Vt(e.ID,e.password),`Подсмотреть игру`)}async function Wt(e,t){ne.value=e,ie.value=t,te.value=!0}async function Gt(){if(!(z.value||!V.value.ID)){z.value=!0;try{let e=await r.IssueGameTickets({gameID:V.value.ID,count:le.value});ue.value=e.tickets||[],v.success(`Выпущено билетов: ${ue.value.length}`)}catch(e){v.error(e instanceof Error?e.message:`Не удалось выпустить билеты`)}finally{z.value=!1}}}Pe(()=>{Z(Number(p)),qe(),Ye(),$e(),ft()},2e3);async function Kt(){await r.ResetGame({ID:V.value.ID}),await Z(V.value.ID)}async function yn(){await r.StartGame({ID:V.value.ID}),await Z(V.value.ID)}async function bn(){await r.PauseGame({ID:V.value.ID}),await Z(V.value.ID)}async function xn(){await r.PlayGame({ID:V.value.ID}),await Z(V.value.ID)}async function Sn(){await r.FinishGame({ID:V.value.ID}),await Z(V.value.ID)}let Cn=D(!1),wn=D([]),Tn=D(0),En=D(0),Dn=D([]),On=D([]),kn=D({});function An(e,t){return(e??``)+`:`+(t??``)}function jn(e,t){return(e.answers||[]).find(e=>e.questionCode==t)?.answer||``}function Mn(e,t){kn.value[e]=t===null?void 0:t}async function Nn(){let e=await r.GetGameAnswers({gameID:Number(p)});Dn.value=e.questions||[],On.value=e.teams||[];let t={};for(let e of On.value)for(let n of e.answers||[])t[An(e.team?.ID,n.questionCode)]=n.score;kn.value=t}async function Pn(){Cn.value=!0;let e=await r.GetGameReviewsForModeration({gameID:Number(p)});wn.value=e.reviews||[],Tn.value=e.averageRating||0,En.value=e.reviewsCount||0}async function Fn(e,t){await r.ModerateGameReview({ID:e.ID,status:t}),await Pn()}async function In(){for(let e of Dn.value)for(let t of On.value){let n=kn.value[An(t.team?.ID,e.code)];await r.SetTeamAnswerScore({ID:t.team?.ID,questionCode:e.code,score:n??void 0})}v.success(`Баллы сохранены`),await Nn()}g.value===`answers`&&Nn();function Ln(){let e=new Date;return new Date(e.getTime()-e.getTimezoneOffset()*6e4)}function Rn(e,t){if(e==``)return`Игра ещё не началась`;let n=Me(e),r=Ln();t!=``&&(r=Me(t));let i=r.getTime()-n.getTime();if(i<0)return`Игра ещё не началась`;let a=Math.floor(i/1e3),o=Math.floor(a/60),s=Math.floor(o/60),c=Math.floor(s/24),l=Math.floor(c/30),u=Math.floor(c/365);return u>0?`${u}г ${c%365}д`:l>0?`${l}мес ${c%30}д`:c>0?`${c}д ${s%24}ч`:s>0?`${s}ч ${o%60}м`:o>0?`${o}м ${a%60}с`:`${a}с`}let zn=D(``);return Pe(()=>{zn.value=Rn(V.value.startedAt||``,V.value.endedAt||``)},1e3),(n,r)=>(o(),N(O,null,[P(`div`,Jt,[P(`div`,Yt,[V.value.export?.state===`preparing`||V.value.export?.state===`ready`?(o(),f(Q,{key:0},{default:k(()=>[l(F(W),{type:`info`,title:V.value.export.state===`ready`?`Игра в офлайн-режиме`:`Подготовка офлайн-пакета`},{default:k(()=>[t(s(V.value.export.state===`ready`?`Изменения на онлайн-сервере не синхронизируются с офлайн-площадкой.`:`Создаётся пакет для офлайн-площадки.`),1)]),_:1},8,[`title`])]),_:1})):e(``,!0),l(F(fe),{value:g.value,type:`line`,animated:``,"onUpdate:value":_},{default:k(()=>[l(F(de),{name:`settings`,tab:`Настройки`},{default:k(()=>[P(`div`,Xt,[l(Q,null,{default:k(()=>[l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{quaternary:``,onClick:r[0]||=e=>Wt(F(Pt),`Админка`)},{default:k(()=>[...r[45]||=[t(`QR`,-1)]]),_:1}),V.value.status==`finish`?(o(),f(F(R),{key:0,quaternary:``,onClick:r[1]||=e=>Ot()},{default:k(()=>[l(F(se),{class:`settings-icon`},{default:k(()=>[l(F(et))]),_:1}),r[46]||=t(` Итоги `,-1)]),_:1})):e(``,!0),(V.value.teams?.length||0)==0?(o(),f(F(R),{key:1,type:`error`,quaternary:``,onClick:r[2]||=e=>T.value=!0},{default:k(()=>[...r[47]||=[t(` Удалить игру `,-1)]]),_:1})):e(``,!0)]),_:1})]),_:1}),l(Q,null,{default:k(()=>[r[53]||=P(`p`,{class:`screens-title`},`Настройки игры`,-1),l(F(G),{vertical:``},{default:k(()=>[r[48]||=P(`p`,null,`Название`,-1),l(F(U),{value:y.value.name,"onUpdate:value":r[3]||=e=>y.value.name=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`]),r[49]||=P(`p`,{class:`settings-header`},`Формат игры`,-1),l(F(pe),{value:y.value.format,"onUpdate:value":r[4]||=e=>y.value.format=e,options:[{label:`Online`,value:`online`},{label:`Offline`,value:`offline`}],"aria-label":`Формат игры`},null,8,[`value`]),r[50]||=P(`p`,{class:`settings-header`},`Описание`,-1),l(F(U),{value:y.value.description,"onUpdate:value":r[5]||=e=>y.value.description=e,type:`textarea`,placeholder:`Убийство пастуха...`},null,8,[`value`]),r[51]||=P(`p`,{class:`settings-header`},`Место проведения`,-1),l(F(U),{value:y.value.location,"onUpdate:value":r[6]||=e=>y.value.location=e,type:`text`,placeholder:`Оставьте пустым для онлайн-игры`},null,8,[`value`])]),_:1}),l(F(K),{justify:`end`,class:`settings-actions`},{default:k(()=>[l(F(R),{onClick:r[7]||=e=>kt()},{default:k(()=>[...r[52]||=[t(`Сохранить изменения`,-1)]]),_:1})]),_:1})]),_:1}),he.value?(o(),f(Q,{key:0},{default:k(()=>[r[58]||=P(`p`,{class:`screens-title`},`Передача игры на площадку`,-1),l(F(G),{vertical:``},{default:k(()=>[r[57]||=P(`p`,null,` Пакет содержит снимок на момент подготовки. Последующие онлайн-изменения в него не попадут. Готовность пакета не подтверждает импорт на площадку. `,-1),V.value.export?.state===`preparing`?(o(),f(F(W),{key:0,type:`info`,role:`status`},{default:k(()=>[...r[54]||=[t(`Подготовка пакета…`,-1)]]),_:1})):V.value.export?.state===`ready`?(o(),f(F(W),{key:1,type:`success`,role:`status`},{default:k(()=>[...r[55]||=[t(`Пакет готов`,-1)]]),_:1})):V.value.export?.state===`failed`?(o(),f(F(W),{key:2,type:`error`,role:`alert`},{default:k(()=>[t(s(V.value.export.failure||`Не удалось подготовить пакет`),1)]),_:1})):e(``,!0),V.value.export?.state===`ready`?(o(),f(F(R),{key:3,loading:_e.value,disabled:_e.value,onClick:Et},{default:k(()=>[...r[56]||=[t(`Скачать пакет`,-1)]]),_:1},8,[`loading`,`disabled`])):(o(),f(F(R),{key:4,loading:ge.value||V.value.export?.state===`preparing`,disabled:ge.value||V.value.export?.state===`preparing`||V.value.status!==`draft`,onClick:Tt},{default:k(()=>[t(s(V.value.export?.state===`failed`?`Повторить подготовку`:`Подготовить пакет`),1)]),_:1},8,[`loading`,`disabled`])),V.value.status&&V.value.status!==`draft`?(o(),N(`p`,Zt,` Подготовка доступна до старта игры. `)):e(``,!0)]),_:1})]),_:1})):e(``,!0),l(Q,null,{default:k(()=>[r[61]||=P(`p`,{class:`screens-title`},`Выпуск билетов`,-1),l(F(G),{vertical:``},{default:k(()=>[l(F(Ge),{value:le.value,"onUpdate:value":r[8]||=e=>le.value=e,min:1,max:100},null,8,[`value`]),(o(!0),N(O,null,a(ue.value,e=>(o(),N(`div`,{key:e.ID,class:`issued-ticket`},[P(`div`,null,`Билет №`+s(e.ID),1),P(`a`,{href:e.URL,class:`payment-link`,target:`_blank`,rel:`noreferrer`},` Открыть страницу билета `,8,Qt),l(F(R),{size:`small`,onClick:t=>Wt(e.URL,`Билет №${e.ID}`)},{default:k(()=>[...r[59]||=[t(` Показать QR `,-1)]]),_:1},8,[`onClick`])]))),128))]),_:1}),l(F(K),{justify:`end`,class:`settings-actions`},{default:k(()=>[l(F(R),{loading:z.value,disabled:z.value,onClick:r[9]||=e=>Gt()},{default:k(()=>[...r[60]||=[t(` Выпустить `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})])]),_:1}),l(F(de),{name:`teams`,tab:`Команды`},{default:k(()=>[P(`div`,$t,[l(F(K),{justify:`space-between`,align:`center`},{default:k(()=>[l(F(oe),{bordered:!1,type:`info`},{default:k(()=>[t(` Участвуют команд: `+s(Se.value),1)]),_:1}),Se.value?(o(),f(F(R),{key:0,quaternary:``,loading:c.value,disabled:c.value,onClick:r[10]||=e=>Dt()},{default:k(()=>[...r[62]||=[t(` QR команд `,-1)]]),_:1},8,[`loading`,`disabled`])):e(``,!0)]),_:1}),l(Ut,{teams:V.value.teams||[],"participation-options":ve,onAdd:r[11]||=e=>C.value=!0,onOpenQr:Ht,onPreview:r[12]||=(e,t)=>wt(e,t,!0),onDelete:Rt,onGiveApplication:Ft},null,8,[`teams`])])]),_:1}),l(F(de),{name:`screens`,tab:`Экраны`},{default:k(()=>[P(`div`,en,[l(Mt,{screens:Ce.value,"screen-binding":B.value,playlists:q.value,music:we.value,onBind:dt,onSetSound:ht,onUnbind:Ct,onSetMusic:gt,onCreatePlaylist:_t,onDeletePlaylist:vt,onUploadTrack:yt,onDeleteTrack:xt},null,8,[`screens`,`screen-binding`,`playlists`,`music`])])]),_:1}),l(F(de),{name:`game`,tab:`Игра`},{default:k(()=>[P(`div`,tn,[l(Q,null,{default:k(()=>[l(F(K),{justify:`space-between`},{default:k(()=>[l(F(G),null,{default:k(()=>[l(F(oe),{type:`info`},{default:k(()=>[t(s(zn.value),1)]),_:1}),F(Ne)(V.value.startAt)?(o(),f(F(oe),{key:0,type:`info`},{default:k(()=>[t(` Начало: `+s(F(Ne)(V.value.startAt)),1)]),_:1})):e(``,!0)]),_:1}),l(F(K),{justify:`end`},{default:k(()=>[V.value.status==`draft`?e(``,!0):(o(),f(F(R),{key:0,type:`info`,dashed:``,onClick:r[13]||=e=>Kt()},{default:k(()=>[l(F(se),null,{default:k(()=>[l(F(Qe))]),_:1})]),_:1})),V.value.status==`draft`?(o(),f(F(R),{key:1,type:`info`,dashed:``,onClick:r[14]||=e=>yn()},{default:k(()=>[l(F(se),null,{default:k(()=>[l(F(Xe))]),_:1})]),_:1})):e(``,!0),V.value.status==`pause`?(o(),f(F(R),{key:2,type:`info`,dashed:``,onClick:r[15]||=e=>xn()},{default:k(()=>[l(F(se),null,{default:k(()=>[l(F(Xe))]),_:1})]),_:1})):e(``,!0),V.value.status==`run`?(o(),f(F(R),{key:3,type:`info`,dashed:``,onClick:r[16]||=e=>bn()},{default:k(()=>[l(F(se),null,{default:k(()=>[l(F(Je))]),_:1})]),_:1})):e(``,!0),V.value.status==`finish`?e(``,!0):(o(),f(F(R),{key:4,type:`info`,dashed:``,onClick:r[17]||=e=>Sn()},{default:k(()=>[l(F(se),null,{default:k(()=>[l(F(Ke))]),_:1})]),_:1}))]),_:1})]),_:1})]),_:1}),l(bt,{"map-items":Be.value,teams:V.value.teams||[],screens:Ce.value,"preview-questions":Re.value,"preview-teams":ze.value,"screen-plan":J.value,"screen-plan-draft":Y.value,"screen-plan-dirty":X.value,"screen-plan-saving":Fe.value,"screen-plan-mode":Ie.value,"screen-volume":Ue.value,"screen-position":We.value,onSaveItem:mt,onDragging:r[18]||=e=>He.value=e,onGiveApplication:Ft,onAddStep:tt,onEdit:nt,onCancel:rt,onRemoveStep:it,onMoveStep:at,onDirty:ot,onClearPlan:st,onSave:ct,onSetStep:lt,onCommand:ut,"onUpdate:screenVolume":r[19]||=e=>Ue.value=e??0,"onUpdate:screenPosition":r[20]||=e=>We.value=e??0},null,8,[`map-items`,`teams`,`screens`,`preview-questions`,`preview-teams`,`screen-plan`,`screen-plan-draft`,`screen-plan-dirty`,`screen-plan-saving`,`screen-plan-mode`,`screen-volume`,`screen-position`])])]),_:1}),l(F(de),{name:`payment`,tab:`Оплата`},{default:k(()=>[P(`div`,nn,[l(Q,null,{default:k(()=>[l(F(K),{align:`center`,justify:`space-between`},{default:k(()=>[r[64]||=P(`p`,{class:`screens-title`},`Билеты`,-1),l(F(R),{size:`small`,onClick:r[21]||=e=>ce.value=!0},{default:k(()=>[...r[63]||=[t(` Проверить билет `,-1)]]),_:1})]),_:1})]),_:1}),l(Q,null,{default:k(()=>[r[65]||=P(`p`,{class:`screens-title`},`Оплата игры`,-1),P(`div`,rn,[l(F(be),{value:vn,size:300,padding:0})]),P(`p`,null,[P(`a`,{href:vn,class:`payment-link`,target:`_blank`,rel:`noreferrer`},` Открыть ссылку оплаты `)])]),_:1})])]),_:1}),l(F(de),{name:`answers`,tab:`Проверка ответов`},{default:k(()=>[P(`div`,an,[Dn.value.length==0?(o(),N(`div`,on,` Вопросы дела не заданы или команды ещё не отвечали. `)):e(``,!0),(o(!0),N(O,null,a(Dn.value,e=>(o(),f(Q,{key:e.code},{default:k(()=>[P(`p`,sn,s(e.code)+`: `+s(e.text),1),P(`p`,cn,[r[66]||=t(` Правильный ответ:`,-1),r[67]||=P(`br`,null,null,-1),P(`span`,ln,s(e.answer||`—`),1)]),(o(!0),N(O,null,a(On.value,t=>(o(),N(`div`,{key:t.team?.ID,class:`answers-team-row`},[P(`div`,un,s(t.team?.name),1),P(`div`,dn,s(jn(t,e.code)||`—`),1),l(F(Ge),{value:kn.value[An(t.team?.ID,e.code)],"onUpdate:value":n=>Mn(An(t.team?.ID,e.code),n),placeholder:`Балл`,class:`answers-score-input`},null,8,[`value`,`onUpdate:value`])]))),128))]),_:2},1024))),128)),l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{onClick:r[22]||=e=>In(),disabled:Dn.value.length==0},{default:k(()=>[...r[68]||=[t(` Сохранить баллы `,-1)]]),_:1},8,[`disabled`])]),_:1})])]),_:1})]),_:1},8,[`value`])])]),l(qt,{show:ce.value,"onUpdate:show":r[23]||=e=>ce.value=e},null,8,[`show`]),l(F(L),{show:x.value,"onUpdate:show":r[26]||=e=>x.value=e},{default:k(()=>[l(F(I),{style:{width:`600px`},title:`Настройки игры`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:r[24]||=e=>x.value=!1},{default:k(()=>[...r[69]||=[t(` x `,-1)]]),_:1})]),footer:k(()=>[l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{onClick:r[25]||=e=>Lt(),ghost:``},{default:k(()=>[...r[72]||=[t(` Выдать `,-1)]]),_:1})]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[r[70]||=P(`p`,null,`Команда`,-1),P(`h3`,null,s(At.value.name),1),r[71]||=P(`p`,null,`Улика`,-1),P(`h3`,null,s($.value.name),1),F(Ae)($.value)==`image`&&$.value.image?(o(),N(`div`,fn,[P(`img`,{src:F(je)($.value.image),class:`give-application-image`},null,8,pn)])):F(Ae)($.value)==`audio`&&$.value.image?(o(),N(`audio`,{key:1,src:F(je)($.value.image),controls:``,preload:`none`,class:`give-application-audio`},null,8,mn)):F(Ae)($.value)==`pdf`&&$.value.image?(o(),N(`a`,{key:2,href:F(je)($.value.image),target:`_blank`,rel:`noopener`,class:`give-application-pdf-link`},` PDF `,8,hn)):e(``,!0)]),_:1})]),_:1})]),_:1},8,[`show`]),l(F(L),{show:C.value,"onUpdate:show":r[32]||=e=>C.value=e},{default:k(()=>[l(F(I),{style:{width:`600px`},title:`Создание команды`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:r[27]||=e=>C.value=!1},{default:k(()=>[...r[73]||=[t(` x `,-1)]]),_:1})]),footer:k(()=>[l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{onClick:r[31]||=e=>It(),disabled:E.value.length==0},{default:k(()=>[...r[74]||=[t(` Создать `,-1)]]),_:1},8,[`disabled`])]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[l(F(U),{value:E.value,"onUpdate:value":r[28]||=e=>E.value=e,type:`text`,placeholder:`Три дебила`},null,8,[`value`]),l(F(U),{value:A.value,"onUpdate:value":r[29]||=e=>A.value=e,"input-props":{type:`email`,autocomplete:`email`},placeholder:`Почта капитана (необязательно)`,"aria-label":`Почта капитана (необязательно)`},null,8,[`value`]),l(F(Ge),{value:j.value,"onUpdate:value":r[30]||=e=>j.value=e,min:1,max:8,precision:0,placeholder:`Количество игроков`,"aria-label":`Количество игроков`},null,8,[`value`])]),_:1})]),_:1})]),_:1},8,[`show`]),l(F(L),{show:w.value,"onUpdate:show":r[36]||=e=>w.value=e},{default:k(()=>[l(F(I),{style:{width:`600px`},title:`Удаление команды`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:r[33]||=e=>w.value=!1},{default:k(()=>[...r[75]||=[t(` x `,-1)]]),_:1})]),footer:k(()=>[l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{onClick:r[35]||=e=>zt(),disabled:jt.value!=Nt.value.name},{default:k(()=>[...r[78]||=[t(` Удалить `,-1)]]),_:1},8,[`disabled`])]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[P(`p`,null,[r[76]||=t(` Введите название команды `,-1),l(F(xe),{class:`name-text`,strong:``},{default:k(()=>[t(s(Nt.value.name),1)]),_:1}),r[77]||=t(` чтобы удалить его `,-1)]),l(F(U),{value:jt.value,"onUpdate:value":r[34]||=e=>jt.value=e,type:`text`,placeholder:`Три дебила`},null,8,[`value`])]),_:1})]),_:1})]),_:1},8,[`show`]),l(F(L),{show:T.value,"onUpdate:show":r[40]||=e=>T.value=e},{default:k(()=>[l(F(I),{style:{width:`600px`},title:`Удаление игры`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:r[37]||=e=>T.value=!1},{default:k(()=>[...r[79]||=[t(` x `,-1)]]),_:1})]),footer:k(()=>[l(F(K),{justify:`end`},{default:k(()=>[l(F(R),{onClick:r[39]||=e=>Bt(),disabled:M.value!=V.value.name},{default:k(()=>[...r[82]||=[t(` Удалить `,-1)]]),_:1},8,[`disabled`])]),_:1})]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[P(`p`,null,[r[80]||=t(` Введите название игры `,-1),l(F(xe),{class:`name-text`,strong:``},{default:k(()=>[t(s(V.value.name),1)]),_:1}),r[81]||=t(` чтобы удалить её `,-1)]),l(F(U),{value:M.value,"onUpdate:value":r[38]||=e=>M.value=e,type:`text`,placeholder:`Дело №0 "Следствие ведут овечки"`},null,8,[`value`])]),_:1})]),_:1})]),_:1},8,[`show`]),l(F(L),{show:te.value,"onUpdate:show":r[42]||=e=>te.value=e},{default:k(()=>[l(F(I),{style:{width:`600px`},title:ie.value,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`},{"header-extra":k(()=>[l(F(R),{onClick:r[41]||=e=>te.value=!1},{default:k(()=>[...r[83]||=[t(` x `,-1)]]),_:1})]),footer:k(()=>[...r[84]||=[]]),default:k(()=>[l(F(G),{vertical:``},{default:k(()=>[P(`div`,gn,[l(F(be),{value:ne.value,size:300,padding:0},null,8,[`value`])])]),_:1})]),_:1},8,[`title`])]),_:1},8,[`show`]),l(F(L),{show:Cn.value,"onUpdate:show":r[44]||=e=>Cn.value=e},{default:k(()=>[l(F(I),{style:{width:`min(94vw, 800px)`},title:`Отзывы игры`,bordered:!1,size:`huge`,role:`dialog`,"aria-modal":`true`,"content-style":{maxHeight:`70vh`,overflow:`auto`}},{"header-extra":k(()=>[l(F(R),{onClick:r[43]||=e=>Cn.value=!1},{default:k(()=>[...r[85]||=[t(` x `,-1)]]),_:1})]),default:k(()=>[l(F(K),{align:`center`,class:`reviews-summary`},{default:k(()=>[l(F(ye),{value:Tn.value,readonly:``,"allow-half":``},null,8,[`value`]),P(`span`,null,s(En.value?`${Tn.value.toFixed(1)} · ${En.value}`:`Пока нет отзывов`),1)]),_:1}),wn.value.length==0?(o(),N(`div`,_n,`Отзывов пока нет.`)):e(``,!0),(o(!0),N(O,null,a(wn.value,n=>(o(),N(`div`,{key:n.ID,class:`review-row`},[l(F(K),{justify:`space-between`,align:`center`},{default:k(()=>[P(`strong`,null,s(n.teamName),1),l(F(oe),null,{default:k(()=>[t(s(n.status),1)]),_:2},1024)]),_:2},1024),l(F(ye),{value:n.rating,readonly:``,size:`small`},null,8,[`value`]),P(`div`,null,`Сложность: `+s([``,`лёгкая`,`средняя`,`тяжёлая`][n.difficulty||0]),1),P(`p`,null,s(n.text),1),n.status==`pending`?(o(),f(F(K),{key:0,justify:`end`},{default:k(()=>[l(F(R),{type:`success`,onClick:e=>Fn(n,`approved`)},{default:k(()=>[...r[86]||=[t(`Одобрить`,-1)]]),_:1},8,[`onClick`]),l(F(R),{type:`error`,ghost:``,onClick:e=>Fn(n,`rejected`)},{default:k(()=>[...r[87]||=[t(`Отклонить`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)):n.status==`approved`?(o(),f(F(K),{key:1,justify:`end`},{default:k(()=>[l(F(R),{type:`error`,ghost:``,onClick:e=>Fn(n,`hidden`)},{default:k(()=>[...r[88]||=[t(`Скрыть`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)):e(``,!0)]))),128))]),_:1})]),_:1},8,[`show`]),l(Oe,{active:`games`})],64))}}),[[`__scopeId`,`data-v-5d8d5b9a`]]),bn=A({__name:`GameView`,setup(e){return(e,t)=>(o(),f(yn))}});export{bn as default};