@mavea/mavea 1.0.16 → 1.0.17
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/dist/.vite/manifest.json +589 -567
- package/dist/assets/{AppCommandPalette-Dzl_DbDd.js → AppCommandPalette-B3E1gTd4.js} +1 -1
- package/dist/assets/{BlockEmpty-B5Q0hgDJ.js → BlockEmpty-DQkdduUE.js} +1 -1
- package/dist/assets/{BriefingPlayer-Dy7JCGm-.js → BriefingPlayer-CRKTlKa3.js} +1 -1
- package/dist/assets/{CanvasSkeleton-CJwPWnFG.js → CanvasSkeleton-cQ6KF-6z.js} +2 -2
- package/dist/assets/{CheckLogRail-DNtXlkcR.js → CheckLogRail-C6nouD1Y.js} +1 -1
- package/dist/assets/{CodeOutput-Bg64AyKu.js → CodeOutput-H8TQzjqL.js} +1 -1
- package/dist/assets/{CommandPalette-mO1FEvlx.js → CommandPalette-CSvgbXxg.js} +1 -1
- package/dist/assets/CourseLessonReader-1KDKwxIj.js +2 -0
- package/dist/assets/{CourseRail-CRcB319H.js → CourseRail-BijCpApU.js} +1 -1
- package/dist/assets/CoursesApp-BWkdYL07.js +2 -0
- package/dist/assets/{CrossExamPanel-Deywo95y.js → CrossExamPanel-Cn7b5y7B.js} +1 -1
- package/dist/assets/{DashPresent-BEm1tGse.js → DashPresent-B025i7iJ.js} +1 -1
- package/dist/assets/DashboardDetail-CZLnxgp0.js +2 -0
- package/dist/assets/DashboardLoopRuntime-7MpMUcMg.js +1 -0
- package/dist/assets/{DashboardOverview-DrdqBgds.js → DashboardOverview-COyleu7v.js} +1 -1
- package/dist/assets/{DashboardSettings-CBhzLW0P.js → DashboardSettings-DUfUqbsp.js} +1 -1
- package/dist/assets/DashboardsApp-6xMz2qCP.js +2 -0
- package/dist/assets/{DeepZoomApp-Chz6laKc.js → DeepZoomApp-CQaTT2Uh.js} +1 -1
- package/dist/assets/{DelegatePanel-DmtTY_lE.js → DelegatePanel-D4OrMa2D.js} +1 -1
- package/dist/assets/{DemoGallery-zw3d7ap9.js → DemoGallery-Bt92vKqc.js} +1 -1
- package/dist/assets/{DropSelect-Bo2Oyi-2.js → DropSelect-Q310fTbf.js} +1 -1
- package/dist/assets/{ExportModal-DICXavg9.js → ExportModal-D0zXlC8w.js} +2 -2
- package/dist/assets/ExtractionPreview-0SZYynDs.js +18 -0
- package/dist/assets/{FlagshipCTA-B-7nH43r.js → FlagshipCTA-D845jkdt.js} +1 -1
- package/dist/assets/{FlagshipCommandPalette-DgTL_Kjj.js → FlagshipCommandPalette-DHMnyG7j.js} +1 -1
- package/dist/assets/{FlagshipShowcase-CbAC2s4X.js → FlagshipShowcase-BuR3PZvU.js} +1 -1
- package/dist/assets/{FlashcardsApp-CatYcaJJ.js → FlashcardsApp-BzWb4cRP.js} +1 -1
- package/dist/assets/{ForecastPanel-BOG361kr.js → ForecastPanel-lTnux0EB.js} +1 -1
- package/dist/assets/GalleryApp-D0NGZ1_t.js +1 -0
- package/dist/assets/{HonestByDesign-hCxc0A7b.js → HonestByDesign-CCOt31nx.js} +1 -1
- package/dist/assets/{HowItWorks-BlbQcUxx.js → HowItWorks-auW5XXCZ.js} +1 -1
- package/dist/assets/{LegalApp-sCZjJYWx.js → LegalApp-DXDomKFv.js} +1 -1
- package/dist/assets/{LegalMarkdownDocument-Bk3U7ChN.js → LegalMarkdownDocument-DBjLz9Yf.js} +1 -1
- package/dist/assets/{LegalPageShell-BsgRV7aL.js → LegalPageShell-BG5UUk-9.js} +1 -1
- package/dist/assets/{LeverPanel-CP32QcIf.js → LeverPanel-CvYnTLjh.js} +1 -1
- package/dist/assets/{Library-CJTnp1pC.js → Library-Cl1gE9Qg.js} +1 -1
- package/dist/assets/{LibraryOverlay-geQRGAzG.js → LibraryOverlay-CX4cJLqD.js} +1 -1
- package/dist/assets/LiveApp-CDckMWYX.js +61 -0
- package/dist/assets/LiveSettings-DgfIXanM.js +6 -0
- package/dist/assets/{MindMapViewerDrawer-7HLErRQF.js → MindMapViewerDrawer-ClU9wgSH.js} +1 -1
- package/dist/assets/{MindShape-Bhu4yoIj.js → MindShape-yF19n9qq.js} +1 -1
- package/dist/assets/{PinToDashboard-Cj8S9XKC.js → PinToDashboard-CpIDAcIU.js} +1 -1
- package/dist/assets/PlanReview-CPcqOxjp.js +1 -0
- package/dist/assets/{Presence-DDxb6yE5.js → Presence-CHGZ1JRp.js} +1 -1
- package/dist/assets/{PresentationDeck-B6AHRYEA.js → PresentationDeck-CrtiWjiM.js} +1 -1
- package/dist/assets/PrismApp-D7RbekoX.js +2 -0
- package/dist/assets/{PrismAskController-DUvOTeW9.js → PrismAskController-D6_7Epdb.js} +1 -1
- package/dist/assets/PrismBriefingPlayer-Dq5_KRU3.js +2 -0
- package/dist/assets/PrismOverlay-CduGpA8D.js +131 -0
- package/dist/assets/{PrivacyApp-CatB3OpJ.js → PrivacyApp-rhzy-5HG.js} +1 -1
- package/dist/assets/{Recap-DkKrrqi5.js → Recap-BPg2xEPo.js} +1 -1
- package/dist/assets/{ReelJelly-DCD4bG10.js → ReelJelly-LWeMsFpj.js} +1 -1
- package/dist/assets/ReplayCard-C3dGQfxG.js +2 -0
- package/dist/assets/{ReplayOverlay-DbJX08Kr.js → ReplayOverlay-C9W603B5.js} +1 -1
- package/dist/assets/{RewindOverlay-Bop4a63b.js → RewindOverlay-BIWmxQlx.js} +1 -1
- package/dist/assets/RippleApp-C9-KFvkn.js +2 -0
- package/dist/assets/{RippleAskController-CK4iSwT0.js → RippleAskController-DEKz-6Vn.js} +1 -1
- package/dist/assets/RippleOverlay-CfXvnUHE.js +6 -0
- package/dist/assets/{SeeDontRead-CGGKmvBV.js → SeeDontRead-DrG1qBxJ.js} +1 -1
- package/dist/assets/{ShareModal-D4En6Y3L.js → ShareModal-eJ6sdMpf.js} +1 -1
- package/dist/assets/{ShipCascade-k_GWrcau.js → ShipCascade-BP8qL0yM.js} +1 -1
- package/dist/assets/{ShipCourse-BQOY4MyI.js → ShipCourse-BoqW58VU.js} +1 -1
- package/dist/assets/{ShipHotspots-vLRK0w_b.js → ShipHotspots-_9XPhZg2.js} +1 -1
- package/dist/assets/{ShipIncident-BWxerYtX.js → ShipIncident-Xod2gbjc.js} +1 -1
- package/dist/assets/{ShipMigration-OgAGEbjm.js → ShipMigration-BdkaiJ9D.js} +1 -1
- package/dist/assets/{ShipOnboarding-B_2IEq3N.js → ShipOnboarding-CblWatXR.js} +1 -1
- package/dist/assets/{ShipRead--gGqg2SE.js → ShipRead-BBn7xkOF.js} +1 -1
- package/dist/assets/{ShipRollout-B_U2P8Yw.js → ShipRollout-i5BY3YnP.js} +1 -1
- package/dist/assets/{ShipSuggestions-D9coTmgw.js → ShipSuggestions-liytLgC-.js} +1 -1
- package/dist/assets/{ShipWorkspace-BmdcHZXa.js → ShipWorkspace-C3VQwGn1.js} +1 -1
- package/dist/assets/{SignatureLoop-KA6Cf93g.js → SignatureLoop-Ba7plTb5.js} +1 -1
- package/dist/assets/{SynthesisApp-BCBhCJhx.js → SynthesisApp-Ch0tWRBS.js} +2 -2
- package/dist/assets/{SynthesisOverlay-BuGIeaKq.js → SynthesisOverlay-DMZndCzV.js} +1 -1
- package/dist/assets/{TermsApp-CleIlDtR.js → TermsApp-Dk2jpxq-.js} +1 -1
- package/dist/assets/{TopicCanvas-BRu3xVL8.js → TopicCanvas-DX0Z1ZHv.js} +2 -2
- package/dist/assets/{TourPrism-zbVLe2ag.js → TourPrism-6fWPMU4Z.js} +1 -1
- package/dist/assets/{TrackerTile-D9Wa3CSq.js → TrackerTile-BboQpBGy.js} +2 -2
- package/dist/assets/{TwoSurfaces-TyWXgAdq.js → TwoSurfaces-Cabk1rES.js} +1 -1
- package/dist/assets/{UnderstoodPanel-BS9OhgLJ.js → UnderstoodPanel-B6jfiKx1.js} +1 -1
- package/dist/assets/{WhyMachineOverlay-B-KJhCjr.js → WhyMachineOverlay-BRNibJSf.js} +1 -1
- package/dist/assets/{WowFeatures-Bv1-PmXF.js → WowFeatures-C7f4qzIf.js} +1 -1
- package/dist/assets/{ZoomDeck-C2Q6xbgX.js → ZoomDeck-BtlVyhwv.js} +1 -1
- package/dist/assets/{alternateFinishes-BG6svkXG.js → alternateFinishes-CVUX4x0C.js} +1 -1
- package/dist/assets/{annotationAuto-BpBsjbDQ.js → annotationAuto-BjWqgseH.js} +1 -1
- package/dist/assets/{annotationReel-yzysA-Gr.js → annotationReel-B5A2RZkx.js} +1 -1
- package/dist/assets/{backup-BdeBr3wq.js → backup-d46KwktS.js} +1 -1
- package/dist/assets/cachedImport-DW0gP14h.js +1 -0
- package/dist/assets/canvas-BuMP6u6i.js +1 -0
- package/dist/assets/{catalog-DF7YTNju.js → catalog-Bv0dWU_C.js} +1 -1
- package/dist/assets/confirmAdd-CWWtX1VN.js +1 -0
- package/dist/assets/{dashboardEvents-C_XvGVLJ.js → dashboardEvents-Be4sftHN.js} +1 -1
- package/dist/assets/{dist-CBEt6Q8V.js → dist-DIKAXwpM.js} +1 -1
- package/dist/assets/{fit-B1LJWvMO.js → fit-CuHWhwsj.js} +1 -1
- package/dist/assets/{generateLive-ChhSWKbq.js → generateLive-CMbGT3eM.js} +1 -1
- package/dist/assets/index-Dbr1j8Fe.js +22 -0
- package/dist/assets/{jspdf.es.min-DutJi91O.js → jspdf.es.min-ydC1TxUW.js} +1 -1
- package/dist/assets/{kokoro-kGWf7M0e.js → kokoro-DsmNzulR.js} +1 -1
- package/dist/assets/{lib-C7zXL8h0.js → lib-B6qSkBPa.js} +1 -1
- package/dist/assets/{liveSchema-DCL21WdS.js → liveSchema-B1MGdSkK.js} +1 -1
- package/dist/assets/{motion-dfA87zbb.js → motion-luJxBPnj.js} +1 -1
- package/dist/assets/notes-3WQ6b0Mi.js +1 -0
- package/dist/assets/{pdf-DFYCstCC.js → pdf-RyoPCIGN.js} +1 -1
- package/dist/assets/{perfProbe-CCSPF3EA.js → perfProbe-Xs39DqMh.js} +1 -1
- package/dist/assets/{pin-D5_Ebl_s.js → pin-Cj-LMfpK.js} +1 -1
- package/dist/assets/{portal-BndazODr.js → portal-zyqZwnb1.js} +1 -1
- package/dist/assets/{pptxgen.es-CwCkoJdp.js → pptxgen.es-CveAizg8.js} +1 -1
- package/dist/assets/{prewarm--KODwuMi.js → prewarm-K5WcvrNh.js} +1 -1
- package/dist/assets/{quietHours-DVPplPtM.js → quietHours-BklvMqsV.js} +1 -1
- package/dist/assets/{registry-DQIm_hbI.js → registry-1h9idbfk.js} +1 -1
- package/dist/assets/{registry-Dphh5ADP.js → registry-2zthbrHC.js} +1 -1
- package/dist/assets/{registry-D7rspCZr.js → registry-4O5l9cd5.js} +1 -1
- package/dist/assets/{registry-WJE8Z0T1.js → registry-BRB85vr4.js} +1 -1
- package/dist/assets/registry-BdMZ_4cm.js +2 -0
- package/dist/assets/{registry-Ba9xMFO4.js → registry-Bnp_yh8G.js} +2 -2
- package/dist/assets/{registry-BlB0FYf0.js → registry-C1IrZBk8.js} +1 -1
- package/dist/assets/{registry-B3V5-8v0.js → registry-C5DK98Hl.js} +1 -1
- package/dist/assets/{registry-0E1uKPCI.js → registry-CK0-re_Q.js} +1 -1
- package/dist/assets/{registry-DrNMbrA_.js → registry-COrl_Heq.js} +1 -1
- package/dist/assets/{registry-wJhGGVuP.js → registry-CQUQlrSx.js} +1 -1
- package/dist/assets/{registry-COxprhRN.js → registry-CXa3qXl3.js} +1 -1
- package/dist/assets/{registry-CWkBxxsI.js → registry-C_baBbqq.js} +1 -1
- package/dist/assets/{registry-CIa1EU-G.js → registry-CjY5POtx.js} +1 -1
- package/dist/assets/{registry-C30HGS2G.js → registry-CoBAqOlY.js} +1 -1
- package/dist/assets/{registry-Dvv84L9K.js → registry-DJj-o3MQ.js} +1 -1
- package/dist/assets/{registry-DNzF-nvu.js → registry-DfCCnIfu.js} +1 -1
- package/dist/assets/{registry-D-qEhm1d.js → registry-DfgFkD3J.js} +1 -1
- package/dist/assets/{registry-M3VgAiQv.js → registry-Dhlx1mF4.js} +1 -1
- package/dist/assets/{registry-nG70-amx.js → registry-DnEh7nbX.js} +1 -1
- package/dist/assets/{registry-hsSlT6pi.js → registry-VD94nLXO.js} +1 -1
- package/dist/assets/{registry-BH6FfyZk.js → registry-mFD4P5dI.js} +1 -1
- package/dist/assets/registry-sDzDmht4.js +1 -0
- package/dist/assets/{relate-DxAi8xpo.js → relate-CEND9Qlk.js} +1 -1
- package/dist/assets/{shikiHighlight-B_TEagaE.js → shikiHighlight-SCFIB43b.js} +1 -1
- package/dist/assets/useDashboardLoop-C8Mcbcto.js +5 -0
- package/dist/assets/{useLiveConfig-Lm0cYTcu.js → useLiveConfig-BW1WkpTc.js} +1 -1
- package/dist/assets/{useSpatialCanvas-D_C8VoCy.js → useSpatialCanvas-C5TNlpeK.js} +1 -1
- package/dist/assets/{useSpotlightWalk-CCQT0-_g.js → useSpotlightWalk-dA3IdI-1.js} +1 -1
- package/dist/assets/{useSrsCards-BKCPBPYw.js → useSrsCards-C7Xni9C0.js} +1 -1
- package/dist/assets/{useStudy-Diy4ITBm.js → useStudy-DHRIx8p-.js} +1 -1
- package/dist/assets/{useZoomGesture-B82XnSfi.js → useZoomGesture-BsPXvLw2.js} +1 -1
- package/dist/index.html +2 -1
- package/package.json +1 -1
- package/dist/assets/CourseLessonReader-CKfvBMtL.js +0 -2
- package/dist/assets/CoursesApp-BbCGxAav.js +0 -2
- package/dist/assets/DashboardDetail-tK6FpgtH.js +0 -2
- package/dist/assets/DashboardLoopRuntime-Cis4WMqk.js +0 -1
- package/dist/assets/DashboardsApp-Dc43FBIi.js +0 -2
- package/dist/assets/ExtractionPreview-C636AVw-.js +0 -18
- package/dist/assets/GalleryApp-uW6b1Y0d.js +0 -1
- package/dist/assets/LiveApp-C0BN0o3_.js +0 -61
- package/dist/assets/LiveSettings-CzSXXMoo.js +0 -6
- package/dist/assets/PlanReview-3NxZD9wt.js +0 -1
- package/dist/assets/PrismApp-BlPpWxao.js +0 -2
- package/dist/assets/PrismBriefingPlayer-Bmo9tOGX.js +0 -2
- package/dist/assets/PrismOverlay-9Q_14eEO.js +0 -131
- package/dist/assets/ReplayCard-Bz69tOST.js +0 -2
- package/dist/assets/RippleApp-u3hCfb5b.js +0 -2
- package/dist/assets/RippleOverlay-BM_B9JEc.js +0 -6
- package/dist/assets/canvas-Ep2Kfupo.js +0 -1
- package/dist/assets/index-C7H7A1rW.js +0 -22
- package/dist/assets/notes-DblI4Ko_.js +0 -1
- package/dist/assets/registry-B51MhOLx.js +0 -2
- package/dist/assets/registry-Pr5IKqro.js +0 -1
- package/dist/assets/useDashboardLoop-DzbRz-V9.js +0 -5
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/generate-8odaTyr4.js","assets/providers-wzm7E8Pa.js","assets/chunk-BVpWp9h4.js","assets/http-CJCtjYpA.js","assets/info-CiqHR5cs.js","assets/cache-BumECILO.js","assets/githubToken-DtcLYqwm.js","assets/keyVault-DEsNh9FR.js","assets/githubBrowser-DywfDeYx.js","assets/streamParse-DRgMHWye.js","assets/owners-FXDGInVq.js","assets/codeContext-0UMRSGRr.js","assets/ShipRead--gGqg2SE.js","assets/index-C7H7A1rW.js","assets/jsx-runtime-DaSxXjOY.js","assets/react-BQSORdFI.js","assets/lazyRetry-D50B1UMY.js","assets/index-CepQEz75.css","assets/ShipIncident-BWxerYtX.js","assets/ShipIncident-BUHvFFiC.css","assets/ShipWorkspace-BmdcHZXa.js","assets/colors-D49Req-e.js","assets/ShipWorkspace-D6XQpGEN.css","assets/ShipCascade-k_GWrcau.js","assets/ShipCascade-CyFnrlET.css","assets/ShipMigration-OgAGEbjm.js","assets/ShipMigration-BznCskNg.css","assets/ShipRollout-B_U2P8Yw.js","assets/ShipRollout-CqeObx5b.css","assets/ShipCourse-BQOY4MyI.js","assets/courseStore-DfafnL-9.js","assets/links--u_phi0x.js","assets/DropSelect-Bo2Oyi-2.js","assets/store-DXmC_fP2.js","assets/ShipCourse-DcT7PUSm.css","assets/ShipOnboarding-B_2IEq3N.js","assets/ShipOnboarding-BC9Vxkpa.css","assets/ShipHotspots-vLRK0w_b.js","assets/ShipHotspots-CLOMutPv.css","assets/ShipSuggestions-D9coTmgw.js","assets/ShipSuggestions-BKRvk5Mj.css","assets/ShipGate-BYYu9WVq.js","assets/ShipGate-BVZfCllb.css","assets/RippleAskController-CK4iSwT0.js","assets/json-B0N3XRZU.js","assets/verbatim-CBMzUDlf.js","assets/RippleAskController-BNAUoIW0.css"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{I as n,J as r,L as i,ht as a,k as o,q as s}from"./index-C7H7A1rW.js";import{t as c}from"./useFocusTrap-DbfG6zbM.js";import{t as l}from"./FeatureUseNotice-CoK5HkbR.js";import{t as u}from"./useSpatialCanvas-D_C8VoCy.js";import{_ as d,a as f,i as p,m,r as h,t as g,v as _,y as v}from"./githubToken-DtcLYqwm.js";import{i as y,n as b,t as x}from"./cache-BumECILO.js";import{n as S,r as C}from"./colors-D49Req-e.js";import{n as w,r as ee}from"./courseStore-DfafnL-9.js";var T=e(),E=.82;function D(e,t){let n=e.find(e=>e.type===`pr`)??e[0],r=n?.id??``,i=e.filter(e=>e.id!==r),a=e=>230+(e-1)*210,o=e=>Math.max(4,Math.floor(2*Math.PI*a(e)*E/204)),s=[];n&&s.push({node:n,x:0,y:0});let c=1,l=0,u=o(c);for(let e of i){l>=u&&(c+=1,l=0,u=o(c));let t=a(c),n=l/u*Math.PI*2-Math.PI/2+c*.5;s.push({node:e,x:0+Math.cos(n)*t,y:0+Math.sin(n)*t*E}),l+=1}for(let e=0;e<240;e++){let e=!1;for(let t=0;t<s.length;t++)for(let n=t+1;n<s.length;n++){let i=s[t],a=s[n],o=a.x-i.x,c=a.y-i.y,l=204-Math.abs(o),u=112-Math.abs(c);if(!(l<=0||u<=0))if(e=!0,l<u){let e=(l/2+.5)*(o<0?-1:1);i.node.id!==r&&(i.x-=e),a.node.id!==r&&(a.x+=e)}else{let e=(u/2+.5)*(c<0?-1:1);i.node.id!==r&&(i.y-=e),a.node.id!==r&&(a.y+=e)}}if(!e)break}let d=1/0,f=1/0,p=-1/0,m=-1/0;for(let e of s)d=Math.min(d,e.x-168/2),f=Math.min(f,e.y-76/2),p=Math.max(p,e.x+168/2),m=Math.max(m,e.y+76/2);let h=80-d,g=80-f;for(let e of s)e.x+=h,e.y+=g;let _=p-d+160,v=m-f+160;return{centerId:r,nodes:s,w:_,h:v,bbox:{x:0,y:0,w:_,h:v}}}var O=t();function te({nodes:e,edges:t,altitude:n,onAsk:r,animate:i}){let[a,o]=(0,T.useState)(`severity`),[s,c]=(0,T.useState)(!1),[l,d]=(0,T.useState)(null),f=(0,T.useMemo)(()=>{let n=s?e.filter(e=>e.type===`pr`||e.crossRepo):e,r=new Set(n.map(e=>e.id));return D(n,t.filter(e=>r.has(e.from)&&r.has(e.to)))},[e,t,s]),p=(0,T.useMemo)(()=>{let e=new Map;for(let t of f.nodes)e.set(t.node.id,t);return e},[f]),m=(0,T.useMemo)(()=>{let e=new Map,t=p.get(f.centerId);if(!t)return e;let n=1;for(let e of f.nodes)n=Math.max(n,Math.hypot(e.x-t.x,e.y-t.y));for(let r of f.nodes){let i=Math.hypot(r.x-t.x,r.y-t.y);e.set(r.node.id,Math.round(i/n*460))}return e},[f,p]),h=p.get(f.centerId),g=u({clamp:{min:.7,max:2.2},margin:56}),{fitTo:_}=g;(0,T.useEffect)(()=>{_(f.bbox)},[f,_]);let[v,y]=(0,T.useState)(!1),b=(0,T.useRef)(!1),x=(0,T.useRef)(!1),w=(0,T.useRef)({x:0,y:0}),ee=(0,T.useCallback)(e=>{b.current=!0,x.current=!1,y(!0),w.current={x:e.clientX,y:e.clientY},e.currentTarget.setPointerCapture(e.pointerId)},[]),E=(0,T.useCallback)(e=>{if(!b.current)return;let t=e.clientX-w.current.x,n=e.clientY-w.current.y;Math.abs(t)+Math.abs(n)>2&&(x.current=!0),w.current={x:e.clientX,y:e.clientY},g.pan(t,n)},[g]),te=(0,T.useCallback)(e=>{b.current=!1,y(!1);try{e.currentTarget.releasePointerCapture(e.pointerId)}catch{}},[]),k=g.viewportRef,{zoomAtClient:A}=g;(0,T.useEffect)(()=>{let e=k.current;if(!e)return;let t=e=>{e.preventDefault(),A(e.deltaY<0?1.12:1/1.12,e.clientX,e.clientY)};return e.addEventListener(`wheel`,t,{passive:!1}),()=>e.removeEventListener(`wheel`,t)},[k,A]);let j=g.camera.scale>=.7,M=a===`traffic`,N=l?p.get(l)?.node??null:null,P=e.some(e=>typeof e.traffic==`number`),F=e.some(e=>e.crossRepo===!0);return(0,O.jsxs)(`div`,{className:`ripple-impact`,children:[(0,O.jsxs)(`div`,{className:`ripple-impact-controls`,children:[P&&(0,O.jsxs)(`div`,{className:`ripple-lens`,role:`group`,"aria-label":`Map lens`,children:[(0,O.jsx)(`button`,{type:`button`,"data-active":a===`severity`?`true`:void 0,onClick:()=>o(`severity`),children:`Severity`}),(0,O.jsx)(`button`,{type:`button`,"data-active":a===`traffic`?`true`:void 0,onClick:()=>o(`traffic`),children:`Traffic`})]}),F&&(0,O.jsxs)(`label`,{className:`ripple-crossrepo`,children:[(0,O.jsx)(`input`,{type:`checkbox`,checked:s,onChange:e=>c(e.target.checked)}),`Cross-repo only`]}),(0,O.jsx)(`div`,{className:`ripple-zoombtns`,children:(0,O.jsx)(`button`,{type:`button`,onClick:()=>_(f.bbox),title:`Fit the whole map`,"aria-label":`Fit`,children:`⤢`})})]}),(0,O.jsxs)(`div`,{className:`ripple-stage`+(v?` is-panning`:``),ref:g.viewportRef,onPointerDown:ee,onPointerMove:E,onPointerUp:te,onPointerCancel:te,children:[(0,O.jsxs)(`div`,{className:`ripple-world`,"data-animate":i?`true`:void 0,style:{width:f.w,height:f.h,transform:g.transform},children:[i&&h&&(0,O.jsx)(`span`,{className:`ripple-enter-pulse`,"aria-hidden":`true`,style:{left:h.x,top:h.y}}),(0,O.jsx)(`svg`,{className:`ripple-edges`,width:f.w,height:f.h,viewBox:`0 0 ${f.w} ${f.h}`,"aria-hidden":`true`,children:f.nodes.filter(e=>e.node.id!==f.centerId).map(e=>{let n=p.get(f.centerId);if(!n)return null;let r=t.find(t=>t.from===n.node.id&&t.to===e.node.id)??t.find(t=>t.to===n.node.id&&t.from===e.node.id),i=C(e.node.status),a=M?1.3+(e.node.traffic??0)*3:r?.breaking?2.4:1.6;return(0,O.jsx)(`line`,{x1:n.x,y1:n.y,x2:e.x,y2:e.y,stroke:i,strokeWidth:a,strokeLinecap:`round`,strokeDasharray:r?.breaking?`6 5`:r?.dashed?`2 6`:void 0,className:`ripple-edge`+(r?.breaking?` ripple-edge-break`:``),style:{animationDelay:`${m.get(e.node.id)??0}ms`},opacity:l&&l!==e.node.id?.25:.7},e.node.id)})}),j&&f.nodes.filter(e=>e.node.id!==f.centerId).map(e=>{let n=p.get(f.centerId);if(!n)return null;let r=t.find(t=>t.from===n.node.id&&t.to===e.node.id)??t.find(t=>t.to===n.node.id&&t.from===e.node.id);return r?(0,O.jsx)(`div`,{className:`ripple-edge-verb`,style:{left:(n.x+e.x)/2,top:(n.y+e.y)/2,color:C(e.node.status)},children:r.verb},`v-${e.node.id}`):null}),f.nodes.map(e=>{let t=e.node,n=t.id===f.centerId,r=C(t.status),i=M&&!n?1+(t.traffic??0)*.24:1;return(0,O.jsx)(`button`,{type:`button`,className:`ripple-node`,"data-center":n?`true`:void 0,"data-status":t.status,"data-open":l===t.id?`true`:void 0,style:{left:e.x-168/2,top:e.y-76/2,width:168,minHeight:76,transform:`scale(${i.toFixed(3)})`,borderColor:r,opacity:l&&l!==t.id?.55:1,animationDelay:`${m.get(t.id)??0}ms`},onClick:()=>{x.current||d(e=>e===t.id?null:t.id)},children:n?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`span`,{className:`ripple-node-eyebrow`,style:{color:r},children:`THIS CHANGE`}),(0,O.jsx)(`span`,{className:`ripple-node-name ripple-node-name-lg`,children:t.label})]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsxs)(`span`,{className:`ripple-node-top`,children:[(0,O.jsx)(`span`,{className:`ripple-node-dot`,style:{background:r},"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`ripple-node-status`,style:{color:r},children:S(t.status)}),t.severity&&(0,O.jsx)(`span`,{className:`ripple-node-sev`,style:{background:r},children:t.severity})]}),(0,O.jsx)(`span`,{className:`ripple-node-name`,children:t.label}),j&&(0,O.jsxs)(`span`,{className:`ripple-node-meta`,children:[t.team??t.owner??``,t.trafficLabel?` · ${t.trafficLabel}`:``]}),t.crossRepo&&(0,O.jsx)(`span`,{className:`ripple-node-repo`,children:`other repo`})]})},t.id)})]}),(0,O.jsx)(`div`,{className:`ripple-map-legend`,"aria-hidden":`true`,children:[`breaks`,`migration`,`untested`,`affected`,`safe`].map(e=>(0,O.jsxs)(`span`,{className:`ripple-map-legend-item`,children:[(0,O.jsx)(`span`,{className:`ripple-node-dot`,style:{background:C(e)}}),S(e).toLowerCase()]},e))})]}),N&&(0,O.jsxs)(`aside`,{className:`ripple-inspect`,"aria-label":`${N.label} detail`,children:[(0,O.jsxs)(`div`,{className:`ripple-inspect-head`,children:[(0,O.jsxs)(`div`,{className:`ripple-inspect-titles`,children:[(0,O.jsx)(`span`,{className:`ripple-node-status`,style:{color:C(N.status)},children:S(N.status)}),N.severity&&(0,O.jsxs)(`span`,{className:`ripple-inspect-sev`,style:{background:C(N.status)},children:[`would page · `,N.severity]})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,onClick:()=>d(null),"aria-label":`Close detail`,children:`✕`})]}),(0,O.jsx)(`div`,{className:`ripple-inspect-name`,children:N.label}),(0,O.jsxs)(`div`,{className:`ripple-inspect-owner`,children:[N.team?`owned by ${N.team}`:``,N.cite?(0,O.jsxs)(`span`,{className:`ripple-inspect-cite`,children:[` · `,N.cite.ref]}):null]}),N.trafficLabel&&(0,O.jsxs)(`div`,{className:`ripple-inspect-traffic`,children:[(0,O.jsx)(`strong`,{children:N.trafficLabel}),(0,O.jsx)(`span`,{children:`live traffic, from tracing — not the diff`})]}),N.contract&&(0,O.jsxs)(`div`,{className:`ripple-inspect-block`,children:[(0,O.jsx)(`div`,{className:`ripple-eyebrow`,children:`The contract`}),(0,O.jsx)(`p`,{children:N.contract})]}),N.problem&&(0,O.jsxs)(`div`,{className:`ripple-inspect-block ripple-inspect-problem`,style:{borderColor:`color-mix(in oklab, ${C(N.status)} 40%, transparent)`},children:[(0,O.jsx)(`div`,{className:`ripple-eyebrow`,style:{color:C(N.status)},children:`What happens`}),(0,O.jsx)(`p`,{children:N.problem})]}),N.altitudeNotes?.[n]&&(0,O.jsxs)(`div`,{className:`ripple-inspect-block`,children:[(0,O.jsx)(`div`,{className:`ripple-eyebrow`,children:`At your altitude`}),(0,O.jsx)(`p`,{children:N.altitudeNotes[n]})]}),N.fix&&(0,O.jsxs)(`div`,{className:`ripple-inspect-fix`,children:[(0,O.jsx)(`div`,{className:`ripple-eyebrow`,children:`Mavéa’s call`}),(0,O.jsx)(`p`,{children:N.fix})]}),r&&(0,O.jsxs)(`button`,{type:`button`,className:`ripple-ask-btn`,onClick:()=>r(N),children:[`Ask about `,N.label]})]})]})}function k(e){let t=e.lastIndexOf(`/`),n=t>0?e.slice(0,t):``;return n?n.split(`/`).slice(0,2).join(`/`):`(root)`}function A(e){let t=e.split(`/`);return t[t.length-1]||e}function j(e){let t=e.toLowerCase();return/\b(api|routes?|server|http|controllers?|handlers?)\b/.test(t)?`Routes + request handling.`:/\b(auth|identity|session|login)\b/.test(t)?`Tokens, sessions, permissions.`:/\b(db|data|models?|schema|migrations?|store)\b/.test(t)?`Schemas, queries, persistence.`:/\b(billing|payments?|charge|orders?)\b/.test(t)?`The money path.`:/\b(jobs?|workers?|queue|tasks?|cron)\b/.test(t)?`Async / background work.`:/\b(ui|components?|views?|pages?|client|web)\b/.test(t)?`The user interface.`:/\b(tests?|__tests__|spec|e2e)\b/.test(t)?`Tests.`:/\b(lib|utils?|shared|common|helpers?)\b/.test(t)?`Shared utilities.`:/\b(config|infra|deploy|ci|scripts?)\b/.test(t)?`Config + tooling.`:/\b(webhooks?|events?|integrations?|connectors?)\b/.test(t)?`Outbound events / integrations.`:``}function M(e){return e.find(e=>/\/(index|main|mod|app|server)\.[a-z]+$/i.test(e))||([...e].sort((e,t)=>e.length-t.length)[0]??e[0]??``)}function N(e,t,n=!1){let r=e.filter(e=>typeof e==`string`&&e.length>0),i=new Map;for(let e of r){let t=k(e);(i.get(t)??i.set(t,[]).get(t)).push(e)}let a=[...i.entries()].sort((e,t)=>t[1].length-e[1].length),o=a.map(([e,t],n)=>{let r=M(t),i=`${t.length} file${t.length===1?``:`s`}`,a=j(e);return{id:`m${n}`,name:e,purpose:a||i,entry:r,owner:``,health:i,explain:`${a?a+` `:``}${i} in ${e}.`+(r?` Start with ${A(r)} and follow what it imports.`:``),startHere:t.slice(0,3).map(A),depends:[],usedBy:[]}}),s=[{id:`pr`,label:t.split(`/`).pop()||t,sub:`THIS REPO`,type:`pr`,status:`affected`,scope:`in-pr`}],c=[],l=a.slice(0,9);l.forEach(([e,t],n)=>{let r=`n${n}`,i=M(t);s.push({id:r,label:e,sub:`${t.length} file${t.length===1?``:`s`}`,type:`module`,status:`affected`,scope:`in-pr`,contract:`${j(e)||`${t.length} files`}`+(i?` · start with ${A(i)}`:``)}),c.push({from:`pr`,to:r,verb:`contains`,status:`affected`})});let u=a.slice(0,4).map(([e])=>e).join(`, `);return{pr:{repo:t,title:`${r.length} file${r.length===1?``:`s`}`,files:r.length,summary:`${t} — ${r.length} file${r.length===1?``:`s`} across ${i.size} area${i.size===1?``:`s`}${u?` (${u})`:``}. Start with the busiest areas and follow what they touch.`,risks:[],readScope:`Read the repo tree: ${r.length} file${r.length===1?``:`s`}.`},nodes:s,edges:c,changes:[],cascades:[],rollout:[],workTypes:[],hotspots:[],suggestions:[],suppressedNits:0,modules:o,onboarding:{firstWeek:a.slice(0,5).map(([e,t])=>({team:e.toUpperCase(),title:e,sub:j(e)||`${t.length} files`,file:M(t)})),requestLife:[]},gate:{decision:`watch`,shipSafe:!1,unackedP0:0,requires:[],deployOrder:`unset`,conditions:[],rationale:`Exploring the repo — there’s no change to gate here.`},provenance:{source:`github`,example:!1,notes:[`Exploring ${t} — ${r.length} files grouped into ${i.size} areas.`,`This is the code as it stands, not a change. The gate and diff views don’t apply.`,...a.length>l.length?[`The map shows the ${l.length} busiest areas; the full list is in Onboarding.`]:[],...n?[`Large repo — only the first slice of files was read.`]:[]]}}}var P={tier:`slow-cheap`,enrichMaxTokens:1600,courseCount:3,coursesMaxTokens:2600,closingMaxTokens:3600,lessonMaxTokens:3600,fetchCodeContext:!1,thinkingLevel:`minimal`},F={tier:`frontier-deep`,enrichMaxTokens:2600,courseCount:5,coursesMaxTokens:3e3,closingMaxTokens:4e3,lessonMaxTokens:7e3,fetchCodeContext:!0,thinkingLevel:`low`},I={tier:`frontier-fast`,enrichMaxTokens:2600,courseCount:5,coursesMaxTokens:3e3,closingMaxTokens:4e3,lessonMaxTokens:6e3,fetchCodeContext:!0,thinkingLevel:`minimal`},L=e=>!!e&&/(localhost|127\.0\.0\.1|0\.0\.0\.0|host\.docker\.internal|:11434)/i.test(e);function ne(e){let t=e.model.toLowerCase();return L(e.baseUrl)||/:free\b/.test(t)?`slow-cheap`:/\bopus\b/.test(t)||/\bgpt-5(?!.*mini)/.test(t)||/(^|[^a-z])o[1-9](-|\b)/.test(t)||/gemini-[0-9.]*-?pro/.test(t)||/\bsonnet\b/.test(t)&&!/haiku/.test(t)?`frontier-deep`:`frontier-fast`}function re(e){switch(ne(e)){case`slow-cheap`:return P;case`frontier-deep`:return F;default:return I}}var ie=/^[A-Za-z0-9._-]+$/,R=e=>({kind:`invalid`,reason:e});function ae(e,t){let n=e.trim().replace(/^git@github\.com:/i,`github.com/`);if(!n)return R(`Paste a GitHub PR, compare, or repo URL — or owner/repo#123.`);let r=n.replace(/^https?:\/\//i,``).replace(/^www\./i,``),i=/^github\.com\/(.+)$/i.exec(r),a=/^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+\/(?:pull|pulls|compare|tree|blob)\b/i.test(n),o=i?i[1]:a?n:null;if(o){let e=o.split(`#`)[0].split(`?`)[0].replace(/\/+$/,``).split(`/`),t=e[0]??``,n=(e[1]??``).replace(/\.git$/,``);if(!t||!n||!ie.test(t)||!ie.test(n))return R(`That GitHub URL is missing an owner/repo.`);let r=`${t}/${n}`,i=e[2],a=e.slice(3);if(!i)return{kind:`repo`,repo:r};if(i===`pull`||i===`pulls`){let e=(a[0]??``).replace(/\D.*$/,``);return e?{kind:`pr`,repo:r,prNumber:e}:R(`That pull-request URL has no number.`)}if(i===`compare`){let e=decodeURIComponent(a.join(`/`)),t=/^(.+?)\.{2,3}(.+)$/.exec(e);return t?{kind:`compare`,repo:r,base:t[1],head:t[2]}:R(`A compare URL looks like base...head.`)}if(i===`tree`||i===`blob`){let e=a[0],t=a.slice(1).join(`/`);return i===`blob`&&t&&(t=t.replace(/\/?[^/]*$/,``)),{kind:`tree`,repo:r,ref:e||void 0,path:t||void 0}}return{kind:`repo`,repo:r}}let s=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+?)(?:\.git)?#(\d+)$/.exec(n);if(s)return{kind:`pr`,repo:`${s[1]}/${s[2]}`,prNumber:s[3]};let c=/^([A-Za-z0-9._-]+)\/([A-Za-z0-9._-]+?)(?:\.git)?\/?$/.exec(n);if(c)return{kind:`repo`,repo:`${c[1]}/${c[2]}`};let l=/^#?(\d+)$/.exec(n);return l?t?{kind:`pr`,repo:t,prNumber:l[1]}:R(`Enter owner/repo#number, or connect a default repo first.`):R(`Paste a GitHub PR, compare, or repo URL — or owner/repo#123.`)}var oe=`mavea.ripple.tracked.v1`,se=20;function z(){try{let e=localStorage.getItem(oe);if(!e)return[];let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>e&&e.id&&e.model):[]}catch{return[]}}function B(e){try{localStorage.setItem(oe,JSON.stringify(e.slice(0,se)))}catch{}}function ce(){return z().sort((e,t)=>t.savedAt-e.savedAt)}function le(e,t=Date.now()){let n=e.pr.repo||e.pr.title||`change`,r={id:`${n}::${t}`,label:n,savedAt:t,source:e.provenance.source,model:e};return B([r,...z().filter(e=>e.label!==n)]),r}function ue(e){B(z().filter(t=>t.id!==e))}var V=a();function de(e){return(/^(.*?[.!?])(\s|$)/.exec(e.trim())?.[1]??e).trim()}function fe(e){let t=(0,V.c)(65),{model:n,altitude:r,onNavigate:i,onAsk:a}=e,{pr:o,gate:s}=n,c=n.changes.length===0,l;t[0]!==c||t[1]!==s?(l=c?{label:`Explore`,tone:`neutral`}:s.decision===`pass`?{label:`Clear to ship`,tone:`safe`}:s.decision===`block`?{label:`Hold`,tone:`breaks`}:{label:`Review first`,tone:`watch`},t[0]=c,t[1]=s,t[2]=l):l=t[2];let u=l,d=c?`${Math.max(0,n.nodes.length-1)} areas · ${o.files??0} files`:`+${o.added??0} −${o.removed??0} · ${o.files??n.changes.length} file${(o.files??n.changes.length)===1?``:`s`}`,f;t[3]===o.summary?f=t[4]:(f=de(o.summary),t[3]=o.summary,t[4]=f);let p=f,m=o.risks[0]?.text,h;t[5]!==n.courses||t[6]!==n.modules?(h=n.courses?.length||n.modules.length?[{id:`onboarding`,label:n.courses?.length?`Onboard · ${n.courses.length} course${n.courses.length===1?``:`s`}`:`Onboarding`}]:[],t[5]=n.courses,t[6]=n.modules,t[7]=h):h=t[7];let g;t[8]===n.changes.length?g=t[9]:(g=n.changes.length?[{id:`workspace`,label:`${n.changes.length} change${n.changes.length===1?``:`s`}`}]:[],t[8]=n.changes.length,t[9]=g);let _;t[10]===n.cascades.length?_=t[11]:(_=n.cascades.length?[{id:`cascade`,label:`The cascade`}]:[],t[10]=n.cascades.length,t[11]=_);let v;t[12]===n.migration?v=t[13]:(v=n.migration?[{id:`migration`,label:`The migration`}]:[],t[12]=n.migration,t[13]=v);let y;t[14]===n.rollout.length?y=t[15]:(y=n.rollout.length?[{id:`rollout`,label:`Safe rollout`}]:[],t[14]=n.rollout.length,t[15]=y);let b;t[16]===n.suggestions.length?b=t[17]:(b=n.suggestions.length?[{id:`suggestions`,label:`${n.suggestions.length} suggestion${n.suggestions.length===1?``:`s`}`}]:[],t[16]=n.suggestions.length,t[17]=b);let x;t[18]===n.hotspots.length?x=t[19]:(x=n.hotspots.length?[{id:`hotspots`,label:`The story`}]:[],t[18]=n.hotspots.length,t[19]=x);let S;t[20]===n.incident?S=t[21]:(S=n.incident?[{id:`incident`,label:`Incident`}]:[],t[20]=n.incident,t[21]=S);let C;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(C={id:`read`,label:`Full read`},t[22]=C):C=t[22];let w;t[23]===c?w=t[24]:(w=c?[]:[{id:`gate`,label:`The gate`}],t[23]=c,t[24]=w);let ee;t[25]!==S||t[26]!==w||t[27]!==h||t[28]!==g||t[29]!==_||t[30]!==v||t[31]!==y||t[32]!==b||t[33]!==x?(ee=[...h,...g,..._,...v,...y,...b,...x,...S,C,...w],t[25]=S,t[26]=w,t[27]=h,t[28]=g,t[29]=_,t[30]=v,t[31]=y,t[32]=b,t[33]=x,t[34]=ee):ee=t[34];let T=ee,E;t[35]===u.label?E=t[36]:(E=(0,O.jsx)(`span`,{className:`ripple-verdict-badge`,children:u.label}),t[35]=u.label,t[36]=E);let D;t[37]===d?D=t[38]:(D=(0,O.jsx)(`span`,{className:`ripple-verdict-scale`,children:d}),t[37]=d,t[38]=D);let k;t[39]!==E||t[40]!==D?(k=(0,O.jsxs)(`div`,{className:`ripple-verdict-top`,children:[E,D]}),t[39]=E,t[40]=D,t[41]=k):k=t[41];let A;t[42]===p?A=t[43]:(A=(0,O.jsx)(`p`,{className:`ripple-verdict-what`,children:p}),t[42]=p,t[43]=A);let j;t[44]!==c||t[45]!==m?(j=m?(0,O.jsxs)(`div`,{className:`ripple-verdict-one`,children:[(0,O.jsx)(`span`,{className:`ripple-verdict-one-tag`,children:c?`Where to start`:`The one thing to check`}),(0,O.jsx)(`span`,{className:`ripple-verdict-one-text`,children:m})]}):!c&&(0,O.jsxs)(`div`,{className:`ripple-verdict-one ripple-verdict-clean`,children:[(0,O.jsx)(`span`,{className:`ripple-verdict-one-tag`,children:`Reads clean`}),(0,O.jsx)(`span`,{className:`ripple-verdict-one-text`,children:`Nothing risky pulled to the top — review and ship.`})]}),t[44]=c,t[45]=m,t[46]=j):j=t[46];let M;t[47]!==k||t[48]!==A||t[49]!==j||t[50]!==u.tone?(M=(0,O.jsxs)(`div`,{className:`ripple-verdict-head`,"data-tone":u.tone,children:[k,A,j]}),t[47]=k,t[48]=A,t[49]=j,t[50]=u.tone,t[51]=M):M=t[51];let N;t[52]!==r||t[53]!==n.edges||t[54]!==n.nodes||t[55]!==a?(N=(0,O.jsx)(`div`,{className:`ripple-verdict-map`,children:(0,O.jsx)(te,{nodes:n.nodes,edges:n.edges,altitude:r,onAsk:a,animate:!0})}),t[52]=r,t[53]=n.edges,t[54]=n.nodes,t[55]=a,t[56]=N):N=t[56];let P;t[57]===Symbol.for(`react.memo_cache_sentinel`)?(P=(0,O.jsx)(`span`,{className:`ripple-verdict-chips-tag`,children:`Go deeper`}),t[57]=P):P=t[57];let F;t[58]!==T||t[59]!==i?(F=(0,O.jsxs)(`div`,{className:`ripple-verdict-chips`,"aria-label":`Go deeper`,children:[P,T.map(e=>(0,O.jsx)(`button`,{type:`button`,className:`ripple-verdict-chip`,onClick:()=>i(e.id),children:e.label},e.id))]}),t[58]=T,t[59]=i,t[60]=F):F=t[60];let I;return t[61]!==M||t[62]!==N||t[63]!==F?(I=(0,O.jsxs)(`div`,{className:`ripple-verdict`,children:[M,N,F]}),t[61]=M,t[62]=N,t[63]=F,t[64]=I):I=t[64],I}r();var pe,H=()=>(pe??=s(()=>import(`./generate-8odaTyr4.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9])),pe),me=(...e)=>H().then(t=>t.enrichShipModel(...e)),he=(...e)=>H().then(t=>t.enrichIncident(...e)),ge=(...e)=>H().then(t=>t.enrichOrientation(...e)),_e=(...e)=>H().then(t=>t.enrichCourses(...e)),ve=(...e)=>H().then(t=>t.enrichCourseClosing(...e)),ye=(...e)=>H().then(t=>t.enrichLesson(...e)),be=(...e)=>H().then(t=>t.gatherLessonCode(...e)),xe,U=()=>(xe??=s(()=>import(`./githubBrowser-DywfDeYx.js`).then(e=>e.i),__vite__mapDeps([8,2,3,6,7])),xe),Se=(...e)=>U().then(t=>t.fetchPrDiff(...e)),Ce=(...e)=>U().then(t=>t.compareRefs(...e)),we=(...e)=>U().then(t=>t.fetchRepoTree(...e)),Te,Ee=(...e)=>(Te??=s(()=>import(`./owners-FXDGInVq.js`),__vite__mapDeps([10,8,2,3,6,7])),Te.then(t=>t.resolveOwners(...e))),De,Oe=(...e)=>(De??=s(()=>import(`./codeContext-0UMRSGRr.js`),__vite__mapDeps([11,8,2,3,6,7])),De.then(t=>t.gatherCodeContext(...e))),ke=e=>e?/^([\w.-]+\/[\w.-]+)/.exec(e.trim())?.[1]:void 0,Ae=n(()=>s(()=>import(`./ShipRead--gGqg2SE.js`).then(e=>({default:e.ShipRead})),__vite__mapDeps([12,13,2,14,15,16,17]))),je=n(()=>s(()=>import(`./ShipIncident-BWxerYtX.js`).then(e=>({default:e.ShipIncident})),__vite__mapDeps([18,13,2,14,15,16,17,19]))),Me=n(()=>s(()=>import(`./ShipWorkspace-BmdcHZXa.js`).then(e=>({default:e.ShipWorkspace})),__vite__mapDeps([20,13,2,14,15,16,17,21,22]))),Ne=n(()=>s(()=>import(`./ShipCascade-k_GWrcau.js`).then(e=>({default:e.ShipCascade})),__vite__mapDeps([23,13,2,14,15,16,17,21,24]))),Pe=n(()=>s(()=>import(`./ShipMigration-OgAGEbjm.js`).then(e=>({default:e.ShipMigration})),__vite__mapDeps([25,13,2,14,15,16,17,26]))),Fe=n(()=>s(()=>import(`./ShipRollout-B_U2P8Yw.js`).then(e=>({default:e.ShipRollout})),__vite__mapDeps([27,13,2,14,15,16,17,28]))),Ie=n(()=>s(()=>import(`./ShipCourse-BQOY4MyI.js`).then(e=>({default:e.ShipCourse})),__vite__mapDeps([29,13,2,14,15,16,17,30,6,7,31,32,33,34]))),Le=n(()=>s(()=>import(`./ShipOnboarding-B_2IEq3N.js`).then(e=>({default:e.ShipOnboarding})),__vite__mapDeps([35,13,2,14,15,16,17,36]))),Re=n(()=>s(()=>import(`./ShipHotspots-vLRK0w_b.js`).then(e=>({default:e.ShipHotspots})),__vite__mapDeps([37,13,2,14,15,16,17,38]))),W=n(()=>s(()=>import(`./ShipSuggestions-D9coTmgw.js`).then(e=>({default:e.ShipSuggestions})),__vite__mapDeps([39,13,2,14,15,16,17,40]))),G=n(()=>s(()=>import(`./ShipGate-BYYu9WVq.js`).then(e=>({default:e.ShipGate})),__vite__mapDeps([41,14,2,15,42]))),ze=n(()=>s(()=>import(`./RippleAskController-CK4iSwT0.js`).then(e=>({default:e.RippleAskController})),__vite__mapDeps([43,13,2,14,15,16,17,1,3,4,44,45,8,6,7,31,46]))),Be=ze.Component,Ve=Ae.Component,He=je.Component,Ue=Me.Component,We=Ne.Component,Ge=Pe.Component,Ke=Fe.Component,qe=Ie.Component,Je=Le.Component,Ye=Re.Component,Xe=W.Component,Ze=G.Component,Qe=(e,t)=>`${e}::${t}`;function $e(e){try{return localStorage.getItem(e)}catch{return null}}function et(e,t){try{localStorage.setItem(e,t)}catch{}}var tt=[{id:`newgrad`,label:`New grad`},{id:`working`,label:`Working`},{id:`principal`,label:`Principal`}],nt=new Set([`anthropic`,`openai`,`gemini`,`grok`,`openrouter`]);function rt(e){return{read:Ae.preload,incident:je.preload,workspace:Me.preload,cascade:Ne.preload,migration:Pe.preload,rollout:Fe.preload,course:Ie.preload,onboarding:Le.preload,hotspots:Re.preload,suggestions:W.preload,gate:G.preload}[e]?.()??Promise.resolve()}var it={understand:`Understand`,ship:`Ship the change`},at=e=>e===`course`?`courses`:e===`onboarding`?`orientation`:`verdict`,ot=[{id:`verdict`,label:`Overview`,intent:`The verdict, the one thing to check, and the change rippling out.`,jobs:[`ship`],applies:e=>e.changes.length>0},{id:`read`,label:`Mavéa’s read`,intent:`The whole change in two sentences, risks pulled to the top.`,jobs:[`ship`,`understand`],applies:e=>!!e.pr.summary||e.changes.length>0},{id:`course`,label:`Courses`,intent:`A leveled curriculum built from THIS code — beginner → expert, with checkpoints.`,jobs:[`understand`],applies:(e,t)=>!!e.courses?.length||t.courses===`enriching`||t.hasRepo},{id:`onboarding`,label:`Map & request life`,intent:`The modules, who owns what, and a request’s life through the code.`,jobs:[`understand`],applies:(e,t)=>e.modules.length>0||t.hasRepo},{id:`incident`,label:`Incident`,intent:`A live alert, traced back to its likely cause — the rollback and who to wake.`,jobs:[`ship`,`understand`],applies:e=>!!e.incident},{id:`workspace`,label:`Workspace`,intent:`Pick a change — its diff, intent, and cause & effect assemble.`,jobs:[`ship`],applies:e=>e.changes.length>0},{id:`impact`,label:`Impact map`,intent:`Everything this change touches, and what those changes hit downstream.`,jobs:[`ship`,`understand`],applies:e=>e.nodes.length>0},{id:`cascade`,label:`The cascade`,intent:`How one line becomes a P0 — hop by hop, before anyone gets paged.`,jobs:[`ship`],applies:e=>e.cascades.length>0},{id:`migration`,label:`The migration`,intent:`The cost of a schema change isn’t in the SQL — it’s in the table size.`,jobs:[`ship`],applies:e=>!!e.migration},{id:`rollout`,label:`Safe rollout`,intent:`One safe order — so you ship with your eyes open.`,jobs:[`ship`],applies:e=>e.rollout.length>0},{id:`hotspots`,label:`The story`,intent:`Why a line exists, what it broke, and who to ask.`,jobs:[`understand`],applies:e=>e.hotspots.length>0},{id:`suggestions`,label:`Suggestions`,intent:`The “did you think about X?” a staff engineer would raise — grounded, and rare.`,jobs:[`ship`],applies:e=>e.suggestions.length>0},{id:`gate`,label:`The gate`,intent:`A picture for you, a pre-merge check for the agents.`,jobs:[`ship`],applies:e=>e.changes.length>0}];function st({model:e,cfg:t,speak:n,showcase:r,onClose:a}){let[s,u]=(0,T.useState)(!1),[S,C]=(0,T.useState)(!1),[E,D]=(0,T.useState)(`verdict`),[k,A]=(0,T.useState)(`working`),[j,M]=(0,T.useState)(e),P=(0,T.useRef)(e),[F,I]=(0,T.useState)({verdict:`floor`,orientation:`floor`,courses:`floor`}),L=(0,T.useRef)(0),ne=(0,T.useRef)(null),ie=(0,T.useRef)(null),R=(0,T.useRef)(null),oe=(0,T.useRef)(null),se=(0,T.useRef)(!1),z=(0,T.useRef)(!1),B=(0,T.useRef)(void 0),V=(0,T.useRef)(void 0),de=(0,T.useRef)(void 0),pe=(0,T.useRef)(null),[H,xe]=(0,T.useState)(!1),[U,Te]=(0,T.useState)(!1),[De,Ae]=(0,T.useState)(0),[je,Me]=(0,T.useState)(null),Ne=(0,T.useRef)([]),Pe=(0,T.useRef)(new Map),Fe=(0,T.useRef)(new Map),Ie=(0,T.useCallback)(e=>{Me(t=>({text:e,nonce:(t?.nonce??0)+1})),Te(!0)},[]),Le=(0,T.useMemo)(()=>t?{model:j,cfg:t,altitude:k,diffText:pe.current?.text,repo:B.current,gitRef:V.current,treePaths:Ne.current,lessonDetails:Fe.current,fileCache:Pe.current}:null,[t,j,k]),Re=(0,T.useCallback)(()=>{Ae(e=>e+1),Ne.current=[],Pe.current.clear(),Fe.current.clear()},[]),W=(0,T.useCallback)(()=>{ne.current?.abort(),ie.current?.abort(),R.current?.abort(),oe.current?.abort()},[]);(0,T.useEffect)(()=>W,[W]);let G=(0,T.useRef)(0);(0,T.useEffect)(()=>{M(e),P.current=e,B.current=void 0,se.current=!0,z.current=!0,I({verdict:`done`,orientation:e.modules.length?`done`:`floor`,courses:e.courses?.length?`done`:`floor`})},[e]);let st=(0,T.useRef)(!1);(0,T.useEffect)(()=>{st.current||(st.current=!0,!(!e.provenance.example||r)&&($e(`ripple.seenWorkedExample`)===`1`?(Nt(`github`),Y(!0)):et(`ripple.seenWorkedExample`,`1`)))},[e.provenance.example,r]);let K=(0,T.useMemo)(()=>t&&nt.has(t.provider)?t:{provider:`gemini`,model:`gemini-3.5-flash`,apiKey:``},[t]),q=(0,T.useMemo)(()=>re(K),[K]),[ct,lt]=(0,T.useState)(()=>$e(`ripple.hint.fastModel.dismissed`)===`1`),[ut,dt]=(0,T.useState)(!1),ft=(0,T.useCallback)(()=>{lt(!0),et(`ripple.hint.fastModel.dismissed`,`1`)},[]),pt=(0,T.useCallback)((e,t,n)=>{let r=++L.current;ne.current?.abort();let i=new AbortController;ne.current=i,xe(!1),I(e=>({...e,verdict:`enriching`})),(async()=>{let a=n&&q.fetchCodeContext?await Oe(e,n,void 0,i.signal).catch(()=>``):``;if(i.signal.aborted||L.current!==r)return;let o=await me(e,t,K,{signal:i.signal,codeContext:a||void 0,maxTokens:q.enrichMaxTokens,thinkingLevel:q.thinkingLevel,onPartial:t=>{L.current===r&&M(m(e,t,K.model))}});L.current===r&&(o?(M(o),P.current=o,I(e=>({...e,verdict:`done`}))):(M(e),P.current=e,I(e=>({...e,verdict:`error`}))))})()},[K,q]),mt=(0,T.useCallback)((e,t,n)=>{let r=v(_(e),t);return r.changes.length===0?0:(G.current++,W(),P.current=r,B.current=n,V.current=r.pr.branch||void 0,de.current=void 0,pe.current={text:e,repo:n},se.current=!1,z.current=!1,Re(),M(r),D(`verdict`),dt(!0),I({verdict:`enriching`,orientation:`floor`,courses:`floor`}),pt(r,e,n),r.changes.length)},[W,pt,Re]),ht=(0,T.useCallback)(()=>{let e=pe.current;e&&pt(P.current,e.text,e.repo)},[pt]),gt=(0,T.useCallback)(e=>{let t=P.current;return t.modules.length?t.modules:N(t.changes.map(e=>e.file),e,!1).modules},[]),_t=(0,T.useCallback)((e=!1)=>{let t=B.current;if(!t||se.current&&!e)return;se.current=!0;let n=L.current;ie.current?.abort();let r=new AbortController;ie.current=r,I(e=>({...e,orientation:`enriching`})),(async()=>{let e=await ge({...P.current,modules:gt(t)},t,V.current,K,{signal:r.signal,maxTokens:q.enrichMaxTokens,thinkingLevel:q.thinkingLevel}).catch(()=>null);if(r.signal.aborted||L.current!==n)return;let i=e?await Ee(e,t,V.current,r.signal).catch(()=>e):{...P.current,modules:gt(t)};r.signal.aborted||L.current!==n||(M(e=>({...e,modules:i.modules,nodes:i.nodes,onboarding:i.onboarding})),I(t=>({...t,orientation:e?`done`:`error`})))})()},[K,q,gt]),J=(0,T.useCallback)((e=!1,t)=>{let n=B.current;if(!n||z.current&&!e)return;z.current=!0;let r=L.current;R.current?.abort();let i=new AbortController;R.current=i;let a=setTimeout(()=>i.abort(),9e4);I(e=>({...e,courses:`enriching`})),(async()=>{let o=y(`courses|${n}|${V.current??``}|${t??``}`,K.model),s=e?null:await x(o);if(i.signal.aborted||L.current!==r)return;let c={...P.current,modules:gt(n)},l=s?.courses??await _e(c,n,V.current,K,{signal:i.signal,count:q.courseCount,maxTokens:q.coursesMaxTokens,thinkingLevel:q.thinkingLevel,focus:t}).catch(()=>void 0);if(clearTimeout(a),!(i.signal.aborted||L.current!==r))if(l?.length){M(e=>({...e,courses:l})),I(e=>({...e,courses:`done`}));let e=s?s.commitSha:de.current;s||b(o,{courses:l,commitSha:de.current}),ee(n,{commitSha:e??``,ref:V.current??``,model:K.model,builtAt:Date.now(),courseTitles:l.map(e=>e.title)})}else I(e=>({...e,courses:`error`}))})()},[K,q,gt]),vt=(0,T.useCallback)(()=>J(!0),[J]),[yt,bt]=(0,T.useState)(void 0),xt=(0,T.useCallback)(e=>{bt(e),z.current=!1,J(!0,e)},[J]),St=(0,T.useCallback)((e,t)=>{let n=B.current;return n?Ce(e,t,n):Promise.resolve({ok:!1,detail:`No connected repo.`})},[]),Ct=(0,T.useCallback)(async(e,t,n=!1,r)=>{let i=B.current;if(!i)return null;let{codeContext:a,contentHash:o}=await be(t,V.current,i),s=y(`lesson|${i}|${e.title}|${t.title}|${r??`working`}|${o}`,K.model);if(!n){let n=await x(s);if(n)return Fe.current.set(Qe(e.title,t.title),n),n}let c=await ye(e,t,a,K,{maxTokens:q.lessonMaxTokens,thinkingLevel:q.thinkingLevel,altitude:r}).catch(()=>null);return c&&(b(s,c),Fe.current.set(Qe(e.title,t.title),c)),c},[K,q]),wt=(0,T.useCallback)(async(e,t=!1)=>{let n=B.current;if(!n)return;let r=y(`closing|${n}|${e.title}|${V.current??``}`,K.model);if(!t){let e=await x(r);if(e)return e}let i=new AbortController,a=setTimeout(()=>i.abort(),9e4),o=await ve(e,K,{signal:i.signal,maxTokens:q.closingMaxTokens,thinkingLevel:q.thinkingLevel}).catch(()=>void 0).finally(()=>clearTimeout(a));return o&&b(r,o),o},[K,q]),Tt=(0,T.useCallback)(e=>{D(e);let t=at(e);t===`courses`?J():t===`orientation`&&_t()},[J,_t]),[Et,Y]=(0,T.useState)(!1),[Dt,Ot]=(0,T.useState)(``),[kt,At]=(0,T.useState)(``),jt=(0,T.useCallback)(()=>{let e=Dt.trim();if(!d(e)){At("That doesn’t look like a unified diff — paste the output of `git diff` (or a .diff / .patch file).");return}if(mt(e)===0){At(`No changed files found in that diff.`);return}Y(!1),Ot(``),At(``)},[Dt,mt]),[Mt,Nt]=(0,T.useState)(`github`),[Pt,Ft]=(0,T.useState)(()=>ce()),[It,Lt]=(0,T.useState)(!1),Rt=(0,T.useRef)(void 0),zt=(0,T.useCallback)(()=>{le(j),Lt(!0),window.clearTimeout(Rt.current),Rt.current=window.setTimeout(()=>Lt(!1),1600)},[j]);(0,T.useEffect)(()=>()=>window.clearTimeout(Rt.current),[]);let Bt=(0,T.useCallback)(e=>{Ft(ce()),Nt(e),qt(``),Z(``),ln(``),dn(h()),Y(!0)},[]),[Vt,Ht]=(0,T.useState)(``),[Ut,Wt]=(0,T.useState)(``),Gt=(0,T.useCallback)(()=>{let e=Vt.trim();if(!e){Wt(`Paste the alert, error, or log line that fired.`);return}G.current++;let t=f(e,j.changes.length>0&&!j.provenance.example?j:void 0);if(M(t),D(`incident`),Y(!1),Ht(``),Wt(``),K){oe.current?.abort();let n=new AbortController;oe.current=n,he(t,e,K,n.signal).then(e=>M(n=>n.incident===t.incident?e:n))}},[Vt,j,K]),[Kt,qt]=(0,T.useState)(``),[X,Jt]=(0,T.useState)(``),[Yt,Xt]=(0,T.useState)(``),[Zt,Qt]=(0,T.useState)(``),[$t,en]=(0,T.useState)(``),[tn,nn]=(0,T.useState)(``),[rn,an]=(0,T.useState)(``),[on,Z]=(0,T.useState)(``),[Q,sn]=(0,T.useState)(!1),[cn,ln]=(0,T.useState)(``),[un,dn]=(0,T.useState)(!1),fn=(0,T.useRef)(null);(0,T.useEffect)(()=>()=>fn.current?.abort(),[]);let pn=(0,T.useCallback)(async e=>{let t=G.current;fn.current?.abort();let n=new AbortController;fn.current=n,sn(!0),Z(``);let r=await e(n.signal);if(!(n.signal.aborted||t!==G.current)){if(sn(!1),!r.ok||!r.diff){Z(r.detail);return}if(mt(r.diff,r.label,ke(r.label))===0){Z(`That diff had no changed files to analyze.`);return}Y(!1)}},[mt]),mn=(0,T.useCallback)(()=>{let e=Yt.trim();if(!e){Z(`Enter a pull-request number.`);return}pn(t=>Se(e,X.trim()||void 0,t))},[Yt,X,pn]),hn=(0,T.useCallback)(()=>{let e=Zt.trim(),t=$t.trim();if(!e||!t){Z(`Enter a base and a head ref to compare.`);return}pn(n=>Ce(e,t,X.trim()||void 0,n))},[Zt,$t,X,pn]),gn=(0,T.useCallback)(()=>{let e=cn.trim();e&&p(e).then(e=>{dn(e),ln(``),e&&Z(``)})},[cn]),_n=(0,T.useCallback)(()=>{g().then(()=>{dn(!1),ln(``)})},[]),vn=(0,T.useCallback)(async(e,t,n)=>{let r=(e??X).trim()||void 0,i=(t??tn).trim()||void 0,a=(n??rn).trim(),o=G.current;fn.current?.abort();let s=new AbortController;fn.current=s,sn(!0),Z(``);let c=await we(i,r,s.signal);if(s.signal.aborted||o!==G.current)return;if(sn(!1),!c.ok||!c.paths){Z(c.detail);return}let l=a.replace(/^\/+|\/+$/g,``),u=l?c.paths.filter(e=>e===l||e.startsWith(l+`/`)):c.paths;if(u.length===0){Z(`No files under “${l}”.`);return}let d=N(u,l?`${c.label??`repo`}/${l}`:c.label??`repo`,c.truncated),f=ke(c.label),p=i,m=f?!!w(f):!1;G.current++,W(),++L.current,P.current=d,B.current=f,V.current=p,de.current=c.sha,pe.current=null,se.current=!1,z.current=!1,Re(),Ne.current=u,M(d),D(m?`course`:`onboarding`),dt(!0),Y(!1),I({verdict:`done`,orientation:`floor`,courses:`floor`}),f&&(_t(),m&&J())},[tn,X,rn,W,_t,J,Re]),yn=(0,T.useCallback)(()=>{let e=ae(Kt,X.trim()||void 0);if(e.kind===`invalid`){Z(e.reason);return}if(Z(``),e.kind===`pr`)pn(t=>Se(e.prNumber,e.repo,t));else if(e.kind===`compare`)pn(t=>Ce(e.base,e.head,e.repo,t));else{let t=e.kind===`tree`?e.ref:void 0,n=e.kind===`tree`?e.path:void 0;vn(e.repo,t,n)}},[Kt,X,pn,vn]),bn=j.changes.length>0?`ship`:`understand`,xn=(0,T.useMemo)(()=>{let e={orientation:F.orientation,courses:F.courses,hasRepo:!!B.current},t=ot.filter(t=>t.applies(j,e)),n=bn===`ship`?`understand`:`ship`,r=t.filter(e=>e.jobs.includes(bn)),i=t.filter(e=>!e.jobs.includes(bn)&&e.jobs.includes(n));return[{job:bn,items:r},{job:n,items:i}].filter(e=>e.items.length>0)},[j,F.orientation,F.courses,bn]),Sn=(0,T.useMemo)(()=>xn.flatMap(e=>e.items),[xn]);(0,T.useEffect)(()=>{Sn.length&&!Sn.some(e=>e.id===E)&&D(Sn[0].id)},[Sn,E]);let Cn=(0,T.useCallback)(e=>{S&&n&&n(`${e.label}. ${e.problem??e.contract??``} ${e.fix??``}`.trim()),Ie(`Explain ${e.label}${e.contract?` — ${e.contract}`:``}`)},[S,n,Ie]),wn=(0,T.useCallback)(e=>{let t=j;switch(e){case`verdict`:return t.pr.summary;case`read`:return t.pr.summary;case`incident`:return t.incident?`${t.incident.symptom}. ${t.incident.rootCause}`:``;case`workspace`:return`Here are all ${t.changes.length} changes, grouped by subsystem. Pick one to see its diff and what it touches.`;case`impact`:{let e=t.nodes.filter(e=>e.status===`breaks`).length;return e?`Everything this change touches. ${e} of these break — the coral lines are where.`:`Everything this change touches. Nothing breaks downstream.`}case`cascade`:{let e=t.cascades[0];return e?`Watch how one line becomes a ${e.incidentSeverity}: ${e.trigger}, and ${e.incident}.`:``}case`migration`:return t.migration?`The migration looks harmless, but on ${t.migration.rows} rows it costs ${t.migration.lockCost}.`:``;case`rollout`:return`Ship in this order and the change never breaks a caller mid-rollout.`;case`course`:return t.courses?.length?`A guided curriculum — ${t.courses.length} ${t.courses.length===1?`course`:`courses`} that take you from oriented to fearless, built from this code.`:`A leveled course, built from this code, so you can change it without fear.`;case`onboarding`:return`Understand the whole service — module by module, and a request's life through it.`;case`hotspots`:return`The story behind the lines worth knowing before you touch them.`;case`suggestions`:return`${t.suggestions.length} things worth your time. ${t.suppressedNits} shallow nits suppressed.`;case`gate`:return t.gate.rationale;default:return``}},[j]);(0,T.useEffect)(()=>{let e=e=>{e.key===`Escape`&&a()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[a]);let Tn=(0,T.useRef)(null);c(Tn);let $=j.pr,En=j.provenance.example,Dn=(0,T.useCallback)(()=>{switch(E){case`verdict`:return(0,O.jsx)(fe,{model:j,altitude:k,onNavigate:e=>Tt(e),onAsk:Cn});case`read`:return(0,O.jsx)(Ve,{model:j,altitude:k});case`incident`:return(0,O.jsx)(He,{model:j,altitude:k});case`impact`:return(0,O.jsx)(te,{nodes:j.nodes,edges:j.edges,altitude:k,onAsk:Cn});case`workspace`:return(0,O.jsx)(Ue,{model:j,altitude:k});case`cascade`:return(0,O.jsx)(We,{model:j});case`migration`:return(0,O.jsx)(Ge,{model:j,altitude:k});case`rollout`:return(0,O.jsx)(Ke,{model:j,altitude:k});case`course`:return(0,O.jsx)(qe,{model:j,altitude:k,building:F.courses===`enriching`,onRegenerate:B.current?vt:void 0,loadLessonDetail:B.current?Ct:void 0,loadCourseClosing:B.current?wt:void 0,courseFocus:yt,onCourseFocus:B.current?xt:void 0,speak:S?n:void 0,commitSha:B.current?de.current:void 0,compareSinceBuilt:B.current?St:void 0,openFullAnalysis:B.current?mt:void 0,onAskAboutLesson:Ie});case`onboarding`:return(0,O.jsx)(Je,{model:j,altitude:k});case`hotspots`:return(0,O.jsx)(Ye,{model:j,altitude:k});case`suggestions`:return(0,O.jsx)(Xe,{model:j,altitude:k});case`gate`:return(0,O.jsx)(Ze,{model:j,altitude:k});default:throw Error(`Ripple: no section renderer for "${E}"`)}},[E,j,k,Cn,Tt,F.courses,vt,Ct,wt,yt,xt,St,mt,S,n,Ie]);return(0,O.jsx)(`div`,{className:`ripple-scrim`,"data-expanded":s?`true`:void 0,onClick:a,role:`button`,tabIndex:0,"aria-label":`Close Ripple`,onKeyDown:e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),a())},children:(0,O.jsxs)(`section`,{className:`ripple-panel`,role:`dialog`,"aria-label":`Ripple`,ref:Tn,onClick:e=>e.stopPropagation(),children:[(0,O.jsxs)(`header`,{className:`ripple-head`,children:[(0,O.jsxs)(`div`,{className:`ripple-id`,children:[(0,O.jsx)(`span`,{className:`ripple-word`,children:`Ripple`}),(0,O.jsx)(`span`,{className:`ripple-sep`,"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`ripple-repo`,children:$.repo}),$.number&&(0,O.jsx)(`span`,{className:`ripple-pr`,children:$.number}),$.branch&&(0,O.jsxs)(`span`,{className:`ripple-branch`,children:[$.branch,$.base?` → ${$.base}`:``]})]}),(0,O.jsxs)(`div`,{className:`ripple-head-right`,children:[($.added!=null||$.removed!=null)&&(0,O.jsxs)(`span`,{className:`ripple-stat`,children:[$.added!=null&&(0,O.jsxs)(`span`,{className:`ripple-add`,children:[`+`,$.added.toLocaleString()]}),` `,$.removed!=null&&(0,O.jsxs)(`span`,{className:`ripple-del`,children:[`−`,$.removed.toLocaleString()]}),$.files==null?``:` · ${$.files} files`]}),$.p0Ways?(0,O.jsxs)(`span`,{className:`ripple-p0`,title:`Ways this change could cause a P0`,children:[(0,O.jsx)(`span`,{className:`ripple-p0-dot`,"aria-hidden":`true`}),$.p0Ways,` `,$.p0Ways===1?`way`:`ways`,` to cause a P0`]}):null,!En&&(0,O.jsx)(`button`,{type:`button`,className:`ripple-track-btn`,onClick:zt,title:`Keep an eye on this change — saved on this device`,children:It?`Tracked ✓`:`☆ Track`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-ask-toggle`+(U?` is-active`:``),onClick:()=>Te(e=>!e),...i(ze.preload),"aria-pressed":U,"aria-label":U?`Close the ask rail`:`Ask about this repo or PR`,title:U?`Hide ask`:`Ask about this repo or PR`,children:`Ask`}),n&&(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,onClick:()=>C(e=>!e),"aria-pressed":S,"aria-label":S?`Turn narration off`:`Turn narration on`,title:S?`Narration on — the orb speaks the walkthrough`:`Narration off`,children:S?`🔊`:`🔇`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,onClick:()=>u(e=>!e),"aria-label":s?`Exit full screen`:`Expand to full screen`,title:s?`Exit full screen`:`Full screen`,children:s?`⤡`:`⤢`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,onClick:a,"aria-label":`Close Ripple`,children:`✕`})]})]}),q.tier===`slow-cheap`&&ut&&!ct&&(0,O.jsxs)(`div`,{className:`ripple-hint`,role:`note`,children:[(0,O.jsx)(`span`,{className:`ripple-hint-text`,children:`Tip: a flash or lite model makes Ripple feel instant — your model still works, it’s just slower here.`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-hint-dismiss`,onClick:ft,"aria-label":`Dismiss tip`,children:`Got it`})]}),(En||(j.provenance.notes?.length??0)>0)&&(0,O.jsxs)(`div`,{className:`ripple-example`,"data-real":En?void 0:`true`,role:`note`,children:[(0,O.jsx)(`span`,{className:`ripple-example-dot`,"aria-hidden":`true`}),(0,O.jsx)(`span`,{className:`ripple-example-text`,children:En?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`strong`,{children:`Worked example`}),` — a sample of a GitHub-connected analysis, not your code. It shows only what GitHub gives us (diff, files, in-repo callers).`]}):(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`strong`,{children:j.changes.length===0?`Exploring`:`From your diff`}),` —`,` `,j.provenance.notes?.[0]]})}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-example-cta`,onClick:()=>Bt(`github`),children:En?`Run on your own code →`:`New`})]}),(0,O.jsxs)(`div`,{className:`ripple-body`,children:[(0,O.jsxs)(`nav`,{className:`ripple-rail`,"aria-label":`Sections`,children:[xn.map(e=>(0,O.jsxs)(`div`,{className:`ripple-rail-group`,children:[xn.length>1&&(0,O.jsx)(`div`,{className:`ripple-rail-grouplabel`,children:it[e.job]}),e.items.map(e=>(0,O.jsxs)(`button`,{type:`button`,className:`ripple-rail-item`,"data-ripple-section":e.id,"data-active":e.id===E?`true`:void 0,"data-enriching":F[at(e.id)]===`enriching`?`true`:void 0,onClick:()=>{if(Tt(e.id),S&&n){let t=wn(e.id);t&&n(t)}},...i(()=>rt(e.id)),children:[(0,O.jsx)(`span`,{className:`ripple-rail-label`,children:e.label}),F[at(e.id)]===`enriching`&&(0,O.jsx)(`span`,{className:`ripple-rail-spark`,"aria-hidden":`true`})]},e.id))]},e.job)),(0,O.jsxs)(`div`,{className:`ripple-rail-altitude`,children:[(0,O.jsx)(`div`,{className:`ripple-eyebrow`,children:`Explain for`}),(0,O.jsx)(`div`,{className:`ripple-alt`,role:`group`,"aria-label":`Explanation altitude`,children:tt.map(e=>(0,O.jsx)(`button`,{type:`button`,"data-active":k===e.id?`true`:void 0,onClick:()=>A(e.id),children:e.label},e.id))})]})]}),(0,O.jsxs)(`div`,{className:`ripple-main`,children:[F[at(E)]===`enriching`&&at(E)!==`courses`&&(0,O.jsxs)(`div`,{className:`ripple-sharpening-wrap`,children:[(0,O.jsxs)(`div`,{className:`ripple-sharpening`,role:`status`,"aria-live":`polite`,children:[(0,O.jsx)(`span`,{className:`ripple-sharpening-dot`,"aria-hidden":`true`}),at(E)===`orientation`?`Reading the repo to map it out…`:`Sharpening with the model’s read…`]}),(0,O.jsx)(`div`,{className:`ripple-progress`,"aria-hidden":`true`})]}),at(E)===`verdict`&&F.verdict===`error`&&!H&&(0,O.jsxs)(`div`,{className:`ripple-verdict-err`,role:`note`,children:[(0,O.jsx)(`span`,{className:`ripple-verdict-err-text`,children:`The model’s read didn’t land — showing the grounded floor. Connect a key in Settings → Live, or try again.`}),(0,O.jsxs)(`div`,{className:`ripple-verdict-err-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`ripple-verdict-err-retry`,onClick:ht,children:`Try again`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-verdict-err-dismiss`,onClick:()=>xe(!0),"aria-label":`Dismiss`,children:`Dismiss`})]})]}),(0,O.jsx)(o,{label:`${ot.find(e=>e.id===E)?.label??`Ripple`} section`,children:Dn()})]}),U&&(0,O.jsx)(o,{label:`Ripple ask rail`,children:(0,O.jsx)(Be,{ctx:Le,onClose:()=>Te(!1),altitude:k,seed:je,repo:$.repo||``,gitRef:$.branch||`HEAD`,focusFile:j.changes[0]?.file??j.modules[0]?.entry},De)})]}),Et&&(0,O.jsx)(`div`,{className:`ripple-paste`,role:`dialog`,"aria-label":`Run Ripple on a diff`,children:(0,O.jsxs)(`div`,{className:`ripple-paste-card`,children:[(0,O.jsxs)(`div`,{className:`ripple-paste-head`,children:[(0,O.jsxs)(`div`,{children:[(0,O.jsx)(`div`,{className:`ripple-paste-title`,children:`Run Ripple on your code`}),(0,O.jsx)(`div`,{className:`ripple-paste-sub`,children:`Read-only — Ripple analyzes a change and never writes, comments, or merges.`})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,onClick:()=>Y(!1),"aria-label":`Cancel`,children:`✕`})]}),(0,O.jsx)(l,{kind:`code`,from:`live`}),Mt===`incident`?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`textarea`,{className:`ripple-paste-input`,value:Vt,onChange:e=>{Ht(e.target.value),Ut&&Wt(``)},placeholder:`PagerDuty: [payments-api] P1 — 5xx rate 38% on /charge
|
|
3
|
-
or paste the error / log line that fired`,spellCheck:!1}),Ut&&(0,O.jsx)(`div`,{className:`ripple-paste-err`,children:Ut}),(0,O.jsxs)(`div`,{className:`ripple-paste-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,onClick:Gt,children:`Trace it back`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-cancel`,onClick:()=>Y(!1),children:`Cancel`})]}),(0,O.jsx)(`div`,{className:`ripple-paste-hint`,children:`Ripple traces the alert back to its likely cause — read-only. If a change is open, the trace grounds in it. It never reverts, deploys, or pages anyone.`})]}):Mt===`tracked`?(0,O.jsx)(`div`,{className:`ripple-tracked`,children:Pt.length===0?(0,O.jsxs)(`div`,{className:`ripple-tracked-empty`,children:[`Nothing tracked yet. Open a change and hit `,(0,O.jsx)(`strong`,{children:`☆ Track`}),` to keep an eye on it — it’s saved on this device only.`]}):Pt.map(e=>(0,O.jsxs)(`div`,{className:`ripple-tracked-row`,children:[(0,O.jsxs)(`button`,{type:`button`,className:`ripple-tracked-open`,onClick:()=>{M(e.model),D(`verdict`),Y(!1)},children:[(0,O.jsx)(`span`,{className:`ripple-tracked-label`,children:e.label}),(0,O.jsxs)(`span`,{className:`ripple-tracked-meta`,children:[e.source,` · `,e.model.changes.length||e.model.modules.length,` items`]})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-iconbtn`,"aria-label":`Untrack ${e.label}`,onClick:()=>{ue(e.id),Ft(ce())},children:`✕`})]},e.id))}):Mt===`paste`?(0,O.jsxs)(O.Fragment,{children:[(0,O.jsx)(`textarea`,{className:`ripple-paste-input`,value:Dt,onChange:e=>{Ot(e.target.value),kt&&At(``)},placeholder:`diff --git a/auth/token.ts b/auth/token.ts
|
|
4
|
-
@@ -42 +42 @@
|
|
5
|
-
-validateToken(t: string)
|
|
6
|
-
+validateToken(t: string, opts: VerifyOpts)`,spellCheck:!1}),kt&&(0,O.jsx)(`div`,{className:`ripple-paste-err`,children:kt}),(0,O.jsxs)(`div`,{className:`ripple-paste-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,onClick:jt,children:`Analyze diff`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-cancel`,onClick:()=>Y(!1),children:`Cancel`})]}),(0,O.jsx)(`div`,{className:`ripple-paste-hint`,children:`Parsed on your device first. The deterministic floor stays local; optional model enrichment sends relevant diff and code context through this deployment to your selected model.`})]}):(0,O.jsxs)(`div`,{className:`ripple-gh`,children:[(0,O.jsxs)(`label`,{className:`ripple-gh-field`,children:[(0,O.jsxs)(`span`,{children:[`Paste a GitHub link`,X.trim()?(0,O.jsxs)(`em`,{children:[` — or a PR number for `,X.trim()]}):null]}),(0,O.jsx)(`input`,{value:Kt,onChange:e=>{qt(e.target.value),on&&Z(``)},onKeyDown:e=>{e.key===`Enter`&&yn()},placeholder:`github.com/owner/repo/pull/482 · owner/repo · a compare URL`,spellCheck:!1})]}),(0,O.jsxs)(`div`,{className:`ripple-paste-actions`,children:[(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,disabled:Q,onClick:yn,children:Q?`Loading…`:`Analyze`}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-cancel`,onClick:()=>Y(!1),children:`Cancel`})]}),on&&(0,O.jsx)(`div`,{className:`ripple-paste-err`,children:on}),(0,O.jsx)(`div`,{className:`ripple-paste-hint`,children:`Read-only — Ripple reads the diff, files, and in-repo callers of a PR, branch, or repo. It never comments, approves, or merges. Public repos need nothing.`}),(0,O.jsxs)(`div`,{className:`ripple-gh-token`,children:[(0,O.jsxs)(`div`,{className:`ripple-gh-row`,children:[(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsxs)(`span`,{children:[`GitHub token `,(0,O.jsx)(`em`,{children:`— only for private repos`})]}),(0,O.jsx)(`input`,{type:`password`,value:cn,onChange:e=>ln(e.target.value),onKeyDown:e=>{e.key===`Enter`&&cn.trim()&&gn()},placeholder:un?`Saved on this device — paste a new token to replace it`:`github_pat_… or ghp_… (optional)`,autoComplete:`off`,spellCheck:!1})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,disabled:!cn.trim(),onClick:gn,children:`Save`}),un&&(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-cancel`,onClick:_n,children:`Remove`})]}),(0,O.jsx)(`div`,{className:`ripple-paste-hint`,children:`Stored encrypted in this browser and sent directly by the browser to api.github.com for read requests. The token itself is not included in model prompts. Use it only on a trusted device.`}),(0,O.jsxs)(`div`,{className:`ripple-paste-hint`,children:[`Best: a `,(0,O.jsx)(`strong`,{children:`fine-grained`}),` token with`,` `,(0,O.jsx)(`strong`,{children:`Contents: read-only`}),`, scoped to the repos you want — one token covers every repo it’s granted. A classic `,(0,O.jsx)(`code`,{children:`repo`}),`-scoped token reaches all of your private repos.`]})]}),(0,O.jsxs)(`details`,{className:`ripple-gh-adv`,children:[(0,O.jsx)(`summary`,{children:`Advanced — exact PR #, compare refs, or a folder`}),(0,O.jsxs)(`label`,{className:`ripple-gh-field`,children:[(0,O.jsxs)(`span`,{children:[`Repository `,(0,O.jsx)(`em`,{children:`— or paste a full GitHub link above`})]}),(0,O.jsx)(`input`,{value:X,onChange:e=>Jt(e.target.value),placeholder:`owner/repo`,spellCheck:!1})]}),(0,O.jsxs)(`div`,{className:`ripple-gh-row`,children:[(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsx)(`span`,{children:`Pull request #`}),(0,O.jsx)(`input`,{value:Yt,onChange:e=>{Xt(e.target.value),on&&Z(``)},placeholder:`4821`,spellCheck:!1})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,disabled:Q,onClick:mn,children:Q?`Loading…`:`Load PR`})]}),(0,O.jsx)(`div`,{className:`ripple-gh-or`,children:`or compare two refs (branch · tag · SHA)`}),(0,O.jsxs)(`div`,{className:`ripple-gh-row`,children:[(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsx)(`span`,{children:`Base`}),(0,O.jsx)(`input`,{value:Zt,onChange:e=>Qt(e.target.value),placeholder:`main`,spellCheck:!1})]}),(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsx)(`span`,{children:`Head`}),(0,O.jsx)(`input`,{value:$t,onChange:e=>en(e.target.value),placeholder:`feat/short-lived-tokens`,spellCheck:!1})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,disabled:Q,onClick:hn,children:Q?`Loading…`:`Compare`})]}),(0,O.jsx)(`div`,{className:`ripple-gh-or`,children:`or explore the whole repo (or a folder) — no change`}),(0,O.jsxs)(`div`,{className:`ripple-gh-row`,children:[(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsxs)(`span`,{children:[`Ref `,(0,O.jsx)(`em`,{children:`— branch / tag / SHA, defaults to HEAD`})]}),(0,O.jsx)(`input`,{value:tn,onChange:e=>nn(e.target.value),placeholder:`main`,spellCheck:!1})]}),(0,O.jsxs)(`label`,{className:`ripple-gh-field ripple-gh-grow`,children:[(0,O.jsxs)(`span`,{children:[`Folder `,(0,O.jsx)(`em`,{children:`— optional path`})]}),(0,O.jsx)(`input`,{value:rn,onChange:e=>an(e.target.value),placeholder:`src/auth`,spellCheck:!1})]}),(0,O.jsx)(`button`,{type:`button`,className:`ripple-paste-go`,disabled:Q,onClick:()=>void vn(),children:Q?`Loading…`:`Explore`})]})]})]})]})})]})})}export{st as RippleOverlay};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import"./ReplayCard-Bz69tOST.js";import"./TopicCanvas-BRu3xVL8.js";import"./CanvasSkeleton-CJwPWnFG.js";
|