camox 0.43.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/bin/camox.mjs +9 -1
  2. package/dist/components/AuthGate.js +0 -6
  3. package/dist/components/DeviceSelector.js +96 -0
  4. package/dist/components/PlatformLabel.js +20 -24
  5. package/dist/core/components/lexical/HighlightNode.js +1 -1
  6. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  7. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  8. package/dist/core/components/lexical/InlineStylesPlugin.js +57 -41
  9. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  10. package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
  11. package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
  12. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  13. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  14. package/dist/core/createApp.d.ts +254 -299
  15. package/dist/core/createApp.js +123 -29
  16. package/dist/core/createBlock.d.ts +5 -5
  17. package/dist/core/createBlock.js +399 -152
  18. package/dist/core/createCollection.d.ts +55 -0
  19. package/dist/core/createCollection.js +93 -0
  20. package/dist/core/createLayout.d.ts +197 -61
  21. package/dist/core/createLayout.js +114 -56
  22. package/dist/core/defineDocument.d.ts +3 -5
  23. package/dist/core/derivedRoutes.js +49 -1
  24. package/dist/core/dom.d.ts +13 -4
  25. package/dist/core/dom.js +44 -1
  26. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  27. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  28. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  29. package/dist/core/editing/createEditableBlock.d.ts +820 -565
  30. package/dist/core/editing/createEditableBlock.js +2153 -971
  31. package/dist/core/editing/referenceWrites.js +51 -0
  32. package/dist/core/editing/useLatestRecord.js +90 -0
  33. package/dist/core/hooks/useArtifactHost.js +139 -0
  34. package/dist/core/hooks/useFieldSelection.js +43 -18
  35. package/dist/core/hooks/useIsEditable.js +12 -10
  36. package/dist/core/hooks/useOverlayMessage.js +15 -19
  37. package/dist/core/lib/artifact.d.ts +21 -0
  38. package/dist/core/lib/artifact.js +154 -0
  39. package/dist/core/lib/artifactColors.js +123 -0
  40. package/dist/core/lib/artifactData.d.ts +1 -0
  41. package/dist/core/lib/artifactData.js +131 -0
  42. package/dist/core/lib/artifactHost.js +205 -0
  43. package/dist/core/lib/artifactRuntime.js +36 -0
  44. package/dist/core/lib/artifactTheme.js +57 -0
  45. package/dist/core/lib/contentType.d.ts +304 -103
  46. package/dist/core/lib/contentType.js +207 -168
  47. package/dist/core/lib/fieldTypes.js +4 -0
  48. package/dist/core/lib/iconTypes.d.ts +13 -0
  49. package/dist/core/lib/icons.d.ts +6 -0
  50. package/dist/core/lib/icons.js +126 -0
  51. package/dist/core/lib/imagePlaceholder.js +177 -0
  52. package/dist/core/lib/imageTransform.js +1 -1
  53. package/dist/core/lib/lexicalReact.d.ts +3 -1
  54. package/dist/core/lib/lexicalState.js +7 -7
  55. package/dist/core/lib/modifierFormats.js +1 -1
  56. package/dist/core/lib/previewPaused.js +9 -0
  57. package/dist/core/lib/recordScope.js +316 -0
  58. package/dist/core/lib/reference.d.ts +81 -0
  59. package/dist/core/lib/reference.js +29 -0
  60. package/dist/core/lib/textLinks.js +7 -5
  61. package/dist/core/lib/textStyles.d.ts +6 -8
  62. package/dist/core/lib/textStyles.js +5 -5
  63. package/dist/core/notFound.d.ts +7 -0
  64. package/dist/core/notFound.js +11 -0
  65. package/dist/core/pageDestinations.js +6 -3
  66. package/dist/core/recordItem.js +34 -0
  67. package/dist/core/requestContext.d.ts +26 -0
  68. package/dist/core/requestContext.js +20 -0
  69. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  70. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  71. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  72. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  73. package/dist/features/canvas/CanvasOverlays.js +254 -0
  74. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  75. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  76. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  77. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  78. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  79. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  80. package/dist/features/canvas/canvasCamera.js +229 -0
  81. package/dist/features/canvas/canvasFlight.js +104 -0
  82. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  83. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  84. package/dist/features/canvas/canvasFrameMode.js +53 -0
  85. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  86. package/dist/features/canvas/canvasItems.js +120 -0
  87. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  88. package/dist/features/canvas/canvasPages.js +79 -0
  89. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  90. package/dist/features/canvas/canvasSelection.js +18 -0
  91. package/dist/features/canvas/canvasStore.js +149 -0
  92. package/dist/features/canvas/canvasThumbnails.js +304 -0
  93. package/dist/features/canvas/canvasZoom.js +10 -0
  94. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  95. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  97. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  98. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  99. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  100. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  101. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  102. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  103. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  104. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  105. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  106. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  107. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  108. package/dist/features/canvas/useCanvasCamera.js +803 -0
  109. package/dist/features/canvas/useCanvasFrame.js +149 -0
  110. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  111. package/dist/features/canvas/useCanvasNearness.js +57 -0
  112. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  113. package/dist/features/content/CamoxContent.d.ts +2 -5
  114. package/dist/features/content/CamoxContent.js +174 -271
  115. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  116. package/dist/features/content/ContentAssets.js +315 -0
  117. package/dist/features/content/ContentCollection.js +663 -0
  118. package/dist/features/content/collection-form.js +58 -0
  119. package/dist/features/content/components/AssetCard.js +101 -69
  120. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  121. package/dist/features/content/components/ContentSidebar.js +129 -18
  122. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  123. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  124. package/dist/features/content/components/MissingFromLocale.js +282 -0
  125. package/dist/features/content/components/UploadDropZone.js +27 -31
  126. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  127. package/dist/features/navigation/navigation.d.ts +66 -20
  128. package/dist/features/navigation/navigation.js +257 -90
  129. package/dist/features/og/defaultFonts.js +8 -8
  130. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  131. package/dist/features/og/imageResponse.d.ts +8 -0
  132. package/dist/features/og/imageResponse.js +26 -0
  133. package/dist/features/page/CuratedPageContent.js +167 -0
  134. package/dist/features/page/DerivedPageContent.js +26 -30
  135. package/dist/features/page/SharedLayoutContent.js +25 -27
  136. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  137. package/dist/features/preview/CamoxPreview.js +811 -507
  138. package/dist/features/preview/EditablePageContent.js +1 -1
  139. package/dist/features/preview/EditablePageExperience.js +16 -22
  140. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  141. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  142. package/dist/features/preview/components/AssetLightbox.js +194 -136
  143. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  144. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  145. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  146. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  147. package/dist/features/preview/components/CanvasPreview.js +243 -0
  148. package/dist/features/preview/components/CreatePageModal.js +128 -137
  149. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  150. package/dist/features/preview/components/DerivedLayoutDialog.js +46 -29
  151. package/dist/features/preview/components/DrillRow.js +150 -0
  152. package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
  153. package/dist/features/preview/components/FieldToolbar.js +166 -116
  154. package/dist/features/preview/components/Frame.js +108 -20
  155. package/dist/features/preview/components/IconFieldEditor.js +227 -0
  156. package/dist/features/preview/components/ItemFieldsEditor.js +238 -205
  157. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  158. package/dist/features/preview/components/Metadata.js +22 -30
  159. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  160. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  161. package/dist/features/preview/components/OverlayTracker.js +10 -42
  162. package/dist/features/preview/components/Overlays.js +81 -69
  163. package/dist/features/preview/components/PageInfo.js +1748 -0
  164. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  165. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  166. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  167. package/dist/features/preview/components/PageNicknameField.js +22 -26
  168. package/dist/features/preview/components/PagePicker.js +145 -147
  169. package/dist/features/preview/components/PageTree.js +525 -532
  170. package/dist/features/preview/components/PreviewActivation.js +28 -32
  171. package/dist/features/preview/components/PreviewPanel.js +620 -319
  172. package/dist/features/preview/components/PreviewToolbar.js +111 -340
  173. package/dist/features/preview/components/RecordCard.js +80 -0
  174. package/dist/features/preview/components/RecordCombobox.js +178 -0
  175. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  176. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  177. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  178. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  179. package/dist/features/preview/components/SelectionEditor.js +993 -0
  180. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  181. package/dist/features/preview/components/SidebarSection.js +52 -64
  182. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  183. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  184. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  185. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  186. package/dist/features/preview/components/useFieldWriter.js +200 -0
  187. package/dist/features/preview/components/useRecordView.js +383 -0
  188. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  189. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  190. package/dist/features/preview/editingFrame.js +197 -0
  191. package/dist/features/preview/overlayHighlights.js +27 -0
  192. package/dist/features/preview/overlayMessages.js +72 -1
  193. package/dist/features/preview/pageRecord.js +189 -0
  194. package/dist/features/preview/previewConstants.js +6 -2
  195. package/dist/features/preview/previewPageFrame.js +95 -0
  196. package/dist/features/preview/previewPreparation.js +7 -0
  197. package/dist/features/preview/previewSelection.js +33 -59
  198. package/dist/features/preview/previewStore.js +225 -123
  199. package/dist/features/preview/referencePickerFocus.js +29 -0
  200. package/dist/features/preview/repeatableItemTargets.js +56 -0
  201. package/dist/features/preview/selectionReveal.js +21 -0
  202. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  203. package/dist/features/preview/viewportContinuity.js +109 -0
  204. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  205. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  206. package/dist/features/provider/CamoxProvider.js +38 -50
  207. package/dist/features/provider/CoreCamoxProvider.js +71 -23
  208. package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
  209. package/dist/features/provider/PreviewSignInPage.js +54 -0
  210. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  211. package/dist/features/provider/components/CommandPalette.js +87 -143
  212. package/dist/features/provider/useAdminShortcuts.js +7 -11
  213. package/dist/features/routes/pageRuntime.d.ts +44 -4
  214. package/dist/features/routes/pageRuntime.js +244 -137
  215. package/dist/features/runtime/RuntimeChrome.js +117 -115
  216. package/dist/features/runtime/alternates.js +64 -0
  217. package/dist/features/runtime/analytics.d.ts +7 -0
  218. package/dist/features/runtime/analytics.js +66 -0
  219. package/dist/features/runtime/artifactSources.js +87 -0
  220. package/dist/features/runtime/editingFallback.js +20 -0
  221. package/dist/features/runtime/linkPrefetch.js +97 -0
  222. package/dist/features/runtime/livePages.js +62 -0
  223. package/dist/features/runtime/llmsTxt.js +40 -0
  224. package/dist/features/runtime/loopbackFetch.js +18 -0
  225. package/dist/features/runtime/navigationAccessibility.js +51 -0
  226. package/dist/features/runtime/navigationTarget.js +23 -2
  227. package/dist/features/runtime/pageApp.js +216 -141
  228. package/dist/features/runtime/pageBlockTypes.js +20 -0
  229. package/dist/features/runtime/pageClient.d.ts +2 -4
  230. package/dist/features/runtime/pageClient.js +18 -3
  231. package/dist/features/runtime/pageNavigation.js +254 -32
  232. package/dist/features/runtime/pageServer.d.ts +2 -4
  233. package/dist/features/runtime/pageServer.js +8 -1
  234. package/dist/features/runtime/pageViewport.js +7 -0
  235. package/dist/features/runtime/runtime.d.ts +60 -23
  236. package/dist/features/runtime/runtime.js +779 -166
  237. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  238. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  239. package/dist/features/runtime/runtimeRoutes.js +25 -0
  240. package/dist/features/runtime/scrollRestoration.js +133 -0
  241. package/dist/features/runtime/studioApp.d.ts +4 -3
  242. package/dist/features/runtime/studioApp.js +5 -9
  243. package/dist/features/runtime/studioClient.d.ts +2 -4
  244. package/dist/features/runtime/studioClient.js +12 -3
  245. package/dist/features/runtime/studioServer.d.ts +2 -4
  246. package/dist/features/runtime/studioServer.js +6 -1
  247. package/dist/features/runtime/worker.d.ts +6 -0
  248. package/dist/features/runtime/worker.js +23 -0
  249. package/dist/features/runtime/workerRequest.js +44 -0
  250. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  251. package/dist/features/studio/CamoxStudio.js +34 -49
  252. package/dist/features/studio/FollowAgentProvider.js +338 -0
  253. package/dist/features/studio/components/ChatSidebar.js +356 -0
  254. package/dist/features/studio/components/DraftsControl.js +676 -0
  255. package/dist/features/studio/components/FaviconDialog.js +318 -0
  256. package/dist/features/studio/components/LocalePicker.js +785 -0
  257. package/dist/features/studio/components/Navbar.js +123 -103
  258. package/dist/features/studio/components/ProjectMenu.js +239 -260
  259. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  260. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  261. package/dist/features/studio/components/ThreadComposer.js +157 -0
  262. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  263. package/dist/features/studio/components/ThreadMessages.js +270 -0
  264. package/dist/features/studio/components/UserButton.js +34 -23
  265. package/dist/features/studio/draftLabel.js +33 -0
  266. package/dist/features/studio/draftNotice.js +13 -0
  267. package/dist/features/studio/followAgent.js +250 -0
  268. package/dist/features/studio/followAgentContext.js +7 -0
  269. package/dist/features/studio/localeOptions.js +118 -0
  270. package/dist/features/studio/localeSwitch.js +19 -0
  271. package/dist/features/studio/routes.js +48 -1
  272. package/dist/features/studio/studioStore.js +64 -1
  273. package/dist/features/studio/useTheme.js +24 -27
  274. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  275. package/dist/features/vite/auth.js +1 -50
  276. package/dist/features/vite/blockBoilerplate.js +6 -5
  277. package/dist/features/vite/blockChunks.js +31 -0
  278. package/dist/features/vite/bundlerLogs.js +17 -0
  279. package/dist/features/vite/definitionsSync.js +158 -226
  280. package/dist/features/vite/devAuthentication.js +4 -16
  281. package/dist/features/vite/devSignIn.js +87 -0
  282. package/dist/features/vite/iconGeneration.js +16 -0
  283. package/dist/features/vite/layoutGeneration.js +11 -1
  284. package/dist/features/vite/publishSeededContent.js +30 -0
  285. package/dist/features/vite/routeGeneration.js +6 -7
  286. package/dist/features/vite/runtimeDev.js +80 -99
  287. package/dist/features/vite/vite.d.ts +53 -31
  288. package/dist/features/vite/vite.js +230 -116
  289. package/dist/features/vite/workerBuild.js +39 -0
  290. package/dist/hooks/use-debounced-field.js +116 -47
  291. package/dist/hooks/use-file-upload.js +114 -67
  292. package/dist/hooks/use-marquee-selection.js +32 -36
  293. package/dist/hooks/use-page-destinations.js +69 -37
  294. package/dist/lib/api-client-server.d.ts +5 -0
  295. package/dist/lib/api-client-server.js +10 -4
  296. package/dist/lib/api-client.d.ts +6 -0
  297. package/dist/lib/api-client.js +51 -16
  298. package/dist/lib/api-socket.js +17 -0
  299. package/dist/lib/auth-page-styles.js +39 -0
  300. package/dist/lib/auth.js +139 -60
  301. package/dist/lib/collection-cache.js +23 -0
  302. package/dist/lib/draft-scope.d.ts +4 -0
  303. package/dist/lib/draft-scope.js +222 -0
  304. package/dist/lib/html.js +12 -0
  305. package/dist/lib/link-pages.js +154 -0
  306. package/dist/lib/locale-path.d.ts +22 -0
  307. package/dist/lib/locale-path.js +57 -0
  308. package/dist/lib/normalized-data.js +252 -152
  309. package/dist/lib/preview-handoff.js +13 -0
  310. package/dist/lib/queries.d.ts +11 -0
  311. package/dist/lib/queries.js +71 -131
  312. package/dist/lib/studio-reads.d.ts +14 -0
  313. package/dist/lib/studio-reads.js +574 -0
  314. package/dist/lib/use-project-room.js +50 -47
  315. package/dist/lib/use-thread.js +310 -0
  316. package/dist/lib/utils.js +25 -29
  317. package/dist/lib/view-locale-context.js +22 -0
  318. package/dist/lib/view-locale.js +46 -0
  319. package/dist/package.js +5 -0
  320. package/dist/studio-overlays.css +41 -147
  321. package/dist/studio.css +2 -2
  322. package/package.json +70 -72
  323. package/skills/camox/SKILL.md +16 -5
  324. package/skills/camox/references/artifacts.md +179 -0
  325. package/skills/camox/references/block-definitions.md +98 -55
  326. package/skills/camox/references/cli-common.md +18 -6
  327. package/skills/camox/references/cli-content.md +92 -58
  328. package/skills/camox/references/cli-publishing.md +26 -0
  329. package/skills/camox/references/dom-integrations.md +27 -0
  330. package/skills/camox/references/field-styling.md +7 -7
  331. package/skills/camox/references/layout-definitions.md +16 -14
  332. package/skills/camox/references/localization.md +56 -0
  333. package/skills/camox/references/routed-layouts.md +133 -15
  334. package/skills/camox-expand/SKILL.md +69 -0
  335. package/skills/camox-expand/references/jobs.md +39 -0
  336. package/skills/camoxify/SKILL.md +38 -2
  337. package/dist/core/components/AddBlockControlBar.js +0 -78
  338. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  339. package/dist/features/metadata/sitemap.d.ts +0 -8
  340. package/dist/features/metadata/sitemap.js +0 -17
  341. package/dist/features/og/imageResponse.node.d.ts +0 -12
  342. package/dist/features/og/imageResponse.node.js +0 -49
  343. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  344. package/dist/features/og/imageResponse.workerd.js +0 -40
  345. package/dist/features/page/PublishedPageContent.js +0 -205
  346. package/dist/features/page/PublishedPageExperience.js +0 -23
  347. package/dist/features/preview/DerivedPreview.js +0 -134
  348. package/dist/features/preview/commentsEnabled.js +0 -8
  349. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  350. package/dist/features/preview/components/AttachedComments.js +0 -194
  351. package/dist/features/preview/components/CommentHeader.js +0 -122
  352. package/dist/features/preview/components/CommentSidebar.js +0 -29
  353. package/dist/features/preview/components/CommentTargetQuote.js +0 -166
  354. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  355. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  356. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  357. package/dist/features/preview/components/LeftSidebar.js +0 -68
  358. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  359. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  360. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  361. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  362. package/dist/features/preview/components/PeekedBlock.js +0 -217
  363. package/dist/features/preview/components/PreviewComments.js +0 -56
  364. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  365. package/dist/features/preview/components/PublicationRow.js +0 -422
  366. package/dist/features/preview/components/PublishDialog.js +0 -194
  367. package/dist/features/preview/components/RightSidebar.js +0 -59
  368. package/dist/features/preview/previewCommentsStore.js +0 -115
  369. package/dist/features/preview/publication.js +0 -81
  370. package/dist/features/runtime/SharedChromeContext.js +0 -7
  371. package/dist/features/studio/components/EnvironmentMenu.js +0 -413
  372. package/dist/features/vite/appGeneration.js +0 -89
  373. package/dist/lib/view-queries.js +0 -28
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  411. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  412. package/skills/camox/references/cli-environments.md +0 -37
@@ -0,0 +1,177 @@
1
+ import { getImagePlaceholderTitle, isImagePlaceholder } from "./contentType.js";
2
+ import { c } from "react/compiler-runtime";
3
+ import * as React from "react";
4
+ import { jsx, jsxs } from "react/jsx-runtime";
5
+
6
+ //#region src/core/lib/imagePlaceholder.tsx
7
+ const presentationProps = /* @__PURE__ */ new Set([
8
+ "id",
9
+ "className",
10
+ "style",
11
+ "width",
12
+ "height",
13
+ "title",
14
+ "role",
15
+ "tabIndex",
16
+ "hidden",
17
+ "dir",
18
+ "lang"
19
+ ]);
20
+ const landscapeLayers = [
21
+ {
22
+ path: "M0 680 190 470 280 520 560 180 650 330 720 290 1020 610 1200 550V800H0Z",
23
+ shade: 5
24
+ },
25
+ {
26
+ path: "M0 500Q180 350 380 470T780 490Q1000 350 1200 460V800H0Z",
27
+ shade: 9
28
+ },
29
+ {
30
+ path: "M0 590Q200 690 440 550T850 570Q1040 650 1200 530V800H0Z",
31
+ shade: 14
32
+ },
33
+ {
34
+ path: "M0 650Q160 580 330 660T660 650Q850 590 1010 480L1200 390V800H0Z",
35
+ shade: 20
36
+ }
37
+ ];
38
+ const placeholderFill = "var(--camox-placeholder, #f1f3f5)";
39
+ const placeholderInk = "var(--camox-placeholder-ink, #64748b)";
40
+ function PlaceholderLandscape() {
41
+ const $ = c(10);
42
+ const id = React.useId();
43
+ let t0;
44
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
45
+ t0 = { color: placeholderFill };
46
+ $[0] = t0;
47
+ } else t0 = $[0];
48
+ let t1;
49
+ if ($[1] !== id) {
50
+ t1 = landscapeLayers.map((t2, index) => {
51
+ const { shade } = t2;
52
+ return /* @__PURE__ */ jsxs("linearGradient", {
53
+ id: `${id}-hill-${index}`,
54
+ x1: "0",
55
+ y1: "0",
56
+ x2: "0",
57
+ y2: "1",
58
+ children: [/* @__PURE__ */ jsx("stop", {
59
+ offset: "0",
60
+ stopColor: `color-mix(in oklab, currentColor ${100 - shade}%, #64748b)`
61
+ }), /* @__PURE__ */ jsx("stop", {
62
+ offset: "1",
63
+ stopColor: `color-mix(in oklab, currentColor ${104 - shade}%, #64748b)`
64
+ })]
65
+ }, index);
66
+ });
67
+ $[1] = id;
68
+ $[2] = t1;
69
+ } else t1 = $[2];
70
+ let t2;
71
+ if ($[3] !== t1) {
72
+ t2 = /* @__PURE__ */ jsx("defs", { children: t1 });
73
+ $[3] = t1;
74
+ $[4] = t2;
75
+ } else t2 = $[4];
76
+ let t3;
77
+ if ($[5] !== id) {
78
+ t3 = landscapeLayers.map((t4, index_0) => {
79
+ const { path } = t4;
80
+ return /* @__PURE__ */ jsx("path", {
81
+ d: path,
82
+ fill: `url(#${id}-hill-${index_0})`
83
+ }, index_0);
84
+ });
85
+ $[5] = id;
86
+ $[6] = t3;
87
+ } else t3 = $[6];
88
+ let t4;
89
+ if ($[7] !== t2 || $[8] !== t3) {
90
+ t4 = /* @__PURE__ */ jsxs("g", {
91
+ style: t0,
92
+ children: [t2, t3]
93
+ });
94
+ $[7] = t2;
95
+ $[8] = t3;
96
+ $[9] = t4;
97
+ } else t4 = $[9];
98
+ return t4;
99
+ }
100
+ /**
101
+ * Run after the author's callback. Only direct images of explicitly synthesized
102
+ * assets are replaced; picture elements, wrappers and custom components retain
103
+ * their URL fallback. Refs and event handlers also keep the image intact rather
104
+ * than silently dropping behavior or handing callers an incompatible SVG node.
105
+ */
106
+ function renderImagePlaceholder(value, rendered) {
107
+ if (!isImagePlaceholder(value)) return rendered;
108
+ if (!React.isValidElement(rendered)) return rendered;
109
+ if (rendered.type !== "img") return rendered;
110
+ const props = rendered.props;
111
+ if (Object.entries(props).some(([name, value]) => value != null && (name === "ref" || /^on[A-Z]/.test(name) || name === "useMap" || name === "isMap"))) return rendered;
112
+ const svgProps = {};
113
+ for (const [name, value] of Object.entries(props)) if (presentationProps.has(name) || name.startsWith("aria-") || name.startsWith("data-")) svgProps[name] = value;
114
+ const hasLabel = Boolean(props["aria-label"] || props["aria-labelledby"] || props.alt);
115
+ const decorative = props["aria-hidden"] === true || props["aria-hidden"] === "true" || !hasLabel;
116
+ return /* @__PURE__ */ jsxs("svg", {
117
+ xmlns: "http://www.w3.org/2000/svg",
118
+ width: 1200,
119
+ height: "auto",
120
+ viewBox: "0 0 1200 800",
121
+ preserveAspectRatio: "xMidYMid slice",
122
+ role: decorative ? void 0 : "img",
123
+ "aria-label": props["aria-labelledby"] ? void 0 : props.alt || void 0,
124
+ "aria-hidden": decorative ? true : void 0,
125
+ focusable: "false",
126
+ ...svgProps,
127
+ children: [
128
+ /* @__PURE__ */ jsx("rect", {
129
+ width: "1200",
130
+ height: "800",
131
+ style: { fill: placeholderFill }
132
+ }),
133
+ /* @__PURE__ */ jsx(PlaceholderLandscape, {}),
134
+ /* @__PURE__ */ jsx("foreignObject", {
135
+ x: "60",
136
+ y: "300",
137
+ width: "1080",
138
+ height: "200",
139
+ children: /* @__PURE__ */ jsx("div", {
140
+ style: {
141
+ display: "flex",
142
+ alignItems: "center",
143
+ justifyContent: "center",
144
+ height: "100%",
145
+ fontFamily: "inherit",
146
+ fontSize: 48
147
+ },
148
+ children: /* @__PURE__ */ jsx("span", {
149
+ style: {
150
+ display: "block",
151
+ maxWidth: "100%",
152
+ color: placeholderFill,
153
+ background: "currentColor",
154
+ borderRadius: 16,
155
+ padding: "16px 28px"
156
+ },
157
+ children: /* @__PURE__ */ jsx("span", {
158
+ style: {
159
+ color: placeholderInk,
160
+ display: "block",
161
+ overflow: "hidden",
162
+ textOverflow: "ellipsis",
163
+ whiteSpace: "nowrap",
164
+ lineHeight: 1.25,
165
+ userSelect: "none"
166
+ },
167
+ children: getImagePlaceholderTitle(value)
168
+ })
169
+ })
170
+ })
171
+ })
172
+ ]
173
+ }, rendered.key);
174
+ }
175
+
176
+ //#endregion
177
+ export { renderImagePlaceholder };
@@ -9,7 +9,7 @@ const DEFAULT_SRCSET_WIDTHS = [
9
9
  ];
