camox 0.43.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/bin/camox.mjs +9 -1
  2. package/dist/components/AuthGate.js +0 -6
  3. package/dist/components/DeviceSelector.js +96 -0
  4. package/dist/components/PlatformLabel.js +20 -24
  5. package/dist/core/components/lexical/HighlightNode.js +1 -1
  6. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  7. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  8. package/dist/core/components/lexical/InlineStylesPlugin.js +57 -41
  9. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  10. package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
  11. package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
  12. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  13. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  14. package/dist/core/createApp.d.ts +254 -299
  15. package/dist/core/createApp.js +123 -29
  16. package/dist/core/createBlock.d.ts +5 -5
  17. package/dist/core/createBlock.js +399 -152
  18. package/dist/core/createCollection.d.ts +55 -0
  19. package/dist/core/createCollection.js +93 -0
  20. package/dist/core/createLayout.d.ts +197 -61
  21. package/dist/core/createLayout.js +114 -56
  22. package/dist/core/defineDocument.d.ts +3 -5
  23. package/dist/core/derivedRoutes.js +49 -1
  24. package/dist/core/dom.d.ts +13 -4
  25. package/dist/core/dom.js +44 -1
  26. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  27. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  28. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  29. package/dist/core/editing/createEditableBlock.d.ts +820 -565
  30. package/dist/core/editing/createEditableBlock.js +2153 -971
  31. package/dist/core/editing/referenceWrites.js +51 -0
  32. package/dist/core/editing/useLatestRecord.js +90 -0
  33. package/dist/core/hooks/useArtifactHost.js +139 -0
  34. package/dist/core/hooks/useFieldSelection.js +43 -18
  35. package/dist/core/hooks/useIsEditable.js +12 -10
  36. package/dist/core/hooks/useOverlayMessage.js +15 -19
  37. package/dist/core/lib/artifact.d.ts +21 -0
  38. package/dist/core/lib/artifact.js +154 -0
  39. package/dist/core/lib/artifactColors.js +123 -0
  40. package/dist/core/lib/artifactData.d.ts +1 -0
  41. package/dist/core/lib/artifactData.js +131 -0
  42. package/dist/core/lib/artifactHost.js +205 -0
  43. package/dist/core/lib/artifactRuntime.js +36 -0
  44. package/dist/core/lib/artifactTheme.js +57 -0
  45. package/dist/core/lib/contentType.d.ts +304 -103
  46. package/dist/core/lib/contentType.js +207 -168
  47. package/dist/core/lib/fieldTypes.js +4 -0
  48. package/dist/core/lib/iconTypes.d.ts +13 -0
  49. package/dist/core/lib/icons.d.ts +6 -0
  50. package/dist/core/lib/icons.js +126 -0
  51. package/dist/core/lib/imagePlaceholder.js +177 -0
  52. package/dist/core/lib/imageTransform.js +1 -1
  53. package/dist/core/lib/lexicalReact.d.ts +3 -1
  54. package/dist/core/lib/lexicalState.js +7 -7
  55. package/dist/core/lib/modifierFormats.js +1 -1
  56. package/dist/core/lib/previewPaused.js +9 -0
  57. package/dist/core/lib/recordScope.js +316 -0
  58. package/dist/core/lib/reference.d.ts +81 -0
  59. package/dist/core/lib/reference.js +29 -0
  60. package/dist/core/lib/textLinks.js +7 -5
  61. package/dist/core/lib/textStyles.d.ts +6 -8
  62. package/dist/core/lib/textStyles.js +5 -5
  63. package/dist/core/notFound.d.ts +7 -0
  64. package/dist/core/notFound.js +11 -0
  65. package/dist/core/pageDestinations.js +6 -3
  66. package/dist/core/recordItem.js +34 -0
  67. package/dist/core/requestContext.d.ts +26 -0
  68. package/dist/core/requestContext.js +20 -0
  69. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  70. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  71. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  72. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  73. package/dist/features/canvas/CanvasOverlays.js +254 -0
  74. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  75. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  76. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  77. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  78. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  79. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  80. package/dist/features/canvas/canvasCamera.js +229 -0
  81. package/dist/features/canvas/canvasFlight.js +104 -0
  82. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  83. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  84. package/dist/features/canvas/canvasFrameMode.js +53 -0
  85. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  86. package/dist/features/canvas/canvasItems.js +120 -0
  87. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  88. package/dist/features/canvas/canvasPages.js +79 -0
  89. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  90. package/dist/features/canvas/canvasSelection.js +18 -0
  91. package/dist/features/canvas/canvasStore.js +149 -0
  92. package/dist/features/canvas/canvasThumbnails.js +304 -0
  93. package/dist/features/canvas/canvasZoom.js +10 -0
  94. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  95. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  97. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  98. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  99. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  100. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  101. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  102. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  103. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  104. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  105. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  106. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  107. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  108. package/dist/features/canvas/useCanvasCamera.js +803 -0
  109. package/dist/features/canvas/useCanvasFrame.js +149 -0
  110. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  111. package/dist/features/canvas/useCanvasNearness.js +57 -0
  112. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  113. package/dist/features/content/CamoxContent.d.ts +2 -5
  114. package/dist/features/content/CamoxContent.js +174 -271
  115. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  116. package/dist/features/content/ContentAssets.js +315 -0
  117. package/dist/features/content/ContentCollection.js +663 -0
  118. package/dist/features/content/collection-form.js +58 -0
  119. package/dist/features/content/components/AssetCard.js +101 -69
  120. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  121. package/dist/features/content/components/ContentSidebar.js +129 -18
  122. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  123. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  124. package/dist/features/content/components/MissingFromLocale.js +282 -0
  125. package/dist/features/content/components/UploadDropZone.js +27 -31
  126. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  127. package/dist/features/navigation/navigation.d.ts +66 -20
  128. package/dist/features/navigation/navigation.js +257 -90
  129. package/dist/features/og/defaultFonts.js +8 -8
  130. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  131. package/dist/features/og/imageResponse.d.ts +8 -0
  132. package/dist/features/og/imageResponse.js +26 -0
  133. package/dist/features/page/CuratedPageContent.js +167 -0
  134. package/dist/features/page/DerivedPageContent.js +26 -30
  135. package/dist/features/page/SharedLayoutContent.js +25 -27
  136. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  137. package/dist/features/preview/CamoxPreview.js +811 -507
  138. package/dist/features/preview/EditablePageContent.js +1 -1
  139. package/dist/features/preview/EditablePageExperience.js +16 -22
  140. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  141. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  142. package/dist/features/preview/components/AssetLightbox.js +194 -136
  143. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  144. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  145. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  146. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  147. package/dist/features/preview/components/CanvasPreview.js +243 -0
  148. package/dist/features/preview/components/CreatePageModal.js +128 -137
  149. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  150. package/dist/features/preview/components/DerivedLayoutDialog.js +46 -29
  151. package/dist/features/preview/components/DrillRow.js +150 -0
  152. package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
  153. package/dist/features/preview/components/FieldToolbar.js +166 -116
  154. package/dist/features/preview/components/Frame.js +108 -20
  155. package/dist/features/preview/components/IconFieldEditor.js +227 -0
  156. package/dist/features/preview/components/ItemFieldsEditor.js +238 -205
  157. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  158. package/dist/features/preview/components/Metadata.js +22 -30
  159. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  160. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  161. package/dist/features/preview/components/OverlayTracker.js +10 -42
  162. package/dist/features/preview/components/Overlays.js +81 -69
  163. package/dist/features/preview/components/PageInfo.js +1748 -0
  164. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  165. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  166. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  167. package/dist/features/preview/components/PageNicknameField.js +22 -26
  168. package/dist/features/preview/components/PagePicker.js +145 -147
  169. package/dist/features/preview/components/PageTree.js +525 -532
  170. package/dist/features/preview/components/PreviewActivation.js +28 -32
  171. package/dist/features/preview/components/PreviewPanel.js +620 -319
  172. package/dist/features/preview/components/PreviewToolbar.js +111 -340
  173. package/dist/features/preview/components/RecordCard.js +80 -0
  174. package/dist/features/preview/components/RecordCombobox.js +178 -0
  175. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  176. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  177. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  178. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  179. package/dist/features/preview/components/SelectionEditor.js +993 -0
  180. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  181. package/dist/features/preview/components/SidebarSection.js +52 -64
  182. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  183. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  184. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  185. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  186. package/dist/features/preview/components/useFieldWriter.js +200 -0
  187. package/dist/features/preview/components/useRecordView.js +383 -0
  188. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  189. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  190. package/dist/features/preview/editingFrame.js +197 -0
  191. package/dist/features/preview/overlayHighlights.js +27 -0
  192. package/dist/features/preview/overlayMessages.js +72 -1
  193. package/dist/features/preview/pageRecord.js +189 -0
  194. package/dist/features/preview/previewConstants.js +6 -2
  195. package/dist/features/preview/previewPageFrame.js +95 -0
  196. package/dist/features/preview/previewPreparation.js +7 -0
  197. package/dist/features/preview/previewSelection.js +33 -59
  198. package/dist/features/preview/previewStore.js +225 -123
  199. package/dist/features/preview/referencePickerFocus.js +29 -0
  200. package/dist/features/preview/repeatableItemTargets.js +56 -0
  201. package/dist/features/preview/selectionReveal.js +21 -0
  202. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  203. package/dist/features/preview/viewportContinuity.js +109 -0
  204. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  205. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  206. package/dist/features/provider/CamoxProvider.js +38 -50
  207. package/dist/features/provider/CoreCamoxProvider.js +71 -23
  208. package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
  209. package/dist/features/provider/PreviewSignInPage.js +54 -0
  210. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  211. package/dist/features/provider/components/CommandPalette.js +87 -143
  212. package/dist/features/provider/useAdminShortcuts.js +7 -11
  213. package/dist/features/routes/pageRuntime.d.ts +44 -4
  214. package/dist/features/routes/pageRuntime.js +244 -137
  215. package/dist/features/runtime/RuntimeChrome.js +117 -115
  216. package/dist/features/runtime/alternates.js +64 -0
  217. package/dist/features/runtime/analytics.d.ts +7 -0
  218. package/dist/features/runtime/analytics.js +66 -0
  219. package/dist/features/runtime/artifactSources.js +87 -0
  220. package/dist/features/runtime/editingFallback.js +20 -0
  221. package/dist/features/runtime/linkPrefetch.js +97 -0
  222. package/dist/features/runtime/livePages.js +62 -0
  223. package/dist/features/runtime/llmsTxt.js +40 -0
  224. package/dist/features/runtime/loopbackFetch.js +18 -0
  225. package/dist/features/runtime/navigationAccessibility.js +51 -0
  226. package/dist/features/runtime/navigationTarget.js +23 -2
  227. package/dist/features/runtime/pageApp.js +216 -141
  228. package/dist/features/runtime/pageBlockTypes.js +20 -0
  229. package/dist/features/runtime/pageClient.d.ts +2 -4
  230. package/dist/features/runtime/pageClient.js +18 -3
  231. package/dist/features/runtime/pageNavigation.js +254 -32
  232. package/dist/features/runtime/pageServer.d.ts +2 -4
  233. package/dist/features/runtime/pageServer.js +8 -1
  234. package/dist/features/runtime/pageViewport.js +7 -0
  235. package/dist/features/runtime/runtime.d.ts +60 -23
  236. package/dist/features/runtime/runtime.js +779 -166
  237. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  238. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  239. package/dist/features/runtime/runtimeRoutes.js +25 -0
  240. package/dist/features/runtime/scrollRestoration.js +133 -0
  241. package/dist/features/runtime/studioApp.d.ts +4 -3
  242. package/dist/features/runtime/studioApp.js +5 -9
  243. package/dist/features/runtime/studioClient.d.ts +2 -4
  244. package/dist/features/runtime/studioClient.js +12 -3
  245. package/dist/features/runtime/studioServer.d.ts +2 -4
  246. package/dist/features/runtime/studioServer.js +6 -1
  247. package/dist/features/runtime/worker.d.ts +6 -0
  248. package/dist/features/runtime/worker.js +23 -0
  249. package/dist/features/runtime/workerRequest.js +44 -0
  250. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  251. package/dist/features/studio/CamoxStudio.js +34 -49
  252. package/dist/features/studio/FollowAgentProvider.js +338 -0
  253. package/dist/features/studio/components/ChatSidebar.js +356 -0
  254. package/dist/features/studio/components/DraftsControl.js +676 -0
  255. package/dist/features/studio/components/FaviconDialog.js +318 -0
  256. package/dist/features/studio/components/LocalePicker.js +785 -0
  257. package/dist/features/studio/components/Navbar.js +123 -103
  258. package/dist/features/studio/components/ProjectMenu.js +239 -260
  259. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  260. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  261. package/dist/features/studio/components/ThreadComposer.js +157 -0
  262. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  263. package/dist/features/studio/components/ThreadMessages.js +270 -0
  264. package/dist/features/studio/components/UserButton.js +34 -23
  265. package/dist/features/studio/draftLabel.js +33 -0
  266. package/dist/features/studio/draftNotice.js +13 -0
  267. package/dist/features/studio/followAgent.js +250 -0
  268. package/dist/features/studio/followAgentContext.js +7 -0
  269. package/dist/features/studio/localeOptions.js +118 -0
  270. package/dist/features/studio/localeSwitch.js +19 -0
  271. package/dist/features/studio/routes.js +48 -1
  272. package/dist/features/studio/studioStore.js +64 -1
  273. package/dist/features/studio/useTheme.js +24 -27
  274. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  275. package/dist/features/vite/auth.js +1 -50
  276. package/dist/features/vite/blockBoilerplate.js +6 -5
  277. package/dist/features/vite/blockChunks.js +31 -0
  278. package/dist/features/vite/bundlerLogs.js +17 -0
  279. package/dist/features/vite/definitionsSync.js +158 -226
  280. package/dist/features/vite/devAuthentication.js +4 -16
  281. package/dist/features/vite/devSignIn.js +87 -0
  282. package/dist/features/vite/iconGeneration.js +16 -0
  283. package/dist/features/vite/layoutGeneration.js +11 -1
  284. package/dist/features/vite/publishSeededContent.js +30 -0
  285. package/dist/features/vite/routeGeneration.js +6 -7
  286. package/dist/features/vite/runtimeDev.js +80 -99
  287. package/dist/features/vite/vite.d.ts +53 -31
  288. package/dist/features/vite/vite.js +230 -116
  289. package/dist/features/vite/workerBuild.js +39 -0
  290. package/dist/hooks/use-debounced-field.js +116 -47
  291. package/dist/hooks/use-file-upload.js +114 -67
  292. package/dist/hooks/use-marquee-selection.js +32 -36
  293. package/dist/hooks/use-page-destinations.js +69 -37
  294. package/dist/lib/api-client-server.d.ts +5 -0
  295. package/dist/lib/api-client-server.js +10 -4
  296. package/dist/lib/api-client.d.ts +6 -0
  297. package/dist/lib/api-client.js +51 -16
  298. package/dist/lib/api-socket.js +17 -0
  299. package/dist/lib/auth-page-styles.js +39 -0
  300. package/dist/lib/auth.js +139 -60
  301. package/dist/lib/collection-cache.js +23 -0
  302. package/dist/lib/draft-scope.d.ts +4 -0
  303. package/dist/lib/draft-scope.js +222 -0
  304. package/dist/lib/html.js +12 -0
  305. package/dist/lib/link-pages.js +154 -0
  306. package/dist/lib/locale-path.d.ts +22 -0
  307. package/dist/lib/locale-path.js +57 -0
  308. package/dist/lib/normalized-data.js +252 -152
  309. package/dist/lib/preview-handoff.js +13 -0
  310. package/dist/lib/queries.d.ts +11 -0
  311. package/dist/lib/queries.js +71 -131
  312. package/dist/lib/studio-reads.d.ts +14 -0
  313. package/dist/lib/studio-reads.js +574 -0
  314. package/dist/lib/use-project-room.js +50 -47
  315. package/dist/lib/use-thread.js +310 -0
  316. package/dist/lib/utils.js +25 -29
  317. package/dist/lib/view-locale-context.js +22 -0
  318. package/dist/lib/view-locale.js +46 -0
  319. package/dist/package.js +5 -0
  320. package/dist/studio-overlays.css +41 -147
  321. package/dist/studio.css +2 -2
  322. package/package.json +70 -72
  323. package/skills/camox/SKILL.md +16 -5
  324. package/skills/camox/references/artifacts.md +179 -0
  325. package/skills/camox/references/block-definitions.md +98 -55
  326. package/skills/camox/references/cli-common.md +18 -6
  327. package/skills/camox/references/cli-content.md +92 -58
  328. package/skills/camox/references/cli-publishing.md +26 -0
  329. package/skills/camox/references/dom-integrations.md +27 -0
  330. package/skills/camox/references/field-styling.md +7 -7
  331. package/skills/camox/references/layout-definitions.md +16 -14
  332. package/skills/camox/references/localization.md +56 -0
  333. package/skills/camox/references/routed-layouts.md +133 -15
  334. package/skills/camox-expand/SKILL.md +69 -0
  335. package/skills/camox-expand/references/jobs.md +39 -0
  336. package/skills/camoxify/SKILL.md +38 -2
  337. package/dist/core/components/AddBlockControlBar.js +0 -78
  338. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  339. package/dist/features/metadata/sitemap.d.ts +0 -8
  340. package/dist/features/metadata/sitemap.js +0 -17
  341. package/dist/features/og/imageResponse.node.d.ts +0 -12
  342. package/dist/features/og/imageResponse.node.js +0 -49
  343. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  344. package/dist/features/og/imageResponse.workerd.js +0 -40
  345. package/dist/features/page/PublishedPageContent.js +0 -205
  346. package/dist/features/page/PublishedPageExperience.js +0 -23
  347. package/dist/features/preview/DerivedPreview.js +0 -134
  348. package/dist/features/preview/commentsEnabled.js +0 -8
  349. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  350. package/dist/features/preview/components/AttachedComments.js +0 -194
  351. package/dist/features/preview/components/CommentHeader.js +0 -122
  352. package/dist/features/preview/components/CommentSidebar.js +0 -29
  353. package/dist/features/preview/components/CommentTargetQuote.js +0 -166
  354. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  355. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  356. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  357. package/dist/features/preview/components/LeftSidebar.js +0 -68
  358. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  359. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  360. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  361. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  362. package/dist/features/preview/components/PeekedBlock.js +0 -217
  363. package/dist/features/preview/components/PreviewComments.js +0 -56
  364. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  365. package/dist/features/preview/components/PublicationRow.js +0 -422
  366. package/dist/features/preview/components/PublishDialog.js +0 -194
  367. package/dist/features/preview/components/RightSidebar.js +0 -59
  368. package/dist/features/preview/previewCommentsStore.js +0 -115
  369. package/dist/features/preview/publication.js +0 -81
  370. package/dist/features/runtime/SharedChromeContext.js +0 -7
  371. package/dist/features/studio/components/EnvironmentMenu.js +0 -413
  372. package/dist/features/vite/appGeneration.js +0 -89
  373. package/dist/lib/view-queries.js +0 -28
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  411. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  412. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,26 +1,30 @@
1
+ import { notFound } from "./notFound.js";
2
+ import { useOptionalCamoxApp } from "../features/provider/components/CamoxAppContext.js";
3
+ import { useBlockEditingRuntime } from "./editing/BlockEditingRuntime.js";
1
4
  import { BlockErrorBoundary } from "../features/preview/components/BlockErrorBoundary.js";
