@mavea/mavea 1.2.0 → 2.0.0
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 +96 -0
- package/PRIVACY.md +1 -0
- package/README.md +8 -4
- package/TERMS.md +1 -1
- package/THIRD-PARTY.txt +13 -5
- package/bin/mavea.mjs +143 -2
- package/dist/.vite/manifest.json +1473 -861
- package/dist/assets/AnnotationLayer-Cccb12ps.js +0 -0
- package/dist/assets/{AppCommandPalette-BHaYBZ5e.js → AppCommandPalette-DdOPNZ0e.js} +1 -1
- package/dist/assets/AtlasView-B7yObdf8.css +1 -0
- package/dist/assets/{AtlasView-B82UfrEX.js → AtlasView-DO_p0TdZ.js} +1 -1
- package/dist/assets/BriefingPlayer-DHV4vMga.css +1 -0
- package/dist/assets/{CadenceCard-P4teI7Se.js → CadenceCard-DxceyiPA.js} +1 -1
- package/dist/assets/{CanvasSkeleton-CRGWlafo.js → CanvasSkeleton-BmGjJHUQ.js} +1 -1
- package/dist/assets/CanvasSkeleton-DYASkTjW.css +1 -0
- package/dist/assets/CardEditor-CiAfT78z.css +1 -0
- package/dist/assets/{CardEditor-DABIhGdQ.js → CardEditor-D4slxmIM.js} +1 -1
- package/dist/assets/{CheckLogRail-DkHIHL0E.js → CheckLogRail-BibJTid0.js} +1 -1
- package/dist/assets/ConversationVideoStudio-CSO3jHXD.css +1 -0
- package/dist/assets/ConversationVideoStudio-DMIPUCcq.js +1 -0
- package/dist/assets/CourseLessonReader-D29Kix4f.js +2 -0
- package/dist/assets/{CourseRail-DXt3bzjU.js → CourseRail-BQmUsG6v.js} +1 -1
- package/dist/assets/CoursesApp-DcDsS_ZS.js +2 -0
- package/dist/assets/CrossExamPanel-BafTqkbf.css +1 -0
- package/dist/assets/{DashPresent-5SRScC2i.js → DashPresent-BDWgO9am.js} +1 -1
- package/dist/assets/DashboardDetail-BrnAdWfy.js +2 -0
- package/dist/assets/DashboardLoopGate-NxMcQ4rD.js +2 -0
- package/dist/assets/DashboardLoopRuntime-Dsy9u1wa.js +1 -0
- package/dist/assets/{DashboardSettings-CE0B2y2y.js → DashboardSettings-DJon1Q4o.js} +1 -1
- package/dist/assets/DashboardsApp-DxyMn3x_.js +2 -0
- package/dist/assets/DeepZoomApp-CVwmnRGN.css +1 -0
- package/dist/assets/{DeepZoomApp-BOLEl-kQ.js → DeepZoomApp-nNjqoyYE.js} +1 -1
- package/dist/assets/DelegatePanel-D17XvWYd.css +1 -0
- package/dist/assets/DelegatePanel-DN_ZL0j7.js +33 -0
- package/dist/assets/DemoGallery-DrSlMsnu.js +1 -0
- package/dist/assets/{DropSelect-DilESAgA.css → DropSelect-B4lqCEjw.css} +1 -1
- package/dist/assets/{DropSelect-DjbdVfIR.js → DropSelect-GwIXHA5o.js} +1 -1
- package/dist/assets/{ExportModal-CLobMv1F.js → ExportModal-DBUjC71U.js} +1 -1
- package/dist/assets/{ExtractionPreview-QZ2VHmsb.js → ExtractionPreview-D4M6eXqb.js} +1 -1
- package/dist/assets/{FeatureUseNotice-Dc8joBGM.js → FeatureUseNotice-Bda9jr3W.js} +1 -1
- package/dist/assets/{FlagshipCommandPalette-DnWuBjYI.js → FlagshipCommandPalette-DAO849RC.js} +1 -1
- package/dist/assets/FlagshipShowcase-g2x-1c70.js +1 -0
- package/dist/assets/{FlashcardsApp-BQGM-Tr1.js → FlashcardsApp-BUKzCr65.js} +1 -1
- package/dist/assets/ForecastPanel-Cq_yDhNQ.css +1 -0
- package/dist/assets/GalleryApp-ot_A7ZF-.js +1 -0
- package/dist/assets/{HonestByDesign-57LDf-gm.js → HonestByDesign-DgZFEpEx.js} +1 -1
- package/dist/assets/{HowItWorks-DMfPX3GK.js → HowItWorks-DPFpdeGE.js} +1 -1
- package/dist/assets/{LegalApp-CcO5Qq6R.js → LegalApp-C56kWdmK.js} +1 -1
- package/dist/assets/{LegalMarkdownDocument-Be_fQbZ_.js → LegalMarkdownDocument-BBTHuW_M.js} +1 -1
- package/dist/assets/{LegalPageShell-B-HY1WG7.js → LegalPageShell-hMA-7JLf.js} +1 -1
- package/dist/assets/LeverPanel-HOEwIr8k.css +1 -0
- package/dist/assets/{Library-DmdzY2se.js → Library-CVj7R6F4.js} +1 -1
- package/dist/assets/LibraryOverlay-BkPYm0Bs.css +1 -0
- package/dist/assets/{LibraryOverlay-BilW6q_z.js → LibraryOverlay-DSUWcUe4.js} +1 -1
- package/dist/assets/LiveApp-B62EMybC.js +79 -0
- package/dist/assets/LiveApp-CziqEsOb.css +1 -0
- package/dist/assets/LiveSettings-BITIaMoT.js +6 -0
- package/dist/assets/LiveSettings-Dho0OxlM.css +1 -0
- package/dist/assets/{MindMapViewerDrawer-DI_S7fRZ.js → MindMapViewerDrawer-CKdJtHno.js} +1 -1
- package/dist/assets/MindShape-B3lg_z4X.js +1 -0
- package/dist/assets/MindShape-CozR9W8M.css +1 -0
- package/dist/assets/{PinToDashboard-Cz5UJCmq.js → PinToDashboard-DpQjBLPa.js} +1 -1
- package/dist/assets/{PlanReview-CmUxzNqL.js → PlanReview-CrTbmMAd.js} +1 -1
- package/dist/assets/PresentationDeck-CfYadu9V.js +1 -0
- package/dist/assets/PrismApp-bRKK_3JA.js +2 -0
- package/dist/assets/PrismAskController-68gbUO5u.css +1 -0
- package/dist/assets/{PrismAskController-Bt0k9hAA.js → PrismAskController-C4MuB8om.js} +1 -1
- package/dist/assets/{PrismBriefingPlayer-DzdtnFj4.js → PrismBriefingPlayer-ChJj6hSS.js} +2 -2
- package/dist/assets/PrismOverlay-BwnF4BEn.css +1 -0
- package/dist/assets/{PrismOverlay-D1cDZamt.js → PrismOverlay-Pp6ZKmTc.js} +4 -4
- package/dist/assets/{PrismWorkbench-BEIp4MiL.js → PrismWorkbench-BCV7r4Oa.js} +1 -1
- package/dist/assets/{PrivacyApp-B4DT2RUz.js → PrivacyApp-A2Bu6LVd.js} +2 -1
- package/dist/assets/{Recap-T9DtFaEk.js → Recap-BOl3SUh0.js} +1 -1
- package/dist/assets/Recap-D3NlzM1p.css +1 -0
- package/dist/assets/{ReplayCard-Dx46HCBT.js → ReplayCard-B6NYiYzQ.js} +2 -2
- package/dist/assets/{ReplayOverlay-CnJAxf0u.js → ReplayOverlay-BJKtJ-vc.js} +1 -1
- package/dist/assets/{RewindOverlay-CousnxXo.js → RewindOverlay-BO7YgDsW.js} +1 -1
- package/dist/assets/RippleApp-BXt7tenS.js +2 -0
- package/dist/assets/{RippleAskController-9SxpZnHX.js → RippleAskController-BzdwYcYY.js} +1 -1
- package/dist/assets/RippleOverlay-B3hg2KMN.css +1 -0
- package/dist/assets/RippleOverlay-BSxubBwj.js +6 -0
- package/dist/assets/SeeDontRead-0He5hS2C.js +1 -0
- package/dist/assets/ShareModal-I_sxHKLv.css +1 -0
- package/dist/assets/ShareModal-xYdZWJxy.js +2 -0
- package/dist/assets/{ShipCourse-BavQppkt.js → ShipCourse-Dg6kCWyH.js} +1 -1
- package/dist/assets/{SignatureLoop-L8W2h62w.js → SignatureLoop-QPwB2oNN.js} +1 -1
- package/dist/assets/SrsReview-DmBcJCMa.css +1 -0
- package/dist/assets/{SrsReview-DhWNYYv7.js → SrsReview-Gr6Y0QTQ.js} +1 -1
- package/dist/assets/{SynthesisApp-C2O6pFeM.js → SynthesisApp-DrCq6NDa.js} +2 -2
- package/dist/assets/{SynthesisOverlay-DLvwiSMv.js → SynthesisOverlay-DCa-2Pz_.js} +1 -1
- package/dist/assets/{TermsApp-CxY1yorm.js → TermsApp-zcPDYfuh.js} +2 -2
- package/dist/assets/TopicCanvas-Bw4bMFpe.js +2 -0
- package/dist/assets/TopicCanvas-DWTm611H.css +1 -0
- package/dist/assets/{TourPrism-CI-iJZil.js → TourPrism-DbinDupp.js} +1 -1
- package/dist/assets/{TrackerTile-oz6IoG8m.js → TrackerTile-CrT9u1I4.js} +2 -2
- package/dist/assets/{TwoSurfaces-Rnf-_WgY.js → TwoSurfaces-L0CDuyOZ.js} +1 -1
- package/dist/assets/WhyMachineOverlay-Rav-cuMm.css +1 -0
- package/dist/assets/WorldOverlay-BcjqG1BR.js +2 -0
- package/dist/assets/{WowFeatures-C4efSbNV.js → WowFeatures-CwBk4ZMO.js} +1 -1
- package/dist/assets/ZoomDeck-DdLNsrHV.css +1 -0
- package/dist/assets/{ZoomDeck-CBrr0yfy.js → ZoomDeck-DlnesweX.js} +1 -1
- package/dist/assets/{annotationAuto-CDv6Es44.js → annotationAuto-B2UdfJNj.js} +1 -1
- package/dist/assets/{backup-ZrlVatXc.js → backup-685QrAjt.js} +1 -1
- package/dist/assets/canvas-C3O7MEA3.js +1 -0
- package/dist/assets/capture-DgJLQ_0-.js +2 -0
- package/dist/assets/{chapters-Dqm4iLDa.js → chapters-CIvdCeBC.js} +1 -1
- package/dist/assets/{confirmAdd-DzMO9jKV.js → confirmAdd-CZ829Mbx.js} +1 -1
- package/dist/assets/{dashboardEvents-DKl5rrTD.js → dashboardEvents-CiayRLrH.js} +1 -1
- package/dist/assets/dashboards-Cvs28p3Z.css +1 -0
- package/dist/assets/deepen-DAeHHFiI.js +11 -0
- package/dist/assets/deepenStore-BWLLzLCY.js +1 -0
- package/dist/assets/effort-jJe4iMIq.js +39 -0
- package/dist/assets/{explode-BgZIWY9m.js → explode-CPnvJiTg.js} +1 -1
- package/dist/assets/{fitText-DQ2omSN0.js → fitText-DHbmSS-q.js} +1 -1
- package/dist/assets/{generate-Dl2EJ_SR.js → generate-COfYQFmT.js} +4 -4
- package/dist/assets/{generateBeats-DZHkvFvh.js → generateBeats-COflu5Zi.js} +1 -1
- package/dist/assets/{generateCourse-C9qvaJRo.js → generateCourse-BldPpgdh.js} +1 -1
- package/dist/assets/generateLive-DGwnpIip.js +24 -0
- package/dist/assets/homeTarget-CwFsJYwb.js +1 -0
- package/dist/assets/index-BIUYTk1W.css +1 -0
- package/dist/assets/index-LiHcEJt_.js +22 -0
- package/dist/assets/kokoro-DXRj0KQX.js +1 -0
- package/dist/assets/ledger-BssK9Pv2.js +1 -0
- package/dist/assets/{lib-DMAxsZKm.css → lib-DP9Kuxqk.css} +1 -1
- package/dist/assets/{liveSchema-B4bQtO88.js → liveSchema-DyfND6P2.js} +2 -2
- package/dist/assets/{loader-DKJEcbPm.js → loader-DgMLGfAC.js} +2 -2
- package/dist/assets/localBudget-CxLP6bjE.js +1 -0
- package/dist/assets/{mastery-CUfDeuqO.js → mastery-DB5qpRAy.js} +1 -1
- package/dist/assets/{media-BvwzACIX.js → media-VLRh6CX2.js} +2 -2
- package/dist/assets/{model-BFRTN9Eh.js → model-CAewjw45.js} +1 -1
- package/dist/assets/{neighborhoods-D7QjURnE.js → neighborhoods-CqECCmo8.js} +1 -1
- package/dist/assets/{notes-B0-EE0FK.js → notes-DzIAEESd.js} +1 -1
- package/dist/assets/pen-DtEW1xf4.js +24 -0
- package/dist/assets/{perfProbe-B9zJpjo9.js → perfProbe-ezVn1mOu.js} +1 -1
- package/dist/assets/{pin-CZAIlpXt.js → pin-BPGVDgnq.js} +1 -1
- package/dist/assets/pin-BXyyKnci.css +1 -0
- package/dist/assets/{planTracker-KKAtTBWs.js → planTracker-BwoKEftp.js} +1 -1
- package/dist/assets/portal-B9DmFo6J.js +1 -0
- package/dist/assets/{prewarm-B4ELBOxf.js → prewarm-BgUqAJbF.js} +1 -1
- package/dist/assets/providers-0DthJW_I.js +1 -0
- package/dist/assets/quietHours-DyynzDyC.js +1 -0
- package/dist/assets/{ready-jtAUOb62.js → ready-yBSGJubb.js} +1 -1
- package/dist/assets/{registry-CqhpLHM7.js → registry-7tKTrzeZ.js} +1 -1
- package/dist/assets/{registry-BFrgx1tE.js → registry-B53EEn8S.js} +1 -1
- package/dist/assets/{registry-CPiwQhAm.js → registry-BDXwUn3i.js} +1 -1
- package/dist/assets/{registry-CD1s3eQ-.js → registry-BJEvFgoL.js} +1 -1
- package/dist/assets/{registry-B0GIHERt.js → registry-BQzvA61G.js} +1 -1
- package/dist/assets/{registry-6DGRAB1m.js → registry-BT6ydF33.js} +1 -1
- package/dist/assets/{registry-D8O0apUT.js → registry-BdHj_oIs.js} +1 -1
- package/dist/assets/{registry-Dru0JcTa.css → registry-BgWzEkxc.css} +1 -1
- package/dist/assets/{registry-Vp8VuMV0.js → registry-Bl2qfp5V.js} +1 -1
- package/dist/assets/registry-Bl7zAWKt.js +2 -0
- package/dist/assets/{registry-6MOD-I7p.js → registry-BlujNlQJ.js} +1 -1
- package/dist/assets/{registry-C28gYnVq.js → registry-CE1T0z9x.js} +1 -1
- package/dist/assets/{registry-4mMEt1Xy.css → registry-CEV5h2cu.css} +1 -1
- package/dist/assets/{registry-ZOWzhOHk.css → registry-CGB0jkFI.css} +1 -1
- package/dist/assets/{registry-BFbfXK-W.js → registry-Cgo4C0ux.js} +1 -1
- package/dist/assets/registry-CwRTUk0R.js +1 -0
- package/dist/assets/{registry-GeAC3ZD7.js → registry-D06LKiUk.js} +1 -1
- package/dist/assets/registry-Dbe9TQPw.css +1 -0
- package/dist/assets/registry-Diyud3DF.js +1 -0
- package/dist/assets/registry-DjvftnY2.css +1 -0
- package/dist/assets/{registry-w4R6c89s.js → registry-KRYoVMCh.js} +1 -1
- package/dist/assets/registry-QbArAJKB.js +1 -0
- package/dist/assets/registry-dmR14XnY.css +1 -0
- package/dist/assets/registry-g2sBcIrf.css +1 -0
- package/dist/assets/{registry-CcOO8UZr.js → registry-qRfnKTt4.js} +1 -1
- package/dist/assets/{relate-BYdM5eiV.js → relate-aQFFr11O.js} +1 -1
- package/dist/assets/{replay-TYXO0Brm.js → replay-CalqEgdW.js} +1 -1
- package/dist/assets/route-CMdTFx0P.js +1 -0
- package/dist/assets/{run-Df10YPyB.js → run-CuHaB8wF.js} +1 -1
- package/dist/assets/{run-gmqUaxcL.js → run-CwMSPOps.js} +1 -1
- package/dist/assets/{run-DlvA3l28.js → run-DCQrxgHA.js} +1 -1
- package/dist/assets/select-wEtBn9U6.js +3 -0
- package/dist/assets/shapes-BwoDrn09.js +1 -0
- package/dist/assets/shard000-Bx6Nmt0m.js +1 -0
- package/dist/assets/shard001-CL6O9SLr.js +1 -0
- package/dist/assets/shard002-vLQ0Ss-O.js +1 -0
- package/dist/assets/shard003-kKZdpzuh.js +1 -0
- package/dist/assets/shard004-CdVohAu1.js +1 -0
- package/dist/assets/shard005-CMzF_uJB.js +1 -0
- package/dist/assets/shard006-DQoDWuoN.js +1 -0
- package/dist/assets/shard007-Ck0N0IUk.js +1 -0
- package/dist/assets/shard008-Dt395x0Q.js +1 -0
- package/dist/assets/shard009-D_z8Lhqh.js +1 -0
- package/dist/assets/shard010-CQfR6lnk.js +1 -0
- package/dist/assets/shard011-l-w2t2Ie.js +1 -0
- package/dist/assets/shard012-BTw_UO1C.js +1 -0
- package/dist/assets/shard013-D8ZjKKYb.js +1 -0
- package/dist/assets/shard014-Cth_76It.js +1 -0
- package/dist/assets/shard015-DdYJVsHx.js +1 -0
- package/dist/assets/shard016-BdlBf9uZ.js +1 -0
- package/dist/assets/shard017-C3HTxh6t.js +1 -0
- package/dist/assets/shard018-Mf4wvqVk.js +1 -0
- package/dist/assets/shard019-Dpcy1Arx.js +1 -0
- package/dist/assets/shard020-BNvKfQld.js +1 -0
- package/dist/assets/shard021-D0kpI_PQ.js +1 -0
- package/dist/assets/shard022-Cjms7kAe.js +1 -0
- package/dist/assets/shard023-Bdwci7fy.js +1 -0
- package/dist/assets/shard024-BBoyPtpP.js +1 -0
- package/dist/assets/shard025-lMGpgN_0.js +3 -0
- package/dist/assets/shard026-Bp3UVI4_.js +1 -0
- package/dist/assets/shard027-C4HTpdeT.js +1 -0
- package/dist/assets/shard028-BsFTH3Sf.js +1 -0
- package/dist/assets/shard029-B3dEcXPy.js +1 -0
- package/dist/assets/shard030-DWwA-fNs.js +5 -0
- package/dist/assets/shard031-RhqA_0nH.js +1 -0
- package/dist/assets/shard032-BlZdG1Yi.js +1 -0
- package/dist/assets/shard033-Dmx2lOjI.js +1 -0
- package/dist/assets/shard034-BLOFKJT4.js +1 -0
- package/dist/assets/shard035-DMXdH733.js +1 -0
- package/dist/assets/shard036-DzOiEn23.js +1 -0
- package/dist/assets/shard037-BcHfVaYM.js +1 -0
- package/dist/assets/shard038-KozOx-Jh.js +1 -0
- package/dist/assets/shard039-apdILQwC.js +1 -0
- package/dist/assets/shard040-BrNXGaBi.js +1 -0
- package/dist/assets/shard041-D6eq9h1u.js +4 -0
- package/dist/assets/shard042-M-L34DbY.js +1 -0
- package/dist/assets/shard043-Ct6_C2pN.js +1 -0
- package/dist/assets/shard044-Bo0iaVHx.js +1 -0
- package/dist/assets/shard045-9ccZ4Y_N.js +1 -0
- package/dist/assets/shard046-eXoP478L.js +1 -0
- package/dist/assets/shard047-N56r6Lsz.js +1 -0
- package/dist/assets/shard048-BeKX7cI8.js +1 -0
- package/dist/assets/shard049-hPaNN2sL.js +1 -0
- package/dist/assets/shard050-B-YpP0B6.js +1 -0
- package/dist/assets/shard051-Bww5_KB2.js +1 -0
- package/dist/assets/shard052-DErwF8Df.js +1 -0
- package/dist/assets/shard053-C-qGH4jz.js +1 -0
- package/dist/assets/shard054-kcSxZrSj.js +1 -0
- package/dist/assets/shard055-CsETBTqa.js +1 -0
- package/dist/assets/shard056-CdBR4qTC.js +1 -0
- package/dist/assets/shard057-yRUG8B9e.js +1 -0
- package/dist/assets/shard058-DeDAnECG.js +1 -0
- package/dist/assets/shard059-Dh6jbDnW.js +1 -0
- package/dist/assets/shard060-B5kpWrhW.js +1 -0
- package/dist/assets/shard061-BTnj5LZA.js +1 -0
- package/dist/assets/shard062-DC7LTaNc.js +1 -0
- package/dist/assets/shard063-C8SIGCfd.js +1 -0
- package/dist/assets/shard064-DLyASocW.js +1 -0
- package/dist/assets/shard065-Cy_yV4ry.js +1 -0
- package/dist/assets/shard066-BmjVQqFX.js +1 -0
- package/dist/assets/shard067-uZUJsqtF.js +1 -0
- package/dist/assets/shard068-CXVjyJU4.js +1 -0
- package/dist/assets/shard069-CyfmjAm-.js +4 -0
- package/dist/assets/shard070-CxN3xiuY.js +12 -0
- package/dist/assets/shard071-CP1WrYC-.js +1 -0
- package/dist/assets/shard072-D6L5Yr05.js +1 -0
- package/dist/assets/shard073-DFEzkwg2.js +1 -0
- package/dist/assets/shard074-BSv3rvRL.js +1 -0
- package/dist/assets/shard075-Bt0OjGVd.js +1 -0
- package/dist/assets/shard076-DZHs0uzd.js +1 -0
- package/dist/assets/{share-kW3pZ027.js → share--tpc1nLE.js} +1 -1
- package/dist/assets/speed-BOytg6bC.js +1 -0
- package/dist/assets/store-B2Rpbqgg.js +1 -0
- package/dist/assets/store-Ba9vzL4H.js +1 -0
- package/dist/assets/store-BwyOArJl.js +1 -0
- package/dist/assets/store-ruEsXJjU.js +1 -0
- package/dist/assets/streamParse-BX0bAppQ.js +2 -0
- package/dist/assets/{templates-DHeyJ32F.css → templates-BIkAr4YH.css} +1 -1
- package/dist/assets/{theme-7IrMJ70_.js → theme-D5D55hZi.js} +1 -1
- package/dist/assets/{threads-Cu2t3070.js → threads-DNfxMTwx.js} +1 -1
- package/dist/assets/{useDashboardLoop-DDqCFJKY.js → useDashboardLoop-ifcuVRo-.js} +3 -3
- package/dist/assets/{useDashboards-SRk8LqHe.js → useDashboards-lgQnk2Al.js} +1 -1
- package/dist/assets/useFocusTrap-CJmpNZv2.js +1 -0
- package/dist/assets/useInView-DsTvv7L_.js +1 -0
- package/dist/assets/useInterval-DDgFrel2.js +1 -0
- package/dist/assets/{useLiveConfig-Cpy0_E_-.js → useLiveConfig-B4CmBiAK.js} +1 -1
- package/dist/assets/useStudy-CySgE3Cx.js +1 -0
- package/dist/assets/{walkSync-CPsd-xu7.js → walkSync-DBne70gg.js} +1 -1
- package/dist/demo-assets/CREDITS.md +94 -50
- package/dist/demo-assets/images/arnel-lighthouse.avif +0 -0
- package/dist/demo-assets/images/cliff-fields.avif +0 -0
- package/dist/demo-assets/images/crater-panorama.avif +0 -0
- package/dist/demo-assets/images/furnas-lake.avif +0 -0
- package/dist/demo-assets/images/green-coast-raw.avif +0 -0
- package/dist/demo-assets/images/green-coast.avif +0 -0
- package/dist/demo-assets/images/island-coast-poster.avif +0 -0
- package/dist/demo-assets/images/nordeste-town.avif +0 -0
- package/dist/demo-assets/images/sea-cliffs.avif +0 -0
- package/dist/demo-assets/images/sete-cidades.avif +0 -0
- package/dist/demo-assets/images/tea-terraces.avif +0 -0
- package/dist/demo-assets/pdf/cfd-primer.pdf +0 -0
- package/dist/demo-assets/video/island-coast.webm +0 -0
- package/dist/fonts/fonts.css +18 -0
- package/dist/index.html +38 -10
- package/dist/legal/PRIVACY.md +1 -0
- package/dist/legal/TERMS.md +1 -1
- package/dist/legal/THIRD-PARTY.txt +13 -5
- package/package.json +3 -2
- package/dist/assets/AnnotationLayer-qV6CIUZv.js +0 -0
- package/dist/assets/AtlasView-B5fkQhO6.css +0 -1
- package/dist/assets/BriefingPlayer-TpFZB77N.css +0 -1
- package/dist/assets/CanvasSkeleton-iy6DBvde.css +0 -1
- package/dist/assets/CardEditor-BY1bZiV6.css +0 -1
- package/dist/assets/ConversationVideoStudio-C1sd4k53.js +0 -1
- package/dist/assets/ConversationVideoStudio-CIAMxElj.css +0 -1
- package/dist/assets/CourseLessonReader-YCcNKEW7.js +0 -2
- package/dist/assets/CoursesApp-Dz6xjf4V.js +0 -2
- package/dist/assets/CrossExamPanel-CZ0ShGma.css +0 -1
- package/dist/assets/DashboardDetail-DOfm8UCQ.js +0 -2
- package/dist/assets/DashboardLoopGate-Cf0y_HQ7.js +0 -2
- package/dist/assets/DashboardLoopRuntime-CnN5VayH.js +0 -1
- package/dist/assets/DashboardsApp-_gbfdbX6.js +0 -2
- package/dist/assets/DeepZoomApp-fRXCJHHZ.css +0 -1
- package/dist/assets/DelegatePanel-CHEB-OZl.js +0 -33
- package/dist/assets/DelegatePanel-Cf85-0qE.css +0 -1
- package/dist/assets/DemoGallery-DBqnu8TR.js +0 -1
- package/dist/assets/FlagshipShowcase-3qQDOK6g.js +0 -1
- package/dist/assets/ForecastPanel-Da2ZBUrE.css +0 -1
- package/dist/assets/GalleryApp-BWQ-J450.js +0 -1
- package/dist/assets/LeverPanel-DhpJY76O.css +0 -1
- package/dist/assets/LibraryOverlay-CnKWDMG_.css +0 -1
- package/dist/assets/LiveApp-C-OPBybd.css +0 -1
- package/dist/assets/LiveApp-DH3OxJFV.js +0 -79
- package/dist/assets/LiveSettings-CmgrMqvK.css +0 -1
- package/dist/assets/LiveSettings-CuVMy7rZ.js +0 -6
- package/dist/assets/MindShape-C_Bo9hW9.js +0 -1
- package/dist/assets/MindShape-CaPeUo-a.css +0 -1
- package/dist/assets/PresentationDeck-B_EI33Pp.js +0 -1
- package/dist/assets/PrismApp-DtLsPiQF.js +0 -2
- package/dist/assets/PrismAskController-DBoxQSJR.css +0 -1
- package/dist/assets/PrismOverlay-BTfAicBt.css +0 -1
- package/dist/assets/Recap-DCiiWNiV.css +0 -1
- package/dist/assets/RippleApp-D5j2VCt2.js +0 -2
- package/dist/assets/RippleOverlay-_iiZsQVZ.css +0 -1
- package/dist/assets/RippleOverlay-zcXAHPuJ.js +0 -6
- package/dist/assets/SeeDontRead-Dqfzha0V.js +0 -1
- package/dist/assets/ShareModal-D1QuQEko.css +0 -1
- package/dist/assets/ShareModal-DWxlrJSz.js +0 -2
- package/dist/assets/SrsReview-B1B2VekR.css +0 -1
- package/dist/assets/TopicCanvas-LMI0zC7R.js +0 -2
- package/dist/assets/TopicCanvas-uRuHi99s.css +0 -1
- package/dist/assets/WhyMachineOverlay-BZk3PVTl.css +0 -1
- package/dist/assets/WorldOverlay-BaQNNClA.js +0 -2
- package/dist/assets/ZoomDeck-B2SjNwY7.css +0 -1
- package/dist/assets/canvas-Bsx3eSaS.js +0 -1
- package/dist/assets/capture-D8uPIcfj.js +0 -2
- package/dist/assets/dashboards-C1u2ks-d.css +0 -1
- package/dist/assets/generateLive-B6purd69.js +0 -51
- package/dist/assets/homeTarget-CsO8nY7z.js +0 -1
- package/dist/assets/index-Dk0QapqQ.js +0 -22
- package/dist/assets/index-DmKgC_TJ.css +0 -1
- package/dist/assets/kokoro-P_fkcX-A.js +0 -1
- package/dist/assets/layout-CEoNLr-w.js +0 -1
- package/dist/assets/pageVisibility-BxUVsw7Z.js +0 -1
- package/dist/assets/pen-DNMslo3e.js +0 -24
- package/dist/assets/pin-D-4Zjiik.css +0 -1
- package/dist/assets/portal-Dogggsub.js +0 -1
- package/dist/assets/providers-BovElgRL.js +0 -1
- package/dist/assets/quietHours-CeBje_uU.js +0 -1
- package/dist/assets/registry-BSX3aFUw.js +0 -1
- package/dist/assets/registry-Bv1f5UU4.js +0 -2
- package/dist/assets/registry-Cse2wF7x.css +0 -1
- package/dist/assets/registry-Dye5m3qt.css +0 -1
- package/dist/assets/registry-GeSy4i7R.css +0 -1
- package/dist/assets/registry-WHd1PwU3.js +0 -1
- package/dist/assets/registry-Xl8mAnKq.js +0 -1
- package/dist/assets/registry-tkd3UhWn.css +0 -1
- package/dist/assets/shapes-Cx5SCKgj.js +0 -39
- package/dist/assets/speed-K5_Ebj-8.js +0 -1
- package/dist/assets/store-BfHRbVKz.js +0 -1
- package/dist/assets/store-CsjDEADX.js +0 -1
- package/dist/assets/store-DpObYU1u.js +0 -1
- package/dist/assets/store-gohr8YVT.js +0 -1
- package/dist/assets/streamParse-B-Gjwa9T.js +0 -2
- package/dist/assets/useFocusTrap-DBtkeyRy.js +0 -1
- package/dist/assets/useInView-CXTOAEV3.js +0 -1
- package/dist/assets/useStudy-GwNcQWtv.js +0 -1
- 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/village-street.jpg +0 -0
- package/dist/demo-assets/video/azores-film.webm +0 -0
- /package/dist/assets/{BriefingPlayer-C0D_2ILa.js → BriefingPlayer-74mRKyjl.js} +0 -0
- /package/dist/assets/{CrossExamPanel-CdIYUu-B.js → CrossExamPanel-BfeGr5iw.js} +0 -0
- /package/dist/assets/{ForecastPanel-zPUh2ClQ.js → ForecastPanel-OfW39WGS.js} +0 -0
- /package/dist/assets/{LeverPanel-D1SNRGdm.js → LeverPanel-vco5UK2U.js} +0 -0
- /package/dist/assets/{WhyMachineOverlay-ks9-rRiL.js → WhyMachineOverlay-D2K7y8SA.js} +0 -0
- /package/dist/assets/{lib-B7OE1ZQQ.js → lib-u95BsX_B.js} +0 -0
- /package/dist/assets/{registry-7poQfBaM.js → registry-C4Yh05pk.js} +0 -0
- /package/dist/assets/{registry-Daypk4uR.js → registry-S3j4OpCH.js} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={nutritionlabel:{title:`Nutrition facts`,icon:`doc`,servingSize:`1 cup (55g)`,servings:`about 8`,calories:210,nutrients:[{name:`Total Fat`,amount:`3g`,dv:4,bold:!0},{name:`Saturated Fat`,amount:`0.5g`,dv:3,indent:!0},{name:`Trans Fat`,amount:`0g`,indent:!0},{name:`Sodium`,amount:`180mg`,dv:8,bold:!0},{name:`Total Carbohydrate`,amount:`44g`,dv:16,bold:!0}],allergens:[`wheat`,`almonds`]},unitconvert:{title:`Quick conversions`,icon:`table`,quantity:1,from:`cup`,category:`volume`,equivalents:[{value:`240`,unit:`ml`},{value:`16`,unit:`tbsp`},{value:`48`,unit:`tsp`},{value:`8`,unit:`fl oz`}]},seasonband:{title:`Produce in season through the year`,icon:`spark`,iconColor:`var(--presence)`,nowMonth:6,rows:[{label:`Asparagus`,windows:[{from:3,to:6,kind:`available`},{from:4,to:5,kind:`peak`}],note:`Best snapped fresh in mid-spring; flavour fades fast after picking.`},{label:`Tomatoes`,windows:[{from:6,to:10,kind:`available`},{from:7,to:9,kind:`peak`}],note:`Vine-ripened and sweetest at the height of summer.`},{label:`Winter squash`,windows:[{from:9,to:12,kind:`available`},{from:1,to:2,kind:`available`},{from:10,to:11,kind:`peak`}],note:`Harvested in autumn, it keeps for months in a cool pantry.`}],caption:`Northern-hemisphere harvest windows; the dashed line marks the current month.`},worthit:{title:`Is the premium one worth the splurge?`,product:`The cashmere wrap (option 1)`,verdict:`worth-it`,price:`$140`,priceNote:`vs ~$45 for the acrylic look-alike`,worthItIf:[`She wears scarves often and keeps them for years`,`You want it to feel like a real occasion gift`],skipIf:[`She rarely layers`,`A thoughtful card matters more than the label`],dealBreaker:`Cashmere needs hand-washing — if she would not fuss over it, the merino blend is the smar…`,forWho:`someone who notices quality and will actually reach for it`,bottomLine:`For a milestone gift the wrap earns its price; for a casual one, the blend gets 90% of th…`,footer:`Both ship in time if you order by Thursday.`},reviewsynth:{title:`What buyers say about the cashmere wrap`,rating:4.4,count:1842,distribution:[1180,410,150,60,42],loves:[{theme:`Feels genuinely luxe`,freq:`68% mention`,quote:`Softer than scarves twice the price — it actually feels special.`},{theme:`Generous, drapey size`,freq:`common`,quote:`Big enough to wrap up in on a cold flight, not a flimsy little thing.`}],complaints:[{theme:`Sheds at first`,freq:`1 in 5`,quote:`Lost a few fibers the first week, then it settled down.`},{theme:`Hand-wash only`,freq:`occasional`,quote:`Wish I could toss it in the machine — the care is fussy.`}],dealbreaker:`It must be hand-washed and laid flat — if she would not fuss over it, the machine-washabl…`,footer:`Synthesized from 1,842 verified-purchase reviews.`},sizechart:{title:`Running shoe size guide`,icon:`cart`,iconColor:`var(--presence)`,caption:`Unisex · true to size · measure both feet, use the larger`,columns:[`US`,`UK`,`EU`,`cm`],unit:`Foot length`,highlight:`9.5`,guide:`Stand on paper, mark heel to longest toe, and measure in centimetres — then match the cm …`,rows:[{size:`7`,values:[`7`,`6`,`40`,`25.0`]},{size:`7.5`,values:[`7.5`,`6.5`,`40.5`,`25.4`]},{size:`8`,values:[`8`,`7`,`41`,`25.7`]},{size:`8.5`,values:[`8.5`,`7.5`,`42`,`26.0`]},{size:`9`,values:[`9`,`8`,`42.5`,`26.7`]}],footer:`EU sizing runs a touch narrow — if your feet are wide, consider the next half size up.`},breakdown:{title:`True yearly value`,icon:`table`,rows:[{name:`Base salary`,val:`Brightline $112k`,pct:93},{name:`Bonus (target)`,val:`$14k`,pct:78,tag:`swing`},{name:`401k match`,val:`$5.6k`,pct:40},{name:`Commute cost`,val:`−$2.4k`,pct:20,hot:!0}]},gauge:{title:`Which one wins`,icon:`spark`,iconColor:`var(--insight)`,value:64,max:100,band:`Brightline`,color:`var(--insight)`,driver:`Tilted by <b>total comp + a 35-min shorter commute</b>.`,footer:`Northwind only pulls ahead on base pay and three vacation days.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={countdown:{title:`Time to decide`,icon:`clock`,target:`2026-06-24T17:00:00`,label:`Brightline needs your answer by Tuesday 5pm`,dueWhat:`A yes or no on the offer (a short email is fine)`,consequence:`After this the offer may be released to the next candidate.`,footer:`Need longer? Asking for 48 more hours is normal — most teams say yes.`},blanks:{title:`The parts only you can answer`,icon:`spark`,iconColor:`var(--presence)`,intro:`I've weighed everything I can. Two or three things are yours to fill in.`,slots:[{key:`dealbreaker`,label:`Your hard no`,prompt:`What would make this offer an automatic no?`,kind:`text`,placeholder:`e.g. no relocation help`},{key:`decide_by`,label:`Decide by`,prompt:`When do you actually have to give an answer?`,kind:`date`,accent:`var(--warning)`},{key:`energy`,label:`Energy for a change`,prompt:`How much capacity do you have for a job change right now?`,kind:`choice`,options:[`Low`,`Some`,`Plenty`]}]},reframecard:{title:`A gentler take`,thought:`I bombed that interview, so I am clearly not cut out for this role.`,distortion:`all-or-nothing`,reframe:`One hard interview is a single data point, not a verdict on your whole career — you answe…`,footer:`Notice the jump from <b>one moment</b> to <b>a whole identity</b> — that is the part wort…`},talktrack:{title:`How to open the resignation call`,icon:`mic`,totalTime:`~60s`,lines:[{say:`Thanks for making time, I wanted to tell you this directly rather than over email.`,beat:`warm, steady`,note:`Sets the tone before the news lands.`},{say:`I have decided to move on, and my last day will be two weeks from today.`,beat:`pause here`,note:`Say the date plainly, then stop talking.`},{say:`This was a hard call. I have learned a lot here and I am grateful for it.`,beat:`sincere`},{say:`I want the handover to go smoothly, so let us plan the next two weeks together.`,beat:`~15s`,note:`Ends on partnership, not apology.`}],footer:`Let the silences sit. You do not owe a full explanation, only a clear decision and a clea…`},resume:{name:`Jordan Alvarez`,title:`Senior Product Manager`,icon:`doc`,iconColor:`var(--presence)`,contact:[`jordan.alvarez@email.com`,`Austin, TX`,`linkedin.com/in/jordanalvarez`],summary:`Product leader with eight years in B2B SaaS, the last three managing a team of five. Led …`,experience:[{role:`Senior Product Manager`,org:`Meridian Analytics`,start:`2022`,location:`Austin, TX`,bullets:[`Led the pricing-model rework that took net revenue retention from 96% to 114%.`,`Grew the team from two to five PMs and stood up a quarterly roadmap review.`,`Owned the platform API surface used by 40+ enterprise integrations.`]},{role:`Product Manager`,org:`Northwind Labs`,start:`2019`,end:`2022`,location:`Remote`,bullets:[`Shipped the self-serve onboarding flow that cut time-to-first-value from 9 days to 36 hou…`,`Ran discovery for the mobile app, now 30% of monthly active usage.`]},{role:`Associate Product Manager`,org:`Fieldstone Software`,start:`2017`,end:`2019`,location:`Chicago, IL`,bullets:[`Owned the reporting-module roadmap for the mid-market tier.`]}],education:[{school:`University of Illinois at Urbana-Champaign`,credential:`B.S. Industrial Engineering`,start:`2013`,end:`2017`,detail:`Minor in Computer Science`}],skills:[`Product strategy`,`Pricing & packaging`,`SQL`,`Roadmapping`,`A/B testing`],footer:`Kept current from your LinkedIn export, in case the new role wants it this week.`},understand:{title:`What I learned about your studio`,conf:`strong`,items:[{text:`You're a <b>branding & web design studio</b> selling to other businesses.`,source:`/about`},{text:`You work in <b>projects with stages</b>, pitch, active, delivered.`,source:`/work`},{text:`Leads come in through a <b>contact form</b> and referrals.`,source:`/contact`},{text:`You bill <b>per project</b>, not hourly.`,source:`/pricing`}]},schema:{title:`The data model I'll build`,entities:[{name:`Company`,color:`var(--presence)`,badge:`B2B`,fields:[{name:`name`,type:`text`,key:!0},{name:`industry`,type:`text`},{name:`website`,type:`url`}]},{name:`Contact`,color:`var(--insight)`,fields:[{name:`name`,type:`text`,key:!0},{name:`email`,type:`email`},{name:`company`,type:`→ Company`}]},{name:`Project`,color:`var(--warning)`,fields:[{name:`title`,type:`text`,key:!0},{name:`stage`,type:`enum`},{name:`value`,type:`money`}]},{name:`Activity`,color:`var(--presence-soft)`,fields:[{name:`type`,type:`enum`},{name:`note`,type:`text`},{name:`contact`,type:`→ Contact`}]}],relations:[{from:`Company`,label:`has many`,to:`Contacts`},{from:`Contact`,label:`has many`,to:`Projects`},{from:`Project`,label:`logs`,to:`Activities`}],footer:`Mirrors how you already work, projects with stages, not generic “deals.”`},buildprog:{title:`Building it`,steps:[{label:`Created the data model`,sub:`4 tables, relationships wired`,status:`done`},{label:`Generated 5 screens`,sub:`from your stages + fields`,status:`done`},{label:`Imported sample data`,sub:`8 leads pulled from your site`,status:`active`},{label:`Connect your contact form`,sub:`needs your permission`,status:`todo`}],footer:`Everything's a draft on your private workspace until you say go.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={sponsorshiptracker:{title:`The brand deals sitting outside the tracker`,icon:`spark`,iconColor:`var(--presence)`,deals:[{brand:`Fieldnotes Co.`,deliverable:`Newsletter mention, 1 issue`,rate:1800,status:`paid`,paidDate:`May 28`},{brand:`Kerncraft Tools`,deliverable:`Dedicated newsletter feature`,rate:4200,status:`contracted`,dueDate:`Jun 30`},{brand:`Northline Studio`,deliverable:`X thread, 3 posts`,rate:1200,status:`negotiating`},{brand:`Verafirm`,deliverable:`LinkedIn post + newsletter blurb`,rate:2600,status:`delivered`,dueDate:`Jun 10`},{brand:`Loomstate`,deliverable:`Newsletter mention, 1 issue`,rate:1500,status:`pitched`}],footer:`Kerncraft is the one to invoice the moment the feature goes out — everything else is eith…`},contentcalendar:{title:`This month, across your channels`,icon:`table`,iconColor:`var(--presence)`,platforms:[`Newsletter`,`X`,`LinkedIn`],weeks:[`Wk 1`,`Wk 2`,`Wk 3`,`Wk 4`],cells:[{platform:`Newsletter`,week:`Wk 1`,status:`posted`,title:`The tools that stuck`},{platform:`Newsletter`,week:`Wk 2`,status:`posted`,title:`Field notes #12`},{platform:`Newsletter`,week:`Wk 3`,status:`scheduled`,title:`On craft vs. speed`},{platform:`Newsletter`,week:`Wk 4`,status:`idea`,title:`Q&A with a reader`},{platform:`X`,week:`Wk 1`,status:`posted`,title:`Thread: the tools recap`}],footer:`Newsletter carries the month; X and LinkedIn trail a week behind on purpose.`},podcastplanner:{title:`Next week's episode, planned`,icon:`mic`,iconColor:`var(--presence)`,guest:`Sana Osei, staff engineer turned solo founder`,topics:[`Why she left a staff role to build alone`,`The first six months without a team to lean on`,`What she automated first, and what she still does by hand`,`Advice for someone considering the same jump`],chapters:[{timecode:`00:00`,label:`Intro`},{timecode:`03:40`,label:`Leaving the staff role`},{timecode:`14:10`,label:`The lonely first months`}],footer:`Add this as a Piece in the tracker once it’s recorded.`},marimekko:{title:`ARR by segment × plan`,icon:`chart`,iconColor:`var(--presence)`,unit:`k`,columns:[{label:`Enterprise`,segments:[{label:`Annual`,value:1280},{label:`Monthly`,value:220}]},{label:`Mid-market`,segments:[{label:`Annual`,value:540},{label:`Monthly`,value:360}]},{label:`SMB`,segments:[{label:`Annual`,value:150},{label:`Monthly`,value:470}]}],footer:`Enterprise is the widest column and almost all annual; SMB is mostly month-to-month, whic…`},timeseriesdecomposition:{title:`Monthly revenue, decomposed`,icon:`layers`,iconColor:`var(--presence)`,dates:[`Jan`,`Feb`,`Mar`,`Apr`,`May`],observed:[5.52,5.63,6.26,5.78,6.07],trend:[5.62,5.71,5.83,5.95,6.08],seasonal:[-.15,-.05,.35,-.15,-.05],residual:[.05,-.03,.08,-.02,.04],footer:`The trend explains the steady climb; the seasonal component isolates the quarter-close bu…`},financialstatement:{title:`Quarterly P&L`,icon:`chart`,currency:`USD`,caption:`Unaudited · consolidated`,periods:[`Q1 FY26`,`Q2 FY26`,`Q3 FY26`],rows:[{label:`Revenue`,values:[418e4,472e4,531e4]},{label:`Cost of revenue`,values:[-138e4,-151e4,-165e4],indent:1},{label:`Gross profit`,values:[28e5,321e4,366e4],kind:`subtotal`},{label:`Sales & marketing`,values:[-112e4,-124e4,-133e4],indent:1},{label:`Research & development`,values:[-86e4,-91e4,-98e4],indent:1}],footer:`Operating margin expands from <b>6.7%</b> to <b>14.3%</b> as revenue outpaces fixed opex.`},pareto:{title:`Cancellation reasons, ranked`,icon:`chart`,iconColor:`var(--warning)`,unit:` tickets`,bars:[{label:`Price increase`,value:180},{label:`Cheaper tool`,value:45},{label:`Onboarding`,value:20},{label:`Missing feature`,value:12},{label:`Billing error`,value:8}],footer:`The first two reasons already clear <b>80%</b> of cancellations — pricing is the fix that…`},flowchord:{title:`Where accounts moved this quarter`,icon:`share`,iconColor:`var(--danger)`,unit:` accounts`,nodes:[{id:`ent`,label:`Enterprise`,color:`var(--insight)`},{id:`mid`,label:`Mid-Market`,color:`var(--presence)`},{id:`smb`,label:`SMB`,color:`var(--warning)`},{id:`churn`,label:`Churned`,color:`var(--danger)`}],flows:[{from:`smb`,to:`churn`,value:34},{from:`mid`,to:`churn`,value:5},{from:`ent`,to:`churn`,value:1},{from:`mid`,to:`smb`,value:4},{from:`smb`,to:`mid`,value:6}],footer:`Almost all the movement funnels through SMB — some downgrade first, most cancel outright.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={evidencetrace:{title:`Why I flagged onboarding`,icon:`proof`,iconColor:`var(--presence)`,claim:`Confusing onboarding is the <b>top reason</b> first-month accounts churned.`,summary:`12 of 240 churned accounts`,items:[{text:`“I never figured out how to invite my team, so we gave up in week one.”`,source:`ticket #4821`,when:`Apr 12`},{text:`“The setup wizard kept looping me back to the start. Cancelled.”`,source:`cancel survey`,when:`Apr 19`},{text:`“Couldn’t connect our calendar — no clear next step after sign-up.”`,source:`ticket #4910`,when:`Apr 23`},{text:`“Too many empty screens on day one. Didn’t know where to begin.”`,source:`exit interview`,when:`May 2`},{text:`“Import failed silently and I assumed the product was broken.”`,source:`ticket #5033`,when:`May 8`}],caveat:`Self-reported in cancellation flows — weighted toward people who chose to explain why the…`,footer:`Each line is a verbatim record from a churned account, not a summary.`},cohortgrid:{title:`Monthly retention by signup cohort`,icon:`layers`,unit:`%`,caption:`% of cohort still active at the start of each month`,periods:[`M0`,`M1`,`M2`,`M3`,`M4`],cohorts:[{label:`Jan`,size:1240,values:[100,62,48,41,37]},{label:`Feb`,size:1410,values:[100,64,51,44,40]},{label:`Mar`,size:1680,values:[100,67,54,47,null]},{label:`Apr`,size:1520,values:[100,71,58,null,null]},{label:`May`,size:1790,values:[100,73,null,null,null]}],footer:`Month-1 retention climbs from <b>62%</b> (Jan) to <b>73%</b> (May) — onboarding changes a…`},fivewhychain:{title:`Root cause: the SMB churn spike`,icon:`eye`,iconColor:`var(--danger)`,problem:`SMB churn nearly doubled in two months`,whys:[{question:`Why did SMB churn spike?`,answer:`58% of cancellations cite the February price increase.`},{question:`Why did the price increase hit so hard?`,answer:`It landed as a flat 40% jump with no advance notice.`},{question:`Why no advance notice or phased rollout?`,answer:`The pricing change shipped with the Q1 close, not a customer-comms plan.`},{question:`Why wasn't comms part of the pricing rollout?`,answer:`Pricing changes have never needed sign-off from anyone outside finance.`},{question:`Why is there no cross-team sign-off on pricing?`,answer:`There's no defined process connecting pricing, growth, and support before a change ships.`}],rootCause:`Missing cross-team process for pricing changes, not the price itself.`,footer:`Fix the process and the next price change stops costing accounts.`},pipeline:{title:`By stage · weighted`,icon:`layers`,iconColor:`var(--presence-soft)`,headline:`$21.6M`,sub:`weighted pipeline`,unit:`$`,suffix:`M`,stages:[{k:`Discovery`,v:8.2},{k:`Evaluation`,v:6.1},{k:`Proposal`,v:4.4},{k:`Commit`,v:2.9}],footer:`A healthy funnel, narrowing cleanly toward Commit.`},quotes:{title:`In their words`,icon:`quote`,iconColor:`var(--presence-soft)`,quotes:[{text:`The analytics rebuild is genuinely best-in-class now.`,who:`Enterprise admin`,tone:`pos`},{text:`Price jump felt abrupt, no warning, no grandfathering.`,who:`SMB founder`,tone:`neg`},{text:`Support got back to me in minutes. Big improvement.`,who:`Mid-market ops`,tone:`pos`},{text:`Migrating billing was confusing for our finance team.`,who:`SMB admin`,tone:`warn`}],footer:`The praise is product; the pain is pricing and billing.`},emotionwheel:{title:`What the feedback is actually feeling`,icon:`quote`,iconColor:`var(--presence-soft)`,highlight:`anger`,caption:`Praise clusters in trust and joy; the pricing backlash reads as anger, not disgust — fixa…`},livecompute:{title:`Play with the runway yourself`,icon:`sliders`,inputs:[{key:`cash`,label:`Cash in the bank`,min:2,max:25,value:14.2,step:.1,prefix:`$`,unit:`M`},{key:`burn`,label:`Net burn`,min:200,max:1200,value:740,step:10,prefix:`$`,unit:`k/mo`}],formula:`cash * 1000 / burn`,output:{label:`Months of runway`,unit:`months`,decimals:1},caveat:`Estimate from the current balance and burn — assumes burn holds flat and ignores new reve…`,footer:`Drag burn down to ~$650k and you cross 21 months.`},captable:{title:`Cap table after the Series A`,icon:`table`,iconColor:`var(--presence)`,totalShares:12e6,holders:[{name:`Founders`,shares:66e5,class:`Common`},{name:`Series A (Lighthouse)`,shares:24e5,class:`Preferred A`},{name:`Seed investors`,shares:156e4,class:`Preferred Seed`},{name:`ESOP (option pool)`,shares:12e5,class:`Options`},{name:`Angels & advisors`,shares:24e4,class:`Common`}],caption:`12.0M fully-diluted shares · founders hold 55% after the round`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={vestingschedule:{title:`Founder & team vesting`,icon:`clock`,iconColor:`var(--presence)`,asOf:`2026-07-02`,grants:[{holder:`Founders (common)`,grantDate:`2022-06-01`,totalShares:66e5,cliffMonths:12,vestMonths:48,color:`var(--presence)`},{holder:`Head of Eng`,grantDate:`2023-09-15`,totalShares:48e4,cliffMonths:12,vestMonths:48,color:`var(--insight)`},{holder:`New hire (Sales)`,grantDate:`2026-04-01`,totalShares:12e4,cliffMonths:12,vestMonths:48,color:`var(--warning)`}],footer:`The founder grant cleared its cliff in 2023 and is now three-quarters vested; the newest …`},termsheet:{title:`Series A term sheet`,icon:`doc`,iconColor:`var(--presence)`,company:`Acme Robotics, Inc.`,round:`Series A`,date:`2026-05-04`,terms:[{label:`Investment amount`,value:`$4,000,000`},{label:`Pre-money valuation`,value:`$16,000,000`},{label:`Security`,value:`20% Series A Preferred`},{label:`Liquidation preference`,value:`1x non-participating`,note:`Standard for this stage; no multiple, no participation.`},{label:`Board composition`,value:`2 founders, 1 investor, 1 independent`}],footer:`Non-binding — a definitive purchase agreement follows legal review.`},fundraisingrounds:{title:`How the raise has grown`,icon:`chart`,iconColor:`var(--presence)`,currency:`USD`,rounds:[{name:`Seed`,preMoney:4e6,raised:12e5,postMoney:52e5,leadInvestor:`Basecamp Ventures`,date:`2022-08-01`},{name:`Series A`,preMoney:16e6,raised:4e6,postMoney:2e7,leadInvestor:`Lighthouse Capital`,date:`2024-02-14`,stepUp:3.85},{name:`Series B`,preMoney:52e6,raised:14e6,postMoney:66e6,leadInvestor:`Northbeam Partners`,date:`2026-05-04`,stepUp:3.3}],footer:`Each round priced up from the last — Series B closed at a 3.3x step-up over the Series A …`},saferterms:{title:`Seed SAFE`,icon:`shield`,iconColor:`var(--presence)`,instrument:`safe`,investor:`Basecamp Ventures`,principal:12e5,valuationCap:8e6,discountPct:20,mfn:!0,conversionNote:`Converts to Series A preferred at the lower of the $8M cap or the round price, whichever …`},dilutionwaterfall:{title:`Ownership across the rounds`,icon:`chart`,iconColor:`var(--presence)`,rounds:[{round:`Founding`,holders:[{holder:`Founders`,pct:100,color:`var(--presence)`}]},{round:`Seed`,holders:[{holder:`Founders`,pct:82,color:`var(--presence)`},{holder:`Seed investors`,pct:13,color:`var(--warning)`},{holder:`ESOP`,pct:5,color:`var(--text-muted)`}]},{round:`Series A`,holders:[{holder:`Founders`,pct:63,color:`var(--presence)`},{holder:`Seed investors`,pct:10,color:`var(--warning)`},{holder:`Series A (Lighthouse)`,pct:20,color:`var(--insight)`},{holder:`ESOP`,pct:7,color:`var(--text-muted)`}]},{round:`Series B`,holders:[{holder:`Founders`,pct:48,color:`var(--presence)`},{holder:`Seed investors`,pct:8,color:`var(--warning)`},{holder:`Series A (Lighthouse)`,pct:15,color:`var(--insight)`},{holder:`Series B (Northbeam)`,pct:21,color:`var(--danger)`},{holder:`ESOP`,pct:8,color:`var(--text-muted)`}]}],footer:`Founders started fully diluted at 100% and hold 48% after three rounds — the ESOP top-up …`},threestatementlink:{title:`How the three statements connect`,icon:`table`,iconColor:`var(--presence)`,period:`FY25`,statements:[{name:`Income Statement`,rows:[{label:`Revenue`,value:84e5},{label:`Cost of revenue`,value:-21e5},{label:`Gross profit`,value:63e5,bold:!0},{label:`Operating expenses`,value:-48e5},{label:`Net income`,value:15e5,bold:!0}]},{name:`Balance Sheet`,rows:[{label:`Cash`,value:52e5},{label:`Other assets`,value:38e5},{label:`Total assets`,value:9e6,bold:!0},{label:`Liabilities`,value:25e5},{label:`Retained earnings`,value:15e5,indent:1}]},{name:`Cash Flow`,rows:[{label:`Net income`,value:15e5},{label:`Depreciation`,value:3e5},{label:`Change in working capital`,value:-2e5},{label:`Cash from operations`,value:16e5,bold:!0}]}],links:[{from:`Net income`,to:`Retained earnings`,label:`flows to equity`},{from:`Net income`,to:`Net income`,label:`opens cash flow`}],currency:`USD`,footer:`The income statement's bottom line lands twice downstream — it builds retained earnings o…`},tamsam:{title:`Market sizing: TAM → SAM → SOM`,icon:`chart`,iconColor:`var(--insight)`,markets:[{label:`TAM`,value:12,unit:`B`,cagr:18,description:`Enterprise knowledge & document management — all companies worldwide.`},{label:`SAM`,value:4.2,unit:`B`,cagr:22,description:`Mid-market & enterprise companies in English-speaking markets with > 500 employees.`},{label:`SOM`,value:.84,unit:`B`,cagr:30,description:`2 % market capture at scale — 1,400 enterprise accounts at $60k ACV in year 5.`}],footer:`Bottom-up from 68,000 qualifying accounts × $60k ACV. 22 % SAM CAGR from Gartner 2024.`},trainingcurve:{title:`Model learning curve — enterprise Q&A`,icon:`sparkle`,iconColor:`var(--presence)`,epochs:[1,2,3,4,5],trainLoss:[1.82,1.41,1.12,.89,.72],valLoss:[1.94,1.52,1.23,1.01,.84],trainAcc:[.51,.62,.71,.78,.83],valAcc:[.47,.58,.67,.74,.8],bestEpoch:18,footer:`94 % validation accuracy on 1,200 held-out enterprise Q&A pairs. Best checkpoint at epoch…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={burnrunway:{title:`Cash burn & runway`,icon:`chart`,iconColor:`var(--warning)`,currency:`$`,initialCash:84e5,months:[{label:`Aug`,burn:44e4},{label:`Sep`,burn:455e3},{label:`Oct`,burn:46e4},{label:`Nov`,burn:47e4},{label:`Dec`,burn:48e4}],footer:`18.4 months at current burn · well past the next product milestone. Headcount is 62 % of …`},ridgeplot:{title:`Predicted-confidence shape, by model`,icon:`chart`,iconColor:`var(--insight)`,categories:[{label:`Transformer-v3`,color:`var(--presence)`,curve:[2,4,6,9,12]},{label:`Baseline BERT`,color:`var(--text-muted)`,curve:[8,14,20,27,33]},{label:`v3 small`,color:`var(--insight)`,curve:[3,6,9,13,18]}],overlap:.6,footer:`v3 concentrates near high confidence on correct calls; the baseline stays flatter, less d…`},correlationheatmap:{title:`Feature correlations`,icon:`table`,iconColor:`var(--presence)`,variables:[`accuracy`,`latency_ms`,`model_size_mb`,`train_steps`,`val_loss`],matrix:[[1,.22,.58,.47,-.91],[.22,1,.93,.08,-.15],[.58,.93,1,.12,-.44],[.47,.08,.12,1,-.62],[-.91,-.15,-.44,-.62,1]],footer:`Validation loss is the strongest correlate of accuracy (−0.91) — latency trac…`},scatterplotmatrix:{title:`Every candidate run, pairwise`,icon:`table`,iconColor:`var(--insight)`,color:`var(--insight)`,vars:[`accuracy`,`latency_ms`,`model_size_mb`,`val_loss`],rows:[{accuracy:.82,latency_ms:38,model_size_mb:110,val_loss:.31},{accuracy:.85,latency_ms:52,model_size_mb:180,val_loss:.27},{accuracy:.88,latency_ms:71,model_size_mb:340,val_loss:.21},{accuracy:.91,latency_ms:96,model_size_mb:520,val_loss:.16},{accuracy:.9,latency_ms:210,model_size_mb:1400,val_loss:.17}],footer:`The accuracy/val_loss pair falls on a clean downward line; the 1400 MB run buys almost no…`},roccurve:{title:`ROC curves — billing vs. non-billing`,icon:`chart`,iconColor:`var(--presence)`,curves:[{name:`Transformer-v3`,auc:.981,color:`var(--presence)`,points:[{fpr:0,tpr:0},{fpr:.01,tpr:.45},{fpr:.02,tpr:.68},{fpr:.03,tpr:.79},{fpr:.05,tpr:.87}]},{name:`Baseline (BERT-large)`,auc:.943,color:`var(--text-muted)`,points:[{fpr:0,tpr:0},{fpr:.02,tpr:.32},{fpr:.05,tpr:.58},{fpr:.1,tpr:.73},{fpr:.15,tpr:.82}]}],footer:`Transformer-v3 AUC 0.981 vs. baseline 0.943. Binary: billing vs. all other categories.`},precisionrecallcurve:{title:`Precision-recall — billing is only 8% of volume`,icon:`chart`,iconColor:`var(--presence)`,avgPrecision:.91,curves:[{label:`Transformer-v3`,color:`var(--presence)`,points:[{recall:0,precision:1},{recall:.1,precision:.99},{recall:.2,precision:.97},{recall:.3,precision:.96},{recall:.4,precision:.95}]},{label:`Baseline (BERT-large)`,color:`var(--text-muted)`,points:[{recall:0,precision:1},{recall:.1,precision:.95},{recall:.2,precision:.9},{recall:.3,precision:.85},{recall:.4,precision:.79}]}],footer:`ROC AUC looked close (0.981 vs 0.943), but on the minority billing class PR tells the rea…`},biasvariance:{title:`Overfitting check: routing-tree depth`,icon:`chart`,iconColor:`var(--presence)`,complexity:[1,2,3,4,5],trainError:[.42,.31,.24,.19,.15],testError:[.46,.34,.27,.22,.19],sweetSpot:6,footer:`Chosen the small routing tree at depth 6 — deeper trees fit training tickets better but g…`},gradientdescent:{title:`Training run: loss surface for the routing head`,icon:`chart`,iconColor:`var(--warning)`,learningRate:.15,contour:[[{x:-2,y:-2,z:6.43},{x:-1.33,y:-2,z:4.97},{x:-.67,y:-2,z:3.98},{x:0,y:-2,z:3.43},{x:.67,y:-2,z:3.31}],[{x:-2,y:-1.33,z:4.24},{x:-1.33,y:-1.33,z:2.79},{x:-.67,y:-1.33,z:1.8},{x:0,y:-1.33,z:1.24},{x:.67,y:-1.33,z:1.13}],[{x:-2,y:-.67,z:3.32},{x:-1.33,y:-.67,z:1.86},{x:-.67,y:-.67,z:.87},{x:0,y:-.67,z:.32},{x:.67,y:-.67,z:.2}],[{x:-2,y:0,z:3.63},{x:-1.33,y:0,z:2.17},{x:-.67,y:0,z:1.18},{x:0,y:0,z:.63},{x:.67,y:0,z:.51}],[{x:-2,y:.67,z:5.19},{x:-1.33,y:.67,z:3.74},{x:-.67,y:.67,z:2.75},{x:0,y:.67,z:2.19},{x:.67,y:.67,z:2.08}]],path:[{x:-1.5,y:1.5,step:0},{x:-1.2,y:.1,step:1},{x:-.9,y:-.9,step:2},{x:-.7,y:-.2,step:3},{x:-.5,y:-.7,step:4}],footer:`The two weights don't share a curvature — the optimizer zigzags across the steep axis whi…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={nnarchitecture:{title:`Transformer-v3 Routing Head`,icon:`layers`,iconColor:`var(--presence)`,connections:`sparse`,layers:[{name:`Input`,units:768},{name:`Hidden 1`,units:256,activation:`ReLU`},{name:`Hidden 2`,units:64,activation:`ReLU`},{name:`Output`,units:3,activation:`softmax`}],highlight:{layer:3,unit:0},footer:`A small classifier head sits on top of the frozen encoder — 768→256→64→3, softmax over {t…`},datadictionary:{title:`test_set.parquet, the columns`,icon:`table`,iconColor:`var(--insight)`,source:`test_set.parquet`,nRows:8400,nCols:7,variables:[{name:`ticket_id`,dtype:`int`,description:`Primary key, one row per support ticket.`,missingPct:0},{name:`body_text`,dtype:`str`,description:`Full ticket text as submitted by the customer.`,missingPct:0},{name:`true_label`,dtype:`category`,description:`Human-reviewed category, one of 24 product categories.`,missingPct:0},{name:`pred_label`,dtype:`category`,description:`Transformer-v3's predicted category for this ticket.`,missingPct:0},{name:`confidence`,dtype:`float`,unit:`0–1`,description:`Softmax probability of the predicted label.`,missingPct:0}],footer:"`account_tier` and `resolved_at` have real gaps — free-tier tickets and still-open ones —…"},datapipeline:{title:`How test_set.parquet gets built`,icon:`table`,iconColor:`var(--insight)`,stages:[{id:`raw`,label:`Ticket Events`,kind:`source`,sub:`Kafka topic`},{id:`dedup`,label:`Dedup & Clean`,kind:`transform`,sub:`drop dupes, strip PII`},{id:`label`,label:`Join Labels`,kind:`transform`,sub:`label-queue export`},{id:`features`,label:`Feature Store`,kind:`store`,sub:`Parquet, versioned`},{id:`split`,label:`Train/Test Split`,kind:`transform`,sub:`80/20 stratified`}],edges:[{from:`raw`,to:`dedup`,label:`nightly batch`},{from:`dedup`,to:`label`},{from:`label`,to:`features`,label:`write`},{from:`features`,to:`split`,label:`read`},{from:`split`,to:`train`}],footer:`Dedup and the label join both run before anything lands in the feature store, so the same…`},ablationtable:{title:`What each piece of Transformer-v3 is worth`,icon:`sliders`,iconColor:`var(--presence)`,baseline:`Transformer-v3 (full)`,baselineValue:91.4,metric:`Accuracy (%)`,rows:[{removed:`Attention pooling`,value:88.9,deltaDirection:`worse`},{removed:`Data augmentation`,value:89.6},{removed:`Layer normalization`,value:90.1},{removed:`Checkpoint ensembling`,value:90.8},{removed:`Auxiliary reconstruction loss`,value:91.7,deltaDirection:`better`}],footer:`Attention pooling is load-bearing (−2.5 pp gone). The auxiliary loss was mis-weighted — d…`},interviewscorecard:{title:`Head of Customer Success, panel scores`,icon:`chat`,iconColor:`var(--insight)`,candidates:[`Priya N.`,`Marcus D.`,`Elena V.`],criteria:[`Leadership`,`CS strategy`,`Communication`,`Culture add`],scale:{min:1,max:5},cells:[{candidate:`Priya N.`,criterion:`Leadership`,rating:5},{candidate:`Priya N.`,criterion:`CS strategy`,rating:5,note:`Shipped a churn playbook at her last two companies.`},{candidate:`Priya N.`,criterion:`Communication`,rating:4},{candidate:`Priya N.`,criterion:`Culture add`,rating:5},{candidate:`Marcus D.`,criterion:`Leadership`,rating:4}],footer:`<b>Priya</b> led on every dimension, that’s who the offer went out to.`},paybandchart:{title:`Head of Customer Success, comp band`,icon:`chart`,iconColor:`var(--insight)`,role:`Head of Customer Success · L6`,min:165e3,mid:195e3,max:23e4,currency:`USD`,markers:[{name:`Priya N. · offer`,value:205e3},{name:`Marcus D. · CS lead`,value:178e3},{name:`Elena V. · CS lead`,value:149e3,flag:!0}],footer:`Priya’s offer lands above mid, in line with her panel scores. <b>Elena sits below band</b…`},headcountplan:{title:`Headcount plan by department`,icon:`layers`,iconColor:`var(--presence)`,depts:[{name:`Engineering`,budgeted:62,filled:51,openReqs:7},{name:`Go-to-market`,budgeted:34,filled:30,openReqs:4},{name:`Support & success`,budgeted:20,filled:18,openReqs:2},{name:`G&A`,budgeted:13,filled:13,openReqs:1}],footer:`Engineering carries the widest gap, 11 budgeted seats still open, 7 with active reqs.`},dosdonts:{title:`Running the panel`,icon:`shield`,iconColor:`var(--insight)`,heading:`What the two stalled loops last quarter taught us`,doLabel:`Do`,dontLabel:`Don’t`,pairs:[{topic:`Opening`,do:`Say up front how long you have and what you plan to cover.`,dont:`Open with “so, tell me about yourself”.`,why:`A stated agenda settles nerves; the open prompt just rewards whoever rehearsed hardest.`},{topic:`Questions`,do:`Ask every candidate the same four scored questions.`,dont:`Improvise a follow-up you would not ask the next person.`,why:`Different questions mean the scorecard is comparing nothing.`},{topic:`Off limits`,do:`Keep to the role, scope, tradeoffs, and how they handled a hard week.`,dont:`Ask about family plans, age, health, or immigration status.`,hazard:!0,why:`Unlawful to ask in most jurisdictions, and one slip can void the whole loop.`},{topic:`Scoring`,do:`Write your score down before you read anyone else’s.`,dont:`Debrief in the hallway on the way back to your desk.`,why:`The first opinion said out loud anchors the rest of the panel to it.`},{topic:`Closing`,dont:`Promise a decision date the recruiter has not agreed to.`}],footer:`Both loops that stalled last quarter stalled on the scoring step, not on the candidate.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={breakeven:{title:`Break-even on the new team plan`,icon:`chart`,iconColor:`var(--presence)`,currency:`$`,unit:`seats`,fixedCost:18e3,pricePerUnit:49,costPerUnit:13,footer:`Each seat clears <b>$36</b> after the costs that scale with it, so the $18k of fixed mont…`},depreciationschedule:{title:`The new server rack, on the books`,icon:`table`,iconColor:`var(--presence)`,assetDescription:`Dell PowerEdge server rack · placed in service Jan 2024`,cost:6e4,method:`Straight-line`,usefulLife:`5 years`,annualDepreciation:12e3,rows:[{period:`2024`,beginningBasis:6e4,depreciationExpense:12e3,accumulatedDepreciation:12e3,endingBasis:48e3},{period:`2025`,beginningBasis:48e3,depreciationExpense:12e3,accumulatedDepreciation:24e3,endingBasis:36e3},{period:`2026`,beginningBasis:36e3,depreciationExpense:12e3,accumulatedDepreciation:36e3,endingBasis:24e3},{period:`2027`,beginningBasis:24e3,depreciationExpense:12e3,accumulatedDepreciation:48e3,endingBasis:12e3},{period:`2028`,beginningBasis:12e3,depreciationExpense:12e3,accumulatedDepreciation:6e4,endingBasis:0}],footer:`Fully depreciated by end of 2028 — the same year we'd planned to refresh the hardware any…`},logicmodel:{title:`The churn fix, as a logic model`,icon:`spark`,iconColor:`var(--insight)`,columns:[{stage:`inputs`,items:[`2 hrs/week of CS time per new account`,`Rebuilt onboarding flow`]},{stage:`activities`,items:[`Week-1 welcome call`,`3-email onboarding sequence`,`In-app setup checklist`]},{stage:`outputs`,items:[`% of new solo accounts completing setup`,`Onboarding calls held per week`]},{stage:`outcomes`,items:[`Solo · Starter churn rate, currently 7.8%`]},{stage:`impact`,items:[`Retained MRR on the $48k base`]}],footer:`If setup completion and call attendance hold, solo-starter churn is the number that shoul…`},fiveforces:{title:`Why the market is pushing us this way`,icon:`chart`,iconColor:`var(--warning)`,industry:`AI coding assistants`,forces:[{id:`rivalry`,label:`Well-funded incumbents`,strength:`high`,note:`Two capitalized players already own distribution.`},{id:`newEntrants`,label:`New entrants`,strength:`high`,note:`Foundation-model APIs lower the barrier every quarter.`},{id:`suppliers`,label:`Model API providers`,strength:`medium`,note:`A handful of frontier labs set the price and the pace.`},{id:`buyers`,label:`Enterprise buyers`,strength:`medium`,note:`Switching cost is low until data + workflow lock-in builds.`},{id:`substitutes`,label:`General chat LLMs`,strength:`high`,note:`A generic assistant already covers the easy 80% of asks, free.`}],footer:`Rivalry and substitutes are the two forces working against the fictional company — source…`},cvssscorecard:{title:`Worst finding from the pre-split security sweep`,icon:`shield`,iconColor:`var(--warning)`,baseScore:7.5,severity:`high`,cve:`CVE-2024-21306`,vector:[{label:`AV`,value:`Network`},{label:`AC`,value:`Low`},{label:`PR`,value:`None`},{label:`UI`,value:`None`},{label:`S`,value:`Unchanged`}],footer:`Already patched upstream in a transitive dependency; bumping it is part of Wk 1–2.`},changelog:{title:`What six weeks of a source publication could look like`,icon:`doc`,iconColor:`var(--presence)`,versions:[{version:`v1.0`,date:`Wk 6`,entries:[{kind:`added`,text:`Public release: docs site and the reviewed source-available snapshot.`},{kind:`added`,text:`Maintainer-built connector catalog.`}]},{version:`v0.4`,date:`Wk 4`,entries:[{kind:`added`,text:`Soft launch to twelve design-partner teams.`},{kind:`changed`,text:`Switched the component schema to the stable v1 contract.`},{kind:`fixed`,text:`Local build no longer requires the internal package registry.`}]},{version:`v0.3`,date:`Wk 3`,entries:[{kind:`added`,text:`PolyForm Noncommercial terms, feedback policy, and legal notices.`},{kind:`deprecated`,text:`The old private-snapshot publication script.`}]},{version:`v0.2`,date:`Wk 2`,entries:[{kind:`removed`,text:`Internal-only connectors, scrubbed from the public snapshot.`},{kind:`security`,text:`Purged secrets accidentally left in the git history before the split.`}]},{version:`v0.1`,date:`Wk 1`,entries:[{kind:`added`,text:`Client and schema carved out into their own repository.`}]}],footer:`Five fictional milestones from carve-out to public source release.`},lessonplan:{title:`Today's tutoring session: reaction mechanisms`,icon:`doc`,iconColor:`var(--presence)`,subject:`Organic Chemistry`,gradeLevel:`Undergraduate · Org Chem II`,objectives:[`Distinguish SN1 from SN2 by substrate, nucleophile strength, and solvent.`,`Predict the major product and stereochemistry for a given substitution reaction.`,`Read a rate law and identify the reaction order it implies.`],materials:[`Flashcard deck`,`Practice problem set 7`,`Molecular model kit`],procedure:[{step:`Warm-up recall`,detail:`Quick flashcard pass on SN1 vs SN2 triggers.`,minutes:10},{step:`Mechanism walkthrough`,detail:`Work three mechanisms on the board, narrating each arrow-pushing step.`,minutes:25},{step:`Paired practice`,detail:`Two students per problem from set 7, then swap and check.`,minutes:20},{step:`Timed mini-mock`,detail:`Five questions, exam conditions, no notes.`,minutes:15},{step:`Debrief`,detail:`Review the two most-missed questions together.`,minutes:10}],assessment:`Exit ticket: one SN1 and one SN2 prediction, graded on mechanism arrows and stereochemist…`,footer:`Built around the two gaps your last mock exposed: arrow-pushing notation and solvent effe…`},equationblock:{title:`Rate law you keep forgetting`,icon:`sparkle`,math:{t:`row`,items:[{t:`ident`,v:`k`},{t:`op`,v:`=`},{t:`ident`,v:`A`},{t:`sup`,base:{t:`ident`,v:`e`},sup:{t:`row`,items:[{t:`op`,v:`−`},{t:`frac`,num:{t:`ident`,v:`Eₐ`},den:{t:`row`,items:[{t:`ident`,v:`R`},{t:`ident`,v:`T`}]}}]}}]},number:`(1)`,caption:`The Arrhenius equation, higher temperature, exponentially faster rate.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={numberline:{title:`Where 62% sits`,min:0,max:100,step:20,unit:`%`,points:[{value:62,label:`You`,color:`var(--warning)`}],intervals:[{from:70,to:100,label:`Target`,color:`var(--insight)`}]},workedexample:{title:`Isolating a variable`,problem:`Solve for x: <b>2x + 3 = 11</b>`,steps:[{label:`Subtract 3 from both sides`,math:{t:`row`,items:[{t:`num`,v:`2`},{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`8`}]},why:`Undo the +3 to isolate the x-term.`},{label:`Divide both sides by 2`,math:{t:`row`,items:[{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`4`}]},why:`Undo the ×2 to leave x alone.`}],result:{t:`row`,items:[{t:`ident`,v:`x`},{t:`op`,v:`=`},{t:`num`,v:`4`}]}},quiz:{title:`Quick check`,question:`Which reaction order has a half-life independent of concentration?`,options:[{text:`Zero order`},{text:`First order`,correct:!0,feedback:`Right, first-order half-life is ln2/k, with no [A].`},{text:`Second order`}],explanation:`Only first-order kinetics gives a constant half-life regardless of starting amount.`},quizsession:{title:`Chapter check`,icon:`check`,iconColor:`var(--insight)`,subject:`Org. Chem · Ch. 6–8`,passMark:70,questions:[{tag:`Substitution`,question:`A tertiary alkyl halide is left to react in a polar protic solvent, with no strong base p…`,options:[{text:`S<sub>N</sub>1`,correct:!0,feedback:`Right — the tertiary carbocation is stable enough to form first.`},{text:`S<sub>N</sub>2`,feedback:`Three alkyl groups block the backside attack S<sub>N</sub>2 needs.`},{text:`E2`,feedback:`E2 needs a strong base, and there isn’t one here.`},{text:`Radical substitution`}],explanation:`Polar protic solvents stabilise both the leaving group and the cation, so ionisation runs…`},{tag:`Oxidation`,question:`Which reagent stops a primary alcohol at the aldehyde?`,options:[{text:`PCC in CH<sub>2</sub>Cl<sub>2</sub>`,correct:!0},{text:`Hot KMnO<sub>4</sub>`,feedback:`That one runs all the way to the acid.`},{text:`Jones reagent (CrO<sub>3</sub>/H<sub>2</sub>SO<sub>4</sub>)`},{text:`NaBH<sub>4</sub>`,feedback:`NaBH<sub>4</sub> reduces — it never oxidises.`},{text:`H<sub>2</sub> over Pd/C`}],explanation:`PCC is anhydrous, so no hydrate forms and the oxidation halts at the aldehyde.`},{tag:`Structure`,question:`What is the hybridisation of the carbonyl carbon in a ketone?`,options:[{text:`sp`},{text:`sp<sup>2</sup>`,correct:!0},{text:`sp<sup>3</sup>`}],explanation:`Three sigma bonds and one pi bond — sp<sup>2</sup>, trigonal planar, about 120°.`}],footer:`Miss two or more and the wrap-up re-queues exactly those for a second pass.`},piedonut:{title:`Where your study hours went`,unit:`hrs`,centerValue:`24h`,centerLabel:`total`,slices:[{label:`Org Chem`,value:11,color:`var(--warning)`},{label:`Calc II`,value:6,color:`var(--presence)`},{label:`Macro`,value:4,color:`var(--insight)`},{label:`Spanish`,value:3,color:`var(--presence-soft)`}]},distributioncurve:{title:`Class score distribution`,kind:`normal`,mean:74,sd:11,shadeFrom:85,markers:[{x:62,label:`You`,color:`var(--warning)`}],unit:`%`,footer:`You sit left of the mean, the shaded tail is the A range you can still reach.`},dualaxis:{title:`Hours studied vs. mock score`,categories:[`Wk1`,`Wk2`,`Wk3`,`Wk4`],bar:{name:`Hours`,data:[4,6,8,11],color:`var(--presence)`,unit:`h`},line:{name:`Mock %`,data:[55,61,68,74],color:`var(--warning)`,unit:`%`}},scatterregression:{title:`Sleep vs. recall`,xLabel:`Sleep (h)`,yLabel:`Recall %`,points:[{x:5,y:58},{x:6,y:64},{x:6.5,y:67},{x:7,y:72},{x:8,y:79}]}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={molecularstructure:{title:`Ethanol`,formula:`C₂H₆O`,atoms:[{el:`C`,x:25,y:60,implicit:!0},{el:`C`,x:50,y:45,implicit:!0},{el:`O`,x:75,y:60}],bonds:[{from:0,to:1},{from:1,to:2}]},sequencediagram:{title:`How a graded exam flows`,actors:[{id:`you`,label:`You`},{id:`prof`,label:`Prof`},{id:`lms`,label:`LMS`}],messages:[{from:`you`,to:`prof`,label:`submit`},{from:`prof`,to:`lms`,label:`enter grade`},{from:`lms`,to:`you`,label:`notify`,reply:!0}]},diffviewer:{title:`Your answer, corrected`,leftLabel:`submitted`,rightLabel:`key`,lines:[{kind:`ctx`,text:`Step 1: identify the nucleophile`,oldNo:1,newNo:1},{kind:`del`,text:`Step 2: SN1, backside attack`,oldNo:2},{kind:`add`,text:`Step 2: SN2, backside attack inverts config`,newNo:2},{kind:`ctx`,text:`Step 3: name the product`,oldNo:3,newNo:3}]},sensitivitytable:{title:`Final grade: hours × focus`,rowVar:`Hours/day`,rows:[1,2,3],colVar:`Focus`,cols:[`Low`,`Med`,`High`],cells:[[64,68,72],[69,75,81],[73,82,90]],unit:`%`,baseCell:[1,1],footer:`Two focused hours a day clears the 70% target.`},periodictable:{title:`The elements in your reaction`,categories:[{key:`alkali`,label:`Alkali metal`,color:`var(--warning)`},{key:`halogen`,label:`Halogen`,color:`var(--insight)`},{key:`noble`,label:`Noble gas`,color:`var(--presence-soft)`}],elements:[{z:1,symbol:`H`,name:`Hydrogen`,col:1,row:1},{z:2,symbol:`He`,name:`Helium`,col:18,row:1,cat:`noble`},{z:3,symbol:`Li`,name:`Lithium`,col:1,row:2,cat:`alkali`,on:!0},{z:6,symbol:`C`,name:`Carbon`,col:14,row:2,on:!0},{z:8,symbol:`O`,name:`Oxygen`,col:16,row:2,on:!0}],footer:`The highlighted elements are the ones in this week’s mechanisms.`},elementcard:{title:`Element deep dive: oxygen`,icon:`sparkle`,iconColor:`var(--insight)`,symbol:`O`,name:`Oxygen`,z:8,mass:15.999,category:`Reactive nonmetal`,electronConfig:`1s² 2s² 2p⁴`,shells:[2,6],discovered:`1774 (Priestley and Scheele, independently)`,meltingPoint:-218.79,boilingPoint:-182.96,uses:[`Respiration`,`Steelmaking`,`Water treatment`,`Combustion`,`Welding`],footer:`The same O that anchors carbon dioxide and water anchors half of Earth’s crust by mass.`},circuitdiagram:{title:`A simple series circuit`,components:[{id:`bat`,kind:`battery`,x:20,y:50,label:`9V`},{id:`r1`,kind:`resistor`,x:60,y:20,label:`R₁ 10Ω`},{id:`bulb`,kind:`bulb`,x:80,y:50}],wires:[{from:`bat`,to:`r1`},{from:`r1`,to:`bulb`},{from:`bulb`,to:`bat`}],footer:`Current is the same everywhere in series; the bulb’s brightness tracks it.`},statemachine:{title:`Study session states`,states:[{id:`idle`,label:`Idle`,start:!0},{id:`study`,label:`Study`},{id:`break`,label:`Break`},{id:`done`,label:`Done`,final:!0}],transitions:[{from:`idle`,to:`study`,label:`start`},{from:`study`,to:`break`,label:`25 min`},{from:`break`,to:`study`,label:`resume`},{from:`study`,to:`done`,label:`finish`}]}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={erdiagram:{title:`How your grades data is modelled`,entities:[{id:`student`,label:`Student`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`name`,type:`text`}]},{id:`grade`,label:`Grade`,fields:[{name:`id`,type:`uuid`,key:`pk`},{name:`student_id`,type:`uuid`,key:`fk`},{name:`course`,type:`text`},{name:`score`,type:`int`}]}],relationships:[{from:`student`,to:`grade`,fromCard:`1`,toCard:`many`,label:`earns`}]},labpanel:{title:`Pre-exam health check`,caption:`Self-report · this week`,results:[{name:`Sleep`,value:5.5,unit:`h`,low:7,high:9,prior:6.5},{name:`Resting HR`,value:72,unit:`bpm`,low:60,high:100,prior:70},{name:`Hydration`,value:1.4,unit:`L`,low:2,high:3}],footer:`Sleep is below range, the single biggest lever on recall right now.`},geometrycanvas:{title:`A 30-60-90 triangle`,icon:`sparkle`,iconColor:`var(--presence)`,xRange:[-.5,5],yRange:[-.5,4],xLabel:`x`,yLabel:`y`,points:[{x:0,y:0,label:`A`,color:`var(--presence)`},{x:4,y:0,label:`B`,color:`var(--presence)`},{x:0,y:2.31,label:`C`,color:`var(--presence)`}],polygons:[{vertices:[{x:0,y:0},{x:4,y:0},{x:0,y:2.31}],color:`var(--presence)`}],angles:[{vertex:{x:4,y:0},from:{x:0,y:0},to:{x:0,y:2.31},label:`30°`,color:`var(--insight)`},{vertex:{x:0,y:0},from:{x:4,y:0},to:{x:0,y:2.31},label:`90°`,color:`var(--warning)`,rightAngle:!0}],annotations:[{x:2,y:-.3,text:`hyp = 4`,color:`var(--text-muted)`},{x:-.4,y:1.15,text:`2√3`,color:`var(--text-muted)`,anchor:`end`}],footer:`The 30-60-90 triangle: sides scale as 1 : √3 : 2. Memorise the short side and derive the …`},freebodydiagram:{title:`Forces on a sliding block`,icon:`shield`,iconColor:`var(--insight)`,object:`Block`,forces:[{label:`Weight (mg)`,angle:270,magnitude:20,color:`var(--warning)`},{label:`Normal (N)`,angle:90,magnitude:20,color:`var(--insight)`},{label:`Push (F)`,angle:0,magnitude:12,color:`var(--presence)`},{label:`Friction (f)`,angle:180,magnitude:5,color:`var(--danger)`}],footer:`Net horizontal force = 12 − 5 = 7 N → acceleration = 0.35 m/s² rightward.`},vectorspace:{title:`Eigenvectors of a 2×2 matrix`,icon:`sparkle`,iconColor:`var(--presence)`,vectors:[{x:2,y:1,label:`v₁`,color:`var(--presence)`},{x:-1,y:1,label:`v₂`,color:`var(--insight)`}],transformed:[{x:6,y:3,label:`Av₁`,color:`var(--presence)`},{x:-1,y:1,label:`Av₂`,color:`var(--insight)`}],xRange:[-3,8],yRange:[-1,5],footer:`Solid = original eigenvector, dashed = transformed. v₁ stretches (λ=3); v₂ is unchanged (…`},reactionmechanism:{title:`SN2 Mechanism: methyl bromide + OH⁻`,reactionType:`SN2`,steps:[{label:`CH<sub>3</sub>Br`,tag:`reactant`},{label:`[HO···CH<sub>3</sub>···Br]<sup>‡</sup>`,color:`var(--warning)`,tag:`transition state`},{label:`CH<sub>3</sub>OH`,tag:`product`}],conditions:[`OH⁻, acetone`,``],footer:`One step, backside attack, inversion of configuration (Walden inversion). Second-order: r…`},synthesisroute:{title:`Aspirin: a Convergent Synthesis`,icon:`spark`,iconColor:`var(--presence)`,nodes:[{id:`sal`,label:`Salicylic acid`,smiles:`OC(=O)c1ccccc1O`,role:`start`},{id:`anh`,label:`Acetic anhydride`,smiles:`CC(=O)OC(C)=O`,role:`start`},{id:`asp`,label:`Aspirin`,smiles:`CC(=O)Oc1ccccc1C(=O)O`,role:`target`},{id:`phenol`,label:`Phenol`,smiles:`Oc1ccccc1`,role:`start`}],edges:[{from:`sal`,to:`asp`,reagents:`Ac₂O`,conditions:`H₂SO₄ (cat.), 90 °C`,yieldPct:87},{from:`anh`,to:`asp`},{from:`asp`,to:`phenol`,direction:`retro`}],footer:`Salicylic acid and acetic anhydride converge on aspirin in one acetylation step (87% isol…`},hazardcard:{title:`Acetone — safety data`,cas:`67-64-1`,signalWord:`Danger`,pictograms:[`flammable`,`irritant`],hazards:[{code:`H225`,text:`Highly flammable liquid and vapour`},{code:`H319`,text:`Causes serious eye irritation`},{code:`H336`,text:`May cause drowsiness or dizziness`}],precautions:[{code:`P210`,text:`Keep away from heat, hot surfaces, sparks, open flames — no smoking`},{code:`P233`,text:`Keep container tightly closed`},{code:`P305+P351+P338`,text:`If in eyes: rinse cautiously with water for several minutes`},{code:`P403+P233`,text:`Store in a well-ventilated place, container tightly closed`}],footer:`The solvent in the SN2 run above — highly flammable, so keep it clear of open flames on t…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={labprotocol:{title:`PCR: amplifying the target gene fragment`,iconColor:`var(--insight)`,reagents:[{name:`Template DNA`,amount:`1 µL`,conc:`10 ng/µL`},{name:`Forward primer`,amount:`1 µL`,conc:`10 µM`},{name:`Reverse primer`,amount:`1 µL`,conc:`10 µM`},{name:`dNTP mix`,amount:`1 µL`,conc:`10 mM each`},{name:`Taq polymerase buffer`,amount:`5 µL`,conc:`10x`}],equipment:[`Thermal cycler`,`PCR tubes, 0.2 mL`,`Micropipette set`,`Ice bucket`],steps:[{text:`Assemble the master mix on ice, then aliquot into each PCR tube.`,temp:`4°C`},{text:`Initial denaturation — fully separate the template strands before cycling.`,duration:`3 min`,temp:`95°C`}],cycles:{repeat:30,steps:[{text:`Denature`,duration:`30 sec`,temp:`95°C`},{text:`Anneal primers`,duration:`30 sec`,temp:`58°C`},{text:`Extend`,duration:`45 sec`,temp:`72°C`}]},footer:`Finish with a 5 min extension at 72°C, then hold at 4°C. Run 5 µL on a 1.5% agarose gel t…`},argumentmap:{title:`SN2 vs SN1, which mechanism?`,claim:`The reaction proceeds via an SN2 (bimolecular nucleophilic substitution) mechanism.`,premises:[{type:`support`,text:`Primary substrate, minimal steric hindrance favors backside attack.`},{type:`support`,text:`Strong nucleophile (OH⁻) present in high concentration.`},{type:`support`,text:`Rate is second-order: rate = k[CH₃Br][OH⁻], both species appear in rate law.`},{type:`objection`,text:`Polar protic solvent (water) could stabilise a carbocation and favour SN1.`},{type:`qualifier`,text:`Solvent choice matters: aprotic solvents would further favour SN2 by not solvating the nu…`}],verdict:`SN2 dominates: primary substrate + strong nucleophile + second-order kinetics all point t…`},teachdiagram:{title:`Pythagorean theorem, built step by step`,ratio:1.6,baseShapes:[{kind:`line`,x1:5,y1:62,x2:95,y2:62,color:`var(--text-muted)`}],steps:[{caption:`Draw a right triangle with legs a and b.`,add:[{kind:`polygon`,points:`18,12 18,58 64,58`,fill:`var(--presence-soft)`,color:`var(--presence)`},{kind:`path`,d:`M18,52 L24,52 L24,58`,color:`var(--presence)`}],emphasize:[0]},{caption:`Label the sides: a = 3 (vertical), b = 4 (horizontal).`,add:[],labels:[{x:18,y:35,text:`a = 3`,side:`left`},{x:41,y:58,text:`b = 4`,side:`bottom`}]},{caption:`The hypotenuse c runs from the top corner to the right corner.`,add:[{kind:`line`,x1:18,y1:12,x2:64,y2:58,color:`var(--insight)`}],labels:[{x:42,y:33,text:`c = ?`,side:`right`,color:`var(--insight)`}],emphasize:[0]},{caption:`a² + b² = c² → 3² + 4² = 9 + 16 = 25 → c = √25 = 5.`,add:[],labels:[{x:42,y:33,text:`c = 5 ✓`,side:`right`,color:`var(--insight)`}]}]},fractionbar:{title:`Comparing Fractions`,fractions:[{numerator:1,denominator:2,label:`½`},{numerator:3,denominator:4,label:`¾`},{numerator:2,denominator:3,label:`⅔`}],showPie:!0,note:`¾ is the largest of the three; ½ is the smallest.`},gridmatrix:{title:`Ten-Frame: Showing 7`,variant:`tenframe`,cells:[[1,1,1,1,1],[1,1,0,0,0]],note:`7 filled dots, 3 empty — a quick way to see how far a number is from 10.`},conjugation:{title:`Hablar, Present & Preterite`,verb:`hablar`,language:`Spanish`,tenses:[{name:`Present`,forms:[{pronoun:`yo`,form:`hablo`},{pronoun:`tú`,form:`hablas`},{pronoun:`él/ella`,form:`habla`},{pronoun:`nosotros`,form:`hablamos`},{pronoun:`vosotros`,form:`habláis`}]},{name:`Preterite`,forms:[{pronoun:`yo`,form:`hablé`},{pronoun:`tú`,form:`hablaste`},{pronoun:`él/ella`,form:`habló`},{pronoun:`nosotros`,form:`hablamos`},{pronoun:`vosotros`,form:`hablasteis`}]}]},probabilitytree:{title:`Two Coin Tosses`,branches:[{label:`Heads`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]},{label:`Tails`,prob:.5,children:[{label:`Heads`,prob:.5,outcome:`P = 0.25`},{label:`Tails`,prob:.5,outcome:`P = 0.25`}]}],note:`Each outcome has equal probability of 25%.`},mindshape:{title:`Should I take the new role?`,center:`Is this the right time — or am I just running?`,atoms:[{id:`opt1`,kind:`option`,label:`Take the new role`,quote:`there is an offer and it pays a lot more`,status:`stable`,confidence:`said`},{id:`per1`,kind:`person`,label:`Maya`,quote:`Maya just started her new school`,status:`stable`,confidence:`said`},{id:`fea1`,kind:`fear`,label:`Scared of staying still`,quote:`i think i'm just scared of staying still`,status:`stable`,confidence:`said`},{id:`con1`,kind:`constraint`,label:`Lease up in March`,quote:`my lease is up in March anyway`,status:`stable`,confidence:`said`},{id:`loo1`,kind:`open_loop`,label:`Is it the right time?`,quote:`is it even the right time or am i just running`,status:`stable`,confidence:`said`}],links:[{from:`opt1`,to:`per1`,kind:`tensions`,label:`but`}],clusters:[{id:`c_move`,label:`The new role vs Maya`,atomIds:[`opt1`,`per1`],weight:3},{id:`c_run`,label:`Am I just running?`,atomIds:[`fea1`,`loo1`],weight:2},{id:`c_time`,label:`Lease timing`,atomIds:[`con1`],weight:1}],unsaid:{label:`Maybe this isn't about the job`,why:`Keeps framing it as career but circles back to fear.`,confidence:`maybe`}}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={world:{title:`Why did the Irish potato famine happen?`,world:{title:`Why did the Irish potato famine happen?`,outcomeId:`famine`,provenance:{illustrative:!0,notes:[`Illustrative example — a textbook causal web, not sourced data.`]},nodes:[{id:`monoculture`,label:`A single potato variety`,role:`root`,depth:0,tier:`T3`,detail:`Most of the crop was the same cultivar, so one pathogen could reach all of it.`,receipt:{quote:`Nearly the whole crop was a single variety.`,host:`sample passage`},children:[{id:`monoculture.lumper`,label:`The Lumper`,role:`root`,depth:0,tier:`T0`},{id:`monoculture.seed-reuse`,label:`Seed potatoes reused`,role:`root`,depth:0,tier:`T0`}]},{id:`blight`,label:`Phytophthora arrives`,role:`root`,depth:0,tier:`T3`,receipt:{quote:`The blight reached Ireland in the autumn of 1845.`,host:`sample passage`},series:{tier:`T3`,unit:`% of crop lost`,points:[{t:`1845`,value:33},{t:`1846`,value:75},{t:`1847`,value:25},{t:`1848`,value:50}]}},{id:`tenancy`,label:`Smallholder tenancy`,role:`mechanism`,depth:1,tier:`T0`,detail:`Rents were paid in grain, leaving the potato as the household staple.`},{id:`exports`,label:`Grain kept leaving`,role:`mechanism`,depth:1,tier:`T0`},{id:`famine`,label:`Mass starvation and emigration`,role:`outcome`,depth:2,tier:`T3`,receipt:{quote:`A million died and a million more left the island.`,host:`sample passage`}}],edges:[{from:`monoculture`,to:`blight`,verb:`let it spread`,sign:1,tier:`T3`,relation:`enables`,status:`provisional`,provisional:!0},{from:`blight`,to:`famine`,verb:`destroyed the staple`,sign:1,weight:.6,tier:`T3`,relation:`causes`,status:`supported`,receipt:{quote:`The blight reached Ireland in the autumn of 1845.`,host:`sample passage`},receipts:[{quote:`The blight reached Ireland in the autumn of 1845.`,host:`sample passage`}]},{from:`tenancy`,to:`famine`,verb:`left no fallback`,sign:1,tier:`T0`,relation:`contributes`,status:`provisional`,provisional:!0},{from:`exports`,to:`famine`,verb:`drained the surplus`,sign:1,tier:`T0`,relation:`contributes`,status:`provisional`,provisional:!0}]}},areaplot:{title:`The definite integral as area: ∫₀² x² dx`,icon:`chart`,iconColor:`var(--presence)`,xLabel:`x`,yLabel:`y`,xDomain:[0,3],yDomain:[0,9],origin:!0,areaLabel:`area = 8/3 ≈ 2.67`,curves:[{label:`y = x²`,color:`var(--presence)`,points:[{x:0,y:0},{x:.1,y:.01},{x:.2,y:.04},{x:.3,y:.09},{x:.4,y:.16}]}],shade:{from:`axis`,to:0,x0:0,x1:2},rects:{n:4,rule:`mid`},footer:`The shaded region is the integral. Four midpoint rectangles already estimate it at <b>2.6…`},wave:{title:`Wavelength and amplitude of a sound wave`,icon:`spark`,iconColor:`var(--presence)`,xUnit:`distance (m)`,showWavelength:!0,showAmplitude:!0,waves:[{amplitude:3,wavelength:.78,label:`A4 (440 Hz)`,color:`var(--presence)`},{amplitude:1.5,wavelength:.39,label:`2nd harmonic`,color:`var(--insight)`}],footer:`At 343 m/s in air, a 440 Hz tone has wavelength λ = v/f = 343/440 ≈ 0.78 m. The 2nd harmo…`},energydiagram:{title:`Energy profile of an exothermic reaction`,icon:`spark`,iconColor:`var(--danger)`,yUnit:`kJ/mol`,reactants:0,ts:75,products:-45,reactantLabel:`Reactants`,tsLabel:`Transition state`,productLabel:`Products`,footer:`Ea = 75 kJ/mol is the barrier the reactants must overcome; the products sit 45 kJ/mol low…`},phylotree:{title:`How the great apes are related`,icon:`spark`,iconColor:`var(--presence)`,root:{children:[{name:`Orangutan`},{children:[{name:`Gorilla`},{children:[{name:`Human`},{children:[{name:`Chimpanzee`},{name:`Bonobo`}]}]}]}]},clades:[{label:`Hominini`,tips:[`Human`,`Chimpanzee`,`Bonobo`],color:`var(--insight)`},{label:`Pan`,tips:[`Chimpanzee`,`Bonobo`],color:`var(--warning)`}],traits:[{on:`Human`,label:`bipedal`,color:`var(--warning)`}],footer:`Each branch point is a common ancestor. Chimpanzees and bonobos are each other’s cl…`},parsetree:{title:`Grammar: a constituency parse tree`,icon:`layers`,iconColor:`var(--presence)`,sentence:`The quick fox jumps over the lazy dog.`,colorPos:!0,root:{label:`S`,children:[{label:`NP`,children:[{label:`Det`,word:`The`},{label:`Adj`,word:`quick`},{label:`N`,word:`fox`}]},{label:`VP`,children:[{label:`V`,word:`jumps`},{label:`PP`,children:[{label:`P`,word:`over`},{label:`NP`,children:[{label:`Det`,word:`the`},{label:`Adj`,word:`lazy`},{label:`N`,word:`dog`}]}]}]}]},footer:`The sentence (<b>S</b>) splits into a noun phrase (<b>NP</b>) and a verb phrase (<b>VP</b…`},eratimeline:{title:`Classical antiquity: Greece, Rome, and China side by side`,icon:`clock`,iconColor:`var(--presence)`,min:-500,max:500,tracks:[{label:`Greece`,color:`var(--presence)`,spans:[{label:`Classical`,start:-480,end:-323},{label:`Hellenistic`,start:-323,end:-31}],events:[{at:-323,label:`Alexander dies`}]},{label:`Rome`,color:`var(--insight)`,spans:[{label:`Republic`,start:-509,end:-27},{label:`Empire (West)`,start:-27,end:476}],events:[{at:-44,label:`Caesar killed`}]},{label:`China`,color:`var(--warning)`,spans:[{label:`Qin`,start:-221,end:-206},{label:`Han`,start:-206,end:220}],events:[{at:-221,label:`Great Wall unified`}]}],footer:`Read down a year to see what was happening at once: when Rome turned from Republic to Emp…`},celldiagram:{title:`Anatomy of an animal cell`,icon:`sparkle`,iconColor:`var(--presence)`,cellType:`animal`,parts:[{key:`membrane`,note:`Selectively permeable boundary controlling what enters and leaves.`},{key:`cytoplasm`,note:`Gel-like fluid where the organelles sit and most reactions occur.`},{key:`nucleus`,highlight:!0,color:`var(--presence)`,note:`Holds the DNA and directs the cell; the nucleolus inside builds ribosomes.`},{key:`mitochondria`,highlight:!0,color:`var(--warning)`,note:`The powerhouse: makes ATP via aerobic respiration.`},{key:`er`,note:`Endoplasmic reticulum — folds and transports proteins and lipids.`}],footer:`An animal cell has no cell wall, chloroplasts, or large central vacuole — those are plant…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={raydiagram:{title:`Convex lens: object beyond 2F`,icon:`eye`,iconColor:`var(--presence)`,element:`convex-lens`,objectDistance:30,focalLength:10,objectHeight:1,footer:`With d<sub>o</sub> = 30 cm and f = 10 cm, the lens equation gives d<sub>i</sub> = 15 cm: …`},interferencepattern:{title:`Double-slit interference of green laser light`,icon:`spark`,iconColor:`var(--presence)`,slits:2,wavelengthNm:532,slitSeparationUm:250,intensity:[{position:-6,value:.02},{position:-5,value:.15},{position:-4,value:.02},{position:-3.5,value:.35},{position:-3,value:.05}],footer:`The bright fringes fall where the path difference from the two slits is a whole number of…`},vectorfield:{title:`Slope field for y' = x − y`,icon:`sparkle`,iconColor:`var(--presence)`,xLabel:`x`,yLabel:`y`,xRange:[-2,2],yRange:[-2,2],samples:[{x:-2,y:-2,slope:0},{x:-1,y:-2,slope:1},{x:0,y:-2,slope:2},{x:1,y:-2,slope:3},{x:2,y:-2,slope:4}],curves:[{label:`y = x − 1 + e⁻ˣ`,color:`var(--presence)`,points:[{x:-2,y:4.389},{x:-1.5,y:1.982},{x:-1,y:.718},{x:-.5,y:.149},{x:0,y:0}]}],footer:`Each dash is the tangent slope x − y at that point; the solution curve flows along them, …`},phasediagram:{title:`The phase diagram of water`,icon:`spark`,iconColor:`var(--presence)`,tUnit:`K`,pUnit:`atm`,tDomain:[180,700],pDomain:[0,240],boundaries:[{kind:`sublimation`,label:`Sublimation (solid⇌gas)`,color:`var(--insight)`,points:[{t:180,p:0},{t:220,p:6e-4},{t:250,p:8e-4},{t:273.16,p:.006}]},{kind:`fusion`,label:`Fusion (solid⇌liquid) — note the negative slope`,color:`var(--presence)`,points:[{t:273.16,p:.006},{t:269,p:60},{t:264,p:140},{t:259,p:240}]},{kind:`vaporization`,label:`Vaporization (liquid⇌gas)`,color:`var(--warning)`,points:[{t:273.16,p:.006},{t:373.15,p:1},{t:450,p:9},{t:550,p:60},{t:620,p:160}]}],triplePoint:{t:273.16,p:.006},criticalPoint:{t:647.1,p:218},regions:[{t:235,p:150,phase:`solid`,label:`Solid (ice)`,color:`var(--insight)`},{t:420,p:175,phase:`liquid`,label:`Liquid`,color:`var(--presence)`},{t:500,p:30,phase:`gas`,label:`Gas (vapour)`,color:`var(--warning)`},{t:665,p:232,phase:`supercritical`,label:`Supercritical fluid`,color:`var(--danger)`,anchor:`end`}],footer:`Water’s fusion line tilts slightly LEFT as pressure rises — a rare negative s…`},particlemodel:{title:`Particle arrangement across the three phases`,icon:`sparkle`,iconColor:`var(--presence)`,panels:[{phase:`solid`,label:`Fixed lattice, vibrating in place`,particleCount:16},{phase:`liquid`,label:`Close together, free to flow`,particleCount:16},{phase:`gas`,label:`Spread out, moving freely`,particleCount:16}],footer:`Same particle count, three arrangements: a solid locks particles into a rigid grid, a liq…`},bohrmodel:{title:`Bohr model of a sodium atom`,icon:`spark`,iconColor:`var(--presence)`,symbol:`Na`,name:`Sodium`,protons:11,neutrons:12,shells:[2,8,1],footer:`Sodium has 11 protons, so a neutral atom has 11 electrons arranged 2·8·1 ac…`},orbitaldiagram:{title:`Electron configuration of iron`,icon:`sparkle`,iconColor:`var(--presence)`,element:`Fe`,orbitals:[{subshell:`1s`,electrons:[2]},{subshell:`2s`,electrons:[2]},{subshell:`2p`,electrons:[2,2,2]},{subshell:`3s`,electrons:[2]},{subshell:`3p`,electrons:[2,2,2]}],configString:`1s² 2s² 2p⁶ 3s² 3p⁶ 4s² 3d⁶`,footer:`Hund's rule fills all five 3d boxes singly before any pairs up — so the sixth 3d electron…`},pedigree:{title:`Tracing an autosomal recessive trait`,icon:`share`,iconColor:`var(--presence)`,people:[{id:`g1`,sex:`male`,carrier:!0,genotype:`Aa`,label:`I-1`},{id:`g2`,sex:`female`,carrier:!0,genotype:`Aa`,label:`I-2`,partner:`g1`},{id:`c1`,sex:`female`,label:`II-1`,parents:[`g2`,`g1`],genotype:`AA`},{id:`c2`,sex:`male`,affected:!0,proband:!0,label:`II-2`,parents:[`g2`,`g1`],genotype:`aa`},{id:`c3`,sex:`female`,carrier:!0,label:`II-3`,parents:[`g2`,`g1`],genotype:`Aa`,partner:`m1`}],footer:`Both grandparents (I-1, I-2) are unaffected carriers (Aa), so each child had a 1-in-4 cha…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={indifferencecurve:{title:`Consumer choice: the optimal bundle`,icon:`chart`,iconColor:`var(--presence)`,xLabel:`Good X (units)`,yLabel:`Good Y (units)`,curves:[{label:`U₁`,points:[{x:1.14,y:10.53},{x:1.6,y:7.5},{x:2.2,y:5.45},{x:3,y:4},{x:4,y:3}]},{label:`U₂`,points:[{x:2.29,y:10.48},{x:2.8,y:8.57},{x:3.4,y:7.06},{x:4,y:6},{x:4.8,y:5}]},{label:`U₃`,points:[{x:3.81,y:10.5},{x:4.5,y:8.89},{x:5.4,y:7.41},{x:6.5,y:6.15},{x:7.8,y:5.13}]}],budget:{intercept:8,slope:-.6667},optimal:{x:6,y:4,label:`(6, 4)`},yMax:11,footer:`With income <b>$24</b> and prices <b>P<sub>X</sub> = $2</b>, <b>P<sub>Y</sub> = $3</b>, t…`},causationchain:{title:`Causes and consequences of World War I`,event:{label:`Outbreak of World War I (1914)`},causes:[{label:`Assassination of Archduke Franz Ferdinand`,weight:.95,term:`short`},{label:`July Crisis and ultimatum to Serbia`,weight:.7,term:`short`},{label:`The alliance system (Triple Entente vs. Triple Alliance)`,weight:.85,term:`long`},{label:`Militarism and the arms race`,weight:.6,term:`long`},{label:`Imperial and nationalist rivalries`,weight:.55,term:`long`}],consequences:[{label:`Roughly 17 million deaths across the war`,weight:.9,term:`short`},{label:`Treaty of Versailles (1919)`,weight:.8,term:`short`},{label:`Collapse of four empires`,weight:.7,term:`long`},{label:`Rise of fascism and the path to World War II`,weight:.85,term:`long`}],footer:`The assassination was the trigger, but it lit a fuse laid by years of alliances, militari…`},equationbalancer:{title:`Combustion of methane`,icon:`sparkle`,iconColor:`var(--presence)`,balanced:!0,reactants:[{formula:`CH4`,coeff:1},{formula:`O2`,coeff:2}],products:[{formula:`CO2`,coeff:1},{formula:`H2O`,coeff:2}],elementTally:[{element:`C`,left:1,right:1},{element:`H`,left:4,right:4},{element:`O`,left:4,right:4}],caption:`CH₄ + 2 O₂ → CO₂ + 2 H₂O. Every element has the same number of atoms on each side, so mas…`,footer:`The coefficient of 2 on O₂ supplies the 4 oxygen atoms the products need (2 in CO₂ + 2 in…`},yieldcalc:{title:`Percent yield: ammonia synthesis`,icon:`sparkle`,iconColor:`var(--presence)`,reaction:`N2 + 3 H2 -> 2 NH3`,limitingReagent:`H2`,molesAvailable:[{reagent:`N2`,moles:2},{reagent:`H2`,moles:5}],theoreticalYield:56.8,actualYield:42.5,unit:`g`,footer:`Each mole of N₂ needs 3 mol H₂ — 2.0 mol N₂ would need 6.0 mol H₂, but only 5.0 mol is on…`},vseprmolecule:{title:`Shape of a water molecule`,icon:`sparkle`,iconColor:`var(--insight)`,central:`O`,bonds:[{atom:`H`,order:1},{atom:`H`,order:1}],lonePairs:2,shape:`bent`,bondAngle:`104.5°`,caption:`Oxygen has two bonding pairs and two lone pairs. The four electron domains repel into a t…`,footer:`The two lone pairs sit closer to the oxygen and push the O–H bonds together, compressing …`},titrationcurve:{title:`Titrating acetic acid with NaOH`,icon:`chart`,iconColor:`var(--presence)`,points:[{volumeMl:0,pH:2.9},{volumeMl:5,pH:4.14},{volumeMl:10,pH:4.58},{volumeMl:12.5,pH:4.76},{volumeMl:15,pH:4.94}],equivalenceVolumeMl:25,pKa:4.76,bufferBand:[5,20],footer:`The flat buffer region runs where acetic acid and its conjugate base coexist; the steep j…`},unitcircle:{title:`Unit circle at θ = 135°`,icon:`chart`,iconColor:`var(--presence)`,angleDeg:135,showSpecial:!0,caption:`At 135° (3π/4 radians) the terminal point is (−√2/2, √2/2): cosine is negative and sine i…`,footer:`135° has a reference angle of 45°, so its sine and cosine share the magnitude √2/2 ≈ 0.70…`},solidfigure:{title:`Rectangular prism`,icon:`layers`,iconColor:`var(--presence)`,solid:`rectprism`,dims:{w:1.6,h:1,d:.9},labels:{v:8,e:12,f:6},surfaceArea:`94 cm²`,volume:`60 cm³`,caption:`A 5 × 4 × 3 cm box. Surface area sums the six rectangular faces (2(lw + lh + wh) = 94 cm²…`,footer:`Every convex solid satisfies Euler’s formula V − E + F = 2: here 8 − 12 + 6 = 2, a quick …`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={crosssection:{title:`Inside the Earth`,icon:`globe`,iconColor:`var(--warning)`,orientation:`concentric`,depthUnit:`km`,layers:[{name:`Crust`,thickness:35,color:`var(--warning)`,note:`0–35 km · solid rock`},{name:`Mantle`,thickness:2865,color:`var(--danger)`,note:`35–2900 km · hot silicate`},{name:`Outer core`,thickness:2255,color:`var(--presence)`,note:`2900–5155 km · liquid iron`},{name:`Inner core`,thickness:1216,color:`var(--insight)`,note:`5155–6371 km · solid iron`}],caption:`The Earth is layered by density: a thin rocky crust over the deep mantle, then a liquid i…`,footer:`Convection in the liquid outer core generates Earth’s magnetic field, while the immense p…`},loaddiagram:{title:`Simply-supported beam: central point load`,icon:`layers`,iconColor:`var(--presence)`,span:8,unit:`kN`,supports:[{at:0,kind:`pin`},{at:8,kind:`roller`}],loads:[{kind:`point`,at:4,mag:20,label:`P = 20 kN`}],shear:[{x:0,v:10},{x:4,v:10},{x:4,v:-10},{x:8,v:-10}],moment:[{x:0,m:0},{x:1,m:10},{x:2,m:20},{x:3,m:30},{x:4,m:40}],caption:`Reactions split the 20 kN load evenly (R = P/2 = 10 kN), so shear steps from +10 to −10 u…`},scansionmark:{title:`Scanning the meter`,meter:`iambic pentameter`,lines:[{syllables:[{text:`Shall`,stress:`unstressed`},{text:`I`,stress:`stressed`},{text:`com`,stress:`unstressed`},{text:`pare`,stress:`stressed`},{text:`thee`,stress:`unstressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`Thou`,stress:`unstressed`},{text:`art`,stress:`stressed`},{text:`more`,stress:`unstressed`},{text:`love`,stress:`stressed`},{text:`ly`,stress:`unstressed`}],feet:[2,4,6,8],rhyme:`b`},{syllables:[{text:`Rough`,stress:`unstressed`},{text:`winds`,stress:`stressed`},{text:`do`,stress:`unstressed`},{text:`shake`,stress:`stressed`},{text:`the`,stress:`unstressed`}],feet:[2,4,6,8],rhyme:`a`},{syllables:[{text:`And`,stress:`unstressed`},{text:`sum`,stress:`stressed`},{text:`mer’s`,stress:`unstressed`},{text:`lease`,stress:`stressed`},{text:`hath`,stress:`unstressed`}],feet:[2,4,6,8],rhyme:`b`}],caption:`Five unstressed–stressed feet per line (da-DUM × 5) is the iambic pentameter heartbeat; t…`,footer:`Read aloud, the stresses fall on the colored beats — the meter is what you hear, not just…`},clockface:{title:`Reading the clock`,icon:`clock`,iconColor:`var(--presence)`,time:`3:40`,digital:!0,caption:`The hour hand sits past 3, two-thirds of the way toward 4, while the minute hand points t…`},moneytray:{title:`Counting coins`,icon:`cart`,iconColor:`var(--warning)`,currency:`$`,mode:`count`,tokens:[{denom:.25,label:`Quarter`,count:3},{denom:.1,label:`Dime`,count:2},{denom:.01,label:`Penny`,count:4}],caption:`Three quarters make 75¢, two dimes add 20¢, and four pennies add 4¢ — ninety-nine cents i…`},placevaluechart:{title:`Place value of 347`,icon:`layers`,iconColor:`var(--insight)`,value:347,showBlocks:!0,expanded:!0,caption:`Each digit holds a different value by its place: 3 hundreds, 4 tens, and 7 ones combine t…`},columnarithmetic:{title:`Adding with regrouping: 267 + 458`,icon:`table`,iconColor:`var(--presence)`,op:`add`,operands:[267,458],showCarries:!0,caption:`7 + 8 makes 15 — write the 5, carry the 1. That carried 1 joins the tens column, and 6 + …`},pictograph:{title:`Population by continent`,icon:`globe`,iconColor:`var(--presence)`,unitValue:500,rows:[{label:`Asia`,count:4700},{label:`Africa`,count:1400},{label:`Europe`,count:750},{label:`Americas`,count:1050},{label:`Oceania`,count:45}],footer:`Each icon stands for 500 million people, so Asia’s roughly 4.7 billion tiles as nin…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={populationpyramid:{title:`Japan's population by age`,icon:`chart`,iconColor:`var(--presence)`,leftLabel:`Male`,rightLabel:`Female`,unit:`M`,bands:[{label:`80+`,left:3.1,right:5.2},{label:`60-79`,left:14.8,right:16.5},{label:`40-59`,left:16.2,right:15.9},{label:`20-39`,left:12.1,right:11.6},{label:`0-19`,left:9.8,right:9.3}],footer:`The bulge sits at 40-79, not 0-19 — a shrinking base is the shape of a population that&rs…`},shapecard:{title:`Shapes and their attributes`,icon:`sparkle`,iconColor:`var(--presence)`,shapes:[{name:`Hexagon`,kind:`hexagon`,sides:6,vertices:6,example:`Honeycomb cell`},{name:`Cube`,kind:`cube`,faces:6,edges:12,vertices:8,example:`Dice`}],caption:`A hexagon is a flat six-sided polygon; a cube is the solid you get when six square faces …`},letterform:{title:`Forming lowercase 'a'`,icon:`edit`,iconColor:`var(--insight)`,letter:`a`,case:`lower`,showGuides:!0,strokes:[{order:1,hint:`Start below the midline and curve left, down, and around to close the bowl.`},{order:2,hint:`Draw a straight line down the right side, sitting on the baseline.`}],caption:`The lowercase a is built from two strokes: a round bowl, then a straight tail on the righ…`},toolscale:{title:`Reading a ruler`,icon:`chart`,iconColor:`var(--presence)`,instrument:`ruler`,value:2.375,max:3,unit:`in`,fractional:!0,caption:`The arrow lands three of the eight marks past the 2-inch line, which reads 2 and three-ei…`},cyclewheel:{title:`The water cycle`,icon:`cloud`,iconColor:`var(--presence)`,stages:[{label:`Evaporation`,caption:`Sun heats water to vapor`,icon:`sun`},{label:`Condensation`,caption:`Vapor cools into clouds`,icon:`cloud`},{label:`Precipitation`,caption:`Rain, snow, and hail fall`,icon:`rain`},{label:`Collection`,caption:`Water gathers in oceans`,icon:`globe`}],caption:`A closed loop driven by the sun: water leaves the surface as vapor, returns as precipitat…`,footer:`No water is created or lost — the same supply circulates endlessly between the surf…`},phonicsword:{title:`Sound it out: ship`,icon:`captions`,iconColor:`var(--presence)`,word:`ship`,chunks:[{text:`sh`,sound:`/ʃ/`,kind:`digraph`},{text:`i`,sound:`/ɪ/`,kind:`grapheme`},{text:`p`,sound:`/p/`,kind:`grapheme`}],rhymes:[`chip`,`trip`,`flip`,`skip`],caption:`Two letters, one sound: 'sh' is a digraph — tap each box, then blend the whole word.`},sightwordlist:{title:`Sight words to review`,icon:`captions`,iconColor:`var(--presence)`,listName:`Dolch Pre-Primer`,words:[{word:`the`,mastery:`mastered`},{word:`and`,mastery:`mastered`},{word:`to`,mastery:`mastered`},{word:`said`,mastery:`practicing`},{word:`was`,mastery:`practicing`}]},alphabetchart:{title:`The alphabet, A to Z`,icon:`edit`,iconColor:`var(--presence)`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={morphemebreakdown:{title:`Breaking down "unbreakable"`,icon:`doc`,iconColor:`var(--presence)`,word:`unbreakable`,morphemes:[{text:`un`,role:`prefix`,meaning:`not, opposite of`},{text:`break`,role:`root`,meaning:`to separate into pieces by force`},{text:`able`,role:`suffix`,meaning:`capable of, able to`}],footer:`The prefix negates the root and the suffix turns it into an adjective: "not able to be br…`},skilltree:{title:`Calculus mastery path`,icon:`spark`,iconColor:`var(--presence)`,caption:`4 of 7 skills unlocked — hover any skill to trace its prerequisites and what it unlocks n…`,nodes:[{id:`limits`,label:`Limits`,tier:0,state:`maxed`,cost:`4 pts`},{id:`functions`,label:`Functions & graphs`,tier:0,state:`unlocked`,cost:`3 pts`},{id:`derivatives`,label:`Derivatives`,tier:1,state:`unlocked`,cost:`5 pts`,requires:[`limits`]},{id:`chainrule`,label:`Chain rule`,tier:1,state:`available`,cost:`4 pts`,requires:[`derivatives`,`functions`]},{id:`integrals`,label:`Integrals`,tier:1,state:`available`,cost:`5 pts`,requires:[`limits`]}],footer:`Unlock <strong>Chain rule</strong> next — it gates Optimization and rounds out tier 2.`},violinplot:{title:`Exam score distributions`,icon:`chart`,iconColor:`var(--insight)`,showBox:!0,unit:`pts`,groups:[{label:`Quiz`,color:`var(--insight)`,values:[62,65,67,70,72]},{label:`Midterm`,color:`var(--presence)`,values:[55,60,63,66,68]},{label:`Final`,color:`var(--warning)`,values:[58,61,64,67,70]}]},stemleafplot:{title:`Quiz score stem-and-leaf`,icon:`layers`,iconColor:`var(--presence)`,values:[62,65,67,70,72],leafUnit:1},surfaceplot:{title:`z = e^−(x²+y²) · Gaussian bell`,icon:`chart`,iconColor:`var(--presence)`,mode:`contour`,levels:7,xLabel:`x`,yLabel:`y`,grid:[[.14,.26,.35,.35,.26],[.26,.49,.67,.67,.49],[.35,.67,.92,.92,.67],[.35,.67,.92,1,.67],[.26,.49,.67,.67,.49]],caption:`The Gaussian bell surface — a model for probability density, heat diffusion, and the norm…`},qqplot:{title:`Normality check · exam scores`,icon:`chart`,iconColor:`var(--insight)`,values:[58,61,63,65,67],distribution:`normal`,xlabel:`Theoretical quantiles`,ylabel:`Sample quantiles`},samplingdistribution:{title:`Central limit theorem`,icon:`chart`,iconColor:`var(--presence)`,population:{shape:`skewed`},sampleSize:30,numSamples:200},gridtransform:{title:`Horizontal shear T = [[1,1],[0,1]]`,icon:`layers`,iconColor:`var(--presence)`,matrix:[[1,1],[0,1]],showEigens:!0,animated:!0}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={phaseportrait:{title:`Simple harmonic oscillator phase portrait`,icon:`chart`,iconColor:`var(--insight)`,fx:`y`,gy:`-x`,xDomain:[-3,3],yDomain:[-3,3],showNullclines:!0,trajectories:[{x0:2,y0:0},{x0:1,y0:0}],xlabel:`x`,ylabel:`ẋ`},twocolumnproof:{title:`Isosceles triangle · base angles theorem`,icon:`layers`,iconColor:`var(--presence)`,given:`Triangle ABC with AB ≅ AC`,prove:`∠B ≅ ∠C`,steps:[{statement:`AB ≅ AC`,reason:`Given`},{statement:`Draw AD bisecting ∠BAC`,reason:`Angle Bisector Postulate`},{statement:`∠BAD ≅ ∠CAD`,reason:`Definition of angle bisector`},{statement:`AD ≅ AD`,reason:`Reflexive Property`},{statement:`△ABD ≅ △ACD`,reason:`SAS Congruence`}]},polarplot:{title:`Rose curve r = cos(2θ)`,icon:`chart`,iconColor:`var(--presence)`,fn:`cos(2*t)`,domain:[0,6.2832]},taylorseries:{title:`Taylor series for sin x`,icon:`chart`,iconColor:`var(--insight)`,fn:`sin`,center:0,showTerms:4},areamodel:{title:`23 × 14 area model`,icon:`layers`,iconColor:`var(--warning)`,factorA:[20,3],factorB:[10,4],showProducts:!0,showSum:!0,caption:`Each cell shows the partial product; the sum equals 322.`},dnahelix:{title:`DNA — Watson-Crick base pairing`,icon:`sparkle`,iconColor:`var(--presence)`,bases:[{pair:`AT`},{pair:`GC`},{pair:`CG`},{pair:`TA`},{pair:`GC`,highlight:!0}],mode:`helix`,showLabels:!0,caption:`A-T (2 H-bonds) and G-C (3 H-bonds) pair across the two antiparallel strands.`},plasmidmap:{title:`pUC19 Cloning Vector`,icon:`sparkle`,iconColor:`var(--presence)`,sizeBp:2686,features:[{name:`AmpR`,startBp:1626,endBp:2486,kind:`marker`,strand:`minus`},{name:`lacZα`,startBp:396,endBp:626,kind:`gene`,strand:`plus`},{name:`lac promoter`,startBp:626,endBp:656,kind:`promoter`,strand:`plus`},{name:`rep origin`,startBp:2600,endBp:2650,kind:`terminator`}],sites:[{name:`EcoRI`,posBp:396,cutsOnce:!0},{name:`BamHI`,posBp:411,cutsOnce:!0},{name:`HindIII`,posBp:447,cutsOnce:!0},{name:`PstI`,posBp:435}],origin:{name:`ori`,posBp:2e3},footer:`The multiple cloning site sits inside lacZα (blue/white screening); AmpR selects for tran…`},linespectrum:{title:`Hydrogen emission spectrum (Balmer series)`,icon:`eye`,iconColor:`var(--warning)`,lines:[{wavelength:656,intensity:1,label:`Hα`},{wavelength:486,intensity:.36,label:`Hβ`},{wavelength:434,intensity:.16,label:`Hγ`},{wavelength:410,intensity:.08,label:`Hδ`}],mode:`emission`,elementLabel:`Hydrogen (Balmer series, n→2)`,caption:`Each line corresponds to an electron falling to n=2. The 656 nm red Hα line is brightest.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={pyramidtiers:{title:`Bloom's taxonomy`,icon:`layers`,iconColor:`var(--insight)`,tiers:[{label:`Remember`,note:`Recall facts and basic concepts`},{label:`Understand`,note:`Explain ideas in your own words`},{label:`Apply`,note:`Use the concept in a new situation`},{label:`Analyse`,note:`Draw connections between ideas`},{label:`Evaluate`,note:`Justify a decision or course of action`}],caption:`Higher tiers require deeper cognitive engagement. Most exam questions test Apply and abov…`},rubric:{title:`How the mock exam is graded`,icon:`check`,iconColor:`var(--presence)`,criteria:[`Reaction mechanism`,`Stereochemistry`,`Written explanation`],levels:[`Developing`,`Proficient`,`Advanced`],cells:[{criterion:`Reaction mechanism`,level:`Developing`,descriptor:`Names the reaction type but the arrow-pushing has gaps.`},{criterion:`Reaction mechanism`,level:`Proficient`,descriptor:`Correct curved arrows for a standard SN1/SN2 case.`,achieved:!0},{criterion:`Reaction mechanism`,level:`Advanced`,descriptor:`Explains WHY the mechanism proceeds that way, not just how.`},{criterion:`Stereochemistry`,level:`Developing`,descriptor:`Identifies chiral centers but not the resulting configuration.`},{criterion:`Stereochemistry`,level:`Proficient`,descriptor:`Correctly predicts inversion vs. retention for a single step.`}],scores:[{criterion:`Reaction mechanism`,score:8},{criterion:`Stereochemistry`,score:10},{criterion:`Written explanation`,score:7}],maxScore:10,footer:`Stereochemistry is already Advanced, the mechanism write-up is the one still worth anothe…`},gradebook:{title:`Org Chem, mock exam scores`,icon:`table`,iconColor:`var(--warning)`,students:[`You`,`Jordan`,`Priya`,`Sam`,`Alex`],assignments:[`Mock 1`,`Mock 2`,`Problem set 6`],showClassAverage:!0,cells:[{student:`You`,assignment:`Mock 1`,score:62},{student:`You`,assignment:`Mock 2`,score:74},{student:`You`,assignment:`Problem set 6`,score:20,maxScore:25},{student:`Jordan`,assignment:`Mock 1`,score:71},{student:`Jordan`,assignment:`Mock 2`,score:78}],footer:`Two mocks in, your trend is +12 points, that matters more than either single score.`},spectrumtable:{title:`Confirming ethanol by ¹H NMR`,icon:`chart`,iconColor:`var(--presence)`,technique:`nmr-1h`,compound:`Ethanol (CH₃CH₂OH)`,solvent:`CDCl₃`,peaks:[{x:1.22,multiplicity:`t`,integration:3,assignment:`CH₃`},{x:2.58,multiplicity:`s (br)`,integration:1,assignment:`OH`},{x:3.7,multiplicity:`q`,integration:2,assignment:`CH₂`}],footer:`The CH₃ triplet at 1.22 couples to the CH₂ quartet at 3.70 — a classic ethyl pattern. The…`},fmeatable:{title:`Capstone build: line-follower FMEA`,icon:`alert`,iconColor:`var(--warning)`,items:[{failureMode:`IR sensor misreads the line in bright light`,effect:`Robot drifts off course`,cause:`Ambient IR interference saturates the fixed threshold`,severity:6,occurrence:7,detection:4,currentControl:`Fixed threshold calibrated once at bench`,action:`Add auto-gain calibration at startup`,owner:`Sensors`},{failureMode:`Battery voltage sags under load`,effect:`Motors stall mid-run`,cause:`Pack undersized for peak draw`,severity:8,occurrence:4,detection:3,currentControl:`Voltage-monitor LED`,action:`Upsize to a 2S 1300 mAh pack`,owner:`Power`},{failureMode:`Encoder wire pinched at the steering hinge`,effect:`Speed reading drops to zero`,cause:`Wire routed across a moving joint`,severity:4,occurrence:3,detection:7,currentControl:`Zip-tie strain relief`,action:`Re-route the encoder wire through a cable chain`,owner:`Mechanical`},{failureMode:`Firmware watchdog left disabled`,effect:`Robot freezes and needs a manual reset`,cause:`Watchdog timer off in the dev build`,severity:5,occurrence:2,detection:6,currentControl:`None`,action:`Enable the watchdog reset before demo day`,owner:`Firmware`},{failureMode:`Chassis screw backs out from vibration`,effect:`Wheel misalignment`,cause:`No thread-locker applied`,severity:3,occurrence:5,detection:2,currentControl:`Visual pre-run check`,action:`Apply thread-locker to every chassis screw`,owner:`Mechanical`}],footer:`The IR sensor misread is the top risk going into demo day — auto-gain calibration knocks …`},billofmaterials:{title:`Capstone build: line-follower BOM`,icon:`layers`,iconColor:`var(--presence)`,currency:`USD`,rows:[{label:`Chassis`,kind:`subassembly`,indent:0},{label:`Acrylic base plate`,partNo:`CH-100`,qty:1,unitCost:8.5,indent:1},{label:`M3×10 screw`,partNo:`HW-203`,qty:12,unitCost:.08,indent:1},{label:`Standoff, 20 mm`,partNo:`HW-210`,qty:4,unitCost:.35,indent:1},{label:`Drive`,kind:`subassembly`,indent:0}],footer:`Under $50 a unit — the battery and the sensor array are the two line items worth shopping…`},chromatogram:{title:`Aspirin synthesis, HPLC purity check`,icon:`chart`,iconColor:`var(--insight)`,method:`HPLC · C18 reversed-phase, 1.0 mL/min, UV 254 nm`,trace:[{t:0,signal:2},{t:.3,signal:2},{t:.6,signal:3},{t:.9,signal:7},{t:1.2,signal:18}],peaks:[{rt:1.8,label:`Salicylic acid`,areaPct:22.4,height:47},{rt:4.5,label:`Acetylsalicylic acid`,areaPct:77.6,height:150}],footer:`78% of the peak area is your aspirin product, the rest is unreacted salicylic acid, worth…`},stressstraincurve:{title:`Mild steel, tensile test`,icon:`chart`,iconColor:`var(--presence)`,curve:[{strain:0,stress:0},{strain:7e-4,stress:150},{strain:.0012,stress:230},{strain:.0014,stress:250},{strain:.02,stress:270}],yieldPoint:{strain:.0014,stress:250},ultimatePoint:{strain:.13,stress:400},fracturePoint:{strain:.25,stress:290},footer:`Yields at 250 MPa, keeps hardening to 400 MPa, then necks and drops to 290 MPa at fractur…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={gatingplot:{title:`T-cell subsets, flow cytometry`,icon:`chart`,iconColor:`var(--insight)`,xLabel:`CD4-FITC`,yLabel:`CD8-PE`,xScale:`log`,yScale:`log`,points:[{x:20,y:18},{x:35,y:22},{x:18,y:40},{x:50,y:35},{x:28,y:55}],gates:[{name:`CD4+ helper T`,shape:`ellipse`,region:[[1800,45],[1500,30]],pctOfParent:38.4,color:`var(--presence)`},{name:`CD8+ cytotoxic T`,shape:`ellipse`,region:[[45,2200],[30,1800]],pctOfParent:24.1,color:`var(--insight)`}],footer:`38% of live lymphocytes are CD4+ helper T cells, 24% are CD8+ cytotoxic — a normal CD4:CD…`},expressionheatmap:{title:`RNA-seq, tumor vs. matched normal`,icon:`table`,iconColor:`var(--presence)`,genes:[`TP53`,`MYC`,`EGFR`,`VEGFA`,`CDKN1A`],samples:[`Patient 1`,`Patient 2`,`Patient 3`,`Patient 4`],values:[[-.3,-.6,-.2,-.4],[2.8,3.1,2.4,2.9],[1.6,.9,1.8,1.3],[2.1,1.7,2.4,1.9],[-1.8,-2.1,-1.4,-1.9]],scaleLabel:`log2 fold-change vs. normal`,footer:`MYC and VEGFA run up in every tumor sample — classic proliferation and angiogenesis…`},gellane:{title:`PCR product check, 1% agarose gel`,icon:`layers`,iconColor:`var(--insight)`,ladder:{unit:`bp`,marks:[1500,1e3,900,800,700]},lanes:[{label:`Sample A · gene X`,bands:[{pos:.54,intensity:.9,sizeLabel:`350 bp`}]},{label:`Sample B · gene Y`,bands:[{pos:.33,intensity:.85,sizeLabel:`620 bp`},{pos:.92,intensity:.22}]},{label:`Sample C · gene Z`,bands:[{pos:.85,intensity:.8,sizeLabel:`150 bp`}]},{label:`NTC · no template`,bands:[]}],footer:`All three primer pairs amplified at the expected size, the no-template control stayed cle…`},parallelcoordinates:{title:`Iris dataset: four measurements, three species`,icon:`sliders`,iconColor:`var(--insight)`,axes:[{key:`sepalLength`,label:`Sepal length`},{key:`sepalWidth`,label:`Sepal width`},{key:`petalLength`,label:`Petal length`},{key:`petalWidth`,label:`Petal width`}],lines:[{label:`setosa`,color:`var(--presence)`,values:{sepalLength:5.1,sepalWidth:3.5,petalLength:1.4,petalWidth:.2}},{label:`versicolor`,color:`var(--insight)`,values:{sepalLength:6.4,sepalWidth:3.2,petalLength:4.5,petalWidth:1.5}},{label:`virginica`,color:`var(--warning)`,values:{sepalLength:6.9,sepalWidth:3.1,petalLength:5.4,petalWidth:2.1}}]},primefactortree:{title:`Prime factorization of 360`,icon:`share`,iconColor:`var(--insight)`,number:360,nodes:[{value:360,isPrime:!1,children:[{value:8,isPrime:!1,children:[{value:2,isPrime:!0},{value:4,isPrime:!1,children:[{value:2,isPrime:!0},{value:2,isPrime:!0}]}]},{value:45,isPrime:!1,children:[{value:9,isPrime:!1,children:[{value:3,isPrime:!0},{value:3,isPrime:!0}]},{value:5,isPrime:!0}]}]}]},numbersequence:{title:`The Fibonacci sequence`,icon:`sparkle`,iconColor:`var(--presence)`,kind:`fibonacci`,terms:[1,1,2,3,5],rule:`Each term is the sum of the two terms before it.`,highlightPattern:!0},constantcard:{title:`Pi`,icon:`sparkle`,iconColor:`var(--presence)`,symbol:`π`,value:`3.14159265358979323846`,digitsShown:10,significance:`The ratio of a circle’s circumference to its diameter — the same for every circle, no mat…`,visual:`circle`},baseconversion:{title:`Number systems: 210 in base 2, 8, 16`,icon:`chart`,iconColor:`var(--insight)`,value:`210`,bases:[{label:`Binary`,radix:2,digits:`11010010`},{label:`Octal`,radix:8,digits:`322`},{label:`Decimal`,radix:10,digits:`210`},{label:`Hexadecimal`,radix:16,digits:`D2`}],footer:`Every row is the same value — only the place-value system changes.`}};export{e as E};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var e={doseladder:{title:`Titration schedule`,icon:`shield`,iconColor:`var(--insight)`,drug:`Gabapentin`,route:`oral`,caption:`Adult · neuropathic pain`,computed:{input:`Weight 70 kg`,formula:`300 mg ÷ 3 doses`,result:`100 mg three times daily`},ladder:[{step:`Day 1`,dose:`300 mg at bedtime`,note:`Start low to limit drowsiness and dizziness.`},{step:`Day 2`,dose:`300 mg twice daily`},{step:`Day 3`,dose:`300 mg three times daily`,note:`Steady the dose before climbing further.`},{step:`Week 2`,dose:`600 mg three times daily`,note:`Increase as tolerated to control pain.`},{step:`Maximum`,dose:`1,200 mg three times daily`,note:`Do not exceed 3,600 mg per day.`,ceiling:!0}],adjustments:[{condition:`eGFR 30–59`,change:`Max 1,400 mg/day`},{condition:`eGFR 15–29`,change:`Max 700 mg/day`},{condition:`eGFR < 15`,change:`Max 300 mg/day`}],footer:`Titrate to the lowest effective dose; renal function sets the ceiling, so check eGFR befo…`},flow:{title:`The loop, in four beats`,icon:`sparkle`,steps:[{title:`You add money`,sub:`Say $200 this month.`,color:`var(--presence)`},{title:`It earns interest`,sub:`A small % is added on top.`,color:`var(--presence-soft)`},{title:`Interest joins the pile`,sub:`Now your balance is bigger.`,color:`var(--insight)`},{title:`Next round earns more`,sub:`Same %, bigger base, repeat.`,color:`var(--insight)`}],footer:`Nothing fancy, the same loop, running quietly for years.`},analogymap:{title:`Compound interest is a snowball`,icon:`link`,iconColor:`var(--insight)`,familiar:`A snowball rolling downhill`,target:`Compound interest`,pairs:[{familiar:`The handful of snow you pack to start`,target:`Your first deposit`,note:`the seed everything else grows on`},{familiar:`The snow it picks up on one turn`,target:`The interest one period pays`,note:`added on top, never set aside`},{familiar:`A wider ball, so the next turn sweeps up more`,target:`A bigger balance, so the next period earns more`,note:`this is the whole trick`},{familiar:`How long the hill is`,target:`How many years you leave it alone`,note:`the biggest lever, by far`},{familiar:`Kicking the ball apart halfway down`,target:`Withdrawing early`,note:`you restart from a smaller ball`,loose:!0}],breaksDown:[`A snowball adds roughly the same layer on every turn; a balance adds a fixed percentage o…`,`The hill ends. A balance keeps compounding for as long as you leave it, so there is no bo…`],caption:`Every row is the same one idea: this period's gain becomes next period's starting point.`,footer:`The hill length is the load-bearing part — <b>time</b> beats deposit size, which is…`},logstream:{title:`Slow-query + timeout logs`,entries:[{time:`14:02:11`,level:`warn`,source:`api`,message:`GET /dashboard 612ms (slow)`},{time:`14:02:14`,level:`error`,source:`db`,message:`statement timeout after 5s: dashboard widgets query`},{time:`14:02:14`,level:`info`,source:`api`,message:`req=a91f returned 503`},{time:`14:02:20`,level:`warn`,source:`api`,message:`GET /dashboard 588ms (slow)`},{time:`14:05:02`,level:`info`,source:`db`,message:`index events_widget_id created`}],caption:`The timeouts cluster on one query; latency drops the moment the index lands.`},gitgraph:{title:`When the regression landed`,branches:[`main`,`hotfix`],commits:[{id:`9a1b7d3`,message:`Merge fix → main, deploy v3.4.1`,branch:`main`,parents:[`2d9aa10`,`b83d44a`],tag:`v3.4.1`,head:!0},{id:`b83d44a`,message:`Add (org_id, created_at) index`,branch:`hotfix`,parents:[`e4f9c2a`]},{id:`e4f9c2a`,message:`Add request-id to slow-query log`,branch:`hotfix`,parents:[`2d9aa10`]},{id:`2d9aa10`,message:`Dashboard: per-widget queries (regression)`,branch:`main`,parents:[`7c2e0f1`]},{id:`7c2e0f1`,message:`Release v3.4`,branch:`main`,parents:[`11ff009`],tag:`v3.4.0`}],caption:`The per-widget query shipped in 2d9aa10; the fix branched off and merged back.`},queryplan:{title:`EXPLAIN ANALYZE — the bottleneck`,sql:`SELECT w.*, count(e.id)
|
|
2
|
+
FROM widgets w
|
|
3
|
+
LEFT JOIN events e ON e.widget_id = w.id
|
|
4
|
+
WHERE w.o…`,nodes:[{op:`GroupAggregate`,detail:`group by w.id`,depth:0,rows:48,cost:9820,timeMs:612},{op:`Sort`,detail:`sort key: w.id`,depth:1,rows:48,cost:9810,timeMs:610},{op:`Hash Left Join`,detail:`e.widget_id = w.id`,depth:2,rows:124e4,cost:9120,timeMs:598,slow:!0},{op:`Seq Scan on events`,detail:`no index on widget_id`,depth:3,rows:124e4,cost:8400,timeMs:540,slow:!0},{op:`Index Scan on widgets`,detail:`org_id = $1`,depth:3,rows:48,cost:120,timeMs:2}],caption:`A sequential scan over 1.24M events — there is no index on events.widget_id.`},flamegraph:{title:`CPU profile of one slow request`,unit:`ms`,frames:[{name:`handleRequest`,depth:0,value:612},{name:`renderDashboard`,depth:1,value:600},{name:`loadWidgets`,depth:2,value:580,hot:!0},{name:`db.query`,depth:3,value:560,hot:!0},{name:`seqScanEvents`,depth:4,value:540,hot:!0}],caption:`Almost all of the 612 ms is inside the event scan — the hot path is unmissable.`},regexscope:{title:`Parsing the slow-query log`,pattern:`req=(\\w+).*?dur=(\\d+)ms`,flags:`g`,parts:[{token:`req=`,label:`the literal text "req="`,kind:`literal`},{token:`(\\w+)`,label:`capture 1 — the request id (word chars)`,kind:`group`},{token:`.*?`,label:`any characters, lazily (as few as possible)`,kind:`quantifier`},{token:`dur=`,label:`the literal text "dur="`,kind:`literal`},{token:`(\\d+)`,label:`capture 2 — the duration digits`,kind:`group`}],samples:[{label:`matches`,segments:[{text:`level=warn `},{text:`req=a91f`,match:!0,group:1},{text:` path=/dashboard `,match:!0},{text:`dur=612ms`,match:!0,group:2}]},{label:`no match`,segments:[{text:`level=info cache hit org=42`}]}],caption:`Pulls the request id and duration out of each warn line for the histogram.`}};export{e as E};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var e={terminal:{title:`The one-line fix`,prompt:`prod-db $`,lines:[{kind:`comment`,text:`confirm the scan, then add the index`},{kind:`command`,text:`psql -c "EXPLAIN ANALYZE SELECT … WHERE org_id=42"`},{kind:`stdout`,text:`Seq Scan on events (actual time=540ms rows=1240000)`},{kind:`stderr`,text:`no index on events.widget_id — full scan`},{kind:`command`,text:`psql -c "CREATE INDEX CONCURRENTLY ON events (widget_id)"`}],exitCode:0,caption:`One missing index. p99 back to ~30 ms.`},httpexchange:{title:`GET /api/dashboard — before & after the fix`,icon:`globe`,iconColor:`var(--presence)`,exchanges:[{method:`GET`,url:`/api/dashboard?range=30d`,status:503,statusText:`Service Unavailable`,durationMs:30021,reqBody:`GET /api/dashboard?range=30d HTTP/1.1
|
|
2
|
+
Accept: application/json
|
|
3
|
+
Authorization: Bearer [red…`,respPreview:`{
|
|
4
|
+
"error": "upstream timeout",
|
|
5
|
+
"detail": "aggregate query exceeded 30s"
|
|
6
|
+
}`,note:`Connection pool exhausted under load — every request fanned out an un-indexed COUNT(*) ov…`},{method:`GET`,url:`/api/dashboard?range=30d`,status:200,statusText:`OK`,durationMs:214,reqBody:`GET /api/dashboard?range=30d HTTP/1.1
|
|
7
|
+
Accept: application/json
|
|
8
|
+
Authorization: Bearer [red…`,respPreview:`{
|
|
9
|
+
"widgets": 9,
|
|
10
|
+
"generatedMs": 188,
|
|
11
|
+
"cache": "miss"
|
|
12
|
+
}`,note:`After adding the (org_id, created_at) index and a 60s result cache: 30s → 214ms.`},{method:`GET`,url:`/api/dashboard?range=30d`,status:200,statusText:`OK`,durationMs:12}],caption:`Same endpoint, three calls: the failing 503, the first fixed response, then a warm cache …`,footer:`p95 latency dropped <strong>140×</strong> — from a 30s timeout to <strong>214ms</strong> …`},latencydist:{title:`Dashboard API latency (last 24h)`,icon:`clock`,iconColor:`var(--presence)`,unit:`ms`,bins:[{from:0,to:40,count:2100},{from:40,to:80,count:6400},{from:80,to:120,count:4800},{from:120,to:160,count:2050},{from:160,to:200,count:980}],p50:86,p90:168,p95:214,p99:372,slo:200,sloLabel:`SLO 200ms`,caption:`17,063 requests · the long p99 tail breaches the 200ms SLO`},ecdf:{title:`Raw sample, same window`,icon:`clock`,iconColor:`var(--presence)`,unit:`ms`,color:`var(--presence)`,values:[52,58,61,64,67],footer:`A 27-request pull from the same hour, the actual step function behind the p99 headline.`},codemap:{title:`Blast radius, what this touches`,center:`ThemeContext.tsx`,nodes:[{label:`SettingsPage.tsx`,hot:!0,note:`edited`},{label:`useTheme.ts`,hot:!0,note:`edited`},{label:`tokens.css`,hot:!0,note:`+dark vars`},{label:`App.tsx`,note:`imports, safe`},{label:`Navbar.tsx`,note:`reads theme`}],footer:`12 call sites read the theme, none of their signatures change.`},checks:{title:`Tests after the change`,summary:`23 passed · 1 needs updating · ran in 8.2s`,items:[{name:`ThemeContext.test`,status:`pass`,note:`6 passed`},{name:`SettingsPage.test`,status:`pass`,note:`4 passed`},{name:`useTheme.test`,status:`pass`,note:`3 passed`},{name:`Navbar.snapshot`,status:`fail`,note:`old colors`},{name:`a11y · contrast`,status:`pass`,note:`AA in both`}]},diff:{title:`The diff`,file:`src/theme/ThemeContext.tsx`,add:14,del:3,lines:[{t:`ctx`,c:`<span class="k">import</span> { useColorScheme } <span class="k">from</span> <span class=…`},{t:`ctx`,c:``},{t:`ctx`,c:`<span class="k">export function</span> ThemeProvider({ children }) {`},{t:`del`,c:` <span class="k">const</span> theme = lightTheme;`},{t:`add`,c:` <span class="k">const</span> scheme = useColorScheme();`}],footer:`Reads the OS setting, with a manual override you already store in Settings.`},componentapi:{title:`Button API`,icon:`sliders`,iconColor:`var(--insight)`,component:`<Button>`,props:[{name:`variant`,type:`'primary' | 'ghost' | 'danger'`,required:!1,default:`'primary'`,desc:`Visual style of the button.`},{name:`size`,type:`'sm' | 'md' | 'lg'`,required:!1,default:`'md'`,desc:`Controls padding and font size.`},{name:`onClick`,type:`(e: MouseEvent) => void`,required:!0,desc:`Handler fired when the button is pressed.`},{name:`disabled`,type:`boolean`,required:!1,default:`false`,desc:`Greys out the button and blocks clicks.`},{name:`children`,type:`ReactNode`,required:!0,desc:`The button label or contents.`}],footer:`Only onClick and children are required, everything else has a sensible default.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={sportspitch:{title:`Yankees defensive alignment, shift on`,sport:`baseball`,positions:[{label:`P`,x:50,y:55},{label:`C`,x:50,y:82},{label:`1B`,x:72,y:65},{label:`2B`,x:65,y:48},{label:`3B`,x:30,y:65}]},developmentmilestone:{title:`Leo's 18-month milestones`,ageLabel:`18 months`,domains:[{domain:`motor`,milestones:[{label:`Walks independently without support`,achieved:!0},{label:`Climbs onto low furniture`,achieved:!0},{label:`Stacks 2–3 blocks`,achieved:!0},{label:`Kicks a ball forward`,achieved:!1}]},{domain:`language`,milestones:[{label:`Says 10+ single words clearly`,achieved:!0},{label:`Points to show interest (not just to request)`,achieved:!0},{label:`Follows simple 2-step directions`,achieved:!1},{label:`Waves bye-bye spontaneously`,achieved:!0}]},{domain:`social`,milestones:[{label:`Shows affection to familiar people`,achieved:!0},{label:`Plays simple pretend (feeding a doll)`,achieved:!1},{label:`Shows interest in other children`,achieved:!0}]}]},dentaltreatmentplan:{title:`Mia's dental treatment plan`,icon:`shield`,iconColor:`var(--presence)`,entries:[{tooth:`#3`,procedure:`Routine cleaning & fluoride varnish`,priority:`elective`,visit:`Visit 1 · Jun 20`,cost:95,status:`planned`},{tooth:`#14`,procedure:`Composite filling`,surface:`occlusal`,priority:`recommended`,visit:`Visit 1 · Jun 20`,cost:180,status:`planned`},{tooth:`#19`,procedure:`Sealant`,priority:`elective`,visit:`Visit 1 · Jun 20`,cost:55,status:`planned`},{tooth:`#30`,procedure:`Composite filling, deep decay`,surface:`mesial-occlusal`,priority:`urgent`,visit:`Visit 2 · Jul 11`,cost:210,status:`planned`},{tooth:`#30`,procedure:`6-week follow-up check`,priority:`recommended`,visit:`Visit 3 · Aug 22`,cost:0,status:`planned`}],footer:`Tooth #30 is the one to move up if you can — the decay is close to the nerve. Everything …`},estateplanchecklist:{title:`Your estate plan, since Leo arrived`,icon:`shield`,iconColor:`var(--presence)`,documents:[{category:`Will`,status:`needs-update`,lastReviewed:`Before Leo was born`},{category:`POA`,status:`done`,lastReviewed:`January 2024`},{category:`Healthcare Proxy`,status:`done`,lastReviewed:`January 2024`},{category:`Beneficiary designations`,status:`missing`},{category:`Digital assets`,status:`missing`}],footer:`The will and beneficiaries matter most now, that's where Leo's guardian actually gets nam…`},subtextdecode:{title:`What your sister might mean`,flavor:`tone`,message:`Fine, do whatever works for you. I'll figure out my own ride.`,readings:[{interpretation:`She is hurt and hoping you will offer to drive her after all`,likelihood:`most likely`,cue:`“Fine” plus “I’ll figure out my own ride” often signals disappointment, not agreement`},{interpretation:`She genuinely has another plan and is letting you off the hook`,likelihood:`possible`,cue:`“whatever works for you” can be a sincere release with no edge to it`},{interpretation:`She is annoyed and pulling back from the conversation`,likelihood:`less likely`,cue:`the clipped, short reply could read as withdrawing rather than wounded`}],cantKnow:`Tone does not travel well over text, so you cannot be sure which of these it is from the …`,reply:`Hey, that message felt a little off to me — are you actually okay with the plan, or would…`},rehearsal:{title:`Rehearsing the chat about taking the car keys`,icon:`chat`,opener:`Dad, I love you and I want you safe — can we talk honestly about the driving?`,branches:[{reaction:`get defensive or insist they are fine`,say:`I hear you, and this isn’t about taking anything away — it’s about keeping you on the roa…`,why:`Names the fear behind the resistance and keeps you on the same side.`},{reaction:`go quiet and shut down`,say:`We don’t have to settle it now. Could we just try one daytime drive together this week an…`,why:`A small, time-boxed step is far easier to agree to than a verdict.`},{reaction:`ask what the alternatives even are`,say:`Good question — I’ve looked at the senior shuttle and splitting rides, so you’d keep your…`,why:`Shows you came with options, not just a problem.`}],exit:`Let’s sit with it and revisit on Sunday — no decision today.`,footer:`Lead with care, give him a small next step, and let him keep his dignity.`},caregivercoord:{title:`Dad's care, coordinated`,icon:`shield`,iconColor:`var(--presence)`,personName:`Robert Voss`,relation:`Dad`,medications:[{name:`Lisinopril 10mg`,times:[`8:00 AM`],takenBy:`Self, checked by home aide`},{name:`Metformin 500mg`,times:[`8:00 AM`,`6:00 PM`],takenBy:`Self`},{name:`Atorvastatin 20mg`,times:[`9:00 PM`],takenBy:`Home aide`}],appointments:[{date:`Jun 20, 2026`,provider:`Dr. Alvarez`,purpose:`Blood pressure follow-up`},{date:`Jul 2, 2026`,provider:`Maple Physical Therapy`,purpose:`Balance & gait`}],contacts:[{name:`Marisol Reyes`,role:`Home aide, weekdays 9–1`,phone:`(555) 019-2244`},{name:`Dr. Alvarez`,role:`Primary care physician`,phone:`(555) 083-7710`},{name:`You`,role:`Backup + weekends`,phone:`(555) 200-4471`}],footer:`The aide covers weekday mornings; the two of you split what she can’t.`},allocatepeople:{title:`Chores split fairly this week`,icon:`layers`,iconColor:`var(--presence)`,people:[`Maya`,`Devon`,`Priya`],assignments:[{task:`Cook dinner Mon–Wed`,who:`Maya`,weight:4},{task:`Wipe down the kitchen`,who:`Maya`,weight:1},{task:`Vacuum the living areas`,who:`Devon`,weight:3},{task:`Take out trash & recycling`,who:`Devon`,weight:1},{task:`Grocery run + restock`,who:`Devon`,weight:2}],footer:`Loads land close — Devon's three lighter jobs balance Maya's cooking. Swap the trash run …`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={lifeline:{title:`If it ever becomes an emergency`,message:`If you are ever worried that someone you love is in danger, you do not have to carry that…`,safetyQuestion:`Is anyone in immediate danger right now?`,resources:[{name:`988 Suicide & Crisis Lifeline`,contact:`Call or text 988`,href:`tel:988`,note:`24/7 · free · confidential (US)`},{name:`Crisis Text Line`,contact:`Text HOME to 741741`,href:`sms:741741`,note:`Text-based support, any time`},{name:`Emergency services`,contact:`Call 911`,href:`tel:911`,note:`If someone is in immediate physical danger`}],grounding:`If you just need a moment first, we can take one slow breath together.`,reassurance:`I can help you find words and resources, but I am not a substitute for a trained person —…`},familytree:{title:`Your family tree`,icon:`share`,iconColor:`var(--presence)`,rootId:`you`,people:[{id:`gma`,name:`Eleanor Voss`,birth:`1938`,death:`2021`},{id:`gpa`,name:`Harold Voss`,birth:`1935`,death:`2019`,partner:`gma`},{id:`gma2`,name:`Rosa Delgado`,birth:`1941`},{id:`gpa2`,name:`Miguel Delgado`,birth:`1939`,death:`2015`,partner:`gma2`},{id:`mom`,name:`Carla Voss`,birth:`1966`,parents:[`gma`,`gpa`],partner:`dad`}],footer:`Four generations, from your grandparents down to Maya.`},relationshipmap:{title:`Who's coming to the reunion`,icon:`share`,iconColor:`var(--presence)`,layout:`circle`,people:[{id:`carla`,name:`Carla`,role:`Mom`},{id:`james`,name:`James`,role:`Dad`},{id:`sofia`,name:`Sofia`,role:`Aunt`},{id:`greg`,name:`Greg`,role:`Sofia's husband`},{id:`nate`,name:`Nate`,role:`Brother`}],ties:[{source:`carla`,target:`james`,kind:`romance`},{source:`sofia`,target:`greg`,kind:`romance`},{source:`carla`,target:`you`,kind:`family`},{source:`james`,target:`you`,kind:`family`},{source:`carla`,target:`nate`,kind:`family`}],footer:`James and Greg are still frosty — maybe don't seat them at the same table.`},vendortracker:{title:`All six vendors`,icon:`layers`,iconColor:`var(--presence)`,vendors:[{name:`Willow & Stone Catering`,category:`catering`,status:`confirmed`,contractSigned:!0,depositAmount:1500,depositPaid:!0,balanceDue:3500,dueDate:`Aug 1`},{name:`The Old Mill Barn`,category:`venue`,status:`confirmed`,contractSigned:!0,depositAmount:2e3,depositPaid:!0,balanceDue:6e3,dueDate:`Jul 20`},{name:`Marisol Reyes Photography`,category:`photo`,status:`confirmed`,contractSigned:!0,depositAmount:900,depositPaid:!0,balanceDue:0},{name:`DJ Nova Sound`,category:`av`,status:`booked`,contractSigned:!0,depositAmount:300,depositPaid:!0,balanceDue:800,dueDate:`Jul 8`},{name:`Petal & Vine Florals`,category:`decor`,status:`inquired`}],footer:`Catering and the venue are the big-ticket balances, both due within three weeks of each o…`},wiringdiagram:{title:`Three-Way Switch Loop`,icon:`spark`,iconColor:`var(--warning)`,nodes:[{id:`panel`,kind:`panel`,label:`Panel`,x:8,y:32},{id:`cb`,kind:`breaker`,label:`15A`,x:26,y:32},{id:`sw1`,kind:`switch3way`,label:`SW1`,x:46,y:14},{id:`sw2`,kind:`switch3way`,label:`SW2`,x:70,y:14},{id:`light`,kind:`light`,label:`Fixture`,x:90,y:32}],wires:[{from:`panel`,to:`cb`,conductor:`hot`,gauge:`14 AWG`},{from:`cb`,to:`sw1`,conductor:`hot`},{from:`sw1`,to:`sw2`,conductor:`traveler`,gauge:`14/3`},{from:`sw2`,to:`light`,conductor:`hot`},{from:`light`,to:`panel`,conductor:`neutral`}],caption:`One fixture controlled from two locations: the common feeds switch one, two travelers run…`,footer:`Black = hot, white = neutral, green = equipment ground, and the two travelers (here as 14…`},pipingschematic:{title:`Closed Hydronic Heating Loop`,icon:`sliders`,iconColor:`var(--insight)`,components:[{id:`tank`,kind:`tank`,label:`Buffer Tank`,x:12,y:18},{id:`pump`,kind:`pump`,label:`P-101`,x:42,y:18},{id:`heater`,kind:`heater`,label:`Boiler`,x:74,y:18},{id:`rad`,kind:`filter`,label:`Radiator`,x:74,y:46},{id:`valve`,kind:`valve`,label:`Balancing`,x:42,y:46}],lines:[{from:`tank`,to:`pump`,flow:!0,size:`DN50`},{from:`pump`,to:`heater`,flow:!0,size:`DN50`},{from:`heater`,to:`rad`,flow:!0,size:`DN40`},{from:`rad`,to:`valve`,flow:!0,size:`DN40`},{from:`valve`,to:`temp`,flow:!0}],caption:`Water circulates buffer tank to pump to boiler, sheds heat at the radiator, then a balanc…`,footer:`Arrows show flow direction; line-size labels (DN50 supply, DN40 emitter branch) size each…`},controlblockdiagram:{title:`Your Thermostat's Feedback Loop`,icon:`sliders`,iconColor:`var(--insight)`,blocks:[{id:`setpoint`,label:`Setpoint 68°F`,kind:`block`},{id:`err`,label:`Σ`,kind:`sum`},{id:`ctrl`,label:`Controller`,kind:`block`},{id:`heater`,label:`Heater`,kind:`block`},{id:`room`,label:`Room Temp`,kind:`block`}],wires:[{from:`setpoint`,to:`err`,sign:`plus`},{from:`err`,to:`ctrl`},{from:`ctrl`,to:`heater`},{from:`heater`,to:`room`},{from:`room`,to:`sensor`,feedback:!0}],footer:`The sensor feeds measured room temperature back with a minus sign; a wide 15A-driven duty…`},floorplan:{title:`Unit 4B, floor plan`,scale:`1 unit ≈ 1 ft`,rooms:[{name:`Living / Dining`,x:2,y:2,w:55,h:45,note:`22×18 ft`},{name:`Kitchen`,x:60,y:2,w:38,h:28,note:`15×11 ft`},{name:`Bedroom`,x:2,y:52,w:48,h:44,note:`19×17 ft`},{name:`Bathroom`,x:53,y:52,w:24,h:44,note:`9×17 ft`},{name:`Closet`,x:80,y:52,w:18,h:44,note:`7×17 ft`}]}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={howtosteps:{title:`Fix a running toilet yourself`,icon:`check`,iconColor:`var(--insight)`,time:`15 min`,difficulty:`easy`,warning:`Turn off the water at the shutoff valve behind the toilet before you start.`,tools:[`Adjustable pliers`,`A towel`,`Replacement flapper (~$6)`],steps:[{action:`Take off the tank lid and watch a flush`,detail:`See whether the flapper fails to seal or the water keeps rising past the overflow tube.`,check:`you can tell which part is leaking`},{action:`If the flapper looks warped, swap it`,detail:`Unhook the old flapper from the flush valve and clip the new one on in its place.`,tip:`Bring the old flapper to the store to match the size.`,check:`the new flapper drops flat and seals the opening`},{action:`Adjust the float so the water stops below the overflow tube`,detail:`Turn the adjustment screw or pinch-clip down about half an inch.`,caution:`Set it too low and the flush goes weak — aim for ~1 inch below the tube top.`,check:`the tank fills, then the valve shuts off on its own`},{action:`Turn the water back on and test two flushes`,check:`the tank refills and goes silent within a minute`}],footer:`If it still runs after a new flapper, the flush valve seat may be worn — that one is wort…`},spacefit:{title:`Living room — will it fit?`,icon:`layers`,iconColor:`var(--presence)`,room:{w:4.8,d:3.6,unit:`m`},items:[{label:`Sofa`,w:2.2,d:.95,x:.3,y:2.5},{label:`Coffee table`,w:1.1,d:.6,x:1.55,y:1.55},{label:`TV unit`,w:1.8,d:.45,x:1.5,y:.1},{label:`Armchair`,w:.85,d:.9,x:3.7,y:2.55,rot:-20}],clearances:[{label:`Sofa to coffee table`,gap:.5},{label:`Walkway past the TV unit`,gap:1.45},{label:`Armchair to wall`,gap:.95}],caption:`Everything fits, but the sofa-to-table gap is tighter than comfortable.`,footer:`The layout works, but the <b>0.5 m sofa-to-table gap</b> is flagged — below the ~0.9…`},thesis:{reasoning:`Rates come down through Q3, and tech benefits disproportionately — especially AI infrastr…`,asOf:`Jan 14 · Live session`,reconsiderIf:`10-year yield crosses 4.5% and holds`,tripwireState:`watching`},alignmentgauge:{pct:82,band:`Tracking well`,note:`All three thesis conditions currently met.`,color:`var(--insight)`},standingalerts:{alerts:[{label:`10Y yield above 4.5%`,state:`watching`},{label:`Tech underperforms 3+ days`,state:`clear`},{label:`Dollar (DXY) crosses 106`,state:`triggered`,status:`TRIGGERED`}]},sourceslineage:{rows:[{kind:`origin`,label:`Jan 14 · Live session`,contributed:`Created: thesis, 10Y alert, tech-vs-broad metric`},{kind:`added`,label:`Feb 3 · Live session`,contributed:`Added: DXY metric + dollar-headwind alert`},{kind:`linked`,label:`Feb 28 · Market check`,contributed:`Linked: NVDA as an AI-infrastructure proxy`}]},preflightchecklist:{title:`Preflight — N172ME`,icon:`shield`,iconColor:`var(--presence)`,aircraft:`N172ME · Cessna 172S`,sections:[{name:`Before Start`,items:[{label:`Walk-around inspection — COMPLETE`,critical:!0,checked:!0},{label:`Seats, belts, doors — adjusted and locked`,critical:!0,checked:!0},{label:`Fuel quantity — CHECK visually, both tanks`,critical:!0,checked:!0},{label:`Circuit breakers — IN`,checked:!0},{label:`Parking brake — SET`,checked:!0}]},{name:`Before Takeoff`,items:[{label:`Flight controls — free and correct movement`,critical:!0},{label:`Flight instruments — set, altimeter to field elevation`},{label:`Trim tabs — set for takeoff`},{label:`Fuel selector — BOTH`,critical:!0},{label:`Mixture — rich`}]},{name:`Cruise`,items:[{label:`Engine gauges — in the green arc`},{label:`Fuel — monitor both tanks, switch as needed`},{label:`Altitude — maintain assigned or cruise altitude`}]},{name:`Before Landing`,items:[{label:`ATIS or airport advisory — obtained`},{label:`Seatbelts and harnesses — fastened`,critical:!0},{label:`Mixture — rich`},{label:`Fuel selector — BOTH`,critical:!0},{label:`Landing light — ON`}]},{name:`Shutdown`,items:[{label:`Parking brake — SET`},{label:`Avionics and electrical — OFF`},{label:`Mixture — idle cutoff`},{label:`Ignition and master switch — OFF`,critical:!0},{label:`Control lock — installed`}]}],footer:`IMSAFE check clear, weight and balance within limits, fuel for the leg plus reserve.`},inventoryreorder:{title:`Stock vs. reorder point, by SKU`,icon:`cart`,iconColor:`var(--presence)`,items:[{sku:`SKU-1042`,label:`Steel water bottle, 24oz`,level:86,reorderPoint:150,safetyStock:60,max:600,leadTimeDays:21},{sku:`SKU-1108`,label:`Canvas tote bag`,level:40,reorderPoint:120,safetyStock:50,max:500,leadTimeDays:14},{sku:`SKU-2231`,label:`Ceramic mug, matte black`,level:168,reorderPoint:180,safetyStock:80,max:700,leadTimeDays:18},{sku:`SKU-3387`,label:`Cork yoga mat`,level:210,reorderPoint:100,safetyStock:40,max:400,leadTimeDays:30},{sku:`SKU-4471`,label:`Bamboo cutlery set`,level:340,reorderPoint:90,safetyStock:35,max:450,leadTimeDays:10}],footer:`Reorder points assume the same 6-week sell-through rate as last quarter.`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={visachecklist:{title:`I-485 — Adjustment of Status`,icon:`globe`,iconColor:`var(--presence)`,caseType:`I-485 · Adjustment of Status`,documents:[{name:`Form I-485 (completed & signed)`,required:!0,status:`done`},{name:`Form I-693 (medical exam)`,required:!0,status:`pending`},{name:`Two passport-style photos`,required:!0,status:`done`},{name:`Copy of passport biographic page`,required:!0,status:`done`},{name:`Certified birth certificate + translation`,required:!0,status:`missing`}],footer:`The birth certificate translation is the one required document blocking the mailing — eve…`},hrdiagram:{title:`Bright neighbors on the H–R diagram`,icon:`sun`,stars:[{name:`Rigel`,tempK:12100,luminosity:12e4,stage:`supergiant`},{name:`Deneb`,tempK:8525,luminosity:196e3,stage:`supergiant`},{name:`Betelgeuse`,tempK:3600,luminosity:126e3,stage:`supergiant`},{name:`Spica`,tempK:22400,luminosity:20500,stage:`main-sequence`},{name:`Aldebaran`,tempK:3900,luminosity:439,stage:`giant`}],highlight:`Betelgeuse`,footer:`Stars spend ~90% of their lives on the diagonal main sequence fusing hydrogen — Betelgeus…`},ternaryplot:{title:`Soil texture triangle`,icon:`layers`,unit:`%`,axes:{a:`Clay`,b:`Sand`,c:`Silt`},zones:[{label:`Clay`,vertices:[{a:100,b:0,c:0},{a:55,b:45,c:0},{a:40,b:45,c:15},{a:40,b:20,c:40},{a:60,b:0,c:40}]},{label:`Loam`,vertices:[{a:27,b:45,c:28},{a:7,b:52,c:41},{a:7,b:43,c:50},{a:27,b:23,c:50}]},{label:`Sand`,vertices:[{a:0,b:100,c:0},{a:10,b:90,c:0},{a:0,b:85,c:15}]},{label:`Silt`,vertices:[{a:0,b:20,c:80},{a:12,b:8,c:80},{a:0,b:0,c:100}]}],points:[{label:`Raised bed`,a:18,b:42,c:40},{label:`Backyard subsoil`,a:48,b:22,c:30},{label:`Play sand`,a:3,b:92,c:5},{label:`Riverbank deposit`,a:8,b:12,c:80}],footer:`Classes simplified from the USDA texture triangle — a mason-jar settling test gives you a…`},parliamentseats:{title:`German Bundestag — 2021 election`,icon:`globe`,parties:[{name:`Linke`,seats:39,color:`var(--presence-deep)`},{name:`SPD`,seats:206,color:`var(--danger)`},{name:`Greens`,seats:118,color:`var(--insight)`},{name:`SSW`,seats:1,color:`var(--insight-soft)`},{name:`FDP`,seats:92,color:`var(--warning)`}],totalLabel:`seats`,footer:`A majority needs 369 of 736 seats — the SPD–Green–FDP coalition combined for 416.`},prooftree:{title:`Natural deduction · P → R`,icon:`proof`,steps:[{id:`a1`,statement:`[P]`},{id:`p1`,statement:`P → Q`},{id:`p2`,statement:`Q → R`},{id:`s1`,statement:`Q`,rule:`→E`,from:[`a1`,`p1`]},{id:`s2`,statement:`R`,rule:`→E`,from:[`s1`,`p2`]}],conclusionId:`s3`,footer:`Read upward: each bar is one inference, its rule named at the right. The bracketed [P] is…`},fishbone:{title:`Why the loaf came out dense`,icon:`share`,effect:`Dense sourdough loaf`,categories:[{label:`Starter`,causes:[`Not at peak activity`,`Too little inoculation`]},{label:`Flour`,causes:[`Low-protein flour`,`Stale whole wheat`]},{label:`Process`,causes:[`Underproofed bulk`,`Degassed at shaping`]},{label:`Environment`,causes:[`Kitchen below 22 °C`,`Dry air crusts the dough`]},{label:`Baking`,causes:[`No steam in the oven`,`Baked before full preheat`]}],footer:`An Ishikawa fishbone groups candidate causes by category — work each rib tip-to-spine, th…`},classdiagram:{title:`A tiny 2D drawing engine`,icon:`layers`,classes:[{name:`Drawable`,stereotype:`interface`,methods:[`+ draw(ctx): void`]},{name:`Shape`,stereotype:`abstract`,fields:[`# x: number`,`# y: number`],methods:[`+ move(dx, dy): void`,`+ area(): number`]},{name:`Circle`,fields:[`- radius: number`],methods:[`+ area(): number`]},{name:`Rectangle`,fields:[`- w: number`,`- h: number`],methods:[`+ area(): number`]},{name:`CanvasScene`,fields:[`- shapes: Shape[]`],methods:[`+ add(s: Shape): void`,`+ render(): void`]}],relations:[{from:`Shape`,to:`Drawable`,kind:`implements`},{from:`Circle`,to:`Shape`,kind:`inheritance`},{from:`Rectangle`,to:`Shape`,kind:`inheritance`},{from:`CanvasScene`,to:`Shape`,kind:`aggregation`,label:`shapes *`},{from:`CanvasScene`,to:`Viewport`,kind:`composition`}],footer:`Five of the six UML relation kinds in one figure: hollow triangle = inheritance (dashed w…`},energybarchart:{title:`Energy of a swinging pendulum`,icon:`refresh`,iconColor:`var(--presence)`,unit:`J`,system:[`bob`,`Earth`],snapshots:[{label:`Highest point`,bars:[{kind:`KE`,value:0},{kind:`Ug`,value:100}]},{label:`Halfway down`,bars:[{kind:`KE`,value:50},{kind:`Ug`,value:50}]},{label:`Lowest point`,bars:[{kind:`KE`,value:100},{kind:`Ug`,value:0}]}],footer:`With no friction, total mechanical energy stays <strong>100 J</strong> — it just shifts b…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={karyotype:{title:`Human karyotype — Trisomy 21`,icon:`layers`,iconColor:`var(--presence)`,sex:`XX`,anomalies:[{pair:`21`,kind:`trisomy`,note:`Down syndrome`}],highlightPairs:[`21`],footer:`A karyogram arranges the 46 chromosomes into 23 pairs. Three copies of chromosome 21 (<st…`},numberbond:{title:`Number bond for 10`,icon:`plus`,iconColor:`var(--presence)`,whole:10,parts:[6,4],factFamily:!0,label:`Six and four make ten`,footer:`Number bonds show how a <strong>whole</strong> splits into <strong>parts</strong> — the f…`},posbreakdown:{title:`Parts of speech — one sentence, all nine classes`,icon:`captions`,tokens:[{word:`Wow`,pos:`interjection`},{word:`!`,pos:`punctuation`},{word:`The`,pos:`determiner`},{word:`curious`,pos:`adjective`},{word:`fox`,pos:`noun`,note:`subject of the sentence`}],sentence:`Wow! The curious fox quickly jumped over its sleeping rival, and everyone cheered.`,translation:`¡Guau! El zorro curioso saltó rápidamente sobre su rival dormido, y todos aplaudieron.`,footer:`All nine word classes in a single sentence — tap a legend chip to spotlight one class.`},frayermodel:{title:`Vocabulary — Photosynthesis`,icon:`edit`,iconColor:`var(--presence)`,term:`Photosynthesis`,pronunciation:`/ˌfoʊtoʊˈsɪnθəsɪs/`,definition:`The process green plants and algae use to turn sunlight, water, and carbon dioxide into g…`,characteristics:[`Needs sunlight, water, and CO₂`,`Takes place in the chloroplasts`,`Uses the green pigment chlorophyll`,`Releases oxygen as a by-product`],examples:[`A fern growing in a shady forest`,`Algae in a pond`,`A tomato plant on a windowsill`],nonexamples:[`A mushroom absorbing nutrients`,`A dog digesting its food`,`Rust forming on an iron nail`,`A candle burning`],footer:`Non-examples sharpen the boundary: they may involve energy or gases, but none <strong>bui…`},forestplot:{title:`Reading a forest plot — pooled risk ratio (worked example)`,icon:`proof`,measure:`RR`,studies:[{label:`Trial A`,year:2014,effect:.62,ciLow:.38,ciHigh:1.02},{label:`Trial B`,year:2015,effect:.85,ciLow:.61,ciHigh:1.19},{label:`Trial C`,year:2017,effect:.44,ciLow:.21,ciHigh:.92},{label:`Trial D`,year:2018,effect:.71,ciLow:.55,ciHigh:.91},{label:`Trial E`,year:2020,effect:1.08,ciLow:.74,ciHigh:1.58}],heterogeneity:`I² = 28%`,favorsLeft:`Favors intervention`,favorsRight:`Favors control`,footer:`A textbook illustration of evidence synthesis: each row is one trial's risk ratio with it…`},cashflowtimeline:{title:`Should the workshop buy the CNC router?`,icon:`chart`,iconColor:`var(--presence)`,flows:[{period:0,amount:-5e4,label:`Purchase & install`},{period:1,amount:14e3,label:`Net annual savings`},{period:2,amount:14e3,label:`Net annual savings`},{period:3,amount:14e3,label:`Net annual savings`},{period:3,amount:-8e3,label:`Mid-life overhaul`}],periodLabel:`Year`,discountRate:.08,currency:`$`,footer:`A worked textbook example: at an 8% hurdle rate the router clears it with an NPV of about…`},businesscanvas:{title:`Ridgeline Coffee Roasters`,variant:`bmc`,keyPartners:[`Smallholder farm cooperatives in Huila and Yirgacheffe`,`Specialty green-bean importer`,`Compostable-packaging supplier`],keyActivities:[`Small-batch roasting, three profiles a week`,`Subscription fulfillment and routing`,`Cupping and quality control on every lot`],keyResources:[`25 kg drum roaster`,`Roastmaster's sensory expertise`,`Subscriber taste-profile data`],valueProposition:[`Peak-freshness beans at your door within 48 hours of roasting`,`A rotating world tour of single origins, matched to your taste profile`,`Full traceability — every bag names its farm and lot`],customerRelationships:[`Taste-profile quiz personalizes each shipment`,`Monthly virtual cupping with the roaster`,`Pause or swap anytime, no lock-in`],channels:[`Direct web subscription`,`Farmers-market stall for tastings and signups`,`Wholesale to local cafés`],customerSegments:[`Home brewers upgrading from supermarket beans`,`Remote workers who treat coffee as a ritual`,`Gift subscribers`],costStructure:[`Green beans and import freight`,`Roastery lease and equipment`,`Last-mile shipping`],revenueStreams:[`Monthly subscriptions in two tiers`,`One-off gift boxes`,`Wholesale café accounts`],footer:`Subscriptions cover the fixed roastery costs; wholesale adds the volume that keeps the ro…`},guitartab:{title:`A minor pentatonic run`,icon:`sparkle`,iconColor:`var(--presence)`,tuning:`EADGBE`,beatsPerMeasure:4,measuresPerRow:4,tempo:90,notes:[{measure:1,beat:1,string:6,fret:5,technique:`h`},{measure:1,beat:2,string:6,fret:8},{measure:1,beat:3,string:5,fret:5,technique:`h`},{measure:1,beat:4,string:5,fret:7},{measure:2,beat:1,string:4,fret:5,technique:`h`}],footer:`The A minor pentatonic 'box' shape, ascending from the low E string. Note the <strong>h</…`}};export{e as E};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var e={pianoroll:{title:`Ode to Joy — opening phrase`,icon:`play`,iconColor:`var(--presence)`,notes:[{pitch:`E4`,start:0,duration:1,velocity:.8},{pitch:`E4`,start:1,duration:1,velocity:.7},{pitch:`F4`,start:2,duration:1,velocity:.7},{pitch:`G4`,start:3,duration:1,velocity:.75},{pitch:`G4`,start:4,duration:1,velocity:.75}],beatsPerBar:4,tempo:`120 BPM`,caption:`Beethoven's melody stays inside five white keys — the dotted rhythm at the end shows as a…`,footer:`Pitch runs bottom to top like a piano turned on its side; darker bars are played louder (…`},stitchchart:{title:`Eyelet chevron — 8-row repeat`,icon:`edit`,iconColor:`var(--presence)`,rows:[{number:1,side:`RS`,stitches:[`k`,`k`,`k`,`k2tog`,`yo`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:3,side:`RS`,stitches:[`k`,`k`,`k2tog`,`yo`,`k`]},{stitches:[`k`,`k`,`k`,`k`,`k`]},{number:5,side:`RS`,stitches:[`k`,`k2tog`,`yo`,`k`,`k`]}],legend:[{key:`yo`,meaning:`yarn over — the eyelet hole`}],gauge:`24 sts × 32 rows = 10 cm, blocked`,caption:`Read bottom-up: right-side rows right to left, wrong-side rows left to right. WS rows pur…`,footer:`Every decrease is paired with a yarn over, so the stitch count stays at 10 on every row.`},wordsearch:{title:`Night-sky word hunt`,icon:`search`,iconColor:`var(--presence)`,words:[`ORION`,`LYRA`,`VEGA`,`SIRIUS`,`NEBULA`],size:12,seed:`night-sky`,footer:`Ten astronomy terms hide in all eight directions — tap a word in the list to reveal its p…`},playingcards:{title:`Reading a royal-flush draw`,icon:`layers`,iconColor:`var(--presence)`,groups:[{label:`Your hand`,layout:`fan`,cards:[{rank:`A`,suit:`spades`},{rank:`K`,suit:`spades`}]},{label:`The flop`,layout:`row`,cards:[{rank:`Q`,suit:`spades`},{rank:`J`,suit:`spades`},{rank:`4`,suit:`hearts`}]},{label:`Deck`,layout:`stack`,cards:[{faceDown:!0},{faceDown:!0},{faceDown:!0}]}],note:`Four cards toward the royal flush after the flop: only the 10♠ completes it (1 of the 47 …`,footer:`A classic probability example: outs are counted against the 47 cards you haven't seen, no…`},statblock:{title:`Homebrew bestiary — session prep`,icon:`shield`,iconColor:`var(--presence)`,name:`Ember Drake Hatchling`,meta:`Small dragon, chaotic neutral`,ac:15,hp:44,hpFormula:`8d6+16`,speed:`30 ft., fly 60 ft.`,abilities:{str:14,dex:16,con:15,int:8,wis:12,cha:13},saves:[`Dex +5`,`Con +4`],skills:[`Perception +3`,`Stealth +5`],senses:`darkvision 60 ft., passive Perception 13`,languages:`Draconic`,challenge:`2 (450 XP)`,traits:[{name:`Kindled Scales`,text:`A creature that touches the drake or hits it with a melee attack while within 5 feet take…`},{name:`Updraft Glide`,text:`The drake doesn't provoke opportunity attacks when it flies out of an enemy's reach.`}],actions:[{name:`Bite`,text:`Melee weapon attack: +5 to hit, reach 5 ft., one target. Hit: 7 (1d8+3) piercing damage p…`},{name:`Cinder Breath (Recharge 5–6)`,text:`The drake exhales a 15-foot cone of embers. Each creature in the cone must make a DC 12 D…`}],reactions:[{name:`Wing Buffet`,text:`When a creature the drake can see ends its turn within 5 feet, the drake beats its wings …`}],footer:`Balanced for a level-3 party of four — treat the breath recharge as the spotlight beat of…`}};export{e as E};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function e(e,t){return`${e}.${t===`video/mp4`?`mp4`:`webm`}`}function t(e,t){let n=(e??``).toLowerCase().normalize(`NFKD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48).replace(/-+$/,``),r=[t.getFullYear(),String(t.getMonth()+1).padStart(2,`0`),String(t.getDate()).padStart(2,`0`)].join(`-`);return n?`mavea-${n}-${r}`:`mavea-conversation-${r}`}function n(t,n,r){let i=URL.createObjectURL(t),a=document.createElement(`a`);a.href=i,a.download=n||e(`mavea-replay`,t.type),document.body.appendChild(a),a.click(),a.remove();let o=()=>{clearTimeout(s),window.removeEventListener(`pagehide`,o),URL.revokeObjectURL(i),r?.()};window.addEventListener(`pagehide`,o,{once:!0});let s=setTimeout(o,6e4)}
|
|
1
|
+
function e(e,t){return`${e}.${t===`video/mp4`?`mp4`:`webm`}`}function t(e,t){let n=(e??``).toLowerCase().normalize(`NFKD`).replace(/[\u0300-\u036f]/g,``).replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,48).replace(/-+$/,``),r=[t.getFullYear(),String(t.getMonth()+1).padStart(2,`0`),String(t.getDate()).padStart(2,`0`)].join(`-`);return n?`mavea-${n}-${r}`:`mavea-conversation-${r}`}function n(t,n,r){let i=URL.createObjectURL(t),a=document.createElement(`a`);a.href=i,a.download=n||e(`mavea-replay`,t.type),document.body.appendChild(a),a.click(),a.remove();let o=()=>{clearTimeout(s),window.removeEventListener(`pagehide`,o),URL.revokeObjectURL(i),r?.()};window.addEventListener(`pagehide`,o,{once:!0});let s=setTimeout(o,6e4)}export{n,t as r,e as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./route-CMdTFx0P.js";var t=`mavea.live.modelSpeed.v1`,n=28,r=75,i=2,a=2e4;function o(){try{let e=localStorage.getItem(t);return e?JSON.parse(e):{}}catch{return{}}}function s(e){try{localStorage.setItem(t,JSON.stringify(e))}catch{}}function c(e,t,n){!e||n<400||t<200||u(e,t/4/(n/1e3))}function l(e,t,n){!e||n<a||u(e,Math.max(t/4/(n/1e3),.1))}function u(e,t){if(!Number.isFinite(t)||t<=0)return;let n=o(),r=n[e];n[e]={tps:r?r.tps*.6+t*.4:t,n:(r?.n??0)+1},s(n)}function d(t){let a=o()[t];return!a||a.n<i?e(t)?`slow`:`standard`:a.tps<n?`slow`:a.tps>r?`fast`:`standard`}export{l as n,d as r,c as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{n as e,r as t,t as n}from"./localBudget-CxLP6bjE.js";var r=`mavea-course-v1`,i=r,a=`mavea-course-frames-v1`,o=`mavea-course-checkpoints-v1`,s=60,c=15e4,l=4096,u=.6;function d(e){return typeof e==`string`&&e.trim().length>0}function f(e){return Array.isArray(e)?e.filter(d).map(e=>e.trim()):[]}function p(e){if(!Array.isArray(e))return;let t=e.map(e=>{if(!e||typeof e!=`object`)return null;let t=e;return!d(t.question)||!d(t.answer)?null:{question:t.question.trim(),answer:t.answer.trim()}}).filter(e=>e!==null);return t.length?t:void 0}function m(e){if(!e||typeof e!=`object`)return null;let t=e;if(!d(t.id)||!d(t.title)||!d(t.goal))return null;let n=f(t.objectives);if(!n.length)return null;let r=p(t.checkpoint);return{id:t.id.trim(),title:t.title.trim(),goal:t.goal.trim(),objectives:n,concepts:f(t.concepts),...typeof t.minutes==`number`&&Number.isFinite(t.minutes)&&t.minutes>0?{minutes:Math.round(t.minutes)}:{},...r?{checkpoint:r}:{}}}var h=new Set([`beginner`,`intermediate`,`expert`]);function g(e){if(!e||typeof e!=`object`)return null;let t=e;if(!d(t.id)||!d(t.topic)||!d(t.title))return null;let n=Array.isArray(t.lessons)?t.lessons.map(m).filter(e=>e!==null):[];return n.length<3?null:{id:t.id.trim(),topic:t.topic.trim(),title:t.title.trim(),lessons:n,createdAt:typeof t.createdAt==`number`&&Number.isFinite(t.createdAt)?t.createdAt:0,model:typeof t.model==`string`?t.model:``,...d(t.subtitle)?{subtitle:t.subtitle.trim()}:{},...typeof t.level==`string`&&h.has(t.level)?{level:t.level}:{}}}function _(e){if(!e||typeof e!=`object`)return;let t=e,n=typeof t.total==`number`&&t.total>=0?Math.round(t.total):0;if(!n)return;let r=typeof t.correct==`number`&&t.correct>=0?Math.round(t.correct):0,i=Array.isArray(t.missedFronts)?t.missedFronts.filter(d):[];return{total:n,correct:Math.min(r,n),missedFronts:i,at:typeof t.at==`number`&&Number.isFinite(t.at)?t.at:0}}function v(e){if(!e||typeof e!=`object`)return null;let t=e,n=_(t.checkpoint);return{status:t.status===`done`?`done`:`todo`,...n?{checkpoint:n}:{},lastAt:typeof t.lastAt==`number`&&Number.isFinite(t.lastAt)?t.lastAt:0}}function y(e){return{courseId:e,current:0,lessons:{}}}function b(e,t){if(!t||typeof t!=`object`)return y(e);let n=t,r=typeof n.current==`number`&&n.current>=0?Math.round(n.current):0,i={};if(n.lessons&&typeof n.lessons==`object`)for(let[e,t]of Object.entries(n.lessons)){let n=v(t);n&&(i[e]=n)}return{courseId:e,current:r,lessons:i}}function x(e){let t={courses:[],progress:{}};if(!e||typeof e!=`object`)return t;let n=e,r=Array.isArray(n.courses)?n.courses.map(g).filter(e=>e!==null).slice(0,s):[],i=new Set(r.map(e=>e.id)),a={};if(n.progress&&typeof n.progress==`object`)for(let[e,t]of Object.entries(n.progress))i.has(e)&&(a[e]=b(e,t));return{courses:r,progress:a}}var S=null,C=0;function w(){try{if(typeof localStorage>`u`)return{courses:[],progress:{}};let e=localStorage.getItem(r);return e?x(JSON.parse(e)):{courses:[],progress:{}}}catch{return{courses:[],progress:{}}}}function T(){return S||=w(),S}function E(e){S=e,C+=1;try{typeof localStorage<`u`&&t(r,JSON.stringify(e))}catch{}try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(i,{detail:e}))}catch{}}function D(){C+=1;try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(i))}catch{}}function ee(){return C}function O(e){return typeof window>`u`?()=>{}:(window.addEventListener(i,e),()=>window.removeEventListener(i,e))}var k=null;function A(e){return!!e&&typeof e==`object`&&Array.isArray(e.blocks)}function j(e){return e===`replace`||e===`augment`||e===`refine`}function M(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(![`circle`,`underline`,`point`,`highlight`,`rising`,`falling`,`bracket`,`note`,`connect`].includes(n.kind)||typeof n.at!=`string`||!n.at)return null;let r={kind:n.kind,at:n.at};if(typeof n.to==`string`&&n.to&&(r.to=n.to),typeof n.label==`string`&&n.label&&(r.label=n.label),r.kind===`note`&&!r.label)return null;if((n.color===`key`||n.color===`cool`)&&(r.color=n.color),r.kind===`connect`){let e=typeof n.onIndex==`number`?Math.round(n.onIndex):-1;if(!r.to||e<0||e>=t)return null;r.onIndex=e}return r}function N(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r;if(typeof e.index!=`number`)continue;let i={index:e.index,...typeof e.say==`string`?{say:e.say}:{},...typeof e.saySpoken==`string`?{saySpoken:e.saySpoken}:{}},a=M(e.mark,t);if(a&&(i.mark=a),Array.isArray(e.marks)){let n=e.marks.map(e=>M(e,t)).filter(e=>e!==null);n.length&&(i.marks=n)}n.push(i)}return n}function P(e){if(!e||typeof e!=`object`)return null;let t=e;return!A(t.spec)||t.spec.blocks.length===0||typeof t.question!=`string`?null:{question:t.question,narration:typeof t.narration==`string`?t.narration:``,...typeof t.spoken==`string`?{spoken:t.spoken}:{},mode:j(t.mode)?t.mode:`replace`,...typeof t.topicShift==`boolean`?{topicShift:t.topicShift}:{},tour:N(t.tour,t.spec.blocks.length),spec:t.spec,at:typeof t.at==`number`&&Number.isFinite(t.at)?t.at:0}}function F(e){if(!e||typeof e!=`object`)return null;let t=e;if(!d(t.key)||!d(t.courseId)||!d(t.lessonId))return null;let n=P(t.frame);return n?{key:t.key.trim(),courseId:t.courseId.trim(),lessonId:t.lessonId.trim(),frame:n,at:typeof t.at==`number`&&Number.isFinite(t.at)?t.at:0}:null}function I(e){let t=JSON.stringify(e,(e,t)=>typeof t==`string`&&t.length>l&&t.startsWith(`data:`)?``:t);return JSON.parse(t)}function L(e,t){return`${e}::${t}`}function R(){try{if(typeof localStorage>`u`)return[];let e=localStorage.getItem(a);if(!e)return[];let t=JSON.parse(e);return(Array.isArray(t.entries)?t.entries.map(F).filter(e=>e!==null):[]).slice(-16)}catch{return[]}}function z(){return k||=R(),k}function B(e){k=e;try{typeof localStorage<`u`&&t(a,JSON.stringify({entries:e}))}catch{}}async function V(){try{let t=z();if(!t.length)return 0;let n=t.slice(1);return k=n,e(a,JSON.stringify({entries:n}))}catch{return 0}}n(a,V);function H(e){try{let t=z(),n=t.filter(t=>e.has(t.courseId));n.length!==t.length&&B(n)}catch{}}var U=null;function te(e){if(!e||typeof e!=`object`)return null;let t=e;if(!d(t.key)||!d(t.courseId)||!d(t.lessonId))return null;let n=p(t.questions);return n?{key:t.key.trim(),courseId:t.courseId.trim(),lessonId:t.lessonId.trim(),questions:n,at:typeof t.at==`number`&&Number.isFinite(t.at)?t.at:0}:null}function W(){try{if(typeof localStorage>`u`)return[];let e=localStorage.getItem(o);if(!e)return[];let t=JSON.parse(e);return(Array.isArray(t.entries)?t.entries.map(te).filter(e=>e!==null):[]).slice(-200)}catch{return[]}}function G(){return U||=W(),U}function K(e){U=e;try{typeof localStorage<`u`&&t(o,JSON.stringify({entries:e}))}catch{}}function q(e){try{let t=G(),n=t.filter(t=>e.has(t.courseId));n.length!==t.length&&K(n)}catch{}}function J(){return[...T().courses].sort((e,t)=>t.createdAt-e.createdAt)}function Y(e){return T().courses.find(t=>t.id===e)}function X(e){return T().progress[e]??y(e)}function Z(e,t){let n=x({courses:e,progress:t});if(!n.courses.length)return 0;let r=T(),i=new Map(r.courses.map(e=>[e.id,e])),a={...r.progress};for(let e of n.courses){let t=i.get(e.id);(!t||e.createdAt>=t.createdAt)&&(i.set(e.id,e),n.progress[e.id]&&(a[e.id]=n.progress[e.id]))}return E(x({courses:[...i.values()],progress:a})),n.courses.length}function Q(e){return e.total>0&&e.correct/e.total>=u}function ne(e,t){try{let n=L(e,t),r=z(),i=r.findIndex(e=>e.key===n);if(i<0)return;let a=r.slice(0,i).concat(r.slice(i+1)),o={...r[i],at:Date.now()};return B([...a,o]),o.frame}catch{return}}function re(e,t){try{let n=L(e,t),r=G(),i=r.findIndex(e=>e.key===n);if(i<0)return;let a=r.slice(0,i).concat(r.slice(i+1)),o={...r[i],at:Date.now()};return K([...a,o]),o.questions}catch{return}}function ie(e,t){try{let n=L(e,t),r=G(),i=r.findIndex(e=>e.key===n);return i<0?void 0:r[i].questions}catch{return}}function ae(e){try{let t=T(),n=[e,...t.courses.filter(t=>t.id!==e.id)].slice(0,s),r=new Set(n.map(e=>e.id)),i={};for(let[e,n]of Object.entries(t.progress))r.has(e)&&(i[e]=n);i[e.id]||(i[e.id]=y(e.id)),E({courses:n,progress:i}),H(r),q(r)}catch{}}function oe(e){try{let t=T(),n=t.courses.filter(t=>t.id!==e),r={...t.progress};delete r[e],E({courses:n,progress:r});let i=new Set(n.map(e=>e.id));H(i),q(i)}catch{}}function $(e,t){try{let n=T(),r=n.progress[e]??y(e),i={...n.progress,[e]:{...r,current:Math.max(0,Math.round(t))}};E({...n,progress:i})}catch{}}function se(e,t,n,r=Date.now()){try{let i=T(),a=i.progress[e]??y(e),o=a.lessons[t]?.status===`done`||Q(n)?`done`:`todo`,s={...a.lessons,[t]:{status:o,checkpoint:n,lastAt:r}};E({...i,progress:{...i.progress,[e]:{...a,lessons:s}}})}catch{}}function ce(e,t,n){try{let r=I(n),i=L(e,t),a={key:i,courseId:e,lessonId:t,frame:r,at:Date.now()};if(JSON.stringify(a).length>c)return;B([...z().filter(e=>e.key!==i),a].slice(-16))}catch{}}function le(e,t,n){try{if(!n.length)return;let r=L(e,t),i={key:r,courseId:e,lessonId:t,questions:n,at:Date.now()};K([...G().filter(e=>e.key!==r),i].slice(-200)),D()}catch{}}export{O as _,ne as a,J as c,Q as d,ie as f,$ as g,ae as h,re as i,X as l,oe as m,le as n,Y as o,se as p,ce as r,ee as s,i as t,Z as u};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./friendlyAsk-BBdRZIar.js";import{n,t as r}from"./contentVault-xfUwSJ3i.js";import{r as i}from"./localBudget-CxLP6bjE.js";var a={"15min":15,hourly:60,"6h":360,daily:1440,manual:1/0},o={daily:1440,weekly:10080,"on-change":1/0,manual:1/0};function s(e,t){return Number.isFinite(t)?e+t*6e4:2**53-1}function c(e){return e===`manual`?0:Math.round(43200/a[e])}function l(e,t){let n=e.window;if(n){if(t<n.startAt)return n.startAt;if(t>n.endAt)return 2**53-1}return s(t,a[e.data])}var u=`mavea-dash-opens-v1`,d=2592e6;function f(e){return!!e&&typeof e==`object`}function ee(e,t){if(!f(e))return{};let n=t-d,r={};for(let[t,i]of Object.entries(e)){if(!t||!Array.isArray(i))continue;let e=i.filter(e=>typeof e==`number`&&Number.isFinite(e)&&e>=n).slice(-30);e.length&&(r[t]=e)}return r}var p;function te(e){try{if(typeof localStorage>`u`)return{};let t=localStorage.getItem(u);return t?ee(JSON.parse(t),e):{}}catch{return{}}}function m(e=Date.now()){return p??=te(e),p}function h(e){p=e;try{typeof localStorage<`u`&&localStorage.setItem(u,JSON.stringify(e))}catch{}}function ne(e,t=Date.now()){if(!e)return;let n=m(t),r=[...n[e]??[],t].filter(e=>e>=t-d).slice(-30);h({...n,[e]:r})}function re(e,t,n=Date.now()){return(m(n)[e]??[]).filter(e=>e>=t).length}function g(e){let t=m(),n={};for(let[r,i]of Object.entries(t))e.has(r)&&(n[r]=i);h(n)}var ie=12,_=new Map,v=0,y=new Set;function b(){for(let e of y)e()}function ae(e){return y.add(e),()=>y.delete(e)}function oe(e,t=Date.now()){v+=1;let n={id:`run-${v}`,dashboardId:e,startedAt:t,steps:[{name:`scheduled`,ok:!0,at:t}]},r=_.get(e)??[];return _.set(e,[n,...r].slice(0,ie)),b(),n}function se(e,t,n,r={}){e&&(e.steps.push({name:t,ok:n,at:r.at??Date.now(),...r.count===void 0?{}:{count:r.count},...r.detail?{detail:r.detail}:{}}),b())}function ce(e,t){e&&(e.endedAt=t.at??Date.now(),t.outcome&&(e.outcome=t.outcome),t.failure&&(e.failure=t.failure),t.attempts!==void 0&&(e.attempts=t.attempts),b())}var le=[];function ue(e){return _.get(e)??le}function de(e){e===void 0?_.clear():_.delete(e),b()}var fe=`mavea-dashboards`,x=`observations`,pe=1,me=200;function he(){return typeof indexedDB<`u`}var S=null;function C(){return S||(S=new Promise((e,t)=>{let n=indexedDB.open(fe,pe);n.onupgradeneeded=()=>{let e=n.result;if(!e.objectStoreNames.contains(x)){let t=e.createObjectStore(x,{keyPath:`id`});t.createIndex(`byTarget`,[`dashboardId`,`targetId`,`observedAt`]),t.createIndex(`byDashboard`,`dashboardId`)}},n.onsuccess=()=>e(n.result),n.onerror=()=>t(n.error??Error(`indexedDB open failed`))}),S.catch(()=>{S=null}),S)}function w(e){return new Promise((t,n)=>{e.oncomplete=()=>t(),e.onerror=()=>n(e.error??Error(`indexedDB transaction failed`)),e.onabort=()=>n(e.error??Error(`indexedDB transaction aborted`))})}async function ge(e,t,r,i=Date.now(),a){if(he())try{let o=await n({data:r,...a?.length?{receipts:a}:{}}),s=(await C()).transaction(x,`readwrite`),c=s.objectStore(x),l={id:`${e}:${t}:${i}`,dashboardId:e,targetId:t,observedAt:i,payload:o};c.put(l),await w(s),await _e(e,t)}catch{}}async function _e(e,t){try{let n=(await C()).transaction(x,`readwrite`),r=n.objectStore(x).index(`byTarget`),i=IDBKeyRange.bound([e,t,0],[e,t,1/0]),a=[];await new Promise((e,t)=>{let n=r.openKeyCursor(i,`next`);n.onsuccess=()=>{let t=n.result;if(!t)return e();a.push(t.primaryKey),t.continue()},n.onerror=()=>t(n.error??Error(`cursor failed`))});let o=a.length-me;if(o>0){let e=n.objectStore(x);for(let t of a.slice(0,o))e.delete(t)}await w(n)}catch{}}async function ve(e){if(he())try{let t=(await C()).transaction(x,`readwrite`),n=t.objectStore(x).index(`byDashboard`),r=t.objectStore(x);await new Promise((t,i)=>{let a=n.openKeyCursor(IDBKeyRange.only(e));a.onsuccess=()=>{let e=a.result;if(!e)return t();r.delete(e.primaryKey),e.continue()},a.onerror=()=>i(a.error??Error(`cursor failed`))}),await w(t)}catch{}}function T(e){return e.state?e.state:e.lastRefreshedAt===null?{status:`pending`}:e.lastDataOutcome===`unverified`?{status:`degraded`,lastSuccessAt:e.lastRefreshedAt,failure:{kind:`ungrounded`},lastAttemptAt:e.lastRefreshedAt}:{status:`active`,lastSuccessAt:e.lastRefreshedAt}}function E(e){return{status:`active`,lastSuccessAt:e}}function D(e,t,n){let r=e.status===`active`||e.status===`degraded`?e.lastSuccessAt:void 0;return r===void 0?{status:`pending`,failure:t,lastAttemptAt:n}:{status:`degraded`,lastSuccessAt:r,failure:t,lastAttemptAt:n}}function ye(e){switch(e.kind){case`auth`:return`Your model rejected the key — reconnect it in Live, then check again.`;case`rate-limit`:return`Your model provider is rate-limiting right now. This retries itself shortly.`;case`network`:return`Couldn't reach your model. This retries itself once the connection is back.`;case`no-model`:return`No model is connected yet — connect one in Live and this starts checking.`;case`ungrounded`:return`No live source backed this up — the model may not have searched. Try a stronger model in Settings, or reword what to track.`;case`provider-unavailable`:return`Your model provider is unavailable right now. This retries itself shortly.`}}function be(e){switch(e){case`no-model`:return{kind:`no-model`};case`unverified`:return{kind:`ungrounded`};case`failed`:return{kind:`network`};default:return null}}var xe=e({DASHBOARDS_EVENT:()=>k,DASHBOARDS_QUOTA_EVENT:()=>A,MAX_METRICS:()=>12,MAX_WIDGETS:()=>12,addDashboard:()=>Ue,addWidget:()=>et,appendSource:()=>it,applyRefreshResult:()=>bt,blockToWidget:()=>Ke,clearDashboards:()=>Xe,clearOneShot:()=>vt,createBlankDashboard:()=>Ge,ensureFirstCheck:()=>mt,foldInto:()=>ot,getDashboard:()=>He,getDashboards:()=>Ve,hasDroppedWrite:()=>F,invalidate:()=>Re,markAiRefreshed:()=>ht,markDataRefreshed:()=>ft,markDataRetry:()=>pt,markTrackerFailure:()=>$,markVerdictFailed:()=>dt,mergeDashboards:()=>We,newDashboardId:()=>I,removeDashboard:()=>Ye,removeWidget:()=>$e,reorderWidgets:()=>Ze,setCadenceWindow:()=>gt,setOneShot:()=>_t,setVerdict:()=>ut,setWidgetOrder:()=>nt,setWidgetRefreshQuery:()=>tt,setWidgetSpan:()=>Qe,updateCadence:()=>Je,updateDashboard:()=>qe,updateMetricValue:()=>ct,updateTripwireStates:()=>lt,whenDashboardsHydrated:()=>Le}),O=`mavea-dashboards-v1`,k=O,A=`${O}:quota`,j=24,Se=12,Ce=4096,we=60,M=null,N=0,P=!1;function F(){return P}function I(){try{let e=globalThis.crypto;if(e?.randomUUID)return e.randomUUID()}catch{}return N+=1,`dash-${N.toString(36)}-${Math.floor(Math.random()*1e9).toString(36)}`}function Te(e){let t=JSON.stringify(e,(e,t)=>typeof t==`string`&&t.length>Ce&&t.startsWith(`data:`)?``:t);return JSON.parse(t)}function L(e){return!!e&&typeof e==`object`}function R(e,t){return typeof e==`number`&&Number.isFinite(e)?e:t}function z(e,t=``){return typeof e==`string`?e:t}function Ee(e){return e===`5min`?`15min`:z(e,`manual`)}function De(e){if(!L(e))return null;let t=e.at,n=e.value;return typeof t!=`number`||!Number.isFinite(t)||typeof n!=`number`||!Number.isFinite(n)?null:{at:t,value:n}}var Oe=new Set([`auth`,`rate-limit`,`network`,`no-model`,`ungrounded`,`provider-unavailable`]);function B(e){if(!L(e))return;let t=L(e.failure)&&Oe.has(z(e.failure.kind))?{kind:z(e.failure.kind),...typeof e.failure.retryAt==`number`&&Number.isFinite(e.failure.retryAt)?{retryAt:e.failure.retryAt}:{}}:void 0,n=typeof e.lastAttemptAt==`number`&&Number.isFinite(e.lastAttemptAt)?e.lastAttemptAt:void 0,r=typeof e.lastSuccessAt==`number`&&Number.isFinite(e.lastSuccessAt)?e.lastSuccessAt:void 0;if(e.status===`pending`)return{status:`pending`,...t?{failure:t}:{},...n===void 0?{}:{lastAttemptAt:n}};if(e.status===`active`&&r!==void 0)return{status:`active`,lastSuccessAt:r};if(e.status===`degraded`&&t&&n!==void 0)return{status:`degraded`,failure:t,lastAttemptAt:n,...r===void 0?{}:{lastSuccessAt:r}}}function ke(e){if(!L(e))return null;let t=(Array.isArray(e.history)?e.history:[]).map(De).filter(e=>e!==null).slice(-60);return{...e,history:t.length?t:void 0}}function Ae(e){if(!L(e))return;let t=e.startAt,n=e.endAt;if(!(typeof t!=`number`||!Number.isFinite(t))&&!(typeof n!=`number`||!Number.isFinite(n)||n<=t))return{label:z(e.label),startAt:t,endAt:n,origin:e.origin===`search`?`search`:`user`}}function je(e){if(!(!L(e)||typeof e.text!=`string`||!e.text))return{text:e.text,at:R(e.at,0)}}function Me(e){if(!Array.isArray(e))return[];let t=[];for(let n of e){if(!L(n)||typeof n.expected!=`string`||!n.expected)continue;let e=n.result;(e===`hit`||e===`miss`||e===`unclear`)&&t.push({at:R(n.at,0),expected:n.expected,result:e,...typeof n.note==`string`&&n.note?{note:n.note}:{}})}return t.slice(-20)}function V(e,t){if(!e.window||t<=e.window.endAt)return e;let{window:n,...r}=e;return r}var H=new Set([`thesis`,`alignmentgauge`,`standingalerts`,`sourceslineage`]);function Ne(e,t,n){let r=n||t;return r?e.map(e=>{if(e.refreshQuery?.trim()||e.metricId||H.has(e.block.type))return e;let t=e.block.props?.title,n=typeof t==`string`&&t.trim()?`${r} — ${t.trim()}`:r;return{...e,refreshQuery:n}}):e}function Pe(e){if(!L(e))return null;let n=z(e.id);if(!n)return null;let r=L(e.thesis)?e.thesis:null,i=Array.isArray(e.widgets)?e.widgets.filter(e=>L(e)&&L(e.block)):[],a=L(e.cadence)?e.cadence:{},o=L(e.alerts)?e.alerts:{},s=Fe(e.lastVerdict),c=z(e.title,`Untitled`),l=t(z(e.question)),u=Ae(a.window),d=je(e.prediction),f=Me(e.predictionHistory);return{id:n,title:c,question:l,thesis:{text:z(r?.text),saidAt:R(r?.saidAt,0)},tripwires:Array.isArray(e.tripwires)?e.tripwires:[],metrics:Array.isArray(e.metrics)?e.metrics.map(ke).filter(e=>e!==null):[],sources:Array.isArray(e.sources)?e.sources:[],widgets:Ne(i.slice(0,12),c,l),cadence:{data:Ee(a.data),ai:z(a.ai,`manual`),...u?{window:u}:{}},smartTrigger:typeof e.smartTrigger!=`boolean`||e.smartTrigger,alerts:{inApp:o.inApp!==!1,push:o.push===!0},...typeof e.topic==`string`&&e.topic?{topic:e.topic}:{},createdAt:R(e.createdAt,0),updatedAt:R(e.updatedAt,0),...typeof e.lastTouchedByUserAt==`number`&&Number.isFinite(e.lastTouchedByUserAt)?{lastTouchedByUserAt:e.lastTouchedByUserAt}:{},nextDataAt:R(e.nextDataAt,0),nextAiAt:R(e.nextAiAt,2**53-1),...typeof e.oneShotAt==`number`&&Number.isFinite(e.oneShotAt)?{oneShotAt:e.oneShotAt,oneShotLabel:z(e.oneShotLabel)}:{},...d?{prediction:d}:{},...f.length?{predictionHistory:f}:{},lastRefreshedAt:typeof e.lastRefreshedAt==`number`&&Number.isFinite(e.lastRefreshedAt)?e.lastRefreshedAt:null,...e.lastDataOutcome===`updated`||e.lastDataOutcome===`no-change`||e.lastDataOutcome===`unverified`?{lastDataOutcome:e.lastDataOutcome}:{},...B(e.state)?{state:B(e.state)}:{},...s?{lastVerdict:s}:{},...typeof e.lastVerdictAttemptAt==`number`&&Number.isFinite(e.lastVerdictAttemptAt)?{lastVerdictAttemptAt:e.lastVerdictAttemptAt}:{},...typeof e.lastVerdictError==`string`&&e.lastVerdictError?{lastVerdictError:e.lastVerdictError}:{}}}function Fe(e){return!L(e)||typeof e.text!=`string`||!e.text?null:{text:e.text,at:R(e.at,0),grounded:e.grounded===!0,...Array.isArray(e.sources)?{sources:e.sources}:{},...typeof e.tripwireId==`string`?{tripwireId:e.tripwireId}:{}}}var U=!1,W=0;function G(e){return Array.isArray(e)?e.map(Pe).filter(e=>e!==null):[]}async function K(e){let t=++W,r=!1;try{if(typeof localStorage>`u`)return;let a=await n(e);if(t!==W)return;r=await i(O,a)}catch{}if(!r){P=!0;try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(A))}catch{}}}function Ie(){try{if(typeof localStorage>`u`)return[];let e=localStorage.getItem(O);if(!e)return[];let t=G(JSON.parse(e));return t.length&&K(t),t}catch{return[]}}async function q(){try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(O);if(!e)return;try{JSON.parse(e);return}catch{}let t=G(await r(e));if(U)return;M=t,U=!0,typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(k,{detail:t}))}catch{}}var J=q();function Le(){return J}function Y(){return M??=Ie(),M}function Re(){let e=M;M=null,U=!1,J=q();try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(O);if(!e)return;JSON.parse(e)}catch{M=e}}function ze(e){return e.length<=j?e:[...e].sort((e,t)=>(t.lastTouchedByUserAt??t.updatedAt)-(e.lastTouchedByUserAt??e.updatedAt)).slice(0,j)}function X(e){let t=G(e);M=t,U=!0,K(t);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(k,{detail:t}))}catch{}}function Z(e,t,n=Date.now(),r={}){let i=!1,a=Y().map(a=>a.id===e?(i=!0,{...t(a),updatedAt:n,...r.userTouch?{lastTouchedByUserAt:n}:{}}):a);i&&X(a)}var Q=null,Be=null;function Ve(){let e=Y();return(Be!==e||Q===null)&&(Q=[...e].sort((e,t)=>(t.lastTouchedByUserAt??t.createdAt)-(e.lastTouchedByUserAt??e.createdAt)),Be=e),Q}function He(e){return Y().find(t=>t.id===e)??null}function Ue(e){X(ze([Te({...e,lastTouchedByUserAt:e.lastTouchedByUserAt??e.updatedAt}),...Y().filter(t=>t.id!==e.id)]))}function We(e){let t=G(e);if(!t.length)return 0;let n=new Map(Y().map(e=>[e.id,e]));for(let e of t){let t=n.get(e.id);(!t||e.updatedAt>=t.updatedAt)&&n.set(e.id,e)}return X(ze([...n.values()])),t.length}function Ge(e){let t=e.now??Date.now();return{id:I(),title:e.title||`Untitled dashboard`,question:e.question??``,thesis:{text:``,saidAt:t},tripwires:[],metrics:[],sources:[{kind:`ORIGIN`,conversationId:`pin`,title:e.title||`Pinned cards`,contributed:`Started by pinning a card.`,at:t}],widgets:[],cadence:{data:`manual`,ai:`manual`},smartTrigger:!1,alerts:{inApp:!0,push:!1},...e.topic?{topic:e.topic}:{},createdAt:t,updatedAt:t,nextDataAt:2**53-1,nextAiAt:2**53-1,lastRefreshedAt:null}}function Ke(e,t=`pin`,n){let r=new Set([`chart`,`plot`,`dualaxis`,`bars`,`timeline`,`breakdown`,`table`]);return{id:`w-pin-`+Math.random().toString(36).slice(2,9),block:e,span:r.has(e.type)?2:1,fromSource:t,...n?.trim()?{refreshQuery:n.trim()}:{}}}function qe(e,t){Z(e,e=>({...e,...t}),void 0,{userTouch:!0})}function Je(e,t,n=Date.now()){Z(e,e=>{let r={...e.cadence,...t};return{...e,cadence:r,...t.data===void 0?{}:{nextDataAt:l(r,n)},...t.ai===void 0?{}:{nextAiAt:s(n,o[r.ai])}}},n,{userTouch:!0})}function Ye(e){let t=Y().filter(t=>t.id!==e);t.length!==Y().length&&(X(t),g(new Set(t.map(e=>e.id))),de(e),ve(e))}function Xe(){Y().length!==0&&(X([]),g(new Set))}function Ze(e,t,n){Z(e,e=>{let r=[...e.widgets];if(t<0||t>=r.length||n<0||n>=r.length)return e;let[i]=r.splice(t,1);return r.splice(n,0,i),{...e,widgets:r}},void 0,{userTouch:!0})}function Qe(e,t,n){Z(e,e=>({...e,widgets:e.widgets.map(e=>e.id===t?{...e,span:n}:e)}),void 0,{userTouch:!0})}function $e(e,t){Z(e,e=>({...e,widgets:e.widgets.filter(e=>e.id!==t)}),void 0,{userTouch:!0})}function et(e,t,n={}){let r=Array.isArray(t)?t:[t];r.length!==0&&Z(e,e=>{let t=Math.max(0,Math.min(n.at??e.widgets.length,e.widgets.length)),i=[...e.widgets.slice(0,t),...r,...e.widgets.slice(t)],a=i;if(i.length>12){let e=i.filter(e=>!H.has(e.block.type)),t=i.length-12;if(e.length>=t){let n=new Set(e.slice(-t).map(e=>e.id));a=i.filter(e=>!n.has(e.id))}else a=i.slice(0,12)}return{...e,widgets:a,...n.source?{sources:[...e.sources,n.source].slice(-rt)}:{}}},void 0,{userTouch:!0})}function tt(e,t,n){let r=n.trim();if(!r||t.length===0)return;let i=new Set(t);Z(e,e=>({...e,widgets:e.widgets.map(e=>i.has(e.id)?{...e,refreshQuery:r}:e)}))}function nt(e,t){Z(e,e=>{let n=new Map(e.widgets.map(e=>[e.id,e])),r=t.map(e=>n.get(e)).filter(e=>!!e),i=new Set(r.map(e=>e.id)),a=e.widgets.filter(e=>!i.has(e.id));return{...e,widgets:[...r,...a]}},void 0,{userTouch:!0})}var rt=24;function it(e,t){Z(e,e=>({...e,sources:[...e.sources,t].slice(-24)}),void 0,{userTouch:!0})}var at=12;function ot(e,t){Z(e,e=>({...e,metrics:[...e.metrics,...t.metrics].slice(0,12),tripwires:[...e.tripwires,...t.tripwires].slice(0,12),widgets:[...e.widgets,...t.widgets].slice(0,12),sources:[...e.sources,t.source].slice(-24)}),void 0,{userTouch:!0})}function st(e,t,n){if(n===null)return e;let r=[...e??[],{at:t,value:n}];return r.length>we?r.slice(-60):r}function ct(e,t,n,r,i,a=Date.now()){Z(e,e=>({...e,metrics:e.metrics.map(e=>e.id===t?{...e,lastValue:n,lastRaw:r,origin:i,asOf:a,history:st(e.history,a,n)}:e)}),a,{userTouch:i===`user`})}function lt(e,t,n=Date.now()){Z(e,e=>({...e,tripwires:t}),n)}function ut(e,t,n=Date.now()){Z(e,e=>({...e,lastVerdict:t,lastVerdictAttemptAt:n,lastVerdictError:void 0}),n)}function dt(e,t,n){Z(e,e=>({...e,lastVerdictAttemptAt:t,lastVerdictError:n}),t)}function ft(e,t=Date.now(),n=`updated`){Z(e,e=>{let r=V(e.cadence,t);return{...e,cadence:r,nextDataAt:l(r,t),lastRefreshedAt:t,lastDataOutcome:n,state:E(t)}})}function $(e,t,n=Date.now()){Z(e,e=>({...e,state:D(T(e),t,n)}))}function pt(e,t){Z(e,e=>({...e,nextDataAt:t,...e.oneShotAt!==void 0&&e.oneShotAt<t?{oneShotAt:t}:{}}))}function mt(e,t=Date.now()){Z(e,e=>e.oneShotAt===void 0?{...e,oneShotAt:t,oneShotLabel:`first check`}:e)}function ht(e,t=Date.now()){Z(e,e=>({...e,nextAiAt:s(t,o[e.cadence.ai])}))}function gt(e,t,n=Date.now()){Z(e,e=>{let r=t?{...e.cadence,window:t}:{...e.cadence,window:void 0};return{...e,cadence:r,nextDataAt:l(r,n)}},n,{userTouch:t?.origin===`user`})}function _t(e,t,n,r=Date.now()){Z(e,e=>({...e,oneShotAt:t,oneShotLabel:n}),r,{userTouch:!0})}function vt(e,t=Date.now()){Z(e,e=>({...e,oneShotAt:void 0,oneShotLabel:void 0}),t)}var yt=3e5;function bt(e,t,n=Date.now()){Z(e,e=>{let r=new Map((t.values??[]).map(e=>[e.metricId,e])),i=new Map((t.blocks??[]).map(e=>[e.widgetId,e.block])),a=e.prediction,o=e.predictionHistory;if(t.grade&&a){let e={at:n,expected:a.text,result:t.grade.result,...t.grade.note?{note:t.grade.note}:{}};o=[...o??[],e].slice(-20),a=void 0}t.expects?.trim()&&(a={text:t.expects.trim(),at:n});let s=V(e.cadence,n),c=l(s,n),u=t.outcome===`unverified`&&e.lastDataOutcome!==`unverified`&&c!==2**53-1&&(!s.window||n>=s.window.startAt)?Math.min(c,n+yt):c;return{...e,cadence:s,metrics:e.metrics.map(e=>{let t=r.get(e.id);return t?{...e,lastValue:t.value,lastRaw:t.raw,origin:t.origin,asOf:n,history:st(e.history,n,t.value)}:e}),widgets:e.widgets.map(e=>{let t=i.get(e.id);return t?{...e,block:t}:e}),...t.tripwires?{tripwires:t.tripwires}:{},...t.consumedOneShot?{oneShotAt:void 0,oneShotLabel:void 0}:{},nextDataAt:u,lastRefreshedAt:n,lastDataOutcome:t.outcome,state:t.outcome===`unverified`?D(T(e),{kind:`ungrounded`},n):E(n),prediction:a,predictionHistory:o}},n)}export{xe as A,ue as B,Ye as C,nt as D,ut as E,Le as F,re as G,se as H,be as I,a as J,ne as K,ye as L,qe as M,ct as N,tt as O,lt as P,T as R,I as S,gt as T,oe as U,ce as V,ae as W,l as X,c as Y,s as Z,ht as _,Ue as a,dt as b,Ke as c,mt as d,ot as f,Re as g,F as h,Se as i,Je as j,Qe as k,vt as l,Ve as m,A as n,et as o,He as p,o as q,at as r,bt as s,k as t,Ge as u,pt as v,$e as w,We as x,$ as y,ge as z};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./friendlyAsk-BBdRZIar.js";import{n as t,t as n}from"./contentVault-xfUwSJ3i.js";import{n as r,r as i,t as a}from"./localBudget-CxLP6bjE.js";var o=[`stat`,`value`,`big`,`headline`];function s(e){let t=[e.points,e.bars,e.data,e.series,e.values];for(let e of t){if(!Array.isArray(e))continue;let t=e.map(e=>{if(typeof e==`number`)return e;if(e&&typeof e==`object`){let t=e,n=t.v??t.y??t.value;if(typeof n==`number`)return n}return NaN}).filter(e=>Number.isFinite(e));if(t.length>=2)return t.slice(0,24)}}function c(e){return e.find(e=>e.type===`insight`&&!!e.id)||e.find(e=>{if(!e.id)return!1;let t=e.props??{};return o.some(e=>typeof t[e]==`string`&&t[e].trim())})}function l(e){let t=c(e.blocks);if(!t)return null;let n=t.props??{},r=o.find(e=>typeof n[e]==`string`&&n[e].trim());if(!r)return null;let i=typeof n.delta==`string`&&n.delta.trim()?n.delta.trim():void 0,a=typeof n.deltaDir==`string`?n.deltaDir:void 0,l=typeof n.unit==`string`&&n.unit.trim()?n.unit.trim():void 0;return{value:n[r].trim(),unit:l,delta:i,deltaDir:a,points:s(n),kind:t.type}}var u=`mavea-live-library-v1`,d=u,f=12,p=24e4,m=4096,h=null,g=0;function _(){try{let e=globalThis.crypto;if(e?.randomUUID)return e.randomUUID()}catch{}return g+=1,`lib-${g.toString(36)}-${Math.floor(Math.random()*1e9).toString(36)}`}function v(e){return e.replace(/\s+/g,` `).trim().toLowerCase()}function y(e){let t=JSON.stringify(e,(e,t)=>typeof t==`string`&&t.length>m&&t.startsWith(`data:`)?``:t);return JSON.parse(t)}function b(e){return!!e&&typeof e==`object`&&Array.isArray(e.blocks)}function x(t){if(!t||typeof t!=`object`)return null;let n=t;if(!b(n.spec))return null;let r=typeof n.question==`string`?e(n.question):``;return r.trim()?{id:typeof n.id==`string`&&n.id?n.id:_(),question:r,title:typeof n.title==`string`?n.title:n.spec.title??``,savedAt:typeof n.savedAt==`number`&&Number.isFinite(n.savedAt)?n.savedAt:0,lead:n.lead&&typeof n.lead==`object`?n.lead:null,spec:n.spec,...typeof n.topic==`string`&&n.topic?{topic:n.topic}:{}}:null}var S=!1,C=0;function w(e){return Array.isArray(e)?e.map(x).filter(e=>e!==null).slice(0,f):[]}async function T(e){let n=++C;try{if(typeof localStorage>`u`)return;let r=await t(e);if(n!==C)return;await i(u,r)}catch{}}async function E(){let e=h;if(!e||e.length<2)return 0;let n=e.slice(0,-1),i=++C,a=await t(n);if(i!==C)return 0;h=n;let o=r(u,a);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(d,{detail:n}))}catch{}return o}a(u,E);function D(){try{if(typeof localStorage>`u`)return[];let e=localStorage.getItem(u);if(!e)return[];let t=w(JSON.parse(e));return t.length&&T(t),t}catch{return[]}}async function O(){try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(u);if(!e)return;try{JSON.parse(e);return}catch{}let t=w(await n(e));if(S)return;h=t,S=!0,typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(d,{detail:t}))}catch{}}var k=O();function A(){return k}function j(){return h||(h=D(),h)}function M(e){let t=w(e);h=t,S=!0,T(t);try{typeof window<`u`&&typeof CustomEvent==`function`&&window.dispatchEvent(new CustomEvent(d,{detail:t}))}catch{}}function N(){return j()}function P(e){let t=e.map(x).filter(e=>e!==null);if(!t.length)return 0;let n=new Map(j().map(e=>[e.id,e]));for(let e of t){let t=n.get(e.id);(!t||e.savedAt>=t.savedAt)&&n.set(e.id,e)}return M([...n.values()].sort((e,t)=>t.savedAt-e.savedAt)),t.length}function F(e,t,n=Date.now()){try{let r=t.trim();if(!r||!b(e)||e.blocks.length===0)return;let i=y(e),a={id:_(),question:r,title:i.title??``,savedAt:n,lead:l(i),spec:i,...i.topic?{topic:i.topic}:{}};if(JSON.stringify(a).length>p)return;let o=v(r);M([a,...j().filter(e=>v(e.question)!==o)].slice(0,f))}catch{}}function I(e){let t=j().filter(t=>t.id!==e);t.length!==j().length&&M(t)}function L(){M([])}export{I as a,P as i,L as n,F as o,N as r,A as s,d as t};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-DkW27tQK.js";import{r as t}from"./history-D2EH2X6D.js";import{t as n}from"./friendlyAsk-BBdRZIar.js";import{n as r,t as i}from"./contentVault-xfUwSJ3i.js";import{n as a,r as o,t as s}from"./localBudget-CxLP6bjE.js";function c(e){return e.toLowerCase().replace(/['’]/g,``).replace(/[^a-z0-9]+/g,` `).trim()}function l(e,t){let n=t?.failOpen??!1;if(!e||!e.trim())return()=>n;let r=c(e),i=r.split(` `).filter(Boolean);return e=>{let t=c(e);if(!t)return!1;if(r.includes(t))return!0;let n=t.split(` `).filter(Boolean),a=n.length;if(a===0)return!1;let o=Math.ceil(a*.9),s=new Set(n);for(let e=0;e+a<=i.length;e++){let t=0;for(let n=0;n<a;n++)s.has(i[e+n])&&t++;if(t>=o)return!0}return!1}}var u=80,d=120,f=90,p=120,m=120,h=30,g=32,_=/\b(?:trauma(?:ti[sz](?:ed?|ing))?|ptsd|clinical depression|major depression|anxiety disorder|bipolar|narcissistic|borderline personality|attachment disorder|co-?dependent(?:ency)?|dissociat(?:e|ed|ion)|avoidant attachment|anxious attachment|emotional dysregulation|hypervigilance|love-?bombing|codependency|enmeshment|enmeshed|parentif(?:ied|ying)|scapegoat(?:ing)?|golden child)\b/i,v=new Set([`person`,`option`,`want`,`fear`,`constraint`,`tradeoff`,`contradiction`,`open_loop`,`action`,`value`,`question`]),ee=new Set([`supports`,`tensions`,`depends_on`,`same_thread`,`blocks`]),y=new Set([`forming`,`stable`,`maybe`]),b=new Set([`said`,`inferred`]);function x(e,t){if(typeof e!=`string`)return null;let n=e.trim();return n?n.length>t?`${n.slice(0,t-1)}…`:n:null}function S(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=x(n.id,32);if(!r)return null;let i=v.has(n.kind)?n.kind:null;if(!i)return null;let a=x(n.label,u);if(!a)return null;let o=x(n.quote,d);if(!o||_.test(a)||_.test(o)||!t(o))return null;let s=y.has(n.status)?n.status:`stable`,c=b.has(n.confidence)?n.confidence:`said`,l=typeof n.weight==`number`?n.weight:1;return{id:r,kind:i,label:a,quote:o,status:s,confidence:c,weight:Math.max(1,Math.min(3,Math.round(l)))}}function C(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=x(n.from,32),i=x(n.to,32);if(!r||!i||t&&(!t.has(r)||!t.has(i))||r===i)return null;let a=ee.has(n.kind)?n.kind:null;if(!a)return null;let o=typeof n.label==`string`?x(n.label,h)??void 0:void 0;return{from:r,to:i,kind:a,...o?{label:o}:{}}}function te(e,t){if(!e||typeof e!=`object`)return null;let n=e,r=x(n.id,32);if(!r)return null;let i=x(n.label,g);if(!i||_.test(i))return null;let a=Array.isArray(n.atomIds)?n.atomIds:[],o=new Set,s=[];for(let e of a){let n=x(e,32);n&&t.has(n)&&!o.has(n)&&(o.add(n),s.push(n))}if(s.length===0)return null;let c=typeof n.weight==`number`?n.weight:1;return{id:r,label:i,atomIds:s,weight:Math.max(1,Math.min(3,Math.round(c)))}}function w(e,t){let n=null;if(e&&typeof e==`object`&&!Array.isArray(e))n=e;else if(typeof e==`string`){let t=e.match(/\{[\s\S]*\}/);if(!t)return null;try{n=JSON.parse(t[0])}catch{return null}}if(!n)return null;let r=x(n.center,f);if(!r)return null;let i=typeof n.title==`string`?x(n.title,60)??void 0:void 0,a=l(t,{failOpen:!0}),o=(Array.isArray(n.atoms)?n.atoms:[]).map(e=>S(e,a)).filter(e=>e!==null);if(o.length===0)return null;let s=new Set(o.map(e=>e.id)),c=(Array.isArray(n.links)?n.links:[]).map(e=>C(e,s)).filter(e=>e!==null),u=(Array.isArray(n.clusters)?n.clusters:[]).map(e=>te(e,s)).filter(e=>e!==null),d;if(n.unsaid&&typeof n.unsaid==`object`&&!Array.isArray(n.unsaid)){let e=n.unsaid,t=x(e.label,p),r=x(e.why,m);t&&r&&!_.test(t)&&!_.test(r)&&(d={label:t,why:r,confidence:`maybe`})}return{center:r,...i?{title:i}:{},atoms:o,links:c,...u.length?{clusters:u}:{},...d?{unsaid:d}:{}}}function T(e,t){let n=null;if(e&&typeof e==`object`&&!Array.isArray(e))n=e;else if(typeof e==`string`){let t=e.match(/\{[\s\S]*\}/);if(!t)return null;try{n=JSON.parse(t[0])}catch{return null}}if(!n)return null;let r=l(t,{failOpen:!0}),i=(Array.isArray(n.add)?n.add:[]).map(e=>S(e,r)).filter(e=>e!==null),a=(Array.isArray(n.addLinks)?n.addLinks:[]).map(e=>C(e)).filter(e=>e!==null);return i.length===0&&a.length===0?null:{add:i,addLinks:a}}var E=e({SESSION_STORAGE_KEY:()=>O,SESSION_TTL_MS:()=>k,SESSION_TURNS_CAP:()=>10,clearSession:()=>$,hasSavedSession:()=>Q,loadSession:()=>Z,saveSession:()=>Y,whenSessionSettled:()=>X});function D(e){return e===`replace`||e===`augment`||e===`refine`}var O=`mavea-live-session-v1`,k=6048e5,A=6e5,j=4096;function M(e){let t=JSON.stringify(e,(e,t)=>typeof t==`string`&&t.length>j&&t.startsWith(`data:`)?``:t);return JSON.parse(t)}function N(e){return!!e&&typeof e==`object`&&Array.isArray(e.blocks)}function P(e){if(!e||typeof e!=`object`)return null;let t=e;return t.role!==`user`&&t.role!==`assistant`||typeof t.content!=`string`?null:{role:t.role,content:t.role===`user`?n(t.content):t.content}}function F(e,t){if(!e||typeof e!=`object`)return null;let n=e;if(![`circle`,`underline`,`point`,`highlight`,`rising`,`falling`,`bracket`,`note`,`connect`].includes(n.kind)||typeof n.at!=`string`||!n.at)return null;let r={kind:n.kind,at:n.at};if(typeof n.to==`string`&&n.to&&(r.to=n.to),typeof n.label==`string`&&n.label&&(r.label=n.label),r.kind===`note`&&!r.label)return null;if((n.color===`key`||n.color===`cool`)&&(r.color=n.color),r.kind===`connect`){let e=typeof n.onIndex==`number`?Math.round(n.onIndex):-1;if(!r.to||e<0||e>=t)return null;r.onIndex=e}return r}function I(e,t){if(!Array.isArray(e))return[];let n=[];for(let r of e){if(!r||typeof r!=`object`)continue;let e=r;if(typeof e.index!=`number`)continue;let i={index:e.index,...typeof e.say==`string`?{say:e.say}:{},...typeof e.saySpoken==`string`?{saySpoken:e.saySpoken}:{}},a=F(e.mark,t);if(a&&(i.mark=a),Array.isArray(e.marks)){let n=e.marks.map(e=>F(e,t)).filter(e=>e!==null);n.length&&(i.marks=n)}n.push(i)}return n}function L(e){if(!e||typeof e!=`object`)return null;let r=e;if(!N(r.spec)||r.spec.blocks.length===0||typeof r.question!=`string`)return null;let i=r.mind?w(r.mind):null,a={question:n(r.question),...typeof r.id==`string`&&r.id.trim()?{id:r.id}:{},narration:typeof r.narration==`string`?r.narration:``,...typeof r.spoken==`string`?{spoken:r.spoken}:{},mode:D(r.mode)?r.mode:`replace`,...typeof r.topicShift==`boolean`?{topicShift:r.topicShift}:{},tour:I(r.tour,r.spec.blocks.length),spec:r.spec,at:typeof r.at==`number`&&Number.isFinite(r.at)?r.at:0,...i?{mind:i}:{}};return a.id=t(a),a}var R=null,z=!1,B=null,V=0,H=0;function U(e){let t=e;if(!t||typeof t!=`object`||t.v!==1||typeof t.savedAt!=`number`||!Number.isFinite(t.savedAt)||!Array.isArray(t.frames))return null;let n=t.frames.map(L).filter(e=>e!==null).slice(-10);if(!n.length)return null;let r=(Array.isArray(t.history)?t.history:[]).map(P).filter(e=>e!==null);return{v:1,savedAt:t.savedAt,history:r,frames:n}}async function W(e){let t=++H;try{if(typeof localStorage>`u`)return;let n=await r(e);if(t!==H)return;await o(O,n)}catch{}}async function G(){let e=R;if(!e||e.frames.length<2)return 0;let t={...e,frames:e.frames.slice(1)},n=++H,i=await r(t);return n===H?(R=t,a(O,i)):0}s(O,G);function K(){try{if(typeof localStorage>`u`)return null;let e=localStorage.getItem(O);if(!e)return null;let t=U(JSON.parse(e));return t&&W(t),t}catch{return null}}var q=null;function J(){return z?Promise.resolve():q||(q=(async()=>{try{if(typeof localStorage>`u`)return;let e=localStorage.getItem(O);if(!e)return;let t,n=!1;try{t=U(JSON.parse(e)),n=t!==null}catch{t=U(await i(e))}if(z)return;R=t,t&&(B=t,n&&W(t))}catch{}finally{z=!0,q=null}})(),q)}J();function Y(e,t,n=Date.now()){if(!z){let r=V;J().then(()=>{r===V&&(z=!0,Y(e,t,n))});return}try{if(typeof localStorage>`u`)return;if(!t.length){$();return}let r=B&&n-B.savedAt<=6048e5?B:null,i=r?.frames.length?r.frames[r.frames.length-1]:null,a=!!i&&!t.some(e=>e.at===i.at),o=a?[...r.frames,...t]:t,s=a?[...r.history,...e]:e,c=M(o.slice(-10)).map(L).filter(e=>e!==null),l={v:1,savedAt:n,history:s.slice(-20).map(P).filter(e=>e!==null),frames:c},u=JSON.stringify(l);if(u.length>A&&c.length>1){let e=u.length,t=0;for(;e>A&&c.length-t>1;)e-=JSON.stringify(c[t]).length+1,t++;c=c.slice(t),l={...l,frames:c},u=JSON.stringify(l)}if(u.length>A)return;R=l,z=!0,W(l)}catch{}}function X(e=1200){return z?Promise.resolve():Promise.race([J(),new Promise(t=>setTimeout(t,e))]).then(()=>void 0)}function Z(e=Date.now()){let t=R??K();return t&&!R&&(R=t,z=!0),t?e-t.savedAt>6048e5?null:t:(J(),null)}function Q(){if(R)return!0;try{return typeof localStorage<`u`&&!!localStorage.getItem(`mavea-live-session-v1`)}catch{return!1}}function $(){R=null,B=null,z=!0,V++,H++;try{typeof localStorage<`u`&&localStorage.removeItem(O)}catch{}}export{Y as a,T as c,Z as i,$ as n,E as o,Q as r,w as s,O as t};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-DkW27tQK.js";var t=e({ArrayStreamScanner:()=>d,StringFieldScanner:()=>r,completedArrayItems:()=>l,completedBlocks:()=>u,extractNarration:()=>a,extractNarrationProgress:()=>o,extractStringField:()=>i,nextSpeakableChunk:()=>c});function n(e){switch(e){case`n`:return`
|
|
2
|
+
`;case`t`:return` `;case`r`:return`\r`;case`"`:return`"`;case`\\`:return`\\`;case`/`:return`/`;default:return e}}var r=class{needle;from=0;phase=`key`;text=``;constructor(e){this.needle=`"${e}"`}scan(e){if(this.phase!==`done`&&this.phase!==`never`){if(this.phase===`key`){let t=e.indexOf(this.needle,this.from);if(t<0){this.from=Math.max(0,e.length-this.needle.length+1);return}this.phase=`colon`,this.from=t+this.needle.length}if(this.phase===`colon`){let t=e.indexOf(`:`,this.from);if(t<0){this.from=e.length;return}this.phase=`quote`,this.from=t+1}if(this.phase===`quote`){for(;this.from<e.length&&/\s/.test(e[this.from]);)this.from++;if(this.from>=e.length)return;if(e[this.from]!==`"`){this.phase=`never`;return}this.phase=`value`,this.from++}for(;this.from<e.length;){let t=e[this.from];if(t===`\\`){let t=e[this.from+1];if(t===void 0)return;this.text+=n(t),this.from+=2;continue}if(t===`"`){this.phase=`done`;return}this.text+=t,this.from++}}}progress(){return this.phase===`done`?{text:this.text,done:!0}:this.phase===`value`?{text:this.text,done:!1}:null}value(){return this.phase===`done`?this.text:null}};function i(e,t){let n=new r(t);return n.scan(e),n.value()}function a(e){return i(e,`narration`)}function o(e){let t=new r(`narration`);return t.scan(e),t.progress()}function s(e){let t=!1,n=null;for(let r=0;r<e.length;r++){if(e[r]===`[`&&e[r+1]===`[`){t=!0,r++;continue}if(t&&e[r]===`]`&&e[r+1]===`]`){t=!1,r++;continue}!t&&/[.!?]/.test(e[r])&&/\s/.test(e[r+1]??``)&&(n=r)}return n}function c(e,t,n){if(e.length<=t)return{chunk:``,consumed:t};if(n)return{chunk:e.slice(t).trim(),consumed:e.length};let r=e.slice(t),i=s(r);return i===null?{chunk:``,consumed:t}:{chunk:r.slice(0,i+1).trim(),consumed:t+i+1}}function l(e,t){let n=e.indexOf(`"${t}"`);if(n<0)return[];let r=e.indexOf(`[`,n);if(r<0)return[];r++;let i=[],a=0,o=-1,s=!1,c=!1;for(;r<e.length;r++){let t=e[r];if(s){c?c=!1:t===`\\`?c=!0:t===`"`&&(s=!1);continue}if(t===`"`)s=!0;else if(t===`{`)a===0&&(o=r),a++;else if(t===`}`){if(a--,a===0&&o>=0){try{i.push(JSON.parse(e.slice(o,r+1)))}catch{}o=-1}}else if(t===`]`&&a===0)break}return i}function u(e){return l(e,`blocks`)}var d=class{parsed=[];needle;buf=``;from=0;phase=`key`;depth=0;inStr=!1;esc=!1;start=-1;knownType=null;constructor(e){this.needle=`"${e}"`}get items(){return this.parsed}scan(e){if(this.phase===`done`)return;if(this.buf=e,this.phase===`key`){let t=e.indexOf(this.needle,this.from);if(t<0){this.from=Math.max(0,e.length-this.needle.length+1);return}this.phase=`bracket`,this.from=t+this.needle.length}if(this.phase===`bracket`){let t=e.indexOf(`[`,this.from);if(t<0){this.from=e.length;return}this.phase=`elements`,this.from=t+1}let t=this.from;for(;t<e.length;t++){let n=e[t];if(this.inStr){this.esc?this.esc=!1:n===`\\`?this.esc=!0:n===`"`&&(this.inStr=!1);continue}if(n===`"`)this.inStr=!0;else if(n===`{`)this.depth===0&&(this.start=t,this.knownType=null),this.depth++;else if(n===`}`){if(this.depth--,this.depth===0&&this.start>=0){try{this.parsed.push(JSON.parse(e.slice(this.start,t+1)))}catch{}this.start=-1}}else if(n===`]`&&this.depth===0){this.phase=`done`,this.buf=``;break}}this.from=t}pendingType(){if(this.phase===`done`||this.start<0)return null;if(this.knownType)return this.knownType;let e=/"type"\s*:\s*"([a-z0-9-]+)"/i.exec(this.buf.slice(this.start));return e&&(this.knownType=e[1]),this.knownType}};export{i as a,u as i,r as n,c as o,l as r,t as s,d as t};
|