camox 0.44.0 → 0.46.0

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