@mavea/mavea 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +15 -0
- package/dist/.vite/manifest.json +298 -298
- package/dist/assets/{AnnotationLayer-qV6CIUZv.js → AnnotationLayer-8JABh1Dm.js} +0 -0
- package/dist/assets/{AppCommandPalette-BHaYBZ5e.js → AppCommandPalette-CgDUWU08.js} +1 -1
- package/dist/assets/{CheckLogRail-DkHIHL0E.js → CheckLogRail-DO7sbZwC.js} +1 -1
- package/dist/assets/{ConversationVideoStudio-C1sd4k53.js → ConversationVideoStudio-tpqQQnOs.js} +1 -1
- package/dist/assets/{CourseLessonReader-YCcNKEW7.js → CourseLessonReader-PFJn-4tj.js} +2 -2
- package/dist/assets/{CoursesApp-Dz6xjf4V.js → CoursesApp-5pnHYJR8.js} +1 -1
- package/dist/assets/{DashPresent-5SRScC2i.js → DashPresent-B6MP1i_4.js} +1 -1
- package/dist/assets/{DashboardDetail-DOfm8UCQ.js → DashboardDetail-DYFghZ4p.js} +1 -1
- package/dist/assets/{DashboardLoopGate-Cf0y_HQ7.js → DashboardLoopGate-C0blM1w9.js} +2 -2
- package/dist/assets/DashboardLoopRuntime-C9R-z9-o.js +1 -0
- package/dist/assets/{DashboardsApp-_gbfdbX6.js → DashboardsApp-Dh_jh1dF.js} +2 -2
- package/dist/assets/{DeepZoomApp-BOLEl-kQ.js → DeepZoomApp-UEPtylG7.js} +1 -1
- package/dist/assets/{DelegatePanel-CHEB-OZl.js → DelegatePanel-DKWsRY9I.js} +1 -1
- package/dist/assets/{DemoGallery-DBqnu8TR.js → DemoGallery-CkuqAXje.js} +1 -1
- package/dist/assets/{DropSelect-DjbdVfIR.js → DropSelect-QcBm3N4D.js} +1 -1
- package/dist/assets/{ExportModal-CLobMv1F.js → ExportModal-Ya0VBbxa.js} +1 -1
- package/dist/assets/{ExtractionPreview-QZ2VHmsb.js → ExtractionPreview-BFrmqKDo.js} +1 -1
- package/dist/assets/{FeatureUseNotice-Dc8joBGM.js → FeatureUseNotice-Dc3GNBvy.js} +1 -1
- package/dist/assets/{FlagshipCommandPalette-DnWuBjYI.js → FlagshipCommandPalette-B1yHwI6V.js} +1 -1
- package/dist/assets/{FlagshipShowcase-3qQDOK6g.js → FlagshipShowcase-BHAlRDAE.js} +1 -1
- package/dist/assets/{FlashcardsApp-BQGM-Tr1.js → FlashcardsApp-DteNeHpz.js} +1 -1
- package/dist/assets/{GalleryApp-BWQ-J450.js → GalleryApp-DziLKFJZ.js} +1 -1
- package/dist/assets/{HonestByDesign-57LDf-gm.js → HonestByDesign-DZltb3Ss.js} +1 -1
- package/dist/assets/{HowItWorks-DMfPX3GK.js → HowItWorks-D-hgfN6a.js} +1 -1
- package/dist/assets/{LegalApp-CcO5Qq6R.js → LegalApp-ChzcKiY0.js} +1 -1
- package/dist/assets/{LegalMarkdownDocument-Be_fQbZ_.js → LegalMarkdownDocument-j6UHhPnp.js} +1 -1
- package/dist/assets/{LegalPageShell-B-HY1WG7.js → LegalPageShell-Wcsviye1.js} +1 -1
- package/dist/assets/{LibraryOverlay-BilW6q_z.js → LibraryOverlay-YHBrdVKo.js} +1 -1
- package/dist/assets/{LiveApp-DH3OxJFV.js → LiveApp-D6vkyhZb.js} +3 -3
- package/dist/assets/{LiveSettings-CuVMy7rZ.js → LiveSettings-C9cKOrSb.js} +1 -1
- package/dist/assets/{PinToDashboard-Cz5UJCmq.js → PinToDashboard-BCiWaSg8.js} +1 -1
- package/dist/assets/{PlanReview-CmUxzNqL.js → PlanReview-BIERfK1t.js} +1 -1
- package/dist/assets/{PresentationDeck-B_EI33Pp.js → PresentationDeck-BW_7qecK.js} +1 -1
- package/dist/assets/{PrismApp-DtLsPiQF.js → PrismApp-BY71jJvW.js} +2 -2
- package/dist/assets/{PrismBriefingPlayer-DzdtnFj4.js → PrismBriefingPlayer-DLAPs6eZ.js} +2 -2
- package/dist/assets/{PrismOverlay-D1cDZamt.js → PrismOverlay-DJDGPGxo.js} +3 -3
- package/dist/assets/{PrismWorkbench-BEIp4MiL.js → PrismWorkbench-DHLvpguj.js} +1 -1
- package/dist/assets/{PrivacyApp-B4DT2RUz.js → PrivacyApp-uMjq2z14.js} +1 -1
- package/dist/assets/{ReplayCard-Dx46HCBT.js → ReplayCard-F7U3LYAg.js} +2 -2
- package/dist/assets/{ReplayOverlay-CnJAxf0u.js → ReplayOverlay-BTldvkU7.js} +1 -1
- package/dist/assets/{RippleApp-D5j2VCt2.js → RippleApp-DZw8op-E.js} +2 -2
- package/dist/assets/{RippleOverlay-zcXAHPuJ.js → RippleOverlay-D7ItTvS-.js} +2 -2
- package/dist/assets/{SeeDontRead-Dqfzha0V.js → SeeDontRead-DmmtWAzn.js} +1 -1
- package/dist/assets/{ShareModal-DWxlrJSz.js → ShareModal-9jSn52Mw.js} +2 -2
- package/dist/assets/{ShipCourse-BavQppkt.js → ShipCourse-Up9gRR07.js} +1 -1
- package/dist/assets/{SignatureLoop-L8W2h62w.js → SignatureLoop-Cq790dMw.js} +1 -1
- package/dist/assets/{SynthesisApp-C2O6pFeM.js → SynthesisApp-4ZPLZgmJ.js} +2 -2
- package/dist/assets/{SynthesisOverlay-DLvwiSMv.js → SynthesisOverlay-iesJ0hEt.js} +1 -1
- package/dist/assets/{TermsApp-CxY1yorm.js → TermsApp-DL2hFKsv.js} +1 -1
- package/dist/assets/{TopicCanvas-LMI0zC7R.js → TopicCanvas-DozfZFto.js} +2 -2
- package/dist/assets/{TourPrism-CI-iJZil.js → TourPrism-kInUOv-M.js} +1 -1
- package/dist/assets/{TrackerTile-oz6IoG8m.js → TrackerTile-BryDo0sm.js} +2 -2
- package/dist/assets/{TwoSurfaces-Rnf-_WgY.js → TwoSurfaces-Cmj95ofx.js} +1 -1
- package/dist/assets/{WorldOverlay-BaQNNClA.js → WorldOverlay-yhxq328s.js} +1 -1
- package/dist/assets/{WowFeatures-C4efSbNV.js → WowFeatures-DDICbxl_.js} +1 -1
- package/dist/assets/{ZoomDeck-CBrr0yfy.js → ZoomDeck-CKOjYS9z.js} +1 -1
- package/dist/assets/canvas-vqIFVmtP.js +1 -0
- package/dist/assets/{capture-D8uPIcfj.js → capture-9OrAc1p2.js} +1 -1
- package/dist/assets/{confirmAdd-DzMO9jKV.js → confirmAdd-DkmbWaSk.js} +1 -1
- package/dist/assets/{dashboardEvents-DKl5rrTD.js → dashboardEvents-D-XVj666.js} +1 -1
- package/dist/assets/{generateBeats-DZHkvFvh.js → generateBeats-DtptFLlG.js} +1 -1
- package/dist/assets/{index-DmKgC_TJ.css → index-DrzNHwlO.css} +1 -1
- package/dist/assets/{index-Dk0QapqQ.js → index-zIa6h_8b.js} +3 -3
- package/dist/assets/{kokoro-P_fkcX-A.js → kokoro-B3oG_8sd.js} +1 -1
- package/dist/assets/{loader-DKJEcbPm.js → loader-DCA6Njbf.js} +2 -2
- package/dist/assets/{notes-B0-EE0FK.js → notes-B6eX5XWk.js} +1 -1
- package/dist/assets/{perfProbe-B9zJpjo9.js → perfProbe-CE7hsUEo.js} +1 -1
- package/dist/assets/{pin-CZAIlpXt.js → pin-BZuh1acO.js} +1 -1
- package/dist/assets/{portal-Dogggsub.js → portal-k_BMgWND.js} +1 -1
- package/dist/assets/{prewarm-B4ELBOxf.js → prewarm-uKxmzjjd.js} +1 -1
- package/dist/assets/{quietHours-CeBje_uU.js → quietHours-DI1ayIIq.js} +1 -1
- package/dist/assets/{registry-GeAC3ZD7.js → registry-1wlTAh5b.js} +1 -1
- package/dist/assets/{registry-CqhpLHM7.js → registry-B2QzCuWH.js} +1 -1
- package/dist/assets/{registry-CD1s3eQ-.js → registry-DtV2UjBx.js} +1 -1
- package/dist/assets/{registry-6MOD-I7p.js → registry-Dwbh-GWu.js} +1 -1
- package/dist/assets/{relate-BYdM5eiV.js → relate-UW-sUlJH.js} +1 -1
- package/dist/assets/{replay-TYXO0Brm.js → replay-B5TkHPri.js} +1 -1
- package/dist/assets/{useDashboardLoop-DDqCFJKY.js → useDashboardLoop-BoVNM-pT.js} +1 -1
- package/dist/assets/{useStudy-GwNcQWtv.js → useStudy-5CsF_L-s.js} +1 -1
- package/dist/assets/{walkSync-CPsd-xu7.js → walkSync-CT8kmbzY.js} +1 -1
- package/dist/index.html +2 -2
- package/package.json +1 -1
- package/dist/assets/DashboardLoopRuntime-CnN5VayH.js +0 -1
- package/dist/assets/canvas-Bsx3eSaS.js +0 -1
|
Binary file
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./jsx-runtime-DeHZSEgm.js";import{j as n}from"./index-
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./jsx-runtime-DeHZSEgm.js";import{j as n}from"./index-zIa6h_8b.js";import{t as r}from"./registry-DGNSqTxE.js";import{CommandPalette as i}from"./CommandPalette-Bs6tpdZl.js";import{t as a}from"./demoPaletteItems-NPCSaSU6.js";var o=e(),s=t();function c({onClose:e,startTour:t,watchInLive:c,enterLive:l}){let u=(0,o.useMemo)(()=>a(r,{direct:{dashboards:()=>{window.location.hash=`#/dashboards`},how:t},watchInLive:c,enterLive:l}).map(e=>({...e,watch:e.feature.id===`how`?t:e.watch,preload:e.feature.id===`dashboards`?()=>n(`#/dashboards`)??Promise.resolve():()=>n(`#/live`)??Promise.resolve()})),[l,t,c]);return(0,s.jsx)(i,{items:u,surface:`demo`,onClose:e})}export{c as AppCommandPalette};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{o as r}from"./ledger-Cv0LBflx.js";import{t as i}from"./useLedger-1WVXef68.js";import{c as a,l as o}from"./dashboardEvents-
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{o as r}from"./ledger-Cv0LBflx.js";import{t as i}from"./useLedger-1WVXef68.js";import{c as a,l as o}from"./dashboardEvents-D-XVj666.js";import{n as s,t as c}from"./checkLogModel-BMtruriG.js";var l=e(),u=t(),d=n();function f(e){return e.domains?.length?e.domains.join(`, `):e.manual?`MANUAL`:`MAVÉA`}function p(e){let t=(0,u.c)(34),{entry:n}=e,r;t[0]===n?r=t[1]:(r=c(n),t[0]=n,t[1]=r);let i=r,l=n.kind===`savings`?n.suggestion:void 0,p;t[2]===n.at?p=t[3]:(p=s(n.at),t[2]=n.at,t[3]=p);let m;t[4]===p?m=t[5]:(m=(0,d.jsx)(`span`,{className:`dash-log-time`,children:p}),t[4]=p,t[5]=m);let h;t[6]===i?h=t[7]:(h=i&&(0,d.jsx)(`span`,{className:`dash-log-chip dash-log-chip--${i.tone}`,children:i.label}),t[6]=i,t[7]=h);let g;t[8]!==m||t[9]!==h?(g=(0,d.jsxs)(`div`,{className:`dash-log-row-top`,children:[m,h]}),t[8]=m,t[9]=h,t[10]=g):g=t[10];let _;t[11]===n.text?_=t[12]:(_=(0,d.jsx)(`p`,{className:`dash-log-text`,children:n.text}),t[11]=n.text,t[12]=_);let v;t[13]!==n.id||t[14]!==l?(v=l&&l.state===`open`&&(0,d.jsxs)(`div`,{className:`dash-log-suggestion`,children:[(0,d.jsxs)(`button`,{type:`button`,className:`dash-log-apply-btn`,onClick:()=>a(n.id,l.dashboardId,l.to),children:[`Apply — save ~`,l.savesPerMonth,` searches/mo`]}),(0,d.jsx)(`button`,{type:`button`,className:`dash-log-dismiss-btn`,onClick:()=>o(n.id),children:`Dismiss`})]}),t[13]=n.id,t[14]=l,t[15]=v):v=t[15];let y;t[16]===l?y=t[17]:(y=l&&l.state===`applied`&&(0,d.jsx)(`div`,{className:`dash-log-suggestion`,children:(0,d.jsx)(`span`,{className:`dash-log-applied`,children:`Applied ✓`})}),t[16]=l,t[17]=y);let b;t[18]===n?b=t[19]:(b=f(n),t[18]=n,t[19]=b);let x;t[20]===b?x=t[21]:(x=(0,d.jsx)(`span`,{className:`dash-log-source`,children:b}),t[20]=b,t[21]=x);let S;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,d.jsx)(`span`,{className:`dash-log-dot`,"aria-hidden":`true`}),t[22]=S):S=t[22];let C=n.searches===1?`1 SEARCH`:`NO SEARCH SPENT`,w;t[23]===C?w=t[24]:(w=(0,d.jsx)(`span`,{className:`dash-log-cost`,children:C}),t[23]=C,t[24]=w);let T;t[25]!==x||t[26]!==w?(T=(0,d.jsxs)(`div`,{className:`dash-log-foot`,children:[x,S,w]}),t[25]=x,t[26]=w,t[27]=T):T=t[27];let E;return t[28]!==T||t[29]!==g||t[30]!==_||t[31]!==v||t[32]!==y?(E=(0,d.jsxs)(`li`,{className:`dash-log-row`,children:[g,_,v,y,T]}),t[28]=T,t[29]=g,t[30]=_,t[31]=v,t[32]=y,t[33]=E):E=t[33],E}var m=100;function h({dashboardId:e,now:t,limit:n=m}){let a=i(),o=(0,l.useMemo)(()=>e?a.filter(t=>t.dashboardIds.includes(e)):a,[a,e]),s=(0,l.useMemo)(()=>r(o,t),[o,t]),c=(0,l.useMemo)(()=>o.slice(0,Math.max(0,n)),[o,n]);return(0,d.jsxs)(`section`,{className:`card dash-log-card`,"aria-label":`Check log`,children:[(0,d.jsxs)(`div`,{className:`card-eyebrow dash-log-head`,children:[e?`CHECK LOG · `:``,`TODAY · `,s,` SEARCHES USED`]}),c.length===0?(0,d.jsx)(`p`,{className:`dash-log-empty`,children:`Your check log will appear here.`}):(0,d.jsx)(`ul`,{className:`dash-log-list`,role:`log`,"aria-live":`polite`,"aria-relevant":`additions`,children:c.map(e=>(0,d.jsx)(p,{entry:e},e.id))})]})}export{h as t};
|
package/dist/assets/{ConversationVideoStudio-C1sd4k53.js → ConversationVideoStudio-tpqQQnOs.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{h as r,u as i}from"./index-Dk0QapqQ.js";import{n as a}from"./icons-gLFQTv74.js";import{t as o}from"./TopicCanvas-LMI0zC7R.js";import{t as s}from"./motion-BY_Egaxm.js";import{t as c}from"./toast-BBNs2h3L.js";import{t as l}from"./Presence-UqXfH4Y-.js";import{a as u,c as d,i as f,r as p,t as m}from"./capture-D8uPIcfj.js";import{i as ee,n as te,r as ne,t as re}from"./share-kW3pZ027.js";import{t as ie}from"./FeatureUseNotice-Dc8joBGM.js";import{r as h}from"./history-D2EH2X6D.js";import{t as g}from"./replay-TYXO0Brm.js";import"./canvas-Bsx3eSaS.js";import{t as _}from"./AnnotationLayer-qV6CIUZv.js";var v=e(),y=t(),b=18e4,x=650,S=350;function C(e){let t=[e.spoken??e.narration,...e.tour.map(e=>e.saySpoken??e.say??``)].reduce((e,t)=>e+t.trim().length,0);return 1e3+Math.max(1800,t/14*1e3)}function ae(e){return e.reduce((e,t)=>e+C(t),0)}function oe(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n?.topicShift===!0||n?.topicShift===void 0&&n?.mode===`replace`)return t}return 0}function w(e,t,n){let r=n.spans[e+1];return r?r.startMs:x+Math.max(0,n.durationMs-x-S)*(e+1)/(t+1)}function T(e,t,n){let r=[],i=0;return e.forEach((e,a)=>{let o=t[a];if(!o)return;let s=g(e),c=s.cues.map((e,t)=>w(t,s.cues.length,o)),l=[0,x,...c,o.durationMs].map(e=>Math.max(0,Math.min(o.durationMs,e))).filter((e,t,n)=>t===0||e>n[t-1]),u=[];for(let t=0;t<l.length-1;t++){let d=l[t],f=l[t+1],p=c.findIndex(e=>e===d),m=p>=0?s.cues[p]:void 0;m&&n.penMarks&&(u=[...u,...m.marks.map((t,n)=>({spot:m.spot,line:m.say,mark:t,delayMs:n*240,...t.kind===`connect`&&typeof t.onIndex==`number`?{toSpot:e.spec.blocks[t.onIndex]?.id}:{}}))]);let ee=[...o.spans].reverse().find(e=>e.startMs<=d&&e.endMs>d);r.push({frame:e,turnIndex:a,startMs:i+d,durationMs:Math.max(1,f-d),spot:n.spotlights?m?.spot??null:null,caption:n.captions?ee?.text??null:null,ink:u,questionOnly:t===0})}i+=o.durationMs}),r}var E=24e3,D=.65,O=.18,k=.35,se=.89,A=6,j=class extends Error{turnIndex;question;constructor(e,t){super(`Narration is unavailable for “${t||`turn ${e+1}`}”.`),this.turnIndex=e,this.question=t,this.name=`RequiredConversationAudioError`}};function M(e){return[e.spoken??e.narration,...e.tour.map(e=>e.saySpoken??e.say??``)].map(e=>e.trim()).filter(Boolean)}function N(e){return e.trim().replace(/\s+/g,` `)}function P(e,t){let n=M(e);return n.length>0&&t.pcm.length>0&&t.spans.length===n.length&&n.every((e,n)=>N(t.spans[n]?.text??``)===N(e)&&t.spans[n].t1>t.spans[n].t0)}function F(e){let t=e.spans.map(e=>({text:e.text,startMs:Math.round((D+e.t0)*1e3),endMs:Math.round((D+e.t1)*1e3)}));return{lines:[{text:t.map(e=>e.text).join(` `),pcm:e.pcm,rate:e.sampleRate}],durationS:D+e.duration+k,spans:t}}async function I(e,t,n){let r=M(e);if(!r.length)throw new j(t,e.question);let i=[];for(let a of r){if(n?.aborted)throw new DOMException(`Cancelled`,`AbortError`);let r=await d(a,n);if(n?.aborted)throw new DOMException(`Cancelled`,`AbortError`);if(!r.length)throw new j(t,e.question);i.push({text:a,pcm:r,rate:E})}let a=[],o=D;for(let e of i){let t=o;o+=e.pcm.length/e.rate,a.push({text:e.text,startMs:Math.round(t*1e3),endMs:Math.round(o*1e3)}),o+=O}return{lines:i,durationS:o+k,spans:a}}async function ce(e,t,n){let r=i();if(!r||typeof OfflineAudioContext>`u`)throw Error(`audio-encoding-unavailable`);let a=[];for(let r=0;r<e.length;r++){let i=e[r],o=t(i);a.push(o&&P(i,o)?F(o):await I(i,r,n))}let o=a.reduce((e,t)=>e+t.durationS,0);if(o*1e3>18e4)throw Error(`conversation-too-long`);let s=0;for(let e of a)for(let t of e.lines)for(let e=0;e<t.pcm.length;e++)s=Math.max(s,Math.abs(t.pcm[e]));let c=s>0?Math.min(A,se/s):1,l=new OfflineAudioContext(1,Math.ceil(o*r.sampleRate),r.sampleRate),u=l.createGain();u.gain.value=c,u.connect(l.destination);let d=0;for(let e of a){let t=d+D;for(let n of e.lines){let e=l.createBuffer(1,n.pcm.length,n.rate);e.getChannelData(0).set(n.pcm);let r=l.createBufferSource();r.buffer=e,r.connect(u),r.start(t),t+=n.pcm.length/n.rate+O}d+=e.durationS}return{buffer:await l.startRendering(),turns:a.map(e=>({durationMs:Math.round(e.durationS*1e3),spans:e.spans})),durationMs:Math.round(o*1e3)}}var le={"1080p":{width:1920,height:1080},"720p":{width:1280,height:720}};function L(e,t,n=r()){let{bitrate:i}=m(e,n);return t===`720p`?Math.round(i*.55):i}async function R(e){document.visibilityState===`hidden`&&await new Promise((t,n)=>{let r=()=>a(new DOMException(`Cancelled`,`AbortError`)),i=()=>{document.visibilityState!==`hidden`&&a()},a=a=>{document.removeEventListener(`visibilitychange`,i),e.removeEventListener(`abort`,r),a?n(a):t()};document.addEventListener(`visibilitychange`,i),e.addEventListener(`abort`,r,{once:!0})})}function ue(){return typeof document<`u`&&(typeof VideoEncoder<`u`&&typeof AudioEncoder<`u`||u()!==null)}async function de(e){let t=r(),n=le[e.size],i=e.scenes[0];i&&await e.applyScene(i,0);let a=getComputedStyle(e.el).backgroundColor,o=await f({el:e.el,audioBuffer:e.audioBuffer,aspect:`16:9`,dims:{w:n.width,h:n.height},quality:e.quality,bitrate:L(e.quality,e.size,t),background:a&&a!==`rgba(0, 0, 0, 0)`?a:void 0,maxDurationMs:e.durationMs}),s=performance.now();try{for(let t=1;t<e.scenes.length;t++){let n=e.scenes[t];for(;performance.now()-s<n.startMs;){if(e.signal.aborted)throw new DOMException(`Cancelled`,`AbortError`);await R(e.signal),await new Promise(e=>setTimeout(e,25))}await e.applyScene(n,t),e.onProgress?.({phase:`render`,completed:t+1,total:e.scenes.length})}for(;performance.now()-s<e.durationMs;){if(e.signal.aborted)throw new DOMException(`Cancelled`,`AbortError`);await R(e.signal),await new Promise(e=>setTimeout(e,25))}e.onProgress?.({phase:`encode`,completed:0,total:1});let t=await o.stop();return e.onProgress?.({phase:`ready`,completed:1,total:1}),{...t,...n}}catch(e){throw o.cancel(),e}}var z=n();function B({scene:e,options:t,frameRef:n,glide:r=!0}){let i=(0,v.useRef)(null),a=(0,v.useRef)(null),[s,c]=(0,v.useState)(0);(0,v.useEffect)(()=>(n?.(i.current),()=>n?.(null)),[n]),(0,v.useEffect)(()=>{let t=a.current;if(!t)return;let n=0;if(e?.spot){let r=[...t.querySelectorAll(`[data-spot-id]`)].find(t=>t.dataset.spotId===e.spot);if(!r)return;let i=t.getBoundingClientRect(),a=r.getBoundingClientRect();n=Math.max(0,t.scrollTop+a.top-i.top-(t.clientHeight-a.height)/2)}typeof t.scrollTo==`function`?t.scrollTo({top:n,behavior:r?`smooth`:`auto`}):t.scrollTop=n;let i=window.setTimeout(()=>c(e=>e+1),420);return()=>window.clearTimeout(i)},[e?.spot,e?.turnIndex,r]);let u=e?.questionOnly??!1,d=e?e.frame.question||e.frame.spec.title:``;return(0,z.jsx)(`div`,{ref:i,className:`cvs-stage`,"data-aspect":`16:9`,"data-question-only":u,"data-captioned":t.captions,children:e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{className:`cvs-header`,children:[(0,z.jsxs)(`div`,{className:`cvs-brand`,children:[(0,z.jsx)(`span`,{className:`cvs-brand-dot`}),` Mavéa conversation`]}),(0,z.jsxs)(`div`,{className:`cvs-turn`,children:[`Turn `,e.turnIndex+1]}),(0,z.jsx)(`h2`,{children:d})]}),u?(0,z.jsxs)(`div`,{className:`cvs-ask`,children:[(0,z.jsx)(`span`,{className:`cvs-ask-eyebrow`,children:`Asked`}),(0,z.jsx)(`p`,{className:`cvs-ask-line`,children:d})]}):(0,z.jsxs)(`div`,{ref:a,className:`cvs-canvas`,children:[(0,z.jsx)(`div`,{className:`topic-wrap`,children:(0,z.jsx)(o,{data:e.frame.spec,spot:e.spot,built:{},onProve:()=>{}})},e.turnIndex),t.penMarks&&(0,z.jsx)(_,{spots:e.ink,within:i.current,revision:s})]}),t.captions&&e.caption&&(0,z.jsx)(`div`,{className:`cvs-caption`,children:e.caption}),t.presence&&(0,z.jsx)(`div`,{className:`cvs-presence`,children:(0,z.jsx)(l,{state:u?`thinking`:`speaking`})})]}):(0,z.jsx)(`div`,{className:`cvs-empty`,children:`Choose a turn to preview it.`})})}var fe=[{id:`1080p`,label:`1080p`,hint:`1920×1080`},{id:`720p`,label:`720p`,hint:`1280×720`}],pe=[{id:`balanced`,label:`Balanced`},{id:`high`,label:`High`},{id:`ultra`,label:`Ultra`}],V=650;function H(e=300){return Promise.race([(async()=>{await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e()))})(),new Promise(t=>window.setTimeout(t,e))])}var me=[{key:`captions`,label:`Captions`},{key:`spotlights`,label:`Spotlights`},{key:`penMarks`,label:`Pen marks`},{key:`presence`,label:`Mavéa`}];function U(e){let t=Math.max(0,Math.round(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`}function he(e){let t=(0,y.c)(12),{width:n,height:r,children:i}=e,a=(0,v.useRef)(null),[o,s]=(0,v.useState)(0),c,l;t[0]!==r||t[1]!==n?(c=()=>{let e=a.current;if(!e)return;let t=()=>{let{width:t,height:i}=e.getBoundingClientRect();!t||!i||s(Math.min(t/n,i/r))};if(t(),typeof ResizeObserver>`u`)return;let i=new ResizeObserver(t);return i.observe(e),()=>i.disconnect()},l=[n,r],t[0]=r,t[1]=n,t[2]=c,t[3]=l):(c=t[2],l=t[3]),(0,v.useLayoutEffect)(c,l);let u=`scale(${o})`,d=o?void 0:`hidden`,f;t[4]!==r||t[5]!==u||t[6]!==d||t[7]!==n?(f={width:n,height:r,transform:u,visibility:d},t[4]=r,t[5]=u,t[6]=d,t[7]=n,t[8]=f):f=t[8];let p;return t[9]!==i||t[10]!==f?(p=(0,z.jsx)(`div`,{ref:a,className:`cvs-viewport`,children:(0,z.jsx)(`div`,{className:`cvs-scaler`,style:f,children:i})}),t[9]=i,t[10]=f,t[11]=p):p=t[11],p}function ge(e){return e.map(e=>{let t=C(e);return{durationMs:t,spans:[{text:e.narration,startMs:650,endMs:Math.max(651,t-350)}]}})}function W({frames:e,retainedAudio:t,onShared:n,onBusyChange:r,frameRef:i}){let o=(0,v.useMemo)(()=>e.filter(e=>!!((e.spoken??e.narration).trim()||e.tour.some(e=>(e.saySpoken??e.say)?.trim()))),[e]),[l,u]=(0,v.useState)(()=>new Set(o.length?[h(o[o.length-1])]:[])),d=(0,v.useMemo)(()=>new Set(o.map(h)),[o]),[f,m]=(0,v.useState)({size:`1080p`,quality:`high`,captions:!0,spotlights:!0,penMarks:!0,presence:!0}),g=(0,v.useMemo)(()=>e.filter(e=>l.has(h(e))),[e,l]),_=(0,v.useMemo)(()=>ae(g),[g]),y=(0,v.useMemo)(()=>T(g,ge(g),f),[g,f]),[x,S]=(0,v.useState)(()=>y[0]??null),[C,w]=(0,v.useState)(null),[E,D]=(0,v.useState)(null),[O,k]=(0,v.useState)(null),[se,A]=(0,v.useState)(!1),[M,N]=(0,v.useState)(!1),[P,F]=(0,v.useState)(0),[I,L]=(0,v.useState)(!1),[R,W]=(0,v.useState)(!1),G=(0,v.useRef)(null),K=(0,v.useRef)(null),q=(0,v.useRef)(null),J=C!==null&&C.phase!==`ready`,Y=ue(),X=(0,v.useMemo)(()=>s(),[]),Z=M&&!J&&!X&&y.length>1;(0,v.useEffect)(()=>r?.(J),[J,r]),(0,v.useEffect)(()=>{if(!J){W(!1);return}let e=()=>W(document.visibilityState===`hidden`);return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[J]),(0,v.useEffect)(()=>N(!0),[]),(0,v.useEffect)(()=>{let e=X?y.findIndex(e=>!e.questionOnly):0;F(Math.max(0,e)),L(!1)},[y,X]),(0,v.useEffect)(()=>{J||S(y[P]??y[0]??null)},[y,P,J]),(0,v.useEffect)(()=>{if(!Z||I)return;let e=y[P]??y[0],t=window.setTimeout(()=>F(e=>(e+1)%y.length),Math.max(V,e?.durationMs??V));return()=>window.clearTimeout(t)},[Z,I,y,P]),(0,v.useEffect)(()=>()=>{G.current?.abort(),K.current?.dispose?.(),K.current=null,r?.(!1)},[r]);let _e=(0,v.useCallback)(async e=>{S(e),await H()},[]),Q=(0,v.useCallback)(()=>{K.current?.dispose?.(),K.current=null,D(null),w(null)},[]),ve=(0,v.useCallback)(async()=>{if(!g.length||_>18e4)return;let e=new AbortController;G.current=e,Q(),k(null),w({phase:`audio`,completed:0,total:g.length}),A(!0);try{await H();let n=q.current;if(!n)throw Error(`capture-stage-unavailable`);let r=await ce(g,t??(()=>null),e.signal),i=T(g,r.turns,f);if(!i.length)throw Error(`empty-video`);w({phase:`render`,completed:1,total:i.length});let a=await de({el:n,scenes:i,audioBuffer:r.buffer,durationMs:r.durationMs,size:f.size,quality:f.quality,signal:e.signal,applyScene:_e,onProgress:w});K.current=a,D(a),w(null)}catch(e){if(e?.name===`AbortError`){w(null);return}let t=e instanceof j?`${e.message} Check the local voice service, then retry.`:e instanceof Error&&e.message===`conversation-too-long`?`The voiced result is over three minutes. Remove a turn and retry.`:e instanceof Error&&e.message===`open-codec-unavailable`?`This browser cannot encode an approved open-media format (AV1/VP9/VP8 with Opus). Try the current Chrome, Edge, or Firefox.`:`The video could not be created in this browser. Your conversation is unchanged.`;k(t),w(null)}finally{A(!1)}},[_e,Q,_,f,t,g]),$=e=>{J||(u(new Set(e.map(h))),Q(),k(null))},ye=le[f.size],be=re(ee(g[0]?.spec.title||g[0]?.question,new Date),E?.type??``),xe=C?C.phase===`audio`?`Preparing required narration…`:C.phase===`render`?`Rendering scene ${C.completed} of ${C.total}…`:C.phase===`encode`?`Finishing the file…`:`Video ready`:``,Se=_>b;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`shm-panel cvs-panel`,children:[(0,z.jsx)(`div`,{className:`shm-eyebrow`,children:`▷ CONVERSATION VIDEO`}),(0,z.jsx)(`div`,{className:`cvs-title`,children:`Share this conversation.`}),(0,z.jsx)(`div`,{className:`shm-sub`,children:`Pick the turns worth sending. Mavéa narrates every one. The video renders locally in this browser and is never uploaded.`}),(0,z.jsx)(ie,{kind:`publishing`,from:`live`}),(0,z.jsxs)(`div`,{className:`cvs-presets`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(o.slice(-1)),disabled:J,children:`Current turn`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(e.slice(oe(e)).filter(e=>d.has(h(e)))),disabled:J,children:`Current topic`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(o),disabled:J,children:`All turns`})]}),(0,z.jsx)(`div`,{className:`cvs-turns`,role:`group`,"aria-label":`Conversation turns`,children:e.map((e,t)=>{let n=h(e),r=d.has(n);return(0,z.jsxs)(`label`,{className:`cvs-turn-card`,"data-selected":l.has(n),children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:l.has(n),disabled:J||!r,onChange:()=>{u(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),Q()}}),(0,z.jsx)(`span`,{className:`cvs-thumb`,"aria-hidden":`true`,children:e.spec.blocks.length}),(0,z.jsxs)(`span`,{className:`cvs-turn-copy`,children:[(0,z.jsx)(`strong`,{children:e.question||e.spec.title}),(0,z.jsxs)(`small`,{children:[new Date(e.at).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}),r?``:` · no narration`]})]}),(0,z.jsx)(`span`,{className:`cvs-order`,children:t+1})]},n)})}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Size`}),(0,z.jsx)(`div`,{className:`shm-chips`,children:fe.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f.size===e.id,"aria-pressed":f.size===e.id,disabled:J,onClick:()=>{Q(),m(t=>({...t,size:e.id}))},title:e.hint,children:e.label},e.id))})]}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Quality`}),(0,z.jsx)(`div`,{className:`shm-chips`,children:pe.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f.quality===e.id,"aria-pressed":f.quality===e.id,disabled:J,onClick:()=>{Q(),m(t=>({...t,quality:e.id}))},title:p(e.id),children:e.label},e.id))})]}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Include`}),(0,z.jsxs)(`div`,{className:`shm-chips`,children:[me.map(({key:e,label:t})=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f[e],"aria-pressed":f[e],disabled:J,onClick:()=>{Q(),m(t=>({...t,[e]:!t[e]}))},children:t},e)),(0,z.jsx)(`span`,{className:`cvs-audio-lock`,children:`● Audio always on`})]})]}),(0,z.jsxs)(`div`,{className:`cvs-meter`,"data-over":Se,children:[(0,z.jsxs)(`span`,{children:[U(_),` selected`]}),(0,z.jsx)(`span`,{children:`3:00 max`}),(0,z.jsx)(`i`,{style:{width:`${Math.min(100,_/b*100)}%`}})]}),O&&(0,z.jsx)(`div`,{className:`cvs-error`,role:`alert`,children:O}),!Y&&(0,z.jsx)(`div`,{className:`cvs-error`,role:`alert`,children:`Video export needs an approved open video codec (AV1/VP9/VP8) and Opus audio. Try the current Chrome, Edge, or Firefox.`}),C&&(0,z.jsxs)(`div`,{className:`cvs-progress`,role:`status`,children:[xe,R&&(0,z.jsx)(`em`,{className:`cvs-paused`,children:`Paused while this window is in the background — come back to it and the render picks up where it left off.`})]}),E&&(0,z.jsxs)(`div`,{className:`cvs-result`,role:`status`,children:[(0,z.jsxs)(`strong`,{children:[`Ready · `,E.width,`×`,E.height]}),(0,z.jsxs)(`span`,{children:[U(E.durationMs),` · `,(E.blob.size/1048576).toFixed(1),` MB`]})]}),(0,z.jsx)(`div`,{className:`shm-actions`,children:E?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,className:`shm-btn shm-btn-primary`,onClick:()=>{K.current=null,te(E.blob,be,()=>void E.dispose?.()),D(null),c(`Saved to your downloads`,`good`),n?.()},children:`↓ Download video`}),typeof navigator<`u`&&typeof navigator.share==`function`&&(0,z.jsx)(`button`,{type:`button`,className:`shm-btn`,onClick:()=>{ne(E,{title:`Mavéa conversation`,filename:be}).then(e=>{e!==`cancelled`&&(K.current=null,D(null),e===`downloaded`&&c(`Saved to your downloads`,`good`),n?.())})},children:`Share`})]}):J?(0,z.jsx)(`button`,{type:`button`,className:`shm-btn`,onClick:()=>G.current?.abort(),children:`Cancel`}):(0,z.jsx)(`button`,{type:`button`,className:`shm-btn shm-btn-primary`,disabled:!g.length||Se||!Y,onClick:()=>void ve(),children:O?`Retry ${f.size} video`:`Create ${f.size} video`})})]}),(0,z.jsx)(`div`,{className:`shm-stage`,children:(0,z.jsxs)(`div`,{className:`shm-frame`,"data-aspect":`16:9`,children:[M?(0,z.jsx)(he,{width:ye.width,height:ye.height,children:(0,z.jsx)(B,{scene:x,options:f,frameRef:i,glide:!X})}):(0,z.jsx)(`div`,{className:`cvs-stage`,"data-aspect":`16:9`,children:(0,z.jsx)(`div`,{className:`cvs-empty`,role:`status`,children:`Preparing preview…`})}),Z&&(0,z.jsx)(`div`,{className:`shm-controls`,children:(0,z.jsx)(`button`,{type:`button`,className:`shm-sound`,"data-on":I,onClick:()=>L(e=>!e),"aria-pressed":I,title:I?`Play preview`:`Pause preview`,children:I?(0,z.jsx)(a.play,{style:{width:17,height:17}}):(0,z.jsx)(a.pause,{style:{width:17,height:17}})})})]})}),se&&(0,z.jsx)(`div`,{className:`cvs-capture-host`,"data-size":f.size,"aria-hidden":`true`,inert:!0,children:(0,z.jsx)(B,{scene:x,options:f,frameRef:e=>{q.current=e}})})]})}export{W as ConversationVideoStudio};
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{h as r,u as i}from"./index-zIa6h_8b.js";import{n as a}from"./icons-gLFQTv74.js";import{t as o}from"./TopicCanvas-DozfZFto.js";import{t as s}from"./motion-BY_Egaxm.js";import{t as c}from"./toast-BBNs2h3L.js";import{t as l}from"./Presence-UqXfH4Y-.js";import{a as u,c as d,i as f,r as p,t as m}from"./capture-9OrAc1p2.js";import{i as ee,n as te,r as ne,t as re}from"./share-kW3pZ027.js";import{t as ie}from"./FeatureUseNotice-Dc3GNBvy.js";import{r as h}from"./history-D2EH2X6D.js";import{t as g}from"./replay-B5TkHPri.js";import"./canvas-vqIFVmtP.js";import{t as _}from"./AnnotationLayer-8JABh1Dm.js";var v=e(),y=t(),b=18e4,x=650,S=350;function C(e){let t=[e.spoken??e.narration,...e.tour.map(e=>e.saySpoken??e.say??``)].reduce((e,t)=>e+t.trim().length,0);return 1e3+Math.max(1800,t/14*1e3)}function ae(e){return e.reduce((e,t)=>e+C(t),0)}function oe(e){for(let t=e.length-1;t>=0;t--){let n=e[t];if(n?.topicShift===!0||n?.topicShift===void 0&&n?.mode===`replace`)return t}return 0}function w(e,t,n){let r=n.spans[e+1];return r?r.startMs:x+Math.max(0,n.durationMs-x-S)*(e+1)/(t+1)}function T(e,t,n){let r=[],i=0;return e.forEach((e,a)=>{let o=t[a];if(!o)return;let s=g(e),c=s.cues.map((e,t)=>w(t,s.cues.length,o)),l=[0,x,...c,o.durationMs].map(e=>Math.max(0,Math.min(o.durationMs,e))).filter((e,t,n)=>t===0||e>n[t-1]),u=[];for(let t=0;t<l.length-1;t++){let d=l[t],f=l[t+1],p=c.findIndex(e=>e===d),m=p>=0?s.cues[p]:void 0;m&&n.penMarks&&(u=[...u,...m.marks.map((t,n)=>({spot:m.spot,line:m.say,mark:t,delayMs:n*240,...t.kind===`connect`&&typeof t.onIndex==`number`?{toSpot:e.spec.blocks[t.onIndex]?.id}:{}}))]);let ee=[...o.spans].reverse().find(e=>e.startMs<=d&&e.endMs>d);r.push({frame:e,turnIndex:a,startMs:i+d,durationMs:Math.max(1,f-d),spot:n.spotlights?m?.spot??null:null,caption:n.captions?ee?.text??null:null,ink:u,questionOnly:t===0})}i+=o.durationMs}),r}var E=24e3,D=.65,O=.18,k=.35,se=.89,A=6,j=class extends Error{turnIndex;question;constructor(e,t){super(`Narration is unavailable for “${t||`turn ${e+1}`}”.`),this.turnIndex=e,this.question=t,this.name=`RequiredConversationAudioError`}};function M(e){return[e.spoken??e.narration,...e.tour.map(e=>e.saySpoken??e.say??``)].map(e=>e.trim()).filter(Boolean)}function N(e){return e.trim().replace(/\s+/g,` `)}function P(e,t){let n=M(e);return n.length>0&&t.pcm.length>0&&t.spans.length===n.length&&n.every((e,n)=>N(t.spans[n]?.text??``)===N(e)&&t.spans[n].t1>t.spans[n].t0)}function F(e){let t=e.spans.map(e=>({text:e.text,startMs:Math.round((D+e.t0)*1e3),endMs:Math.round((D+e.t1)*1e3)}));return{lines:[{text:t.map(e=>e.text).join(` `),pcm:e.pcm,rate:e.sampleRate}],durationS:D+e.duration+k,spans:t}}async function I(e,t,n){let r=M(e);if(!r.length)throw new j(t,e.question);let i=[];for(let a of r){if(n?.aborted)throw new DOMException(`Cancelled`,`AbortError`);let r=await d(a,n);if(n?.aborted)throw new DOMException(`Cancelled`,`AbortError`);if(!r.length)throw new j(t,e.question);i.push({text:a,pcm:r,rate:E})}let a=[],o=D;for(let e of i){let t=o;o+=e.pcm.length/e.rate,a.push({text:e.text,startMs:Math.round(t*1e3),endMs:Math.round(o*1e3)}),o+=O}return{lines:i,durationS:o+k,spans:a}}async function ce(e,t,n){let r=i();if(!r||typeof OfflineAudioContext>`u`)throw Error(`audio-encoding-unavailable`);let a=[];for(let r=0;r<e.length;r++){let i=e[r],o=t(i);a.push(o&&P(i,o)?F(o):await I(i,r,n))}let o=a.reduce((e,t)=>e+t.durationS,0);if(o*1e3>18e4)throw Error(`conversation-too-long`);let s=0;for(let e of a)for(let t of e.lines)for(let e=0;e<t.pcm.length;e++)s=Math.max(s,Math.abs(t.pcm[e]));let c=s>0?Math.min(A,se/s):1,l=new OfflineAudioContext(1,Math.ceil(o*r.sampleRate),r.sampleRate),u=l.createGain();u.gain.value=c,u.connect(l.destination);let d=0;for(let e of a){let t=d+D;for(let n of e.lines){let e=l.createBuffer(1,n.pcm.length,n.rate);e.getChannelData(0).set(n.pcm);let r=l.createBufferSource();r.buffer=e,r.connect(u),r.start(t),t+=n.pcm.length/n.rate+O}d+=e.durationS}return{buffer:await l.startRendering(),turns:a.map(e=>({durationMs:Math.round(e.durationS*1e3),spans:e.spans})),durationMs:Math.round(o*1e3)}}var le={"1080p":{width:1920,height:1080},"720p":{width:1280,height:720}};function L(e,t,n=r()){let{bitrate:i}=m(e,n);return t===`720p`?Math.round(i*.55):i}async function R(e){document.visibilityState===`hidden`&&await new Promise((t,n)=>{let r=()=>a(new DOMException(`Cancelled`,`AbortError`)),i=()=>{document.visibilityState!==`hidden`&&a()},a=a=>{document.removeEventListener(`visibilitychange`,i),e.removeEventListener(`abort`,r),a?n(a):t()};document.addEventListener(`visibilitychange`,i),e.addEventListener(`abort`,r,{once:!0})})}function ue(){return typeof document<`u`&&(typeof VideoEncoder<`u`&&typeof AudioEncoder<`u`||u()!==null)}async function de(e){let t=r(),n=le[e.size],i=e.scenes[0];i&&await e.applyScene(i,0);let a=getComputedStyle(e.el).backgroundColor,o=await f({el:e.el,audioBuffer:e.audioBuffer,aspect:`16:9`,dims:{w:n.width,h:n.height},quality:e.quality,bitrate:L(e.quality,e.size,t),background:a&&a!==`rgba(0, 0, 0, 0)`?a:void 0,maxDurationMs:e.durationMs}),s=performance.now();try{for(let t=1;t<e.scenes.length;t++){let n=e.scenes[t];for(;performance.now()-s<n.startMs;){if(e.signal.aborted)throw new DOMException(`Cancelled`,`AbortError`);await R(e.signal),await new Promise(e=>setTimeout(e,25))}await e.applyScene(n,t),e.onProgress?.({phase:`render`,completed:t+1,total:e.scenes.length})}for(;performance.now()-s<e.durationMs;){if(e.signal.aborted)throw new DOMException(`Cancelled`,`AbortError`);await R(e.signal),await new Promise(e=>setTimeout(e,25))}e.onProgress?.({phase:`encode`,completed:0,total:1});let t=await o.stop();return e.onProgress?.({phase:`ready`,completed:1,total:1}),{...t,...n}}catch(e){throw o.cancel(),e}}var z=n();function B({scene:e,options:t,frameRef:n,glide:r=!0}){let i=(0,v.useRef)(null),a=(0,v.useRef)(null),[s,c]=(0,v.useState)(0);(0,v.useEffect)(()=>(n?.(i.current),()=>n?.(null)),[n]),(0,v.useEffect)(()=>{let t=a.current;if(!t)return;let n=0;if(e?.spot){let r=[...t.querySelectorAll(`[data-spot-id]`)].find(t=>t.dataset.spotId===e.spot);if(!r)return;let i=t.getBoundingClientRect(),a=r.getBoundingClientRect();n=Math.max(0,t.scrollTop+a.top-i.top-(t.clientHeight-a.height)/2)}typeof t.scrollTo==`function`?t.scrollTo({top:n,behavior:r?`smooth`:`auto`}):t.scrollTop=n;let i=window.setTimeout(()=>c(e=>e+1),420);return()=>window.clearTimeout(i)},[e?.spot,e?.turnIndex,r]);let u=e?.questionOnly??!1,d=e?e.frame.question||e.frame.spec.title:``;return(0,z.jsx)(`div`,{ref:i,className:`cvs-stage`,"data-aspect":`16:9`,"data-question-only":u,"data-captioned":t.captions,children:e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{className:`cvs-header`,children:[(0,z.jsxs)(`div`,{className:`cvs-brand`,children:[(0,z.jsx)(`span`,{className:`cvs-brand-dot`}),` Mavéa conversation`]}),(0,z.jsxs)(`div`,{className:`cvs-turn`,children:[`Turn `,e.turnIndex+1]}),(0,z.jsx)(`h2`,{children:d})]}),u?(0,z.jsxs)(`div`,{className:`cvs-ask`,children:[(0,z.jsx)(`span`,{className:`cvs-ask-eyebrow`,children:`Asked`}),(0,z.jsx)(`p`,{className:`cvs-ask-line`,children:d})]}):(0,z.jsxs)(`div`,{ref:a,className:`cvs-canvas`,children:[(0,z.jsx)(`div`,{className:`topic-wrap`,children:(0,z.jsx)(o,{data:e.frame.spec,spot:e.spot,built:{},onProve:()=>{}})},e.turnIndex),t.penMarks&&(0,z.jsx)(_,{spots:e.ink,within:i.current,revision:s})]}),t.captions&&e.caption&&(0,z.jsx)(`div`,{className:`cvs-caption`,children:e.caption}),t.presence&&(0,z.jsx)(`div`,{className:`cvs-presence`,children:(0,z.jsx)(l,{state:u?`thinking`:`speaking`})})]}):(0,z.jsx)(`div`,{className:`cvs-empty`,children:`Choose a turn to preview it.`})})}var fe=[{id:`1080p`,label:`1080p`,hint:`1920×1080`},{id:`720p`,label:`720p`,hint:`1280×720`}],pe=[{id:`balanced`,label:`Balanced`},{id:`high`,label:`High`},{id:`ultra`,label:`Ultra`}],V=650;function H(e=300){return Promise.race([(async()=>{await new Promise(e=>requestAnimationFrame(()=>e())),await new Promise(e=>requestAnimationFrame(()=>e()))})(),new Promise(t=>window.setTimeout(t,e))])}var me=[{key:`captions`,label:`Captions`},{key:`spotlights`,label:`Spotlights`},{key:`penMarks`,label:`Pen marks`},{key:`presence`,label:`Mavéa`}];function U(e){let t=Math.max(0,Math.round(e/1e3));return`${Math.floor(t/60)}:${String(t%60).padStart(2,`0`)}`}function he(e){let t=(0,y.c)(12),{width:n,height:r,children:i}=e,a=(0,v.useRef)(null),[o,s]=(0,v.useState)(0),c,l;t[0]!==r||t[1]!==n?(c=()=>{let e=a.current;if(!e)return;let t=()=>{let{width:t,height:i}=e.getBoundingClientRect();!t||!i||s(Math.min(t/n,i/r))};if(t(),typeof ResizeObserver>`u`)return;let i=new ResizeObserver(t);return i.observe(e),()=>i.disconnect()},l=[n,r],t[0]=r,t[1]=n,t[2]=c,t[3]=l):(c=t[2],l=t[3]),(0,v.useLayoutEffect)(c,l);let u=`scale(${o})`,d=o?void 0:`hidden`,f;t[4]!==r||t[5]!==u||t[6]!==d||t[7]!==n?(f={width:n,height:r,transform:u,visibility:d},t[4]=r,t[5]=u,t[6]=d,t[7]=n,t[8]=f):f=t[8];let p;return t[9]!==i||t[10]!==f?(p=(0,z.jsx)(`div`,{ref:a,className:`cvs-viewport`,children:(0,z.jsx)(`div`,{className:`cvs-scaler`,style:f,children:i})}),t[9]=i,t[10]=f,t[11]=p):p=t[11],p}function ge(e){return e.map(e=>{let t=C(e);return{durationMs:t,spans:[{text:e.narration,startMs:650,endMs:Math.max(651,t-350)}]}})}function W({frames:e,retainedAudio:t,onShared:n,onBusyChange:r,frameRef:i}){let o=(0,v.useMemo)(()=>e.filter(e=>!!((e.spoken??e.narration).trim()||e.tour.some(e=>(e.saySpoken??e.say)?.trim()))),[e]),[l,u]=(0,v.useState)(()=>new Set(o.length?[h(o[o.length-1])]:[])),d=(0,v.useMemo)(()=>new Set(o.map(h)),[o]),[f,m]=(0,v.useState)({size:`1080p`,quality:`high`,captions:!0,spotlights:!0,penMarks:!0,presence:!0}),g=(0,v.useMemo)(()=>e.filter(e=>l.has(h(e))),[e,l]),_=(0,v.useMemo)(()=>ae(g),[g]),y=(0,v.useMemo)(()=>T(g,ge(g),f),[g,f]),[x,S]=(0,v.useState)(()=>y[0]??null),[C,w]=(0,v.useState)(null),[E,D]=(0,v.useState)(null),[O,k]=(0,v.useState)(null),[se,A]=(0,v.useState)(!1),[M,N]=(0,v.useState)(!1),[P,F]=(0,v.useState)(0),[I,L]=(0,v.useState)(!1),[R,W]=(0,v.useState)(!1),G=(0,v.useRef)(null),K=(0,v.useRef)(null),q=(0,v.useRef)(null),J=C!==null&&C.phase!==`ready`,Y=ue(),X=(0,v.useMemo)(()=>s(),[]),Z=M&&!J&&!X&&y.length>1;(0,v.useEffect)(()=>r?.(J),[J,r]),(0,v.useEffect)(()=>{if(!J){W(!1);return}let e=()=>W(document.visibilityState===`hidden`);return e(),document.addEventListener(`visibilitychange`,e),()=>document.removeEventListener(`visibilitychange`,e)},[J]),(0,v.useEffect)(()=>N(!0),[]),(0,v.useEffect)(()=>{let e=X?y.findIndex(e=>!e.questionOnly):0;F(Math.max(0,e)),L(!1)},[y,X]),(0,v.useEffect)(()=>{J||S(y[P]??y[0]??null)},[y,P,J]),(0,v.useEffect)(()=>{if(!Z||I)return;let e=y[P]??y[0],t=window.setTimeout(()=>F(e=>(e+1)%y.length),Math.max(V,e?.durationMs??V));return()=>window.clearTimeout(t)},[Z,I,y,P]),(0,v.useEffect)(()=>()=>{G.current?.abort(),K.current?.dispose?.(),K.current=null,r?.(!1)},[r]);let _e=(0,v.useCallback)(async e=>{S(e),await H()},[]),Q=(0,v.useCallback)(()=>{K.current?.dispose?.(),K.current=null,D(null),w(null)},[]),ve=(0,v.useCallback)(async()=>{if(!g.length||_>18e4)return;let e=new AbortController;G.current=e,Q(),k(null),w({phase:`audio`,completed:0,total:g.length}),A(!0);try{await H();let n=q.current;if(!n)throw Error(`capture-stage-unavailable`);let r=await ce(g,t??(()=>null),e.signal),i=T(g,r.turns,f);if(!i.length)throw Error(`empty-video`);w({phase:`render`,completed:1,total:i.length});let a=await de({el:n,scenes:i,audioBuffer:r.buffer,durationMs:r.durationMs,size:f.size,quality:f.quality,signal:e.signal,applyScene:_e,onProgress:w});K.current=a,D(a),w(null)}catch(e){if(e?.name===`AbortError`){w(null);return}let t=e instanceof j?`${e.message} Check the local voice service, then retry.`:e instanceof Error&&e.message===`conversation-too-long`?`The voiced result is over three minutes. Remove a turn and retry.`:e instanceof Error&&e.message===`open-codec-unavailable`?`This browser cannot encode an approved open-media format (AV1/VP9/VP8 with Opus). Try the current Chrome, Edge, or Firefox.`:`The video could not be created in this browser. Your conversation is unchanged.`;k(t),w(null)}finally{A(!1)}},[_e,Q,_,f,t,g]),$=e=>{J||(u(new Set(e.map(h))),Q(),k(null))},ye=le[f.size],be=re(ee(g[0]?.spec.title||g[0]?.question,new Date),E?.type??``),xe=C?C.phase===`audio`?`Preparing required narration…`:C.phase===`render`?`Rendering scene ${C.completed} of ${C.total}…`:C.phase===`encode`?`Finishing the file…`:`Video ready`:``,Se=_>b;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`shm-panel cvs-panel`,children:[(0,z.jsx)(`div`,{className:`shm-eyebrow`,children:`▷ CONVERSATION VIDEO`}),(0,z.jsx)(`div`,{className:`cvs-title`,children:`Share this conversation.`}),(0,z.jsx)(`div`,{className:`shm-sub`,children:`Pick the turns worth sending. Mavéa narrates every one. The video renders locally in this browser and is never uploaded.`}),(0,z.jsx)(ie,{kind:`publishing`,from:`live`}),(0,z.jsxs)(`div`,{className:`cvs-presets`,children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(o.slice(-1)),disabled:J,children:`Current turn`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(e.slice(oe(e)).filter(e=>d.has(h(e)))),disabled:J,children:`Current topic`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>$(o),disabled:J,children:`All turns`})]}),(0,z.jsx)(`div`,{className:`cvs-turns`,role:`group`,"aria-label":`Conversation turns`,children:e.map((e,t)=>{let n=h(e),r=d.has(n);return(0,z.jsxs)(`label`,{className:`cvs-turn-card`,"data-selected":l.has(n),children:[(0,z.jsx)(`input`,{type:`checkbox`,checked:l.has(n),disabled:J||!r,onChange:()=>{u(e=>{let t=new Set(e);return t.has(n)?t.delete(n):t.add(n),t}),Q()}}),(0,z.jsx)(`span`,{className:`cvs-thumb`,"aria-hidden":`true`,children:e.spec.blocks.length}),(0,z.jsxs)(`span`,{className:`cvs-turn-copy`,children:[(0,z.jsx)(`strong`,{children:e.question||e.spec.title}),(0,z.jsxs)(`small`,{children:[new Date(e.at).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}),r?``:` · no narration`]})]}),(0,z.jsx)(`span`,{className:`cvs-order`,children:t+1})]},n)})}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Size`}),(0,z.jsx)(`div`,{className:`shm-chips`,children:fe.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f.size===e.id,"aria-pressed":f.size===e.id,disabled:J,onClick:()=>{Q(),m(t=>({...t,size:e.id}))},title:e.hint,children:e.label},e.id))})]}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Quality`}),(0,z.jsx)(`div`,{className:`shm-chips`,children:pe.map(e=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f.quality===e.id,"aria-pressed":f.quality===e.id,disabled:J,onClick:()=>{Q(),m(t=>({...t,quality:e.id}))},title:p(e.id),children:e.label},e.id))})]}),(0,z.jsxs)(`div`,{className:`shm-group`,children:[(0,z.jsx)(`div`,{className:`shm-label`,children:`Include`}),(0,z.jsxs)(`div`,{className:`shm-chips`,children:[me.map(({key:e,label:t})=>(0,z.jsx)(`button`,{type:`button`,className:`shm-chip`,"data-active":f[e],"aria-pressed":f[e],disabled:J,onClick:()=>{Q(),m(t=>({...t,[e]:!t[e]}))},children:t},e)),(0,z.jsx)(`span`,{className:`cvs-audio-lock`,children:`● Audio always on`})]})]}),(0,z.jsxs)(`div`,{className:`cvs-meter`,"data-over":Se,children:[(0,z.jsxs)(`span`,{children:[U(_),` selected`]}),(0,z.jsx)(`span`,{children:`3:00 max`}),(0,z.jsx)(`i`,{style:{width:`${Math.min(100,_/b*100)}%`}})]}),O&&(0,z.jsx)(`div`,{className:`cvs-error`,role:`alert`,children:O}),!Y&&(0,z.jsx)(`div`,{className:`cvs-error`,role:`alert`,children:`Video export needs an approved open video codec (AV1/VP9/VP8) and Opus audio. Try the current Chrome, Edge, or Firefox.`}),C&&(0,z.jsxs)(`div`,{className:`cvs-progress`,role:`status`,children:[xe,R&&(0,z.jsx)(`em`,{className:`cvs-paused`,children:`Paused while this window is in the background — come back to it and the render picks up where it left off.`})]}),E&&(0,z.jsxs)(`div`,{className:`cvs-result`,role:`status`,children:[(0,z.jsxs)(`strong`,{children:[`Ready · `,E.width,`×`,E.height]}),(0,z.jsxs)(`span`,{children:[U(E.durationMs),` · `,(E.blob.size/1048576).toFixed(1),` MB`]})]}),(0,z.jsx)(`div`,{className:`shm-actions`,children:E?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,className:`shm-btn shm-btn-primary`,onClick:()=>{K.current=null,te(E.blob,be,()=>void E.dispose?.()),D(null),c(`Saved to your downloads`,`good`),n?.()},children:`↓ Download video`}),typeof navigator<`u`&&typeof navigator.share==`function`&&(0,z.jsx)(`button`,{type:`button`,className:`shm-btn`,onClick:()=>{ne(E,{title:`Mavéa conversation`,filename:be}).then(e=>{e!==`cancelled`&&(K.current=null,D(null),e===`downloaded`&&c(`Saved to your downloads`,`good`),n?.())})},children:`Share`})]}):J?(0,z.jsx)(`button`,{type:`button`,className:`shm-btn`,onClick:()=>G.current?.abort(),children:`Cancel`}):(0,z.jsx)(`button`,{type:`button`,className:`shm-btn shm-btn-primary`,disabled:!g.length||Se||!Y,onClick:()=>void ve(),children:O?`Retry ${f.size} video`:`Create ${f.size} video`})})]}),(0,z.jsx)(`div`,{className:`shm-stage`,children:(0,z.jsxs)(`div`,{className:`shm-frame`,"data-aspect":`16:9`,children:[M?(0,z.jsx)(he,{width:ye.width,height:ye.height,children:(0,z.jsx)(B,{scene:x,options:f,frameRef:i,glide:!X})}):(0,z.jsx)(`div`,{className:`cvs-stage`,"data-aspect":`16:9`,children:(0,z.jsx)(`div`,{className:`cvs-empty`,role:`status`,children:`Preparing preview…`})}),Z&&(0,z.jsx)(`div`,{className:`shm-controls`,children:(0,z.jsx)(`button`,{type:`button`,className:`shm-sound`,"data-on":I,onClick:()=>L(e=>!e),"aria-pressed":I,title:I?`Play preview`:`Pause preview`,children:I?(0,z.jsx)(a.play,{style:{width:17,height:17}}):(0,z.jsx)(a.pause,{style:{width:17,height:17}})})})]})}),se&&(0,z.jsx)(`div`,{className:`cvs-capture-host`,"data-size":f.size,"aria-hidden":`true`,inert:!0,children:(0,z.jsx)(B,{scene:x,options:f,frameRef:e=>{q.current=e}})})]})}export{W as ConversationVideoStudio};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TopicCanvas-
|
|
2
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{t as a}from"./preloadableLazy-MIX1ApBW.js";import{n as o,t as s}from"./theme-7IrMJ70_.js";import{k as c}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/TopicCanvas-DozfZFto.js","assets/rolldown-runtime-DkW27tQK.js","assets/react-BZJXY1be.js","assets/compiler-runtime-qQQXpJgv.js","assets/jsx-runtime-DeHZSEgm.js","assets/preload-helper-CiWYd9n-.js","assets/index-zIa6h_8b.js","assets/useInView-CXTOAEV3.js","assets/coreIcons-DDTChE1H.js","assets/preloadableLazy-MIX1ApBW.js","assets/cachedImport-DW0gP14h.js","assets/lazyRetry-D50B1UMY.js","assets/theme-7IrMJ70_.js","assets/index-DrzNHwlO.css","assets/icons-gLFQTv74.js","assets/loader-DCA6Njbf.js","assets/FallbackCard-ap_4wOfj.js","assets/blockLabel-FogyzEQY.js","assets/FallbackCard-D_6ps1xA.css","assets/useFocusTrap-DBtkeyRy.js","assets/motion-BY_Egaxm.js","assets/useSpatialCanvas-CfmZOXXP.js","assets/CanvasSkeleton-CRGWlafo.js","assets/CanvasSkeleton-iy6DBvde.css","assets/richText-BkxJhl9N.js","assets/toast-BBNs2h3L.js","assets/format-q0LwBjID.js","assets/safeImageUrl-BINWXOTz.js","assets/useValidatedImage-BQi2c66o.js","assets/layout-CEoNLr-w.js","assets/catalog-BHjl-1uH.js","assets/http-Lar_UMKb.js","assets/lib-B7OE1ZQQ.js","assets/BlockEmpty-B82uCse8.js","assets/motion-DxHSlPN6.js","assets/lib-DMAxsZKm.css","assets/TopicCanvas-uRuHi99s.css","assets/generateLive-B6purd69.js","assets/history-D2EH2X6D.js","assets/catalog-Db9GWM6N.js","assets/facts-BUGuVUIc.js","assets/blockTypes-DUDdP3pB.js","assets/streamParse-B-Gjwa9T.js","assets/liveSchema-B4bQtO88.js","assets/spokenText-C88IQJ0M.js","assets/sourceHost-BV3t2XDb.js","assets/annotations-CftUUB13.js","assets/screen-DFWKge3-.js","assets/attachments-BW-vki-E.js","assets/providers-BovElgRL.js","assets/info-CiqHR5cs.js","assets/shapes-Cx5SCKgj.js","assets/speed-K5_Ebj-8.js","assets/cache-CvbSI-pr.js","assets/validate-sGUCmPAs.js","assets/types-C42I77wh.js","assets/json-B0N3XRZU.js","assets/verbatim-DBTj9sPD.js","assets/citation-BsSvaaer.js","assets/number-zqlPMliA.js","assets/receipts-D7zveV-I.js","assets/officeDoc-GU6Cssjf.js","assets/csv-DAqzYXUs.js","assets/search-ZN7v_P5B.js","assets/store-BWLbFXiY.js","assets/contentVault-xfUwSJ3i.js","assets/keyVault-Aw5Y2PjT.js","assets/ready-jtAUOb62.js","assets/now-C9-UAzTC.js","assets/useLiveConfig-Cpy0_E_-.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{t as a}from"./preloadableLazy-MIX1ApBW.js";import{n as o,t as s}from"./theme-7IrMJ70_.js";import{k as c}from"./index-zIa6h_8b.js";import{n as l}from"./icons-gLFQTv74.js";import{t as u}from"./FeatureUseNotice-Dc3GNBvy.js";import{n as d}from"./history-D2EH2X6D.js";import{_ as f,a as p,g as m,l as h,o as g,p as _,r as v,s as y}from"./store-BfHRbVKz.js";import{r as b}from"./courseSeed-CZdNBTTs.js";import{i as x,n as S,r as C}from"./mastery-CUfDeuqO.js";/* empty css */import{CourseRail as w}from"./CourseRail-DXt3bzjU.js";var T=t(),E=e(),D=n();r();var O=a(()=>i(()=>import(`./TopicCanvas-DozfZFto.js`).then(e=>e.n).then(e=>({default:e.TopicCanvas})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36]))),k=O.Component,A=9e4;function j(){return(0,E.useSyncExternalStore)(f,y,y)}function M(){let e=b();if(e)return{courseId:e.courseId,lessonIdx:e.lessonIdx};try{let e=new URLSearchParams(window.location.hash.split(`?`)[1]??``),t=e.get(`c`)?.trim();if(!t)return null;let n=Number(e.get(`l`));return{courseId:t,lessonIdx:Number.isFinite(n)&&n>=0?Math.round(n):0}}catch{return null}}function N(e,t){try{let n=`#/course?c=${encodeURIComponent(e)}&l=${t}`;window.location.hash!==n&&window.history.replaceState(null,``,n)}catch{}}function P(e,t){let n=Date.now();return{id:d(n),question:t,narration:e.narration,...e.spoken?{spoken:e.spoken}:{},mode:`replace`,tour:(e.tour??[]).map(e=>({index:e.index,...e.say?{say:e.say}:{},...e.saySpoken?{saySpoken:e.saySpoken}:{},...e.mark?{mark:e.mark}:{},...e.marks?{marks:e.marks}:{}})),spec:e.spec,at:n}}function F(){"use no memo";(0,E.useEffect)(()=>s(o()),[]),j(),(0,E.useEffect)(()=>S(),[]);let e=(0,E.useRef)(M()),t=e.current?.courseId,n=t?g(t):void 0,[r,a]=(0,E.useState)(()=>{let t=e.current?.lessonIdx??0;return n?Math.min(Math.max(0,t),n.lessons.length-1):Math.max(0,t)}),[d,f]=(0,E.useState)(`loading`),[y,b]=(0,E.useState)(null),[T,F]=(0,E.useState)(``),[L,R]=(0,E.useState)(null),[V,H]=(0,E.useState)(!1),[U,W]=(0,E.useState)(null),G=(0,E.useRef)(null),K=(0,E.useCallback)(e=>{let n=t?g(t):void 0,r=n?.lessons[e];if(!n||!r)return;G.current?.ctrl.abort(),m(n.id,e),N(n.id,e);let a=`Lesson ${e+1}: ${r.title}`,o=p(n.id,r.id);if(O.preload().catch(()=>{}),o){G.current=null,b(o.spec),F(o.narration),R(null),H(!1),W(null),f(`ready`);return}b(null),F(``),R(null),H(!1),f(`loading`),W(null);let s={ctrl:new AbortController,timedOut:!1};G.current=s;let c=setTimeout(()=>{s.timedOut=!0,s.ctrl.abort()},A);(async()=>{try{let[t,o,c]=await Promise.all([i(()=>import(`./generateLive-B6purd69.js`),__vite__mapDeps([37,17,29,30,38,39,5,1,40,41,42,43,14,4,44,27,45,46,47,48,49,31,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68])),i(()=>import(`./useLiveConfig-Cpy0_E_-.js`).then(e=>e.d),__vite__mapDeps([69,1,2,3,50,66,49,31,41,48])),i(()=>import(`./streamParse-B-Gjwa9T.js`).then(e=>e.c),__vite__mapDeps([42,1]))]),l=x(n,e,h(n.id),C(n.topic)),u=o.toModelConfig(o.getLiveConfigV2()),d=``,p=``,m=()=>G.current===s&&!s.ctrl.signal.aborted,g=await t.generateLive(`Teach this lesson: "${r.title}" — ${r.goal}`,[],u,e=>{if(!m())return;d+=e;let t=c.extractNarrationProgress(d);if(!t)return;let n=c.nextSpeakableChunk(t.text,p.length,t.done);n.chunk&&(p=t.text.slice(0,n.consumed),F(p),f(`streaming`))},{lesson:l,signal:s.ctrl.signal,onPartial:e=>{m()&&(b(e.spec),e.narration&&(p=e.narration,F(e.narration)),f(`streaming`))},onPending:e=>{m()&&(R(e),e&&f(`streaming`))},onThinking:e=>{m()&&(H(e),e&&f(`streaming`))}});if(s.ctrl.signal.aborted&&!s.timedOut)return;if(s.timedOut){W(`Building this lesson took too long and was stopped — the model may be slow or rate-limited right now. Try again in a moment.`),f(`error`);return}if(g.error){W(g.error.message),f(`error`);return}v(n.id,r.id,P(g,a)),b(g.spec),F(g.narration),R(null),H(!1),W(null),f(`ready`)}catch{if(s.ctrl.signal.aborted&&!s.timedOut)return;W(s.timedOut?`Building this lesson took too long and was stopped — try again in a moment.`:`Couldn't build this lesson — check your connection and model settings, then try again.`),f(`error`)}finally{clearTimeout(c),G.current===s&&(G.current=null)}})()},[t]);(0,E.useEffect)(()=>(K(r),()=>G.current?.ctrl.abort()),[r,K]);let q=(0,E.useCallback)(e=>{let n=t?g(t):void 0,i=n?.lessons[r];!n||!i||_(n.id,i.id,e)},[t,r]),J=(0,E.useCallback)(()=>{window.location.hash=`#/courses`},[]);if(!n)return(0,D.jsx)(`div`,{className:`mavea-app clr-app`,children:(0,D.jsx)(`main`,{className:`clr-stage clr-stage-center`,children:(0,D.jsxs)(`div`,{className:`clr-empty`,children:[(0,D.jsx)(`div`,{className:`clr-empty-icon`,"aria-hidden":`true`,children:(0,D.jsx)(l.layers,{})}),(0,D.jsx)(`div`,{className:`clr-empty-head`,children:`This lesson isn’t here`}),(0,D.jsx)(`div`,{className:`clr-empty-sub`,children:`The course may have been removed, or the link is out of date. Head back and pick one to open.`}),(0,D.jsxs)(`button`,{type:`button`,className:`clr-btn clr-btn-primary`,onClick:J,children:[(0,D.jsx)(l.chevL,{}),` Back to courses`]})]})})});let Y=d===`loading`||d===`streaming`,X=h(n.id);return(0,D.jsx)(`div`,{className:`mavea-app clr-app`,children:(0,D.jsx)(`main`,{className:`clr-stage`,children:(0,D.jsxs)(`div`,{className:`clr-col`,children:[(0,D.jsx)(u,{kind:`learning`}),(0,D.jsx)(w,{course:n,lessonIdx:r,progress:X,onPrev:()=>a(e=>Math.max(0,e-1)),onNext:()=>a(e=>Math.min(n.lessons.length-1,e+1)),onCheckpoint:q,busy:Y},`${n.id}:${r}`),d===`loading`&&(0,D.jsx)(I,{lessonNumber:r+1,course:n}),d===`streaming`&&(0,D.jsx)(z,{narration:T,pendingShape:L,thinking:V}),d===`error`&&(0,D.jsx)(B,{message:U??`Something went wrong building this lesson.`,onRetry:()=>K(r)}),(d===`streaming`||d===`ready`)&&y&&(0,D.jsx)(`div`,{className:`clr-canvas`,children:(0,D.jsx)(c,{label:`Lesson canvas`,children:(0,D.jsx)(k,{data:y,spot:null,built:{},onProve:()=>{}})})})]})})})}function I(e){let t=(0,T.c)(8),{lessonNumber:n,course:r}=e,i=r.lessons[n-1],a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,D.jsxs)(`div`,{className:`clr-lens`,"aria-hidden":`true`,children:[(0,D.jsx)(`span`,{}),(0,D.jsx)(`span`,{}),(0,D.jsx)(`span`,{})]}),t[0]=a):a=t[0];let o;t[1]===n?o=t[2]:(o=(0,D.jsxs)(`div`,{className:`clr-state-head`,children:[`Building lesson `,n,`…`]}),t[1]=n,t[2]=o);let s;t[3]===i?s=t[4]:(s=i&&(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(`div`,{className:`clr-state-sub`,children:i.goal}),(0,D.jsx)(`div`,{className:`clr-lesson-outline`,"aria-label":`Lesson outline`,children:i.objectives.slice(0,3).map(L)})]}),t[3]=i,t[4]=s);let c;return t[5]!==o||t[6]!==s?(c=(0,D.jsxs)(`div`,{className:`clr-state`,role:`status`,"aria-live":`polite`,children:[a,o,s]}),t[5]=o,t[6]=s,t[7]=c):c=t[7],c}function L(e,t){return(0,D.jsxs)(`div`,{className:`clr-lesson-outline-row`,children:[(0,D.jsx)(`span`,{"aria-hidden":`true`,children:t+1}),(0,D.jsx)(`strong`,{children:e})]},e)}function R(e){return e?`Building ${e.replace(/[_-]+/g,` `)}`:`Building the next section`}function z(e){let t=(0,T.c)(11),{narration:n,pendingShape:r,thinking:i}=e,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(a=(0,D.jsx)(`span`,{className:`clr-stream-pulse`,"aria-hidden":`true`}),t[0]=a):a=t[0];let o;t[1]!==r||t[2]!==i?(o=i?`Thinking through the lesson`:R(r),t[1]=r,t[2]=i,t[3]=o):o=t[3];let s;t[4]===o?s=t[5]:(s=(0,D.jsxs)(`div`,{className:`clr-stream-label`,children:[o,`…`]}),t[4]=o,t[5]=s);let c;t[6]===n?c=t[7]:(c=n&&(0,D.jsx)(`p`,{children:n}),t[6]=n,t[7]=c);let l;return t[8]!==s||t[9]!==c?(l=(0,D.jsxs)(`div`,{className:`clr-stream`,role:`status`,"aria-live":`polite`,"aria-atomic":`false`,children:[a,(0,D.jsxs)(`div`,{className:`clr-stream-copy`,children:[s,c]})]}),t[8]=s,t[9]=c,t[10]=l):l=t[10],l}function B(e){let t=(0,T.c)(10),{message:n,onRetry:r}=e,i,a;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(i=(0,D.jsx)(`div`,{className:`clr-state-icon clr-state-icon-warn`,"aria-hidden":`true`,children:(0,D.jsx)(l.alert,{})}),a=(0,D.jsx)(`div`,{className:`clr-state-head`,children:`Couldn’t build this lesson`}),t[0]=i,t[1]=a):(i=t[0],a=t[1]);let o;t[2]===n?o=t[3]:(o=(0,D.jsx)(`div`,{className:`clr-state-sub clr-state-error`,children:n}),t[2]=n,t[3]=o);let s;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(s=(0,D.jsx)(l.refresh,{}),t[4]=s):s=t[4];let c;t[5]===r?c=t[6]:(c=(0,D.jsxs)(`button`,{type:`button`,className:`clr-btn clr-btn-primary`,onClick:r,children:[s,` Try again`]}),t[5]=r,t[6]=c);let u;return t[7]!==o||t[8]!==c?(u=(0,D.jsxs)(`div`,{className:`clr-state`,children:[i,a,o,c]}),t[7]=o,t[8]=c,t[9]=u):u=t[9],u}export{F as CourseLessonReader};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/generateCourse-C9qvaJRo.js","assets/rolldown-runtime-DkW27tQK.js","assets/providers-BovElgRL.js","assets/http-Lar_UMKb.js","assets/blockTypes-DUDdP3pB.js","assets/info-CiqHR5cs.js","assets/attachments-BW-vki-E.js","assets/useLiveConfig-Cpy0_E_-.js","assets/react-BZJXY1be.js","assets/compiler-runtime-qQQXpJgv.js","assets/keyVault-Aw5Y2PjT.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{n as a,r as o}from"./preloadableLazy-MIX1ApBW.js";import{n as s,t as c}from"./theme-7IrMJ70_.js";import{j as l}from"./index-Dk0QapqQ.js";import{n as u}from"./icons-gLFQTv74.js";import{t as d}from"./useFocusTrap-DBtkeyRy.js";import{t as f}from"./homeTarget-CsO8nY7z.js";import{t as p}from"./DropSelect-DjbdVfIR.js";import{i as m}from"./store-D2IJF4SA.js";import{_ as h,c as g,h as _,l as v,m as y,s as b}from"./store-BfHRbVKz.js";import{i as x,t as S}from"./courseSeed-CZdNBTTs.js";/* empty css */import{n as ee,t as te}from"./useSrsCards-C27o39fF.js";import{t as ne}from"./deckLine-NBd3MyGT.js";var re=t(),C=e(),w=n();r();var T;function E(){return T??=Promise.all([i(()=>import(`./generateCourse-C9qvaJRo.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4,5,6])),i(()=>import(`./useLiveConfig-Cpy0_E_-.js`).then(e=>e.d),__vite__mapDeps([7,1,8,9,5,10,2,3,4,6]))]),T}function D(){E().catch(()=>{})}function O(){return(0,C.useSyncExternalStore)(h,b,b)}function ie(e,t){S({courseId:e,lessonIdx:t}),window.location.hash=`#/course`}function ae(e,t){let n=e.lessons.filter(e=>t.lessons[e.id]?.status===`done`).length;return n>=e.lessons.length?`complete`:n>0||t.current>0?`in-progress`:`new`}var oe={beginner:`Beginner`,intermediate:`Intermediate`,expert:`Expert`},k=[`Personal finance basics`,`How the internet works`,`Spanish for travel`];function A(e){let t=(0,re.c)(67),{course:n,progress:r,onRemove:i}=e,s=(0,C.useRef)(null),[c,l]=(0,C.useState)(!1),d=n.lessons.length,f;if(t[0]!==n.lessons||t[1]!==r.lessons){let e;t[3]===r.lessons?e=t[4]:(e=e=>r.lessons[e.id]?.status===`done`,t[3]=r.lessons,t[4]=e),f=n.lessons.filter(e),t[0]=n.lessons,t[1]=r.lessons,t[2]=f}else f=t[2];let p=f.length,h;t[5]!==p||t[6]!==d?(h=d?Math.round(p/d*100):0,t[5]=p,t[6]=d,t[7]=h):h=t[7];let g=h,_=ae(n,r),v=Math.max(0,Math.min(r.current,d-1)),y=n.lessons[v],b=`Lesson ${v+1} of ${d}`,x=_===`complete`?`Review`:_===`in-progress`?`Continue`:`Start course`;te();let S;t[8]===n.title?S=t[9]:(S=e=>e.name===n.title,t[8]=n.title,t[9]=S);let T=m().decks.find(S),E,D;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>{let e=s.current;if(!e)return;let t=ue,n=()=>{t=o(le)};if(!(`IntersectionObserver`in window))return n(),t;let r=new IntersectionObserver(e=>{e.some(ce)&&(r.disconnect(),n())});return r.observe(e),()=>{r.disconnect(),t()}},D=[],t[10]=E,t[11]=D):(E=t[10],D=t[11]),(0,C.useEffect)(E,D);let O=`cr-card cr-card-${_}`,k;t[12]===n.level?k=t[13]:(k=n.level&&(0,w.jsx)(`span`,{className:`cr-badge`,children:oe[n.level]}),t[12]=n.level,t[13]=k);let A=`cr-status cr-status-`+_,j=_===`complete`?`Complete`:_===`in-progress`?`In progress`:`New`,M;t[14]!==A||t[15]!==j?(M=(0,w.jsx)(`span`,{className:A,children:j}),t[14]=A,t[15]=j,t[16]=M):M=t[16];let N;t[17]!==M||t[18]!==k?(N=(0,w.jsxs)(`div`,{className:`cr-card-top`,children:[k,M]}),t[17]=M,t[18]=k,t[19]=N):N=t[19];let P;t[20]===n.title?P=t[21]:(P=(0,w.jsx)(`h3`,{className:`cr-card-title`,children:n.title}),t[20]=n.title,t[21]=P);let F=n.subtitle||n.topic,I;t[22]===F?I=t[23]:(I=(0,w.jsx)(`p`,{className:`cr-card-sub`,children:F}),t[22]=F,t[23]=I);let L=`${n.title} progress`,R=`${p} of ${d} lessons complete`,z=`${g}%`,B;t[24]===z?B=t[25]:(B=(0,w.jsx)(`div`,{className:`cr-progress-fill`,style:{width:z}}),t[24]=z,t[25]=B);let V;t[26]!==g||t[27]!==L||t[28]!==R||t[29]!==B?(V=(0,w.jsx)(`div`,{className:`cr-progress`,role:`progressbar`,"aria-label":L,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":g,"aria-valuetext":R,children:B}),t[26]=g,t[27]=L,t[28]=R,t[29]=B,t[30]=V):V=t[30];let H;t[31]===b?H=t[32]:(H=(0,w.jsx)(`span`,{children:b}),t[31]=b,t[32]=H);let U;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,w.jsx)(`span`,{className:`cr-card-meta-dot`,"aria-hidden":`true`}),t[33]=U):U=t[33];let W;t[34]!==p||t[35]!==d?(W=(0,w.jsxs)(`span`,{children:[p,`/`,d,` done`]}),t[34]=p,t[35]=d,t[36]=W):W=t[36];let G;t[37]!==H||t[38]!==W?(G=(0,w.jsxs)(`div`,{className:`cr-card-meta`,children:[H,U,W]}),t[37]=H,t[38]=W,t[39]=G):G=t[39];let K;t[40]!==y||t[41]!==_?(K=y&&(0,w.jsxs)(`div`,{className:`cr-current-lesson`,children:[(0,w.jsx)(`span`,{children:_===`complete`?`Review from`:`Up next`}),(0,w.jsx)(`strong`,{children:y.title})]}),t[40]=y,t[41]=_,t[42]=K):K=t[42];let de=T&&(0,w.jsxs)(`a`,{className:`cr-deck-link`,href:ee.deck(n.title),children:[(0,w.jsx)(u.layers,{}),ne(T)]}),q;t[43]!==n.id||t[44]!==r.current?(q=()=>ie(n.id,r.current),t[43]=n.id,t[44]=r.current,t[45]=q):q=t[45];let J,Y;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(J=a(se),Y=(0,w.jsx)(u.play,{}),t[46]=J,t[47]=Y):(J=t[46],Y=t[47]);let X;t[48]!==x||t[49]!==q?(X=(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary`,onClick:q,...J,children:[Y,` `,x]}),t[48]=x,t[49]=q,t[50]=X):X=t[50];let Z;t[51]!==c||t[52]!==i?(Z=c?(0,w.jsxs)(`div`,{className:`cr-delete-confirm`,role:`group`,"aria-label":`Confirm course deletion`,children:[(0,w.jsx)(`span`,{children:`Delete?`}),(0,w.jsx)(`button`,{type:`button`,className:`cr-delete-cancel`,onClick:()=>l(!1),children:`Cancel`}),(0,w.jsx)(`button`,{type:`button`,className:`cr-icon-btn cr-icon-danger`,"aria-label":`Confirm delete course`,onClick:i,children:(0,w.jsx)(u.check,{})})]}):(0,w.jsx)(`button`,{type:`button`,className:`cr-icon-btn`,"aria-label":`Delete course`,onClick:()=>l(!0),children:(0,w.jsx)(u.x,{})}),t[51]=c,t[52]=i,t[53]=Z):Z=t[53];let Q;t[54]!==X||t[55]!==Z?(Q=(0,w.jsxs)(`div`,{className:`cr-card-actions`,children:[X,Z]}),t[54]=X,t[55]=Z,t[56]=Q):Q=t[56];let $;return t[57]!==N||t[58]!==P||t[59]!==I||t[60]!==V||t[61]!==G||t[62]!==K||t[63]!==de||t[64]!==Q||t[65]!==O?($=(0,w.jsxs)(`article`,{className:O,ref:s,children:[N,P,I,V,G,K,de,Q]}),t[57]=N,t[58]=P,t[59]=I,t[60]=V,t[61]=G,t[62]=K,t[63]=de,t[64]=Q,t[65]=O,t[66]=$):$=t[66],$}function se(){return l(`#/course`)??Promise.resolve()}function ce(e){return e.isIntersecting}function le(){return l(`#/course`)??Promise.resolve()}function ue(){}function j({initialTopic:e,onClose:t}){let n=(0,C.useRef)(null),r=(0,C.useRef)(null);d(r);let[i,o]=(0,C.useState)(e??``),[s,c]=(0,C.useState)(``),[l,f]=(0,C.useState)(!1),[m,h]=(0,C.useState)(null),g=(0,C.useRef)(null);(0,C.useEffect)(()=>()=>g.current?.abort(),[]);let v=(0,C.useCallback)(()=>{g.current?.abort(),t()},[t]);(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(e.preventDefault(),v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v]);let y=(0,C.useRef)(null);(0,C.useEffect)(()=>{e?.trim()||y.current?.focus()},[]),(0,C.useEffect)(()=>{let e=n.current;if(!e)return;let t=t=>{t.target===e&&v()};return e.addEventListener(`pointerdown`,t),()=>e.removeEventListener(`pointerdown`,t)},[v]);let b=async e=>{if(!e||l)return;f(!0),h(null);let t=new AbortController;g.current=t;try{let[{generateCourse:n},{getLiveConfigV2:r,toModelConfig:i}]=await E(),a=await n(e,i(r()),{level:s||void 0,signal:t.signal});if(t.signal.aborted)return;_(a),ie(a.id,0)}catch(e){if(t.signal.aborted)return;h(e instanceof Error?e.message:`Something went wrong building that course.`),f(!1)}},x=async e=>{e.preventDefault(),await b(i.trim())};return(0,w.jsx)(`div`,{className:`cr-scrim`,ref:n,children:(0,w.jsxs)(`div`,{className:`cr-sheet`,ref:r,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`cr-sheet-title`,"aria-describedby":`cr-sheet-subtitle`,tabIndex:-1,children:[(0,w.jsxs)(`div`,{className:`cr-sheet-head`,children:[(0,w.jsx)(`div`,{className:`cr-sheet-mark`,"aria-hidden":`true`,children:(0,w.jsx)(u.layers,{})}),(0,w.jsxs)(`div`,{className:`cr-sheet-heading`,children:[(0,w.jsx)(`span`,{className:`cr-sheet-title`,id:`cr-sheet-title`,children:`New course`}),(0,w.jsx)(`span`,{className:`cr-sheet-subtitle`,id:`cr-sheet-subtitle`,children:`A tailored syllabus, built around what you want to understand.`})]}),(0,w.jsx)(`button`,{type:`button`,className:`cr-ed-close`,"aria-label":l?`Cancel building course`:`Close`,onClick:v,children:(0,w.jsx)(u.x,{})})]}),(0,w.jsxs)(`form`,{className:`cr-sheet-body`,"aria-busy":l,onSubmit:e=>void x(e),children:[(0,w.jsxs)(`p`,{className:`cr-legal-note`,children:[(0,w.jsx)(`strong`,{children:`Learning aid, not an authority.`}),` Lessons are AI-generated and may be wrong or incomplete. Verify consequential or professional topics with authoritative sources. `,(0,w.jsx)(`a`,{href:`#/legal?from=home`,children:`Details`})]}),(0,w.jsxs)(`label`,{className:`cr-field`,children:[(0,w.jsx)(`span`,{className:`cr-field-label`,children:`Topic`}),(0,w.jsx)(`input`,{ref:y,type:`text`,className:`cr-input`,placeholder:`e.g. linear algebra, the French Revolution, Rust ownership`,value:i,onFocus:D,onChange:e=>{D(),o(e.target.value)},disabled:l,autoComplete:`off`})]}),(0,w.jsx)(`div`,{className:`cr-topic-picks`,"aria-label":`Topic suggestions`,children:k.map(e=>(0,w.jsx)(`button`,{type:`button`,onClick:()=>o(e),disabled:l,children:e},e))}),(0,w.jsxs)(`div`,{className:`cr-field`,children:[(0,w.jsx)(`span`,{className:`cr-field-label`,children:`Starting level`}),(0,w.jsx)(p,{ariaLabel:`Starting level`,triggerClassName:`cr-input`,value:s,onChange:e=>c(e),disabled:l,focusOnMount:!!e?.trim(),options:[{value:``,label:`Pick for me`},{value:`beginner`,label:`Beginner`},{value:`intermediate`,label:`Intermediate`},{value:`expert`,label:`Expert`}]}),(0,w.jsx)(`span`,{className:`cr-field-hint`,children:`Pick for me lets Mavéa infer the right starting point from your topic.`})]}),m&&(0,w.jsx)(`div`,{className:`cr-error`,role:`alert`,children:m}),(0,w.jsx)(`button`,{type:`submit`,className:`cr-btn cr-btn-primary cr-btn-wide`,disabled:!i.trim()||l,...a(()=>E().then(()=>void 0)),children:l?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`span`,{className:`cr-spinner`,"aria-hidden":`true`}),` Building your syllabus…`]}):`Build course`})]})]})})}function M(){"use no memo";let e=f();(0,C.useEffect)(()=>c(s()),[]),O();let t=(0,C.useRef)(x()),[n,r]=(0,C.useState)(!!t.current),[i,a]=(0,C.useState)(t.current??``),o=g(),l=(e=``)=>{a(e),r(!0)};return(0,w.jsxs)(`div`,{className:`mavea-app cr-app`,children:[(0,w.jsxs)(`header`,{className:`cr-nav`,children:[(0,w.jsxs)(`button`,{type:`button`,className:`cr-nav-back`,onClick:()=>{window.location.hash=e.href},children:[(0,w.jsx)(u.chevL,{}),` `,e.label]}),(0,w.jsxs)(`div`,{className:`cr-nav-title`,children:[`Courses`,(0,w.jsxs)(`span`,{className:`cr-nav-sub`,children:[o.length,` course`,o.length===1?``:`s`]})]}),(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary`,onClick:()=>l(),children:[(0,w.jsx)(u.plus,{}),` New course`]})]}),(0,w.jsx)(`main`,{className:`cr-main`,children:o.length===0?(0,w.jsxs)(`section`,{className:`cr-empty`,"aria-labelledby":`cr-empty-title`,children:[(0,w.jsxs)(`div`,{className:`cr-empty-copy`,children:[(0,w.jsx)(`div`,{className:`cr-empty-icon`,"aria-hidden":`true`,children:(0,w.jsx)(u.layers,{})}),(0,w.jsx)(`div`,{className:`cr-empty-eyebrow`,children:`No courses yet`}),(0,w.jsx)(`h1`,{className:`cr-empty-head`,id:`cr-empty-title`,children:`Build a clear path through anything`}),(0,w.jsx)(`p`,{className:`cr-empty-sub`,children:`Name what you want to understand. Mavéa maps the syllabus, teaches one focused lesson at a time, and turns missed checkpoints into review cards.`}),(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary cr-empty-cta`,onClick:()=>l(),children:[(0,w.jsx)(u.plus,{}),` Build your first course`]}),(0,w.jsxs)(`div`,{className:`cr-starter-row`,"aria-label":`Try a topic`,children:[(0,w.jsx)(`span`,{children:`Or try`}),k.map(e=>(0,w.jsx)(`button`,{type:`button`,onClick:()=>l(e),children:e},e))]})]}),(0,w.jsxs)(`div`,{className:`cr-course-path`,"aria-label":`How a Mavéa course works`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`01`}),(0,w.jsx)(`strong`,{children:`Shape the syllabus`}),(0,w.jsx)(`p`,{children:`A useful sequence, matched to your starting level.`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`02`}),(0,w.jsx)(`strong`,{children:`Learn visually`}),(0,w.jsx)(`p`,{children:`Focused lessons use the clearest canvas for each idea.`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`03`}),(0,w.jsx)(`strong`,{children:`Make it stick`}),(0,w.jsx)(`p`,{children:`Checkpoints and spaced review close the gaps.`})]})]})]}):(0,w.jsx)(`div`,{className:`cr-grid`,children:o.map(e=>(0,w.jsx)(A,{course:e,progress:v(e.id),onRemove:()=>y(e.id)},e.id))})}),n&&(0,w.jsx)(j,{initialTopic:i,onClose:()=>r(!1)})]})}export{M as CoursesApp};
|
|
2
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{n as a,r as o}from"./preloadableLazy-MIX1ApBW.js";import{n as s,t as c}from"./theme-7IrMJ70_.js";import{j as l}from"./index-zIa6h_8b.js";import{n as u}from"./icons-gLFQTv74.js";import{t as d}from"./useFocusTrap-DBtkeyRy.js";import{t as f}from"./homeTarget-CsO8nY7z.js";import{t as p}from"./DropSelect-QcBm3N4D.js";import{i as m}from"./store-D2IJF4SA.js";import{_ as h,c as g,h as _,l as v,m as y,s as b}from"./store-BfHRbVKz.js";import{i as x,t as S}from"./courseSeed-CZdNBTTs.js";/* empty css */import{n as ee,t as te}from"./useSrsCards-C27o39fF.js";import{t as ne}from"./deckLine-NBd3MyGT.js";var re=t(),C=e(),w=n();r();var T;function E(){return T??=Promise.all([i(()=>import(`./generateCourse-C9qvaJRo.js`).then(e=>e.n),__vite__mapDeps([0,1,2,3,4,5,6])),i(()=>import(`./useLiveConfig-Cpy0_E_-.js`).then(e=>e.d),__vite__mapDeps([7,1,8,9,5,10,2,3,4,6]))]),T}function D(){E().catch(()=>{})}function O(){return(0,C.useSyncExternalStore)(h,b,b)}function ie(e,t){S({courseId:e,lessonIdx:t}),window.location.hash=`#/course`}function ae(e,t){let n=e.lessons.filter(e=>t.lessons[e.id]?.status===`done`).length;return n>=e.lessons.length?`complete`:n>0||t.current>0?`in-progress`:`new`}var oe={beginner:`Beginner`,intermediate:`Intermediate`,expert:`Expert`},k=[`Personal finance basics`,`How the internet works`,`Spanish for travel`];function A(e){let t=(0,re.c)(67),{course:n,progress:r,onRemove:i}=e,s=(0,C.useRef)(null),[c,l]=(0,C.useState)(!1),d=n.lessons.length,f;if(t[0]!==n.lessons||t[1]!==r.lessons){let e;t[3]===r.lessons?e=t[4]:(e=e=>r.lessons[e.id]?.status===`done`,t[3]=r.lessons,t[4]=e),f=n.lessons.filter(e),t[0]=n.lessons,t[1]=r.lessons,t[2]=f}else f=t[2];let p=f.length,h;t[5]!==p||t[6]!==d?(h=d?Math.round(p/d*100):0,t[5]=p,t[6]=d,t[7]=h):h=t[7];let g=h,_=ae(n,r),v=Math.max(0,Math.min(r.current,d-1)),y=n.lessons[v],b=`Lesson ${v+1} of ${d}`,x=_===`complete`?`Review`:_===`in-progress`?`Continue`:`Start course`;te();let S;t[8]===n.title?S=t[9]:(S=e=>e.name===n.title,t[8]=n.title,t[9]=S);let T=m().decks.find(S),E,D;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(E=()=>{let e=s.current;if(!e)return;let t=ue,n=()=>{t=o(le)};if(!(`IntersectionObserver`in window))return n(),t;let r=new IntersectionObserver(e=>{e.some(ce)&&(r.disconnect(),n())});return r.observe(e),()=>{r.disconnect(),t()}},D=[],t[10]=E,t[11]=D):(E=t[10],D=t[11]),(0,C.useEffect)(E,D);let O=`cr-card cr-card-${_}`,k;t[12]===n.level?k=t[13]:(k=n.level&&(0,w.jsx)(`span`,{className:`cr-badge`,children:oe[n.level]}),t[12]=n.level,t[13]=k);let A=`cr-status cr-status-`+_,j=_===`complete`?`Complete`:_===`in-progress`?`In progress`:`New`,M;t[14]!==A||t[15]!==j?(M=(0,w.jsx)(`span`,{className:A,children:j}),t[14]=A,t[15]=j,t[16]=M):M=t[16];let N;t[17]!==M||t[18]!==k?(N=(0,w.jsxs)(`div`,{className:`cr-card-top`,children:[k,M]}),t[17]=M,t[18]=k,t[19]=N):N=t[19];let P;t[20]===n.title?P=t[21]:(P=(0,w.jsx)(`h3`,{className:`cr-card-title`,children:n.title}),t[20]=n.title,t[21]=P);let F=n.subtitle||n.topic,I;t[22]===F?I=t[23]:(I=(0,w.jsx)(`p`,{className:`cr-card-sub`,children:F}),t[22]=F,t[23]=I);let L=`${n.title} progress`,R=`${p} of ${d} lessons complete`,z=`${g}%`,B;t[24]===z?B=t[25]:(B=(0,w.jsx)(`div`,{className:`cr-progress-fill`,style:{width:z}}),t[24]=z,t[25]=B);let V;t[26]!==g||t[27]!==L||t[28]!==R||t[29]!==B?(V=(0,w.jsx)(`div`,{className:`cr-progress`,role:`progressbar`,"aria-label":L,"aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":g,"aria-valuetext":R,children:B}),t[26]=g,t[27]=L,t[28]=R,t[29]=B,t[30]=V):V=t[30];let H;t[31]===b?H=t[32]:(H=(0,w.jsx)(`span`,{children:b}),t[31]=b,t[32]=H);let U;t[33]===Symbol.for(`react.memo_cache_sentinel`)?(U=(0,w.jsx)(`span`,{className:`cr-card-meta-dot`,"aria-hidden":`true`}),t[33]=U):U=t[33];let W;t[34]!==p||t[35]!==d?(W=(0,w.jsxs)(`span`,{children:[p,`/`,d,` done`]}),t[34]=p,t[35]=d,t[36]=W):W=t[36];let G;t[37]!==H||t[38]!==W?(G=(0,w.jsxs)(`div`,{className:`cr-card-meta`,children:[H,U,W]}),t[37]=H,t[38]=W,t[39]=G):G=t[39];let K;t[40]!==y||t[41]!==_?(K=y&&(0,w.jsxs)(`div`,{className:`cr-current-lesson`,children:[(0,w.jsx)(`span`,{children:_===`complete`?`Review from`:`Up next`}),(0,w.jsx)(`strong`,{children:y.title})]}),t[40]=y,t[41]=_,t[42]=K):K=t[42];let de=T&&(0,w.jsxs)(`a`,{className:`cr-deck-link`,href:ee.deck(n.title),children:[(0,w.jsx)(u.layers,{}),ne(T)]}),q;t[43]!==n.id||t[44]!==r.current?(q=()=>ie(n.id,r.current),t[43]=n.id,t[44]=r.current,t[45]=q):q=t[45];let J,Y;t[46]===Symbol.for(`react.memo_cache_sentinel`)?(J=a(se),Y=(0,w.jsx)(u.play,{}),t[46]=J,t[47]=Y):(J=t[46],Y=t[47]);let X;t[48]!==x||t[49]!==q?(X=(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary`,onClick:q,...J,children:[Y,` `,x]}),t[48]=x,t[49]=q,t[50]=X):X=t[50];let Z;t[51]!==c||t[52]!==i?(Z=c?(0,w.jsxs)(`div`,{className:`cr-delete-confirm`,role:`group`,"aria-label":`Confirm course deletion`,children:[(0,w.jsx)(`span`,{children:`Delete?`}),(0,w.jsx)(`button`,{type:`button`,className:`cr-delete-cancel`,onClick:()=>l(!1),children:`Cancel`}),(0,w.jsx)(`button`,{type:`button`,className:`cr-icon-btn cr-icon-danger`,"aria-label":`Confirm delete course`,onClick:i,children:(0,w.jsx)(u.check,{})})]}):(0,w.jsx)(`button`,{type:`button`,className:`cr-icon-btn`,"aria-label":`Delete course`,onClick:()=>l(!0),children:(0,w.jsx)(u.x,{})}),t[51]=c,t[52]=i,t[53]=Z):Z=t[53];let Q;t[54]!==X||t[55]!==Z?(Q=(0,w.jsxs)(`div`,{className:`cr-card-actions`,children:[X,Z]}),t[54]=X,t[55]=Z,t[56]=Q):Q=t[56];let $;return t[57]!==N||t[58]!==P||t[59]!==I||t[60]!==V||t[61]!==G||t[62]!==K||t[63]!==de||t[64]!==Q||t[65]!==O?($=(0,w.jsxs)(`article`,{className:O,ref:s,children:[N,P,I,V,G,K,de,Q]}),t[57]=N,t[58]=P,t[59]=I,t[60]=V,t[61]=G,t[62]=K,t[63]=de,t[64]=Q,t[65]=O,t[66]=$):$=t[66],$}function se(){return l(`#/course`)??Promise.resolve()}function ce(e){return e.isIntersecting}function le(){return l(`#/course`)??Promise.resolve()}function ue(){}function j({initialTopic:e,onClose:t}){let n=(0,C.useRef)(null),r=(0,C.useRef)(null);d(r);let[i,o]=(0,C.useState)(e??``),[s,c]=(0,C.useState)(``),[l,f]=(0,C.useState)(!1),[m,h]=(0,C.useState)(null),g=(0,C.useRef)(null);(0,C.useEffect)(()=>()=>g.current?.abort(),[]);let v=(0,C.useCallback)(()=>{g.current?.abort(),t()},[t]);(0,C.useEffect)(()=>{let e=e=>{e.key===`Escape`&&(e.preventDefault(),v())};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[v]);let y=(0,C.useRef)(null);(0,C.useEffect)(()=>{e?.trim()||y.current?.focus()},[]),(0,C.useEffect)(()=>{let e=n.current;if(!e)return;let t=t=>{t.target===e&&v()};return e.addEventListener(`pointerdown`,t),()=>e.removeEventListener(`pointerdown`,t)},[v]);let b=async e=>{if(!e||l)return;f(!0),h(null);let t=new AbortController;g.current=t;try{let[{generateCourse:n},{getLiveConfigV2:r,toModelConfig:i}]=await E(),a=await n(e,i(r()),{level:s||void 0,signal:t.signal});if(t.signal.aborted)return;_(a),ie(a.id,0)}catch(e){if(t.signal.aborted)return;h(e instanceof Error?e.message:`Something went wrong building that course.`),f(!1)}},x=async e=>{e.preventDefault(),await b(i.trim())};return(0,w.jsx)(`div`,{className:`cr-scrim`,ref:n,children:(0,w.jsxs)(`div`,{className:`cr-sheet`,ref:r,role:`dialog`,"aria-modal":`true`,"aria-labelledby":`cr-sheet-title`,"aria-describedby":`cr-sheet-subtitle`,tabIndex:-1,children:[(0,w.jsxs)(`div`,{className:`cr-sheet-head`,children:[(0,w.jsx)(`div`,{className:`cr-sheet-mark`,"aria-hidden":`true`,children:(0,w.jsx)(u.layers,{})}),(0,w.jsxs)(`div`,{className:`cr-sheet-heading`,children:[(0,w.jsx)(`span`,{className:`cr-sheet-title`,id:`cr-sheet-title`,children:`New course`}),(0,w.jsx)(`span`,{className:`cr-sheet-subtitle`,id:`cr-sheet-subtitle`,children:`A tailored syllabus, built around what you want to understand.`})]}),(0,w.jsx)(`button`,{type:`button`,className:`cr-ed-close`,"aria-label":l?`Cancel building course`:`Close`,onClick:v,children:(0,w.jsx)(u.x,{})})]}),(0,w.jsxs)(`form`,{className:`cr-sheet-body`,"aria-busy":l,onSubmit:e=>void x(e),children:[(0,w.jsxs)(`p`,{className:`cr-legal-note`,children:[(0,w.jsx)(`strong`,{children:`Learning aid, not an authority.`}),` Lessons are AI-generated and may be wrong or incomplete. Verify consequential or professional topics with authoritative sources. `,(0,w.jsx)(`a`,{href:`#/legal?from=home`,children:`Details`})]}),(0,w.jsxs)(`label`,{className:`cr-field`,children:[(0,w.jsx)(`span`,{className:`cr-field-label`,children:`Topic`}),(0,w.jsx)(`input`,{ref:y,type:`text`,className:`cr-input`,placeholder:`e.g. linear algebra, the French Revolution, Rust ownership`,value:i,onFocus:D,onChange:e=>{D(),o(e.target.value)},disabled:l,autoComplete:`off`})]}),(0,w.jsx)(`div`,{className:`cr-topic-picks`,"aria-label":`Topic suggestions`,children:k.map(e=>(0,w.jsx)(`button`,{type:`button`,onClick:()=>o(e),disabled:l,children:e},e))}),(0,w.jsxs)(`div`,{className:`cr-field`,children:[(0,w.jsx)(`span`,{className:`cr-field-label`,children:`Starting level`}),(0,w.jsx)(p,{ariaLabel:`Starting level`,triggerClassName:`cr-input`,value:s,onChange:e=>c(e),disabled:l,focusOnMount:!!e?.trim(),options:[{value:``,label:`Pick for me`},{value:`beginner`,label:`Beginner`},{value:`intermediate`,label:`Intermediate`},{value:`expert`,label:`Expert`}]}),(0,w.jsx)(`span`,{className:`cr-field-hint`,children:`Pick for me lets Mavéa infer the right starting point from your topic.`})]}),m&&(0,w.jsx)(`div`,{className:`cr-error`,role:`alert`,children:m}),(0,w.jsx)(`button`,{type:`submit`,className:`cr-btn cr-btn-primary cr-btn-wide`,disabled:!i.trim()||l,...a(()=>E().then(()=>void 0)),children:l?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsx)(`span`,{className:`cr-spinner`,"aria-hidden":`true`}),` Building your syllabus…`]}):`Build course`})]})]})})}function M(){"use no memo";let e=f();(0,C.useEffect)(()=>c(s()),[]),O();let t=(0,C.useRef)(x()),[n,r]=(0,C.useState)(!!t.current),[i,a]=(0,C.useState)(t.current??``),o=g(),l=(e=``)=>{a(e),r(!0)};return(0,w.jsxs)(`div`,{className:`mavea-app cr-app`,children:[(0,w.jsxs)(`header`,{className:`cr-nav`,children:[(0,w.jsxs)(`button`,{type:`button`,className:`cr-nav-back`,onClick:()=>{window.location.hash=e.href},children:[(0,w.jsx)(u.chevL,{}),` `,e.label]}),(0,w.jsxs)(`div`,{className:`cr-nav-title`,children:[`Courses`,(0,w.jsxs)(`span`,{className:`cr-nav-sub`,children:[o.length,` course`,o.length===1?``:`s`]})]}),(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary`,onClick:()=>l(),children:[(0,w.jsx)(u.plus,{}),` New course`]})]}),(0,w.jsx)(`main`,{className:`cr-main`,children:o.length===0?(0,w.jsxs)(`section`,{className:`cr-empty`,"aria-labelledby":`cr-empty-title`,children:[(0,w.jsxs)(`div`,{className:`cr-empty-copy`,children:[(0,w.jsx)(`div`,{className:`cr-empty-icon`,"aria-hidden":`true`,children:(0,w.jsx)(u.layers,{})}),(0,w.jsx)(`div`,{className:`cr-empty-eyebrow`,children:`No courses yet`}),(0,w.jsx)(`h1`,{className:`cr-empty-head`,id:`cr-empty-title`,children:`Build a clear path through anything`}),(0,w.jsx)(`p`,{className:`cr-empty-sub`,children:`Name what you want to understand. Mavéa maps the syllabus, teaches one focused lesson at a time, and turns missed checkpoints into review cards.`}),(0,w.jsxs)(`button`,{type:`button`,className:`cr-btn cr-btn-primary cr-empty-cta`,onClick:()=>l(),children:[(0,w.jsx)(u.plus,{}),` Build your first course`]}),(0,w.jsxs)(`div`,{className:`cr-starter-row`,"aria-label":`Try a topic`,children:[(0,w.jsx)(`span`,{children:`Or try`}),k.map(e=>(0,w.jsx)(`button`,{type:`button`,onClick:()=>l(e),children:e},e))]})]}),(0,w.jsxs)(`div`,{className:`cr-course-path`,"aria-label":`How a Mavéa course works`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`01`}),(0,w.jsx)(`strong`,{children:`Shape the syllabus`}),(0,w.jsx)(`p`,{children:`A useful sequence, matched to your starting level.`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`02`}),(0,w.jsx)(`strong`,{children:`Learn visually`}),(0,w.jsx)(`p`,{children:`Focused lessons use the clearest canvas for each idea.`})]}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`span`,{children:`03`}),(0,w.jsx)(`strong`,{children:`Make it stick`}),(0,w.jsx)(`p`,{children:`Checkpoints and spaced review close the gaps.`})]})]})]}):(0,w.jsx)(`div`,{className:`cr-grid`,children:o.map(e=>(0,w.jsx)(A,{course:e,progress:v(e.id),onRemove:()=>y(e.id)},e.id))})}),n&&(0,w.jsx)(j,{initialTopic:i,onClose:()=>r(!1)})]})}export{M as CoursesApp};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{T as r}from"./index-
|
|
1
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{T as r}from"./index-zIa6h_8b.js";/* empty css */import{t as i}from"./useDashboards-SRk8LqHe.js";import{t as a}from"./useLedger-1WVXef68.js";import{p as o,u as s}from"./format-g3dP8OI3.js";import{t as c}from"./TrackerTile-BryDo0sm.js";var l=e(),u=t(),d=n(),f=3e4,p=12e3,m=3e3;function h(e){return new Date(e).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`})}function g(e){let t=(0,u.c)(9),{state:n}=e;if(n.paused){let e;t[0]===n.resumesAt?e=t[1]:(e=h(n.resumesAt),t[0]=n.resumesAt,t[1]=e);let r;return t[2]===e?r=t[3]:(r=(0,d.jsxs)(`span`,{className:`dash-present-budget dash-present-budget--paused`,children:[`Paused · resumes `,e]}),t[2]=e,t[3]=r),r}let r=`dash-present-budget`+(n.amber?` dash-present-budget--amber`:``),i=n.amber?` · low`:``,a;return t[4]!==n.cap||t[5]!==n.used||t[6]!==r||t[7]!==i?(a=(0,d.jsxs)(`span`,{className:r,children:[n.used,`/`,n.cap,` searches today`,i]}),t[4]=n.cap,t[5]=n.used,t[6]=r,t[7]=i,t[8]=a):a=t[8],a}function _(e){let t=(0,u.c)(42),{onClose:n}=e,r=i(),h=a(),_=o(),b;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(b=[],t[0]=b):b=t[0],(0,l.useEffect)(y,b);let[x,S]=(0,l.useState)(v),C,w;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(C=()=>{let e=window.setInterval(()=>S(Date.now()),f);return()=>window.clearInterval(e)},w=[],t[1]=C,t[2]=w):(C=t[1],w=t[2]),(0,l.useEffect)(C,w);let[T,E]=(0,l.useState)(null),D,O;t[3]===r.length?(D=t[4],O=t[5]):(D=()=>{if(r.length<2){E(null);return}let e=window.matchMedia(`(prefers-reduced-motion: reduce)`),t,n=e=>{if(t!==void 0&&window.clearInterval(t),e){E(null);return}E(0),t=window.setInterval(()=>{E(e=>((e??-1)+1)%r.length)},p)};n(e.matches);let i=e=>n(e.matches);return e.addEventListener(`change`,i),()=>{e.removeEventListener(`change`,i),t!==void 0&&window.clearInterval(t)}},O=[r.length],t[3]=r.length,t[4]=D,t[5]=O),(0,l.useEffect)(D,O);let[k,A]=(0,l.useState)(!1),j,M;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(j=()=>{let e,t=()=>{A(!1),e!==void 0&&window.clearTimeout(e),e=window.setTimeout(()=>A(!0),m)};return t(),window.addEventListener(`mousemove`,t),()=>{window.removeEventListener(`mousemove`,t),e!==void 0&&window.clearTimeout(e)}},M=[],t[6]=j,t[7]=M):(j=t[6],M=t[7]),(0,l.useEffect)(j,M);let N,P;t[8]===n?(N=t[9],P=t[10]):(N=()=>{let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},P=[n],t[8]=n,t[9]=N,t[10]=P),(0,l.useEffect)(N,P);let F;t[11]!==h||t[12]!==x||t[13]!==_.dailySearchBudget?(F=s(h,_.dailySearchBudget,x),t[11]=h,t[12]=x,t[13]=_.dailySearchBudget,t[14]=F):F=t[14];let I=F,L;t[15]===x?L=t[16]:(L=new Date(x).toLocaleTimeString([],{hour:`numeric`,minute:`2-digit`}),t[15]=x,t[16]=L);let R=L,z;t[17]===x?z=t[18]:(z=new Date(x).toLocaleDateString([],{weekday:`long`,month:`long`,day:`numeric`}),t[17]=x,t[18]=z);let B=z,V=`dash-present`+(k?` dash-present--cursor-hidden`:``),H;t[19]===R?H=t[20]:(H=(0,d.jsx)(`span`,{className:`dash-present-time`,children:R}),t[19]=R,t[20]=H);let U;t[21]===B?U=t[22]:(U=(0,d.jsx)(`span`,{className:`dash-present-date`,children:B}),t[21]=B,t[22]=U);let W;t[23]!==H||t[24]!==U?(W=(0,d.jsxs)(`div`,{className:`dash-present-clock`,children:[H,U]}),t[23]=H,t[24]=U,t[25]=W):W=t[25];let G;t[26]===I?G=t[27]:(G=(0,d.jsx)(g,{state:I}),t[26]=I,t[27]=G);let K;t[28]!==W||t[29]!==G?(K=(0,d.jsxs)(`header`,{className:`dash-present-head`,children:[W,G]}),t[28]=W,t[29]=G,t[30]=K):K=t[30];let q;t[31]!==I||t[32]!==r||t[33]!==x||t[34]!==T?(q=(0,d.jsx)(`div`,{className:`dash-present-body`,children:r.length===0?(0,d.jsx)(`p`,{className:`dash-present-empty`,children:`Nothing on watch yet.`}):(0,d.jsx)(`div`,{className:`dash-present-grid`,children:r.map((e,t)=>(0,d.jsx)(`div`,{className:`dash-present-tile-wrap`,"data-spotlight":T===null?void 0:t===T?`on`:`off`,children:(0,d.jsx)(c,{dashboard:e,now:x,paused:I.paused})},e.id))})}),t[31]=I,t[32]=r,t[33]=x,t[34]=T,t[35]=q):q=t[35];let J;t[36]===Symbol.for(`react.memo_cache_sentinel`)?(J=(0,d.jsx)(`p`,{className:`dash-present-hint`,children:`Esc or click anywhere to exit`}),t[36]=J):J=t[36];let Y;return t[37]!==n||t[38]!==V||t[39]!==K||t[40]!==q?(Y=(0,d.jsxs)(`div`,{className:V,role:`presentation`,onClick:n,children:[K,q,J]}),t[37]=n,t[38]=V,t[39]=K,t[40]=q,t[41]=Y):Y=t[41],Y}function v(){return Date.now()}function y(){return r(document)}export{_ as DashPresent};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/generateLive-B6purd69.js","assets/blockLabel-FogyzEQY.js","assets/layout-CEoNLr-w.js","assets/catalog-BHjl-1uH.js","assets/history-D2EH2X6D.js","assets/catalog-Db9GWM6N.js","assets/preload-helper-CiWYd9n-.js","assets/rolldown-runtime-DkW27tQK.js","assets/facts-BUGuVUIc.js","assets/blockTypes-DUDdP3pB.js","assets/streamParse-B-Gjwa9T.js","assets/liveSchema-B4bQtO88.js","assets/icons-gLFQTv74.js","assets/jsx-runtime-DeHZSEgm.js","assets/spokenText-C88IQJ0M.js","assets/safeImageUrl-BINWXOTz.js","assets/sourceHost-BV3t2XDb.js","assets/annotations-CftUUB13.js","assets/screen-DFWKge3-.js","assets/attachments-BW-vki-E.js","assets/providers-BovElgRL.js","assets/http-Lar_UMKb.js","assets/info-CiqHR5cs.js","assets/shapes-Cx5SCKgj.js","assets/speed-K5_Ebj-8.js","assets/cache-CvbSI-pr.js","assets/validate-sGUCmPAs.js","assets/types-C42I77wh.js","assets/json-B0N3XRZU.js","assets/verbatim-DBTj9sPD.js","assets/citation-BsSvaaer.js","assets/number-zqlPMliA.js","assets/receipts-D7zveV-I.js","assets/officeDoc-GU6Cssjf.js","assets/csv-DAqzYXUs.js","assets/search-ZN7v_P5B.js","assets/store-BWLbFXiY.js","assets/contentVault-xfUwSJ3i.js","assets/keyVault-Aw5Y2PjT.js","assets/ready-jtAUOb62.js","assets/now-C9-UAzTC.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{n as a}from"./icons-gLFQTv74.js";import{t as o}from"./TopicCanvas-LMI0zC7R.js";import{a as s}from"./loader-DKJEcbPm.js";import{t as c}from"./useFocusTrap-DBtkeyRy.js";import{r as l}from"./sourceHost-BV3t2XDb.js";import"./canvas-Bsx3eSaS.js";import{B as u,D as d,K as f,L as p,N as m,P as h,W as g,d as _,f as v,k as y,o as b,p as x,w as S}from"./store-CsjDEADX.js";import{l as C,n as w,r as ee,u as te}from"./useLiveConfig-Cpy0_E_-.js";import{t as T}from"./route-D4kd-D3B.js";import{t as ne}from"./useDashboards-SRk8LqHe.js";import{a as E,f as D,i as O,l as k,n as re,p as ie,t as ae}from"./format-g3dP8OI3.js";import{n as oe}from"./dataPending-DGdCvY5Y.js";import{t as A}from"./AreaChart-DZGCSEwt.js";import"./tiles-D-s6v-mA.js";import{a as j,n as se,o as M,s as N,t as ce}from"./useDashboardLoop-DDqCFJKY.js";import{r as le}from"./predictions-CkVKHq-5.js";import{i as ue,n as de,r as P}from"./confirmAdd-DzMO9jKV.js";import{t as fe}from"./planTracker-KKAtTBWs.js";import{t as pe}from"./pin-CZAIlpXt.js";/* empty css */import{t as me}from"./CadenceCard-P4teI7Se.js";import{t as he}from"./CheckLogRail-DkHIHL0E.js";var F=t(),I=e();function ge(e,t){for(let n of document.elementsFromPoint(e,t)){let e=n.closest(`[data-dash-widget]`);if(e)return e.getAttribute(`data-dash-widget`)}return null}function _e(e,t){let[n,r]=(0,I.useState)(null),[i,a]=(0,I.useState)(null),o=(0,I.useRef)({working:null,draggingId:null,onCommit:t,sourceIds:e,cleanup:null});o.current.onCommit=t,o.current.sourceIds=e,(0,I.useEffect)(()=>()=>o.current.cleanup?.(),[]);let s=(0,I.useCallback)(e=>t=>{if(t.button!==0&&t.pointerType===`mouse`)return;t.preventDefault();let n=[...o.current.sourceIds];o.current.working=n,o.current.draggingId=e,r(n),a(e);let i=e=>{let t=ge(e.clientX,e.clientY),n=o.current.draggingId,i=o.current.working;if(!t||!n||!i||t===n)return;let a=i.indexOf(n),s=i.indexOf(t);if(a<0||s<0||a===s)return;let c=[...i];c.splice(s,0,c.splice(a,1)[0]),o.current.working=c,r(c)},s=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s),o.current.cleanup=null;let e=o.current.working;o.current.working=null,o.current.draggingId=null,r(null),a(null),e&&o.current.onCommit(e)};o.current.cleanup=s,window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,s),window.addEventListener(`pointercancel`,s)},[]),c=(0,I.useCallback)(e=>t=>{if(t.key!==`ArrowUp`&&t.key!==`ArrowDown`)return;t.preventDefault();let n=o.current.sourceIds,r=n.indexOf(e),i=t.key===`ArrowUp`?r-1:r+1;if(r<0||i<0||i>=n.length)return;let a=[...n];a.splice(i,0,a.splice(r,1)[0]),o.current.onCommit(a)},[]);return{draggingId:i,order:n??e,handleProps:e=>({onPointerDown:s(e),onKeyDown:c(e),tabIndex:0,role:`button`,"aria-label":`Drag to reorder, or use arrow keys`})}}var L=n();function ve(e){return{id:`dash-`+(e.id??e.type),workspace:`Dashboards`,title:``,sub:``,opener:``,context:[],blocks:[{...e,col:12,delay:0}],proof:null,extras:{},group:`home`,suggests:[],keywords:[]}}function ye(e){let t=(0,F.c)(18),{dashboard:n,widget:r,editing:i,dragging:a,children:s,footer:c}=e,l;t[0]!==n||t[1]!==r?(l=N(n,r),t[0]=n,t[1]=r,t[2]=l):l=t[2];let u=l,d;t[3]===u?d=t[4]:(d=ve(u),t[3]=u,t[4]=d);let f=d,p=`dash-span-${r.span}`,m=i?`dash-tile--editing`:``,h=a?`dash-tile--dragging`:``,g;t[5]!==p||t[6]!==m||t[7]!==h?(g=[`dash-tile`,p,m,h].filter(Boolean),t[5]=p,t[6]=m,t[7]=h,t[8]=g):g=t[8];let _=g.join(` `),v;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(v={},t[9]=v):v=t[9];let y;t[10]===f?y=t[11]:(y=(0,L.jsx)(o,{data:f,spot:null,built:v,onProve:be}),t[10]=f,t[11]=y);let b;return t[12]!==s||t[13]!==_||t[14]!==c||t[15]!==y||t[16]!==r.id?(b=(0,L.jsxs)(`div`,{className:_,"data-dash-widget":r.id,children:[s,y,c]}),t[12]=s,t[13]=_,t[14]=c,t[15]=y,t[16]=r.id,t[17]=b):b=t[17],b}function be(){}function R(){return`w-`+Math.random().toString(36).slice(2,8)}function xe(e){let t=new Set(e.widgets.map(e=>e.block.type));return[{key:`note`,label:`Note`,make:()=>({block:{type:`list`,col:12,id:R(),props:{title:`Note`,items:[`Add a note about this dashboard.`]}},span:2})},{key:`thesis`,label:`Reasoning note`,make:()=>({block:{type:`thesis`,col:12,id:R(),props:{reasoning:``}},span:2})},{key:`alignmentgauge`,label:`Alignment gauge`,make:()=>({block:{type:`alignmentgauge`,col:12,id:R(),props:{pct:null}},span:1})},{key:`standingalerts`,label:`Standing alerts`,make:()=>({block:{type:`standingalerts`,col:12,id:R(),props:{alerts:[]}},span:1})},{key:`sourceslineage`,label:`Sources`,make:()=>({block:{type:`sourceslineage`,col:12,id:R(),props:{rows:[]}},span:2})}].filter(e=>e.key===`note`||!t.has(e.key))}function Se(e){let t=(0,F.c)(26),{dashboard:n,onClose:r}=e,[i,a]=(0,I.useState)(`menu`),[o,s]=(0,I.useState)(``),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),p=xe(n),m=!!C(w()).apiKey,h;t[0]!==n||t[1]!==r?(h=e=>{let{block:t,span:i}=e.make(),a={id:R(),block:t,span:i,fromSource:`manual`};b(n.id,a),r()},t[0]=n,t[1]=r,t[2]=h):h=t[2];let g=h,y=(0,I.useRef)(!0),x,S;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(x=()=>(y.current=!0,()=>{y.current=!1}),S=[],t[3]=x,t[4]=S):(x=t[3],S=t[4]),(0,I.useEffect)(x,S);let ee;t[5]!==o||t[6]!==n||t[7]!==r||t[8]!==l?(ee=async()=>{let e=o.trim();if(!e||l)return;if(n.metrics.length>=12||n.widgets.length>=12){f(`This board is full — remove a card or metric first, then track another number.`);return}u(!0),f(null);let t=await fe(e,C(w()));if(!y.current)return;let i=t.metrics[0];if(!i){u(!1),f(`No single number found in that — the Track bar on the Dashboards home builds richer trackers.`);return}let a=Date.now(),s={id:`m-${a}`,label:i.label,query:i.query,...i.unit?{unit:i.unit}:{},sourceQuote:{text:i.label,saidAt:a},lastValue:null,origin:`empty`},c={id:R(),block:{type:`insight`,col:12,id:`blk-${a}`,num:`1`,props:{title:s.label,stat:`—`,conf:`inferred`,summary:s.label}},span:1,metricId:s.id,fromSource:`manual`},d=de(n);v(n.id,{metrics:[s],tripwires:[],widgets:[c],source:{kind:`ADDED`,conversationId:`manual`,title:`Added by hand`,contributed:`Tracking ${s.label}`,at:a}}),_(n.id,a);let p=await ue(n.id,d);if(y.current){if(p!==`confirmed`){u(!1),f(P(p));return}r()}},t[5]=o,t[6]=n,t[7]=r,t[8]=l,t[9]=ee):ee=t[9];let te=ee,T=(0,I.useRef)(null),ne;t[10]===r?ne=t[11]:(ne={onEscape:r},t[10]=r,t[11]=ne),c(T,ne);let E=(0,I.useRef)(null),D,O;t[12]===i?(D=t[13],O=t[14]):(D=()=>{i===`track`?E.current?.focus():T.current?.querySelector(`.dash-palette-item`)?.focus()},O=[i],t[12]=i,t[13]=D,t[14]=O),(0,I.useEffect)(D,O);let k,re;t[15]===r?(k=t[16],re=t[17]):(k=()=>{let e=T.current?.parentElement;if(!e)return;let t=t=>{e.contains(t.target)||r()};return document.addEventListener(`pointerdown`,t),()=>document.removeEventListener(`pointerdown`,t)},re=[r],t[15]=r,t[16]=k,t[17]=re),(0,I.useEffect)(k,re);let ie;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(ie=e=>{let t=Array.from(T.current?.querySelectorAll(`.dash-palette-item`)??[]);t.length&&t[(t.indexOf(document.activeElement)+e+t.length)%t.length]?.focus()},t[18]=ie):ie=t[18];let ae=ie,oe=i===`menu`?`menu`:`dialog`,A=i===`menu`?`Add a widget`:`Track a number`,j;t[19]===i?j=t[20]:(j=e=>{i===`menu`&&(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),ae(e.key===`ArrowDown`?1:-1))},t[19]=i,t[20]=j);let se=i===`menu`?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`button`,{type:`button`,role:`menuitem`,className:`dash-palette-item dash-palette-lead`,onClick:()=>a(`track`),children:`+ Track a number`}),p.map(e=>(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`dash-palette-item`,onClick:()=>g(e),children:[`+ `,e.label]},e.key))]}):(0,L.jsxs)(`div`,{className:`dash-ptrack`,children:[(0,L.jsxs)(`div`,{className:`dash-ptrack-head`,children:[(0,L.jsx)(`button`,{type:`button`,className:`dash-ptrack-back`,"aria-label":`Back to widget list`,onClick:()=>a(`menu`),children:`←`}),(0,L.jsx)(`span`,{className:`dash-ptrack-kicker`,children:`Track a number`})]}),m?(0,L.jsxs)(`form`,{className:`dash-ptrack-form`,onSubmit:e=>{e.preventDefault(),te()},children:[(0,L.jsx)(`input`,{ref:E,className:`dash-ptrack-input`,value:o,placeholder:`BTC price, SF temperature, 10-year yield…`,"aria-label":`What number to track`,disabled:l,onChange:e=>s(e.target.value)}),d&&(0,L.jsx)(`p`,{className:`dash-ptrack-err`,children:d}),(0,L.jsx)(`button`,{type:`submit`,className:`dash-ptrack-go`,disabled:l||!o.trim(),children:l?`Planning…`:`Track · 1 call + 1 search`})]}):(0,L.jsxs)(`p`,{className:`dash-ptrack-gate`,children:[`A tracked number is fetched by real web searches on your own key — nothing is ever made up. `,(0,L.jsx)(`a`,{href:`#/live`,children:`Connect a model in Live`}),` first.`]})]}),M;return t[21]!==oe||t[22]!==A||t[23]!==j||t[24]!==se?(M=(0,L.jsx)(`div`,{ref:T,className:`dash-palette`,role:oe,"aria-label":A,tabIndex:-1,onKeyDown:j,children:se}),t[21]=oe,t[22]=A,t[23]=j,t[24]=se,t[25]=M):M=t[25],M}function Ce(e){let t=(0,F.c)(24),{dashboardId:n,metric:r}=e,i=r.lastValue===null?``:String(r.lastValue),[a,o]=(0,I.useState)(i),[s,c]=(0,I.useState)(i);i!==s&&(c(i),o(i));let l;t[0]!==n||t[1]!==r.id||t[2]!==r.lastValue||t[3]!==r.unit||t[4]!==a?(l=()=>{let e=Number(a.replace(/[^0-9.+-]/g,``));if(a.trim()===``||!Number.isFinite(e))return;let t=Date.now(),i=r.lastValue;m(n,r.id,e,k(String(e),r.unit),`user`,t);let o=x(n);if(o){let{tripwires:e}=M(o,{[r.id]:i});h(n,e,t)}},t[0]=n,t[1]=r.id,t[2]=r.lastValue,t[3]=r.unit,t[4]=a,t[5]=l):l=t[5];let u=l,d;t[6]===u?d=t[7]:(d=e=>{e.preventDefault(),u()},t[6]=u,t[7]=d);let f=`Set ${r.label}…`,p=`Set ${r.label}`,g;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(g=e=>o(e.target.value),t[8]=g):g=t[8];let _;t[9]!==f||t[10]!==p||t[11]!==a?(_=(0,L.jsx)(`input`,{className:`dash-fill-input`,value:a,inputMode:`decimal`,placeholder:f,"aria-label":p,onChange:g}),t[9]=f,t[10]=p,t[11]=a,t[12]=_):_=t[12];let v;t[13]===r.unit?v=t[14]:(v=r.unit&&(0,L.jsx)(`span`,{className:`dash-fill-unit`,children:r.unit}),t[13]=r.unit,t[14]=v);let y;t[15]===a?y=t[16]:(y=a.trim(),t[15]=a,t[16]=y);let b=y===``,S;t[17]===b?S=t[18]:(S=(0,L.jsx)(`button`,{type:`submit`,className:`dash-fill-save`,disabled:b,children:`Save`}),t[17]=b,t[18]=S);let C;return t[19]!==S||t[20]!==d||t[21]!==_||t[22]!==v?(C=(0,L.jsxs)(`form`,{className:`dash-fill`,onSubmit:d,children:[_,v,S]}),t[19]=S,t[20]=d,t[21]=_,t[22]=v,t[23]=C):C=t[23],C}r();var we=()=>i(()=>import(`./generateLive-B6purd69.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]));function z(){return!!C(w()).apiKey}function B(e){let t=(0,F.c)(15),[n,r]=(0,I.useState)(!1),[i,a]=(0,I.useState)(null),[o,s]=(0,I.useState)(null),c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=[],t[0]=c):c=t[0];let l=(0,I.useRef)(c),u=(0,I.useRef)(!1),d=(0,I.useRef)(null),f;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(f=()=>{d.current?.abort(),d.current=null,u.current=!1,l.current=[],r(!1),a(null),s(null)},t[1]=f):f=t[1];let p;t[2]===e.id?p=t[3]:(p=[e.id],t[2]=e.id,t[3]=p),(0,I.useEffect)(f,p);let m,h;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(m=()=>()=>d.current?.abort(),h=[],t[4]=m,t[5]=h):(m=t[4],h=t[5]),(0,I.useEffect)(m,h);let g;t[6]===e?g=t[7]:(g=t=>{let n=t.trim();if(!n||u.current||!z())return;u.current=!0,r(!0),s(n);let i=C(w()),o=e.widgets.map(t=>N(e,t)),c=new AbortController;d.current=c,we().then(e=>{let{generateLive:t}=e;return t(n,l.current,i,void 0,{selectedBlocks:o,signal:c.signal,caps:{searchMode:`realtime`}})}).then(e=>{c.signal.aborted||(e.error||(l.current=[...l.current,{role:`user`,content:n},{role:`assistant`,content:e.narration}].slice(-8)),a(e))}).catch(()=>{c.signal.aborted||a(null)}).finally(()=>{c.signal.aborted||(u.current=!1,r(!1))})},t[6]=e,t[7]=g);let _=g,v;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(v=()=>{d.current?.abort(),u.current=!1,r(!1),a(null),s(null)},t[8]=v):v=t[8];let y=v,b;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(b=z(),t[9]=b):b=t[9];let x;return t[10]!==o||t[11]!==n||t[12]!==i||t[13]!==_?(x={ready:b,loading:n,result:i,lastAsk:o,run:_,reset:y},t[10]=o,t[11]=n,t[12]=i,t[13]=_,t[14]=x):x=t[14],x}var Te=/^(add|track|watch|monitor|follow)\b/i;function V(e){let t=e.trim();return t&&Te.test(t)?`add`:`ask`}function Ee(e){let t=[];return e.tripwires.length>0&&t.push(`Are the numbers holding where I want?`,`Which alert is closest to triggering?`),e.metrics[0]&&t.push(`What does ${e.metrics[0].label} tell me right now?`),t.push(`What changed since the last update?`),t.slice(0,3)}function H(e,t,n){n.length!==0&&pe({block:n,question:t,target:e,fromSource:`talk`,firstCheck:!1,source:{kind:`ADDED`,conversationId:`talk`,title:`Asked: “${t}”`,contributed:`Pinned ${Math.min(n.length,4)} from this question`,at:Date.now()}})}function De(e){let t=(0,F.c)(29),{dashboard:n}=e,r=B(n),[i,a]=(0,I.useState)(``),[s,c]=(0,I.useState)(!1),[l,u]=(0,I.useState)(`ask`),d;t[0]===n?d=t[1]:(d=Ee(n),t[0]=n,t[1]=d);let f=d,p;t[2]===r?p=t[3]:(p=e=>{c(!1),u(V(e)),r.run(e),a(``)},t[2]=r,t[3]=p);let m=p,h,g;t[4]!==l||t[5]!==n.id||t[6]!==s||t[7]!==r.lastAsk||t[8]!==r.loading||t[9]!==r.result?(h=()=>{l===`add`&&!r.loading&&r.result&&!r.result.error&&r.result.spec.blocks.length>0&&!s&&(H(n.id,r.lastAsk??``,r.result.spec.blocks),c(!0))},g=[l,r.loading,r.result,r.lastAsk,s,n.id],t[4]=l,t[5]=n.id,t[6]=s,t[7]=r.lastAsk,t[8]=r.loading,t[9]=r.result,t[10]=h,t[11]=g):(h=t[10],g=t[11]),(0,I.useEffect)(h,g);let _;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,L.jsx)(`div`,{className:`card-eyebrow dash-talk-eyebrow`,children:`Talk to this dashboard`}),t[12]=_):_=t[12];let v;t[13]!==f||t[14]!==i||t[15]!==m||t[16]!==r.loading||t[17]!==r.ready?(v=r.ready?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`div`,{className:`dash-talk-chips`,children:f.map(e=>(0,L.jsxs)(`button`,{type:`button`,className:`dash-talk-chip`,disabled:r.loading,onClick:()=>m(e),children:[(0,L.jsx)(`span`,{className:`dash-talk-chip-orb`}),(0,L.jsxs)(`span`,{className:`dash-talk-chip-t`,children:[`“`,e,`”`]})]},e))}),(0,L.jsxs)(`form`,{className:`dash-talk-ask`,onSubmit:e=>{e.preventDefault(),m(i)},children:[(0,L.jsx)(`input`,{className:`dash-talk-input`,value:i,placeholder:`Ask a question, or type "add …" / "track …" to add it in one step`,onChange:e=>a(e.target.value),disabled:r.loading}),(0,L.jsx)(`button`,{type:`submit`,className:`dash-talk-send`,disabled:r.loading||!i.trim(),children:r.loading?`Thinking…`:`Ask`})]})]}):(0,L.jsxs)(`p`,{className:`dash-talk-gate`,children:[`Connect a model in `,(0,L.jsx)(`a`,{href:`#/live`,children:`Live`}),` to ask questions grounded in this dashboard.`]}),t[13]=f,t[14]=i,t[15]=m,t[16]=r.loading,t[17]=r.ready,t[18]=v):v=t[18];let y;t[19]!==l||t[20]!==n.id||t[21]!==s||t[22]!==r.lastAsk||t[23]!==r.loading||t[24]!==r.result?(y=r.lastAsk&&(0,L.jsxs)(`div`,{className:`dash-talk-answer`,children:[(0,L.jsxs)(`div`,{className:`dash-talk-q`,children:[`“`,r.lastAsk,`”`]}),r.loading?(0,L.jsx)(`div`,{className:`dash-talk-thinking`,children:`Mavéa is looking at your dashboard…`}):r.result?.error?(0,L.jsxs)(`div`,{className:`dash-talk-error`,children:[`That didn’t go through. Check your model in `,(0,L.jsx)(`a`,{href:`#/live`,children:`Live`}),` and try again.`]}):r.result?(0,L.jsxs)(L.Fragment,{children:[r.result.narration&&(0,L.jsx)(`p`,{className:`dash-talk-narration`,children:r.result.narration}),(0,L.jsx)(o,{data:r.result.spec,spot:null,built:{},onProve:U}),r.result.spec.blocks.length>0&&(s?(0,L.jsx)(`div`,{className:`dash-talk-pinned`,children:l===`add`?(0,L.jsx)(L.Fragment,{children:`Auto-added — this read like a command, not a question. Remove it from Edit layout if that’s wrong.`}):`Added to this dashboard ✓`}):l===`add`?null:(0,L.jsx)(`button`,{type:`button`,className:`dash-talk-pin`,onClick:()=>{H(n.id,r.lastAsk??``,r.result.spec.blocks),c(!0)},children:`+ Add this to the dashboard`}))]}):null]}),t[19]=l,t[20]=n.id,t[21]=s,t[22]=r.lastAsk,t[23]=r.loading,t[24]=r.result,t[25]=y):y=t[25];let b;return t[26]!==v||t[27]!==y?(b=(0,L.jsxs)(`section`,{className:`dash-talk`,children:[_,v,y]}),t[26]=v,t[27]=y,t[28]=b):b=t[28],b}function U(){}function Oe(e){if(!e.history||e.history.length<2)return null;let t=e.history[e.history.length-2].value,n=e.history[e.history.length-1].value;if(n===t)return null;let r=n>t?`up`:`down`,i=Math.round(Math.abs(n-t)*100)/100;if(i===0)return null;let a=Number.isInteger(i)?String(i):i.toFixed(2),o=e.unit===`$`?`$`:``,s=e.unit&&e.unit!==`$`?e.unit:``;return{direction:r,text:`${r===`up`?`+`:`-`}${o}${a}${s}`}}function ke(e){return new Date(e).toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function W(e){if(e<=0)return`due now`;let t=Math.round(e/6e4);if(t<60)return`${t}m`;let n=Math.floor(t/60),r=t%60;if(n<24)return r?`${n}h ${r}m`:`${n}h`;let i=Math.floor(n/24),a=n%24;return a?`${i}d ${a}h`:`${i}d`}function Ae({dashboard:e,now:t,checking:n=!1}){let r=(0,I.useMemo)(()=>e.metrics.find(e=>e.lastValue!==null)??e.metrics[0],[e.metrics]),i=E(e);if(!i||!r)return null;let a=Oe(r),o=i.label||e.title,s=r.asOf??e.lastRefreshedAt??null,c=e.cadence.data===`manual`?`when you refresh`:W(e.nextDataAt-t),l=r.history??[];return(0,L.jsxs)(`section`,{className:`card dash-hero`,"aria-label":`${o} — as of last check`,children:[(0,L.jsxs)(`div`,{className:`dash-hero-top`,children:[(0,L.jsxs)(`span`,{className:`dash-hero-eyebrow`,children:[o,`: as of last check`]}),(0,L.jsx)(`span`,{className:`dash-hero-meta`,children:n?`checking for new data…`:`as of ${s?ke(s):`not yet checked`} / not real-time — next check ${c}`})]}),(0,L.jsxs)(`div`,{className:`dash-hero-value-row`,children:[(0,L.jsx)(`span`,{className:`dash-hero-value${n?` tile-value--checking`:``}`,children:i.value}),a&&(0,L.jsx)(`span`,{className:`dash-hero-delta dash-hero-delta--${a.direction}`,children:a.text})]}),(0,L.jsx)(`div`,{className:`dash-hero-chart`,children:l.length>=2?(0,L.jsx)(A,{points:l,tone:a?.direction??`flat`}):(0,L.jsx)(`p`,{className:`dash-hero-chart-empty`,children:`Not enough history yet for a chart.`})})]})}function je(e){let t=(0,F.c)(6),{dashboard:n}=e,[r,i]=te();if(ie().keyNudgeShown||!ee(r)||r.rememberKey||!O(n))return null;let a=Me,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,L.jsx)(`p`,{className:`dash-key-nudge-text`,children:`Mavéa checks this with your key, which currently lives only in this tab. Keep it on this device (encrypted) so checks still work after a reload?`}),t[0]=o):o=t[0];let s;t[1]===i?s=t[2]:(s=(0,L.jsx)(`button`,{type:`button`,className:`dash-key-nudge-keep`,onClick:()=>{i({rememberKey:!0}),a()},children:`Keep key on this device`}),t[1]=i,t[2]=s);let c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,L.jsx)(`button`,{type:`button`,className:`dash-key-nudge-dismiss`,onClick:a,children:`Not now`}),t[3]=c):c=t[3];let l;return t[4]===s?l=t[5]:(l=(0,L.jsxs)(`div`,{className:`card dash-key-nudge`,children:[o,(0,L.jsxs)(`div`,{className:`dash-key-nudge-actions`,children:[s,c]})]}),t[4]=s,t[5]=l),l}function Me(){return D({keyNudgeShown:!0})}var G={hit:{label:`Called it ✓`,className:`is-hit`},miss:{label:`Missed ✗`,className:`is-miss`},unclear:{label:`Unclear`,className:`is-unclear`}};function K(e){let t=(0,F.c)(21),{dashboard:n,now:r}=e,i;t[0]===n.predictionHistory?i=t[1]:(i=n.predictionHistory??[],t[0]=n.predictionHistory,t[1]=i);let a=i,o=a.length>0?a[a.length-1]:null;if(!n.prediction&&!o)return null;let s;t[2]!==n.predictionHistory||t[3]!==r?(s=le(n.predictionHistory,r),t[2]=n.predictionHistory,t[3]=r,t[4]=s):s=t[4];let c=s,l=o?G[o.result]:null,u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,L.jsx)(`span`,{className:`card-eyebrow dash-expects-eyebrow`,children:`Expects by next check`}),t[5]=u):u=t[5];let d;t[6]===n.prediction?d=t[7]:(d=n.prediction&&(0,L.jsx)(`p`,{className:`dash-expects-text`,children:n.prediction.text}),t[6]=n.prediction,t[7]=d);let f;t[8]!==l||t[9]!==o?(f=o&&l&&(0,L.jsxs)(`div`,{className:`dash-expects-grade`,children:[(0,L.jsxs)(`span`,{className:`dash-expects-chip ${l.className}`,children:[`Last call: `,l.label]}),(0,L.jsxs)(`p`,{className:`dash-expects-expected`,children:[`“`,o.expected,`”`]}),o.note&&(0,L.jsx)(`p`,{className:`dash-expects-note`,children:o.note})]}),t[8]=l,t[9]=o,t[10]=f):f=t[10];let p;t[11]!==c.hits||t[12]!==c.total?(p=c.total>0&&(0,L.jsxs)(`span`,{className:`dash-expects-tally`,children:[`Calls this week · `,c.hits,`/`,c.total]}),t[11]=c.hits,t[12]=c.total,t[13]=p):p=t[13];let m;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,L.jsx)(`span`,{className:`dash-expects-label`,children:`Predictions are free — written from checks you already paid for`}),t[14]=m):m=t[14];let h;t[15]===p?h=t[16]:(h=(0,L.jsxs)(`div`,{className:`dash-expects-foot`,children:[p,m]}),t[15]=p,t[16]=h);let g;return t[17]!==d||t[18]!==f||t[19]!==h?(g=(0,L.jsxs)(`div`,{className:`dash-expects`,children:[u,d,f,h]}),t[17]=d,t[18]=f,t[19]=h,t[20]=g):g=t[20],g}function Ne(e){let t=(0,F.c)(23),{dashboard:n,now:r}=e,i=j(n.id);if(!(n.tripwires.length>0||n.lastVerdict||n.prediction||i))return null;let a=n.lastVerdict,o;t[0]!==n.tripwires||t[1]!==a?(o=a?n.tripwires.find(e=>e.id===a.tripwireId)??null:null,t[0]=n.tripwires,t[1]=a,t[2]=o):o=t[2];let s=o,c=!!n.lastVerdictError&&(n.lastVerdictAttemptAt??0)>(a?.at??0),l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,L.jsx)(`span`,{className:`card-eyebrow dash-lastcheck-eyebrow`,children:`From the last check`}),t[3]=l):l=t[3];let u;t[4]!==r||t[5]!==a?(u=a&&(0,L.jsx)(`span`,{className:`dash-lastcheck-when`,children:ae(a.at,r).replace(/^updated /,`checked `)}),t[4]=r,t[5]=a,t[6]=u):u=t[6];let d;t[7]===u?d=t[8]:(d=(0,L.jsxs)(`div`,{className:`dash-lastcheck-head`,children:[l,u]}),t[7]=u,t[8]=d);let f;t[9]!==n||t[10]!==c||t[11]!==r||t[12]!==i||t[13]!==s||t[14]!==a?(f=a?(0,L.jsxs)(L.Fragment,{children:[s&&(0,L.jsxs)(`p`,{className:`dash-lastcheck-text dash-lastcheck-about`,children:[`About: `,s.label]}),i?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-pending`,children:`Mavéa is reading the latest numbers…`}):c&&(0,L.jsxs)(`p`,{className:`dash-lastcheck-text dash-lastcheck-error`,children:[`A newer check just failed: `,n.lastVerdictError]}),(0,L.jsx)(`p`,{className:`dash-lastcheck-text`,children:a.text}),a.grounded===!1&&(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-qualifier`,children:`Based on background knowledge, not a fresh search.`}),a.sources&&a.sources.length>0&&(0,L.jsx)(`div`,{className:`dash-lastcheck-sources`,children:a.sources.map(q)})]}):i?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-pending`,children:`Mavéa is reading the latest numbers…`}):c?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-error`,children:n.lastVerdictError}):(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-muted`,children:re(n,r)}),t[9]=n,t[10]=c,t[11]=r,t[12]=i,t[13]=s,t[14]=a,t[15]=f):f=t[15];let p;t[16]!==n||t[17]!==r?(p=(0,L.jsx)(K,{dashboard:n,now:r}),t[16]=n,t[17]=r,t[18]=p):p=t[18];let m;return t[19]!==d||t[20]!==f||t[21]!==p?(m=(0,L.jsxs)(`section`,{className:`dash-lastcheck`,"aria-label":`From the last check`,children:[d,f,p]}),t[19]=d,t[20]=f,t[21]=p,t[22]=m):m=t[22],m}function q(e){let t=l(e.url);return t?(0,L.jsx)(`a`,{className:`dash-lastcheck-source`,href:t,target:`_blank`,rel:`noopener noreferrer`,title:e.title,children:e.title},e.url):null}var J={WATCHING:`Watching`,CLEAR:`Clear`,AWAITING:`Awaiting data`,TRIGGERED:`Triggered`};function Y(e){let t=(0,F.c)(15),{tripwire:n}=e,r=n.state===`TRIGGERED`,i=`dash-alertcard-row`+(r?` is-triggered`:``),a=`dash-switch`+(n.state===`AWAITING`?``:` on`),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,L.jsx)(`span`,{className:`dash-switch-knob`}),t[0]=o):o=t[0];let s;t[1]===a?s=t[2]:(s=(0,L.jsx)(`span`,{className:a,"aria-hidden":`true`,children:o}),t[1]=a,t[2]=s);let c=n.sourceQuote.text||n.label,l;t[3]===c?l=t[4]:(l=(0,L.jsx)(`span`,{className:`dash-alertcard-line`,children:c}),t[3]=c,t[4]=l);let u;t[5]!==r||t[6]!==n.state?(u=r?(0,L.jsx)(`span`,{className:`dash-alertcard-crossed`,children:`A line you set has been crossed`}):(0,L.jsx)(`span`,{className:`dash-alertcard-state`,children:J[n.state]}),t[5]=r,t[6]=n.state,t[7]=u):u=t[7];let d;t[8]!==l||t[9]!==u?(d=(0,L.jsxs)(`div`,{className:`dash-alertcard-body`,children:[l,u]}),t[8]=l,t[9]=u,t[10]=d):d=t[10];let f;return t[11]!==i||t[12]!==s||t[13]!==d?(f=(0,L.jsxs)(`li`,{className:i,children:[s,d]}),t[11]=i,t[12]=s,t[13]=d,t[14]=f):f=t[14],f}function Pe(e){let t=(0,F.c)(5),{dashboard:n}=e;if(n.tripwires.length===0)return null;let r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,L.jsx)(`div`,{className:`card-eyebrow`,children:`Your alerts`}),t[0]=r):r=t[0];let i;t[1]===n.tripwires?i=t[2]:(i=n.tripwires.map(X),t[1]=n.tripwires,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,L.jsxs)(`section`,{className:`card dash-alertcard`,"aria-label":`Your alerts`,children:[r,(0,L.jsx)(`ul`,{className:`dash-alertcard-list`,children:i})]}),t[3]=i,t[4]=a),a}function X(e){return(0,L.jsx)(Y,{tripwire:e},e.id)}var Z={scheduled:`Scheduled`,search:`Search`,sources:`Sources`,extraction:`Extraction`,grounding:`Grounding`,saved:`Saved`,tripwires:`Lines checked`},Fe={updated:`New data saved`,"no-change":`Checked — nothing new`,unverified:`Nothing could be verified`,failed:`The check could not run`};function Ie(e){if(e.endedAt===void 0)return`…`;let t=(e.endedAt-e.startedAt)/1e3;return t<1?`${Math.max(1,Math.round(t*1e3))}ms`:`${t.toFixed(1)}s`}function Le(e){let t=(0,F.c)(13),{dashboardId:n}=e,r,i;t[0]===n?(r=t[1],i=t[2]):(r=()=>u(n),i=()=>u(n),t[0]=n,t[1]=r,t[2]=i);let a=(0,I.useSyncExternalStore)(g,r,i),[o,s]=(0,I.useState)(!1),c=a[0];if(!c)return null;let l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=()=>s(Q),t[3]=l):l=t[3];let d=o?`Hide`:`What happened on the last check?`,f;t[4]!==o||t[5]!==d?(f=(0,L.jsx)(`button`,{type:`button`,className:`crp-toggle`,"aria-expanded":o,onClick:l,children:d}),t[4]=o,t[5]=d,t[6]=f):f=t[6];let m;t[7]!==c||t[8]!==o?(m=o&&(0,L.jsxs)(`ol`,{className:`crp-steps`,children:[c.steps.map(Re),(0,L.jsxs)(`li`,{className:`crp-foot`,children:[(0,L.jsx)(`span`,{children:c.outcome?Fe[c.outcome]:`Running…`}),(0,L.jsx)(`span`,{className:`crp-foot-time`,children:Ie(c)})]}),c.failure&&(0,L.jsx)(`li`,{className:`crp-fix`,children:p(c.failure)})]}),t[7]=c,t[8]=o,t[9]=m):m=t[9];let h;return t[10]!==f||t[11]!==m?(h=(0,L.jsxs)(`section`,{className:`crp`,children:[f,m]}),t[10]=f,t[11]=m,t[12]=h):h=t[12],h}function Re(e,t){return(0,L.jsxs)(`li`,{className:e.ok?`crp-step`:`crp-step is-bad`,children:[(0,L.jsx)(`span`,{className:`crp-step-mark`,"aria-hidden":`true`,children:e.ok?`✓`:`✕`}),(0,L.jsx)(`span`,{className:`crp-step-name`,children:Z[e.name]}),e.count!==void 0&&(0,L.jsx)(`span`,{className:`crp-step-count`,children:e.count}),e.detail&&(0,L.jsx)(`span`,{className:`crp-step-detail`,children:e.detail})]},`${e.name}-${t}`)}function Q(e){return!e}var ze={1:`S`,2:`M`,3:`L`};function $(e){let t=(0,F.c)(120),{id:n}=e,r=ne(),i;t[0]!==r||t[1]!==n?(i=r.find(e=>e.id===n)??null,t[0]=r,t[1]=n,t[2]=i):i=t[2];let o=i,[c,l]=(0,I.useState)(!1),[u,p]=(0,I.useState)(!1),m;t[3]===o?.widgets?m=t[4]:(m=o?.widgets.map(Ge)??[],t[3]=o?.widgets,t[4]=m);let h=m,g;t[5]===o?g=t[6]:(g=e=>o&&d(o.id,e),t[5]=o,t[6]=g);let _=_e(h,g),v;t[7]===o?.widgets?v=t[8]:(v=new Map((o?.widgets??[]).map(We)),t[7]=o?.widgets,t[8]=v);let b=v,x,C;t[9]===o?(x=t[10],C=t[11]):(x=()=>{o&&s(o.widgets.map(Ue))},C=[o],t[9]=o,t[10]=x,t[11]=C),(0,I.useEffect)(x,C);let w=o?.id,E,D;t[12]===w?(E=t[13],D=t[14]):(E=()=>{w&&f(w)},D=[w],t[12]=w,t[13]=E,t[14]=D),(0,I.useEffect)(E,D);let[k,ie]=(0,I.useState)(He),ae,A;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(A=()=>{let e=window.setInterval(()=>ie(Date.now()),3e4);return()=>window.clearInterval(e)},ae=[],t[15]=ae,t[16]=A):(ae=t[15],A=t[16]),(0,I.useEffect)(A,ae);let[j]=te(),M=oe(o?.id??``),[N,le]=(0,I.useState)(`idle`),ue;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(ue=async e=>{le(`busy`);let t=await se(e);le(t===`no-model`||t===`failed`||t===`unverified`?t:`idle`)},t[17]=ue):ue=t[17];let de=ue,[P,fe]=(0,I.useState)(`idle`),pe;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(pe=async e=>{fe(`busy`);let t=await ce(e);fe(t===`no-model`||t===`failed`?t:`idle`)},t[18]=pe):pe=t[18];let ge=pe;if(!o){let e;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,L.jsx)(`p`,{className:`dash-empty-title`,children:`That dashboard isn’t here.`}),t[19]=e):e=t[19];let n;return t[20]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,L.jsx)(`div`,{className:`dash-detail`,children:(0,L.jsxs)(`div`,{className:`dash-empty`,children:[e,(0,L.jsxs)(`p`,{className:`dash-empty-how`,children:[`It may have been removed. `,(0,L.jsx)(`a`,{href:T.gallery,children:`Back to your dashboards →`})]})]})}),t[20]=n):n=t[20],n}let ve;t[21]===o.id?ve=t[22]:(ve=(e,t)=>{y(o.id,e,t>=3?1:t+1)},t[21]=o.id,t[22]=ve);let be=ve,R;t[23]!==b||t[24]!==be||t[25]!==o||t[26]!==c||t[27]!==_?(R=_.order.map(e=>{let t=b.get(e);if(!t)return null;let n=t.metricId?o.metrics.find(e=>e.id===t.metricId):null,r=!c&&n?.blankKey?(0,L.jsx)(Ce,{dashboardId:o.id,metric:n}):void 0;return(0,L.jsx)(ye,{dashboard:o,widget:t,editing:c,dragging:_.draggingId===t.id,footer:r,children:c&&(0,L.jsxs)(`div`,{className:`dash-tile-chrome`,children:[(0,L.jsx)(`span`,{className:`dash-tile-handle`,..._.handleProps(t.id),children:`⠿`}),(0,L.jsxs)(`div`,{className:`dash-tile-ctrls`,children:[(0,L.jsx)(`button`,{type:`button`,className:`dash-tile-size`,onClick:()=>be(t.id,t.span),title:`Resize`,children:ze[t.span]}),(0,L.jsx)(`button`,{type:`button`,className:`dash-tile-x`,onClick:()=>S(o.id,t.id),"aria-label":`Remove widget`,children:`×`})]})]})},t.id)}),t[23]=b,t[24]=be,t[25]=o,t[26]=c,t[27]=_,t[28]=R):R=t[28];let xe=R,we;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,L.jsx)(`a`,{className:`dash-back`,href:T.gallery,"aria-label":`Back to dashboards`,children:`←`}),t[29]=we):we=t[29];let z;t[30]===o.title?z=t[31]:(z=(0,L.jsx)(`span`,{className:`dash-detail-title`,children:o.title}),t[30]=o.title,t[31]=z);let B;t[32]===o.question?B=t[33]:(B=o.question&&(0,L.jsxs)(`span`,{className:`dash-detail-q`,title:o.question,children:[`“`,o.question,`”`]}),t[32]=o.question,t[33]=B);let Te;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,L.jsx)(`i`,{className:`dash-live-dot`}),t[34]=Te):Te=t[34];let V;t[35]!==o||t[36]!==M||t[37]!==k?(V=M?`checking for new data…`:re(o,k),t[35]=o,t[36]=M,t[37]=k,t[38]=V):V=t[38];let Ee=!M&&O(o)&&o.cadence.data!==`manual`?` · refreshes while open`:``,H;t[39]!==V||t[40]!==Ee?(H=(0,L.jsxs)(`span`,{className:`dash-detail-clock`,children:[Te,V,Ee]}),t[39]=V,t[40]=Ee,t[41]=H):H=t[41];let U;t[42]===o.id?U=t[43]:(U=()=>void de(o.id),t[42]=o.id,t[43]=U);let Oe=N===`busy`,ke=N===`busy`?`dash-refresh-spin`:void 0,W;t[44]===ke?W=t[45]:(W=(0,L.jsx)(a.refresh,{className:ke}),t[44]=ke,t[45]=W);let Me=N===`busy`?`Refreshing…`:`Refresh now`,G;t[46]!==U||t[47]!==Oe||t[48]!==W||t[49]!==Me?(G=(0,L.jsxs)(`button`,{type:`button`,className:`dash-edit-btn dash-refresh-btn`,onClick:U,disabled:Oe,title:`Fetch current values now, regardless of cadence`,children:[W,Me]}),t[46]=U,t[47]=Oe,t[48]=W,t[49]=Me,t[50]=G):G=t[50];let K;t[51]!==o||t[52]!==j||t[53]!==N?(K=(N===`no-model`||!ee(j)&&O(o))&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Connect a model in Live settings to refresh.`}),t[51]=o,t[52]=j,t[53]=N,t[54]=K):K=t[54];let q;t[55]===N?q=t[56]:(q=N===`failed`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Couldn’t reach your model — check its key or quota, then try again.`}),t[55]=N,t[56]=q);let J;t[57]===N?J=t[58]:(J=N===`unverified`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Checked, but no source could verify new values — keeping the last real ones.`}),t[57]=N,t[58]=J);let Y;t[59]!==o.id||t[60]!==o.metrics.length||t[61]!==P?(Y=o.metrics.length>0&&(0,L.jsxs)(`button`,{type:`button`,className:`dash-edit-btn dash-read-btn`,onClick:()=>void ge(o.id),disabled:P===`busy`,title:`Ask Mavéa to read the latest numbers now`,children:[(0,L.jsx)(a.sparkle,{className:P===`busy`?`dash-refresh-spin`:void 0}),P===`busy`?`Reading…`:`Read the numbers now`]}),t[59]=o.id,t[60]=o.metrics.length,t[61]=P,t[62]=Y):Y=t[62];let X;t[63]===P?X=t[64]:(X=P===`no-model`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Connect a model in Live settings to read.`}),t[63]=P,t[64]=X);let Z;t[65]===P?Z=t[66]:(Z=P===`failed`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Couldn’t reach your model — check its key or quota, then try again.`}),t[65]=P,t[66]=Z);let Fe=`dash-edit-btn`+(c?` is-active`:``),Ie;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=()=>{l(Ve),p(!1)},t[67]=Ie):Ie=t[67];let Re=c?`Done`:`Edit layout`,Q;t[68]!==Fe||t[69]!==Re?(Q=(0,L.jsx)(`button`,{type:`button`,className:Fe,onClick:Ie,children:Re}),t[68]=Fe,t[69]=Re,t[70]=Q):Q=t[70];let $;t[71]===o.id?$=t[72]:($=T.settings(o.id),t[71]=o.id,t[72]=$);let Ke;t[73]===$?Ke=t[74]:(Ke=(0,L.jsx)(`a`,{className:`dash-gear`,href:$,"aria-label":`Dashboard settings`,title:`Settings`,children:`⚙`}),t[73]=$,t[74]=Ke);let qe;t[75]!==z||t[76]!==B||t[77]!==H||t[78]!==G||t[79]!==K||t[80]!==q||t[81]!==J||t[82]!==Y||t[83]!==X||t[84]!==Z||t[85]!==Q||t[86]!==Ke?(qe=(0,L.jsxs)(`header`,{className:`dash-detail-head`,children:[we,z,B,H,G,K,q,J,Y,X,Z,Q,Ke]}),t[75]=z,t[76]=B,t[77]=H,t[78]=G,t[79]=K,t[80]=q,t[81]=J,t[82]=Y,t[83]=X,t[84]=Z,t[85]=Q,t[86]=Ke,t[87]=qe):qe=t[87];let Je;t[88]!==o||t[89]!==c?(Je=!c&&(0,L.jsx)(je,{dashboard:o}),t[88]=o,t[89]=c,t[90]=Je):Je=t[90];let Ye;t[91]!==o||t[92]!==M||t[93]!==c||t[94]!==k?(Ye=!c&&(0,L.jsx)(Ae,{dashboard:o,now:k,checking:M}),t[91]=o,t[92]=M,t[93]=c,t[94]=k,t[95]=Ye):Ye=t[95];let Xe;t[96]!==o||t[97]!==c||t[98]!==k?(Xe=!c&&(0,L.jsx)(Ne,{dashboard:o,now:k}),t[96]=o,t[97]=c,t[98]=k,t[99]=Xe):Xe=t[99];let Ze;t[100]!==o||t[101]!==c||t[102]!==u?(Ze=c&&(0,L.jsxs)(`div`,{className:`dash-edit-bar`,children:[(0,L.jsxs)(`span`,{className:`dash-edit-hint`,children:[`Drag a tile by its `,(0,L.jsx)(`strong`,{children:`⠿`}),` handle to reorder, tap `,(0,L.jsx)(`strong`,{children:`S/M/L`}),` to resize, `,(0,L.jsx)(`strong`,{children:`×`}),` to remove.`]}),(0,L.jsx)(`button`,{type:`button`,className:`dash-edit-add`,onClick:()=>p(Be),"aria-expanded":u,children:`+ Add widget`}),u&&(0,L.jsx)(Se,{dashboard:o,onClose:()=>p(!1)})]}),t[100]=o,t[101]=c,t[102]=u,t[103]=Ze):Ze=t[103];let Qe;t[104]!==o||t[105]!==c||t[106]!==k||t[107]!==xe?(Qe=c?(0,L.jsx)(`div`,{className:`dash-grid`,children:xe}):(0,L.jsxs)(`div`,{className:`dash-detail-cols`,children:[(0,L.jsxs)(`div`,{className:`dash-detail-main`,children:[o.widgets.length>0&&(0,L.jsxs)(`div`,{className:`dash-detail-section`,children:[(0,L.jsx)(`div`,{className:`card-eyebrow dash-detail-section-title`,children:`Cards`}),(0,L.jsx)(`div`,{className:`dash-grid`,children:xe})]}),(0,L.jsx)(he,{dashboardId:o.id,now:k}),(0,L.jsx)(Le,{dashboardId:o.id})]}),(0,L.jsxs)(`div`,{className:`dash-detail-side`,children:[(0,L.jsx)(me,{dashboard:o,now:k}),(0,L.jsx)(Pe,{dashboard:o})]})]}),t[104]=o,t[105]=c,t[106]=k,t[107]=xe,t[108]=Qe):Qe=t[108];let $e;t[109]!==o||t[110]!==c?($e=!c&&(0,L.jsx)(De,{dashboard:o},o.id),t[109]=o,t[110]=c,t[111]=$e):$e=t[111];let et;return t[112]!==qe||t[113]!==Je||t[114]!==Ye||t[115]!==Xe||t[116]!==Ze||t[117]!==Qe||t[118]!==$e?(et=(0,L.jsxs)(`div`,{className:`dash-detail`,children:[qe,Je,Ye,Xe,Ze,Qe,$e]}),t[112]=qe,t[113]=Je,t[114]=Ye,t[115]=Xe,t[116]=Ze,t[117]=Qe,t[118]=$e,t[119]=et):et=t[119],et}function Be(e){return!e}function Ve(e){return!e}function He(){return Date.now()}function Ue(e){return e.block}function We(e){return[e.id,e]}function Ge(e){return e.id}export{$ as DashboardDetail};
|
|
2
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{n as a}from"./icons-gLFQTv74.js";import{t as o}from"./TopicCanvas-DozfZFto.js";import{a as s}from"./loader-DCA6Njbf.js";import{t as c}from"./useFocusTrap-DBtkeyRy.js";import{r as l}from"./sourceHost-BV3t2XDb.js";import"./canvas-vqIFVmtP.js";import{B as u,D as d,K as f,L as p,N as m,P as h,W as g,d as _,f as v,k as y,o as b,p as x,w as S}from"./store-CsjDEADX.js";import{l as C,n as w,r as ee,u as te}from"./useLiveConfig-Cpy0_E_-.js";import{t as T}from"./route-D4kd-D3B.js";import{t as ne}from"./useDashboards-SRk8LqHe.js";import{a as E,f as D,i as O,l as k,n as re,p as ie,t as ae}from"./format-g3dP8OI3.js";import{n as oe}from"./dataPending-DGdCvY5Y.js";import{t as A}from"./AreaChart-DZGCSEwt.js";import"./tiles-D-s6v-mA.js";import{a as j,n as se,o as M,s as N,t as ce}from"./useDashboardLoop-BoVNM-pT.js";import{r as le}from"./predictions-CkVKHq-5.js";import{i as ue,n as de,r as P}from"./confirmAdd-DkmbWaSk.js";import{t as fe}from"./planTracker-KKAtTBWs.js";import{t as pe}from"./pin-BZuh1acO.js";/* empty css */import{t as me}from"./CadenceCard-P4teI7Se.js";import{t as he}from"./CheckLogRail-DO7sbZwC.js";var F=t(),I=e();function ge(e,t){for(let n of document.elementsFromPoint(e,t)){let e=n.closest(`[data-dash-widget]`);if(e)return e.getAttribute(`data-dash-widget`)}return null}function _e(e,t){let[n,r]=(0,I.useState)(null),[i,a]=(0,I.useState)(null),o=(0,I.useRef)({working:null,draggingId:null,onCommit:t,sourceIds:e,cleanup:null});o.current.onCommit=t,o.current.sourceIds=e,(0,I.useEffect)(()=>()=>o.current.cleanup?.(),[]);let s=(0,I.useCallback)(e=>t=>{if(t.button!==0&&t.pointerType===`mouse`)return;t.preventDefault();let n=[...o.current.sourceIds];o.current.working=n,o.current.draggingId=e,r(n),a(e);let i=e=>{let t=ge(e.clientX,e.clientY),n=o.current.draggingId,i=o.current.working;if(!t||!n||!i||t===n)return;let a=i.indexOf(n),s=i.indexOf(t);if(a<0||s<0||a===s)return;let c=[...i];c.splice(s,0,c.splice(a,1)[0]),o.current.working=c,r(c)},s=()=>{window.removeEventListener(`pointermove`,i),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s),o.current.cleanup=null;let e=o.current.working;o.current.working=null,o.current.draggingId=null,r(null),a(null),e&&o.current.onCommit(e)};o.current.cleanup=s,window.addEventListener(`pointermove`,i),window.addEventListener(`pointerup`,s),window.addEventListener(`pointercancel`,s)},[]),c=(0,I.useCallback)(e=>t=>{if(t.key!==`ArrowUp`&&t.key!==`ArrowDown`)return;t.preventDefault();let n=o.current.sourceIds,r=n.indexOf(e),i=t.key===`ArrowUp`?r-1:r+1;if(r<0||i<0||i>=n.length)return;let a=[...n];a.splice(i,0,a.splice(r,1)[0]),o.current.onCommit(a)},[]);return{draggingId:i,order:n??e,handleProps:e=>({onPointerDown:s(e),onKeyDown:c(e),tabIndex:0,role:`button`,"aria-label":`Drag to reorder, or use arrow keys`})}}var L=n();function ve(e){return{id:`dash-`+(e.id??e.type),workspace:`Dashboards`,title:``,sub:``,opener:``,context:[],blocks:[{...e,col:12,delay:0}],proof:null,extras:{},group:`home`,suggests:[],keywords:[]}}function ye(e){let t=(0,F.c)(18),{dashboard:n,widget:r,editing:i,dragging:a,children:s,footer:c}=e,l;t[0]!==n||t[1]!==r?(l=N(n,r),t[0]=n,t[1]=r,t[2]=l):l=t[2];let u=l,d;t[3]===u?d=t[4]:(d=ve(u),t[3]=u,t[4]=d);let f=d,p=`dash-span-${r.span}`,m=i?`dash-tile--editing`:``,h=a?`dash-tile--dragging`:``,g;t[5]!==p||t[6]!==m||t[7]!==h?(g=[`dash-tile`,p,m,h].filter(Boolean),t[5]=p,t[6]=m,t[7]=h,t[8]=g):g=t[8];let _=g.join(` `),v;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(v={},t[9]=v):v=t[9];let y;t[10]===f?y=t[11]:(y=(0,L.jsx)(o,{data:f,spot:null,built:v,onProve:be}),t[10]=f,t[11]=y);let b;return t[12]!==s||t[13]!==_||t[14]!==c||t[15]!==y||t[16]!==r.id?(b=(0,L.jsxs)(`div`,{className:_,"data-dash-widget":r.id,children:[s,y,c]}),t[12]=s,t[13]=_,t[14]=c,t[15]=y,t[16]=r.id,t[17]=b):b=t[17],b}function be(){}function R(){return`w-`+Math.random().toString(36).slice(2,8)}function xe(e){let t=new Set(e.widgets.map(e=>e.block.type));return[{key:`note`,label:`Note`,make:()=>({block:{type:`list`,col:12,id:R(),props:{title:`Note`,items:[`Add a note about this dashboard.`]}},span:2})},{key:`thesis`,label:`Reasoning note`,make:()=>({block:{type:`thesis`,col:12,id:R(),props:{reasoning:``}},span:2})},{key:`alignmentgauge`,label:`Alignment gauge`,make:()=>({block:{type:`alignmentgauge`,col:12,id:R(),props:{pct:null}},span:1})},{key:`standingalerts`,label:`Standing alerts`,make:()=>({block:{type:`standingalerts`,col:12,id:R(),props:{alerts:[]}},span:1})},{key:`sourceslineage`,label:`Sources`,make:()=>({block:{type:`sourceslineage`,col:12,id:R(),props:{rows:[]}},span:2})}].filter(e=>e.key===`note`||!t.has(e.key))}function Se(e){let t=(0,F.c)(26),{dashboard:n,onClose:r}=e,[i,a]=(0,I.useState)(`menu`),[o,s]=(0,I.useState)(``),[l,u]=(0,I.useState)(!1),[d,f]=(0,I.useState)(null),p=xe(n),m=!!C(w()).apiKey,h;t[0]!==n||t[1]!==r?(h=e=>{let{block:t,span:i}=e.make(),a={id:R(),block:t,span:i,fromSource:`manual`};b(n.id,a),r()},t[0]=n,t[1]=r,t[2]=h):h=t[2];let g=h,y=(0,I.useRef)(!0),x,S;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(x=()=>(y.current=!0,()=>{y.current=!1}),S=[],t[3]=x,t[4]=S):(x=t[3],S=t[4]),(0,I.useEffect)(x,S);let ee;t[5]!==o||t[6]!==n||t[7]!==r||t[8]!==l?(ee=async()=>{let e=o.trim();if(!e||l)return;if(n.metrics.length>=12||n.widgets.length>=12){f(`This board is full — remove a card or metric first, then track another number.`);return}u(!0),f(null);let t=await fe(e,C(w()));if(!y.current)return;let i=t.metrics[0];if(!i){u(!1),f(`No single number found in that — the Track bar on the Dashboards home builds richer trackers.`);return}let a=Date.now(),s={id:`m-${a}`,label:i.label,query:i.query,...i.unit?{unit:i.unit}:{},sourceQuote:{text:i.label,saidAt:a},lastValue:null,origin:`empty`},c={id:R(),block:{type:`insight`,col:12,id:`blk-${a}`,num:`1`,props:{title:s.label,stat:`—`,conf:`inferred`,summary:s.label}},span:1,metricId:s.id,fromSource:`manual`},d=de(n);v(n.id,{metrics:[s],tripwires:[],widgets:[c],source:{kind:`ADDED`,conversationId:`manual`,title:`Added by hand`,contributed:`Tracking ${s.label}`,at:a}}),_(n.id,a);let p=await ue(n.id,d);if(y.current){if(p!==`confirmed`){u(!1),f(P(p));return}r()}},t[5]=o,t[6]=n,t[7]=r,t[8]=l,t[9]=ee):ee=t[9];let te=ee,T=(0,I.useRef)(null),ne;t[10]===r?ne=t[11]:(ne={onEscape:r},t[10]=r,t[11]=ne),c(T,ne);let E=(0,I.useRef)(null),D,O;t[12]===i?(D=t[13],O=t[14]):(D=()=>{i===`track`?E.current?.focus():T.current?.querySelector(`.dash-palette-item`)?.focus()},O=[i],t[12]=i,t[13]=D,t[14]=O),(0,I.useEffect)(D,O);let k,re;t[15]===r?(k=t[16],re=t[17]):(k=()=>{let e=T.current?.parentElement;if(!e)return;let t=t=>{e.contains(t.target)||r()};return document.addEventListener(`pointerdown`,t),()=>document.removeEventListener(`pointerdown`,t)},re=[r],t[15]=r,t[16]=k,t[17]=re),(0,I.useEffect)(k,re);let ie;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(ie=e=>{let t=Array.from(T.current?.querySelectorAll(`.dash-palette-item`)??[]);t.length&&t[(t.indexOf(document.activeElement)+e+t.length)%t.length]?.focus()},t[18]=ie):ie=t[18];let ae=ie,oe=i===`menu`?`menu`:`dialog`,A=i===`menu`?`Add a widget`:`Track a number`,j;t[19]===i?j=t[20]:(j=e=>{i===`menu`&&(e.key===`ArrowDown`||e.key===`ArrowUp`)&&(e.preventDefault(),ae(e.key===`ArrowDown`?1:-1))},t[19]=i,t[20]=j);let se=i===`menu`?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`button`,{type:`button`,role:`menuitem`,className:`dash-palette-item dash-palette-lead`,onClick:()=>a(`track`),children:`+ Track a number`}),p.map(e=>(0,L.jsxs)(`button`,{type:`button`,role:`menuitem`,className:`dash-palette-item`,onClick:()=>g(e),children:[`+ `,e.label]},e.key))]}):(0,L.jsxs)(`div`,{className:`dash-ptrack`,children:[(0,L.jsxs)(`div`,{className:`dash-ptrack-head`,children:[(0,L.jsx)(`button`,{type:`button`,className:`dash-ptrack-back`,"aria-label":`Back to widget list`,onClick:()=>a(`menu`),children:`←`}),(0,L.jsx)(`span`,{className:`dash-ptrack-kicker`,children:`Track a number`})]}),m?(0,L.jsxs)(`form`,{className:`dash-ptrack-form`,onSubmit:e=>{e.preventDefault(),te()},children:[(0,L.jsx)(`input`,{ref:E,className:`dash-ptrack-input`,value:o,placeholder:`BTC price, SF temperature, 10-year yield…`,"aria-label":`What number to track`,disabled:l,onChange:e=>s(e.target.value)}),d&&(0,L.jsx)(`p`,{className:`dash-ptrack-err`,children:d}),(0,L.jsx)(`button`,{type:`submit`,className:`dash-ptrack-go`,disabled:l||!o.trim(),children:l?`Planning…`:`Track · 1 call + 1 search`})]}):(0,L.jsxs)(`p`,{className:`dash-ptrack-gate`,children:[`A tracked number is fetched by real web searches on your own key — nothing is ever made up. `,(0,L.jsx)(`a`,{href:`#/live`,children:`Connect a model in Live`}),` first.`]})]}),M;return t[21]!==oe||t[22]!==A||t[23]!==j||t[24]!==se?(M=(0,L.jsx)(`div`,{ref:T,className:`dash-palette`,role:oe,"aria-label":A,tabIndex:-1,onKeyDown:j,children:se}),t[21]=oe,t[22]=A,t[23]=j,t[24]=se,t[25]=M):M=t[25],M}function Ce(e){let t=(0,F.c)(24),{dashboardId:n,metric:r}=e,i=r.lastValue===null?``:String(r.lastValue),[a,o]=(0,I.useState)(i),[s,c]=(0,I.useState)(i);i!==s&&(c(i),o(i));let l;t[0]!==n||t[1]!==r.id||t[2]!==r.lastValue||t[3]!==r.unit||t[4]!==a?(l=()=>{let e=Number(a.replace(/[^0-9.+-]/g,``));if(a.trim()===``||!Number.isFinite(e))return;let t=Date.now(),i=r.lastValue;m(n,r.id,e,k(String(e),r.unit),`user`,t);let o=x(n);if(o){let{tripwires:e}=M(o,{[r.id]:i});h(n,e,t)}},t[0]=n,t[1]=r.id,t[2]=r.lastValue,t[3]=r.unit,t[4]=a,t[5]=l):l=t[5];let u=l,d;t[6]===u?d=t[7]:(d=e=>{e.preventDefault(),u()},t[6]=u,t[7]=d);let f=`Set ${r.label}…`,p=`Set ${r.label}`,g;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(g=e=>o(e.target.value),t[8]=g):g=t[8];let _;t[9]!==f||t[10]!==p||t[11]!==a?(_=(0,L.jsx)(`input`,{className:`dash-fill-input`,value:a,inputMode:`decimal`,placeholder:f,"aria-label":p,onChange:g}),t[9]=f,t[10]=p,t[11]=a,t[12]=_):_=t[12];let v;t[13]===r.unit?v=t[14]:(v=r.unit&&(0,L.jsx)(`span`,{className:`dash-fill-unit`,children:r.unit}),t[13]=r.unit,t[14]=v);let y;t[15]===a?y=t[16]:(y=a.trim(),t[15]=a,t[16]=y);let b=y===``,S;t[17]===b?S=t[18]:(S=(0,L.jsx)(`button`,{type:`submit`,className:`dash-fill-save`,disabled:b,children:`Save`}),t[17]=b,t[18]=S);let C;return t[19]!==S||t[20]!==d||t[21]!==_||t[22]!==v?(C=(0,L.jsxs)(`form`,{className:`dash-fill`,onSubmit:d,children:[_,v,S]}),t[19]=S,t[20]=d,t[21]=_,t[22]=v,t[23]=C):C=t[23],C}r();var we=()=>i(()=>import(`./generateLive-B6purd69.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40]));function z(){return!!C(w()).apiKey}function B(e){let t=(0,F.c)(15),[n,r]=(0,I.useState)(!1),[i,a]=(0,I.useState)(null),[o,s]=(0,I.useState)(null),c;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(c=[],t[0]=c):c=t[0];let l=(0,I.useRef)(c),u=(0,I.useRef)(!1),d=(0,I.useRef)(null),f;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(f=()=>{d.current?.abort(),d.current=null,u.current=!1,l.current=[],r(!1),a(null),s(null)},t[1]=f):f=t[1];let p;t[2]===e.id?p=t[3]:(p=[e.id],t[2]=e.id,t[3]=p),(0,I.useEffect)(f,p);let m,h;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(m=()=>()=>d.current?.abort(),h=[],t[4]=m,t[5]=h):(m=t[4],h=t[5]),(0,I.useEffect)(m,h);let g;t[6]===e?g=t[7]:(g=t=>{let n=t.trim();if(!n||u.current||!z())return;u.current=!0,r(!0),s(n);let i=C(w()),o=e.widgets.map(t=>N(e,t)),c=new AbortController;d.current=c,we().then(e=>{let{generateLive:t}=e;return t(n,l.current,i,void 0,{selectedBlocks:o,signal:c.signal,caps:{searchMode:`realtime`}})}).then(e=>{c.signal.aborted||(e.error||(l.current=[...l.current,{role:`user`,content:n},{role:`assistant`,content:e.narration}].slice(-8)),a(e))}).catch(()=>{c.signal.aborted||a(null)}).finally(()=>{c.signal.aborted||(u.current=!1,r(!1))})},t[6]=e,t[7]=g);let _=g,v;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(v=()=>{d.current?.abort(),u.current=!1,r(!1),a(null),s(null)},t[8]=v):v=t[8];let y=v,b;t[9]===Symbol.for(`react.memo_cache_sentinel`)?(b=z(),t[9]=b):b=t[9];let x;return t[10]!==o||t[11]!==n||t[12]!==i||t[13]!==_?(x={ready:b,loading:n,result:i,lastAsk:o,run:_,reset:y},t[10]=o,t[11]=n,t[12]=i,t[13]=_,t[14]=x):x=t[14],x}var Te=/^(add|track|watch|monitor|follow)\b/i;function V(e){let t=e.trim();return t&&Te.test(t)?`add`:`ask`}function Ee(e){let t=[];return e.tripwires.length>0&&t.push(`Are the numbers holding where I want?`,`Which alert is closest to triggering?`),e.metrics[0]&&t.push(`What does ${e.metrics[0].label} tell me right now?`),t.push(`What changed since the last update?`),t.slice(0,3)}function H(e,t,n){n.length!==0&&pe({block:n,question:t,target:e,fromSource:`talk`,firstCheck:!1,source:{kind:`ADDED`,conversationId:`talk`,title:`Asked: “${t}”`,contributed:`Pinned ${Math.min(n.length,4)} from this question`,at:Date.now()}})}function De(e){let t=(0,F.c)(29),{dashboard:n}=e,r=B(n),[i,a]=(0,I.useState)(``),[s,c]=(0,I.useState)(!1),[l,u]=(0,I.useState)(`ask`),d;t[0]===n?d=t[1]:(d=Ee(n),t[0]=n,t[1]=d);let f=d,p;t[2]===r?p=t[3]:(p=e=>{c(!1),u(V(e)),r.run(e),a(``)},t[2]=r,t[3]=p);let m=p,h,g;t[4]!==l||t[5]!==n.id||t[6]!==s||t[7]!==r.lastAsk||t[8]!==r.loading||t[9]!==r.result?(h=()=>{l===`add`&&!r.loading&&r.result&&!r.result.error&&r.result.spec.blocks.length>0&&!s&&(H(n.id,r.lastAsk??``,r.result.spec.blocks),c(!0))},g=[l,r.loading,r.result,r.lastAsk,s,n.id],t[4]=l,t[5]=n.id,t[6]=s,t[7]=r.lastAsk,t[8]=r.loading,t[9]=r.result,t[10]=h,t[11]=g):(h=t[10],g=t[11]),(0,I.useEffect)(h,g);let _;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(_=(0,L.jsx)(`div`,{className:`card-eyebrow dash-talk-eyebrow`,children:`Talk to this dashboard`}),t[12]=_):_=t[12];let v;t[13]!==f||t[14]!==i||t[15]!==m||t[16]!==r.loading||t[17]!==r.ready?(v=r.ready?(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(`div`,{className:`dash-talk-chips`,children:f.map(e=>(0,L.jsxs)(`button`,{type:`button`,className:`dash-talk-chip`,disabled:r.loading,onClick:()=>m(e),children:[(0,L.jsx)(`span`,{className:`dash-talk-chip-orb`}),(0,L.jsxs)(`span`,{className:`dash-talk-chip-t`,children:[`“`,e,`”`]})]},e))}),(0,L.jsxs)(`form`,{className:`dash-talk-ask`,onSubmit:e=>{e.preventDefault(),m(i)},children:[(0,L.jsx)(`input`,{className:`dash-talk-input`,value:i,placeholder:`Ask a question, or type "add …" / "track …" to add it in one step`,onChange:e=>a(e.target.value),disabled:r.loading}),(0,L.jsx)(`button`,{type:`submit`,className:`dash-talk-send`,disabled:r.loading||!i.trim(),children:r.loading?`Thinking…`:`Ask`})]})]}):(0,L.jsxs)(`p`,{className:`dash-talk-gate`,children:[`Connect a model in `,(0,L.jsx)(`a`,{href:`#/live`,children:`Live`}),` to ask questions grounded in this dashboard.`]}),t[13]=f,t[14]=i,t[15]=m,t[16]=r.loading,t[17]=r.ready,t[18]=v):v=t[18];let y;t[19]!==l||t[20]!==n.id||t[21]!==s||t[22]!==r.lastAsk||t[23]!==r.loading||t[24]!==r.result?(y=r.lastAsk&&(0,L.jsxs)(`div`,{className:`dash-talk-answer`,children:[(0,L.jsxs)(`div`,{className:`dash-talk-q`,children:[`“`,r.lastAsk,`”`]}),r.loading?(0,L.jsx)(`div`,{className:`dash-talk-thinking`,children:`Mavéa is looking at your dashboard…`}):r.result?.error?(0,L.jsxs)(`div`,{className:`dash-talk-error`,children:[`That didn’t go through. Check your model in `,(0,L.jsx)(`a`,{href:`#/live`,children:`Live`}),` and try again.`]}):r.result?(0,L.jsxs)(L.Fragment,{children:[r.result.narration&&(0,L.jsx)(`p`,{className:`dash-talk-narration`,children:r.result.narration}),(0,L.jsx)(o,{data:r.result.spec,spot:null,built:{},onProve:U}),r.result.spec.blocks.length>0&&(s?(0,L.jsx)(`div`,{className:`dash-talk-pinned`,children:l===`add`?(0,L.jsx)(L.Fragment,{children:`Auto-added — this read like a command, not a question. Remove it from Edit layout if that’s wrong.`}):`Added to this dashboard ✓`}):l===`add`?null:(0,L.jsx)(`button`,{type:`button`,className:`dash-talk-pin`,onClick:()=>{H(n.id,r.lastAsk??``,r.result.spec.blocks),c(!0)},children:`+ Add this to the dashboard`}))]}):null]}),t[19]=l,t[20]=n.id,t[21]=s,t[22]=r.lastAsk,t[23]=r.loading,t[24]=r.result,t[25]=y):y=t[25];let b;return t[26]!==v||t[27]!==y?(b=(0,L.jsxs)(`section`,{className:`dash-talk`,children:[_,v,y]}),t[26]=v,t[27]=y,t[28]=b):b=t[28],b}function U(){}function Oe(e){if(!e.history||e.history.length<2)return null;let t=e.history[e.history.length-2].value,n=e.history[e.history.length-1].value;if(n===t)return null;let r=n>t?`up`:`down`,i=Math.round(Math.abs(n-t)*100)/100;if(i===0)return null;let a=Number.isInteger(i)?String(i):i.toFixed(2),o=e.unit===`$`?`$`:``,s=e.unit&&e.unit!==`$`?e.unit:``;return{direction:r,text:`${r===`up`?`+`:`-`}${o}${a}${s}`}}function ke(e){return new Date(e).toLocaleTimeString(void 0,{hour:`numeric`,minute:`2-digit`})}function W(e){if(e<=0)return`due now`;let t=Math.round(e/6e4);if(t<60)return`${t}m`;let n=Math.floor(t/60),r=t%60;if(n<24)return r?`${n}h ${r}m`:`${n}h`;let i=Math.floor(n/24),a=n%24;return a?`${i}d ${a}h`:`${i}d`}function Ae({dashboard:e,now:t,checking:n=!1}){let r=(0,I.useMemo)(()=>e.metrics.find(e=>e.lastValue!==null)??e.metrics[0],[e.metrics]),i=E(e);if(!i||!r)return null;let a=Oe(r),o=i.label||e.title,s=r.asOf??e.lastRefreshedAt??null,c=e.cadence.data===`manual`?`when you refresh`:W(e.nextDataAt-t),l=r.history??[];return(0,L.jsxs)(`section`,{className:`card dash-hero`,"aria-label":`${o} — as of last check`,children:[(0,L.jsxs)(`div`,{className:`dash-hero-top`,children:[(0,L.jsxs)(`span`,{className:`dash-hero-eyebrow`,children:[o,`: as of last check`]}),(0,L.jsx)(`span`,{className:`dash-hero-meta`,children:n?`checking for new data…`:`as of ${s?ke(s):`not yet checked`} / not real-time — next check ${c}`})]}),(0,L.jsxs)(`div`,{className:`dash-hero-value-row`,children:[(0,L.jsx)(`span`,{className:`dash-hero-value${n?` tile-value--checking`:``}`,children:i.value}),a&&(0,L.jsx)(`span`,{className:`dash-hero-delta dash-hero-delta--${a.direction}`,children:a.text})]}),(0,L.jsx)(`div`,{className:`dash-hero-chart`,children:l.length>=2?(0,L.jsx)(A,{points:l,tone:a?.direction??`flat`}):(0,L.jsx)(`p`,{className:`dash-hero-chart-empty`,children:`Not enough history yet for a chart.`})})]})}function je(e){let t=(0,F.c)(6),{dashboard:n}=e,[r,i]=te();if(ie().keyNudgeShown||!ee(r)||r.rememberKey||!O(n))return null;let a=Me,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,L.jsx)(`p`,{className:`dash-key-nudge-text`,children:`Mavéa checks this with your key, which currently lives only in this tab. Keep it on this device (encrypted) so checks still work after a reload?`}),t[0]=o):o=t[0];let s;t[1]===i?s=t[2]:(s=(0,L.jsx)(`button`,{type:`button`,className:`dash-key-nudge-keep`,onClick:()=>{i({rememberKey:!0}),a()},children:`Keep key on this device`}),t[1]=i,t[2]=s);let c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,L.jsx)(`button`,{type:`button`,className:`dash-key-nudge-dismiss`,onClick:a,children:`Not now`}),t[3]=c):c=t[3];let l;return t[4]===s?l=t[5]:(l=(0,L.jsxs)(`div`,{className:`card dash-key-nudge`,children:[o,(0,L.jsxs)(`div`,{className:`dash-key-nudge-actions`,children:[s,c]})]}),t[4]=s,t[5]=l),l}function Me(){return D({keyNudgeShown:!0})}var G={hit:{label:`Called it ✓`,className:`is-hit`},miss:{label:`Missed ✗`,className:`is-miss`},unclear:{label:`Unclear`,className:`is-unclear`}};function K(e){let t=(0,F.c)(21),{dashboard:n,now:r}=e,i;t[0]===n.predictionHistory?i=t[1]:(i=n.predictionHistory??[],t[0]=n.predictionHistory,t[1]=i);let a=i,o=a.length>0?a[a.length-1]:null;if(!n.prediction&&!o)return null;let s;t[2]!==n.predictionHistory||t[3]!==r?(s=le(n.predictionHistory,r),t[2]=n.predictionHistory,t[3]=r,t[4]=s):s=t[4];let c=s,l=o?G[o.result]:null,u;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,L.jsx)(`span`,{className:`card-eyebrow dash-expects-eyebrow`,children:`Expects by next check`}),t[5]=u):u=t[5];let d;t[6]===n.prediction?d=t[7]:(d=n.prediction&&(0,L.jsx)(`p`,{className:`dash-expects-text`,children:n.prediction.text}),t[6]=n.prediction,t[7]=d);let f;t[8]!==l||t[9]!==o?(f=o&&l&&(0,L.jsxs)(`div`,{className:`dash-expects-grade`,children:[(0,L.jsxs)(`span`,{className:`dash-expects-chip ${l.className}`,children:[`Last call: `,l.label]}),(0,L.jsxs)(`p`,{className:`dash-expects-expected`,children:[`“`,o.expected,`”`]}),o.note&&(0,L.jsx)(`p`,{className:`dash-expects-note`,children:o.note})]}),t[8]=l,t[9]=o,t[10]=f):f=t[10];let p;t[11]!==c.hits||t[12]!==c.total?(p=c.total>0&&(0,L.jsxs)(`span`,{className:`dash-expects-tally`,children:[`Calls this week · `,c.hits,`/`,c.total]}),t[11]=c.hits,t[12]=c.total,t[13]=p):p=t[13];let m;t[14]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,L.jsx)(`span`,{className:`dash-expects-label`,children:`Predictions are free — written from checks you already paid for`}),t[14]=m):m=t[14];let h;t[15]===p?h=t[16]:(h=(0,L.jsxs)(`div`,{className:`dash-expects-foot`,children:[p,m]}),t[15]=p,t[16]=h);let g;return t[17]!==d||t[18]!==f||t[19]!==h?(g=(0,L.jsxs)(`div`,{className:`dash-expects`,children:[u,d,f,h]}),t[17]=d,t[18]=f,t[19]=h,t[20]=g):g=t[20],g}function Ne(e){let t=(0,F.c)(23),{dashboard:n,now:r}=e,i=j(n.id);if(!(n.tripwires.length>0||n.lastVerdict||n.prediction||i))return null;let a=n.lastVerdict,o;t[0]!==n.tripwires||t[1]!==a?(o=a?n.tripwires.find(e=>e.id===a.tripwireId)??null:null,t[0]=n.tripwires,t[1]=a,t[2]=o):o=t[2];let s=o,c=!!n.lastVerdictError&&(n.lastVerdictAttemptAt??0)>(a?.at??0),l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,L.jsx)(`span`,{className:`card-eyebrow dash-lastcheck-eyebrow`,children:`From the last check`}),t[3]=l):l=t[3];let u;t[4]!==r||t[5]!==a?(u=a&&(0,L.jsx)(`span`,{className:`dash-lastcheck-when`,children:ae(a.at,r).replace(/^updated /,`checked `)}),t[4]=r,t[5]=a,t[6]=u):u=t[6];let d;t[7]===u?d=t[8]:(d=(0,L.jsxs)(`div`,{className:`dash-lastcheck-head`,children:[l,u]}),t[7]=u,t[8]=d);let f;t[9]!==n||t[10]!==c||t[11]!==r||t[12]!==i||t[13]!==s||t[14]!==a?(f=a?(0,L.jsxs)(L.Fragment,{children:[s&&(0,L.jsxs)(`p`,{className:`dash-lastcheck-text dash-lastcheck-about`,children:[`About: `,s.label]}),i?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-pending`,children:`Mavéa is reading the latest numbers…`}):c&&(0,L.jsxs)(`p`,{className:`dash-lastcheck-text dash-lastcheck-error`,children:[`A newer check just failed: `,n.lastVerdictError]}),(0,L.jsx)(`p`,{className:`dash-lastcheck-text`,children:a.text}),a.grounded===!1&&(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-qualifier`,children:`Based on background knowledge, not a fresh search.`}),a.sources&&a.sources.length>0&&(0,L.jsx)(`div`,{className:`dash-lastcheck-sources`,children:a.sources.map(q)})]}):i?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-pending`,children:`Mavéa is reading the latest numbers…`}):c?(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-error`,children:n.lastVerdictError}):(0,L.jsx)(`p`,{className:`dash-lastcheck-text dash-lastcheck-muted`,children:re(n,r)}),t[9]=n,t[10]=c,t[11]=r,t[12]=i,t[13]=s,t[14]=a,t[15]=f):f=t[15];let p;t[16]!==n||t[17]!==r?(p=(0,L.jsx)(K,{dashboard:n,now:r}),t[16]=n,t[17]=r,t[18]=p):p=t[18];let m;return t[19]!==d||t[20]!==f||t[21]!==p?(m=(0,L.jsxs)(`section`,{className:`dash-lastcheck`,"aria-label":`From the last check`,children:[d,f,p]}),t[19]=d,t[20]=f,t[21]=p,t[22]=m):m=t[22],m}function q(e){let t=l(e.url);return t?(0,L.jsx)(`a`,{className:`dash-lastcheck-source`,href:t,target:`_blank`,rel:`noopener noreferrer`,title:e.title,children:e.title},e.url):null}var J={WATCHING:`Watching`,CLEAR:`Clear`,AWAITING:`Awaiting data`,TRIGGERED:`Triggered`};function Y(e){let t=(0,F.c)(15),{tripwire:n}=e,r=n.state===`TRIGGERED`,i=`dash-alertcard-row`+(r?` is-triggered`:``),a=`dash-switch`+(n.state===`AWAITING`?``:` on`),o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,L.jsx)(`span`,{className:`dash-switch-knob`}),t[0]=o):o=t[0];let s;t[1]===a?s=t[2]:(s=(0,L.jsx)(`span`,{className:a,"aria-hidden":`true`,children:o}),t[1]=a,t[2]=s);let c=n.sourceQuote.text||n.label,l;t[3]===c?l=t[4]:(l=(0,L.jsx)(`span`,{className:`dash-alertcard-line`,children:c}),t[3]=c,t[4]=l);let u;t[5]!==r||t[6]!==n.state?(u=r?(0,L.jsx)(`span`,{className:`dash-alertcard-crossed`,children:`A line you set has been crossed`}):(0,L.jsx)(`span`,{className:`dash-alertcard-state`,children:J[n.state]}),t[5]=r,t[6]=n.state,t[7]=u):u=t[7];let d;t[8]!==l||t[9]!==u?(d=(0,L.jsxs)(`div`,{className:`dash-alertcard-body`,children:[l,u]}),t[8]=l,t[9]=u,t[10]=d):d=t[10];let f;return t[11]!==i||t[12]!==s||t[13]!==d?(f=(0,L.jsxs)(`li`,{className:i,children:[s,d]}),t[11]=i,t[12]=s,t[13]=d,t[14]=f):f=t[14],f}function Pe(e){let t=(0,F.c)(5),{dashboard:n}=e;if(n.tripwires.length===0)return null;let r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,L.jsx)(`div`,{className:`card-eyebrow`,children:`Your alerts`}),t[0]=r):r=t[0];let i;t[1]===n.tripwires?i=t[2]:(i=n.tripwires.map(X),t[1]=n.tripwires,t[2]=i);let a;return t[3]===i?a=t[4]:(a=(0,L.jsxs)(`section`,{className:`card dash-alertcard`,"aria-label":`Your alerts`,children:[r,(0,L.jsx)(`ul`,{className:`dash-alertcard-list`,children:i})]}),t[3]=i,t[4]=a),a}function X(e){return(0,L.jsx)(Y,{tripwire:e},e.id)}var Z={scheduled:`Scheduled`,search:`Search`,sources:`Sources`,extraction:`Extraction`,grounding:`Grounding`,saved:`Saved`,tripwires:`Lines checked`},Fe={updated:`New data saved`,"no-change":`Checked — nothing new`,unverified:`Nothing could be verified`,failed:`The check could not run`};function Ie(e){if(e.endedAt===void 0)return`…`;let t=(e.endedAt-e.startedAt)/1e3;return t<1?`${Math.max(1,Math.round(t*1e3))}ms`:`${t.toFixed(1)}s`}function Le(e){let t=(0,F.c)(13),{dashboardId:n}=e,r,i;t[0]===n?(r=t[1],i=t[2]):(r=()=>u(n),i=()=>u(n),t[0]=n,t[1]=r,t[2]=i);let a=(0,I.useSyncExternalStore)(g,r,i),[o,s]=(0,I.useState)(!1),c=a[0];if(!c)return null;let l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l=()=>s(Q),t[3]=l):l=t[3];let d=o?`Hide`:`What happened on the last check?`,f;t[4]!==o||t[5]!==d?(f=(0,L.jsx)(`button`,{type:`button`,className:`crp-toggle`,"aria-expanded":o,onClick:l,children:d}),t[4]=o,t[5]=d,t[6]=f):f=t[6];let m;t[7]!==c||t[8]!==o?(m=o&&(0,L.jsxs)(`ol`,{className:`crp-steps`,children:[c.steps.map(Re),(0,L.jsxs)(`li`,{className:`crp-foot`,children:[(0,L.jsx)(`span`,{children:c.outcome?Fe[c.outcome]:`Running…`}),(0,L.jsx)(`span`,{className:`crp-foot-time`,children:Ie(c)})]}),c.failure&&(0,L.jsx)(`li`,{className:`crp-fix`,children:p(c.failure)})]}),t[7]=c,t[8]=o,t[9]=m):m=t[9];let h;return t[10]!==f||t[11]!==m?(h=(0,L.jsxs)(`section`,{className:`crp`,children:[f,m]}),t[10]=f,t[11]=m,t[12]=h):h=t[12],h}function Re(e,t){return(0,L.jsxs)(`li`,{className:e.ok?`crp-step`:`crp-step is-bad`,children:[(0,L.jsx)(`span`,{className:`crp-step-mark`,"aria-hidden":`true`,children:e.ok?`✓`:`✕`}),(0,L.jsx)(`span`,{className:`crp-step-name`,children:Z[e.name]}),e.count!==void 0&&(0,L.jsx)(`span`,{className:`crp-step-count`,children:e.count}),e.detail&&(0,L.jsx)(`span`,{className:`crp-step-detail`,children:e.detail})]},`${e.name}-${t}`)}function Q(e){return!e}var ze={1:`S`,2:`M`,3:`L`};function $(e){let t=(0,F.c)(120),{id:n}=e,r=ne(),i;t[0]!==r||t[1]!==n?(i=r.find(e=>e.id===n)??null,t[0]=r,t[1]=n,t[2]=i):i=t[2];let o=i,[c,l]=(0,I.useState)(!1),[u,p]=(0,I.useState)(!1),m;t[3]===o?.widgets?m=t[4]:(m=o?.widgets.map(Ge)??[],t[3]=o?.widgets,t[4]=m);let h=m,g;t[5]===o?g=t[6]:(g=e=>o&&d(o.id,e),t[5]=o,t[6]=g);let _=_e(h,g),v;t[7]===o?.widgets?v=t[8]:(v=new Map((o?.widgets??[]).map(We)),t[7]=o?.widgets,t[8]=v);let b=v,x,C;t[9]===o?(x=t[10],C=t[11]):(x=()=>{o&&s(o.widgets.map(Ue))},C=[o],t[9]=o,t[10]=x,t[11]=C),(0,I.useEffect)(x,C);let w=o?.id,E,D;t[12]===w?(E=t[13],D=t[14]):(E=()=>{w&&f(w)},D=[w],t[12]=w,t[13]=E,t[14]=D),(0,I.useEffect)(E,D);let[k,ie]=(0,I.useState)(He),ae,A;t[15]===Symbol.for(`react.memo_cache_sentinel`)?(A=()=>{let e=window.setInterval(()=>ie(Date.now()),3e4);return()=>window.clearInterval(e)},ae=[],t[15]=ae,t[16]=A):(ae=t[15],A=t[16]),(0,I.useEffect)(A,ae);let[j]=te(),M=oe(o?.id??``),[N,le]=(0,I.useState)(`idle`),ue;t[17]===Symbol.for(`react.memo_cache_sentinel`)?(ue=async e=>{le(`busy`);let t=await se(e);le(t===`no-model`||t===`failed`||t===`unverified`?t:`idle`)},t[17]=ue):ue=t[17];let de=ue,[P,fe]=(0,I.useState)(`idle`),pe;t[18]===Symbol.for(`react.memo_cache_sentinel`)?(pe=async e=>{fe(`busy`);let t=await ce(e);fe(t===`no-model`||t===`failed`?t:`idle`)},t[18]=pe):pe=t[18];let ge=pe;if(!o){let e;t[19]===Symbol.for(`react.memo_cache_sentinel`)?(e=(0,L.jsx)(`p`,{className:`dash-empty-title`,children:`That dashboard isn’t here.`}),t[19]=e):e=t[19];let n;return t[20]===Symbol.for(`react.memo_cache_sentinel`)?(n=(0,L.jsx)(`div`,{className:`dash-detail`,children:(0,L.jsxs)(`div`,{className:`dash-empty`,children:[e,(0,L.jsxs)(`p`,{className:`dash-empty-how`,children:[`It may have been removed. `,(0,L.jsx)(`a`,{href:T.gallery,children:`Back to your dashboards →`})]})]})}),t[20]=n):n=t[20],n}let ve;t[21]===o.id?ve=t[22]:(ve=(e,t)=>{y(o.id,e,t>=3?1:t+1)},t[21]=o.id,t[22]=ve);let be=ve,R;t[23]!==b||t[24]!==be||t[25]!==o||t[26]!==c||t[27]!==_?(R=_.order.map(e=>{let t=b.get(e);if(!t)return null;let n=t.metricId?o.metrics.find(e=>e.id===t.metricId):null,r=!c&&n?.blankKey?(0,L.jsx)(Ce,{dashboardId:o.id,metric:n}):void 0;return(0,L.jsx)(ye,{dashboard:o,widget:t,editing:c,dragging:_.draggingId===t.id,footer:r,children:c&&(0,L.jsxs)(`div`,{className:`dash-tile-chrome`,children:[(0,L.jsx)(`span`,{className:`dash-tile-handle`,..._.handleProps(t.id),children:`⠿`}),(0,L.jsxs)(`div`,{className:`dash-tile-ctrls`,children:[(0,L.jsx)(`button`,{type:`button`,className:`dash-tile-size`,onClick:()=>be(t.id,t.span),title:`Resize`,children:ze[t.span]}),(0,L.jsx)(`button`,{type:`button`,className:`dash-tile-x`,onClick:()=>S(o.id,t.id),"aria-label":`Remove widget`,children:`×`})]})]})},t.id)}),t[23]=b,t[24]=be,t[25]=o,t[26]=c,t[27]=_,t[28]=R):R=t[28];let xe=R,we;t[29]===Symbol.for(`react.memo_cache_sentinel`)?(we=(0,L.jsx)(`a`,{className:`dash-back`,href:T.gallery,"aria-label":`Back to dashboards`,children:`←`}),t[29]=we):we=t[29];let z;t[30]===o.title?z=t[31]:(z=(0,L.jsx)(`span`,{className:`dash-detail-title`,children:o.title}),t[30]=o.title,t[31]=z);let B;t[32]===o.question?B=t[33]:(B=o.question&&(0,L.jsxs)(`span`,{className:`dash-detail-q`,title:o.question,children:[`“`,o.question,`”`]}),t[32]=o.question,t[33]=B);let Te;t[34]===Symbol.for(`react.memo_cache_sentinel`)?(Te=(0,L.jsx)(`i`,{className:`dash-live-dot`}),t[34]=Te):Te=t[34];let V;t[35]!==o||t[36]!==M||t[37]!==k?(V=M?`checking for new data…`:re(o,k),t[35]=o,t[36]=M,t[37]=k,t[38]=V):V=t[38];let Ee=!M&&O(o)&&o.cadence.data!==`manual`?` · refreshes while open`:``,H;t[39]!==V||t[40]!==Ee?(H=(0,L.jsxs)(`span`,{className:`dash-detail-clock`,children:[Te,V,Ee]}),t[39]=V,t[40]=Ee,t[41]=H):H=t[41];let U;t[42]===o.id?U=t[43]:(U=()=>void de(o.id),t[42]=o.id,t[43]=U);let Oe=N===`busy`,ke=N===`busy`?`dash-refresh-spin`:void 0,W;t[44]===ke?W=t[45]:(W=(0,L.jsx)(a.refresh,{className:ke}),t[44]=ke,t[45]=W);let Me=N===`busy`?`Refreshing…`:`Refresh now`,G;t[46]!==U||t[47]!==Oe||t[48]!==W||t[49]!==Me?(G=(0,L.jsxs)(`button`,{type:`button`,className:`dash-edit-btn dash-refresh-btn`,onClick:U,disabled:Oe,title:`Fetch current values now, regardless of cadence`,children:[W,Me]}),t[46]=U,t[47]=Oe,t[48]=W,t[49]=Me,t[50]=G):G=t[50];let K;t[51]!==o||t[52]!==j||t[53]!==N?(K=(N===`no-model`||!ee(j)&&O(o))&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Connect a model in Live settings to refresh.`}),t[51]=o,t[52]=j,t[53]=N,t[54]=K):K=t[54];let q;t[55]===N?q=t[56]:(q=N===`failed`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Couldn’t reach your model — check its key or quota, then try again.`}),t[55]=N,t[56]=q);let J;t[57]===N?J=t[58]:(J=N===`unverified`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Checked, but no source could verify new values — keeping the last real ones.`}),t[57]=N,t[58]=J);let Y;t[59]!==o.id||t[60]!==o.metrics.length||t[61]!==P?(Y=o.metrics.length>0&&(0,L.jsxs)(`button`,{type:`button`,className:`dash-edit-btn dash-read-btn`,onClick:()=>void ge(o.id),disabled:P===`busy`,title:`Ask Mavéa to read the latest numbers now`,children:[(0,L.jsx)(a.sparkle,{className:P===`busy`?`dash-refresh-spin`:void 0}),P===`busy`?`Reading…`:`Read the numbers now`]}),t[59]=o.id,t[60]=o.metrics.length,t[61]=P,t[62]=Y):Y=t[62];let X;t[63]===P?X=t[64]:(X=P===`no-model`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Connect a model in Live settings to read.`}),t[63]=P,t[64]=X);let Z;t[65]===P?Z=t[66]:(Z=P===`failed`&&(0,L.jsx)(`span`,{className:`dash-refresh-hint`,children:`Couldn’t reach your model — check its key or quota, then try again.`}),t[65]=P,t[66]=Z);let Fe=`dash-edit-btn`+(c?` is-active`:``),Ie;t[67]===Symbol.for(`react.memo_cache_sentinel`)?(Ie=()=>{l(Ve),p(!1)},t[67]=Ie):Ie=t[67];let Re=c?`Done`:`Edit layout`,Q;t[68]!==Fe||t[69]!==Re?(Q=(0,L.jsx)(`button`,{type:`button`,className:Fe,onClick:Ie,children:Re}),t[68]=Fe,t[69]=Re,t[70]=Q):Q=t[70];let $;t[71]===o.id?$=t[72]:($=T.settings(o.id),t[71]=o.id,t[72]=$);let Ke;t[73]===$?Ke=t[74]:(Ke=(0,L.jsx)(`a`,{className:`dash-gear`,href:$,"aria-label":`Dashboard settings`,title:`Settings`,children:`⚙`}),t[73]=$,t[74]=Ke);let qe;t[75]!==z||t[76]!==B||t[77]!==H||t[78]!==G||t[79]!==K||t[80]!==q||t[81]!==J||t[82]!==Y||t[83]!==X||t[84]!==Z||t[85]!==Q||t[86]!==Ke?(qe=(0,L.jsxs)(`header`,{className:`dash-detail-head`,children:[we,z,B,H,G,K,q,J,Y,X,Z,Q,Ke]}),t[75]=z,t[76]=B,t[77]=H,t[78]=G,t[79]=K,t[80]=q,t[81]=J,t[82]=Y,t[83]=X,t[84]=Z,t[85]=Q,t[86]=Ke,t[87]=qe):qe=t[87];let Je;t[88]!==o||t[89]!==c?(Je=!c&&(0,L.jsx)(je,{dashboard:o}),t[88]=o,t[89]=c,t[90]=Je):Je=t[90];let Ye;t[91]!==o||t[92]!==M||t[93]!==c||t[94]!==k?(Ye=!c&&(0,L.jsx)(Ae,{dashboard:o,now:k,checking:M}),t[91]=o,t[92]=M,t[93]=c,t[94]=k,t[95]=Ye):Ye=t[95];let Xe;t[96]!==o||t[97]!==c||t[98]!==k?(Xe=!c&&(0,L.jsx)(Ne,{dashboard:o,now:k}),t[96]=o,t[97]=c,t[98]=k,t[99]=Xe):Xe=t[99];let Ze;t[100]!==o||t[101]!==c||t[102]!==u?(Ze=c&&(0,L.jsxs)(`div`,{className:`dash-edit-bar`,children:[(0,L.jsxs)(`span`,{className:`dash-edit-hint`,children:[`Drag a tile by its `,(0,L.jsx)(`strong`,{children:`⠿`}),` handle to reorder, tap `,(0,L.jsx)(`strong`,{children:`S/M/L`}),` to resize, `,(0,L.jsx)(`strong`,{children:`×`}),` to remove.`]}),(0,L.jsx)(`button`,{type:`button`,className:`dash-edit-add`,onClick:()=>p(Be),"aria-expanded":u,children:`+ Add widget`}),u&&(0,L.jsx)(Se,{dashboard:o,onClose:()=>p(!1)})]}),t[100]=o,t[101]=c,t[102]=u,t[103]=Ze):Ze=t[103];let Qe;t[104]!==o||t[105]!==c||t[106]!==k||t[107]!==xe?(Qe=c?(0,L.jsx)(`div`,{className:`dash-grid`,children:xe}):(0,L.jsxs)(`div`,{className:`dash-detail-cols`,children:[(0,L.jsxs)(`div`,{className:`dash-detail-main`,children:[o.widgets.length>0&&(0,L.jsxs)(`div`,{className:`dash-detail-section`,children:[(0,L.jsx)(`div`,{className:`card-eyebrow dash-detail-section-title`,children:`Cards`}),(0,L.jsx)(`div`,{className:`dash-grid`,children:xe})]}),(0,L.jsx)(he,{dashboardId:o.id,now:k}),(0,L.jsx)(Le,{dashboardId:o.id})]}),(0,L.jsxs)(`div`,{className:`dash-detail-side`,children:[(0,L.jsx)(me,{dashboard:o,now:k}),(0,L.jsx)(Pe,{dashboard:o})]})]}),t[104]=o,t[105]=c,t[106]=k,t[107]=xe,t[108]=Qe):Qe=t[108];let $e;t[109]!==o||t[110]!==c?($e=!c&&(0,L.jsx)(De,{dashboard:o},o.id),t[109]=o,t[110]=c,t[111]=$e):$e=t[111];let et;return t[112]!==qe||t[113]!==Je||t[114]!==Ye||t[115]!==Xe||t[116]!==Ze||t[117]!==Qe||t[118]!==$e?(et=(0,L.jsxs)(`div`,{className:`dash-detail`,children:[qe,Je,Ye,Xe,Ze,Qe,$e]}),t[112]=qe,t[113]=Je,t[114]=Ye,t[115]=Xe,t[116]=Ze,t[117]=Qe,t[118]=$e,t[119]=et):et=t[119],et}function Be(e){return!e}function Ve(e){return!e}function He(){return Date.now()}function Ue(e){return e.block}function We(e){return[e.id,e]}function Ge(e){return e.id}export{$ as DashboardDetail};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardLoopRuntime-
|
|
2
|
-
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{t as a}from"./preloadableLazy-MIX1ApBW.js";import{a as o,s}from"./index-
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/DashboardLoopRuntime-C9R-z9-o.js","assets/useDashboardLoop-BoVNM-pT.js","assets/rolldown-runtime-DkW27tQK.js","assets/react-BZJXY1be.js","assets/compiler-runtime-qQQXpJgv.js","assets/preload-helper-CiWYd9n-.js","assets/http-Lar_UMKb.js","assets/store-CsjDEADX.js","assets/friendlyAsk-BBdRZIar.js","assets/contentVault-xfUwSJ3i.js","assets/keyVault-Aw5Y2PjT.js","assets/providers-BovElgRL.js","assets/blockTypes-DUDdP3pB.js","assets/info-CiqHR5cs.js","assets/attachments-BW-vki-E.js","assets/useLiveConfig-Cpy0_E_-.js","assets/json-B0N3XRZU.js","assets/number-zqlPMliA.js","assets/ledger-Cv0LBflx.js","assets/format-g3dP8OI3.js","assets/dataPending-DGdCvY5Y.js","assets/now-C9-UAzTC.js","assets/predictions-CkVKHq-5.js","assets/notify-Bz4wuE4T.js","assets/dashboardEvents-D-XVj666.js","assets/spokenText-C88IQJ0M.js","assets/kokoro-B3oG_8sd.js","assets/index-zIa6h_8b.js","assets/useInView-CXTOAEV3.js","assets/jsx-runtime-DeHZSEgm.js","assets/coreIcons-DDTChE1H.js","assets/preloadableLazy-MIX1ApBW.js","assets/cachedImport-DW0gP14h.js","assets/lazyRetry-D50B1UMY.js","assets/theme-7IrMJ70_.js","assets/index-DrzNHwlO.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./react-BZJXY1be.js";import{t}from"./compiler-runtime-qQQXpJgv.js";import{t as n}from"./jsx-runtime-DeHZSEgm.js";import{n as r,t as i}from"./preload-helper-CiWYd9n-.js";import{t as a}from"./preloadableLazy-MIX1ApBW.js";import{a as o,s}from"./index-zIa6h_8b.js";import{t as c}from"./useDashboards-SRk8LqHe.js";var l=t(),u=e(),d=n();r();var f=a(()=>i(()=>import(`./DashboardLoopRuntime-C9R-z9-o.js`).then(e=>({default:e.DashboardLoopRuntime})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]))).Component;function p(){let e=(0,l.c)(1),t=(0,u.useSyncExternalStore)(s,o,m),n=c();if(!t||n.length===0)return null;let r;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(r=(0,d.jsx)(u.Suspense,{fallback:null,children:(0,d.jsx)(f,{})}),e[0]=r):r=e[0],r}function m(){return!1}export{p as DashboardLoopGate};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./useDashboardLoop-BoVNM-pT.js";function t(){return e(),null}export{t as DashboardLoopRuntime};
|