camox 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/dist/components/AuthGate.js +0 -6
  2. package/dist/components/DeviceSelector.js +96 -0
  3. package/dist/components/PlatformLabel.js +20 -24
  4. package/dist/core/components/lexical/HighlightNode.js +1 -1
  5. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  6. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  7. package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
  8. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  9. package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
  10. package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
  11. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  12. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  13. package/dist/core/createApp.d.ts +241 -312
  14. package/dist/core/createApp.js +123 -29
  15. package/dist/core/createBlock.d.ts +5 -5
  16. package/dist/core/createBlock.js +385 -152
  17. package/dist/core/createCollection.d.ts +55 -0
  18. package/dist/core/createCollection.js +93 -0
  19. package/dist/core/createLayout.d.ts +197 -61
  20. package/dist/core/createLayout.js +114 -56
  21. package/dist/core/defineDocument.d.ts +3 -5
  22. package/dist/core/derivedRoutes.js +49 -1
  23. package/dist/core/dom.d.ts +13 -4
  24. package/dist/core/dom.js +44 -1
  25. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  26. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  27. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  28. package/dist/core/editing/createEditableBlock.d.ts +754 -633
  29. package/dist/core/editing/createEditableBlock.js +2113 -1066
  30. package/dist/core/editing/referenceWrites.js +51 -0
  31. package/dist/core/editing/useLatestRecord.js +90 -0
  32. package/dist/core/hooks/useArtifactHost.js +139 -0
  33. package/dist/core/hooks/useFieldSelection.js +43 -18
  34. package/dist/core/hooks/useIsEditable.js +12 -10
  35. package/dist/core/hooks/useOverlayMessage.js +15 -19
  36. package/dist/core/lib/artifact.d.ts +21 -0
  37. package/dist/core/lib/artifact.js +154 -0
  38. package/dist/core/lib/artifactColors.js +123 -0
  39. package/dist/core/lib/artifactData.d.ts +1 -0
  40. package/dist/core/lib/artifactData.js +131 -0
  41. package/dist/core/lib/artifactHost.js +205 -0
  42. package/dist/core/lib/artifactRuntime.js +36 -0
  43. package/dist/core/lib/artifactTheme.js +57 -0
  44. package/dist/core/lib/contentType.d.ts +302 -106
  45. package/dist/core/lib/contentType.js +201 -173
  46. package/dist/core/lib/fieldTypes.js +3 -0
  47. package/dist/core/lib/iconTypes.d.ts +3 -3
  48. package/dist/core/lib/icons.d.ts +4 -4
  49. package/dist/core/lib/icons.js +40 -44
  50. package/dist/core/lib/imagePlaceholder.js +177 -0
  51. package/dist/core/lib/imageTransform.js +1 -1
  52. package/dist/core/lib/lexicalReact.d.ts +3 -1
  53. package/dist/core/lib/lexicalState.js +1 -1
  54. package/dist/core/lib/previewPaused.js +9 -0
  55. package/dist/core/lib/recordScope.js +316 -0
  56. package/dist/core/lib/reference.d.ts +81 -0
  57. package/dist/core/lib/reference.js +29 -0
  58. package/dist/core/lib/textLinks.js +7 -5
  59. package/dist/core/lib/textStyles.d.ts +5 -7
  60. package/dist/core/lib/textStyles.js +2 -2
  61. package/dist/core/notFound.d.ts +7 -0
  62. package/dist/core/notFound.js +11 -0
  63. package/dist/core/pageDestinations.js +6 -3
  64. package/dist/core/recordItem.js +34 -0
  65. package/dist/core/requestContext.d.ts +26 -0
  66. package/dist/core/requestContext.js +20 -0
  67. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  68. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  69. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  70. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  71. package/dist/features/canvas/CanvasOverlays.js +254 -0
  72. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  73. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  74. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  75. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  76. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  77. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  78. package/dist/features/canvas/canvasCamera.js +229 -0
  79. package/dist/features/canvas/canvasFlight.js +104 -0
  80. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  81. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  82. package/dist/features/canvas/canvasFrameMode.js +53 -0
  83. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  84. package/dist/features/canvas/canvasItems.js +120 -0
  85. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  86. package/dist/features/canvas/canvasPages.js +79 -0
  87. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  88. package/dist/features/canvas/canvasSelection.js +18 -0
  89. package/dist/features/canvas/canvasStore.js +149 -0
  90. package/dist/features/canvas/canvasThumbnails.js +304 -0
  91. package/dist/features/canvas/canvasZoom.js +10 -0
  92. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  93. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  94. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  95. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  97. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  98. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  99. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  100. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  101. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  102. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  103. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  104. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  105. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  106. package/dist/features/canvas/useCanvasCamera.js +803 -0
  107. package/dist/features/canvas/useCanvasFrame.js +149 -0
  108. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  109. package/dist/features/canvas/useCanvasNearness.js +57 -0
  110. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  111. package/dist/features/content/CamoxContent.d.ts +2 -5
  112. package/dist/features/content/CamoxContent.js +174 -271
  113. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  114. package/dist/features/content/ContentAssets.js +315 -0
  115. package/dist/features/content/ContentCollection.js +663 -0
  116. package/dist/features/content/collection-form.js +58 -0
  117. package/dist/features/content/components/AssetCard.js +80 -84
  118. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  119. package/dist/features/content/components/ContentSidebar.js +129 -18
  120. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  121. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  122. package/dist/features/content/components/MissingFromLocale.js +282 -0
  123. package/dist/features/content/components/UploadDropZone.js +27 -31
  124. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  125. package/dist/features/navigation/navigation.d.ts +66 -20
  126. package/dist/features/navigation/navigation.js +257 -90
  127. package/dist/features/og/defaultFonts.js +8 -8
  128. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  129. package/dist/features/og/imageResponse.d.ts +8 -0
  130. package/dist/features/og/imageResponse.js +26 -0
  131. package/dist/features/page/CuratedPageContent.js +167 -0
  132. package/dist/features/page/DerivedPageContent.js +26 -30
  133. package/dist/features/page/SharedLayoutContent.js +25 -27
  134. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  135. package/dist/features/preview/CamoxPreview.js +816 -537
  136. package/dist/features/preview/EditablePageContent.js +1 -1
  137. package/dist/features/preview/EditablePageExperience.js +16 -22
  138. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  139. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  140. package/dist/features/preview/components/AssetLightbox.js +181 -134
  141. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  142. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  143. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  144. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  145. package/dist/features/preview/components/CanvasPreview.js +243 -0
  146. package/dist/features/preview/components/CreatePageModal.js +128 -137
  147. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  148. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  149. package/dist/features/preview/components/DrillRow.js +150 -0
  150. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  151. package/dist/features/preview/components/FieldToolbar.js +160 -110
  152. package/dist/features/preview/components/Frame.js +108 -20
  153. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  154. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  155. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  156. package/dist/features/preview/components/Metadata.js +22 -30
  157. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  158. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  159. package/dist/features/preview/components/OverlayTracker.js +9 -41
  160. package/dist/features/preview/components/Overlays.js +81 -69
  161. package/dist/features/preview/components/PageInfo.js +1748 -0
  162. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  163. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  164. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  165. package/dist/features/preview/components/PageNicknameField.js +22 -26
  166. package/dist/features/preview/components/PagePicker.js +128 -130
  167. package/dist/features/preview/components/PageTree.js +525 -532
  168. package/dist/features/preview/components/PreviewActivation.js +28 -32
  169. package/dist/features/preview/components/PreviewPanel.js +620 -319
  170. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  171. package/dist/features/preview/components/RecordCard.js +80 -0
  172. package/dist/features/preview/components/RecordCombobox.js +178 -0
  173. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  174. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  175. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  176. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  177. package/dist/features/preview/components/SelectionEditor.js +993 -0
  178. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  179. package/dist/features/preview/components/SidebarSection.js +52 -64
  180. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  181. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  182. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  183. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  184. package/dist/features/preview/components/useFieldWriter.js +200 -0
  185. package/dist/features/preview/components/useRecordView.js +383 -0
  186. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  187. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  188. package/dist/features/preview/editingFrame.js +197 -0
  189. package/dist/features/preview/overlayHighlights.js +17 -44
  190. package/dist/features/preview/overlayMessages.js +72 -1
  191. package/dist/features/preview/pageRecord.js +189 -0
  192. package/dist/features/preview/previewConstants.js +6 -2
  193. package/dist/features/preview/previewPageFrame.js +95 -0
  194. package/dist/features/preview/previewPreparation.js +7 -0
  195. package/dist/features/preview/previewSelection.js +32 -63
  196. package/dist/features/preview/previewStore.js +225 -123
  197. package/dist/features/preview/referencePickerFocus.js +29 -0
  198. package/dist/features/preview/repeatableItemTargets.js +56 -0
  199. package/dist/features/preview/selectionReveal.js +21 -0
  200. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  201. package/dist/features/preview/viewportContinuity.js +109 -0
  202. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  203. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  204. package/dist/features/provider/CamoxProvider.js +38 -50
  205. package/dist/features/provider/CoreCamoxProvider.js +66 -50
  206. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  207. package/dist/features/provider/PreviewSignInPage.js +54 -0
  208. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  209. package/dist/features/provider/components/CommandPalette.js +75 -82
  210. package/dist/features/provider/useAdminShortcuts.js +7 -11
  211. package/dist/features/routes/pageRuntime.d.ts +44 -4
  212. package/dist/features/routes/pageRuntime.js +244 -137
  213. package/dist/features/runtime/RuntimeChrome.js +117 -115
  214. package/dist/features/runtime/alternates.js +64 -0
  215. package/dist/features/runtime/analytics.d.ts +7 -0
  216. package/dist/features/runtime/analytics.js +66 -0
  217. package/dist/features/runtime/artifactSources.js +87 -0
  218. package/dist/features/runtime/editingFallback.js +20 -0
  219. package/dist/features/runtime/linkPrefetch.js +97 -0
  220. package/dist/features/runtime/livePages.js +62 -0
  221. package/dist/features/runtime/llmsTxt.js +40 -0
  222. package/dist/features/runtime/loopbackFetch.js +18 -0
  223. package/dist/features/runtime/navigationAccessibility.js +51 -0
  224. package/dist/features/runtime/navigationTarget.js +23 -2
  225. package/dist/features/runtime/pageApp.js +229 -158
  226. package/dist/features/runtime/pageBlockTypes.js +20 -0
  227. package/dist/features/runtime/pageClient.d.ts +2 -4
  228. package/dist/features/runtime/pageClient.js +18 -3
  229. package/dist/features/runtime/pageNavigation.js +254 -32
  230. package/dist/features/runtime/pageServer.d.ts +2 -4
  231. package/dist/features/runtime/pageServer.js +6 -2
  232. package/dist/features/runtime/pageViewport.js +7 -0
  233. package/dist/features/runtime/runtime.d.ts +59 -24
  234. package/dist/features/runtime/runtime.js +779 -191
  235. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  236. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  237. package/dist/features/runtime/runtimeRoutes.js +25 -0
  238. package/dist/features/runtime/scrollRestoration.js +133 -0
  239. package/dist/features/runtime/studioApp.d.ts +4 -3
  240. package/dist/features/runtime/studioApp.js +5 -9
  241. package/dist/features/runtime/studioClient.d.ts +2 -4
  242. package/dist/features/runtime/studioClient.js +12 -3
  243. package/dist/features/runtime/studioServer.d.ts +2 -4
  244. package/dist/features/runtime/studioServer.js +6 -1
  245. package/dist/features/runtime/worker.d.ts +6 -0
  246. package/dist/features/runtime/worker.js +23 -0
  247. package/dist/features/runtime/workerRequest.js +44 -0
  248. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  249. package/dist/features/studio/CamoxStudio.js +34 -49
  250. package/dist/features/studio/FollowAgentProvider.js +338 -0
  251. package/dist/features/studio/components/ChatSidebar.js +356 -0
  252. package/dist/features/studio/components/DraftsControl.js +676 -0
  253. package/dist/features/studio/components/FaviconDialog.js +318 -0
  254. package/dist/features/studio/components/LocalePicker.js +785 -0
  255. package/dist/features/studio/components/Navbar.js +123 -103
  256. package/dist/features/studio/components/ProjectMenu.js +239 -260
  257. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  258. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  259. package/dist/features/studio/components/ThreadComposer.js +157 -0
  260. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  261. package/dist/features/studio/components/ThreadMessages.js +270 -0
  262. package/dist/features/studio/components/UserButton.js +34 -23
  263. package/dist/features/studio/draftLabel.js +33 -0
  264. package/dist/features/studio/draftNotice.js +13 -0
  265. package/dist/features/studio/followAgent.js +250 -0
  266. package/dist/features/studio/followAgentContext.js +7 -0
  267. package/dist/features/studio/localeOptions.js +118 -0
  268. package/dist/features/studio/localeSwitch.js +19 -0
  269. package/dist/features/studio/routes.js +48 -1
  270. package/dist/features/studio/studioStore.js +64 -1
  271. package/dist/features/studio/useTheme.js +24 -27
  272. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  273. package/dist/features/vite/blockBoilerplate.js +6 -5
  274. package/dist/features/vite/blockChunks.js +31 -0
  275. package/dist/features/vite/bundlerLogs.js +17 -0
  276. package/dist/features/vite/definitionsSync.js +158 -226
  277. package/dist/features/vite/devAuthentication.js +4 -16
  278. package/dist/features/vite/devSignIn.js +87 -0
  279. package/dist/features/vite/iconGeneration.js +1 -1
  280. package/dist/features/vite/layoutGeneration.js +11 -1
  281. package/dist/features/vite/publishSeededContent.js +30 -0
  282. package/dist/features/vite/routeGeneration.js +6 -7
  283. package/dist/features/vite/runtimeDev.js +80 -99
  284. package/dist/features/vite/vite.d.ts +51 -31
  285. package/dist/features/vite/vite.js +224 -127
  286. package/dist/features/vite/workerBuild.js +39 -0
  287. package/dist/hooks/use-debounced-field.js +116 -47
  288. package/dist/hooks/use-file-upload.js +114 -67
  289. package/dist/hooks/use-marquee-selection.js +32 -36
  290. package/dist/hooks/use-page-destinations.js +69 -37
  291. package/dist/lib/api-client-server.d.ts +5 -0
  292. package/dist/lib/api-client-server.js +10 -4
  293. package/dist/lib/api-client.d.ts +6 -0
  294. package/dist/lib/api-client.js +51 -16
  295. package/dist/lib/api-socket.js +17 -0
  296. package/dist/lib/auth-page-styles.js +39 -0
  297. package/dist/lib/auth.js +117 -61
  298. package/dist/lib/collection-cache.js +23 -0
  299. package/dist/lib/draft-scope.d.ts +4 -0
  300. package/dist/lib/draft-scope.js +222 -0
  301. package/dist/lib/html.js +12 -0
  302. package/dist/lib/link-pages.js +154 -0
  303. package/dist/lib/locale-path.d.ts +22 -0
  304. package/dist/lib/locale-path.js +57 -0
  305. package/dist/lib/normalized-data.js +252 -152
  306. package/dist/lib/preview-handoff.js +2 -2
  307. package/dist/lib/queries.d.ts +11 -0
  308. package/dist/lib/queries.js +70 -141
  309. package/dist/lib/studio-reads.d.ts +14 -0
  310. package/dist/lib/studio-reads.js +574 -0
  311. package/dist/lib/use-project-room.js +50 -50
  312. package/dist/lib/use-thread.js +310 -0
  313. package/dist/lib/utils.js +25 -29
  314. package/dist/lib/view-locale-context.js +22 -0
  315. package/dist/lib/view-locale.js +46 -0
  316. package/dist/package.js +5 -0
  317. package/dist/studio-overlays.css +41 -151
  318. package/dist/studio.css +2 -2
  319. package/package.json +70 -73
  320. package/skills/camox/SKILL.md +16 -11
  321. package/skills/camox/references/artifacts.md +179 -0
  322. package/skills/camox/references/block-definitions.md +75 -59
  323. package/skills/camox/references/cli-common.md +9 -11
  324. package/skills/camox/references/cli-content.md +92 -69
  325. package/skills/camox/references/cli-publishing.md +26 -0
  326. package/skills/camox/references/dom-integrations.md +27 -0
  327. package/skills/camox/references/field-styling.md +4 -4
  328. package/skills/camox/references/layout-definitions.md +16 -14
  329. package/skills/camox/references/localization.md +56 -0
  330. package/skills/camox/references/routed-layouts.md +133 -15
  331. package/skills/camox-expand/SKILL.md +69 -0
  332. package/skills/camox-expand/references/jobs.md +39 -0
  333. package/skills/camoxify/SKILL.md +29 -7
  334. package/dist/core/components/AddBlockControlBar.js +0 -78
  335. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  336. package/dist/features/metadata/sitemap.d.ts +0 -8
  337. package/dist/features/metadata/sitemap.js +0 -17
  338. package/dist/features/og/imageResponse.node.d.ts +0 -12
  339. package/dist/features/og/imageResponse.node.js +0 -49
  340. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  341. package/dist/features/og/imageResponse.workerd.js +0 -40
  342. package/dist/features/page/PublishedPageContent.js +0 -205
  343. package/dist/features/page/PublishedPageExperience.js +0 -23
  344. package/dist/features/preview/DerivedPreview.js +0 -134
  345. package/dist/features/preview/commentsEnabled.js +0 -8
  346. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  347. package/dist/features/preview/components/AttachedComments.js +0 -331
  348. package/dist/features/preview/components/CommentHeader.js +0 -122
  349. package/dist/features/preview/components/CommentSidebar.js +0 -29
  350. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  351. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  352. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  353. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  354. package/dist/features/preview/components/LeftSidebar.js +0 -68
  355. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  356. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  357. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  358. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  359. package/dist/features/preview/components/PeekedBlock.js +0 -217
  360. package/dist/features/preview/components/PreviewComments.js +0 -56
  361. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  362. package/dist/features/preview/components/PublicationRow.js +0 -422
  363. package/dist/features/preview/components/PublishDialog.js +0 -194
  364. package/dist/features/preview/components/RightSidebar.js +0 -59
  365. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  366. package/dist/features/preview/previewCommentsStore.js +0 -135
  367. package/dist/features/preview/publication.js +0 -81
  368. package/dist/features/preview/usePageComments.js +0 -39
  369. package/dist/features/runtime/SharedChromeContext.js +0 -7
  370. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  371. package/dist/features/vite/appGeneration.js +0 -89
  372. package/dist/lib/view-queries.js +0 -28
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  411. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,3 +1,6 @@
1
+ import { localizedPath } from "../../lib/locale-path.js";
2
+ import { DraftScopeContext, draftNamedBy, followUrl, useOptionalDraftScope } from "../../lib/draft-scope.js";
3
+ import { PageAlternatesContext, useViewLocale } from "../../lib/view-locale-context.js";
1
4
  import { c } from "react/compiler-runtime";
