camox 0.43.0 → 0.45.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 (412) hide show
  1. package/bin/camox.mjs +9 -1
  2. package/dist/components/AuthGate.js +0 -6
  3. package/dist/components/DeviceSelector.js +96 -0
  4. package/dist/components/PlatformLabel.js +20 -24
  5. package/dist/core/components/lexical/HighlightNode.js +1 -1
  6. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  7. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  8. package/dist/core/components/lexical/InlineStylesPlugin.js +57 -41
  9. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  10. package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
  11. package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
  12. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  13. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  14. package/dist/core/createApp.d.ts +254 -299
  15. package/dist/core/createApp.js +123 -29
  16. package/dist/core/createBlock.d.ts +5 -5
  17. package/dist/core/createBlock.js +399 -152
  18. package/dist/core/createCollection.d.ts +55 -0
  19. package/dist/core/createCollection.js +93 -0
  20. package/dist/core/createLayout.d.ts +197 -61
  21. package/dist/core/createLayout.js +114 -56
  22. package/dist/core/defineDocument.d.ts +3 -5
  23. package/dist/core/derivedRoutes.js +49 -1
  24. package/dist/core/dom.d.ts +13 -4
  25. package/dist/core/dom.js +44 -1
  26. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  27. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  28. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  29. package/dist/core/editing/createEditableBlock.d.ts +820 -565
  30. package/dist/core/editing/createEditableBlock.js +2153 -971
  31. package/dist/core/editing/referenceWrites.js +51 -0
  32. package/dist/core/editing/useLatestRecord.js +90 -0
  33. package/dist/core/hooks/useArtifactHost.js +139 -0
  34. package/dist/core/hooks/useFieldSelection.js +43 -18
  35. package/dist/core/hooks/useIsEditable.js +12 -10
  36. package/dist/core/hooks/useOverlayMessage.js +15 -19
  37. package/dist/core/lib/artifact.d.ts +21 -0
  38. package/dist/core/lib/artifact.js +154 -0
  39. package/dist/core/lib/artifactColors.js +123 -0
  40. package/dist/core/lib/artifactData.d.ts +1 -0
  41. package/dist/core/lib/artifactData.js +131 -0
  42. package/dist/core/lib/artifactHost.js +205 -0
  43. package/dist/core/lib/artifactRuntime.js +36 -0
  44. package/dist/core/lib/artifactTheme.js +57 -0
  45. package/dist/core/lib/contentType.d.ts +304 -103
  46. package/dist/core/lib/contentType.js +207 -168
  47. package/dist/core/lib/fieldTypes.js +4 -0
  48. package/dist/core/lib/iconTypes.d.ts +13 -0
  49. package/dist/core/lib/icons.d.ts +6 -0
  50. package/dist/core/lib/icons.js +126 -0
  51. package/dist/core/lib/imagePlaceholder.js +177 -0
  52. package/dist/core/lib/imageTransform.js +1 -1
  53. package/dist/core/lib/lexicalReact.d.ts +3 -1
  54. package/dist/core/lib/lexicalState.js +7 -7
  55. package/dist/core/lib/modifierFormats.js +1 -1
  56. package/dist/core/lib/previewPaused.js +9 -0
  57. package/dist/core/lib/recordScope.js +316 -0
  58. package/dist/core/lib/reference.d.ts +81 -0
  59. package/dist/core/lib/reference.js +29 -0
  60. package/dist/core/lib/textLinks.js +7 -5
  61. package/dist/core/lib/textStyles.d.ts +6 -8
  62. package/dist/core/lib/textStyles.js +5 -5
  63. package/dist/core/notFound.d.ts +7 -0
  64. package/dist/core/notFound.js +11 -0
  65. package/dist/core/pageDestinations.js +6 -3
  66. package/dist/core/recordItem.js +34 -0
  67. package/dist/core/requestContext.d.ts +26 -0
  68. package/dist/core/requestContext.js +20 -0
  69. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  70. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  71. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  72. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  73. package/dist/features/canvas/CanvasOverlays.js +254 -0
  74. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  75. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  76. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  77. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  78. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  79. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  80. package/dist/features/canvas/canvasCamera.js +229 -0
  81. package/dist/features/canvas/canvasFlight.js +104 -0
  82. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  83. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  84. package/dist/features/canvas/canvasFrameMode.js +53 -0
  85. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  86. package/dist/features/canvas/canvasItems.js +120 -0
  87. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  88. package/dist/features/canvas/canvasPages.js +79 -0
  89. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  90. package/dist/features/canvas/canvasSelection.js +18 -0
  91. package/dist/features/canvas/canvasStore.js +149 -0
  92. package/dist/features/canvas/canvasThumbnails.js +304 -0
  93. package/dist/features/canvas/canvasZoom.js +10 -0
  94. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  95. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  97. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  98. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  99. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  100. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  101. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  102. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  103. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  104. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  105. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  106. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  107. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  108. package/dist/features/canvas/useCanvasCamera.js +803 -0
  109. package/dist/features/canvas/useCanvasFrame.js +149 -0
  110. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  111. package/dist/features/canvas/useCanvasNearness.js +57 -0
  112. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  113. package/dist/features/content/CamoxContent.d.ts +2 -5
  114. package/dist/features/content/CamoxContent.js +174 -271
  115. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  116. package/dist/features/content/ContentAssets.js +315 -0
  117. package/dist/features/content/ContentCollection.js +663 -0
  118. package/dist/features/content/collection-form.js +58 -0
  119. package/dist/features/content/components/AssetCard.js +101 -69
  120. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  121. package/dist/features/content/components/ContentSidebar.js +129 -18
  122. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  123. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  124. package/dist/features/content/components/MissingFromLocale.js +282 -0
  125. package/dist/features/content/components/UploadDropZone.js +27 -31
  126. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  127. package/dist/features/navigation/navigation.d.ts +66 -20
  128. package/dist/features/navigation/navigation.js +257 -90
  129. package/dist/features/og/defaultFonts.js +8 -8
  130. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  131. package/dist/features/og/imageResponse.d.ts +8 -0
  132. package/dist/features/og/imageResponse.js +26 -0
  133. package/dist/features/page/CuratedPageContent.js +167 -0
  134. package/dist/features/page/DerivedPageContent.js +26 -30
  135. package/dist/features/page/SharedLayoutContent.js +25 -27
  136. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  137. package/dist/features/preview/CamoxPreview.js +811 -507
  138. package/dist/features/preview/EditablePageContent.js +1 -1
  139. package/dist/features/preview/EditablePageExperience.js +16 -22
  140. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  141. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  142. package/dist/features/preview/components/AssetLightbox.js +194 -136
  143. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  144. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  145. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  146. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  147. package/dist/features/preview/components/CanvasPreview.js +243 -0
  148. package/dist/features/preview/components/CreatePageModal.js +128 -137
  149. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  150. package/dist/features/preview/components/DerivedLayoutDialog.js +46 -29
  151. package/dist/features/preview/components/DrillRow.js +150 -0
  152. package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
  153. package/dist/features/preview/components/FieldToolbar.js +166 -116
  154. package/dist/features/preview/components/Frame.js +108 -20
  155. package/dist/features/preview/components/IconFieldEditor.js +227 -0
  156. package/dist/features/preview/components/ItemFieldsEditor.js +238 -205
  157. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  158. package/dist/features/preview/components/Metadata.js +22 -30
  159. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  160. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  161. package/dist/features/preview/components/OverlayTracker.js +10 -42
  162. package/dist/features/preview/components/Overlays.js +81 -69
  163. package/dist/features/preview/components/PageInfo.js +1748 -0
  164. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  165. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  166. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  167. package/dist/features/preview/components/PageNicknameField.js +22 -26
  168. package/dist/features/preview/components/PagePicker.js +145 -147
  169. package/dist/features/preview/components/PageTree.js +525 -532
  170. package/dist/features/preview/components/PreviewActivation.js +28 -32
  171. package/dist/features/preview/components/PreviewPanel.js +620 -319
  172. package/dist/features/preview/components/PreviewToolbar.js +111 -340
  173. package/dist/features/preview/components/RecordCard.js +80 -0
  174. package/dist/features/preview/components/RecordCombobox.js +178 -0
  175. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  176. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  177. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  178. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  179. package/dist/features/preview/components/SelectionEditor.js +993 -0
  180. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  181. package/dist/features/preview/components/SidebarSection.js +52 -64
  182. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  183. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  184. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  185. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  186. package/dist/features/preview/components/useFieldWriter.js +200 -0
  187. package/dist/features/preview/components/useRecordView.js +383 -0
  188. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  189. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  190. package/dist/features/preview/editingFrame.js +197 -0
  191. package/dist/features/preview/overlayHighlights.js +27 -0
  192. package/dist/features/preview/overlayMessages.js +72 -1
  193. package/dist/features/preview/pageRecord.js +189 -0
  194. package/dist/features/preview/previewConstants.js +6 -2
  195. package/dist/features/preview/previewPageFrame.js +95 -0
  196. package/dist/features/preview/previewPreparation.js +7 -0
  197. package/dist/features/preview/previewSelection.js +33 -59
  198. package/dist/features/preview/previewStore.js +225 -123
  199. package/dist/features/preview/referencePickerFocus.js +29 -0
  200. package/dist/features/preview/repeatableItemTargets.js +56 -0
  201. package/dist/features/preview/selectionReveal.js +21 -0
  202. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  203. package/dist/features/preview/viewportContinuity.js +109 -0
  204. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  205. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  206. package/dist/features/provider/CamoxProvider.js +38 -50
  207. package/dist/features/provider/CoreCamoxProvider.js +71 -23
  208. package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
  209. package/dist/features/provider/PreviewSignInPage.js +54 -0
  210. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  211. package/dist/features/provider/components/CommandPalette.js +87 -143
  212. package/dist/features/provider/useAdminShortcuts.js +7 -11
  213. package/dist/features/routes/pageRuntime.d.ts +44 -4
  214. package/dist/features/routes/pageRuntime.js +244 -137
  215. package/dist/features/runtime/RuntimeChrome.js +117 -115
  216. package/dist/features/runtime/alternates.js +64 -0
  217. package/dist/features/runtime/analytics.d.ts +7 -0
  218. package/dist/features/runtime/analytics.js +66 -0
  219. package/dist/features/runtime/artifactSources.js +87 -0
  220. package/dist/features/runtime/editingFallback.js +20 -0
  221. package/dist/features/runtime/linkPrefetch.js +97 -0
  222. package/dist/features/runtime/livePages.js +62 -0
  223. package/dist/features/runtime/llmsTxt.js +40 -0
  224. package/dist/features/runtime/loopbackFetch.js +18 -0
  225. package/dist/features/runtime/navigationAccessibility.js +51 -0
  226. package/dist/features/runtime/navigationTarget.js +23 -2
  227. package/dist/features/runtime/pageApp.js +216 -141
  228. package/dist/features/runtime/pageBlockTypes.js +20 -0
  229. package/dist/features/runtime/pageClient.d.ts +2 -4
  230. package/dist/features/runtime/pageClient.js +18 -3
  231. package/dist/features/runtime/pageNavigation.js +254 -32
  232. package/dist/features/runtime/pageServer.d.ts +2 -4
  233. package/dist/features/runtime/pageServer.js +8 -1
  234. package/dist/features/runtime/pageViewport.js +7 -0
  235. package/dist/features/runtime/runtime.d.ts +60 -23
  236. package/dist/features/runtime/runtime.js +779 -166
  237. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  238. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  239. package/dist/features/runtime/runtimeRoutes.js +25 -0
  240. package/dist/features/runtime/scrollRestoration.js +133 -0
  241. package/dist/features/runtime/studioApp.d.ts +4 -3
  242. package/dist/features/runtime/studioApp.js +5 -9
  243. package/dist/features/runtime/studioClient.d.ts +2 -4
  244. package/dist/features/runtime/studioClient.js +12 -3
  245. package/dist/features/runtime/studioServer.d.ts +2 -4
  246. package/dist/features/runtime/studioServer.js +6 -1
  247. package/dist/features/runtime/worker.d.ts +6 -0
  248. package/dist/features/runtime/worker.js +23 -0
  249. package/dist/features/runtime/workerRequest.js +44 -0
  250. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  251. package/dist/features/studio/CamoxStudio.js +34 -49
  252. package/dist/features/studio/FollowAgentProvider.js +338 -0
  253. package/dist/features/studio/components/ChatSidebar.js +356 -0
  254. package/dist/features/studio/components/DraftsControl.js +676 -0
  255. package/dist/features/studio/components/FaviconDialog.js +318 -0
  256. package/dist/features/studio/components/LocalePicker.js +785 -0
  257. package/dist/features/studio/components/Navbar.js +123 -103
  258. package/dist/features/studio/components/ProjectMenu.js +239 -260
  259. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  260. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  261. package/dist/features/studio/components/ThreadComposer.js +157 -0
  262. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  263. package/dist/features/studio/components/ThreadMessages.js +270 -0
  264. package/dist/features/studio/components/UserButton.js +34 -23
  265. package/dist/features/studio/draftLabel.js +33 -0
  266. package/dist/features/studio/draftNotice.js +13 -0
  267. package/dist/features/studio/followAgent.js +250 -0
  268. package/dist/features/studio/followAgentContext.js +7 -0
  269. package/dist/features/studio/localeOptions.js +118 -0
  270. package/dist/features/studio/localeSwitch.js +19 -0
  271. package/dist/features/studio/routes.js +48 -1
  272. package/dist/features/studio/studioStore.js +64 -1
  273. package/dist/features/studio/useTheme.js +24 -27
  274. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  275. package/dist/features/vite/auth.js +1 -50
  276. package/dist/features/vite/blockBoilerplate.js +6 -5
  277. package/dist/features/vite/blockChunks.js +31 -0
  278. package/dist/features/vite/bundlerLogs.js +17 -0
  279. package/dist/features/vite/definitionsSync.js +158 -226
  280. package/dist/features/vite/devAuthentication.js +4 -16
  281. package/dist/features/vite/devSignIn.js +87 -0
  282. package/dist/features/vite/iconGeneration.js +16 -0
  283. package/dist/features/vite/layoutGeneration.js +11 -1
  284. package/dist/features/vite/publishSeededContent.js +30 -0
  285. package/dist/features/vite/routeGeneration.js +6 -7
  286. package/dist/features/vite/runtimeDev.js +80 -99
  287. package/dist/features/vite/vite.d.ts +53 -31
  288. package/dist/features/vite/vite.js +230 -116
  289. package/dist/features/vite/workerBuild.js +39 -0
  290. package/dist/hooks/use-debounced-field.js +116 -47
  291. package/dist/hooks/use-file-upload.js +114 -67
  292. package/dist/hooks/use-marquee-selection.js +32 -36
  293. package/dist/hooks/use-page-destinations.js +69 -37
  294. package/dist/lib/api-client-server.d.ts +5 -0
  295. package/dist/lib/api-client-server.js +10 -4
  296. package/dist/lib/api-client.d.ts +6 -0
  297. package/dist/lib/api-client.js +51 -16
  298. package/dist/lib/api-socket.js +17 -0
  299. package/dist/lib/auth-page-styles.js +39 -0
  300. package/dist/lib/auth.js +139 -60
  301. package/dist/lib/collection-cache.js +23 -0
  302. package/dist/lib/draft-scope.d.ts +4 -0
  303. package/dist/lib/draft-scope.js +222 -0
  304. package/dist/lib/html.js +12 -0
  305. package/dist/lib/link-pages.js +154 -0
  306. package/dist/lib/locale-path.d.ts +22 -0
  307. package/dist/lib/locale-path.js +57 -0
  308. package/dist/lib/normalized-data.js +252 -152
  309. package/dist/lib/preview-handoff.js +13 -0
  310. package/dist/lib/queries.d.ts +11 -0
  311. package/dist/lib/queries.js +71 -131
  312. package/dist/lib/studio-reads.d.ts +14 -0
  313. package/dist/lib/studio-reads.js +574 -0
  314. package/dist/lib/use-project-room.js +50 -47
  315. package/dist/lib/use-thread.js +310 -0
  316. package/dist/lib/utils.js +25 -29
  317. package/dist/lib/view-locale-context.js +22 -0
  318. package/dist/lib/view-locale.js +46 -0
  319. package/dist/package.js +5 -0
  320. package/dist/studio-overlays.css +41 -147
  321. package/dist/studio.css +2 -2
  322. package/package.json +70 -72
  323. package/skills/camox/SKILL.md +16 -5
  324. package/skills/camox/references/artifacts.md +179 -0
  325. package/skills/camox/references/block-definitions.md +98 -55
  326. package/skills/camox/references/cli-common.md +18 -6
  327. package/skills/camox/references/cli-content.md +92 -58
  328. package/skills/camox/references/cli-publishing.md +26 -0
  329. package/skills/camox/references/dom-integrations.md +27 -0
  330. package/skills/camox/references/field-styling.md +7 -7
  331. package/skills/camox/references/layout-definitions.md +16 -14
  332. package/skills/camox/references/localization.md +56 -0
  333. package/skills/camox/references/routed-layouts.md +133 -15
  334. package/skills/camox-expand/SKILL.md +69 -0
  335. package/skills/camox-expand/references/jobs.md +39 -0
  336. package/skills/camoxify/SKILL.md +38 -2
  337. package/dist/core/components/AddBlockControlBar.js +0 -78
  338. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  339. package/dist/features/metadata/sitemap.d.ts +0 -8
  340. package/dist/features/metadata/sitemap.js +0 -17
  341. package/dist/features/og/imageResponse.node.d.ts +0 -12
  342. package/dist/features/og/imageResponse.node.js +0 -49
  343. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  344. package/dist/features/og/imageResponse.workerd.js +0 -40
  345. package/dist/features/page/PublishedPageContent.js +0 -205
  346. package/dist/features/page/PublishedPageExperience.js +0 -23
  347. package/dist/features/preview/DerivedPreview.js +0 -134
  348. package/dist/features/preview/commentsEnabled.js +0 -8
  349. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  350. package/dist/features/preview/components/AttachedComments.js +0 -194
  351. package/dist/features/preview/components/CommentHeader.js +0 -122
  352. package/dist/features/preview/components/CommentSidebar.js +0 -29
  353. package/dist/features/preview/components/CommentTargetQuote.js +0 -166
  354. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  355. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  356. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  357. package/dist/features/preview/components/LeftSidebar.js +0 -68
  358. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  359. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  360. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  361. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  362. package/dist/features/preview/components/PeekedBlock.js +0 -217
  363. package/dist/features/preview/components/PreviewComments.js +0 -56
  364. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  365. package/dist/features/preview/components/PublicationRow.js +0 -422
  366. package/dist/features/preview/components/PublishDialog.js +0 -194
  367. package/dist/features/preview/components/RightSidebar.js +0 -59
  368. package/dist/features/preview/previewCommentsStore.js +0 -115
  369. package/dist/features/preview/publication.js +0 -81
  370. package/dist/features/runtime/SharedChromeContext.js +0 -7
  371. package/dist/features/studio/components/EnvironmentMenu.js +0 -413
  372. package/dist/features/vite/appGeneration.js +0 -89
  373. package/dist/lib/view-queries.js +0 -28
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  387. 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
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  398. 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
  399. 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
  400. 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
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  411. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  412. package/skills/camox/references/cli-environments.md +0 -37
@@ -0,0 +1,40 @@
1
+ //#region src/features/runtime/llmsTxt.ts
2
+ /** At most this many pages of a derived layout are listed; the sitemap lists them all. */
3
+ const LLMS_TXT_DERIVED_LAYOUT_CAP = 100;
4
+ /** Text that can't break out of a list entry or a blockquote, whatever Markdown it holds. */
5
+ function escapeMarkdown(text) {
6
+ return text.replace(/\s+/g, " ").trim().replace(/[\\`*_[\]<>]/g, "\\$&");
7
+ }
8
+ /** A URL that can't end its Markdown link early. */
9
+ function escapeLinkTarget(url) {
10
+ return url.replace(/\s/g, encodeURIComponent).replace(/\(/g, "%28").replace(/\)/g, "%29");
11
+ }
12
+ function markdownPath(page) {
13
+ if (!page.hasMarkdown) return page.fullPath;
14
+ return page.fullPath === "/" ? "/index.md" : `${page.fullPath}.md`;
15
+ }
16
+ /**
17
+ * The website's index for LLMs, following llmstxt.org: the project's name, the home page's
18
+ * description, then a section per layout, in the app's order, linking each page's Markdown.
19
+ */
20
+ function formatLlmsTxt({ projectName, pages, layouts, url }) {
21
+ const link = (text, path) => `[${escapeMarkdown(text)}](${escapeLinkTarget(url(path))})`;
22
+ const lines = [`# ${escapeMarkdown(projectName)}`];
23
+ const summary = pages.find((page) => page.fullPath === "/")?.description;
24
+ if (summary) lines.push("", `> ${escapeMarkdown(summary)}`);
25
+ for (const layout of layouts) {
26
+ const entries = pages.filter((page) => page.layoutId === layout.id).sort((a, b) => a.fullPath < b.fullPath ? -1 : a.fullPath > b.fullPath ? 1 : 0);
27
+ if (entries.length === 0) continue;
28
+ const cap = layout.kind === "derived" ? 100 : Infinity;
29
+ lines.push("", `## ${escapeMarkdown(layout.title)}`, "");
30
+ for (const page of entries.slice(0, cap)) {
31
+ const description = page.description ? `: ${escapeMarkdown(page.description)}` : "";
32
+ lines.push(`- ${link(page.title, markdownPath(page))}${description}`);
33
+ }
34
+ if (entries.length > cap) lines.push("", `${entries.length - cap} more ${escapeMarkdown(layout.title)} pages are listed in the ${link("sitemap", "/sitemap.xml")}.`);
35
+ }
36
+ return `${lines.join("\n")}\n`;
37
+ }
38
+
39
+ //#endregion
40
+ export { formatLlmsTxt };
@@ -0,0 +1,18 @@
1
+ //#region src/features/runtime/loopbackFetch.ts
2
+ /**
3
+ * Browsers resolve any `*.localhost` name to loopback, but the Workers runtime asks the
4
+ * OS, which need not. Local dev servers (like the per-checkout API) use such names, so
5
+ * the dev worker reaches them on 127.0.0.1 instead.
6
+ */
7
+ function fetchLocalhostOnLoopback(fetch) {
8
+ return (input, init) => {
9
+ const request = new Request(input, init);
10
+ const url = new URL(request.url);
11
+ if (!url.hostname.endsWith(".localhost")) return fetch(request);
12
+ url.hostname = "127.0.0.1";
13
+ return fetch(new Request(url, request));
14
+ };
15
+ }
16
+
17
+ //#endregion
18
+ export { fetchLocalhostOnLoopback };
@@ -0,0 +1,51 @@
1
+ //#region src/features/runtime/navigationAccessibility.ts
2
+ /**
3
+ * What assistive technology gets from a client navigation, which the browser only provides for
4
+ * document loads: focus that starts over on the new page, and the new page's name read out.
5
+ */
6
+ /** Focuses `element` without scrolling, even if it can't take focus by itself. */
7
+ function focusWithoutScrolling(element) {
8
+ if (element.tabIndex >= 0 || element.hasAttribute("tabindex")) {
9
+ element.focus({ preventScroll: true });
10
+ return;
11
+ }
12
+ element.setAttribute("tabindex", "-1");
13
+ element.focus({ preventScroll: true });
14
+ element.addEventListener("blur", () => element.removeAttribute("tabindex"), { once: true });
15
+ }
16
+ /**
17
+ * Moves focus within the page `doc` just rendered, as a document load would: to the fragment's
18
+ * element, so Tab continues from there, or else to the start of the page. Focus outside the page,
19
+ * like in Studio, stays where it is.
20
+ */
21
+ function focusNewPage(doc, fragment) {
22
+ if (!doc.hasFocus()) return;
23
+ const target = fragment ?? doc.body;
24
+ if (target) focusWithoutScrolling(target);
25
+ }
26
+ const visuallyHidden = "position:absolute;width:1px;height:1px;margin:-1px;padding:0;border:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap";
27
+ /**
28
+ * A live region in `doc` that reads out each page navigated to. It exists before the first
29
+ * announcement, as screen readers only read changes to regions they already know.
30
+ */
31
+ function createRouteAnnouncer(doc) {
32
+ const region = doc.createElement("div");
33
+ region.setAttribute("aria-live", "assertive");
34
+ region.setAttribute("aria-atomic", "true");
35
+ region.setAttribute("data-camox-route-announcer", "");
36
+ region.setAttribute("style", visuallyHidden);
37
+ doc.body.append(region);
38
+ return {
39
+ /** Reads out the page `page` shows: its title, else its main heading, else its path. */
40
+ announce(page, pathname) {
41
+ const name = doc.title || page.title || page.querySelector("h1")?.textContent?.trim() || pathname;
42
+ region.textContent = name;
43
+ },
44
+ dispose() {
45
+ region.remove();
46
+ }
47
+ };
48
+ }
49
+
50
+ //#endregion
51
+ export { createRouteAnnouncer, focusNewPage };
@@ -1,9 +1,30 @@
1
+ import { localeHeaders } from "../../lib/locale-path.js";
2
+ import { matchRuntimeOwnedRoute } from "./runtimeRoutes.js";
3
+
1
4
  //#region src/features/runtime/navigationTarget.ts
2
5
  function runtimePath(pathname, basePath) {
3
6
  const base = basePath.replace(/\/$/, "");
4
7
  if (!base || pathname === base || pathname.startsWith(`${base}/`)) return pathname;
5
8
  return `${base}${pathname.startsWith("/") ? pathname : `/${pathname}`}`;
6
9
  }
10
+ /**
11
+ * Requests one of the runtime's JSON endpoints (`/_camox/data`, `/_camox/routes`) as the editor,
12
+ * reading `draft` (null for Live) in `locale` (the default locale without it). Dev mode's runtime
13
+ * always reads the development draft. A path the endpoint takes names its own locale by its
14
+ * prefix; route discovery, which takes none, reads the locale the request names.
15
+ */
16
+ function fetchRuntimeJson(draftScope, endpoint, runtimeBasePath, params, draft, signal, locale) {
17
+ const url = new URL(runtimePath(endpoint, runtimeBasePath), window.location.origin);
18
+ for (const [name, value] of Object.entries(params)) url.searchParams.set(name, value);
19
+ return fetch(new URL(draftScope.hrefFor(url.href, { draft })), {
20
+ credentials: "same-origin",
21
+ headers: {
22
+ Accept: "application/json",
23
+ ...localeHeaders(locale)
24
+ },
25
+ signal
26
+ });
27
+ }
7
28
  function getNavigationTarget(to, currentHref, basePath) {
8
29
  const url = new URL(to, currentHref);
9
30
  const current = new URL(currentHref);
@@ -11,7 +32,7 @@ function getNavigationTarget(to, currentHref, basePath) {
11
32
  const base = basePath.replace(/\/$/, "");
12
33
  if (base && /^(https?:)?\/\//.test(to) && url.pathname !== base && !url.pathname.startsWith(`${base}/`)) return null;
13
34
  const pathname = base && (url.pathname === base || url.pathname.startsWith(`${base}/`)) ? url.pathname.slice(base.length) || "/" : url.pathname;
14
- if (pathname === "/_camox" || pathname.startsWith("/_camox/") || pathname === "/og" || pathname === "/sitemap.xml") return null;
35
+ if (pathname === "/_camox" || pathname.startsWith("/_camox/") || matchRuntimeOwnedRoute(pathname)) return null;
15
36
  url.pathname = runtimePath(pathname, base);
16
37
  return {
17
38
  url,
@@ -20,4 +41,4 @@ function getNavigationTarget(to, currentHref, basePath) {
20
41
  }
21
42
 
22
43
  //#endregion
23
- export { getNavigationTarget, runtimePath };
44
+ export { fetchRuntimeJson, getNavigationTarget, runtimePath };
@@ -1,39 +1,38 @@
1
1
  import { useAuthState, useSignInRedirect } from "../../lib/auth.js";
2
+ import { DraftScopeContext } from "../../lib/draft-scope.js";
3
+ import { DerivedPageContent } from "../page/DerivedPageContent.js";
2
4
  import { PreviewDocumentContext } from "./PreviewDocumentContext.js";
3
5
  import { PreviewActivation } from "../preview/components/PreviewActivation.js";
4
6
  import { Frame } from "../preview/components/Frame.js";
7
+ import { PreviewSignInPage } from "../provider/PreviewSignInPage.js";
5
8
  import { CoreCamoxProvider, isLocalhostPreview } from "../provider/CoreCamoxProvider.js";
6
- import { DerivedPageContent } from "../page/DerivedPageContent.js";
7
- import { PublishedPageExperience } from "../page/PublishedPageExperience.js";
9
+ import { CuratedPageContent } from "../page/CuratedPageContent.js";
10
+ import { EditingFallbackSlot } from "./editingFallback.js";
8
11
  import { PageNavigationProvider } from "./pageNavigation.js";
9
- import { RuntimeChrome } from "./RuntimeChrome.js";
12
+ import { RuntimeChromeSlot } from "./runtimeChromeLoader.js";
10
13
  import { c } from "react/compiler-runtime";
11
- import { HydrationBoundary, QueryClientProvider } from "@tanstack/react-query";
12
14
  import * as React from "react";
13
- import { jsx } from "react/jsx-runtime";
15
+ import { jsx, jsxs } from "react/jsx-runtime";
16
+ import { HydrationBoundary, QueryClientProvider } from "@tanstack/react-query";
14
17
 
15
18
  //#region src/features/runtime/pageApp.tsx
19
+ /** The page app of one server request or browser window, viewing the draft `draftScope` names. */
16
20
  function PageApp(t0) {
17
- const $ = c(19);
18
- if ($[0] !== "9929b5234f34e8dc8642da9eb491a90e9a57f3ab875ddfc1a186f42f4452f2f5") {
19
- for (let $i = 0; $i < 19; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
20
- $[0] = "9929b5234f34e8dc8642da9eb491a90e9a57f3ab875ddfc1a186f42f4452f2f5";
21
- }
22
- const { camoxApp, input, queryClient } = t0;
21
+ const $ = c(22);
22
+ const { camoxApp, draftScope, input, queryClient } = t0;
23
23
  const t1 = input.dehydratedState;
24
24
  let t2;
25
- if ($[1] !== camoxApp || $[2] !== input.apiUrl || $[3] !== input.authenticationUrl || $[4] !== input.environmentName || $[5] !== input.presentation || $[6] !== input.projectSlug || $[7] !== queryClient) {
25
+ if ($[0] !== camoxApp || $[1] !== input.apiUrl || $[2] !== input.authenticationUrl || $[3] !== input.presentation || $[4] !== input.previewHandoff || $[5] !== input.projectUuid || $[6] !== queryClient) {
26
26
  t2 = (currentInput) => /* @__PURE__ */ jsx(CoreCamoxProvider, {
27
27
  camoxApp,
28
28
  authenticationUrl: input.authenticationUrl,
29
29
  apiUrl: input.apiUrl,
30
- projectSlug: input.projectSlug,
31
- environmentName: input.environmentName,
30
+ projectUuid: input.projectUuid,
32
31
  initialAuthenticated: input.presentation === "studio",
33
32
  initialProject: currentInput.project,
34
33
  children: /* @__PURE__ */ jsx(PreviewDocumentContext.Provider, {
35
34
  value: currentInput.previewDocument,
36
- children: /* @__PURE__ */ jsx(PageExperience, {
35
+ children: input.previewHandoff ? /* @__PURE__ */ jsx(PreviewSignInPage, {}) : /* @__PURE__ */ jsx(PageExperience, {
37
36
  camoxApp,
38
37
  input: currentInput,
39
38
  queryClient,
@@ -41,22 +40,24 @@ function PageApp(t0) {
41
40
  })
42
41
  })
43
42
  });
44
- $[1] = camoxApp;
45
- $[2] = input.apiUrl;
46
- $[3] = input.authenticationUrl;
47
- $[4] = input.environmentName;
48
- $[5] = input.presentation;
49
- $[6] = input.projectSlug;
50
- $[7] = queryClient;
51
- $[8] = t2;
52
- } else t2 = $[8];
43
+ $[0] = camoxApp;
44
+ $[1] = input.apiUrl;
45
+ $[2] = input.authenticationUrl;
46
+ $[3] = input.presentation;
47
+ $[4] = input.previewHandoff;
48
+ $[5] = input.projectUuid;
49
+ $[6] = queryClient;
50
+ $[7] = t2;
51
+ } else t2 = $[7];
53
52
  let t3;
54
- if ($[9] !== input || $[10] !== queryClient || $[11] !== t2) {
53
+ if ($[8] !== camoxApp || $[9] !== input || $[10] !== queryClient || $[11] !== t2) {
55
54
  t3 = /* @__PURE__ */ jsx(PageNavigationProvider, {
55
+ camoxApp,
56
56
  initialInput: input,
57
57
  queryClient,
58
58
  children: t2
59
59
  });
60
+ $[8] = camoxApp;
60
61
  $[9] = input;
61
62
  $[10] = queryClient;
62
63
  $[11] = t2;
@@ -73,19 +74,34 @@ function PageApp(t0) {
73
74
  $[15] = t4;
74
75
  } else t4 = $[15];
75
76
  let t5;
76
- if ($[16] !== queryClient || $[17] !== t4) {
77
- t5 = /* @__PURE__ */ jsx(QueryClientProvider, {
78
- client: queryClient,
77
+ if ($[16] !== draftScope || $[17] !== t4) {
78
+ t5 = /* @__PURE__ */ jsx(DraftScopeContext.Provider, {
79
+ value: draftScope,
79
80
  children: t4
80
81
  });
81
- $[16] = queryClient;
82
+ $[16] = draftScope;
82
83
  $[17] = t4;
83
84
  $[18] = t5;
84
85
  } else t5 = $[18];
85
- return t5;
86
+ let t6;
87
+ if ($[19] !== queryClient || $[20] !== t5) {
88
+ t6 = /* @__PURE__ */ jsx(QueryClientProvider, {
89
+ client: queryClient,
90
+ children: t5
91
+ });
92
+ $[19] = queryClient;
93
+ $[20] = t5;
94
+ $[21] = t6;
95
+ } else t6 = $[21];
96
+ return t6;
86
97
  }
87
98
  const LazyEditablePageExperience = React.lazy(() => import("../preview/EditablePageExperience.js").then((module) => ({ default: module.EditablePageExperience })));
88
99
  const LazyLocalhostPreviewProvider = React.lazy(() => import("../provider/LocalhostPreviewProvider.js").then((module) => ({ default: module.LocalhostPreviewProvider })));
100
+ /** Editing lists and adds any block, so it waits for every definition, not only the page's. */
101
+ function AllBlocks({ camoxApp, children }) {
102
+ React.use(camoxApp.loadAllBlocks());
103
+ return children;
104
+ }
89
105
  var EditingActivationBoundary = class extends React.Component {
90
106
  state = { failed: false };
91
107
  static getDerivedStateFromError() {
@@ -100,157 +116,185 @@ var EditingActivationBoundary = class extends React.Component {
100
116
  };
101
117
  const subscribeToHydration = () => () => {};
102
118
  function PageExperience(t0) {
103
- const $ = c(39);
104
- if ($[0] !== "9929b5234f34e8dc8642da9eb491a90e9a57f3ab875ddfc1a186f42f4452f2f5") {
105
- for (let $i = 0; $i < 39; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
106
- $[0] = "9929b5234f34e8dc8642da9eb491a90e9a57f3ab875ddfc1a186f42f4452f2f5";
107
- }
119
+ const $ = c(46);
108
120
  const { camoxApp, input, queryClient, studioDocument } = t0;
109
121
  const { isAuthenticated, isLoading } = useAuthState();
110
122
  const hasHydrated = React.useSyncExternalStore(subscribeToHydration, _temp, _temp2);
111
123
  const signIn = useSignInRedirect();
124
+ const studioOnly = !!input.routeKind || !!input.canvasOnly;
112
125
  let t1;
113
126
  let t2;
114
- if ($[1] !== input.routeKind || $[2] !== isAuthenticated || $[3] !== isLoading || $[4] !== signIn) {
127
+ if ($[0] !== isAuthenticated || $[1] !== isLoading || $[2] !== signIn || $[3] !== studioOnly) {
115
128
  t1 = () => {
116
- if (input.routeKind && !isAuthenticated && !isLoading) signIn();
129
+ if (studioOnly && !isAuthenticated && !isLoading) signIn();
117
130
  };
118
131
  t2 = [
119
- input.routeKind,
132
+ studioOnly,
120
133
  isAuthenticated,
121
134
  isLoading,
122
135
  signIn
123
136
  ];
124
- $[1] = input.routeKind;
125
- $[2] = isAuthenticated;
126
- $[3] = isLoading;
127
- $[4] = signIn;
128
- $[5] = t1;
129
- $[6] = t2;
137
+ $[0] = isAuthenticated;
138
+ $[1] = isLoading;
139
+ $[2] = signIn;
140
+ $[3] = studioOnly;
141
+ $[4] = t1;
142
+ $[5] = t2;
130
143
  } else {
131
- t1 = $[5];
132
- t2 = $[6];
144
+ t1 = $[4];
145
+ t2 = $[5];
133
146
  }
134
147
  React.useEffect(t1, t2);
135
148
  let t3;
136
- if ($[7] !== camoxApp || $[8] !== input.derived || $[9] !== input.routeKind || $[10] !== input.source) {
137
- t3 = input.routeKind ? /* @__PURE__ */ jsx("div", {
149
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
150
+ t3 = /* @__PURE__ */ jsx("div", {
138
151
  className: "text-muted-foreground p-6 text-sm",
139
152
  children: "Loading Studio…"
140
- }) : input.derived ? /* @__PURE__ */ jsx(DerivedPageContent, {
153
+ });
154
+ $[6] = t3;
155
+ } else t3 = $[6];
156
+ const loading = t3;
157
+ let t4;
158
+ if ($[7] !== camoxApp || $[8] !== input.canvasOnly || $[9] !== input.derived || $[10] !== input.routeKind) {
159
+ t4 = input.routeKind ? loading : input.canvasOnly ? null : input.derived ? /* @__PURE__ */ jsx(DerivedPageContent, {
141
160
  camoxApp,
142
- derived: input.derived,
143
- source: input.source
144
- }) : /* @__PURE__ */ jsx(PublishedPageExperience, { source: input.source });
161
+ derived: input.derived
162
+ }) : /* @__PURE__ */ jsx(CuratedPageContent, {});
145
163
  $[7] = camoxApp;
146
- $[8] = input.derived;
147
- $[9] = input.routeKind;
148
- $[10] = input.source;
149
- $[11] = t3;
150
- } else t3 = $[11];
151
- const published = t3;
152
- let t4;
153
- if ($[12] !== published) {
154
- t4 = /* @__PURE__ */ jsx(Frame, { children: published });
155
- $[12] = published;
156
- $[13] = t4;
157
- } else t4 = $[13];
158
- const isolatedPage = t4;
159
- const fallback = input.routeKind ? published : isolatedPage;
164
+ $[8] = input.canvasOnly;
165
+ $[9] = input.derived;
166
+ $[10] = input.routeKind;
167
+ $[11] = t4;
168
+ } else t4 = $[11];
169
+ const readOnlyPage = t4;
170
+ let t5;
171
+ if ($[12] !== readOnlyPage) {
172
+ t5 = /* @__PURE__ */ jsx(Frame, { children: readOnlyPage });
173
+ $[12] = readOnlyPage;
174
+ $[13] = t5;
175
+ } else t5 = $[13];
176
+ const isolatedPage = t5;
177
+ let t6;
178
+ if ($[14] !== input.routeKind || $[15] !== isolatedPage) {
179
+ t6 = input.routeKind ? /* @__PURE__ */ jsx(StudioLoadError, {}) : isolatedPage;
180
+ $[14] = input.routeKind;
181
+ $[15] = isolatedPage;
182
+ $[16] = t6;
183
+ } else t6 = $[16];
184
+ const fallback = t6;
160
185
  if (isAuthenticated) {
161
- let t5;
162
- if ($[14] !== camoxApp || $[15] !== hasHydrated || $[16] !== input || $[17] !== queryClient) {
163
- t5 = hasHydrated ? /* @__PURE__ */ jsx(LazyEditablePageExperience, {
186
+ let t7;
187
+ if ($[17] !== camoxApp || $[18] !== hasHydrated || $[19] !== input || $[20] !== queryClient) {
188
+ t7 = hasHydrated ? /* @__PURE__ */ jsx(AllBlocks, {
164
189
  camoxApp,
165
- input,
166
- queryClient
190
+ children: /* @__PURE__ */ jsx(LazyEditablePageExperience, {
191
+ camoxApp,
192
+ input,
193
+ queryClient
194
+ })
167
195
  }) : null;
168
- $[14] = camoxApp;
169
- $[15] = hasHydrated;
170
- $[16] = input;
171
- $[17] = queryClient;
172
- $[18] = t5;
173
- } else t5 = $[18];
174
- const editor = t5;
175
- let t6;
176
- if ($[19] !== editor || $[20] !== fallback || $[21] !== input.previewDocument || $[22] !== input.routeKind || $[23] !== published) {
177
- t6 = input.routeKind ? /* @__PURE__ */ jsx(React.Suspense, {
178
- fallback,
179
- children: editor ?? fallback
196
+ $[17] = camoxApp;
197
+ $[18] = hasHydrated;
198
+ $[19] = input;
199
+ $[20] = queryClient;
200
+ $[21] = t7;
201
+ } else t7 = $[21];
202
+ const editor = t7;
203
+ const t8 = input.routeKind ? loading : isolatedPage;
204
+ let t9;
205
+ if ($[22] !== editor || $[23] !== input.derived || $[24] !== input.previewDocument || $[25] !== input.routeKind || $[26] !== readOnlyPage) {
206
+ t9 = input.routeKind ? /* @__PURE__ */ jsx(React.Suspense, {
207
+ fallback: loading,
208
+ children: editor ?? loading
180
209
  }) : /* @__PURE__ */ jsx(PreviewActivation, {
181
- fallback: /* @__PURE__ */ jsx(Frame, {
182
- serverOnly: !!input.previewDocument,
183
- children: published
210
+ fallback: /* @__PURE__ */ jsx(EditingFallbackSlot, {
211
+ layoutPage: !!input.derived,
212
+ children: /* @__PURE__ */ jsx(Frame, {
213
+ serverOnly: !!input.previewDocument,
214
+ children: readOnlyPage
215
+ })
184
216
  }),
185
217
  children: editor
186
218
  });
187
- $[19] = editor;
188
- $[20] = fallback;
189
- $[21] = input.previewDocument;
190
- $[22] = input.routeKind;
191
- $[23] = published;
192
- $[24] = t6;
193
- } else t6 = $[24];
194
- let t7;
195
- if ($[25] !== fallback || $[26] !== t6) {
196
- t7 = /* @__PURE__ */ jsx(EditingActivationBoundary, {
219
+ $[22] = editor;
220
+ $[23] = input.derived;
221
+ $[24] = input.previewDocument;
222
+ $[25] = input.routeKind;
223
+ $[26] = readOnlyPage;
224
+ $[27] = t9;
225
+ } else t9 = $[27];
226
+ let t10;
227
+ if ($[28] !== fallback || $[29] !== t9) {
228
+ t10 = /* @__PURE__ */ jsx(EditingActivationBoundary, {
197
229
  fallback,
198
- children: t6
230
+ children: t9
199
231
  });
200
- $[25] = fallback;
201
- $[26] = t6;
202
- $[27] = t7;
203
- } else t7 = $[27];
204
- let t8;
205
- if ($[28] !== input || $[29] !== t7) {
206
- t8 = /* @__PURE__ */ jsx(RuntimeChrome, {
232
+ $[28] = fallback;
233
+ $[29] = t9;
234
+ $[30] = t10;
235
+ } else t10 = $[30];
236
+ let t11;
237
+ if ($[31] !== input || $[32] !== t10 || $[33] !== t8) {
238
+ t11 = /* @__PURE__ */ jsx(RuntimeChromeSlot, {
207
239
  input,
208
- children: t7
240
+ fallback: t8,
241
+ children: t10
209
242
  });
210
- $[28] = input;
211
- $[29] = t7;
212
- $[30] = t8;
213
- } else t8 = $[30];
214
- return t8;
243
+ $[31] = input;
244
+ $[32] = t10;
245
+ $[33] = t8;
246
+ $[34] = t11;
247
+ } else t11 = $[34];
248
+ return t11;
215
249
  }
216
- if (input.routeKind) return null;
250
+ if (studioOnly) return null;
217
251
  if (hasHydrated && isLocalhostPreview()) {
218
- let t5;
219
- if ($[31] !== published) {
220
- t5 = /* @__PURE__ */ jsx(LazyLocalhostPreviewProvider, { children: published });
221
- $[31] = published;
222
- $[32] = t5;
223
- } else t5 = $[32];
224
- let t6;
225
- if ($[33] !== published || $[34] !== t5) {
226
- t6 = /* @__PURE__ */ jsx(React.Suspense, {
227
- fallback: published,
228
- children: t5
252
+ let t7;
253
+ if ($[35] !== readOnlyPage) {
254
+ t7 = /* @__PURE__ */ jsx(LazyLocalhostPreviewProvider, { children: readOnlyPage });
255
+ $[35] = readOnlyPage;
256
+ $[36] = t7;
257
+ } else t7 = $[36];
258
+ let t8;
259
+ if ($[37] !== camoxApp || $[38] !== t7) {
260
+ t8 = /* @__PURE__ */ jsx(AllBlocks, {
261
+ camoxApp,
262
+ children: t7
263
+ });
264
+ $[37] = camoxApp;
265
+ $[38] = t7;
266
+ $[39] = t8;
267
+ } else t8 = $[39];
268
+ let t9;
269
+ if ($[40] !== readOnlyPage || $[41] !== t8) {
270
+ t9 = /* @__PURE__ */ jsx(React.Suspense, {
271
+ fallback: readOnlyPage,
272
+ children: t8
229
273
  });
230
- $[33] = published;
231
- $[34] = t5;
232
- $[35] = t6;
233
- } else t6 = $[35];
234
- return t6;
274
+ $[40] = readOnlyPage;
275
+ $[41] = t8;
276
+ $[42] = t9;
277
+ } else t9 = $[42];
278
+ return t9;
235
279
  }
236
280
  if (studioDocument) {
237
- let t5;
238
- if ($[36] === Symbol.for("react.memo_cache_sentinel")) {
239
- t5 = { height: "100vh" };
240
- $[36] = t5;
241
- } else t5 = $[36];
242
- let t6;
243
- if ($[37] !== isolatedPage) {
244
- t6 = /* @__PURE__ */ jsx("div", {
245
- style: t5,
281
+ let t7;
282
+ if ($[43] === Symbol.for("react.memo_cache_sentinel")) {
283
+ t7 = { height: "100vh" };
284
+ $[43] = t7;
285
+ } else t7 = $[43];
286
+ let t8;
287
+ if ($[44] !== isolatedPage) {
288
+ t8 = /* @__PURE__ */ jsx("div", {
289
+ style: t7,
246
290
  children: isolatedPage
247
291
  });
248
- $[37] = isolatedPage;
249
- $[38] = t6;
250
- } else t6 = $[38];
251
- return t6;
292
+ $[44] = isolatedPage;
293
+ $[45] = t8;
294
+ } else t8 = $[45];
295
+ return t8;
252
296
  }
253
- return published;
297
+ return readOnlyPage;
254
298
  }
255
299
  function _temp2() {
256
300
  return false;
@@ -258,6 +302,37 @@ function _temp2() {
258
302
  function _temp() {
259
303
  return true;
260
304
  }
305
+ function StudioLoadError() {
306
+ const $ = c(1);
307
+ let t0;
308
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
309
+ t0 = /* @__PURE__ */ jsxs("div", {
310
+ role: "alert",
311
+ className: "flex flex-1 flex-col items-start justify-center gap-3 p-6",
312
+ children: [
313
+ /* @__PURE__ */ jsx("h1", {
314
+ className: "text-lg font-semibold",
315
+ children: "Studio failed to load"
316
+ }),
317
+ /* @__PURE__ */ jsx("p", {
318
+ className: "text-muted-foreground text-sm",
319
+ children: "Something went wrong while opening Studio. Reload the page to try again."
320
+ }),
321
+ /* @__PURE__ */ jsx("button", {
322
+ type: "button",
323
+ className: "bg-accent text-accent-foreground rounded-md px-3 py-1.5 text-sm font-medium",
324
+ onClick: _temp3,
325
+ children: "Reload Studio"
326
+ })
327
+ ]
328
+ });
329
+ $[0] = t0;
330
+ } else t0 = $[0];
331
+ return t0;
332
+ }
333
+ function _temp3() {
334
+ return window.location.reload();
335
+ }
261
336
 
262
337
  //#endregion
263
338
  export { PageApp };
@@ -0,0 +1,20 @@
1
+ import { reads } from "../../lib/studio-reads.js";
2
+
3
+ //#region src/features/runtime/pageBlockTypes.ts
4
+ /**
5
+ * The block definitions a render input's blocks use. Every block a page or layout renders
6
+ * is seeded as a block query, so its dehydrated state names them all.
7
+ */
8
+ function getPageBlockTypes(dehydratedState) {
9
+ if (!dehydratedState || typeof dehydratedState !== "object" || !("queries" in dehydratedState) || !Array.isArray(dehydratedState.queries)) return [];
10
+ const types = /* @__PURE__ */ new Set();
11
+ for (const query of dehydratedState.queries) {
12
+ if (!query.queryKey || reads.blockBundle.paramsOf(query.queryKey) === null) continue;
13
+ const type = query.state?.data?.block?.type;
14
+ if (typeof type === "string") types.add(type);
15
+ }
16
+ return [...types];
17
+ }
18
+
19
+ //#endregion
20
+ export { getPageBlockTypes };
@@ -1,6 +1,4 @@
1
1
  import { CamoxApp } from "../../core/createApp.js";
2
-
3
2
  //#region src/features/runtime/pageClient.d.ts
4
- declare function hydratePageWithApp(camoxApp: CamoxApp): void;
5
- //#endregion
6
- export { hydratePageWithApp };
3
+ export declare function hydratePageWithApp(camoxApp: CamoxApp): Promise<void>;
4
+ //#endregion