5
+ import { asCollectionItem, fieldPlainText } from "./recordItem.js";
6
+ import { RecordScope } from "./lib/recordScope.js";
2
7
  import { c } from "react/compiler-runtime";
3
8
  import * as React from "react";
4
9
  import { Fragment, jsx } from "react/jsx-runtime";
5
10
 
6
11
  //#region src/core/createLayout.tsx
12
+ const INITIAL_LAYOUT_ONLY_ERROR = "❌ Camox: blocks in `blocks.initial` must NOT be `layoutOnly: true` — `initial` is for page-content blocks. Remove `layoutOnly: true` from this block's `createBlock` options.";
7
13
  function createLayoutDefinition(options) {
8
14
  if (options.kind === "singleton" && !/^[\w-]+(?:\.[\w-]+)*$/.test(options.id)) throw new Error(`Singleton layouts require a fixed file route: ${options.id}`);
9
15
  if (options.kind && options.kind !== "curated" && options.blocks.initial) throw new Error("Code-owned layouts cannot define initial page blocks");
16
+ if (options.routes && options.kind !== "derived") throw new Error(`Only derived layouts can define routes: ${options.id}`);
17
+ if (options.toMarkdown && (options.kind ?? "curated") === "curated") throw new Error(`Curated layouts cannot define toMarkdown: ${options.id}`);
10
18
  const LayoutContext = React.createContext(null);
11
19
  const beforeBlocks = options.blocks.before;
12
20
  const afterBlocks = options.blocks.after;
13
21
  const initialBlocks = options.blocks.initial;
14
22
  const BeforeBlocks = () => {
15
- const $ = c(5);
16
- if ($[0] !== "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433") {
17
- for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
18
- $[0] = "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433";
19
- }
23
+ const $ = c(4);
20
24
  const ctx = React.use(LayoutContext);
21
25
  if (!ctx) throw new Error(`Layout "${options.id}" BeforeBlocks must be rendered inside its Provider`);
22
26
  let t0;
23
- if ($[1] !== ctx) {
27
+ if ($[0] !== ctx) {
24
28
  t0 = beforeBlocks.map((block, i) => {
25
29
  const blockData = ctx.layoutBlocks[block._internal.id];
26
30
  if (!blockData) return null;
@@ -36,28 +40,24 @@ function createLayoutDefinition(options) {
36
40
  })
37
41
  }, block._internal.id);
38
42
  });
39
- $[1] = ctx;
40
- $[2] = t0;
41
- } else t0 = $[2];
43
+ $[0] = ctx;
44
+ $[1] = t0;
45
+ } else t0 = $[1];
42
46
  let t1;
