camox 0.44.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 (411) 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 +1734 -0
  68. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  69. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  70. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  71. package/dist/features/canvas/CanvasOverlays.js +254 -0
  72. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  73. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  74. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  75. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  76. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  77. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  78. package/dist/features/canvas/canvasCamera.js +229 -0
  79. package/dist/features/canvas/canvasFlight.js +104 -0
  80. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  81. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  82. package/dist/features/canvas/canvasFrameMode.js +53 -0
  83. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  84. package/dist/features/canvas/canvasItems.js +120 -0
  85. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  86. package/dist/features/canvas/canvasPages.js +79 -0
  87. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  88. package/dist/features/canvas/canvasSelection.js +18 -0
  89. package/dist/features/canvas/canvasStore.js +149 -0
  90. package/dist/features/canvas/canvasThumbnails.js +304 -0
  91. package/dist/features/canvas/canvasZoom.js +10 -0
  92. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  93. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  94. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  95. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  97. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  98. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  99. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  100. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  101. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  102. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  103. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  104. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  105. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  106. package/dist/features/canvas/useCanvasCamera.js +803 -0
  107. package/dist/features/canvas/useCanvasFrame.js +149 -0
  108. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  109. package/dist/features/canvas/useCanvasNearness.js +57 -0
  110. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  111. package/dist/features/content/CamoxContent.d.ts +2 -5
  112. package/dist/features/content/CamoxContent.js +174 -271
  113. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  114. package/dist/features/content/ContentAssets.js +315 -0
  115. package/dist/features/content/ContentCollection.js +663 -0
  116. package/dist/features/content/collection-form.js +58 -0
  117. package/dist/features/content/components/AssetCard.js +80 -84
  118. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  119. package/dist/features/content/components/ContentSidebar.js +129 -18
  120. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  121. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  122. package/dist/features/content/components/MissingFromLocale.js +282 -0
  123. package/dist/features/content/components/UploadDropZone.js +27 -31
  124. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  125. package/dist/features/navigation/navigation.d.ts +66 -20
  126. package/dist/features/navigation/navigation.js +257 -90
  127. package/dist/features/og/defaultFonts.js +8 -8
  128. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  129. package/dist/features/og/imageResponse.d.ts +8 -0
  130. package/dist/features/og/imageResponse.js +26 -0
  131. package/dist/features/page/CuratedPageContent.js +167 -0
  132. package/dist/features/page/DerivedPageContent.js +26 -30
  133. package/dist/features/page/SharedLayoutContent.js +25 -27
  134. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  135. package/dist/features/preview/CamoxPreview.js +816 -537
  136. package/dist/features/preview/EditablePageContent.js +1 -1
  137. package/dist/features/preview/EditablePageExperience.js +16 -22
  138. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  139. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  140. package/dist/features/preview/components/AssetLightbox.js +181 -134
  141. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  142. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  143. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  144. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  145. package/dist/features/preview/components/CanvasPreview.js +243 -0
  146. package/dist/features/preview/components/CreatePageModal.js +128 -137
  147. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  148. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  149. package/dist/features/preview/components/DrillRow.js +150 -0
  150. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  151. package/dist/features/preview/components/FieldToolbar.js +160 -110
  152. package/dist/features/preview/components/Frame.js +108 -20
  153. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  154. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  155. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  156. package/dist/features/preview/components/Metadata.js +22 -30
  157. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  158. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  159. package/dist/features/preview/components/OverlayTracker.js +9 -41
  160. package/dist/features/preview/components/Overlays.js +81 -69
  161. package/dist/features/preview/components/PageInfo.js +1748 -0
  162. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  163. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  164. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  165. package/dist/features/preview/components/PageNicknameField.js +22 -26
  166. package/dist/features/preview/components/PagePicker.js +128 -130
  167. package/dist/features/preview/components/PageTree.js +525 -532
  168. package/dist/features/preview/components/PreviewActivation.js +28 -32
  169. package/dist/features/preview/components/PreviewPanel.js +620 -319
  170. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  171. package/dist/features/preview/components/RecordCard.js +80 -0
  172. package/dist/features/preview/components/RecordCombobox.js +178 -0
  173. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  174. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  175. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  176. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  177. package/dist/features/preview/components/SelectionEditor.js +993 -0
  178. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  179. package/dist/features/preview/components/SidebarSection.js +52 -64
  180. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  181. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  182. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  183. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  184. package/dist/features/preview/components/useFieldWriter.js +200 -0
  185. package/dist/features/preview/components/useRecordView.js +383 -0
  186. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  187. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  188. package/dist/features/preview/editingFrame.js +197 -0
  189. package/dist/features/preview/overlayHighlights.js +17 -44
  190. package/dist/features/preview/overlayMessages.js +72 -1
  191. package/dist/features/preview/pageRecord.js +189 -0
  192. package/dist/features/preview/previewConstants.js +6 -2
  193. package/dist/features/preview/previewPageFrame.js +95 -0
  194. package/dist/features/preview/previewPreparation.js +7 -0
  195. package/dist/features/preview/previewSelection.js +32 -63
  196. package/dist/features/preview/previewStore.js +225 -123
  197. package/dist/features/preview/referencePickerFocus.js +29 -0
  198. package/dist/features/preview/repeatableItemTargets.js +56 -0
  199. package/dist/features/preview/selectionReveal.js +21 -0
  200. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  201. package/dist/features/preview/viewportContinuity.js +109 -0
  202. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  203. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  204. package/dist/features/provider/CamoxProvider.js +38 -50
  205. package/dist/features/provider/CoreCamoxProvider.js +66 -50
  206. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  207. package/dist/features/provider/PreviewSignInPage.js +54 -0
  208. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  209. package/dist/features/provider/components/CommandPalette.js +75 -82
  210. package/dist/features/provider/useAdminShortcuts.js +7 -11
  211. package/dist/features/routes/pageRuntime.d.ts +44 -4
  212. package/dist/features/routes/pageRuntime.js +244 -137
  213. package/dist/features/runtime/RuntimeChrome.js +117 -115
  214. package/dist/features/runtime/alternates.js +64 -0
  215. package/dist/features/runtime/analytics.d.ts +7 -0
  216. package/dist/features/runtime/analytics.js +66 -0
  217. package/dist/features/runtime/artifactSources.js +87 -0
  218. package/dist/features/runtime/editingFallback.js +20 -0
  219. package/dist/features/runtime/linkPrefetch.js +97 -0
  220. package/dist/features/runtime/livePages.js +62 -0
  221. package/dist/features/runtime/llmsTxt.js +40 -0
  222. package/dist/features/runtime/loopbackFetch.js +18 -0
  223. package/dist/features/runtime/navigationAccessibility.js +51 -0
  224. package/dist/features/runtime/navigationTarget.js +23 -2
  225. package/dist/features/runtime/pageApp.js +229 -158
  226. package/dist/features/runtime/pageBlockTypes.js +20 -0
  227. package/dist/features/runtime/pageClient.d.ts +2 -4
  228. package/dist/features/runtime/pageClient.js +18 -3
  229. package/dist/features/runtime/pageNavigation.js +254 -32
  230. package/dist/features/runtime/pageServer.d.ts +2 -4
  231. package/dist/features/runtime/pageServer.js +6 -2
  232. package/dist/features/runtime/pageViewport.js +7 -0
  233. package/dist/features/runtime/runtime.d.ts +59 -24
  234. package/dist/features/runtime/runtime.js +779 -191
  235. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  236. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  237. package/dist/features/runtime/runtimeRoutes.js +25 -0
  238. package/dist/features/runtime/scrollRestoration.js +133 -0
  239. package/dist/features/runtime/studioApp.d.ts +4 -3
  240. package/dist/features/runtime/studioApp.js +5 -9
  241. package/dist/features/runtime/studioClient.d.ts +2 -4
  242. package/dist/features/runtime/studioClient.js +12 -3
  243. package/dist/features/runtime/studioServer.d.ts +2 -4
  244. package/dist/features/runtime/studioServer.js +6 -1
  245. package/dist/features/runtime/worker.d.ts +6 -0
  246. package/dist/features/runtime/worker.js +23 -0
  247. package/dist/features/runtime/workerRequest.js +44 -0
  248. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  249. package/dist/features/studio/CamoxStudio.js +34 -49
  250. package/dist/features/studio/FollowAgentProvider.js +338 -0
  251. package/dist/features/studio/components/ChatSidebar.js +356 -0
  252. package/dist/features/studio/components/DraftsControl.js +676 -0
  253. package/dist/features/studio/components/FaviconDialog.js +318 -0
  254. package/dist/features/studio/components/LocalePicker.js +785 -0
  255. package/dist/features/studio/components/Navbar.js +123 -103
  256. package/dist/features/studio/components/ProjectMenu.js +239 -260
  257. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  258. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  259. package/dist/features/studio/components/ThreadComposer.js +157 -0
  260. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  261. package/dist/features/studio/components/ThreadMessages.js +270 -0
  262. package/dist/features/studio/components/UserButton.js +34 -23
  263. package/dist/features/studio/draftLabel.js +33 -0
  264. package/dist/features/studio/draftNotice.js +13 -0
  265. package/dist/features/studio/followAgent.js +250 -0
  266. package/dist/features/studio/followAgentContext.js +7 -0
  267. package/dist/features/studio/localeOptions.js +118 -0
  268. package/dist/features/studio/localeSwitch.js +19 -0
  269. package/dist/features/studio/routes.js +48 -1
  270. package/dist/features/studio/studioStore.js +64 -1
  271. package/dist/features/studio/useTheme.js +24 -27
  272. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  273. package/dist/features/vite/blockBoilerplate.js +6 -5
  274. package/dist/features/vite/blockChunks.js +31 -0
  275. package/dist/features/vite/bundlerLogs.js +17 -0
  276. package/dist/features/vite/definitionsSync.js +158 -226
  277. package/dist/features/vite/devAuthentication.js +4 -16
  278. package/dist/features/vite/devSignIn.js +87 -0
  279. package/dist/features/vite/iconGeneration.js +1 -1
  280. package/dist/features/vite/layoutGeneration.js +11 -1
  281. package/dist/features/vite/publishSeededContent.js +30 -0
  282. package/dist/features/vite/routeGeneration.js +6 -7
  283. package/dist/features/vite/runtimeDev.js +80 -99
  284. package/dist/features/vite/vite.d.ts +51 -31
  285. package/dist/features/vite/vite.js +224 -127
  286. package/dist/features/vite/workerBuild.js +39 -0
  287. package/dist/hooks/use-debounced-field.js +116 -47
  288. package/dist/hooks/use-file-upload.js +114 -67
  289. package/dist/hooks/use-marquee-selection.js +32 -36
  290. package/dist/hooks/use-page-destinations.js +69 -37
  291. package/dist/lib/api-client-server.d.ts +5 -0
  292. package/dist/lib/api-client-server.js +10 -4
  293. package/dist/lib/api-client.d.ts +6 -0
  294. package/dist/lib/api-client.js +51 -16
  295. package/dist/lib/api-socket.js +17 -0
  296. package/dist/lib/auth-page-styles.js +39 -0
  297. package/dist/lib/auth.js +117 -61
  298. package/dist/lib/collection-cache.js +23 -0
  299. package/dist/lib/draft-scope.d.ts +4 -0
  300. package/dist/lib/draft-scope.js +222 -0
  301. package/dist/lib/html.js +12 -0
  302. package/dist/lib/link-pages.js +154 -0
  303. package/dist/lib/locale-path.d.ts +22 -0
  304. package/dist/lib/locale-path.js +57 -0
  305. package/dist/lib/normalized-data.js +252 -152
  306. package/dist/lib/preview-handoff.js +2 -2
  307. package/dist/lib/queries.d.ts +11 -0
  308. package/dist/lib/queries.js +70 -141
  309. package/dist/lib/studio-reads.d.ts +14 -0
  310. package/dist/lib/studio-reads.js +574 -0
  311. package/dist/lib/use-project-room.js +50 -50
  312. package/dist/lib/use-thread.js +310 -0
  313. package/dist/lib/utils.js +25 -29
  314. package/dist/lib/view-locale-context.js +22 -0
  315. package/dist/lib/view-locale.js +46 -0
  316. package/dist/package.js +5 -0
  317. package/dist/studio-overlays.css +41 -151
  318. package/dist/studio.css +2 -2
  319. package/package.json +70 -73
  320. package/skills/camox/SKILL.md +16 -11
  321. package/skills/camox/references/artifacts.md +179 -0
  322. package/skills/camox/references/block-definitions.md +75 -59
  323. package/skills/camox/references/cli-common.md +9 -11
  324. package/skills/camox/references/cli-content.md +92 -69
  325. package/skills/camox/references/cli-publishing.md +26 -0
  326. package/skills/camox/references/dom-integrations.md +27 -0
  327. package/skills/camox/references/field-styling.md +4 -4
  328. package/skills/camox/references/layout-definitions.md +16 -14
  329. package/skills/camox/references/localization.md +56 -0
  330. package/skills/camox/references/routed-layouts.md +133 -15
  331. package/skills/camox-expand/SKILL.md +69 -0
  332. package/skills/camox-expand/references/jobs.md +39 -0
  333. package/skills/camoxify/SKILL.md +29 -7
  334. package/dist/core/components/AddBlockControlBar.js +0 -78
  335. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  336. package/dist/features/metadata/sitemap.d.ts +0 -8
  337. package/dist/features/metadata/sitemap.js +0 -17
  338. package/dist/features/og/imageResponse.node.d.ts +0 -12
  339. package/dist/features/og/imageResponse.node.js +0 -49
  340. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  341. package/dist/features/og/imageResponse.workerd.js +0 -40
  342. package/dist/features/page/PublishedPageContent.js +0 -205
  343. package/dist/features/page/PublishedPageExperience.js +0 -23
  344. package/dist/features/preview/DerivedPreview.js +0 -134
  345. package/dist/features/preview/commentsEnabled.js +0 -8
  346. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  347. package/dist/features/preview/components/AttachedComments.js +0 -331
  348. package/dist/features/preview/components/CommentHeader.js +0 -122
  349. package/dist/features/preview/components/CommentSidebar.js +0 -29
  350. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  351. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  352. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  353. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  354. package/dist/features/preview/components/LeftSidebar.js +0 -68
  355. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  356. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  357. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  358. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  359. package/dist/features/preview/components/PeekedBlock.js +0 -217
  360. package/dist/features/preview/components/PreviewComments.js +0 -56
  361. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  362. package/dist/features/preview/components/PublicationRow.js +0 -422
  363. package/dist/features/preview/components/PublishDialog.js +0 -194
  364. package/dist/features/preview/components/RightSidebar.js +0 -59
  365. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  366. package/dist/features/preview/previewCommentsStore.js +0 -135
  367. package/dist/features/preview/publication.js +0 -81
  368. package/dist/features/preview/usePageComments.js +0 -39
  369. package/dist/features/runtime/SharedChromeContext.js +0 -7
  370. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  371. package/dist/features/vite/appGeneration.js +0 -89
  372. package/dist/lib/view-queries.js +0 -28
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  386. 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
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  397. 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
  398. 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
  399. 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
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  411. 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,42 +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(20);
18
- if ($[0] !== "cc0d298a8943efca3ffb5e7cf2f8f814ebecbf27dec68e2a3129c1bb95c18943") {
19
- for (let $i = 0; $i < 20; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
20
- $[0] = "cc0d298a8943efca3ffb5e7cf2f8f814ebecbf27dec68e2a3129c1bb95c18943";
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.previewHandoff || $[7] !== input.projectSlug || $[8] !== 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: input.previewHandoff ? /* @__PURE__ */ jsx("div", {
37
- role: "status",
38
- children: "Signing in to draft preview…"
39
- }) : /* @__PURE__ */ jsx(PageExperience, {
35
+ children: input.previewHandoff ? /* @__PURE__ */ jsx(PreviewSignInPage, {}) : /* @__PURE__ */ jsx(PageExperience, {
40
36
  camoxApp,
41
37
  input: currentInput,
42
38
  queryClient,
@@ -44,52 +40,68 @@ function PageApp(t0) {
44
40
  })
45
41
  })
46
42
  });
47
- $[1] = camoxApp;
48
- $[2] = input.apiUrl;
49
- $[3] = input.authenticationUrl;
50
- $[4] = input.environmentName;
51
- $[5] = input.presentation;
52
- $[6] = input.previewHandoff;
53
- $[7] = input.projectSlug;
54
- $[8] = queryClient;
55
- $[9] = t2;
56
- } else t2 = $[9];
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];
57
52
  let t3;
