generated from VLADIMIR/template_frontend
add screen
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import{A as e,D as t,N as n,it as r,v as i}from"./vue-router-bPs2Bq2h.js";import{B as a,G as o,J as s,K as c,M as l,N as u,V as d,Y as f,Z as p,o as m,r as h,t as g}from"./light-BDe84dgP.js";import{a as _,c as v,r as y}from"./resolve-slot-Cp3m6n7Y.js";import{C as b,F as x,I as S,L as C,M as w,N as T,R as E,V as D,w as O}from"./index-DzEqT7MZ.js";function k(e){let{lineHeight:t,borderRadius:n,fontWeightStrong:r,baseColor:i,dividerColor:o,actionColor:s,textColor1:c,textColor2:l,closeColorHover:u,closeColorPressed:f,closeIconColor:p,closeIconColorHover:m,closeIconColorPressed:h,infoColor:g,successColor:_,warningColor:v,errorColor:y,fontSize:b}=e;return Object.assign(Object.assign({},O),{fontSize:b,lineHeight:t,titleFontWeight:r,borderRadius:n,border:`1px solid ${o}`,color:s,titleTextColor:c,iconColor:l,contentTextColor:l,closeBorderRadius:n,closeColorHover:u,closeColorPressed:f,closeIconColor:p,closeIconColorHover:m,closeIconColorPressed:h,borderInfo:`1px solid ${d(i,a(g,{alpha:.25}))}`,colorInfo:d(i,a(g,{alpha:.08})),titleTextColorInfo:c,iconColorInfo:g,contentTextColorInfo:l,closeColorHoverInfo:u,closeColorPressedInfo:f,closeIconColorInfo:p,closeIconColorHoverInfo:m,closeIconColorPressedInfo:h,borderSuccess:`1px solid ${d(i,a(_,{alpha:.25}))}`,colorSuccess:d(i,a(_,{alpha:.08})),titleTextColorSuccess:c,iconColorSuccess:_,contentTextColorSuccess:l,closeColorHoverSuccess:u,closeColorPressedSuccess:f,closeIconColorSuccess:p,closeIconColorHoverSuccess:m,closeIconColorPressedSuccess:h,borderWarning:`1px solid ${d(i,a(v,{alpha:.33}))}`,colorWarning:d(i,a(v,{alpha:.08})),titleTextColorWarning:c,iconColorWarning:v,contentTextColorWarning:l,closeColorHoverWarning:u,closeColorPressedWarning:f,closeIconColorWarning:p,closeIconColorHoverWarning:m,closeIconColorPressedWarning:h,borderError:`1px solid ${d(i,a(y,{alpha:.25}))}`,colorError:d(i,a(y,{alpha:.08})),titleTextColorError:c,iconColorError:y,contentTextColorError:l,closeColorHoverError:u,closeColorPressedError:f,closeIconColorError:p,closeIconColorHoverError:m,closeIconColorPressedError:h})}var A={name:`Alert`,common:g,self:k},j=c(`alert`,`
|
||||
import{A as e,D as t,N as n,it as r,v as i}from"./vue-router-bPs2Bq2h.js";import{B as a,G as o,J as s,K as c,M as l,N as u,V as d,Y as f,Z as p,o as m,r as h,t as g}from"./light-BDe84dgP.js";import{a as _,c as v,r as y}from"./resolve-slot-Cp3m6n7Y.js";import{H as b,I as x,L as S,N as C,P as w,R as T,T as E,w as D,z as O}from"./index-DsVCmMvY.js";function k(e){let{lineHeight:t,borderRadius:n,fontWeightStrong:r,baseColor:i,dividerColor:o,actionColor:s,textColor1:c,textColor2:l,closeColorHover:u,closeColorPressed:f,closeIconColor:p,closeIconColorHover:m,closeIconColorPressed:h,infoColor:g,successColor:_,warningColor:v,errorColor:y,fontSize:b}=e;return Object.assign(Object.assign({},E),{fontSize:b,lineHeight:t,titleFontWeight:r,borderRadius:n,border:`1px solid ${o}`,color:s,titleTextColor:c,iconColor:l,contentTextColor:l,closeBorderRadius:n,closeColorHover:u,closeColorPressed:f,closeIconColor:p,closeIconColorHover:m,closeIconColorPressed:h,borderInfo:`1px solid ${d(i,a(g,{alpha:.25}))}`,colorInfo:d(i,a(g,{alpha:.08})),titleTextColorInfo:c,iconColorInfo:g,contentTextColorInfo:l,closeColorHoverInfo:u,closeColorPressedInfo:f,closeIconColorInfo:p,closeIconColorHoverInfo:m,closeIconColorPressedInfo:h,borderSuccess:`1px solid ${d(i,a(_,{alpha:.25}))}`,colorSuccess:d(i,a(_,{alpha:.08})),titleTextColorSuccess:c,iconColorSuccess:_,contentTextColorSuccess:l,closeColorHoverSuccess:u,closeColorPressedSuccess:f,closeIconColorSuccess:p,closeIconColorHoverSuccess:m,closeIconColorPressedSuccess:h,borderWarning:`1px solid ${d(i,a(v,{alpha:.33}))}`,colorWarning:d(i,a(v,{alpha:.08})),titleTextColorWarning:c,iconColorWarning:v,contentTextColorWarning:l,closeColorHoverWarning:u,closeColorPressedWarning:f,closeIconColorWarning:p,closeIconColorHoverWarning:m,closeIconColorPressedWarning:h,borderError:`1px solid ${d(i,a(y,{alpha:.25}))}`,colorError:d(i,a(y,{alpha:.08})),titleTextColorError:c,iconColorError:y,contentTextColorError:l,closeColorHoverError:u,closeColorPressedError:f,closeIconColorError:p,closeIconColorHoverError:m,closeIconColorPressedError:h})}var A={name:`Alert`,common:g,self:k},j=c(`alert`,`
|
||||
line-height: var(--n-line-height);
|
||||
border-radius: var(--n-border-radius);
|
||||
position: relative;
|
||||
@@ -18,7 +18,7 @@ import{A as e,D as t,N as n,it as r,v as i}from"./vue-router-bPs2Bq2h.js";import
|
||||
pointer-events: none;
|
||||
`),f(`closable`,[c(`alert-body`,[s(`title`,`
|
||||
padding-right: 24px;
|
||||
`)])]),s(`icon`,{color:`var(--n-icon-color)`}),c(`alert-body`,{padding:`var(--n-padding)`},[s(`title`,{color:`var(--n-title-text-color)`}),s(`content`,{color:`var(--n-content-text-color)`})]),b({originalTransition:`transform .3s var(--n-bezier)`,enterToProps:{transform:`scale(1)`},leaveToProps:{transform:`scale(0.9)`}}),s(`icon`,`
|
||||
`)])]),s(`icon`,{color:`var(--n-icon-color)`}),c(`alert-body`,{padding:`var(--n-padding)`},[s(`title`,{color:`var(--n-title-text-color)`}),s(`content`,{color:`var(--n-content-text-color)`})]),D({originalTransition:`transform .3s var(--n-bezier)`,enterToProps:{transform:`scale(1)`},leaveToProps:{transform:`scale(0.9)`}}),s(`icon`,`
|
||||
position: absolute;
|
||||
left: 0;
|
||||
top: 0;
|
||||
@@ -45,4 +45,4 @@ import{A as e,D as t,N as n,it as r,v as i}from"./vue-router-bPs2Bq2h.js";import
|
||||
font-size: 16px;
|
||||
line-height: 19px;
|
||||
font-weight: var(--n-title-font-weight);
|
||||
`,[o(`& +`,[s(`content`,{marginTop:`9px`})])]),s(`content`,{transition:`color .3s var(--n-bezier)`,fontSize:`var(--n-font-size)`})]),s(`icon`,{transition:`color .3s var(--n-bezier)`})]),M=t({name:`Alert`,inheritAttrs:!1,props:Object.assign(Object.assign({},h.props),{title:String,showIcon:{type:Boolean,default:!0},type:{type:String,default:`default`},bordered:{type:Boolean,default:!0},closable:Boolean,onClose:Function,onAfterLeave:Function,onAfterHide:Function}),slots:Object,setup(e){let{mergedClsPrefixRef:t,mergedBorderedRef:n,inlineThemeDisabled:a,mergedRtlRef:o}=u(e),s=h(`Alert`,`-alert`,j,A,e,t),c=m(`Alert`,o,t),d=i(()=>{let{common:{cubicBezierEaseInOut:t},self:n}=s.value,{fontSize:r,borderRadius:i,titleFontWeight:a,lineHeight:o,iconSize:c,iconMargin:l,iconMarginRtl:u,closeIconSize:d,closeBorderRadius:f,closeSize:m,closeMargin:h,closeMarginRtl:g,padding:_}=n,{type:y}=e,{left:b,right:x}=v(l);return{"--n-bezier":t,"--n-color":n[p(`color`,y)],"--n-close-icon-size":d,"--n-close-border-radius":f,"--n-close-color-hover":n[p(`closeColorHover`,y)],"--n-close-color-pressed":n[p(`closeColorPressed`,y)],"--n-close-icon-color":n[p(`closeIconColor`,y)],"--n-close-icon-color-hover":n[p(`closeIconColorHover`,y)],"--n-close-icon-color-pressed":n[p(`closeIconColorPressed`,y)],"--n-icon-color":n[p(`iconColor`,y)],"--n-border":n[p(`border`,y)],"--n-title-text-color":n[p(`titleTextColor`,y)],"--n-content-text-color":n[p(`contentTextColor`,y)],"--n-line-height":o,"--n-border-radius":i,"--n-font-size":r,"--n-title-font-weight":a,"--n-icon-size":c,"--n-icon-margin":l,"--n-icon-margin-rtl":u,"--n-close-size":m,"--n-close-margin":h,"--n-close-margin-rtl":g,"--n-padding":_,"--n-icon-margin-left":b,"--n-icon-margin-right":x}}),f=a?l(`alert`,i(()=>e.type[0]),d,e):void 0,g=r(!0),_=()=>{let{onAfterLeave:t,onAfterHide:n}=e;t&&t(),n&&n()};return{rtlEnabled:c,mergedClsPrefix:t,mergedBordered:n,visible:g,handleCloseClick:()=>{Promise.resolve(e.onClose?.call(e)).then(e=>{e!==!1&&(g.value=!1)})},handleAfterLeave:()=>{_()},mergedTheme:s,cssVars:a?void 0:d,themeClass:f?.themeClass,onRender:f?.onRender}},render(){var t;return(t=this.onRender)==null||t.call(this),e(w,{onAfterLeave:this.handleAfterLeave},{default:()=>{let{mergedClsPrefix:t,$slots:r}=this,i={class:[`${t}-alert`,this.themeClass,this.closable&&`${t}-alert--closable`,this.showIcon&&`${t}-alert--show-icon`,!this.title&&this.closable&&`${t}-alert--right-adjust`,this.rtlEnabled&&`${t}-alert--rtl`],style:this.cssVars,role:`alert`};return this.visible?e(`div`,Object.assign({},n(this.$attrs,i)),this.closable&&e(T,{clsPrefix:t,class:`${t}-alert__close`,onClick:this.handleCloseClick}),this.bordered&&e(`div`,{class:`${t}-alert__border`}),this.showIcon&&e(`div`,{class:`${t}-alert__icon`,"aria-hidden":`true`},y(r.icon,()=>[e(D,{clsPrefix:t},{default:()=>{switch(this.type){case`success`:return e(S,null);case`info`:return e(C,null);case`warning`:return e(x,null);case`error`:return e(E,null);default:return null}}})])),e(`div`,{class:[`${t}-alert-body`,this.mergedBordered&&`${t}-alert-body--bordered`]},_(r.header,n=>{let r=n||this.title;return r?e(`div`,{class:`${t}-alert-body__title`},r):null}),r.default&&e(`div`,{class:`${t}-alert-body__content`},r))):null}})}});export{M as t};
|
||||
`,[o(`& +`,[s(`content`,{marginTop:`9px`})])]),s(`content`,{transition:`color .3s var(--n-bezier)`,fontSize:`var(--n-font-size)`})]),s(`icon`,{transition:`color .3s var(--n-bezier)`})]),M=t({name:`Alert`,inheritAttrs:!1,props:Object.assign(Object.assign({},h.props),{title:String,showIcon:{type:Boolean,default:!0},type:{type:String,default:`default`},bordered:{type:Boolean,default:!0},closable:Boolean,onClose:Function,onAfterLeave:Function,onAfterHide:Function}),slots:Object,setup(e){let{mergedClsPrefixRef:t,mergedBorderedRef:n,inlineThemeDisabled:a,mergedRtlRef:o}=u(e),s=h(`Alert`,`-alert`,j,A,e,t),c=m(`Alert`,o,t),d=i(()=>{let{common:{cubicBezierEaseInOut:t},self:n}=s.value,{fontSize:r,borderRadius:i,titleFontWeight:a,lineHeight:o,iconSize:c,iconMargin:l,iconMarginRtl:u,closeIconSize:d,closeBorderRadius:f,closeSize:m,closeMargin:h,closeMarginRtl:g,padding:_}=n,{type:y}=e,{left:b,right:x}=v(l);return{"--n-bezier":t,"--n-color":n[p(`color`,y)],"--n-close-icon-size":d,"--n-close-border-radius":f,"--n-close-color-hover":n[p(`closeColorHover`,y)],"--n-close-color-pressed":n[p(`closeColorPressed`,y)],"--n-close-icon-color":n[p(`closeIconColor`,y)],"--n-close-icon-color-hover":n[p(`closeIconColorHover`,y)],"--n-close-icon-color-pressed":n[p(`closeIconColorPressed`,y)],"--n-icon-color":n[p(`iconColor`,y)],"--n-border":n[p(`border`,y)],"--n-title-text-color":n[p(`titleTextColor`,y)],"--n-content-text-color":n[p(`contentTextColor`,y)],"--n-line-height":o,"--n-border-radius":i,"--n-font-size":r,"--n-title-font-weight":a,"--n-icon-size":c,"--n-icon-margin":l,"--n-icon-margin-rtl":u,"--n-close-size":m,"--n-close-margin":h,"--n-close-margin-rtl":g,"--n-padding":_,"--n-icon-margin-left":b,"--n-icon-margin-right":x}}),f=a?l(`alert`,i(()=>e.type[0]),d,e):void 0,g=r(!0),_=()=>{let{onAfterLeave:t,onAfterHide:n}=e;t&&t(),n&&n()};return{rtlEnabled:c,mergedClsPrefix:t,mergedBordered:n,visible:g,handleCloseClick:()=>{Promise.resolve(e.onClose?.call(e)).then(e=>{e!==!1&&(g.value=!1)})},handleAfterLeave:()=>{_()},mergedTheme:s,cssVars:a?void 0:d,themeClass:f?.themeClass,onRender:f?.onRender}},render(){var t;return(t=this.onRender)==null||t.call(this),e(C,{onAfterLeave:this.handleAfterLeave},{default:()=>{let{mergedClsPrefix:t,$slots:r}=this,i={class:[`${t}-alert`,this.themeClass,this.closable&&`${t}-alert--closable`,this.showIcon&&`${t}-alert--show-icon`,!this.title&&this.closable&&`${t}-alert--right-adjust`,this.rtlEnabled&&`${t}-alert--rtl`],style:this.cssVars,role:`alert`};return this.visible?e(`div`,Object.assign({},n(this.$attrs,i)),this.closable&&e(w,{clsPrefix:t,class:`${t}-alert__close`,onClick:this.handleCloseClick}),this.bordered&&e(`div`,{class:`${t}-alert__border`}),this.showIcon&&e(`div`,{class:`${t}-alert__icon`,"aria-hidden":`true`},y(r.icon,()=>[e(b,{clsPrefix:t},{default:()=>{switch(this.type){case`success`:return e(S,null);case`info`:return e(T,null);case`warning`:return e(x,null);case`error`:return e(O,null);default:return null}}})])),e(`div`,{class:[`${t}-alert-body`,this.mergedBordered&&`${t}-alert-body--bordered`]},_(r.header,n=>{let r=n||this.title;return r?e(`div`,{class:`${t}-alert-body__title`},r):null}),r.default&&e(`div`,{class:`${t}-alert-body__content`},r))):null}})}});export{M as t};
|
||||
File diff suppressed because one or more lines are too long
Vendored
+214
File diff suppressed because one or more lines are too long
Vendored
-447
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{D as e,Dt as t,E as n,Et as r,H as i,Q as a,S as o,T as s,W as c,b as l,it as u,lt as d,o as f,p,y as m}from"./vue-router-bPs2Bq2h.js";import{t as h}from"./Tag-BdbFVT7x.js";import{i as g,n as _,t as v}from"./HeaderMenu-eN2wSqXA.js";var y={class:`center-block-custom`},b={class:`width1200 display-table catalog-grid`},x=[`onClick`],S={class:`scenario-content-block`},C={class:`scenario-title`},w={class:`scenario-description`},T={class:`scenario-label`},E=_(e({__name:`CatalogPage`,setup(e){let l=g(),_=u([]),E=f();async function D(){_.value=[];let e=await l.GetScenariosCatalog({});_.value=e.scenarios}async function O(e){E.push(`/scenarios/`+e)}return D(),(e,l)=>(i(),o(p,null,[m(`div`,y,[m(`div`,b,[(i(!0),o(p,null,c(_.value,e=>(i(),o(`div`,{class:`scenario-block`,onClick:t=>O(e.id),key:e.id},[m(`div`,{class:`scenario-image-block scenario-image`,style:r({backgroundImage:`url(${e.image})`})},null,4),m(`div`,S,[m(`p`,C,t(e.name),1),m(`p`,w,t(e.description),1),m(`p`,T,[n(d(h),{bordered:!1,type:`success`,class:`status-block`},{default:a(()=>[s(`Автор: `+t(e.author?.username),1)]),_:2},1024)])])],8,x))),128))])]),n(v,{active:`catalog`})],64))}}),[[`__scopeId`,`data-v-14025c2d`]]),D=e({__name:`CatalogView`,setup(e){return(e,t)=>(i(),l(E))}});export{D as default};
|
||||
import{D as e,Dt as t,E as n,Et as r,H as i,Q as a,S as o,T as s,W as c,b as l,it as u,lt as d,o as f,p,y as m}from"./vue-router-bPs2Bq2h.js";import{t as h}from"./Tag-CyF6Ld4O.js";import{i as g,n as _,t as v}from"./HeaderMenu-CNP1EQA-.js";var y={class:`center-block-custom`},b={class:`width1200 display-table catalog-grid`},x=[`onClick`],S={class:`scenario-content-block`},C={class:`scenario-title`},w={class:`scenario-description`},T={class:`scenario-label`},E=_(e({__name:`CatalogPage`,setup(e){let l=g(),_=u([]),E=f();async function D(){_.value=[];let e=await l.GetScenariosCatalog({});_.value=e.scenarios}async function O(e){E.push(`/scenarios/`+e)}return D(),(e,l)=>(i(),o(p,null,[m(`div`,y,[m(`div`,b,[(i(!0),o(p,null,c(_.value,e=>(i(),o(`div`,{class:`scenario-block`,onClick:t=>O(e.id),key:e.id},[m(`div`,{class:`scenario-image-block scenario-image`,style:r({backgroundImage:`url(${e.image})`})},null,4),m(`div`,S,[m(`p`,C,t(e.name),1),m(`p`,w,t(e.description),1),m(`p`,T,[n(d(h),{bordered:!1,type:`success`,class:`status-block`},{default:a(()=>[s(`Автор: `+t(e.author?.username),1)]),_:2},1024)])])],8,x))),128))])]),n(v,{active:`catalog`})],64))}}),[[`__scopeId`,`data-v-14025c2d`]]),D=e({__name:`CatalogView`,setup(e){return(e,t)=>(i(),l(E))}});export{D as default};
|
||||
@@ -1 +1 @@
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-BIx-pZOL.js";import{t as o}from"./HeaderMenu-eN2wSqXA.js";var s=e({__name:`ConsentView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`consent`}),t(o)],64))}});export{s as default};
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-DtxwjX3o.js";import{t as o}from"./HeaderMenu-CNP1EQA-.js";var s=e({__name:`ConsentView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`consent`}),t(o)],64))}});export{s as default};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{A as e,D as t,Dt as n,E as r,H as i,Q as a,S as o,T as s,Z as c,b as l,it as u,lt as d,t as f,v as p,y as m,z as h}from"./vue-router-bPs2Bq2h.js";import{G as g,K as _,M as v,N as y,Y as b,Z as x,r as S}from"./light-BDe84dgP.js";import{l as C}from"./resolve-slot-Cp3m6n7Y.js";import{t as w}from"./use-compitable-BcHeQzgm.js";import{t as T}from"./fade-in.cssr-CHZadXSL.js";import{t as E}from"./Alert-Cv6pYaP-.js";import{A as D,J as O,j as k,o as A}from"./index-DzEqT7MZ.js";import{i as j,n as M}from"./HeaderMenu-eN2wSqXA.js";import{t as N}from"./HeaderText-CtkTsjpJ.js";var P=g([g(`@keyframes spin-rotate`,`
|
||||
import{A as e,D as t,Dt as n,E as r,H as i,Q as a,S as o,T as s,Z as c,b as l,it as u,lt as d,t as f,v as p,y as m,z as h}from"./vue-router-bPs2Bq2h.js";import{G as g,K as _,M as v,N as y,Y as b,Z as x,r as S}from"./light-BDe84dgP.js";import{l as C}from"./resolve-slot-Cp3m6n7Y.js";import{t as w}from"./use-compitable-BcHeQzgm.js";import{t as T}from"./fade-in.cssr-CHZadXSL.js";import{t as E}from"./Alert-CTjuvCFV.js";import{M as D,Y as O,j as k,o as A}from"./index-DsVCmMvY.js";import{i as j,n as M}from"./HeaderMenu-CNP1EQA-.js";import{t as N}from"./HeaderText-BUvQzsGk.js";var P=g([g(`@keyframes spin-rotate`,`
|
||||
from {
|
||||
transform: rotate(0);
|
||||
}
|
||||
@@ -40,4 +40,4 @@ import{A as e,D as t,Dt as n,E as r,H as i,Q as a,S as o,T as s,Z as c,b as l,it
|
||||
-webkit-user-select: none;
|
||||
pointer-events: none;
|
||||
opacity: var(--n-opacity-spinning);
|
||||
`)])]),F={small:20,medium:18,large:16},I=t({name:`Spin`,props:Object.assign(Object.assign(Object.assign({},S.props),{contentClass:String,contentStyle:[Object,String],description:String,size:{type:[String,Number],default:`medium`},show:{type:Boolean,default:!0},rotate:{type:Boolean,default:!0},spinning:{type:Boolean,validator:()=>!0,default:void 0},delay:Number}),k),slots:Object,setup(e){let{mergedClsPrefixRef:t,inlineThemeDisabled:n}=y(e),r=S(`Spin`,`-spin`,P,A,e,t),i=p(()=>{let{size:t}=e,{common:{cubicBezierEaseInOut:n},self:i}=r.value,{opacitySpinning:a,color:o,textColor:s}=i;return{"--n-bezier":n,"--n-opacity-spinning":a,"--n-size":typeof t==`number`?C(t):i[x(`size`,t)],"--n-color":o,"--n-text-color":s}}),a=n?v(`spin`,p(()=>{let{size:t}=e;return typeof t==`number`?String(t):t[0]}),i,e):void 0,o=w(e,[`spinning`,`show`]),s=u(!1);return c(t=>{let n;if(o.value){let{delay:r}=e;if(r){n=window.setTimeout(()=>{s.value=!0},r),t(()=>{clearTimeout(n)});return}}s.value=o.value}),{mergedClsPrefix:t,active:s,mergedStrokeWidth:p(()=>{let{strokeWidth:t}=e;if(t!==void 0)return t;let{size:n}=e;return F[typeof n==`number`?`medium`:n]}),cssVars:n?void 0:i,themeClass:a?.themeClass,onRender:a?.onRender}},render(){var t;let{$slots:n,mergedClsPrefix:r,description:i}=this,a=n.icon&&this.rotate,o=(i||n.description)&&e(`div`,{class:`${r}-spin-description`},i||n.description?.call(n)),s=n.icon?e(`div`,{class:[`${r}-spin-body`,this.themeClass]},e(`div`,{class:[`${r}-spin`,a&&`${r}-spin--rotate`],style:n.default?``:this.cssVars},n.icon()),o):e(`div`,{class:[`${r}-spin-body`,this.themeClass]},e(D,{clsPrefix:r,style:n.default?``:this.cssVars,stroke:this.stroke,"stroke-width":this.mergedStrokeWidth,radius:this.radius,scale:this.scale,class:`${r}-spin`}),o);return(t=this.onRender)==null||t.call(this),n.default?e(`div`,{class:[`${r}-spin-container`,this.themeClass],style:this.cssVars},e(`div`,{class:[`${r}-spin-content`,this.active&&`${r}-spin-content--spinning`,this.contentClass],style:this.contentStyle},n),e(O,{name:`fade-in-transition`},{default:()=>this.active?s:null})):s}}),L={class:`center-block-custom`},R={class:`width700 doc-page`},z={class:`doc-title`},B={key:0,class:`doc-loading`},V={key:2,class:`paper-block`},H={class:`paper`},U={class:`doc-text`},W={class:`docs-links`},G=M(t({__name:`DocsPage`,props:{kind:{}},setup(e){let t=e,c={terms:`Пользовательское соглашение`,privacy:`Политика конфиденциальности`,consent:`Согласие на обработку персональных данных`},p=u(``),g=u(!0),_=u(``);return h(async()=>{let e=j(),n={terms:()=>e.GetTerms({}),privacy:()=>e.GetPrivacy({}),consent:()=>e.GetConsent({})};try{let e=await n[t.kind]();e.error?_.value=e.error:p.value=e.text||``}catch(e){_.value=e instanceof Error?e.message:`Не удалось загрузить документ`}finally{g.value=!1}}),(e,u)=>(i(),o(`div`,L,[m(`div`,R,[m(`h1`,z,[r(N,null,{default:a(()=>[s(n(c[t.kind]),1)]),_:1})]),g.value?(i(),o(`div`,B,[r(d(I),{size:`large`})])):_.value?(i(),l(d(E),{key:1,type:`error`,"show-icon":!1,class:`doc-error`},{default:a(()=>[s(n(_.value),1)]),_:1})):(i(),o(`div`,V,[m(`div`,H,[m(`p`,U,n(p.value),1)]),u[0]||=m(`div`,{class:`paper-shadow paper-shadow-left`},null,-1),u[1]||=m(`div`,{class:`paper-shadow paper-shadow-right`},null,-1)])),m(`div`,W,[u[5]||=s(` Смотрите также: `,-1),r(d(f),{to:`/user-agreement`,class:`docs-link`},{default:a(()=>[...u[2]||=[s(`Пользовательское соглашение`,-1)]]),_:1}),u[6]||=s(` · `,-1),r(d(f),{to:`/privacy-policy`,class:`docs-link`},{default:a(()=>[...u[3]||=[s(`Политика конфиденциальности`,-1)]]),_:1}),u[7]||=s(` · `,-1),r(d(f),{to:`/consent`,class:`docs-link`},{default:a(()=>[...u[4]||=[s(`Согласие на обработку персональных данных`,-1)]]),_:1})])])]))}}),[[`__scopeId`,`data-v-f5dde12c`]]);export{G as t};
|
||||
`)])]),F={small:20,medium:18,large:16},I=t({name:`Spin`,props:Object.assign(Object.assign(Object.assign({},S.props),{contentClass:String,contentStyle:[Object,String],description:String,size:{type:[String,Number],default:`medium`},show:{type:Boolean,default:!0},rotate:{type:Boolean,default:!0},spinning:{type:Boolean,validator:()=>!0,default:void 0},delay:Number}),D),slots:Object,setup(e){let{mergedClsPrefixRef:t,inlineThemeDisabled:n}=y(e),r=S(`Spin`,`-spin`,P,A,e,t),i=p(()=>{let{size:t}=e,{common:{cubicBezierEaseInOut:n},self:i}=r.value,{opacitySpinning:a,color:o,textColor:s}=i;return{"--n-bezier":n,"--n-opacity-spinning":a,"--n-size":typeof t==`number`?C(t):i[x(`size`,t)],"--n-color":o,"--n-text-color":s}}),a=n?v(`spin`,p(()=>{let{size:t}=e;return typeof t==`number`?String(t):t[0]}),i,e):void 0,o=w(e,[`spinning`,`show`]),s=u(!1);return c(t=>{let n;if(o.value){let{delay:r}=e;if(r){n=window.setTimeout(()=>{s.value=!0},r),t(()=>{clearTimeout(n)});return}}s.value=o.value}),{mergedClsPrefix:t,active:s,mergedStrokeWidth:p(()=>{let{strokeWidth:t}=e;if(t!==void 0)return t;let{size:n}=e;return F[typeof n==`number`?`medium`:n]}),cssVars:n?void 0:i,themeClass:a?.themeClass,onRender:a?.onRender}},render(){var t;let{$slots:n,mergedClsPrefix:r,description:i}=this,a=n.icon&&this.rotate,o=(i||n.description)&&e(`div`,{class:`${r}-spin-description`},i||n.description?.call(n)),s=n.icon?e(`div`,{class:[`${r}-spin-body`,this.themeClass]},e(`div`,{class:[`${r}-spin`,a&&`${r}-spin--rotate`],style:n.default?``:this.cssVars},n.icon()),o):e(`div`,{class:[`${r}-spin-body`,this.themeClass]},e(k,{clsPrefix:r,style:n.default?``:this.cssVars,stroke:this.stroke,"stroke-width":this.mergedStrokeWidth,radius:this.radius,scale:this.scale,class:`${r}-spin`}),o);return(t=this.onRender)==null||t.call(this),n.default?e(`div`,{class:[`${r}-spin-container`,this.themeClass],style:this.cssVars},e(`div`,{class:[`${r}-spin-content`,this.active&&`${r}-spin-content--spinning`,this.contentClass],style:this.contentStyle},n),e(O,{name:`fade-in-transition`},{default:()=>this.active?s:null})):s}}),L={class:`center-block-custom`},R={class:`width700 doc-page`},z={class:`doc-title`},B={key:0,class:`doc-loading`},V={key:2,class:`paper-block`},H={class:`paper`},U={class:`doc-text`},W={class:`docs-links`},G=M(t({__name:`DocsPage`,props:{kind:{}},setup(e){let t=e,c={terms:`Пользовательское соглашение`,privacy:`Политика конфиденциальности`,consent:`Согласие на обработку персональных данных`},p=u(``),g=u(!0),_=u(``);return h(async()=>{let e=j(),n={terms:()=>e.GetTerms({}),privacy:()=>e.GetPrivacy({}),consent:()=>e.GetConsent({})};try{let e=await n[t.kind]();e.error?_.value=e.error:p.value=e.text||``}catch(e){_.value=e instanceof Error?e.message:`Не удалось загрузить документ`}finally{g.value=!1}}),(e,u)=>(i(),o(`div`,L,[m(`div`,R,[m(`h1`,z,[r(N,null,{default:a(()=>[s(n(c[t.kind]),1)]),_:1})]),g.value?(i(),o(`div`,B,[r(d(I),{size:`large`})])):_.value?(i(),l(d(E),{key:1,type:`error`,"show-icon":!1,class:`doc-error`},{default:a(()=>[s(n(_.value),1)]),_:1})):(i(),o(`div`,V,[m(`div`,H,[m(`p`,U,n(p.value),1)]),u[0]||=m(`div`,{class:`paper-shadow paper-shadow-left`},null,-1),u[1]||=m(`div`,{class:`paper-shadow paper-shadow-right`},null,-1)])),m(`div`,W,[u[5]||=s(` Смотрите также: `,-1),r(d(f),{to:`/user-agreement`,class:`docs-link`},{default:a(()=>[...u[2]||=[s(`Пользовательское соглашение`,-1)]]),_:1}),u[6]||=s(` · `,-1),r(d(f),{to:`/privacy-policy`,class:`docs-link`},{default:a(()=>[...u[3]||=[s(`Политика конфиденциальности`,-1)]]),_:1}),u[7]||=s(` · `,-1),r(d(f),{to:`/consent`,class:`docs-link`},{default:a(()=>[...u[4]||=[s(`Согласие на обработку персональных данных`,-1)]]),_:1})])])]))}}),[[`__scopeId`,`data-v-f5dde12c`]]);export{G as t};
|
||||
@@ -1 +1 @@
|
||||
import{A as e,D as t,v as n}from"./vue-router-bPs2Bq2h.js";import{N as r,Z as i,o as a,r as o}from"./light-BDe84dgP.js";import{o as s,s as c}from"./resolve-slot-Cp3m6n7Y.js";import{s as l}from"./Button-98scn9wc.js";import{t as u}from"./get-slot-6kXJmSMP.js";import{l as d}from"./index-DzEqT7MZ.js";function f(){return d}var p={name:`Flex`,self:f},m=t({name:`Flex`,props:Object.assign(Object.assign({},o.props),{align:String,justify:{type:String,default:`start`},inline:Boolean,vertical:Boolean,reverse:Boolean,size:{type:[String,Number,Array],default:`medium`},wrap:{type:Boolean,default:!0}}),setup(e){let{mergedClsPrefixRef:t,mergedRtlRef:l}=r(e),u=o(`Flex`,`-flex`,void 0,p,e,t);return{rtlEnabled:a(`Flex`,l,t),mergedClsPrefix:t,margin:n(()=>{let{size:t}=e;if(Array.isArray(t))return{horizontal:t[0],vertical:t[1]};if(typeof t==`number`)return{horizontal:t,vertical:t};let{self:{[i(`gap`,t)]:n}}=u.value,{row:r,col:a}=c(n);return{horizontal:s(a),vertical:s(r)}})}},render(){let{vertical:t,reverse:n,align:r,inline:i,justify:a,margin:o,wrap:s,mergedClsPrefix:c,rtlEnabled:d}=this,f=l(u(this),!1);return f.length?e(`div`,{role:`none`,class:[`${c}-flex`,d&&`${c}-flex--rtl`],style:{display:i?`inline-flex`:`flex`,flexDirection:t&&!n?`column`:t&&n?`column-reverse`:!t&&n?`row-reverse`:`row`,justifyContent:a,flexWrap:!s||t?`nowrap`:`wrap`,alignItems:r,gap:`${o.vertical}px ${o.horizontal}px`}},f):null}});export{m as t};
|
||||
import{A as e,D as t,v as n}from"./vue-router-bPs2Bq2h.js";import{N as r,Z as i,o as a,r as o}from"./light-BDe84dgP.js";import{o as s,s as c}from"./resolve-slot-Cp3m6n7Y.js";import{s as l}from"./Button-CQhak1JU.js";import{t as u}from"./get-slot-6kXJmSMP.js";import{l as d}from"./index-DsVCmMvY.js";function f(){return d}var p={name:`Flex`,self:f},m=t({name:`Flex`,props:Object.assign(Object.assign({},o.props),{align:String,justify:{type:String,default:`start`},inline:Boolean,vertical:Boolean,reverse:Boolean,size:{type:[String,Number,Array],default:`medium`},wrap:{type:Boolean,default:!0}}),setup(e){let{mergedClsPrefixRef:t,mergedRtlRef:l}=r(e),u=o(`Flex`,`-flex`,void 0,p,e,t);return{rtlEnabled:a(`Flex`,l,t),mergedClsPrefix:t,margin:n(()=>{let{size:t}=e;if(Array.isArray(t))return{horizontal:t[0],vertical:t[1]};if(typeof t==`number`)return{horizontal:t,vertical:t};let{self:{[i(`gap`,t)]:n}}=u.value,{row:r,col:a}=c(n);return{horizontal:s(a),vertical:s(r)}})}},render(){let{vertical:t,reverse:n,align:r,inline:i,justify:a,margin:o,wrap:s,mergedClsPrefix:c,rtlEnabled:d}=this,f=l(u(this),!1);return f.length?e(`div`,{role:`none`,class:[`${c}-flex`,d&&`${c}-flex--rtl`],style:{display:i?`inline-flex`:`flex`,flexDirection:t&&!n?`column`:t&&n?`column-reverse`:!t&&n?`row-reverse`:`row`,justifyContent:a,flexWrap:!s||t?`nowrap`:`wrap`,alignItems:r,gap:`${o.vertical}px ${o.horizontal}px`}},f):null}});export{m as t};
|
||||
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
Vendored
+7
File diff suppressed because one or more lines are too long
Vendored
-7
File diff suppressed because one or more lines are too long
Vendored
-571
File diff suppressed because one or more lines are too long
Vendored
+362
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{D as e,G as t,H as n,S as r}from"./vue-router-bPs2Bq2h.js";import{n as i}from"./HeaderMenu-eN2wSqXA.js";var a={class:`text-with-font`},o=i(e({__name:`HeaderText`,setup(e){return(e,i)=>(n(),r(`span`,a,[t(e.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-689794e0`]]);export{o as t};
|
||||
import{D as e,G as t,H as n,S as r}from"./vue-router-bPs2Bq2h.js";import{n as i}from"./HeaderMenu-CNP1EQA-.js";var a={class:`text-with-font`},o=i(e({__name:`HeaderText`,setup(e){return(e,i)=>(n(),r(`span`,a,[t(e.$slots,`default`,{},void 0,!0)]))}}),[[`__scopeId`,`data-v-689794e0`]]);export{o as t};
|
||||
@@ -1 +1 @@
|
||||
import{D as e,E as t,H as n,S as r,p as i,y as a}from"./vue-router-bPs2Bq2h.js";import{t as o}from"./HeaderMenu-eN2wSqXA.js";var s=e({__name:`HomeView`,setup(e){return(e,s)=>(n(),r(i,null,[s[0]||=a(`div`,{class:`center-block-custom content-block center-middle-block-custom height80`},[a(`div`,null,[a(`h1`,{class:`font-text`},`Вечерний детектив`),a(`h3`,{class:`font-text`},`Дело №0`),a(`p`,{class:`content-text`},`Поиграем?`)])],-1),t(o,{active:`main`})],64))}});export{s as default};
|
||||
import{D as e,E as t,H as n,S as r,p as i,y as a}from"./vue-router-bPs2Bq2h.js";import{t as o}from"./HeaderMenu-CNP1EQA-.js";var s=e({__name:`HomeView`,setup(e){return(e,s)=>(n(),r(i,null,[s[0]||=a(`div`,{class:`center-block-custom content-block center-middle-block-custom height80`},[a(`div`,null,[a(`h1`,{class:`font-text`},`Вечерний детектив`),a(`h3`,{class:`font-text`},`Дело №0`),a(`p`,{class:`content-text`},`Поиграем?`)])],-1),t(o,{active:`main`})],64))}});export{s as default};
|
||||
Vendored
+234
File diff suppressed because one or more lines are too long
Vendored
+464
File diff suppressed because one or more lines are too long
Vendored
-464
File diff suppressed because one or more lines are too long
Vendored
-108
File diff suppressed because one or more lines are too long
Vendored
+108
File diff suppressed because one or more lines are too long
Vendored
-1
File diff suppressed because one or more lines are too long
Vendored
+1
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-BIx-pZOL.js";import{t as o}from"./HeaderMenu-eN2wSqXA.js";var s=e({__name:`PrivacyPolicyView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`privacy`}),t(o)],64))}});export{s as default};
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-DtxwjX3o.js";import{t as o}from"./HeaderMenu-CNP1EQA-.js";var s=e({__name:`PrivacyPolicyView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`privacy`}),t(o)],64))}});export{s as default};
|
||||
Vendored
+5
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{D as e,Dt as t,E as n,H as r,Q as i,S as a,T as o,a as s,b as c,it as l,lt as u,p as d,y as f}from"./vue-router-bPs2Bq2h.js";import{t as p}from"./Tag-BdbFVT7x.js";import{t as m}from"./use-message-L319FZjl.js";import{i as h,n as g,t as _}from"./HeaderMenu-eN2wSqXA.js";var v={class:`center-block-custom`},y={class:`width700`},b={class:`scenario-card`},x={class:`scenario-heading`},S={class:`scenario-title`},C={class:`scenario-image-frame`},w=[`src`,`alt`],T={class:`scenario-details`},E={class:`scenario-description`},D={class:`scenario-author`},O=g(e({__name:`ScenarioPage`,setup(e){let c=m(),g=h(),O=s().params.id,k=l({id:void 0,name:void 0,story:void 0,author:void 0,status:void 0,updatedAt:void 0,createdAt:void 0,publishedAt:void 0});async function A(e){let t=await g.GetScenario({id:e});if(t.error!=``){c.error(t.error);return}k.value=t.scenario}return A(Number(O)),(e,s)=>(r(),a(d,null,[f(`div`,v,[f(`div`,y,[f(`section`,b,[f(`div`,x,[s[0]||=f(`p`,{class:`scenario-kicker`},`ДЕЛО ИЗ КАТАЛОГА`,-1),f(`h1`,S,t(k.value.name),1)]),f(`div`,C,[f(`img`,{class:`scenario-image`,src:k.value.image,alt:k.value.name},null,8,w)]),f(`div`,T,[f(`p`,E,t(k.value.description),1),f(`div`,D,[n(u(p),{bordered:!1,type:`success`,class:`status-block`},{default:i(()=>[o(` Автор: `+t(k.value.author?.username),1)]),_:1})])])])])]),n(_,{active:`catalog`})],64))}}),[[`__scopeId`,`data-v-17249bca`]]),k=e({__name:`ScenarioView`,setup(e){return(e,t)=>(r(),c(O))}});export{k as default};
|
||||
import{D as e,Dt as t,E as n,H as r,Q as i,S as a,T as o,a as s,b as c,it as l,lt as u,p as d,y as f}from"./vue-router-bPs2Bq2h.js";import{t as p}from"./Tag-CyF6Ld4O.js";import{t as m}from"./use-message-uEq7LuSg.js";import{i as h,n as g,t as _}from"./HeaderMenu-CNP1EQA-.js";var v={class:`center-block-custom`},y={class:`width700`},b={class:`scenario-card`},x={class:`scenario-heading`},S={class:`scenario-title`},C={class:`scenario-image-frame`},w=[`src`,`alt`],T={class:`scenario-details`},E={class:`scenario-description`},D={class:`scenario-author`},O=g(e({__name:`ScenarioPage`,setup(e){let c=m(),g=h(),O=s().params.id,k=l({id:void 0,name:void 0,story:void 0,author:void 0,status:void 0,updatedAt:void 0,createdAt:void 0,publishedAt:void 0});async function A(e){let t=await g.GetScenario({id:e});if(t.error!=``){c.error(t.error);return}k.value=t.scenario}return A(Number(O)),(e,s)=>(r(),a(d,null,[f(`div`,v,[f(`div`,y,[f(`section`,b,[f(`div`,x,[s[0]||=f(`p`,{class:`scenario-kicker`},`ДЕЛО ИЗ КАТАЛОГА`,-1),f(`h1`,S,t(k.value.name),1)]),f(`div`,C,[f(`img`,{class:`scenario-image`,src:k.value.image,alt:k.value.name},null,8,w)]),f(`div`,T,[f(`p`,E,t(k.value.description),1),f(`div`,D,[n(u(p),{bordered:!1,type:`success`,class:`status-block`},{default:i(()=>[o(` Автор: `+t(k.value.author?.username),1)]),_:1})])])])])]),n(_,{active:`catalog`})],64))}}),[[`__scopeId`,`data-v-17249bca`]]),k=e({__name:`ScenarioView`,setup(e){return(e,t)=>(r(),c(O))}});export{k as default};
|
||||
+1
File diff suppressed because one or more lines are too long
-1
File diff suppressed because one or more lines are too long
+1
File diff suppressed because one or more lines are too long
-1
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
.binding-card[data-v-8f41c97f],.qr-card[data-v-8f41c97f],.ready-card[data-v-8f41c97f]{text-align:center;width:100%;max-width:min(94vw,520px)}.ready-title[data-v-8f41c97f]{font-size:28px}.screen-center[data-v-8f41c97f]{justify-content:center;align-items:center;min-height:100dvh;padding:20px;display:flex}.screen-page[data-v-8f41c97f]{color:#eee;background:#111;min-height:100dvh}
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{B as e,D as t,Dt as n,E as r,H as i,Q as a,S as o,T as s,a as c,b as l,it as u,lt as d,p as f,v as p,x as m,y as h,z as g}from"./vue-router-bPs2Bq2h.js";import{t as _}from"./Card-BJm6ZyX4.js";import{t as v}from"./Button-CQhak1JU.js";import{t as y}from"./Select-DikcSvU3.js";import{t as b}from"./use-message-uEq7LuSg.js";import{t as x}from"./QrCode-c3qDqmj4.js";import{i as S,n as C,t as w}from"./HeaderMenu-CNP1EQA-.js";var T={key:0,class:`screen-center`},E={key:1,class:`screen-page`},D={key:0,class:`screen-center`},O={key:0,class:`screen-center`},k={key:1,class:`screen-center`},A=`evening-detective-screen-session`,j=C(t({__name:`ScreenPage`,setup(t){let C=S(),j=b(),M=c(),N=u(``),P=u(``),F=u(),I=u([]),L=u(null),R=u(!1),z=u(!0),B=u(!1),V=u(!1),H=null,U=p(()=>!!(M.query.screenId&&M.query.accessToken)),W=p(()=>{if(!N.value||!P.value)return``;let e=new URL(`/screen`,window.location.origin);return e.searchParams.set(`screenId`,N.value),e.searchParams.set(`accessToken`,P.value),e.toString()}),G=p(()=>I.value.map(e=>({label:e.name||`Игра ${e.id}`,value:e.id})));function K(){sessionStorage.setItem(A,JSON.stringify({screenId:N.value,accessToken:P.value}))}function q(){try{let e=JSON.parse(sessionStorage.getItem(A)||`{}`);N.value=e.screenId||``,P.value=e.accessToken||``}catch{sessionStorage.removeItem(A)}}async function J(){let e=await C.CreateScreenSession({});if(e.error||!e.screenId||!e.accessToken)throw Error(e.error||`Не удалось создать сессию экрана`);N.value=e.screenId,P.value=e.accessToken,K()}async function Y(){if(!(!N.value||!P.value))try{let e=await C.GetScreenState({screenId:N.value,accessToken:P.value});if(e.error)throw Error(e.error);F.value=e.state}catch(e){j.error(e instanceof Error?e.message:`Не удалось получить состояние экрана`)}}async function X(){try{let e=await C.GetGames({});if(e.error)throw Error(e.error);I.value=e.games||[]}catch(e){j.error(e instanceof Error?e.message:`Не удалось загрузить игры`)}}async function Z(){if(!(!L.value||!M.query.screenId||!M.query.accessToken)){B.value=!0;try{let e=await C.BindScreen({screenId:String(M.query.screenId),accessToken:String(M.query.accessToken),gameId:L.value});if(e.error)throw Error(e.error);V.value=!0}catch(e){j.error(e instanceof Error?e.message:`Не удалось привязать экран`)}finally{B.value=!1}}}async function Q(){try{await document.documentElement.requestFullscreen?.()}catch{j.warning(`Полноэкранный режим недоступен в этом браузере`)}R.value=!0}return g(async()=>{if(U.value){await X(),z.value=!1;return}q();try{(!N.value||!P.value)&&await J(),await Y(),H=window.setInterval(Y,1e3)}catch(e){j.error(e instanceof Error?e.message:`Не удалось подготовить экран`)}finally{z.value=!1}}),e(()=>{H!=null&&window.clearInterval(H)}),(e,t)=>(i(),o(f,null,[U.value?(i(),o(`div`,T,[r(d(_),{class:`binding-card`,title:`Привязка экрана`},{default:a(()=>[V.value?(i(),o(f,{key:0},[t[1]||=h(`p`,null,`Экран привязан к игре.`,-1),t[2]||=h(`p`,null,`Можно закрыть эту страницу.`,-1)],64)):(i(),o(f,{key:1},[t[4]||=h(`p`,null,`Выберите игру, к которой привязать экран.`,-1),r(d(y),{value:L.value,"onUpdate:value":t[0]||=e=>L.value=e,options:G.value,placeholder:`Игра`},null,8,[`value`,`options`]),r(d(v),{type:`primary`,loading:B.value,disabled:L.value==null,onClick:Z},{default:a(()=>[...t[3]||=[s(` Привязать `,-1)]]),_:1},8,[`loading`,`disabled`])],64))]),_:1})])):(i(),o(`div`,E,[z.value?(i(),o(`div`,D,`Подготовка экрана…`)):(i(),o(f,{key:1},[F.value?.gameId?(i(),o(`div`,k,[r(d(_),{class:`ready-card`},{default:a(()=>[t[8]||=h(`p`,{class:`ready-title`},`Экран подключён`,-1),h(`p`,null,`Игра №`+n(F.value.gameId),1),R.value?m(``,!0):(i(),l(d(v),{key:0,type:`primary`,onClick:Q},{default:a(()=>[...t[7]||=[s(`Подготовить экран`,-1)]]),_:1}))]),_:1})])):(i(),o(`div`,O,[r(d(_),{class:`qr-card`,title:`Подключение экрана`},{default:a(()=>[W.value?(i(),l(d(x),{key:0,value:W.value,size:260},null,8,[`value`])):m(``,!0),t[6]||=h(`p`,null,`Отсканируйте QR телефоном организатора и выберите игру.`,-1),R.value?m(``,!0):(i(),l(d(v),{key:1,type:`primary`,onClick:Q},{default:a(()=>[...t[5]||=[s(`Подготовить экран`,-1)]]),_:1}))]),_:1})]))],64))])),U.value?(i(),l(w,{key:2,active:`games`})):m(``,!0)],64))}}),[[`__scopeId`,`data-v-8f41c97f`]]),M=t({__name:`ScreenView`,setup(e){return(e,t)=>(i(),l(j))}});export{M as default};
|
||||
Vendored
+210
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
|
||||
import{A as e,D as t,f as n,v as r}from"./vue-router-bPs2Bq2h.js";import{N as i,Z as a,o,r as s}from"./light-BDe84dgP.js";import{o as c,s as l}from"./resolve-slot-Cp3m6n7Y.js";import{c as u,s as d}from"./Button-98scn9wc.js";import{t as f}from"./get-slot-6kXJmSMP.js";import{u as p}from"./index-DzEqT7MZ.js";function m(){return p}var h={name:`Space`,self:m},g;function _(){if(!u)return!0;if(g===void 0){let e=document.createElement(`div`);e.style.display=`flex`,e.style.flexDirection=`column`,e.style.rowGap=`1px`,e.appendChild(document.createElement(`div`)),e.appendChild(document.createElement(`div`)),document.body.appendChild(e);let t=e.scrollHeight===1;return document.body.removeChild(e),g=t}return g}var v=t({name:`Space`,props:Object.assign(Object.assign({},s.props),{align:String,justify:{type:String,default:`start`},inline:Boolean,vertical:Boolean,reverse:Boolean,size:[String,Number,Array],wrapItem:{type:Boolean,default:!0},itemClass:String,itemStyle:[String,Object],wrap:{type:Boolean,default:!0},internalUseGap:{type:Boolean,default:void 0}}),setup(e){let{mergedClsPrefixRef:t,mergedRtlRef:n,mergedComponentPropsRef:u}=i(e),d=r(()=>e.size||u?.value?.Space?.size||`medium`),f=s(`Space`,`-space`,void 0,h,e,t),p=o(`Space`,n,t);return{useGap:_(),rtlEnabled:p,mergedClsPrefix:t,margin:r(()=>{let e=d.value;if(Array.isArray(e))return{horizontal:e[0],vertical:e[1]};if(typeof e==`number`)return{horizontal:e,vertical:e};let{self:{[a(`gap`,e)]:t}}=f.value,{row:n,col:r}=l(t);return{horizontal:c(r),vertical:c(n)}})}},render(){let{vertical:t,reverse:r,align:i,inline:a,justify:o,itemClass:s,itemStyle:c,margin:l,wrap:u,mergedClsPrefix:p,rtlEnabled:m,useGap:h,wrapItem:g,internalUseGap:_}=this,v=d(f(this),!1);if(!v.length)return null;let y=`${l.horizontal}px`,b=`${l.horizontal/2}px`,x=`${l.vertical}px`,S=`${l.vertical/2}px`,C=v.length-1,w=o.startsWith(`space-`);return e(`div`,{role:`none`,class:[`${p}-space`,m&&`${p}-space--rtl`],style:{display:a?`inline-flex`:`flex`,flexDirection:t&&!r?`column`:t&&r?`column-reverse`:!t&&r?`row-reverse`:`row`,justifyContent:[`start`,`end`].includes(o)?`flex-${o}`:o,flexWrap:!u||t?`nowrap`:`wrap`,marginTop:h||t?``:`-${S}`,marginBottom:h||t?``:`-${S}`,alignItems:i,gap:h?`${l.vertical}px ${l.horizontal}px`:``}},!g&&(h||_)?v:v.map((r,i)=>r.type===n?r:e(`div`,{role:`none`,class:s,style:[c,{maxWidth:`100%`},h?``:t?{marginBottom:i===C?``:x}:m?{marginLeft:w?o===`space-between`&&i===C?``:b:i===C?``:y,marginRight:w?o===`space-between`&&i===0?``:b:``,paddingTop:S,paddingBottom:S}:{marginRight:w?o===`space-between`&&i===C?``:b:i===C?``:y,marginLeft:w?o===`space-between`&&i===0?``:b:``,paddingTop:S,paddingBottom:S}]},r)))}});export{v as t};
|
||||
import{A as e,D as t,f as n,v as r}from"./vue-router-bPs2Bq2h.js";import{N as i,Z as a,o,r as s}from"./light-BDe84dgP.js";import{o as c,s as l}from"./resolve-slot-Cp3m6n7Y.js";import{c as u,s as d}from"./Button-CQhak1JU.js";import{t as f}from"./get-slot-6kXJmSMP.js";import{u as p}from"./index-DsVCmMvY.js";function m(){return p}var h={name:`Space`,self:m},g;function _(){if(!u)return!0;if(g===void 0){let e=document.createElement(`div`);e.style.display=`flex`,e.style.flexDirection=`column`,e.style.rowGap=`1px`,e.appendChild(document.createElement(`div`)),e.appendChild(document.createElement(`div`)),document.body.appendChild(e);let t=e.scrollHeight===1;return document.body.removeChild(e),g=t}return g}var v=t({name:`Space`,props:Object.assign(Object.assign({},s.props),{align:String,justify:{type:String,default:`start`},inline:Boolean,vertical:Boolean,reverse:Boolean,size:[String,Number,Array],wrapItem:{type:Boolean,default:!0},itemClass:String,itemStyle:[String,Object],wrap:{type:Boolean,default:!0},internalUseGap:{type:Boolean,default:void 0}}),setup(e){let{mergedClsPrefixRef:t,mergedRtlRef:n,mergedComponentPropsRef:u}=i(e),d=r(()=>e.size||u?.value?.Space?.size||`medium`),f=s(`Space`,`-space`,void 0,h,e,t),p=o(`Space`,n,t);return{useGap:_(),rtlEnabled:p,mergedClsPrefix:t,margin:r(()=>{let e=d.value;if(Array.isArray(e))return{horizontal:e[0],vertical:e[1]};if(typeof e==`number`)return{horizontal:e,vertical:e};let{self:{[a(`gap`,e)]:t}}=f.value,{row:n,col:r}=l(t);return{horizontal:c(r),vertical:c(n)}})}},render(){let{vertical:t,reverse:r,align:i,inline:a,justify:o,itemClass:s,itemStyle:c,margin:l,wrap:u,mergedClsPrefix:p,rtlEnabled:m,useGap:h,wrapItem:g,internalUseGap:_}=this,v=d(f(this),!1);if(!v.length)return null;let y=`${l.horizontal}px`,b=`${l.horizontal/2}px`,x=`${l.vertical}px`,S=`${l.vertical/2}px`,C=v.length-1,w=o.startsWith(`space-`);return e(`div`,{role:`none`,class:[`${p}-space`,m&&`${p}-space--rtl`],style:{display:a?`inline-flex`:`flex`,flexDirection:t&&!r?`column`:t&&r?`column-reverse`:!t&&r?`row-reverse`:`row`,justifyContent:[`start`,`end`].includes(o)?`flex-${o}`:o,flexWrap:!u||t?`nowrap`:`wrap`,marginTop:h||t?``:`-${S}`,marginBottom:h||t?``:`-${S}`,alignItems:i,gap:h?`${l.vertical}px ${l.horizontal}px`:``}},!g&&(h||_)?v:v.map((r,i)=>r.type===n?r:e(`div`,{role:`none`,class:s,style:[c,{maxWidth:`100%`},h?``:t?{marginBottom:i===C?``:x}:m?{marginLeft:w?o===`space-between`&&i===C?``:b:i===C?``:y,marginRight:w?o===`space-between`&&i===0?``:b:``,paddingTop:S,paddingBottom:S}:{marginRight:w?o===`space-between`&&i===C?``:b:i===C?``:y,marginLeft:w?o===`space-between`&&i===0?``:b:``,paddingTop:S,paddingBottom:S}]},r)))}});export{v as t};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{A as e,D as t,U as n,it as r,st as i,v as a}from"./vue-router-bPs2Bq2h.js";import{B as o,G as s,J as c,K as l,M as u,N as d,X as f,Y as p,Z as m,o as h,r as g,t as _,z as v}from"./light-BDe84dgP.js";import{a as y,c as b}from"./resolve-slot-Cp3m6n7Y.js";import{n as x,t as S}from"./call-ChHlm4-m.js";import{E as C,N as w}from"./index-DzEqT7MZ.js";function T(e){let{textColor2:t,primaryColorHover:n,primaryColorPressed:r,primaryColor:i,infoColor:a,successColor:s,warningColor:c,errorColor:l,baseColor:u,borderColor:d,opacityDisabled:f,tagColor:p,closeIconColor:m,closeIconColorHover:h,closeIconColorPressed:g,borderRadiusSmall:_,fontSizeMini:v,fontSizeTiny:y,fontSizeSmall:b,fontSizeMedium:x,heightMini:S,heightTiny:w,heightSmall:T,heightMedium:E,closeColorHover:D,closeColorPressed:O,buttonColor2Hover:k,buttonColor2Pressed:A,fontWeightStrong:j}=e;return Object.assign(Object.assign({},C),{closeBorderRadius:_,heightTiny:S,heightSmall:w,heightMedium:T,heightLarge:E,borderRadius:_,opacityDisabled:f,fontSizeTiny:v,fontSizeSmall:y,fontSizeMedium:b,fontSizeLarge:x,fontWeightStrong:j,textColorCheckable:t,textColorHoverCheckable:t,textColorPressedCheckable:t,textColorChecked:u,colorCheckable:`#0000`,colorHoverCheckable:k,colorPressedCheckable:A,colorChecked:i,colorCheckedHover:n,colorCheckedPressed:r,border:`1px solid ${d}`,textColor:t,color:p,colorBordered:`rgb(250, 250, 252)`,closeIconColor:m,closeIconColorHover:h,closeIconColorPressed:g,closeColorHover:D,closeColorPressed:O,borderPrimary:`1px solid ${o(i,{alpha:.3})}`,textColorPrimary:i,colorPrimary:o(i,{alpha:.12}),colorBorderedPrimary:o(i,{alpha:.1}),closeIconColorPrimary:i,closeIconColorHoverPrimary:i,closeIconColorPressedPrimary:i,closeColorHoverPrimary:o(i,{alpha:.12}),closeColorPressedPrimary:o(i,{alpha:.18}),borderInfo:`1px solid ${o(a,{alpha:.3})}`,textColorInfo:a,colorInfo:o(a,{alpha:.12}),colorBorderedInfo:o(a,{alpha:.1}),closeIconColorInfo:a,closeIconColorHoverInfo:a,closeIconColorPressedInfo:a,closeColorHoverInfo:o(a,{alpha:.12}),closeColorPressedInfo:o(a,{alpha:.18}),borderSuccess:`1px solid ${o(s,{alpha:.3})}`,textColorSuccess:s,colorSuccess:o(s,{alpha:.12}),colorBorderedSuccess:o(s,{alpha:.1}),closeIconColorSuccess:s,closeIconColorHoverSuccess:s,closeIconColorPressedSuccess:s,closeColorHoverSuccess:o(s,{alpha:.12}),closeColorPressedSuccess:o(s,{alpha:.18}),borderWarning:`1px solid ${o(c,{alpha:.35})}`,textColorWarning:c,colorWarning:o(c,{alpha:.15}),colorBorderedWarning:o(c,{alpha:.12}),closeIconColorWarning:c,closeIconColorHoverWarning:c,closeIconColorPressedWarning:c,closeColorHoverWarning:o(c,{alpha:.12}),closeColorPressedWarning:o(c,{alpha:.18}),borderError:`1px solid ${o(l,{alpha:.23})}`,textColorError:l,colorError:o(l,{alpha:.1}),colorBorderedError:o(l,{alpha:.08}),closeIconColorError:l,closeIconColorHoverError:l,closeIconColorPressedError:l,closeColorHoverError:o(l,{alpha:.12}),closeColorPressedError:o(l,{alpha:.18})})}var E={name:`Tag`,common:_,self:T},D={color:Object,type:{type:String,default:`default`},round:Boolean,size:String,closable:Boolean,disabled:{type:Boolean,default:void 0}},O=l(`tag`,`
|
||||
import{A as e,D as t,U as n,it as r,st as i,v as a}from"./vue-router-bPs2Bq2h.js";import{B as o,G as s,J as c,K as l,M as u,N as d,X as f,Y as p,Z as m,o as h,r as g,t as _,z as v}from"./light-BDe84dgP.js";import{a as y,c as b}from"./resolve-slot-Cp3m6n7Y.js";import{n as x,t as S}from"./call-ChHlm4-m.js";import{D as C,P as w}from"./index-DsVCmMvY.js";function T(e){let{textColor2:t,primaryColorHover:n,primaryColorPressed:r,primaryColor:i,infoColor:a,successColor:s,warningColor:c,errorColor:l,baseColor:u,borderColor:d,opacityDisabled:f,tagColor:p,closeIconColor:m,closeIconColorHover:h,closeIconColorPressed:g,borderRadiusSmall:_,fontSizeMini:v,fontSizeTiny:y,fontSizeSmall:b,fontSizeMedium:x,heightMini:S,heightTiny:w,heightSmall:T,heightMedium:E,closeColorHover:D,closeColorPressed:O,buttonColor2Hover:k,buttonColor2Pressed:A,fontWeightStrong:j}=e;return Object.assign(Object.assign({},C),{closeBorderRadius:_,heightTiny:S,heightSmall:w,heightMedium:T,heightLarge:E,borderRadius:_,opacityDisabled:f,fontSizeTiny:v,fontSizeSmall:y,fontSizeMedium:b,fontSizeLarge:x,fontWeightStrong:j,textColorCheckable:t,textColorHoverCheckable:t,textColorPressedCheckable:t,textColorChecked:u,colorCheckable:`#0000`,colorHoverCheckable:k,colorPressedCheckable:A,colorChecked:i,colorCheckedHover:n,colorCheckedPressed:r,border:`1px solid ${d}`,textColor:t,color:p,colorBordered:`rgb(250, 250, 252)`,closeIconColor:m,closeIconColorHover:h,closeIconColorPressed:g,closeColorHover:D,closeColorPressed:O,borderPrimary:`1px solid ${o(i,{alpha:.3})}`,textColorPrimary:i,colorPrimary:o(i,{alpha:.12}),colorBorderedPrimary:o(i,{alpha:.1}),closeIconColorPrimary:i,closeIconColorHoverPrimary:i,closeIconColorPressedPrimary:i,closeColorHoverPrimary:o(i,{alpha:.12}),closeColorPressedPrimary:o(i,{alpha:.18}),borderInfo:`1px solid ${o(a,{alpha:.3})}`,textColorInfo:a,colorInfo:o(a,{alpha:.12}),colorBorderedInfo:o(a,{alpha:.1}),closeIconColorInfo:a,closeIconColorHoverInfo:a,closeIconColorPressedInfo:a,closeColorHoverInfo:o(a,{alpha:.12}),closeColorPressedInfo:o(a,{alpha:.18}),borderSuccess:`1px solid ${o(s,{alpha:.3})}`,textColorSuccess:s,colorSuccess:o(s,{alpha:.12}),colorBorderedSuccess:o(s,{alpha:.1}),closeIconColorSuccess:s,closeIconColorHoverSuccess:s,closeIconColorPressedSuccess:s,closeColorHoverSuccess:o(s,{alpha:.12}),closeColorPressedSuccess:o(s,{alpha:.18}),borderWarning:`1px solid ${o(c,{alpha:.35})}`,textColorWarning:c,colorWarning:o(c,{alpha:.15}),colorBorderedWarning:o(c,{alpha:.12}),closeIconColorWarning:c,closeIconColorHoverWarning:c,closeIconColorPressedWarning:c,closeColorHoverWarning:o(c,{alpha:.12}),closeColorPressedWarning:o(c,{alpha:.18}),borderError:`1px solid ${o(l,{alpha:.23})}`,textColorError:l,colorError:o(l,{alpha:.1}),colorBorderedError:o(l,{alpha:.08}),closeIconColorError:l,closeIconColorHoverError:l,closeIconColorPressedError:l,closeColorHoverError:o(l,{alpha:.12}),closeColorPressedError:o(l,{alpha:.18})})}var E={name:`Tag`,common:_,self:T},D={color:Object,type:{type:String,default:`default`},round:Boolean,size:String,closable:Boolean,disabled:{type:Boolean,default:void 0}},O=l(`tag`,`
|
||||
--n-close-margin: var(--n-close-margin-top) var(--n-close-margin-right) var(--n-close-margin-bottom) var(--n-close-margin-left);
|
||||
white-space: nowrap;
|
||||
position: relative;
|
||||
+1
File diff suppressed because one or more lines are too long
-1
File diff suppressed because one or more lines are too long
Vendored
-440
File diff suppressed because one or more lines are too long
Vendored
+440
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-BIx-pZOL.js";import{t as o}from"./HeaderMenu-eN2wSqXA.js";var s=e({__name:`UserAgreementView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`terms`}),t(o)],64))}});export{s as default};
|
||||
import{D as e,E as t,H as n,S as r,p as i}from"./vue-router-bPs2Bq2h.js";import{t as a}from"./DocsPage-DtxwjX3o.js";import{t as o}from"./HeaderMenu-CNP1EQA-.js";var s=e({__name:`UserAgreementView`,setup(e){return(e,s)=>(n(),r(i,null,[t(a,{kind:`terms`}),t(o)],64))}});export{s as default};
|
||||
File diff suppressed because one or more lines are too long
@@ -1,4 +1,4 @@
|
||||
import{A as e,D as t}from"./vue-router-bPs2Bq2h.js";import{o as n}from"./HeaderMenu-eN2wSqXA.js";var r=t({name:`Remove`,render(){return e(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 512 512`},e(`line`,{x1:`400`,y1:`256`,x2:`112`,y2:`256`,style:`
|
||||
import{A as e,D as t}from"./vue-router-bPs2Bq2h.js";import{o as n}from"./HeaderMenu-CNP1EQA-.js";var r=t({name:`Remove`,render(){return e(`svg`,{xmlns:`http://www.w3.org/2000/svg`,viewBox:`0 0 512 512`},e(`line`,{x1:`400`,y1:`256`,x2:`112`,y2:`256`,style:`
|
||||
fill: none;
|
||||
stroke: currentColor;
|
||||
stroke-linecap: round;
|
||||
+1
-1
@@ -1 +1 @@
|
||||
import{a as e,o as t}from"./HeaderMenu-eN2wSqXA.js";function n(){let t=e();return r(t.refreshTokenAction,t.getToken)}function r(e,n){async function r(r,i){let a={},o=n();o&&(a.Authorization=`Bearer ${o}`);let s=await fetch(`${t()}/${r}`,{...i,headers:{...a,...i.headers}});if(s.status==401){await e();let o=n();o&&(a.Authorization=`Bearer ${o}`),s=await fetch(`${t()}/${r}`,{...i,headers:{...a,...i.headers}})}return s}async function o(e,t){let n=await r(e,{method:`GET`});if(!n.ok)throw Error(await a(n));return{blob:await n.blob(),filename:i(n.headers.get(`Content-Disposition`))||t}}function s(e){return o(`api/scenarios/${e}/archive`,`scenario-${e}.zip`)}function c(e){return o(`api/games/${e}/teams/qr.pdf`,`game-${e}.pdf`)}async function l(e){let t=await r(`api/scenarios/archive`,{method:`POST`,headers:{"Content-Type":e.type||`application/zip`},body:e}),n=await t.json().catch(()=>null);if(!t.ok)return{id:null,error:n?.message||`Ошибка сервера (${t.status})`};let i=typeof n?.error==`string`&&n.error!==``?n.error:null;return{id:typeof n?.id==`number`?n.id:null,error:i}}return{downloadScenarioArchive:s,downloadTeamQR:c,uploadScenarioArchive:l}}function i(e){if(!e)return``;let t=e.match(/filename\*=UTF-8''([^;]+)/i);if(t)try{return decodeURIComponent(t[1].trim()).replace(/[\\/:*?"<>|]/g,`_`)}catch{}let n=e.match(/filename="?([^";]+)"?/i);return(n?n[1]:``).replace(/[\\/:*?"<>|]/g,`_`)}async function a(e){let t=await e.json().catch(()=>null);return t&&typeof t.message==`string`&&t.message!==``?t.message:`Ошибка сервера (${e.status})`}export{n as t};
|
||||
import{a as e,o as t}from"./HeaderMenu-CNP1EQA-.js";function n(){let t=e();return r(t.refreshTokenAction,t.getToken)}function r(e,n){async function r(r,i){let a={},o=n();o&&(a.Authorization=`Bearer ${o}`);let s=await fetch(`${t()}/${r}`,{...i,headers:{...a,...i.headers}});if(s.status==401){await e();let o=n();o&&(a.Authorization=`Bearer ${o}`),s=await fetch(`${t()}/${r}`,{...i,headers:{...a,...i.headers}})}return s}async function o(e,t){let n=await r(e,{method:`GET`});if(!n.ok)throw Error(await a(n));return{blob:await n.blob(),filename:i(n.headers.get(`Content-Disposition`))||t}}function s(e){return o(`api/scenarios/${e}/archive`,`scenario-${e}.zip`)}function c(e){return o(`api/games/${e}/teams/qr.pdf`,`game-${e}.pdf`)}async function l(e){let t=await r(`api/scenarios/archive`,{method:`POST`,headers:{"Content-Type":e.type||`application/zip`},body:e}),n=await t.json().catch(()=>null);if(!t.ok)return{id:null,error:n?.message||`Ошибка сервера (${t.status})`};let i=typeof n?.error==`string`&&n.error!==``?n.error:null;return{id:typeof n?.id==`number`?n.id:null,error:i}}return{downloadScenarioArchive:s,downloadTeamQR:c,uploadScenarioArchive:l}}function i(e){if(!e)return``;let t=e.match(/filename\*=UTF-8''([^;]+)/i);if(t)try{return decodeURIComponent(t[1].trim()).replace(/[\\/:*?"<>|]/g,`_`)}catch{}let n=e.match(/filename="?([^";]+)"?/i);return(n?n[1]:``).replace(/[\\/:*?"<>|]/g,`_`)}async function a(e){let t=await e.json().catch(()=>null);return t&&typeof t.message==`string`&&t.message!==``?t.message:`Ошибка сервера (${e.status})`}export{n as t};
|
||||
@@ -1 +1 @@
|
||||
import{D as e,d as t}from"./light-BDe84dgP.js";import{H as n,W as r}from"./index-DzEqT7MZ.js";var i=/^(\d|\.)+$/,a=/(\d|\.)+/;function o(e,{c:t=1,offset:n=0,attachPx:r=!0}={}){if(typeof e==`number`){let r=(e+n)*t;return r===0?`0`:`${r}px`}else if(typeof e==`string`)if(i.test(e)){let i=(Number(e)+n)*t;return r?i===0?`0`:`${i}px`:`${i}`}else{let r=a.exec(e);return r?e.replace(a,String((Number(r[0])+n)*t)):e}return e}var s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/;function l(t,n){if(e(t))return!1;var i=typeof t;return i==`number`||i==`symbol`||i==`boolean`||t==null||r(t)?!0:c.test(t)||!s.test(t)||n!=null&&t in Object(n)}var u=`Expected a function`;function d(e,n){if(typeof e!=`function`||n!=null&&typeof n!=`function`)throw TypeError(u);var r=function(){var t=arguments,i=n?n.apply(this,t):t[0],a=r.cache;if(a.has(i))return a.get(i);var o=e.apply(this,t);return r.cache=a.set(i,o)||a,o};return r.cache=new(d.Cache||t),r}d.Cache=t;var f=500;function p(e){var t=d(e,function(e){return n.size===f&&n.clear(),e}),n=t.cache;return t}var m=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,g=p(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(m,function(e,n,r,i){t.push(r?i.replace(h,`$1`):n||e)}),t});function _(t,r){return e(t)?t:l(t,r)?[t]:g(n(t))}var v=1/0;function y(e){if(typeof e==`string`||r(e))return e;var t=e+``;return t==`0`&&1/e==-v?`-0`:t}function b(e,t){t=_(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[y(t[n++])];return n&&n==r?e:void 0}function x(e,t,n){var r=e==null?void 0:b(e,t);return r===void 0?n:r}export{l as a,_ as i,b as n,o,y as r,x as t};
|
||||
import{D as e,d as t}from"./light-BDe84dgP.js";import{G as n,U as r}from"./index-DsVCmMvY.js";var i=/^(\d|\.)+$/,a=/(\d|\.)+/;function o(e,{c:t=1,offset:n=0,attachPx:r=!0}={}){if(typeof e==`number`){let r=(e+n)*t;return r===0?`0`:`${r}px`}else if(typeof e==`string`)if(i.test(e)){let i=(Number(e)+n)*t;return r?i===0?`0`:`${i}px`:`${i}`}else{let r=a.exec(e);return r?e.replace(a,String((Number(r[0])+n)*t)):e}return e}var s=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,c=/^\w*$/;function l(t,r){if(e(t))return!1;var i=typeof t;return i==`number`||i==`symbol`||i==`boolean`||t==null||n(t)?!0:c.test(t)||!s.test(t)||r!=null&&t in Object(r)}var u=`Expected a function`;function d(e,n){if(typeof e!=`function`||n!=null&&typeof n!=`function`)throw TypeError(u);var r=function(){var t=arguments,i=n?n.apply(this,t):t[0],a=r.cache;if(a.has(i))return a.get(i);var o=e.apply(this,t);return r.cache=a.set(i,o)||a,o};return r.cache=new(d.Cache||t),r}d.Cache=t;var f=500;function p(e){var t=d(e,function(e){return n.size===f&&n.clear(),e}),n=t.cache;return t}var m=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,h=/\\(\\)?/g,g=p(function(e){var t=[];return e.charCodeAt(0)===46&&t.push(``),e.replace(m,function(e,n,r,i){t.push(r?i.replace(h,`$1`):n||e)}),t});function _(t,n){return e(t)?t:l(t,n)?[t]:g(r(t))}var v=1/0;function y(e){if(typeof e==`string`||n(e))return e;var t=e+``;return t==`0`&&1/e==-v?`-0`:t}function b(e,t){t=_(t,e);for(var n=0,r=t.length;e!=null&&n<r;)e=e[y(t[n++])];return n&&n==r?e:void 0}function x(e,t,n){var r=e==null?void 0:b(e,t);return r===void 0?n:r}export{l as a,_ as i,b as n,o,y as r,x as t};
|
||||
Vendored
+200
File diff suppressed because one or more lines are too long
Vendored
-200
File diff suppressed because one or more lines are too long
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{A as e,D as t,L as n,X as r,it as i,p as a,z as o}from"./vue-router-bPs2Bq2h.js";import{A as s,M as c,j as l}from"./Card-BJm6ZyX4.js";import{o as u}from"./light-WRuBODwl.js";function d(e){return typeof e==`string`?document.querySelector(e):e()||null}function f(e){return e instanceof HTMLElement}function p(e){for(let t=0;t<e.childNodes.length;t++){let n=e.childNodes[t];if(f(n)&&(h(n)||p(n)))return!0}return!1}function m(e){for(let t=e.childNodes.length-1;t>=0;t--){let n=e.childNodes[t];if(f(n)&&(h(n)||m(n)))return!0}return!1}function h(e){if(!g(e))return!1;try{e.focus({preventScroll:!0})}catch{}return document.activeElement===e}function g(e){if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute(`tabIndex`)!==null)return!0;if(e.getAttribute(`disabled`))return!1;switch(e.nodeName){case`A`:return!!e.href&&e.rel!==`ignore`;case`INPUT`:return e.type!==`hidden`&&e.type!==`file`;case`SELECT`:case`TEXTAREA`:return!0;default:return!1}}var _=[],v=t({name:`FocusTrap`,props:{disabled:Boolean,active:Boolean,autoFocus:{type:Boolean,default:!0},onEsc:Function,initialFocusTo:[String,Function],finalFocusTo:[String,Function],returnFocusOnDeactivated:{type:Boolean,default:!0}},setup(e){let t=u(),a=i(null),f=i(null),h=!1,g=!1,v=typeof document>`u`?null:document.activeElement;function y(){return _[_.length-1]===t}function b(t){var n;t.code===`Escape`&&y()&&((n=e.onEsc)==null||n.call(e,t))}o(()=>{r(()=>e.active,e=>{e?(C(),l(`keydown`,document,b)):(s(`keydown`,document,b),h&&w())},{immediate:!0})}),n(()=>{s(`keydown`,document,b),h&&w()});function x(e){if(!g&&y()){let t=S();if(t===null||t.contains(c(e)))return;T(`first`)}}function S(){let e=a.value;if(e===null)return null;let t=e;for(;t=t.nextSibling,!(t===null||t instanceof Element&&t.tagName===`DIV`););return t}function C(){var n;if(!e.disabled){if(_.push(t),e.autoFocus){let{initialFocusTo:t}=e;t===void 0?T(`first`):(n=d(t))==null||n.focus({preventScroll:!0})}h=!0,document.addEventListener(`focus`,x,!0)}}function w(){var n;if(e.disabled||(document.removeEventListener(`focus`,x,!0),_=_.filter(e=>e!==t),y()))return;let{finalFocusTo:r}=e;r===void 0?e.returnFocusOnDeactivated&&v instanceof HTMLElement&&(g=!0,v.focus({preventScroll:!0}),g=!1):(n=d(r))==null||n.focus({preventScroll:!0})}function T(t){if(y()&&e.active){let e=a.value,n=f.value;if(e!==null&&n!==null){let r=S();if(r==null||r===n){g=!0,e.focus({preventScroll:!0}),g=!1;return}g=!0;let i=t===`first`?p(r):m(r);g=!1,i||(g=!0,e.focus({preventScroll:!0}),g=!1)}}}function E(e){if(g)return;let t=S();t!==null&&(e.relatedTarget!==null&&t.contains(e.relatedTarget)?T(`last`):T(`first`))}function D(e){g||(e.relatedTarget!==null&&e.relatedTarget===a.value?T(`last`):T(`first`))}return{focusableStartRef:a,focusableEndRef:f,focusableStyle:`position: absolute; height: 0; width: 0;`,handleStartFocus:E,handleEndFocus:D}},render(){let{default:t}=this.$slots;if(t===void 0)return null;if(this.disabled)return t();let{active:n,focusableStyle:r}=this;return e(a,null,[e(`div`,{"aria-hidden":`true`,tabindex:n?`0`:`-1`,ref:`focusableStartRef`,style:r,onFocus:this.handleStartFocus}),t(),e(`div`,{"aria-hidden":`true`,style:r,ref:`focusableEndRef`,tabindex:n?`0`:`-1`,onFocus:this.handleEndFocus})])}}),y=new WeakSet;function b(e){y.add(e)}function x(e){return!y.has(e)}function S(e,t=[],n){let r={};return t.forEach(t=>{r[t]=e[t]}),Object.assign(r,n)}export{v as i,x as n,b as r,S as t};
|
||||
Vendored
+1
@@ -0,0 +1 @@
|
||||
import{T as e}from"./vue-router-bPs2Bq2h.js";import{t}from"./light-BDe84dgP.js";function n(e=8){return Math.random().toString(16).slice(2,2+e)}function r(t,...n){return typeof t==`function`?t(...n):typeof t==`string`?e(t):typeof t==`number`?e(String(t)):null}var i={railInsetHorizontalBottom:`auto 2px 4px 2px`,railInsetHorizontalTop:`4px 2px auto 2px`,railInsetVerticalRight:`2px 4px 2px auto`,railInsetVerticalLeft:`2px auto 2px 4px`,railColor:`transparent`};function a(e){let{scrollbarColor:t,scrollbarColorHover:n,scrollbarHeight:r,scrollbarWidth:a,scrollbarBorderRadius:o}=e;return Object.assign(Object.assign({},i),{height:r,width:a,borderRadius:o,color:t,colorHover:n})}var o={name:`Scrollbar`,common:t,self:a},s={paddingSmall:`12px 16px 12px`,paddingMedium:`19px 24px 20px`,paddingLarge:`23px 32px 24px`,paddingHuge:`27px 40px 28px`,titleFontSizeSmall:`16px`,titleFontSizeMedium:`18px`,titleFontSizeLarge:`18px`,titleFontSizeHuge:`18px`,closeIconSize:`18px`,closeSize:`22px`};function c(e){let{primaryColor:t,borderRadius:n,lineHeight:r,fontSize:i,cardColor:a,textColor2:o,textColor1:c,dividerColor:l,fontWeightStrong:u,closeIconColor:d,closeIconColorHover:f,closeIconColorPressed:p,closeColorHover:m,closeColorPressed:h,modalColor:g,boxShadow1:_,popoverColor:v,actionColor:y}=e;return Object.assign(Object.assign({},s),{lineHeight:r,color:a,colorModal:g,colorPopover:v,colorTarget:t,colorEmbedded:y,colorEmbeddedModal:y,colorEmbeddedPopover:y,textColor:o,titleTextColor:c,borderColor:l,actionColor:y,titleFontWeight:u,closeColorHover:m,closeColorPressed:h,closeBorderRadius:n,closeIconColor:d,closeIconColorHover:f,closeIconColorPressed:p,fontSizeSmall:i,fontSizeMedium:i,fontSizeLarge:i,fontSizeHuge:i,boxShadow:_,borderRadius:n})}var l={name:`Card`,common:t,self:c};export{r as a,a as i,c as n,n as o,o as r,l as t};
|
||||
Vendored
-1
@@ -1 +0,0 @@
|
||||
import{T as e}from"./vue-router-bPs2Bq2h.js";import{B as t,n,t as r}from"./light-BDe84dgP.js";function i(e=8){return Math.random().toString(16).slice(2,2+e)}function a(t,...n){return typeof t==`function`?t(...n):typeof t==`string`?e(t):typeof t==`number`?e(String(t)):null}var o={railInsetHorizontalBottom:`auto 2px 4px 2px`,railInsetHorizontalTop:`4px 2px auto 2px`,railInsetVerticalRight:`2px 4px 2px auto`,railInsetVerticalLeft:`2px auto 2px 4px`,railColor:`transparent`};function s(e){let{scrollbarColor:t,scrollbarColorHover:n,scrollbarHeight:r,scrollbarWidth:i,scrollbarBorderRadius:a}=e;return Object.assign(Object.assign({},o),{height:r,width:i,borderRadius:a,color:t,colorHover:n})}var c={name:`Scrollbar`,common:r,self:s},l={paddingTiny:`0 8px`,paddingSmall:`0 10px`,paddingMedium:`0 12px`,paddingLarge:`0 14px`,clearSize:`16px`};function u(e){let{textColor2:n,textColor3:r,textColorDisabled:i,primaryColor:a,primaryColorHover:o,inputColor:s,inputColorDisabled:c,borderColor:u,warningColor:d,warningColorHover:f,errorColor:p,errorColorHover:m,borderRadius:h,lineHeight:g,fontSizeTiny:_,fontSizeSmall:v,fontSizeMedium:y,fontSizeLarge:b,heightTiny:x,heightSmall:S,heightMedium:C,heightLarge:w,actionColor:T,clearColor:E,clearColorHover:D,clearColorPressed:O,placeholderColor:k,placeholderColorDisabled:A,iconColor:j,iconColorDisabled:M,iconColorHover:N,iconColorPressed:P,fontWeight:F}=e;return Object.assign(Object.assign({},l),{fontWeight:F,countTextColorDisabled:i,countTextColor:r,heightTiny:x,heightSmall:S,heightMedium:C,heightLarge:w,fontSizeTiny:_,fontSizeSmall:v,fontSizeMedium:y,fontSizeLarge:b,lineHeight:g,lineHeightTextarea:g,borderRadius:h,iconSize:`16px`,groupLabelColor:T,groupLabelTextColor:n,textColor:n,textColorDisabled:i,textDecorationColor:n,caretColor:a,placeholderColor:k,placeholderColorDisabled:A,color:s,colorDisabled:c,colorFocus:s,groupLabelBorder:`1px solid ${u}`,border:`1px solid ${u}`,borderHover:`1px solid ${o}`,borderDisabled:`1px solid ${u}`,borderFocus:`1px solid ${o}`,boxShadowFocus:`0 0 0 2px ${t(a,{alpha:.2})}`,loadingColor:a,loadingColorWarning:d,borderWarning:`1px solid ${d}`,borderHoverWarning:`1px solid ${f}`,colorFocusWarning:s,borderFocusWarning:`1px solid ${f}`,boxShadowFocusWarning:`0 0 0 2px ${t(d,{alpha:.2})}`,caretColorWarning:d,loadingColorError:p,borderError:`1px solid ${p}`,borderHoverError:`1px solid ${m}`,colorFocusError:s,borderFocusError:`1px solid ${m}`,boxShadowFocusError:`0 0 0 2px ${t(p,{alpha:.2})}`,caretColorError:p,clearColor:E,clearColorHover:D,clearColorPressed:O,iconColor:j,iconColorDisabled:M,iconColorHover:N,iconColorPressed:P,suffixTextColor:n})}var d=n({name:`Input`,common:r,peers:{Scrollbar:c},self:u}),f={paddingSmall:`12px 16px 12px`,paddingMedium:`19px 24px 20px`,paddingLarge:`23px 32px 24px`,paddingHuge:`27px 40px 28px`,titleFontSizeSmall:`16px`,titleFontSizeMedium:`18px`,titleFontSizeLarge:`18px`,titleFontSizeHuge:`18px`,closeIconSize:`18px`,closeSize:`22px`};function p(e){let{primaryColor:t,borderRadius:n,lineHeight:r,fontSize:i,cardColor:a,textColor2:o,textColor1:s,dividerColor:c,fontWeightStrong:l,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,closeColorHover:m,closeColorPressed:h,modalColor:g,boxShadow1:_,popoverColor:v,actionColor:y}=e;return Object.assign(Object.assign({},f),{lineHeight:r,color:a,colorModal:g,colorPopover:v,colorTarget:t,colorEmbedded:y,colorEmbeddedModal:y,colorEmbeddedPopover:y,textColor:o,titleTextColor:s,borderColor:c,actionColor:y,titleFontWeight:l,closeColorHover:m,closeColorPressed:h,closeBorderRadius:n,closeIconColor:u,closeIconColorHover:d,closeIconColorPressed:p,fontSizeSmall:i,fontSizeMedium:i,fontSizeLarge:i,fontSizeHuge:i,boxShadow:_,borderRadius:n})}var m={name:`Card`,common:r,self:p};export{c as a,i as c,l as i,p as n,s as o,d as r,a as s,m as t};
|
||||
@@ -1,4 +1,4 @@
|
||||
import{A as e,D as t,v as n}from"./vue-router-bPs2Bq2h.js";import{K as r,M as i,N as a,Y as o,Z as s,r as c}from"./light-BDe84dgP.js";import{t as l}from"./use-compitable-BcHeQzgm.js";import{r as u}from"./index-DzEqT7MZ.js";var d=r(`text`,`
|
||||
import{A as e,D as t,v as n}from"./vue-router-bPs2Bq2h.js";import{K as r,M as i,N as a,Y as o,Z as s,r as c}from"./light-BDe84dgP.js";import{t as l}from"./use-compitable-BcHeQzgm.js";import{r as u}from"./index-DsVCmMvY.js";var d=r(`text`,`
|
||||
transition: color .3s var(--n-bezier);
|
||||
color: var(--n-text-color);
|
||||
`,[o(`strong`,`
|
||||
@@ -1 +1 @@
|
||||
import{j as e}from"./vue-router-bPs2Bq2h.js";import{I as t}from"./light-BDe84dgP.js";import{f as n}from"./index-DzEqT7MZ.js";function r(){let r=e(n,null);return r===null&&t(`use-message`,"No outer <n-message-provider /> founded. See prerequisite in https://www.naiveui.com/en-US/os-theme/components/message for more details. If you want to use `useMessage` outside setup, please check https://www.naiveui.com/zh-CN/os-theme/components/message#Q-&-A."),r}export{r as t};
|
||||
import{j as e}from"./vue-router-bPs2Bq2h.js";import{I as t}from"./light-BDe84dgP.js";import{f as n}from"./index-DsVCmMvY.js";function r(){let r=e(n,null);return r===null&&t(`use-message`,"No outer <n-message-provider /> founded. See prerequisite in https://www.naiveui.com/en-US/os-theme/components/message for more details. If you want to use `useMessage` outside setup, please check https://www.naiveui.com/zh-CN/os-theme/components/message#Q-&-A."),r}export{r as t};
|
||||
-5
File diff suppressed because one or more lines are too long
+1
@@ -0,0 +1 @@
|
||||
import{B as e,it as t,z as n}from"./vue-router-bPs2Bq2h.js";function r(r,i=5e3){let a=t(!0),o=null,s=()=>{a.value=!0,r(),o=window.setInterval(r,i)},c=()=>{a.value=!1,o&&=(clearInterval(o),null)};return n(s),e(c),{isActive:a,start:s,stop:c}}export{r as t};
|
||||
Vendored
+131
File diff suppressed because one or more lines are too long
Vendored
-131
File diff suppressed because one or more lines are too long
Vendored
+2
-2
@@ -5,10 +5,10 @@
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Вечерний детектив</title>
|
||||
<script type="module" crossorigin src="/assets/index-DzEqT7MZ.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-DsVCmMvY.js"></script>
|
||||
<link rel="modulepreload" crossorigin href="/assets/vue-router-bPs2Bq2h.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/light-BDe84dgP.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/light-q2QEcHBK.js">
|
||||
<link rel="modulepreload" crossorigin href="/assets/light-WRuBODwl.js">
|
||||
<link rel="stylesheet" crossorigin href="/assets/index-B60POEOw.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
+177
-10
@@ -194,8 +194,8 @@ service EveningDetectiveServer {
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags: "Пользователи";
|
||||
summary: "Изменить чужой пароль (только администратор)";
|
||||
tags : "Пользователи";
|
||||
summary : "Изменить чужой пароль (только администратор)";
|
||||
description: "Пароль вводится вручную: минимум 12 символов, максимум 72 байта. Сеансы сохраняются. Ошибки: 401 — нет авторизации, 403 — нет прав, 400 — неверные данные или собственный ID, 404 — пользователь не найден, 500 — ошибка сохранения.";
|
||||
};
|
||||
}
|
||||
@@ -437,11 +437,11 @@ service EveningDetectiveServer {
|
||||
// Видео загружается через UploadFile (MP4/WebM). Пустая conclusion удаляет закрывашку.
|
||||
rpc UpdateScenarioConclusion(UpdateScenarioConclusionReq) returns (UpdateScenarioConclusionRsp) {
|
||||
option (google.api.http) = {
|
||||
put: "/api/scenarios/{id}/conclusion"
|
||||
put : "/api/scenarios/{id}/conclusion"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags: "Сценарии";
|
||||
tags : "Сценарии";
|
||||
summary: "Обновить закрывашку сценария (игрокам не передаётся)";
|
||||
};
|
||||
}
|
||||
@@ -498,6 +498,84 @@ service EveningDetectiveServer {
|
||||
};
|
||||
}
|
||||
|
||||
// Создать сессию экрана. Экран получает токен и показывает QR для привязки.
|
||||
rpc CreateScreenSession(CreateScreenSessionReq) returns (CreateScreenSessionRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/screens"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
security: {
|
||||
security_requirement: {}
|
||||
}
|
||||
tags : "Экраны";
|
||||
summary: "Создать сессию экрана";
|
||||
};
|
||||
}
|
||||
|
||||
// Получить состояние экрана по его токену. Вызывается самим экраном.
|
||||
rpc GetScreenState(GetScreenStateReq) returns (GetScreenStateRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/screens/state"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
security: {
|
||||
security_requirement: {}
|
||||
}
|
||||
tags : "Экраны";
|
||||
summary: "Получить состояние экрана";
|
||||
};
|
||||
}
|
||||
|
||||
// Привязать экран к игре. Требует авторизацию организатора, автора или администратора.
|
||||
rpc BindScreen(BindScreenReq) returns (BindScreenRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/screens/{screenId}/bind"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags : "Экраны";
|
||||
summary: "Привязать экран к игре";
|
||||
};
|
||||
}
|
||||
|
||||
// Отвязать экран от игры. Требует авторизацию организатора, автора или администратора.
|
||||
rpc UnbindScreen(UnbindScreenReq) returns (UnbindScreenRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/screens/{screenId}/unbind"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags : "Экраны";
|
||||
summary: "Отвязать экран от игры";
|
||||
};
|
||||
}
|
||||
|
||||
// Изменить общий режим показа всех экранов игры.
|
||||
rpc SetScreenMode(SetScreenModeReq) returns (SetScreenModeRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/games/{gameId}/screens/mode"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags : "Экраны";
|
||||
summary: "Изменить режим показа экранов";
|
||||
};
|
||||
}
|
||||
|
||||
// Отправить общую команду экранам игры.
|
||||
rpc SendScreenCommand(SendScreenCommandReq) returns (SendScreenCommandRsp) {
|
||||
option (google.api.http) = {
|
||||
post: "/api/games/{gameId}/screens/command"
|
||||
body: "*"
|
||||
};
|
||||
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
||||
tags : "Экраны";
|
||||
summary: "Отправить команду экранам";
|
||||
};
|
||||
}
|
||||
|
||||
rpc DownloadTeamQR(GetGameReq) returns (google.api.HttpBody) {
|
||||
option (google.api.http) = {
|
||||
get: "/api/games/{id}/teams/qr.pdf"
|
||||
@@ -841,7 +919,7 @@ message GetMeRsp {
|
||||
}
|
||||
|
||||
message ChangeUserPasswordReq {
|
||||
int32 id = 1;
|
||||
int32 id = 1;
|
||||
string new_password = 2;
|
||||
}
|
||||
|
||||
@@ -943,7 +1021,7 @@ message Story {
|
||||
}
|
||||
|
||||
message Conclusion {
|
||||
string text = 1;
|
||||
string text = 1;
|
||||
string video = 2;
|
||||
}
|
||||
|
||||
@@ -1083,7 +1161,7 @@ message DeleteScenarioPlaceRsp {
|
||||
}
|
||||
|
||||
message UpdateScenarioConclusionReq {
|
||||
int32 id = 1;
|
||||
int32 id = 1;
|
||||
Conclusion conclusion = 2;
|
||||
}
|
||||
|
||||
@@ -1168,6 +1246,95 @@ message Game {
|
||||
optional google.protobuf.Timestamp ended_at = 9;
|
||||
}
|
||||
|
||||
enum ScreenMode {
|
||||
SCREEN_MODE_UNSPECIFIED = 0;
|
||||
SCREEN_MODE_COVER = 1;
|
||||
SCREEN_MODE_INTRO = 2;
|
||||
SCREEN_MODE_INTRO_DONE = 3;
|
||||
SCREEN_MODE_CONCLUSION = 4;
|
||||
SCREEN_MODE_CONCLUSION_DONE = 5;
|
||||
SCREEN_MODE_RESULTS = 6;
|
||||
}
|
||||
|
||||
enum ScreenCommand {
|
||||
SCREEN_COMMAND_UNSPECIFIED = 0;
|
||||
SCREEN_COMMAND_PLAY = 1;
|
||||
SCREEN_COMMAND_PAUSE = 2;
|
||||
SCREEN_COMMAND_RESUME = 3;
|
||||
SCREEN_COMMAND_STOP = 4;
|
||||
SCREEN_COMMAND_REPLAY = 5;
|
||||
SCREEN_COMMAND_SEEK = 6;
|
||||
SCREEN_COMMAND_VOLUME = 7;
|
||||
}
|
||||
|
||||
message ScreenState {
|
||||
string id = 1;
|
||||
string status = 2;
|
||||
optional int32 game_id = 3;
|
||||
ScreenMode mode = 4;
|
||||
bool sound_enabled = 5;
|
||||
string error = 6;
|
||||
int64 state_version = 7;
|
||||
int64 position_ms = 8;
|
||||
}
|
||||
|
||||
message CreateScreenSessionReq {}
|
||||
|
||||
message CreateScreenSessionRsp {
|
||||
string error = 1;
|
||||
string screen_id = 2;
|
||||
string access_token = 3;
|
||||
}
|
||||
|
||||
message GetScreenStateReq {
|
||||
string screenId = 1;
|
||||
string accessToken = 2;
|
||||
}
|
||||
|
||||
message GetScreenStateRsp {
|
||||
string error = 1;
|
||||
ScreenState state = 2;
|
||||
}
|
||||
|
||||
message BindScreenReq {
|
||||
string screenId = 1;
|
||||
string accessToken = 2;
|
||||
int32 gameId = 3;
|
||||
}
|
||||
|
||||
message BindScreenRsp {
|
||||
string error = 1;
|
||||
ScreenState state = 2;
|
||||
}
|
||||
|
||||
message UnbindScreenReq {
|
||||
string screenId = 1;
|
||||
}
|
||||
|
||||
message UnbindScreenRsp {
|
||||
string error = 1;
|
||||
}
|
||||
|
||||
message SetScreenModeReq {
|
||||
int32 gameId = 1;
|
||||
ScreenMode mode = 2;
|
||||
}
|
||||
|
||||
message SetScreenModeRsp {
|
||||
string error = 1;
|
||||
}
|
||||
|
||||
message SendScreenCommandReq {
|
||||
int32 gameId = 1;
|
||||
ScreenCommand command = 2;
|
||||
int64 position_ms = 3;
|
||||
int32 volume = 4;
|
||||
}
|
||||
|
||||
message SendScreenCommandRsp {
|
||||
string error = 1;
|
||||
}
|
||||
|
||||
message Team {
|
||||
int32 id = 1;
|
||||
string name = 2;
|
||||
@@ -1330,9 +1497,9 @@ message GetTeamStoryReq {
|
||||
}
|
||||
|
||||
message GetTeamStoryRsp {
|
||||
string error = 1;
|
||||
Story story = 2;
|
||||
Game game = 3;
|
||||
string error = 1;
|
||||
Story story = 2;
|
||||
Game game = 3;
|
||||
repeated TeamAction actions = 4;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,23 @@
|
||||
/* eslint-disable camelcase */
|
||||
// @ts-nocheck
|
||||
|
||||
export type ScreenMode =
|
||||
| "SCREEN_MODE_UNSPECIFIED"
|
||||
| "SCREEN_MODE_COVER"
|
||||
| "SCREEN_MODE_INTRO"
|
||||
| "SCREEN_MODE_INTRO_DONE"
|
||||
| "SCREEN_MODE_CONCLUSION"
|
||||
| "SCREEN_MODE_CONCLUSION_DONE"
|
||||
| "SCREEN_MODE_RESULTS";
|
||||
export type ScreenCommand =
|
||||
| "SCREEN_COMMAND_UNSPECIFIED"
|
||||
| "SCREEN_COMMAND_PLAY"
|
||||
| "SCREEN_COMMAND_PAUSE"
|
||||
| "SCREEN_COMMAND_RESUME"
|
||||
| "SCREEN_COMMAND_STOP"
|
||||
| "SCREEN_COMMAND_REPLAY"
|
||||
| "SCREEN_COMMAND_SEEK"
|
||||
| "SCREEN_COMMAND_VOLUME";
|
||||
export type PingReq = {
|
||||
};
|
||||
|
||||
@@ -471,6 +488,75 @@ export type Game = {
|
||||
endedAt?: wellKnownTimestamp;
|
||||
};
|
||||
|
||||
export type ScreenState = {
|
||||
id: string | undefined;
|
||||
status: string | undefined;
|
||||
gameId?: number;
|
||||
mode: ScreenMode | undefined;
|
||||
soundEnabled: boolean | undefined;
|
||||
error: string | undefined;
|
||||
stateVersion: number | undefined;
|
||||
positionMs: number | undefined;
|
||||
};
|
||||
|
||||
export type CreateScreenSessionReq = {
|
||||
};
|
||||
|
||||
export type CreateScreenSessionRsp = {
|
||||
error: string | undefined;
|
||||
screenId: string | undefined;
|
||||
accessToken: string | undefined;
|
||||
};
|
||||
|
||||
export type GetScreenStateReq = {
|
||||
screenId: string | undefined;
|
||||
accessToken: string | undefined;
|
||||
};
|
||||
|
||||
export type GetScreenStateRsp = {
|
||||
error: string | undefined;
|
||||
state: ScreenState | undefined;
|
||||
};
|
||||
|
||||
export type BindScreenReq = {
|
||||
screenId: string | undefined;
|
||||
accessToken: string | undefined;
|
||||
gameId: number | undefined;
|
||||
};
|
||||
|
||||
export type BindScreenRsp = {
|
||||
error: string | undefined;
|
||||
state: ScreenState | undefined;
|
||||
};
|
||||
|
||||
export type UnbindScreenReq = {
|
||||
screenId: string | undefined;
|
||||
};
|
||||
|
||||
export type UnbindScreenRsp = {
|
||||
error: string | undefined;
|
||||
};
|
||||
|
||||
export type SetScreenModeReq = {
|
||||
gameId: number | undefined;
|
||||
mode: ScreenMode | undefined;
|
||||
};
|
||||
|
||||
export type SetScreenModeRsp = {
|
||||
error: string | undefined;
|
||||
};
|
||||
|
||||
export type SendScreenCommandReq = {
|
||||
gameId: number | undefined;
|
||||
command: ScreenCommand | undefined;
|
||||
positionMs: number | undefined;
|
||||
volume: number | undefined;
|
||||
};
|
||||
|
||||
export type SendScreenCommandRsp = {
|
||||
error: string | undefined;
|
||||
};
|
||||
|
||||
export type GetGameReq = {
|
||||
id: number | undefined;
|
||||
};
|
||||
@@ -740,6 +826,18 @@ export interface EveningDetectiveServer {
|
||||
AddGame(request: AddGameReq): Promise<AddGameRsp>;
|
||||
GetGames(request: GetGamesReq): Promise<GetGamesRsp>;
|
||||
GetGame(request: GetGameReq): Promise<GetGameRsp>;
|
||||
// Создать сессию экрана. Экран получает токен и показывает QR для привязки.
|
||||
CreateScreenSession(request: CreateScreenSessionReq): Promise<CreateScreenSessionRsp>;
|
||||
// Получить состояние экрана по его токену. Вызывается самим экраном.
|
||||
GetScreenState(request: GetScreenStateReq): Promise<GetScreenStateRsp>;
|
||||
// Привязать экран к игре. Требует авторизацию организатора, автора или администратора.
|
||||
BindScreen(request: BindScreenReq): Promise<BindScreenRsp>;
|
||||
// Отвязать экран от игры. Требует авторизацию организатора, автора или администратора.
|
||||
UnbindScreen(request: UnbindScreenReq): Promise<UnbindScreenRsp>;
|
||||
// Изменить общий режим показа всех экранов игры.
|
||||
SetScreenMode(request: SetScreenModeReq): Promise<SetScreenModeRsp>;
|
||||
// Отправить общую команду экранам игры.
|
||||
SendScreenCommand(request: SendScreenCommandReq): Promise<SendScreenCommandRsp>;
|
||||
DownloadTeamQR(request: GetGameReq): Promise<googleapi_HttpBody>;
|
||||
GetGameAnswers(request: GetGameAnswersReq): Promise<GetGameAnswersRsp>;
|
||||
GetGameResults(request: GetGameResultsReq): Promise<GetGameResultsRsp>;
|
||||
@@ -1569,6 +1667,120 @@ export function createEveningDetectiveServerClient(
|
||||
method: "GetGame",
|
||||
}) as Promise<GetGameRsp>;
|
||||
},
|
||||
CreateScreenSession(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
const path = `api/screens`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "CreateScreenSession",
|
||||
}) as Promise<CreateScreenSessionRsp>;
|
||||
},
|
||||
GetScreenState(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
const path = `api/screens/state`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "GetScreenState",
|
||||
}) as Promise<GetScreenStateRsp>;
|
||||
},
|
||||
BindScreen(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
if (!request.screenId) {
|
||||
throw new Error("missing required field request.screenId");
|
||||
}
|
||||
const path = `api/screens/${request.screenId}/bind`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "BindScreen",
|
||||
}) as Promise<BindScreenRsp>;
|
||||
},
|
||||
UnbindScreen(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
if (!request.screenId) {
|
||||
throw new Error("missing required field request.screenId");
|
||||
}
|
||||
const path = `api/screens/${request.screenId}/unbind`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "UnbindScreen",
|
||||
}) as Promise<UnbindScreenRsp>;
|
||||
},
|
||||
SetScreenMode(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
if (!request.gameId) {
|
||||
throw new Error("missing required field request.gameId");
|
||||
}
|
||||
const path = `api/games/${request.gameId}/screens/mode`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "SetScreenMode",
|
||||
}) as Promise<SetScreenModeRsp>;
|
||||
},
|
||||
SendScreenCommand(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
if (!request.gameId) {
|
||||
throw new Error("missing required field request.gameId");
|
||||
}
|
||||
const path = `api/games/${request.gameId}/screens/command`; // eslint-disable-line quotes
|
||||
const body = JSON.stringify(request);
|
||||
const queryParams: string[] = [];
|
||||
let uri = path;
|
||||
if (queryParams.length > 0) {
|
||||
uri += `?${queryParams.join("&")}`
|
||||
}
|
||||
return handler({
|
||||
path: uri,
|
||||
method: "POST",
|
||||
body,
|
||||
}, {
|
||||
service: "EveningDetectiveServer",
|
||||
method: "SendScreenCommand",
|
||||
}) as Promise<SendScreenCommandRsp>;
|
||||
},
|
||||
DownloadTeamQR(request) { // eslint-disable-line @typescript-eslint/no-unused-vars
|
||||
if (!request.id) {
|
||||
throw new Error("missing required field request.id");
|
||||
|
||||
@@ -0,0 +1,202 @@
|
||||
<script setup lang="ts">
|
||||
import { NButton, NCard, NQrCode, NSelect, useMessage } from 'naive-ui'
|
||||
import { computed, onMounted, onUnmounted, ref } from 'vue'
|
||||
import { useRoute } from 'vue-router'
|
||||
|
||||
import { getAuthClient } from '@/api/auth_client'
|
||||
import type { Game, ScreenState } from '@/api/generated/crabs/evening_detective_server'
|
||||
import HeaderMenu from '@/components/HeaderMenu.vue'
|
||||
|
||||
const sessionKey = 'evening-detective-screen-session'
|
||||
const client = getAuthClient()
|
||||
const message = useMessage()
|
||||
const route = useRoute()
|
||||
|
||||
const screenId = ref('')
|
||||
const accessToken = ref('')
|
||||
const state = ref<ScreenState>()
|
||||
const games = ref<Game[]>([])
|
||||
const selectedGameId = ref<number | null>(null)
|
||||
const prepared = ref(false)
|
||||
const loading = ref(true)
|
||||
const binding = ref(false)
|
||||
const bindSuccess = ref(false)
|
||||
let pollTimer: number | null = null
|
||||
|
||||
const bindingFlow = computed(() => Boolean(route.query.screenId && route.query.accessToken))
|
||||
const qrValue = computed(() => {
|
||||
if (!screenId.value || !accessToken.value) return ''
|
||||
const url = new URL('/screen', window.location.origin)
|
||||
url.searchParams.set('screenId', screenId.value)
|
||||
url.searchParams.set('accessToken', accessToken.value)
|
||||
return url.toString()
|
||||
})
|
||||
const gameOptions = computed(() =>
|
||||
games.value.map((game) => ({ label: game.name || `Игра ${game.id}`, value: game.id! })),
|
||||
)
|
||||
|
||||
function saveSession() {
|
||||
sessionStorage.setItem(sessionKey, JSON.stringify({ screenId: screenId.value, accessToken: accessToken.value }))
|
||||
}
|
||||
|
||||
function readSession() {
|
||||
try {
|
||||
const saved = JSON.parse(sessionStorage.getItem(sessionKey) || '{}') as {
|
||||
screenId?: string
|
||||
accessToken?: string
|
||||
}
|
||||
screenId.value = saved.screenId || ''
|
||||
accessToken.value = saved.accessToken || ''
|
||||
} catch {
|
||||
sessionStorage.removeItem(sessionKey)
|
||||
}
|
||||
}
|
||||
|
||||
async function createSession() {
|
||||
const res = await client.CreateScreenSession({})
|
||||
if (res.error || !res.screenId || !res.accessToken) {
|
||||
throw new Error(res.error || 'Не удалось создать сессию экрана')
|
||||
}
|
||||
screenId.value = res.screenId
|
||||
accessToken.value = res.accessToken
|
||||
saveSession()
|
||||
}
|
||||
|
||||
async function loadState() {
|
||||
if (!screenId.value || !accessToken.value) return
|
||||
try {
|
||||
const res = await client.GetScreenState({ screenId: screenId.value, accessToken: accessToken.value })
|
||||
if (res.error) throw new Error(res.error)
|
||||
state.value = res.state
|
||||
} catch (err) {
|
||||
message.error(err instanceof Error ? err.message : 'Не удалось получить состояние экрана')
|
||||
}
|
||||
}
|
||||
|
||||
async function loadGames() {
|
||||
try {
|
||||
const res = await client.GetGames({})
|
||||
if (res.error) throw new Error(res.error)
|
||||
games.value = res.games || []
|
||||
} catch (err) {
|
||||
message.error(err instanceof Error ? err.message : 'Не удалось загрузить игры')
|
||||
}
|
||||
}
|
||||
|
||||
async function bind() {
|
||||
if (!selectedGameId.value || !route.query.screenId || !route.query.accessToken) return
|
||||
binding.value = true
|
||||
try {
|
||||
const res = await client.BindScreen({
|
||||
screenId: String(route.query.screenId),
|
||||
accessToken: String(route.query.accessToken),
|
||||
gameId: selectedGameId.value,
|
||||
})
|
||||
if (res.error) throw new Error(res.error)
|
||||
bindSuccess.value = true
|
||||
} catch (err) {
|
||||
message.error(err instanceof Error ? err.message : 'Не удалось привязать экран')
|
||||
} finally {
|
||||
binding.value = false
|
||||
}
|
||||
}
|
||||
|
||||
async function prepareScreen() {
|
||||
try {
|
||||
await document.documentElement.requestFullscreen?.()
|
||||
} catch {
|
||||
message.warning('Полноэкранный режим недоступен в этом браузере')
|
||||
}
|
||||
prepared.value = true
|
||||
}
|
||||
|
||||
onMounted(async () => {
|
||||
if (bindingFlow.value) {
|
||||
await loadGames()
|
||||
loading.value = false
|
||||
return
|
||||
}
|
||||
readSession()
|
||||
try {
|
||||
if (!screenId.value || !accessToken.value) await createSession()
|
||||
await loadState()
|
||||
pollTimer = window.setInterval(loadState, 1000)
|
||||
} catch (err) {
|
||||
message.error(err instanceof Error ? err.message : 'Не удалось подготовить экран')
|
||||
} finally {
|
||||
loading.value = false
|
||||
}
|
||||
})
|
||||
|
||||
onUnmounted(() => {
|
||||
if (pollTimer != null) window.clearInterval(pollTimer)
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div v-if="bindingFlow" class="screen-center">
|
||||
<n-card class="binding-card" title="Привязка экрана">
|
||||
<template v-if="bindSuccess">
|
||||
<p>Экран привязан к игре.</p>
|
||||
<p>Можно закрыть эту страницу.</p>
|
||||
</template>
|
||||
<template v-else>
|
||||
<p>Выберите игру, к которой привязать экран.</p>
|
||||
<n-select v-model:value="selectedGameId" :options="gameOptions" placeholder="Игра" />
|
||||
<n-button type="primary" :loading="binding" :disabled="selectedGameId == null" @click="bind">
|
||||
Привязать
|
||||
</n-button>
|
||||
</template>
|
||||
</n-card>
|
||||
</div>
|
||||
|
||||
<div v-else class="screen-page">
|
||||
<div v-if="loading" class="screen-center">Подготовка экрана…</div>
|
||||
<template v-else>
|
||||
<div v-if="!state?.gameId" class="screen-center">
|
||||
<n-card class="qr-card" title="Подключение экрана">
|
||||
<n-qr-code v-if="qrValue" :value="qrValue" :size="260" />
|
||||
<p>Отсканируйте QR телефоном организатора и выберите игру.</p>
|
||||
<n-button v-if="!prepared" type="primary" @click="prepareScreen">Подготовить экран</n-button>
|
||||
</n-card>
|
||||
</div>
|
||||
<div v-else class="screen-center">
|
||||
<n-card class="ready-card">
|
||||
<p class="ready-title">Экран подключён</p>
|
||||
<p>Игра №{{ state.gameId }}</p>
|
||||
<n-button v-if="!prepared" type="primary" @click="prepareScreen">Подготовить экран</n-button>
|
||||
</n-card>
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
|
||||
<HeaderMenu v-if="bindingFlow" active="games" />
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.binding-card,
|
||||
.qr-card,
|
||||
.ready-card {
|
||||
max-width: min(94vw, 520px);
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.ready-title {
|
||||
font-size: 28px;
|
||||
}
|
||||
|
||||
.screen-center {
|
||||
align-items: center;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
min-height: 100dvh;
|
||||
padding: 20px;
|
||||
}
|
||||
|
||||
.screen-page {
|
||||
background: #111;
|
||||
color: #eee;
|
||||
min-height: 100dvh;
|
||||
}
|
||||
</style>
|
||||
@@ -38,6 +38,11 @@ const router = createRouter({
|
||||
name: 'games',
|
||||
component: () => import('../views/GamesView.vue'),
|
||||
},
|
||||
{
|
||||
path: '/screen',
|
||||
name: 'screen',
|
||||
component: () => import('../views/ScreenView.vue'),
|
||||
},
|
||||
{
|
||||
path: '/games/:id/results',
|
||||
name: 'game-results',
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
<script setup lang="ts">
|
||||
import ScreenPage from '@/components/ScreenPage.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<ScreenPage />
|
||||
</template>
|
||||
Reference in New Issue
Block a user