43
- if ($[3] !== t0) {
47
+ if ($[2] !== t0) {
44
48
  t1 = /* @__PURE__ */ jsx(Fragment, { children: t0 });
45
- $[3] = t0;
46
- $[4] = t1;
47
- } else t1 = $[4];
49
+ $[2] = t0;
50
+ $[3] = t1;
51
+ } else t1 = $[3];
48
52
  return t1;
49
53
  };
50
54
  BeforeBlocks.displayName = `LayoutBeforeBlocks(${options.id})`;
51
55
  const AfterBlocks = () => {
52
- const $ = c(5);
53
- if ($[0] !== "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433") {
54
- for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
55
- $[0] = "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433";
56
- }
56
+ const $ = c(4);
57
57
  const ctx = React.use(LayoutContext);
58
58
  if (!ctx) throw new Error(`Layout "${options.id}" AfterBlocks must be rendered inside its Provider`);
59
59
  let t0;
60
- if ($[1] !== ctx) {
60
+ if ($[0] !== ctx) {
61
61
  t0 = afterBlocks.map((block, i) => {
62
62
  const blockData = ctx.layoutBlocks[block._internal.id];
63
63
  if (!blockData) return null;
@@ -73,48 +73,106 @@ function createLayoutDefinition(options) {
73
73
  })
74
74
  }, block._internal.id);
75
75
  });