10
10
  const DEFAULT_SRC_WIDTH = 1280;
11
11
  const DEFAULT_SIZES = "100vw";
12
- const MIN_OPTIMIZE_SIZE = 50 * 1024;
12
+ const MIN_OPTIMIZE_SIZE = 51200;
13
13
  function isNonProxiedHostname(hostname) {
14
14
  if (hostname === "localhost") return true;
15
15
  if (hostname === "127.0.0.1") return true;
@@ -1 +1,3 @@
1
- import { InlineStyle, InlineTextStyles, TextLinkStyleData, TextStyleData } from "./textStyles.js";
1
+ import { InlineStyle, InlineTextStyles, TextLinkStyleData, TextStyleData } from "./textStyles.js";
2
+ import "react";
3
+ export type { InlineStyle, InlineTextStyles, TextLinkStyleData, TextStyleData };
@@ -50,9 +50,9 @@ function extractMarkdownFromNode(node) {
50
50
  function serializeInlineChildren(nodes) {
51
51
  const marks = [
52
52
  {
53
- flag: FORMAT_FLAGS.underline,
54
- open: "<u>",
55
- close: "</u>"
53
+ flag: FORMAT_FLAGS.strikethrough,
54
+ open: "<s>",
55
+ close: "</s>"
56
56
  },
57
57
  {
58
58
  flag: FORMAT_FLAGS.bold,
@@ -90,7 +90,7 @@ function serializeInlineChildren(nodes) {
90
90
  let text = (node.text ?? "").replace(/[\\*_[\]<>]/g, "\\$&");
91
91
  if (node.format & FORMAT_FLAGS.italic) text = `<em>${text}</em>`;
92
92
  if (node.format & FORMAT_FLAGS.bold) text = `<strong>${text}</strong>`;
93
- if (node.format & FORMAT_FLAGS.underline) text = `<u>${text}</u>`;
93
+ if (node.format & FORMAT_FLAGS.strikethrough) text = `<s>${text}</s>`;
94
94
  return text;
95
95
  }).join("");
96
96
  }
@@ -204,7 +204,7 @@ function parseTokens(tokens, format) {
204
204
  else nodes.push(...children);
205
205
  continue;
206
206
  }
207
- const tag = token.type === "html" ? /^<(highlight|u|strong|em)>$/.exec(token.raw)?.[1] : void 0;
207
+ const tag = token.type === "html" ? /^<(highlight|s|strong|em)>$/.exec(token.raw)?.[1] : void 0;
208
208
  if (tag) {
209
209
  let depth = 1;
210
210
  let end = i + 1;
@@ -216,7 +216,7 @@ function parseTokens(tokens, format) {
216
216
  }
217
217
  if (!depth) {
218
218
  const tagFlags = {
219
- u: FORMAT_FLAGS.underline,
219
+ s: FORMAT_FLAGS.strikethrough,
220
220
  strong: FORMAT_FLAGS.bold,
221
221
  em: FORMAT_FLAGS.italic
222
222
  };
@@ -240,4 +240,4 @@ function parseTokens(tokens, format) {
240
240
  }
241
241
 
242
242
  //#endregion
243
- export { isLexicalState, lexicalStateToMarkdown, lexicalStateToPlainText, markdownToLexicalState };
243
+ export { isLexicalState, lexicalStateToMarkdown, lexicalStateToPlainText, markdownToLexicalState, parseInlineMarkdown };
@@ -3,7 +3,7 @@
3
3
  const FORMAT_FLAGS = {
4
4
  bold: 1,
5
5
  italic: 2,
6
- underline: 8,
6
+ strikethrough: 4,
7
7
  highlight: 1 << 20
8
8
  };
9
9
 
@@ -0,0 +1,9 @@
1
+ //#region src/core/lib/previewPaused.ts
2
+ /**
3
+ * Set on the root of a preview document while Camox pauses it, such as a
4
+ * Canvas frame nobody is looking at.
5
+ */
6
+ const PREVIEW_PAUSED_ATTRIBUTE = "data-camox-paused";
7
+
8
+ //#endregion
9
+ export { PREVIEW_PAUSED_ATTRIBUTE };
@@ -0,0 +1,316 @@
1
+ import { useProjectUuid } from "../../lib/auth.js";
2
+ import { useLocation } from "../../features/navigation/navigation.js";
3
+ import { resolveAssetValue, useNormalizedData } from "../../lib/normalized-data.js";
4
+ import { useLinkPages } from "../../lib/link-pages.js";
5
+ import { renderImagePlaceholder } from "./imagePlaceholder.js";
6
+ import { buildImageSrcSet, getDefaultImageSizes, getDefaultImageWidth, transformImageUrl } from "./imageTransform.js";
7
+ import { markdownToReactNodes } from "./lexicalReact.js";
8
+ import { fieldPlainText } from "../recordItem.js";
9
+ import { c } from "react/compiler-runtime";
10
+ import * as React from "react";
11
+ import { jsx } from "react/jsx-runtime";
12
+
13
+ //#region src/core/lib/recordScope.tsx
14
+ const RecordContext = React.createContext(null);
15
+ function useFieldValue(name) {
16
+ const record = React.use(RecordContext);
17
+ if (!record) throw new Error("Record fields must be used within layout.Item");
18
+ return record.content[name];
19
+ }
20
+ const Field = (t0) => {
21
+ const $ = c(8);
22
+ const { name, textStyle, linkStyle, children } = t0;
23
+ const value = useFieldValue(name);
24
+ const pages = useLinkPages(useProjectUuid());
25
+ let t1;
26
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
27
+ t1 = { select: _temp };
28
+ $[0] = t1;
29
+ } else t1 = $[0];
30
+ const pathname = useLocation(t1);
31
+ let t2;
32
+ if ($[1] !== children || $[2] !== linkStyle || $[3] !== pages || $[4] !== pathname || $[5] !== textStyle || $[6] !== value) {
33
+ t2 = children({ children: markdownToReactNodes(value, {
34
+ pages,
35
+ fallbackHref: pathname,
36
+ textStyle,
37
+ linkStyle
38
+ }) }, { text: fieldPlainText(value) });
39
+ $[1] = children;
40
+ $[2] = linkStyle;
41
+ $[3] = pages;
42
+ $[4] = pathname;
43
+ $[5] = textStyle;
44
+ $[6] = value;
45
+ $[7] = t2;
46
+ } else t2 = $[7];
47
+ return t2;
48
+ };
49
+ function renderImage(value, children) {
50
+ return renderImagePlaceholder(value, children({
51
+ src: transformImageUrl(value.url, {
52
+ width: getDefaultImageWidth(),
53
+ mimeType: value.mimeType,
54
+ size: value.size
55
+ }),
56
+ srcSet: buildImageSrcSet(value.url, value.mimeType, value.size),
57
+ sizes: getDefaultImageSizes(),
58
+ alt: value.alt
59
+ }, value));
60
+ }
61
+ function renderFile(value, children) {
62
+ return children({
63
+ href: value.url,
64
+ download: value.filename
65
+ }, value);
66
+ }
67
+ /** An asset field's value; unset assets render nothing rather than a fabricated default. */
68
+ function useAsset(name) {
69
+ const $ = c(3);
70
+ const { filesMap } = useNormalizedData();
71
+ const value = useFieldValue(name);
72
+ let t0;
73
+ if ($[0] !== filesMap || $[1] !== value) {
74
+ t0 = value == null ? null : resolveAssetValue(value, filesMap);
75
+ $[0] = filesMap;
76
+ $[1] = value;
77
+ $[2] = t0;
78
+ } else t0 = $[2];
79
+ return t0;
80
+ }
81
+ const Image = (t0) => {
82
+ const $ = c(3);
83
+ const { name, children } = t0;
84
+ const value = useAsset(name);
85
+ let t1;
86
+ if ($[0] !== children || $[1] !== value) {
87
+ t1 = value ? renderImage(value, children) : null;
88
+ $[0] = children;
89
+ $[1] = value;
90
+ $[2] = t1;
91
+ } else t1 = $[2];
92
+ return t1;
93
+ };
94
+ const File = (t0) => {
95
+ const $ = c(3);
96
+ const { name, children } = t0;
97
+ const value = useAsset(name);
98
+ let t1;
99
+ if ($[0] !== children || $[1] !== value) {
100
+ t1 = value ? renderFile(value, children) : null;
101
+ $[0] = children;
102
+ $[1] = value;
103
+ $[2] = t1;
104
+ } else t1 = $[2];
105
+ return t1;
106
+ };
107
+ const Embed = (t0) => {
108
+ const $ = c(3);
109
+ const { name, children } = t0;
110
+ const value = useFieldValue(name);
111
+ const url = typeof value === "string" ? value : "";
112
+ let t1;
113
+ if ($[0] !== children || $[1] !== url) {
114
+ t1 = children({ src: url }, { url });
115
+ $[0] = children;
116
+ $[1] = url;
117
+ $[2] = t1;
118
+ } else t1 = $[2];
119
+ return t1;
120
+ };
121
+ function useAssetList(name) {
122
+ const $ = c(6);
123
+ const { filesMap } = useNormalizedData();
124
+ const value = useFieldValue(name);
125
+ if (!Array.isArray(value)) {
126
+ let t0;
127
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
128
+ t0 = [];
129
+ $[0] = t0;
130
+ } else t0 = $[0];
131
+ return t0;
132
+ }
133
+ let t0;
134
+ if ($[1] !== filesMap || $[2] !== value) {
135
+ let t1;
136
+ if ($[4] !== filesMap) {
137
+ t1 = (asset) => resolveAssetValue(asset, filesMap);
138
+ $[4] = filesMap;
139
+ $[5] = t1;
140
+ } else t1 = $[5];
141
+ t0 = value.map(t1).filter(Boolean);
142
+ $[1] = filesMap;
143
+ $[2] = value;
144
+ $[3] = t0;
145
+ } else t0 = $[3];
146
+ return t0;
147
+ }
148
+ const ImageList = (t0) => {
149
+ const $ = c(5);
150
+ const { name, children } = t0;
151
+ const t1 = useAssetList(name);
152
+ let t2;
153
+ if ($[0] !== children || $[1] !== t1) {
154
+ let t3;
155
+ if ($[3] !== children) {
156
+ t3 = (value, index) => /* @__PURE__ */ jsx(React.Fragment, { children: renderImage(value, children) }, index);
157
+ $[3] = children;
158
+ $[4] = t3;
159
+ } else t3 = $[4];
160
+ t2 = t1.map(t3);
161
+ $[0] = children;
162
+ $[1] = t1;
163
+ $[2] = t2;
164
+ } else t2 = $[2];
165
+ return t2;
166
+ };
167
+ const FileList = (t0) => {
168
+ const $ = c(5);
169
+ const { name, children } = t0;
170
+ const t1 = useAssetList(name);
171
+ let t2;
172
+ if ($[0] !== children || $[1] !== t1) {
173
+ let t3;
174
+ if ($[3] !== children) {
175
+ t3 = (value, index) => /* @__PURE__ */ jsx(React.Fragment, { children: renderFile(value, children) }, index);
176
+ $[3] = children;
177
+ $[4] = t3;
178
+ } else t3 = $[4];
179
+ t2 = t1.map(t3);
180
+ $[0] = children;
181
+ $[1] = t1;
182
+ $[2] = t2;
183
+ } else t2 = $[2];
184
+ return t2;
185
+ };
186
+ const LinksContext = React.createContext(void 0);
187
+ function useLinked(name) {
188
+ const record = React.use(RecordContext);
189
+ const links = React.use(LinksContext);
190
+ return {
191
+ schema: record?.properties[name],
192
+ linked: links?.[name]
193
+ };
194
+ }
195
+ const Reference = (t0) => {
196
+ const $ = c(4);
197
+ const { name, children } = t0;
198
+ const { schema, linked } = useLinked(name);
199
+ if (!linked || Array.isArray(linked) || linked.collectionId !== schema?.collectionId) return null;
200
+ let t1;
201
+ if ($[0] !== children || $[1] !== linked || $[2] !== schema.referenceSchema.properties) {
202
+ t1 = /* @__PURE__ */ jsx(RecordScope, {
203
+ record: linked,
204
+ properties: schema.referenceSchema.properties,
205
+ hop: 2,
206
+ children
207
+ });
208
+ $[0] = children;
209
+ $[1] = linked;
210
+ $[2] = schema.referenceSchema.properties;
211
+ $[3] = t1;
212
+ } else t1 = $[3];
213
+ return t1;
214
+ };
215
+ const ReferenceList = (t0) => {
216
+ const $ = c(9);
217
+ const { name, children } = t0;
218
+ const { schema, linked } = useLinked(name);
219
+ if (!Array.isArray(linked)) return null;
220
+ let t1;
221
+ if ($[0] !== children || $[1] !== linked || $[2] !== schema) {
222
+ let t2;
223
+ if ($[4] !== schema?.collectionId) {
224
+ t2 = (record) => record.collectionId === schema?.collectionId;
225
+ $[4] = schema?.collectionId;
226
+ $[5] = t2;
227
+ } else t2 = $[5];
228
+ let t3;
229
+ if ($[6] !== children || $[7] !== schema) {
230
+ t3 = (record_0) => /* @__PURE__ */ jsx(RecordScope, {
231
+ record: record_0,
232
+ properties: schema.referenceSchema.properties,
233
+ hop: 2,
234
+ children
235
+ }, record_0.id);
236
+ $[6] = children;
237
+ $[7] = schema;
238
+ $[8] = t3;
239
+ } else t3 = $[8];
240
+ t1 = linked.filter(t2).map(t3);
241
+ $[0] = children;
242
+ $[1] = linked;
243
+ $[2] = schema;
244
+ $[3] = t1;
245
+ } else t1 = $[3];
246
+ return t1;
247
+ };
248
+ /**
249
+ * Renders `record` with its typed scope. The first hop also renders the records it links
250
+ * (the second hop), which link nothing further.
251
+ */
252
+ function RecordScope(t0) {
253
+ const $ = c(14);
254
+ const { record, properties, hop, children } = t0;
255
+ let t1;
256
+ if ($[0] !== properties || $[1] !== record.content) {
257
+ t1 = {
258
+ content: record.content,
259
+ properties
260
+ };
261
+ $[0] = properties;
262
+ $[1] = record.content;
263
+ $[2] = t1;
264
+ } else t1 = $[2];
265
+ const value = t1;
266
+ const t2 = hop === 1 ? record.references : void 0;
267
+ let t3;
268
+ if ($[3] !== children || $[4] !== hop || $[5] !== record.id || $[6] !== record.label) {
269
+ t3 = children({
270
+ id: record.id,
271
+ label: record.label,
272
+ Field,
273
+ Image,
274
+ File,
275
+ Embed,
276
+ ImageList,
277
+ FileList,
278
+ ...hop === 1 ? {
279
+ Reference,
280
+ ReferenceList
281
+ } : {}
282
+ });
283
+ $[3] = children;
284
+ $[4] = hop;
285
+ $[5] = record.id;
286
+ $[6] = record.label;
287
+ $[7] = t3;
288
+ } else t3 = $[7];
289
+ let t4;
290
+ if ($[8] !== t2 || $[9] !== t3) {
291
+ t4 = /* @__PURE__ */ jsx(LinksContext.Provider, {
292
+ value: t2,
293
+ children: t3
294
+ });
295
+ $[8] = t2;
296
+ $[9] = t3;
297
+ $[10] = t4;
298
+ } else t4 = $[10];
299
+ let t5;
300
+ if ($[11] !== t4 || $[12] !== value) {
301
+ t5 = /* @__PURE__ */ jsx(RecordContext.Provider, {
302
+ value,
303
+ children: t4
304
+ });
305
+ $[11] = t4;
306
+ $[12] = value;
307
+ $[13] = t5;
308
+ } else t5 = $[13];
309
+ return t5;
310
+ }
311
+ function _temp(location) {
312
+ return location.pathname;
313
+ }
314
+
315
+ //#endregion
316
+ export { RecordScope };
@@ -0,0 +1,81 @@
1
+ import { InlineTextStyles } from "./textStyles.js";
2
+ import "./lexicalReact.js";
3
+ import { EmbedURL, FileValue, ImageValue, ReferenceListSchema, ReferenceSchema } from "./contentType.js";
4
+ import * as React from "react";
5
+ import { Static, TSchema } from "@sinclair/typebox";
6
+ //#region src/core/lib/reference.d.ts
7
+ type Keys<T extends Record<string, TSchema>, V> = { [K in keyof T & string]: Static<T[K]> extends V ? K : never; }[keyof T & string];
8
+ type TextKeys<T extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends {
9
+ fieldType: "String";
10
+ } ? K : never; }[keyof T & string];
11
+ type Primitive<K, P, D> = (props: {
12
+ name: K;
13
+ children: (props: P, data: D) => React.ReactNode;
14
+ }) => React.ReactNode;
15
+ /**
16
+ * The typed scope of a placed record. A record placed by a block or item (the first hop) also
17
+ * renders the records it links; those (the second hop) link nothing further.
18
+ */
19
+ export type ReferenceScope<T extends Record<string, TSchema>, Nested extends boolean = true> = RecordFields<T> & (Nested extends true ? LinkedRecords<T> : unknown);
20
+ type LinkedRecords<T extends Record<string, TSchema>> = {
21
+ Reference: <K extends ReferenceKeys<T>>(props: {
22
+ name: K;
23
+ children: (scope: ReferenceScope<ReferenceContent<T[K]>, false>) => React.ReactNode;
24
+ }) => React.ReactNode;
25
+ ReferenceList: <K extends ReferenceListKeys<T>>(props: {
26
+ name: K;
27
+ children: (scope: ReferenceScope<ReferenceContent<T[K]>, false>) => React.ReactNode;
28
+ }) => React.ReactNode;
29
+ };
30
+ type RecordFields<T extends Record<string, TSchema>> = {
31
+ id: string;
32
+ label: string;
33
+ Field: (props: InlineTextStyles & {
34
+ name: TextKeys<T>;
35
+ children: (props: React.HTMLAttributes<HTMLElement> & {
36
+ ref?: React.Ref<any>;
37
+ }, data: {
38
+ text: string;
39
+ }) => React.ReactNode;
40
+ }) => React.ReactNode;
41
+ Image: Primitive<Keys<T, ImageValue>, {
42
+ src: string;
43
+ alt: string;
44
+ srcSet?: string;
45
+ sizes?: string;
46
+ }, ImageValue>;
47
+ File: Primitive<Keys<T, FileValue>, {
48
+ href: string;
49
+ download: string;
50
+ }, FileValue>;
51
+ Embed: Primitive<Keys<T, EmbedURL>, {
52
+ src: string;
53
+ }, {
54
+ url: string;
55
+ }>;
56
+ ImageList: Primitive<Keys<T, ImageValue[]>, {
57
+ src: string;
58
+ alt: string;
59
+ srcSet?: string;
60
+ sizes?: string;
61
+ }, ImageValue>;
62
+ FileList: Primitive<Keys<T, FileValue[]>, {
63
+ href: string;
64
+ download: string;
65
+ }, FileValue>;
66
+ };
67
+ export type ReferenceKeys<T extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends ReferenceSchema<any> ? K : never; }[keyof T & string];
68
+ export type ReferenceListKeys<T extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends ReferenceListSchema<any> ? K : never; }[keyof T & string];
69
+ export type ReferenceContent<T extends TSchema> = T extends ReferenceSchema<infer C> ? C : T extends ReferenceListSchema<infer C> ? C : never;
70
+ export type ReferenceRecord = {
71
+ id: string;
72
+ collectionId: string;
73
+ label: string;
74
+ content: Record<string, unknown>;
75
+ /** When its content last changed, for a record page's record. */
76
+ updatedAt?: number;
77
+ /** The records this record links, when it was placed at the first hop. */
78
+ references?: Record<string, ReferenceRecord | ReferenceRecord[] | null>;
79
+ };
80
+ //#endregion
81
+ export {};
@@ -0,0 +1,29 @@
1
+ //#region src/core/lib/reference.ts
2
+ /**
3
+ * A record page's record: as its loader returned it, or as a later save through any placement
4
+ * stored it, whichever changed last.
5
+ */
6
+ function latestContent(loaded, saved) {
7
+ if (!saved || loaded.updatedAt == null || saved.updatedAt <= loaded.updatedAt) return loaded;
8
+ return {
9
+ content: saved.content,
10
+ updatedAt: saved.updatedAt
11
+ };
12
+ }
13
+ function resolveReference(value, collectionId, records) {
14
+ if (typeof value !== "string") return null;
15
+ const record = records.get(value);
16
+ return record?.collectionId === collectionId ? record : null;
17
+ }
18
+ /** The record ids a reference list value links, in stored order; anything else links none. */
19
+ function referenceListIds(value) {
20
+ if (!Array.isArray(value)) return [];
21
+ return value.filter((id) => typeof id === "string" && id !== "");
22
+ }
23
+ /** The records a reference list links, in stored order; unresolved ids are skipped. */
24
+ function resolveReferenceList(value, collectionId, records) {
25
+ return referenceListIds(value).map((id) => resolveReference(id, collectionId, records)).filter((record) => record !== null);
26
+ }
27
+
28
+ //#endregion
29
+ export { latestContent, referenceListIds, resolveReference, resolveReferenceList };