@mavea/mavea 1.0.7
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 +159 -0
- package/DISCLAIMER.md +16 -0
- package/LICENSE +75 -0
- package/PRIVACY.md +127 -0
- package/README.md +248 -0
- package/SECURITY.md +72 -0
- package/SUPPORT.md +13 -0
- package/TERMS.md +122 -0
- package/THIRD-PARTY.txt +639 -0
- package/TRADEMARKS.md +15 -0
- package/bin/mavea.mjs +1079 -0
- package/dist/.vite/manifest.json +4261 -0
- package/dist/_headers +52 -0
- package/dist/assets/AppCommandPalette-DUMSp3rd.js +1 -0
- package/dist/assets/AtlasView-B5fkQhO6.css +1 -0
- package/dist/assets/AtlasView-Dl2fssaG.js +1 -0
- package/dist/assets/BlockEmpty-CLtVQf6c.js +1 -0
- package/dist/assets/BriefingPlayer-DO205Qkh.js +1 -0
- package/dist/assets/BriefingPlayer-TpFZB77N.css +1 -0
- package/dist/assets/CanvasSkeleton-BZZPCuRZ.js +2 -0
- package/dist/assets/CanvasSkeleton-iy6DBvde.css +1 -0
- package/dist/assets/CardEditor-BY1bZiV6.css +1 -0
- package/dist/assets/CardEditor-DzJXb0G7.js +1 -0
- package/dist/assets/CheckLogRail-F4AlgAcc.css +1 -0
- package/dist/assets/CheckLogRail-wUfby67Z.js +1 -0
- package/dist/assets/CodeOutput-Kh6ldxQz.js +97 -0
- package/dist/assets/CommandPalette-Bb-eErih.css +1 -0
- package/dist/assets/CommandPalette-Kl00mMZm.js +1 -0
- package/dist/assets/CourseLessonReader-COmTQdSK.css +1 -0
- package/dist/assets/CourseLessonReader-MBHoknUz.js +2 -0
- package/dist/assets/CourseRail-CUa7uIGG.css +1 -0
- package/dist/assets/CourseRail-q6x5cCpW.js +1 -0
- package/dist/assets/CoursesApp-v89OVJvg.js +2 -0
- package/dist/assets/CrossExamPanel-CZ0ShGma.css +1 -0
- package/dist/assets/CrossExamPanel-DH04p6VS.js +1 -0
- package/dist/assets/DashPresent-BYXbPuGj.js +1 -0
- package/dist/assets/DashPresent-DQYcgp-W.css +1 -0
- package/dist/assets/DashboardDetail-B50ZkeVK.js +2 -0
- package/dist/assets/DashboardLoopRuntime-CFXPx3v_.js +1 -0
- package/dist/assets/DashboardOverview-C-FdGWM5.js +1 -0
- package/dist/assets/DashboardSettings-Dmw6JTbI.js +1 -0
- package/dist/assets/DashboardsApp-Dx-EsaPW.css +1 -0
- package/dist/assets/DashboardsApp-JSY_bVfi.js +2 -0
- package/dist/assets/DeepZoomApp-BFNwli7l.js +37 -0
- package/dist/assets/DeepZoomApp-fRXCJHHZ.css +1 -0
- package/dist/assets/DelegatePanel-BK7rEhIc.js +26 -0
- package/dist/assets/DelegatePanel-_9RZiLHM.css +1 -0
- package/dist/assets/DemoGallery-BPtVG7_y.js +1 -0
- package/dist/assets/DropSelect-DUhdQSta.js +1 -0
- package/dist/assets/ExportModal-D4WpAg2c.css +1 -0
- package/dist/assets/ExportModal-D65cGyj_.js +2 -0
- package/dist/assets/ExtractionPreview-Iwfg2Ogl.js +18 -0
- package/dist/assets/FallbackCard-B489rTd9.js +1 -0
- package/dist/assets/FallbackCard-D_6ps1xA.css +1 -0
- package/dist/assets/FeatureUseNotice-CWt7gOwS.css +1 -0
- package/dist/assets/FeatureUseNotice-DPtQ0OGb.js +1 -0
- package/dist/assets/FlagshipCTA-BXntKhxb.js +1 -0
- package/dist/assets/FlagshipCommandPalette-BDJfasI-.js +1 -0
- package/dist/assets/FlagshipShowcase-DJ8Gxk_G.js +1 -0
- package/dist/assets/FlashcardsApp-CLNo4WX7.js +1 -0
- package/dist/assets/ForecastPanel-Da2ZBUrE.css +1 -0
- package/dist/assets/ForecastPanel-PBO2-dgS.js +1 -0
- package/dist/assets/GalleryApp-B1CB3_81.css +1 -0
- package/dist/assets/GalleryApp-DM03CMRy.js +1 -0
- package/dist/assets/HonestByDesign-Dqyth6nW.js +1 -0
- package/dist/assets/HowItWorks-C0zosIvq.js +1 -0
- package/dist/assets/LegalApp-DZBdExTy.js +1 -0
- package/dist/assets/LegalMarkdownDocument-CSZhRG5r.js +3 -0
- package/dist/assets/LegalPageShell-C_HottbD.css +1 -0
- package/dist/assets/LegalPageShell-DTeXqWyc.js +1 -0
- package/dist/assets/LeverPanel-DhpJY76O.css +1 -0
- package/dist/assets/LeverPanel-aZfhtVJX.js +1 -0
- package/dist/assets/Library-D2XGNXz7.js +1 -0
- package/dist/assets/Library-DmrtHjUf.css +1 -0
- package/dist/assets/LibraryOverlay-B2WQSgwr.js +1 -0
- package/dist/assets/LibraryOverlay-CnKWDMG_.css +1 -0
- package/dist/assets/LiveApp-B9zwXlGC.js +61 -0
- package/dist/assets/LiveApp-BVZGpJ1S.css +1 -0
- package/dist/assets/LiveSettings-CmgrMqvK.css +1 -0
- package/dist/assets/LiveSettings-D9OcWlm6.js +6 -0
- package/dist/assets/MindMapViewerDrawer-YYyZqmAd.js +1 -0
- package/dist/assets/MindShape-Ca3MXEgK.css +1 -0
- package/dist/assets/MindShape-mTlN5mPZ.js +1 -0
- package/dist/assets/Orb-B0NEVfqL.js +1 -0
- package/dist/assets/PinToDashboard-_kIOHs0k.js +1 -0
- package/dist/assets/PlanReview-33V8GTNB.js +1 -0
- package/dist/assets/Presence-CzLJIeSD.js +1 -0
- package/dist/assets/PresentationDeck-BDoGecxr.js +1 -0
- package/dist/assets/PrismApp-PfBTFhMF.js +2 -0
- package/dist/assets/PrismAskController-DBoxQSJR.css +1 -0
- package/dist/assets/PrismAskController-DbQDrlU9.js +37 -0
- package/dist/assets/PrismBriefingPlayer-1fvlfLR8.js +2 -0
- package/dist/assets/PrismOverlay-B7lEspdu.js +131 -0
- package/dist/assets/PrismOverlay-BTfAicBt.css +1 -0
- package/dist/assets/PrivacyApp-CR4lRs0L.js +128 -0
- package/dist/assets/Quiz-CUwtekfu.js +1 -0
- package/dist/assets/Recap-DCiiWNiV.css +1 -0
- package/dist/assets/Recap-H5fhj5Tc.js +1 -0
- package/dist/assets/ReelJelly-3jSVsJsy.js +1 -0
- package/dist/assets/RehearsalPanel-BCU615wg.css +1 -0
- package/dist/assets/RehearsalPanel-BVgjrOPg.js +6 -0
- package/dist/assets/ReplayCard-BpYO5vX-.js +2 -0
- package/dist/assets/ReplayOverlay-DXmVdeIr.js +1 -0
- package/dist/assets/RewindOverlay-BusfWeFq.js +1 -0
- package/dist/assets/RewindOverlay-C92qgvmi.css +1 -0
- package/dist/assets/RippleApp-9KrJPYgN.js +2 -0
- package/dist/assets/RippleAskController-BNAUoIW0.css +1 -0
- package/dist/assets/RippleAskController-CO9wE7hU.js +34 -0
- package/dist/assets/RippleOverlay-DMHLbfh8.js +6 -0
- package/dist/assets/RippleOverlay-_iiZsQVZ.css +1 -0
- package/dist/assets/SeeDontRead-C389viue.js +1 -0
- package/dist/assets/ShareModal-C8S7ySls.css +1 -0
- package/dist/assets/ShareModal-ClnEkudw.js +32 -0
- package/dist/assets/ShipCascade-BUtwvQoW.js +1 -0
- package/dist/assets/ShipCascade-CyFnrlET.css +1 -0
- package/dist/assets/ShipCourse-B7lG6DYW.js +1 -0
- package/dist/assets/ShipCourse-DcT7PUSm.css +1 -0
- package/dist/assets/ShipGate-BVZfCllb.css +1 -0
- package/dist/assets/ShipGate-BYYu9WVq.js +2 -0
- package/dist/assets/ShipHotspots-Bj2CovtT.js +1 -0
- package/dist/assets/ShipHotspots-CLOMutPv.css +1 -0
- package/dist/assets/ShipIncident-BUHvFFiC.css +1 -0
- package/dist/assets/ShipIncident-DcmindmE.js +2 -0
- package/dist/assets/ShipMigration-BznCskNg.css +1 -0
- package/dist/assets/ShipMigration-s0hVjDQl.js +1 -0
- package/dist/assets/ShipOnboarding-BC9Vxkpa.css +1 -0
- package/dist/assets/ShipOnboarding-ekbHL7OH.js +1 -0
- package/dist/assets/ShipRead-BVNgQT6L.js +1 -0
- package/dist/assets/ShipRollout-BdUQzMyP.js +1 -0
- package/dist/assets/ShipRollout-CqeObx5b.css +1 -0
- package/dist/assets/ShipSuggestions-B6fKYh8L.js +1 -0
- package/dist/assets/ShipSuggestions-BKRvk5Mj.css +1 -0
- package/dist/assets/ShipWorkspace-3D3Rrs1p.js +2 -0
- package/dist/assets/ShipWorkspace-D6XQpGEN.css +1 -0
- package/dist/assets/SignatureLoop-C60r8Wm5.js +1 -0
- package/dist/assets/SrsReview-BoaYb6XN.js +1 -0
- package/dist/assets/SrsReview-DmGdGxT0.css +1 -0
- package/dist/assets/SynthesisApp-vJ2Jq0Qe.js +2 -0
- package/dist/assets/SynthesisOverlay-CkERphvG.js +66 -0
- package/dist/assets/TermsApp-C70tW6m6.js +123 -0
- package/dist/assets/TopicCanvas-CT0eSj2M.js +2 -0
- package/dist/assets/TopicCanvas-D2Nax9II.css +1 -0
- package/dist/assets/TourPrism-BvucSkcs.js +1 -0
- package/dist/assets/TrackerTile-CasZNmt4.js +2 -0
- package/dist/assets/TwoSurfaces-C90X7Aj5.js +1 -0
- package/dist/assets/UnderstoodPanel-CHPD2Ttj.js +1 -0
- package/dist/assets/UnderstoodPanel-Q6GX1TFq.css +1 -0
- package/dist/assets/WhyMachineOverlay-BZk3PVTl.css +1 -0
- package/dist/assets/WhyMachineOverlay-CB0_n6Sy.js +1 -0
- package/dist/assets/WowFeatures-Ci_H5QYX.js +1 -0
- package/dist/assets/ZoomDeck-B2SjNwY7.css +1 -0
- package/dist/assets/ZoomDeck-BQHO79ZU.js +1 -0
- package/dist/assets/__vite-browser-external-BufR4LQa.js +1 -0
- package/dist/assets/ai-Ba4lZJ9Y.js +12 -0
- package/dist/assets/alternateFinishes-DZ-rkpkX.js +494 -0
- package/dist/assets/annotationAuto-B0nihA4F.js +1 -0
- package/dist/assets/annotationReel-BcU9Q0Sw.js +1 -0
- package/dist/assets/annotations-D2K9A5GB.js +1 -0
- package/dist/assets/backup-c-Btapzp.js +1 -0
- package/dist/assets/blockLabel-DAqaHKy3.js +1 -0
- package/dist/assets/c-DWGmR78Y.js +1 -0
- package/dist/assets/c-SSSlmE39.js +1 -0
- package/dist/assets/cache-BumECILO.js +1 -0
- package/dist/assets/canvas-QTEIiK23.js +1 -0
- package/dist/assets/catalog-BHjl-1uH.js +2 -0
- package/dist/assets/catalog-Dqaq2YFd.js +1 -0
- package/dist/assets/cfo.generated-Bjl5OGay.js +1 -0
- package/dist/assets/chapters-BiUsDClQ.js +1 -0
- package/dist/assets/charts1-EOoxU_K3.js +1 -0
- package/dist/assets/charts2-tyUiQPff.js +1 -0
- package/dist/assets/chunk-BVpWp9h4.js +1 -0
- package/dist/assets/citation-BcvmjKS8.js +1 -0
- package/dist/assets/code-CpjYCNS8.js +8 -0
- package/dist/assets/codeContext-0UMRSGRr.js +5 -0
- package/dist/assets/colors-D49Req-e.js +1 -0
- package/dist/assets/compose-BJ9EfcQS.js +3 -0
- package/dist/assets/contentVault-DzTYWcbD.js +1 -0
- package/dist/assets/core-DEFyprhs.js +1 -0
- package/dist/assets/corpus.generated-oX9uU93S.js +11 -0
- package/dist/assets/courseSeed-CZdNBTTs.js +1 -0
- package/dist/assets/courseStore-DfafnL-9.js +1 -0
- package/dist/assets/courses-BkH1ntDL.css +1 -0
- package/dist/assets/cpp-BGdv8dzs.js +1 -0
- package/dist/assets/cpp-CNAAXZl-.js +1 -0
- package/dist/assets/csharp-oqKa8noW.js +1 -0
- package/dist/assets/css-CdtkT07m.js +1 -0
- package/dist/assets/css-LbU1hoFO.js +1 -0
- package/dist/assets/dag-C3Xx8pOD.js +2 -0
- package/dist/assets/dashboardEvents-DR9d_c74.js +2 -0
- package/dist/assets/dashboards-rcWxdoXI.css +1 -0
- package/dist/assets/deckLine-NBd3MyGT.js +1 -0
- package/dist/assets/demoPaletteItems-NPCSaSU6.js +1 -0
- package/dist/assets/dev.generated-DYgVxL_4.js +73 -0
- package/dist/assets/diagrams-CaSfjT4I.js +1 -0
- package/dist/assets/diff-woXpYk--.js +1 -0
- package/dist/assets/display-OvC57CMc.js +9 -0
- package/dist/assets/dist-BFx3nZg4.js +2785 -0
- package/dist/assets/dist-xRGLOZwv.js +14 -0
- package/dist/assets/docs-B2aDtm5K.js +1 -0
- package/dist/assets/everyday-CoZa4kDZ.js +1 -0
- package/dist/assets/explode-WBykfhqW.js +13 -0
- package/dist/assets/extractNumbers-CuhagRkd.js +1 -0
- package/dist/assets/facts-BBTt3ImG.js +1 -0
- package/dist/assets/finance-Bxn_Q1p0.js +1 -0
- package/dist/assets/fit-0HxU-rtB.js +1 -0
- package/dist/assets/fitText-CDFmCQzl.js +1 -0
- package/dist/assets/flows-BL81J7yN.js +1 -0
- package/dist/assets/format-DlZTyeMy.js +1 -0
- package/dist/assets/format-hc2QOoIu.js +1 -0
- package/dist/assets/forms-DeoXOxdD.js +1 -0
- package/dist/assets/generate-8odaTyr4.js +17 -0
- package/dist/assets/generateBeats-b64CL54v.js +1 -0
- package/dist/assets/generateCourse-Cj_-vDWu.js +28 -0
- package/dist/assets/generateLive-D4B30fnF.js +52 -0
- package/dist/assets/geometry-DXAbnb0J.js +1 -0
- package/dist/assets/gesture-DabMpPcq.js +2 -0
- package/dist/assets/github-dark-C-LZuMrd.js +1 -0
- package/dist/assets/github-light-EUqPIrTm.js +1 -0
- package/dist/assets/githubBrowser-DywfDeYx.js +1 -0
- package/dist/assets/githubToken-DtcLYqwm.js +11 -0
- package/dist/assets/go-rLFTqkRN.js +1 -0
- package/dist/assets/homeTarget-BgWKI_E1.js +1 -0
- package/dist/assets/html-BcACZWSP.js +1 -0
- package/dist/assets/html-DDNsd9lV.js +1 -0
- package/dist/assets/http-CJCtjYpA.js +2 -0
- package/dist/assets/icons-CHVz6kv_.js +1 -0
- package/dist/assets/index-CepQEz75.css +1 -0
- package/dist/assets/index-y8GL67bB.js +22 -0
- package/dist/assets/index.es-CRLiWwiA.js +5 -0
- package/dist/assets/info-CiqHR5cs.js +1 -0
- package/dist/assets/java-BtIQNnN0.js +1 -0
- package/dist/assets/java-DxlWrXwe.js +1 -0
- package/dist/assets/javascript-BzbQS41l.js +1 -0
- package/dist/assets/javascript-Yelw-5ZN.js +1 -0
- package/dist/assets/json-B0N3XRZU.js +1 -0
- package/dist/assets/json-B88Oqtu5.js +1 -0
- package/dist/assets/json-CaljABEy.js +1 -0
- package/dist/assets/jspdf.es.min-C-Pf79px.js +79 -0
- package/dist/assets/jsx-D3KKoC5L.js +1 -0
- package/dist/assets/jsx-hEbJ82HF.js +1 -0
- package/dist/assets/jsx-runtime-DaSxXjOY.js +1 -0
- package/dist/assets/katex-BMCG0xok.js +257 -0
- package/dist/assets/keyVault-DEsNh9FR.js +1 -0
- package/dist/assets/kokoro-D4GKpSL0.js +1 -0
- package/dist/assets/kotlin-DhhofPvG.js +1 -0
- package/dist/assets/layout-BFQOzXtG.js +1 -0
- package/dist/assets/layout-CkO0Psde.js +1 -0
- package/dist/assets/lazyRetry-D50B1UMY.js +1 -0
- package/dist/assets/leaflet-src-C_xhOQY7.js +1 -0
- package/dist/assets/learn-DVfqN-nf.js +1 -0
- package/dist/assets/lib-DMAxsZKm.css +1 -0
- package/dist/assets/lib-VFqp6Y3w.js +1 -0
- package/dist/assets/links--u_phi0x.js +1 -0
- package/dist/assets/liveSchema-CJ49PX5R.js +98 -0
- package/dist/assets/markdown-BYOwaDjH.js +1 -0
- package/dist/assets/mastery-BPjxP0fN.js +4 -0
- package/dist/assets/media-CsrUl279.js +43 -0
- package/dist/assets/model-BE0UHu1w.js +27 -0
- package/dist/assets/motion-S0NRruNj.js +1 -0
- package/dist/assets/nav-Czm-NzPV.js +1 -0
- package/dist/assets/neighborhoods-C-1Tjr1r.js +1 -0
- package/dist/assets/notes-A9t4jdfx.css +1 -0
- package/dist/assets/notes-lROPCorS.js +1 -0
- package/dist/assets/notify-Bz4wuE4T.js +1 -0
- package/dist/assets/now-C9-UAzTC.js +1 -0
- package/dist/assets/number-DXgzss0v.js +1 -0
- package/dist/assets/officeDoc-B6nEhNp4.js +3 -0
- package/dist/assets/openchemlib-nMLMmg26.js +23 -0
- package/dist/assets/overlays-JxbHtA2o.js +1 -0
- package/dist/assets/owners-FXDGInVq.js +2 -0
- package/dist/assets/pageVisibility-BxUVsw7Z.js +1 -0
- package/dist/assets/pdf-Df7PCH7q.js +11 -0
- package/dist/assets/pdf.worker.min-yatZIOMy.mjs +21 -0
- package/dist/assets/penStrokes-9Q_l7NTt.js +1 -0
- package/dist/assets/perfProbe-COAp9PAa.js +1 -0
- package/dist/assets/php-CYrBA5iX.js +1 -0
- package/dist/assets/pickers-B4-3HOR8.js +1 -0
- package/dist/assets/pin-Bya3BL_a.css +1 -0
- package/dist/assets/pin-CXSuPJYL.js +1 -0
- package/dist/assets/planTracker-7AMCQPNx.js +1 -0
- package/dist/assets/portal-DMw7C32j.js +1 -0
- package/dist/assets/pptxgen.es-CvTILmV9.js +115 -0
- package/dist/assets/predictions-CYS7Vo39.js +1 -0
- package/dist/assets/prewarm--whjQhWJ.js +1 -0
- package/dist/assets/prism-app-CXYElq8-.css +1 -0
- package/dist/assets/prism.generated-BhbHDHR6.js +41 -0
- package/dist/assets/prismExtract.worker-Cws9K1NG.js +13 -0
- package/dist/assets/prismGround.worker-CIvKqxm2.js +1 -0
- package/dist/assets/prismLayout.worker-CZO2CY7B.js +1 -0
- package/dist/assets/providers-wzm7E8Pa.js +1 -0
- package/dist/assets/purify.es-adlwq8Pz.js +3 -0
- package/dist/assets/python-gzcpVVnB.js +1 -0
- package/dist/assets/queue-DHeyJ32F.css +1 -0
- package/dist/assets/queue-J4h7E3uc.js +1 -0
- package/dist/assets/quietHours-BvcsBKKK.js +1 -0
- package/dist/assets/react-BQSORdFI.js +1 -0
- package/dist/assets/reference-sJzyMiL4.js +1 -0
- package/dist/assets/registry-1GuPBfQK.js +1 -0
- package/dist/assets/registry-2GJZ46M8.css +1 -0
- package/dist/assets/registry-2v0jlh5Q.js +2 -0
- package/dist/assets/registry-B8DStMJk.js +1 -0
- package/dist/assets/registry-B940W2j5.js +1 -0
- package/dist/assets/registry-BAoRB8rd.css +1 -0
- package/dist/assets/registry-BPvIPLke.js +1 -0
- package/dist/assets/registry-BVHiKEwE.css +1 -0
- package/dist/assets/registry-BcZXBr3y.css +1 -0
- package/dist/assets/registry-BffpZK5w.js +1 -0
- package/dist/assets/registry-BgGeRiDA.js +2 -0
- package/dist/assets/registry-Buq5uuCv.js +1 -0
- package/dist/assets/registry-BzNLfje1.css +1 -0
- package/dist/assets/registry-C3ezxLR3.css +1 -0
- package/dist/assets/registry-CAusoyBh.js +1 -0
- package/dist/assets/registry-CEVrY72Z.js +1 -0
- package/dist/assets/registry-CKjKq6ct.js +1 -0
- package/dist/assets/registry-CNgybLQv.css +1 -0
- package/dist/assets/registry-CRM7y8QT.css +1 -0
- package/dist/assets/registry-CRisz4Ca.css +1 -0
- package/dist/assets/registry-Cg7qUZPS.js +1 -0
- package/dist/assets/registry-Cix-yqch.js +1 -0
- package/dist/assets/registry-CtbuZWYz.css +1 -0
- package/dist/assets/registry-DCI_BeFJ.js +5 -0
- package/dist/assets/registry-DDLSYDVA.js +1 -0
- package/dist/assets/registry-DI1wSG1Y.js +1 -0
- package/dist/assets/registry-DJinB5ye.js +2 -0
- package/dist/assets/registry-DUvXX_d0.js +1 -0
- package/dist/assets/registry-DVzLacl_.css +1 -0
- package/dist/assets/registry-DWcNVyI2.css +1 -0
- package/dist/assets/registry-D_URPoL4.js +1 -0
- package/dist/assets/registry-Dkc7hN5T.js +1 -0
- package/dist/assets/registry-DmQlNN3y.js +1 -0
- package/dist/assets/registry-DpaaVbmL.css +1 -0
- package/dist/assets/registry-Dpb8EXHn.js +49 -0
- package/dist/assets/registry-Dru0JcTa.css +1 -0
- package/dist/assets/registry-DujBAgn_.js +1 -0
- package/dist/assets/registry-Dye5m3qt.css +1 -0
- package/dist/assets/registry-GeSy4i7R.css +1 -0
- package/dist/assets/registry-QcULZpdE.js +4 -0
- package/dist/assets/registry-T3i2Q9SI.css +1 -0
- package/dist/assets/registry-UFIuwh3i.css +1 -0
- package/dist/assets/registry-Xzq_Rpmm.css +1 -0
- package/dist/assets/registry-ZOWzhOHk.css +1 -0
- package/dist/assets/registry-aIH-Im5Y.css +1 -0
- package/dist/assets/registry-aazwkBJp.js +1 -0
- package/dist/assets/registry-ei6fIgBT.css +1 -0
- package/dist/assets/registry-types-DMuK0vJ6.js +1 -0
- package/dist/assets/registry-upbw6pyj.css +1 -0
- package/dist/assets/registry-zRPjWNl5.js +1 -0
- package/dist/assets/relate-A9ZeaaAI.js +1 -0
- package/dist/assets/richText-BkxJhl9N.js +1 -0
- package/dist/assets/ruby-BhrksQMt.js +1 -0
- package/dist/assets/run-BYP2YlZT.js +23 -0
- package/dist/assets/run-C_0B_41W.js +21 -0
- package/dist/assets/run-DSVvshaB.js +21 -0
- package/dist/assets/rust-Cfkwpbl8.js +1 -0
- package/dist/assets/safeCssColor-di93BXgG.js +1 -0
- package/dist/assets/safeImageUrl-CUkucDUu.js +1 -0
- package/dist/assets/scale-Bcgfo6Hp.js +1 -0
- package/dist/assets/screen-DLR7p_yP.js +1 -0
- package/dist/assets/search-DnjHupRf.js +1 -0
- package/dist/assets/seed-b1xc0dj2.js +1 -0
- package/dist/assets/shapes-RqjqC0ay.js +1 -0
- package/dist/assets/shard000-DM_rqD7W.js +1 -0
- package/dist/assets/shard001-gQEQs7_F.js +1 -0
- package/dist/assets/shard002-DbDas-W-.js +1 -0
- package/dist/assets/shard003-DxMszG4_.js +1 -0
- package/dist/assets/shard004-DZMpLBw1.js +1 -0
- package/dist/assets/shard005-DLVkh9IH.js +1 -0
- package/dist/assets/shard006-B6efKHov.js +1 -0
- package/dist/assets/shard007-AFdZLe38.js +1 -0
- package/dist/assets/shard008-LbSBzwRx.js +1 -0
- package/dist/assets/shard009-D_6-SUDb.js +1 -0
- package/dist/assets/shard010-DbOj-uZW.js +1 -0
- package/dist/assets/shard011-BYSz7EEW.js +1 -0
- package/dist/assets/shard012-B5Ypj7OV.js +1 -0
- package/dist/assets/shard013-BtsliNIe.js +1 -0
- package/dist/assets/shard014-15sjmk68.js +1 -0
- package/dist/assets/shard015-nnXrqru_.js +1 -0
- package/dist/assets/shard016-BayXFE13.js +1 -0
- package/dist/assets/shard017-Cy4cGexs.js +1 -0
- package/dist/assets/shard018-aO-BYJ8H.js +1 -0
- package/dist/assets/shard019-gxaTeA3I.js +1 -0
- package/dist/assets/shard020-BibJdMI0.js +1 -0
- package/dist/assets/shard021-2FE-tze4.js +1 -0
- package/dist/assets/shard022-IXiyG-JK.js +1 -0
- package/dist/assets/shard023-314F6NJS.js +1 -0
- package/dist/assets/shard024-cN5rpQ_X.js +1 -0
- package/dist/assets/shard025-KKTaXOGE.js +1 -0
- package/dist/assets/shard026-C2Dkd1t6.js +1 -0
- package/dist/assets/shard027-Xy-8x9As.js +1 -0
- package/dist/assets/shard028-Bul-klUj.js +1 -0
- package/dist/assets/shard029-BbRSUcUZ.js +1 -0
- package/dist/assets/shard030-GYllsFVC.js +1 -0
- package/dist/assets/shard031-DMigeiyn.js +1 -0
- package/dist/assets/shard032-CcvmzK0l.js +1 -0
- package/dist/assets/shard033-11AU702M.js +1 -0
- package/dist/assets/shard034-Bx3urxjM.js +1 -0
- package/dist/assets/shard035-DBdEeyCt.js +1 -0
- package/dist/assets/shard036-vYgoRBqS.js +1 -0
- package/dist/assets/shard037-DP4MMw91.js +1 -0
- package/dist/assets/shard038-ffxsv7d6.js +1 -0
- package/dist/assets/shard039-C1JHHNp9.js +1 -0
- package/dist/assets/shard040-JbVvCSO_.js +1 -0
- package/dist/assets/shard041-5L_eFwGx.js +1 -0
- package/dist/assets/shard042-C9nsGL79.js +1 -0
- package/dist/assets/shard043-Dx_9HSKI.js +1 -0
- package/dist/assets/shard044-B3QQNC4A.js +1 -0
- package/dist/assets/shard045-B7z0WHO6.js +1 -0
- package/dist/assets/shard046-D1yDablJ.js +1 -0
- package/dist/assets/shard047-DJi3AgeT.js +1 -0
- package/dist/assets/shard048-D_2ipfUr.js +1 -0
- package/dist/assets/shard049-1aGgWZdd.js +1 -0
- package/dist/assets/shard050-Bjwa0Og4.js +1 -0
- package/dist/assets/shard051-Cx_GAk3v.js +1 -0
- package/dist/assets/shard052-LaeOD3V5.js +1 -0
- package/dist/assets/shard053-D-da7Foj.js +1 -0
- package/dist/assets/shard054-CM8eSRQk.js +1 -0
- package/dist/assets/shard055-QRpDl4Vs.js +1 -0
- package/dist/assets/shard056-DkY7CQm3.js +1 -0
- package/dist/assets/shard057-BVCgf7o0.js +1 -0
- package/dist/assets/shard058-93aGtdrX.js +1 -0
- package/dist/assets/shard059-rJE9X1_I.js +1 -0
- package/dist/assets/shard060-Lu_hfl1r.js +1 -0
- package/dist/assets/shard061-C9A8iNiq.js +1 -0
- package/dist/assets/shard062-BBIpEYZO.js +1 -0
- package/dist/assets/shard063-C_uen3Ub.js +1 -0
- package/dist/assets/shard064-DAHUsHST.js +1 -0
- package/dist/assets/shard065-C2edvdvh.js +1 -0
- package/dist/assets/shard066-DFcuVhZm.js +1 -0
- package/dist/assets/shard067-BN8DM8JZ.js +1 -0
- package/dist/assets/shard068-i464K77p.js +1 -0
- package/dist/assets/shard069-Dm9m2a5U.js +1 -0
- package/dist/assets/shard070-BPVvR8GH.js +1 -0
- package/dist/assets/shard071-Bal_0d9L.js +1 -0
- package/dist/assets/shard072-CBQu62kt.js +1 -0
- package/dist/assets/shard073-D5BRae0w.js +1 -0
- package/dist/assets/shard074-DtFvcBnZ.js +1 -0
- package/dist/assets/share-QHGHNDhQ.js +1 -0
- package/dist/assets/shellscript-BiGZg9Om.js +1 -0
- package/dist/assets/shellscript-CqHdAlCp.js +1 -0
- package/dist/assets/shikiHighlight-DUCYbsJ2.js +153 -0
- package/dist/assets/sourceHost-BV3t2XDb.js +1 -0
- package/dist/assets/speed-DwPw9KSv.js +1 -0
- package/dist/assets/spokenText-D4zPX9JY.js +1 -0
- package/dist/assets/sql-0Qcw9ht3.js +1 -0
- package/dist/assets/sql-CP0rg-5b.js +1 -0
- package/dist/assets/src-DbgF7cRH.js +2 -0
- package/dist/assets/stats-BeP5Bws0.js +1 -0
- package/dist/assets/status-BY02LIJt.js +1 -0
- package/dist/assets/stepDriver-DwjFet6U.js +1 -0
- package/dist/assets/store-4JNNn732.js +1 -0
- package/dist/assets/store-BFC7DZcg.js +1 -0
- package/dist/assets/store-BFrJaSxJ.js +1 -0
- package/dist/assets/store-DXmC_fP2.js +0 -0
- package/dist/assets/store-DgG0C1Qx.js +1 -0
- package/dist/assets/streamParse-DRgMHWye.js +2 -0
- package/dist/assets/student.generated-DS_acPaJ.js +1 -0
- package/dist/assets/swift-DonLKvLd.js +1 -0
- package/dist/assets/tables-Dzd3rTqG.js +1 -0
- package/dist/assets/time-BHTmJR1s.js +1 -0
- package/dist/assets/toast-BBNs2h3L.js +1 -0
- package/dist/assets/toml-CcmNWLt0.js +1 -0
- package/dist/assets/traveler.generated-Beun9X7y.js +1 -0
- package/dist/assets/tsx-5f3ulCja.js +1 -0
- package/dist/assets/tsx-BOvsFOI6.js +1 -0
- package/dist/assets/typeof-B5XbjTb1.js +1 -0
- package/dist/assets/typescript-Utq2Cl8c.js +1 -0
- package/dist/assets/typescript-j_1H8WHN.js +1 -0
- package/dist/assets/useDashboardLoop-B6ByHWoE.js +5 -0
- package/dist/assets/useFocusTrap-DbfG6zbM.js +1 -0
- package/dist/assets/useLiveConfig-X9Wxh90k.js +1 -0
- package/dist/assets/useSpatialCanvas-DogK9457.js +1 -0
- package/dist/assets/useSpotlightWalk-rMbmNBKK.js +1 -0
- package/dist/assets/useSrsCards-CagZefwX.js +1 -0
- package/dist/assets/useStudy-Bflreq2a.js +1 -0
- package/dist/assets/useTimeout-BRYvu2jQ.js +1 -0
- package/dist/assets/useValidatedImage-D2fhA198.js +1 -0
- package/dist/assets/useZoomGesture-CYc3tf2z.js +1 -0
- package/dist/assets/verbatim-CBMzUDlf.js +1 -0
- package/dist/assets/worker-BbLKfGzm.js +2 -0
- package/dist/assets/xml-WY0zc4PG.js +1 -0
- package/dist/assets/yaml-CxbubiML.js +1 -0
- package/dist/assets/yaml-DijMHRDA.js +1 -0
- package/dist/demo-assets/CREDITS.md +40 -0
- package/dist/demo-assets/images/basalt-cliffs.jpg +0 -0
- package/dist/demo-assets/images/capelinhos.jpg +0 -0
- package/dist/demo-assets/images/cliff-fields.jpg +0 -0
- package/dist/demo-assets/images/crater-panorama.jpg +0 -0
- package/dist/demo-assets/images/furnas-lake.jpg +0 -0
- package/dist/demo-assets/images/green-coast.jpg +0 -0
- package/dist/demo-assets/images/overcast-coast.jpg +0 -0
- package/dist/demo-assets/images/patchwork-fields.jpg +0 -0
- package/dist/demo-assets/images/ponta-delgada.jpg +0 -0
- package/dist/demo-assets/images/sete-cidades.jpg +0 -0
- package/dist/demo-assets/images/slide-placeholder-light.svg +9 -0
- package/dist/demo-assets/images/slide-placeholder.svg +9 -0
- package/dist/demo-assets/images/village-street.jpg +0 -0
- package/dist/demo-assets/pdf/cfd-primer.pdf +0 -0
- package/dist/demo-assets/video/azores-film.mp4 +0 -0
- package/dist/favicon.svg +19 -0
- package/dist/fonts/LICENSE.txt +34 -0
- package/dist/fonts/archivo-var-latin.woff2 +0 -0
- package/dist/fonts/bodoni-moda-400-italic-latin.woff2 +0 -0
- package/dist/fonts/bodoni-moda-var-latin.woff2 +0 -0
- package/dist/fonts/eb-garamond-var-italic-latin.woff2 +0 -0
- package/dist/fonts/eb-garamond-var-latin.woff2 +0 -0
- package/dist/fonts/export/families/archivo.css +12 -0
- package/dist/fonts/export/families/bodoni-moda.css +23 -0
- package/dist/fonts/export/families/eb-garamond.css +22 -0
- package/dist/fonts/export/families/ibm-plex-sans.css +12 -0
- package/dist/fonts/export/families/instrument-serif.css +22 -0
- package/dist/fonts/export/families/jetbrains-mono.css +12 -0
- package/dist/fonts/export/families/libre-franklin.css +12 -0
- package/dist/fonts/export/families/lora.css +22 -0
- package/dist/fonts/export/families/source-serif-4.css +12 -0
- package/dist/fonts/export/families/space-grotesk.css +12 -0
- package/dist/fonts/export/families/spectral.css +52 -0
- package/dist/fonts/fonts.css +141 -0
- package/dist/fonts/hanken-grotesk-var-latin.woff2 +0 -0
- package/dist/fonts/ibm-plex-sans-var-latin.woff2 +0 -0
- package/dist/fonts/instrument-serif-400-italic-latin.woff2 +0 -0
- package/dist/fonts/instrument-serif-400-latin.woff2 +0 -0
- package/dist/fonts/jetbrains-mono-var-latin.woff2 +0 -0
- package/dist/fonts/libre-franklin-var-latin.woff2 +0 -0
- package/dist/fonts/lora-var-italic-latin.woff2 +0 -0
- package/dist/fonts/lora-var-latin.woff2 +0 -0
- package/dist/fonts/newsreader-var-italic-latin.woff2 +0 -0
- package/dist/fonts/newsreader-var-latin.woff2 +0 -0
- package/dist/fonts/plex-mono-400-latin.woff2 +0 -0
- package/dist/fonts/plex-mono-500-latin.woff2 +0 -0
- package/dist/fonts/plex-mono-600-latin.woff2 +0 -0
- package/dist/fonts/source-serif-4-var-latin.woff2 +0 -0
- package/dist/fonts/space-grotesk-var-latin.woff2 +0 -0
- package/dist/fonts/spectral-400-italic-latin.woff2 +0 -0
- package/dist/fonts/spectral-400-latin.woff2 +0 -0
- package/dist/fonts/spectral-500-italic-latin.woff2 +0 -0
- package/dist/fonts/spectral-500-latin.woff2 +0 -0
- package/dist/fonts/spectral-600-latin.woff2 +0 -0
- package/dist/index.html +117 -0
- package/dist/legal/DISCLAIMER.md +16 -0
- package/dist/legal/LICENSE.txt +75 -0
- package/dist/legal/PRIVACY.md +127 -0
- package/dist/legal/SECURITY.md +72 -0
- package/dist/legal/SUPPORT.md +13 -0
- package/dist/legal/TERMS.md +122 -0
- package/dist/legal/THIRD-PARTY.txt +639 -0
- package/dist/legal/TRADEMARKS.md +15 -0
- package/dist/ort-wasm-simd-threaded.mjs +59 -0
- package/dist/sw.js +30 -0
- package/dist/vad.worklet.bundle.min.js +1 -0
- package/docker-compose.yml +33 -0
- package/gateway/README.md +99 -0
- package/gateway/actions-gateway.mjs +537 -0
- package/gateway/connectors.d.mts +27 -0
- package/gateway/connectors.mjs +463 -0
- package/gateway/guard.mjs +110 -0
- package/gateway/tokenStore.mjs +134 -0
- package/package.json +143 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.prism-scrim{z-index:52;background:rgba(var(--scrim-rgb), .72);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);justify-content:center;align-items:center;padding:2.5vh 2.5vw;display:flex;position:fixed;inset:0}.prism-panel{border-radius:var(--r-xl);background:var(--surface-deep);border:1px solid var(--line);width:min(1700px,100%);height:95vh;box-shadow:var(--shadow-modal);color:var(--text-primary);flex-direction:column;display:flex;overflow:hidden}.prism-scrim[data-expanded=true]{padding:0}.prism-scrim[data-expanded=true] .prism-panel{border:none;border-radius:0;width:100%;height:100%}.prism-head{background:var(--surface-deep);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:13px 20px;display:flex}.prism-legend{background:var(--surface-deep);border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px 16px;padding:9px 20px;display:flex}.prism-legend-item{align-items:center;gap:7px;min-width:0;display:inline-flex}.prism-legend-swatch{border-radius:3px;flex:none;width:10px;height:10px}.prism-legend-name{color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;max-width:240px;font-size:12px;overflow:hidden}.prism-legend-count{font-family:var(--font-data);color:var(--text-muted);border-radius:var(--r-full);background:var(--surface-glass);padding:1px 6px;font-size:9.5px}.prism-legend-cross{font-family:var(--font-data);letter-spacing:.04em;color:color-mix(in oklab, var(--danger) 80%, white 20%);margin-left:auto;font-size:10px}.prism-file{min-width:0;color:var(--text-muted);align-items:center;gap:9px;display:flex}.prism-file-name{font-family:var(--font-data);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;min-width:42px;font-size:11px;overflow:hidden}.prism-file-pages{font-family:var(--font-data);color:var(--text-muted);flex:none;font-size:11px}.prism-head-right{flex:none;align-items:center;gap:14px;display:flex}.prism-phase{font-family:var(--font-data);letter-spacing:.14em;color:var(--text-muted);align-items:center;gap:7px;font-size:10px;display:inline-flex}.prism-phase-dot{background:var(--presence);opacity:.35;border-radius:50%;width:6px;height:6px}.prism-phase[data-active=true] .prism-phase-dot{opacity:1;animation:1.5s ease-in-out infinite prism-pulse}@keyframes prism-pulse{0%,to{opacity:1}50%{opacity:.4}}.prism-replay,.prism-close{border:1px solid var(--line-strong);color:var(--text-secondary);cursor:pointer;font:inherit;background:0 0}.prism-replay{border-radius:var(--r-full);padding:6px 13px;font-size:11px;font-weight:600}.prism-replay:hover{color:var(--text-primary);border-color:var(--line-strong)}.prism-close{width:30px;height:30px;color:var(--text-muted);border-radius:50%;font-size:13px;line-height:1}.prism-close:hover{color:var(--text-primary);border-color:var(--line-strong)}.prism-split{flex:1;min-height:0;display:flex}.prism-stage{background:radial-gradient(ellipse 80% 72% at 50% 46%, var(--surface-elevated) 0%, var(--surface-deep) 100%);flex:1;min-width:0;position:relative;overflow:hidden}.prism-split[data-pdfonly=true] .prism-stage{display:none}.prism-divider{cursor:col-resize;background:var(--surface-deep);border-left:1px solid var(--line);touch-action:none;flex:none;justify-content:center;align-items:center;width:10px;display:flex}.prism-divider:hover,.prism-divider:focus-visible{background:color-mix(in oklab, var(--presence) 18%, var(--surface-deep));outline:none}.prism-divider-grip{background:var(--line-strong);border-radius:2px;width:2px;height:36px}.prism-divider:hover .prism-divider-grip,.prism-divider:focus-visible .prism-divider-grip{background:var(--presence)}.prism-page-wrap{width:var(--pdf-pct,44%);flex:none;min-width:0;min-height:0;display:flex;position:relative}@media (width<=720px){.prism-split[data-split=true] .prism-stage,.prism-divider{display:none}.prism-page-wrap{width:100%}}.prism-page-nav{color:var(--text-secondary);flex:none;align-items:center;gap:6px;font-size:11px;display:inline-flex}.prism-page-nav-btn{border:1px solid var(--line-strong);width:22px;height:22px;color:var(--text-secondary);cursor:pointer;background:0 0;border-radius:50%;justify-content:center;align-items:center;font-size:13px;line-height:1;transition:background .12s;display:inline-flex}.prism-page-nav-btn:disabled{opacity:.3;cursor:default}.prism-page-nav-btn:not(:disabled):hover{background:var(--surface-elevated)}.prism-page-nav-at{white-space:nowrap;font-family:var(--font-data);letter-spacing:.04em}.prism-page-nav-of{color:var(--text-muted)}.prism-page{background:var(--surface-deep);flex-direction:column;flex:1;min-width:0;min-height:0;animation:.32s cubic-bezier(.4,0,.2,1) both prism-page-in;display:flex}@keyframes prism-page-in{0%{opacity:0;transform:translate(16px)}to{opacity:1;transform:translate(0)}}@media (prefers-reduced-motion:reduce){.prism-page{animation:none}}.prism-page-head{border-bottom:1px solid var(--line);align-items:center;gap:10px;padding:12px 16px;display:flex}.prism-page-tag{font-family:var(--font-data);letter-spacing:.12em;white-space:nowrap;font-size:9.5px;font-weight:600}.prism-page-title{min-width:0;color:var(--text-primary);text-overflow:ellipsis;white-space:nowrap;flex:1;font-size:13px;font-weight:600;overflow:hidden}.prism-page-zoom{border-radius:var(--r-sm);border:1px solid var(--line-strong);flex:none;margin-left:auto;display:inline-flex;overflow:hidden}.prism-page-zoom button{width:26px;height:24px;color:var(--text-secondary);cursor:pointer;background:0 0;border:none;font-size:15px;line-height:1}.prism-page-zoom button:hover{background:var(--surface-glass);color:var(--text-primary)}.prism-page-zoom button+button{border-left:1px solid var(--line-strong)}.prism-page-close{border:1px solid var(--line-strong);width:26px;height:26px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:50%;flex:none;font-size:12px;line-height:1}.prism-page-close:hover{color:var(--text-primary);border-color:var(--line-strong)}.prism-page-scroll{scrollbar-gutter:stable;flex:1;justify-content:center;align-items:flex-start;padding:16px;display:flex;position:relative;overflow:auto}.prism-page-scroll.is-pannable{cursor:grab}.prism-page-scroll.is-panning{cursor:grabbing;-webkit-user-select:none;user-select:none}.prism-page-frame{flex:none;margin:auto;position:relative}.prism-page-holder{width:100%;height:100%;position:relative}.prism-page-canvas{border-radius:var(--r-sm);width:100%;height:100%;display:block;box-shadow:0 8px 28px #00000080}.prism-page-status{text-align:center;color:var(--text-muted);padding:40px 24px;font-size:13px;line-height:1.6}.prism-page-fallback{border:1px solid var(--line-strong);border-radius:var(--r-lg,18px);background:linear-gradient(135deg, color-mix(in srgb, var(--surface-elevated) 94%, var(--presence) 6%), var(--surface));width:min(560px,100% - 32px);color:var(--text-primary);gap:14px;margin:auto;padding:clamp(24px,5vw,44px);display:grid;box-shadow:0 18px 54px #0003}.prism-page-fallback-kicker{font-family:var(--font-data,var(--font));letter-spacing:.1em;text-transform:uppercase;color:var(--presence);font-size:11px;font-weight:650}.prism-page-fallback>strong{font-family:var(--font-display,var(--font));font-size:clamp(20px,3vw,28px);line-height:1.15}.prism-page-fallback blockquote,.prism-page-fallback p{font-family:var(--font-body,var(--font));color:var(--text-secondary);margin:0;font-size:clamp(15px,2vw,18px);line-height:1.65}.prism-page-fallback blockquote{border-left:3px solid color-mix(in srgb, var(--presence) 70%, transparent);padding-left:18px}.prism-page-fallback-note{color:var(--text-muted);font-size:12px;line-height:1.55}.prism-slide-figure{flex-direction:column;justify-content:center;align-items:center;gap:14px;min-height:100%;margin:0;padding:16px;display:flex}.prism-slide-stage{flex:none;line-height:0;position:relative}.prism-slide-img{border-radius:var(--r-sm);border:1px solid var(--line);background:#fff;width:100%;height:100%;display:block}.prism-slide-quote{color:var(--text-primary);background:var(--surface-elevated);border-left:3px solid;border-radius:8px;flex-direction:column;align-self:stretch;gap:5px;padding:11px 14px;font-size:14px;line-height:1.5;display:flex}.prism-slide-quote-label{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;font-size:8.5px;font-weight:700}.prism-slide-unit{flex:none;margin:auto;position:relative}.prism-slide-frame{flex:none;margin:0;position:relative}.prism-slide-canvas{transform-origin:0 0;box-sizing:border-box;border-radius:var(--r-md);background:var(--surface-elevated);width:960px;height:540px;box-shadow:0 0 0 1px var(--line), var(--shadow-raised);color:var(--text-secondary);flex-direction:column;gap:28px;padding:64px 72px;display:flex;position:absolute;top:0;left:0;overflow:hidden}.prism-slide-title{color:var(--text-primary);margin:0;font-weight:700;line-height:1.2}.prism-slide-body{flex-direction:column;gap:14px;line-height:1.45;display:flex;overflow:hidden}.prism-slide-body-line{margin:0}.prism-slide-flat{white-space:pre-wrap;word-break:break-word;line-height:1.6;overflow:hidden}.prism-page-marks{pointer-events:none;position:absolute;inset:0}.prism-page-mark{border-radius:2px;animation:.5s .15s both prism-mark-in;position:absolute}.prism-page-figure{border:2.5px solid;border-radius:6px;animation:.5s .15s both prism-mark-in;position:absolute}@keyframes prism-mark-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.prism-page-mark,.prism-page-figure{animation:none}}.prism-pen{pointer-events:none;z-index:2;position:absolute;top:0;left:0;overflow:visible}.prism-pen-stroke,.prism-pen-halo,.prism-pen-head{stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:1px;animation:prism-pen-draw 1s cubic-bezier(.45, 0, .3, 1) var(--ink-delay,0s) forwards}.prism-pen-stroke{stroke-width:4.6px;opacity:.92}.prism-pen-halo{stroke-width:12px;opacity:.13}.prism-pen-head{stroke-width:4.2px;opacity:.92;animation-duration:.28s;animation-delay:calc(var(--ink-delay,0s) + .96s)}@keyframes prism-pen-draw{to{stroke-dashoffset:0}}.prism-pen-glyph{fill:currentColor;opacity:0;animation:prism-glyph-in .4s ease-out calc(var(--ink-delay,0s) + .6s) forwards;font-family:Bradley Hand,Segoe Print,Comic Sans MS,Marker Felt,cursive;font-weight:700}@keyframes prism-glyph-in{0%{opacity:0}to{opacity:.92}}@media (prefers-reduced-motion:reduce){.prism-pen-stroke,.prism-pen-halo,.prism-pen-head{stroke-dashoffset:0;animation:none}.prism-pen-glyph{opacity:.92;animation:none}}.prism-pen-caption{z-index:4;background:color-mix(in oklab, var(--surface-deep) 88%, transparent);border:1px solid var(--line);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);border-radius:12px;align-items:center;gap:10px;padding:10px 12px 10px 14px;animation:.4s both prism-mark-in;display:flex;position:absolute;bottom:14px;left:16px;right:16px;box-shadow:0 8px 28px #0006}.prism-pen-caption-text{min-width:0;color:var(--text-secondary);flex:1;font-size:12.5px;line-height:1.4}.prism-pen-mute{border:1px solid var(--line-strong);background:var(--surface-elevated);width:30px;height:30px;color:inherit;cursor:pointer;border-radius:8px;flex:none;justify-content:center;align-items:center;font-size:14px;display:inline-flex}.prism-pen-mute:hover{border-color:var(--line-strong)}.prism-pen-mute[aria-pressed=true]{border-color:color-mix(in oklab, var(--presence) 60%, transparent)}@media (prefers-reduced-motion:reduce){.prism-pen-caption{animation:none}}.prism-page-foot{border-top:1px solid var(--line);color:var(--text-muted);flex:none;padding:10px 16px;font-size:11px}.prism-office-mark{color:inherit;border-radius:2px;padding:0 1px}.prism-doc-unit{width:100%;margin:auto;position:relative}.prism-doc-sheet{box-sizing:border-box;border-radius:var(--r-md);background:var(--surface-elevated);box-shadow:0 0 0 1px var(--line), var(--shadow-raised);padding:32px 40px}.prism-doc-text{color:var(--text-secondary);white-space:pre-wrap;word-break:break-word;line-height:1.7;position:relative}.prism-sheet-unit{width:100%;margin:auto;position:relative}.prism-sheet-scroll{scrollbar-gutter:stable;border-radius:var(--r-md);box-shadow:0 0 0 1px var(--line);overflow:auto visible}.prism-sheet-inner{width:max-content;min-width:100%;position:relative}.prism-sheet-table{border-collapse:collapse;background:var(--surface-elevated);width:100%;font-size:inherit}.prism-sheet-table th,.prism-sheet-table td{text-align:left;vertical-align:baseline;white-space:nowrap;color:var(--text-secondary);border-bottom:1px solid var(--line);padding:7px 12px}.prism-sheet-table thead th{z-index:1;background:var(--surface-deep);color:var(--text-primary);font-weight:600;font-family:var(--font-data);letter-spacing:.02em;border-bottom:1px solid var(--line-strong);font-size:.85em;position:sticky;top:0}.prism-sheet-table tbody tr:hover td{background:var(--surface-glass)}.prism-sheet-num{font-family:var(--font-data);font-variant-numeric:tabular-nums;text-align:right}.prism-sheet-cell-hit{color:var(--text-primary);font-weight:600}.prism-sheet-truncated{color:var(--text-muted);margin:8px 2px 0;font-size:11px}.prism-page-conns{border-top:1px solid var(--line);background:var(--surface-deep);flex:none;align-items:center;gap:10px;padding:8px 14px;display:flex;overflow-x:auto}.prism-page-conns-label{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);flex:none;font-size:9px}.prism-page-conns-list{gap:6px;display:flex}.prism-page-conn{text-overflow:ellipsis;white-space:nowrap;border-radius:var(--r-full);border:1px solid var(--line-strong);max-width:200px;color:var(--text-secondary);cursor:pointer;background:0 0;flex:none;padding:4px 10px;font-size:11px;transition:border-color .15s,color .15s;overflow:hidden}.prism-page-conn:hover{border-color:color-mix(in oklab, var(--presence) 50%, var(--line-strong));color:var(--text-primary)}.prism-doc{z-index:6;position:absolute;top:46%;left:50%;transform:translate(-50%,-50%)}.prism-doc[data-igniting=true] .prism-doc-page{animation:.7s forwards prism-doc-out}@keyframes prism-doc-out{to{opacity:0;transform:scale(.5)}}.prism-doc-page{background:var(--surface-elevated);border:1px solid var(--line);width:196px;height:256px;box-shadow:0 18px 44px #00000073, 6px 6px 0 -1px var(--surface-elevated), 12px 12px 0 -2px var(--surface-deep);border-radius:6px;flex-direction:column;gap:8px;padding:20px 18px;display:flex;overflow:hidden}.prism-doc-eyebrow{font-family:var(--font-data);letter-spacing:.12em;color:var(--text-muted);font-size:7px}.prism-doc-title{color:var(--text-primary);font-size:12px;font-weight:700;line-height:1.25}.prism-doc-lines{flex-direction:column;gap:5px;margin-top:6px;display:flex}.prism-doc-line{background:var(--line);border-radius:2px;height:3px}.prism-shock{border:1.5px solid var(--presence);pointer-events:none;border-radius:50%;width:200px;height:200px;animation:.9s ease-out forwards prism-shock;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}@keyframes prism-shock{0%{opacity:.55;transform:translate(-50%,-50%)scale(.35)}to{opacity:0;transform:translate(-50%,-50%)scale(3.4)}}.prism-shard{border:1px solid var(--line);opacity:0;pointer-events:none;background:#fff;border-radius:2px;animation:1.2s cubic-bezier(.2,.7,.3,1) forwards prism-shard;position:absolute;top:50%;left:50%;box-shadow:0 4px 12px #0006}@keyframes prism-shard{0%{opacity:.9;transform:translate(-50%,-50%)translate(0)rotate(0)}to{transform:translate(-50%, -50%) translate(var(--sx), var(--sy)) rotate(var(--sr));opacity:0}}@media (prefers-reduced-motion:reduce){.prism-shock,.prism-shard,.prism-doc[data-igniting=true] .prism-doc-page{animation:none}}.prism-blooming{flex-direction:column;justify-content:center;align-items:center;gap:16px;display:flex;position:absolute;inset:0}.prism-bloom-orb{background:radial-gradient(circle at 34% 28%, #a9afff 0%, var(--presence) 55%, #3a43c9 100%);border-radius:48% 52% 50% 50%/52% 50% 50% 48%;width:46px;height:46px;animation:1.4s ease-in-out infinite prism-breathe}@keyframes prism-breathe{0%,to{transform:scale(1)}50%{transform:scale(1.08)}}@media (prefers-reduced-motion:reduce){.prism-bloom-orb{animation:none}}.prism-bloom-label{font-family:var(--font-data);letter-spacing:.04em;color:var(--text-muted);font-size:11px}.prism-error{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:16px;padding:0 18%;display:flex;position:absolute;inset:0}.prism-error-msg{color:var(--text-secondary);margin:0;font-size:14px;line-height:1.6}.prism-error-retry{border:1px solid var(--line-strong);color:var(--text-primary);font:inherit;cursor:pointer;background:0 0;border-radius:10px;padding:8px 18px;font-size:13px;font-weight:600}.prism-error-retry:hover{border-color:var(--line-strong)}.prism-world{transform-origin:0 0;will-change:transform;animation:.6s both prism-world-in;position:absolute;top:0;left:0}@keyframes prism-world-in{0%{opacity:0}to{opacity:1}}@media (prefers-reduced-motion:reduce){.prism-world,.prism-phase[data-active=true] .prism-phase-dot{animation:none}}.prism-stage{cursor:grab;touch-action:none}.prism-stage.is-panning{cursor:grabbing}.prism-stage.is-panning .prism-claim{pointer-events:none}.prism-zoom{z-index:12;border-radius:var(--r-sm);border:1px solid var(--line-strong);background:color-mix(in oklab, var(--surface-elevated) 90%, transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);flex-direction:column;gap:1px;display:flex;position:absolute;bottom:16px;right:16px;overflow:hidden}.prism-zoom button{width:32px;height:30px;color:var(--text-secondary);cursor:pointer;background:0 0;border:none;font-size:16px;line-height:1}.prism-zoom button:hover{background:var(--surface-glass);color:var(--text-primary)}.prism-zoom button+button{border-top:1px solid var(--line-strong)}.prism-region{pointer-events:none;z-index:1;position:absolute;transform:translate(-50%,-50%)}.prism-region-glow{background:radial-gradient(ellipse, color-mix(in oklab, var(--region-color) 16%, transparent) 0%, transparent 70%);border-radius:50%;width:340px;height:260px;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.prism-region-name{z-index:30;border-radius:var(--r-full);background:color-mix(in oklab, var(--surface-deep) 85%, transparent);border:1px solid color-mix(in oklab, var(--region-color) 30%, var(--line-strong));font-family:var(--font-data);letter-spacing:.16em;text-transform:uppercase;color:color-mix(in oklab, var(--region-color) 70%, var(--text-primary) 30%);white-space:nowrap;padding:3px 11px;font-size:11px;font-weight:700;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.prism-links{z-index:0;pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.prism-links line{stroke:color-mix(in oklab, var(--presence) 22%, transparent);stroke-width:1.25px;stroke-linecap:round}.prism-threads{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.prism-thread{--thread-color:var(--danger)}.prism-thread[data-relation=in-tension]{--thread-color:var(--warning)}.prism-thread[data-relation=agrees]{--thread-color:var(--insight)}.prism-thread path{stroke:var(--thread-color);stroke-width:1.5px;stroke-linecap:round;opacity:.55;transition:opacity .3s}.prism-thread[data-relation=contradicts] path{stroke-dasharray:5 3}.prism-thread[data-relation=in-tension] path{stroke-dasharray:1 4;stroke-width:1.7px}.prism-thread[data-relation=agrees] path{stroke-dasharray:none;stroke-width:1.7px}.prism-thread[data-cross=true] path{stroke-width:2px;opacity:.7}.prism-thread.prism-thread-hot path{opacity:1;stroke-width:2.2px}.prism-thread-label{text-align:center;width:100%;font-family:var(--font-data);letter-spacing:.04em;color:color-mix(in oklab, var(--thread-color) 70%, var(--text-primary) 30%);white-space:nowrap;font-size:8px;font-weight:600;display:inline-block}.prism-claim{border-radius:var(--r-sm);border:1px solid color-mix(in oklab, var(--kind-color) 45%, var(--line-strong));background:var(--surface-elevated);text-align:left;cursor:pointer;width:max-content;max-width:184px;color:inherit;z-index:5;flex-direction:column;gap:3px;padding:8px 11px 9px;transition:opacity .3s,border-color .3s,box-shadow .3s,transform .3s;display:flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 10px 28px #00000059}.prism-claim:hover{border-color:var(--kind-color)}.prism-claim.is-open{z-index:20;max-width:240px;box-shadow:0 16px 38px color-mix(in oklab, var(--kind-color) 30%, #0006)}.prism-claim.is-flagged{border-color:color-mix(in oklab, var(--danger) 60%, var(--line-strong))}.prism-claim.is-dim{opacity:.16}.prism-claim.is-cited:not(.is-dim){border-color:color-mix(in oklab, var(--presence) 72%, transparent);box-shadow:0 0 0 1px color-mix(in oklab, var(--presence) 55%, transparent), 0 0 24px color-mix(in oklab, var(--presence) 32%, transparent);z-index:10}.prism-recon-label{color:color-mix(in oklab, var(--danger) 88%, #fff);background:color-mix(in oklab, var(--danger) 18%, var(--surface-deep));border-color:color-mix(in oklab, var(--danger) 48%, transparent);font-weight:700}.prism-standing[data-recon=true] .prism-standing-dot{background:var(--danger)}.prism-claim.is-objected:not(.is-dim){border-color:color-mix(in oklab, var(--danger) 72%, transparent);box-shadow:0 0 0 1px color-mix(in oklab, var(--danger) 55%, transparent), 0 0 24px color-mix(in oklab, var(--danger) 30%, transparent);z-index:9}.prism-claim[data-role=load-bearing]:not(.is-dim){border-color:color-mix(in oklab, var(--kind-color) 78%, transparent);max-width:200px;box-shadow:0 12px 30px #0006, 0 0 0 1px color-mix(in oklab, var(--kind-color) 40%, transparent), 0 0 22px color-mix(in oklab, var(--kind-color) 26%, transparent);z-index:8}.prism-claim[data-role=load-bearing] .prism-claim-title{font-size:14px}.prism-claim[data-role=context]:not(.is-dim):not(.is-open){opacity:.84}.prism-claim[data-role=context]:not(.is-dim):hover{opacity:1}.prism-claim-key{font-family:var(--font-data);letter-spacing:.1em;color:color-mix(in oklab, var(--kind-color) 80%, var(--text-primary) 20%);white-space:nowrap;font-size:8px;font-weight:700}.prism-claim-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.prism-claim-kind{font-family:var(--font-data);letter-spacing:.1em;color:var(--kind-color);align-items:center;gap:6px;font-size:8px;font-weight:600;display:inline-flex}.prism-claim-dot{background:var(--kind-color);border-radius:2px;width:7px;height:7px}.prism-claim-page{font-family:var(--font-data);color:var(--text-muted);font-size:8px;font-weight:600}.prism-claim-title{color:var(--text-primary);font-size:13px;font-weight:600;line-height:1.25}.prism-claim-body{flex-direction:column;gap:7px;margin-top:4px;display:flex}.prism-claim-quote{color:var(--text-secondary);border-left:2px solid var(--kind-color);padding-left:8px;font-size:11px;font-style:italic;line-height:1.4}.prism-claim-flag{font-family:var(--font-data);color:color-mix(in oklab, var(--danger) 70%, var(--text-primary) 30%);align-items:center;font-size:9px;font-weight:600;display:inline-flex}.prism-claim-hint{letter-spacing:.04em;color:var(--kind-color);opacity:.7;font-size:9px;font-weight:600}.prism-claim-state{font-family:var(--font-data);letter-spacing:.06em;text-transform:lowercase;color:var(--text-muted);font-size:8px;font-weight:600}.prism-claim-state[data-state=anchored],.prism-claim-state[data-state=agrees]{color:color-mix(in oklab, var(--insight) 62%, var(--text-primary) 38%)}.prism-claim-state[data-state=in-tension]{color:color-mix(in oklab, var(--warning) 70%, var(--text-primary) 30%)}.prism-claim-state[data-state=contradicts]{color:color-mix(in oklab, var(--danger) 70%, var(--text-primary) 30%)}.prism-seal{border:1px solid color-mix(in oklab, var(--seal-color) 42%, transparent);background:color-mix(in oklab, var(--seal-color) 14%, transparent);font-family:var(--font-data);letter-spacing:.08em;color:color-mix(in oklab, var(--seal-color) 78%, var(--text-primary) 22%);border-radius:999px;align-self:flex-start;align-items:center;gap:5px;margin-top:2px;padding:2px 7px;font-size:8px;font-weight:700;display:inline-flex}.prism-seal-dot{background:var(--seal-color);border-radius:999px;width:6px;height:6px}.prism-seal[data-verdict=unsupported]{border-style:dashed}.prism-claim-verdict{border-radius:var(--r-sm);border:1px solid color-mix(in oklab, var(--seal-color) 30%, transparent);background:color-mix(in oklab, var(--seal-color) 8%, transparent);flex-direction:column;gap:5px;margin-top:2px;padding:7px 9px;display:flex}.prism-verdict-head{flex-direction:column;gap:2px;display:flex}.prism-verdict-label{font-family:var(--font-data);letter-spacing:.1em;color:color-mix(in oklab, var(--seal-color) 82%, var(--text-primary) 18%);font-size:8px;font-weight:700}.prism-verdict-note{color:var(--text-secondary);overflow-wrap:anywhere;font-size:10px;line-height:1.35}.prism-verdict-cite{border:1px dashed color-mix(in oklab, var(--seal-color) 40%, transparent);border-radius:var(--r-xs,6px);background:color-mix(in oklab, var(--seal-color) 6%, transparent);color:var(--text-secondary);overflow-wrap:anywhere;padding:5px 8px;font-size:10px;font-style:italic;line-height:1.4;text-decoration:none;display:block}.prism-verdict-cite:before{content:"🌐 ";font-style:normal}.prism-verdict-cite:hover{border-color:var(--seal-color)}.prism-verdict-host{font-style:normal;font-family:var(--font-data);letter-spacing:.04em;color:color-mix(in oklab, var(--seal-color) 70%, var(--text-muted) 30%);margin-top:2px;font-size:8px;font-weight:600;display:block}.prism-counter{border:1px solid color-mix(in oklab, var(--insight) 24%, transparent);background:color-mix(in oklab, var(--insight) 8%, transparent);font-family:var(--font-data);letter-spacing:.03em;color:var(--text-secondary);white-space:nowrap;border-radius:999px;align-items:center;gap:4px;padding:3px 9px;font-size:9px;display:inline-flex}.prism-counter strong{color:color-mix(in oklab, var(--insight) 72%, #fff 28%);font-weight:700}@media (width<=560px){.prism-counter,.prism-phase-label,.prism-replay-label{display:none}.prism-head{gap:8px;padding:10px 14px}.prism-head-right{gap:8px}.prism-replay{padding:6px 10px}}.prism-standing{border-top:1px solid var(--line);background:color-mix(in oklab, var(--warning) 7%, transparent);align-items:center;gap:9px;padding:9px 18px;display:flex}.prism-standing[data-verifying=true]{background:color-mix(in oklab, var(--insight) 6%, transparent)}.prism-standing-dot{background:var(--warning);border-radius:999px;flex:none;width:8px;height:8px}.prism-standing[data-verifying=true] .prism-standing-dot{background:var(--insight);animation:1.4s ease-in-out infinite prism-standing-pulse}.prism-standing-text{color:var(--text-primary);font-size:12px;font-weight:600;line-height:1.3}@keyframes prism-standing-pulse{0%,to{opacity:1}50%{opacity:.4}}@media (prefers-reduced-motion:reduce){.prism-standing[data-verifying=true] .prism-standing-dot{animation:none}}.prism-foot{background:var(--surface-deep);border-top:1px solid var(--line);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px 18px;padding:13px 22px;display:flex}.prism-foot-quiet{justify-content:center}.prism-foot-stat{min-width:160px;color:var(--text-muted);white-space:nowrap;flex:200px;font-size:11.5px}.prism-foot-actions{flex-wrap:wrap;flex:2 auto;justify-content:flex-end;align-items:center;gap:9px;display:flex}.prism-foot-group{background:color-mix(in oklab, var(--surface-elevated) 55%, transparent);border-radius:12px;align-items:center;gap:6px;padding:4px 8px 4px 3px;display:flex}.prism-foot-group-label{font-family:var(--font-data);letter-spacing:.1em;text-transform:uppercase;color:var(--text-muted);white-space:nowrap;padding:0 1px 0 5px;font-size:9px;font-weight:600}.prism-foot-group--quiet{border-left:1px solid var(--line);background:0 0;gap:4px;margin-left:4px;padding-left:12px}.prism-foot-btn{border:1px solid var(--line-strong);color:var(--text-secondary);font:inherit;cursor:pointer;white-space:nowrap;background:0 0;border-radius:10px;padding:8px 15px;font-size:12.5px;font-weight:600}.prism-foot-btn:hover:not(:disabled){color:var(--text-primary);border-color:var(--line-strong)}.prism-foot-btn--primary{background:var(--presence-deep);color:#fff;border-color:#0000}.prism-foot-btn--primary:hover:not(:disabled){color:#fff;opacity:.88}.prism-foot-btn.is-active{border-color:color-mix(in oklab, var(--danger) 55%, transparent);color:color-mix(in oklab, var(--danger) 70%, var(--text-primary) 30%);background:color-mix(in oklab, var(--danger) 10%, transparent)}.prism-foot-btn:disabled{opacity:.4;cursor:default}.prism-legend-panel{background:var(--surface-deep);border-top:1px solid var(--line);grid-template-columns:1fr 1fr;gap:24px 40px;padding:18px 22px 20px;display:grid}@media (width<=720px){.prism-legend-panel{grid-template-columns:1fr;gap:18px}}.prism-legend-col{flex-direction:column;gap:10px;display:flex}.prism-legend-title{font-family:var(--font-data);letter-spacing:.12em;color:var(--text-muted);font-size:9px;font-weight:600}.prism-legend-kinds,.prism-legend-threads{grid-template-columns:1fr 1fr;gap:7px 18px;margin:0;padding:0;list-style:none;display:grid}.prism-legend-threads{grid-template-columns:1fr}.prism-legend-kind,.prism-legend-thread{align-items:center;gap:7px;font-size:11.5px;display:flex}.prism-legend-kind-dot{border-radius:3px;flex:none;width:9px;height:9px}.prism-legend-kind-name,.prism-legend-thread-name{color:var(--text-primary);font-weight:600}.prism-legend-kind-desc,.prism-legend-thread-desc{color:var(--text-muted)}.prism-legend-thread-line{flex:none;overflow:visible}.prism-legend-thread-line line{stroke-width:1.7px;stroke-linecap:round}.prism-legend-thread-line[data-relation=agrees] line{stroke:var(--insight)}.prism-legend-thread-line[data-relation=contradicts] line{stroke:var(--danger);stroke-dasharray:5 3}.prism-legend-thread-line[data-relation=in-tension] line{stroke:var(--warning);stroke-dasharray:1 4}.prism-legend-note{color:var(--text-muted);margin:4px 0 0;font-size:11px;line-height:1.5}.prism-legend-note strong{color:var(--text-secondary);font-weight:600}.prism-margin{pointer-events:none;position:absolute;top:0;bottom:0}.prism-margin-note{border-left:2.5px solid var(--note-c,var(--presence));background:color-mix(in oklab, var(--note-c,var(--presence)) 6%, var(--surface-elevated));box-shadow:var(--shadow-raised);color:var(--text-primary);-webkit-line-clamp:4;opacity:0;animation:prism-note-in .42s var(--ease-out,ease) both;animation-delay:var(--ink-delay,0s);border-radius:8px;-webkit-box-orient:vertical;padding:8px 10px 8px 12px;font-size:11.5px;font-style:italic;line-height:1.45;display:-webkit-box;position:absolute;left:0;right:0;overflow:hidden}@keyframes prism-note-in{0%{opacity:0;transform:translate(8px)}to{opacity:1;transform:none}}.prism-note-arrows{pointer-events:none;position:absolute;top:0;left:0;overflow:visible}.prism-note-arrow,.prism-note-arrow-head{stroke:currentColor;stroke-width:1.8px;stroke-linecap:round;stroke-linejoin:round;opacity:.75;vector-effect:non-scaling-stroke;stroke-dasharray:1;stroke-dashoffset:1px;animation:prism-note-draw .6s var(--ease-out,ease) forwards;animation-delay:calc(var(--ink-delay,0s) + .12s)}.prism-note-arrow-head{animation-delay:calc(var(--ink-delay,0s) + .62s);animation-duration:.22s}@keyframes prism-note-draw{to{stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){.prism-margin-note{opacity:1;animation:none}.prism-note-arrow,.prism-note-arrow-head{stroke-dashoffset:0;animation:none}}.prism-page-unit{flex:none;margin:auto;position:relative}.prism-page-unit>.prism-page-frame{margin:0}.syn-lenses{background:var(--surface-deep);border:1px solid var(--line);border-radius:var(--r-full,999px);gap:2px;max-width:100%;margin-inline:auto;padding:3px;display:flex;overflow:hidden}.syn-lens{border-radius:var(--r-full,999px);color:var(--text-secondary);cursor:pointer;white-space:nowrap;background:0 0;border:0;align-items:center;gap:6px;padding:6px 14px;font-size:13px;font-weight:600;transition:background .15s,color .15s;display:inline-flex}.syn-lens:hover{color:var(--text-primary)}.syn-lens.is-active{background:var(--surface-elevated);color:var(--text-primary);box-shadow:0 1px 3px #0000001f}.syn-lens-n{border-radius:var(--r-full,999px);background:var(--presence);color:#fff;min-width:18px;height:18px;font-family:var(--font-data,monospace);place-items:center;padding:0 5px;font-size:11px;font-weight:700;display:inline-grid}.syn-obj{border-radius:var(--r-full,999px);cursor:pointer;white-space:nowrap;text-overflow:ellipsis;z-index:3;align-items:center;gap:7px;max-width:220px;padding:7px 12px;font-size:12px;font-weight:650;transition:opacity .2s,transform .12s;display:inline-flex;position:absolute;overflow:hidden;transform:translate(-50%,-50%)}.syn-obj:hover{transform:translate(-50%,-50%)scale(1.04)}.syn-obj.is-dim{opacity:.14}.syn-obj-contradicts{background:color-mix(in srgb, var(--danger) 16%, var(--surface-elevated));border:1px solid var(--danger);color:var(--danger)}.syn-obj-in-tension{background:color-mix(in srgb, var(--warning) 16%, var(--surface-elevated));border:1px solid var(--warning);color:color-mix(in srgb, var(--warning) 80%, var(--text-primary))}.syn-obj-dot{background:currentColor;border-radius:50%;flex:none;width:7px;height:7px}.syn-gap{background:repeating-linear-gradient(-45deg, var(--surface-deep), var(--surface-deep) 6px, transparent 6px, transparent 12px);border:1px dashed var(--line-strong);color:var(--text-secondary)}.syn-consensus{border:1.5px dashed color-mix(in srgb, var(--insight) 55%, transparent);background:color-mix(in srgb, var(--insight) 7%, transparent);cursor:pointer;z-index:1;border-radius:50%;transition:opacity .2s;position:absolute}.syn-consensus.is-dim{opacity:.12}.syn-consensus-badge{border-radius:var(--r-full,999px);background:var(--insight);color:#fff;font-family:var(--font-data,monospace);white-space:nowrap;padding:2px 9px;font-size:10.5px;font-weight:700;position:absolute;top:-11px;left:50%;transform:translate(-50%)}.syn-detail-panel{background:var(--surface-elevated);flex-direction:column;display:flex;position:relative;overflow:hidden}.syn-detail-close{z-index:2;position:absolute;top:12px;right:12px}.syn-detail{flex-direction:column;flex:auto;gap:10px;padding:18px;display:flex;overflow-y:auto}.syn-detail-kind{font-family:var(--font-data,monospace);letter-spacing:.06em;text-transform:uppercase;border-radius:var(--r-full,999px);background:var(--surface-deep);color:var(--text-muted);align-self:flex-start;padding:3px 9px;font-size:10.5px;font-weight:700}.syn-detail-kind[data-rel=contradicts]{color:var(--danger);background:color-mix(in srgb, var(--danger) 12%, transparent)}.syn-detail-kind[data-rel=in-tension]{color:color-mix(in srgb, var(--warning) 85%, var(--text-primary));background:color-mix(in srgb, var(--warning) 12%, transparent)}.syn-detail-kind[data-rel=agrees]{color:var(--insight);background:color-mix(in srgb, var(--insight) 12%, transparent)}.syn-detail-title{margin:0;font-size:16px;font-weight:700;line-height:1.3}.syn-banner{border-radius:var(--r-sm,10px);background:color-mix(in srgb, var(--warning) 12%, transparent);border:1px solid color-mix(in srgb, var(--warning) 40%, var(--line));color:color-mix(in srgb, var(--warning) 85%, var(--text-primary));margin:0;padding:8px 10px;font-size:12.5px}.syn-tape,.syn-members{flex-direction:column;gap:8px;display:flex}.syn-tape-side,.syn-member{text-align:left;border-radius:var(--r-sm,10px);border:1px solid var(--line);background:var(--surface-deep);color:var(--text-primary);cursor:pointer;flex-direction:column;gap:4px;padding:10px 12px;display:flex}.syn-tape-side:hover,.syn-member:hover{border-color:var(--line-strong)}.syn-tape-cite{font-family:var(--font-data,monospace);color:var(--text-muted);font-size:11px}.syn-tape-quote{font-size:13.5px;line-height:1.4}.syn-delta{font-family:var(--font-data,monospace);color:var(--text-secondary);margin:0;font-size:13px;font-weight:700}.syn-interrogate{border-radius:var(--r-sm,10px);border:1px solid var(--presence);background:color-mix(in srgb, var(--presence) 12%, transparent);color:var(--presence);cursor:pointer;align-self:flex-start;margin-top:4px;padding:8px 14px;font-size:13px;font-weight:650}.syn-interrogate:hover{background:color-mix(in srgb, var(--presence) 20%, transparent)}.syn-receipt,.syn-consensus-count{margin:0;font-size:14px}.syn-searched-label{color:var(--text-muted);margin:4px 0 0;font-size:12px}.syn-searched{flex-wrap:wrap;gap:6px;margin:0;padding:0;list-style:none;display:flex}.syn-searched li{font-family:var(--font-data,monospace);border-radius:var(--r-full,999px);background:var(--surface-deep);border:1px solid var(--line);color:var(--text-secondary);padding:3px 9px;font-size:12px}.syn-proposition{margin:0;font-size:14.5px;font-weight:600;line-height:1.4}.syn-note,.syn-proposition-note{color:var(--text-muted);font-size:12px}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import{t as e}from"./jsx-runtime-DaSxXjOY.js";import{ht as t}from"./index-y8GL67bB.js";import{t as n}from"./LegalMarkdownDocument-CSZhRG5r.js";var r=t(),i=`# Mavéa Privacy Notice
|
|
2
|
+
|
|
3
|
+
Effective: July 19, 2026
|
|
4
|
+
|
|
5
|
+
This notice describes the current, unmodified local and self-hosted Mavéa software. It does not describe a future hosted service. Local-first does not mean every feature stays on your device: connected features send data through the deployment to third parties you choose. If a person or organization deploys Mavéa for others, that operator must provide any additional privacy notices and controls required for its deployment.
|
|
6
|
+
|
|
7
|
+
## 1. Who handles your information
|
|
8
|
+
|
|
9
|
+
The Mavéa Maintainers publish software. They do not receive your prompts or browser-local data merely because you install or run it. The person or organization hosting the copy you use is the **deployment operator**. When you self-host, you control that deployment and its logs, storage, configuration, and provider accounts.
|
|
10
|
+
|
|
11
|
+
The unmodified project has no Mavéa user-account system, first-party cloud database, advertising network, product-analytics service, telemetry, or conversation-retention service. Normal network requests can still be visible to the deployment host, infrastructure providers, and the third-party services described below. A modified or separately hosted deployment may behave differently, and its operator is responsible for disclosing any additional collection, logging, accounts, analytics, retention, or sharing it adds.
|
|
12
|
+
|
|
13
|
+
The current repository does not set analytics or advertising cookies and does not include first-party usage tracking. A modified deployment that adds cookies, analytics, advertising, or other tracking must disclose and manage those technologies separately.
|
|
14
|
+
|
|
15
|
+
## 2. Information kept in your browser or deployment
|
|
16
|
+
|
|
17
|
+
Depending on the features you use, browser storage may contain:
|
|
18
|
+
|
|
19
|
+
- conversations, saved canvases, bookmarks, memory items, and session history;
|
|
20
|
+
- courses, lessons, flashcards, quiz progress, Ripple analyses, and dashboards;
|
|
21
|
+
- preferences such as theme, performance, visual richness, voice, and setup state;
|
|
22
|
+
- drafts, tracked items, presentation settings, and recent feature state;
|
|
23
|
+
- provider and model configuration;
|
|
24
|
+
- remembered provider, search, or optional GitHub credentials; and
|
|
25
|
+
- short-lived demo, tour, route, and in-progress session data.
|
|
26
|
+
|
|
27
|
+
Saved content is encrypted in browser storage only where the relevant feature and browser support it. Course data, mastery and progress, some Ripple data and analysis caches, preferences, metadata, and fallback content can be stored in ordinary local storage or IndexedDB. Anyone who can use your unlocked device or browser profile, and malicious extensions or same-origin code, may be able to access browser data.
|
|
28
|
+
|
|
29
|
+
Because this browser data is encrypted to this specific browser, it does not carry over to a different browser, an incognito window, or another device. You can export a backup file of your dashboards, memory, flashcards, saved canvases, map, and courses, and import it elsewhere to move that data. The backup is plain, unencrypted JSON under your control, so store and share it carefully; it deliberately excludes your provider and search keys. Importing a backup merges into existing data and never deletes it, and importing a file you did not create can add content from that file — import only backups you trust.
|
|
30
|
+
|
|
31
|
+
Browser and operating-system caches may retain application assets and optional voice models. The actions gateway may store connected-service credentials and configuration on the deployment operator's machine.
|
|
32
|
+
|
|
33
|
+
## 3. Credentials and connected-service tokens
|
|
34
|
+
|
|
35
|
+
Provider and search keys stay in memory until reload unless you choose Remember. When supported, Remember encrypts them with a non-extractable, device-bound browser key and stores ciphertext locally. Without the required browser cryptography, the unmodified app keeps them session-only rather than writing plaintext. Settings exports exclude provider and search keys.
|
|
36
|
+
|
|
37
|
+
Keys are decrypted when needed and pass through the deployment's same-origin proxy to the provider you selected. The proxy and its host can technically access credentials and content in transit. Browser encryption does not protect against an active compromise of the device, browser, extension, deployment, proxy, or provider.
|
|
38
|
+
|
|
39
|
+
Optional GitHub and Google connections can store access tokens, refresh tokens, or repository settings in the actions gateway or its host configuration. The unmodified gateway writes persisted OAuth tokens to an owner-readable host file and keeps limited audit metadata, not request bodies or provider response text. Whoever runs the gateway controls that file, its backups, logs, deletion, and security.
|
|
40
|
+
|
|
41
|
+
The unmodified gateway has no separate Mavéa user accounts. On a shared deployment, everyone allowed to use action features may act through the deployment operator's connected GitHub or Google account. Use a dedicated, least-privilege gateway and do not expose it to people who should not share those permissions.
|
|
42
|
+
|
|
43
|
+
## 4. Prompts, files, code, and generated content
|
|
44
|
+
|
|
45
|
+
Text you type or paste, conversation context, remembered facts, attached files, extracted document text, images, repository content, diffs, search queries, and feature instructions may be sent through the deployment to the model, search, or connected provider needed for the feature you request. Responses and generated content return through the deployment to your browser.
|
|
46
|
+
|
|
47
|
+
Prism and Synthesis stage and extract supported files locally where possible, but relevant content can still be sent for analysis. Ripple can parse code locally before optional model enrichment sends relevant code or diffs. Local staging is not a promise that later analysis remains local.
|
|
48
|
+
|
|
49
|
+
## 5. Voice, microphone, speech, and reels
|
|
50
|
+
|
|
51
|
+
If you enable listening, the browser captures microphone input and its speech-recognition implementation converts speech to text. Depending on the mode, browser, and operating system, audio may be processed by a remote browser-vendor service or sent through the deployment's configured speech-to-text endpoint. Recognized transcripts may then be sent to your selected model provider.
|
|
52
|
+
|
|
53
|
+
Spoken answers send narration text to the configured text-to-speech service. Reel rendering and encoding are performed in the browser, but optional model direction and narration use the selected providers. A finished export leaves Mavéa only when you save, publish, or send it to a destination you choose.
|
|
54
|
+
|
|
55
|
+
## 6. Services that can receive data
|
|
56
|
+
|
|
57
|
+
According to the feature and configuration you choose, recipients can include:
|
|
58
|
+
|
|
59
|
+
- Google Gemini, Anthropic Claude, OpenAI, xAI Grok, OpenRouter, or another model endpoint you configure;
|
|
60
|
+
- configured web-search providers and Wikipedia;
|
|
61
|
+
- your browser vendor's speech-recognition service and the configured speech-to-text or text-to-speech service;
|
|
62
|
+
- GitHub, Google Calendar, or another configured action destination;
|
|
63
|
+
- map-tile, font, image, and other content hosts such as OpenStreetMap, CARTO, Google Fonts, Wikimedia, or configured image sources used by a view you open;
|
|
64
|
+
- a notification relay URL you configure, which can receive dashboard titles, alert labels, values, units, and timestamps;
|
|
65
|
+
- the jsDelivr content-delivery network, from which the local command-line server downloads version-pinned voice-recognition assets once on first voice use and then serves them from its own cache; and
|
|
66
|
+
- the deployment host, reverse proxy, network, and infrastructure providers.
|
|
67
|
+
|
|
68
|
+
Those parties process data under their own terms and privacy notices. They may retain requests, use data for abuse prevention or service improvement, or process it in other countries according to your account settings and their policies. The Maintainers do not control those practices. Review each recipient's terms, retention, training, security, location, and deletion settings before use. Mavéa cannot delete data retained by those providers.
|
|
69
|
+
|
|
70
|
+
## 7. Why information is processed
|
|
71
|
+
|
|
72
|
+
Information is processed only as needed to:
|
|
73
|
+
|
|
74
|
+
- provide the feature you request and return results;
|
|
75
|
+
- save state and preferences on your device;
|
|
76
|
+
- authenticate to providers and connected services you configure;
|
|
77
|
+
- perform an external action after the required confirmation;
|
|
78
|
+
- protect a deployment, enforce limits, diagnose failures, and prevent abuse; or
|
|
79
|
+
- comply with law or protect rights and safety where legally required.
|
|
80
|
+
|
|
81
|
+
The unmodified project does not sell personal information or use it for cross-context behavioral advertising. A deployment operator must separately disclose any different purpose it introduces.
|
|
82
|
+
|
|
83
|
+
## 8. Retention and deletion
|
|
84
|
+
|
|
85
|
+
Memory-only values disappear on reload. Session storage generally remains until the tab or browser session ends. Local storage and IndexedDB remain until a feature removes the item, you use an available clear, forget, or reset control, you clear site data, or the browser evicts it. Some session history is capped and expires, but many course, progress, dashboard, memory, and Ripple records have no automatic expiration. Clearing all browser site data is the broadest local deletion control. Removing browser data does not delete copies already sent elsewhere.
|
|
86
|
+
|
|
87
|
+
Gateway tokens remain until disconnected or removed by the gateway operator. Server, proxy, infrastructure, browser-vendor, and provider retention depends on the relevant operator, logs, backups, account settings, and third-party policy. Contact those parties for deletion of data they control and revoke credentials at the issuing service.
|
|
88
|
+
|
|
89
|
+
Exports, downloaded files, backups, browser sync, system backups, provider records, and recipients of anything you share must be deleted separately.
|
|
90
|
+
|
|
91
|
+
## 9. Your controls and privacy rights
|
|
92
|
+
|
|
93
|
+
You can reduce or remove data by:
|
|
94
|
+
|
|
95
|
+
- leaving Remember off and using restricted, revocable provider keys;
|
|
96
|
+
- using Mavéa's forget, delete, disconnect, reset, and clear controls where offered;
|
|
97
|
+
- clearing this site's local storage, session storage, IndexedDB, cache, and permissions;
|
|
98
|
+
- revoking model, search, GitHub, Google, and other connected credentials;
|
|
99
|
+
- turning off microphone access and avoiding voice features;
|
|
100
|
+
- not uploading information you do not want sent to a selected provider; and
|
|
101
|
+
- contacting the deployment operator or relevant provider about data they control.
|
|
102
|
+
|
|
103
|
+
Depending on where you live, you may have legal rights to access, correct, delete, restrict, object to, or obtain a copy of personal information held by a deployment operator. The Maintainers cannot retrieve browser-local or provider-held data they do not possess.
|
|
104
|
+
|
|
105
|
+
## 10. Sensitive, confidential, and regulated information
|
|
106
|
+
|
|
107
|
+
Mavéa is not designed as a system of record for health, financial, student, employment, government-identifier, biometric, trade-secret, or other regulated information. Do not submit such information unless you have authority, have assessed every recipient, and have put any legally required contracts and safeguards in place. A disclaimer does not make a deployment compliant with HIPAA, FERPA, GDPR, financial-services rules, workplace duties, or another regulatory regime.
|
|
108
|
+
|
|
109
|
+
Do not submit children's data or another person's personal, confidential, privileged, or regulated information unless you have appropriate authority and a lawful basis. Mavéa is not a confidential or privileged channel.
|
|
110
|
+
|
|
111
|
+
## 11. Security
|
|
112
|
+
|
|
113
|
+
Mavéa uses safeguards such as browser encryption for supported stored data, content sanitization, same-origin request boundaries, confirmation for connected actions, and restricted gateway token-file permissions. No safeguard is perfect. Do not treat local storage or encryption as a guarantee, and do not use Mavéa as a password manager or secret vault.
|
|
114
|
+
|
|
115
|
+
You are responsible for device security, access controls, backups, proxy configuration, least-privilege provider credentials, and connected-account security. Do not expose a local proxy, development server, or actions gateway to an untrusted network.
|
|
116
|
+
|
|
117
|
+
## 12. Children
|
|
118
|
+
|
|
119
|
+
Mavéa is intended for adults and is not directed to children. Do not allow anyone under 18 to use connected model, upload, microphone, or action features or submit personal information through Mavéa. If you believe a child's information reached a deployment or provider, contact that operator and the relevant provider promptly and revoke any affected connection.
|
|
120
|
+
|
|
121
|
+
## 13. Changes, business transfers, and contact
|
|
122
|
+
|
|
123
|
+
Material changes to this notice require an updated effective date and, where appropriate, a new in-product acceptance version. A deployment operator must provide its own identity and contact details where applicable law requires them.
|
|
124
|
+
|
|
125
|
+
If a project, deployment, or relevant assets are reorganized, financed, sold, merged, or transferred, information actually controlled by the relevant operator may be disclosed to advisers and transferred to a successor as permitted by law. Browser-local and provider-held information that the operator does not possess cannot be transferred by that operator. A successor must describe its identity and any materially different data practices.
|
|
126
|
+
|
|
127
|
+
For a hosted copy, contact the person or organization that gave you access. For the public repository, use the Mavéa GitHub issue tracker for non-sensitive questions. Do not put personal or confidential information in a public issue. Report security concerns through [SECURITY.md](./SECURITY.md).
|
|
128
|
+
`,a=e();function o(){let e=(0,r.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,a.jsx)(n,{markdown:i,page:`privacy`,kicker:`What goes where`}),e[0]=t):t=e[0],t}export{o as PrivacyApp};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{n}from"./icons-CHVz6kv_.js";import{t as r}from"./richText-BkxJhl9N.js";var i=e(),a=t(),o=`mavea-quiz-result`;function s(e){return e.replace(/<[^>]+>/g,``).trim()}function c(e,t){try{if(typeof window>`u`||typeof CustomEvent!=`function`)return;let n={question:s(e),correct:t,at:Date.now()};window.dispatchEvent(new CustomEvent(o,{detail:n}))}catch{}}function l({title:e,icon:t=`check`,iconColor:o=`var(--presence)`,question:s,options:l,explanation:u,footer:d,delay:f}){let p=n[t]||n.check,[m,h]=(0,i.useState)(null),g=m!=null,_=l.findIndex(e=>e.correct),v=g&&l[m]?.correct;return(0,a.jsxs)(`div`,{className:`card reveal`,style:{"--delay":(f||0)+`ms`},children:[(0,a.jsxs)(`div`,{className:`card-eyebrow`,children:[(0,a.jsx)(p,{className:`ic`,style:{color:o}}),` `,e]}),(0,a.jsx)(`div`,{className:`lr-qz-q`,dangerouslySetInnerHTML:r(s)}),(0,a.jsx)(`div`,{className:`lr-qz-opts`,role:`radiogroup`,"aria-label":`Answer options`,children:l.map((e,t)=>(0,a.jsxs)(`button`,{className:`lr-qz-opt`+(g?e.correct?` is-correct`:t===m?` is-wrong`:` is-dim`:``)+(t===m?` is-picked`:``),"data-mark":g&&e.correct?`circle`:void 0,onClick:()=>{g||(h(t),c(s,!!e.correct))},disabled:g,role:`radio`,"aria-checked":t===m,children:[(0,a.jsx)(`span`,{className:`lr-qz-mark`,"aria-hidden":`true`,children:g&&e.correct?(0,a.jsx)(n.check,{}):g&&t===m?(0,a.jsx)(n.x,{}):(0,a.jsx)(`span`,{className:`lr-qz-letter`,children:String.fromCharCode(65+t)})}),(0,a.jsx)(`span`,{className:`lr-qz-opttext`,dangerouslySetInnerHTML:r(e.text)})]},t))}),g&&(0,a.jsxs)(`div`,{className:`lr-qz-result `+(v?`ok`:`no`),children:[(0,a.jsx)(`strong`,{children:v?`Correct`:`Not quite`}),l[m]?.feedback&&(0,a.jsx)(`span`,{dangerouslySetInnerHTML:r(l[m].feedback)}),!v&&_>=0&&(0,a.jsxs)(`span`,{className:`lr-qz-reveal`,children:[`Answer: `,(0,a.jsx)(`b`,{dangerouslySetInnerHTML:r(l[_].text)})]}),u&&(0,a.jsx)(`span`,{className:`lr-qz-explain`,dangerouslySetInnerHTML:r(u)})]}),d&&(0,a.jsx)(`div`,{className:`insight-summary`,style:{marginTop:10},dangerouslySetInnerHTML:r(d)})]})}export{l as n,o as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.recap-scrim{z-index:52;background:rgba(var(--scrim-rgb), .62);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);justify-content:center;align-items:flex-start;padding:9vh 24px 24px;display:flex;position:fixed;inset:0;overflow-y:auto}.recap-panel{border-radius:var(--r-xl);background:var(--surface-elevated);border:1px solid var(--line);width:min(720px,100%);box-shadow:var(--shadow-modal);flex-direction:column;gap:20px;padding:30px 34px 26px;display:flex}.recap-head{border-top:2px solid var(--text-primary);flex-direction:column;gap:8px;padding-top:22px;display:flex}.recap-title{color:var(--text-primary);margin:0}.recap-meta{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin:0;font-size:11px}.recap-rows{flex-direction:column;gap:10px;margin:0;padding:0;list-style:none;display:flex}.recap-row{border:1px solid var(--line-soft);border-radius:var(--r-lg);background:color-mix(in oklab, var(--surface-elevated) 72%, transparent);cursor:pointer;text-align:left;width:100%;font:inherit;color:var(--text-primary);align-items:baseline;gap:18px;padding:15px 20px;display:flex}.recap-row:hover{border-color:var(--line-strong)}.recap-row-key{font-family:var(--font-data);letter-spacing:.14em;text-transform:uppercase;color:var(--text-muted);flex-direction:column;flex:0 0 96px;gap:2px;font-size:10px;font-weight:700;display:flex;overflow:hidden}.recap-row-clock{font-weight:400}.recap-row-line{flex:1;min-width:0;font-size:15px;line-height:1.5}.recap-actions{gap:10px;display:flex}.recap-share{border-radius:var(--r-full);background:var(--presence);color:#fff;font:600 13.5px/1 var(--font);cursor:pointer;border:none;padding:10px 18px}.recap-keep{border:1px solid var(--line);border-radius:var(--r-full);background:color-mix(in oklab, var(--surface-elevated) 80%, transparent);color:var(--text-primary);font:500 13.5px/1 var(--font);cursor:pointer;padding:10px 18px}@media (width<=600px){.recap-row{flex-direction:column;gap:6px}.recap-row-key{flex-direction:row;flex:none;gap:10px}}.recap-row-corrected{font:600 10.5px/1.4 var(--font-data,var(--font));letter-spacing:.04em;color:var(--warning);margin-top:4px;display:block}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{ht as n}from"./index-y8GL67bB.js";import{t as r}from"./useFocusTrap-DbfG6zbM.js";var i=e(),a=n(),o=t();function s(e){let t=(0,a.c)(34),{model:n,onJump:s,onShare:l,onClose:u}=e,d=(0,i.useRef)(null);r(d);let f,p;t[0]===u?(f=t[1],p=t[2]):(f=()=>{let e=e=>{e.key===`Escape`&&u()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},p=[u],t[0]=u,t[1]=f,t[2]=p),(0,i.useEffect)(f,p);let m;t[3]===u?m=t[4]:(m=e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),u())},t[3]=u,t[4]=m);let h;t[5]===n.heading?h=t[6]:(h=(0,o.jsx)(`h2`,{className:`recap-title voice-text`,children:n.heading}),t[5]=n.heading,t[6]=h);let g;t[7]===n.meta?g=t[8]:(g=(0,o.jsx)(`p`,{className:`recap-meta`,children:n.meta}),t[7]=n.meta,t[8]=g);let _;t[9]!==h||t[10]!==g?(_=(0,o.jsxs)(`header`,{className:`recap-head`,children:[h,g]}),t[9]=h,t[10]=g,t[11]=_):_=t[11];let v;if(t[12]!==n.rows||t[13]!==s){let e;t[15]===s?e=t[16]:(e=e=>(0,o.jsx)(`li`,{children:(0,o.jsxs)(`button`,{type:`button`,className:`recap-row`,onClick:()=>s(e.frameIndex),children:[(0,o.jsxs)(`span`,{className:`recap-row-key`,children:[e.title,(0,o.jsx)(`span`,{className:`recap-row-clock`,children:e.clock})]}),(0,o.jsx)(`span`,{className:`recap-row-line`,children:e.line}),e.corrected&&(0,o.jsx)(`span`,{className:`recap-row-corrected`,children:e.corrected})]})},e.frameIndex),t[15]=s,t[16]=e),v=n.rows.map(e),t[12]=n.rows,t[13]=s,t[14]=v}else v=t[14];let y;t[17]===v?y=t[18]:(y=(0,o.jsx)(`ul`,{className:`recap-rows`,children:v}),t[17]=v,t[18]=y);let b;t[19]===l?b=t[20]:(b=l&&(0,o.jsx)(`button`,{type:`button`,className:`recap-share`,onClick:l,children:`Share as Story`}),t[19]=l,t[20]=b);let x;t[21]===u?x=t[22]:(x=(0,o.jsx)(`button`,{type:`button`,className:`recap-keep`,onClick:u,children:`Keep talking`}),t[21]=u,t[22]=x);let S;t[23]!==x||t[24]!==b?(S=(0,o.jsxs)(`footer`,{className:`recap-actions`,children:[b,x]}),t[23]=x,t[24]=b,t[25]=S):S=t[25];let C;t[26]!==S||t[27]!==_||t[28]!==y?(C=(0,o.jsxs)(`section`,{className:`recap-panel`,ref:d,tabIndex:-1,role:`dialog`,"aria-label":`Session recap`,onClick:c,children:[_,y,S]}),t[26]=S,t[27]=_,t[28]=y,t[29]=C):C=t[29];let w;return t[30]!==u||t[31]!==C||t[32]!==m?(w=(0,o.jsx)(`div`,{className:`recap-scrim`,onClick:u,role:`button`,tabIndex:0,"aria-label":`Close session recap`,onKeyDown:m,children:C}),t[30]=u,t[31]=C,t[32]=m,t[33]=w):w=t[33],w}function c(e){return e.stopPropagation()}export{s as Recap};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{ht as n}from"./index-y8GL67bB.js";import{d as r,f as i,i as a,n as o,r as s,t as c}from"./geometry-DXAbnb0J.js";var l=n(),u=e(),d=t();function f(e){let t=(0,l.c)(19),{size:n}=e,f=(0,u.useId)(),g;if(t[0]!==f){let e;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(e=/\W/g,t[2]=e):e=t[2],g=f.replace(e,``),t[0]=f,t[1]=g}else g=t[1];let _=`reel-jelly-${g}`,v,y,b;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(v=(0,d.jsx)(`stop`,{className:`reel-jelly-stop s1`,offset:`0`}),y=(0,d.jsx)(`stop`,{className:`reel-jelly-stop s2`,offset:`0.55`}),b=(0,d.jsx)(`stop`,{className:`reel-jelly-stop s3`,offset:`1`}),t[3]=v,t[4]=y,t[5]=b):(v=t[3],y=t[4],b=t[5]);let x;t[6]===_?x=t[7]:(x=(0,d.jsx)(`defs`,{children:(0,d.jsxs)(`linearGradient`,{id:_,x1:`40`,y1:`60`,x2:`160`,y2:`104`,gradientUnits:`userSpaceOnUse`,children:[v,y,b]})}),t[6]=_,t[7]=x);let S;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(S=(0,d.jsx)(`g`,{className:`reel-jelly-strands`,children:i.map(h)}),t[8]=S):S=t[8];let C=`url(#${_})`,w;t[9]===C?w=t[10]:(w=(0,d.jsx)(`path`,{className:`reel-jelly-bell`,d:c,fill:C}),t[9]=C,t[10]=w);let T;t[11]===Symbol.for(`react.memo_cache_sentinel`)?(T=(0,d.jsx)(`path`,{className:`reel-jelly-sheen`,d:o}),t[11]=T):T=t[11];let E;t[12]===Symbol.for(`react.memo_cache_sentinel`)?(E=(0,d.jsxs)(`g`,{className:`reel-jelly-face`,children:[s.map(m),a.map(p),(0,d.jsx)(`path`,{className:`reel-jelly-smile`,d:r})]}),t[12]=E):E=t[12];let D;t[13]!==x||t[14]!==w?(D=(0,d.jsxs)(`svg`,{viewBox:`0 0 200 220`,focusable:`false`,children:[x,S,w,T,E]}),t[13]=x,t[14]=w,t[15]=D):D=t[15];let O;return t[16]!==n||t[17]!==D?(O=(0,d.jsx)(`div`,{className:`reel-jelly`,"data-size":n,"aria-hidden":`true`,children:D}),t[16]=n,t[17]=D,t[18]=O):O=t[18],O}function p(e){let{side:t,x:n}=e;return(0,d.jsxs)(`g`,{children:[(0,d.jsx)(`circle`,{className:`reel-jelly-ball`,cx:n,cy:72,r:9}),(0,d.jsx)(`circle`,{className:`reel-jelly-pupil`,cx:n,cy:72.7,r:5.2}),(0,d.jsx)(`circle`,{className:`reel-jelly-glint`,cx:n+2.5,cy:69.3,r:2.3})]},t)}function m(e){let{side:t,cx:n,cy:r}=e;return(0,d.jsx)(`ellipse`,{className:`reel-jelly-cheek`,cx:n,cy:r,rx:8,ry:5},t)}function h(e,t){return(0,d.jsx)(`path`,{className:`c${t+1}`,d:e},t)}export{f as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.reh-scrim{z-index:52;background:rgba(var(--scrim-rgb), .62);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);justify-content:center;align-items:flex-start;padding:7vh 24px 24px;display:flex;position:fixed;inset:0;overflow-y:auto}.reh-panel{border-radius:var(--r-xl);background:var(--surface-elevated);border:1px solid var(--line);width:min(640px,100%);box-shadow:var(--shadow-modal);flex-direction:column;gap:18px;padding:26px 30px 24px;display:flex}.reh-head{border-top:2px solid var(--text-primary);align-items:center;gap:14px;padding-top:18px;display:flex}.reh-title{color:var(--text-primary);margin:0;font-size:18px;font-weight:700}.reh-take-badge{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;color:var(--warning);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.reh-close{border:1px solid var(--line);width:30px;height:30px;color:var(--text-muted);cursor:pointer;background:0 0;border-radius:50%;flex:none;margin-left:auto;font-size:13px;line-height:1}.reh-close:hover{color:var(--text-primary);border-color:var(--line-strong)}.reh-setup{flex-direction:column;gap:14px;display:flex}.reh-lead{color:var(--text-secondary);margin:0;font-size:14px;line-height:1.55}.reh-field{flex-direction:column;gap:6px;display:flex}.reh-field>span{font-family:var(--font-data);letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);font-size:10.5px}.reh-field input,.reh-field textarea,.reh-compose input{border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-glass);color:var(--text-primary);font:inherit;padding:9px 13px;font-size:13.5px}.reh-field textarea{resize:vertical;line-height:1.5}.reh-memory{color:var(--text-secondary);cursor:pointer;align-items:center;gap:9px;font-size:12.5px;display:flex}.reh-honest{color:var(--text-muted);margin:0;font-size:12px;line-height:1.5}.reh-start{border-radius:var(--r-full);background:var(--presence);color:#fff;cursor:pointer;font:inherit;border:none;align-self:flex-start;padding:10px 22px;font-size:13.5px;font-weight:600}.reh-start:disabled{opacity:.45;cursor:default}.reh-take{flex-direction:column;gap:14px;display:flex}.reh-lines{flex-direction:column;gap:10px;min-height:60px;margin:0;padding:0;list-style:none;display:flex}.reh-line{flex-direction:column;gap:3px;max-width:88%;display:flex}.reh-line.you{text-align:right;align-self:flex-end}.reh-line-who{font-family:var(--font-data);letter-spacing:.12em;text-transform:uppercase;color:var(--text-muted);font-size:9.5px}.reh-line-text{border-radius:var(--r-lg);color:var(--text-primary);padding:9px 14px;font-size:13.5px;line-height:1.5}.reh-line.them .reh-line-text{background:color-mix(in oklab, var(--warning) 10%, transparent);border:1px solid color-mix(in oklab, var(--warning) 25%, transparent)}.reh-line.you .reh-line-text{background:var(--surface-glass-strong);border:1px solid var(--line-soft)}.reh-thinking{color:var(--text-muted);font-size:12px;font-style:italic}.reh-failed{color:var(--text-secondary);font-size:12.5px}.reh-failed button{color:var(--presence);font:inherit;cursor:pointer;background:0 0;border:none;font-size:12.5px;font-weight:600;text-decoration:underline}.reh-coach{border-radius:var(--r-md);background:color-mix(in oklab, var(--warning) 11%, transparent);border:1px solid color-mix(in oklab, var(--warning) 30%, transparent);flex-direction:column;gap:7px;padding:14px 16px;display:flex}.reh-coach-kicker{font-family:var(--font-data);letter-spacing:.16em;color:var(--warning);font-size:9.5px;font-weight:700}.reh-coach-note,.reh-coach-tip{color:var(--text-primary);margin:0;font-size:13px;line-height:1.55}.reh-coach-tip{color:var(--text-secondary)}.reh-compose{gap:9px;display:flex}.reh-compose input{flex:1}.reh-say{border-radius:var(--r-full);background:var(--presence);color:#fff;cursor:pointer;font:inherit;border:none;flex:none;padding:9px 18px;font-size:13px;font-weight:600}.reh-say:disabled{opacity:.45;cursor:default}.reh-actions{align-items:center;gap:10px;display:flex}.reh-end,.reh-debrief{border-radius:var(--r-full);border:1px solid var(--line);color:var(--text-secondary);cursor:pointer;font:inherit;background:0 0;padding:8px 16px;font-size:12.5px;font-weight:600}.reh-end{border-color:color-mix(in oklab, var(--warning) 45%, transparent);color:var(--warning)}.reh-end:hover:not(:disabled){background:color-mix(in oklab, var(--warning) 10%, transparent)}.reh-end:disabled{opacity:.45;cursor:default}.reh-debrief{margin-left:auto}.reh-debrief:hover{color:var(--text-primary);border-color:var(--line-strong)}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{ht as n}from"./index-y8GL67bB.js";import{t as r}from"./useFocusTrap-DbfG6zbM.js";import{n as i}from"./spokenText-D4zPX9JY.js";import{u as a}from"./kokoro-D4GKpSL0.js";import{t as o}from"./FeatureUseNotice-DPtQ0OGb.js";import{t as s}from"./providers-wzm7E8Pa.js";var c=e(),ee=n();function l(e){return[`You are role-playing the OTHER SIDE of a conversation the user is rehearsing: ${e.counterpart}.`,`The conversation: ${e.scenario}.`,`Ground everything in this context the user supplied — and NOTHING else:`,`"""${e.context||`(none given)`}"""`,`If the context does not tell you how this person would react, play a realistic, generic version of the role — never invent specific facts, history, or quotes about the real person.`,`Stay in character. Push back the way this role realistically would; do not cave easily, do not be cartoonishly hostile.`,`The reply is displayed AND spoken. Keep normal spelling on screen, but wrap every name, place, brand, or non-English term a voice might mispronounce as [[shown|said]] — for example [[Omakase|oh-mah-kah-seh]]. The said side must be lowercase voice-safe syllables matching a native/source-language pronunciation, never IPA or an Anglicized guess.`,`Reply ONLY with JSON: {"reply":"what you say next, 1-3 sentences, spoken language"}. No other keys, no prose outside the JSON.`].join(`
|
|
2
|
+
`)}function u(){return[`You are a direct, warm conversation coach. The user just finished a practice take of a hard conversation.`,`Judge ONLY what is in the transcript — quote or reference their actual words; never invent things they said.`,`If an earlier take summary is given, say concretely what improved or regressed since it.`,`Reply ONLY with JSON: {"note":"how this take went, 1-2 sentences","tip":"ONE concrete thing to do differently next take, 1-2 sentences"}.`].join(`
|
|
3
|
+
`)}var d=220,f=260;function p(e){try{return typeof e==`string`?JSON.parse(e.match(/\{[\s\S]*\}/)?.[0]??`{}`):e}catch{return{}}}function m(e){return e.map(e=>({role:e.who===`you`?`user`:`assistant`,content:e.text}))}async function te(e,t,n,r){try{let i=m(t),a=i.pop();if(!a||a.role!==`user`)return``;let o=await s(n.provider).generate({system:l(e),history:i,user:a.content,maxTokens:d},n);if(r.aborted)return``;let c=p(o.raw).reply;return typeof c==`string`?c.trim().slice(0,600):``}catch{return``}}async function ne(e,t,n,r,i,a){try{if(!t.some(e=>e.who===`you`))return null;let o=t.map(t=>`${t.who===`you`?`USER`:e.counterpart.toUpperCase()}: ${t.text}`).join(`
|
|
4
|
+
`),c=[`Conversation being rehearsed: ${e.scenario}`,r?`Earlier take, your summary then: ${r}`:null,`Take ${n} transcript:`,o].filter(Boolean).join(`
|
|
5
|
+
`),ee=await s(i.provider).generate({system:u(),history:[],user:c,maxTokens:f},i);if(a.aborted)return null;let l=p(ee.raw),d=typeof l.note==`string`?l.note.trim().slice(0,400):``,m=typeof l.tip==`string`?l.tip.trim().slice(0,400):``;return d&&m?{note:d,tip:m}:null}catch{return null}}function re(e){return`Debrief: I had the real "${e.scenario}" conversation. Here's what happened: `}var h=t();function ie(e){let t=(0,ee.c)(74),{cfg:n,memoryNodes:s,speak:l,onDebrief:u,onClose:d}=e,[f,p]=(0,c.useState)(``),[m,ie]=(0,c.useState)(``),[g,le]=(0,c.useState)(``),[_,ue]=(0,c.useState)(!1),[v,de]=(0,c.useState)(`setup`),[y,fe]=(0,c.useState)(1),b;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(b=[],t[0]=b):b=t[0];let[x,S]=(0,c.useState)(b),[C,pe]=(0,c.useState)(``),[w,T]=(0,c.useState)(null),[E,me]=(0,c.useState)(!1),[D,he]=(0,c.useState)(null),ge=(0,c.useRef)(null);r(ge);let _e=(0,c.useRef)(null),O=(0,c.useRef)(null),k,A;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(k=()=>()=>{O.current?.abort(),a()},A=[],t[1]=k,t[2]=A):(k=t[1],A=t[2]),(0,c.useEffect)(k,A);let j;t[3]!==s||t[4]!==_?(j=_?s.map(ce).join(`. `):``,t[3]=s,t[4]=_,t[5]=j):j=t[5];let ve=j,M;t[6]===f?M=t[7]:(M=f.trim(),t[6]=f,t[7]=M);let N;t[8]===m?N=t[9]:(N=m.trim(),t[8]=m,t[9]=N);let P;t[10]===g?P=t[11]:(P=g.trim(),t[10]=g,t[11]=P);let F;t[12]!==ve||t[13]!==P?(F=[P,ve].filter(Boolean),t[12]=ve,t[13]=P,t[14]=F):F=t[14];let I=F.join(`
|
|
6
|
+
`),L;t[15]!==M||t[16]!==N||t[17]!==I?(L={scenario:M,counterpart:N,context:I},t[15]=M,t[16]=N,t[17]=I,t[18]=L):L=t[18];let R=L,z;t[19]!==n||t[20]!==R||t[21]!==l?(z=async e=>{O.current?.abort();let t=new AbortController;O.current=t,T(`reply`),me(!1);let r=await te(R,e,n,t.signal);if(!t.signal.aborted){if(T(null),!r){me(!0);return}S([...e,{who:`them`,text:i(r)}]),l?.(r)}},t[19]=n,t[20]=R,t[21]=l,t[22]=z):z=t[22];let B=z,V;t[23]!==w||t[24]!==C||t[25]!==x||t[26]!==B?(V=()=>{let e=C.trim();if(!e||w)return;pe(``),he(null);let t=[...x,{who:`you`,text:e}];S(t),B(t)},t[23]=w,t[24]=C,t[25]=x,t[26]=B,t[27]=V):V=t[27];let H=V,U;t[28]!==w||t[29]!==n||t[30]!==x||t[31]!==R||t[32]!==y?(U=async()=>{if(w)return;O.current?.abort();let e=new AbortController;O.current=e,T(`coach`);let t=await ne(R,x,y,_e.current,n,e.signal);e.signal.aborted||(T(null),he(t),t&&(_e.current=t.note),fe(se),S([]))},t[28]=w,t[29]=n,t[30]=x,t[31]=R,t[32]=y,t[33]=U):U=t[33];let ye=U,W,G;t[34]===d?(W=t[35],G=t[36]):(W=()=>{let e=e=>{e.key===`Escape`&&d()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},G=[d],t[34]=d,t[35]=W,t[36]=G),(0,c.useEffect)(W,G);let be=R.scenario.length>0&&R.counterpart.length>0,K;t[37]===d?K=t[38]:(K=e=>{e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),d())},t[37]=d,t[38]=K);let q;t[39]===Symbol.for(`react.memo_cache_sentinel`)?(q=(0,h.jsx)(`h2`,{className:`reh-title`,children:`The Rehearsal`}),t[39]=q):q=t[39];let J;t[40]!==R.scenario||t[41]!==v||t[42]!==y?(J=v===`take`&&(0,h.jsxs)(`span`,{className:`reh-take-badge`,children:[R.scenario,` · take `,y]}),t[40]=R.scenario,t[41]=v,t[42]=y,t[43]=J):J=t[43];let Y;t[44]===d?Y=t[45]:(Y=(0,h.jsx)(`button`,{type:`button`,className:`reh-close`,onClick:d,"aria-label":`Close the rehearsal`,children:`✕`}),t[44]=d,t[45]=Y);let X;t[46]!==J||t[47]!==Y?(X=(0,h.jsxs)(`header`,{className:`reh-head`,children:[q,J,Y]}),t[46]=J,t[47]=Y,t[48]=X):X=t[48];let Z;t[49]!==w||t[50]!==D||t[51]!==g||t[52]!==m||t[53]!==C||t[54]!==ye||t[55]!==E||t[56]!==x||t[57]!==s||t[58]!==u||t[59]!==be||t[60]!==B||t[61]!==H||t[62]!==f||t[63]!==R||t[64]!==v||t[65]!==_?(Z=v===`setup`?(0,h.jsxs)(`div`,{className:`reh-setup`,children:[(0,h.jsx)(`p`,{className:`reh-lead`,children:`Practice the conversation that scares you — against the other side, played only from what you share here.`}),(0,h.jsx)(o,{kind:`simulation`,from:`live`}),(0,h.jsxs)(`label`,{className:`reh-field`,children:[(0,h.jsx)(`span`,{children:`The conversation`}),(0,h.jsx)(`input`,{value:f,onChange:e=>p(e.target.value),placeholder:`asking my manager for the raise`})]}),(0,h.jsxs)(`label`,{className:`reh-field`,children:[(0,h.jsx)(`span`,{children:`Mavéa plays`}),(0,h.jsx)(`input`,{value:m,onChange:e=>ie(e.target.value),placeholder:`my manager`})]}),(0,h.jsxs)(`label`,{className:`reh-field`,children:[(0,h.jsx)(`span`,{children:`What should they know? (how this person talks, their constraints, history)`}),(0,h.jsx)(`textarea`,{value:g,onChange:e=>le(e.target.value),rows:4,placeholder:`She defers to budget freezes. Our last 1:1 she said scope would be 'recognized eventually'…`})]}),s.length>0&&(0,h.jsxs)(`label`,{className:`reh-memory`,children:[(0,h.jsx)(`input`,{type:`checkbox`,checked:_,onChange:e=>ue(e.target.checked)}),`Also ground them in what Mavéa remembers (`,s.length,` `,s.length===1?`concept`:`concepts`,`)`]}),(0,h.jsx)(`p`,{className:`reh-honest`,children:`They'll only know what's above — where it runs out, they play the role straight instead of pretending to know the real person.`}),(0,h.jsx)(`button`,{type:`button`,className:`reh-start`,disabled:!be,onClick:()=>de(`take`),children:`Start take 1`})]}):(0,h.jsxs)(`div`,{className:`reh-take`,children:[(0,h.jsxs)(`ul`,{className:`reh-lines`,children:[x.map((e,t)=>(0,h.jsxs)(`li`,{className:`reh-line `+e.who,children:[(0,h.jsx)(`span`,{className:`reh-line-who`,children:e.who===`you`?`You`:R.counterpart}),(0,h.jsx)(`span`,{className:`reh-line-text`,children:e.text})]},t)),w===`reply`&&(0,h.jsxs)(`li`,{className:`reh-thinking`,children:[R.counterpart,` is thinking…`]}),E&&(0,h.jsxs)(`li`,{className:`reh-failed`,children:[`They didn't respond.`,` `,(0,h.jsx)(`button`,{type:`button`,onClick:()=>void B(x),children:`Try again`})]})]}),D&&(0,h.jsxs)(`aside`,{className:`reh-coach`,"aria-label":`Coach, between takes`,children:[(0,h.jsx)(`span`,{className:`reh-coach-kicker`,children:`COACH — BETWEEN TAKES`}),(0,h.jsx)(`p`,{className:`reh-coach-note`,children:D.note}),(0,h.jsx)(`p`,{className:`reh-coach-tip`,children:D.tip})]}),w===`coach`&&(0,h.jsx)(`p`,{className:`reh-thinking`,children:`Coach is watching the take back…`}),(0,h.jsxs)(`div`,{className:`reh-compose`,children:[(0,h.jsx)(`input`,{value:C,onChange:e=>pe(e.target.value),onKeyDown:e=>{e.key===`Enter`&&H()},placeholder:x.length===0?`Open the conversation — your first line`:`Your next line`,"aria-label":`Your line`}),(0,h.jsx)(`button`,{type:`button`,className:`reh-say`,disabled:!C.trim()||w!==null,onClick:H,children:`Say it`})]}),(0,h.jsxs)(`footer`,{className:`reh-actions`,children:[(0,h.jsx)(`button`,{type:`button`,className:`reh-end`,disabled:w!==null||!x.some(ae),onClick:()=>void ye(),children:`End take · get coached`}),(0,h.jsx)(`button`,{type:`button`,className:`reh-debrief`,onClick:()=>u(re(R)),title:`Had the real conversation? Tell Mavéa how it went.`,children:`Debrief the real one`})]})]}),t[49]=w,t[50]=D,t[51]=g,t[52]=m,t[53]=C,t[54]=ye,t[55]=E,t[56]=x,t[57]=s,t[58]=u,t[59]=be,t[60]=B,t[61]=H,t[62]=f,t[63]=R,t[64]=v,t[65]=_,t[66]=Z):Z=t[66];let Q;t[67]!==X||t[68]!==Z?(Q=(0,h.jsxs)(`section`,{className:`reh-panel`,ref:ge,tabIndex:-1,role:`dialog`,"aria-label":`The Rehearsal`,onClick:oe,children:[X,Z]}),t[67]=X,t[68]=Z,t[69]=Q):Q=t[69];let $;return t[70]!==d||t[71]!==K||t[72]!==Q?($=(0,h.jsx)(`div`,{className:`reh-scrim`,onClick:d,role:`button`,tabIndex:0,"aria-label":`Close the rehearsal`,onKeyDown:K,children:Q}),t[70]=d,t[71]=K,t[72]=Q,t[73]=$):$=t[73],$}function ae(e){return e.who===`you`}function oe(e){return e.stopPropagation()}function se(e){return e+1}function ce(e){return e.body}export{ie as RehearsalPanel};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/ShareModal-ClnEkudw.js","assets/chunk-BVpWp9h4.js","assets/index-y8GL67bB.js","assets/jsx-runtime-DaSxXjOY.js","assets/react-BQSORdFI.js","assets/lazyRetry-D50B1UMY.js","assets/index-CepQEz75.css","assets/ReelJelly-3jSVsJsy.js","assets/geometry-DXAbnb0J.js","assets/registry-2v0jlh5Q.js","assets/fit-0HxU-rtB.js","assets/share-QHGHNDhQ.js","assets/icons-CHVz6kv_.js","assets/FeatureUseNotice-DPtQ0OGb.js","assets/FeatureUseNotice-CWt7gOwS.css","assets/spokenText-D4zPX9JY.js","assets/toast-BBNs2h3L.js","assets/useFocusTrap-DbfG6zbM.js","assets/kokoro-D4GKpSL0.js","assets/ShareModal-C8S7ySls.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{r as e}from"./chunk-BVpWp9h4.js";import{t}from"./react-BQSORdFI.js";import{t as n}from"./jsx-runtime-DaSxXjOY.js";import{I as r,J as i,L as a,ht as o,k as s,mt as c,q as l}from"./index-y8GL67bB.js";import{n as u}from"./icons-CHVz6kv_.js";import"./ShareModal-ClnEkudw.js";import"./annotationReel-BcU9Q0Sw.js";var d=t(),f=o(),p=c();function m(e){if(!e||!e.blocks?.length)return[];let t=e.blocks.map((e,t)=>({index:t}));return[{question:e.opener||e.title||``,narration:e.found||e.sub||e.opener||e.title||``,mode:`replace`,tour:t,spec:e,at:0}]}var h=n();i();var g=r(()=>l(()=>import(`./ShareModal-ClnEkudw.js`).then(e=>e.t).then(e=>({default:e.ShareModal})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]))),_=g.Component;function v(e){let t=(0,f.c)(9),{frames:n,spec:r}=e,[i,o]=(0,d.useState)(!1),c;t[0]!==n||t[1]!==r?(c=n??(r?m(r):[]),t[0]=n,t[1]=r,t[2]=c):c=t[2];let l=c;if(!l.length)return null;let u;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,h.jsx)(`button`,{type:`button`,style:y,onClick:()=>o(!0),...a(g.preload),children:`✨ Share as a story`}),t[3]=u):u=t[3];let v;t[4]!==i||t[5]!==l?(v=i&&(0,p.createPortal)((0,h.jsx)(s,{label:`Share story`,overlay:!0,children:(0,h.jsx)(_,{frames:l,onClose:()=>o(!1)})}),document.body),t[4]=i,t[5]=l,t[6]=v):v=t[6];let b;return t[7]===v?b=t[8]:(b=(0,h.jsxs)(h.Fragment,{children:[u,v]}),t[7]=v,t[8]=b),b}var y={display:`inline-flex`,alignItems:`center`,gap:8,padding:`10px 18px`,borderRadius:`var(--r-full)`,border:`none`,background:`var(--presence)`,color:`#fff`,font:`650 14px/1 var(--font)`,cursor:`pointer`,alignSelf:`flex-start`},b=e({ReplayCard:()=>x});function x(e){let t=(0,f.c)(12),{delay:n,line:r,spec:i}=e,a=(n||0)+`ms`,o;t[0]===a?o=t[1]:(o={"--delay":a},t[0]=a,t[1]=o);let s=o,c;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,h.jsxs)(`div`,{className:`card-eyebrow`,children:[(0,h.jsx)(u.play,{className:`ic`,style:{color:`var(--presence-soft)`}}),` Mavéa Replay`]}),t[2]=c):c=t[2];let l;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(l={fontSize:17,marginBottom:14},t[3]=l):l=t[3];let d=r||`“I dropped in 3 statements. Mavéa showed me where my money went in 20 seconds.”`,p;t[4]===d?p=t[5]:(p=(0,h.jsx)(`div`,{className:`insight-title`,style:l,children:d}),t[4]=d,t[5]=p);let m;t[6]===i?m=t[7]:(m=i&&(0,h.jsx)(v,{spec:i}),t[6]=i,t[7]=m);let g;return t[8]!==s||t[9]!==p||t[10]!==m?(g=(0,h.jsxs)(`div`,{className:`card replay-card reveal`,style:s,children:[c,p,m]}),t[8]=s,t[9]=p,t[10]=m,t[11]=g):g=t[11],g}export{b as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{t as n}from"./TopicCanvas-CT0eSj2M.js";import"./canvas-QTEIiK23.js";import{t as r}from"./generateBeats-b64CL54v.js";var i=e();function a(e){let t=[];for(let n of e.tour){let r=e.spec.blocks[n.index]?.id;r&&t.push(n.say?{spot:r,say:n.say}:{spot:r})}return t}function o(e){let t=a(e),n=r(e.spec.blocks,{opener:e.narration,...t.length?{tour:t}:{}});return{spec:e.spec,say:e.spoken??e.narration,beats:n}}function s(e,t=0){let n=Math.max(0,Math.min(t,e.length));return e.slice(n).map(o)}var c=t(),l=700;function u({frames:e,initialIndex:t,speak:r,cancelSpeak:a,onClose:o}){let[u,d]=(0,i.useState)(()=>Math.min(Math.max(0,t),e.length-1)),[f,p]=(0,i.useState)(null),[m,h]=(0,i.useState)(!1),[g,_]=(0,i.useState)(()=>e[t]?.spec??null),v=(0,i.useRef)(null),y=(0,i.useRef)(null),b=e[u]??null,x=(0,i.useCallback)(()=>{y.current?.(),y.current=null,a?.(),h(!1),p(null)},[a]),S=(0,i.useCallback)((e,t)=>{if(x(),!e.length)return;let n=!1,i;y.current=()=>{n=!0,i&&clearTimeout(i)},h(!0);let o=0,s=()=>{if(n)return;if(o>=e.length){h(!1),p(null);return}let c=e[o];d(t+o),_(c.spec),a?.(),c.say&&r?.(c.say);let u=0,f=()=>{if(n)return;if(u>=c.beats.length){o+=1,i=setTimeout(s,l);return}let e=c.beats[u++];e.set&&`spot`in e.set&&p(e.set.spot??null),i=setTimeout(f,e.ms??0)};f()};s()},[x,r,a]),C=(0,i.useCallback)(()=>{b&&S(s([b],0),u)},[b,u,S]),w=(0,i.useCallback)(()=>{S(s(e,u),u)},[e,u,S]),T=(0,i.useCallback)(()=>{d(0),S(s(e,0),0)},[e,S]),E=(0,i.useCallback)(t=>{x(),d(t),_(e[t]?.spec??null)},[e,x]);return(0,i.useEffect)(()=>{if(!f)return;let e=window.setTimeout(()=>{let e=v.current;if(!e)return;let t=e.querySelector(`.spotlit`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.top-n.top-(e.clientHeight-r.height)/2;e.scrollTo({top:Math.max(0,e.scrollTop+i),behavior:`smooth`})},90);return()=>window.clearTimeout(e)},[f]),(0,i.useEffect)(()=>()=>x(),[x]),!b||!g?null:(0,c.jsxs)(`div`,{onClick:()=>{x(),o()},role:`button`,tabIndex:0,"aria-label":`Close replay overlay`,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),x(),o())},style:{position:`fixed`,inset:0,background:`rgba(0,0,0,0.6)`,zIndex:60,display:`flex`,padding:20,gap:16},children:[(0,c.jsxs)(`div`,{onClick:e=>e.stopPropagation(),role:`button`,tabIndex:0,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),e.stopPropagation())},style:{flex:`0 0 240px`,display:`flex`,flexDirection:`column`,gap:8,overflow:`auto`,background:`var(--surface-elevated)`,border:`1px solid var(--line)`,borderRadius:12,padding:12},children:[(0,c.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,justifyContent:`space-between`},children:[(0,c.jsx)(`span`,{style:{fontSize:13,fontWeight:600},children:`Conversation`}),(0,c.jsx)(`button`,{className:`entry-action`,style:{fontSize:12},onClick:()=>{x(),o()},children:`← Live`})]}),e.map((e,t)=>{let n=t===u;return(0,c.jsxs)(`button`,{onClick:()=>E(t),title:e.question,style:{textAlign:`left`,padding:`8px 10px`,borderRadius:8,border:`1px solid `+(n?`var(--presence)`:`var(--line)`),background:n?`var(--surface-elevated)`:`transparent`,cursor:`pointer`,color:`inherit`,font:`inherit`,display:`flex`,flexDirection:`column`,gap:2},children:[(0,c.jsxs)(`span`,{style:{fontSize:12.5,fontWeight:n?600:400,overflow:`hidden`,textOverflow:`ellipsis`,whiteSpace:`nowrap`},children:[t+1,`. `,e.question||e.spec.title]}),(0,c.jsxs)(`span`,{style:{fontSize:11,color:`var(--text-muted)`},children:[e.spec.blocks.length,` cards`,e.mode===`replace`?``:` · ${e.mode}`]})]},t)})]}),(0,c.jsxs)(`div`,{onClick:e=>e.stopPropagation(),role:`button`,tabIndex:0,onKeyDown:e=>{(e.key===`Enter`||e.key===` `)&&(e.key===` `&&e.preventDefault(),e.stopPropagation())},style:{flex:1,display:`flex`,flexDirection:`column`,gap:10,minWidth:0},children:[(0,c.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:8,flexWrap:`wrap`},children:[(0,c.jsx)(`span`,{className:`faint`,style:{fontSize:12.5,marginRight:`auto`},children:b.spec.title}),m?(0,c.jsx)(`button`,{className:`entry-action`,style:{fontSize:13},onClick:x,children:`◼ Stop`}):(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(`button`,{className:`entry-action`,style:{fontSize:13},onClick:C,children:`▶ Replay this`}),(0,c.jsx)(`button`,{className:`entry-action`,style:{fontSize:13},onClick:w,children:`▶ From here`}),(0,c.jsx)(`button`,{className:`entry-action`,style:{fontSize:13},onClick:T,children:`▶ From start`})]})]}),(0,c.jsx)(`div`,{ref:v,className:`canvas-scroll`,style:{flex:1,overflow:`auto`,background:`var(--surface-elevated)`,border:`1px solid var(--line)`,borderRadius:12,padding:16},children:(0,c.jsx)(`div`,{className:`topic-wrap`,children:(0,c.jsx)(n,{data:g,spot:f,built:{},onProve:()=>{}})})})]})]})}export{u as ReplayOverlay};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{ht as n}from"./index-y8GL67bB.js";import{t as r}from"./useFocusTrap-DbfG6zbM.js";import{t as i}from"./motion-S0NRruNj.js";import{o as a}from"./useStudy-Bflreq2a.js";import{C as o}from"./dashboardEvents-DR9d_c74.js";import{n as s,o as c,r as l}from"./CheckLogRail-wUfby67Z.js";import{r as u}from"./predictions-CYS7Vo39.js";var d=e(),f=n(),p=10080*60*1e3,m=20;function h(e,t){return e.reduce((e,n)=>{let r=u(n.predictionHistory,t);return{hits:e.hits+r.hits,total:e.total+r.total}},{hits:0,total:0})}function g(e,t,n=m){let r=t-p,i=[];for(let t of e)for(let e of t.predictionHistory??[])e.at>=r&&i.push({grade:e,dashboardTitle:t.title});return i.sort((e,t)=>e.grade.at-t.grade.at),i.length>n?i.slice(i.length-n):i}function _(e,t){let n=t-p,r=null,i=-1;for(let t of e)for(let e of t.predictionHistory??[]){if(e.at<n||e.result!==`hit`)continue;let a=e.expected.length+(e.note?.length??0);a>i&&(i=a,r={expected:e.expected,note:e.note,dashboardTitle:t.title})}return r}function v(e,t){let n=[];return e.totalSearches>0&&n.push(`searches`),e.topMoment&&n.push(`moment`),t.total>0&&n.push(`calls`),e.estSavedPerMonth>0&&n.push(`saved`),n}function y(e){return e.length>0?e:[`fallback`]}var b=t(),x=[`S`,`M`,`T`,`W`,`T`,`F`,`S`];function S(e){return x[new Date(`${e}T00:00:00Z`).getUTCDay()]}function C(e){return new Date(e).toLocaleDateString([],{weekday:`long`,month:`long`,day:`numeric`})}function w(e){return{"--d":`${e}ms`}}function T(e){let t=(0,f.c)(22),{rewind:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={duration:1400},t[0]=r):r=t[0];let a=i(n.totalSearches,r),o;t[1]===n.byDay?o=t[2]:(o=Math.max(1,...n.byDay.map(E)),t[1]=n.byDay,t[2]=o);let s=o,c;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,b.jsx)(`p`,{className:`rw-eyebrow rw-child`,style:w(20),children:`This week`}),t[3]=c):c=t[3];let l;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(l=w(90),t[4]=l):l=t[4];let u;t[5]===a?u=t[6]:(u=(0,b.jsx)(`p`,{className:`rw-figure rw-child`,style:l,children:a}),t[5]=a,t[6]=u);let d;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(d=w(170),t[7]=d):d=t[7];let p=n.totalSearches===1?``:`es`,m;t[8]===p?m=t[9]:(m=(0,b.jsxs)(`p`,{className:`rw-figure-label rw-child`,style:d,children:[`search`,p,`, all week`]}),t[8]=p,t[9]=m);let h;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(h=w(260),t[10]=h):h=t[10];let g;if(t[11]!==s||t[12]!==n.byDay){let e;t[14]===s?e=t[15]:(e=e=>(0,b.jsxs)(`div`,{className:`rw-bar`,title:`${e.searches} search${e.searches===1?``:`es`}`,children:[(0,b.jsx)(`div`,{className:`rw-bar-track`,children:(0,b.jsx)(`div`,{className:`rw-bar-fill`,style:{height:`${e.searches/s*100}%`}})}),(0,b.jsx)(`span`,{className:`rw-bar-day`,children:S(e.date)})]},e.date),t[14]=s,t[15]=e),g=n.byDay.map(e),t[11]=s,t[12]=n.byDay,t[13]=g}else g=t[13];let _;t[16]===g?_=t[17]:(_=(0,b.jsx)(`div`,{className:`rw-bars rw-child`,style:h,children:g}),t[16]=g,t[17]=_);let v;return t[18]!==_||t[19]!==u||t[20]!==m?(v=(0,b.jsxs)(b.Fragment,{children:[c,u,m,_]}),t[18]=_,t[19]=u,t[20]=m,t[21]=v):v=t[21],v}function E(e){return e.searches}function ee(e){let t=(0,f.c)(22),{rewind:n}=e,r=n.topMoment;if(!r)return null;let i;t[0]===r?i=t[1]:(i=s(r),t[0]=r,t[1]=i);let a=i,o=a?.tone??`plain`,c;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(c=(0,b.jsx)(`p`,{className:`rw-eyebrow rw-child`,style:w(20),children:`The moment that mattered`}),t[2]=c):c=t[2];let u;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(u=w(110),t[3]=u):u=t[3];let d;t[4]===r.text?d=t[5]:(d=(0,b.jsx)(`p`,{className:`rw-moment-text`,children:r.text}),t[4]=r.text,t[5]=d);let p;t[6]===a?p=t[7]:(p=a&&(0,b.jsx)(`span`,{className:`rw-moment-chip`,children:a.label}),t[6]=a,t[7]=p);let m;t[8]===r.at?m=t[9]:(m=C(r.at),t[8]=r.at,t[9]=m);let h;t[10]===r.at?h=t[11]:(h=l(r.at),t[10]=r.at,t[11]=h);let g;t[12]!==m||t[13]!==h?(g=(0,b.jsxs)(`span`,{className:`rw-moment-time`,children:[m,` · `,h]}),t[12]=m,t[13]=h,t[14]=g):g=t[14];let _;t[15]!==p||t[16]!==g?(_=(0,b.jsxs)(`div`,{className:`rw-moment-meta`,children:[p,g]}),t[15]=p,t[16]=g,t[17]=_):_=t[17];let v;return t[18]!==d||t[19]!==_||t[20]!==o?(v=(0,b.jsxs)(b.Fragment,{children:[c,(0,b.jsxs)(`div`,{className:`rw-moment rw-child`,"data-tone":o,style:u,children:[d,_]})]}),t[18]=d,t[19]=_,t[20]=o,t[21]=v):v=t[21],v}var D={hit:`✓`,miss:`✗`,unclear:`—`};function O(e){let t=(0,f.c)(19),{tally:n,grades:r,quote:a}=e,o;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(o={duration:1200},t[0]=o):o=t[0];let s=i(n.hits,o),c;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(c={duration:1200},t[1]=c):c=t[1];let l=i(n.total,c),u;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(u=(0,b.jsx)(`p`,{className:`rw-eyebrow rw-child`,style:w(20),children:`Call record`}),t[2]=u):u=t[2];let d;t[3]===Symbol.for(`react.memo_cache_sentinel`)?(d=w(90),t[3]=d):d=t[3];let p;t[4]!==s||t[5]!==l?(p=(0,b.jsxs)(`p`,{className:`rw-figure rw-child`,style:d,children:[s,`/`,l]}),t[4]=s,t[5]=l,t[6]=p):p=t[6];let m;t[7]===Symbol.for(`react.memo_cache_sentinel`)?(m=(0,b.jsx)(`p`,{className:`rw-figure-label rw-child`,style:w(170),children:`calls graded this week`}),t[7]=m):m=t[7];let h;t[8]===Symbol.for(`react.memo_cache_sentinel`)?(h=w(250),t[8]=h):h=t[8];let g;t[9]===r?g=t[10]:(g=r.map(k),t[9]=r,t[10]=g);let _;t[11]===g?_=t[12]:(_=(0,b.jsx)(`div`,{className:`rw-chips rw-child`,style:h,role:`list`,children:g}),t[11]=g,t[12]=_);let v;t[13]===a?v=t[14]:(v=a&&(0,b.jsxs)(`p`,{className:`rw-quote rw-child`,style:w(330),children:[`“`,a.expected,a.note?` — ${a.note}`:``,`”`,(0,b.jsx)(`span`,{className:`rw-quote-attr`,children:a.dashboardTitle})]}),t[13]=a,t[14]=v);let y;return t[15]!==v||t[16]!==p||t[17]!==_?(y=(0,b.jsxs)(b.Fragment,{children:[u,p,m,_,v]}),t[15]=v,t[16]=p,t[17]=_,t[18]=y):y=t[18],y}function k(e,t){let{grade:n}=e;return(0,b.jsx)(`span`,{className:`rw-chip rw-chip--${n.result}`,role:`listitem`,title:n.expected,children:D[n.result]},`${n.at}-${t}`)}function te(e){let t=(0,f.c)(12),{rewind:n}=e,r;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(r={duration:1400},t[0]=r):r=t[0];let a=i(n.estSavedPerMonth,r),o;t[1]===Symbol.for(`react.memo_cache_sentinel`)?(o=(0,b.jsx)(`p`,{className:`rw-eyebrow rw-child`,style:w(20),children:`If you keep this up`}),t[1]=o):o=t[1];let s;t[2]===Symbol.for(`react.memo_cache_sentinel`)?(s=w(90),t[2]=s):s=t[2];let c;t[3]===a?c=t[4]:(c=(0,b.jsx)(`p`,{className:`rw-figure rw-child`,style:s,children:a}),t[3]=a,t[4]=c);let l;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(l=(0,b.jsx)(`p`,{className:`rw-figure-label rw-child`,style:w(170),children:`searches saved / month`}),t[5]=l):l=t[5];let u;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(u=w(250),t[6]=u):u=t[6];let d;t[7]===n.estSavedPerMonth?d=t[8]:(d=(0,b.jsxs)(`p`,{className:`rw-caption rw-child`,style:u,children:[`Applying Mavéa's suggestions this week is projected to save about `,n.estSavedPerMonth,` `,`searches a month — a rate estimate from real cadence changes, not a count of searches actually skipped this week.`]}),t[7]=n.estSavedPerMonth,t[8]=d);let p;return t[9]!==c||t[10]!==d?(p=(0,b.jsxs)(b.Fragment,{children:[o,c,l,d]}),t[9]=c,t[10]=d,t[11]=p):p=t[11],p}function ne(){let e=(0,f.c)(1),t;return e[0]===Symbol.for(`react.memo_cache_sentinel`)?(t=(0,b.jsx)(`p`,{className:`rw-fallback-text rw-child`,style:w(40),children:`Nothing to look back on yet — come back after a week of checks.`}),e[0]=t):t=e[0],t}function A(e){let t=(0,f.c)(70),{onClose:n}=e,i=(0,d.useRef)(null),s;t[0]===n?s=t[1]:(s={onEscape:n},t[0]=n,t[1]=s),r(i,s);let[l]=(0,d.useState)(ie),u=c(),p=a(),m;t[2]!==u||t[3]!==l?(m=o(u,l),t[2]=u,t[3]=l,t[4]=m):m=t[4];let x=m,S;t[5]!==p||t[6]!==l?(S=h(p,l),t[5]=p,t[6]=l,t[7]=S):S=t[7];let C=S,w;t[8]!==p||t[9]!==l?(w=g(p,l),t[8]=p,t[9]=l,t[10]=w):w=t[10];let E=w,D;t[11]!==p||t[12]!==l?(D=_(p,l),t[11]=p,t[12]=l,t[13]=D):D=t[13];let k=D,A;t[14]!==x||t[15]!==C?(A=v(x,C),t[14]=x,t[15]=C,t[16]=A):A=t[16];let j=A,M;t[17]===j?M=t[18]:(M=y(j),t[17]=j,t[18]=M);let N=M,[P,F]=(0,d.useState)(0),I,L;t[19]===N.length?(I=t[20],L=t[21]):(I=()=>{F(e=>Math.min(e,N.length-1))},L=[N.length],t[19]=N.length,t[20]=I,t[21]=L),(0,d.useEffect)(I,L);let R;t[22]===Symbol.for(`react.memo_cache_sentinel`)?(R=()=>F(re),t[22]=R):R=t[22];let z=R,B;t[23]===N.length?B=t[24]:(B=()=>F(e=>Math.min(N.length-1,e+1)),t[23]=N.length,t[24]=B);let V=B,H;t[25]===V?H=t[26]:(H=e=>{e.key===`ArrowRight`||e.key===` `?(e.preventDefault(),V()):e.key===`ArrowLeft`&&(e.preventDefault(),z())},t[25]=V,t[26]=H);let U=H,W=N.length>1,G;t[27]!==W||t[28]!==P||t[29]!==N.length?(G=W&&(0,b.jsxs)(`span`,{className:`rw-counter`,"aria-live":`polite`,children:[P+1,` of `,N.length]}),t[27]=W,t[28]=P,t[29]=N.length,t[30]=G):G=t[30];let K;t[31]===n?K=t[32]:(K=(0,b.jsx)(`button`,{type:`button`,className:`rw-close`,onClick:n,"aria-label":`Close`,children:`×`}),t[31]=n,t[32]=K);let q;t[33]!==G||t[34]!==K?(q=(0,b.jsxs)(`div`,{className:`rw-chrome`,children:[G,K]}),t[33]=G,t[34]=K,t[35]=q):q=t[35];let J;t[36]!==W||t[37]!==P?(J=W&&(0,b.jsx)(`button`,{type:`button`,className:`rw-zone rw-zone--prev`,"aria-label":`Previous slide`,onClick:z,disabled:P===0}),t[36]=W,t[37]=P,t[38]=J):J=t[38];let Y;if(t[39]!==E||t[40]!==P||t[41]!==k||t[42]!==x||t[43]!==N||t[44]!==C){let e;t[46]!==E||t[47]!==P||t[48]!==k||t[49]!==x||t[50]!==C?(e=(e,t)=>(0,b.jsxs)(`div`,{className:`rw-slide`,"data-active":t===P||void 0,children:[e===`searches`&&(0,b.jsx)(T,{rewind:x}),e===`moment`&&(0,b.jsx)(ee,{rewind:x}),e===`calls`&&(0,b.jsx)(O,{tally:C,grades:E,quote:k}),e===`saved`&&(0,b.jsx)(te,{rewind:x}),e===`fallback`&&(0,b.jsx)(ne,{})]},e),t[46]=E,t[47]=P,t[48]=k,t[49]=x,t[50]=C,t[51]=e):e=t[51],Y=N.map(e),t[39]=E,t[40]=P,t[41]=k,t[42]=x,t[43]=N,t[44]=C,t[45]=Y}else Y=t[45];let X;t[52]!==W||t[53]!==V||t[54]!==P||t[55]!==N.length?(X=W&&(0,b.jsx)(`button`,{type:`button`,className:`rw-zone rw-zone--next`,"aria-label":`Next slide`,onClick:V,disabled:P===N.length-1}),t[52]=W,t[53]=V,t[54]=P,t[55]=N.length,t[56]=X):X=t[56];let Z;t[57]!==J||t[58]!==Y||t[59]!==X?(Z=(0,b.jsxs)(`div`,{className:`rw-stage`,children:[J,Y,X]}),t[57]=J,t[58]=Y,t[59]=X,t[60]=Z):Z=t[60];let Q;t[61]!==W||t[62]!==P||t[63]!==N?(Q=W&&(0,b.jsx)(`div`,{className:`rw-dots`,children:N.map((e,t)=>(0,b.jsx)(`button`,{type:`button`,className:`rw-dot`,"data-active":t===P||void 0,"aria-label":`Go to slide ${t+1} of ${N.length}`,onClick:()=>F(t)},e))}),t[61]=W,t[62]=P,t[63]=N,t[64]=Q):Q=t[64];let $;return t[65]!==U||t[66]!==q||t[67]!==Z||t[68]!==Q?($=(0,b.jsxs)(`div`,{className:`rw-overlay`,ref:i,role:`dialog`,"aria-modal":`true`,"aria-label":`Weekly Rewind`,tabIndex:-1,onKeyDown:U,children:[q,Z,Q]}),t[65]=U,t[66]=q,t[67]=Z,t[68]=Q,t[69]=$):$=t[69],$}function re(e){return Math.max(0,e-1)}function ie(){return Date.now()}export{A as RewindOverlay};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.rw-overlay{z-index:60;background:radial-gradient(120% 90% at 50% -10%, color-mix(in oklab, var(--presence) 10%, transparent), transparent 60%), var(--surface-deep);color:var(--text-primary);outline:none;flex-direction:column;display:flex;position:fixed;inset:0}.rw-chrome{flex:none;justify-content:flex-end;align-items:center;gap:16px;padding:18px 22px;display:flex}.rw-counter{font-family:var(--font-data,var(--font));letter-spacing:.08em;text-transform:uppercase;color:var(--text-muted);margin-right:auto;font-size:11px}.rw-close{border:1px solid var(--line);border-radius:var(--r-full);background:var(--surface-glass);width:34px;height:34px;color:var(--text-secondary);cursor:pointer;transition:color var(--m-fast) var(--ease-out), border-color var(--m-fast) var(--ease-out);flex:none;font-size:19px;line-height:1}.rw-close:hover{color:var(--text-primary);border-color:var(--line-strong)}.rw-stage{flex:auto;min-height:0;position:relative;overflow:hidden}.rw-zone{cursor:pointer;z-index:2;background:0 0;border:none;width:32%;position:absolute;top:0;bottom:0}.rw-zone--prev{left:0}.rw-zone--next{right:0}.rw-zone:disabled{cursor:default}.rw-slide{text-align:center;opacity:0;transition:opacity var(--m-expressive) var(--ease-out), transform var(--m-expressive) var(--ease-out);pointer-events:none;scrollbar-gutter:stable;flex-direction:column;justify-content:center;align-items:center;gap:14px;padding:48px max(6vw,24px);display:flex;position:absolute;inset:0;overflow:hidden auto;transform:translateY(16px)}.rw-slide[data-active]{opacity:1;pointer-events:auto;z-index:1;transform:translateY(0)}@keyframes rw-reveal{0%{transform:translateY(10px)}to{transform:translateY(0)}}.rw-child{transform:translateY(10px)}.rw-slide[data-active] .rw-child{animation:rw-reveal var(--m-expressive) var(--ease-out) both;animation-delay:var(--d,0s)}.rw-eyebrow{font-family:var(--font-data,var(--font));letter-spacing:.18em;text-transform:uppercase;color:var(--text-muted);margin:0;font-size:12px;font-weight:600}.rw-figure{font-family:var(--font-data,var(--font));letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--presence-soft);margin:0;font-size:clamp(56px,14vw,128px);font-weight:700;line-height:1}.rw-figure-label{letter-spacing:.02em;text-transform:uppercase;color:var(--text-secondary);margin:0;font-size:15px}.rw-caption{max-width:46ch;color:var(--text-secondary);overflow-wrap:break-word;margin:8px 0 0;font-size:15px;line-height:1.6}.rw-bars{align-items:flex-end;gap:10px;margin-top:12px;display:flex}.rw-bar{flex-direction:column;align-items:center;gap:8px;width:30px;display:flex}.rw-bar-track{align-items:flex-end;width:100%;height:96px;display:flex}.rw-bar-fill{background:var(--presence);border-radius:3px 3px 0 0;width:100%;min-height:2px}.rw-bar-day{font-family:var(--font-data,var(--font));color:var(--text-muted);font-size:11px}.rw-moment{border-radius:var(--r-lg);border:1px solid var(--line);border-left:3px solid var(--tone,var(--presence));background:var(--surface-elevated);width:min(100%,640px);box-shadow:var(--shadow-modal);text-align:left;padding:26px 28px}.rw-moment[data-tone=presence]{--tone:var(--presence)}.rw-moment[data-tone=insight]{--tone:var(--insight)}.rw-moment[data-tone=danger]{--tone:var(--danger)}.rw-moment[data-tone=plain]{--tone:var(--text-muted)}.rw-moment-text{font-family:var(--font-voice,var(--font));color:var(--text-primary);overflow-wrap:break-word;margin:0 0 14px;font-size:clamp(18px,2.6vw,24px);font-style:italic;line-height:1.5}.rw-moment-meta{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.rw-moment-chip{font-family:var(--font-data,var(--font));letter-spacing:.06em;border-radius:var(--r-full);color:var(--tone,var(--presence));background:color-mix(in oklab, var(--tone,var(--presence)) 16%, transparent);border:1px solid color-mix(in oklab, var(--tone,var(--presence)) 40%, transparent);padding:3px 9px;font-size:10px;font-weight:700}.rw-moment-time{font-family:var(--font-data,var(--font));color:var(--text-muted);font-size:11.5px}.rw-chips{flex-wrap:wrap;justify-content:center;gap:7px;max-width:560px;display:flex}.rw-chip{border-radius:var(--r-full);cursor:default;justify-content:center;align-items:center;width:26px;height:26px;font-size:13px;font-weight:700;display:inline-flex}.rw-chip--hit{color:var(--insight);background:color-mix(in oklab, var(--insight) 16%, transparent);border:1px solid color-mix(in oklab, var(--insight) 40%, transparent)}.rw-chip--miss{color:var(--danger);background:color-mix(in oklab, var(--danger) 16%, transparent);border:1px solid color-mix(in oklab, var(--danger) 40%, transparent)}.rw-chip--unclear{color:var(--warning);background:color-mix(in oklab, var(--warning) 16%, transparent);border:1px solid color-mix(in oklab, var(--warning) 40%, transparent)}.rw-quote{max-width:52ch;font-family:var(--font-voice,var(--font));color:var(--text-secondary);overflow-wrap:break-word;margin:6px 0 0;font-size:17px;font-style:italic;line-height:1.6}.rw-quote-attr{font-family:var(--font-data,var(--font));letter-spacing:.04em;text-transform:uppercase;color:var(--text-muted);margin-top:8px;font-size:11px;font-style:normal;display:block}.rw-fallback-text{max-width:44ch;color:var(--text-secondary);overflow-wrap:break-word;font-size:19px;line-height:1.6}.rw-dots{flex:none;justify-content:center;align-items:center;gap:8px;padding:0 0 26px;display:flex}.rw-dot{border-radius:var(--r-full);background:var(--line-strong);cursor:pointer;width:7px;height:7px;transition:background var(--m-fast) var(--ease-out), transform var(--m-fast) var(--ease-out);border:none;padding:0}.rw-dot[data-active]{background:var(--presence);transform:scale(1.3)}@media (prefers-reduced-motion:reduce){.rw-slide{transition:none}.rw-child{animation:none;transform:none}.rw-dot{transition:none}}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/RippleOverlay-DMHLbfh8.js","assets/index-y8GL67bB.js","assets/chunk-BVpWp9h4.js","assets/jsx-runtime-DaSxXjOY.js","assets/react-BQSORdFI.js","assets/lazyRetry-D50B1UMY.js","assets/index-CepQEz75.css","assets/useSpatialCanvas-DogK9457.js","assets/FeatureUseNotice-DPtQ0OGb.js","assets/FeatureUseNotice-CWt7gOwS.css","assets/cache-BumECILO.js","assets/colors-D49Req-e.js","assets/courseStore-DfafnL-9.js","assets/githubToken-DtcLYqwm.js","assets/keyVault-DEsNh9FR.js","assets/useFocusTrap-DbfG6zbM.js","assets/RippleOverlay-_iiZsQVZ.css","assets/useLiveConfig-X9Wxh90k.js","assets/providers-wzm7E8Pa.js","assets/http-CJCtjYpA.js","assets/info-CiqHR5cs.js","assets/kokoro-D4GKpSL0.js","assets/spokenText-D4zPX9JY.js"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{t as n}from"./lazyRetry-D50B1UMY.js";import{I as r,J as i,M as a,N as o,k as s,o as c,q as l}from"./index-y8GL67bB.js";import{t as u}from"./homeTarget-BgWKI_E1.js";var d=e(),f=t();i();var p=r(()=>l(()=>import(`./RippleOverlay-DMHLbfh8.js`).then(e=>({default:e.RippleOverlay})),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]))),m=p.Component,h=n(()=>l(()=>import(`./seed-b1xc0dj2.js`),[]));function g(){(0,d.useEffect)(()=>a(o()),[]);let[e,t]=(0,d.useState)(null);(0,d.useEffect)(()=>{let e=!0;return p.preload().catch(()=>{}),h().then(({SEED_SHIP:n})=>{e&&t(n)}),()=>{e=!1}},[]);let[n,r]=(0,d.useState)(null);(0,d.useEffect)(()=>{let e=!0,t=window.setTimeout(()=>{l(async()=>{let{getLiveConfigV2:e,toModelConfig:t}=await import(`./useLiveConfig-X9Wxh90k.js`).then(e=>e.d);return{getLiveConfigV2:e,toModelConfig:t}},__vite__mapDeps([17,2,1,3,4,5,6,18,19,20,14])).then(({getLiveConfigV2:t,toModelConfig:n})=>{if(!e)return;let i=n(t());r(i.apiKey?i:null)})},250);return()=>{e=!1,window.clearTimeout(t)}},[]);let i=(0,d.useCallback)(e=>{l(()=>import(`./kokoro-D4GKpSL0.js`).then(e=>e._).then(t=>t.speak(e,`mavea`)),__vite__mapDeps([21,2,1,3,4,5,6,22]))},[]);return e?(0,f.jsx)(s,{label:`Ripple overview`,children:(0,f.jsx)(m,{model:e,cfg:n,speak:i,onClose:()=>{window.location.hash=u().href}})}):(0,f.jsx)(c,{})}export{g as RippleApp};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ripple-ask-rail{border-left:1px solid var(--line);background:var(--surface-deep);width:min(360px,34vw);min-height:0;animation:ripple-ask-in var(--m-med,.22s) var(--ease-out);flex-direction:column;flex:none;display:flex}@keyframes ripple-ask-in{0%{opacity:0;transform:translate(10px)}}@media (prefers-reduced-motion:reduce){.ripple-ask-rail{animation:none}}.ripple-ask-head{border-bottom:1px solid var(--line);flex:none;justify-content:space-between;align-items:center;padding:10px 12px;display:flex}.ripple-ask-title{color:var(--text-primary);align-items:center;gap:8px;font-size:13px;font-weight:700;display:inline-flex}.ripple-ask-spark{background:var(--presence);width:8px;height:8px;box-shadow:0 0 10px color-mix(in oklab, var(--presence) 70%, transparent);border-radius:50%}.ripple-ask-min{appearance:none;color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-radius:6px;padding:4px 6px;font-size:13px;line-height:1}.ripple-ask-min:hover{color:var(--text-primary);background:var(--surface-elevated)}.ripple-ask-empty-state{color:var(--text-muted);padding:16px;font-size:12.5px;line-height:1.5}.ripple-ask-empty-state p{margin:0}.ripple-ask-chips{border-bottom:1px solid var(--line);flex-wrap:wrap;flex:none;gap:6px;padding:10px 12px;display:flex}.ripple-ask-preset{appearance:none;cursor:pointer;font:inherit;letter-spacing:.01em;color:color-mix(in oklab, var(--presence) 70%, var(--text-secondary));background:color-mix(in oklab, var(--presence) 9%, var(--surface-elevated));border:1px solid color-mix(in oklab, var(--presence) 28%, transparent);border-radius:999px;padding:5px 10px;font-size:11px;font-weight:600;transition:background .15s,color .15s}.ripple-ask-preset:hover:not(:disabled){background:color-mix(in oklab, var(--presence) 20%, var(--surface-elevated));color:var(--text-primary)}.ripple-ask-preset:disabled{opacity:.5;cursor:default}.ripple-ask-thread{scrollbar-gutter:stable;flex-direction:column;flex:1;gap:14px;min-height:0;padding:12px;display:flex;overflow-y:auto}.ripple-ask-empty{color:var(--text-muted);margin:0;font-size:12.5px;line-height:1.5}.ripple-ask-turn{flex-direction:column;gap:7px;display:flex}.ripple-ask-q{max-width:92%;color:var(--text-primary);background:color-mix(in oklab, var(--presence) 16%, var(--surface-elevated));border:1px solid color-mix(in oklab, var(--presence) 28%, transparent);border-radius:12px 12px 3px;align-self:flex-end;margin:0;padding:7px 11px;font-size:12.5px;line-height:1.4}.ripple-ask-pending{color:var(--text-secondary);align-items:center;gap:8px;margin:0;font-size:12px;display:inline-flex}.ripple-ask-dot{background:var(--presence);border-radius:50%;width:7px;height:7px;animation:1.1s ease-in-out infinite ripple-ask-pulse}@keyframes ripple-ask-pulse{0%,to{opacity:.3;transform:scale(.8)}50%{opacity:1;transform:scale(1)}}@media (prefers-reduced-motion:reduce){.ripple-ask-dot{animation:none}}.ripple-ask-err{color:color-mix(in oklab, var(--danger) 80%, var(--text-primary));margin:0;font-size:12px}.ripple-ask-a{flex-direction:column;gap:8px;display:flex}.ripple-ask-cover{letter-spacing:.06em;text-transform:uppercase;color:color-mix(in oklab, var(--cover-color) 85%, #fff);background:color-mix(in oklab, var(--cover-color) 14%, transparent);border:1px solid color-mix(in oklab, var(--cover-color) 34%, transparent);border-radius:999px;align-self:flex-start;align-items:center;gap:6px;padding:3px 9px;font-size:9.5px;font-weight:600;display:inline-flex}.ripple-ask-cover[data-coverage=none]{border-style:dashed}.ripple-ask-cover-dot{background:var(--cover-color);border-radius:50%;width:6px;height:6px}.ripple-ask-text{color:var(--text-secondary);margin:0;font-size:13px;line-height:1.5}.ripple-ask-cites{flex-wrap:wrap;gap:6px;display:flex}.ripple-ask-cite{letter-spacing:.01em;color:color-mix(in oklab, var(--presence) 70%, var(--text-secondary));background:color-mix(in oklab, var(--presence) 10%, var(--surface-elevated));border:1px solid color-mix(in oklab, var(--presence) 34%, transparent);border-radius:999px;padding:3px 9px;font-size:11px;font-weight:600;text-decoration:none;display:inline-block}a.ripple-ask-cite:hover{background:color-mix(in oklab, var(--presence) 22%, var(--surface-elevated));color:var(--text-primary)}.ripple-ask-cite[data-unpinned=true]{color:var(--text-muted);border-style:dashed;border-color:var(--line-strong);background:0 0}.ripple-ask-form{border-top:1px solid var(--line);background:var(--surface-deep);flex:none;align-items:flex-end;gap:8px;padding:10px;display:flex}.ripple-ask-input{resize:none;max-height:96px;font:inherit;color:var(--text-primary);background:var(--surface-elevated);border:1px solid var(--line-strong);border-radius:9px;flex:1;padding:8px 10px;font-size:13px;line-height:1.4}.ripple-ask-input::placeholder{color:var(--text-muted)}.ripple-ask-input:focus{border-color:color-mix(in oklab, var(--presence) 55%, transparent);box-shadow:0 0 0 3px color-mix(in oklab, var(--presence) 18%, transparent);outline:none}.ripple-ask-send{appearance:none;cursor:pointer;border:1px solid color-mix(in oklab, var(--presence) 40%, transparent);background:color-mix(in oklab, var(--presence) 22%, var(--surface-elevated));width:34px;height:34px;color:var(--text-primary);border-radius:9px;flex:none;font-size:15px;line-height:1}.ripple-ask-send:hover:not(:disabled){background:color-mix(in oklab, var(--presence) 36%, var(--surface-elevated))}.ripple-ask-send:disabled{opacity:.4;cursor:default}@media (width<=720px){.ripple-ask-rail{border-left:none;border-top:1px solid var(--line-strong);border-radius:var(--r-lg) var(--r-lg) 0 0;width:auto;max-height:min(72vh,560px);box-shadow:var(--shadow-modal);z-index:9;animation:ripple-ask-sheet-in var(--m-med,.22s) var(--ease-out);position:fixed;inset:auto 0 0}@keyframes ripple-ask-sheet-in{0%{transform:translateY(100%)}}}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import{t as e}from"./react-BQSORdFI.js";import{t}from"./jsx-runtime-DaSxXjOY.js";import{ht as n}from"./index-y8GL67bB.js";import{t as r}from"./providers-wzm7E8Pa.js";import{r as i}from"./githubBrowser-DywfDeYx.js";import{t as a}from"./json-B0N3XRZU.js";import{n as o}from"./verbatim-CBMzUDlf.js";import{t as s}from"./links--u_phi0x.js";var c=e(),l=n(),u=t(),d={full:{label:`grounded in the repo`,token:`var(--insight)`},partial:{label:`partly grounded`,token:`var(--warning)`},none:{label:`not covered by what Ripple has read`,token:`var(--text-muted)`}},f={newgrad:[`Explain this repo like I’m new`,`Where should I start reading?`],working:[`What’s the blast radius of this change?`,`What would I need to know to review this?`],principal:[`What’s the crux here?`,`What would a principal push back on?`]};function p(e){let t=e.file?e.file.split(`/`).pop()??e.file:`source`;return e.unpinned?`${t} · unverified`:t}function m(e){let t=(0,l.c)(26),{open:n,onClose:r,turns:i,busy:a,onAsk:o,altitude:m,hasModel:g,seed:_,repo:v,gitRef:y,focusFile:b}=e,[x,S]=(0,c.useState)(``),C=(0,c.useRef)(null),w=(0,c.useRef)(null),T;t[0]===Symbol.for(`react.memo_cache_sentinel`)?(T=()=>{let e=C.current;e&&(e.scrollTop=e.scrollHeight)},t[0]=T):T=t[0];let E;t[1]===i?E=t[2]:(E=[i],t[1]=i,t[2]=E),(0,c.useEffect)(T,E);let D,O;t[3]===_?(D=t[4],O=t[5]):(D=()=>{_&&(S(_.text),w.current?.focus())},O=[_],t[3]=_,t[4]=D,t[5]=O),(0,c.useEffect)(D,O);let k;t[6]!==a||t[7]!==x||t[8]!==o?(k=e=>{let t=(e??x).trim();!t||a||(o(t),S(``))},t[6]=a,t[7]=x,t[8]=o,t[9]=k):k=t[9];let A=k,j=h;if(!n)return null;let M;t[10]===Symbol.for(`react.memo_cache_sentinel`)?(M=(0,u.jsxs)(`span`,{className:`ripple-ask-title`,children:[(0,u.jsx)(`span`,{className:`ripple-ask-spark`,"aria-hidden":`true`}),`Ask`]}),t[10]=M):M=t[10];let N;t[11]===r?N=t[12]:(N=(0,u.jsxs)(`header`,{className:`ripple-ask-head`,children:[M,(0,u.jsx)(`button`,{type:`button`,className:`ripple-ask-min`,onClick:r,"aria-label":`Collapse the ask rail`,children:`✕`})]}),t[11]=r,t[12]=N);let P;t[13]!==m||t[14]!==a||t[15]!==x||t[16]!==b||t[17]!==y||t[18]!==g||t[19]!==v||t[20]!==A||t[21]!==i?(P=g?(0,u.jsxs)(u.Fragment,{children:[(0,u.jsxs)(`div`,{className:`ripple-ask-chips`,role:`group`,"aria-label":`Suggested questions`,children:[f[m].map(e=>(0,u.jsx)(`button`,{type:`button`,className:`ripple-ask-preset`,onClick:()=>A(e),disabled:a,children:e},e)),b&&(0,u.jsxs)(`button`,{type:`button`,className:`ripple-ask-preset`,onClick:()=>A(`What breaks if I change ${b}?`),disabled:a,children:[`What breaks if I change `,b,`?`]})]}),(0,u.jsxs)(`div`,{className:`ripple-ask-thread`,ref:C,children:[i.length===0&&(0,u.jsx)(`p`,{className:`ripple-ask-empty`,children:`Ask anything about this repo or PR. The answer cites real files — and says so honestly when nothing gathered addresses it.`}),i.map(e=>(0,u.jsxs)(`div`,{className:`ripple-ask-turn`,children:[(0,u.jsx)(`p`,{className:`ripple-ask-q`,children:e.question}),e.status===`pending`&&(0,u.jsxs)(`p`,{className:`ripple-ask-pending`,children:[(0,u.jsx)(`span`,{className:`ripple-ask-dot`,"aria-hidden":`true`}),`Reading the repo…`]}),e.status===`error`&&(0,u.jsx)(`p`,{className:`ripple-ask-err`,children:e.error}),e.status===`done`&&e.answer&&(0,u.jsxs)(`div`,{className:`ripple-ask-a`,children:[(0,u.jsxs)(`span`,{className:`ripple-ask-cover`,"data-coverage":e.answer.coverage,style:{"--cover-color":d[e.answer.coverage].token},children:[(0,u.jsx)(`span`,{className:`ripple-ask-cover-dot`,"aria-hidden":`true`}),d[e.answer.coverage].label]}),e.answer.text&&(0,u.jsx)(`p`,{className:`ripple-ask-text`,children:e.answer.text}),e.answer.citations.length>0&&(0,u.jsx)(`div`,{className:`ripple-ask-cites`,role:`group`,"aria-label":`Sources`,children:e.answer.citations.map((e,t)=>{let n=e.unpinned?null:s(v,y,e.file),r=p(e),i=`${e.file}\n“${e.quote}”`;return n?(0,u.jsxs)(`a`,{className:`ripple-ask-cite`,href:n,target:`_blank`,rel:`noopener noreferrer`,title:i,children:[r,` ↗`]},`${e.file}:${t}`):(0,u.jsx)(`span`,{className:`ripple-ask-cite`,"data-unpinned":e.unpinned?`true`:void 0,title:i,children:r},`${e.file}:${t}`)})})]})]},e.id))]}),(0,u.jsxs)(`form`,{className:`ripple-ask-form`,onSubmit:e=>{e.preventDefault(),A()},children:[(0,u.jsx)(`textarea`,{ref:w,className:`ripple-ask-input`,value:x,onChange:e=>S(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&(e.preventDefault(),A())},rows:1,placeholder:a?`Reading the repo…`:`Ask about this repo or PR…`,"aria-label":`Ask about this repo or PR`}),(0,u.jsx)(`button`,{type:`submit`,className:`ripple-ask-send`,disabled:a||x.trim().length===0,"aria-label":`Ask`,children:`↵`})]})]}):(0,u.jsx)(`div`,{className:`ripple-ask-empty-state`,children:(0,u.jsx)(`p`,{children:`Connect a model in Settings → Live to ask questions about this repo.`})}),t[13]=m,t[14]=a,t[15]=x,t[16]=b,t[17]=y,t[18]=g,t[19]=v,t[20]=A,t[21]=i,t[22]=P):P=t[22];let F;return t[23]!==N||t[24]!==P?(F=(0,u.jsxs)(`section`,{className:`ripple-ask-rail`,"aria-label":`Ask`,onPointerDown:j,onWheel:j,onClick:j,children:[N,P]}),t[23]=N,t[24]=P,t[25]=F):F=t[25],F}function h(e){return e.stopPropagation()}var g=3,_=3e3,v=6e3,y=40,b=40,x=30,S=12,C=6;function w(e,t){return`${e}::${t}`}function T(e,t,n=new Set,r=g){let i=Array.from(new Set(t.toLowerCase().match(/[a-z0-9]{4,}/g)??[]));return i.length===0?[]:e.map((e,t)=>({p:e,i:t})).filter(({p:e})=>!n.has(e)).map(({p:e,i:t})=>{let n=e.toLowerCase();return{p:e,i:t,score:i.reduce((e,t)=>e+ +!!n.includes(t),0)}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score||e.i-t.i).slice(0,r).map(e=>e.p)}async function E(e,t){if(!e.repo||!e.treePaths?.length)return;let n=T(e.treePaths,t,new Set(e.fileCache.keys()));if(n.length===0)return;let r=await Promise.all(n.map(t=>i(t,e.gitRef,e.repo).catch(()=>({ok:!1}))));e.signal?.aborted||r.forEach((t,r)=>{t.ok&&t.content&&e.fileCache.set(n[r],t.content.slice(0,_))})}function D(e,t){let n=[],r=e.pr;return n.push(`REPO: ${r.repo}${r.title?` — ${r.title}`:``}`),r.summary&&n.push(`SUMMARY: ${r.summary}`),r.risks.length&&n.push(`RISKS:\n${r.risks.slice(0,S).map(e=>`- [${e.level}] ${e.text}`).join(`
|
|
2
|
+
`)}`),e.changes.length&&n.push(`CHANGES (${e.changes.length}):\n${e.changes.slice(0,y).map(e=>`- ${e.file} [${e.kind}/${e.risk}]: ${e.intent}${e.why?` — ${e.why}`:``}`).join(`
|
|
3
|
+
`)}`),e.nodes.length&&n.push(`SYSTEM NODES (${e.nodes.length}):\n${e.nodes.slice(0,b).map(e=>{let t=[e.contract,e.problem,e.fix].filter(Boolean).join(` | `);return`- ${e.label}${e.sub?` (${e.sub})`:``}${t?`: ${t}`:``}`}).join(`
|
|
4
|
+
`)}`),e.modules.length&&n.push(`MODULES (${e.modules.length}):\n${e.modules.slice(0,x).map(e=>`- ${e.name}: ${[e.purpose,e.explain].filter(Boolean).join(` `)}`.trim()).join(`
|
|
5
|
+
`)}`),e.courses?.length&&n.push(`COURSES:\n${e.courses.map(e=>{let n=e.lessons.map(n=>{let r=t?.get(w(e.title,n.title)),i=r?` — ${r.overview.slice(0,240)}`:``;return` · ${n.title}: ${n.goal}${i}`}).join(`
|
|
6
|
+
`);return`- ${e.title}${e.subtitle?` — ${e.subtitle}`:``}\n${n}`}).join(`
|
|
7
|
+
`)}`),n.join(`
|
|
8
|
+
|
|
9
|
+
`)}var O=`You answer a question about a code repository / pull request strictly from the material given — the grounded facts, the diff, and any real file excerpts — quoting verbatim when you cite a file, and return strict JSON only. You never invent a file, quote, or fact; when the material does not address the question you say so plainly.`,k={newgrad:`Answer for someone brand-new to this codebase: spell out jargon, orient them, connect the dots explicitly. A little more length is fine if it teaches.`,working:`Answer for an engineer with a few years of experience who knows the codebase’s shape but not this specific area: be direct, skip the basics, name the real mechanism.`,principal:`Answer for a principal engineer: get straight to the crux and the tradeoffs. Skip orientation entirely.`};function A(e,t,n,r,i){let a=[`REPO FACTS:\n${n||`(nothing gathered yet)`}`];if(r&&a.push(`DIFF:\n${r.slice(0,v)}`),i.size>0){let e=Array.from(i.entries()).map(([e,t])=>`FILE ${e}:\n${t}`).join(`
|
|
10
|
+
|
|
11
|
+
`);a.push(`FILE EXCERPTS:\n${e}`)}return`${a.join(`
|
|
12
|
+
|
|
13
|
+
`)}
|
|
14
|
+
|
|
15
|
+
${k[t]}
|
|
16
|
+
|
|
17
|
+
QUESTION: ${e}
|
|
18
|
+
|
|
19
|
+
Return ONLY a JSON object (no prose, no fences):
|
|
20
|
+
{
|
|
21
|
+
"answer": "a direct answer drawn STRICTLY from the material above, at the depth the guidance above asks for",
|
|
22
|
+
"coverage": "full|partial|none",
|
|
23
|
+
"citations": [ { "file": "the real path this came from", "quote": "the exact text copied VERBATIM from that file's excerpt or the diff" } ]
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
Rules:
|
|
27
|
+
- Use ONLY the material above. Never invent a file, fact, or quote.
|
|
28
|
+
- Every "quote" MUST be copied character-for-character from the named file's excerpt or the diff (it
|
|
29
|
+
is verified before it can show as grounded — anything not found verbatim is still shown, but
|
|
30
|
+
labeled honestly rather than presented as a real quote).
|
|
31
|
+
- "coverage": "full" if the material fully answers the question; "partial" if only part of it does;
|
|
32
|
+
"none" if the material doesn't address it at all.
|
|
33
|
+
- If nothing above addresses the question, set "coverage":"none", give a brief honest answer saying
|
|
34
|
+
so, and return "citations": [].`}function j(e){return typeof e==`string`?e:``}function M(e){let t=String(e??``).toLowerCase().trim();return t===`full`||t===`partial`||t===`none`?t:`partial`}function N(e,t,n){if(!Array.isArray(e))return[];let r=[],i=new Set;for(let a of e){if(!a||typeof a!=`object`)continue;let e=a,s=j(e.file).trim(),c=j(e.quote).trim();if(!c)continue;let l=`${s}:${c.replace(/\s+/g,` `).toLowerCase()}`;if(i.has(l))continue;i.add(l);let u=s?t.get(s):void 0,d=!!u&&o(c,u)||!!n&&o(c,n);if(r.push(d?{file:s,quote:c}:{file:s,quote:c,unpinned:!0}),r.length>=C)break}return r}async function P(e,t){let n=e.trim();if(!n||(await E(t,n).catch(()=>void 0),t.signal?.aborted))return{text:``,coverage:`none`,citations:[]};let i=D(t.model,t.lessonDetails),o=t.diffText??``,s;try{s=(await r(t.cfg.provider).generate({system:O,history:[],user:A(n,t.altitude,i,o,t.fileCache),maxTokens:1e3,temperature:0,format:null,...t.signal?{signal:t.signal}:{}},t.cfg)).raw}catch(e){return e instanceof DOMException&&e.name===`AbortError`?{text:``,coverage:`none`,citations:[]}:{text:`Couldn’t reach the model just now.`,coverage:`none`,citations:[]}}if(t.signal?.aborted)return{text:``,coverage:`none`,citations:[]};let c=a(s),l=j(c?.answer).trim(),u=M(c?.coverage),d=N(c?.citations,t.fileCache,o);return l?{text:l,coverage:u,citations:d}:{text:`I couldn’t find this addressed in the repo.`,coverage:`none`,citations:[]}}function F(e,t){let[n,r]=(0,c.useState)([]),[i,a]=(0,c.useState)(!1),o=(0,c.useRef)(e);o.current=e;let s=(0,c.useRef)(t);s.current=t;let l=(0,c.useRef)(null),u=(0,c.useRef)(!1),d=(0,c.useRef)(0),f=(0,c.useCallback)(()=>{l.current?.abort(),l.current=null,u.current=!1,a(!1),r([])},[]);return(0,c.useEffect)(()=>()=>l.current?.abort(),[]),{turns:n,busy:i,ask:(0,c.useCallback)(e=>{if(u.current)return;let t=e.trim(),n=o.current;if(!t||!n)return;let i=new AbortController;l.current=i,u.current=!0,a(!0);let c=`q${d.current+=1}`;r(e=>[...e,{id:c,question:t,status:`pending`}]),P(t,{...n,signal:i.signal}).then(e=>{i.signal.aborted||(u.current=!1,a(!1),r(t=>t.map(t=>t.id===c?{...t,status:`done`,answer:e}:t)),s.current?.(e,t))}).catch(e=>{if(i.signal.aborted)return;u.current=!1,a(!1);let t=e instanceof Error?e.message:`Could not answer.`;r(e=>e.map(e=>e.id===c?{...e,status:`error`,error:t}:e))})},[]),reset:f}}function I(e){let t=(0,l.c)(11),{ctx:n,onClose:r,altitude:i,seed:a,repo:o,gitRef:s,focusFile:c}=e,{turns:d,busy:f,ask:p}=F(n),h=!!n,g;return t[0]!==i||t[1]!==p||t[2]!==f||t[3]!==c||t[4]!==s||t[5]!==r||t[6]!==o||t[7]!==a||t[8]!==h||t[9]!==d?(g=(0,u.jsx)(m,{open:!0,onClose:r,turns:d,busy:f,onAsk:p,altitude:i,hasModel:h,seed:a,repo:o,gitRef:s,focusFile:c}),t[0]=i,t[1]=p,t[2]=f,t[3]=c,t[4]=s,t[5]=r,t[6]=o,t[7]=a,t[8]=h,t[9]=d,t[10]=g):g=t[10],g}export{I as RippleAskController};
|
|
@@ -0,0 +1,6 @@
|
|
|
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-BVNgQT6L.js","assets/index-y8GL67bB.js","assets/jsx-runtime-DaSxXjOY.js","assets/react-BQSORdFI.js","assets/lazyRetry-D50B1UMY.js","assets/index-CepQEz75.css","assets/ShipIncident-DcmindmE.js","assets/ShipIncident-BUHvFFiC.css","assets/ShipWorkspace-3D3Rrs1p.js","assets/colors-D49Req-e.js","assets/ShipWorkspace-D6XQpGEN.css","assets/ShipCascade-BUtwvQoW.js","assets/ShipCascade-CyFnrlET.css","assets/ShipMigration-s0hVjDQl.js","assets/ShipMigration-BznCskNg.css","assets/ShipRollout-BdUQzMyP.js","assets/ShipRollout-CqeObx5b.css","assets/ShipCourse-B7lG6DYW.js","assets/courseStore-DfafnL-9.js","assets/links--u_phi0x.js","assets/DropSelect-DUhdQSta.js","assets/store-DXmC_fP2.js","assets/ShipCourse-DcT7PUSm.css","assets/ShipOnboarding-ekbHL7OH.js","assets/ShipOnboarding-BC9Vxkpa.css","assets/ShipHotspots-Bj2CovtT.js","assets/ShipHotspots-CLOMutPv.css","assets/ShipSuggestions-B6fKYh8L.js","assets/ShipSuggestions-BKRvk5Mj.css","assets/ShipGate-BYYu9WVq.js","assets/ShipGate-BVZfCllb.css","assets/RippleAskController-CO9wE7hU.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-y8GL67bB.js";import{t as c}from"./useFocusTrap-DbfG6zbM.js";import{t as l}from"./FeatureUseNotice-DPtQ0OGb.js";import{t as u}from"./useSpatialCanvas-DogK9457.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-BVNgQT6L.js`).then(e=>({default:e.ShipRead})),__vite__mapDeps([12,13,2,14,15,16,17]))),je=n(()=>s(()=>import(`./ShipIncident-DcmindmE.js`).then(e=>({default:e.ShipIncident})),__vite__mapDeps([18,13,2,14,15,16,17,19]))),Me=n(()=>s(()=>import(`./ShipWorkspace-3D3Rrs1p.js`).then(e=>({default:e.ShipWorkspace})),__vite__mapDeps([20,13,2,14,15,16,17,21,22]))),Ne=n(()=>s(()=>import(`./ShipCascade-BUtwvQoW.js`).then(e=>({default:e.ShipCascade})),__vite__mapDeps([23,13,2,14,15,16,17,21,24]))),Pe=n(()=>s(()=>import(`./ShipMigration-s0hVjDQl.js`).then(e=>({default:e.ShipMigration})),__vite__mapDeps([25,13,2,14,15,16,17,26]))),Fe=n(()=>s(()=>import(`./ShipRollout-BdUQzMyP.js`).then(e=>({default:e.ShipRollout})),__vite__mapDeps([27,13,2,14,15,16,17,28]))),Ie=n(()=>s(()=>import(`./ShipCourse-B7lG6DYW.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-ekbHL7OH.js`).then(e=>({default:e.ShipOnboarding})),__vite__mapDeps([35,13,2,14,15,16,17,36]))),Re=n(()=>s(()=>import(`./ShipHotspots-Bj2CovtT.js`).then(e=>({default:e.ShipHotspots})),__vite__mapDeps([37,13,2,14,15,16,17,38]))),W=n(()=>s(()=>import(`./ShipSuggestions-B6fKYh8L.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-CO9wE7hU.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};
|