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.
Files changed (407) hide show
  1. package/dist/components/AuthGate.js +0 -6
  2. package/dist/components/DeviceSelector.js +96 -0
  3. package/dist/components/PlatformLabel.js +20 -24
  4. package/dist/core/components/lexical/HighlightNode.js +1 -1
  5. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  6. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  7. package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
  8. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  9. package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
  10. package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
  11. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  12. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  13. package/dist/core/createApp.d.ts +241 -312
  14. package/dist/core/createApp.js +123 -29
  15. package/dist/core/createBlock.d.ts +5 -5
  16. package/dist/core/createBlock.js +385 -152
  17. package/dist/core/createCollection.d.ts +55 -0
  18. package/dist/core/createCollection.js +93 -0
  19. package/dist/core/createLayout.d.ts +197 -61
  20. package/dist/core/createLayout.js +114 -56
  21. package/dist/core/defineDocument.d.ts +3 -5
  22. package/dist/core/derivedRoutes.js +49 -1
  23. package/dist/core/dom.d.ts +13 -4
  24. package/dist/core/dom.js +44 -1
  25. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  26. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  27. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  28. package/dist/core/editing/createEditableBlock.d.ts +754 -633
  29. package/dist/core/editing/createEditableBlock.js +2113 -1066
  30. package/dist/core/editing/referenceWrites.js +51 -0
  31. package/dist/core/editing/useLatestRecord.js +90 -0
  32. package/dist/core/hooks/useArtifactHost.js +139 -0
  33. package/dist/core/hooks/useFieldSelection.js +43 -18
  34. package/dist/core/hooks/useIsEditable.js +12 -10
  35. package/dist/core/hooks/useOverlayMessage.js +15 -19
  36. package/dist/core/lib/artifact.d.ts +21 -0
  37. package/dist/core/lib/artifact.js +154 -0
  38. package/dist/core/lib/artifactColors.js +123 -0
  39. package/dist/core/lib/artifactData.d.ts +1 -0
  40. package/dist/core/lib/artifactData.js +131 -0
  41. package/dist/core/lib/artifactHost.js +205 -0
  42. package/dist/core/lib/artifactRuntime.js +36 -0
  43. package/dist/core/lib/artifactTheme.js +57 -0
  44. package/dist/core/lib/contentType.d.ts +302 -106
  45. package/dist/core/lib/contentType.js +201 -173
  46. package/dist/core/lib/fieldTypes.js +3 -0
  47. package/dist/core/lib/iconTypes.d.ts +3 -3
  48. package/dist/core/lib/icons.d.ts +4 -4
  49. package/dist/core/lib/icons.js +40 -44
  50. package/dist/core/lib/imagePlaceholder.js +177 -0
  51. package/dist/core/lib/imageTransform.js +1 -1
  52. package/dist/core/lib/lexicalReact.d.ts +3 -1
  53. package/dist/core/lib/lexicalState.js +1 -1
  54. package/dist/core/lib/previewPaused.js +9 -0
  55. package/dist/core/lib/recordScope.js +316 -0
  56. package/dist/core/lib/reference.d.ts +81 -0
  57. package/dist/core/lib/reference.js +29 -0
  58. package/dist/core/lib/textLinks.js +7 -5
  59. package/dist/core/lib/textStyles.d.ts +5 -7
  60. package/dist/core/lib/textStyles.js +2 -2
  61. package/dist/core/notFound.d.ts +7 -0
  62. package/dist/core/notFound.js +11 -0
  63. package/dist/core/pageDestinations.js +6 -3
  64. package/dist/core/recordItem.js +34 -0
  65. package/dist/core/requestContext.d.ts +26 -0
  66. package/dist/core/requestContext.js +20 -0
  67. package/dist/features/canvas/CamoxCanvas.js +1401 -0
  68. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  69. package/dist/features/canvas/CanvasOverlays.js +254 -0
  70. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  71. package/dist/features/canvas/CanvasPageFrame.js +333 -0
  72. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  73. package/dist/features/canvas/CanvasPreviewPageSlot.js +123 -0
  74. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  75. package/dist/features/canvas/canvasCamera.js +229 -0
  76. package/dist/features/canvas/canvasFlight.js +104 -0
  77. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  78. package/dist/features/canvas/canvasFrameDocument.js +302 -0
  79. package/dist/features/canvas/canvasFrameMode.js +53 -0
  80. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  81. package/dist/features/canvas/canvasItems.js +30 -0
  82. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  83. package/dist/features/canvas/canvasPages.js +79 -0
  84. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  85. package/dist/features/canvas/canvasSelection.js +18 -0
  86. package/dist/features/canvas/canvasStore.js +60 -0
  87. package/dist/features/canvas/canvasThumbnails.js +304 -0
  88. package/dist/features/canvas/canvasZoom.js +10 -0
  89. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  90. package/dist/features/canvas/sidebar/CanvasNavigator.js +124 -0
  91. package/dist/features/canvas/sidebar/CanvasSidebar.js +54 -0
  92. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  93. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  94. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  95. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  96. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  97. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  98. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  99. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  100. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  101. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  102. package/dist/features/canvas/useCanvasCamera.js +783 -0
  103. package/dist/features/canvas/useCanvasFrame.js +148 -0
  104. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  105. package/dist/features/canvas/useCanvasNearness.js +57 -0
  106. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  107. package/dist/features/content/CamoxContent.d.ts +2 -5
  108. package/dist/features/content/CamoxContent.js +174 -271
  109. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  110. package/dist/features/content/ContentAssets.js +315 -0
  111. package/dist/features/content/ContentCollection.js +663 -0
  112. package/dist/features/content/collection-form.js +58 -0
  113. package/dist/features/content/components/AssetCard.js +80 -84
  114. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  115. package/dist/features/content/components/ContentSidebar.js +129 -18
  116. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  117. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  118. package/dist/features/content/components/MissingFromLocale.js +282 -0
  119. package/dist/features/content/components/UploadDropZone.js +27 -31
  120. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  121. package/dist/features/navigation/navigation.d.ts +66 -20
  122. package/dist/features/navigation/navigation.js +257 -90
  123. package/dist/features/og/defaultFonts.js +8 -8
  124. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  125. package/dist/features/og/imageResponse.d.ts +8 -0
  126. package/dist/features/og/imageResponse.js +26 -0
  127. package/dist/features/page/CuratedPageContent.js +167 -0
  128. package/dist/features/page/DerivedPageContent.js +26 -30
  129. package/dist/features/page/SharedLayoutContent.js +25 -27
  130. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  131. package/dist/features/preview/CamoxPreview.js +816 -537
  132. package/dist/features/preview/EditablePageContent.js +1 -1
  133. package/dist/features/preview/EditablePageExperience.js +16 -22
  134. package/dist/features/preview/components/AddBlockSheet.js +273 -0
  135. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  136. package/dist/features/preview/components/AssetLightbox.js +181 -134
  137. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  138. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  139. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  140. package/dist/features/preview/components/BlockThumbnail.js +172 -98
  141. package/dist/features/preview/components/CanvasPreview.js +243 -0
  142. package/dist/features/preview/components/CreatePageModal.js +128 -137
  143. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  144. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  145. package/dist/features/preview/components/DrillRow.js +150 -0
  146. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  147. package/dist/features/preview/components/FieldToolbar.js +160 -110
  148. package/dist/features/preview/components/Frame.js +108 -20
  149. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  150. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  151. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  152. package/dist/features/preview/components/Metadata.js +22 -30
  153. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  154. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  155. package/dist/features/preview/components/OverlayTracker.js +9 -41
  156. package/dist/features/preview/components/Overlays.js +81 -69
  157. package/dist/features/preview/components/PageInfo.js +1748 -0
  158. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  159. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  160. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  161. package/dist/features/preview/components/PageNicknameField.js +22 -26
  162. package/dist/features/preview/components/PagePicker.js +128 -130
  163. package/dist/features/preview/components/PageTree.js +525 -532
  164. package/dist/features/preview/components/PreviewActivation.js +28 -32
  165. package/dist/features/preview/components/PreviewPanel.js +620 -319
  166. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  167. package/dist/features/preview/components/RecordCard.js +80 -0
  168. package/dist/features/preview/components/RecordCombobox.js +178 -0
  169. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  170. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  171. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  172. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  173. package/dist/features/preview/components/SelectionEditor.js +993 -0
  174. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  175. package/dist/features/preview/components/SidebarSection.js +52 -64
  176. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  177. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  178. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  179. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  180. package/dist/features/preview/components/useFieldWriter.js +200 -0
  181. package/dist/features/preview/components/useRecordView.js +383 -0
  182. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  183. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  184. package/dist/features/preview/editingFrame.js +197 -0
  185. package/dist/features/preview/overlayHighlights.js +17 -44
  186. package/dist/features/preview/overlayMessages.js +72 -1
  187. package/dist/features/preview/pageRecord.js +189 -0
  188. package/dist/features/preview/previewConstants.js +6 -2
  189. package/dist/features/preview/previewPageFrame.js +95 -0
  190. package/dist/features/preview/previewPreparation.js +7 -0
  191. package/dist/features/preview/previewSelection.js +32 -63
  192. package/dist/features/preview/previewStore.js +225 -123
  193. package/dist/features/preview/referencePickerFocus.js +29 -0
  194. package/dist/features/preview/repeatableItemTargets.js +56 -0
  195. package/dist/features/preview/selectionReveal.js +21 -0
  196. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  197. package/dist/features/preview/viewportContinuity.js +109 -0
  198. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  199. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  200. package/dist/features/provider/CamoxProvider.js +38 -50
  201. package/dist/features/provider/CoreCamoxProvider.js +69 -50
  202. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  203. package/dist/features/provider/PreviewSignInPage.js +54 -0
  204. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  205. package/dist/features/provider/components/CommandPalette.js +75 -82
  206. package/dist/features/provider/useAdminShortcuts.js +7 -11
  207. package/dist/features/routes/pageRuntime.d.ts +44 -4
  208. package/dist/features/routes/pageRuntime.js +244 -137
  209. package/dist/features/runtime/RuntimeChrome.js +117 -115
  210. package/dist/features/runtime/alternates.js +64 -0
  211. package/dist/features/runtime/analytics.d.ts +7 -0
  212. package/dist/features/runtime/analytics.js +66 -0
  213. package/dist/features/runtime/artifactSources.js +87 -0
  214. package/dist/features/runtime/editingFallback.js +20 -0
  215. package/dist/features/runtime/linkPrefetch.js +97 -0
  216. package/dist/features/runtime/livePages.js +62 -0
  217. package/dist/features/runtime/llmsTxt.js +40 -0
  218. package/dist/features/runtime/loopbackFetch.js +18 -0
  219. package/dist/features/runtime/navigationAccessibility.js +51 -0
  220. package/dist/features/runtime/navigationTarget.js +23 -2
  221. package/dist/features/runtime/pageApp.js +229 -158
  222. package/dist/features/runtime/pageBlockTypes.js +20 -0
  223. package/dist/features/runtime/pageClient.d.ts +2 -4
  224. package/dist/features/runtime/pageClient.js +18 -3
  225. package/dist/features/runtime/pageNavigation.js +254 -32
  226. package/dist/features/runtime/pageServer.d.ts +2 -4
  227. package/dist/features/runtime/pageServer.js +6 -2
  228. package/dist/features/runtime/pageViewport.js +7 -0
  229. package/dist/features/runtime/runtime.d.ts +54 -24
  230. package/dist/features/runtime/runtime.js +766 -191
  231. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  232. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  233. package/dist/features/runtime/runtimeRoutes.js +25 -0
  234. package/dist/features/runtime/scrollRestoration.js +133 -0
  235. package/dist/features/runtime/studioApp.d.ts +4 -3
  236. package/dist/features/runtime/studioApp.js +5 -9
  237. package/dist/features/runtime/studioClient.d.ts +2 -4
  238. package/dist/features/runtime/studioClient.js +12 -3
  239. package/dist/features/runtime/studioServer.d.ts +2 -4
  240. package/dist/features/runtime/studioServer.js +6 -1
  241. package/dist/features/runtime/worker.d.ts +6 -0
  242. package/dist/features/runtime/worker.js +23 -0
  243. package/dist/features/runtime/workerRequest.js +44 -0
  244. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  245. package/dist/features/studio/CamoxStudio.js +34 -49
  246. package/dist/features/studio/FollowAgentProvider.js +327 -0
  247. package/dist/features/studio/components/ChatSidebar.js +356 -0
  248. package/dist/features/studio/components/DraftsControl.js +676 -0
  249. package/dist/features/studio/components/FaviconDialog.js +318 -0
  250. package/dist/features/studio/components/LocalePicker.js +785 -0
  251. package/dist/features/studio/components/Navbar.js +123 -103
  252. package/dist/features/studio/components/ProjectMenu.js +239 -260
  253. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  254. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  255. package/dist/features/studio/components/ThreadComposer.js +157 -0
  256. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  257. package/dist/features/studio/components/ThreadMessages.js +270 -0
  258. package/dist/features/studio/components/UserButton.js +34 -23
  259. package/dist/features/studio/draftLabel.js +33 -0
  260. package/dist/features/studio/draftNotice.js +13 -0
  261. package/dist/features/studio/followAgent.js +241 -0
  262. package/dist/features/studio/followAgentContext.js +7 -0
  263. package/dist/features/studio/localeOptions.js +118 -0
  264. package/dist/features/studio/localeSwitch.js +19 -0
  265. package/dist/features/studio/routes.js +26 -1
  266. package/dist/features/studio/studioStore.js +64 -1
  267. package/dist/features/studio/useTheme.js +24 -27
  268. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  269. package/dist/features/vite/blockBoilerplate.js +6 -5
  270. package/dist/features/vite/blockChunks.js +31 -0
  271. package/dist/features/vite/bundlerLogs.js +17 -0
  272. package/dist/features/vite/definitionsSync.js +158 -226
  273. package/dist/features/vite/devAuthentication.js +4 -16
  274. package/dist/features/vite/devSignIn.js +87 -0
  275. package/dist/features/vite/iconGeneration.js +1 -1
  276. package/dist/features/vite/layoutGeneration.js +11 -1
  277. package/dist/features/vite/publishSeededContent.js +30 -0
  278. package/dist/features/vite/routeGeneration.js +6 -7
  279. package/dist/features/vite/runtimeDev.js +80 -99
  280. package/dist/features/vite/vite.d.ts +51 -31
  281. package/dist/features/vite/vite.js +224 -127
  282. package/dist/features/vite/workerBuild.js +39 -0
  283. package/dist/hooks/use-debounced-field.js +116 -47
  284. package/dist/hooks/use-file-upload.js +114 -67
  285. package/dist/hooks/use-marquee-selection.js +32 -36
  286. package/dist/hooks/use-page-destinations.js +69 -37
  287. package/dist/lib/api-client-server.d.ts +5 -0
  288. package/dist/lib/api-client-server.js +10 -4
  289. package/dist/lib/api-client.d.ts +6 -0
  290. package/dist/lib/api-client.js +51 -16
  291. package/dist/lib/api-socket.js +17 -0
  292. package/dist/lib/auth-page-styles.js +39 -0
  293. package/dist/lib/auth.js +129 -61
  294. package/dist/lib/collection-cache.js +23 -0
  295. package/dist/lib/draft-scope.d.ts +4 -0
  296. package/dist/lib/draft-scope.js +222 -0
  297. package/dist/lib/html.js +12 -0
  298. package/dist/lib/link-pages.js +154 -0
  299. package/dist/lib/locale-path.d.ts +22 -0
  300. package/dist/lib/locale-path.js +57 -0
  301. package/dist/lib/normalized-data.js +252 -152
  302. package/dist/lib/preview-handoff.js +2 -2
  303. package/dist/lib/queries.d.ts +11 -0
  304. package/dist/lib/queries.js +70 -141
  305. package/dist/lib/studio-reads.d.ts +14 -0
  306. package/dist/lib/studio-reads.js +554 -0
  307. package/dist/lib/use-project-room.js +50 -50
  308. package/dist/lib/use-thread.js +310 -0
  309. package/dist/lib/utils.js +25 -29
  310. package/dist/lib/view-locale-context.js +22 -0
  311. package/dist/lib/view-locale.js +46 -0
  312. package/dist/package.js +5 -0
  313. package/dist/studio-overlays.css +41 -151
  314. package/dist/studio.css +2 -2
  315. package/package.json +70 -73
  316. package/skills/camox/SKILL.md +16 -11
  317. package/skills/camox/references/artifacts.md +179 -0
  318. package/skills/camox/references/block-definitions.md +75 -59
  319. package/skills/camox/references/cli-common.md +9 -11
  320. package/skills/camox/references/cli-content.md +92 -69
  321. package/skills/camox/references/cli-publishing.md +26 -0
  322. package/skills/camox/references/dom-integrations.md +27 -0
  323. package/skills/camox/references/field-styling.md +4 -4
  324. package/skills/camox/references/layout-definitions.md +16 -14
  325. package/skills/camox/references/localization.md +56 -0
  326. package/skills/camox/references/routed-layouts.md +133 -15
  327. package/skills/camox-expand/SKILL.md +70 -0
  328. package/skills/camox-expand/references/jobs.md +39 -0
  329. package/skills/camoxify/SKILL.md +29 -7
  330. package/dist/core/components/AddBlockControlBar.js +0 -78
  331. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  332. package/dist/features/metadata/sitemap.d.ts +0 -8
  333. package/dist/features/metadata/sitemap.js +0 -17
  334. package/dist/features/og/imageResponse.node.d.ts +0 -12
  335. package/dist/features/og/imageResponse.node.js +0 -49
  336. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  337. package/dist/features/og/imageResponse.workerd.js +0 -40
  338. package/dist/features/page/PublishedPageContent.js +0 -205
  339. package/dist/features/page/PublishedPageExperience.js +0 -23
  340. package/dist/features/preview/DerivedPreview.js +0 -134
  341. package/dist/features/preview/commentsEnabled.js +0 -8
  342. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  343. package/dist/features/preview/components/AttachedComments.js +0 -331
  344. package/dist/features/preview/components/CommentHeader.js +0 -122
  345. package/dist/features/preview/components/CommentSidebar.js +0 -29
  346. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  347. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  348. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  349. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  350. package/dist/features/preview/components/LeftSidebar.js +0 -68
  351. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  352. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  353. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  354. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  355. package/dist/features/preview/components/PeekedBlock.js +0 -217
  356. package/dist/features/preview/components/PreviewComments.js +0 -56
  357. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  358. package/dist/features/preview/components/PublicationRow.js +0 -422
  359. package/dist/features/preview/components/PublishDialog.js +0 -194
  360. package/dist/features/preview/components/RightSidebar.js +0 -59
  361. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  362. package/dist/features/preview/previewCommentsStore.js +0 -135
  363. package/dist/features/preview/publication.js +0 -81
  364. package/dist/features/preview/usePageComments.js +0 -39
  365. package/dist/features/runtime/SharedChromeContext.js +0 -7
  366. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  367. package/dist/features/vite/appGeneration.js +0 -89
  368. package/dist/lib/view-queries.js +0 -28
  369. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  370. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  371. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  372. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  382. 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
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  393. 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
  394. 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
  395. 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
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  407. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,6 +1,6 @@
1
1
  import { STUDIO_ROUTE_SEGMENT } from "../studio/routes.js";