2
5
  import * as React from "react";
3
6
  import { Link as Link$1, Navigate as Navigate$1, useLocation as useLocation$1, useNavigate as useNavigate$1 } from "@tanstack/react-router";
@@ -23,70 +26,157 @@ function toHref(to) {
23
26
  if (to.startsWith("#")) return `${getBrowserLocation().pathname}${to}`;
24
27
  return to;
25
28
  }
26
- async function browserNavigate({ replace, to }) {
29
+ async function browserNavigate({ replace, to, source, draft }, draftScope) {
27
30
  if (typeof window === "undefined") return;
28
- const href = toHref(to);
31
+ const href = draftScope ? draftScope.hrefFor(toHref(to), {
32
+ from: window.location.href,
33
+ draft
34
+ }) : toHref(to);
29
35
  if (replace) window.history.replaceState(null, "", href);
30
36
  else window.history.pushState(null, "", href);
31
- window.dispatchEvent(new PopStateEvent("popstate"));
37
+ if (draftScope) followUrl(draftScope, window.location.href);
38
+ window.dispatchEvent(new CustomEvent("camox:navigation", { detail: { source } }));
32
39
  }
33
40
  function NavigationProvider(t0) {
34
- const $ = c(11);
35
- if ($[0] !== "b077805671357d8c221f5828542d8c58cc7da9751e57801b28455420b1a9209a") {
36
- for (let $i = 0; $i < 11; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
37
- $[0] = "b077805671357d8c221f5828542d8c58cc7da9751e57801b28455420b1a9209a";
38
- }
39
- const { children, getLocation: t1, initialLocation, location: controlledLocation, navigate: t2 } = t0;
41
+ const $ = c(13);
42
+ const { children, getLocation: t1, initialLocation, location: controlledLocation, navigate: controlledNavigate } = t0;
40
43
  const getLocation = t1 === void 0 ? getBrowserLocation : t1;
41
- const navigate = t2 === void 0 ? browserNavigate : t2;
42
44
  const [location, setLocation] = React.useState(initialLocation ?? getLocation);
45
+ const draftScope = React.useContext(DraftScopeContext);
46
+ let t2;
47
+ if ($[0] !== draftScope) {
48
+ t2 = (options) => browserNavigate(options, draftScope);
49
+ $[0] = draftScope;
50
+ $[1] = t2;
51
+ } else t2 = $[1];
52
+ const navigate = controlledNavigate ?? t2;
43
53
  let t3;
44
54
  let t4;
45
- if ($[1] !== controlledLocation || $[2] !== getLocation) {
55
+ if ($[2] !== controlledLocation || $[3] !== draftScope || $[4] !== getLocation) {
46
56
  t3 = () => {
47
57
  if (controlledLocation) return;
48
- const updateLocation = () => setLocation(getLocation());
58
+ const updateLocation = (event) => {
59
+ if (event.type === "popstate" && draftScope) followUrl(draftScope, window.location.href);
60
+ setLocation({
61
+ ...getLocation(),
62
+ source: event.type === "camox:navigation" ? event.detail?.source : void 0
63
+ });
64
+ };
49
65
  window.addEventListener("popstate", updateLocation);
50
66
  window.addEventListener("camox:navigation", updateLocation);
67
+ const unsubscribe = draftScope?.subscribe((t5) => {
68
+ const { move } = t5;
69
+ if (move !== "adopted") setLocation(getLocation());
70
+ });
51
71
  return () => {
52
72
  window.removeEventListener("popstate", updateLocation);
53
73
  window.removeEventListener("camox:navigation", updateLocation);
74
+ unsubscribe?.();
54
75
  };
55
76
  };
56
- t4 = [getLocation, controlledLocation];
57
- $[1] = controlledLocation;
58
- $[2] = getLocation;
59
- $[3] = t3;
60
- $[4] = t4;
77
+ t4 = [
78
+ getLocation,
79
+ controlledLocation,
80
+ draftScope
81
+ ];
82
+ $[2] = controlledLocation;
83
+ $[3] = draftScope;
84
+ $[4] = getLocation;
85
+ $[5] = t3;
86
+ $[6] = t4;
61
87
  } else {
62
- t3 = $[3];
63
- t4 = $[4];
88
+ t3 = $[5];
89
+ t4 = $[6];
64
90
  }
65
91
  React.useEffect(t3, t4);
66
92
  const t5 = controlledLocation ?? location;
67
93
  let t6;
68
- if ($[5] !== navigate || $[6] !== t5) {
94
+ if ($[7] !== navigate || $[8] !== t5) {
69
95
  t6 = {
70
96
  location: t5,
71
97
  navigate
72
98
  };
73
- $[5] = navigate;
74
- $[6] = t5;
75
- $[7] = t6;
76
- } else t6 = $[7];
99
+ $[7] = navigate;
100
+ $[8] = t5;
101
+ $[9] = t6;
102
+ } else t6 = $[9];
77
103
  const value = t6;
78
104
  let t7;
79
- if ($[8] !== children || $[9] !== value) {
105
+ if ($[10] !== children || $[11] !== value) {
80
106
  t7 = /* @__PURE__ */ jsx(NavigationContext.Provider, {
81
107
  value,
82
108
  children
83
109
  });
84
- $[8] = children;
85
- $[9] = value;
86
- $[10] = t7;
87
- } else t7 = $[10];
110
+ $[10] = children;
111
+ $[11] = value;
112
+ $[12] = t7;
113
+ } else t7 = $[12];
88
114
  return t7;
89
115
  }
116
+ const noNavigation = () => {};
117
+ /**
118
+ * Keeps the surrounding location, but turns navigation off while `disabled`.
119
+ * It renders the same tree either way, so toggling it never remounts children.
120
+ */
121
+ function NavigationDisabled(t0) {
122
+ const $ = c(6);
123
+ const { disabled, children } = t0;
124
+ const parent = React.useContext(NavigationContext);
125
+ let t1;
126
+ if ($[0] !== disabled || $[1] !== parent) {
127
+ t1 = parent && disabled ? {
128
+ ...parent,
129
+ navigate: noNavigation
130
+ } : parent;
131
+ $[0] = disabled;
132
+ $[1] = parent;
133
+ $[2] = t1;
134
+ } else t1 = $[2];
135
+ const value = t1;
136
+ let t2;
137
+ if ($[3] !== children || $[4] !== value) {
138
+ t2 = /* @__PURE__ */ jsx(NavigationContext.Provider, {
139
+ value,
140
+ children
141
+ });
142
+ $[3] = children;
143
+ $[4] = value;
144
+ $[5] = t2;
145
+ } else t2 = $[5];
146
+ return t2;
147
+ }
148
+ /**
149
+ * Keeps the surrounding navigation, but reads `location` instead of the
150
+ * surrounding one when given. It renders the same tree either way, so switching
151
+ * never remounts children.
152
+ */
153
+ function NavigationLocation(t0) {
154
+ const $ = c(6);
155
+ const { location, children } = t0;
156
+ const parent = React.useContext(NavigationContext);
157
+ let t1;
158
+ if ($[0] !== location || $[1] !== parent) {
159
+ t1 = parent && location ? {
160
+ ...parent,
161
+ location
162
+ } : parent;
163
+ $[0] = location;
164
+ $[1] = parent;
165
+ $[2] = t1;
166
+ } else t1 = $[2];
167
+ const value = t1;
168
+ let t2;
169
+ if ($[3] !== children || $[4] !== value) {
170
+ t2 = /* @__PURE__ */ jsx(NavigationContext.Provider, {
171
+ value,
172
+ children
173
+ });
174
+ $[3] = children;
175
+ $[4] = value;
176
+ $[5] = t2;
177
+ } else t2 = $[5];
178
+ return t2;
179
+ }
90
180
  function useLocation(options) {
91
181
  const context = React.useContext(NavigationContext);
92
182
  if (context) {
@@ -101,23 +191,20 @@ function useNavigate() {
101
191
  return useNavigate$1();
102
192
  }
103
193
  const Link = React.forwardRef(function Link(props, ref) {
104
- const $ = c(34);
105
- if ($[0] !== "b077805671357d8c221f5828542d8c58cc7da9751e57801b28455420b1a9209a") {
106
- for (let $i = 0; $i < 34; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
107
- $[0] = "b077805671357d8c221f5828542d8c58cc7da9751e57801b28455420b1a9209a";
108
- }
194
+ const $ = c(36);
109
195
  const context = React.useContext(NavigationContext);
196
+ const { scope: draftScope, draftId } = useOptionalDraftScope();
110
197
  if (!context) {
111
198
  let t0;
112
- if ($[1] !== props || $[2] !== ref) {
199
+ if ($[0] !== props || $[1] !== ref) {
113
200
  t0 = /* @__PURE__ */ jsx(Link$1, {
114
201
  ...props,
115
202
  ref
116
203
  });
117
- $[1] = props;
118
- $[2] = ref;
119
- $[3] = t0;
120
- } else t0 = $[3];
204
+ $[0] = props;
205
+ $[1] = ref;
206
+ $[2] = t0;
207
+ } else t0 = $[2];
121
208
  return t0;
122
209
  }
123
210
  let activeProps;
@@ -126,52 +213,59 @@ const Link = React.forwardRef(function Link(props, ref) {
126
213
  let rest;
127
214
  let target;
128
215
  let to;
129
- if ($[4] !== props) {
216
+ if ($[3] !== props) {
130
217
  ({activeProps, children, onClick, target, to, ...rest} = props);
131
- $[4] = props;
132
- $[5] = activeProps;
133
- $[6] = children;
134
- $[7] = onClick;
135
- $[8] = rest;
136
- $[9] = target;
137
- $[10] = to;
218
+ $[3] = props;
219
+ $[4] = activeProps;
220
+ $[5] = children;
221
+ $[6] = onClick;
222
+ $[7] = rest;
223
+ $[8] = target;
224
+ $[9] = to;
138
225
  } else {
139
- activeProps = $[5];
140
- children = $[6];
141
- onClick = $[7];
142
- rest = $[8];
143
- target = $[9];
144
- to = $[10];
226
+ activeProps = $[4];
227
+ children = $[5];
228
+ onClick = $[6];
229
+ rest = $[7];
230
+ target = $[8];
231
+ to = $[9];
145
232
  }
146
233
  let href;
147
234
  let t0;
148
235
  let t1;
149
- if ($[11] !== context.location.pathname || $[12] !== to) {
150
- href = toHref(String(to));
236
+ if ($[10] !== context.location.href || $[11] !== context.location.pathname || $[12] !== draftId || $[13] !== draftScope || $[14] !== to) {
237
+ const path = toHref(String(to));
238
+ href = context.location.href && draftScope ? draftScope.hrefFor(path, {
239
+ from: context.location.href,
240
+ draft: draftNamedBy(path) ? void 0 : draftId
241
+ }) : path;
151
242
  t0 = context.location.pathname;
152
243
  t1 = new URL(href, "http://camox.local");
244
+ $[10] = context.location.href;
153
245
  $[11] = context.location.pathname;
154
- $[12] = to;
155
- $[13] = href;
156
- $[14] = t0;
157
- $[15] = t1;
246
+ $[12] = draftId;
247
+ $[13] = draftScope;
248
+ $[14] = to;
249
+ $[15] = href;
250
+ $[16] = t0;
251
+ $[17] = t1;
158
252
  } else {
159
- href = $[13];
160
- t0 = $[14];
161
- t1 = $[15];
253
+ href = $[15];
254
+ t0 = $[16];
255
+ t1 = $[17];
162
256
  }
163
257
  const activeAnchorProps = t0 === t1.pathname ? activeProps : void 0;
164
258
  const t2 = activeAnchorProps?.className;
165
259
  let t3;
166
- if ($[16] !== rest.className || $[17] !== t2) {
260
+ if ($[18] !== rest.className || $[19] !== t2) {
167
261
  t3 = [rest.className, t2].filter(Boolean);
168
- $[16] = rest.className;
169
- $[17] = t2;
170
- $[18] = t3;
171
- } else t3 = $[18];
262
+ $[18] = rest.className;
263
+ $[19] = t2;
264
+ $[20] = t3;
265
+ } else t3 = $[20];
172
266
  const t4 = t3.join(" ") || void 0;
173
267
  let t5;
174
- if ($[19] !== context || $[20] !== href || $[21] !== onClick || $[22] !== props.download || $[23] !== target) {
268
+ if ($[21] !== context || $[22] !== href || $[23] !== onClick || $[24] !== props.download || $[25] !== target) {
175
269
  t5 = (event) => {
176
270
  onClick?.(event);
177
271
  if (event.defaultPrevented) return;
@@ -182,15 +276,15 @@ const Link = React.forwardRef(function Link(props, ref) {
182
276
  event.preventDefault();
183
277
  context.navigate({ to: href });
184
278
  };
185
- $[19] = context;
186
- $[20] = href;
187
- $[21] = onClick;
188
- $[22] = props.download;
189
- $[23] = target;
190
- $[24] = t5;
191
- } else t5 = $[24];
279
+ $[21] = context;
280
+ $[22] = href;
281
+ $[23] = onClick;
282
+ $[24] = props.download;
283
+ $[25] = target;
284
+ $[26] = t5;
285
+ } else t5 = $[26];
192
286
  let t6;
193
- if ($[25] !== activeAnchorProps || $[26] !== children || $[27] !== href || $[28] !== ref || $[29] !== rest || $[30] !== t4 || $[31] !== t5 || $[32] !== target) {
287
+ if ($[27] !== activeAnchorProps || $[28] !== children || $[29] !== href || $[30] !== ref || $[31] !== rest || $[32] !== t4 || $[33] !== t5 || $[34] !== target) {
194
288
  t6 = /* @__PURE__ */ jsx("a", {
195
289
  ...rest,
196
290
  ...activeAnchorProps,
@@ -201,19 +295,90 @@ const Link = React.forwardRef(function Link(props, ref) {
201
295
  onClick: t5,
202
296
  children
203
297
  });
204
- $[25] = activeAnchorProps;
205
- $[26] = children;
206
- $[27] = href;
207
- $[28] = ref;
208
- $[29] = rest;
209
- $[30] = t4;
210
- $[31] = t5;
211
- $[32] = target;
212
- $[33] = t6;
213
- } else t6 = $[33];
298
+ $[27] = activeAnchorProps;
299
+ $[28] = children;
300
+ $[29] = href;
301
+ $[30] = ref;
302
+ $[31] = rest;
303
+ $[32] = t4;
304
+ $[33] = t5;
305
+ $[34] = target;
306
+ $[35] = t6;
307
+ } else t6 = $[35];
214
308
  return t6;
215
309
  });
216
- function Navigate({ replace, to }) {
310
+ /** The tag of the locale the page renders in, such as `de`. */
311
+ function useLocale() {
312
+ return useViewLocale().locale.tag;
313
+ }
314
+ /** A locale's name in its own language (`Deutsch` for `de`), or its tag when it has none. */
315
+ function nativeLocaleName(tag) {
316
+ try {
317
+ return new Intl.DisplayNames([tag], { type: "language" }).of(tag) ?? tag;
318
+ } catch {
319
+ return tag;
320
+ }
321
+ }
322
+ /**
323
+ * The current page in every locale it exists in, the current one included, to build a locale
324
+ * switcher from. A locale the page was removed from isn't listed.
325
+ */
326
+ function useAlternates() {
327
+ const $ = c(7);
328
+ const alternates = React.useContext(PageAlternatesContext);
329
+ const { locale } = useViewLocale();
330
+ let t0;
331
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
332
+ t0 = { select: _temp };
333
+ $[0] = t0;
334
+ } else t0 = $[0];
335
+ const pathname = useLocation(t0);
336
+ let t1;
337
+ if ($[1] !== alternates || $[2] !== locale.tag || $[3] !== pathname) {
338
+ t1 = alternates ?? [{
339
+ locale: locale.tag,
340
+ path: pathname
341
+ }];
342
+ $[1] = alternates;
343
+ $[2] = locale.tag;
344
+ $[3] = pathname;
345
+ $[4] = t1;
346
+ } else t1 = $[4];
347
+ let t2;
348
+ if ($[5] !== t1) {
349
+ t2 = t1.map(_temp2);
350
+ $[5] = t1;
351
+ $[6] = t2;
352
+ } else t2 = $[6];
353
+ return t2;
354
+ }
355
+ function _temp2(alternate) {
356
+ return {
357
+ locale: alternate.locale,
358
+ href: alternate.path,
359
+ label: nativeLocaleName(alternate.locale)
360
+ };
361
+ }
362
+ function _temp(location) {
363
+ return location.pathname;
364
+ }
365
+ /**
366
+ * Keeps internal links in the current locale: the returned function adds the locale's prefix to
367
+ * a root-relative path (`/articles` is `/de/articles` on a `de` page). Anything else, such as
368
+ * `https://…`, `//…`, `#…` or `mailto:…`, is returned as is. Write paths without a prefix.
369
+ */
370
+ function useLocalizedHref() {
371
+ const $ = c(2);
372
+ const { locale } = useViewLocale();
373
+ let t0;
374
+ if ($[0] !== locale) {
375
+ t0 = (href) => href.startsWith("/") && !href.startsWith("//") ? localizedPath(href, locale) : href;
376
+ $[0] = locale;
377
+ $[1] = t0;
378
+ } else t0 = $[1];
379
+ return t0;
380
+ }
381
+ function Navigate({ replace, to, source }) {
217
382
  const context = React.useContext(NavigationContext);
218
383
  if (!context) return /* @__PURE__ */ jsx(Navigate$1, {
219
384
  replace,
@@ -222,15 +387,17 @@ function Navigate({ replace, to }) {
222
387
  React.useEffect(() => {
223
388
  context.navigate({
224
389
  replace,
225
- to
390
+ to,
391
+ source
226
392
  });
227
393
  }, [
228
394
  context,
229
395
  replace,
230
- to
396
+ to,
397
+ source
231
398
  ]);
232
399
  return null;
233
400
  }
234
401
 
235
402
  //#endregion
236
- export { Link, Navigate, NavigationProvider, useLocation, useNavigate };
403
+ export { Link, Navigate, NavigationDisabled, NavigationLocation, NavigationProvider, useAlternates, useLocale, useLocalizedHref, useLocation, useNavigate };
@@ -2,16 +2,16 @@ import { GEIST_VARIABLE_TTF_BASE64 } from "./geist-variable-ttf-base64.js";
2
2
 
3
3
  //#region src/features/og/defaultFonts.ts
4
4
  /**
5
- * Decoded default fonts shared by the node and workerd OG image wrappers.
5
+ * Decoded default fonts for the OG image wrapper.
6
6
  *
7
- * The wasm renderer in `@takumi-rs/wasm` ships with no embedded fonts — calling
8
- * `new Renderer()` without `fonts` produces zero text runs and OG images come
9
- * out as featureless rectangles. We always inject Geist Variable so text has
10
- * something to render with; the user can still pass their own `fonts:` through
11
- * the ImageResponse constructor and override this default.
7
+ * Takumi's wasm renderer ships with no embedded fonts — rendering without
8
+ * `fonts` produces zero text runs and OG images come out as featureless
9
+ * rectangles. We always inject Geist Variable so text has something to render
10
+ * with; the user can still pass their own `fonts:` through the ImageResponse
11
+ * constructor and override this default.
12
12
  *
13
- * Decoded once at module load — both wrappers cache their renderer instances
14
- * at module scope, so the same bytes are passed to a single Renderer per
13
+ * Decoded once at module load. Takumi keys registered fonts by their bytes, so
14
+ * passing the same `data` on every render registers Geist only once per
15
15
  * isolate.
16
16
  */
17
17
  function decodeBase64(b64) {
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * Geist Variable TTF, encoded as base64.
4
4
  *
5
- * Bundled here so the workerd / worker / deno OG image wrapper can ship
5
+ * Bundled here so the workerd OG image wrapper can ship
6
6
  * a default font (the wasm renderer does not embed any, unlike native
7
7
  * `@takumi-rs/core`). Geist mirrors what the native flavor uses, so OG
8
8
  * images look the same across runtimes. The variable axis covers weights
@@ -0,0 +1,8 @@
1
+ import { ReactNode } from "react";
2
+ import { ImageResponse as ImageResponse$1, ImageResponseOptions } from "@takumi-rs/image-response";
3
+ //#region src/features/og/imageResponse.d.ts
4
+ export declare class ImageResponse extends ImageResponse$1 {
5
+ constructor(component: ReactNode, options?: ImageResponseOptions);
6
+ }
7
+ //#endregion
8
+ export type { ImageResponseOptions };
@@ -0,0 +1,26 @@
1
+ import { DEFAULT_FONTS } from "./defaultFonts.js";
2
+ import { ImageResponse as ImageResponse$1 } from "@takumi-rs/image-response";
3
+
4
+ //#region src/features/og/imageResponse.ts
5
+ /**
6
+ * OG image renderer for the Worker.
7
+ *
8
+ * Under the `workerd` export condition, `@takumi-rs/image-response` picks Takumi's wasm
9
+ * backend, which imports the wasm binary itself. The Cloudflare Vite plugin turns that
10
+ * `.wasm` import into a `WebAssembly.Module`, and Takumi lazy-inits it inside the
11
+ * response stream.
12
+ *
13
+ * Geist is bundled in `./defaultFonts` to compensate for the wasm renderer shipping with
14
+ * no embedded fonts.
15
+ */
16
+ var ImageResponse = class extends ImageResponse$1 {
17
+ constructor(component, options) {
18
+ super(component, {
19
+ ...options,
20
+ fonts: options?.fonts ?? DEFAULT_FONTS
21
+ });
22
+ }
23
+ };
24
+
25
+ //#endregion
26
+ export { ImageResponse };
@@ -0,0 +1,167 @@
1
+ import { useProjectUuid } from "../../lib/auth.js";
2
+ import { useCamoxApp } from "../provider/components/CamoxAppContext.js";
3
+ import { NormalizedDataProvider, usePageBlocks } from "../../lib/normalized-data.js";
4
+ import { reads, useRead } from "../../lib/studio-reads.js";
5
+ import { BlockErrorBoundary } from "../preview/components/BlockErrorBoundary.js";
6
+ import { useLocalePath } from "../../lib/view-locale.js";
7
+ import { SharedLayoutContent } from "./SharedLayoutContent.js";
8
+ import { c } from "react/compiler-runtime";
9
+ import * as React from "react";
10
+ import { jsx } from "react/jsx-runtime";
11
+
12
+ //#region src/features/page/CuratedPageContent.tsx
13
+ function PageBlock(t0) {
14
+ const $ = c(19);
15
+ const { blockId, mode } = t0;
16
+ let t1;
17
+ if ($[0] !== blockId) {
18
+ t1 = reads.blockBundle(blockId);
19
+ $[0] = blockId;
20
+ $[1] = t1;
21
+ } else t1 = $[1];
22
+ const data = useRead(t1);
23
+ const camoxApp = useCamoxApp();
24
+ const blockDef = camoxApp.getBlockById(data.block.type) ?? (camoxApp.canLoadMoreBlocks() ? React.use(camoxApp.loadBlock(data.block.type)) : void 0);
25
+ if (!blockDef) return null;
26
+ const t2 = data.files;
27
+ const t3 = data.repeatableItems;
28
+ let t4;
29
+ if ($[2] !== data.block) {
30
+ t4 = [data.block];
31
+ $[2] = data.block;
32
+ $[3] = t4;
33
+ } else t4 = $[3];
34
+ const T0 = blockDef._internal.Component;
35
+ const t5 = data.block.id;
36
+ const t6 = data.block.type;
37
+ const t7 = data.block.content;
38
+ const t8 = data.block.settings;
39
+ const t9 = String(data.block.position);
40
+ let t10;
41
+ if ($[4] !== data.block.id || $[5] !== data.block.type || $[6] !== t7 || $[7] !== t8 || $[8] !== t9) {
42
+ t10 = {
43
+ _id: t5,
44
+ type: t6,
45
+ content: t7,
46
+ settings: t8,
47
+ position: t9
48
+ };
49
+ $[4] = data.block.id;
50
+ $[5] = data.block.type;
51
+ $[6] = t7;
52
+ $[7] = t8;
53
+ $[8] = t9;
54
+ $[9] = t10;
55
+ } else t10 = $[9];
56
+ let t11;
57
+ if ($[10] !== blockDef._internal.Component || $[11] !== mode || $[12] !== t10) {
58
+ t11 = /* @__PURE__ */ jsx(T0, {
59
+ blockData: t10,
60
+ mode,
61
+ showAddBlockTop: false,
62
+ showAddBlockBottom: false
63
+ });
64
+ $[10] = blockDef._internal.Component;
65
+ $[11] = mode;
66
+ $[12] = t10;
67
+ $[13] = t11;
68
+ } else t11 = $[13];
69
+ let t12;
70
+ if ($[14] !== data.files || $[15] !== data.repeatableItems || $[16] !== t11 || $[17] !== t4) {
71
+ t12 = /* @__PURE__ */ jsx(NormalizedDataProvider, {
72
+ files: t2,
73
+ repeatableItems: t3,
74
+ blocks: t4,
75
+ children: t11
76
+ });
77
+ $[14] = data.files;
78
+ $[15] = data.repeatableItems;
79
+ $[16] = t11;
80
+ $[17] = t4;
81
+ $[18] = t12;
82
+ } else t12 = $[18];
83
+ return t12;
84
+ }
85
+ /** A curated page as visitors see it, without editing. */
86
+ function CuratedPageContent() {
87
+ const $ = c(19);
88
+ const pathname = useLocalePath();
89
+ const projectUuid = useProjectUuid();
90
+ const camoxApp = useCamoxApp();
91
+ let t0;
92
+ if ($[0] !== pathname || $[1] !== projectUuid) {
93
+ t0 = reads.pageStructure({
94
+ path: pathname,
95
+ projectUuid
96
+ });
97
+ $[0] = pathname;
98
+ $[1] = projectUuid;
99
+ $[2] = t0;
100
+ } else t0 = $[2];
101
+ const pageData = useRead(t0);
102
+ const { pageBlocks, beforeBlocks, afterBlocks, layoutFiles, layoutItems } = usePageBlocks(pageData);
103
+ let t1;
104
+ if ($[3] !== camoxApp || $[4] !== pageData.layout) {
105
+ t1 = pageData.layout ? camoxApp.getLayoutById(pageData.layout.layoutId) : void 0;
106
+ $[3] = camoxApp;
107
+ $[4] = pageData.layout;
108
+ $[5] = t1;
109
+ } else t1 = $[5];
110
+ const layout = t1;
111
+ let t2;
112
+ if ($[6] !== pageBlocks) {
113
+ t2 = pageBlocks.map(_temp);
114
+ $[6] = pageBlocks;
115
+ $[7] = t2;
116
+ } else t2 = $[7];
117
+ const pageBlocksContent = t2;
118
+ if (!layout) {
119
+ let t3;
120
+ if ($[8] !== pageBlocksContent) {
121
+ t3 = /* @__PURE__ */ jsx("main", {
122
+ className: "flex min-h-screen flex-col",
123
+ children: pageBlocksContent
124
+ });
125
+ $[8] = pageBlocksContent;
126
+ $[9] = t3;
127
+ } else t3 = $[9];
128
+ return t3;
129
+ }
130
+ let t3;
131
+ if ($[10] !== afterBlocks || $[11] !== beforeBlocks) {
132
+ t3 = [...beforeBlocks, ...afterBlocks];
133
+ $[10] = afterBlocks;
134
+ $[11] = beforeBlocks;
135
+ $[12] = t3;
136
+ } else t3 = $[12];
137
+ let t4;
138
+ if ($[13] !== layout || $[14] !== layoutFiles || $[15] !== layoutItems || $[16] !== pageBlocksContent || $[17] !== t3) {
139
+ t4 = /* @__PURE__ */ jsx(SharedLayoutContent, {
140
+ layout,
141
+ blocks: t3,
142
+ files: layoutFiles,
143
+ repeatableItems: layoutItems,
144
+ children: pageBlocksContent
145
+ });
146
+ $[13] = layout;
147
+ $[14] = layoutFiles;
148
+ $[15] = layoutItems;
149
+ $[16] = pageBlocksContent;
150
+ $[17] = t3;
151
+ $[18] = t4;
152
+ } else t4 = $[18];
153
+ return t4;
154
+ }
155
+ function _temp(block) {
156
+ return /* @__PURE__ */ jsx(BlockErrorBoundary, {
157
+ blockId: block.id,
158
+ blockType: block.type,
159
+ children: /* @__PURE__ */ jsx(PageBlock, {
160
+ blockId: block.id,
161
+ mode: "site"
162
+ })
163
+ }, block.id);
164
+ }
165
+
166
+ //#endregion
167
+ export { CuratedPageContent };