58
- if ($[10] !== input || $[11] !== queryClient || $[12] !== t2) {
53
+ if ($[8] !== camoxApp || $[9] !== input || $[10] !== queryClient || $[11] !== t2) {
59
54
  t3 = /* @__PURE__ */ jsx(PageNavigationProvider, {
55
+ camoxApp,
60
56
  initialInput: input,
61
57
  queryClient,
62
58
  children: t2
63
59
  });
64
- $[10] = input;
65
- $[11] = queryClient;
66
- $[12] = t2;
67
- $[13] = t3;
68
- } else t3 = $[13];
60
+ $[8] = camoxApp;
61
+ $[9] = input;
62
+ $[10] = queryClient;
63
+ $[11] = t2;
64
+ $[12] = t3;
65
+ } else t3 = $[12];
69
66
  let t4;
70
- if ($[14] !== t1 || $[15] !== t3) {
67
+ if ($[13] !== t1 || $[14] !== t3) {
71
68
  t4 = /* @__PURE__ */ jsx(HydrationBoundary, {
72
69
  state: t1,
73
70
  children: t3
74
71
  });
75
- $[14] = t1;
76
- $[15] = t3;
77
- $[16] = t4;
78
- } else t4 = $[16];
72
+ $[13] = t1;
73
+ $[14] = t3;
74
+ $[15] = t4;
75
+ } else t4 = $[15];
79
76
  let t5;
