camox 0.44.0 → 0.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AuthGate.js +0 -6
- package/dist/components/DeviceSelector.js +96 -0
- package/dist/components/PlatformLabel.js +20 -24
- package/dist/core/components/lexical/HighlightNode.js +1 -1
- package/dist/core/components/lexical/InlineContentEditable.js +15 -19
- package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
- package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
- package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
- package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
- package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
- package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
- package/dist/core/components/lexical/TextLinkPopover.js +169 -180
- package/dist/core/createApp.d.ts +241 -312
- package/dist/core/createApp.js +123 -29
- package/dist/core/createBlock.d.ts +5 -5
- package/dist/core/createBlock.js +385 -152
- package/dist/core/createCollection.d.ts +55 -0
- package/dist/core/createCollection.js +93 -0
- package/dist/core/createLayout.d.ts +197 -61
- package/dist/core/createLayout.js +114 -56
- package/dist/core/defineDocument.d.ts +3 -5
- package/dist/core/derivedRoutes.js +49 -1
- package/dist/core/dom.d.ts +13 -4
- package/dist/core/dom.js +44 -1
- package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
- package/dist/core/editing/BlockEditingRuntime.js +6 -15
- package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
- package/dist/core/editing/createEditableBlock.d.ts +754 -633
- package/dist/core/editing/createEditableBlock.js +2113 -1066
- package/dist/core/editing/referenceWrites.js +51 -0
- package/dist/core/editing/useLatestRecord.js +90 -0
- package/dist/core/hooks/useArtifactHost.js +139 -0
- package/dist/core/hooks/useFieldSelection.js +43 -18
- package/dist/core/hooks/useIsEditable.js +12 -10
- package/dist/core/hooks/useOverlayMessage.js +15 -19
- package/dist/core/lib/artifact.d.ts +21 -0
- package/dist/core/lib/artifact.js +154 -0
- package/dist/core/lib/artifactColors.js +123 -0
- package/dist/core/lib/artifactData.d.ts +1 -0
- package/dist/core/lib/artifactData.js +131 -0
- package/dist/core/lib/artifactHost.js +205 -0
- package/dist/core/lib/artifactRuntime.js +36 -0
- package/dist/core/lib/artifactTheme.js +57 -0
- package/dist/core/lib/contentType.d.ts +302 -106
- package/dist/core/lib/contentType.js +201 -173
- package/dist/core/lib/fieldTypes.js +3 -0
- package/dist/core/lib/iconTypes.d.ts +3 -3
- package/dist/core/lib/icons.d.ts +4 -4
- package/dist/core/lib/icons.js +40 -44
- package/dist/core/lib/imagePlaceholder.js +177 -0
- package/dist/core/lib/imageTransform.js +1 -1
- package/dist/core/lib/lexicalReact.d.ts +3 -1
- package/dist/core/lib/lexicalState.js +1 -1
- package/dist/core/lib/previewPaused.js +9 -0
- package/dist/core/lib/recordScope.js +316 -0
- package/dist/core/lib/reference.d.ts +81 -0
- package/dist/core/lib/reference.js +29 -0
- package/dist/core/lib/textLinks.js +7 -5
- package/dist/core/lib/textStyles.d.ts +5 -7
- package/dist/core/lib/textStyles.js +2 -2
- package/dist/core/notFound.d.ts +7 -0
- package/dist/core/notFound.js +11 -0
- package/dist/core/pageDestinations.js +6 -3
- package/dist/core/recordItem.js +34 -0
- package/dist/core/requestContext.d.ts +26 -0
- package/dist/core/requestContext.js +20 -0
- package/dist/features/canvas/CamoxCanvas.js +1401 -0
- package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
- package/dist/features/canvas/CanvasOverlays.js +254 -0
- package/dist/features/canvas/CanvasPageEdge.js +87 -0
- package/dist/features/canvas/CanvasPageFrame.js +333 -0
- package/dist/features/canvas/CanvasPageHeader.js +125 -0
- package/dist/features/canvas/CanvasPreviewPageSlot.js +123 -0
- package/dist/features/canvas/DerivedPagePathInput.js +238 -0
- package/dist/features/canvas/canvasCamera.js +229 -0
- package/dist/features/canvas/canvasFlight.js +104 -0
- package/dist/features/canvas/canvasFrameCapture.js +364 -0
- package/dist/features/canvas/canvasFrameDocument.js +302 -0
- package/dist/features/canvas/canvasFrameMode.js +53 -0
- package/dist/features/canvas/canvasInsertionSeams.js +44 -0
- package/dist/features/canvas/canvasItems.js +30 -0
- package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
- package/dist/features/canvas/canvasPages.js +79 -0
- package/dist/features/canvas/canvasScreenSpace.js +26 -0
- package/dist/features/canvas/canvasSelection.js +18 -0
- package/dist/features/canvas/canvasStore.js +60 -0
- package/dist/features/canvas/canvasThumbnails.js +304 -0
- package/dist/features/canvas/canvasZoom.js +10 -0
- package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
- package/dist/features/canvas/sidebar/CanvasNavigator.js +124 -0
- package/dist/features/canvas/sidebar/CanvasSidebar.js +54 -0
- package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
- package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
- package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
- package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
- package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
- package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
- package/dist/features/canvas/sidebar/PageInspector.js +157 -0
- package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
- package/dist/features/canvas/sidebar/PageOverview.js +27 -0
- package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
- package/dist/features/canvas/useCanvasCamera.js +783 -0
- package/dist/features/canvas/useCanvasFrame.js +148 -0
- package/dist/features/canvas/useCanvasFrameInput.js +97 -0
- package/dist/features/canvas/useCanvasNearness.js +57 -0
- package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
- package/dist/features/content/CamoxContent.d.ts +2 -5
- package/dist/features/content/CamoxContent.js +174 -271
- package/dist/features/content/CollectionItemSheetContext.js +106 -0
- package/dist/features/content/ContentAssets.js +315 -0
- package/dist/features/content/ContentCollection.js +663 -0
- package/dist/features/content/collection-form.js +58 -0
- package/dist/features/content/components/AssetCard.js +80 -84
- package/dist/features/content/components/AssetCardSkeleton.js +4 -8
- package/dist/features/content/components/ContentSidebar.js +129 -18
- package/dist/features/content/components/ContentSidebarGroup.js +37 -0
- package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
- package/dist/features/content/components/MissingFromLocale.js +282 -0
- package/dist/features/content/components/UploadDropZone.js +27 -31
- package/dist/features/content/components/UploadProgressDrawer.js +90 -98
- package/dist/features/navigation/navigation.d.ts +66 -20
- package/dist/features/navigation/navigation.js +257 -90
- package/dist/features/og/defaultFonts.js +8 -8
- package/dist/features/og/geist-variable-ttf-base64.js +1 -1
- package/dist/features/og/imageResponse.d.ts +8 -0
- package/dist/features/og/imageResponse.js +26 -0
- package/dist/features/page/CuratedPageContent.js +167 -0
- package/dist/features/page/DerivedPageContent.js +26 -30
- package/dist/features/page/SharedLayoutContent.js +25 -27
- package/dist/features/preview/CamoxPreview.d.ts +23 -61
- package/dist/features/preview/CamoxPreview.js +816 -537
- package/dist/features/preview/EditablePageContent.js +1 -1
- package/dist/features/preview/EditablePageExperience.js +16 -22
- package/dist/features/preview/components/AddBlockSheet.js +273 -0
- package/dist/features/preview/components/AssetFieldEditor.js +173 -154
- package/dist/features/preview/components/AssetLightbox.js +181 -134
- package/dist/features/preview/components/AssetPickerModal.js +153 -170
- package/dist/features/preview/components/BlockActionsPopover.js +150 -149
- package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
- package/dist/features/preview/components/BlockThumbnail.js +172 -98
- package/dist/features/preview/components/CanvasPreview.js +243 -0
- package/dist/features/preview/components/CreatePageModal.js +128 -137
- package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
- package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
- package/dist/features/preview/components/DrillRow.js +150 -0
- package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
- package/dist/features/preview/components/FieldToolbar.js +160 -110
- package/dist/features/preview/components/Frame.js +108 -20
- package/dist/features/preview/components/IconFieldEditor.js +62 -66
- package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
- package/dist/features/preview/components/LinkFieldEditor.js +135 -139
- package/dist/features/preview/components/Metadata.js +22 -30
- package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
- package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
- package/dist/features/preview/components/OverlayTracker.js +9 -41
- package/dist/features/preview/components/Overlays.js +81 -69
- package/dist/features/preview/components/PageInfo.js +1748 -0
- package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
- package/dist/features/preview/components/PageLocationFieldset.js +112 -116
- package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
- package/dist/features/preview/components/PageNicknameField.js +22 -26
- package/dist/features/preview/components/PagePicker.js +128 -130
- package/dist/features/preview/components/PageTree.js +525 -532
- package/dist/features/preview/components/PreviewActivation.js +28 -32
- package/dist/features/preview/components/PreviewPanel.js +620 -319
- package/dist/features/preview/components/PreviewToolbar.js +105 -333
- package/dist/features/preview/components/RecordCard.js +80 -0
- package/dist/features/preview/components/RecordCombobox.js +178 -0
- package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
- package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
- package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
- package/dist/features/preview/components/RepeatableItemsList.js +125 -138
- package/dist/features/preview/components/SelectionEditor.js +993 -0
- package/dist/features/preview/components/ShikiMarkdown.js +14 -18
- package/dist/features/preview/components/SidebarSection.js +52 -64
- package/dist/features/preview/components/StudioEditingFallback.js +56 -0
- package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
- package/dist/features/preview/components/blockGridNavigation.js +15 -0
- package/dist/features/preview/components/contentFieldSchema.js +8 -0
- package/dist/features/preview/components/useFieldWriter.js +200 -0
- package/dist/features/preview/components/useRecordView.js +383 -0
- package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
- package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
- package/dist/features/preview/editingFrame.js +197 -0
- package/dist/features/preview/overlayHighlights.js +17 -44
- package/dist/features/preview/overlayMessages.js +72 -1
- package/dist/features/preview/pageRecord.js +189 -0
- package/dist/features/preview/previewConstants.js +6 -2
- package/dist/features/preview/previewPageFrame.js +95 -0
- package/dist/features/preview/previewPreparation.js +7 -0
- package/dist/features/preview/previewSelection.js +32 -63
- package/dist/features/preview/previewStore.js +225 -123
- package/dist/features/preview/referencePickerFocus.js +29 -0
- package/dist/features/preview/repeatableItemTargets.js +56 -0
- package/dist/features/preview/selectionReveal.js +21 -0
- package/dist/features/preview/usePreviewViewportActions.js +114 -0
- package/dist/features/preview/viewportContinuity.js +109 -0
- package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
- package/dist/features/provider/CamoxProvider.d.ts +3 -6
- package/dist/features/provider/CamoxProvider.js +38 -50
- package/dist/features/provider/CoreCamoxProvider.js +69 -50
- package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
- package/dist/features/provider/PreviewSignInPage.js +54 -0
- package/dist/features/provider/components/CamoxAppContext.js +11 -11
- package/dist/features/provider/components/CommandPalette.js +75 -82
- package/dist/features/provider/useAdminShortcuts.js +7 -11
- package/dist/features/routes/pageRuntime.d.ts +44 -4
- package/dist/features/routes/pageRuntime.js +244 -137
- package/dist/features/runtime/RuntimeChrome.js +117 -115
- package/dist/features/runtime/alternates.js +64 -0
- package/dist/features/runtime/analytics.d.ts +7 -0
- package/dist/features/runtime/analytics.js +66 -0
- package/dist/features/runtime/artifactSources.js +87 -0
- package/dist/features/runtime/editingFallback.js +20 -0
- package/dist/features/runtime/linkPrefetch.js +97 -0
- package/dist/features/runtime/livePages.js +62 -0
- package/dist/features/runtime/llmsTxt.js +40 -0
- package/dist/features/runtime/loopbackFetch.js +18 -0
- package/dist/features/runtime/navigationAccessibility.js +51 -0
- package/dist/features/runtime/navigationTarget.js +23 -2
- package/dist/features/runtime/pageApp.js +229 -158
- package/dist/features/runtime/pageBlockTypes.js +20 -0
- package/dist/features/runtime/pageClient.d.ts +2 -4
- package/dist/features/runtime/pageClient.js +18 -3
- package/dist/features/runtime/pageNavigation.js +254 -32
- package/dist/features/runtime/pageServer.d.ts +2 -4
- package/dist/features/runtime/pageServer.js +6 -2
- package/dist/features/runtime/pageViewport.js +7 -0
- package/dist/features/runtime/runtime.d.ts +54 -24
- package/dist/features/runtime/runtime.js +766 -191
- package/dist/features/runtime/runtimeChromeLoader.js +58 -0
- package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
- package/dist/features/runtime/runtimeRoutes.js +25 -0
- package/dist/features/runtime/scrollRestoration.js +133 -0
- package/dist/features/runtime/studioApp.d.ts +4 -3
- package/dist/features/runtime/studioApp.js +5 -9
- package/dist/features/runtime/studioClient.d.ts +2 -4
- package/dist/features/runtime/studioClient.js +12 -3
- package/dist/features/runtime/studioServer.d.ts +2 -4
- package/dist/features/runtime/studioServer.js +6 -1
- package/dist/features/runtime/worker.d.ts +6 -0
- package/dist/features/runtime/worker.js +23 -0
- package/dist/features/runtime/workerRequest.js +44 -0
- package/dist/features/studio/CamoxStudio.d.ts +2 -6
- package/dist/features/studio/CamoxStudio.js +34 -49
- package/dist/features/studio/FollowAgentProvider.js +327 -0
- package/dist/features/studio/components/ChatSidebar.js +356 -0
- package/dist/features/studio/components/DraftsControl.js +676 -0
- package/dist/features/studio/components/FaviconDialog.js +318 -0
- package/dist/features/studio/components/LocalePicker.js +785 -0
- package/dist/features/studio/components/Navbar.js +123 -103
- package/dist/features/studio/components/ProjectMenu.js +239 -260
- package/dist/features/studio/components/RenameDraftDialog.js +206 -0
- package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
- package/dist/features/studio/components/ThreadComposer.js +157 -0
- package/dist/features/studio/components/ThreadMarkdown.js +113 -0
- package/dist/features/studio/components/ThreadMessages.js +270 -0
- package/dist/features/studio/components/UserButton.js +34 -23
- package/dist/features/studio/draftLabel.js +33 -0
- package/dist/features/studio/draftNotice.js +13 -0
- package/dist/features/studio/followAgent.js +241 -0
- package/dist/features/studio/followAgentContext.js +7 -0
- package/dist/features/studio/localeOptions.js +118 -0
- package/dist/features/studio/localeSwitch.js +19 -0
- package/dist/features/studio/routes.js +26 -1
- package/dist/features/studio/studioStore.js +64 -1
- package/dist/features/studio/useTheme.js +24 -27
- package/dist/features/vite/artifactRuntimeMinification.js +36 -0
- package/dist/features/vite/blockBoilerplate.js +6 -5
- package/dist/features/vite/blockChunks.js +31 -0
- package/dist/features/vite/bundlerLogs.js +17 -0
- package/dist/features/vite/definitionsSync.js +158 -226
- package/dist/features/vite/devAuthentication.js +4 -16
- package/dist/features/vite/devSignIn.js +87 -0
- package/dist/features/vite/iconGeneration.js +1 -1
- package/dist/features/vite/layoutGeneration.js +11 -1
- package/dist/features/vite/publishSeededContent.js +30 -0
- package/dist/features/vite/routeGeneration.js +6 -7
- package/dist/features/vite/runtimeDev.js +80 -99
- package/dist/features/vite/vite.d.ts +51 -31
- package/dist/features/vite/vite.js +224 -127
- package/dist/features/vite/workerBuild.js +39 -0
- package/dist/hooks/use-debounced-field.js +116 -47
- package/dist/hooks/use-file-upload.js +114 -67
- package/dist/hooks/use-marquee-selection.js +32 -36
- package/dist/hooks/use-page-destinations.js +69 -37
- package/dist/lib/api-client-server.d.ts +5 -0
- package/dist/lib/api-client-server.js +10 -4
- package/dist/lib/api-client.d.ts +6 -0
- package/dist/lib/api-client.js +51 -16
- package/dist/lib/api-socket.js +17 -0
- package/dist/lib/auth-page-styles.js +39 -0
- package/dist/lib/auth.js +129 -61
- package/dist/lib/collection-cache.js +23 -0
- package/dist/lib/draft-scope.d.ts +4 -0
- package/dist/lib/draft-scope.js +222 -0
- package/dist/lib/html.js +12 -0
- package/dist/lib/link-pages.js +154 -0
- package/dist/lib/locale-path.d.ts +22 -0
- package/dist/lib/locale-path.js +57 -0
- package/dist/lib/normalized-data.js +252 -152
- package/dist/lib/preview-handoff.js +2 -2
- package/dist/lib/queries.d.ts +11 -0
- package/dist/lib/queries.js +70 -141
- package/dist/lib/studio-reads.d.ts +14 -0
- package/dist/lib/studio-reads.js +554 -0
- package/dist/lib/use-project-room.js +50 -50
- package/dist/lib/use-thread.js +310 -0
- package/dist/lib/utils.js +25 -29
- package/dist/lib/view-locale-context.js +22 -0
- package/dist/lib/view-locale.js +46 -0
- package/dist/package.js +5 -0
- package/dist/studio-overlays.css +41 -151
- package/dist/studio.css +2 -2
- package/package.json +70 -73
- package/skills/camox/SKILL.md +16 -11
- package/skills/camox/references/artifacts.md +179 -0
- package/skills/camox/references/block-definitions.md +75 -59
- package/skills/camox/references/cli-common.md +9 -11
- package/skills/camox/references/cli-content.md +92 -69
- package/skills/camox/references/cli-publishing.md +26 -0
- package/skills/camox/references/dom-integrations.md +27 -0
- package/skills/camox/references/field-styling.md +4 -4
- package/skills/camox/references/layout-definitions.md +16 -14
- package/skills/camox/references/localization.md +56 -0
- package/skills/camox/references/routed-layouts.md +133 -15
- package/skills/camox-expand/SKILL.md +70 -0
- package/skills/camox-expand/references/jobs.md +39 -0
- package/skills/camoxify/SKILL.md +29 -7
- package/dist/core/components/AddBlockControlBar.js +0 -78
- package/dist/core/hooks/useRequireDraftSource.js +0 -23
- package/dist/features/metadata/sitemap.d.ts +0 -8
- package/dist/features/metadata/sitemap.js +0 -17
- package/dist/features/og/imageResponse.node.d.ts +0 -12
- package/dist/features/og/imageResponse.node.js +0 -49
- package/dist/features/og/imageResponse.workerd.d.ts +0 -12
- package/dist/features/og/imageResponse.workerd.js +0 -40
- package/dist/features/page/PublishedPageContent.js +0 -205
- package/dist/features/page/PublishedPageExperience.js +0 -23
- package/dist/features/preview/DerivedPreview.js +0 -134
- package/dist/features/preview/commentsEnabled.js +0 -8
- package/dist/features/preview/components/AddBlockSidebar.js +0 -381
- package/dist/features/preview/components/AttachedComments.js +0 -331
- package/dist/features/preview/components/CommentHeader.js +0 -122
- package/dist/features/preview/components/CommentSidebar.js +0 -29
- package/dist/features/preview/components/CommentTargetQuote.js +0 -167
- package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
- package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
- package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
- package/dist/features/preview/components/LeftSidebar.js +0 -68
- package/dist/features/preview/components/PageEditorSidebar.js +0 -563
- package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
- package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
- package/dist/features/preview/components/PageStatusBadge.js +0 -97
- package/dist/features/preview/components/PeekedBlock.js +0 -217
- package/dist/features/preview/components/PreviewComments.js +0 -56
- package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
- package/dist/features/preview/components/PublicationRow.js +0 -422
- package/dist/features/preview/components/PublishDialog.js +0 -194
- package/dist/features/preview/components/RightSidebar.js +0 -59
- package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
- package/dist/features/preview/previewCommentsStore.js +0 -135
- package/dist/features/preview/publication.js +0 -81
- package/dist/features/preview/usePageComments.js +0 -39
- package/dist/features/runtime/SharedChromeContext.js +0 -7
- package/dist/features/studio/components/EnvironmentMenu.js +0 -425
- package/dist/features/vite/appGeneration.js +0 -89
- package/dist/lib/view-queries.js +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
- package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
- package/skills/camox/references/cli-environments.md +0 -37
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { c } from "react/compiler-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
|
|
5
|
+
//#region src/features/runtime/runtimeChromeLoader.tsx
|
|
6
|
+
let loadedModule;
|
|
7
|
+
let loading;
|
|
8
|
+
/**
|
|
9
|
+
* Studio chrome is only for members, so anonymous visitors never download it. Load it before
|
|
10
|
+
* rendering or hydrating a member's document: both then render it in place, without suspending.
|
|
11
|
+
*/
|
|
12
|
+
function loadRuntimeChrome() {
|
|
13
|
+
loading ??= import("./RuntimeChrome.js").then((module) => {
|
|
14
|
+
loadedModule = { default: module.RuntimeChrome };
|
|
15
|
+
return loadedModule;
|
|
16
|
+
});
|
|
17
|
+
return loading;
|
|
18
|
+
}
|
|
19
|
+
const LazyRuntimeChrome = React.lazy(() => {
|
|
20
|
+
if (!loadedModule) return loadRuntimeChrome();
|
|
21
|
+
const module = loadedModule;
|
|
22
|
+
return { then: (resolve) => resolve(module) };
|
|
23
|
+
});
|
|
24
|
+
/** Shows `fallback` while the chrome loads, when a visitor signs in without a reload. */
|
|
25
|
+
function RuntimeChromeSlot(t0) {
|
|
26
|
+
const $ = c(8);
|
|
27
|
+
let fallback;
|
|
28
|
+
let props;
|
|
29
|
+
if ($[0] !== t0) {
|
|
30
|
+
({fallback, ...props} = t0);
|
|
31
|
+
$[0] = t0;
|
|
32
|
+
$[1] = fallback;
|
|
33
|
+
$[2] = props;
|
|
34
|
+
} else {
|
|
35
|
+
fallback = $[1];
|
|
36
|
+
props = $[2];
|
|
37
|
+
}
|
|
38
|
+
let t1;
|
|
39
|
+
if ($[3] !== props) {
|
|
40
|
+
t1 = /* @__PURE__ */ jsx(LazyRuntimeChrome, { ...props });
|
|
41
|
+
$[3] = props;
|
|
42
|
+
$[4] = t1;
|
|
43
|
+
} else t1 = $[4];
|
|
44
|
+
let t2;
|
|
45
|
+
if ($[5] !== fallback || $[6] !== t1) {
|
|
46
|
+
t2 = /* @__PURE__ */ jsx(React.Suspense, {
|
|
47
|
+
fallback,
|
|
48
|
+
children: t1
|
|
49
|
+
});
|
|
50
|
+
$[5] = fallback;
|
|
51
|
+
$[6] = t1;
|
|
52
|
+
$[7] = t2;
|
|
53
|
+
} else t2 = $[7];
|
|
54
|
+
return t2;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
//#endregion
|
|
58
|
+
export { RuntimeChromeSlot, loadRuntimeChrome };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/features/runtime/runtimeRoutes.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* The URLs the runtime answers that aren't pages or the Studio. Worker request filtering, runtime
|
|
4
|
+
* route matching and client navigation all read this list, so a new one can't be forgotten in any
|
|
5
|
+
* of them. Prefix rules stay with their readers: the Worker also answers every `/camox/` Studio
|
|
6
|
+
* path, and client navigation also skips any other `/_camox/` path.
|
|
7
|
+
* No imports: client navigation ships this module in the browser bundle.
|
|
8
|
+
*/
|
|
9
|
+
export declare const RUNTIME_ROUTE_PATHS: {
|
|
10
|
+
readonly data: "/_camox/data";
|
|
11
|
+
readonly health: "/_camox/health";
|
|
12
|
+
readonly registry: "/_camox/registry";
|
|
13
|
+
readonly routes: "/_camox/routes";
|
|
14
|
+
readonly og: "/og";
|
|
15
|
+
readonly sitemap: "/sitemap.xml";
|
|
16
|
+
readonly "llms-txt": "/llms.txt";
|
|
17
|
+
};
|
|
18
|
+
export type RuntimeOwnedRouteKind = keyof typeof RUNTIME_ROUTE_PATHS;
|
|
19
|
+
//#endregion
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/features/runtime/runtimeRoutes.ts
|
|
2
|
+
/**
|
|
3
|
+
* The URLs the runtime answers that aren't pages or the Studio. Worker request filtering, runtime
|
|
4
|
+
* route matching and client navigation all read this list, so a new one can't be forgotten in any
|
|
5
|
+
* of them. Prefix rules stay with their readers: the Worker also answers every `/camox/` Studio
|
|
6
|
+
* path, and client navigation also skips any other `/_camox/` path.
|
|
7
|
+
* No imports: client navigation ships this module in the browser bundle.
|
|
8
|
+
*/
|
|
9
|
+
const RUNTIME_ROUTE_PATHS = {
|
|
10
|
+
data: "/_camox/data",
|
|
11
|
+
health: "/_camox/health",
|
|
12
|
+
registry: "/_camox/registry",
|
|
13
|
+
routes: "/_camox/routes",
|
|
14
|
+
og: "/og",
|
|
15
|
+
sitemap: "/sitemap.xml",
|
|
16
|
+
"llms-txt": "/llms.txt"
|
|
17
|
+
};
|
|
18
|
+
/** Which runtime-owned route a path inside the runtime (base path removed) is, if any. */
|
|
19
|
+
function matchRuntimeOwnedRoute(pathname) {
|
|
20
|
+
for (const [kind, path] of Object.entries(RUNTIME_ROUTE_PATHS)) if (pathname === path) return kind;
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
//#endregion
|
|
25
|
+
export { RUNTIME_ROUTE_PATHS, matchRuntimeOwnedRoute };
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
//#region src/features/runtime/scrollRestoration.ts
|
|
2
|
+
/**
|
|
3
|
+
* Scroll positions of the website's history entries. Each entry the runtime creates carries a
|
|
4
|
+
* key in `history.state`, so two entries with the same URL keep their own positions. Positions
|
|
5
|
+
* are kept in sessionStorage, so they survive reloads and documents the browser had to load again.
|
|
6
|
+
*
|
|
7
|
+
* The page scrolls in its viewport: the visitor's window, or the Studio frame showing the page.
|
|
8
|
+
* The history belongs to the top window either way.
|
|
9
|
+
*/
|
|
10
|
+
const STORAGE_KEY = "camox:scroll-positions";
|
|
11
|
+
const STATE_KEY = "camoxScrollKey";
|
|
12
|
+
/** Keeps sessionStorage small for long sessions. Older entries scroll to the top instead. */
|
|
13
|
+
const MAX_ENTRIES = 100;
|
|
14
|
+
function keyOf(state) {
|
|
15
|
+
if (!state || typeof state !== "object" || !(STATE_KEY in state)) return void 0;
|
|
16
|
+
const key = state[STATE_KEY];
|
|
17
|
+
return typeof key === "string" ? key : void 0;
|
|
18
|
+
}
|
|
19
|
+
function createKey() {
|
|
20
|
+
return Math.random().toString(36).slice(2, 10);
|
|
21
|
+
}
|
|
22
|
+
function readPositions(storage) {
|
|
23
|
+
try {
|
|
24
|
+
const stored = storage?.getItem(STORAGE_KEY);
|
|
25
|
+
if (stored) return new Map(JSON.parse(stored));
|
|
26
|
+
} catch {}
|
|
27
|
+
return /* @__PURE__ */ new Map();
|
|
28
|
+
}
|
|
29
|
+
/** The element a fragment names, or `"top"` for the fragments that name the top of the page. */
|
|
30
|
+
function fragmentTarget(doc, hash) {
|
|
31
|
+
const fragment = hash.replace(/^#/, "");
|
|
32
|
+
let decoded = fragment;
|
|
33
|
+
try {
|
|
34
|
+
decoded = decodeURIComponent(fragment);
|
|
35
|
+
} catch {}
|
|
36
|
+
const find = (id) => id && (doc.getElementById(id) ?? doc.getElementsByName(id)[0]) || null;
|
|
37
|
+
const element = find(fragment) ?? find(decoded);
|
|
38
|
+
if (!element && (!decoded || decoded.toLowerCase() === "top")) return "top";
|
|
39
|
+
return element;
|
|
40
|
+
}
|
|
41
|
+
function createScrollRestoration(win) {
|
|
42
|
+
const storage = (() => {
|
|
43
|
+
try {
|
|
44
|
+
return win.sessionStorage;
|
|
45
|
+
} catch {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
})();
|
|
49
|
+
const positions = readPositions(storage);
|
|
50
|
+
let viewport = null;
|
|
51
|
+
win.history.scrollRestoration = "manual";
|
|
52
|
+
let currentKey = keyOf(win.history.state);
|
|
53
|
+
const keyEntry = () => {
|
|
54
|
+
currentKey = createKey();
|
|
55
|
+
win.history.replaceState({
|
|
56
|
+
...win.history.state,
|
|
57
|
+
[STATE_KEY]: currentKey
|
|
58
|
+
}, "");
|
|
59
|
+
};
|
|
60
|
+
if (!currentKey) keyEntry();
|
|
61
|
+
const persist = () => {
|
|
62
|
+
try {
|
|
63
|
+
storage?.setItem(STORAGE_KEY, JSON.stringify([...positions]));
|
|
64
|
+
} catch {}
|
|
65
|
+
};
|
|
66
|
+
/** Records where the shown entry's page is scrolled to. */
|
|
67
|
+
const save = () => {
|
|
68
|
+
if (!currentKey || !viewport) return;
|
|
69
|
+
positions.delete(currentKey);
|
|
70
|
+
positions.set(currentKey, [viewport.scrollX, viewport.scrollY]);
|
|
71
|
+
while (positions.size > MAX_ENTRIES) positions.delete(positions.keys().next().value);
|
|
72
|
+
persist();
|
|
73
|
+
};
|
|
74
|
+
const onPageHide = () => {
|
|
75
|
+
save();
|
|
76
|
+
win.history.scrollRestoration = "auto";
|
|
77
|
+
};
|
|
78
|
+
const onPageShow = () => {
|
|
79
|
+
win.history.scrollRestoration = "manual";
|
|
80
|
+
};
|
|
81
|
+
win.addEventListener("pagehide", onPageHide);
|
|
82
|
+
win.addEventListener("pageshow", onPageShow);
|
|
83
|
+
return {
|
|
84
|
+
save,
|
|
85
|
+
/** Where the page scrolls from now on, or null while nothing shows it. */
|
|
86
|
+
setViewport(next) {
|
|
87
|
+
viewport = next;
|
|
88
|
+
},
|
|
89
|
+
/** Where the page scrolls, if anything shows it. */
|
|
90
|
+
viewport: () => viewport,
|
|
91
|
+
/** State for a new history entry, which gets a key of its own. */
|
|
92
|
+
stateForNewEntry: () => ({ [STATE_KEY]: createKey() }),
|
|
93
|
+
/** Follows the history entry the browser now shows, and gives it a key if it has none. */
|
|
94
|
+
entered() {
|
|
95
|
+
currentKey = keyOf(win.history.state);
|
|
96
|
+
if (!currentKey) keyEntry();
|
|
97
|
+
},
|
|
98
|
+
/**
|
|
99
|
+
* Scrolls `page`, which just rendered the shown entry at `hash`, as `intent` says. Returns the
|
|
100
|
+
* fragment's element it scrolled to, if any.
|
|
101
|
+
*/
|
|
102
|
+
apply(page, intent, hash) {
|
|
103
|
+
const scrollTo = (top, left = 0) => page.scrollTo({
|
|
104
|
+
top,
|
|
105
|
+
left,
|
|
106
|
+
behavior: "instant"
|
|
107
|
+
});
|
|
108
|
+
if (intent === "resume" || intent === "restore") {
|
|
109
|
+
const saved = currentKey && positions.get(currentKey);
|
|
110
|
+
if (saved) {
|
|
111
|
+
scrollTo(saved[1], saved[0]);
|
|
112
|
+
return null;
|
|
113
|
+
}
|
|
114
|
+
if (intent === "resume") return null;
|
|
115
|
+
}
|
|
116
|
+
const target = hash ? fragmentTarget(page.document, hash) : null;
|
|
117
|
+
if (target === "top") scrollTo(0);
|
|
118
|
+
else if (target) {
|
|
119
|
+
target.scrollIntoView({ behavior: intent === "fragment" ? "auto" : "instant" });
|
|
120
|
+
return target;
|
|
121
|
+
} else if (intent !== "fragment") scrollTo(0);
|
|
122
|
+
return null;
|
|
123
|
+
},
|
|
124
|
+
dispose() {
|
|
125
|
+
win.removeEventListener("pagehide", onPageHide);
|
|
126
|
+
win.removeEventListener("pageshow", onPageShow);
|
|
127
|
+
win.history.scrollRestoration = "auto";
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
//#endregion
|
|
133
|
+
export { createScrollRestoration };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import "../../core/createApp.js";
|
|
1
2
|
import { PageRenderInput } from "./runtime.js";
|
|
3
|
+
import "../../lib/draft-scope.js";
|
|
2
4
|
import { QueryClient } from "@tanstack/react-query";
|
|
3
5
|
//#region src/features/runtime/studioApp.d.ts
|
|
4
|
-
type StudioRenderInput = PageRenderInput;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { StudioRenderInput };
|
|
6
|
+
export type StudioRenderInput = PageRenderInput;
|
|
7
|
+
//#endregion
|
|
@@ -4,17 +4,13 @@ import { jsx } from "react/jsx-runtime";
|
|
|
4
4
|
|
|
5
5
|
//#region src/features/runtime/studioApp.tsx
|
|
6
6
|
function StudioApp(props) {
|
|
7
|
-
const $ = c(
|
|
8
|
-
if ($[0] !== "67c2b6f45da5572f3c7b8c4d68491571a2d455e4cd7067c0380e91fc49b09d93") {
|
|
9
|
-
for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
10
|
-
$[0] = "67c2b6f45da5572f3c7b8c4d68491571a2d455e4cd7067c0380e91fc49b09d93";
|
|
11
|
-
}
|
|
7
|
+
const $ = c(2);
|
|
12
8
|
let t0;
|
|
13
|
-
if ($[
|
|
9
|
+
if ($[0] !== props) {
|
|
14
10
|
t0 = /* @__PURE__ */ jsx(PageApp, { ...props });
|
|
15
|
-
$[
|
|
16
|
-
$[
|
|
17
|
-
} else t0 = $[
|
|
11
|
+
$[0] = props;
|
|
12
|
+
$[1] = t0;
|
|
13
|
+
} else t0 = $[1];
|
|
18
14
|
return t0;
|
|
19
15
|
}
|
|
20
16
|
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import { CamoxApp } from "../../core/createApp.js";
|
|
2
|
-
|
|
3
2
|
//#region src/features/runtime/studioClient.d.ts
|
|
4
|
-
declare function hydrateStudioWithApp(camoxApp: CamoxApp): void
|
|
5
|
-
//#endregion
|
|
6
|
-
export { hydrateStudioWithApp };
|
|
3
|
+
export declare function hydrateStudioWithApp(camoxApp: CamoxApp): Promise<void>;
|
|
4
|
+
//#endregion
|
|
@@ -1,17 +1,26 @@
|
|
|
1
|
+
import { createDraftScope } from "../../lib/draft-scope.js";
|
|
2
|
+
import { loadRuntimeChrome } from "./runtimeChromeLoader.js";
|
|
1
3
|
import { readHydrationData } from "./hydrationData.js";
|
|
2
4
|
import { StudioApp } from "./studioApp.js";
|
|
3
|
-
import { QueryClient } from "@tanstack/react-query";
|
|
4
5
|
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
import { QueryClient } from "@tanstack/react-query";
|
|
5
7
|
import { hydrateRoot } from "react-dom/client";
|
|
6
8
|
|
|
7
9
|
//#region src/features/runtime/studioClient.tsx
|
|
8
|
-
function hydrateStudioWithApp(camoxApp) {
|
|
10
|
+
async function hydrateStudioWithApp(camoxApp) {
|
|
9
11
|
const root = document.getElementById("root");
|
|
10
12
|
if (!root) throw new Error("Camox runtime root element was not found.");
|
|
11
13
|
const queryClient = new QueryClient();
|
|
14
|
+
const input = readHydrationData();
|
|
15
|
+
if (input.presentation === "studio") await loadRuntimeChrome();
|
|
16
|
+
const draftScope = createDraftScope({
|
|
17
|
+
queryClient,
|
|
18
|
+
browser: window
|
|
19
|
+
});
|
|
12
20
|
hydrateRoot(root, /* @__PURE__ */ jsx(StudioApp, {
|
|
13
21
|
camoxApp,
|
|
14
|
-
|
|
22
|
+
draftScope,
|
|
23
|
+
input,
|
|
15
24
|
queryClient
|
|
16
25
|
}));
|
|
17
26
|
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { CamoxApp } from "../../core/createApp.js";
|
|
2
2
|
import { StudioRenderInput } from "./studioApp.js";
|
|
3
|
-
|
|
4
3
|
//#region src/features/runtime/studioServer.d.ts
|
|
5
|
-
declare function renderStudioWithApp(input: StudioRenderInput & {
|
|
4
|
+
export declare function renderStudioWithApp(input: StudioRenderInput & {
|
|
6
5
|
camoxApp: CamoxApp;
|
|
7
6
|
}): Promise<string>;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { renderStudioWithApp };
|
|
7
|
+
//#endregion
|
|
@@ -1,14 +1,19 @@
|
|
|
1
|
+
import { createDraftScope } from "../../lib/draft-scope.js";
|
|
2
|
+
import { loadRuntimeChrome } from "./runtimeChromeLoader.js";
|
|
1
3
|
import { StudioApp } from "./studioApp.js";
|
|
2
|
-
import { QueryClient, hydrate } from "@tanstack/react-query";
|
|
3
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
+
import { QueryClient, hydrate } from "@tanstack/react-query";
|
|
4
6
|
import { renderToString } from "react-dom/server";
|
|
5
7
|
|
|
6
8
|
//#region src/features/runtime/studioServer.tsx
|
|
7
9
|
async function renderStudioWithApp(input) {
|
|
8
10
|
const queryClient = new QueryClient();
|
|
9
11
|
hydrate(queryClient, input.dehydratedState);
|
|
12
|
+
if (input.presentation === "studio") await loadRuntimeChrome();
|
|
13
|
+
const draftScope = createDraftScope({ queryClient });
|
|
10
14
|
return renderToString(/* @__PURE__ */ jsx(StudioApp, {
|
|
11
15
|
camoxApp: input.camoxApp,
|
|
16
|
+
draftScope,
|
|
12
17
|
input,
|
|
13
18
|
queryClient
|
|
14
19
|
}));
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { fetchLocalhostOnLoopback } from "./loopbackFetch.js";
|
|
2
|
+
import { shouldHandleRequest, withDevHtml } from "./workerRequest.js";
|
|
3
|
+
import { devHtml, handleCamoxRequest, runtimeBasePath } from "virtual:camox/server";
|
|
4
|
+
|
|
5
|
+
//#region src/features/runtime/worker.ts
|
|
6
|
+
/**
|
|
7
|
+
* The Cloudflare Worker that serves a Camox app: point `main` in `wrangler.jsonc` at
|
|
8
|
+
* `camox/worker`. Static files never reach it: Workers Static Assets serves them first in
|
|
9
|
+
* production, and Vite does in dev.
|
|
10
|
+
*/
|
|
11
|
+
if (devHtml) globalThis.fetch = fetchLocalhostOnLoopback(globalThis.fetch.bind(globalThis));
|
|
12
|
+
function notFound() {
|
|
13
|
+
return new Response("Not found", { status: 404 });
|
|
14
|
+
}
|
|
15
|
+
var worker_default = { async fetch(request) {
|
|
16
|
+
if (!shouldHandleRequest(request, runtimeBasePath)) return notFound();
|
|
17
|
+
const response = await handleCamoxRequest(request);
|
|
18
|
+
if (!response) return notFound();
|
|
19
|
+
return withDevHtml(response, devHtml);
|
|
20
|
+
} };
|
|
21
|
+
|
|
22
|
+
//#endregion
|
|
23
|
+
export { worker_default as default };
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { matchRuntimeOwnedRoute } from "./runtimeRoutes.js";
|
|
2
|
+
|
|
3
|
+
//#region src/features/runtime/workerRequest.ts
|
|
4
|
+
/** How the Camox Worker picks the requests it answers and prepares its responses. */
|
|
5
|
+
function isDocumentRequest(request) {
|
|
6
|
+
const accept = request.headers.get("Accept") ?? "";
|
|
7
|
+
return accept.includes("text/html") || accept.includes("text/markdown") || accept.includes("*/*");
|
|
8
|
+
}
|
|
9
|
+
/** The request's path inside the runtime, or `null` when it falls outside the base path. */
|
|
10
|
+
function getRuntimePathname(pathname, basePath) {
|
|
11
|
+
if (!basePath) return pathname;
|
|
12
|
+
if (pathname === basePath) return "/";
|
|
13
|
+
if (!pathname.startsWith(`${basePath}/`)) return null;
|
|
14
|
+
return pathname.slice(basePath.length) || "/";
|
|
15
|
+
}
|
|
16
|
+
function shouldHandleRequest(request, basePath) {
|
|
17
|
+
const pathname = getRuntimePathname(new URL(request.url).pathname, basePath);
|
|
18
|
+
if (!pathname) return false;
|
|
19
|
+
if (request.method !== "GET" && request.method !== "HEAD") return false;
|
|
20
|
+
if (matchRuntimeOwnedRoute(pathname)) return true;
|
|
21
|
+
if (pathname === "/camox" || pathname.startsWith("/camox/")) return true;
|
|
22
|
+
if (pathname.endsWith(".md")) return true;
|
|
23
|
+
if (/\.[a-z0-9]+$/i.test(pathname)) return false;
|
|
24
|
+
if (pathname.startsWith("/@") || pathname.startsWith("/src/")) return false;
|
|
25
|
+
if (pathname.startsWith("/__vite")) return false;
|
|
26
|
+
if (pathname.startsWith("/node_modules/")) return false;
|
|
27
|
+
return isDocumentRequest(request);
|
|
28
|
+
}
|
|
29
|
+
/** Adds what Vite injects into HTML in dev, such as its client and React Refresh. */
|
|
30
|
+
async function withDevHtml(response, html) {
|
|
31
|
+
if (!html) return response;
|
|
32
|
+
if (!(response.headers.get("Content-Type") ?? "").includes("text/html")) return response;
|
|
33
|
+
const headers = new Headers(response.headers);
|
|
34
|
+
headers.delete("Content-Length");
|
|
35
|
+
const document = (await response.text()).replace(/<head(\s[^>]*)?>/i, (tag) => tag + html.head).replace(/<\/body>/i, (tag) => html.body + tag);
|
|
36
|
+
return new Response(document, {
|
|
37
|
+
headers,
|
|
38
|
+
status: response.status,
|
|
39
|
+
statusText: response.statusText
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//#endregion
|
|
44
|
+
export { shouldHandleRequest, withDevHtml };
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import * as _$react_jsx_runtime0 from "react/jsx-runtime";
|
|
3
|
-
|
|
4
2
|
//#region src/features/studio/CamoxStudio.d.ts
|
|
5
|
-
declare const CamoxStudio: ({
|
|
6
|
-
children
|
|
7
|
-
}: {
|
|
3
|
+
declare const CamoxStudio: ({ children }: {
|
|
8
4
|
children: React.ReactNode;
|
|
9
|
-
}) =>
|
|
5
|
+
}) => React.JSX.Element | null;
|
|
10
6
|
//#endregion
|
|
11
7
|
export { CamoxStudio };
|
|
@@ -1,27 +1,22 @@
|
|
|
1
|
-
import { Navigate, useLocation } from "../navigation/navigation.js";
|
|
2
1
|
import { useAuthState, useSignInRedirect } from "../../lib/auth.js";
|
|
3
|
-
import {
|
|
2
|
+
import { Navigate } from "../navigation/navigation.js";
|
|
3
|
+
import { useLocalePath, useLocalizedPath } from "../../lib/view-locale.js";
|
|
4
4
|
import { STUDIO_BASE_PATH } from "./routes.js";
|
|
5
|
-
import { Navbar } from "./components/Navbar.js";
|
|
6
5
|
import { c } from "react/compiler-runtime";
|
|
7
6
|
import * as React from "react";
|
|
8
|
-
import { Fragment, jsx
|
|
7
|
+
import { Fragment, jsx } from "react/jsx-runtime";
|
|
9
8
|
|
|
10
9
|
//#region src/features/studio/CamoxStudio.tsx
|
|
11
10
|
const CamoxStudio = (t0) => {
|
|
12
|
-
const $ = c(
|
|
13
|
-
if ($[0] !== "5f0b5c1c244f7af982fa1d0e99a04fcbc60b872999562c3737760c88a71ce1d0") {
|
|
14
|
-
for (let $i = 0; $i < 12; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
|
|
15
|
-
$[0] = "5f0b5c1c244f7af982fa1d0e99a04fcbc60b872999562c3737760c88a71ce1d0";
|
|
16
|
-
}
|
|
11
|
+
const $ = c(11);
|
|
17
12
|
const { children } = t0;
|
|
18
13
|
const { isAuthenticated, isLoading: isLoadingAuth } = useAuthState();
|
|
19
|
-
const
|
|
20
|
-
const
|
|
14
|
+
const pathname = useLocalePath();
|
|
15
|
+
const localized = useLocalizedPath();
|
|
21
16
|
const signInRedirect = useSignInRedirect();
|
|
22
17
|
let t1;
|
|
23
18
|
let t2;
|
|
24
|
-
if ($[
|
|
19
|
+
if ($[0] !== isAuthenticated || $[1] !== isLoadingAuth || $[2] !== signInRedirect) {
|
|
25
20
|
t1 = () => {
|
|
26
21
|
if (!isAuthenticated && !isLoadingAuth) signInRedirect();
|
|
27
22
|
};
|
|
@@ -30,52 +25,42 @@ const CamoxStudio = (t0) => {
|
|
|
30
25
|
isLoadingAuth,
|
|
31
26
|
signInRedirect
|
|
32
27
|
];
|
|
33
|
-
$[
|
|
34
|
-
$[
|
|
35
|
-
$[
|
|
36
|
-
$[
|
|
37
|
-
$[
|
|
28
|
+
$[0] = isAuthenticated;
|
|
29
|
+
$[1] = isLoadingAuth;
|
|
30
|
+
$[2] = signInRedirect;
|
|
31
|
+
$[3] = t1;
|
|
32
|
+
$[4] = t2;
|
|
38
33
|
} else {
|
|
39
|
-
t1 = $[
|
|
40
|
-
t2 = $[
|
|
34
|
+
t1 = $[3];
|
|
35
|
+
t2 = $[4];
|
|
41
36
|
}
|
|
42
37
|
React.useEffect(t1, t2);
|
|
43
38
|
if (!isAuthenticated) return null;
|
|
44
|
-
if (pathname ===
|
|
39
|
+
if (pathname === "/camox") {
|
|
45
40
|
let t3;
|
|
46
|
-
if ($[
|
|
47
|
-
t3 =
|
|
48
|
-
|
|
49
|
-
replace: true
|
|
50
|
-
});
|
|
41
|
+
if ($[5] !== localized) {
|
|
42
|
+
t3 = localized("/");
|
|
43
|
+
$[5] = localized;
|
|
51
44
|
$[6] = t3;
|
|
52
45
|
} else t3 = $[6];
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
$[7] =
|
|
60
|
-
$[8] =
|
|
61
|
-
} else
|
|
62
|
-
return
|
|
46
|
+
let t4;
|
|
47
|
+
if ($[7] !== t3) {
|
|
48
|
+
t4 = /* @__PURE__ */ jsx(Navigate, {
|
|
49
|
+
to: t3,
|
|
50
|
+
replace: true
|
|
51
|
+
});
|
|
52
|
+
$[7] = t3;
|
|
53
|
+
$[8] = t4;
|
|
54
|
+
} else t4 = $[8];
|
|
55
|
+
return t4;
|
|
63
56
|
}
|
|
64
57
|
let t3;
|
|
65
|
-
if ($[9]
|
|
66
|
-
t3 = /* @__PURE__ */ jsx(
|
|
67
|
-
$[9] =
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
t4 = /* @__PURE__ */ jsxs("div", {
|
|
72
|
-
className: "bg-background flex h-screen flex-col overflow-hidden",
|
|
73
|
-
children: [t3, children]
|
|
74
|
-
});
|
|
75
|
-
$[10] = children;
|
|
76
|
-
$[11] = t4;
|
|
77
|
-
} else t4 = $[11];
|
|
78
|
-
return t4;
|
|
58
|
+
if ($[9] !== children) {
|
|
59
|
+
t3 = /* @__PURE__ */ jsx(Fragment, { children });
|
|
60
|
+
$[9] = children;
|
|
61
|
+
$[10] = t3;
|
|
62
|
+
} else t3 = $[10];
|
|
63
|
+
return t3;
|
|
79
64
|
};
|
|
80
65
|
|
|
81
66
|
//#endregion
|