76
- $[1] = ctx;
77
- $[2] = t0;
78
- } else t0 = $[2];
76
+ $[0] = ctx;
77
+ $[1] = t0;
78
+ } else t0 = $[1];
79
79
  let t1;
80
- if ($[3] !== t0) {
80
+ if ($[2] !== t0) {
81
81
  t1 = /* @__PURE__ */ jsx(Fragment, { children: t0 });
82
- $[3] = t0;
83
- $[4] = t1;
84
- } else t1 = $[4];
82
+ $[2] = t0;
83
+ $[3] = t1;
84
+ } else t1 = $[3];
85
85
  return t1;
86
86
  };
87
87
  AfterBlocks.displayName = `LayoutAfterBlocks(${options.id})`;
88
88
  const Provider = (t0) => {
89
- const $ = c(7);
90
- if ($[0] !== "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433") {
91
- for (let $i = 0; $i < 7; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
92
- $[0] = "776e504f06a16915ba8008212a5b0af4dec7762a3d0b05161ac1048bec619433";
93
- }
94
- const { layoutBlocks, children, data } = t0;
89
+ const $ = c(6);
90
+ const { layoutBlocks, children, result } = t0;
95
91
  let t1;
96
- if ($[1] !== data || $[2] !== layoutBlocks) {
92
+ if ($[0] !== layoutBlocks || $[1] !== result) {
97
93
  t1 = {
98
94
  layoutBlocks,
99
- data
95
+ result
100
96
  };
101
- $[1] = data;
102
- $[2] = layoutBlocks;
103
- $[3] = t1;
104
- } else t1 = $[3];
97
+ $[0] = layoutBlocks;
98
+ $[1] = result;
99
+ $[2] = t1;
100
+ } else t1 = $[2];
105
101
  const value = t1;
106
102
  let t2;
107
- if ($[4] !== children || $[5] !== value) {
103
+ if ($[3] !== children || $[4] !== value) {
108
104
  t2 = /* @__PURE__ */ jsx(LayoutContext.Provider, {
109
105
  value,
110
106
  children
111
107
  });
112
- $[4] = children;
113
- $[5] = value;
114
- $[6] = t2;
115
- } else t2 = $[6];
108
+ $[3] = children;
109
+ $[4] = value;
110
+ $[5] = t2;
111
+ } else t2 = $[5];
116
112
  return t2;
117
113
  };
114
+ const Item = (t0) => {
115
+ const $ = c(6);
116
+ const { children } = t0;
117
+ const context = React.use(LayoutContext);
118
+ const app = useOptionalCamoxApp();
119
+ const editingRuntime = useBlockEditingRuntime();
120
+ if (!context) throw new Error(`Layout "${options.id}" Item must be rendered inside its Provider`);
121
+ let t1;
122
+ let t2;
123
+ if ($[0] !== app || $[1] !== children || $[2] !== context.result || $[3] !== editingRuntime) {
124
+ t2 = Symbol.for("react.early_return_sentinel");
125
+ bb0: {
126
+ const result = asCollectionItem(context.result);
127
+ if (!result) {
128
+ t2 = null;
129
+ break bb0;
130
+ }
131
+ const collection = app?.getCollectionById(result.collectionId);
132
+ if (!collection) {
133
+ t2 = null;
134
+ break bb0;
135
+ }
136
+ const { contentSchema, label } = collection._internal;
137
+ const { id, content, references } = result.data;
138
+ const readOnly = /* @__PURE__ */ jsx(RecordScope, {
139
+ record: {
140
+ id,
141
+ label: fieldPlainText(content[label]),
142
+ content,
143
+ references
144
+ },
145
+ properties: contentSchema.properties,
146
+ hop: 1,
147
+ children
148
+ });
149
+ if (!editingRuntime?.renderLayoutItem) {
150
+ t2 = readOnly;
151
+ break bb0;
152
+ }
153
+ t1 = editingRuntime.renderLayoutItem({
154
+ collectionId: result.collectionId,
155
+ labelField: label,
156
+ properties: contentSchema.properties,
157
+ record: result.data,
158
+ children,
159
+ fallback: readOnly
160
+ });
161
+ }
162
+ $[0] = app;
163
+ $[1] = children;
164
+ $[2] = context.result;
165
+ $[3] = editingRuntime;
166
+ $[4] = t1;
167
+ $[5] = t2;
168
+ } else {
169
+ t1 = $[4];
170
+ t2 = $[5];
171
+ }
172
+ if (t2 !== Symbol.for("react.early_return_sentinel")) return t2;
173
+ return t1;
174
+ };
175
+ Item.displayName = `LayoutItem(${options.id})`;
118
176
  const blockDefinitions = [...beforeBlocks.map((block) => {
119
177
  const bundle = block._internal.getInitialBundle();
120
178
  return {
@@ -122,7 +180,7 @@ function createLayoutDefinition(options) {
122
180
  content: bundle.content,
123
181
  settings: bundle.settings,
124
182
  repeatableItems: bundle.repeatableItems,
125
- placement: "before"
183
+ slot: "before"
126
184
  };
127
185
  }), ...afterBlocks.map((block) => {
128
186
  const bundle = block._internal.getInitialBundle();
@@ -131,7 +189,7 @@ function createLayoutDefinition(options) {
131
189
  content: bundle.content,
132
190
  settings: bundle.settings,
133
191
  repeatableItems: bundle.repeatableItems,
134
- placement: "after"
192
+ slot: "after"
135
193
  };
136
194
  })];
137
195
  const buildOgImage = options.buildOgImage ? async (params) => {
@@ -142,7 +200,9 @@ function createLayoutDefinition(options) {
142
200
  height: 630
143
201
  });
144
202
  } : void 0;
145
- const initialBlockBundles = initialBlocks?.map((block) => {
203
+ const loadInitialBlockBundles = initialBlocks && (() => Promise.all(initialBlocks.map(async (load) => {
204
+ const { block } = await load();
205
+ if (block._internal.layoutOnly) throw new Error(`${INITIAL_LAYOUT_ONLY_ERROR} (block "${block._internal.id}")`);
146
206
  const bundle = block._internal.getInitialBundle();
147
207
  return {
148
208
  type: block._internal.id,
@@ -150,25 +210,30 @@ function createLayoutDefinition(options) {
150
210
  settings: bundle.settings,
151
211
  repeatableItems: bundle.repeatableItems
152
212
  };
153
- });
213
+ })));
154
214
  return {
155
215
  BeforeBlocks,
156
216
  AfterBlocks,
217
+ Item,
157
218
  useData() {
158
219
  const context = React.use(LayoutContext);
159
220
  if (!context) throw new Error(`Layout "${options.id}" useData must be rendered inside its Provider`);
160
- return context.data;
221
+ return context.result?.data;
161
222
  },
162
223
  _internal: {
163
224
  id: options.id,
164
225
  kind: options.kind ?? "curated",
165
226
  loader: options.loader,
227
+ routes: options.routes,
228
+ recordPages: options.recordPages,
166
229
  title: options.title,
167
230
  description: options.description,
168
231
  buildMetaTitle: options.buildMetaTitle,
232
+ buildMetaDescription: options.buildMetaDescription,
233
+ toMarkdown: options.toMarkdown,
169
234
  buildOgImage,
170
235
  blockDefinitions,
171
- initialBlockBundles,
236
+ loadInitialBlockBundles,
172
237
  component: options.component,
173
238
  Provider
174
239
  }
@@ -181,13 +246,6 @@ function createLayout(idOrOptions) {
181
246
  id: idOrOptions
182
247
  });
183
248
  }
184
- /** Signal a missing derived page; other loader failures remain server errors. */
185
- function notFound() {
186
- return Object.assign(/* @__PURE__ */ new Error("Page not found"), {
187
- status: 404,
188
- code: "NOT_FOUND"
189
- });
190
- }
191
249
 
192
250
  //#endregion
193
251
  export { createLayout, notFound };
@@ -1,7 +1,5 @@
1
1
  import { UseHeadInput } from "unhead/types";
2
-
3
2
  //#region src/core/defineDocument.d.ts
4
- type CamoxDocument = UseHeadInput;
5
- declare function defineDocument(document: CamoxDocument): CamoxDocument;
6
- //#endregion
7
- export { CamoxDocument, defineDocument };
3
+ export type CamoxDocument = UseHeadInput;
4
+ export declare function defineDocument(document: CamoxDocument): CamoxDocument;
5
+ //#endregion
@@ -1,3 +1,5 @@
1
+ import { asCollectionItem } from "./recordItem.js";
2
+
1
3
  //#region src/core/derivedRoutes.ts
2
4
  function routeSegments(id) {
3
5
  return id.split(".");
@@ -31,6 +33,52 @@ function matchDerivedLayout(layouts, pathname) {
31
33
  }
32
34
  return null;
33
35
  }
36
+ /** Builds the path of one discovered page, rejecting params the route could not match. */
37
+ function derivedLayoutPath(layoutId, params) {
38
+ const segments = routeSegments(layoutId);
39
+ const names = segments.filter((s) => s.startsWith("$")).map((s) => s.slice(1));
40
+ if (!params || typeof params !== "object" || Array.isArray(params)) throw new Error(`Layout "${layoutId}" routes returned an entry without params`);
41
+ const values = params;
42
+ const extra = Object.keys(values).find((name) => !names.includes(name));
43
+ if (extra) throw new Error(`Layout "${layoutId}" routes returned an unknown param "${extra}"`);
44
+ return `/${segments.map((segment) => {
45
+ if (!segment.startsWith("$")) return encodeURIComponent(segment);
46
+ const name = segment.slice(1);
47
+ const value = values[name];
48
+ if (typeof value !== "string" || !value || value.includes("/")) throw new Error(`Layout "${layoutId}" routes returned an invalid "${name}" param: ${JSON.stringify(value)}`);
49
+ return encodeURIComponent(value);
50
+ }).join("/")}`;
51
+ }
52
+ /** The record a discovery entry names, if its `target` is a record target. */
53
+ function targetRecord(entry) {
54
+ const target = asCollectionItem(entry?.target);
55
+ if (typeof target?.id !== "string") return {};
56
+ return {
57
+ recordId: target.id,
58
+ ...typeof target.label === "string" && { label: target.label }
59
+ };
60
+ }
61
+ /**
62
+ * Runs a derived layout's route discovery, keeping the record each page renders. An invalid
63
+ * result throws rather than omitting pages.
64
+ */
65
+ async function discoverLayoutPages(layout, context) {
66
+ const { id, routes } = layout._internal;
67
+ if (!routes) return [];
68
+ let result;
69
+ try {
70
+ result = await routes({ context });
71
+ } catch (error) {
72
+ const message = error instanceof Error ? error.message : String(error);
73
+ throw new Error(`Layout "${id}" routes failed: ${message}`, { cause: error });
74
+ }
75
+ const entries = result?.data;
76
+ if (!Array.isArray(entries)) throw new Error(`Layout "${id}" routes must return { data: [{ params }] }`);
77
+ return entries.map((entry) => ({
78
+ path: derivedLayoutPath(id, entry?.params),
79
+ ...targetRecord(entry)
80
+ }));
81
+ }
34
82
 
35
83
  //#endregion
36
- export { matchDerivedLayout, routeSegments };
84
+ export { derivedLayoutPath, discoverLayoutPages, matchDerivedLayout, routeSegments };
@@ -1,6 +1,7 @@
1
+ import * as React from "react";
1
2
  //#region src/core/dom.d.ts
2
3
  /** The browsing context that owns a rendered element. */
3
- interface ElementContext {
4
+ export interface ElementContext {
4
5
  document: Document;
5
6
  window: Window & typeof globalThis;
6
7
  }
@@ -12,6 +13,14 @@ interface ElementContext {
12
13
  * Returns null for a missing element or a document without a window. Never
13
14
  * falls back to globals. This does not convert objects into the target realm.
14
15
  */
15
- declare function getElementContext(element: Element | null | undefined): ElementContext | null;
16
- //#endregion
17
- export { ElementContext, getElementContext };
16
+ export declare function getElementContext(element: Element | null | undefined): ElementContext | null;
17
+ /**
18
+ * Whether Camox has paused the preview rendering an element, such as a Canvas
19
+ * frame nobody is looking at. Camox already pauses CSS animations, transitions
20
+ * and media there; stop JavaScript-driven animation (WebGL, canvas, requestAnimationFrame
21
+ * loops) while this is true. Always false outside Camox preview.
22
+ *
23
+ * The element must render together with the component calling this.
24
+ */
25
+ export declare function usePreviewPaused(ref: React.RefObject<Element | null>): boolean;
26
+ //#endregion
package/dist/core/dom.js CHANGED
@@ -1,3 +1,7 @@
1
+ import { PREVIEW_PAUSED_ATTRIBUTE } from "./lib/previewPaused.js";
2
+ import { c } from "react/compiler-runtime";
3
+ import * as React from "react";
4
+
1
5
  //#region src/core/dom.ts
2
6
  /**
3
7
  * Resolve DOM APIs from an element rather than the component's JavaScript realm.
@@ -17,6 +21,45 @@ function getElementContext(element) {
17
21
  window
18
22
  };
19
23
  }
24
+ /**
25
+ * Whether Camox has paused the preview rendering an element, such as a Canvas
26
+ * frame nobody is looking at. Camox already pauses CSS animations, transitions
27
+ * and media there; stop JavaScript-driven animation (WebGL, canvas, requestAnimationFrame
28
+ * loops) while this is true. Always false outside Camox preview.
29
+ *
30
+ * The element must render together with the component calling this.
31
+ */
32
+ function usePreviewPaused(ref) {
33
+ const $ = c(4);
34
+ let t0;
35
+ if ($[0] !== ref) {
36
+ t0 = (onChange) => {
37
+ const root = ref.current?.ownerDocument.documentElement;
38
+ const Observer = root?.ownerDocument.defaultView?.MutationObserver;
39
+ if (!root || !Observer) return _temp;
40
+ const observer = new Observer(onChange);
41
+ observer.observe(root, {
42
+ attributes: true,
43
+ attributeFilter: [PREVIEW_PAUSED_ATTRIBUTE]
44
+ });
45
+ return () => observer.disconnect();
46
+ };
47
+ $[0] = ref;
48
+ $[1] = t0;
49
+ } else t0 = $[1];
50
+ const subscribe = t0;
51
+ let t1;
52
+ if ($[2] !== ref) {
53
+ t1 = () => !!ref.current?.ownerDocument.documentElement.hasAttribute(PREVIEW_PAUSED_ATTRIBUTE);
54
+ $[2] = ref;
55
+ $[3] = t1;
56
+ } else t1 = $[3];
57
+ return React.useSyncExternalStore(subscribe, t1, _temp2);
58
+ }
59
+ function _temp2() {
60
+ return false;
61
+ }
62
+ function _temp() {}
20
63
 
21
64
  //#endregion
22
- export { getElementContext };
65
+ export { getElementContext, usePreviewPaused };
@@ -0,0 +1,16 @@
1
+ import { LoadedRecord } from "../requestContext.js";
2
+ import * as React from "react";
3
+ //#region src/core/editing/BlockEditingRuntime.d.ts
4
+ /** A record page's record, as `layout.Item` hands it to the editing runtime. */
5
+ export interface LayoutItemProps {
6
+ collectionId: string;
7
+ /** The collection's label field. */
8
+ labelField: string;
9
+ /** The collection's field schemas. */
10
+ properties: Record<string, unknown>;
11
+ record: LoadedRecord;
12
+ children: (scope: any) => React.ReactNode;
13
+ /** The read-only rendering, for where the record can't be edited. */
14
+ fallback: React.ReactNode;
15
+ }
16
+ //#endregion
@@ -5,30 +5,21 @@ import { jsx } from "react/jsx-runtime";
5
5
  //#region src/core/editing/BlockEditingRuntime.tsx
6
6
  const BlockEditingRuntimeContext = React.createContext(null);
7
7
  function BlockEditingRuntimeProvider(t0) {
8
- const $ = c(4);
9
- if ($[0] !== "ad4fc9cc5b1b02b16c68794c8ba79d99d7e878328fdbc5bd08fcf7fbaebb83df") {
10
- for (let $i = 0; $i < 4; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
11
- $[0] = "ad4fc9cc5b1b02b16c68794c8ba79d99d7e878328fdbc5bd08fcf7fbaebb83df";
12
- }
8
+ const $ = c(3);
13
9
  const { children, runtime } = t0;
14
10
  let t1;
15
- if ($[1] !== children || $[2] !== runtime) {
11
+ if ($[0] !== children || $[1] !== runtime) {
16
12
  t1 = /* @__PURE__ */ jsx(BlockEditingRuntimeContext.Provider, {
17
13
  value: runtime,
18
14
  children
19
15
  });
20
- $[1] = children;
21
- $[2] = runtime;
22
- $[3] = t1;
23
- } else t1 = $[3];
16
+ $[0] = children;
17
+ $[1] = runtime;
18
+ $[2] = t1;
19
+ } else t1 = $[2];
24
20
  return t1;
25
21
  }
26
22
  function useBlockEditingRuntime() {
27
- const $ = c(1);
28
- if ($[0] !== "ad4fc9cc5b1b02b16c68794c8ba79d99d7e878328fdbc5bd08fcf7fbaebb83df") {
29
- for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
30
- $[0] = "ad4fc9cc5b1b02b16c68794c8ba79d99d7e878328fdbc5bd08fcf7fbaebb83df";
31
- }
32
23
  return React.useContext(BlockEditingRuntimeContext);
33
24
  }
34
25
 
@@ -14,30 +14,39 @@ function getEditableDefinition(options) {
14
14
  return definition;
15
15
  }
16
16
  function EditableBlock(t0) {
17
- const $ = c(6);
18
- if ($[0] !== "e1b3ebcb34bc95f5c457074764df3357687300ade86d161e3e1014255268f87d") {
19
- for (let $i = 0; $i < 6; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
20
- $[0] = "e1b3ebcb34bc95f5c457074764df3357687300ade86d161e3e1014255268f87d";
21
- }
17
+ const $ = c(5);
22
18
  const { options, props } = t0;
23
19
  let t1;
24
- if ($[1] !== options) {
20
+ if ($[0] !== options) {
25
21
  t1 = getEditableDefinition(options);
26
- $[1] = options;
27
- $[2] = t1;
28
- } else t1 = $[2];
22
+ $[0] = options;
23
+ $[1] = t1;
24
+ } else t1 = $[1];
29
25
  const Component = t1._internal.Component;
30
26
  const t2 = props;
31
27
  let t3;
32
- if ($[3] !== Component || $[4] !== t2) {
28
+ if ($[2] !== Component || $[3] !== t2) {
33
29
  t3 = /* @__PURE__ */ jsx(Component, { ...t2 });
34
- $[3] = Component;
35
- $[4] = t2;
36
- $[5] = t3;
37
- } else t3 = $[5];
30
+ $[2] = Component;
31
+ $[3] = t2;
32
+ $[4] = t3;
33
+ } else t3 = $[4];
38
34
  return t3;
39
35
  }
36
+ /** Record pages' records render through the record scope of a block without fields. */
37
+ const layoutItemOptions = {
38
+ id: "camox-layout-item",
39
+ title: "",
40
+ description: "",
41
+ content: () => ({}),
42
+ toMarkdown: () => [],
43
+ component: () => null
44
+ };
40
45
  const completeEditingRuntime = {
46
+ renderLayoutItem(props) {
47
+ const { LayoutItem } = getEditableDefinition(layoutItemOptions)._internal;
48
+ return /* @__PURE__ */ jsx(LayoutItem, { ...props });
49
+ },
41
50
  useSetting(options, name) {
42
51
  return getEditableDefinition(options).useSetting(name);
43
52
  },
@@ -54,21 +63,17 @@ const completeEditingRuntime = {
54
63
  }
55
64
  };
56
65
  function CompleteBlockEditingRuntimeProvider(t0) {
57
- const $ = c(3);
58
- if ($[0] !== "e1b3ebcb34bc95f5c457074764df3357687300ade86d161e3e1014255268f87d") {
59
- for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
60
- $[0] = "e1b3ebcb34bc95f5c457074764df3357687300ade86d161e3e1014255268f87d";
61
- }
66
+ const $ = c(2);
62
67
  const { children } = t0;
63
68
  let t1;
64
- if ($[1] !== children) {
69
+ if ($[0] !== children) {
65
70
  t1 = /* @__PURE__ */ jsx(BlockEditingRuntimeProvider, {
66
71
  runtime: completeEditingRuntime,
67
72
  children
68
73
  });
69
- $[1] = children;
70
- $[2] = t1;
71
- } else t1 = $[2];
74
+ $[0] = children;
75
+ $[1] = t1;
76
+ } else t1 = $[1];
72
77
  return t1;
73
78
  }
74
79