camox 0.44.0 → 0.46.0

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