camox 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/components/AuthGate.js +0 -6
  2. package/dist/components/DeviceSelector.js +96 -0
  3. package/dist/components/PlatformLabel.js +20 -24
  4. package/dist/core/components/lexical/HighlightNode.js +1 -1
  5. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  6. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  7. package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
  8. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  9. package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
  10. package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
  11. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  12. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  13. package/dist/core/createApp.d.ts +241 -312
  14. package/dist/core/createApp.js +123 -29
  15. package/dist/core/createBlock.d.ts +5 -5
  16. package/dist/core/createBlock.js +385 -152
  17. package/dist/core/createCollection.d.ts +55 -0
  18. package/dist/core/createCollection.js +93 -0
  19. package/dist/core/createLayout.d.ts +197 -61
  20. package/dist/core/createLayout.js +114 -56
  21. package/dist/core/defineDocument.d.ts +3 -5
  22. package/dist/core/derivedRoutes.js +49 -1
  23. package/dist/core/dom.d.ts +13 -4
  24. package/dist/core/dom.js +44 -1
  25. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  26. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  27. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  28. package/dist/core/editing/createEditableBlock.d.ts +754 -633
  29. package/dist/core/editing/createEditableBlock.js +2113 -1066
  30. package/dist/core/editing/referenceWrites.js +51 -0
  31. package/dist/core/editing/useLatestRecord.js +90 -0
  32. package/dist/core/hooks/useArtifactHost.js +139 -0
  33. package/dist/core/hooks/useFieldSelection.js +43 -18
  34. package/dist/core/hooks/useIsEditable.js +12 -10
  35. package/dist/core/hooks/useOverlayMessage.js +15 -19
  36. package/dist/core/lib/artifact.d.ts +21 -0
  37. package/dist/core/lib/artifact.js +154 -0
  38. package/dist/core/lib/artifactColors.js +123 -0
  39. package/dist/core/lib/artifactData.d.ts +1 -0
  40. package/dist/core/lib/artifactData.js +131 -0
  41. package/dist/core/lib/artifactHost.js +205 -0
  42. package/dist/core/lib/artifactRuntime.js +36 -0
  43. package/dist/core/lib/artifactTheme.js +57 -0
  44. package/dist/core/lib/contentType.d.ts +302 -106
  45. package/dist/core/lib/contentType.js +201 -173
  46. package/dist/core/lib/fieldTypes.js +3 -0
  47. package/dist/core/lib/iconTypes.d.ts +3 -3
  48. package/dist/core/lib/icons.d.ts +4 -4
  49. package/dist/core/lib/icons.js +40 -44
  50. package/dist/core/lib/imagePlaceholder.js +177 -0
  51. package/dist/core/lib/imageTransform.js +1 -1
  52. package/dist/core/lib/lexicalReact.d.ts +3 -1
  53. package/dist/core/lib/lexicalState.js +1 -1
  54. package/dist/core/lib/previewPaused.js +9 -0
  55. package/dist/core/lib/recordScope.js +316 -0
  56. package/dist/core/lib/reference.d.ts +81 -0
  57. package/dist/core/lib/reference.js +29 -0
  58. package/dist/core/lib/textLinks.js +7 -5
  59. package/dist/core/lib/textStyles.d.ts +5 -7
  60. package/dist/core/lib/textStyles.js +2 -2
  61. package/dist/core/notFound.d.ts +7 -0
  62. package/dist/core/notFound.js +11 -0
  63. package/dist/core/pageDestinations.js +6 -3
  64. package/dist/core/recordItem.js +34 -0
  65. package/dist/core/requestContext.d.ts +26 -0
  66. package/dist/core/requestContext.js +20 -0
  67. package/dist/features/canvas/CamoxCanvas.js +1401 -0
  68. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  69. package/dist/features/canvas/CanvasOverlays.js +254 -0
  70. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  71. package/dist/features/canvas/CanvasPageFrame.js +333 -0
  72. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  73. package/dist/features/canvas/CanvasPreviewPageSlot.js +123 -0
  74. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  75. package/dist/features/canvas/canvasCamera.js +229 -0
  76. package/dist/features/canvas/canvasFlight.js +104 -0
  77. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  78. package/dist/features/canvas/canvasFrameDocument.js +302 -0
  79. package/dist/features/canvas/canvasFrameMode.js +53 -0
  80. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  81. package/dist/features/canvas/canvasItems.js +30 -0
  82. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  83. package/dist/features/canvas/canvasPages.js +79 -0
  84. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  85. package/dist/features/canvas/canvasSelection.js +18 -0
  86. package/dist/features/canvas/canvasStore.js +60 -0
  87. package/dist/features/canvas/canvasThumbnails.js +304 -0
  88. package/dist/features/canvas/canvasZoom.js +10 -0
  89. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  90. package/dist/features/canvas/sidebar/CanvasNavigator.js +124 -0
  91. package/dist/features/canvas/sidebar/CanvasSidebar.js +54 -0
  92. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  93. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  94. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  95. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  96. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  97. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  98. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  99. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  100. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  101. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  102. package/dist/features/canvas/useCanvasCamera.js +783 -0
  103. package/dist/features/canvas/useCanvasFrame.js +148 -0
  104. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  105. package/dist/features/canvas/useCanvasNearness.js +57 -0
  106. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  107. package/dist/features/content/CamoxContent.d.ts +2 -5
  108. package/dist/features/content/CamoxContent.js +174 -271
  109. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  110. package/dist/features/content/ContentAssets.js +315 -0
  111. package/dist/features/content/ContentCollection.js +663 -0
  112. package/dist/features/content/collection-form.js +58 -0
  113. package/dist/features/content/components/AssetCard.js +80 -84
  114. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  115. package/dist/features/content/components/ContentSidebar.js +129 -18
  116. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  117. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  118. package/dist/features/content/components/MissingFromLocale.js +282 -0
  119. package/dist/features/content/components/UploadDropZone.js +27 -31
  120. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  121. package/dist/features/navigation/navigation.d.ts +66 -20
  122. package/dist/features/navigation/navigation.js +257 -90
  123. package/dist/features/og/defaultFonts.js +8 -8
  124. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  125. package/dist/features/og/imageResponse.d.ts +8 -0
  126. package/dist/features/og/imageResponse.js +26 -0
  127. package/dist/features/page/CuratedPageContent.js +167 -0
  128. package/dist/features/page/DerivedPageContent.js +26 -30
  129. package/dist/features/page/SharedLayoutContent.js +25 -27
  130. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  131. package/dist/features/preview/CamoxPreview.js +816 -537
  132. package/dist/features/preview/EditablePageContent.js +1 -1
  133. package/dist/features/preview/EditablePageExperience.js +16 -22
  134. package/dist/features/preview/components/AddBlockSheet.js +273 -0
  135. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  136. package/dist/features/preview/components/AssetLightbox.js +181 -134
  137. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  138. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  139. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  140. package/dist/features/preview/components/BlockThumbnail.js +172 -98
  141. package/dist/features/preview/components/CanvasPreview.js +243 -0
  142. package/dist/features/preview/components/CreatePageModal.js +128 -137
  143. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  144. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  145. package/dist/features/preview/components/DrillRow.js +150 -0
  146. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  147. package/dist/features/preview/components/FieldToolbar.js +160 -110
  148. package/dist/features/preview/components/Frame.js +108 -20
  149. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  150. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  151. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  152. package/dist/features/preview/components/Metadata.js +22 -30
  153. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  154. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  155. package/dist/features/preview/components/OverlayTracker.js +9 -41
  156. package/dist/features/preview/components/Overlays.js +81 -69
  157. package/dist/features/preview/components/PageInfo.js +1748 -0
  158. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  159. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  160. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  161. package/dist/features/preview/components/PageNicknameField.js +22 -26
  162. package/dist/features/preview/components/PagePicker.js +128 -130
  163. package/dist/features/preview/components/PageTree.js +525 -532
  164. package/dist/features/preview/components/PreviewActivation.js +28 -32
  165. package/dist/features/preview/components/PreviewPanel.js +620 -319
  166. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  167. package/dist/features/preview/components/RecordCard.js +80 -0
  168. package/dist/features/preview/components/RecordCombobox.js +178 -0
  169. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  170. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  171. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  172. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  173. package/dist/features/preview/components/SelectionEditor.js +993 -0
  174. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  175. package/dist/features/preview/components/SidebarSection.js +52 -64
  176. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  177. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  178. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  179. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  180. package/dist/features/preview/components/useFieldWriter.js +200 -0
  181. package/dist/features/preview/components/useRecordView.js +383 -0
  182. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  183. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  184. package/dist/features/preview/editingFrame.js +197 -0
  185. package/dist/features/preview/overlayHighlights.js +17 -44
  186. package/dist/features/preview/overlayMessages.js +72 -1
  187. package/dist/features/preview/pageRecord.js +189 -0
  188. package/dist/features/preview/previewConstants.js +6 -2
  189. package/dist/features/preview/previewPageFrame.js +95 -0
  190. package/dist/features/preview/previewPreparation.js +7 -0
  191. package/dist/features/preview/previewSelection.js +32 -63
  192. package/dist/features/preview/previewStore.js +225 -123
  193. package/dist/features/preview/referencePickerFocus.js +29 -0
  194. package/dist/features/preview/repeatableItemTargets.js +56 -0
  195. package/dist/features/preview/selectionReveal.js +21 -0
  196. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  197. package/dist/features/preview/viewportContinuity.js +109 -0
  198. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  199. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  200. package/dist/features/provider/CamoxProvider.js +38 -50
  201. package/dist/features/provider/CoreCamoxProvider.js +69 -50
  202. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  203. package/dist/features/provider/PreviewSignInPage.js +54 -0
  204. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  205. package/dist/features/provider/components/CommandPalette.js +75 -82
  206. package/dist/features/provider/useAdminShortcuts.js +7 -11
  207. package/dist/features/routes/pageRuntime.d.ts +44 -4
  208. package/dist/features/routes/pageRuntime.js +244 -137
  209. package/dist/features/runtime/RuntimeChrome.js +117 -115
  210. package/dist/features/runtime/alternates.js +64 -0
  211. package/dist/features/runtime/analytics.d.ts +7 -0
  212. package/dist/features/runtime/analytics.js +66 -0
  213. package/dist/features/runtime/artifactSources.js +87 -0
  214. package/dist/features/runtime/editingFallback.js +20 -0
  215. package/dist/features/runtime/linkPrefetch.js +97 -0
  216. package/dist/features/runtime/livePages.js +62 -0
  217. package/dist/features/runtime/llmsTxt.js +40 -0
  218. package/dist/features/runtime/loopbackFetch.js +18 -0
  219. package/dist/features/runtime/navigationAccessibility.js +51 -0
  220. package/dist/features/runtime/navigationTarget.js +23 -2
  221. package/dist/features/runtime/pageApp.js +229 -158
  222. package/dist/features/runtime/pageBlockTypes.js +20 -0
  223. package/dist/features/runtime/pageClient.d.ts +2 -4
  224. package/dist/features/runtime/pageClient.js +18 -3
  225. package/dist/features/runtime/pageNavigation.js +254 -32
  226. package/dist/features/runtime/pageServer.d.ts +2 -4
  227. package/dist/features/runtime/pageServer.js +6 -2
  228. package/dist/features/runtime/pageViewport.js +7 -0
  229. package/dist/features/runtime/runtime.d.ts +54 -24
  230. package/dist/features/runtime/runtime.js +766 -191
  231. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  232. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  233. package/dist/features/runtime/runtimeRoutes.js +25 -0
  234. package/dist/features/runtime/scrollRestoration.js +133 -0
  235. package/dist/features/runtime/studioApp.d.ts +4 -3
  236. package/dist/features/runtime/studioApp.js +5 -9
  237. package/dist/features/runtime/studioClient.d.ts +2 -4
  238. package/dist/features/runtime/studioClient.js +12 -3
  239. package/dist/features/runtime/studioServer.d.ts +2 -4
  240. package/dist/features/runtime/studioServer.js +6 -1
  241. package/dist/features/runtime/worker.d.ts +6 -0
  242. package/dist/features/runtime/worker.js +23 -0
  243. package/dist/features/runtime/workerRequest.js +44 -0
  244. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  245. package/dist/features/studio/CamoxStudio.js +34 -49
  246. package/dist/features/studio/FollowAgentProvider.js +327 -0
  247. package/dist/features/studio/components/ChatSidebar.js +356 -0
  248. package/dist/features/studio/components/DraftsControl.js +676 -0
  249. package/dist/features/studio/components/FaviconDialog.js +318 -0
  250. package/dist/features/studio/components/LocalePicker.js +785 -0
  251. package/dist/features/studio/components/Navbar.js +123 -103
  252. package/dist/features/studio/components/ProjectMenu.js +239 -260
  253. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  254. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  255. package/dist/features/studio/components/ThreadComposer.js +157 -0
  256. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  257. package/dist/features/studio/components/ThreadMessages.js +270 -0
  258. package/dist/features/studio/components/UserButton.js +34 -23
  259. package/dist/features/studio/draftLabel.js +33 -0
  260. package/dist/features/studio/draftNotice.js +13 -0
  261. package/dist/features/studio/followAgent.js +241 -0
  262. package/dist/features/studio/followAgentContext.js +7 -0
  263. package/dist/features/studio/localeOptions.js +118 -0
  264. package/dist/features/studio/localeSwitch.js +19 -0
  265. package/dist/features/studio/routes.js +26 -1
  266. package/dist/features/studio/studioStore.js +64 -1
  267. package/dist/features/studio/useTheme.js +24 -27
  268. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  269. package/dist/features/vite/blockBoilerplate.js +6 -5
  270. package/dist/features/vite/blockChunks.js +31 -0
  271. package/dist/features/vite/bundlerLogs.js +17 -0
  272. package/dist/features/vite/definitionsSync.js +158 -226
  273. package/dist/features/vite/devAuthentication.js +4 -16
  274. package/dist/features/vite/devSignIn.js +87 -0
  275. package/dist/features/vite/iconGeneration.js +1 -1
  276. package/dist/features/vite/layoutGeneration.js +11 -1
  277. package/dist/features/vite/publishSeededContent.js +30 -0
  278. package/dist/features/vite/routeGeneration.js +6 -7
  279. package/dist/features/vite/runtimeDev.js +80 -99
  280. package/dist/features/vite/vite.d.ts +51 -31
  281. package/dist/features/vite/vite.js +224 -127
  282. package/dist/features/vite/workerBuild.js +39 -0
  283. package/dist/hooks/use-debounced-field.js +116 -47
  284. package/dist/hooks/use-file-upload.js +114 -67
  285. package/dist/hooks/use-marquee-selection.js +32 -36
  286. package/dist/hooks/use-page-destinations.js +69 -37
  287. package/dist/lib/api-client-server.d.ts +5 -0
  288. package/dist/lib/api-client-server.js +10 -4
  289. package/dist/lib/api-client.d.ts +6 -0
  290. package/dist/lib/api-client.js +51 -16
  291. package/dist/lib/api-socket.js +17 -0
  292. package/dist/lib/auth-page-styles.js +39 -0
  293. package/dist/lib/auth.js +129 -61
  294. package/dist/lib/collection-cache.js +23 -0
  295. package/dist/lib/draft-scope.d.ts +4 -0
  296. package/dist/lib/draft-scope.js +222 -0
  297. package/dist/lib/html.js +12 -0
  298. package/dist/lib/link-pages.js +154 -0
  299. package/dist/lib/locale-path.d.ts +22 -0
  300. package/dist/lib/locale-path.js +57 -0
  301. package/dist/lib/normalized-data.js +252 -152
  302. package/dist/lib/preview-handoff.js +2 -2
  303. package/dist/lib/queries.d.ts +11 -0
  304. package/dist/lib/queries.js +70 -141
  305. package/dist/lib/studio-reads.d.ts +14 -0
  306. package/dist/lib/studio-reads.js +554 -0
  307. package/dist/lib/use-project-room.js +50 -50
  308. package/dist/lib/use-thread.js +310 -0
  309. package/dist/lib/utils.js +25 -29
  310. package/dist/lib/view-locale-context.js +22 -0
  311. package/dist/lib/view-locale.js +46 -0
  312. package/dist/package.js +5 -0
  313. package/dist/studio-overlays.css +41 -151
  314. package/dist/studio.css +2 -2
  315. package/package.json +70 -73
  316. package/skills/camox/SKILL.md +16 -11
  317. package/skills/camox/references/artifacts.md +179 -0
  318. package/skills/camox/references/block-definitions.md +75 -59
  319. package/skills/camox/references/cli-common.md +9 -11
  320. package/skills/camox/references/cli-content.md +92 -69
  321. package/skills/camox/references/cli-publishing.md +26 -0
  322. package/skills/camox/references/dom-integrations.md +27 -0
  323. package/skills/camox/references/field-styling.md +4 -4
  324. package/skills/camox/references/layout-definitions.md +16 -14
  325. package/skills/camox/references/localization.md +56 -0
  326. package/skills/camox/references/routed-layouts.md +133 -15
  327. package/skills/camox-expand/SKILL.md +70 -0
  328. package/skills/camox-expand/references/jobs.md +39 -0
  329. package/skills/camoxify/SKILL.md +29 -7
  330. package/dist/core/components/AddBlockControlBar.js +0 -78
  331. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  332. package/dist/features/metadata/sitemap.d.ts +0 -8
  333. package/dist/features/metadata/sitemap.js +0 -17
  334. package/dist/features/og/imageResponse.node.d.ts +0 -12
  335. package/dist/features/og/imageResponse.node.js +0 -49
  336. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  337. package/dist/features/og/imageResponse.workerd.js +0 -40
  338. package/dist/features/page/PublishedPageContent.js +0 -205
  339. package/dist/features/page/PublishedPageExperience.js +0 -23
  340. package/dist/features/preview/DerivedPreview.js +0 -134
  341. package/dist/features/preview/commentsEnabled.js +0 -8
  342. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  343. package/dist/features/preview/components/AttachedComments.js +0 -331
  344. package/dist/features/preview/components/CommentHeader.js +0 -122
  345. package/dist/features/preview/components/CommentSidebar.js +0 -29
  346. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  347. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  348. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  349. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  350. package/dist/features/preview/components/LeftSidebar.js +0 -68
  351. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  352. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  353. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  354. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  355. package/dist/features/preview/components/PeekedBlock.js +0 -217
  356. package/dist/features/preview/components/PreviewComments.js +0 -56
  357. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  358. package/dist/features/preview/components/PublicationRow.js +0 -422
  359. package/dist/features/preview/components/PublishDialog.js +0 -194
  360. package/dist/features/preview/components/RightSidebar.js +0 -59
  361. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  362. package/dist/features/preview/previewCommentsStore.js +0 -135
  363. package/dist/features/preview/publication.js +0 -81
  364. package/dist/features/preview/usePageComments.js +0 -39
  365. package/dist/features/runtime/SharedChromeContext.js +0 -7
  366. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  367. package/dist/features/vite/appGeneration.js +0 -89
  368. package/dist/lib/view-queries.js +0 -28
  369. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  370. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  371. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  372. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  407. package/skills/camox/references/cli-environments.md +0 -37
@@ -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 };