PageSourceSearch

https://snich.ai/assets/HomePage-2b8fe9e9.js

js snich.ai collected 2026-10-05 15:07:29 UTC 18,753 bytes, 1 lines download raw bytes

1import{j as s,r as u,L as k,R as Q}from"./vendor-react-72e4a099.js";import{u as V,r as g}from"./buildLifecycle-a44b0e05.js";import{a as R,A}from"./api-d8a57490.js";import{B as v,u as J}from"./Toast-43ee7788.js";import{a as N,T as b,L as T,A as Y,C as U}from"./Display-48adcc24.js";import{u as X}from"./Controls-5a18fd37.js";import{u as q,f as Z,l as ss,g as es,d as I,t as C,a as w,w as z,s as ns,c as W,p as $,r as ts,b as is}from"./format-5039f022.js";import{m as as}from"./api-9e8c3e2c.js";import{u as rs}from"./CabinetContext-31fc5321.js";import{E as M,i as S,f as H,p as O,r as F,s as P,a as os,e as ls,d as cs,b as ds,c as ms,g as xs,v as hs,R as ps,h as us,j as fs,k as js,t as L}from"./shared-303b156a.js";/* empty css                  */import{R as D}from"./radio-dc3b7f8c.js";import{V as E}from"./video-a08888e9.js";import{C as ys}from"./clock-e6794ea5.js";import{U as gs}from"./users-a990a1e8.js";import{C as _}from"./check-083433f7.js";import{C as bs}from"./copy-34f4069e.js";import{A as Ns}from"./arrow-right-eda8f931.js";import{C as ks}from"./circle-check-63b159d4.js";import{C as Cs}from"./circle-alert-67975319.js";import{C as G}from"./calendar-days-6829c81b.js";import{C as K}from"./calendar-plus-0f511f3c.js";import{F as ws}from"./film-0ba9e353.js";import{C as Ss}from"./chevron-right-b4336544.js";import{L as vs}from"./lock-73755c1f.js";import"./createLucideIcon-581cd729.js";import"./eye-5711d0dd.js";import"./x-b9f3d093.js";import"./chevron-down-888c3b30.js";import"./refresh-cw-98362cea.js";import"./sparkles-e0558c3e.js";import"./file-play-96922e92.js";import"./crown-fdf36aa5.js";import"./user-2d8f405f.js";import"./mic-098d6d5b.js";import"./shield-b21f8aed.js";const Ds={понедельник:"в понедельник",вторник:"во вторник",среда:"в среду",четверг:"в четверг",пятница:"в пятницу",суббота:"в субботу",воскресенье:"в воскресенье"},Rs=["января","февраля","марта","апреля","мая","июня","июля","августа","сентября","октября","ноября","декабря"],$s=new Set(["producer","organizer","host","moderator"]);function Es(e,a){const l=new Date(a),i=e.events.filter(o=>o.scheduledAt&&I(o.scheduledAt,l)===0).length,p=i?`Сегодня ${us(i)}.`:"",r=e.nextEvent;if(!r)return i?`${p} Больше ничего не запланировано.`:"Сегодня событий нет — самое время запланировать эфир или встречу.";const c=S(r);if(r.status==="live")return`${p} Сейчас идёт ${c?"эфир":"встреча"} «${r.title}».`.trim();const t=C(r.scheduledAt),m=c?"Ближайший эфир":"Ближайшая встреча";if(!t)return`${p} ${m} — «${r.title}».`.trim();const d=Math.ceil((t.getTime()-a)/6e4);let x;if(d<=0)x=c?"пора начинать":"уже пора подключаться";else if(d<60)x=`через ${d} ${$(d,"минуту","минуты","минут")}`;else{const o=I(t,l),n=w(t);o===0?x=`сегодня в ${n}`:o===1?x=`завтра в ${n}`:o>1&&o<7?x=`${Ds[z(t)]||z(t)} в ${n}`:x=`${t.getDate()} ${Rs[t.getMonth()]} в ${n}`}return`${p||"Сегодня событий нет."} ${m} — ${x}.`}function As(e,a){const[l,i]=u.useState(null),[p,r]=u.useState(null),[c,t]=u.useState(!0),m=u.useRef(0),d=u.useCallback(async(x=!1)=>{const o=++m.current;x||t(!0);try{const n=await R.get("/cabinet/home",{query:{workspaceId:e,from:ns(new Date).toISOString()}});if(o!==m.current)return;i({now:(n==null?void 0:n.now)||new Date().toISOString(),nextEvent:(n==null?void 0:n.nextEvent)||null,events:Array.isArray(n==null?void 0:n.events)?n.events:[],recordings:Array.isArray(n==null?void 0:n.recordings)?n.recordings:[]}),r(null)}catch(n){if(o!==m.current)return;(!x||!l)&&r(H(n,"Не удалось загрузить главную"))}finally{o===m.current&&t(!1)}},[e]);return u.useEffect(()=>{if(!a)return;d();const x=window.setInterval(()=>void d(!0),6e4),o=()=>void d(!0);return window.addEventListener("focus",o),()=>{window.clearInterval(x),window.removeEventListener("focus",o)}},[a,d]),{data:l,error:p,loading:c,reload:d}}function Ce(){const{user:e}=V(),{workspace:a,workspaceLoading:l,workspaceError:i,openQuickMeeting:p,reloadWorkspaces:r}=rs(),c=!l&&!!(a||i),{data:t,error:m,loading:d,reload:x}=As(a==null?void 0:a.id,c&&!!a),o=q(3e4),n=Z(e==null?void 0:e.name);return s.jsxs("div",{className:"sn-b-page",children:[s.jsxs("section",{className:"sn-b-hero",children:[s.jsx("span",{className:"sn-eyebrow",children:ss(new Date(o))}),s.jsxs("h1",{className:"sn-display sn-b-hero-title",children:[es(new Date(o)),n?`, ${n}`:""]}),t?s.jsx("p",{style:{fontSize:16,color:"var(--sn-ink-2)"},children:Es(t,o)}):!m&&!i?s.jsx(N,{width:420,height:20,style:{maxWidth:"100%"}}):null]}),i?s.jsx(M,{message:i,onRetry:()=>void r()}):m&&!t?s.jsx(M,{message:m,onRetry:()=>void x()}):!t||d&&!t?s.jsxs("div",{style:{height:243,borderRadius:24,background:"var(--sn-ink)",padding:32,display:"flex",flexDirection:"column",gap:18},"aria-busy":"true",children:[s.jsx(N,{width:220,height:24,style:{opacity:.15}}),s.jsx(N,{width:"50%",height:34,style:{opacity:.15}}),s.jsx(N,{width:"70%",height:20,style:{opacity:.15}})]}):t.nextEvent?s.jsx(Is,{ev:t.nextEvent,onStarted:()=>void x(!0)}):s.jsx(Ws,{}),s.jsx(Ms,{onQuick:p}),s.jsxs("section",{className:"sn-b-columns",children:[s.jsx(Us,{data:t,loading:!t&&!m,now:o}),s.jsx(qs,{data:t,loading:!t&&!m})]})]})}function Is({ev:e,onStarted:a}){const l=q(1e3),[i,p]=X(),r=S(e),c=C(e.scheduledAt),t=C(e.endsAt),m=e.status==="live",d=c?c.getTime()-l:0,x=u.useRef(!1);u.useEffect(()=>{!m&&c&&d<=0&&!x.current&&(x.current=!0,a())},[m,c,d,a]);let o="до начала",n="",h=!1;if(m)o="в эфире",n=W(Math.max(0,(l-(C(e.startedAt)||c||new Date(l)).getTime())/1e3));else if(c&&d>0)if(d>=864e5){const j=Math.floor(d/864e5);n=`${j} ${$(j,"день","дня","дней")}`,h=!0}else n=W(d/1e3);else c&&(o="начало в",n=w(c));const y=r?e.registrationsCount>0||e.access==="registration"?`${e.registrationsCount} ${$(e.registrationsCount,"зарегистрировался","зарегистрировались","зарегистрировались")}`:null:e.participantsCount>0?O(e.participantsCount):null,f=$s.has(e.myRole||"")||e.isCreator;return s.jsxs("section",{"aria-label":"Ближайшее событие",className:"sn-b-next",children:[s.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:14,minWidth:0},children:[s.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[s.jsx(b,{icon:r?s.jsx(D,{className:"sn-i sn-i-14"}):s.jsx(E,{className:"sn-i sn-i-14"}),style:{background:"rgba(255,255,255,.1)",color:"#DDE1E6"},children:r?"Трансляция":"Встреча"}),m?s.jsx(T,{}):s.jsx(b,{tone:"d-amber",children:"Ближайшее"}),e.myRole&&s.jsx("span",{style:{fontSize:13,color:"#A9B0B8"},children:F(e.myRole)})]}),s.jsx("h2",{className:"sn-display sn-b-next-title",children:s.jsx(k,{to:g.event(e.id),children:e.title})}),s.jsxs("div",{className:"sn-b-next-meta",children:[c&&s.jsxs("span",{children:[s.jsx(ys,{className:"sn-i"}),ts(c),",",s.jsxs("span",{className:"sn-mono",children:[w(c),t?`–${w(t)}`:""]})]}),y&&s.jsxs("span",{children:[s.jsx(gs,{className:"sn-i"}),y]}),e.speakers.length>0&&s.jsxs("span",{style:{gap:10},children:[s.jsx(Y,{people:e.speakers.map(j=>({name:j.name,src:j.avatarUrl})),size:28,max:3,ring:"var(--sn-ink)"}),P(e.speakers.length)]})]})]}),s.jsxs("div",{className:"sn-b-next-side",children:[n&&s.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:12},"aria-live":"off",children:[s.jsx("span",{style:{fontSize:14,color:"#A9B0B8"},children:o}),s.jsx("span",{className:`sn-mono sn-b-next-count${h?" is-text":""}`,children:n})]}),s.jsxs("div",{className:"sn-b-next-actions",children:[s.jsx(v,{variant:"dark",className:"sn-b-ghost",icon:p?s.jsx(_,{className:"sn-i sn-i-16"}):s.jsx(bs,{className:"sn-i sn-i-16"}),onClick:()=>i(os(e),r?"Ссылка для зрителей скопирована":"Ссылка на встречу скопирована"),children:r?"Ссылка для зрителей":"Ссылка на встречу"}),s.jsx(v,{variant:"primary",size:"lg",to:ls(e),iconRight:s.jsx(Ns,{className:"sn-i"}),children:r?"Войти в студию":"Войти во встречу"})]})]}),f&&s.jsx(zs,{ev:e})]})}let B=!1;function zs({ev:e}){const a=J(),[l,i]=u.useState(null),[p,r]=u.useState(null),[c,t]=u.useState(()=>new Set),m=JSON.stringify(e.readinessItems||[]),d=u.useRef(e.readinessItems||[]);d.current=e.readinessItems||[],u.useEffect(()=>{let n=!1;if(B){i(d.current);return}return R.get(`/rooms/${encodeURIComponent(e.id)}
1/readiness`).then(h=>{n||i(Array.isArray(h==null?void 0:h.items)?h.items:d.current)}).catch(h=>{h instanceof A&&h.status===404&&/cannot get/i.test(String(h.message))&&(B=!0),n||i(d.current)}),()=>{n=!0}},[e.id,m]);const x=u.useMemo(()=>{const n=l||[],h=n.filter(j=>!j.ok).slice(0,3),y=n.filter(j=>j.ok).slice(0,Math.max(0,4-h.length)),f=new Set([...h,...y]);return n.filter(j=>f.has(j))},[l]);if(!l||!x.length)return null;const o=async n=>{var y;const h=((y=n.action)==null?void 0:y.memberIds)||[];if(h.length){r(n.key);try{for(const f of h)await R.post(`/rooms/${encodeURIComponent(e.id)}/team/${encodeURIComponent(f)}/remind`);t(f=>new Set(f).add(n.key)),a.success(h.length>1?`Напоминание отправлено ${h.length} участникам команды`:"Напоминание отправлено")}catch(f){f instanceof A&&f.status===404?a.error("Напоминания пока недоступны — попробуйте чуть позже"):a.error(H(f,"Не удалось отправить напоминание"))}finally{r(null)}}};return s.jsx("ul",{className:"sn-b-chips","aria-label":"Готовность события",children:x.map(n=>{var f,j;const h=n.ok?"":n.severity==="problem"?" is-problem":" is-warning",y=c.has(n.key);return s.jsxs("li",{className:`sn-b-chip${h}`,title:n.detail||void 0,children:[n.ok?s.jsx(ks,{className:"sn-i sn-i-16"}):s.jsx(Cs,{className:"sn-i sn-i-16"}),s.jsx("span",{children:n.label}),((f=n.action)==null?void 0:f.kind)==="remind"&&s.jsxs("button",{type:"button",className:"sn-b-chip-action",disabled:p===n.key||y,onClick:()=>void o(n),children:[p===n.key?s.jsx("span",{className:"sn-spinner",style:{width:12,height:12}}):y?s.jsx(_,{className:"sn-i sn-i-14"}):null,y?"Отправлено":n.action.label||"Напомнить"]}),((j=n.action)==null?void 0:j.kind)==="link"&&n.action.to&&s.jsx(k,{className:"sn-b-chip-action",to:n.action.to,children:n.action.label||"Открыть"})]},n.key)})})}function Ws(){return s.jsxs("section",{className:"sn-b-empty-next","aria-label":"Ближайшее событие",children:[s.jsx("span",{style:{width:52,height:52,borderRadius:14,background:"var(--sn-blue-soft)",color:"var(--sn-blue)",display:"inline-flex",alignItems:"center",justifyContent:"center",flex:"none"},children:s.jsx(G,{className:"sn-i sn-i-24"})}),s.jsxs("div",{style:{flex:1,minWidth:0,display:"flex",flexDirection:"column",gap:6},children:[s.jsx("h2",{className:"sn-display",style:{fontSize:22,fontWeight:600,lineHeight:1.2},children:"Ближайших событий нет"}),s.jsx("p",{style:{fontSize:15,color:"var(--sn-ink-2)",maxWidth:560},children:"Запланируйте трансляцию или встречу — здесь появится таймер до начала, ссылка для зрителей и готовность команды."})]}),s.jsxs("div",{style:{display:"flex",gap:10,flexWrap:"wrap"},children:[s.jsx(v,{variant:"quiet",to:g.createMeeting(),icon:s.jsx(K,{className:"sn-i sn-i-16"}),children:"Запланировать"}),s.jsx(v,{variant:"primary",to:g.createBroadcast(),icon:s.jsx(D,{className:"sn-i sn-i-16"}),children:"Создать трансляцию"})]})]})}function Ms({onQuick:e}){const a=(l,i,p,r,c)=>s.jsxs(s.Fragment,{children:[s.jsx("span",{className:"sn-b-quick-ico",style:{background:i,color:p},children:l}),s.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:4,flexGrow:1,minWidth:0},children:[s.jsx("span",{style:{fontSize:17,fontWeight:600},children:r}),s.jsx("span",{style:{fontSize:14,color:"var(--sn-ink-3)"},children:c})]}),s.jsx(Ss,{className:"sn-i",style:{color:"var(--sn-ink-3)"}})]});return s.jsxs("section",{"aria-label":"Создать",className:"sn-b-quick",children:[s.jsx("button",{type:"button",className:"sn-b-quick-card",onClick:e,children:a(s.jsx(E,{className:"sn-i sn-i-24"}),"var(--sn-blue-soft)","var(--sn-blue)","Встреча сейчас","Комната откроется сразу, ссылка скопируется сама")}),s.jsx(k,{to:g.createBroadcast(),className:"sn-b-quick-card",children:a(s.jsx(D,{className:"sn-i sn-i-24"}),"var(--sn-red-soft)","var(--sn-red)","Трансляция","Эфир для зрителей: страница, регистрация, запись")}),s.jsx(k,{to:g.createMeeting(),className:"sn-b-quick-card",children:a(s.jsx(G,{className:"sn-i sn-i-24"}),"var(--sn-sunk)","var(--sn-ink-2)","Запланировать","Встреча или эфир на другое время")})]})}function Ls({ev:e,now:a}
1){if(e.status==="live")return s.jsx(T,{children:"В эфире"});const l=fs(e,a);return l?s.jsx(b,{tone:"amber",children:l}):!S(e)&&e.access==="invite"?s.jsx(b,{tone:"gray",icon:s.jsx(vs,{className:"sn-i sn-i-14"}),children:"Только по приглашению"}):S(e)&&!e.hasSpeaker?s.jsx(b,{tone:"red",children:"Нет спикера"}):S(e)?e.readiness.done>=e.readiness.total?s.jsx(b,{tone:"green",children:"Всё готово"}):s.jsxs(b,{tone:"amber",children:["Готово ",e.readiness.done," из ",e.readiness.total]}):s.jsx(b,{tone:"gray",children:"Встреча"})}function Bs(e){if(S(e)){const a=e.speakersCount>0?P(e.speakersCount):e.registrationsCount>0?js(e.registrationsCount):null;return[L(e),F(e.myRole),a].filter(Boolean).join(" · ")}return[L(e),e.participantsCount>0?O(e.participantsCount):null].filter(Boolean).join(" · ")}const Ts=6;function Us({data:e,loading:a,now:l}){var c;const i=u.useMemo(()=>((e==null?void 0:e.events)||[]).filter(t=>t.status==="scheduled"||t.status==="live").slice(0,Ts),[e]),p=(c=e==null?void 0:e.nextEvent)==null?void 0:c.id;let r="";return s.jsxs(U,{className:"sn-b-panel",children:[s.jsxs("div",{className:"sn-b-panel-head",children:[s.jsx("h2",{style:{fontSize:18,fontWeight:600},children:"Расписание"}),s.jsx(k,{to:g.events(),children:"Все события"})]}),a&&s.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:"4px 16px 12px"},children:[0,1,2].map(t=>s.jsx(N,{height:48,radius:12},t))}),!a&&e&&i.length===0&&s.jsxs("div",{style:{padding:"18px 16px 22px",display:"flex",flexDirection:"column",gap:10,alignItems:"flex-start"},children:[s.jsx("div",{style:{fontWeight:600},children:"В ближайшую неделю ничего не запланировано"}),s.jsx("div",{className:"sn-hint",style:{fontSize:14},children:"Встречи и эфиры, которые вы ведёте или продюсируете, появятся здесь."}),s.jsx(v,{variant:"quiet",size:"sm",to:g.createMeeting(),icon:s.jsx(K,{className:"sn-i sn-i-16"}),children:"Запланировать встречу"})]}),i.map(t=>{const m=C(t.scheduledAt),d=C(t.endsAt),x=cs(m),o=x!==r?ds(m,new Date(l)):null,n=r==="";return r=x,s.jsxs(Q.Fragment,{children:[o&&s.jsx("span",{className:"sn-eyebrow",style:{padding:n?"4px 16px 4px":"10px 16px 4px"},children:o}),s.jsxs(k,{to:ms(t),className:`sn-b-sched-row${t.id===p?" is-next":""}`,children:[s.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:2},children:[s.jsx("span",{className:"sn-mono",style:{fontSize:16,fontWeight:600},children:w(m)}),s.jsx("span",{className:"sn-mono",style:{fontSize:12,color:"var(--sn-ink-3)"},children:w(d)})]}),s.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:3,minWidth:0},children:[s.jsx("span",{className:"sn-ellipsis",style:{fontSize:15,fontWeight:600},children:t.title}),s.jsx("span",{className:"sn-ellipsis",style:{fontSize:13,color:"var(--sn-ink-3)"},children:Bs(t)})]}),s.jsx("span",{className:"sn-b-sched-tag",children:s.jsx(Ls,{ev:t,now:l})})]})]},t.id)})]})}function qs({data:e,loading:a}){const l=(e==null?void 0:e.recordings)||[];return s.jsxs(U,{className:"sn-b-panel",style:{gap:4},children:[s.jsxs("div",{className:"sn-b-panel-head",style:{paddingBottom:10},children:[s.jsx("h2",{style:{fontSize:18,fontWeight:600},children:"Записи и итоги"}),s.jsx(k,{to:g.recordings(),children:"Все записи"})]}),a&&s.jsx("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:"0 12px 12px"},children:[0,1,2].map(i=>s.jsxs("div",{style:{display:"flex",gap:14,alignItems:"center"},children:[s.jsx(N,{width:112,height:68,radius:10}),s.jsxs("div",{style:{flex:1,display:"flex",flexDirection:"column",gap:8},children:[s.jsx(N,{width:"70%",height:16}),s.jsx(N,{width:"45%",height:14})]})]},i))}),!a&&e&&l.length===0&&s.jsxs("div",{style:{padding:"18px 16px 22px",display:"flex",flexDirection:"column",gap:8},children:[s.jsx("span",{style:{width:44,height:44,borderRadius:12,background:"var(--sn-sunk)",color:"var(--sn-ink-2)",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:s.jsx(ws,{className:"sn-i sn-i-20"})}),s.jsx("div",{style:{fontWeight:600},children:"Записей пока нет"}),s.jsx("div",{className:"sn-hint",style:{fontSize:14},children:"После эфира или встречи с записью здесь появятся видео, расшифровка и AI-итоги."})]}),l.map(i=>{const p=xs(i.durationSeconds),r=[is(i.date),i.type==="broadcast"&&i.joinedCount>
10?hs(i.joinedCount):null].filter(Boolean).join(" · ");return s.jsxs(k,{to:g.recording(i.roomId),className:"sn-b-rec-row",children:[s.jsxs("span",{className:"sn-b-thumb",children:[i.thumbnailUrl?s.jsx("img",{src:as(i.thumbnailUrl)||void 0,alt:"",loading:"lazy"}):i.type==="broadcast"?s.jsx(D,{className:"sn-i sn-i-24"}):s.jsx(E,{className:"sn-i sn-i-24"}),p&&s.jsx("span",{className:"sn-mono sn-b-thumb-badge",children:p})]}),s.jsxs("span",{style:{display:"flex",flexDirection:"column",gap:6,minWidth:0},children:[s.jsx("span",{className:"sn-ellipsis",style:{fontSize:15,fontWeight:600},children:i.title}),s.jsxs("span",{style:{display:"flex",alignItems:"center",gap:8,flexWrap:"wrap"},children:[s.jsx("span",{style:{fontSize:13,color:"var(--sn-ink-3)"},children:r}),s.jsx(ps,{state:i.state,summaryReady:i.summaryReady,tasksCount:i.tasksCount})]})]})]},i.roomId)})]})}export{Ce as default};

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.