2
- import { mkdirSync, readFileSync, unlinkSync, writeFileSync } from "node:fs";
3
- import { relative, resolve } from "node:path";
2
+ import { readFileSync, unlinkSync } from "node:fs";
3
+ import { resolve } from "node:path";
4
4
 
5
5
  //#region src/features/vite/routeGeneration.ts
6
6
  const HEADER = `/* ============================================================================
@@ -15,7 +15,8 @@ const HEADER = `/* =============================================================
15
15
  // @ts-nocheck
16
16
 
17
17
  `;
18
- function removeObsoleteRouteFiles(routesDir) {
18
+ /** Deletes the route files that the old TanStack integration generated. */
19
+ function cleanupGeneratedRouteFiles(routesDir) {
19
20
  const camoxDir = resolve(routesDir, "_camox");
20
21
  const studioDir = resolve(routesDir, "(camox)", "(_studio)");
21
22
  const obsoletePaths = [
@@ -34,7 +35,8 @@ function removeObsoleteRouteFiles(routesDir) {
34
35
  resolve(routesDir, "(camox)", "(_preview)", "og.tsx"),
35
36
  resolve(studioDir, `${STUDIO_ROUTE_SEGMENT}.tsx`),
36
37
  resolve(studioDir, `${STUDIO_ROUTE_SEGMENT}.$.tsx`),
37
- resolve(studioDir, `${STUDIO_ROUTE_SEGMENT}.content.tsx`)
38
+ resolve(studioDir, `${STUDIO_ROUTE_SEGMENT}.content.tsx`),
39
+ resolve(studioDir, `${STUDIO_ROUTE_SEGMENT}.content.assets.tsx`)
38
40
  ];
39
41
  for (const filePath of obsoletePaths) try {
40
42
  if (!readFileSync(filePath, "utf-8").startsWith(HEADER)) continue;
@@ -44,9 +46,6 @@ function removeObsoleteRouteFiles(routesDir) {
44
46
  throw error;
45
47
  }
46
48
  }
47
- function cleanupGeneratedRouteFiles(routesDir) {
48
- removeObsoleteRouteFiles(routesDir);
49
- }
50
49
 
51
50
  //#endregion
52
51
  export { cleanupGeneratedRouteFiles };
@@ -5,12 +5,11 @@ import { fileURLToPath } from "node:url";
5
5
  //#region src/features/vite/runtimeDev.ts
6
6
  const sdkRoot = resolve(dirname(fileURLToPath(import.meta.url)), "../../..");
7
7
  const VIRTUAL_CAMOX_APP = "virtual:camox/app";
8
- const RESOLVED_VIRTUAL_CAMOX_APP = "\0" + VIRTUAL_CAMOX_APP;
8
+ const RESOLVED_VIRTUAL_CAMOX_APP = "\0virtual:camox/app";
9
9
  const VIRTUAL_CAMOX_DOCUMENT = "virtual:camox/document";
10
- const RESOLVED_VIRTUAL_CAMOX_DOCUMENT = "\0" + VIRTUAL_CAMOX_DOCUMENT;
10
+ const RESOLVED_VIRTUAL_CAMOX_DOCUMENT = "\0virtual:camox/document";
11
11
  const VIRTUAL_CAMOX_SERVER = "virtual:camox/server";
12
- const RESOLVED_VIRTUAL_CAMOX_SERVER = "\0" + VIRTUAL_CAMOX_SERVER;
13
- const VIRTUAL_CAMOX_NITRO_HANDLER = "#camox/nitro-handler";
12
+ const RESOLVED_VIRTUAL_CAMOX_SERVER = "\0virtual:camox/server";
14
13
  const VIRTUAL_PAGE_SERVER = "virtual:camox/page-server";
15
14
  const RESOLVED_VIRTUAL_PAGE_SERVER = "\0" + VIRTUAL_PAGE_SERVER;
16
15
  const VIRTUAL_STUDIO_SERVER = "virtual:camox/studio-server";
@@ -23,12 +22,16 @@ const VIRTUAL_STUDIO_CLIENT = "virtual:camox/studio-client";
23
22
  const RESOLVED_VIRTUAL_STUDIO_CLIENT = "\0" + VIRTUAL_STUDIO_CLIENT;
24
23
  const VIRTUAL_STUDIO_CLIENT_URL = "virtual:camox/studio-client-url";
25
24
  const RESOLVED_VIRTUAL_STUDIO_CLIENT_URL = "\0" + VIRTUAL_STUDIO_CLIENT_URL;
25
+ const VIRTUAL_BLOCK_CHUNKS = "virtual:camox/block-chunks";
26
+ const RESOLVED_VIRTUAL_BLOCK_CHUNKS = "\0" + VIRTUAL_BLOCK_CHUNKS;
26
27
  const VIRTUAL_APP_STYLESHEET_URL = "virtual:camox/app-stylesheet-url";
27
28
  const RESOLVED_VIRTUAL_APP_STYLESHEET_URL = "\0" + VIRTUAL_APP_STYLESHEET_URL;
28
29
  const VIRTUAL_STUDIO_CSS = "virtual:camox-studio-css";
29
30
  const RESOLVED_VIRTUAL_STUDIO_CSS = "\0" + VIRTUAL_STUDIO_CSS;
30
31
  const VIRTUAL_OVERLAY_CSS = "virtual:camox-overlay-css";
31
32
  const RESOLVED_VIRTUAL_OVERLAY_CSS = "\0" + VIRTUAL_OVERLAY_CSS;
33
+ const VIRTUAL_DEV_HTML = "virtual:camox/dev-html";
34
+ const RESOLVED_VIRTUAL_DEV_HTML = "\0" + VIRTUAL_DEV_HTML;
32
35
  function normalizeImporterPath(importer) {
33
36
  if (!importer) return "";
34
37
  const [path] = importer.split("?");
@@ -62,27 +65,65 @@ function resolveCamoxSourceImport(id) {
62
65
  "camox/_internal/pageClient": resolve(sdkRoot, "src/features/runtime/pageClient.tsx"),
63
66
  "camox/_internal/studioClient": resolve(sdkRoot, "src/features/runtime/studioClient.tsx"),
64
67
  "camox/_internal/studioServer": resolve(sdkRoot, "src/features/runtime/studioServer.tsx"),
65
- "camox/_internal/runtime": resolve(sdkRoot, "src/features/runtime/runtime.ts")
68
+ "camox/_internal/runtime": resolve(sdkRoot, "src/features/runtime/runtime.ts"),
69
+ "camox/worker": resolve(sdkRoot, "src/features/runtime/worker.ts")
66
70
  }[id];
67
71
  if (!sourceImport || !existsSync(sourceImport)) return;
68
72
  return sourceImport;
69
73
  }
70
- function generateVirtualCamoxApp() {
74
+ /**
75
+ * The server loads every block. The browser loads blocks on demand, one module each, so
76
+ * visitors only download the blocks of the pages they see.
77
+ */
78
+ function generateVirtualCamoxApp(ssr) {
71
79
  return `import { createApp } from "camox/createApp";
80
+ import { camoxDocument } from "virtual:camox/document";
72
81
 
73
- const rootBlockModules = import.meta.glob("/src/blocks/*.{ts,tsx}", { eager: true });
74
- const legacyBlockModules = import.meta.glob("/src/camox/blocks/*.{ts,tsx}", { eager: true });
82
+ const rootCollectionModules = import.meta.glob("/src/collections/*.{ts,tsx}", { eager: true });
83
+ const legacyCollectionModules = import.meta.glob("/src/camox/collections/*.{ts,tsx}", { eager: true });
75
84
  const rootLayoutModules = import.meta.glob("/src/layouts/*.{ts,tsx}", { eager: true });
76
85
  const legacyLayoutModules = import.meta.glob("/src/camox/layouts/*.{ts,tsx}", { eager: true });
77
86
 
78
- const blocks = [...Object.values(rootBlockModules), ...Object.values(legacyBlockModules)]
79
- .map((mod) => mod.block)
80
- .filter(Boolean);
87
+ ${ssr ? `const rootBlockModules = import.meta.glob("/src/blocks/*.{ts,tsx}", { eager: true });
88
+ const legacyBlockModules = import.meta.glob("/src/camox/blocks/*.{ts,tsx}", { eager: true });
89
+ const blockEntries = Object.entries({ ...rootBlockModules, ...legacyBlockModules }).filter(
90
+ ([, mod]) => mod.block,
91
+ );
92
+ const blocks = blockEntries.map(([, mod]) => mod.block);
93
+ const lazyBlocks = {};
94
+
95
+ /** Each block's module, which the browser loads, so pages can preload it. */
96
+ export const blockModulePaths = Object.fromEntries(
97
+ blockEntries.map(([path, mod]) => [mod.block._internal.id, path]),
98
+ );` : `const blockLoaders = {
99
+ ...import.meta.glob("/src/blocks/*.{ts,tsx}", { import: "block" }),
100
+ ...import.meta.glob("/src/camox/blocks/*.{ts,tsx}", { import: "block" }),
101
+ };
102
+ const blocks = [];
103
+ // Keyed by file name, which is the block's id by convention.
104
+ const lazyBlocks = Object.fromEntries(
105
+ Object.entries(blockLoaders).map(([path, load]) => [
106
+ path.slice(path.lastIndexOf("/") + 1).replace(/\\.tsx?$/, ""),
107
+ load,
108
+ ]),
109
+ );`}
81
110
  const layouts = [...Object.values(rootLayoutModules), ...Object.values(legacyLayoutModules)]
82
111
  .map((mod) => mod.Layout ?? mod.layout)
83
112
  .filter(Boolean);
113
+ const collections = [
114
+ ...Object.values(rootCollectionModules),
115
+ ...Object.values(legacyCollectionModules),
116
+ ]
117
+ .map((mod) => mod.collection)
118
+ .filter(Boolean);
84
119
 
85
- export const camoxApp = createApp({ blocks, layouts });
120
+ export const camoxApp = createApp({
121
+ blocks,
122
+ lazyBlocks,
123
+ layouts,
124
+ collections,
125
+ document: camoxDocument,
126
+ });
86
127
  `;
87
128
  }
88
129
  function generateVirtualCamoxDocument() {
@@ -143,7 +184,8 @@ export default stylesheetUrl;
143
184
  }
144
185
  function generateVirtualCamoxServer(runtimeBasePath) {
145
186
  return `import { handleCamoxRequest as handleRuntimeRequest } from "camox/_internal/runtime";
146
- import { camoxApp } from "virtual:camox/app";
187
+ import { blockModulePaths, camoxApp } from "virtual:camox/app";
188
+ import blockChunks from "virtual:camox/block-chunks";
147
189
  import { camoxDocument } from "virtual:camox/document";
148
190
  import appStylesheetUrl from "virtual:camox/app-stylesheet-url";
149
191
  import studioStylesheetUrl from "virtual:camox-studio-css";
@@ -151,17 +193,22 @@ import pageClientEntryUrl from "virtual:camox/page-client-url";
151
193
  import studioClientEntryUrl from "virtual:camox/studio-client-url";
152
194
  import { renderPage } from "virtual:camox/page-server";
153
195
  import { renderStudio } from "virtual:camox/studio-server";
196
+ import devHtml from "virtual:camox/dev-html";
197
+
198
+ export { devHtml };
199
+ export const runtimeBasePath = ${JSON.stringify(normalizeRuntimeBasePath(runtimeBasePath))};
154
200
 
155
201
  export async function handleCamoxRequest(request) {
156
202
  return handleRuntimeRequest(request, {
157
203
  apiUrl: __CAMOX_API_URL__,
158
204
  authenticationUrl: __CAMOX_AUTHENTICATION_URL__,
205
+ blockPreloads: { modulePaths: blockModulePaths, chunks: blockChunks },
159
206
  pageClientEntryUrl,
160
207
  studioClientEntryUrl,
161
- environmentName: __CAMOX_ENVIRONMENT_NAME__,
208
+ developmentDraft: __CAMOX_DEVELOPMENT_DRAFT__,
162
209
  getCamoxApp: async () => camoxApp,
163
210
  getDocument: async () => camoxDocument,
164
- projectSlug: __CAMOX_PROJECT_SLUG__,
211
+ projectUuid: __CAMOX_PROJECT_ID__,
165
212
  renderPage,
166
213
  renderStudio,
167
214
  runtimeBasePath: ${JSON.stringify(runtimeBasePath)},
@@ -171,72 +218,6 @@ export async function handleCamoxRequest(request) {
171
218
  }
172
219
  `;
173
220
  }
174
- function generateVirtualCamoxNitroHandler(runtimeBasePath) {
175
- return `import { defineHandler } from "nitro";
176
- import { handleCamoxRequest } from "virtual:camox/server";
177
-
178
- const runtimeBasePath = ${JSON.stringify(normalizeRuntimeBasePath(runtimeBasePath))};
179
-
180
- function isDocumentRequest(request) {
181
- const accept = request.headers.get("Accept") ?? request.headers.get("accept") ?? "";
182
- return accept.includes("text/html") || accept.includes("*/*");
183
- }
184
-
185
- function getRuntimePathname(pathname) {
186
- if (!runtimeBasePath) return pathname;
187
- if (pathname === runtimeBasePath) return "/";
188
- if (!pathname.startsWith(runtimeBasePath + "/")) return null;
189
- return pathname.slice(runtimeBasePath.length) || "/";
190
- }
191
-
192
- function shouldHandleRequest(request) {
193
- const url = new URL(request.url);
194
- const pathname = getRuntimePathname(url.pathname);
195
- if (!pathname) return false;
196
- if (request.method !== "GET" && request.method !== "HEAD") return false;
197
- if (
198
- pathname === "/_camox/data" ||
199
- pathname === "/_camox/health" ||
200
- pathname === "/_camox/registry"
201
- ) {
202
- return true;
203
- }
204
- if (pathname === "/og" || pathname === "/sitemap.xml") return true;
205
- if (pathname === "/camox" || pathname.startsWith("/camox/")) return true;
206
- if (/\\.[a-z0-9]+$/i.test(pathname)) return false;
207
- if (pathname.startsWith("/@") || pathname.startsWith("/src/")) return false;
208
- if (pathname.startsWith("/__vite")) return false;
209
- if (pathname.startsWith("/node_modules/")) return false;
210
- return isDocumentRequest(request);
211
- }
212
-
213
- async function transformHtmlResponse(response) {
214
- const contentType = response.headers.get("Content-Type") ?? response.headers.get("content-type") ?? "";
215
- if (!contentType.includes("text/html")) return response;
216
- if (!globalThis.__transform_html__) return response;
217
-
218
- const headers = new Headers(response.headers);
219
- headers.delete("Content-Length");
220
- headers.delete("content-length");
221
-
222
- return new Response(await globalThis.__transform_html__(await response.text()), {
223
- headers,
224
- status: response.status,
225
- statusText: response.statusText,
226
- });
227
- }
228
-
229
- export default defineHandler(async (event) => {
230
- if (!shouldHandleRequest(event.req)) {
231
- return new Response("Not found", { status: 404 });
232
- }
233
-
234
- const response = await handleCamoxRequest(event.req);
235
- if (response) return transformHtmlResponse(response);
236
- return new Response("Not found", { status: 404 });
237
- });
238
- `;
239
- }
240
221
  function resolveRuntimeDevId(id, importer) {
241
222
  const camoxSourceImport = resolveCamoxSourceImport(id);
242
223
  if (camoxSourceImport) return camoxSourceImport;
@@ -252,14 +233,16 @@ function resolveRuntimeDevId(id, importer) {
252
233
  if (id === VIRTUAL_STUDIO_CLIENT) return RESOLVED_VIRTUAL_STUDIO_CLIENT;
253
234
  if (id === VIRTUAL_STUDIO_CLIENT_URL) return RESOLVED_VIRTUAL_STUDIO_CLIENT_URL;
254
235
  if (id === VIRTUAL_APP_STYLESHEET_URL) return RESOLVED_VIRTUAL_APP_STYLESHEET_URL;
236
+ if (id === VIRTUAL_BLOCK_CHUNKS) return RESOLVED_VIRTUAL_BLOCK_CHUNKS;
255
237
  if (id === VIRTUAL_STUDIO_CSS) return RESOLVED_VIRTUAL_STUDIO_CSS;
256
238
  if (id === VIRTUAL_OVERLAY_CSS) return RESOLVED_VIRTUAL_OVERLAY_CSS;
239
+ if (id === "virtual:camox/dev-html") return RESOLVED_VIRTUAL_DEV_HTML;
257
240
  }
258
241
  function loadRuntimeDevModule(id, options = {}) {
259
- if (id === RESOLVED_VIRTUAL_CAMOX_APP) return generateVirtualCamoxApp();
242
+ if (id === RESOLVED_VIRTUAL_CAMOX_APP) return generateVirtualCamoxApp(options.ssr !== false);
243
+ if (id === RESOLVED_VIRTUAL_BLOCK_CHUNKS) return "export default null;";
260
244
  if (id === RESOLVED_VIRTUAL_CAMOX_DOCUMENT) return generateVirtualCamoxDocument();
261
245
  if (id === RESOLVED_VIRTUAL_CAMOX_SERVER) return generateVirtualCamoxServer(options.runtimeBasePath);
262
- if (id === VIRTUAL_CAMOX_NITRO_HANDLER) return generateVirtualCamoxNitroHandler(options.runtimeBasePath);
263
246
  if (id === RESOLVED_VIRTUAL_PAGE_SERVER) return generateVirtualPageServer();
264
247
  if (id === RESOLVED_VIRTUAL_STUDIO_SERVER) return generateVirtualStudioServer();
265
248
  if (id === RESOLVED_VIRTUAL_PAGE_CLIENT) return generateVirtualPageClient();
@@ -273,26 +256,24 @@ function loadRuntimeDevModule(id, options = {}) {
273
256
  }
274
257
  if (id === RESOLVED_VIRTUAL_OVERLAY_CSS) return `export default ${JSON.stringify(readFileSync(resolve(sdkRoot, "dist/studio-overlays.css"), "utf-8"))};`;
275
258
  }
259
+ function createRuntimeRegistryPlugin(options = {}) {
260
+ return {
261
+ name: "camox-runtime-registry",
262
+ enforce: "pre",
263
+ resolveId: resolveRuntimeDevId,
264
+ load(id, loadOptions) {
265
+ return loadRuntimeDevModule(id, {
266
+ ...options,
267
+ ssr: loadOptions?.ssr
268
+ });
269
+ }
270
+ };
271
+ }
276
272
  function normalizeRuntimeBasePath(basePath) {
277
273
  if (basePath === void 0) return "";
278
274
  if (!basePath || basePath === "/") return "";
279
275
  return basePath.startsWith("/") ? basePath.replace(/\/+$/, "") : `/${basePath.replace(/\/+$/, "")}`;
280
276
  }
281
- function installRuntimeNitroRoutes(nitro, options) {
282
- const routes = options.runtimeBasePath && options.runtimeBasePath !== "/" ? [options.runtimeBasePath, `${options.runtimeBasePath}/**`] : [
283
- "/",
284
- "/_camox/data",
285
- "/_camox/health",
286
- "/_camox/registry",
287
- "/og",
288
- "/sitemap.xml",
289
- "/camox",
290
- "/camox/**",
291
- "/**"
292
- ];
293
- for (const route of routes) nitro.options.routes[route] = VIRTUAL_CAMOX_NITRO_HANDLER;
294
- nitro.options.virtual[VIRTUAL_CAMOX_NITRO_HANDLER] = generateVirtualCamoxNitroHandler(options.runtimeBasePath);
295
- }
296
277
 
297
278
  //#endregion
298
- export { installRuntimeNitroRoutes, loadRuntimeDevModule, resolveRuntimeDevId };
279
+ export { RESOLVED_VIRTUAL_DEV_HTML, VIRTUAL_DEV_HTML, createRuntimeRegistryPlugin, loadRuntimeDevModule, resolveRuntimeDevId };
@@ -1,42 +1,62 @@
1
- import { Plugin } from "vite-plus";
2
-
1
+ import { ServerApiClient } from "../../lib/api-client-server.js";
2
+ import { Logger, Plugin } from "vite-plus";
3
3
  //#region src/features/vite/vite.d.ts
4
- interface CamoxNitro {
5
- hooks: {
6
- hook: (name: "compiled", callback: (nitro: CamoxNitro) => void) => void;
7
- };
8
- options: {
9
- noExternals?: boolean | (string | RegExp)[];
10
- output: {
11
- publicDir: string;
12
- serverDir: string;
13
- };
14
- routes: Record<string, string>;
15
- virtual: Record<string, string>;
16
- };
4
+ /** What `_internal.afterSync` receives: an API client authenticated as the dev user. */
5
+ export interface CamoxAfterSyncContext {
6
+ /** Sends the dev session and reads and writes the developer's development draft. */
7
+ client: ServerApiClient;
8
+ /** The project's Project ID, which API inputs name `projectUuid`. */
9
+ projectUuid: string;
10
+ logger: Logger;
17
11
  }
18
- type CamoxVitePlugin = Plugin & {
19
- nitro?: {
20
- setup: (nitro: CamoxNitro) => void;
21
- };
22
- };
23
- interface CamoxPluginOptions {
24
- /** Stable, human-readable slug identifying this project (e.g. "prestigious-impala-84") */
25
- projectSlug: string;
12
+ export interface CamoxPluginOptions {
13
+ /**
14
+ * The project's Project ID, shown in the Camox dashboard: a lowercase UUIDv7 that never changes
15
+ * (e.g. "01a15fff-627b-7fa1-938b-93ab659c1acc").
16
+ */
17
+ projectId: string;
26
18
  /** Iconify collection available to all icon fields. */
27
19
  icons?: string;
28
20
  /** Disable telemetry collection (default: false) */
29
21
  disableTelemetry?: boolean;
30
22
  /** Internal options (intended for Camox contributors in development, not for public use) */
31
23
  _internal?: {
32
- /** URL of the Camox API backend, used for data fetching */apiUrl?: string; /** URL of the Camox authentication backend (default: https://app.camox.dev) */
33
- authenticationUrl?: string; /** Show Tanstack query devtools (default: false) */
34
- enableTanstackDevtools?: boolean; /** Enable experimental features, including feedback (default: false). */
35
- enableExperimentalFeatures?: boolean; /** Disable automatic code generation (route files and app file) (default: false) */
36
- disableCodeGen?: boolean; /** Mount the Camox-owned dev runtime at this base path. Use "/" for root mode. */
24
+ /** URL of the Camox API backend, used for data fetching */
25
+ apiUrl?: string;
26
+ /** URL of the Camox authentication backend (default: https://app.camox.dev) */
27
+ authenticationUrl?: string;
28
+ /** Show Tanstack query devtools (default: false) */
29
+ enableTanstackDevtools?: boolean;
30
+ /** Enable experimental features (default: false). */
31
+ enableExperimentalFeatures?: boolean;
32
+ /** Disable automatic code generation (route and layout files) (default: false) */
33
+ disableCodeGen?: boolean;
34
+ /** Mount the Camox-owned dev runtime at this base path. Use "/" for root mode. */
37
35
  runtimeBasePath?: string;
36
+ /** Opt-in browser opening for this app's generated development sign-in link. */
37
+ devSignIn?: {
38
+ open?: boolean;
39
+ /** Empty marker file shared across restarts of one dev invocation. */
40
+ openOnceFile?: string;
41
+ };
42
+ /**
43
+ * Dev-only: runs once per dev server start, after the initial definition sync
44
+ * succeeds. A failure is logged as a warning and never breaks dev.
45
+ */
46
+ afterSync?: (context: CamoxAfterSyncContext) => void | Promise<void>;
47
+ /**
48
+ * Dev-only: a deploy token for seeding Live. When Live has no pages yet, the first sync
49
+ * releases the local definitions to Live, and the development draft is published after
50
+ * `afterSync`, so seeded content becomes Live instead of the draft's changes.
51
+ */
52
+ seedLiveDeployToken?: string;
38
53
  };
39
54
  }
40
- declare function camox(options: CamoxPluginOptions): CamoxVitePlugin;
41
- //#endregion
42
- export { CamoxPluginOptions, camox };
55
+ export declare const CAMOX_OPTIMIZED_DEPS: string[];
56
+ /**
57
+ * The Worker runs in workerd, so its dependencies are pre-bundled too. Discovering them one
58
+ * request at a time would reload the Worker for each, so start from the browser's list.
59
+ */
60
+ export declare const CAMOX_WORKER_OPTIMIZED_DEPS: string[];
61
+ export declare function camox(options: CamoxPluginOptions): Plugin;
62
+ //#endregion