80
- if ($[17] !== queryClient || $[18] !== t4) {
81
- t5 = /* @__PURE__ */ jsx(QueryClientProvider, {
82
- client: queryClient,
77
+ if ($[16] !== draftScope || $[17] !== t4) {
78
+ t5 = /* @__PURE__ */ jsx(DraftScopeContext.Provider, {
79
+ value: draftScope,
83
80
  children: t4
84
81
  });
85
- $[17] = queryClient;
86
- $[18] = t4;
87
- $[19] = t5;
88
- } else t5 = $[19];
89
- return t5;
82
+ $[16] = draftScope;
83
+ $[17] = t4;
84
+ $[18] = t5;
85
+ } else t5 = $[18];
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;
90
97
  }
91
98
  const LazyEditablePageExperience = React.lazy(() => import("../preview/EditablePageExperience.js").then((module) => ({ default: module.EditablePageExperience })));
92
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
+ }
93
105
  var EditingActivationBoundary = class extends React.Component {
94
106
  state = { failed: false };
95
107
  static getDerivedStateFromError() {
@@ -104,157 +116,185 @@ var EditingActivationBoundary = class extends React.Component {
104
116
  };
105
117
  const subscribeToHydration = () => () => {};
106
118
  function PageExperience(t0) {
107
- const $ = c(39);
108
- if ($[0] !== "cc0d298a8943efca3ffb5e7cf2f8f814ebecbf27dec68e2a3129c1bb95c18943") {
109
- for (let $i = 0; $i < 39; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
110
- $[0] = "cc0d298a8943efca3ffb5e7cf2f8f814ebecbf27dec68e2a3129c1bb95c18943";
111
- }
119
+ const $ = c(46);
112
120
  const { camoxApp, input, queryClient, studioDocument } = t0;
113
121
  const { isAuthenticated, isLoading } = useAuthState();
114
122
  const hasHydrated = React.useSyncExternalStore(subscribeToHydration, _temp, _temp2);
115
123
  const signIn = useSignInRedirect();
124
+ const studioOnly = !!input.routeKind || !!input.canvasOnly;
116
125
  let t1;
117
126
  let t2;
118
- if ($[1] !== input.routeKind || $[2] !== isAuthenticated || $[3] !== isLoading || $[4] !== signIn) {
127
+ if ($[0] !== isAuthenticated || $[1] !== isLoading || $[2] !== signIn || $[3] !== studioOnly) {
119
128
  t1 = () => {
120
- if (input.routeKind && !isAuthenticated && !isLoading) signIn();
129
+ if (studioOnly && !isAuthenticated && !isLoading) signIn();
121
130
  };
122
131
  t2 = [
123
- input.routeKind,
132
+ studioOnly,
124
133
  isAuthenticated,
125
134
  isLoading,
126
135
  signIn
127
136
  ];
128
- $[1] = input.routeKind;
129
- $[2] = isAuthenticated;
130
- $[3] = isLoading;
131
- $[4] = signIn;
132
- $[5] = t1;
133
- $[6] = t2;
137
+ $[0] = isAuthenticated;
138
+ $[1] = isLoading;
139
+ $[2] = signIn;
140
+ $[3] = studioOnly;
141
+ $[4] = t1;
142
+ $[5] = t2;
134
143
  } else {
135
- t1 = $[5];
136
- t2 = $[6];
144
+ t1 = $[4];
145
+ t2 = $[5];
137
146
  }
138
147
  React.useEffect(t1, t2);
139
148
  let t3;
140
- if ($[7] !== camoxApp || $[8] !== input.derived || $[9] !== input.routeKind || $[10] !== input.source) {
141
- t3 = input.routeKind ? /* @__PURE__ */ jsx("div", {
149
+ if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
150
+ t3 = /* @__PURE__ */ jsx("div", {
142
151
  className: "text-muted-foreground p-6 text-sm",
143
152
  children: "Loading Studio…"
144
- }) : 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, {
145
160
  camoxApp,
146
- derived: input.derived,
147
- source: input.source
148
- }) : /* @__PURE__ */ jsx(PublishedPageExperience, { source: input.source });
161
+ derived: input.derived
162
+ }) : /* @__PURE__ */ jsx(CuratedPageContent, {});
149
163
  $[7] = camoxApp;
150
- $[8] = input.derived;
151
- $[9] = input.routeKind;
152
- $[10] = input.source;
153
- $[11] = t3;
154
- } else t3 = $[11];
155
- const published = t3;
156
- let t4;
157
- if ($[12] !== published) {
158
- t4 = /* @__PURE__ */ jsx(Frame, { children: published });
159
- $[12] = published;
160
- $[13] = t4;
161
- } else t4 = $[13];
162
- const isolatedPage = t4;
163
- 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;
164
185
  if (isAuthenticated) {
165
- let t5;
166
- if ($[14] !== camoxApp || $[15] !== hasHydrated || $[16] !== input || $[17] !== queryClient) {
167
- t5 = hasHydrated ? /* @__PURE__ */ jsx(LazyEditablePageExperience, {
186
+ let t7;
187
+ if ($[17] !== camoxApp || $[18] !== hasHydrated || $[19] !== input || $[20] !== queryClient) {
188
+ t7 = hasHydrated ? /* @__PURE__ */ jsx(AllBlocks, {
168
189
  camoxApp,
169
- input,
170
- queryClient
190
+ children: /* @__PURE__ */ jsx(LazyEditablePageExperience, {
191
+ camoxApp,
192
+ input,
193
+ queryClient
194
+ })
171
195
  }) : null;
172
- $[14] = camoxApp;
173
- $[15] = hasHydrated;
174
- $[16] = input;
175
- $[17] = queryClient;
176
- $[18] = t5;
177
- } else t5 = $[18];
178
- const editor = t5;
179
- let t6;
180
- if ($[19] !== editor || $[20] !== fallback || $[21] !== input.previewDocument || $[22] !== input.routeKind || $[23] !== published) {
181
- t6 = input.routeKind ? /* @__PURE__ */ jsx(React.Suspense, {
182
- fallback,
183
- 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
184
209
  }) : /* @__PURE__ */ jsx(PreviewActivation, {
185
- fallback: /* @__PURE__ */ jsx(Frame, {
186
- serverOnly: !!input.previewDocument,
187
- children: published
210
+ fallback: /* @__PURE__ */ jsx(EditingFallbackSlot, {
211
+ layoutPage: !!input.derived,
212
+ children: /* @__PURE__ */ jsx(Frame, {
213
+ serverOnly: !!input.previewDocument,
214
+ children: readOnlyPage
215
+ })
188
216
  }),
189
217
  children: editor
190
218
  });
191
- $[19] = editor;
192
- $[20] = fallback;
193
- $[21] = input.previewDocument;
194
- $[22] = input.routeKind;
195
- $[23] = published;
196
- $[24] = t6;
197
- } else t6 = $[24];
198
- let t7;
199
- if ($[25] !== fallback || $[26] !== t6) {
200
- 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, {
201
229
  fallback,
202
- children: t6
230
+ children: t9
203
231
  });
204
- $[25] = fallback;
205
- $[26] = t6;
206
- $[27] = t7;
207
- } else t7 = $[27];
208
- let t8;
209
- if ($[28] !== input || $[29] !== t7) {
210
- 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, {
211
239
  input,
212
- children: t7
240
+ fallback: t8,
241
+ children: t10
213
242
  });
214
- $[28] = input;
215
- $[29] = t7;
216
- $[30] = t8;
217
- } else t8 = $[30];
218
- return t8;
243
+ $[31] = input;
244
+ $[32] = t10;
245
+ $[33] = t8;
246
+ $[34] = t11;
247
+ } else t11 = $[34];
248
+ return t11;
219
249
  }
220
- if (input.routeKind) return null;
250
+ if (studioOnly) return null;
221
251
  if (hasHydrated && isLocalhostPreview()) {
222
- let t5;
223
- if ($[31] !== published) {
224
- t5 = /* @__PURE__ */ jsx(LazyLocalhostPreviewProvider, { children: published });
225
- $[31] = published;
226
- $[32] = t5;
227
- } else t5 = $[32];
228
- let t6;
229
- if ($[33] !== published || $[34] !== t5) {
230
- t6 = /* @__PURE__ */ jsx(React.Suspense, {
231
- fallback: published,
232
- 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
233
273
  });
234
- $[33] = published;
235
- $[34] = t5;
236
- $[35] = t6;
237
- } else t6 = $[35];
238
- return t6;
274
+ $[40] = readOnlyPage;
275
+ $[41] = t8;
276
+ $[42] = t9;
277
+ } else t9 = $[42];
278
+ return t9;
239
279
  }
240
280
  if (studioDocument) {
241
- let t5;
242
- if ($[36] === Symbol.for("react.memo_cache_sentinel")) {
243
- t5 = { height: "100vh" };
244
- $[36] = t5;
245
- } else t5 = $[36];
246
- let t6;
247
- if ($[37] !== isolatedPage) {
248
- t6 = /* @__PURE__ */ jsx("div", {
249
- 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,
250
290
  children: isolatedPage
251
291
  });
252
- $[37] = isolatedPage;
253
- $[38] = t6;
254
- } else t6 = $[38];
255
- return t6;
292
+ $[44] = isolatedPage;
293
+ $[45] = t8;
294
+ } else t8 = $[45];
295
+ return t8;
256
296
  }
257
- return published;
297
+ return readOnlyPage;
258
298
  }
259
299
  function _temp2() {
260
300
  return false;
@@ -262,6 +302,37 @@ function _temp2() {
262
302
  function _temp() {
263
303
  return true;
264
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
+ }
265
336
 
266
337
  //#endregion
267
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 };