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,58 @@
1
+ import { c } from "react/compiler-runtime";
2
+ import * as React from "react";
3
+ import { jsx } from "react/jsx-runtime";
4
+
5
+ //#region src/features/runtime/runtimeChromeLoader.tsx
6
+ let loadedModule;
7
+ let loading;
8
+ /**
9
+ * Studio chrome is only for members, so anonymous visitors never download it. Load it before
10
+ * rendering or hydrating a member's document: both then render it in place, without suspending.
11
+ */
12
+ function loadRuntimeChrome() {
13
+ loading ??= import("./RuntimeChrome.js").then((module) => {
14
+ loadedModule = { default: module.RuntimeChrome };
15
+ return loadedModule;
16
+ });
17
+ return loading;
18
+ }
19
+ const LazyRuntimeChrome = React.lazy(() => {
20
+ if (!loadedModule) return loadRuntimeChrome();
21
+ const module = loadedModule;
22
+ return { then: (resolve) => resolve(module) };
23
+ });
24
+ /** Shows `fallback` while the chrome loads, when a visitor signs in without a reload. */
25
+ function RuntimeChromeSlot(t0) {
26
+ const $ = c(8);
27
+ let fallback;
28
+ let props;
29
+ if ($[0] !== t0) {
30
+ ({fallback, ...props} = t0);
31
+ $[0] = t0;
32
+ $[1] = fallback;
33
+ $[2] = props;
34
+ } else {
35
+ fallback = $[1];
36
+ props = $[2];
37
+ }
38
+ let t1;
39
+ if ($[3] !== props) {
40
+ t1 = /* @__PURE__ */ jsx(LazyRuntimeChrome, { ...props });
41
+ $[3] = props;
42
+ $[4] = t1;
43
+ } else t1 = $[4];
44
+ let t2;
45
+ if ($[5] !== fallback || $[6] !== t1) {
46
+ t2 = /* @__PURE__ */ jsx(React.Suspense, {
47
+ fallback,
48
+ children: t1
49
+ });
50
+ $[5] = fallback;
51
+ $[6] = t1;
52
+ $[7] = t2;
53
+ } else t2 = $[7];
54
+ return t2;
55
+ }
56
+
57
+ //#endregion
58
+ export { RuntimeChromeSlot, loadRuntimeChrome };
@@ -0,0 +1,19 @@
1
+ //#region src/features/runtime/runtimeRoutes.d.ts
2
+ /**
3
+ * The URLs the runtime answers that aren't pages or the Studio. Worker request filtering, runtime
4
+ * route matching and client navigation all read this list, so a new one can't be forgotten in any
5
+ * of them. Prefix rules stay with their readers: the Worker also answers every `/camox/` Studio
6
+ * path, and client navigation also skips any other `/_camox/` path.
7
+ * No imports: client navigation ships this module in the browser bundle.
8
+ */
9
+ export declare const RUNTIME_ROUTE_PATHS: {
10
+ readonly data: "/_camox/data";
11
+ readonly health: "/_camox/health";
12
+ readonly registry: "/_camox/registry";
13
+ readonly routes: "/_camox/routes";
14
+ readonly og: "/og";
15
+ readonly sitemap: "/sitemap.xml";
16
+ readonly "llms-txt": "/llms.txt";
17
+ };
18
+ export type RuntimeOwnedRouteKind = keyof typeof RUNTIME_ROUTE_PATHS;
19
+ //#endregion
@@ -0,0 +1,25 @@
1
+ //#region src/features/runtime/runtimeRoutes.ts
2
+ /**
3
+ * The URLs the runtime answers that aren't pages or the Studio. Worker request filtering, runtime
4
+ * route matching and client navigation all read this list, so a new one can't be forgotten in any
5
+ * of them. Prefix rules stay with their readers: the Worker also answers every `/camox/` Studio
6
+ * path, and client navigation also skips any other `/_camox/` path.
7
+ * No imports: client navigation ships this module in the browser bundle.
8
+ */
9
+ const RUNTIME_ROUTE_PATHS = {
10
+ data: "/_camox/data",
11
+ health: "/_camox/health",
12
+ registry: "/_camox/registry",
13
+ routes: "/_camox/routes",
14
+ og: "/og",
15
+ sitemap: "/sitemap.xml",
16
+ "llms-txt": "/llms.txt"
17
+ };
18
+ /** Which runtime-owned route a path inside the runtime (base path removed) is, if any. */
19
+ function matchRuntimeOwnedRoute(pathname) {
20
+ for (const [kind, path] of Object.entries(RUNTIME_ROUTE_PATHS)) if (pathname === path) return kind;
21
+ return null;
22
+ }
23
+
24
+ //#endregion
25
+ export { RUNTIME_ROUTE_PATHS, matchRuntimeOwnedRoute };
@@ -0,0 +1,133 @@
1
+ //#region src/features/runtime/scrollRestoration.ts
2
+ /**
3
+ * Scroll positions of the website's history entries. Each entry the runtime creates carries a
4
+ * key in `history.state`, so two entries with the same URL keep their own positions. Positions
5
+ * are kept in sessionStorage, so they survive reloads and documents the browser had to load again.
6
+ *
7
+ * The page scrolls in its viewport: the visitor's window, or the Studio frame showing the page.
8
+ * The history belongs to the top window either way.
9
+ */
10
+ const STORAGE_KEY = "camox:scroll-positions";
11
+ const STATE_KEY = "camoxScrollKey";
12
+ /** Keeps sessionStorage small for long sessions. Older entries scroll to the top instead. */
13
+ const MAX_ENTRIES = 100;
14
+ function keyOf(state) {
15
+ if (!state || typeof state !== "object" || !(STATE_KEY in state)) return void 0;
16
+ const key = state[STATE_KEY];
17
+ return typeof key === "string" ? key : void 0;
18
+ }
19
+ function createKey() {
20
+ return Math.random().toString(36).slice(2, 10);
21
+ }
22
+ function readPositions(storage) {
23
+ try {
24
+ const stored = storage?.getItem(STORAGE_KEY);
25
+ if (stored) return new Map(JSON.parse(stored));
26
+ } catch {}
27
+ return /* @__PURE__ */ new Map();
28
+ }
29
+ /** The element a fragment names, or `"top"` for the fragments that name the top of the page. */
30
+ function fragmentTarget(doc, hash) {
31
+ const fragment = hash.replace(/^#/, "");
32
+ let decoded = fragment;
33
+ try {
34
+ decoded = decodeURIComponent(fragment);
35
+ } catch {}
36
+ const find = (id) => id && (doc.getElementById(id) ?? doc.getElementsByName(id)[0]) || null;
37
+ const element = find(fragment) ?? find(decoded);
38
+ if (!element && (!decoded || decoded.toLowerCase() === "top")) return "top";
39
+ return element;
40
+ }
41
+ function createScrollRestoration(win) {
42
+ const storage = (() => {
43
+ try {
44
+ return win.sessionStorage;
45
+ } catch {
46
+ return;
47
+ }
48
+ })();
49
+ const positions = readPositions(storage);
50
+ let viewport = null;
51
+ win.history.scrollRestoration = "manual";
52
+ let currentKey = keyOf(win.history.state);
53
+ const keyEntry = () => {
54
+ currentKey = createKey();
55
+ win.history.replaceState({
56
+ ...win.history.state,
57
+ [STATE_KEY]: currentKey
58
+ }, "");
59
+ };
60
+ if (!currentKey) keyEntry();
61
+ const persist = () => {
62
+ try {
63
+ storage?.setItem(STORAGE_KEY, JSON.stringify([...positions]));
64
+ } catch {}
65
+ };
66
+ /** Records where the shown entry's page is scrolled to. */
67
+ const save = () => {
68
+ if (!currentKey || !viewport) return;
69
+ positions.delete(currentKey);
70
+ positions.set(currentKey, [viewport.scrollX, viewport.scrollY]);
71
+ while (positions.size > MAX_ENTRIES) positions.delete(positions.keys().next().value);
72
+ persist();
73
+ };
74
+ const onPageHide = () => {
75
+ save();
76
+ win.history.scrollRestoration = "auto";
77
+ };
78
+ const onPageShow = () => {
79
+ win.history.scrollRestoration = "manual";
80
+ };
81
+ win.addEventListener("pagehide", onPageHide);
82
+ win.addEventListener("pageshow", onPageShow);
83
+ return {
84
+ save,
85
+ /** Where the page scrolls from now on, or null while nothing shows it. */
86
+ setViewport(next) {
87
+ viewport = next;
88
+ },
89
+ /** Where the page scrolls, if anything shows it. */
90
+ viewport: () => viewport,
91
+ /** State for a new history entry, which gets a key of its own. */
92
+ stateForNewEntry: () => ({ [STATE_KEY]: createKey() }),
93
+ /** Follows the history entry the browser now shows, and gives it a key if it has none. */
94
+ entered() {
95
+ currentKey = keyOf(win.history.state);
96
+ if (!currentKey) keyEntry();
97
+ },
98
+ /**
99
+ * Scrolls `page`, which just rendered the shown entry at `hash`, as `intent` says. Returns the
100
+ * fragment's element it scrolled to, if any.
101
+ */
102
+ apply(page, intent, hash) {
103
+ const scrollTo = (top, left = 0) => page.scrollTo({
104
+ top,
105
+ left,
106
+ behavior: "instant"
107
+ });
108
+ if (intent === "resume" || intent === "restore") {
109
+ const saved = currentKey && positions.get(currentKey);
110
+ if (saved) {
111
+ scrollTo(saved[1], saved[0]);
112
+ return null;
113
+ }
114
+ if (intent === "resume") return null;
115
+ }
116
+ const target = hash ? fragmentTarget(page.document, hash) : null;
117
+ if (target === "top") scrollTo(0);
118
+ else if (target) {
119
+ target.scrollIntoView({ behavior: intent === "fragment" ? "auto" : "instant" });
120
+ return target;
121
+ } else if (intent !== "fragment") scrollTo(0);
122
+ return null;
123
+ },
124
+ dispose() {
125
+ win.removeEventListener("pagehide", onPageHide);
126
+ win.removeEventListener("pageshow", onPageShow);
127
+ win.history.scrollRestoration = "auto";
128
+ }
129
+ };
130
+ }
131
+
132
+ //#endregion
133
+ export { createScrollRestoration };
@@ -1,6 +1,7 @@
1
+ import "../../core/createApp.js";
1
2
  import { PageRenderInput } from "./runtime.js";
3
+ import "../../lib/draft-scope.js";
2
4
  import { QueryClient } from "@tanstack/react-query";
3
5
  //#region src/features/runtime/studioApp.d.ts
4
- type StudioRenderInput = PageRenderInput;
5
- //#endregion
6
- export { StudioRenderInput };
6
+ export type StudioRenderInput = PageRenderInput;
7
+ //#endregion
@@ -4,17 +4,13 @@ import { jsx } from "react/jsx-runtime";
4
4
 
5
5
  //#region src/features/runtime/studioApp.tsx
6
6
  function StudioApp(props) {
7
- const $ = c(3);
8
- if ($[0] !== "67c2b6f45da5572f3c7b8c4d68491571a2d455e4cd7067c0380e91fc49b09d93") {
9
- for (let $i = 0; $i < 3; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
10
- $[0] = "67c2b6f45da5572f3c7b8c4d68491571a2d455e4cd7067c0380e91fc49b09d93";
11
- }
7
+ const $ = c(2);
12
8
  let t0;
13
- if ($[1] !== props) {
9
+ if ($[0] !== props) {
14
10
  t0 = /* @__PURE__ */ jsx(PageApp, { ...props });
15
- $[1] = props;
16
- $[2] = t0;
17
- } else t0 = $[2];
11
+ $[0] = props;
12
+ $[1] = t0;
13
+ } else t0 = $[1];
18
14
  return t0;
19
15
  }
20
16
 
@@ -1,6 +1,4 @@
1
1
  import { CamoxApp } from "../../core/createApp.js";
2
-
3
2
  //#region src/features/runtime/studioClient.d.ts
4
- declare function hydrateStudioWithApp(camoxApp: CamoxApp): void;
5
- //#endregion
6
- export { hydrateStudioWithApp };
3
+ export declare function hydrateStudioWithApp(camoxApp: CamoxApp): Promise<void>;
4
+ //#endregion
@@ -1,17 +1,26 @@
1
+ import { createDraftScope } from "../../lib/draft-scope.js";
2
+ import { loadRuntimeChrome } from "./runtimeChromeLoader.js";
1
3
  import { readHydrationData } from "./hydrationData.js";
2
4
  import { StudioApp } from "./studioApp.js";
3
- import { QueryClient } from "@tanstack/react-query";
4
5
  import { jsx } from "react/jsx-runtime";
6
+ import { QueryClient } from "@tanstack/react-query";
5
7
  import { hydrateRoot } from "react-dom/client";
6
8
 
7
9
  //#region src/features/runtime/studioClient.tsx
8
- function hydrateStudioWithApp(camoxApp) {
10
+ async function hydrateStudioWithApp(camoxApp) {
9
11
  const root = document.getElementById("root");
10
12
  if (!root) throw new Error("Camox runtime root element was not found.");
11
13
  const queryClient = new QueryClient();
14
+ const input = readHydrationData();
15
+ if (input.presentation === "studio") await loadRuntimeChrome();
16
+ const draftScope = createDraftScope({
17
+ queryClient,
18
+ browser: window
19
+ });
12
20
  hydrateRoot(root, /* @__PURE__ */ jsx(StudioApp, {
13
21
  camoxApp,
14
- input: readHydrationData(),
22
+ draftScope,
23
+ input,
15
24
  queryClient
16
25
  }));
17
26
  }
@@ -1,9 +1,7 @@
1
1
  import { CamoxApp } from "../../core/createApp.js";
2
2
  import { StudioRenderInput } from "./studioApp.js";
3
-
4
3
  //#region src/features/runtime/studioServer.d.ts
5
- declare function renderStudioWithApp(input: StudioRenderInput & {
4
+ export declare function renderStudioWithApp(input: StudioRenderInput & {
6
5
  camoxApp: CamoxApp;
7
6
  }): Promise<string>;
8
- //#endregion
9
- export { renderStudioWithApp };
7
+ //#endregion
@@ -1,14 +1,19 @@
1
+ import { createDraftScope } from "../../lib/draft-scope.js";
2
+ import { loadRuntimeChrome } from "./runtimeChromeLoader.js";
1
3
  import { StudioApp } from "./studioApp.js";
2
- import { QueryClient, hydrate } from "@tanstack/react-query";
3
4
  import { jsx } from "react/jsx-runtime";
5
+ import { QueryClient, hydrate } from "@tanstack/react-query";
4
6
  import { renderToString } from "react-dom/server";
5
7
 
6
8
  //#region src/features/runtime/studioServer.tsx
7
9
  async function renderStudioWithApp(input) {
8
10
  const queryClient = new QueryClient();
9
11
  hydrate(queryClient, input.dehydratedState);
12
+ if (input.presentation === "studio") await loadRuntimeChrome();
13
+ const draftScope = createDraftScope({ queryClient });
10
14
  return renderToString(/* @__PURE__ */ jsx(StudioApp, {
11
15
  camoxApp: input.camoxApp,
16
+ draftScope,
12
17
  input,
13
18
  queryClient
14
19
  }));
@@ -0,0 +1,6 @@
1
+ //#region src/features/runtime/worker.d.ts
2
+ declare const _default: {
3
+ fetch(request: Request): Promise<Response>;
4
+ };
5
+ //#endregion
6
+ export { _default as default };
@@ -0,0 +1,23 @@
1
+ import { fetchLocalhostOnLoopback } from "./loopbackFetch.js";
2
+ import { shouldHandleRequest, withDevHtml } from "./workerRequest.js";
3
+ import { devHtml, handleCamoxRequest, runtimeBasePath } from "virtual:camox/server";
4
+
5
+ //#region src/features/runtime/worker.ts
6
+ /**
7
+ * The Cloudflare Worker that serves a Camox app: point `main` in `wrangler.jsonc` at
8
+ * `camox/worker`. Static files never reach it: Workers Static Assets serves them first in
9
+ * production, and Vite does in dev.
10
+ */
11
+ if (devHtml) globalThis.fetch = fetchLocalhostOnLoopback(globalThis.fetch.bind(globalThis));
12
+ function notFound() {
13
+ return new Response("Not found", { status: 404 });
14
+ }
15
+ var worker_default = { async fetch(request) {
16
+ if (!shouldHandleRequest(request, runtimeBasePath)) return notFound();
17
+ const response = await handleCamoxRequest(request);
18
+ if (!response) return notFound();
19
+ return withDevHtml(response, devHtml);
20
+ } };
21
+
22
+ //#endregion
23
+ export { worker_default as default };
@@ -0,0 +1,44 @@
1
+ import { matchRuntimeOwnedRoute } from "./runtimeRoutes.js";
2
+
3
+ //#region src/features/runtime/workerRequest.ts
4
+ /** How the Camox Worker picks the requests it answers and prepares its responses. */
5
+ function isDocumentRequest(request) {
6
+ const accept = request.headers.get("Accept") ?? "";
7
+ return accept.includes("text/html") || accept.includes("text/markdown") || accept.includes("*/*");
8
+ }
9
+ /** The request's path inside the runtime, or `null` when it falls outside the base path. */
10
+ function getRuntimePathname(pathname, basePath) {
11
+ if (!basePath) return pathname;
12
+ if (pathname === basePath) return "/";
13
+ if (!pathname.startsWith(`${basePath}/`)) return null;
14
+ return pathname.slice(basePath.length) || "/";
15
+ }
16
+ function shouldHandleRequest(request, basePath) {
17
+ const pathname = getRuntimePathname(new URL(request.url).pathname, basePath);
18
+ if (!pathname) return false;
19
+ if (request.method !== "GET" && request.method !== "HEAD") return false;
20
+ if (matchRuntimeOwnedRoute(pathname)) return true;
21
+ if (pathname === "/camox" || pathname.startsWith("/camox/")) return true;
22
+ if (pathname.endsWith(".md")) return true;
23
+ if (/\.[a-z0-9]+$/i.test(pathname)) return false;
24
+ if (pathname.startsWith("/@") || pathname.startsWith("/src/")) return false;
25
+ if (pathname.startsWith("/__vite")) return false;
26
+ if (pathname.startsWith("/node_modules/")) return false;
27
+ return isDocumentRequest(request);
28
+ }
29
+ /** Adds what Vite injects into HTML in dev, such as its client and React Refresh. */
30
+ async function withDevHtml(response, html) {
31
+ if (!html) return response;
32
+ if (!(response.headers.get("Content-Type") ?? "").includes("text/html")) return response;
33
+ const headers = new Headers(response.headers);
34
+ headers.delete("Content-Length");
35
+ const document = (await response.text()).replace(/<head(\s[^>]*)?>/i, (tag) => tag + html.head).replace(/<\/body>/i, (tag) => html.body + tag);
36
+ return new Response(document, {
37
+ headers,
38
+ status: response.status,
39
+ statusText: response.statusText
40
+ });
41
+ }
42
+
43
+ //#endregion
44
+ export { shouldHandleRequest, withDevHtml };
@@ -1,11 +1,7 @@
1
1
  import * as React from "react";
2
- import * as _$react_jsx_runtime0 from "react/jsx-runtime";
3
-
4
2
  //#region src/features/studio/CamoxStudio.d.ts
5
- declare const CamoxStudio: ({
6
- children
7
- }: {
3
+ declare const CamoxStudio: ({ children }: {
8
4
  children: React.ReactNode;
9
- }) => _$react_jsx_runtime0.JSX.Element | null;
5
+ }) => React.JSX.Element | null;
10
6
  //#endregion
11
7
  export { CamoxStudio };
@@ -1,27 +1,22 @@
1
- import { Navigate, useLocation } from "../navigation/navigation.js";
2
1
  import { useAuthState, useSignInRedirect } from "../../lib/auth.js";
3
- import { SharedChromeContext } from "../runtime/SharedChromeContext.js";
2
+ import { Navigate } from "../navigation/navigation.js";
3
+ import { useLocalePath, useLocalizedPath } from "../../lib/view-locale.js";
4
4
  import { STUDIO_BASE_PATH } from "./routes.js";
5
- import { Navbar } from "./components/Navbar.js";
6
5
  import { c } from "react/compiler-runtime";
7
6
  import * as React from "react";
8
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Fragment, jsx } from "react/jsx-runtime";
9
8
 
10
9
  //#region src/features/studio/CamoxStudio.tsx
11
10
  const CamoxStudio = (t0) => {
12
- const $ = c(12);
13
- if ($[0] !== "5f0b5c1c244f7af982fa1d0e99a04fcbc60b872999562c3737760c88a71ce1d0") {
14
- for (let $i = 0; $i < 12; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
15
- $[0] = "5f0b5c1c244f7af982fa1d0e99a04fcbc60b872999562c3737760c88a71ce1d0";
16
- }
11
+ const $ = c(11);
17
12
  const { children } = t0;
18
13
  const { isAuthenticated, isLoading: isLoadingAuth } = useAuthState();
19
- const sharedChrome = React.useContext(SharedChromeContext);
20
- const { pathname } = useLocation();
14
+ const pathname = useLocalePath();
15
+ const localized = useLocalizedPath();
21
16
  const signInRedirect = useSignInRedirect();
22
17
  let t1;
23
18
  let t2;
24
- if ($[1] !== isAuthenticated || $[2] !== isLoadingAuth || $[3] !== signInRedirect) {
19
+ if ($[0] !== isAuthenticated || $[1] !== isLoadingAuth || $[2] !== signInRedirect) {
25
20
  t1 = () => {
26
21
  if (!isAuthenticated && !isLoadingAuth) signInRedirect();
27
22
  };
@@ -30,52 +25,42 @@ const CamoxStudio = (t0) => {
30
25
  isLoadingAuth,
31
26
  signInRedirect
32
27
  ];
33
- $[1] = isAuthenticated;
34
- $[2] = isLoadingAuth;
35
- $[3] = signInRedirect;
36
- $[4] = t1;
37
- $[5] = t2;
28
+ $[0] = isAuthenticated;
29
+ $[1] = isLoadingAuth;
30
+ $[2] = signInRedirect;
31
+ $[3] = t1;
32
+ $[4] = t2;
38
33
  } else {
39
- t1 = $[4];
40
- t2 = $[5];
34
+ t1 = $[3];
35
+ t2 = $[4];
41
36
  }
42
37
  React.useEffect(t1, t2);
43
38
  if (!isAuthenticated) return null;
44
- if (pathname === STUDIO_BASE_PATH) {
39
+ if (pathname === "/camox") {
45
40
  let t3;
46
- if ($[6] === Symbol.for("react.memo_cache_sentinel")) {
47
- t3 = /* @__PURE__ */ jsx(Navigate, {
48
- to: "/",
49
- replace: true
50
- });
41
+ if ($[5] !== localized) {
42
+ t3 = localized("/");
43
+ $[5] = localized;
51
44
  $[6] = t3;
52
45
  } else t3 = $[6];
53
- return t3;
54
- }
55
- if (sharedChrome) {
56
- let t3;
57
- if ($[7] !== children) {
58
- t3 = /* @__PURE__ */ jsx(Fragment, { children });
59
- $[7] = children;
60
- $[8] = t3;
61
- } else t3 = $[8];
62
- return t3;
46
+ let t4;
47
+ if ($[7] !== t3) {
48
+ t4 = /* @__PURE__ */ jsx(Navigate, {
49
+ to: t3,
50
+ replace: true
51
+ });
52
+ $[7] = t3;
53
+ $[8] = t4;
54
+ } else t4 = $[8];
55
+ return t4;
63
56
  }
64
57
  let t3;
65
- if ($[9] === Symbol.for("react.memo_cache_sentinel")) {
66
- t3 = /* @__PURE__ */ jsx(Navbar, {});
67
- $[9] = t3;
68
- } else t3 = $[9];
69
- let t4;
70
- if ($[10] !== children) {
71
- t4 = /* @__PURE__ */ jsxs("div", {
72
- className: "bg-background flex h-screen flex-col overflow-hidden",
73
- children: [t3, children]
74
- });
75
- $[10] = children;
76
- $[11] = t4;
77
- } else t4 = $[11];
78
- return t4;
58
+ if ($[9] !== children) {
59
+ t3 = /* @__PURE__ */ jsx(Fragment, { children });
60
+ $[9] = children;
61
+ $[10] = t3;
62
+ } else t3 = $[10];
63
+ return t3;
79
64
  };
80
65
 
81
66
  //#endregion