camox 0.44.0 → 0.46.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (407) hide show
  1. package/dist/components/AuthGate.js +0 -6
  2. package/dist/components/DeviceSelector.js +96 -0
  3. package/dist/components/PlatformLabel.js +20 -24
  4. package/dist/core/components/lexical/HighlightNode.js +1 -1
  5. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  6. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  7. package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
  8. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  9. package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
  10. package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
  11. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  12. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  13. package/dist/core/createApp.d.ts +241 -312
  14. package/dist/core/createApp.js +123 -29
  15. package/dist/core/createBlock.d.ts +5 -5
  16. package/dist/core/createBlock.js +385 -152
  17. package/dist/core/createCollection.d.ts +55 -0
  18. package/dist/core/createCollection.js +93 -0
  19. package/dist/core/createLayout.d.ts +197 -61
  20. package/dist/core/createLayout.js +114 -56
  21. package/dist/core/defineDocument.d.ts +3 -5
  22. package/dist/core/derivedRoutes.js +49 -1
  23. package/dist/core/dom.d.ts +13 -4
  24. package/dist/core/dom.js +44 -1
  25. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  26. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  27. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  28. package/dist/core/editing/createEditableBlock.d.ts +754 -633
  29. package/dist/core/editing/createEditableBlock.js +2113 -1066
  30. package/dist/core/editing/referenceWrites.js +51 -0
  31. package/dist/core/editing/useLatestRecord.js +90 -0
  32. package/dist/core/hooks/useArtifactHost.js +139 -0
  33. package/dist/core/hooks/useFieldSelection.js +43 -18
  34. package/dist/core/hooks/useIsEditable.js +12 -10
  35. package/dist/core/hooks/useOverlayMessage.js +15 -19
  36. package/dist/core/lib/artifact.d.ts +21 -0
  37. package/dist/core/lib/artifact.js +154 -0
  38. package/dist/core/lib/artifactColors.js +123 -0
  39. package/dist/core/lib/artifactData.d.ts +1 -0
  40. package/dist/core/lib/artifactData.js +131 -0
  41. package/dist/core/lib/artifactHost.js +205 -0
  42. package/dist/core/lib/artifactRuntime.js +36 -0
  43. package/dist/core/lib/artifactTheme.js +57 -0
  44. package/dist/core/lib/contentType.d.ts +302 -106
  45. package/dist/core/lib/contentType.js +201 -173
  46. package/dist/core/lib/fieldTypes.js +3 -0
  47. package/dist/core/lib/iconTypes.d.ts +3 -3
  48. package/dist/core/lib/icons.d.ts +4 -4
  49. package/dist/core/lib/icons.js +40 -44
  50. package/dist/core/lib/imagePlaceholder.js +177 -0
  51. package/dist/core/lib/imageTransform.js +1 -1
  52. package/dist/core/lib/lexicalReact.d.ts +3 -1
  53. package/dist/core/lib/lexicalState.js +1 -1
  54. package/dist/core/lib/previewPaused.js +9 -0
  55. package/dist/core/lib/recordScope.js +316 -0
  56. package/dist/core/lib/reference.d.ts +81 -0
  57. package/dist/core/lib/reference.js +29 -0
  58. package/dist/core/lib/textLinks.js +7 -5
  59. package/dist/core/lib/textStyles.d.ts +5 -7
  60. package/dist/core/lib/textStyles.js +2 -2
  61. package/dist/core/notFound.d.ts +7 -0
  62. package/dist/core/notFound.js +11 -0
  63. package/dist/core/pageDestinations.js +6 -3
  64. package/dist/core/recordItem.js +34 -0
  65. package/dist/core/requestContext.d.ts +26 -0
  66. package/dist/core/requestContext.js +20 -0
  67. package/dist/features/canvas/CamoxCanvas.js +1401 -0
  68. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  69. package/dist/features/canvas/CanvasOverlays.js +254 -0
  70. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  71. package/dist/features/canvas/CanvasPageFrame.js +333 -0
  72. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  73. package/dist/features/canvas/CanvasPreviewPageSlot.js +123 -0
  74. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  75. package/dist/features/canvas/canvasCamera.js +229 -0
  76. package/dist/features/canvas/canvasFlight.js +104 -0
  77. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  78. package/dist/features/canvas/canvasFrameDocument.js +302 -0
  79. package/dist/features/canvas/canvasFrameMode.js +53 -0
  80. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  81. package/dist/features/canvas/canvasItems.js +30 -0
  82. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  83. package/dist/features/canvas/canvasPages.js +79 -0
  84. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  85. package/dist/features/canvas/canvasSelection.js +18 -0
  86. package/dist/features/canvas/canvasStore.js +60 -0
  87. package/dist/features/canvas/canvasThumbnails.js +304 -0
  88. package/dist/features/canvas/canvasZoom.js +10 -0
  89. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  90. package/dist/features/canvas/sidebar/CanvasNavigator.js +124 -0
  91. package/dist/features/canvas/sidebar/CanvasSidebar.js +54 -0
  92. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  93. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  94. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  95. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  96. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  97. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  98. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  99. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  100. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  101. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  102. package/dist/features/canvas/useCanvasCamera.js +783 -0
  103. package/dist/features/canvas/useCanvasFrame.js +148 -0
  104. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  105. package/dist/features/canvas/useCanvasNearness.js +57 -0
  106. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  107. package/dist/features/content/CamoxContent.d.ts +2 -5
  108. package/dist/features/content/CamoxContent.js +174 -271
  109. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  110. package/dist/features/content/ContentAssets.js +315 -0
  111. package/dist/features/content/ContentCollection.js +663 -0
  112. package/dist/features/content/collection-form.js +58 -0
  113. package/dist/features/content/components/AssetCard.js +80 -84
  114. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  115. package/dist/features/content/components/ContentSidebar.js +129 -18
  116. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  117. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  118. package/dist/features/content/components/MissingFromLocale.js +282 -0
  119. package/dist/features/content/components/UploadDropZone.js +27 -31
  120. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  121. package/dist/features/navigation/navigation.d.ts +66 -20
  122. package/dist/features/navigation/navigation.js +257 -90
  123. package/dist/features/og/defaultFonts.js +8 -8
  124. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  125. package/dist/features/og/imageResponse.d.ts +8 -0
  126. package/dist/features/og/imageResponse.js +26 -0
  127. package/dist/features/page/CuratedPageContent.js +167 -0
  128. package/dist/features/page/DerivedPageContent.js +26 -30
  129. package/dist/features/page/SharedLayoutContent.js +25 -27
  130. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  131. package/dist/features/preview/CamoxPreview.js +816 -537
  132. package/dist/features/preview/EditablePageContent.js +1 -1
  133. package/dist/features/preview/EditablePageExperience.js +16 -22
  134. package/dist/features/preview/components/AddBlockSheet.js +273 -0
  135. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  136. package/dist/features/preview/components/AssetLightbox.js +181 -134
  137. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  138. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  139. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  140. package/dist/features/preview/components/BlockThumbnail.js +172 -98
  141. package/dist/features/preview/components/CanvasPreview.js +243 -0
  142. package/dist/features/preview/components/CreatePageModal.js +128 -137
  143. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  144. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  145. package/dist/features/preview/components/DrillRow.js +150 -0
  146. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  147. package/dist/features/preview/components/FieldToolbar.js +160 -110
  148. package/dist/features/preview/components/Frame.js +108 -20
  149. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  150. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  151. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  152. package/dist/features/preview/components/Metadata.js +22 -30
  153. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  154. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  155. package/dist/features/preview/components/OverlayTracker.js +9 -41
  156. package/dist/features/preview/components/Overlays.js +81 -69
  157. package/dist/features/preview/components/PageInfo.js +1748 -0
  158. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  159. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  160. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  161. package/dist/features/preview/components/PageNicknameField.js +22 -26
  162. package/dist/features/preview/components/PagePicker.js +128 -130
  163. package/dist/features/preview/components/PageTree.js +525 -532
  164. package/dist/features/preview/components/PreviewActivation.js +28 -32
  165. package/dist/features/preview/components/PreviewPanel.js +620 -319
  166. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  167. package/dist/features/preview/components/RecordCard.js +80 -0
  168. package/dist/features/preview/components/RecordCombobox.js +178 -0
  169. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  170. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  171. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  172. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  173. package/dist/features/preview/components/SelectionEditor.js +993 -0
  174. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  175. package/dist/features/preview/components/SidebarSection.js +52 -64
  176. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  177. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  178. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  179. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  180. package/dist/features/preview/components/useFieldWriter.js +200 -0
  181. package/dist/features/preview/components/useRecordView.js +383 -0
  182. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  183. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  184. package/dist/features/preview/editingFrame.js +197 -0
  185. package/dist/features/preview/overlayHighlights.js +17 -44
  186. package/dist/features/preview/overlayMessages.js +72 -1
  187. package/dist/features/preview/pageRecord.js +189 -0
  188. package/dist/features/preview/previewConstants.js +6 -2
  189. package/dist/features/preview/previewPageFrame.js +95 -0
  190. package/dist/features/preview/previewPreparation.js +7 -0
  191. package/dist/features/preview/previewSelection.js +32 -63
  192. package/dist/features/preview/previewStore.js +225 -123
  193. package/dist/features/preview/referencePickerFocus.js +29 -0
  194. package/dist/features/preview/repeatableItemTargets.js +56 -0
  195. package/dist/features/preview/selectionReveal.js +21 -0
  196. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  197. package/dist/features/preview/viewportContinuity.js +109 -0
  198. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  199. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  200. package/dist/features/provider/CamoxProvider.js +38 -50
  201. package/dist/features/provider/CoreCamoxProvider.js +69 -50
  202. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  203. package/dist/features/provider/PreviewSignInPage.js +54 -0
  204. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  205. package/dist/features/provider/components/CommandPalette.js +75 -82
  206. package/dist/features/provider/useAdminShortcuts.js +7 -11
  207. package/dist/features/routes/pageRuntime.d.ts +44 -4
  208. package/dist/features/routes/pageRuntime.js +244 -137
  209. package/dist/features/runtime/RuntimeChrome.js +117 -115
  210. package/dist/features/runtime/alternates.js +64 -0
  211. package/dist/features/runtime/analytics.d.ts +7 -0
  212. package/dist/features/runtime/analytics.js +66 -0
  213. package/dist/features/runtime/artifactSources.js +87 -0
  214. package/dist/features/runtime/editingFallback.js +20 -0
  215. package/dist/features/runtime/linkPrefetch.js +97 -0
  216. package/dist/features/runtime/livePages.js +62 -0
  217. package/dist/features/runtime/llmsTxt.js +40 -0
  218. package/dist/features/runtime/loopbackFetch.js +18 -0
  219. package/dist/features/runtime/navigationAccessibility.js +51 -0
  220. package/dist/features/runtime/navigationTarget.js +23 -2
  221. package/dist/features/runtime/pageApp.js +229 -158
  222. package/dist/features/runtime/pageBlockTypes.js +20 -0
  223. package/dist/features/runtime/pageClient.d.ts +2 -4
  224. package/dist/features/runtime/pageClient.js +18 -3
  225. package/dist/features/runtime/pageNavigation.js +254 -32
  226. package/dist/features/runtime/pageServer.d.ts +2 -4
  227. package/dist/features/runtime/pageServer.js +6 -2
  228. package/dist/features/runtime/pageViewport.js +7 -0
  229. package/dist/features/runtime/runtime.d.ts +54 -24
  230. package/dist/features/runtime/runtime.js +766 -191
  231. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  232. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  233. package/dist/features/runtime/runtimeRoutes.js +25 -0
  234. package/dist/features/runtime/scrollRestoration.js +133 -0
  235. package/dist/features/runtime/studioApp.d.ts +4 -3
  236. package/dist/features/runtime/studioApp.js +5 -9
  237. package/dist/features/runtime/studioClient.d.ts +2 -4
  238. package/dist/features/runtime/studioClient.js +12 -3
  239. package/dist/features/runtime/studioServer.d.ts +2 -4
  240. package/dist/features/runtime/studioServer.js +6 -1
  241. package/dist/features/runtime/worker.d.ts +6 -0
  242. package/dist/features/runtime/worker.js +23 -0
  243. package/dist/features/runtime/workerRequest.js +44 -0
  244. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  245. package/dist/features/studio/CamoxStudio.js +34 -49
  246. package/dist/features/studio/FollowAgentProvider.js +327 -0
  247. package/dist/features/studio/components/ChatSidebar.js +356 -0
  248. package/dist/features/studio/components/DraftsControl.js +676 -0
  249. package/dist/features/studio/components/FaviconDialog.js +318 -0
  250. package/dist/features/studio/components/LocalePicker.js +785 -0
  251. package/dist/features/studio/components/Navbar.js +123 -103
  252. package/dist/features/studio/components/ProjectMenu.js +239 -260
  253. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  254. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  255. package/dist/features/studio/components/ThreadComposer.js +157 -0
  256. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  257. package/dist/features/studio/components/ThreadMessages.js +270 -0
  258. package/dist/features/studio/components/UserButton.js +34 -23
  259. package/dist/features/studio/draftLabel.js +33 -0
  260. package/dist/features/studio/draftNotice.js +13 -0
  261. package/dist/features/studio/followAgent.js +241 -0
  262. package/dist/features/studio/followAgentContext.js +7 -0
  263. package/dist/features/studio/localeOptions.js +118 -0
  264. package/dist/features/studio/localeSwitch.js +19 -0
  265. package/dist/features/studio/routes.js +26 -1
  266. package/dist/features/studio/studioStore.js +64 -1
  267. package/dist/features/studio/useTheme.js +24 -27
  268. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  269. package/dist/features/vite/blockBoilerplate.js +6 -5
  270. package/dist/features/vite/blockChunks.js +31 -0
  271. package/dist/features/vite/bundlerLogs.js +17 -0
  272. package/dist/features/vite/definitionsSync.js +158 -226
  273. package/dist/features/vite/devAuthentication.js +4 -16
  274. package/dist/features/vite/devSignIn.js +87 -0
  275. package/dist/features/vite/iconGeneration.js +1 -1
  276. package/dist/features/vite/layoutGeneration.js +11 -1
  277. package/dist/features/vite/publishSeededContent.js +30 -0
  278. package/dist/features/vite/routeGeneration.js +6 -7
  279. package/dist/features/vite/runtimeDev.js +80 -99
  280. package/dist/features/vite/vite.d.ts +51 -31
  281. package/dist/features/vite/vite.js +224 -127
  282. package/dist/features/vite/workerBuild.js +39 -0
  283. package/dist/hooks/use-debounced-field.js +116 -47
  284. package/dist/hooks/use-file-upload.js +114 -67
  285. package/dist/hooks/use-marquee-selection.js +32 -36
  286. package/dist/hooks/use-page-destinations.js +69 -37
  287. package/dist/lib/api-client-server.d.ts +5 -0
  288. package/dist/lib/api-client-server.js +10 -4
  289. package/dist/lib/api-client.d.ts +6 -0
  290. package/dist/lib/api-client.js +51 -16
  291. package/dist/lib/api-socket.js +17 -0
  292. package/dist/lib/auth-page-styles.js +39 -0
  293. package/dist/lib/auth.js +129 -61
  294. package/dist/lib/collection-cache.js +23 -0
  295. package/dist/lib/draft-scope.d.ts +4 -0
  296. package/dist/lib/draft-scope.js +222 -0
  297. package/dist/lib/html.js +12 -0
  298. package/dist/lib/link-pages.js +154 -0
  299. package/dist/lib/locale-path.d.ts +22 -0
  300. package/dist/lib/locale-path.js +57 -0
  301. package/dist/lib/normalized-data.js +252 -152
  302. package/dist/lib/preview-handoff.js +2 -2
  303. package/dist/lib/queries.d.ts +11 -0
  304. package/dist/lib/queries.js +70 -141
  305. package/dist/lib/studio-reads.d.ts +14 -0
  306. package/dist/lib/studio-reads.js +554 -0
  307. package/dist/lib/use-project-room.js +50 -50
  308. package/dist/lib/use-thread.js +310 -0
  309. package/dist/lib/utils.js +25 -29
  310. package/dist/lib/view-locale-context.js +22 -0
  311. package/dist/lib/view-locale.js +46 -0
  312. package/dist/package.js +5 -0
  313. package/dist/studio-overlays.css +41 -151
  314. package/dist/studio.css +2 -2
  315. package/package.json +70 -73
  316. package/skills/camox/SKILL.md +16 -11
  317. package/skills/camox/references/artifacts.md +179 -0
  318. package/skills/camox/references/block-definitions.md +75 -59
  319. package/skills/camox/references/cli-common.md +9 -11
  320. package/skills/camox/references/cli-content.md +92 -69
  321. package/skills/camox/references/cli-publishing.md +26 -0
  322. package/skills/camox/references/dom-integrations.md +27 -0
  323. package/skills/camox/references/field-styling.md +4 -4
  324. package/skills/camox/references/layout-definitions.md +16 -14
  325. package/skills/camox/references/localization.md +56 -0
  326. package/skills/camox/references/routed-layouts.md +133 -15
  327. package/skills/camox-expand/SKILL.md +70 -0
  328. package/skills/camox-expand/references/jobs.md +39 -0
  329. package/skills/camoxify/SKILL.md +29 -7
  330. package/dist/core/components/AddBlockControlBar.js +0 -78
  331. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  332. package/dist/features/metadata/sitemap.d.ts +0 -8
  333. package/dist/features/metadata/sitemap.js +0 -17
  334. package/dist/features/og/imageResponse.node.d.ts +0 -12
  335. package/dist/features/og/imageResponse.node.js +0 -49
  336. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  337. package/dist/features/og/imageResponse.workerd.js +0 -40
  338. package/dist/features/page/PublishedPageContent.js +0 -205
  339. package/dist/features/page/PublishedPageExperience.js +0 -23
  340. package/dist/features/preview/DerivedPreview.js +0 -134
  341. package/dist/features/preview/commentsEnabled.js +0 -8
  342. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  343. package/dist/features/preview/components/AttachedComments.js +0 -331
  344. package/dist/features/preview/components/CommentHeader.js +0 -122
  345. package/dist/features/preview/components/CommentSidebar.js +0 -29
  346. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  347. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  348. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  349. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  350. package/dist/features/preview/components/LeftSidebar.js +0 -68
  351. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  352. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  353. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  354. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  355. package/dist/features/preview/components/PeekedBlock.js +0 -217
  356. package/dist/features/preview/components/PreviewComments.js +0 -56
  357. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  358. package/dist/features/preview/components/PublicationRow.js +0 -422
  359. package/dist/features/preview/components/PublishDialog.js +0 -194
  360. package/dist/features/preview/components/RightSidebar.js +0 -59
  361. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  362. package/dist/features/preview/previewCommentsStore.js +0 -135
  363. package/dist/features/preview/publication.js +0 -81
  364. package/dist/features/preview/usePageComments.js +0 -39
  365. package/dist/features/runtime/SharedChromeContext.js +0 -7
  366. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  367. package/dist/features/vite/appGeneration.js +0 -89
  368. package/dist/lib/view-queries.js +0 -28
  369. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  370. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  371. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  372. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  407. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,4 +1,6 @@
