@protoyard/player 0.0.0-stage → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +366 -2
- package/dist/app/.vite/manifest.json +9068 -0
- package/dist/app/_headers +4 -0
- package/dist/app/assets/Accept-CGkL5IVT.js +1 -0
- package/dist/app/assets/ActivityFeed-DMLYUJnO.js +1 -0
- package/dist/app/assets/AgendaView-BoJCiSNv.css +1 -0
- package/dist/app/assets/AgendaView-C_birR0h.js +1 -0
- package/dist/app/assets/Alert-BxM9whyb.js +1 -0
- package/dist/app/assets/AlertDialog-Dz9nkXWl.js +1 -0
- package/dist/app/assets/AlertDialog-Haq7IhWm.js +1 -0
- package/dist/app/assets/AlertDialog-nZ-QMI_Q.css +1 -0
- package/dist/app/assets/AlertSurface-B-Z7YWCM.js +1 -0
- package/dist/app/assets/AlertSurface-BDie0P7w.css +1 -0
- package/dist/app/assets/AnalyticsDashboard-B2ehbJfC.js +1 -0
- package/dist/app/assets/AnalyticsDashboard-Dl7vfTc-.css +1 -0
- package/dist/app/assets/AppNav-Cqh-81ZK.js +2 -0
- package/dist/app/assets/AppNavDrawer-CraL8gep.js +1 -0
- package/dist/app/assets/AuditHistory-CXwIZYZl.js +1 -0
- package/dist/app/assets/AuthSplitHostLayout-BBmShp6K.js +1 -0
- package/dist/app/assets/Avatar-B328P5yQ.css +1 -0
- package/dist/app/assets/Avatar-CqXbF4uK.js +1 -0
- package/dist/app/assets/Avatar-D6dmuwto.js +1 -0
- package/dist/app/assets/AvatarPicker-sDE9_lak.js +1 -0
- package/dist/app/assets/Axis--q6fWbpd.css +1 -0
- package/dist/app/assets/Axis-x-uG1NRy.js +1 -0
- package/dist/app/assets/Badge-CRhJ8sWH.js +1 -0
- package/dist/app/assets/BigStat-5Dlwgi6p.js +1 -0
- package/dist/app/assets/BigStat-Bk9Diq8w.css +1 -0
- package/dist/app/assets/BlockHost-BVn3KygM.js +2 -0
- package/dist/app/assets/BlockIcon-CrDIGMcW.js +1 -0
- package/dist/app/assets/BlockRenderer-D8RTz2Ra.js +1 -0
- package/dist/app/assets/BlockRenderer-DJQc-O2d.js +1 -0
- package/dist/app/assets/BoardMoveMenu-BoLySSiq.js +1 -0
- package/dist/app/assets/BrowserChrome-CLhhjfV9.js +1 -0
- package/dist/app/assets/BrowserChrome-DpygC_0y.css +1 -0
- package/dist/app/assets/BrowserFrame-CpGSoGOz.js +1 -0
- package/dist/app/assets/Button-5BamLyf0.css +1 -0
- package/dist/app/assets/Button-_rgUrOXL.js +1 -0
- package/dist/app/assets/CalendarMoveMenu-Cr1Keu3y.css +1 -0
- package/dist/app/assets/CalendarMoveMenu-ZVPWd0K3.js +1 -0
- package/dist/app/assets/Card-BrCr7hZi.js +1 -0
- package/dist/app/assets/Card-DkeUHZOp.css +1 -0
- package/dist/app/assets/CardDescription-Dw37vYyc.js +1 -0
- package/dist/app/assets/CardFooter-C1Lf9S3G.js +1 -0
- package/dist/app/assets/CardImage-CKJHH6N9.js +1 -0
- package/dist/app/assets/CardTitle-D0DAv1yG.js +1 -0
- package/dist/app/assets/CellEditor-C52Vp08I.js +1 -0
- package/dist/app/assets/ChartAnswer-zNYESHaD.js +2 -0
- package/dist/app/assets/ChartRoot-BXxWpPAx.css +1 -0
- package/dist/app/assets/ChartRoot-CzBaOrPA.js +1 -0
- package/dist/app/assets/ChartSlide-BdCjq_zK.css +1 -0
- package/dist/app/assets/ChartSlide-C_HN8BJy.js +1 -0
- package/dist/app/assets/ChartTable-Byb9S_QK.js +1 -0
- package/dist/app/assets/ChatWorkspaceHost-CXDZbfEI.js +1 -0
- package/dist/app/assets/Checkbox-D5lHY5ZQ.js +1 -0
- package/dist/app/assets/Checkout-jh0eFlmr.js +3 -0
- package/dist/app/assets/ChromeIcon-CE_UXRfl.js +1 -0
- package/dist/app/assets/ChromeIcon-DktINEqy.css +1 -0
- package/dist/app/assets/ChromeTooltip-Cj4JqYq1.css +1 -0
- package/dist/app/assets/ChromeTooltip-DQfokD5S.js +1 -0
- package/dist/app/assets/Close-COceBUJV.js +1 -0
- package/dist/app/assets/ClosingCta-BnEawssQ.js +1 -0
- package/dist/app/assets/ClosingCta-CKgLaqve.css +1 -0
- package/dist/app/assets/Code-0eXheR4p.js +1 -0
- package/dist/app/assets/CodeBlockView-BZEQ9CiS.js +3 -0
- package/dist/app/assets/CodeBlockView-DT5p81IC.css +1 -0
- package/dist/app/assets/CodeEditorHost-BTvdKo9G.js +2 -0
- package/dist/app/assets/CodeWithCallout-AxtGHMWp.js +1 -0
- package/dist/app/assets/CodeWithCallout-Pccn1G4N.css +1 -0
- package/dist/app/assets/ColorControl-CsJCYo0M.js +1 -0
- package/dist/app/assets/ComparisonTable-D2hhz7N3.css +1 -0
- package/dist/app/assets/ComparisonTable-DrRE2HJs.js +1 -0
- package/dist/app/assets/Consent-BpdpIOZo.js +1 -0
- package/dist/app/assets/Content-B9dQiA5c.js +1 -0
- package/dist/app/assets/CustomSlide-CTjTLR5q.js +1 -0
- package/dist/app/assets/CustomSlide-CvgRw7LD.css +1 -0
- package/dist/app/assets/DashboardGridLayout-B8BIaiRS.js +1 -0
- package/dist/app/assets/DashboardGridLayout-CxOqxnD1.css +1 -0
- package/dist/app/assets/DataBlockView-CN7uuQkq.css +1 -0
- package/dist/app/assets/DataBlockView-CxxPN79x.js +2 -0
- package/dist/app/assets/DataTable-7ohAfSZV.css +1 -0
- package/dist/app/assets/DataTable-DDPhYAAe.js +1 -0
- package/dist/app/assets/DateControl-B9nK0RaB.js +1 -0
- package/dist/app/assets/DatePicker-BvUwj5Z1.js +1 -0
- package/dist/app/assets/DateTimeControl-rw4lFEpB.js +1 -0
- package/dist/app/assets/DeckDebugPanel-CI5sPaz7.js +2 -0
- package/dist/app/assets/DeckPrintPages-BRhPtDTj.css +1 -0
- package/dist/app/assets/DeckPrintPages-CfsHNafR.js +2 -0
- package/dist/app/assets/DeckSlidePreview-CSk2TAJf.css +1 -0
- package/dist/app/assets/DeckSlidePreview-NgmyCnLI.js +1 -0
- package/dist/app/assets/DeckStudioPanel-D3cqYfG0.js +1 -0
- package/dist/app/assets/Description-B0VtOkN1.js +1 -0
- package/dist/app/assets/DesignCanvasHost-DgpgyEgk.js +1 -0
- package/dist/app/assets/DesignSystemStudio-DvPBGvF3.js +1 -0
- package/dist/app/assets/DesktopWindowFrame-DoIUKy7b.js +1 -0
- package/dist/app/assets/DiagramFamily-DwO6z5ji.js +1 -0
- package/dist/app/assets/DiagramFamily-viFFdQze.css +1 -0
- package/dist/app/assets/Dialog-DQs7mloK.js +1 -0
- package/dist/app/assets/DocEditor-BViZqV0C.css +1 -0
- package/dist/app/assets/DocEditor-DU1WoXfI.js +14 -0
- package/dist/app/assets/DocNotice-SpRy0Qbj.js +1 -0
- package/dist/app/assets/DocsLayout-Dls8HBPp.js +1 -0
- package/dist/app/assets/DocsLayout-Z4s5JfAy.css +1 -0
- package/dist/app/assets/DualSidebarLayout-ArUd2K3r.js +1 -0
- package/dist/app/assets/EmbedBlockView-DL29RLMk.js +1 -0
- package/dist/app/assets/EmbedBlockView-DbLGZ0Zk.css +1 -0
- package/dist/app/assets/EmptyState-DoCJlewL.js +1 -0
- package/dist/app/assets/EntityDetail-BsYPvHiO.js +2 -0
- package/dist/app/assets/EntityForm-BcVXXsPy.js +2 -0
- package/dist/app/assets/EntityForm-qCCvcBQm.css +1 -0
- package/dist/app/assets/EntityList-DUF_f21S.js +2 -0
- package/dist/app/assets/ErrorState-ZN9W18_A.js +1 -0
- package/dist/app/assets/EventButton-CMlhcc11.css +1 -0
- package/dist/app/assets/EventButton-D1j4ayNL.js +1 -0
- package/dist/app/assets/ExtensionPopupFrame-DC0cyRlp.css +1 -0
- package/dist/app/assets/ExtensionPopupFrame-bOfOlsku.js +1 -0
- package/dist/app/assets/Field-Dx5hJCdk.css +1 -0
- package/dist/app/assets/Field-uGkaxoeW.js +1 -0
- package/dist/app/assets/FileControl-BSc05YVU.js +1 -0
- package/dist/app/assets/FileInput-DfbaFJjK.js +1 -0
- package/dist/app/assets/FileUpload-C58M1WUA.js +1 -0
- package/dist/app/assets/FileUpload-CUDnO_wv.css +1 -0
- package/dist/app/assets/FilesPanel-oF7fXK8Z.js +1 -0
- package/dist/app/assets/FirstRunHint-BU_etcjO.js +1 -0
- package/dist/app/assets/FirstRunHint-Cznbatyp.css +1 -0
- package/dist/app/assets/FormBlock-Bpn45cbF.css +1 -0
- package/dist/app/assets/FormBlock-CGPd3ZgN.js +1 -0
- package/dist/app/assets/FreeSlide-ByTVS6jJ.css +1 -0
- package/dist/app/assets/FreeSlide-C4gb14Pb.js +1 -0
- package/dist/app/assets/FullscreenOverlay-DhVdxMK5.css +1 -0
- package/dist/app/assets/FullscreenOverlay-WRO4spsA.js +1 -0
- package/dist/app/assets/HostSlot-BRbppBYk.js +1 -0
- package/dist/app/assets/Icon-CRpKDuC7.js +1 -0
- package/dist/app/assets/Icon-CxE9sx-Y.css +1 -0
- package/dist/app/assets/Icon-DhNPWeWS.js +1 -0
- package/dist/app/assets/Icon-Dp7XOf8B.js +1 -0
- package/dist/app/assets/IconButton-CAhITzFQ.js +1 -0
- package/dist/app/assets/Image-BH2P4wNC.js +1 -0
- package/dist/app/assets/Image-BqPB6TMh.css +1 -0
- package/dist/app/assets/ImageFullBleed-CMruFy_r.css +1 -0
- package/dist/app/assets/ImageFullBleed-DrqoYgYe.js +1 -0
- package/dist/app/assets/Inbox-DxNeTx40.js +1 -0
- package/dist/app/assets/Input-B5IDQk3l.css +1 -0
- package/dist/app/assets/Input-CF7GrLbV.js +1 -0
- package/dist/app/assets/Input-D-wg5ud0.js +1 -0
- package/dist/app/assets/InteractiveBlockView-KuPs8kTL.css +1 -0
- package/dist/app/assets/InteractiveBlockView-Z81KgLnX.js +2 -0
- package/dist/app/assets/InteractivePlot-BSvfeZF0.js +2 -0
- package/dist/app/assets/InteractiveTable-Cggdql8G.js +1 -0
- package/dist/app/assets/Kbd-CZUQIsAX.js +1 -0
- package/dist/app/assets/KeyboardHelp-D3nZstlH.css +1 -0
- package/dist/app/assets/KeyboardHelp-cvDZwmkT.js +1 -0
- package/dist/app/assets/KpiTile-Bt5U5Udm.js +1 -0
- package/dist/app/assets/LaserPointer-BtSKWTuX.css +1 -0
- package/dist/app/assets/LaserPointer-DbFgkMGg.js +1 -0
- package/dist/app/assets/LayoutChrome-CAx0No-E.js +1 -0
- package/dist/app/assets/LayoutImage-CckWKV6C.js +1 -0
- package/dist/app/assets/LayoutImage-DYaBBBD7.css +1 -0
- package/dist/app/assets/LayoutVideo-BuJ_rxqB.css +1 -0
- package/dist/app/assets/LayoutVideo-CT5hgZXC.js +2 -0
- package/dist/app/assets/Legend-Dzpk5lDl.js +1 -0
- package/dist/app/assets/Link-DUtdbfue.js +1 -0
- package/dist/app/assets/LoadingState-aqt3fEhx.js +1 -0
- package/dist/app/assets/LucideIcon-DSpLZVOH.js +1 -0
- package/dist/app/assets/MagicLink-D7uwYdkP.js +1 -0
- package/dist/app/assets/MapBlockView-CATTVnRf.css +1 -0
- package/dist/app/assets/MapBlockView-CQPWuDWt.js +1 -0
- package/dist/app/assets/MarketingLayout-Cs6sUquJ.css +1 -0
- package/dist/app/assets/MarketingLayout-fRIgvioc.js +1 -0
- package/dist/app/assets/MasterDetailLayout-a35jW57j.js +1 -0
- package/dist/app/assets/MediaBlockView-2Z9UujRP.css +1 -0
- package/dist/app/assets/MediaBlockView-BQs_QISd.js +1 -0
- package/dist/app/assets/MediaCentered-Bv5FQEBG.js +1 -0
- package/dist/app/assets/MediaCentered-D1jAraam.css +1 -0
- package/dist/app/assets/MediaSide-DPvF8q9o.js +1 -0
- package/dist/app/assets/MediaSide-DzvDKntG.css +1 -0
- package/dist/app/assets/MenuSeparator-BS2o3DZi.js +1 -0
- package/dist/app/assets/MenuSeparator-LrO79zGl.css +1 -0
- package/dist/app/assets/MessageText-BBXy3k9_.js +1 -0
- package/dist/app/assets/Mfa-BFMnSCaT.js +1 -0
- package/dist/app/assets/MobileDrawerLayout-b8EsVHmM.js +1 -0
- package/dist/app/assets/MobileFrame-3CIRTooD.js +1 -0
- package/dist/app/assets/MobileFrame-Cv-rn28k.css +1 -0
- package/dist/app/assets/MobileTabsLayout-iucCasKY.js +1 -0
- package/dist/app/assets/MonthView-BSClld3Q.css +1 -0
- package/dist/app/assets/MonthView-D82M_gw6.js +1 -0
- package/dist/app/assets/MoreMenu-BLH-5Gvp.js +1 -0
- package/dist/app/assets/MoreMenu-CkIrG5F9.css +1 -0
- package/dist/app/assets/Notice-adNYURnx.js +1 -0
- package/dist/app/assets/Onboarding-DRlA5bwT.js +1 -0
- package/dist/app/assets/OverlayOutlet-CRs5G14T.js +1 -0
- package/dist/app/assets/PhoneCode-DECg0q7X.js +1 -0
- package/dist/app/assets/PhoneFrame-CJo4PU9H.js +1 -0
- package/dist/app/assets/PhoneSignIn-C17yjqRm.js +1 -0
- package/dist/app/assets/Plans-IP22KPeu.js +1 -0
- package/dist/app/assets/Popover-BJa4rwXq.js +1 -0
- package/dist/app/assets/Popover-BNon6UGI.css +1 -0
- package/dist/app/assets/Portal-DAmplzko.js +1 -0
- package/dist/app/assets/PresenterStatus-BG4uEwkH.js +1 -0
- package/dist/app/assets/PresenterStatus-Dh5bOtYL.css +1 -0
- package/dist/app/assets/PresenterUpNext-BD84Svjl.js +1 -0
- package/dist/app/assets/PresenterUpNext-D-Xx2UBn.css +1 -0
- package/dist/app/assets/ProcessSteps-Bzu0rGe6.js +1 -0
- package/dist/app/assets/ProcessSteps-DvGQTSov.css +1 -0
- package/dist/app/assets/Progress-bNTXPebc.js +1 -0
- package/dist/app/assets/ProgressControl-CeO2MyMB.js +1 -0
- package/dist/app/assets/QueryState-C5kit5U_.js +1 -0
- package/dist/app/assets/Quote-BoZfPzZH.css +1 -0
- package/dist/app/assets/Quote-CnGV45E9.js +1 -0
- package/dist/app/assets/RadioControl-Cuinq5zi.js +1 -0
- package/dist/app/assets/RadioGroup-zYTPVu8Q.js +1 -0
- package/dist/app/assets/RailLayout-CNJbKMQN.js +1 -0
- package/dist/app/assets/RecordAvatar-Dq9Q_ECl.js +1 -0
- package/dist/app/assets/RelatedPanel-Zx46LYFQ.js +1 -0
- package/dist/app/assets/ResetPassword-CD5j3dlW.js +1 -0
- package/dist/app/assets/ReviewPanel-IctKGAYF.js +1 -0
- package/dist/app/assets/ReviewPanel-enBwfHGS.css +1 -0
- package/dist/app/assets/ReviewSession-BK_WyaPk.css +1 -0
- package/dist/app/assets/ReviewSession-BvoB_ZV5.js +13 -0
- package/dist/app/assets/RichText-BCfjyl-x.css +1 -0
- package/dist/app/assets/RichText-D1v-HxaQ.js +13 -0
- package/dist/app/assets/SchemaForm-C290YN2K.css +1 -0
- package/dist/app/assets/SchemaForm-DUAv9zW-.js +2 -0
- package/dist/app/assets/SectionDivider-CCrbcyNE.js +1 -0
- package/dist/app/assets/SectionDivider-ChSFRraf.css +1 -0
- package/dist/app/assets/Segmented-BJe49U8y.js +1 -0
- package/dist/app/assets/Select-B7WptPsd.js +1 -0
- package/dist/app/assets/SelectValue-Nfj3YFHu.css +1 -0
- package/dist/app/assets/SelectValue-dQDYClnM.js +1 -0
- package/dist/app/assets/Settings-C_QQITJ0.js +1 -0
- package/dist/app/assets/SheetContent-Di33iVo2.js +1 -0
- package/dist/app/assets/SidePanelFrame-DQ8ahWBO.js +2 -0
- package/dist/app/assets/Sidebar-DyYV2QHi.js +1 -0
- package/dist/app/assets/Sidebar-iqYbDpJV.css +1 -0
- package/dist/app/assets/SidebarLayout-CizAF8JU.js +1 -0
- package/dist/app/assets/SignIn-mkUy-YFr.js +1 -0
- package/dist/app/assets/SignUp-C1enzfw4.js +1 -0
- package/dist/app/assets/Skeleton-Cd-5byG5.js +1 -0
- package/dist/app/assets/SlashMenu-sLWmQqE1.js +1 -0
- package/dist/app/assets/SlideJumpList-CNMdgNU7.css +1 -0
- package/dist/app/assets/SlideJumpList-D9zOhZ-J.js +1 -0
- package/dist/app/assets/SlidePlaceholder-C8s_f2FB.js +1 -0
- package/dist/app/assets/Slider-D5WUpT4E.css +1 -0
- package/dist/app/assets/Slider-eo7lM48l.js +1 -0
- package/dist/app/assets/SliderControl-BIXEZT9D.js +1 -0
- package/dist/app/assets/SourcePicker-C2GB8KG4.js +2 -0
- package/dist/app/assets/Spinner-DAbE5KuW.js +1 -0
- package/dist/app/assets/Spinner-DFzF63dS.js +1 -0
- package/dist/app/assets/SsoButtons-UyEm6RhU.js +1 -0
- package/dist/app/assets/StaleWorldNotice-BQqYS-Lw.js +1 -0
- package/dist/app/assets/Stat-CLOwLvk7.js +1 -0
- package/dist/app/assets/StatusBar-BGRSuCms.js +1 -0
- package/dist/app/assets/Stepper-CjlrJo0A.js +1 -0
- package/dist/app/assets/Stepper-aBGVFtgT.css +1 -0
- package/dist/app/assets/StructureFamily-D21hf1K1.css +1 -0
- package/dist/app/assets/StructureFamily-Pp8Qr664.js +2 -0
- package/dist/app/assets/Switch-8QZM_9mj.js +1 -0
- package/dist/app/assets/TableCaption-p0xxPZlK.js +1 -0
- package/dist/app/assets/TableEmpty-BR911ScN.js +1 -0
- package/dist/app/assets/TableRow-DN0855j9.js +1 -0
- package/dist/app/assets/TableRow-IBOM0IqQ.css +1 -0
- package/dist/app/assets/TableToggle-Cvp3fpb5.js +1 -0
- package/dist/app/assets/TableView-Dkhs_E-R.js +1 -0
- package/dist/app/assets/TabletFrame-BTJ_jmpF.js +1 -0
- package/dist/app/assets/Tabs-A8-PiUFM.js +1 -0
- package/dist/app/assets/Tabs-B8FXzu_E.css +1 -0
- package/dist/app/assets/Tabs-D7YB4XtT.js +1 -0
- package/dist/app/assets/Tag-GChaMFDw.js +1 -0
- package/dist/app/assets/TagsControl-BdoxUW9o.js +1 -0
- package/dist/app/assets/TeamAvatars-C0e-j-DR.js +1 -0
- package/dist/app/assets/TeamAvatars-DBAggLCb.css +1 -0
- package/dist/app/assets/TextBlockView-BHOo0GRP.css +1 -0
- package/dist/app/assets/TextBlockView-DRlzMSVn.js +1 -0
- package/dist/app/assets/Textarea-B2NFoybO.js +1 -0
- package/dist/app/assets/ThemeStudioSection-eHl2sA8_.js +2 -0
- package/dist/app/assets/ThreeColumnCards-BPLqtN6W.js +1 -0
- package/dist/app/assets/ThreeColumnCards-ChTpCcz8.css +1 -0
- package/dist/app/assets/TimeControl-C-BT3jjN.js +1 -0
- package/dist/app/assets/TimeField-DWg-QjNk.js +1 -0
- package/dist/app/assets/TimeGridView-BLvWNnEy.css +1 -0
- package/dist/app/assets/TimeGridView-C78bCMzf.js +1 -0
- package/dist/app/assets/Timeline-2GhKlfmd.css +1 -0
- package/dist/app/assets/Timeline-66X3nU-w.js +1 -0
- package/dist/app/assets/Title-BoCID0Xq.js +1 -0
- package/dist/app/assets/Title-DZQyv1Uw.css +1 -0
- package/dist/app/assets/TitleHero-BqOmWwID.js +1 -0
- package/dist/app/assets/TitleHero-DMDxz18F.css +1 -0
- package/dist/app/assets/Toggle-DXp7a4gR.css +1 -0
- package/dist/app/assets/Toggle-onm4fbkV.js +1 -0
- package/dist/app/assets/Tooltip-C7L6teXl.css +1 -0
- package/dist/app/assets/Tooltip-C_r8hAHs.js +1 -0
- package/dist/app/assets/TopNavLayout-Ces0LOyx.js +1 -0
- package/dist/app/assets/Trigger-8w9c0DhN.js +1 -0
- package/dist/app/assets/Trigger-Dm3W-y9X.js +2 -0
- package/dist/app/assets/TwoColumnSplit-DYBoT_R_.js +1 -0
- package/dist/app/assets/TwoColumnSplit-Y6JkObVm.css +1 -0
- package/dist/app/assets/VerifyEmail-DuOya8Qx.js +1 -0
- package/dist/app/assets/VideoCaptions-C-ebsQ5-.js +10 -0
- package/dist/app/assets/VideoCaptions-DOnrXhl_.css +1 -0
- package/dist/app/assets/Viewport-DWfYShxg.css +1 -0
- package/dist/app/assets/Viewport-YaG8BTV_.js +1 -0
- package/dist/app/assets/WidgetHostFrame-DFcMnyyE.js +4 -0
- package/dist/app/assets/WizardHostLayout-B8fzs6Uk.js +1 -0
- package/dist/app/assets/adapter-BDhPWFRd.js +1 -0
- package/dist/app/assets/aggregate-DqdDm8iS.js +1 -0
- package/dist/app/assets/amber-BSACaYsc.js +1 -0
- package/dist/app/assets/analytics-BPxBOuv8.js +2 -0
- package/dist/app/assets/analytics-WBIZqtP8.js +3 -0
- package/dist/app/assets/anchor-DWe2XjD2.js +1 -0
- package/dist/app/assets/anchors-DxCA6Vjx.js +1 -0
- package/dist/app/assets/animate-BeveF4EZ.js +1 -0
- package/dist/app/assets/announcer-C9Q-PqE3.js +1 -0
- package/dist/app/assets/apex-rose-7rvPFrU-.js +1 -0
- package/dist/app/assets/api-stnFBkFG.js +1 -0
- package/dist/app/assets/app-B2_KfZ06.js +2 -0
- package/dist/app/assets/app-BB5CNOCm.css +1 -0
- package/dist/app/assets/app-Ba1M_fVZ.css +1 -0
- package/dist/app/assets/app-kiFTTAun.js +2 -0
- package/dist/app/assets/app-model-xaX4i0zU.js +1 -0
- package/dist/app/assets/apply-B8URYyvp.js +1 -0
- package/dist/app/assets/apply-CT-2ixg7.js +1 -0
- package/dist/app/assets/apply-CvJWBke_.js +1 -0
- package/dist/app/assets/aqua-foam-DNjmnsob.js +1 -0
- package/dist/app/assets/arc-D3OP3Fwv.js +1 -0
- package/dist/app/assets/arctic-console-A6v_iB0T.js +1 -0
- package/dist/app/assets/arrow-down-DlqQl5aL.js +1 -0
- package/dist/app/assets/arrow-left-CKydKZrI.js +1 -0
- package/dist/app/assets/arrow-right-DK7vE3kH.js +1 -0
- package/dist/app/assets/artifact-shell-BMXo6w_E.js +1 -0
- package/dist/app/assets/ash-plain-DDC0aM7H.js +1 -0
- package/dist/app/assets/atlas-indigo-D6lTgj_p.js +1 -0
- package/dist/app/assets/attributes-ZVEMdrPN.js +1 -0
- package/dist/app/assets/auth-DbsvQ_nN.js +1 -0
- package/dist/app/assets/auth-settings-CL6uPD51.css +1 -0
- package/dist/app/assets/avatar-DG5usQub.js +1 -0
- package/dist/app/assets/avatars-CA9KfGtD.js +1 -0
- package/dist/app/assets/azure-grid-DEvKhXkM.js +1 -0
- package/dist/app/assets/backdrop-Be1Do1pV.js +1 -0
- package/dist/app/assets/bark-trail-FHy4_3hi.js +1 -0
- package/dist/app/assets/bash-KZnOBl2m.js +2 -0
- package/dist/app/assets/beacon-red-DCnMPSD6.js +1 -0
- package/dist/app/assets/bindings.svelte-DcC1eEn4.js +1 -0
- package/dist/app/assets/blaze-amber-DkpJEBMV.js +1 -0
- package/dist/app/assets/blocks-DTgQq_iR.js +1 -0
- package/dist/app/assets/blush-petal-C1awwnKU.js +1 -0
- package/dist/app/assets/board-0q6Fdnjz.js +5 -0
- package/dist/app/assets/board-Ct1Niyhg.css +1 -0
- package/dist/app/assets/boot-B1w609xS.js +2 -0
- package/dist/app/assets/boot-kind-luWYepUM.js +2 -0
- package/dist/app/assets/brand-CTlkhLj0.js +1 -0
- package/dist/app/assets/brick-lane-DXB3yYgT.js +1 -0
- package/dist/app/assets/build-zoHPE5DM.js +1 -0
- package/dist/app/assets/builders-BPwZ8kKF.js +1 -0
- package/dist/app/assets/builtin-D-08NJJ_.js +1 -0
- package/dist/app/assets/burgundy-page-DkYjJU-j.js +1 -0
- package/dist/app/assets/butter-cream-ZmzoxiJI.js +1 -0
- package/dist/app/assets/byte-orange-D4tbgUmz.js +1 -0
- package/dist/app/assets/calendar-CC-XH4BQ.css +1 -0
- package/dist/app/assets/calendar-D3xaSsit.js +2 -0
- package/dist/app/assets/calendar-DdWo8l-F.js +1 -0
- package/dist/app/assets/calendar-DeXlGkQg.css +1 -0
- package/dist/app/assets/calendar-DpJ7wmld.js +1 -0
- package/dist/app/assets/canvas-Bg4JmNxQ.js +1 -0
- package/dist/app/assets/canvas-C15Z6wU9.js +1 -0
- package/dist/app/assets/canvas-Cc9cbxpy.js +1 -0
- package/dist/app/assets/canvas-CdpPrdGz.css +1 -0
- package/dist/app/assets/cartesian-CoBPstQd.js +2 -0
- package/dist/app/assets/cartesian-CzV-Cyc1.css +1 -0
- package/dist/app/assets/cartesian-D2AhdEIV.js +1 -0
- package/dist/app/assets/cartesian-IyDqy2kK.css +1 -0
- package/dist/app/assets/catalog-CwrB5cVQ.js +3 -0
- package/dist/app/assets/cedar-cabin-CYOby6Sg.js +1 -0
- package/dist/app/assets/chalk-line-bMWOWnTJ.js +1 -0
- package/dist/app/assets/charcoal-type-CesmyxgM.js +1 -0
- package/dist/app/assets/chart-BbbjO4C1.js +1 -0
- package/dist/app/assets/charts-UaISBi-6.js +1 -0
- package/dist/app/assets/charts-mzplRo0A.js +1 -0
- package/dist/app/assets/child-BNsqGBSq.js +1 -0
- package/dist/app/assets/chroma-teal-iJ_CVhaZ.js +1 -0
- package/dist/app/assets/cinnamon-bar-D8fdLIq9.js +1 -0
- package/dist/app/assets/cipher-slate-DHAzG4rl.js +1 -0
- package/dist/app/assets/clay-river-CnAguPf1.js +1 -0
- package/dist/app/assets/clay-workshop-DXkoigzn.js +1 -0
- package/dist/app/assets/client-Lkh5rkjG.js +1 -0
- package/dist/app/assets/cloud-ledger-BlJnC3I0.js +1 -0
- package/dist/app/assets/cn-BxvfSbXx.js +1 -0
- package/dist/app/assets/cobalt-lab-DE2y1JGN.js +1 -0
- package/dist/app/assets/code-ABp_0ixK.js +1 -0
- package/dist/app/assets/code-BU7PFz64.js +1 -0
- package/dist/app/assets/code-family-CQgEu8fF.js +2 -0
- package/dist/app/assets/colors-Cx4WWjfl.js +1 -0
- package/dist/app/assets/columns-np8Xxa5b.js +1 -0
- package/dist/app/assets/compact-5pMdWyMw.css +1 -0
- package/dist/app/assets/compact-7mkiGE8N.js +1 -0
- package/dist/app/assets/compact-D4ch775J.js +1 -0
- package/dist/app/assets/compile-core-CfcBAAWu.js +1 -0
- package/dist/app/assets/console-violet-CK6xd-Mw.js +1 -0
- package/dist/app/assets/content-BzmfjOu-.css +2 -0
- package/dist/app/assets/context-8yltX8ZM.js +1 -0
- package/dist/app/assets/context-BGEY9AUE.js +1 -0
- package/dist/app/assets/context-BihgecFf.js +1 -0
- package/dist/app/assets/context-BozNHYDn.js +1 -0
- package/dist/app/assets/context-Cvg_Jb8K.js +1 -0
- package/dist/app/assets/context-Cww_I6dB.js +1 -0
- package/dist/app/assets/context-DTcuz85x.js +1 -0
- package/dist/app/assets/contract-DDgQdfcT.js +1 -0
- package/dist/app/assets/contrast-s6qwb-S-.js +1 -0
- package/dist/app/assets/control-props-OVgLyhvo.js +1 -0
- package/dist/app/assets/controls-BqZMVgrJ.js +1 -0
- package/dist/app/assets/conversational-C0P36SMt.js +2 -0
- package/dist/app/assets/copper-byline-DN833JFD.js +1 -0
- package/dist/app/assets/copper-kiln-DF7EcgeK.js +1 -0
- package/dist/app/assets/copy-BRPalUx6.js +1 -0
- package/dist/app/assets/copy-text-XLkoKZ1X.js +1 -0
- package/dist/app/assets/coral-market-DR9yOAmR.js +1 -0
- package/dist/app/assets/core-DNACw26e.js +5 -0
- package/dist/app/assets/core-DisCXK86.js +4 -0
- package/dist/app/assets/core-X3vERPZ1.js +1 -0
- package/dist/app/assets/crimson-spread-CQAjt3SH.js +1 -0
- package/dist/app/assets/crt-cyan-7TsQf6_Q.js +1 -0
- package/dist/app/assets/css-0ZUm4Gxu.js +1 -0
- package/dist/app/assets/csv-DSEjLlp3.js +4 -0
- package/dist/app/assets/csv-guard-B4eq8ytq.js +1 -0
- package/dist/app/assets/cx-BNZ52w-j.js +1 -0
- package/dist/app/assets/cyan-dock-BVeKfgp6.js +1 -0
- package/dist/app/assets/dashboard-vjiRJ-2a.js +2 -0
- package/dist/app/assets/data-BT9r5CfS.js +1 -0
- package/dist/app/assets/data-DYs_X2a6.js +2 -0
- package/dist/app/assets/date-picker-DKRcvBau.js +1 -0
- package/dist/app/assets/date-range-D2dj6dGY.js +1 -0
- package/dist/app/assets/dates-yNpz1s0F.js +1 -0
- package/dist/app/assets/debug-rose-BS0PYjb3.js +1 -0
- package/dist/app/assets/deck-B1BRfPKS.js +1 -0
- package/dist/app/assets/deck-BzEIlGEY.js +1 -0
- package/dist/app/assets/deck-CPwPSgE3.js +1 -0
- package/dist/app/assets/deck-CzcaAjST.css +2 -0
- package/dist/app/assets/deck-interactive-DvQy5sye.js +1 -0
- package/dist/app/assets/definitions-BWyE3Fv_.js +1 -0
- package/dist/app/assets/demo.blueprint-C8vkzYKr.js +1 -0
- package/dist/app/assets/denim-suite-vNiDjU_o.js +1 -0
- package/dist/app/assets/depth-B-HdV9yB.js +1 -0
- package/dist/app/assets/depth-B8LlXWcm.css +1 -0
- package/dist/app/assets/design-CU39NsEw.js +2 -0
- package/dist/app/assets/design-CjV7E-Q-.js +1 -0
- package/dist/app/assets/design-Di0kxX1v.js +1 -0
- package/dist/app/assets/design-defaults-DAxTKvKt.js +1 -0
- package/dist/app/assets/design-system-s_7Gm55A.js +2 -0
- package/dist/app/assets/design-systems-DzkHB4mN.js +2 -0
- package/dist/app/assets/devices-B2GmUWdq.js +1 -0
- package/dist/app/assets/dexie-DCNEq46v.js +3 -0
- package/dist/app/assets/diagram-B04gM2Zo.js +2 -0
- package/dist/app/assets/diagram-CqFRhJCk.js +1 -0
- package/dist/app/assets/dir-locale-Bp4_WmZL.js +1 -0
- package/dist/app/assets/disclose-version-xihTtKlq.js +1 -0
- package/dist/app/assets/dist-4Z-F-C1l.js +16 -0
- package/dist/app/assets/dist-yVFZAMG4.js +16 -0
- package/dist/app/assets/doc-3blIf2YS.js +1 -0
- package/dist/app/assets/doc-BthZSDuE.js +1 -0
- package/dist/app/assets/doc-CSNpzE1l.css +1 -0
- package/dist/app/assets/doc-D7QlyhMQ.js +2 -0
- package/dist/app/assets/doc-edits-BwF6JDix.js +1 -0
- package/dist/app/assets/doc-export-DPSAXN9Y.js +2 -0
- package/dist/app/assets/docx-DI5zUf1s.js +3 -0
- package/dist/app/assets/dove-note-lvW-sJWI.js +1 -0
- package/dist/app/assets/durations-DOq5QZxl.js +1 -0
- package/dist/app/assets/electric-lime-D3hc7xI6.js +1 -0
- package/dist/app/assets/ellipsis-D2B-U6JZ.js +1 -0
- package/dist/app/assets/embed-7IfIjInk.js +1 -0
- package/dist/app/assets/embed-BjxhIu1D.js +2 -0
- package/dist/app/assets/embed-CX7-gJPL.js +1 -0
- package/dist/app/assets/embed-DKltvQQa.js +1 -0
- package/dist/app/assets/ember-lounge-CLD3vGmo.js +1 -0
- package/dist/app/assets/emerald-DTYTxEu6.js +1 -0
- package/dist/app/assets/emerald-essay-DHL5z3v_.js +1 -0
- package/dist/app/assets/empty-BXesJ4-L.css +1 -0
- package/dist/app/assets/engine-DWsPKszG.js +1 -0
- package/dist/app/assets/env-guq4m6_s.js +1 -0
- package/dist/app/assets/envelope-D-omwZF5.js +2 -0
- package/dist/app/assets/environment-qEbacsJ-.js +1 -0
- package/dist/app/assets/esm-qyRVQ_H0.js +1 -0
- package/dist/app/assets/evaluate-Ctzw_e6W.js +1 -0
- package/dist/app/assets/events-CgGVkmNN.js +1 -0
- package/dist/app/assets/extent-Dsibp8xv.js +1 -0
- package/dist/app/assets/extras--tBwws6r.js +2 -0
- package/dist/app/assets/extras-D-yEXOuq.css +1 -0
- package/dist/app/assets/family-BHrF5iui.js +2 -0
- package/dist/app/assets/family-Bw7g3nle.js +2 -0
- package/dist/app/assets/family-Cx1ea07k.js +2 -0
- package/dist/app/assets/family-DjA1hVK3.js +2 -0
- package/dist/app/assets/family-Djp18LqC.js +2 -0
- package/dist/app/assets/family-zSZ3st7P.js +2 -0
- package/dist/app/assets/fern-glade-BoQQBVwK.js +1 -0
- package/dist/app/assets/file-text-Bhw0ZLUp.js +1 -0
- package/dist/app/assets/filename-ivwFod08.js +1 -0
- package/dist/app/assets/filter-BFcSp9fb.js +1 -0
- package/dist/app/assets/filters-BmlrNSK4.js +1 -0
- package/dist/app/assets/filters-q99MILjr.css +1 -0
- package/dist/app/assets/first-run-BqQTFz0h.js +1 -0
- package/dist/app/assets/fit-BblfZ2JV.js +1 -0
- package/dist/app/assets/fit-width-4RmWpKte.js +1 -0
- package/dist/app/assets/flare-yellow-BKfO8CAR.js +1 -0
- package/dist/app/assets/flow-CjzYxj3T.css +1 -0
- package/dist/app/assets/flow-Dse75s3k.js +1 -0
- package/dist/app/assets/fog-studio-CnpmaWuv.js +1 -0
- package/dist/app/assets/fonts-CyzGCo-s.js +1 -0
- package/dist/app/assets/fonts-D1WlLkio.js +1 -0
- package/dist/app/assets/forest-floor-Dnxqb6g1.js +1 -0
- package/dist/app/assets/forest-op-ed-DqCOXDYz.js +1 -0
- package/dist/app/assets/forge-lime-OFrUbI9j.js +1 -0
- package/dist/app/assets/form-bridge-BFV-h8qv.js +1 -0
- package/dist/app/assets/form-services-erliHCBc.js +2 -0
- package/dist/app/assets/format-CqE6be1W.js +1 -0
- package/dist/app/assets/format-Dx3CqdSJ.js +1 -0
- package/dist/app/assets/free-prefetch-CQtOUoO_.js +1 -0
- package/dist/app/assets/from-texuli-F7aPl70I.js +1 -0
- package/dist/app/assets/frost-panel-DpMOEQuj.js +1 -0
- package/dist/app/assets/generate-world-core-f4yY0k-I.js +2 -0
- package/dist/app/assets/generate.worker-Co6WrZj8.js +1 -0
- package/dist/app/assets/generator-B1rj3uJL.js +1 -0
- package/dist/app/assets/generator-BvCWWAUx.js +1 -0
- package/dist/app/assets/generator-CJFX3jms.js +114 -0
- package/dist/app/assets/generator-version-CdlsXqvR.js +1 -0
- package/dist/app/assets/geo-BUoHwLMI.css +1 -0
- package/dist/app/assets/geo-Badu06LW.js +1 -0
- package/dist/app/assets/gesture-RUgWcPhG.js +1 -0
- package/dist/app/assets/glacier-bay-ItPQs3g9.js +1 -0
- package/dist/app/assets/gold-serif-9JJwgGmi.js +1 -0
- package/dist/app/assets/graphite-desk-Dav8DSip.js +1 -0
- package/dist/app/assets/grid-BO23S3Mu.css +1 -0
- package/dist/app/assets/grid-Cdz9gsoH.js +1 -0
- package/dist/app/assets/grid-editing-DFAO-r3z.css +1 -0
- package/dist/app/assets/handlers-ByGe01Fz.js +1 -0
- package/dist/app/assets/handlers-CkNHDF5y.js +1 -0
- package/dist/app/assets/hash-DwRSCZN9.js +1 -0
- package/dist/app/assets/hash-router.svelte-D7ILwv8b.js +1 -0
- package/dist/app/assets/hc-amber-black-B3HHCJXu.js +1 -0
- package/dist/app/assets/hc-black-yellow-DQVjFciE.js +1 -0
- package/dist/app/assets/hc-blue-white-CXE4sdPO.js +1 -0
- package/dist/app/assets/hc-cyan-black-Bvpic4Gm.js +1 -0
- package/dist/app/assets/hc-green-black-CaylabS3.js +1 -0
- package/dist/app/assets/hc-ink-paper-DaIkq3N9.js +1 -0
- package/dist/app/assets/hc-lime-black-CEEaqO8C.js +1 -0
- package/dist/app/assets/hc-navy-yellow-c3FWHdSa.js +1 -0
- package/dist/app/assets/hc-orange-black-CjFhZ4ah.js +1 -0
- package/dist/app/assets/hc-paper-ink-DfJu-vfc.js +1 -0
- package/dist/app/assets/hc-rose-black-CS2IUqTa.js +1 -0
- package/dist/app/assets/hc-teal-black-kEmvWQ-B.js +1 -0
- package/dist/app/assets/hc-violet-black-BxxFmQYv.js +1 -0
- package/dist/app/assets/hc-white-blue-D8eiAdVW.js +1 -0
- package/dist/app/assets/heap-pink-C-tTNlUA.js +1 -0
- package/dist/app/assets/helpers-vedUmioA.js +1 -0
- package/dist/app/assets/histogram-Bxs2w5Qg.js +1 -0
- package/dist/app/assets/histogram-CaF8L-uN.css +1 -0
- package/dist/app/assets/honey-desk-Biy8CO_z.js +1 -0
- package/dist/app/assets/horizon-cyan-CAPaDPAF.js +1 -0
- package/dist/app/assets/host-BCsVoLLF.js +1 -0
- package/dist/app/assets/host-BGSJ7oX2.js +1 -0
- package/dist/app/assets/host-Bo5nUYrD.js +1 -0
- package/dist/app/assets/host-VGPZpGL6.css +1 -0
- package/dist/app/assets/hot-fuchsia-9nsrLLfH.js +1 -0
- package/dist/app/assets/html-CMNXYbB0.js +1 -0
- package/dist/app/assets/http-DMBu8uO0.js +1 -0
- package/dist/app/assets/i18n-C1FxoBbJ.js +1 -0
- package/dist/app/assets/ice-signal-BYNVRzxA.js +1 -0
- package/dist/app/assets/identity-BALMSfWg.js +1 -0
- package/dist/app/assets/ids-BFXF9Z_4.js +1 -0
- package/dist/app/assets/import-D4irzKhk.js +1 -0
- package/dist/app/assets/inbox-DHWQ6nEV.js +1 -0
- package/dist/app/assets/inbox-DZCtuxQ1.js +1 -0
- package/dist/app/assets/index-BmZaQzLA.js +2 -0
- package/dist/app/assets/index-BzeBadoN.css +2 -0
- package/dist/app/assets/index-client-BJ7uZa7c.js +2 -0
- package/dist/app/assets/index-client-ncr-aJHg.js +1 -0
- package/dist/app/assets/indigo-harbor-CukFAP4N.js +1 -0
- package/dist/app/assets/indigo-review-CrjkEt5d.js +1 -0
- package/dist/app/assets/inert-CX0JFWuY.js +1 -0
- package/dist/app/assets/ink-folio-5IYpY7BF.js +1 -0
- package/dist/app/assets/interaction-D9RsjR3d.css +1 -0
- package/dist/app/assets/interactive-B7CrCosy.css +1 -0
- package/dist/app/assets/interactive-B8_XXgu9.js +7 -0
- package/dist/app/assets/interactive-DzJIKNzh.js +1 -0
- package/dist/app/assets/invitations-u_Bd2_8r.js +1 -0
- package/dist/app/assets/iron-wire-BHsuMYq8.js +1 -0
- package/dist/app/assets/ivory-press-Dj-2SPbS.js +1 -0
- package/dist/app/assets/javascript-CCI0EWvj.js +1 -0
- package/dist/app/assets/json-bL97VrYM.js +1 -0
- package/dist/app/assets/kernel-teal-BOkCWD-A.js +1 -0
- package/dist/app/assets/keys-P79j73dU.js +1 -0
- package/dist/app/assets/kind-boot-BlKFHtYr.js +2 -0
- package/dist/app/assets/kinds-DRBJyTc7.js +1 -0
- package/dist/app/assets/laser-violet-CVybDQx3.js +1 -0
- package/dist/app/assets/lavender-room-nrpj1UbY.js +1 -0
- package/dist/app/assets/layout-D9RK8lq3.js +1 -0
- package/dist/app/assets/lazy-B6nhhbj_.js +1 -0
- package/dist/app/assets/lazy-list-motion-BABubg52.js +2 -0
- package/dist/app/assets/leaf-canopy-DyJbL1z6.js +1 -0
- package/dist/app/assets/ledger-teal-Ds1nPGV2.js +1 -0
- package/dist/app/assets/legacy-Bj_uQCIx.js +1 -0
- package/dist/app/assets/lemon-air-CMViSloH.js +1 -0
- package/dist/app/assets/library-X49Tko4M.js +1 -0
- package/dist/app/assets/library-expand-BpgXbQrz.js +2 -0
- package/dist/app/assets/lilac-mist-B-pwve9X.js +1 -0
- package/dist/app/assets/limits-BgH0UjBK.js +1 -0
- package/dist/app/assets/line-spec-CohEnjEp.js +1 -0
- package/dist/app/assets/links-DmmwIr6L.js +1 -0
- package/dist/app/assets/live-reload-CO9BzYNv.js +1 -0
- package/dist/app/assets/loaders-Bcj89mSn.js +1 -0
- package/dist/app/assets/loam-field-C1q4MmF_.js +1 -0
- package/dist/app/assets/local-B65mbeuY.js +1 -0
- package/dist/app/assets/lock-DqGqAl7w.js +1 -0
- package/dist/app/assets/mail-BOe0duGE.js +1 -0
- package/dist/app/assets/manifest-0Q1tYlhS.js +1 -0
- package/dist/app/assets/map-BBq86YoI.js +2 -0
- package/dist/app/assets/map-BvsdIhqc.js +1 -0
- package/dist/app/assets/map-CT94tmB0.js +2 -0
- package/dist/app/assets/map-CsZfhGqK.css +1 -0
- package/dist/app/assets/map-DqX3aYqC.js +1 -0
- package/dist/app/assets/marine-ops-BahDPKWB.js +1 -0
- package/dist/app/assets/markdown-D4NHC39u.js +37 -0
- package/dist/app/assets/markdown-DPZV6n9H.js +9 -0
- package/dist/app/assets/markup-DPhOtZg7.js +1 -0
- package/dist/app/assets/maroon-hall-wz6mmW1X.js +1 -0
- package/dist/app/assets/matrix-DFjJIxow.css +1 -0
- package/dist/app/assets/matrix-DGsEk8w3.js +3 -0
- package/dist/app/assets/matrix-green-C4R1I12F.js +1 -0
- package/dist/app/assets/media-BUKoXNHc.js +1 -0
- package/dist/app/assets/media-CTs3Ucym.js +1 -0
- package/dist/app/assets/media-CzHCpYar.js +1 -0
- package/dist/app/assets/media-DYb1exX4.js +1 -0
- package/dist/app/assets/media-family-D1T4Oizj.js +1 -0
- package/dist/app/assets/menus-BvsN38bq.js +1 -0
- package/dist/app/assets/message-square-n_qADYKq.js +1 -0
- package/dist/app/assets/messages-3lN2Kn4z.js +1 -0
- package/dist/app/assets/messages-B7u5Jh8M.js +1 -0
- package/dist/app/assets/messages-BQTlK_mM.js +1 -0
- package/dist/app/assets/messages-BdrxZBiS.js +1 -0
- package/dist/app/assets/metadata-BpPlGhv5.js +1 -0
- package/dist/app/assets/mfa-Ch_BMU5H.js +1 -0
- package/dist/app/assets/migrate-MC61YhKH.js +1 -0
- package/dist/app/assets/migrate-chunk-wtWFyG75.js +1 -0
- package/dist/app/assets/migrations-1f7gzI99.js +1 -0
- package/dist/app/assets/min-max-D9wTXnDJ.js +1 -0
- package/dist/app/assets/mint-breeze-sKiqpNPB.js +1 -0
- package/dist/app/assets/mist-panel-Up7IvgtE.js +1 -0
- package/dist/app/assets/modal-features-DIO0C55l.js +1 -0
- package/dist/app/assets/model-Be4ObL07.js +1 -0
- package/dist/app/assets/model-BmpSCB4_.js +1 -0
- package/dist/app/assets/model-BwaEiJpp.js +1 -0
- package/dist/app/assets/model-D-DRw_p6.css +1 -0
- package/dist/app/assets/model-D1cQTAPI.js +1 -0
- package/dist/app/assets/model-DzyBMwio.js +1 -0
- package/dist/app/assets/model-muSt3KQl.css +1 -0
- package/dist/app/assets/models-CEEgF0ul.js +1 -0
- package/dist/app/assets/modifiers-dKloufht.js +1 -0
- package/dist/app/assets/money-BNXN8K1Z.js +1 -0
- package/dist/app/assets/monochrome-BkrxgxEy.js +1 -0
- package/dist/app/assets/moss-path-DGziirQ2.js +1 -0
- package/dist/app/assets/motion-C03qaSuL.js +1 -0
- package/dist/app/assets/motion-DTTALmY8.js +1 -0
- package/dist/app/assets/motion-L4GdCnBp.js +1 -0
- package/dist/app/assets/motion-capture-DdoMzbzW.js +2 -0
- package/dist/app/assets/motion-hold-Ck8JB-jY.js +1 -0
- package/dist/app/assets/mount-8dOQyqXG.js +2 -0
- package/dist/app/assets/names-_PDy7Bq8.js +1 -0
- package/dist/app/assets/nav-xyVo3Dhy.js +1 -0
- package/dist/app/assets/navigation-CKFsulut.js +1 -0
- package/dist/app/assets/navy-bridge-BRtgRfvI.js +1 -0
- package/dist/app/assets/navy-column-doHezJ_z.js +1 -0
- package/dist/app/assets/neon-magenta-D4oUS0l1.js +1 -0
- package/dist/app/assets/nested-main-jYQPb9H2.js +1 -0
- package/dist/app/assets/nexus-pink-9h6-k-7P.js +1 -0
- package/dist/app/assets/no-flash-Dj4XzHOU.js +1 -0
- package/dist/app/assets/northstar-blue-DzqF_y-a.js +1 -0
- package/dist/app/assets/notifications-8JaiuubQ.js +1 -0
- package/dist/app/assets/oauth-CmTD9LUy.js +1 -0
- package/dist/app/assets/ocean-De6WGsd9.js +1 -0
- package/dist/app/assets/ochre-field-BqEyoLbX.js +1 -0
- package/dist/app/assets/oklch-DhPyiYB2.js +1 -0
- package/dist/app/assets/olive-grove-Cp0VFQ2S.js +1 -0
- package/dist/app/assets/orbit-orange-Cc95GpUx.js +1 -0
- package/dist/app/assets/orchid-note-D1I5IuoK.js +1 -0
- package/dist/app/assets/org-access-D_6JvvNN.js +1 -0
- package/dist/app/assets/pack-CBHejNSf.css +1 -0
- package/dist/app/assets/pack-DzF58nZc.js +1 -0
- package/dist/app/assets/page-AjDft1OD.js +1 -0
- package/dist/app/assets/page-C2uyTZnk.css +2 -0
- package/dist/app/assets/page-DUH2ASc0.css +1 -0
- package/dist/app/assets/page-DkK906Sn.js +3 -0
- package/dist/app/assets/page-I-0RZem6.js +1 -0
- package/dist/app/assets/pages-CnVvai3k.js +1 -0
- package/dist/app/assets/paint-BdZUBGOz.js +2 -0
- package/dist/app/assets/palette-BKs1Lqh5.js +1 -0
- package/dist/app/assets/palette-D3qxDLiu.js +1 -0
- package/dist/app/assets/panel-state.svelte-CO6Zoy9K.js +1 -0
- package/dist/app/assets/parse-B7SUs8-I.js +1 -0
- package/dist/app/assets/parse-BD8wgjWR.js +1 -0
- package/dist/app/assets/parse-family-DwIdkDBQ.js +1 -0
- package/dist/app/assets/parse-mWm0ww2Y.js +1 -0
- package/dist/app/assets/part-whole-ANkXTHe7.css +1 -0
- package/dist/app/assets/part-whole-B2gsi6CR.css +1 -0
- package/dist/app/assets/part-whole-JgLPIqtJ.js +1 -0
- package/dist/app/assets/part-whole-lCSLwC5U.js +1 -0
- package/dist/app/assets/pdf-DTD4ZFZG.js +11 -0
- package/dist/app/assets/peach-foam-nsXLznbT.js +1 -0
- package/dist/app/assets/peach-studio-C5wX85NC.js +1 -0
- package/dist/app/assets/pewter-grid-wI4QcPMd.js +1 -0
- package/dist/app/assets/phone-Kw6S6yud.js +1 -0
- package/dist/app/assets/phosphor-amber-DDel8BqJ.js +1 -0
- package/dist/app/assets/pick-BqbZUEL6.js +1 -0
- package/dist/app/assets/pine-ridge-uilBHo5-.js +1 -0
- package/dist/app/assets/pipe-slate-D-H7swYU.js +1 -0
- package/dist/app/assets/pistachio-tile-CjiejIrq.js +1 -0
- package/dist/app/assets/plasma-pink-CBLl0t7i.js +1 -0
- package/dist/app/assets/plum-chapter-BmA1UD4I.js +1 -0
- package/dist/app/assets/polar-dash-B1qzbMkX.js +1 -0
- package/dist/app/assets/policy-DzdNmXdr.js +1 -0
- package/dist/app/assets/popup-B-0xjgYx.js +1 -0
- package/dist/app/assets/popup-CHgoACQq.css +1 -0
- package/dist/app/assets/port-meridian-DlsIsyfe.js +1 -0
- package/dist/app/assets/portal-scope-DVg3DZrI.js +1 -0
- package/dist/app/assets/position-floating-DVYNUqB9.js +1 -0
- package/dist/app/assets/powder-blue-BaOLGO-R.js +1 -0
- package/dist/app/assets/pptx-v2-CfMQMOWr.js +1 -0
- package/dist/app/assets/preload-helper-CRzLMJPS.js +1 -0
- package/dist/app/assets/presence-zf-tyTu4.js +1 -0
- package/dist/app/assets/presentation-BcQDlabb.js +1 -0
- package/dist/app/assets/presenter-Df4KfiDD.js +1 -0
- package/dist/app/assets/presets-yYeapXmM.js +1 -0
- package/dist/app/assets/prime-amber-6-qXBjQo.js +1 -0
- package/dist/app/assets/primitives-C9dJjR2F.js +1 -0
- package/dist/app/assets/print-paint-BQYY7n_n.js +1 -0
- package/dist/app/assets/prompt-blue-kUotakIj.js +1 -0
- package/dist/app/assets/prototype-BEkp3Df8.js +1 -0
- package/dist/app/assets/pulse-orange-CvpfS6f_.js +1 -0
- package/dist/app/assets/pulse-violet-BqGVSj7g.js +1 -0
- package/dist/app/assets/python-CllnL83l.js +1 -0
- package/dist/app/assets/quartz-mute-mGF9j7GA.js +1 -0
- package/dist/app/assets/radio-group-CHua9Z13.js +1 -0
- package/dist/app/assets/random--LplQdQC.js +1 -0
- package/dist/app/assets/range-Dhwl92-a.js +1 -0
- package/dist/app/assets/records-uXFbdI0w.js +1 -0
- package/dist/app/assets/ref-oE2opvHT.js +1 -0
- package/dist/app/assets/refresh-cw-CyWpDKzd.js +1 -0
- package/dist/app/assets/registry-B7w9AKsi.js +2 -0
- package/dist/app/assets/registry-BZiqneBm.js +2 -0
- package/dist/app/assets/registry-exXUF-5L.js +2 -0
- package/dist/app/assets/registry-v2IddHqe.js +2 -0
- package/dist/app/assets/renderer-deck-CjT2ONB5.js +2 -0
- package/dist/app/assets/renderer-doc-CL21_nmz.js +2 -0
- package/dist/app/assets/renderer-page-Dub8qzwD.js +2 -0
- package/dist/app/assets/renderers-CM6H1JjM.js +1 -0
- package/dist/app/assets/resolve-BGfaV2Mp.js +1 -0
- package/dist/app/assets/resolve-CED007Y_.js +1 -0
- package/dist/app/assets/resolve-DPWba9Mv.js +1 -0
- package/dist/app/assets/review-BYpI0k9p.js +1 -0
- package/dist/app/assets/rocket-red-Bn6gOzMm.js +1 -0
- package/dist/app/assets/rolldown-runtime-XKyaHtl9.js +1 -0
- package/dist/app/assets/root-red-CCCxlc4l.js +1 -0
- package/dist/app/assets/rose-D3WOkFis.js +1 -0
- package/dist/app/assets/rosewater-desk-DFvWOCXU.js +1 -0
- package/dist/app/assets/round-ySvX3_gz.js +1 -0
- package/dist/app/assets/roving-CztmB2zQ.js +1 -0
- package/dist/app/assets/ruled-BaNeLwP3.css +1 -0
- package/dist/app/assets/run-kind-BDhjcKJl.js +2 -0
- package/dist/app/assets/runtime-A0jTJCh8.js +1 -0
- package/dist/app/assets/runtime-EwbZURIF.js +1 -0
- package/dist/app/assets/rust-archive-CDPNIudx.js +1 -0
- package/dist/app/assets/saas-DhbGb-OK.js +2 -0
- package/dist/app/assets/safe-href-Ca6kZWby.js +1 -0
- package/dist/app/assets/safe-image-src-DQWk9Hmw.js +1 -0
- package/dist/app/assets/safe-image-srcset-CV9HT60O.js +1 -0
- package/dist/app/assets/safe-media-src-R00i3PMn.js +1 -0
- package/dist/app/assets/safety-D6ZEk3Nu.js +2 -0
- package/dist/app/assets/saffron-stall-30TT6Xsy.js +1 -0
- package/dist/app/assets/sage-veil-BvumFO-4.js +1 -0
- package/dist/app/assets/sandstone-wall-DRdLPNb8.js +1 -0
- package/dist/app/assets/scenario-DfCy7uDa.js +1 -0
- package/dist/app/assets/schema-B4oYXjN0.js +1 -0
- package/dist/app/assets/schema-BCkhdl2K.js +1 -0
- package/dist/app/assets/schema-BFedOb5n.js +1 -0
- package/dist/app/assets/schema-BRYG8Msr.js +1 -0
- package/dist/app/assets/schema-D3SaYfNO.js +1 -0
- package/dist/app/assets/schema-DKYwyX0Q.js +1 -0
- package/dist/app/assets/schema-DNUzj-FZ.js +1 -0
- package/dist/app/assets/schema-Mk2CqAZk.js +1 -0
- package/dist/app/assets/schema-form-YQSrAkGf.js +1 -0
- package/dist/app/assets/schema-xXY7gBvH.js +1 -0
- package/dist/app/assets/schemas-Cd-wWAs4.js +55 -0
- package/dist/app/assets/scroll-lock-nMA4N7QX.js +1 -0
- package/dist/app/assets/seam-CFtr05Bk.js +2 -0
- package/dist/app/assets/seed-C9w8QDA_.js +1 -0
- package/dist/app/assets/select-CqgC4MJd.js +1 -0
- package/dist/app/assets/semantic-BZOGW1yM.js +1 -0
- package/dist/app/assets/sepia-margin-D_rRa0SV.js +1 -0
- package/dist/app/assets/services-CFh4V3Ek.js +1 -0
- package/dist/app/assets/services-DDXopNe8.js +1 -0
- package/dist/app/assets/session-Qh0_5nJW.js +1 -0
- package/dist/app/assets/settings-D9B7v99L.js +1 -0
- package/dist/app/assets/share-2-CWdppD0U.js +1 -0
- package/dist/app/assets/share-4ZDhjJFD.js +1 -0
- package/dist/app/assets/shared-A0Sab6lK.js +1 -0
- package/dist/app/assets/shared-BaZKMJeO.js +1 -0
- package/dist/app/assets/shared-CCIZQSIr.js +1 -0
- package/dist/app/assets/shared-DjyRof-V.js +1 -0
- package/dist/app/assets/sheet-D0dvjVIX.js +15 -0
- package/dist/app/assets/sheet-DCuu075w.js +1 -0
- package/dist/app/assets/sheet-FlI38DCB.css +1 -0
- package/dist/app/assets/sheet-y5v1hHge.css +1 -0
- package/dist/app/assets/shell-lime-BZD_mkY4.js +1 -0
- package/dist/app/assets/signal-cyan-B8bCz3Zk.js +1 -0
- package/dist/app/assets/silver-rail-gc5O-YFl.js +1 -0
- package/dist/app/assets/sky-soft-V0Sqf28f.js +1 -0
- package/dist/app/assets/skyline-app-CT9-3-aR.js +1 -0
- package/dist/app/assets/slash-BpRt_lYy.js +2 -0
- package/dist/app/assets/slate-board-Ao5Q8zQ3.js +1 -0
- package/dist/app/assets/slate-masthead-ClFWhpEr.js +1 -0
- package/dist/app/assets/slots-DCt2_WmY.js +1 -0
- package/dist/app/assets/smoke-frame-DCw2Y7CE.js +1 -0
- package/dist/app/assets/soil-brown-CeZMoPYy.js +1 -0
- package/dist/app/assets/spark-blue-CMmmPe9e.js +1 -0
- package/dist/app/assets/sparkline-lite-Dbg5FeZK.css +1 -0
- package/dist/app/assets/sparkline-lite-HVucD2kL.js +1 -0
- package/dist/app/assets/sql-aFQXr0OI.js +1 -0
- package/dist/app/assets/src-BFXdMRyG.css +1 -0
- package/dist/app/assets/src-Bpgs1rH6.js +1 -0
- package/dist/app/assets/src-C1fW89IZ.js +1 -0
- package/dist/app/assets/src-CQQcUQZN.js +1 -0
- package/dist/app/assets/src-CSsYWR7m.js +2 -0
- package/dist/app/assets/src-D0pvR3Pn.js +1 -0
- package/dist/app/assets/src-Dak84v00.css +1 -0
- package/dist/app/assets/src-E7_MqRCx.js +2 -0
- package/dist/app/assets/src-_ograGmM.js +4 -0
- package/dist/app/assets/stack-yellow-C_8EYxb0.js +1 -0
- package/dist/app/assets/stat-DClndHHt.css +1 -0
- package/dist/app/assets/stat-DjV1jC5s.js +1 -0
- package/dist/app/assets/state-Di2Pzrl0.js +1 -0
- package/dist/app/assets/steel-card-D_sikLET.js +1 -0
- package/dist/app/assets/steps-Bzi6Yd9e.js +1 -0
- package/dist/app/assets/steps-CHC3yyeH.css +1 -0
- package/dist/app/assets/steps-r0h4TUR5.js +1 -0
- package/dist/app/assets/storage-Bxp2oaxI.js +1 -0
- package/dist/app/assets/storage-CW0L1wSF.js +4 -0
- package/dist/app/assets/storage-D0KrPAuS.js +1 -0
- package/dist/app/assets/storage-Dysq-9Vj.css +1 -0
- package/dist/app/assets/structure-BoiNh_D7.js +2 -0
- package/dist/app/assets/structure-Br3Nb4YD.js +1 -0
- package/dist/app/assets/structure-DOnYuZyy.js +1 -0
- package/dist/app/assets/studio-BSVb0bUy.js +2 -0
- package/dist/app/assets/style-B4rREfL0.js +2 -0
- package/dist/app/assets/style-DUWXOzM3.js +2 -0
- package/dist/app/assets/style-presets-CzynjwRw.js +1 -0
- package/dist/app/assets/style-presets-NvFQjCjA.js +1 -0
- package/dist/app/assets/summit-green-CVMfipPc.js +1 -0
- package/dist/app/assets/sunset-pier-BefTZXzl.js +1 -0
- package/dist/app/assets/tags-color-C3EKP-d5.css +1 -0
- package/dist/app/assets/teal-current-DkXZ0vcN.js +1 -0
- package/dist/app/assets/terracotta-hearth-CQxakqN9.js +1 -0
- package/dist/app/assets/text-Be7wymXC.js +1 -0
- package/dist/app/assets/text-DG6IKpbn.js +5 -0
- package/dist/app/assets/text-DeZb_mYn.js +1 -0
- package/dist/app/assets/text-family-C-XJGuET.js +1 -0
- package/dist/app/assets/texuli-27exlwkX.js +1 -0
- package/dist/app/assets/texuli-DB0v-fcn.js +1 -0
- package/dist/app/assets/texuli-document-D3sLYHof.js +3 -0
- package/dist/app/assets/theme-B8Wr-JbW.js +1 -0
- package/dist/app/assets/theme-CC-SlXOF.js +1 -0
- package/dist/app/assets/theme-gO6KESO1.js +1 -0
- package/dist/app/assets/thumbnails-3t8t55Yv.js +1 -0
- package/dist/app/assets/thumbs-up-DcRYH8LK.js +1 -0
- package/dist/app/assets/timeline-CQMPn0NA.js +1 -0
- package/dist/app/assets/timeline-WobC-yTK.css +1 -0
- package/dist/app/assets/times-BwGcelwK.js +1 -0
- package/dist/app/assets/toast-store-DLJO-Udw.js +1 -0
- package/dist/app/assets/tokenizer-BQW3V3DA.js +2 -0
- package/dist/app/assets/tooltip-CRWPut-S.js +1 -0
- package/dist/app/assets/trace-indigo-hZ1ZxHXP.js +1 -0
- package/dist/app/assets/trust-DZxM74pz.js +1 -0
- package/dist/app/assets/typeahead-BP48qCAc.js +1 -0
- package/dist/app/assets/types-B0IEHQCD.js +1 -0
- package/dist/app/assets/types-BiUdY2U5.js +1 -0
- package/dist/app/assets/ultra-indigo-B0ARavak.js +1 -0
- package/dist/app/assets/umber-studio-BYTkK72X.js +1 -0
- package/dist/app/assets/untrusted-BfWtxngP.js +2 -0
- package/dist/app/assets/upload-DTXE5Ssx.js +1 -0
- package/dist/app/assets/use-messages-69sBkkeA.js +1 -0
- package/dist/app/assets/use-messages-BEfUIgrO.js +1 -0
- package/dist/app/assets/use-overlay-layer.svelte-BJ8IxdY5.js +1 -0
- package/dist/app/assets/use-overlay-portal.svelte-7FKpygVS.js +1 -0
- package/dist/app/assets/users-CHDp9Ej9.js +1 -0
- package/dist/app/assets/validate-6AAyBgB0.js +1 -0
- package/dist/app/assets/validate-CTbZGtO4.js +1 -0
- package/dist/app/assets/validation-B537KH3-.js +1 -0
- package/dist/app/assets/validation-CMBKmHTL.js +1 -0
- package/dist/app/assets/validation-DA5oeRTn.js +2 -0
- package/dist/app/assets/validation-FspKIls2.js +1 -0
- package/dist/app/assets/variants-0EUR5zUc.js +1 -0
- package/dist/app/assets/variants-BSgG2nVA.js +1 -0
- package/dist/app/assets/variants-BoB1dKDA.css +1 -0
- package/dist/app/assets/variants-C-9Fb7C7.js +1 -0
- package/dist/app/assets/variants-CHGzXb-Y.css +1 -0
- package/dist/app/assets/variants-CcasJKbC.js +1 -0
- package/dist/app/assets/variants-CjnNSDuw.css +1 -0
- package/dist/app/assets/variants-CqLUuoxu.js +1 -0
- package/dist/app/assets/variants-DBzK3oU6.js +1 -0
- package/dist/app/assets/variants-DFYRPBYV.css +1 -0
- package/dist/app/assets/variants-DOyT6BC2.js +1 -0
- package/dist/app/assets/variants-DT9zGmPF.css +1 -0
- package/dist/app/assets/variants-r80xbn9B.css +1 -0
- package/dist/app/assets/vector-sky-CLaOPlE1.js +1 -0
- package/dist/app/assets/violet-DfxdNaZd.js +1 -0
- package/dist/app/assets/virtual-DbN7LpUm.js +1 -0
- package/dist/app/assets/volt-green-CR4A9QcB.js +1 -0
- package/dist/app/assets/wheat-barn-lFw7UkLn.js +1 -0
- package/dist/app/assets/workspaces-CRosbN6a.js +1 -0
- package/dist/app/assets/x-Bl2Frdss.js +1 -0
- package/dist/app/assets/yaml-KSSTK7w3.js +1 -0
- package/dist/app/assets/zap-BIOQCInS.js +1 -0
- package/dist/app/assets/zip-BssPsXf3.js +1 -0
- package/dist/app/avatars/128/av-001.webp +0 -0
- package/dist/app/avatars/128/av-002.webp +0 -0
- package/dist/app/avatars/128/av-003.webp +0 -0
- package/dist/app/avatars/128/av-004.webp +0 -0
- package/dist/app/avatars/128/av-005.webp +0 -0
- package/dist/app/avatars/128/av-006.webp +0 -0
- package/dist/app/avatars/128/av-007.webp +0 -0
- package/dist/app/avatars/128/av-008.webp +0 -0
- package/dist/app/avatars/128/av-009.webp +0 -0
- package/dist/app/avatars/128/av-010.webp +0 -0
- package/dist/app/avatars/128/av-011.webp +0 -0
- package/dist/app/avatars/128/av-012.webp +0 -0
- package/dist/app/avatars/128/av-013.webp +0 -0
- package/dist/app/avatars/128/av-014.webp +0 -0
- package/dist/app/avatars/128/av-015.webp +0 -0
- package/dist/app/avatars/128/av-016.webp +0 -0
- package/dist/app/avatars/128/av-017.webp +0 -0
- package/dist/app/avatars/128/av-018.webp +0 -0
- package/dist/app/avatars/128/av-019.webp +0 -0
- package/dist/app/avatars/128/av-020.webp +0 -0
- package/dist/app/avatars/128/av-021.webp +0 -0
- package/dist/app/avatars/128/av-022.webp +0 -0
- package/dist/app/avatars/128/av-023.webp +0 -0
- package/dist/app/avatars/128/av-024.webp +0 -0
- package/dist/app/avatars/128/av-025.webp +0 -0
- package/dist/app/avatars/128/av-026.webp +0 -0
- package/dist/app/avatars/128/av-027.webp +0 -0
- package/dist/app/avatars/128/av-028.webp +0 -0
- package/dist/app/avatars/128/av-029.webp +0 -0
- package/dist/app/avatars/128/av-030.webp +0 -0
- package/dist/app/avatars/128/av-031.webp +0 -0
- package/dist/app/avatars/128/av-032.webp +0 -0
- package/dist/app/avatars/128/av-033.webp +0 -0
- package/dist/app/avatars/128/av-034.webp +0 -0
- package/dist/app/avatars/128/av-035.webp +0 -0
- package/dist/app/avatars/128/av-036.webp +0 -0
- package/dist/app/avatars/128/av-037.webp +0 -0
- package/dist/app/avatars/128/av-038.webp +0 -0
- package/dist/app/avatars/128/av-039.webp +0 -0
- package/dist/app/avatars/128/av-040.webp +0 -0
- package/dist/app/avatars/128/av-041.webp +0 -0
- package/dist/app/avatars/128/av-042.webp +0 -0
- package/dist/app/avatars/128/av-043.webp +0 -0
- package/dist/app/avatars/128/av-044.webp +0 -0
- package/dist/app/avatars/128/av-045.webp +0 -0
- package/dist/app/avatars/128/av-046.webp +0 -0
- package/dist/app/avatars/128/av-047.webp +0 -0
- package/dist/app/avatars/128/av-048.webp +0 -0
- package/dist/app/avatars/128/av-049.webp +0 -0
- package/dist/app/avatars/128/av-050.webp +0 -0
- package/dist/app/avatars/128/av-051.webp +0 -0
- package/dist/app/avatars/128/av-052.webp +0 -0
- package/dist/app/avatars/128/av-053.webp +0 -0
- package/dist/app/avatars/128/av-054.webp +0 -0
- package/dist/app/avatars/128/av-055.webp +0 -0
- package/dist/app/avatars/128/av-056.webp +0 -0
- package/dist/app/avatars/128/av-057.webp +0 -0
- package/dist/app/avatars/128/av-058.webp +0 -0
- package/dist/app/avatars/128/av-059.webp +0 -0
- package/dist/app/avatars/128/av-060.webp +0 -0
- package/dist/app/avatars/128/av-061.webp +0 -0
- package/dist/app/avatars/128/av-062.webp +0 -0
- package/dist/app/avatars/128/av-063.webp +0 -0
- package/dist/app/avatars/128/av-064.webp +0 -0
- package/dist/app/avatars/128/av-065.webp +0 -0
- package/dist/app/avatars/128/av-066.webp +0 -0
- package/dist/app/avatars/128/av-067.webp +0 -0
- package/dist/app/avatars/128/av-068.webp +0 -0
- package/dist/app/avatars/128/av-069.webp +0 -0
- package/dist/app/avatars/128/av-070.webp +0 -0
- package/dist/app/avatars/128/av-071.webp +0 -0
- package/dist/app/avatars/128/av-072.webp +0 -0
- package/dist/app/avatars/128/av-073.webp +0 -0
- package/dist/app/avatars/128/av-074.webp +0 -0
- package/dist/app/avatars/128/av-075.webp +0 -0
- package/dist/app/avatars/128/av-076.webp +0 -0
- package/dist/app/avatars/128/av-077.webp +0 -0
- package/dist/app/avatars/128/av-078.webp +0 -0
- package/dist/app/avatars/128/av-079.webp +0 -0
- package/dist/app/avatars/128/av-080.webp +0 -0
- package/dist/app/avatars/128/av-081.webp +0 -0
- package/dist/app/avatars/128/av-082.webp +0 -0
- package/dist/app/avatars/128/av-083.webp +0 -0
- package/dist/app/avatars/128/av-084.webp +0 -0
- package/dist/app/avatars/128/av-085.webp +0 -0
- package/dist/app/avatars/128/av-086.webp +0 -0
- package/dist/app/avatars/128/av-087.webp +0 -0
- package/dist/app/avatars/128/av-088.webp +0 -0
- package/dist/app/avatars/128/av-089.webp +0 -0
- package/dist/app/avatars/128/av-090.webp +0 -0
- package/dist/app/avatars/128/av-091.webp +0 -0
- package/dist/app/avatars/128/av-092.webp +0 -0
- package/dist/app/avatars/128/av-093.webp +0 -0
- package/dist/app/avatars/128/av-094.webp +0 -0
- package/dist/app/avatars/128/av-095.webp +0 -0
- package/dist/app/avatars/128/av-096.webp +0 -0
- package/dist/app/avatars/128/av-097.webp +0 -0
- package/dist/app/avatars/128/av-098.webp +0 -0
- package/dist/app/avatars/128/av-099.webp +0 -0
- package/dist/app/avatars/128/av-100.webp +0 -0
- package/dist/app/avatars/128/av-101.webp +0 -0
- package/dist/app/avatars/128/av-102.webp +0 -0
- package/dist/app/avatars/128/av-103.webp +0 -0
- package/dist/app/avatars/128/av-104.webp +0 -0
- package/dist/app/avatars/128/av-105.webp +0 -0
- package/dist/app/avatars/128/av-106.webp +0 -0
- package/dist/app/avatars/128/av-107.webp +0 -0
- package/dist/app/avatars/128/av-108.webp +0 -0
- package/dist/app/avatars/128/av-109.webp +0 -0
- package/dist/app/avatars/128/av-110.webp +0 -0
- package/dist/app/avatars/128/av-111.webp +0 -0
- package/dist/app/avatars/128/av-112.webp +0 -0
- package/dist/app/avatars/128/av-113.webp +0 -0
- package/dist/app/avatars/128/av-114.webp +0 -0
- package/dist/app/avatars/128/av-115.webp +0 -0
- package/dist/app/avatars/128/av-116.webp +0 -0
- package/dist/app/avatars/128/av-117.webp +0 -0
- package/dist/app/avatars/128/av-118.webp +0 -0
- package/dist/app/avatars/128/av-119.webp +0 -0
- package/dist/app/avatars/128/av-120.webp +0 -0
- package/dist/app/avatars/128/av-121.webp +0 -0
- package/dist/app/avatars/128/av-122.webp +0 -0
- package/dist/app/avatars/128/av-123.webp +0 -0
- package/dist/app/avatars/128/av-124.webp +0 -0
- package/dist/app/avatars/128/av-125.webp +0 -0
- package/dist/app/avatars/128/av-126.webp +0 -0
- package/dist/app/avatars/128/av-127.webp +0 -0
- package/dist/app/avatars/128/av-128.webp +0 -0
- package/dist/app/avatars/128/av-129.webp +0 -0
- package/dist/app/avatars/128/av-130.webp +0 -0
- package/dist/app/avatars/128/av-131.webp +0 -0
- package/dist/app/avatars/128/av-132.webp +0 -0
- package/dist/app/avatars/128/av-133.webp +0 -0
- package/dist/app/avatars/128/av-134.webp +0 -0
- package/dist/app/avatars/128/av-135.webp +0 -0
- package/dist/app/avatars/128/av-136.webp +0 -0
- package/dist/app/avatars/128/av-137.webp +0 -0
- package/dist/app/avatars/128/av-138.webp +0 -0
- package/dist/app/avatars/128/av-139.webp +0 -0
- package/dist/app/avatars/128/av-140.webp +0 -0
- package/dist/app/avatars/128/av-141.webp +0 -0
- package/dist/app/avatars/128/av-142.webp +0 -0
- package/dist/app/avatars/128/av-143.webp +0 -0
- package/dist/app/avatars/128/av-144.webp +0 -0
- package/dist/app/avatars/128/av-145.webp +0 -0
- package/dist/app/avatars/128/av-146.webp +0 -0
- package/dist/app/avatars/128/av-147.webp +0 -0
- package/dist/app/avatars/128/av-148.webp +0 -0
- package/dist/app/avatars/128/av-149.webp +0 -0
- package/dist/app/avatars/128/av-150.webp +0 -0
- package/dist/app/avatars/128/av-151.webp +0 -0
- package/dist/app/avatars/128/av-152.webp +0 -0
- package/dist/app/avatars/128/av-153.webp +0 -0
- package/dist/app/avatars/128/av-154.webp +0 -0
- package/dist/app/avatars/128/av-155.webp +0 -0
- package/dist/app/avatars/128/av-156.webp +0 -0
- package/dist/app/avatars/128/av-157.webp +0 -0
- package/dist/app/avatars/128/av-158.webp +0 -0
- package/dist/app/avatars/128/av-159.webp +0 -0
- package/dist/app/avatars/128/av-160.webp +0 -0
- package/dist/app/avatars/128/av-161.webp +0 -0
- package/dist/app/avatars/128/av-162.webp +0 -0
- package/dist/app/avatars/128/av-163.webp +0 -0
- package/dist/app/avatars/128/av-164.webp +0 -0
- package/dist/app/avatars/128/av-165.webp +0 -0
- package/dist/app/avatars/128/av-166.webp +0 -0
- package/dist/app/avatars/128/av-167.webp +0 -0
- package/dist/app/avatars/128/av-168.webp +0 -0
- package/dist/app/avatars/128/av-169.webp +0 -0
- package/dist/app/avatars/128/av-170.webp +0 -0
- package/dist/app/avatars/128/av-171.webp +0 -0
- package/dist/app/avatars/128/av-172.webp +0 -0
- package/dist/app/avatars/128/av-173.webp +0 -0
- package/dist/app/avatars/128/av-174.webp +0 -0
- package/dist/app/avatars/128/av-175.webp +0 -0
- package/dist/app/avatars/64/av-001.webp +0 -0
- package/dist/app/avatars/64/av-002.webp +0 -0
- package/dist/app/avatars/64/av-003.webp +0 -0
- package/dist/app/avatars/64/av-004.webp +0 -0
- package/dist/app/avatars/64/av-005.webp +0 -0
- package/dist/app/avatars/64/av-006.webp +0 -0
- package/dist/app/avatars/64/av-007.webp +0 -0
- package/dist/app/avatars/64/av-008.webp +0 -0
- package/dist/app/avatars/64/av-009.webp +0 -0
- package/dist/app/avatars/64/av-010.webp +0 -0
- package/dist/app/avatars/64/av-011.webp +0 -0
- package/dist/app/avatars/64/av-012.webp +0 -0
- package/dist/app/avatars/64/av-013.webp +0 -0
- package/dist/app/avatars/64/av-014.webp +0 -0
- package/dist/app/avatars/64/av-015.webp +0 -0
- package/dist/app/avatars/64/av-016.webp +0 -0
- package/dist/app/avatars/64/av-017.webp +0 -0
- package/dist/app/avatars/64/av-018.webp +0 -0
- package/dist/app/avatars/64/av-019.webp +0 -0
- package/dist/app/avatars/64/av-020.webp +0 -0
- package/dist/app/avatars/64/av-021.webp +0 -0
- package/dist/app/avatars/64/av-022.webp +0 -0
- package/dist/app/avatars/64/av-023.webp +0 -0
- package/dist/app/avatars/64/av-024.webp +0 -0
- package/dist/app/avatars/64/av-025.webp +0 -0
- package/dist/app/avatars/64/av-026.webp +0 -0
- package/dist/app/avatars/64/av-027.webp +0 -0
- package/dist/app/avatars/64/av-028.webp +0 -0
- package/dist/app/avatars/64/av-029.webp +0 -0
- package/dist/app/avatars/64/av-030.webp +0 -0
- package/dist/app/avatars/64/av-031.webp +0 -0
- package/dist/app/avatars/64/av-032.webp +0 -0
- package/dist/app/avatars/64/av-033.webp +0 -0
- package/dist/app/avatars/64/av-034.webp +0 -0
- package/dist/app/avatars/64/av-035.webp +0 -0
- package/dist/app/avatars/64/av-036.webp +0 -0
- package/dist/app/avatars/64/av-037.webp +0 -0
- package/dist/app/avatars/64/av-038.webp +0 -0
- package/dist/app/avatars/64/av-039.webp +0 -0
- package/dist/app/avatars/64/av-040.webp +0 -0
- package/dist/app/avatars/64/av-041.webp +0 -0
- package/dist/app/avatars/64/av-042.webp +0 -0
- package/dist/app/avatars/64/av-043.webp +0 -0
- package/dist/app/avatars/64/av-044.webp +0 -0
- package/dist/app/avatars/64/av-045.webp +0 -0
- package/dist/app/avatars/64/av-046.webp +0 -0
- package/dist/app/avatars/64/av-047.webp +0 -0
- package/dist/app/avatars/64/av-048.webp +0 -0
- package/dist/app/avatars/64/av-049.webp +0 -0
- package/dist/app/avatars/64/av-050.webp +0 -0
- package/dist/app/avatars/64/av-051.webp +0 -0
- package/dist/app/avatars/64/av-052.webp +0 -0
- package/dist/app/avatars/64/av-053.webp +0 -0
- package/dist/app/avatars/64/av-054.webp +0 -0
- package/dist/app/avatars/64/av-055.webp +0 -0
- package/dist/app/avatars/64/av-056.webp +0 -0
- package/dist/app/avatars/64/av-057.webp +0 -0
- package/dist/app/avatars/64/av-058.webp +0 -0
- package/dist/app/avatars/64/av-059.webp +0 -0
- package/dist/app/avatars/64/av-060.webp +0 -0
- package/dist/app/avatars/64/av-061.webp +0 -0
- package/dist/app/avatars/64/av-062.webp +0 -0
- package/dist/app/avatars/64/av-063.webp +0 -0
- package/dist/app/avatars/64/av-064.webp +0 -0
- package/dist/app/avatars/64/av-065.webp +0 -0
- package/dist/app/avatars/64/av-066.webp +0 -0
- package/dist/app/avatars/64/av-067.webp +0 -0
- package/dist/app/avatars/64/av-068.webp +0 -0
- package/dist/app/avatars/64/av-069.webp +0 -0
- package/dist/app/avatars/64/av-070.webp +0 -0
- package/dist/app/avatars/64/av-071.webp +0 -0
- package/dist/app/avatars/64/av-072.webp +0 -0
- package/dist/app/avatars/64/av-073.webp +0 -0
- package/dist/app/avatars/64/av-074.webp +0 -0
- package/dist/app/avatars/64/av-075.webp +0 -0
- package/dist/app/avatars/64/av-076.webp +0 -0
- package/dist/app/avatars/64/av-077.webp +0 -0
- package/dist/app/avatars/64/av-078.webp +0 -0
- package/dist/app/avatars/64/av-079.webp +0 -0
- package/dist/app/avatars/64/av-080.webp +0 -0
- package/dist/app/avatars/64/av-081.webp +0 -0
- package/dist/app/avatars/64/av-082.webp +0 -0
- package/dist/app/avatars/64/av-083.webp +0 -0
- package/dist/app/avatars/64/av-084.webp +0 -0
- package/dist/app/avatars/64/av-085.webp +0 -0
- package/dist/app/avatars/64/av-086.webp +0 -0
- package/dist/app/avatars/64/av-087.webp +0 -0
- package/dist/app/avatars/64/av-088.webp +0 -0
- package/dist/app/avatars/64/av-089.webp +0 -0
- package/dist/app/avatars/64/av-090.webp +0 -0
- package/dist/app/avatars/64/av-091.webp +0 -0
- package/dist/app/avatars/64/av-092.webp +0 -0
- package/dist/app/avatars/64/av-093.webp +0 -0
- package/dist/app/avatars/64/av-094.webp +0 -0
- package/dist/app/avatars/64/av-095.webp +0 -0
- package/dist/app/avatars/64/av-096.webp +0 -0
- package/dist/app/avatars/64/av-097.webp +0 -0
- package/dist/app/avatars/64/av-098.webp +0 -0
- package/dist/app/avatars/64/av-099.webp +0 -0
- package/dist/app/avatars/64/av-100.webp +0 -0
- package/dist/app/avatars/64/av-101.webp +0 -0
- package/dist/app/avatars/64/av-102.webp +0 -0
- package/dist/app/avatars/64/av-103.webp +0 -0
- package/dist/app/avatars/64/av-104.webp +0 -0
- package/dist/app/avatars/64/av-105.webp +0 -0
- package/dist/app/avatars/64/av-106.webp +0 -0
- package/dist/app/avatars/64/av-107.webp +0 -0
- package/dist/app/avatars/64/av-108.webp +0 -0
- package/dist/app/avatars/64/av-109.webp +0 -0
- package/dist/app/avatars/64/av-110.webp +0 -0
- package/dist/app/avatars/64/av-111.webp +0 -0
- package/dist/app/avatars/64/av-112.webp +0 -0
- package/dist/app/avatars/64/av-113.webp +0 -0
- package/dist/app/avatars/64/av-114.webp +0 -0
- package/dist/app/avatars/64/av-115.webp +0 -0
- package/dist/app/avatars/64/av-116.webp +0 -0
- package/dist/app/avatars/64/av-117.webp +0 -0
- package/dist/app/avatars/64/av-118.webp +0 -0
- package/dist/app/avatars/64/av-119.webp +0 -0
- package/dist/app/avatars/64/av-120.webp +0 -0
- package/dist/app/avatars/64/av-121.webp +0 -0
- package/dist/app/avatars/64/av-122.webp +0 -0
- package/dist/app/avatars/64/av-123.webp +0 -0
- package/dist/app/avatars/64/av-124.webp +0 -0
- package/dist/app/avatars/64/av-125.webp +0 -0
- package/dist/app/avatars/64/av-126.webp +0 -0
- package/dist/app/avatars/64/av-127.webp +0 -0
- package/dist/app/avatars/64/av-128.webp +0 -0
- package/dist/app/avatars/64/av-129.webp +0 -0
- package/dist/app/avatars/64/av-130.webp +0 -0
- package/dist/app/avatars/64/av-131.webp +0 -0
- package/dist/app/avatars/64/av-132.webp +0 -0
- package/dist/app/avatars/64/av-133.webp +0 -0
- package/dist/app/avatars/64/av-134.webp +0 -0
- package/dist/app/avatars/64/av-135.webp +0 -0
- package/dist/app/avatars/64/av-136.webp +0 -0
- package/dist/app/avatars/64/av-137.webp +0 -0
- package/dist/app/avatars/64/av-138.webp +0 -0
- package/dist/app/avatars/64/av-139.webp +0 -0
- package/dist/app/avatars/64/av-140.webp +0 -0
- package/dist/app/avatars/64/av-141.webp +0 -0
- package/dist/app/avatars/64/av-142.webp +0 -0
- package/dist/app/avatars/64/av-143.webp +0 -0
- package/dist/app/avatars/64/av-144.webp +0 -0
- package/dist/app/avatars/64/av-145.webp +0 -0
- package/dist/app/avatars/64/av-146.webp +0 -0
- package/dist/app/avatars/64/av-147.webp +0 -0
- package/dist/app/avatars/64/av-148.webp +0 -0
- package/dist/app/avatars/64/av-149.webp +0 -0
- package/dist/app/avatars/64/av-150.webp +0 -0
- package/dist/app/avatars/64/av-151.webp +0 -0
- package/dist/app/avatars/64/av-152.webp +0 -0
- package/dist/app/avatars/64/av-153.webp +0 -0
- package/dist/app/avatars/64/av-154.webp +0 -0
- package/dist/app/avatars/64/av-155.webp +0 -0
- package/dist/app/avatars/64/av-156.webp +0 -0
- package/dist/app/avatars/64/av-157.webp +0 -0
- package/dist/app/avatars/64/av-158.webp +0 -0
- package/dist/app/avatars/64/av-159.webp +0 -0
- package/dist/app/avatars/64/av-160.webp +0 -0
- package/dist/app/avatars/64/av-161.webp +0 -0
- package/dist/app/avatars/64/av-162.webp +0 -0
- package/dist/app/avatars/64/av-163.webp +0 -0
- package/dist/app/avatars/64/av-164.webp +0 -0
- package/dist/app/avatars/64/av-165.webp +0 -0
- package/dist/app/avatars/64/av-166.webp +0 -0
- package/dist/app/avatars/64/av-167.webp +0 -0
- package/dist/app/avatars/64/av-168.webp +0 -0
- package/dist/app/avatars/64/av-169.webp +0 -0
- package/dist/app/avatars/64/av-170.webp +0 -0
- package/dist/app/avatars/64/av-171.webp +0 -0
- package/dist/app/avatars/64/av-172.webp +0 -0
- package/dist/app/avatars/64/av-173.webp +0 -0
- package/dist/app/avatars/64/av-174.webp +0 -0
- package/dist/app/avatars/64/av-175.webp +0 -0
- package/dist/app/deck.html +140 -0
- package/dist/app/doc.html +140 -0
- package/dist/app/favicon.svg +1 -0
- package/dist/app/index.html +141 -0
- package/dist/app/manifest.webmanifest +18 -0
- package/dist/app/page.html +140 -0
- package/dist/app/protoyard-player-assets.json +6377 -0
- package/dist/app/sw.js +89 -0
- package/dist/boot/PlayerApp.svelte +89 -0
- package/dist/boot/PlayerApp.svelte.d.ts +3 -0
- package/dist/boot/archetypes/business/AnalyticsApp.svelte +39 -0
- package/dist/boot/archetypes/business/AnalyticsApp.svelte.d.ts +14 -0
- package/dist/boot/archetypes/business/AnalyticsDashboard.svelte +162 -0
- package/dist/boot/archetypes/business/AnalyticsDashboard.svelte.d.ts +3 -0
- package/dist/boot/archetypes/business/SaasApp.svelte +46 -0
- package/dist/boot/archetypes/business/SaasApp.svelte.d.ts +14 -0
- package/dist/boot/archetypes/business/adapter.d.ts +45 -0
- package/dist/boot/archetypes/business/adapter.js +64 -0
- package/dist/boot/archetypes/business/analytics.d.ts +2 -0
- package/dist/boot/archetypes/business/analytics.js +2 -0
- package/dist/boot/archetypes/business/definition.d.ts +26 -0
- package/dist/boot/archetypes/business/definition.js +127 -0
- package/dist/boot/archetypes/business/metrics.d.ts +27 -0
- package/dist/boot/archetypes/business/metrics.js +38 -0
- package/dist/boot/archetypes/business/nav.d.ts +7 -0
- package/dist/boot/archetypes/business/nav.js +19 -0
- package/dist/boot/archetypes/business/saas.d.ts +3 -0
- package/dist/boot/archetypes/business/saas.js +3 -0
- package/dist/boot/archetypes/conversational/ConversationalApp.svelte +108 -0
- package/dist/boot/archetypes/conversational/ConversationalApp.svelte.d.ts +7 -0
- package/dist/boot/archetypes/conversational/adapter.d.ts +24 -0
- package/dist/boot/archetypes/conversational/adapter.js +74 -0
- package/dist/boot/archetypes/conversational/index.d.ts +4 -0
- package/dist/boot/archetypes/conversational/index.js +4 -0
- package/dist/boot/archetypes/conversational/reply.d.ts +6 -0
- package/dist/boot/archetypes/conversational/reply.js +28 -0
- package/dist/boot/boot.d.ts +46 -0
- package/dist/boot/boot.js +96 -0
- package/dist/boot/cache/index.d.ts +90 -0
- package/dist/boot/cache/index.js +299 -0
- package/dist/boot/player-blueprint.d.ts +9 -0
- package/dist/boot/player-blueprint.js +13 -0
- package/dist/boot/review-endpoint.d.ts +7 -0
- package/dist/boot/review-endpoint.js +7 -0
- package/dist/boot/storage/index.d.ts +54 -0
- package/dist/boot/storage/index.js +170 -0
- package/dist/boot/validation/ValidationPanel.svelte +110 -0
- package/dist/boot/validation/ValidationPanel.svelte.d.ts +8 -0
- package/dist/boot/validation/index.d.ts +26 -0
- package/dist/boot/validation/index.js +50 -0
- package/dist/boot/validation/session.d.ts +71 -0
- package/dist/boot/validation/session.js +150 -0
- package/dist/boot/validation/store.d.ts +49 -0
- package/dist/boot/validation/store.js +82 -0
- package/dist/boot/worker/generate-worker-runtime.d.ts +7 -0
- package/dist/boot/worker/generate-worker-runtime.js +20 -0
- package/dist/boot/worker/generate-world-core.d.ts +4 -0
- package/dist/boot/worker/generate-world-core.js +8 -0
- package/dist/boot/worker/generate-world.d.ts +32 -0
- package/dist/boot/worker/generate-world.js +80 -0
- package/dist/boot/worker/generate.worker.d.ts +1 -0
- package/dist/boot/worker/generate.worker.js +2 -0
- package/dist/boot/worker/protocol.d.ts +13 -0
- package/dist/embed/client.d.ts +51 -0
- package/dist/embed/client.js +101 -0
- package/dist/embed/index.d.ts +32 -0
- package/dist/embed/index.js +37 -0
- package/dist/embed/listener.d.ts +37 -0
- package/dist/embed/listener.js +91 -0
- package/dist/embed/origins.d.ts +31 -0
- package/dist/embed/origins.js +67 -0
- package/dist/embed/protocol.d.ts +73 -0
- package/dist/embed/protocol.js +123 -0
- package/package.json +96 -3
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Dexie } from 'dexie';
|
|
2
|
+
/**
|
|
3
|
+
* Validation metrics, stored per blueprint in the browser
|
|
4
|
+
* (`protoyard.<namespace>.validation`), next to the blueprint's data and
|
|
5
|
+
* control databases and never sent anywhere. They can be downloaded as a
|
|
6
|
+
* `protoyard-validation-metrics` v1 file for `protoyard quick report`.
|
|
7
|
+
*/
|
|
8
|
+
export const VALIDATION_METRICS_FORMAT = 'protoyard-validation-metrics';
|
|
9
|
+
export const VALIDATION_METRICS_VERSION = 1;
|
|
10
|
+
export function validationDatabaseName(namespace) {
|
|
11
|
+
return `protoyard.${namespace}.validation`;
|
|
12
|
+
}
|
|
13
|
+
const TASK_ID = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/;
|
|
14
|
+
const OUTCOMES = new Set(['success', 'gave-up', 'timed-out']);
|
|
15
|
+
const isCount = (value) => Number.isInteger(value) && value >= 0;
|
|
16
|
+
const isInstant = (value) => typeof value === 'string' && !Number.isNaN(Date.parse(value));
|
|
17
|
+
/** Checks an attempt before it is stored (the player has no schema library). */
|
|
18
|
+
export function assertAttempt(value) {
|
|
19
|
+
const ok = typeof value.taskId === 'string' &&
|
|
20
|
+
value.taskId.length <= 48 &&
|
|
21
|
+
TASK_ID.test(value.taskId) &&
|
|
22
|
+
OUTCOMES.has(value.outcome) &&
|
|
23
|
+
isCount(value.durationMs) &&
|
|
24
|
+
isCount(value.steps) &&
|
|
25
|
+
isInstant(value.startedAt) &&
|
|
26
|
+
isInstant(value.endedAt);
|
|
27
|
+
if (!ok)
|
|
28
|
+
throw new TypeError('Invalid validation attempt.');
|
|
29
|
+
const { taskId, outcome, durationMs, steps, startedAt, endedAt } = value;
|
|
30
|
+
return { taskId, outcome, durationMs, steps, startedAt, endedAt };
|
|
31
|
+
}
|
|
32
|
+
class ValidationDatabase extends Dexie {
|
|
33
|
+
attempts;
|
|
34
|
+
constructor(name, options) {
|
|
35
|
+
super(name, options);
|
|
36
|
+
this.version(1).stores({ attempts: '++id, taskId, startedAt' });
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
export function openValidationStore(namespace, options = {}) {
|
|
40
|
+
const db = new ValidationDatabase(validationDatabaseName(namespace), {
|
|
41
|
+
...(options.indexedDB ? { indexedDB: options.indexedDB } : {}),
|
|
42
|
+
...(options.IDBKeyRange ? { IDBKeyRange: options.IDBKeyRange } : {}),
|
|
43
|
+
});
|
|
44
|
+
return {
|
|
45
|
+
async record(attempt) {
|
|
46
|
+
await db.attempts.add(assertAttempt(attempt));
|
|
47
|
+
},
|
|
48
|
+
async list() {
|
|
49
|
+
const rows = await db.attempts.orderBy('id').toArray();
|
|
50
|
+
return rows.map(({ id: _id, ...attempt }) => attempt);
|
|
51
|
+
},
|
|
52
|
+
clear: async () => {
|
|
53
|
+
await db.attempts.clear();
|
|
54
|
+
},
|
|
55
|
+
close: () => db.close(),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
/** The download file: tasks and attempts, nothing else from the prototype. */
|
|
59
|
+
export function metricsFile(input) {
|
|
60
|
+
return {
|
|
61
|
+
format: VALIDATION_METRICS_FORMAT,
|
|
62
|
+
version: VALIDATION_METRICS_VERSION,
|
|
63
|
+
blueprint: { name: input.name, namespace: input.namespace },
|
|
64
|
+
exportedAt: (input.now ?? (() => new Date()))().toISOString(),
|
|
65
|
+
tasks: input.tasks.map(({ id, prompt }) => ({ id, prompt })),
|
|
66
|
+
attempts: input.attempts.map(assertAttempt),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
/** Saves the metrics file through the browser's download, with no upload. */
|
|
70
|
+
export function downloadMetrics(file, doc = document) {
|
|
71
|
+
const name = `${file.blueprint.namespace}-validation-metrics.json`;
|
|
72
|
+
const url = URL.createObjectURL(new Blob([`${JSON.stringify(file, null, 2)}\n`], { type: 'application/json' }));
|
|
73
|
+
const link = doc.createElement('a');
|
|
74
|
+
link.href = url;
|
|
75
|
+
link.download = name;
|
|
76
|
+
link.rel = 'noopener';
|
|
77
|
+
doc.body.append(link);
|
|
78
|
+
link.click();
|
|
79
|
+
link.remove();
|
|
80
|
+
setTimeout(() => URL.revokeObjectURL(url), 0);
|
|
81
|
+
return name;
|
|
82
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { GenerateWorldReply, GenerateWorldRequest } from './protocol.ts';
|
|
2
|
+
export interface GeneratorWorkerScope {
|
|
3
|
+
addEventListener(type: 'message', listener: (event: MessageEvent<GenerateWorldRequest>) => void): void;
|
|
4
|
+
postMessage(message: GenerateWorldReply): void;
|
|
5
|
+
}
|
|
6
|
+
export declare function handleGenerateWorldRequest(request: GenerateWorldRequest): Promise<GenerateWorldReply>;
|
|
7
|
+
export declare function installGenerateWorldWorker(scope: GeneratorWorkerScope): void;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { generateBlueprintWorld } from "./generate-world-core.js";
|
|
2
|
+
export async function handleGenerateWorldRequest(request) {
|
|
3
|
+
try {
|
|
4
|
+
return {
|
|
5
|
+
ok: true,
|
|
6
|
+
world: await generateBlueprintWorld(request.blueprint, request.scenario),
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
catch (error) {
|
|
10
|
+
return {
|
|
11
|
+
ok: false,
|
|
12
|
+
message: error instanceof Error ? error.message : 'World generation failed.',
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function installGenerateWorldWorker(scope) {
|
|
17
|
+
scope.addEventListener('message', (event) => {
|
|
18
|
+
void handleGenerateWorldRequest(event.data).then((reply) => scope.postMessage(reply));
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Blueprint } from '@protoyard/blueprint';
|
|
2
|
+
import type { GenerateContext, Scenario, WorldSeed } from '@protoyard/core';
|
|
3
|
+
/** Build a blueprint world from serializable inputs in the worker or fallback chunk. */
|
|
4
|
+
export declare function generateBlueprintWorld(blueprint: Blueprint, scenario: Scenario, context?: GenerateContext): Promise<WorldSeed>;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Build a blueprint world from serializable inputs in the worker or fallback chunk. */
|
|
2
|
+
export async function generateBlueprintWorld(blueprint, scenario, context) {
|
|
3
|
+
const { createBlueprintGenerator } = await import('@protoyard/blueprint/generator');
|
|
4
|
+
if (context)
|
|
5
|
+
return createBlueprintGenerator(blueprint).generate(context);
|
|
6
|
+
const { createGenerateContextAsync } = await import('@protoyard/scenarios');
|
|
7
|
+
return createBlueprintGenerator(blueprint).generate(await createGenerateContextAsync(scenario));
|
|
8
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { Blueprint } from '@protoyard/blueprint';
|
|
2
|
+
import type { GenerateContext, PrototypeDefinition, Scenario, WorldSeed } from '@protoyard/core';
|
|
3
|
+
import type { GenerateWorldReply, GenerateWorldRequest } from './protocol.ts';
|
|
4
|
+
export interface GenerateWorldWorker {
|
|
5
|
+
onmessage: ((event: MessageEvent<GenerateWorldReply>) => void) | null;
|
|
6
|
+
onerror: ((event: ErrorEvent) => void) | null;
|
|
7
|
+
postMessage(message: GenerateWorldRequest): void;
|
|
8
|
+
terminate(): void;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A generation error the worker reported (`{ ok: false }`): the blueprint or
|
|
12
|
+
* scenario cannot be generated, so running it again on the main thread would
|
|
13
|
+
* only fail a second time while blocking the page.
|
|
14
|
+
*/
|
|
15
|
+
export declare class WorldGenerationError extends Error {
|
|
16
|
+
constructor(message: string);
|
|
17
|
+
}
|
|
18
|
+
export interface WorkerGenerationOptions {
|
|
19
|
+
/** Test seam; browsers use the module worker by default. */
|
|
20
|
+
createWorker?: () => GenerateWorldWorker;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Generate from blueprint + scenario data. The main thread takes over only
|
|
24
|
+
* when the worker is unavailable: it cannot be created, or it fails to start
|
|
25
|
+
* or run (`onerror`). A generation error the worker reports is thrown as a
|
|
26
|
+
* {@link WorldGenerationError}, never generated a second time. The main-thread
|
|
27
|
+
* fallback is a lazy chunk, so the generator is absent from the player's
|
|
28
|
+
* initial graph.
|
|
29
|
+
*/
|
|
30
|
+
export declare function generatePlayerWorld(blueprint: Blueprint, scenario: Scenario, options?: WorkerGenerationOptions, fallbackContext?: GenerateContext): Promise<WorldSeed>;
|
|
31
|
+
/** Keep the runtime contract; only the data needed by the worker crosses threads. */
|
|
32
|
+
export declare function withWorkerGeneration(definition: PrototypeDefinition, blueprint: Blueprint, options?: WorkerGenerationOptions): PrototypeDefinition;
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A generation error the worker reported (`{ ok: false }`): the blueprint or
|
|
3
|
+
* scenario cannot be generated, so running it again on the main thread would
|
|
4
|
+
* only fail a second time while blocking the page.
|
|
5
|
+
*/
|
|
6
|
+
export class WorldGenerationError extends Error {
|
|
7
|
+
constructor(message) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = 'WorldGenerationError';
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function createBrowserWorker() {
|
|
13
|
+
if (typeof Worker === 'undefined')
|
|
14
|
+
throw new Error('Web Workers are unavailable.');
|
|
15
|
+
return new Worker(new URL('./generate.worker.js', import.meta.url), {
|
|
16
|
+
type: 'module',
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
async function generateOnMainThread(blueprint, scenario, context) {
|
|
20
|
+
const { generateBlueprintWorld } = await import("./generate-world-core.js");
|
|
21
|
+
return generateBlueprintWorld(blueprint, scenario, context);
|
|
22
|
+
}
|
|
23
|
+
async function generateWithWorker(worker, request) {
|
|
24
|
+
return new Promise((resolve, reject) => {
|
|
25
|
+
let settled = false;
|
|
26
|
+
const finish = () => {
|
|
27
|
+
if (settled)
|
|
28
|
+
return;
|
|
29
|
+
settled = true;
|
|
30
|
+
worker.terminate();
|
|
31
|
+
};
|
|
32
|
+
worker.onmessage = ({ data }) => {
|
|
33
|
+
finish();
|
|
34
|
+
if (data.ok)
|
|
35
|
+
resolve(data.world);
|
|
36
|
+
else
|
|
37
|
+
reject(new WorldGenerationError(data.message));
|
|
38
|
+
};
|
|
39
|
+
worker.onerror = (event) => {
|
|
40
|
+
event.preventDefault();
|
|
41
|
+
finish();
|
|
42
|
+
reject(new Error(event.message || 'World generation worker failed.'));
|
|
43
|
+
};
|
|
44
|
+
try {
|
|
45
|
+
worker.postMessage(request);
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
finish();
|
|
49
|
+
reject(error);
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Generate from blueprint + scenario data. The main thread takes over only
|
|
55
|
+
* when the worker is unavailable: it cannot be created, or it fails to start
|
|
56
|
+
* or run (`onerror`). A generation error the worker reports is thrown as a
|
|
57
|
+
* {@link WorldGenerationError}, never generated a second time. The main-thread
|
|
58
|
+
* fallback is a lazy chunk, so the generator is absent from the player's
|
|
59
|
+
* initial graph.
|
|
60
|
+
*/
|
|
61
|
+
export async function generatePlayerWorld(blueprint, scenario, options = {}, fallbackContext) {
|
|
62
|
+
try {
|
|
63
|
+
const worker = (options.createWorker ?? createBrowserWorker)();
|
|
64
|
+
return await generateWithWorker(worker, { blueprint, scenario });
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
if (error instanceof WorldGenerationError)
|
|
68
|
+
throw error;
|
|
69
|
+
return generateOnMainThread(blueprint, scenario, fallbackContext);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
/** Keep the runtime contract; only the data needed by the worker crosses threads. */
|
|
73
|
+
export function withWorkerGeneration(definition, blueprint, options = {}) {
|
|
74
|
+
return {
|
|
75
|
+
...definition,
|
|
76
|
+
generate: (context) => generatePlayerWorld(blueprint, context.scenario, options, context),
|
|
77
|
+
// Scenario loads call this, so the main thread never builds a context.
|
|
78
|
+
generateWorld: (scenario) => generatePlayerWorld(blueprint, scenario, options),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Blueprint } from '@protoyard/blueprint';
|
|
2
|
+
import type { Scenario, WorldSeed } from '@protoyard/core';
|
|
3
|
+
export interface GenerateWorldRequest {
|
|
4
|
+
blueprint: Blueprint;
|
|
5
|
+
scenario: Scenario;
|
|
6
|
+
}
|
|
7
|
+
export type GenerateWorldReply = {
|
|
8
|
+
ok: true;
|
|
9
|
+
world: WorldSeed;
|
|
10
|
+
} | {
|
|
11
|
+
ok: false;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { type PlayerIssue, type PlayerMessage } from './protocol.ts';
|
|
2
|
+
/**
|
|
3
|
+
* The embedding side of `protoyard-player/1`, for pages that frame the
|
|
4
|
+
* player (protoyard.app/play, `protoyard quick` iterate):
|
|
5
|
+
*
|
|
6
|
+
* const player = connectPlayer({ frame: iframe, playerOrigin: 'https://protoyard.app' });
|
|
7
|
+
* await player.ready;
|
|
8
|
+
* const { namespace } = await player.load(blueprint);
|
|
9
|
+
* await player.replace(editedBlueprint); // live iterate
|
|
10
|
+
*
|
|
11
|
+
* The frame's URL must name this page's origin in `?embedder=`. Messages are
|
|
12
|
+
* accepted only from the frame's window at `playerOrigin`.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PlayerEmbedError extends Error {
|
|
15
|
+
readonly issues: PlayerIssue[];
|
|
16
|
+
constructor(message: string, issues?: PlayerIssue[]);
|
|
17
|
+
}
|
|
18
|
+
/** The host window surface the client needs (tests pass a fake). */
|
|
19
|
+
export interface ClientWindow {
|
|
20
|
+
addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
21
|
+
removeEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
22
|
+
}
|
|
23
|
+
export interface ConnectPlayerOptions {
|
|
24
|
+
/** The iframe running the player (or anything exposing its window). */
|
|
25
|
+
frame: {
|
|
26
|
+
contentWindow: {
|
|
27
|
+
postMessage(message: unknown, targetOrigin: string): void;
|
|
28
|
+
} | null;
|
|
29
|
+
};
|
|
30
|
+
/** The player's exact origin; never `*`. */
|
|
31
|
+
playerOrigin: string;
|
|
32
|
+
window?: ClientWindow;
|
|
33
|
+
/** How long `ready` and each request may take (default 30 s). */
|
|
34
|
+
timeoutMs?: number;
|
|
35
|
+
}
|
|
36
|
+
export interface PlayerConnection {
|
|
37
|
+
/** Resolves with the player's `ready` message. */
|
|
38
|
+
ready: Promise<Extract<PlayerMessage, {
|
|
39
|
+
type: 'ready';
|
|
40
|
+
}>>;
|
|
41
|
+
load(blueprint: unknown): Promise<{
|
|
42
|
+
namespace: string;
|
|
43
|
+
name: string;
|
|
44
|
+
}>;
|
|
45
|
+
replace(blueprint: unknown): Promise<{
|
|
46
|
+
namespace: string;
|
|
47
|
+
name: string;
|
|
48
|
+
}>;
|
|
49
|
+
close(): void;
|
|
50
|
+
}
|
|
51
|
+
export declare function connectPlayer(options: ConnectPlayerOptions): PlayerConnection;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { isPlayerMessage, PLAYER_PROTOCOL, } from "./protocol.js";
|
|
2
|
+
/**
|
|
3
|
+
* The embedding side of `protoyard-player/1`, for pages that frame the
|
|
4
|
+
* player (protoyard.app/play, `protoyard quick` iterate):
|
|
5
|
+
*
|
|
6
|
+
* const player = connectPlayer({ frame: iframe, playerOrigin: 'https://protoyard.app' });
|
|
7
|
+
* await player.ready;
|
|
8
|
+
* const { namespace } = await player.load(blueprint);
|
|
9
|
+
* await player.replace(editedBlueprint); // live iterate
|
|
10
|
+
*
|
|
11
|
+
* The frame's URL must name this page's origin in `?embedder=`. Messages are
|
|
12
|
+
* accepted only from the frame's window at `playerOrigin`.
|
|
13
|
+
*/
|
|
14
|
+
export class PlayerEmbedError extends Error {
|
|
15
|
+
issues;
|
|
16
|
+
constructor(message, issues = []) {
|
|
17
|
+
super(message);
|
|
18
|
+
this.name = 'PlayerEmbedError';
|
|
19
|
+
this.issues = issues;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export function connectPlayer(options) {
|
|
23
|
+
const { playerOrigin } = options;
|
|
24
|
+
if (playerOrigin === '*' || !/^https?:\/\/[^/]+$/.test(playerOrigin)) {
|
|
25
|
+
throw new PlayerEmbedError(`playerOrigin must be an exact http(s) origin, got "${playerOrigin}".`);
|
|
26
|
+
}
|
|
27
|
+
const host = options.window ?? globalThis;
|
|
28
|
+
const timeoutMs = options.timeoutMs ?? 30_000;
|
|
29
|
+
const waiting = new Map();
|
|
30
|
+
let sequence = 0;
|
|
31
|
+
let closed = false;
|
|
32
|
+
let markReady = () => { };
|
|
33
|
+
let failReady = () => { };
|
|
34
|
+
const ready = new Promise((resolve, reject) => {
|
|
35
|
+
markReady = resolve;
|
|
36
|
+
failReady = reject;
|
|
37
|
+
});
|
|
38
|
+
const readyTimer = setTimeout(() => failReady(new PlayerEmbedError('The player did not report ready in time.')), timeoutMs);
|
|
39
|
+
const onMessage = (event) => {
|
|
40
|
+
if (event.origin !== playerOrigin)
|
|
41
|
+
return;
|
|
42
|
+
if (!options.frame.contentWindow || event.source !== options.frame.contentWindow)
|
|
43
|
+
return;
|
|
44
|
+
const data = event.data;
|
|
45
|
+
if (!isPlayerMessage(data))
|
|
46
|
+
return;
|
|
47
|
+
if (data.type === 'ready') {
|
|
48
|
+
clearTimeout(readyTimer);
|
|
49
|
+
markReady(data);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const entry = waiting.get(data.id);
|
|
53
|
+
if (!entry)
|
|
54
|
+
return;
|
|
55
|
+
waiting.delete(data.id);
|
|
56
|
+
if (data.type === 'loaded')
|
|
57
|
+
entry.resolve({ namespace: data.namespace, name: data.name });
|
|
58
|
+
else
|
|
59
|
+
entry.reject(new PlayerEmbedError(data.issues[0]?.message ?? 'The player refused the blueprint.', data.issues));
|
|
60
|
+
};
|
|
61
|
+
host.addEventListener('message', onMessage);
|
|
62
|
+
function send(type, blueprint) {
|
|
63
|
+
if (closed)
|
|
64
|
+
return Promise.reject(new PlayerEmbedError('The connection is closed.'));
|
|
65
|
+
const target = options.frame.contentWindow;
|
|
66
|
+
if (!target)
|
|
67
|
+
return Promise.reject(new PlayerEmbedError('The player frame has no window yet.'));
|
|
68
|
+
sequence += 1;
|
|
69
|
+
const id = `req-${sequence}`;
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const timer = setTimeout(() => {
|
|
72
|
+
waiting.delete(id);
|
|
73
|
+
reject(new PlayerEmbedError(`The player did not answer ${type} in time.`));
|
|
74
|
+
}, timeoutMs);
|
|
75
|
+
waiting.set(id, {
|
|
76
|
+
resolve(value) {
|
|
77
|
+
clearTimeout(timer);
|
|
78
|
+
resolve(value);
|
|
79
|
+
},
|
|
80
|
+
reject(error) {
|
|
81
|
+
clearTimeout(timer);
|
|
82
|
+
reject(error);
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
target.postMessage({ protocol: PLAYER_PROTOCOL, type, id, blueprint }, playerOrigin);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
return {
|
|
89
|
+
ready,
|
|
90
|
+
load: (blueprint) => send('load', blueprint),
|
|
91
|
+
replace: (blueprint) => send('replace', blueprint),
|
|
92
|
+
close() {
|
|
93
|
+
closed = true;
|
|
94
|
+
clearTimeout(readyTimer);
|
|
95
|
+
host.removeEventListener('message', onMessage);
|
|
96
|
+
for (const entry of waiting.values())
|
|
97
|
+
entry.reject(new PlayerEmbedError('The connection is closed.'));
|
|
98
|
+
waiting.clear();
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { AnyBlueprint } from '@protoyard/blueprint';
|
|
2
|
+
import { type EmbedListener } from './listener.ts';
|
|
3
|
+
import type { PlayerRequestType } from './protocol.ts';
|
|
4
|
+
export { connectPlayer, type PlayerConnection, PlayerEmbedError } from './client.ts';
|
|
5
|
+
export { createEmbedListener, type EmbedListener } from './listener.ts';
|
|
6
|
+
export { DEFAULT_ALLOWLIST, embedderOrigins, exactOrigin } from './origins.ts';
|
|
7
|
+
export { checkRequest, isPlayerMessage, MAX_MESSAGE_BLUEPRINT_BYTES, PLAYER_PROTOCOL, type PlayerIssue, type PlayerMessage, type PlayerRequestType, } from './protocol.ts';
|
|
8
|
+
/** Something `startEmbed` can tear down before running the next blueprint. */
|
|
9
|
+
export interface RunningPrototype {
|
|
10
|
+
namespace: string;
|
|
11
|
+
destroy(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export interface StartEmbedOptions {
|
|
14
|
+
window: Window;
|
|
15
|
+
/**
|
|
16
|
+
* Swaps the running prototype for a validated blueprint, when the caller
|
|
17
|
+
* owns what is running (the player's run.ts, which live reload also swaps):
|
|
18
|
+
* it tears down the current prototype itself, so the embed keeps no copy.
|
|
19
|
+
*/
|
|
20
|
+
replace?(blueprint: AnyBlueprint, type: PlayerRequestType): Promise<RunningPrototype>;
|
|
21
|
+
/** Without `replace`: boots a validated blueprint (in the player: `bootPlayer`). */
|
|
22
|
+
boot?(blueprint: AnyBlueprint, type: PlayerRequestType): Promise<RunningPrototype>;
|
|
23
|
+
/** Without `replace`: what is running now, if anything, torn down before each boot. */
|
|
24
|
+
current?: RunningPrototype | null;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Turns the embed protocol on for a framed player: listens to its parent
|
|
28
|
+
* on the allowed origins and swaps the running prototype on each accepted
|
|
29
|
+
* `load` or `replace`. Returns null (and listens to nothing) when the page is
|
|
30
|
+
* not framed, so a top-level player never accepts messages.
|
|
31
|
+
*/
|
|
32
|
+
export declare function startEmbed(options: StartEmbedOptions): EmbedListener | null;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { createEmbedListener } from "./listener.js";
|
|
2
|
+
import { embedderOrigins } from "./origins.js";
|
|
3
|
+
export { connectPlayer, PlayerEmbedError } from "./client.js";
|
|
4
|
+
export { createEmbedListener } from "./listener.js";
|
|
5
|
+
export { DEFAULT_ALLOWLIST, embedderOrigins, exactOrigin } from "./origins.js";
|
|
6
|
+
export { checkRequest, isPlayerMessage, MAX_MESSAGE_BLUEPRINT_BYTES, PLAYER_PROTOCOL, } from "./protocol.js";
|
|
7
|
+
/**
|
|
8
|
+
* Turns the embed protocol on for a framed player: listens to its parent
|
|
9
|
+
* on the allowed origins and swaps the running prototype on each accepted
|
|
10
|
+
* `load` or `replace`. Returns null (and listens to nothing) when the page is
|
|
11
|
+
* not framed, so a top-level player never accepts messages.
|
|
12
|
+
*/
|
|
13
|
+
export function startEmbed(options) {
|
|
14
|
+
const win = options.window;
|
|
15
|
+
if (!win.parent || win.parent === win)
|
|
16
|
+
return null;
|
|
17
|
+
const origins = embedderOrigins(win.location.search, win.location.origin);
|
|
18
|
+
if (origins.length === 0)
|
|
19
|
+
return null;
|
|
20
|
+
const { replace, boot } = options;
|
|
21
|
+
if (!replace && !boot)
|
|
22
|
+
throw new Error('startEmbed needs replace() or boot().');
|
|
23
|
+
let current = options.current ?? null;
|
|
24
|
+
return createEmbedListener({
|
|
25
|
+
window: win,
|
|
26
|
+
parent: win.parent,
|
|
27
|
+
origins,
|
|
28
|
+
async apply(blueprint, type) {
|
|
29
|
+
if (replace)
|
|
30
|
+
return { namespace: (await replace(blueprint, type)).namespace };
|
|
31
|
+
await current?.destroy();
|
|
32
|
+
current = null;
|
|
33
|
+
current = await boot(blueprint, type);
|
|
34
|
+
return { namespace: current.namespace };
|
|
35
|
+
},
|
|
36
|
+
});
|
|
37
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { type AnyBlueprint } from '@protoyard/blueprint';
|
|
2
|
+
import { type PlayerMessage, type PlayerRequestType } from './protocol.ts';
|
|
3
|
+
/** The window surface the listener needs (tests pass a fake). */
|
|
4
|
+
export interface EmbedWindow {
|
|
5
|
+
addEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
6
|
+
removeEventListener(type: 'message', listener: (event: MessageEvent) => void): void;
|
|
7
|
+
}
|
|
8
|
+
/** The parent the player answers; `postMessage` always names an exact origin. */
|
|
9
|
+
export interface EmbedParent {
|
|
10
|
+
postMessage(message: PlayerMessage, targetOrigin: string): void;
|
|
11
|
+
}
|
|
12
|
+
export interface EmbedListenerOptions {
|
|
13
|
+
window: EmbedWindow;
|
|
14
|
+
parent: EmbedParent;
|
|
15
|
+
/** Exact origins allowed to send requests (see `embedderOrigins`). */
|
|
16
|
+
origins: readonly string[];
|
|
17
|
+
/**
|
|
18
|
+
* Runs a validated blueprint. Resolves with what the parent is told; a
|
|
19
|
+
* throw is reported as `boot-failed`, never as success.
|
|
20
|
+
*/
|
|
21
|
+
apply(blueprint: AnyBlueprint, type: PlayerRequestType): Promise<{
|
|
22
|
+
namespace: string;
|
|
23
|
+
}>;
|
|
24
|
+
maxBytes?: number;
|
|
25
|
+
}
|
|
26
|
+
export interface EmbedListener {
|
|
27
|
+
/** Settles when no request is running or waiting (tests). */
|
|
28
|
+
idle(): Promise<void>;
|
|
29
|
+
stop(): void;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Listens for `protoyard-player/1` requests from the parent window and
|
|
33
|
+
* answers each one exactly once. Requests run one at a time; while one runs,
|
|
34
|
+
* only the newest waiting request is kept (live iterate sends many
|
|
35
|
+
* `replace`s), and the dropped one is answered `superseded`.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createEmbedListener(options: EmbedListenerOptions): EmbedListener;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { loadUntrustedDocument } from '@protoyard/blueprint';
|
|
2
|
+
import { checkRequest, MAX_MESSAGE_BLUEPRINT_BYTES, PLAYER_PROTOCOL, playerIssue, } from "./protocol.js";
|
|
3
|
+
/**
|
|
4
|
+
* Listens for `protoyard-player/1` requests from the parent window and
|
|
5
|
+
* answers each one exactly once. Requests run one at a time; while one runs,
|
|
6
|
+
* only the newest waiting request is kept (live iterate sends many
|
|
7
|
+
* `replace`s), and the dropped one is answered `superseded`.
|
|
8
|
+
*/
|
|
9
|
+
export function createEmbedListener(options) {
|
|
10
|
+
const origins = new Set(options.origins);
|
|
11
|
+
const maxBytes = options.maxBytes ?? MAX_MESSAGE_BLUEPRINT_BYTES;
|
|
12
|
+
let running = null;
|
|
13
|
+
let waiting = null;
|
|
14
|
+
let stopped = false;
|
|
15
|
+
const reply = (message, origin) => {
|
|
16
|
+
if (!stopped)
|
|
17
|
+
options.parent.postMessage(message, origin);
|
|
18
|
+
};
|
|
19
|
+
const fail = (id, issues, origin) => reply({ protocol: PLAYER_PROTOCOL, type: 'error', id, issues }, origin);
|
|
20
|
+
async function run({ request, origin }) {
|
|
21
|
+
// Any kind (ADR-036): apps keep the app loader; decks, pages and docs their own caps.
|
|
22
|
+
const loaded = await loadUntrustedDocument(request.blueprint, { maxBytes });
|
|
23
|
+
if (!loaded.success) {
|
|
24
|
+
fail(request.id, loaded.issues, origin);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
try {
|
|
28
|
+
const { namespace } = await options.apply(loaded.blueprint, request.type);
|
|
29
|
+
reply({
|
|
30
|
+
protocol: PLAYER_PROTOCOL,
|
|
31
|
+
type: 'loaded',
|
|
32
|
+
id: request.id,
|
|
33
|
+
namespace,
|
|
34
|
+
name: loaded.blueprint.name,
|
|
35
|
+
}, origin);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
fail(request.id, [
|
|
39
|
+
playerIssue('boot-failed', `The blueprint is valid but the prototype did not start: ${error instanceof Error ? error.message : String(error)}`.slice(0, 500), 'Check the blueprint in `protoyard blueprint validate`, then send it again.'),
|
|
40
|
+
], origin);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
function drain() {
|
|
44
|
+
if (running || !waiting || stopped)
|
|
45
|
+
return;
|
|
46
|
+
const next = waiting;
|
|
47
|
+
waiting = null;
|
|
48
|
+
running = run(next).finally(() => {
|
|
49
|
+
running = null;
|
|
50
|
+
drain();
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
const onMessage = (event) => {
|
|
54
|
+
if (stopped)
|
|
55
|
+
return;
|
|
56
|
+
// Only the parent, and only from an allowed origin: everything else is ignored.
|
|
57
|
+
if (event.source !== options.parent)
|
|
58
|
+
return;
|
|
59
|
+
if (!origins.has(event.origin))
|
|
60
|
+
return;
|
|
61
|
+
const check = checkRequest(event.data, maxBytes);
|
|
62
|
+
if (check.kind === 'ignore')
|
|
63
|
+
return;
|
|
64
|
+
if (check.kind === 'reject') {
|
|
65
|
+
fail(check.id, check.issues, event.origin);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
if (waiting) {
|
|
69
|
+
fail(waiting.request.id, [
|
|
70
|
+
playerIssue('superseded', 'A newer blueprint arrived before this one started.', 'Nothing to do: the newest blueprint is the one that runs.'),
|
|
71
|
+
], waiting.origin);
|
|
72
|
+
}
|
|
73
|
+
waiting = { request: check.request, origin: event.origin };
|
|
74
|
+
drain();
|
|
75
|
+
};
|
|
76
|
+
options.window.addEventListener('message', onMessage);
|
|
77
|
+
for (const origin of origins) {
|
|
78
|
+
reply({ protocol: PLAYER_PROTOCOL, type: 'ready', accepts: ['load', 'replace'], maxBytes }, origin);
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
async idle() {
|
|
82
|
+
while (running || waiting)
|
|
83
|
+
await (running ?? Promise.resolve());
|
|
84
|
+
},
|
|
85
|
+
stop() {
|
|
86
|
+
stopped = true;
|
|
87
|
+
waiting = null;
|
|
88
|
+
options.window.removeEventListener('message', onMessage);
|
|
89
|
+
},
|
|
90
|
+
};
|
|
91
|
+
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Which pages may hand the player a blueprint (the embedding decision on
|
|
3
|
+
* `postMessage` origins): the player's own origin, plus origins named in
|
|
4
|
+
* `?embedder=` that ALSO match the build-time allowlist. Matching is on the
|
|
5
|
+
* exact serialized origin (`scheme://host[:port]`); `*`, `null`, paths,
|
|
6
|
+
* credentials and non-http(s) schemes never qualify.
|
|
7
|
+
*/
|
|
8
|
+
/** A build-time allowlist rule: an exact origin, or a host on any port. */
|
|
9
|
+
export type AllowRule = {
|
|
10
|
+
origin: string;
|
|
11
|
+
} | {
|
|
12
|
+
host: string;
|
|
13
|
+
schemes: ('http:' | 'https:')[];
|
|
14
|
+
};
|
|
15
|
+
/** protoyard.app, and local development on any port. */
|
|
16
|
+
export declare const DEFAULT_ALLOWLIST: readonly AllowRule[];
|
|
17
|
+
/**
|
|
18
|
+
* The CSP `frame-ancestors` sources for `rules`, so the pages allowed to
|
|
19
|
+
* frame the player are exactly the pages allowed to send it a blueprint
|
|
20
|
+
* (`vite.config.ts` builds PLAYER_FRAME_ANCESTORS from DEFAULT_ALLOWLIST).
|
|
21
|
+
*/
|
|
22
|
+
export declare function frameAncestorSources(rules: readonly AllowRule[]): string[];
|
|
23
|
+
/** The canonical origin `value` names, or null when it is not exactly an origin. */
|
|
24
|
+
export declare function exactOrigin(value: string): string | null;
|
|
25
|
+
export declare function allowedByRules(origin: string, rules: readonly AllowRule[]): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* The origins the player listens to. `search` is `location.search`;
|
|
28
|
+
* `?embedder=` may repeat. `selfOrigin` is `location.origin` (dropped when it
|
|
29
|
+
* is opaque, e.g. a `file:` page reports "null").
|
|
30
|
+
*/
|
|
31
|
+
export declare function embedderOrigins(search: string, selfOrigin: string, rules?: readonly AllowRule[]): string[];
|