PageSourceSearch

https://snich.ai/assets/ModeratorView-aea3603a.js

js snich.ai collected 2026-10-05 15:08:14 UTC 82,600 bytes, 24 lines download raw bytes

1import{r as x,j as s,R as Ks,a as be}from"./vendor-react-72e4a099.js";import{d as F,B as L,a as Se,u as q,E as is,f as js,S as Xs,T as $e,e as os,M as rs}from"./Toast-43ee7788.js";import{d as z,B as Ns,e as vs}from"./StudioRealtime-3ad3f1c0.js";import{u as Ce}from"./programAspect-1b4b5a03.js";import{S as Ps,b as G,T as D,L as Ae,A as Me}from"./Display-48adcc24.js";import{u as Q,q as cs,a as H,c as ns}from"./format-5039f022.js";import{C as Ys}from"./chevron-left-39dc0897.js";import{D as Ie}from"./download-3e69fd6b.js";import{S as Js}from"./search-01fb0df0.js";import{R as Re}from"./refresh-cw-98362cea.js";import{E as $s}from"./ellipsis-bbf71637.js";import{S as Zs}from"./sliders-horizontal-41aa44a5.js";import{L as Cs}from"./lock-73755c1f.js";import{M as se}from"./message-square-off-bea6f74e.js";import{P as ee}from"./pin-70ee9bd9.js";import{P as ne}from"./pin-off-03798f51.js";import{A as Le}from"./arrow-down-5480e148.js";import{T as As}from"./trash-2-7a739e24.js";import{X as Y}from"./x-b9f3d093.js";import{S as te}from"./send-ef7332d3.js";import{c as ms}from"./createLucideIcon-581cd729.js";import{C as Te}from"./clapperboard-fdb77651.js";import{G as Oe,H as De}from"./ProgramGraphicsLayer-e1e0e604.js";import{L as ie}from"./log-out-e38723a8.js";import{E as ds}from"./eye-5711d0dd.js";import{C as Ms}from"./clock-e6794ea5.js";import{M as gs}from"./mic-off-05523af3.js";import{M as ws}from"./mic-098d6d5b.js";import{V as ys}from"./video-off-a445220e.js";import{V as ae}from"./video-a08888e9.js";import{C as le}from"./chevron-down-888c3b30.js";import{C as oe}from"./chevron-right-b4336544.js";import{C as J}from"./check-083433f7.js";import{C as Is}from"./corner-down-left-87f64a70.js";import{C as Fe}from"./Controls-5a18fd37.js";import{M as Rs}from"./message-square-87bea34a.js";import{R as ze}from"./reply-796fd39d.js";import{V as Ee}from"./volume-x-8aea9e1c.js";import{V as Pe}from"./volume-2-a1e941cc.js";import{A as qe}from"./arrow-right-eda8f931.js";import{S as _e}from"./shield-check-111738a3.js";import{A as Be}from"./arrow-up-955249b3.js";import{P as Ue}from"./plus-39793e81.js";import{R as re}from"./rotate-ccw-738260f2.js";import{G as He}from"./grip-vertical-b48ba28a.js";import{C as Ve}from"./circle-check-63b159d4.js";import{h as ua,g as ha}from"./Studio-12de6b79.js";import{U as We}from"./users-a990a1e8.js";import{M as Ge}from"./messages-square-bb2c8af1.js";import"./circle-alert-67975319.js";import"./buildLifecycle-a44b0e05.js";import"./index-d9998155.js";import"./guestAccess-28c96151.js";import"./globe-e09c7f1b.js";import"./mouse-pointer-2-a64daac3.js";import"./external-link-63c5a0ce.js";import"./film-0ba9e353.js";import"./sparkles-e0558c3e.js";import"./pause-2cb080c5.js";import"./play-3580deb4.js";import"./ellipsis-vertical-09d18e39.js";import"./slotWidgets-57ef49ea.js";import"./crown-fdf36aa5.js";import"./user-2d8f405f.js";import"./chromaKey-9ef66bf0.js";import"./deviceDetection-9fe14a8f.js";import"./roomAccess-6d61bdfc.js";import"./audioQuality-b8c9f17c.js";import"./snichDenoiseRuntime-273d9ce6.js";import"./copy-34f4069e.js";import"./Lobby-cd4ae718.js";import"./BackgroundModal-371a8f77.js";import"./mediaPrefs-a1582108.js";/* empty css              */import"./image-aefc8036.js";import"./upload-34ad8b6a.js";import"./chevron-up-f536cc4c.js";import"./square-abcd1e2a.js";import"./smartphone-d9ded3c9.js";import"./headphones-a3105568.js";import"./EntryChrome-3815c94b.js";import"./radio-dc3b7f8c.js";import"./layout-grid-63073c93.js";import"./user-plus-d862ebc6.js";import"./minimize-2-7f4bb98d.js";import"./file-text-e7c68864.js";import"./file-play-96922e92.js";import"./pen-line-729408c9.js";import"./logo-snich-dialogue-bd9a9926.js";import"./LayoutEditorModal-5c2cbcf2.js";import"./pencil-c32e7d9a.js";import"./monitor-ac1ab9e6.js";import"./maximize-edcb58d4.js";import"./circle-119050f3.js";import"./share-2-50cd044b.js";import"./loader-circle-f10bdd75.js";import"./layers-e08031b9.js";import"./type-c9e8ec6d.js";import"./timer-dd0230bd.js";import"./plug-1e9df63e.js";import"./triangle-alert-cdc85d96.js";import"./thumbs-up-f55ea202.js";import"./paperclip-3819f2af.js";import"./music-0f60f4f1.js";import"./sticky-note-012253c0.js";import"./mediaSettingsStore-1783edcc.js";import"./camera-8e9c5806.js";import"./captions-4aebb0bb.js";import"./MicCheckModal-3c0b1b56.js";import"./micDiagnostics-fa65b80f.js";import"./user-minus-edd1ae61.js";import"./repeat-a9c26444.js";import"./languages-9836601a.js";import"./zap-a08e50de.js";import"./shield-b21f8aed.js";import"./WaitingRoom-fe3d8748.js";import"./EventPreview-a5c61118.js";import"./eventDuration-e09aabf0.js";import"./circle-x-d5c7be80.js";import"./mail-c07c6c62.js";import"./calendar-days-6829c81b.js";import"./EndedScreen-b2678b64.js";import"./publicApi-16230aa9.js";import"./api-d8a57490.js";import"./star-f57b9032.js";import"./list-13d531b4.js";import"./arrow-left-6a250fbc.js";/**
2 * @license lucide-react v0.554.0 - ISC
3 *
4 * This source code is licensed under the ISC license.
5 * See the LICENSE file in the root directory of this source tree.
6 */const Qe=[["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M5 5a1 1 0 0 0-1 1v7c0 5 3.5 7.5 7.67 8.94a1 1 0 0 0 .67.01c2.35-.82 4.48-1.97 5.9-3.71",key:"1jlk70"}],["path",{d:"M9.309 3.652A12.252 12.252 0 0 0 11.24 2.28a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1v7a9.784 9.784 0 0 1-.08 1.264",key:"18rp1v"}]],Ke=ms("shield-off",Qe);/**
7 * @license lucide-react v0.554.0 - ISC
8 *
9 * This source code is licensed under the ISC license.
10 * See the LICENSE file in the root directory of this source tree.
11 */const Xe=[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m16 19 2 2 4-4",key:"1b14m6"}]],ce=ms("user-round-check",Xe);/**
12 * @license lucide-react v0.554.0 - ISC
13 *
14 * This source code is licensed under the ISC license.
15 * See the LICENSE file in the root directory of this source tree.
16 */const Ye=[["path",{d:"M2 21a8 8 0 0 1 13.292-6",key:"bjp14o"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"M22 19h-6",key:"vcuq98"}]],Je=ms("user-round-minus",Ye);
16/**
17 * @license lucide-react v0.554.0 - ISC
18 *
19 * This source code is licensed under the ISC license.
20 * See the LICENSE file in the root directory of this source tree.
21 */const Ze=[["path",{d:"M2 21a8 8 0 0 1 11.873-7",key:"74fkxq"}],["circle",{cx:"10",cy:"8",r:"5",key:"o932ke"}],["path",{d:"m17 17 5 5",key:"p7ous7"}],["path",{d:"m22 17-5 5",key:"gqnmv0"}]],sn=ms("user-round-x",Ze),qs=new Set(["owner","streamer","host","co_host","speaker","admin"]);function us(e){return String((e==null?void 0:e.role)||"").toLowerCase()}function ks(e){return e.type==="user"&&!e.isAI}function de(e){return qs.has(us(e))?!0:(e.meetingRoles||[]).some(n=>qs.has(String(n)))}function en(e,n){return n.peerId||e.stageIdOf(n)||n.id}function _s(e,n){return n&&e.participants.find(t=>t.peerId===n||t.id===n||e.stageIdOf(t)===n)||null}const nn={streamer:{label:"продюсер",tone:"blue"},owner:{label:"организатор",tone:"blue"},admin:{label:"организатор",tone:"blue"},host:{label:"ведущий",tone:"amber"},co_host:{label:"модератор",tone:"green"},speaker:{label:"спикер",tone:"gray"},guest:{label:"гость",tone:"gray"},brand:{label:"организатор",tone:"blue"}};function me(e){return e&&nn[String(e).toLowerCase()]||null}function Z(e){if(!e)return null;const n=[us(e),...(e.meetingRoles||[]).map(String)];for(const t of["streamer","owner","admin","host","co_host","speaker","guest"])if(n.includes(t))return t;return null}function W(e){return String(e||"").trim().split(/\s+/)[0]||""}function ts(e){const n=e.createdAt instanceof Date?e.createdAt.getTime():Date.parse(String(e.createdAt));return Number.isFinite(n)?n:0}const hs=/^[А-ЯЁа-яё-]+$/;function tn(e){const n=e.toLowerCase();return["никита","илья","фома","кузьма","лука","савва","данила","гаврила","миша","саша","женя","паша","дима","витя","ваня","петя","коля","толя","костя","лёша","леша","гоша","сеня","федя","стёпа","степа","вова","слава","валера","гена","жора","рома","миля"].includes(n)?!1:/[ая]$/.test(n)}function _(e){const n=W(e);return!n||!hs.test(n)?null:tn(n)||["любовь","нинель","рахиль","юдифь"].includes(n.toLowerCase())?"f":/[бвгджзклмнпрстфхцчшщйь]$/i.test(n)?"m":null}function ue(e,n){return e[0]===e[0].toUpperCase()?n[0].toUpperCase()+n.slice(1):n}function an(e,n,t){if(!hs.test(e))return e;const i=e.toLowerCase();let l=i;if(/(ская|цкая)$/.test(i))l=i.replace(/ая$/,"ую");else if(/ая$/.test(i))l=i.replace(/ая$/,"ую");else if(/(ий|ый|ой)$/.test(i)&&!t)l=i.replace(/(ий|ый|ой)$/,"ого");else if(/[^и]а$/.test(i))l=i.replace(/а$/,"у");else if(/ия$/.test(i))l=i.replace(/я$/,"ю");else if(/я$/.test(i))l=i.replace(/я$/,"ю");else{if(n)return e;if(i==="павел")l="павла";else if(i==="лев")l="льва";else if(i==="пётр"||i==="петр")l="петра";else if(/[ий]й$/.test(i)||/й$/.test(i))l=i.replace(/й$/,"я");else if(/ь$/.test(i))l=i.replace(/ь$/,"я");else if(/[бвгджзклмнпрстфхцчшщ]$/.test(i))l=`${i}а`;else return e}return ue(e,l)}function he(e){const n=String(e||"").trim().split(/\s+/).filter(Boolean);if(!n.length||!n.every(i=>hs.test(i)))return e;const t=_(e)==="f";return _(e)===null?e:n.map((i,l)=>an(i,t,l===0)).join(" ")}function xe(e){const n=W(e);if(!n||!hs.test(n))return null;const t=n.toLowerCase();let i=null;return/ия$/.test(t)?i=t.replace(/я$/,"и"):/[ая]$/.test(t)?i=t.replace(/[ая]$/,"е"):t==="павел"?i="павлу":t==="лев"?i="льву":/й$/.test(t)?i=t.replace(/й$/,"ю"):/ь$/.test(t)?i=_(e)==="m"?t.replace(/ь$/,"ю"):null:/[бвгджзклмнпрстфхцчшщ]$/.test(t)&&(i=`${t}у`),i?ue(n,i):null}const ln=/@([A-Za-zА-Яа-яЁё][A-Za-zА-Яа-яЁё-]*)/g;function fe(e,n){const t=[];let i=0;const l=n.toLowerCase();for(const o of e.matchAll(ln)){const u=o.index??0;u>i&&t.push({text:e.slice(i,u)});const r=o[1],a=r.toLowerCase();t.push({text:o[0],mention:{name:r,me:a==="все"||a==="всем"||!!l&&a===l}}),i=u+o[0].length}return i<e.length&&t.push({text:e.slice(i)}),t}function on(e,n){return fe(e,n).some(t=>{var i;return(i=t.mention)==null?void 0:i.me})}function B(e,n,t,i){const l=e%10,o=e%100;return l===1&&o!==11?n:l>=2&&l<=4&&(o<10||o>=20)?t:i}function ss(e){const n=Math.max(0,Math.floor(e/1e3));if(n<60)return`${n} с`;const t=Math.floor(n/60);if(t<60)return`${t} мин`;const i=Math.floor(t/60),l=t%60;return l?`${i} ч ${l} мин`:`${i} ч`}function rn(e,n){const t=r=>/[",;\n\r]/.test(r)?`"${r.replace(/"/g,'""')}"`:r,i=n.map(r=>r.map(a=>t(String(a??""))).join(";")).join(`\r
22`),l=new Blob([`\uFEFF${i}`],{type:"text/csv;charset=utf-8"}),o=URL.createObjectURL(l),u=document.createElement("a");u.href=o,u.download=e,document.body.appendChild(u),u.click(),u.remove(),window.setTimeout(()=>URL.revokeObjectURL(o),2e3)}function cn(e){return{peerId:e.online?e.peerId:null,name:e.name,key:e.key}}function Bs(e){const n=[];return e.headline&&n.push(e.headline),e.email&&n.push(e.email),n.length||n.push(e.isRegistered?"Зарегистрирован(а)":"Гость"),n.join(" · ")}function dn({list:e,roomTitle:n,initialQuery:t,filter:i,onFilter:l,onBack:o,onMenu:u}){const{audience:r,chat:a}=z(),d=Q(15e3),[p,N]=x.useState(t),y=p.trim().toLowerCase(),m=x.useMemo(()=>new Set(a.blocked.filter(c=>c.kind==="block").map(c=>c.identityKey)),[a.blocked]),g=x.useMemo(()=>e.members.map(c=>c.block&&a.ready&&!m.has(c.key)?{...c,block:null}:c),[e.members,m,a.ready]),f=g.filter(c=>c.online),j={all:r.ready?r.viewers:f.length,asked:g.filter(c=>c.questions>0).length,hand:g.filter(c=>!!c.hand).length,blocked:Math.max(g.filter(c=>!!c.block).length,m.size)},k=g.filter(c=>i==="asked"&&!c.questions||i==="hand"&&!c.hand||i==="blocked"&&!c.block||i==="all"&&!c.online?!1:y?[c.name,c.headline,c.email].some(b=>String(b||"").toLowerCase().includes(y)):!0),C=()=>{const c=[["Имя","Email","Должность / компания","Статус","В эфире с","Вопросов","Голосов у лучшего вопроса","Сообщений","Рука","Ограничения"]];for(const A of g)c.push([A.name,A.email||"",A.headline||"",A.isRegistered?"зарегистрирован":"гость",A.online&&A.joinedAt?new Date(A.joinedAt).toLocaleStr
22ing("ru-RU"):"вышел",String(A.questions),String(A.topVotes),String(A.messages),A.hand?A.hand.topic||"да":"",A.block?"заблокирован":A.mute?"чат выключен":""]);const b=new Date().toISOString().slice(0,10),M=n.replace(/[\\/:*?"<>|]+/g," ").trim().slice(0,60)||"эфир";rn(`Зрители — ${M} — ${b}.csv`,c)},T=[{value:"all",label:"Все"},{value:"asked",label:"Задали вопрос"},{value:"hand",label:"Подняли руку"},{value:"blocked",label:"Заблокированы"}];return s.jsxs("aside",{className:"sn-mod-people sn-mod-audience","aria-label":"Все зрители",children:[s.jsxs("div",{className:"sn-mod-col-head",children:[s.jsx(F,{label:"Назад к людям",size:"xs",variant:"plain",onClick:o,style:{color:"var(--sn-ink-2)",marginLeft:-6},children:s.jsx(Ys,{className:"sn-i"})}),s.jsx("h2",{children:"Зрители"}),s.jsx("span",{className:"sn-mod-num sn-mod-sec-count",children:cs(j.all)}),s.jsx("div",{className:"sn-st-grow"}),e.loading&&s.jsx(Ps,{size:14}),s.jsx(L,{size:"xs",variant:"text",icon:s.jsx(Ie,{className:"sn-i sn-i-16"}),onClick:C,disabled:!g.length,title:"Скачать список зрителей (CSV)",children:"Список"})]}),s.jsxs("div",{className:"sn-mod-people-scroll",children:[s.jsxs("label",{className:"sn-input-wrap sn-mod-search",children:[s.jsx(Js,{className:"sn-i sn-i-16 sn-input-icon"}),s.jsx("input",{className:"sn-input sn-input-sm has-icon",placeholder:"Имя, email или должность","aria-label":"Поиск по зрителям",value:p,onChange:c=>N(c.target.value),onKeyDown:c=>{c.key==="Escape"&&N("")}})]}),s.jsx("div",{className:"sn-mod-filters",role:"group","aria-label":"Фильтр зрителей",children:T.map(c=>s.jsxs("button",{type:"button",className:"sn-mod-filter","aria-pressed":i===c.value,onClick:()=>l(c.value),children:[c.label,s.jsx("span",{className:"sn-mod-num",children:cs(j[c.value])})]},c.value))}),e.ready?k.length?s.jsx("ul",{className:"sn-mod-alist",children:k.map(c=>s.jsxs("li",{className:`sn-mod-arow${c.online?"":" is-offline"}`,children:[s.jsx(G,{name:c.name,size:36}),s.jsxs("div",{className:"sn-mod-prow-text",children:[s.jsx("b",{className:"sn-ellipsis",children:c.name}),s.jsx("span",{className:"sn-ellipsis",title:Bs(c),children:Bs(c)})]}),s.jsxs("span",{className:"sn-mod-atags",children:[c.block&&s.jsx(D,{tone:"red",children:"заблокирован"}),!c.block&&c.mute&&s.jsxs(D,{tone:"amber",title:"Чат выключен",children:["без чата",c.mute.until?` · ${ss(Math.max(0,Date.parse(c.mute.until)-d))}`:""]}),c.isStageGuest&&s.jsx(D,{tone:"green",children:"за кулисами"}),!c.block&&c.heldLinks>0&&s.jsx(D,{tone:"red",children:"ссылка скрыта"}),c.hand&&s.jsx(D,{tone:"amber",title:c.hand.topic||void 0,children:"рука"}),c.questions>0&&s.jsxs(D,{tone:"blue",children:["вопрос ▲ ",c.topVotes]}),!c.online&&!c.block&&s.jsx(D,{tone:"gray",children:"вышел"})]}),s.jsx(F,{label:`Действия: ${c.name}`,size:"xs",variant:"plain","aria-haspopup":"menu",onClick:b=>u(c,b.currentTarget),style:{color:"var(--sn-ink-3)"},children:s.jsx($s,{className:"sn-i sn-i-16"})})]},c.key))}):s.jsxs("div",{className:"sn-mod-empty is-compact",children:[s.jsx("b",{children:y?"Никого не нашли":i==="blocked"?"Никто не заблокирован":i==="hand"?"Никто не поднял руку":i==="asked"?"Вопросов пока не было":"Зрителей пока нет"}),y&&s.jsx("span",{children:"Проверьте написание или сбросьте фильтр."})]}):e.error?s.jsxs("div",{className:"sn-mod-empty is-compact",children:[s.jsx("b",{children:"Список не загрузился"}),s.jsx("span",{children:e.error}),s.jsx(L,{size:"sm",variant:"quiet",icon:s.jsx(Re,{className:"sn-i sn-i-16"}),onClick:()=>void e.refresh(),children:"Повторить"})]}):s.jsxs("div",{className:"sn-mod-empty is-compact",children:[s.jsx(Ps,{}),s.jsx("span",{children:"Загружаем зрителей…"})]})]}),s.jsxs("div",{className:"sn-mod-afoot",children:[s.jsx(Se,{className:"sn-i sn-i-14"}),"Сначала — кто задал вопрос или поднял руку"]})]})}const mn={userId:null,senderIsTeam:!1,senderRole:null,heldReason:null,isFiltered:!1,replyTo:null,isPinned:!1},un=80;function hn({api:e,tab:n,onTab:t,modActions:i,privateTo:l,onClearPrivate:o,onPerson:u,onOpenSettings:r,onTeamUnread:a,composerRef:d}){const{chat:p}
22=z(),N=q(),y=W(e.me.name),m=e.me.peerId,g=x.useMemo(()=>e.chat.filter(w=>w.visibility==="public"?!0:w.visibility==="private"?w.isMine||w.recipientPeerId===m:!1),[e.chat,m]),f=x.useMemo(()=>e.chat.filter(w=>w.visibility==="speakers_only"),[e.chat]),[j,k]=x.useState(()=>Date.now()),[C,T]=x.useState(null),c=f.length?ts(f[f.length-1]):0;x.useEffect(()=>{n==="team"&&k(w=>Math.max(w,c,Date.now()))},[n,c]);const b=x.useRef(n);x.useEffect(()=>{b.current!==n&&(T(n==="team"?j:null),b.current=n)},[n,j]);const M=n==="team"?0:f.filter(w=>!w.isMine&&ts(w)>j).length;x.useEffect(()=>{a==null||a(M)},[M,a]);const A=x.useRef(null);x.useEffect(()=>{if(!A.current){A.current=new Set(f.map(w=>w.id));return}for(const w of f)A.current.has(w.id)||(A.current.add(w.id),!(w.isMine||n==="team")&&on(w.text,y)&&N.show(`${w.senderName} упомянул(а) вас в чате команды`,{action:{label:"Открыть",onClick:()=>t("team")},duration:8e3}))},[f,n,y,N,t]);const h=n==="team"?f:g,I=x.useRef(null),R=x.useRef(!0),[S,O]=x.useState(!1),P=h.length?h[h.length-1].id:"";x.useLayoutEffect(()=>{const w=I.current;w&&(R.current?(w.scrollTop=w.scrollHeight,O(!1)):O(!0))},[P,n]),x.useLayoutEffect(()=>{R.current=!0;const w=I.current;w&&(w.scrollTop=w.scrollHeight)},[n]);const V=n==="viewers"?p.pinnedMessage:null;return s.jsxs("aside",{className:"sn-mod-chat","aria-label":"Чат",children:[s.jsxs("div",{className:"sn-mod-chat-head",children:[s.jsx("h2",{children:"Чат"}),s.jsx("div",{className:"sn-st-grow"}),p.settings.slowModeSec>0&&s.jsxs(D,{tone:"gray",title:"Медленный режим",children:[p.settings.slowModeSec," с"]}),s.jsx(F,{label:"Настройки чата",size:"sm",onClick:r,style:{color:"var(--sn-ink-2)"},children:s.jsx(Zs,{className:"sn-i"})})]}),s.jsxs("nav",{className:"sn-seg sn-mod-chat-tabs","aria-label":"Чат",children:[s.jsx("button",{type:"button","aria-pressed":n==="viewers",onClick:()=>t("viewers"),children:"Зрители"}),s.jsxs("button",{type:"button","aria-pressed":n==="team",onClick:()=>t("team"),children:["Команда",M>0&&s.jsx("span",{className:"sn-mod-unread","aria-label":`${M} новых`,children:M})]})]}),n==="team"?s.jsxs("div",{className:"sn-mod-chat-note",children:[s.jsx(Cs,{className:"sn-i sn-i-16"}),"Зрители не видят этот чат"]}):p.settings.mode==="off"?s.jsxs("div",{className:"sn-mod-chat-note is-warn",children:[s.jsx(se,{className:"sn-i sn-i-16"}),s.jsx("span",{style:{flexGrow:1},children:"Чат выключен — зрители не могут писать"}),s.jsx("button",{type:"button",className:"sn-mod-linkbtn",onClick:r,children:"Настроить"})]}):null,V&&s.jsxs("div",{className:"sn-mod-pinned",children:[s.jsx(ee,{className:"sn-i sn-i-16",style:{color:"var(--sn-blue)",flex:"none",marginTop:1}}),s.jsxs("div",{style:{minWidth:0,flexGrow:1},children:[s.jsxs("span",{className:"sn-mod-pinned-by",children:["Закреплено · ",V.senderName]}),s.jsx("span",{className:"sn-mod-pinned-text",children:V.text})]}),s.jsx(F,{label:"Открепить",size:"xs",variant:"plain",className:"sn-mod-pinned-x",onClick:async()=>{const w=await p.unpin();w.ok||N.error(w.error||"Не удалось открепить")},children:s.jsx(ne,{className:"sn-i sn-i-16"})})]}),s.jsxs("div",{className:"sn-mod-chat-list",ref:I,onScroll:w=>{const U=w.currentTarget;R.current=U.scrollHeight-U.scrollTop-U.clientHeight<un,R.current&&S&&O(!1)},role:"log","aria-live":"polite",children:[s.jsx("div",{className:"sn-mod-chat-spacer"}),!h.length&&s.jsxs("div",{className:"sn-mod-empty is-compact",children:[s.jsx("b",{children:n==="team"?"В чате команды пока тихо":"Сообщений пока нет"}),s.jsx("span",{children:n==="team"?"Здесь продюсер, ведущие и модераторы договариваются по ходу эфира.":"Когда зрители начнут писать, сообщения появятся здесь."})]}),h.map(w=>{const U=e.chatMeta[w.id]||mn,K=n==="team"&&C!==null&&!w.isMine&&ts(w)>C&&xn(f,C)===w.id;return s.jsxs(Ks.Fragment,{children:[K&&s.jsx("div",{className:"sn-mod-newdiv",role:"separator",children:s.jsxs("span",{children:[Us(f,C)," ",B(Us(f,C),"новое","новых","новых")]})}),s.jsx(fn,{api:e,message:w,meta:U,tab:n,myFirst:y,modActions:i,onPerson:u})]},w.id)})]}),S&&s.jsxs("button",{type:"button",className:"sn-mod-jump",onClick:()=>{const w=I.current;w&&w.scrollTo({top:w.scrollHeight,behavior:"smooth"}),R.current=!0,O(!1)},children:[s.jsx(Le,{className:"sn-i sn-i-14"}),"Новые сообщения"]}),s.jsx(pn,{api:e,tab:n,privateTo:n==="viewers"?l:null,onClearPrivate:o,inputRef:d})]})}function xn(e,n){var t;return((t=e.find(i=>!i.isMine&&ts(i)>n))==null?void 0:t.id)??null}function Us(e,n){return e.filter(t=>!t.isMine&&ts(t)>n).length}function fn({api:e,message:n,meta:t,tab:i,myFirst:l,modActions:o,onPerson:u}){var R;const{chat:r}=z(),a=q(),[d,p]=x.useState(!1),[N,y]=x.useState(!1),[m,g]=x.use
22State(!1);x.useEffect(()=>{if(!N)return;const S=window.setTimeout(()=>y(!1),4e3);return()=>window.clearTimeout(S)},[N]);const f=_s(e,n.peerId),j=t.senderIsTeam||!!f&&de(f),k=t.senderRole||(f?Z(f):null),C=n.isMine&&i==="team"?{label:"вы",tone:"green"}:j?me(k):null,T=H(n.createdAt instanceof Date?n.createdAt.toISOString():n.createdAt),c=i==="viewers"&&!j&&!n.isMine,b=n.visibility==="public",M=n.visibility==="private"?n.isMine?`лично · ${((R=_s(e,n.recipientPeerId))==null?void 0:R.name)||"зрителю"}`:"лично вам":null,A={peerId:n.peerId,name:n.senderName,avatarUrl:n.senderAvatar||(f==null?void 0:f.avatarUrl)||null,messageId:n.id,isTeam:j},h=async(S,O)=>{if(!m){g(!0);try{const P=await S();P.ok?O&&a.success(O):a.error(P.error||"Не удалось выполнить действие")}finally{g(!1)}}};if(t.heldReason&&!d)return s.jsxs("div",{className:"sn-mod-held",children:[s.jsx(is,{className:"sn-i sn-i-16"}),s.jsxs("span",{className:"sn-ellipsis",style:{flexGrow:1},children:[t.heldReason==="link"?"Скрыто автоматически: ссылка":"Скрыто модератором",s.jsxs("span",{className:"sn-mod-held-who",children:[" · ",n.senderName]})]}),s.jsx("button",{type:"button",className:"sn-mod-linkbtn is-ink",onClick:()=>p(!0),children:"Показать"})]});const I=fe(n.text,l);return s.jsxs("div",{className:`sn-mod-msg${t.heldReason?" is-held":""}${r.pinnedMessageId===n.id?" is-pinned":""}`,tabIndex:i==="viewers"&&!t.heldReason?-1:void 0,children:[s.jsx(G,{name:n.senderName,src:n.senderAvatar||(f==null?void 0:f.avatarUrl),size:28}),s.jsxs("div",{className:"sn-mod-msg-body",children:[s.jsxs("div",{className:"sn-mod-msg-head",children:[s.jsx("span",{className:"sn-mod-msg-name",children:n.senderName}),C&&s.jsx(D,{tone:C.tone,className:"sn-mod-msg-tag",children:C.label}),M&&s.jsx(D,{tone:"amber",className:"sn-mod-msg-tag",children:M}),s.jsx("span",{className:"sn-mono sn-mod-msg-time",children:T})]}),s.jsx("div",{className:"sn-mod-msg-text",children:I.map((S,O)=>S.mention?s.jsx("span",{className:`sn-mod-mention${S.mention.me?" is-me":""}`,children:S.text},O):s.jsx(Ks.Fragment,{children:S.text},O))}),t.isFiltered&&s.jsx("span",{className:"sn-mod-msg-note",children:"Фильтр заменил часть слов"}),t.heldReason&&s.jsxs("div",{className:"sn-mod-held-actions",children:[s.jsx("span",{className:"sn-mod-msg-note",children:t.heldReason==="link"?"Зрители не видят сообщение со ссылкой":"Зрители не видят это сообщение"}),s.jsx("div",{className:"sn-st-grow"}),s.jsx(L,{size:"xs",variant:"soft",disabled:m,onClick:()=>void h(()=>o.reveal(n.id),"Сообщение видно всем"),children:"Показать всем"}),s.jsx(L,{size:"xs",variant:"text",disabled:m,onClick:()=>void h(()=>r.deleteMessage(n.id),"Сообщение удалено"),children:"Удалить"}),s.jsx(L,{size:"xs",variant:"text",onClick:()=>p(!1),children:"Свернуть"})]})]}),i==="viewers"&&!t.heldReason&&s.jsxs("div",{className:`sn-mod-tools${N?" is-open":""}`,role:"toolbar","aria-label":`Действия с сообщением ${n.senderName}`,children:[b&&(r.pinnedMessageId===n.id?s.jsx(F,{label:"Открепить",size:"xs",variant:"plain",disabled:m,onClick:()=>void h(()=>r.unpin()),children:s.jsx(ne,{className:"sn-i sn-i-16"})}):s.jsx(F,{label:"Закрепить",size:"xs",variant:"plain",disabled:m,onClick:()=>void h(()=>r.pin(n.id),"Сообщение закреплено"),children:s.jsx(ee,{className:"sn-i sn-i-16"})})),c&&b&&s.jsx(F,{label:"Скрыть от зрителей",size:"xs",variant:"plain",disabled:m,onClick:()=>void h(()=>o.hide(n.id),"Сообщение скрыто от зрителей"),children:s.jsx(is,{className:"sn-i sn-i-16"})}),(c||n.isMine)&&(N?s.jsx("button",{type:"button",className:"sn-mod-tools-confirm",disabled:m,onClick:()=>void h(()=>r.deleteMessage(n.id),"Сообщение удалено"),children:"Удалить?"}):s.jsx(F,{label:"Удалить сообщение",size:"xs",variant:"plain",className:"is-danger",disabled:m,onClick:()=>y(!0),children:s.jsx(As,{className:"sn-i sn-i-16"})})),!n.isMine&&s.jsx(F,{label:`Действия: ${n.senderName}`,size:"xs",variant:"plain","aria-haspopup":"menu",onClick:S=>u(A,S.currentTarget),children:s.jsx($s,{className:"sn-i sn-i-16"})})]})]})}function pn({api:e,tab:n,privateTo:t,onClearPrivate:i,inputRef:l}){const{chat:o}=z(),u=q(),[r,a]=x.useState({}),[d,p]=x.useState(!1),N=x.useRef(null),y=l||N,m=n==="team"?"team":t?`p:${t.peerId}`:"viewers",g=r[m]||"",f=c=>a(b=>({...b,[m]:c})),j=x.useMemo(()=>{const c=new Set;for(const b of e.participants){if(b.isLocal||!ks(b)||!de(b))continue;const M=W(b.name);M&&c.add(M)}return[...c].slice(0,5)},[e.participants]),k=async()=>{var b;const c=g.trim();if(!(!c||d)){p(!0);try{const M=n==="team"?await o.send(c,{visibility:"team"}):t!=null&&t.peerId?await o.send(c,{visibility:"private",recipientPeerId:t.peerId}):await o.send(c,{visibility:"public"});if(!M.ok){u.error(M.error||"Сообщение не отправилось");return}f("")}
22finally{p(!1),(b=y.current)==null||b.focus()}}},C=c=>{var A;const b=`@${c} `,M=g;f(M&&!M.endsWith(" ")?`${M} ${b}`:`${M}${b}`),(A=y.current)==null||A.focus()},T=n==="team"?"Написать команде":t?`Лично ${xe(t.name)||t.name}`:`Написать от имени ${e.me.role==="co_host"?"модератора":"команды"}`;return s.jsxs("div",{className:"sn-mod-composer",children:[n==="team"&&s.jsxs("div",{className:"sn-mod-mentions","aria-label":"Упомянуть",children:[j.map(c=>s.jsxs("button",{type:"button",className:"sn-mod-mention-chip",onClick:()=>C(c),children:["@",c]},c)),s.jsx("button",{type:"button",className:"sn-mod-mention-chip",onClick:()=>C("все"),children:"@все"})]}),t&&n==="viewers"&&s.jsxs("div",{className:"sn-mod-private",children:[s.jsx(Cs,{className:"sn-i sn-i-14"}),s.jsxs("span",{className:"sn-ellipsis",children:["Лично: ",s.jsx("b",{children:t.name})," — остальные зрители не увидят"]}),s.jsx("button",{type:"button",className:"sn-mod-private-x","aria-label":"Писать всем",onClick:i,children:s.jsx(Y,{className:"sn-i sn-i-14"})})]}),s.jsxs("form",{className:"sn-mod-composer-row",onSubmit:c=>{c.preventDefault(),k()},children:[s.jsx("input",{ref:y,className:"sn-input sn-input-sm sn-mod-composer-input",value:g,maxLength:1e3,placeholder:T,"aria-label":T,onChange:c=>f(c.target.value),onKeyDown:c=>{c.key==="Escape"&&t&&i()}}),s.jsx("button",{type:"submit",className:"sn-mod-send","aria-label":"Отправить",disabled:!g.trim()||d,children:s.jsx(te,{className:"sn-i sn-i-20"})})]})]})}function Hs(e){const n=e;return{...e,hideLinks:n.hideLinks===!0,profanityFilter:n.profanityFilter===!0,wordFilter:Array.isArray(n.wordFilter)?n.wordFilter.filter(t=>typeof t=="string"):[]}}const jn=[5,10,30,60],bs=100,Nn=40;function Vs(e,n){return{slowOn:e.slowModeSec>0,slowSec:e.slowModeSec>0?e.slowModeSec:10,registered:e.mode==="registered",chatOff:e.mode==="off",hideLinks:e.hideLinks,profanityFilter:e.profanityFilter,words:e.wordFilter.join(", "),requireApproval:n.requireApproval,allowAnonymous:n.allowAnonymous}}function Ws(e){const n=new Set;for(const t of e.split(/[,;\n]/)){const i=t.trim().toLowerCase().replace(/\s+/g," ");i.length>=2&&i.length<=Nn&&n.add(i)}return[...n].slice(0,bs)}function vn({open:e,onClose:n,roomTitle:t,blockedCount:i,onOpenBlocked:l}){const{chat:o,qna:u}=z(),r=q(),a=Hs(o.settings),[d,p]=x.useState(()=>Vs(a,u.settings)),[N,y]=x.useState(!1);x.useEffect(()=>{e&&p(Vs(Hs(o.settings),u.settings))},[e]);const m=(j,k)=>p(C=>({...C,[j]:k})),g=async()=>{const j={},k=d.slowOn?d.slowSec:0;k!==a.slowModeSec&&(j.slowModeSec=k);const C=d.chatOff?"off":d.registered?"registered":"all";C!==a.mode&&(j.mode=C),d.hideLinks!==a.hideLinks&&(j.hideLinks=d.hideLinks),d.profanityFilter!==a.profanityFilter&&(j.profanityFilter=d.profanityFilter);const T=Ws(d.words);T.join(`
23`)!==a.wordFilter.join(`
24`)&&(j.wordFilter=T);const c={};if(d.requireApproval!==u.settings.requireApproval&&(c.requireApproval=d.requireApproval),d.allowAnonymous!==u.settings.allowAnonymous&&(c.allowAnonymous=d.allowAnonymous),!Object.keys(j).length&&!Object.keys(c).length){n();return}y(!0);try{if(Object.keys(j).length){const b=await o.updateSettings(j);if(!b.ok){r.error(b.error||"Не удалось сохранить настройки чата");return}}if(Object.keys(c).length){const b=await u.updateSettings(c);if(!b.ok){r.error(b.error||"Не удалось сохранить настройки вопросов");return}}r.success("Настройки чата сохранены"),n()}finally{y(!1)}},f=Ws(d.words);return s.jsx(js,{open:e,onClose:()=>N?void 0:n(),icon:s.jsx(Zs,{className:"sn-i sn-i-20"}),iconTone:"blue",width:580,title:"Настройки чата",subtitle:`Правила для зрителей эфира «${t}». Меняются сразу, без перезапуска.`,footer:s.jsxs(s.Fragment,{children:[i>0?s.jsxs(L,{variant:"text",size:"sm",icon:s.jsx(sn,{className:"sn-i sn-i-16"}),onClick:l,disabled:N,children:["Заблокированы · ",i]}):null,s.jsx("div",{style:{flex:1}}),s.jsx(L,{variant:"quiet",onClick:n,disabled:N,children:"Отмена"}),s.jsx(L,{variant:"primary",loading:N,onClick:()=>void g(),children:"Сохранить"})]}),children:s.jsxs("div",{className:"sn-mod-settings",children:[d.chatOff&&s.jsxs("div",{className:"sn-mod-chat-note is-warn",style:{margin:"0 0 4px"},children:[s.jsx(se,{className:"sn-i sn-i-16"}),s.jsx("span",{style:{flexGrow:1},children:"Чат выключен — зрители не могут писать"}),s.jsx("button",{type:"button",className:"sn-mod-linkbtn",onClick:()=>m("chatOff",!1),children:"Включить чат"})]}),s.jsx(X,{title:"Медленный режим",description:`Одно сообщение в ${d.slowSec} ${B(d.slowSec,"секунду","секунды","секунд")} от каждого зрителя — чат не несётся слишком быстро`,checked:d.slowOn,onChange:j=>m("slowOn",j),children:d.slowOn&&s.jsx(Xs,{size:"sm",ariaLabel:"Интервал медленного режима",className:"sn-mod-slow-steps",value:String(d.slowSec),onChange:j=>m("slowSec",Number(j)),options:jn.map(j=>({value:String(j),label:j===60?"1 мин":`${j} с`}))})}),s.jsx(X,{title:"Только зарегистрированные",description:"Писать могут только те, кто зарегистрировался на эфир. Смотреть — все",checked:d.registered,disabled:d.chatOff,onChange:j=>m("registered",j)}),s.jsx(X,{title:"Скрывать ссылки",description:"Сообщения со ссылками скрываются, пока вы их не покажете",checked:d.hideLinks,onChange:j=>m("hideLinks",j)}),s.jsx(X,{title:"Фильтр нецензурных слов",description:"Заменяет мат звёздочками — зрители видят сообщение без них",checked:d.profanityFilter,onChange:j=>
24m("profanityFilter",j),children:d.profanityFilter&&s.jsxs("div",{className:"sn-mod-words",children:[s.jsx("label",{className:"sn-hint",htmlFor:"sn-mod-words",children:"Свои стоп-слова — через запятую (например, названия конкурентов)"}),s.jsx($e,{id:"sn-mod-words",rows:2,value:d.words,placeholder:"спам, казино, промокод",onChange:j=>m("words",j.target.value),style:{minHeight:64}}),s.jsxs("span",{className:"sn-hint",children:[f.length?`${f.length} ${B(f.length,"слово","слова","слов")} в фильтре`:"Встроенный список мата работает и без своих слов",f.length>=bs?` — максимум ${bs}`:""]})]})}),s.jsx(X,{title:"Премодерация вопросов",description:"Вопрос появится у зрителей после того, как вы его отберёте или отметите",checked:d.requireApproval,onChange:j=>m("requireApproval",j)}),s.jsx(X,{title:"Анонимные вопросы",description:"Зритель может спросить без имени. Вы всё равно видите, кто спросил",checked:d.allowAnonymous,onChange:j=>m("allowAnonymous",j),last:!0})]})})}function X({title:e,description:n,checked:t,onChange:i,disabled:l,children:o,last:u}){return s.jsxs("div",{className:`sn-mod-setting${u?" is-last":""}`,children:[s.jsxs("div",{className:"sn-mod-setting-row",children:[s.jsxs("span",{className:"sn-mod-setting-text",children:[s.jsx("b",{children:e}),s.jsx("span",{children:n})]}),s.jsx(os,{label:e,checked:t,onChange:i,disabled:l})]}),o]})}function gn(e,n){var l;const t=(l=e.rundown)==null?void 0:l.current;if(!t)return null;const i=t.endsAt?Date.parse(t.endsAt):NaN;return{title:t.title,left:Number.isFinite(i)?Math.max(0,Math.floor((i-n)/1e3)):null}}function wn({api:e,onOpenProducer:n}){const t=Q(1e3),[i,l]=x.useState(null),o=e.live,u=o.isLive&&o.startedAt?Math.max(0,Math.floor((t-o.startedAt)/1e3)):0,r=e.stageParticipants.some(g=>g.isLocal),a=gn(e,t),d=e.room.scheduledAt?Date.parse(e.room.scheduledAt):NaN,p=Number.isFinite(d)?Math.floor((d-t)/1e3):null,N=e.viewerCount,y=e.me.roleLabel?`Вы ${e.me.roleLabel.toLowerCase()}`:"Вы модератор",m=[...n?[{label:"Открыть студию продюсера",icon:s.jsx(Te,{className:"sn-i sn-i-16"}),onSelect:n}]:[],{label:"Камера и микрофон",icon:s.jsx(Oe,{className:"sn-i sn-i-16"}),onSelect:e.openDeviceSettings},{type:"separator"},{label:"Выйти из студии",icon:s.jsx(ie,{className:"sn-i sn-i-16"}),onSelect:e.leave}];return s.jsxs("header",{className:"sn-st-header sn-mod-header",children:[s.jsx(F,{label:"В кабинет",size:"sm",onClick:e.leave,style:{color:"var(--sn-ink-2)"},children:s.jsx(Ys,{className:"sn-i"})}),s.jsx("span",{className:"sn-st-title",title:e.room.title,children:e.room.title}),s.jsx(D,{tone:"green",className:"sn-st-hide-sm",children:y}),s.jsxs("span",{className:`sn-mod-visibility sn-st-hide-md${r?" is-live":""}`,children:[r?s.jsx(ds,{className:"sn-i sn-i-16"}):s.jsx(is,{className:"sn-i sn-i-16"}),r?"Вы в эфире — зрители вас видят":"Зрители вас не видят"]}),s.jsx("div",{className:"sn-st-grow"}),s.jsxs("div",{className:"sn-st-status",children:[o.isLive?s.jsx(Ae,{time:ns(u,!0),className:"sn-st-livetag"}):s.jsxs(D,{tone:"gray",className:"sn-st-livetag",style:{height:30},children:[s.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:"var(--sn-ink-3)"}}),o.starting?"Запускаем…":p!==null&&p>0?s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"sn-mod-sr-sm",children:"До начала"})," ",s.jsx("span",{className:"sn-mono",children:ns(p)})]}):s.jsx("span",{className:"sn-mod-sr-sm",children:"Эфир не идёт"})]}),N!==null&&s.jsxs("span",{className:"sn-st-viewers sn-st-hide-sm",title:"Зрители сейчас",children:[s.jsx(ds,{className:"sn-i sn-i-16"}),s.jsx("b",{children:cs(N)})," ",B(N,"зритель","зрителя","зрителей")]}),a&&s.jsxs("span",{className:"sn-st-pill sn-st-hide-md",style:{cursor:"default"},title:"Текущий блок программы",children:[s.jsx(Ms,{className:"sn-i sn-i-16",style:{color:"var(--sn-ink-3)"}}),s.jsx("span",{className:"sn-ellipsis",style:{maxWidth:220},children:a.title}),a.left!==null&&s.jsxs(s.Fragment,{children:["· ",s.jsx("span",{className:"sn-mono",children:ns(a.left)})]})]})]}),s.jsx("div",{className:"sn-st-grow"}),s.jsxs("div",{className:"sn-st-actions",children:[s.jsx(F,{label:e.me.isMuted?"Включить микрофон":"Выключить микрофон",size:"sm",variant:e.me.isMuted?"off-light":"quiet",onClick:e.toggleMic,children:e.me.isMuted?s.jsx(gs,{className:"sn-i"}):s.jsx(ws,{className:"sn-i"})}),s.jsx(F,{label:e.me.isCameraOff?"Включить камеру":"Выключить камеру",size:"sm",variant:e.me.isCameraOff?"off-light":"quiet",onClick:e.toggleCamera,children:e.me.isCameraOff?s.jsx(ys,{className:"sn-i"}):s.jsx(ae,{className:"sn-i"})}),s.jsx("span",{className:"sn-st-sep sn-st-hide-sm"}),s.jsxs("button",{type:"button",className:"sn-mod-me","aria-haspopup":"menu","aria-expanded":!!i,onClick:g=>l(i?null:g.currentTarget),children:[s.jsx(G,{name:e.me.name,src:e.me.avatarUrl,size:32}),s.jsx("span",{className:"sn-mod-me-name sn-st-hide-sm",children:e.me.name||"Модератор"}),s.jsx(le,{className:"sn-i sn-i-14 sn-st-hide-sm",style:{color:"var(--sn-ink-3)"}})]})]}),s.jsx(rs,{open:!!i,anchor:i,onClose:()=>l(null),items:m,width:250})]})}function Ss(e,n){return n?String(e||"").toLowerCase().includes(n):!0}function yn(e){const n=Math.max(0,Math.floor(e/1e3));return`${Math.floor(n/60)}:${String(n%60).padStart(2,"0")}`}function kn({api:e,onOpenAudience:n,onInvite:t,onReply:i}){const{audience:l,waiting:o}
24=z(),[u,r]=x.useState(""),a=u.trim().toLowerCase(),d=e.stageParticipants.filter(ks),p=new Set(d.map(f=>f.id)),N=e.participants.filter(f=>{if(!ks(f)||f.isLocal||p.has(f.id))return!1;const j=us(f);return j!=="viewer"&&j!=="guest_viewer"}),y=l.raisedHands.filter(f=>Ss(f.name,a)),m=o.waiting.filter(f=>Ss(f.name,a)),g=l.ready?l.viewers:e.viewerCount??0;return s.jsxs("aside",{className:"sn-mod-people","aria-label":"Люди",children:[s.jsx("div",{className:"sn-mod-col-head",children:s.jsx("h2",{children:"Люди"})}),s.jsxs("div",{className:"sn-mod-people-scroll",children:[s.jsxs("label",{className:"sn-input-wrap sn-mod-search",children:[s.jsx(Js,{className:"sn-i sn-i-16 sn-input-icon"}),s.jsx("input",{className:"sn-input sn-input-sm has-icon",placeholder:"Найти по имени","aria-label":"Найти по имени",value:u,onChange:f=>r(f.target.value),onKeyDown:f=>{f.key==="Escape"&&r("")}})]}),s.jsx(bn,{query:a,list:m}),s.jsxs("section",{className:"sn-mod-sec","aria-label":"Подняли руку",children:[s.jsxs("div",{className:"sn-mod-sec-head",children:[s.jsx(De,{className:"sn-i sn-i-16",style:{color:"var(--sn-amber)"}}),s.jsx("span",{className:"sn-mod-sec-title",children:"Подняли руку"}),s.jsxs("span",{className:"sn-mod-sec-count",children:["· ",l.raisedHands.length]})]}),y.length?y.map(f=>s.jsx($n,{hand:f,onInvite:t},f.peerId)):s.jsx("span",{className:"sn-mod-sec-empty",children:a?"Никого с таким именем":"Пока никто — зрители поднимают руку, чтобы выйти в эфир"})]}),s.jsxs("div",{className:"sn-mod-groups",children:[s.jsx(Gs,{api:e,title:"В эфире",people:d,query:a,onReply:i,empty:"На сцене никого"}),s.jsx(Gs,{api:e,title:"За кулисами",people:N,query:a,onReply:i,empty:"За кулисами никого"}),s.jsx("div",{className:"sn-mod-group",children:s.jsxs("button",{type:"button",className:"sn-mod-group-head",onClick:()=>n(u.trim()||void 0),children:[s.jsx("span",{className:"sn-mod-sec-title",children:"Зрители"}),s.jsxs("span",{className:"sn-mod-sec-count",children:["· ",s.jsx("span",{className:"sn-mod-num",children:cs(g)})]}),s.jsx("div",{className:"sn-st-grow"}),s.jsx("span",{className:"sn-mod-linkbtn",children:a?"Искать среди зрителей":"Все зрители"}),s.jsx(oe,{className:"sn-i sn-i-16",style:{color:"var(--sn-blue)"}})]})})]})]}),s.jsx(Sn,{})]})}function bn({query:e,list:n}){const{waiting:t}=z(),i=q(),l=Q(15e3),[o,u]=x.useState({}),r=async(a,d,p)=>{u(N=>({...N,[a]:!0}));try{const N=await d();N.ok?p&&i.success(p(N)):i.error(N.error||"Не получилось")}finally{u(N=>({...N,[a]:!1}))}};return t.ready?!t.enabled&&!t.waiting.length?null:s.jsxs("section",{className:"sn-mod-sec","aria-label":"Зал ожидания",children:[s.jsxs("div",{className:"sn-mod-sec-head",children:[s.jsx("span",{className:"sn-mod-sec-title",children:"Зал ожидания"}),s.jsxs("span",{className:"sn-mod-sec-count",children:["· ",t.waiting.length]}),s.jsx("div",{className:"sn-st-grow"}),t.waiting.length>0&&s.jsx(L,{size:"sm",variant:"primary",loading:o.all,onClick:()=>void r("all",()=>t.admitAll(),a=>`Пустили ${a.admitted??t.waiting.length}`),children:"Пустить всех"})]}),n.length?n.map(a=>s.jsxs("div",{className:"sn-mod-prow",children:[s.jsx(G,{name:a.name,size:36}),s.jsxs("div",{className:"sn-mod-prow-text",children:[s.jsx("b",{children:a.name}),s.jsxs("span",{children:[a.isRegistered?"Зарегистрирован(а)":"Гость"," · ждёт ",ss(l-a.since)]})]}),s.jsx(L,{size:"sm",variant:"quiet",disabled:o[a.id],onClick:()=>void r(a.id,()=>t.admit(a.id)),children:"Пустить"}),s.jsx(F,{label:`Отклонить: ${a.name}`,size:"sm",disabled:o[a.id],onClick:()=>void r(a.id,()=>t.reject(a.id)),style:{color:"var(--sn-ink-3)"},children:s.jsx(Y,{className:"sn-i"})})]},a.id)):s.jsx("span",{className:"sn-mod-sec-empty",children:e?"Никого с таким именем":"Никто не ждёт"})]}):s.jsxs("section",{className:"sn-mod-sec","aria-label":"Зал ожидания",children:[s.jsxs("div",{className:"sn-mod-sec-head",children:[s.jsx("span",{className:"sn-mod-sec-title",children:"Зал ожидания"}),s.jsx(D,{tone:"gray",style:{height:22},children:"скоро"})]}),s.jsx("span",{className:"sn-mod-sec-empty",children:"Зал ожидания ещё не подключён к этому эфиру — гости сразу попадают к зрителям."})]})}function Sn(){const{waiting:e}=z(),n=q(),[t,i]=x.useState(!1),l=!e.ready||!e.enabled;return s.jsxs("div",{className:"sn-mod-autoadmit",children:[s.jsxs("span",{className:"sn-mod-setting-text",children:[s.jsx("b",{children:"Пускать без ожидания"}),s.jsx("span",{children:e.ready?l?"Гости сразу попадут к зрителям":"Новые гости ждут, пока вы их пустите":"Сейчас все заходят сразу — зал ожидания не подключён"})]}),s.jsx(os,{label:"Пускать без ожидания",checked:l,disabled:!e.ready||t,onCh
24ange:async o=>{i(!0);const u=await e.setEnabled(!o);i(!1),u.ok||n.error(u.error||"Не удалось переключить")}})]})}function $n({hand:e,onInvite:n}){var m;const{invites:t}=z(),i=q(),l=Q(1e3),[o,u]=x.useState(!1),r=t.invites.find(g=>g.peerId===e.peerId&&g.status==="pending"),a=_(e.name)==="f",d=ss(l-e.at),p=((m=e.topic)==null?void 0:m.trim())||"",N=p?/^(про|о|об|обо|насчёт|насчет|голосом|вопрос)(?=\s|$)/i.test(p)?`Хочет спросить ${p}`:`Тема: ${p}`:a?"Подняла руку":_(e.name)==="m"?"Поднял руку":"Поднял(а) руку",y=async(g,f)=>{u(!0);try{const j=await g();j.ok?f&&i.success(f):i.error(j.error||"Не получилось")}finally{u(!1)}};return s.jsxs("div",{className:`sn-mod-hand${r?" is-invited":""}`,children:[s.jsx(G,{name:e.name,size:36}),s.jsxs("div",{className:"sn-mod-hand-body",children:[s.jsxs("b",{className:"sn-ellipsis",children:[e.name,e.isTeam&&s.jsx(D,{tone:"gray",style:{height:20,marginLeft:6},children:"команда"})]}),s.jsxs("span",{className:"sn-mod-hand-sub",title:e.topic||void 0,children:[N," · ",d]}),r?s.jsxs("div",{className:"sn-mod-hand-invite",children:[s.jsxs("span",{className:"sn-mod-hand-sent",children:[s.jsxs("span",{children:[s.jsx(J,{className:"sn-i sn-i-14"}),"Приглашение отправлено"]}),s.jsxs("span",{className:"sn-mod-hand-wait",children:["ждём ответа · ",s.jsx("span",{className:"sn-mono",children:yn((r.localExpiresAt??r.expiresAt)-l)})]})]}),s.jsx(L,{size:"sm",variant:"quiet",disabled:o,onClick:()=>void y(()=>t.cancel(r.id),"Приглашение отменено"),children:"Отменить"})]}):s.jsxs("div",{className:"sn-mod-hand-actions",children:[!e.isTeam&&s.jsx(L,{size:"sm",variant:"quiet",icon:s.jsx(Is,{className:"sn-i sn-i-16"}),disabled:o,onClick:()=>n({peerId:e.peerId,name:e.name}),children:"Позвать за кулисы"}),s.jsx(L,{size:"sm",variant:"text",disabled:o,onClick:()=>void y(()=>t.lowerHand(e.peerId)),children:"Опустить"})]})]})]})}function Gs({api:e,title:n,people:t,query:i,onReply:l,empty:o}){const[u,r]=x.useState(!1),a=t.filter(p=>Ss(p.name,i)),d=u||!!i&&a.length>0;return s.jsxs("div",{className:"sn-mod-group",children:[s.jsxs("button",{type:"button",className:"sn-mod-group-head","aria-expanded":d,onClick:()=>r(p=>!p),children:[s.jsx("span",{className:"sn-mod-sec-title",children:n}),s.jsxs("span",{className:"sn-mod-sec-count",children:["· ",t.length]}),s.jsx("div",{className:"sn-st-grow"}),!d&&t.length>0&&s.jsx(Me,{people:t.map(p=>({id:p.id,name:p.name,src:p.avatarUrl})),size:26,max:3}),d?s.jsx(le,{className:"sn-i sn-i-16",style:{color:"var(--sn-ink-3)"}}):s.jsx(oe,{className:"sn-i sn-i-16",style:{color:"var(--sn-ink-3)"}})]}),d&&s.jsx("div",{className:"sn-mod-group-list",children:a.length?a.map(p=>s.jsx(Cn,{api:e,participant:p,onReply:l},p.id)):s.jsx("span",{className:"sn-mod-sec-empty",children:i?"Никого с таким именем":o})})]})}function Cn({api:e,participant:n,onReply:t}){const{invites:i}=z(),l=q(),[o,u]=x.useState(null),r=Z(n),a=me(r),d=en(e,n),p=us(n)==="guest",N=(m,g)=>{m.then(f=>{f.ok?l.success(g):l.error(f.error||"Не получилось")})},y=x.useMemo(()=>{const m=[];return n.isMuted?m.push({label:"Попросить включить микрофон",icon:s.jsx(ws,{className:"sn-i sn-i-16"}),onSelect:()=>N(e.requestUnmute(n.id),`Попросили ${he(n.name)} включить микрофон`)}):m.push({label:"Выключить микрофон",icon:s.jsx(gs,{className:"sn-i sn-i-16"}),onSelect:()=>N(e.forceMute(n.id),"Микрофон выключен")}),n.isCameraOff||m.push({label:"Выключить камеру",icon:s.jsx(ys,{className:"sn-i sn-i-16"}),onSelect:()=>N(e.forceCameraOff(n.id),"Камера выключена")}),m.push({label:"Написать лично",icon:s.jsx(Is,{className:"sn-i sn-i-16"}),onSelect:()=>t({peerId:d,name:n.name,avatarUrl:n.avatarUrl,isTeam:!p})}),p&&(m.push({type:"separator"}),m.push({label:"Вернуть в зрители",icon:s.jsx(Y,{className:"sn-i sn-i-16"}),danger:!0,onSelect:()=>N(i.returnToAudience(d),`${n.name} снова среди зрителей`)})),m},[n.isMuted,n.isCameraOff,n.id,n.name,d,p]);return s.jsxs("div",{className:"sn-mod-prow",children:[s.jsx(G,{name:n.name,src:n.avatarUrl,size:32}),s.jsxs("div",{className:"sn-mod-prow-text",children:[s.jsx("b",{className:"sn-ellipsis",children:n.name}),s.jsxs("span",{children:[a?a.label:p?"гость из зала":"участник",n.headline?` · ${n.headline}`:""]})]}),s.jsxs("span",{className:"sn-mod-prow-icons","aria-hidden":"true",children:[n.isMuted?s.jsx(gs,{className:"sn-i sn-i-14 is-off"}):s.jsx(ws,{className:"sn-i sn-i-14"}),n.isCameraOff?s.jsx(ys,{className:"sn-i sn-i-14 is-off"}):s.jsx(ae,{className:"sn-i sn-i-14"})]}),s.jsx(F,{label:`Действия: ${n.name}`,size:"xs",variant:"plain","aria-haspopup":"menu",onClick:m=>u(o?null:m.currentTarget),children:s.jsx($s,{className:"sn-i sn-i-16"})}),s.jsx(rs,{open:!!o,anchor:o,onClose:()=>u(null),items:y,width:280})]})}function An({invite:e,name:n,onClose:t,onRetry:i}){const l=_(n),o=n.split(/\s+/)[0]||n,u=l==="f"?"она":l==="m"?"он":"он(а)",r=l==="f"?"её":"его",a=(m,g)=>l==="f"?g:l==="m"?m:`${m}(а)`,d=(e==null?void 0:e.status)||"pending",p=d==="accepted"||d==="pending"?"ok":"warn",N=d==="pending"?`${o} ${a("получил","получила")} приглашение за кулисы`:d==="accepted"?`${o} за кулисами`:d==="declined"?`${o} ${a("отказался","отказалась")} выходить`:d==="expired"?`${o} не ${a("ответил","ответила")} на приглашение`:"Приглашение отменено",y=d==="pending"?`Продюсер увидит ${r}
24 в кулисах, когда ${u} примет`:d==="accepted"?`Продюсер выведет ${r} в эфир, когда будет пора`:d==="declined"?"Можно позвать ещё раз, если снова поднимет руку":d==="expired"?(e==null?void 0:e.reason)==="left"?`${o} ${a("вышел","вышла")} из эфира`:"Приглашение действует минуту — можно позвать ещё раз":"Зритель больше не видит приглашение";return s.jsxs("div",{className:`sn-mod-status is-${p}`,role:"status",children:[p==="ok"?s.jsx(J,{className:"sn-i sn-mod-status-icon"}):s.jsx(Y,{className:"sn-i sn-mod-status-icon"}),s.jsxs("span",{className:"sn-mod-status-text",children:[s.jsx("b",{children:N}),s.jsx("span",{children:y})]}),d==="expired"&&(e==null?void 0:e.reason)!=="left"&&s.jsx(L,{size:"sm",variant:"quiet",onClick:i,children:"Позвать ещё раз"}),s.jsx(F,{label:"Закрыть",size:"xs",variant:"plain",onClick:t,style:{color:"var(--sn-ink-3)"},children:s.jsx(Y,{className:"sn-i sn-i-16"})})]})}function Mn(e,n){if(!e)return"зритель";const t=[];e.online?e.joinedAt&&t.push(`в эфире ${ss(n-e.joinedAt)}`):t.push("вышел(ла) из эфира");const i=e.messages+e.heldLinks;return t.push(i?`${i} ${B(i,"сообщение","сообщения","сообщений")}`:"не писал(а) в чат"),t.join(" · ")}function In({target:e,member:n,onClose:t,handlers:i}){const l=Q(15e3),{invites:o,chat:u}=z(),r=e==null?void 0:e.person;if(!r)return s.jsx(rs,{open:!1,anchor:null,onClose:t,items:[]});const a=!!r.peerId&&(n?n.online:!0),d=r.peerId?o.invites.find(g=>g.peerId===r.peerId&&g.status==="pending"):null,p=(n==null?void 0:n.block)||u.blocked.find(g=>g.kind==="block"&&(r.peerId&&g.peerId===r.peerId||r.key&&g.identityKey===r.key))||null,N=(n==null?void 0:n.mute)||u.blocked.find(g=>g.kind==="mute"&&(r.peerId&&g.peerId===r.peerId||r.key&&g.identityKey===r.key))||null,y=!!r.peerId||!!r.messageId,m=[];return a&&m.push({label:"Ответить лично",icon:s.jsx(ze,{className:"sn-i sn-i-16"}),onSelect:()=>i.reply(r)}),r.isTeam||(N?m.push({label:"Вернуть чат",description:Rn(N,l),icon:s.jsx(Rs,{className:"sn-i sn-i-16"}),onSelect:()=>i.unmute(N.id,r)}):!p&&y&&m.push({label:"Выключить чат на 5 минут",icon:s.jsx(Ms,{className:"sn-i sn-i-16"}),onSelect:()=>i.mute(r)}),y&&m.push({label:"Удалить все сообщения",icon:s.jsx(As,{className:"sn-i sn-i-16"}),onSelect:()=>i.deleteAll(r),disabled:n?n.messages+n.heldLinks===0:!1}),n!=null&&n.isStageGuest?m.push({label:"Вернуть в зрители",icon:s.jsx(Je,{className:"sn-i sn-i-16"}),onSelect:()=>i.returnToAudience(r)}):a&&!p&&m.push({label:d?"Приглашение отправлено":"Позвать за кулисы",icon:s.jsx(Is,{className:"sn-i sn-i-16"}),onSelect:()=>i.invite(r),disabled:!!d}),m.push({type:"separator"}),p?m.push({label:"Разблокировать",icon:s.jsx(ce,{className:"sn-i sn-i-16"}),onSelect:()=>i.unblock(p.id,r)}):y&&m.push({label:"Заблокировать",icon:s.jsx(Ns,{className:"sn-i sn-i-16"}),danger:!0,onSelect:()=>i.block(r)})),m.length&&m[m.length-1].type==="separator"&&m.pop(),s.jsx(rs,{open:!!e,anchor:(e==null?void 0:e.anchor)||null,onClose:t,width:296,placement:"bottom-end",items:m.length?m:[{type:"label",label:"Для команды эфира действий нет"}],header:s.jsxs("div",{className:"sn-mod-pm-head",children:[s.jsx(G,{name:r.name,src:r.avatarUrl,size:40}),s.jsxs("div",{style:{minWidth:0},children:[s.jsx("b",{className:"sn-ellipsis",style:{display:"block"},children:r.name}),s.jsx("span",{className:"sn-mod-pm-sub",children:r.isTeam?"команда эфира":Mn(n,l)})]})]})})}function Rn(e,n){const t="until"in e?e.until:e.expiresAt,i=t?Date.parse(t):NaN;if(Number.isFinite(i))return`чат выключен ещё ${ss(Math.max(0,i-n))}`}function Ln({person:e,member:n,onClose:t,onConfirm:i}){const l=Q(15e3),[o,u]=x.useState("spam"),[r,a]=x.useState(!0),[d,p]=x.useState(!0),[N,y]=x.useState(!1),m=e?`${e.peerId}|${e.messageId}|${e.key}`:"";if(x.useEffect(()=>{m&&(u("spam"),a(!0),p(!0),y(!1))},[m]),!e)return s.jsx(js,{open:!1,onClose:t});const g=_(e.name),f=g==="f"?"её":g==="m"?"его":null,j=xe(e.name),k=n?n.messages+n.heldLinks:null,C=(n==null?void 0:n.heldLinks)||0,T=[(n==null?void 0:n.headline)||null,
24n!=null&&n.online&&n.joinedAt?`в эфире ${ss(l-n.joinedAt)}`:n&&!n.online?"уже вышел(ла) из эфира":null,k!==null?`${k} ${B(k,"сообщение","сообщения","сообщений")}${C?`, ${C===1?"одно":C} скрыто автоматически`:""}`:null].filter(Boolean);return s.jsxs(js,{open:!0,onClose:()=>N?void 0:t(),icon:s.jsx(Ns,{className:"sn-i sn-i-20"}),iconTone:"red",width:520,title:`Заблокировать ${he(e.name)}?`,subtitle:T.join(" · ")||void 0,footer:s.jsxs(s.Fragment,{children:[s.jsx("div",{style:{flex:1}}),s.jsx(L,{variant:"quiet",onClick:t,disabled:N,children:"Отмена"}),s.jsx(L,{variant:"live",icon:s.jsx(Ns,{className:"sn-i sn-i-16"}),loading:N,onClick:async()=>{y(!0);const c=await i(e,{reason:o,deleteMessages:r,removeFromRoom:d&&!!e.peerId});y(!1),c&&t()},children:"Заблокировать"})]}),children:[s.jsxs("div",{className:"sn-mod-block-info",children:[s.jsxs("span",{children:[s.jsx(ie,{className:"sn-i sn-i-16"}),d&&e.peerId?"Сразу выйдет из эфира и не сможет вернуться по этой ссылке":"Сможет смотреть эфир, но не сможет вернуться, если выйдет"]}),s.jsxs("span",{children:[s.jsx(Rs,{className:"sn-i sn-i-16"}),"Не сможет писать в чат, задавать вопросы и голосовать"]}),s.jsxs("span",{children:[s.jsx(ce,{className:"sn-i sn-i-16"}),"Разблокировать можно в списке зрителей → «Заблокированы»"]})]}),s.jsxs("div",{className:"sn-mod-block-field",children:[s.jsx("span",{className:"sn-mod-block-label",id:"sn-mod-block-reason",children:"Причина"}),s.jsx(Xs,{ariaLabel:"Причина блокировки",value:o,onChange:u,options:[{value:"spam",label:"Спам"},{value:"abuse",label:"Оскорбления"},{value:"other",label:"Другое"}]}),s.jsxs("span",{className:"sn-hint",children:["Видят только продюсер и модераторы. ",j?`${j} причину не покажем.`:"Зрителю причину не покажем."]})]}),s.jsxs("div",{className:"sn-mod-block-switches",children:[s.jsxs("label",{className:"sn-mod-switchrow",children:[s.jsxs("span",{children:[s.jsx("b",{children:f?`Удалить ${f} сообщения`:"Удалить сообщения"}),s.jsx("span",{className:"sn-hint",children:k?`${k===1?"Сообщение исчезнет":`Все ${k} ${B(k,"сообщение","сообщения","сообщений")} исчезнут`} из чата у всех зрителей`:"Сообщения исчезнут из чата у всех зрителей"})]}),s.jsx(os,{label:f?`Удалить ${f} сообщения`:"Удалить сообщения",checked:r,onChange:a})]}),e.peerId&&s.jsxs("label",{className:"sn-mod-switchrow",children:[s.jsxs("span",{children:[s.jsx("b",{children:"Убрать из эфира"}),s.jsx("span",{className:"sn-hint",children:"Страница эфира закроется, повторный вход по этой ссылке не пустит"})]}),s.jsx(os,{label:"Убрать из эфира",checked:d,onChange:p})]})]})]})}function Tn({person:e,member:n,onClose:t,onConfirm:i}){const l=n?n.messages+n.heldLinks:null,o=e?W(e.name):"";return s.jsx(Fe,{open:!!e,onClose:t,onConfirm:async()=>{e&&await i(e)},icon:s.jsx(As,{className:"sn-i sn-i-20"}),title:l?`Удалить ${l} ${B(l,"сообщение","сообщения","сообщений")}?`:"Удалить все сообщения?",description:`${e?`${e.name}: в`:"В"}се сообщения в чате этого эфира исчезнут у всех зрителей. ${o||"Зритель"} сможет писать дальше — чтобы запретить, выключите чат или заблокируйте.`,confirmLabel:"Удалить"})}function On({api:e,queueCount:n,queueActive:t,onOpenQueue:i}){var f,j;const l=Q(1e3),o=e.live.isLive,u=e.aspect==="9:16",r=((f=e.rundown)==null?void 0:f.current)||null,a=((j=e.rundown)==null?void 0:j.next)||null,d=r!=null&&r.endsAt?Date.parse(r.endsAt):NaN,p=Number.isFinite(d)?Math.max(0,Math.floor((d-l)/1e3)):null,N=e.stageParticipants.filter(k=>k.type==="user"&&!k.isAI),y=e.participants.find(k=>!k.isLocal&&["streamer","owner"].includes(Z(k)||"")),m=(r==null?void 0:r.title)||e.program.name||(o?"Эфир идёт":"Эфир ещё не начался"),g=N.map(k=>
24k.name).filter(Boolean).slice(0,2).join(", ");return s.jsxs("section",{className:"sn-mod-program","aria-label":"Эфир, только просмотр",children:[s.jsxs("div",{className:`sn-mod-monitor${o?" is-live":""}${u?" is-vertical":""}`,children:[s.jsx("div",{className:"sn-mod-stagehost",children:e.renderProgramStage({interactive:!1})}),s.jsx("button",{type:"button",className:"sn-mod-sound","aria-label":e.programAudioMuted?"Слушать звук эфира":"Выключить звук эфира",title:e.programAudioMuted?"Слушать звук эфира":"Выключить звук эфира","aria-pressed":!e.programAudioMuted,onClick:()=>e.setProgramAudioMuted(!e.programAudioMuted),children:e.programAudioMuted?s.jsx(Ee,{className:"sn-i sn-i-16"}):s.jsx(Pe,{className:"sn-i sn-i-16"})})]}),s.jsxs("div",{className:"sn-mod-program-info",children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,minWidth:0},children:[o?s.jsx(D,{tone:"live",style:{height:22,fontSize:11},children:"ЭФИР"}):s.jsx(D,{tone:"gray",style:{height:22,fontSize:11},children:"НЕ В ЭФИРЕ"}),s.jsx("span",{className:"sn-mod-program-title",title:m,children:m})]}),s.jsxs("span",{className:"sn-mod-program-sub",children:[g||(e.program.name&&r?`Сцена «${e.program.name}»`:o?"На сцене никого":"Зрители увидят эфир, когда продюсер его запустит"),p!==null&&s.jsxs(s.Fragment,{children:[" · ещё ",s.jsx("span",{className:"sn-mono",style:{color:"var(--sn-ink-2)"},children:ns(p)})]})]}),s.jsx("span",{className:"sn-mod-program-sep"}),a?s.jsxs(s.Fragment,{children:[s.jsxs("span",{className:"sn-eyebrow",children:["Далее",a.startsAt?s.jsxs(s.Fragment,{children:[" · ",s.jsx("span",{className:"sn-mono",children:H(a.startsAt)})]}):null]}),s.jsx("span",{className:"sn-mod-program-next",title:a.title,children:a.title})]}):s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"sn-eyebrow",children:"Далее"}),s.jsx("span",{className:"sn-mod-program-sub",children:e.rundown?"Это последний блок программы":"Программа эфира не заполнена"})]}),s.jsxs("button",{type:"button",className:`sn-mod-linkbtn${t?" is-active":""}`,onClick:i,children:[t&&s.jsx(J,{className:"sn-i sn-i-14"}),n?`В очереди ${n} ${B(n,"вопрос","вопроса","вопросов")}`:"Очередь вопросов пуста",!t&&s.jsx(qe,{className:"sn-i sn-i-14"})]}),s.jsxs("span",{className:"sn-mod-program-lock",children:[s.jsx(Cs,{className:"sn-i sn-i-14",style:{marginTop:1,flex:"none"}}),s.jsxs("span",{children:["Только просмотр — сценой управляет ",y?`продюсер ${y.name}`:"продюсер"]})]})]})]})}const Dn={new:"по числу голосов",selected:"очередь для эфира",answered:"за этот эфир"};function as(e){return e.isAnonymous?e.authorRealName?`${e.authorRealName} (анонимно)`:"Аноним":e.authorName||"Гость"}function Ls(){const e=q(),[n,t]=x.useState({});return{busy:n,run:async(l,o,u)=>{if(n[l])return!1;t(r=>({...r,[l]:!0}));try{const r=await o();return r.ok?(u&&e.success(u),!0):(e.error(r.error||"Не удалось выполнить действие"),!1)}finally{t(r=>{const a={...r};return delete a[l],a})}}}}function Fn({api:e,tab:n,onTab:t,onSettings:i,footer:l}){const{qna:o}=z(),u={new:o.incoming.length,selected:o.queue.length+(o.onAir?1:0),answered:o.answered.length};return s.jsxs("section",{className:"sn-mod-questions","aria-label":"Вопросы",children:[s.jsxs("div",{className:"sn-mod-q-head",children:[s.jsx("h2",{children:"Вопросы"}),s.jsx("span",{className:"sn-mod-q-hint",children:Dn[n]}),s.jsx("div",{className:"sn-st-grow"}),s.jsx("nav",{className:"sn-seg sn-mod-seg","aria-label":"Фильтр вопросов",children:["new","selected","answered"].map(r=>s.jsxs("button",{type:"button","aria-pressed":n===r,"aria-current":n===r?"page":void 0,onClick:()=>t(r),children:[r==="new"?"Новые":r==="selected"?"Отобранные":"Отвеченные",s.jsx("span",{className:`sn-mod-seg-count${n===r?" is-active":""}`,children:u[r]})]},r))})]}),s.jsx("div",{className:"sn-mod-q-scroll",children:o.ready?o.settings.enabled?n==="new"?s.jsx(zn,{api:e}):n==="selected"?s.jsx(En,{api:e}):s.jsx(qn,{}):s.jsx(ls,{title:"Вопросы в этом эфире выключены",text:"Зрители не видят вкладку «Вопросы». Включить их может продюсер в настройках эфира."}):s.jsx(ls,{title:o.error?"Вопросы не загрузились":"Загружаем вопросы…",text:o.error||void 0,action:o.error?s.jsx(L,{size:"sm",variant:"quiet",onClick:o.refresh,children:"Повторить"}):null})}),l??(n==="selected"?s.jsx(Pn,{api:e}):n==="new"&&o.ready?s.jsxs("div",{className:"sn-mod-note",children:[o.settings.requireApproval?s.jsx(_e,{className:"sn-i sn-i-16",style:{color:"var(--sn-green)",flex:"none"}}):s.jsx(Ke,{className:"sn-i sn-i-16",style:{color:"var(--sn-ink-3)",flex:"none"}}),s.jsx("span",{style:{flexGrow:1},children:o.settings.requireApproval?"Премодерация включена: зрители видят вопрос после того, как вы его отберёте или отметите":"Премодерация выключена: зрители сразу видят новые вопросы и голосуют за них"}),s.jsx("button",{type:"button",className:"sn-mod-linkbtn",onClick:i,children:"Настроить"})]}):null)]})}function ls({title:e,text:n,action:t}){return s.jsxs("div",{className:"sn-mod-empty",children:[s.jsx("b",{children:e}),n&&s.jsx("span",{children:n}),t]})}function zn({api:e}){var r;const{qna:n}=z(),{busy:t,run:i}=Ls(),[l,o]=x.useState(!1),u=((r=n.incoming[0])==null?void 0:r.votes)??0;return!n.incoming.length&&!n.hidden.length?s.jsx(ls,{title:"Новых вопросов пока нет",text:e.live.isLive?"Вопросы зрителей появятся здесь — самые популярные наверху.":"Когда эфир начнётся, вопросы зрителей появятся здесь — самые популярные наверху."}):s.jsxs("div",{className:"sn-mod-q-list",children:[!n.incoming.length&&s.jsxs("div",{className:"sn-mod-empty is-compact",children:[s.jsx("b",{children:"Новых вопросов нет"}),s.jsx("span",{children:"Все вопросы разобраны."})]}),n.incoming.map(a=>s.jsxs("article",{className:"sn-mod-qcard",children:[s.jsxs("span",{className:`sn-mod-votes${a.votes>0&&a.votes===u?" is-top":""}`,"aria-label":`${a.votes} ${B(a.votes,"голос","голоса","голосов")}`,children:[s.jsx(Be,{className:"sn-i sn-i-14"}),s.jsx("span",{className:"sn-mono",children:a.votes})]}),s.jsxs("div",{className:"sn-mod-qbody",children:[s.jsx("span",{className:"sn-mod-qtext",children:a.text}),s.jsxs("div",{className:"sn-mod-qrow",children:[s.jsxs("span",{className:"sn-mod-qmeta",children:[s.jsx("span",{style:{color:"var(--sn-ink-2)"},children:as(a)})," · ",s.jsx("span",{className:"sn-mono",children:H(a.createdAt)})]}),s.jsx("div",{className:"sn-st-grow"}),s.jsxs("div",{className:"sn-mod-qactions",children:[s.jsx(L,{size:"sm",variant:"soft",className:"sn-mod-qbtn",icon:s.jsx(Ue,{className:"sn-i sn-i-16"}),disabled:t[a.id],onClick:()=>void i(a.id,()=>n.select(a.id)),children:"Отобрать для эфира"}),s.jsx(L,{size:"sm",variant:"text",className:"sn-mod-qbtn is-text",icon:s.jsx(J,{className:"sn-i sn-i-16"}),disabled:t[a.id],onClick:()=>void i(a.id,()=>n.markAnswered(a.id)),children:"Отвечено"}),s.jsx(L,{size:"sm",variant:"text",className:"sn-mod-qbtn is-text",icon:s.jsx(is,{className:"sn-i sn-i-16"}),disabled:t[a.id],onClick:()=>void i(a.id,()=>n.hide(a.id)),children:"Скрыть"})]})]})]})]},a.id)),n.hidden.length>0&&s.jsxs("div",{className:"sn-mod-hidden",children:[s.jsxs("button",{type:"button",className:"sn-mod-linkbtn is-muted","aria-expanded":l,onClick:()=>o(a=>!a),children:[l?s.jsx(is,{className:"sn-i sn-i-14"}):s.jsx(ds,{className:"sn-i sn-i-14"}),l?"Свернуть скрытые":`Скрытые · ${n.hidden.length}`]}),l&&n.hidden.map(a=>
24s.jsx("article",{className:"sn-mod-qcard is-hidden",children:s.jsxs("div",{className:"sn-mod-qbody",children:[s.jsx("span",{className:"sn-mod-qtext",children:a.text}),s.jsxs("div",{className:"sn-mod-qrow",children:[s.jsxs("span",{className:"sn-mod-qmeta",children:[as(a)," · ",s.jsx("span",{className:"sn-mono",children:H(a.createdAt)})," · скрыт, зрители его не видят"]}),s.jsx("div",{className:"sn-st-grow"}),s.jsx(L,{size:"sm",variant:"text",className:"sn-mod-qbtn is-text",icon:s.jsx(re,{className:"sn-i sn-i-16"}),disabled:t[a.id],onClick:()=>void i(a.id,()=>n.restore(a.id),"Вопрос вернулся в новые"),children:"Вернуть"})]})]})},a.id))]})]})}function En({api:e}){const{qna:n}=z(),t=q(),{busy:i,run:l}=Ls(),o=x.useMemo(()=>n.queue.map(h=>h.id),[n.queue]),[u,r]=x.useState(null),[a,d]=x.useState(null),[p,N]=x.useState(null),y=x.useRef(null);x.useEffect(()=>{if(!u)return;const h=u.length===o.length&&u.every((R,S)=>o[S]===R),I=u.length!==o.length||u.some(R=>!o.includes(R));(h||I)&&r(null)},[u,o]);const m=u||o,g=new Map(n.queue.map(h=>[h.id,h])),f=m.map(h=>g.get(h)).filter(h=>!!h),j=e.participants.filter(h=>["streamer","owner","host"].includes(Z(h)||"")),k=e.participants.find(h=>Z(h)==="host"),C=!!k&&_(k.name)==="f",T=C?"ведущей":"ведущему",c=C?"ведущей":"ведущего",b=async h=>{r(h);const I=await n.reorder(h);I.ok||(r(null),t.error(I.error||"Не удалось поменять порядок"))},M=(h,I)=>{const R=m.indexOf(h),S=R+I;if(R<0||S<0||S>=m.length)return;const O=[...m];O.splice(R,1),O.splice(S,0,h),b(O),window.setTimeout(()=>{var P,V;(V=(P=y.current)==null?void 0:P.querySelector(`[data-handle="${h}"]`))==null||V.focus()},30)},A=h=>{if(!a||a===h)return;const I=m.filter(P=>P!==a),R=I.indexOf(h),S=m.indexOf(a),O=m.indexOf(h);I.splice(S<O?R+1:R,0,a),b(I)};return s.jsxs("div",{className:"sn-mod-q-list",children:[s.jsxs("div",{className:"sn-mod-teamnote",children:[s.jsx(ds,{className:"sn-i sn-i-16",style:{flex:"none",marginTop:2}}),s.jsxs("span",{style:{flexGrow:1},children:[s.jsxs("b",{children:["Продюсер и ",C?"ведущая":"ведущий"," видят этот список."]})," ",k?`${W(k.name)} возьмёт`:"Ведущий возьмёт"," вопросы сверху вниз — перетащите, чтобы поменять порядок"]}),j.length>0&&s.jsx("span",{className:"sn-av-stack","aria-hidden":"true",children:j.slice(0,3).map(h=>s.jsx(G,{name:h.name,src:h.avatarUrl,size:26},h.id))})]}),n.onAir&&s.jsxs("article",{className:"sn-mod-qcard is-onair",children:[s.jsx("span",{className:"sn-mod-qnum is-live","aria-hidden":"true",children:"●"}),s.jsxs("div",{className:"sn-mod-qbody",children:[s.jsx("span",{className:"sn-mod-qtext",children:n.onA
24ir.text}),s.jsxs("span",{className:"sn-mod-qmeta",children:[as(n.onAir)," · ",s.jsxs("span",{className:"sn-mono",children:["▲ ",n.onAir.votes]})," · сейчас на экране"]})]}),s.jsx(L,{size:"sm",variant:"quiet",className:"sn-mod-qbtn",icon:s.jsx(J,{className:"sn-i sn-i-16"}),disabled:i[n.onAir.id],onClick:()=>n.onAir&&void l(n.onAir.id,()=>n.markAnswered(n.onAir.id),"Вопрос отмечен отвеченным"),children:"Отвечено"})]}),f.length?s.jsx("ol",{className:"sn-mod-queue",ref:y,children:f.map((h,I)=>{const R=!!h.sentToHostAt;return s.jsxs("li",{className:`sn-mod-qcard is-queue${a===h.id?" is-dragging":""}${p===h.id&&a!==h.id?" is-over":""}`,draggable:!0,onDragStart:S=>{d(h.id),S.dataTransfer.effectAllowed="move",S.dataTransfer.setData("text/plain",h.id)},onDragEnd:()=>{d(null),N(null)},onDragOver:S=>{a&&(S.preventDefault(),S.dataTransfer.dropEffect="move",p!==h.id&&N(h.id))},onDrop:S=>{S.preventDefault(),A(h.id),d(null),N(null)},children:[s.jsx("button",{type:"button",className:"sn-mod-grip","data-handle":h.id,"aria-label":`Перетащить, чтобы изменить порядок: ${h.text}`,title:"Перетащите или используйте стрелки ↑ ↓",onKeyDown:S=>{S.key==="ArrowUp"?(S.preventDefault(),M(h.id,-1)):S.key==="ArrowDown"&&(S.preventDefault(),M(h.id,1))},children:s.jsx(He,{className:"sn-i sn-i-16"})}),s.jsx("span",{className:`sn-mod-qnum${I===0?" is-first":""}`,children:s.jsx("span",{className:"sn-mono",children:I+1})}),s.jsxs("div",{className:"sn-mod-qbody",children:[s.jsx("span",{className:"sn-mod-qtext",children:h.text}),s.jsxs("span",{className:"sn-mod-qmeta",children:[as(h)," · ",s.jsx("span",{className:"sn-mono",children:H(h.createdAt)})," · ",s.jsxs("span",{className:"sn-mono",style:{color:"var(--sn-blue)"},children:["▲ ",h.votes]})]})]}),R?s.jsxs("span",{className:"sn-mod-sent",children:[s.jsx(J,{className:"sn-i sn-i-16"}),I===0?`У ${c} — следующий`:`У ${c}`]}):s.jsxs(L,{size:"sm",variant:"soft",className:"sn-mod-qbtn",icon:s.jsx(te,{className:"sn-i sn-i-16"}),disabled:i[h.id],onClick:()=>void l(h.id,()=>n.sendToHost(h.id),`Вопрос передан ${T}`),children:["Передать ",T]}),s.jsx(F,{label:`Убрать из очереди: ${h.text}`,size:"sm",disabled:i[h.id],onClick:()=>void l(h.id,()=>n.unselect(h.id),"Вопрос вернулся в новые"),style:{color:"var(--sn-ink-3)"},children:s.jsx(Y,{className:"sn-i"})})]},h.id)})}):s.jsx(ls,{title:"В очереди пока пусто",text:"Отберите вопросы во вкладке «Новые» — они встанут сюда по порядку, ведущий увидит этот список."})]})}function Pn({api:e}){var a,d;const n=Q(1e3),t=(a=e.rundown)==null?void 0:a.current,i=(d=e.rundown)==null?void 0:d.next,l=[t,i].find(p=>p&&/вопрос|q&a|qa/i.test(p.title))||null;if(!l)return null;const o=l.startsAt?Date.parse(l.startsAt):NaN,u=l.startsAt&&l.endsAt?`${H(l.startsAt)}–${H(l.endsAt)}`:l.startsAt?H(l.startsAt):null,r=l===t;return s.jsxs("div",{className:"sn-mod-note is-solid",children:[s.jsx(Ms,{className:"sn-i sn-i-16",style:{color:"var(--sn-blue)",flex:"none"}}),s.jsxs("span",{children:["Блок «",l.title,"»",u?s.jsxs(s.Fragment,{children:[" — ",s.jsx("span",{className:"sn-mono",style:{color:"var(--sn-ink)",fontWeight:600},children:u})]}):null,r?", идёт сейчас":Number.isFinite(o)&&o>n?s.jsxs(s.Fragment,{children:[", начнётся через ",s.jsx("span",{className:"sn-mono",style:{color:"var(--sn-ink)",fontWeight:600},children:ns(Math.floor((o-n)/1e3))})]}):null]})]})}function qn(){const{qna:e}=z(),{busy:n,run:t}=Ls();return e.answered.length?s.jsx("ul",{className:"sn-mod-q-list sn-mod-answered",children:e.answered.map(i=>{const l=i.answeredByName,o=i.answeredVia==="air"?"ответили в эфире":l?_(l)==="f"?"ответила в чате":"ответил в чате":"отмечен отвеченным";return s.jsxs("li",{className:"sn-mod-qcard is-answered",children:[s.jsx(Ve,{className:"sn-i sn-i-20",style:{color:"var(--sn-green)",flex:"none"}}),s.jsxs("div",{className:"sn-mod-qbody",children:[s.jsx("span",{className:"sn-mod-qtext",children:i.text}),s.jsxs("span",{className:"sn-mod-qmeta",children:[as(i)," · ",s.jsxs("span",{className:"sn-mono",children:["▲ ",i.votes]})," · ",o,l&&i.answeredVia!=="air"?s.jsxs(s.Fragment,{children:[" ",s.jsxs("span",{style:{color:"var(--sn-ink-2)"},children:[l,i.answeredByMe?" (вы)":""]})]}):null,i.answeredAt?s.jsxs(s.Fragment,{children:[" в ",s.jsx("span",{className:"sn-mono",children:H(i.answeredAt)})]}):null]})]}),s.jsx(L,{size:"sm",variant:"text",className:"sn-mod-qbtn is-text",icon:s.jsx(re,{className:"sn-i sn-i-16"}),disabled:n[i.id],onClick:()=>void t(i.id,()=>e.select(i.id),"Вопрос снова в очереди"),children:"Вернуть в очередь"})]},i.id)})}):s.jsx(ls,{title:"Отвеченных вопросов пока нет",text:"Вопросы, на которые ответили в эфире или в чате, соберутся здесь."})}const _n=1e4;function Bn(e,n,t){const[i,l]=x.useState([]),[o,u]=x.useState(!1),[r,a]=x.useState(!1),[d,p]=x.useState(null),[N,y]=x.useState(null),m=x.useRef(!1),g=x.useRef(e);g.current=e;const f=x.useCallback(async()=>
24{if(!m.current){m.current=!0,a(!0);try{const j=await vs(g.current,"room:audience-list",{});j.ok&&Array.isArray(j.viewers)?(l(j.viewers),p(null),u(!0),y(Date.now())):j.code!=="rate_limited"&&p(j.error||"Не удалось загрузить список зрителей")}finally{m.current=!1,a(!1)}}},[]);return x.useEffect(()=>{if(!t||!e||!n)return;f();const j=window.setInterval(()=>void f(),_n);return()=>window.clearInterval(j)},[t,e,n,f]),{members:i,ready:o,loading:r,error:d,loadedAt:N,refresh:f}}function Un(e,n){const t=x.useCallback(l=>vs(e,"chat:hide",{roomId:n,messageId:l}),[e,n]),i=x.useCallback(l=>vs(e,"chat:reveal",{roomId:n,messageId:l}),[e,n]);return{hide:t,reveal:i}}const Hn=12e3;function Qs(e,n,t){const i=_(e);return i==="f"?t:i==="m"?n:`${n}(а)`}function ca({api:e}){Ce(e);const n=z(),{chat:t,invites:i,qna:l}=n,o=q(),[u,r]=x.useState("new"),[a,d]=x.useState("viewers"),[p,N]=x.useState("questions"),[y,m]=x.useState({mode:"people"}),[g,f]=x.useState(null),[j,k]=x.useState(null),[C,T]=x.useState(null),[c,b]=x.use
24State(null),[M,A]=x.useState(!1),[h,I]=x.useState(null),[R,S]=x.useState(0),O=x.useRef(null),P=Un(e.commsSocket,e.room.id),V=y.mode==="audience"||!!g||!!j||!!C,w=Bn(e.studioSocket,e.joined,V),U=x.useCallback(v=>v&&w.members.find($=>v.key&&$.key===v.key||v.peerId&&$.peerId===v.peerId)||null,[w.members]),K=h&&i.invites.find(v=>v.id===h.id)||null,xs=(K==null?void 0:K.status)||(h?"pending":null);x.useEffect(()=>{if(!h||!xs||xs==="pending")return;const v=window.setTimeout(()=>I(null),Hn);return()=>window.clearTimeout(v)},[h,xs]);const fs=x.useCallback(async v=>{if(!v.peerId){o.error("Зритель уже вышел из эфира");return}const $=await i.invite(v.peerId);if(!$.ok||!$.invite){o.error($.error||"Не удалось отправить приглашение");return}I({id:$.invite.id,peerId:v.peerId,name:v.name})},[i,o]),ps=v=>({peerId:v.peerId||void 0,messageId:v.messageId}),Ts=x.useCallback(v=>{if(!v.peerId){o.error("Зритель уже вышел из эфира — лично ответить не получится");return}b(v),d("viewers"),N("chat"),window.setTimeout(()=>{var $;return($=O.current)==null?void 0:$.focus()},60)},[o]),pe={reply:Ts,mute:async v=>{var es;const $=await t.muteUser({...ps(v),minutes:5});if(!$.ok){o.error($.error||"Не удалось выключить чат");return}const E=(es=$.block)==null?void 0:es.id;o.show(`${W(v.name)||"Зритель"} не сможет писать в чат 5 минут`,{action:E?{label:"Отменить",onClick:()=>void t.unblock(E).then(()=>w.refresh())}:void 0}),w.refresh()},unmute:async(v,$)=>{const E=await t.unblock(v);E.ok?o.success(`${W($.name)||"Зритель"} снова может писать в чат`):o.error(E.error||"Не получилось"),w.refresh()},deleteAll:v=>T(v),invite:v=>void fs(v),returnToAudience:async v=>{if(!v.peerId)return;const $=await i.returnToAudience(v.peerId);$.ok?o.success(`${v.name} снова среди зрителей`):o.error($.error||"Не получилось"),w.refresh()},block:v=>k(v),unblock:async(v,$)=>{const E=await t.unblock(v);E.ok?o.success(`${$.name} ${Qs($.name,"разблокирован","разблокирована")}`):o.error(E.error||"Не удалось разблокировать"),w.refresh()}},je=async(v,$)=>{var Es;const E=await t.block({...ps(v),...$});if(!E.ok)return o.error(E.error||"Не удалось заблокировать"),!1;const es=(Es=E.block)==null?void 0:Es.id,zs=[E.deleted?`удалено сообщений: ${E.deleted}`:null,E.removed?"убран(а) из эфира":null].filter(Boolean).join(", ");return o.show(`${v.name} ${Qs(v.name,"заблокирован","заблокирована")}${zs?` — ${zs}`:""}`,{action:es?{label:"Отменить",onClick:()=>void t.unblock(es).then(()=>w.refresh())}:void 0,duration:8e3}),c&&v.peerId&&c.peerId===v.peerId&&b(null),w.refresh(),!0},Ne=async v=>{const $=await t.deleteByAuthor(ps(v));if(!$.ok){o.error($.error||"Не удалось удалить сообщения");return}o.success($.deleted?`Удалено сообщений: ${$.deleted}`:"Сообщений не осталось"),T(null),w.refresh()},ve=Z(e.me.participant)||String(e.me.role||""),Os=e.perms.manageStage&&["owner","streamer","admin"].includes(ve),Ds=be(),ge=x.useMemo(()=>Os?()=>{const v=new URLSearchParams(window.location.search);v.set("view","producer"),Ds({search:`?${v.toString()}`})}:null,[Os,Ds]),we=l.queue.length,ye=t.blocked.filter(v=>v.kind==="block").length,Fs=(v,$="all")=>{m({mode:"audience",query:v||"",filter:$}),N("people")},ke=h?s.jsx(An,{invite:K,name:h.name,onClose:()=>I(null),onRetry:()=>void fs({peerId:h.peerId,name:h.name})}):null;return s.jsxs("div",{className:"sn sn-studio","data-view":"moderator",children:[s.jsx(wn,{api:e,onOpenProducer:ge}),s.jsxs("div",{className:"sn-mod-body","data-tab":p,children:[s.jsx("div",{className:"sn-mod-col is-people",children:y.mode==="audience"?s.jsx(dn,{list:w,roomTitle:e.room.title,initialQuery:y.query,filter:y.filter,onFilter:v=>m({...y,filter:v}),onBack:()=>m({mode:"people"}),onMenu:(v,$)=>
24f({person:cn(v),anchor:$})},y.query):s.jsx(kn,{api:e,onOpenAudience:v=>Fs(v),onInvite:v=>void fs(v),onReply:Ts})}),s.jsxs("main",{className:"sn-mod-col sn-mod-center",children:[s.jsx(On,{api:e,queueCount:we,queueActive:u==="selected",onOpenQueue:()=>{r("selected"),N("questions")}}),s.jsx(Fn,{api:e,tab:u,onTab:r,onSettings:()=>A(!0),footer:ke})]}),s.jsx("div",{className:"sn-mod-col is-chat",children:s.jsx(hn,{api:e,tab:a,onTab:d,modActions:P,privateTo:c,onClearPrivate:()=>b(null),onPerson:(v,$)=>f({person:v,anchor:$}),onOpenSettings:()=>A(!0),onTeamUnread:S,composerRef:O})})]}),s.jsxs("nav",{className:"sn-mod-tabbar","aria-label":"Разделы",children:[s.jsxs("button",{type:"button","aria-current":p==="people"?"page":void 0,onClick:()=>N("people"),children:[s.jsx(We,{className:"sn-i"}),s.jsx("span",{children:"Люди"}),n.audience.raisedHands.length+n.waiting.waiting.length>0&&s.jsx("span",{className:"sn-mod-tabbar-badge",children:n.audience.raisedHands.length+n.waiting.waiting.length})]}),s.jsxs("button",{type:"button","aria-current":p==="questions"?"page":void 0,onClick:()=>N("questions"),children:[s.jsx(Ge,{className:"sn-i"}),s.jsx("span",{children:"Вопросы"}),l.incoming.length>0&&s.jsx("span",{className:"sn-mod-tabbar-badge is-blue",children:l.incoming.length})]}),s.jsxs("button",{type:"button","aria-current":p==="chat"?"page":void 0,onClick:()=>N("chat"),children:[s.jsx(Rs,{className:"sn-i"}),s.jsx("span",{children:"Чат"}),R>0&&s.jsx("span",{className:"sn-mod-tabbar-badge",children:R})]})]}),s.jsx(In,{target:g,member:U((g==null?void 0:g.person)||null),onClose:()=>f(null),handlers:pe}),s.jsx(Ln,{person:j,member:U(j),onClose:()=>k(null),onConfirm:je}),s.jsx(Tn,{person:C,member:U(C),onClose:()=>T(null),onConfirm:Ne}),s.jsx(vn,{open:M,onClose:()=>A(!1),roomTitle:e.room.title,blockedCount:ye,onOpenBlocked:()=>{A(!1),Fs(void 0,"blocked")}})]})}export{ua as MODERATOR_VIEW_MOBILE,ha as MODERATOR_VIEW_READY,ca as ModeratorView};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.