1
1
  import { getAuthCookieHeader, getAuthRequestCredentials } from "./auth.js";
2
+ import { localeHeaders } from "./locale-path.js";
3
+ import { DRAFT_HEADER, isContentWrite } from "@camox/api-contract/drafts";
2
4
  import { createORPCClient } from "@orpc/client";
3
5
  import { RPCLink } from "@orpc/client/fetch";
4
6
  import { createTanstackQueryUtils } from "@orpc/tanstack-query";
@@ -7,29 +9,57 @@ import { createTanstackQueryUtils } from "@orpc/tanstack-query";
7
9
  let _client = null;
8
10
  let _orpc = null;
9
11
  let _apiUrl = null;
10
- let _environmentName = null;
11
- function initApiClient(apiUrl, environmentName) {
12
+ let _draftScope = null;
13
+ const _readClients = /* @__PURE__ */ new Map();
14
+ /** Creates the window's API client, whose requests read and write the draft `draftScope` views. */
15
+ function initApiClient(apiUrl, draftScope) {
12
16
  _apiUrl = apiUrl;
13
- _environmentName = environmentName ?? null;
17
+ _draftScope = draftScope;
18
+ _readClients.clear();
19
+ _client = createStudioClient(apiUrl, (path) => draftScope.requestHeaders(isContentWrite(path)));
20
+ _orpc = createTanstackQueryUtils(_client);
21
+ return _client;
22
+ }
23
+ /**
24
+ * A client of the window's API whose requests name `draft` (null for Live) and `locale` (the
25
+ * default locale without it), whatever the studio views by the time they're sent. The studio's
26
+ * reads fetch through it, so a read caches only the draft and locale its key names.
27
+ */
28
+ function getDraftReadClient(draft, locale) {
29
+ const headers = {
30
+ ...draft && { [DRAFT_HEADER]: draft },
31
+ ...localeHeaders(locale)
32
+ };
33
+ const cacheKey = JSON.stringify(headers);
34
+ let client = _readClients.get(cacheKey);
35
+ if (client) return client;
36
+ client = createStudioClient(getApiUrl(), () => ({
37
+ headers,
38
+ settle: () => {}
39
+ }));
40
+ _readClients.set(cacheKey, client);
41
+ return client;
42
+ }
43
+ function createStudioClient(apiUrl, draftHeaders) {
14
44
  const headers = { "x-camox-client": "studio" };
15
- if (environmentName) headers["x-environment-name"] = environmentName;
16
45
  if (__CAMOX_TELEMETRY_DISABLED__) headers["x-camox-telemetry-disabled"] = "1";
17
- _client = createORPCClient(new RPCLink({
46
+ const link = new RPCLink({
18
47
  url: `${apiUrl}/rpc`,
19
48
  headers,
20
- fetch: (request, init) => {
49
+ fetch: async (request, init, _options, path) => {
21
50
  const authCookieHeader = getAuthCookieHeader();
22
- if (request instanceof Request) {
23
- if (authCookieHeader) request.headers.set("Better-Auth-Cookie", authCookieHeader);
24
- }
25
- return fetch(request, {
51
+ if (authCookieHeader) request.headers.set("Better-Auth-Cookie", authCookieHeader);
52
+ const draft = draftHeaders(path);
53
+ for (const [name, value] of Object.entries(draft.headers)) request.headers.set(name, value);
54
+ const response = await fetch(request, {
26
55
  ...init,
27
56
  credentials: getAuthRequestCredentials(authCookieHeader)
28
57
  });
58
+ draft.settle(response.ok);
59
+ return response;
29
60
  }
30
- }));
31
- _orpc = createTanstackQueryUtils(_client);
32
- return _client;
61
+ });
62
+ return createORPCClient(link);
33
63
  }
34
64
  function getApiClient() {
35
65
  if (!_client) throw new Error("API client not initialized — call initApiClient first");
@@ -43,9 +73,14 @@ function getApiUrl() {
43
73
  if (!_apiUrl) throw new Error("API client not initialized — call initApiClient first");
44
74
  return _apiUrl;
45
75
  }
46
- function getEnvironmentName() {
47
- return _environmentName;
76
+ /**
77
+ * Headers for a content write sent outside oRPC, such as a file upload: on Live it starts a draft
78
+ * like any other content write. Report the outcome through `settle`.
79
+ */
80
+ function getContentWriteHeaders() {
81
+ if (!_draftScope) throw new Error("API client not initialized — call initApiClient first");
82
+ return _draftScope.requestHeaders(true);
48
83
  }
49
84
 
50
85
  //#endregion
51
- export { getApiClient, getApiUrl, getEnvironmentName, getOrpc, initApiClient };
86
+ export { getApiClient, getApiUrl, getContentWriteHeaders, getDraftReadClient, getOrpc, initApiClient };
@@ -0,0 +1,17 @@
1
+ import { getAuthCookieHeader } from "./auth.js";
2
+
3
+ //#region src/lib/api-socket.ts
4
+ /**
5
+ * PartySocket options reaching the API at `apiUrl` as the signed-in editor. WebSocket upgrades
6
+ * can't carry custom headers, so the session is relayed in the query.
7
+ */
8
+ function apiSocketOptions(apiUrl) {
9
+ return {
10
+ host: apiUrl.replace(/^https?:\/\//, "").replace(/\/+$/, ""),
11
+ protocol: new URL(apiUrl).protocol === "http:" ? "ws" : "wss",
12
+ query: () => ({ _authCookie: getAuthCookieHeader() })
13
+ };
14
+ }
15
+
16
+ //#endregion
17
+ export { apiSocketOptions };
@@ -0,0 +1,39 @@
1
+ //#region src/lib/auth-page-styles.ts
2
+ const authPageStyles = `
3
+ .camox-auth-page {
4
+ align-items: center;
5
+ background: #09090b;
6
+ box-sizing: border-box;
7
+ color: #fafafa;
8
+ color-scheme: dark;
9
+ display: flex;
10
+ flex-direction: column;
11
+ font: 16px/1.5 Inter, ui-sans-serif, system-ui, sans-serif;
12
+ gap: 16px;
13
+ inset: 0;
14
+ justify-content: center;
15
+ margin: 0;
16
+ overflow: auto;
17
+ padding: 24px;
18
+ position: fixed;
19
+ text-align: center;
20
+ }
21
+ .camox-auth-page .camox-auth-spinner {
22
+ animation: camox-auth-spin 800ms linear infinite;
23
+ border: 2px solid #3f3f46;
24
+ border-radius: 999px;
25
+ border-top-color: #fafafa;
26
+ box-sizing: content-box;
27
+ flex-shrink: 0;
28
+ height: 24px;
29
+ width: 24px;
30
+ }
31
+ .camox-auth-page p { color: #a1a1aa; margin: 0; max-width: 32rem; }
32
+ @keyframes camox-auth-spin { to { transform: rotate(360deg); } }
33
+ @media (prefers-reduced-motion: reduce) {
34
+ .camox-auth-page .camox-auth-spinner { animation: none; }
35
+ }
36
+ `;
37
+
38
+ //#endregion
39
+ export { authPageStyles };
package/dist/lib/auth.js CHANGED
@@ -183,8 +183,10 @@ function createCamoxAuthClient(apiUrl) {
183
183
  * Verifies the token against the API backend and notifies the session store.
184
184
  *
185
185
  * Reports completion and explicit handoff failures instead of silently showing live content.
186
+ * Keeps the handoff marker until SSR confirms authentication on the subsequent load.
186
187
  */
187
- function useProcessOtt(authClient, target) {
188
+ function useProcessOtt(authClient, target, initialAuthenticated = false) {
189
+ const { projectUuid, apiUrl } = target;
188
190
  const [error, setError] = React.useState(null);
189
191
  const processing = React.useRef(false);
190
192
  const [ready, setReady] = React.useState(() => {
@@ -193,15 +195,25 @@ function useProcessOtt(authClient, target) {
193
195
  });
194
196
  React.useEffect(() => {
195
197
  const url = new URL(window.location.href);
196
- const targetError = validatePreviewTarget(url.searchParams.get("camox-preview"), target);
198
+ const targetError = validatePreviewTarget(url.searchParams.get("camox-preview"), {
199
+ projectUuid,
200
+ apiUrl
201
+ });
197
202
  if (targetError) {
198
203
  url.searchParams.delete("ott");
199
- window.history.replaceState({}, "", url);
204
+ window.history.replaceState(window.history.state, "", url);
200
205
  setError(targetError);
201
206
  setReady(true);
202
207
  return;
203
208
  }
204
- if (ready || processing.current) return;
209
+ if (ready) {
210
+ if (initialAuthenticated && !error && url.searchParams.has("camox-preview")) {
211
+ url.searchParams.delete("camox-preview");
212
+ window.history.replaceState(window.history.state, "", url);
213
+ }
214
+ return;
215
+ }
216
+ if (processing.current) return;
205
217
  const ott = url.searchParams.get("ott");
206
218
  if (!ott) {
207
219
  setReady(true);
@@ -209,7 +221,7 @@ function useProcessOtt(authClient, target) {
209
221
  }
210
222
  processing.current = true;
211
223
  url.searchParams.delete("ott");
212
- window.history.replaceState({}, "", url);
224
+ window.history.replaceState(window.history.state, "", url);
213
225
  (async () => {
214
226
  try {
215
227
  const verification = await authClient.oneTimeToken.verify({ token: ott });
@@ -225,9 +237,10 @@ function useProcessOtt(authClient, target) {
225
237
  }, [
226
238
  authClient,
227
239
  ready,
228
- target.projectSlug,
229
- target.environmentName,
230
- target.apiUrl
240
+ error,
241
+ initialAuthenticated,
242
+ projectUuid,
243
+ apiUrl
231
244
  ]);
232
245
  return {
233
246
  ready,
@@ -236,76 +249,131 @@ function useProcessOtt(authClient, target) {
236
249
  }
237
250
  const AuthContext = React.createContext(null);
238
251
  function useAuthContext() {
239
- const $ = c(1);
240
- if ($[0] !== "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525") {
241
- for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
242
- $[0] = "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525";
243
- }
244
252
  const ctx = React.useContext(AuthContext);
245
253
  if (!ctx) throw new Error("Missing CamoxProvider");
246
254
  return ctx;
247
255
  }
248
- function useProjectSlug() {
249
- const $ = c(1);
250
- if ($[0] !== "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525") {
251
- for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
252
- $[0] = "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525";
253
- }
254
- return useAuthContext().projectSlug;
256
+ function useProjectUuid() {
257
+ return useAuthContext().projectUuid;
255
258
  }
256
259
  const subscribeToHydration = () => () => {};
260
+ function hasStoredAuthCookie() {
261
+ return getCookie(localStorage.getItem("better-auth_cookie") || "{}") !== "";
262
+ }
263
+ const noSubscription = () => () => {};
264
+ /**
265
+ * The session, from the client's session store. Listening to the store fetches the session from
266
+ * the API, so an untracked session stays unfetched.
267
+ */
268
+ function useSessionState(authClient, track) {
269
+ const $ = c(4);
270
+ const sessionAtom = authClient.$store.atoms.session;
271
+ let t0;
272
+ if ($[0] !== sessionAtom) {
273
+ t0 = () => sessionAtom.value;
274
+ $[0] = sessionAtom;
275
+ $[1] = t0;
276
+ } else t0 = $[1];
277
+ const getSnapshot = t0;
278
+ let t1;
279
+ if ($[2] !== sessionAtom) {
280
+ t1 = (onChange) => sessionAtom.listen(onChange);
281
+ $[2] = sessionAtom;
282
+ $[3] = t1;
283
+ } else t1 = $[3];
284
+ const subscribe = t1;
285
+ return React.useSyncExternalStore(track ? subscribe : noSubscription, getSnapshot, getSnapshot);
286
+ }
257
287
  function useAuthState() {
258
- const { authClient, initialAuthenticated = false } = useAuthContext();
259
- const { data: session, isPending } = authClient.useSession();
260
- const useInitial = !React.useSyncExternalStore(subscribeToHydration, () => true, () => false) || isPending;
261
- return {
262
- isAuthenticated: useInitial ? initialAuthenticated : !!session,
263
- isLoading: useInitial && !initialAuthenticated
264
- };
288
+ const $ = c(9);
289
+ const { authClient, initialAuthenticated: t0, exchangingToken: t1 } = useAuthContext();
290
+ const initialAuthenticated = t0 === void 0 ? false : t0;
291
+ const exchangingToken = t1 === void 0 ? false : t1;
292
+ const hydrated = React.useSyncExternalStore(subscribeToHydration, _temp2, _temp3);
293
+ let t2;
294
+ if ($[0] !== hydrated || $[1] !== initialAuthenticated) {
295
+ t2 = initialAuthenticated || hydrated && hasStoredAuthCookie();
296
+ $[0] = hydrated;
297
+ $[1] = initialAuthenticated;
298
+ $[2] = t2;
299
+ } else t2 = $[2];
300
+ const tracksSession = t2;
301
+ const { data: session, isPending } = useSessionState(authClient, tracksSession);
302
+ if (exchangingToken && !initialAuthenticated) {
303
+ let t3;
304
+ if ($[3] === Symbol.for("react.memo_cache_sentinel")) {
305
+ t3 = {
306
+ isAuthenticated: false,
307
+ isLoading: true
308
+ };
309
+ $[3] = t3;
310
+ } else t3 = $[3];
311
+ return t3;
312
+ }
313
+ if (!tracksSession) {
314
+ const t3 = !hydrated;
315
+ let t4;
316
+ if ($[4] !== t3) {
317
+ t4 = {
318
+ isAuthenticated: false,
319
+ isLoading: t3
320
+ };
321
+ $[4] = t3;
322
+ $[5] = t4;
323
+ } else t4 = $[5];
324
+ return t4;
325
+ }
326
+ const useInitial = !hydrated || isPending;
327
+ const t3 = useInitial ? initialAuthenticated : !!session;
328
+ const t4 = useInitial && !initialAuthenticated;
329
+ let t5;
330
+ if ($[6] !== t3 || $[7] !== t4) {
331
+ t5 = {
332
+ isAuthenticated: t3,
333
+ isLoading: t4
334
+ };
335
+ $[6] = t3;
336
+ $[7] = t4;
337
+ $[8] = t5;
338
+ } else t5 = $[8];
339
+ return t5;
340
+ }
341
+ function _temp3() {
342
+ return false;
343
+ }
344
+ function _temp2() {
345
+ return true;
265
346
  }
266
347
  function useIsAuthenticated() {
267
- const $ = c(1);
268
- if ($[0] !== "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525") {
269
- for (let $i = 0; $i < 1; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
270
- $[0] = "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525";
271
- }
272
348
  const { isAuthenticated } = useAuthState();
273
349
  return isAuthenticated;
274
350
  }
275
351
  function useSignInRedirect(callbackHref) {
276
- const $ = c(4);
277
- if ($[0] !== "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525") {
278
- for (let $i = 0; $i < 4; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
279
- $[0] = "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525";
280
- }
352
+ const $ = c(3);
281
353
  const { authenticationUrl } = useAuthContext();
282
354
  let t0;
283
- if ($[1] !== authenticationUrl || $[2] !== callbackHref) {
355
+ if ($[0] !== authenticationUrl || $[1] !== callbackHref) {
284
356
  t0 = () => {
285
357
  if (typeof window === "undefined") return;
286
358
  const href = typeof callbackHref === "function" ? callbackHref() : callbackHref;
287
359
  const callback = encodeURIComponent(href ?? window.location.href);
288
360
  window.location.href = `${authenticationUrl}/studio-authorize?callback=${callback}`;
289
361
  };
290
- $[1] = authenticationUrl;
291
- $[2] = callbackHref;
292
- $[3] = t0;
293
- } else t0 = $[3];
362
+ $[0] = authenticationUrl;
363
+ $[1] = callbackHref;
364
+ $[2] = t0;
365
+ } else t0 = $[2];
294
366
  return t0;
295
367
  }
296
368
  /**
297
369
  * Registers sign-out and manage-account actions in the command palette.
298
370
  */
299
371
  function useAuthActions() {
300
- const $ = c(5);
301
- if ($[0] !== "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525") {
302
- for (let $i = 0; $i < 5; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
303
- $[0] = "2870dba5d074cbe2d9a238f9ae39bb51493bf31c0dd30caa79404003309e1525";
304
- }
372
+ const $ = c(4);
305
373
  const { authClient, authenticationUrl } = useAuthContext();
306
374
  let t0;
307
375
  let t1;
308
- if ($[1] !== authClient || $[2] !== authenticationUrl) {
376
+ if ($[0] !== authClient || $[1] !== authenticationUrl) {
309
377
  t0 = () => {
310
378
  actionsStore.send({
311
379
  type: "registerManyActions",
@@ -318,7 +386,7 @@ function useAuthActions() {
318
386
  "User settings"
319
387
  ],
320
388
  groupLabel: "Studio",
321
- checkIfAvailable: _temp,
389
+ checkIfAvailable: _temp4,
322
390
  execute: () => {
323
391
  window.open(`${authenticationUrl}/profile`, "_blank");
324
392
  }
@@ -327,35 +395,35 @@ function useAuthActions() {
327
395
  label: "Log out",
328
396
  aliases: ["Sign out", "Logout"],
329
397
  groupLabel: "Studio",
330
- checkIfAvailable: _temp2,
398
+ checkIfAvailable: _temp5,
331
399
  execute: () => authClient.signOut()
332
400
  }]
333
401
  });
334
- return _temp3;
402
+ return _temp6;
335
403
  };
336
404
  t1 = [authClient, authenticationUrl];
337
- $[1] = authClient;
338
- $[2] = authenticationUrl;
339
- $[3] = t0;
340
- $[4] = t1;
405
+ $[0] = authClient;
406
+ $[1] = authenticationUrl;
407
+ $[2] = t0;
408
+ $[3] = t1;
341
409
  } else {
342
- t0 = $[3];
343
- t1 = $[4];
410
+ t0 = $[2];
411
+ t1 = $[3];
344
412
  }
345
413
  React.useEffect(t0, t1);
346
414
  }
347
- function _temp3() {
415
+ function _temp6() {
348
416
  actionsStore.send({
349
417
  type: "unregisterManyActions",
350
418
  ids: ["manage-account", "log-out"]
351
419
  });
352
420
  }
353
- function _temp2() {
421
+ function _temp5() {
354
422
  return true;
355
423
  }
356
- function _temp() {
424
+ function _temp4() {
357
425
  return true;
358
426
  }
359
427
 
360
428
  //#endregion
361
- export { AuthContext, createCamoxAuthClient, getAuthCookieHeader, getAuthRequestCredentials, useAuthActions, useAuthContext, useAuthState, useIsAuthenticated, useProcessOtt, useProjectSlug, useSignInRedirect };
429
+ export { AuthContext, createCamoxAuthClient, getAuthCookieHeader, getAuthRequestCredentials, useAuthActions, useAuthContext, useAuthState, useIsAuthenticated, useProcessOtt, useProjectUuid, useSignInRedirect };
@@ -0,0 +1,23 @@
1
+ import { queryKeys } from "@camox/api-contract/query-keys";
2
+
3
+ //#region src/lib/collection-cache.ts
4
+ /**
5
+ * Refreshes a collection's records in every placement, in every scope, as the API's broadcast
6
+ * after a record edit does, so the edit shows even without a realtime connection.
7
+ */
8
+ function invalidateCollectionRecordViews(studioCache, projectUuid, collectionId) {
9
+ return studioCache.receive({
10
+ type: "invalidate",
11
+ draftId: null,
12
+ targets: [
13
+ queryKeys.collections.records(projectUuid, collectionId),
14
+ ["camox", "blocks"],
15
+ queryKeys.pages.getByPathAll,
16
+ queryKeys.pages.list,
17
+ queryKeys.layouts.all
18
+ ]
19
+ }, 0);
20
+ }
21
+
22
+ //#endregion
23
+ export { invalidateCollectionRecordViews };
@@ -0,0 +1,4 @@
1
+ import "../features/routes/pageRuntime.js";
2
+ import "react";
3
+ import { EndedDraft } from "@camox/api-contract/drafts";
4
+ import { QueryClient } from "@tanstack/react-query";