camox 0.44.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (411) hide show
  1. package/dist/components/AuthGate.js +0 -6
  2. package/dist/components/DeviceSelector.js +96 -0
  3. package/dist/components/PlatformLabel.js +20 -24
  4. package/dist/core/components/lexical/HighlightNode.js +1 -1
  5. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  6. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  7. package/dist/core/components/lexical/InlineStylesPlugin.js +53 -53
  8. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  9. package/dist/core/components/lexical/SelectionBroadcaster.js +53 -54
  10. package/dist/core/components/lexical/SidebarLexicalEditor.js +322 -229
  11. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  12. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  13. package/dist/core/createApp.d.ts +241 -312
  14. package/dist/core/createApp.js +123 -29
  15. package/dist/core/createBlock.d.ts +5 -5
  16. package/dist/core/createBlock.js +385 -152
  17. package/dist/core/createCollection.d.ts +55 -0
  18. package/dist/core/createCollection.js +93 -0
  19. package/dist/core/createLayout.d.ts +197 -61
  20. package/dist/core/createLayout.js +114 -56
  21. package/dist/core/defineDocument.d.ts +3 -5
  22. package/dist/core/derivedRoutes.js +49 -1
  23. package/dist/core/dom.d.ts +13 -4
  24. package/dist/core/dom.js +44 -1
  25. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  26. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  27. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  28. package/dist/core/editing/createEditableBlock.d.ts +754 -633
  29. package/dist/core/editing/createEditableBlock.js +2113 -1066
  30. package/dist/core/editing/referenceWrites.js +51 -0
  31. package/dist/core/editing/useLatestRecord.js +90 -0
  32. package/dist/core/hooks/useArtifactHost.js +139 -0
  33. package/dist/core/hooks/useFieldSelection.js +43 -18
  34. package/dist/core/hooks/useIsEditable.js +12 -10
  35. package/dist/core/hooks/useOverlayMessage.js +15 -19
  36. package/dist/core/lib/artifact.d.ts +21 -0
  37. package/dist/core/lib/artifact.js +154 -0
  38. package/dist/core/lib/artifactColors.js +123 -0
  39. package/dist/core/lib/artifactData.d.ts +1 -0
  40. package/dist/core/lib/artifactData.js +131 -0
  41. package/dist/core/lib/artifactHost.js +205 -0
  42. package/dist/core/lib/artifactRuntime.js +36 -0
  43. package/dist/core/lib/artifactTheme.js +57 -0
  44. package/dist/core/lib/contentType.d.ts +302 -106
  45. package/dist/core/lib/contentType.js +201 -173
  46. package/dist/core/lib/fieldTypes.js +3 -0
  47. package/dist/core/lib/iconTypes.d.ts +3 -3
  48. package/dist/core/lib/icons.d.ts +4 -4
  49. package/dist/core/lib/icons.js +40 -44
  50. package/dist/core/lib/imagePlaceholder.js +177 -0
  51. package/dist/core/lib/imageTransform.js +1 -1
  52. package/dist/core/lib/lexicalReact.d.ts +3 -1
  53. package/dist/core/lib/lexicalState.js +1 -1
  54. package/dist/core/lib/previewPaused.js +9 -0
  55. package/dist/core/lib/recordScope.js +316 -0
  56. package/dist/core/lib/reference.d.ts +81 -0
  57. package/dist/core/lib/reference.js +29 -0
  58. package/dist/core/lib/textLinks.js +7 -5
  59. package/dist/core/lib/textStyles.d.ts +5 -7
  60. package/dist/core/lib/textStyles.js +2 -2
  61. package/dist/core/notFound.d.ts +7 -0
  62. package/dist/core/notFound.js +11 -0
  63. package/dist/core/pageDestinations.js +6 -3
  64. package/dist/core/recordItem.js +34 -0
  65. package/dist/core/requestContext.d.ts +26 -0
  66. package/dist/core/requestContext.js +20 -0
  67. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  68. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  69. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  70. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  71. package/dist/features/canvas/CanvasOverlays.js +254 -0
  72. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  73. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  74. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  75. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  76. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  77. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  78. package/dist/features/canvas/canvasCamera.js +229 -0
  79. package/dist/features/canvas/canvasFlight.js +104 -0
  80. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  81. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  82. package/dist/features/canvas/canvasFrameMode.js +53 -0
  83. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  84. package/dist/features/canvas/canvasItems.js +120 -0
  85. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  86. package/dist/features/canvas/canvasPages.js +79 -0
  87. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  88. package/dist/features/canvas/canvasSelection.js +18 -0
  89. package/dist/features/canvas/canvasStore.js +149 -0
  90. package/dist/features/canvas/canvasThumbnails.js +304 -0
  91. package/dist/features/canvas/canvasZoom.js +10 -0
  92. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  93. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  94. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  95. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  97. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  98. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  99. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  100. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  101. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  102. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  103. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  104. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  105. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  106. package/dist/features/canvas/useCanvasCamera.js +803 -0
  107. package/dist/features/canvas/useCanvasFrame.js +149 -0
  108. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  109. package/dist/features/canvas/useCanvasNearness.js +57 -0
  110. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  111. package/dist/features/content/CamoxContent.d.ts +2 -5
  112. package/dist/features/content/CamoxContent.js +174 -271
  113. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  114. package/dist/features/content/ContentAssets.js +315 -0
  115. package/dist/features/content/ContentCollection.js +663 -0
  116. package/dist/features/content/collection-form.js +58 -0
  117. package/dist/features/content/components/AssetCard.js +80 -84
  118. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  119. package/dist/features/content/components/ContentSidebar.js +129 -18
  120. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  121. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  122. package/dist/features/content/components/MissingFromLocale.js +282 -0
  123. package/dist/features/content/components/UploadDropZone.js +27 -31
  124. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  125. package/dist/features/navigation/navigation.d.ts +66 -20
  126. package/dist/features/navigation/navigation.js +257 -90
  127. package/dist/features/og/defaultFonts.js +8 -8
  128. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  129. package/dist/features/og/imageResponse.d.ts +8 -0
  130. package/dist/features/og/imageResponse.js +26 -0
  131. package/dist/features/page/CuratedPageContent.js +167 -0
  132. package/dist/features/page/DerivedPageContent.js +26 -30
  133. package/dist/features/page/SharedLayoutContent.js +25 -27
  134. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  135. package/dist/features/preview/CamoxPreview.js +816 -537
  136. package/dist/features/preview/EditablePageContent.js +1 -1
  137. package/dist/features/preview/EditablePageExperience.js +16 -22
  138. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  139. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  140. package/dist/features/preview/components/AssetLightbox.js +181 -134
  141. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  142. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  143. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  144. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  145. package/dist/features/preview/components/CanvasPreview.js +243 -0
  146. package/dist/features/preview/components/CreatePageModal.js +128 -137
  147. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  148. package/dist/features/preview/components/DerivedLayoutDialog.js +21 -19
  149. package/dist/features/preview/components/DrillRow.js +150 -0
  150. package/dist/features/preview/components/FieldOverlayStyles.js +11 -8
  151. package/dist/features/preview/components/FieldToolbar.js +160 -110
  152. package/dist/features/preview/components/Frame.js +108 -20
  153. package/dist/features/preview/components/IconFieldEditor.js +62 -66
  154. package/dist/features/preview/components/ItemFieldsEditor.js +231 -205
  155. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  156. package/dist/features/preview/components/Metadata.js +22 -30
  157. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  158. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  159. package/dist/features/preview/components/OverlayTracker.js +9 -41
  160. package/dist/features/preview/components/Overlays.js +81 -69
  161. package/dist/features/preview/components/PageInfo.js +1748 -0
  162. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  163. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  164. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  165. package/dist/features/preview/components/PageNicknameField.js +22 -26
  166. package/dist/features/preview/components/PagePicker.js +128 -130
  167. package/dist/features/preview/components/PageTree.js +525 -532
  168. package/dist/features/preview/components/PreviewActivation.js +28 -32
  169. package/dist/features/preview/components/PreviewPanel.js +620 -319
  170. package/dist/features/preview/components/PreviewToolbar.js +105 -333
  171. package/dist/features/preview/components/RecordCard.js +80 -0
  172. package/dist/features/preview/components/RecordCombobox.js +178 -0
  173. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  174. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  175. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  176. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  177. package/dist/features/preview/components/SelectionEditor.js +993 -0
  178. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  179. package/dist/features/preview/components/SidebarSection.js +52 -64
  180. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  181. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  182. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  183. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  184. package/dist/features/preview/components/useFieldWriter.js +200 -0
  185. package/dist/features/preview/components/useRecordView.js +383 -0
  186. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  187. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  188. package/dist/features/preview/editingFrame.js +197 -0
  189. package/dist/features/preview/overlayHighlights.js +17 -44
  190. package/dist/features/preview/overlayMessages.js +72 -1
  191. package/dist/features/preview/pageRecord.js +189 -0
  192. package/dist/features/preview/previewConstants.js +6 -2
  193. package/dist/features/preview/previewPageFrame.js +95 -0
  194. package/dist/features/preview/previewPreparation.js +7 -0
  195. package/dist/features/preview/previewSelection.js +32 -63
  196. package/dist/features/preview/previewStore.js +225 -123
  197. package/dist/features/preview/referencePickerFocus.js +29 -0
  198. package/dist/features/preview/repeatableItemTargets.js +56 -0
  199. package/dist/features/preview/selectionReveal.js +21 -0
  200. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  201. package/dist/features/preview/viewportContinuity.js +109 -0
  202. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  203. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  204. package/dist/features/provider/CamoxProvider.js +38 -50
  205. package/dist/features/provider/CoreCamoxProvider.js +66 -50
  206. package/dist/features/provider/LocalhostPreviewProvider.js +78 -114
  207. package/dist/features/provider/PreviewSignInPage.js +54 -0
  208. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  209. package/dist/features/provider/components/CommandPalette.js +75 -82
  210. package/dist/features/provider/useAdminShortcuts.js +7 -11
  211. package/dist/features/routes/pageRuntime.d.ts +44 -4
  212. package/dist/features/routes/pageRuntime.js +244 -137
  213. package/dist/features/runtime/RuntimeChrome.js +117 -115
  214. package/dist/features/runtime/alternates.js +64 -0
  215. package/dist/features/runtime/analytics.d.ts +7 -0
  216. package/dist/features/runtime/analytics.js +66 -0
  217. package/dist/features/runtime/artifactSources.js +87 -0
  218. package/dist/features/runtime/editingFallback.js +20 -0
  219. package/dist/features/runtime/linkPrefetch.js +97 -0
  220. package/dist/features/runtime/livePages.js +62 -0
  221. package/dist/features/runtime/llmsTxt.js +40 -0
  222. package/dist/features/runtime/loopbackFetch.js +18 -0
  223. package/dist/features/runtime/navigationAccessibility.js +51 -0
  224. package/dist/features/runtime/navigationTarget.js +23 -2
  225. package/dist/features/runtime/pageApp.js +229 -158
  226. package/dist/features/runtime/pageBlockTypes.js +20 -0
  227. package/dist/features/runtime/pageClient.d.ts +2 -4
  228. package/dist/features/runtime/pageClient.js +18 -3
  229. package/dist/features/runtime/pageNavigation.js +254 -32
  230. package/dist/features/runtime/pageServer.d.ts +2 -4
  231. package/dist/features/runtime/pageServer.js +6 -2
  232. package/dist/features/runtime/pageViewport.js +7 -0
  233. package/dist/features/runtime/runtime.d.ts +59 -24
  234. package/dist/features/runtime/runtime.js +779 -191
  235. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  236. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  237. package/dist/features/runtime/runtimeRoutes.js +25 -0
  238. package/dist/features/runtime/scrollRestoration.js +133 -0
  239. package/dist/features/runtime/studioApp.d.ts +4 -3
  240. package/dist/features/runtime/studioApp.js +5 -9
  241. package/dist/features/runtime/studioClient.d.ts +2 -4
  242. package/dist/features/runtime/studioClient.js +12 -3
  243. package/dist/features/runtime/studioServer.d.ts +2 -4
  244. package/dist/features/runtime/studioServer.js +6 -1
  245. package/dist/features/runtime/worker.d.ts +6 -0
  246. package/dist/features/runtime/worker.js +23 -0
  247. package/dist/features/runtime/workerRequest.js +44 -0
  248. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  249. package/dist/features/studio/CamoxStudio.js +34 -49
  250. package/dist/features/studio/FollowAgentProvider.js +338 -0
  251. package/dist/features/studio/components/ChatSidebar.js +356 -0
  252. package/dist/features/studio/components/DraftsControl.js +676 -0
  253. package/dist/features/studio/components/FaviconDialog.js +318 -0
  254. package/dist/features/studio/components/LocalePicker.js +785 -0
  255. package/dist/features/studio/components/Navbar.js +123 -103
  256. package/dist/features/studio/components/ProjectMenu.js +239 -260
  257. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  258. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  259. package/dist/features/studio/components/ThreadComposer.js +157 -0
  260. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  261. package/dist/features/studio/components/ThreadMessages.js +270 -0
  262. package/dist/features/studio/components/UserButton.js +34 -23
  263. package/dist/features/studio/draftLabel.js +33 -0
  264. package/dist/features/studio/draftNotice.js +13 -0
  265. package/dist/features/studio/followAgent.js +250 -0
  266. package/dist/features/studio/followAgentContext.js +7 -0
  267. package/dist/features/studio/localeOptions.js +118 -0
  268. package/dist/features/studio/localeSwitch.js +19 -0
  269. package/dist/features/studio/routes.js +48 -1
  270. package/dist/features/studio/studioStore.js +64 -1
  271. package/dist/features/studio/useTheme.js +24 -27
  272. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  273. package/dist/features/vite/blockBoilerplate.js +6 -5
  274. package/dist/features/vite/blockChunks.js +31 -0
  275. package/dist/features/vite/bundlerLogs.js +17 -0
  276. package/dist/features/vite/definitionsSync.js +158 -226
  277. package/dist/features/vite/devAuthentication.js +4 -16
  278. package/dist/features/vite/devSignIn.js +87 -0
  279. package/dist/features/vite/iconGeneration.js +1 -1
  280. package/dist/features/vite/layoutGeneration.js +11 -1
  281. package/dist/features/vite/publishSeededContent.js +30 -0
  282. package/dist/features/vite/routeGeneration.js +6 -7
  283. package/dist/features/vite/runtimeDev.js +80 -99
  284. package/dist/features/vite/vite.d.ts +51 -31
  285. package/dist/features/vite/vite.js +224 -127
  286. package/dist/features/vite/workerBuild.js +39 -0
  287. package/dist/hooks/use-debounced-field.js +116 -47
  288. package/dist/hooks/use-file-upload.js +114 -67
  289. package/dist/hooks/use-marquee-selection.js +32 -36
  290. package/dist/hooks/use-page-destinations.js +69 -37
  291. package/dist/lib/api-client-server.d.ts +5 -0
  292. package/dist/lib/api-client-server.js +10 -4
  293. package/dist/lib/api-client.d.ts +6 -0
  294. package/dist/lib/api-client.js +51 -16
  295. package/dist/lib/api-socket.js +17 -0
  296. package/dist/lib/auth-page-styles.js +39 -0
  297. package/dist/lib/auth.js +117 -61
  298. package/dist/lib/collection-cache.js +23 -0
  299. package/dist/lib/draft-scope.d.ts +4 -0
  300. package/dist/lib/draft-scope.js +222 -0
  301. package/dist/lib/html.js +12 -0
  302. package/dist/lib/link-pages.js +154 -0
  303. package/dist/lib/locale-path.d.ts +22 -0
  304. package/dist/lib/locale-path.js +57 -0
  305. package/dist/lib/normalized-data.js +252 -152
  306. package/dist/lib/preview-handoff.js +2 -2
  307. package/dist/lib/queries.d.ts +11 -0
  308. package/dist/lib/queries.js +70 -141
  309. package/dist/lib/studio-reads.d.ts +14 -0
  310. package/dist/lib/studio-reads.js +574 -0
  311. package/dist/lib/use-project-room.js +50 -50
  312. package/dist/lib/use-thread.js +310 -0
  313. package/dist/lib/utils.js +25 -29
  314. package/dist/lib/view-locale-context.js +22 -0
  315. package/dist/lib/view-locale.js +46 -0
  316. package/dist/package.js +5 -0
  317. package/dist/studio-overlays.css +41 -151
  318. package/dist/studio.css +2 -2
  319. package/package.json +70 -73
  320. package/skills/camox/SKILL.md +16 -11
  321. package/skills/camox/references/artifacts.md +179 -0
  322. package/skills/camox/references/block-definitions.md +75 -59
  323. package/skills/camox/references/cli-common.md +9 -11
  324. package/skills/camox/references/cli-content.md +92 -69
  325. package/skills/camox/references/cli-publishing.md +26 -0
  326. package/skills/camox/references/dom-integrations.md +27 -0
  327. package/skills/camox/references/field-styling.md +4 -4
  328. package/skills/camox/references/layout-definitions.md +16 -14
  329. package/skills/camox/references/localization.md +56 -0
  330. package/skills/camox/references/routed-layouts.md +133 -15
  331. package/skills/camox-expand/SKILL.md +69 -0
  332. package/skills/camox-expand/references/jobs.md +39 -0
  333. package/skills/camoxify/SKILL.md +29 -7
  334. package/dist/core/components/AddBlockControlBar.js +0 -78
  335. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  336. package/dist/features/metadata/sitemap.d.ts +0 -8
  337. package/dist/features/metadata/sitemap.js +0 -17
  338. package/dist/features/og/imageResponse.node.d.ts +0 -12
  339. package/dist/features/og/imageResponse.node.js +0 -49
  340. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  341. package/dist/features/og/imageResponse.workerd.js +0 -40
  342. package/dist/features/page/PublishedPageContent.js +0 -205
  343. package/dist/features/page/PublishedPageExperience.js +0 -23
  344. package/dist/features/preview/DerivedPreview.js +0 -134
  345. package/dist/features/preview/commentsEnabled.js +0 -8
  346. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  347. package/dist/features/preview/components/AttachedComments.js +0 -331
  348. package/dist/features/preview/components/CommentHeader.js +0 -122
  349. package/dist/features/preview/components/CommentSidebar.js +0 -29
  350. package/dist/features/preview/components/CommentTargetQuote.js +0 -167
  351. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  352. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  353. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  354. package/dist/features/preview/components/LeftSidebar.js +0 -68
  355. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  356. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  357. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  358. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  359. package/dist/features/preview/components/PeekedBlock.js +0 -217
  360. package/dist/features/preview/components/PreviewComments.js +0 -56
  361. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  362. package/dist/features/preview/components/PublicationRow.js +0 -422
  363. package/dist/features/preview/components/PublishDialog.js +0 -194
  364. package/dist/features/preview/components/RightSidebar.js +0 -59
  365. package/dist/features/preview/components/SendFeedbackDialog.js +0 -83
  366. package/dist/features/preview/previewCommentsStore.js +0 -135
  367. package/dist/features/preview/publication.js +0 -81
  368. package/dist/features/preview/usePageComments.js +0 -39
  369. package/dist/features/runtime/SharedChromeContext.js +0 -7
  370. package/dist/features/studio/components/EnvironmentMenu.js +0 -425
  371. package/dist/features/vite/appGeneration.js +0 -89
  372. package/dist/lib/view-queries.js +0 -28
  373. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  411. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,7 +1,16 @@
1
+ import { attachArtifactData } from "./artifactData.js";
2
+ import { referenceQueryProblem } from "@camox/api-contract";
1
3
  import { Type } from "@sinclair/typebox";
4
+ import { uuidv7JsonSchema } from "@camox/api-contract/ids";
2
5
 
3
6
  //#region src/core/lib/contentType.ts
7
+ /** A collection's content field named `key`, if it has one. */
8
+ function collectionField(collection, key) {
9
+ const properties = collection?._internal.contentSchema.properties;
10
+ return properties && Object.hasOwn(properties, key) ? properties[key] : void 0;
11
+ }
4
12
  var FieldToken = class {
13
+ fieldName;
5
14
  constructor(fieldName) {
6
15
  this.fieldName = fieldName;
7
16
  }
@@ -15,6 +24,10 @@ var FieldToken = class {
15
24
  * server-side resolver knows whether to read from `settings` or `itemSettings`.
16
25
  */
17
26
  var Conditional = class {
27
+ scope;
28
+ settingName;
29
+ enumValue;
30
+ children;
18
31
  constructor(scope, settingName, enumValue, children) {
19
32
  this.scope = scope;
20
33
  this.settingName = settingName;
@@ -30,10 +43,13 @@ var Conditional = class {
30
43
  return "{{/if}}";
31
44
  }
32
45
  };
33
- function createContentProxy() {
46
+ function createContentProxy(shape, prefix = "") {
34
47
  return new Proxy({}, { get(_target, prop) {
35
48
  if (typeof prop !== "string") return void 0;
36
- return new FieldToken(prop);
49
+ const path = prefix ? `${prefix}.${prop}` : prop;
50
+ const field = shape?.[prop];
51
+ if (field?.fieldType === "Reference") return createContentProxy(field.referenceSchema.properties, path);
52
+ return new FieldToken(path);
37
53
  } });
38
54
  }
39
55
  function createSettingsProxy(settingsShape, scope) {
@@ -52,13 +68,22 @@ function serializeConditional(cond) {
52
68
  else out.push(`${cond.openTag}${String(child)}${cond.closeTag}`);
53
69
  return out;
54
70
  }
55
- function resolveToMarkdown(builder, settingsShape, scope) {
56
- const entries = builder(createContentProxy(), createSettingsProxy(settingsShape, scope));
71
+ function resolveToMarkdown(builder, settingsShape, scope, contentShape) {
72
+ const entries = builder(createContentProxy(contentShape), createSettingsProxy(settingsShape, scope));
57
73
  const out = [];
58
74
  for (const entry of entries) if (entry instanceof Conditional) out.push(...serializeConditional(entry));
59
75
  else out.push(entry instanceof FieldToken ? entry.toString() : String(entry));
60
76
  return out;
61
77
  }
78
+ /** The longest artifact source content writes accept (256 KB). */
79
+ const ARTIFACT_MAX_LENGTH = 262144;
80
+ const IMAGE_PLACEHOLDER = Symbol("camox.imagePlaceholder");
81
+ function isImagePlaceholder(value) {
82
+ return typeof Reflect.get(value, IMAGE_PLACEHOLDER) === "string" && !value._fileId;
83
+ }
84
+ function getImagePlaceholderTitle(value) {
85
+ return Reflect.get(value, IMAGE_PLACEHOLDER);
86
+ }
62
87
  function _imageSingle(options) {
63
88
  return Type.Unsafe({
64
89
  type: "object",
@@ -69,11 +94,13 @@ function _imageSingle(options) {
69
94
  mimeType: { type: "string" }
70
95
  },
71
96
  accept: ["image/*"],
97
+ required: options.required ?? false,
72
98
  default: {
73
99
  url: `https://placehold.co/1200x800/f4f4f5/a1a1aa.png?text=${options?.title || "image"}`,
74
100
  alt: "",
75
101
  filename: "placeholder.png",
76
- mimeType: "image/png"
102
+ mimeType: "image/png",
103
+ [IMAGE_PLACEHOLDER]: options.title || "image"
77
104
  },
78
105
  title: options.title,
79
106
  fieldType: "Image"
@@ -99,6 +126,7 @@ function _fileSingle(options) {
99
126
  mimeType: { type: "string" }
100
127
  },
101
128
  accept: options.accept,
129
+ required: options.required ?? false,
102
130
  default: {
103
131
  url: "https://placehold.co/file-placeholder",
104
132
  alt: "",
@@ -123,11 +151,94 @@ function _fileList(options) {
123
151
  });
124
152
  }
125
153
  /**
126
- * Type builders for createBlock content schemas.
127
- * All fields must have default values.
154
+ * Checks a query against its collection, for callers that bypass the types (computed limits
155
+ * included); definition sync applies the same rules.
128
156
  */
129
- const Type$1 = {
130
- Icon: (options) => {
157
+ function validateQuery(query, collection) {
158
+ const problem = referenceQueryProblem(query, (key) => collectionField(collection, key)?.fieldType);
159
+ if (problem) throw new Error(`Query on "${collection._internal.id}": ${problem}`);
160
+ return query;
161
+ }
162
+ const settingKinds = /* @__PURE__ */ new Set(["Enum", "Boolean"]);
163
+ /** Builders are typed per context; this guards callers that bypass the types. */
164
+ function assertFieldKinds(shape, context, owner) {
165
+ for (const [key, field] of Object.entries(shape)) {
166
+ const isSetting = settingKinds.has(field.fieldType);
167
+ if (context === "settings" && !isSetting) throw new Error(`${owner} setting "${key}" must be an enum or a boolean`);
168
+ if (context === "content" && isSetting) throw new Error(`${owner} field "${key}": ${field.fieldType} is a setting, not content`);
169
+ }
170
+ }
171
+ function collectSchemaDefaults(properties) {
172
+ const defaults = {};
173
+ for (const [key, prop] of Object.entries(properties)) if ("default" in prop) defaults[key] = prop.default;
174
+ return defaults;
175
+ }
176
+ const enumSetting = (options) => Type.Unsafe({
177
+ type: "string",
178
+ enum: Object.keys(options.options),
179
+ default: options.default,
180
+ title: options.title,
181
+ enumLabels: options.options,
182
+ fieldType: "Enum"
183
+ });
184
+ const booleanSetting = (options) => Type.Boolean({
185
+ default: options.default,
186
+ title: options.title,
187
+ fieldType: "Boolean"
188
+ });
189
+ const settingBuilder = {
190
+ enum: enumSetting,
191
+ boolean: booleanSetting
192
+ };
193
+ const contentFieldBuilder = {
194
+ string: (options) => Type.Unsafe({
195
+ type: "string",
196
+ ...options,
197
+ fieldType: "String"
198
+ }),
199
+ link: (options) => Type.Unsafe({
200
+ type: "object",
201
+ properties: {
202
+ type: {
203
+ type: "string",
204
+ enum: ["external", "page"]
205
+ },
206
+ text: { type: "string" },
207
+ href: { type: "string" },
208
+ pageId: { anyOf: [{ const: "" }, uuidv7JsonSchema] },
209
+ newTab: { type: "boolean" }
210
+ },
211
+ default: {
212
+ ...options.default,
213
+ type: "external"
214
+ },
215
+ title: options.title,
216
+ fieldType: "Link"
217
+ }),
218
+ image: (options = {}) => _imageSingle(options),
219
+ imageList: (options = {}) => _imageList(options),
220
+ file: (options) => _fileSingle(options),
221
+ fileList: (options) => _fileList(options),
222
+ embed: (options) => {
223
+ if (!new RegExp(options.pattern).test(options.default)) throw new Error(`Embed default value "${options.default}" does not match pattern "${options.pattern}"`);
224
+ return Type.Unsafe({
225
+ type: "string",
226
+ pattern: options.pattern,
227
+ default: options.default,
228
+ title: options.title,
229
+ fieldType: "Embed"
230
+ });
231
+ },
232
+ artifact: (options) => Type.Unsafe({
233
+ type: "string",
234
+ maxLength: ARTIFACT_MAX_LENGTH,
235
+ size: options.size,
236
+ ...options.data?.length ? { data: [...options.data] } : {},
237
+ default: options.default ?? "",
238
+ title: options.title,
239
+ fieldType: "Artifact"
240
+ }),
241
+ icon: (options) => {
131
242
  const ids = typeof __CAMOX_ICON_IDS__ === "undefined" ? [] : __CAMOX_ICON_IDS__;
132
243
  if (!ids.includes(options.default)) throw new Error(`Invalid icon default "${String(options.default)}". Configure icons in camox() first.`);
133
244
  return Type.Unsafe({
@@ -138,182 +249,99 @@ const Type$1 = {
138
249
  title: options.title
139
250
  });
140
251
  },
141
- /**
142
- * Creates a string field with a required default value.
143
- *
144
- * @example
145
- * Type.String({ default: 'Hello' })
146
- * Type.String({ default: 'Hello', maxLength: 100, title: 'Title' })
147
- */
148
- String: (options) => {
149
- return Type.Unsafe({
252
+ reference: (collection, options = {}) => Type.Unsafe({
253
+ anyOf: [{
150
254
  type: "string",
151
- ...options,
152
- default: options.default,
153
- fieldType: "String"
154
- });
155
- },
156
- /**
157
- * Creates a repeatable array of object items.
158
- * The default array is auto-generated based on minItems.
159
- *
160
- * Items may also declare per-item `settings` (Enum/Boolean only) — not
161
- * inline-editable; they appear in the sidebar when the item is selected,
162
- * similar to block-level settings.
163
- *
164
- * @example
165
- * Type.Repeater({
166
- * content: {
167
- * title: Type.String({ default: 'Item' }),
168
- * description: Type.String({ default: 'Description' }),
169
- * },
170
- * settings: {
171
- * highlighted: Type.Boolean({ default: false, title: 'Highlighted' }),
172
- * },
173
- * minItems: 1,
174
- * maxItems: 10,
175
- * title: 'Items',
176
- * toMarkdown: (c) => [`### ${c.title}`, c.description],
177
- * })
178
- */
179
- Repeater: (options) => {
255
+ format: "uuid"
256
+ }, { type: "null" }],
257
+ fieldType: "Reference",
258
+ collectionId: collection._internal.id,
259
+ required: options.required ?? false,
260
+ title: options.title ?? collection._internal.title,
261
+ default: null,
262
+ referenceSchema: collection._internal.contentSchema,
263
+ labelField: collection._internal.label
264
+ }),
265
+ referenceList: (collection, options = {}) => Type.Unsafe({
266
+ type: "array",
267
+ items: {
268
+ type: "string",
269
+ format: "uuid"
270
+ },
271
+ fieldType: "ReferenceList",
272
+ collectionId: collection._internal.id,
273
+ title: options.title ?? collection._internal.title,
274
+ ...options.description === void 0 ? {} : { description: options.description },
275
+ ...options.maxItems === void 0 ? {} : { maxItems: options.maxItems },
276
+ ...options.query === void 0 ? { default: [] } : { query: validateQuery(options.query, collection) },
277
+ ...options.toMarkdown === void 0 ? {} : { toMarkdown: resolveToMarkdown(options.toMarkdown, void 0, "item", collection._internal.contentSchema.properties) },
278
+ referenceSchema: collection._internal.contentSchema,
279
+ labelField: collection._internal.label
280
+ }),
281
+ repeater: (options) => {
180
282
  if (options.minItems < 1) throw new Error("Repeater requires minItems to be at least 1");
181
- const objectSchema = Type.Object(options.content);
182
- const defaultItem = {};
183
- for (const [key, prop] of Object.entries(objectSchema.properties)) if ("default" in prop) defaultItem[key] = prop.default;
283
+ const content = options.content(contentFieldBuilder);
284
+ const settings = options.settings?.(settingBuilder);
285
+ const owner = `Repeater${options.title ? ` "${options.title}"` : ""}`;
286
+ assertFieldKinds(content, "content", owner);
287
+ if (settings) assertFieldKinds(settings, "settings", owner);
288
+ attachArtifactData(content, settings, owner);
289
+ const objectSchema = Type.Object(content);
290
+ const defaultItem = collectSchemaDefaults(objectSchema.properties);
184
291
  const defaultArray = Array(options.minItems).fill(null).map(() => ({ ...defaultItem }));
185
- const settingsTypeboxSchema = options.settings ? Type.Object(options.settings) : null;
186
- const itemSettingsSchema = settingsTypeboxSchema ? {
292
+ const settingsObjectSchema = settings ? Type.Object(settings) : null;
293
+ const itemSettingsSchema = settingsObjectSchema ? {
187
294
  type: "object",
188
- properties: settingsTypeboxSchema.properties,
189
- required: Object.keys(options.settings)
295
+ properties: settingsObjectSchema.properties,
296
+ required: Object.keys(settingsObjectSchema.properties)
190
297
  } : void 0;
191
- const defaultItemSettings = {};
192
- if (settingsTypeboxSchema) {
193
- for (const [key, prop] of Object.entries(settingsTypeboxSchema.properties)) if ("default" in prop) defaultItemSettings[key] = prop.default;
194
- }
195
298
  return Type.Array(objectSchema, {
196
299
  minItems: options.minItems,
197
- maxItems: options.maxItems,
300
+ ...Number.isFinite(options.maxItems) ? { maxItems: options.maxItems } : {},
198
301
  default: defaultArray,
199
302
  title: options.title,
200
303
  fieldType: "Repeater",
201
- toMarkdown: resolveToMarkdown(options.toMarkdown, options.settings, "item"),
304
+ toMarkdown: resolveToMarkdown(options.toMarkdown, settings, "item", content),
202
305
  itemSettingsSchema,
203
- defaultItemSettings: settingsTypeboxSchema ? defaultItemSettings : void 0
204
- });
205
- },
206
- /**
207
- * Creates an enum field with a set of predefined options.
208
- *
209
- * @example
210
- * Type.Enum({
211
- * default: 'left',
212
- * options: { left: 'Left', center: 'Center', right: 'Right' },
213
- * title: 'Alignment'
214
- * })
215
- */
216
- Enum: (options) => {
217
- const enumValues = Object.keys(options.options);
218
- return Type.Unsafe({
219
- type: "string",
220
- enum: enumValues,
221
- default: options.default,
222
- title: options.title,
223
- enumLabels: options.options,
224
- fieldType: "Enum"
225
- });
226
- },
227
- /**
228
- * Creates a boolean toggle field.
229
- *
230
- * @example
231
- * Type.Boolean({ default: false, title: 'Show background' })
232
- */
233
- Boolean: (options) => {
234
- return Type.Boolean({
235
- default: options.default,
236
- title: options.title,
237
- fieldType: "Boolean"
238
- });
239
- },
240
- /**
241
- * Creates an embed field for URLs matching a specific pattern.
242
- *
243
- * @example
244
- * Type.Embed({
245
- * pattern: 'https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+',
246
- * default: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
247
- * title: 'YouTube URL'
248
- * })
249
- */
250
- Embed: (options) => {
251
- if (!new RegExp(options.pattern).test(options.default)) throw new Error(`Embed default value "${options.default}" does not match pattern "${options.pattern}"`);
252
- return Type.Unsafe({
253
- type: "string",
254
- pattern: options.pattern,
255
- default: options.default,
256
- title: options.title,
257
- fieldType: "Embed"
258
- });
259
- },
260
- /**
261
- * Creates a link field with text, href/pageId, and newTab properties.
262
- * Supports both external URLs and internal page links.
263
- *
264
- * @example
265
- * Type.Link({ default: { text: 'Learn more', href: '/', newTab: false }, title: 'CTA' })
266
- */
267
- Link: (options) => {
268
- return Type.Unsafe({
269
- type: "object",
270
- properties: {
271
- type: {
272
- type: "string",
273
- enum: ["external", "page"]
274
- },
275
- text: { type: "string" },
276
- href: { type: "string" },
277
- pageId: { type: "string" },
278
- newTab: { type: "boolean" }
279
- },
280
- default: {
281
- ...options.default,
282
- type: "external"
283
- },
284
- title: options.title,
285
- fieldType: "Link"
306
+ defaultItemSettings: settingsObjectSchema ? collectSchemaDefaults(settingsObjectSchema.properties) : void 0
286
307
  });
287
- },
288
- /**
289
- * Creates an image asset field.
290
- *
291
- * @example
292
- * Type.Image({ title: 'Hero' })
293
- */
294
- Image: (options = {}) => _imageSingle(options),
295
- /**
296
- * Creates a file asset field.
297
- *
298
- * @example
299
- * Type.File({ accept: ['application/pdf'], title: 'Datasheet' })
300
- */
301
- File: (options) => _fileSingle(options),
302
- /**
303
- * Creates an array of image assets.
304
- *
305
- * @example
306
- * Type.ImageList({ title: 'Gallery', defaultItems: 3 })
307
- */
308
- ImageList: (options = {}) => _imageList(options),
309
- /**
310
- * Creates an array of file assets.
311
- *
312
- * @example
313
- * Type.FileList({ accept: ['application/pdf'], title: 'Attachments' })
314
- */
315
- FileList: (options) => _fileList(options)
308
+ }
309
+ };
310
+ const collectionFieldBuilder = {
311
+ string: (options = {}) => Type.Unsafe({
312
+ type: "string",
313
+ ...options,
314
+ fieldType: "String"
315
+ }),
316
+ enum: enumSetting,
317
+ boolean: booleanSetting,
318
+ image: (options = {}) => contentFieldBuilder.image({ title: options.title }),
319
+ imageList: contentFieldBuilder.imageList,
320
+ file: (options) => contentFieldBuilder.file({
321
+ accept: options.accept,
322
+ title: options.title
323
+ }),
324
+ fileList: contentFieldBuilder.fileList,
325
+ embed: contentFieldBuilder.embed,
326
+ reference: (collection, options = {}) => contentFieldBuilder.reference(collection, { title: options.title }),
327
+ referenceList: (collection, options = {}) => {
328
+ if ("query" in options) throw new Error("Collections cannot hold query-backed reference lists");
329
+ return contentFieldBuilder.referenceList(collection, options);
330
+ }
316
331
  };
332
+ /** Runs a block's builders so the rest of its definition works with plain schemas. */
333
+ function resolveBlockFields(options) {
334
+ const content = options.content(contentFieldBuilder);
335
+ const settings = options.settings?.(settingBuilder);
336
+ const owner = `Block "${options.id}"`;
337
+ assertFieldKinds(content, "content", owner);
338
+ if (settings) assertFieldKinds(settings, "settings", owner);
339
+ attachArtifactData(content, settings, owner);
340
+ return {
341
+ content,
342
+ settings
343
+ };
344
+ }
317
345
 
318
346
  //#endregion
319
- export { Type$1 as Type, resolveToMarkdown };
347
+ export { ARTIFACT_MAX_LENGTH, Conditional, FieldToken, assertFieldKinds, collectionField, collectionFieldBuilder, contentFieldBuilder, getImagePlaceholderTitle, isImagePlaceholder, resolveBlockFields, resolveToMarkdown, settingBuilder };
@@ -1,11 +1,14 @@
1
1
  //#region src/core/lib/fieldTypes.tsx
2
2
  const fieldTypesDictionary = {
3
+ Reference: { hasOwnView: true },
4
+ ReferenceList: { hasOwnView: true },
3
5
  Icon: { hasOwnView: true },
4
6
  String: { hasOwnView: true },
5
7
  Repeater: { hasOwnView: true },
6
8
  Enum: { hasOwnView: true },
7
9
  Boolean: { hasOwnView: true },
8
10
  Embed: { hasOwnView: true },
11
+ Artifact: { hasOwnView: true },
9
12
  Link: { hasOwnView: true },
10
13
  Image: { hasOwnView: true },
11
14
  File: { hasOwnView: true },
@@ -2,12 +2,12 @@
2
2
  declare global {
3
3
  interface CamoxIconRegistry {}
4
4
  }
5
- type IconId = CamoxIconRegistry extends {
5
+ export type IconId = CamoxIconRegistry extends {
6
6
  ids: infer IDs extends string;
7
7
  } ? IDs : never;
8
8
  declare const iconBrand: unique symbol;
9
- type IconValue = string & {
9
+ export type IconValue = string & {
10
10
  readonly [iconBrand]: true;
11
11
  };
12
12
  //#endregion
13
- export { IconId, IconValue };
13
+ export {};
@@ -1,6 +1,6 @@
1
- import { QueryClient } from "@tanstack/react-query";
2
1
  import { SVGProps } from "react";
2
+ import "@camox/api-contract";
3
+ import { QueryClient } from "@tanstack/react-query";
3
4
  //#region src/core/lib/icons.d.ts
4
- type IconProps = Omit<SVGProps<SVGSVGElement>, "children" | "dangerouslySetInnerHTML" | "name">;
5
- //#endregion
6
- export { IconProps };
5
+ export type IconProps = Omit<SVGProps<SVGSVGElement>, "children" | "dangerouslySetInnerHTML" | "name">;
6
+ //#endregion
@@ -1,8 +1,8 @@
1
1
  import { c } from "react/compiler-runtime";
2
- import { useQuery } from "@tanstack/react-query";
3
2
  import { useId } from "react";
4
- import { jsx } from "react/jsx-runtime";
5
3
  import { ICON_CATALOG_VERSION, scopeIconSvgIds } from "@camox/api-contract";
4
+ import { jsx } from "react/jsx-runtime";
5
+ import { useQuery } from "@tanstack/react-query";
6
6
 
7
7
  //#region src/core/lib/icons.tsx
8
8
  const iconQuery = (id) => ({
@@ -20,51 +20,47 @@ const iconQuery = (id) => ({
20
20
  }
21
21
  });
22
22
  function IconSvg(t0) {
23
- const $ = c(22);
24
- if ($[0] !== "8eab78246422a9042abf36067eb940cbd070510c54a187ee11896f87a1f6085b") {
25
- for (let $i = 0; $i < 22; $i += 1) $[$i] = Symbol.for("react.memo_cache_sentinel");
26
- $[0] = "8eab78246422a9042abf36067eb940cbd070510c54a187ee11896f87a1f6085b";
27
- }
23
+ const $ = c(21);
28
24
  let iconId;
29
25
  let props;
30
- if ($[1] !== t0) {
26
+ if ($[0] !== t0) {
31
27
  ({iconId, ...props} = t0);
32
- $[1] = t0;
33
- $[2] = iconId;
34
- $[3] = props;
28
+ $[0] = t0;
29
+ $[1] = iconId;
30
+ $[2] = props;
35
31
  } else {
36
- iconId = $[2];
37
- props = $[3];
32
+ iconId = $[1];
33
+ props = $[2];
38
34
  }
39
35
  let t1;
40
- if ($[4] !== iconId) {
36
+ if ($[3] !== iconId) {
41
37
  t1 = iconQuery(iconId);
42
- $[4] = iconId;
43
- $[5] = t1;
44
- } else t1 = $[5];
38
+ $[3] = iconId;
39
+ $[4] = t1;
40
+ } else t1 = $[4];
45
41
  const { data } = useQuery(t1);
46
42
  const t2 = useId();
47
43
  let t3;
48
- if ($[6] !== t2) {
44
+ if ($[5] !== t2) {
49
45
  let t4;
50
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
46
+ if ($[7] === Symbol.for("react.memo_cache_sentinel")) {
51
47
  t4 = /[^a-zA-Z0-9_-]/g;
52
- $[8] = t4;
53
- } else t4 = $[8];
48
+ $[7] = t4;
49
+ } else t4 = $[7];
54
50
  t3 = t2.replace(t4, "");
55
- $[6] = t2;
56
- $[7] = t3;
57
- } else t3 = $[7];
51
+ $[5] = t2;
52
+ $[6] = t3;
53
+ } else t3 = $[6];
58
54
  const instance = t3;
59
55
  const t4 = data?.body ?? "";
60
56
  const t5 = `camox-${instance}-`;
61
57
  let t6;
62
- if ($[9] !== t4 || $[10] !== t5) {
58
+ if ($[8] !== t4 || $[9] !== t5) {
63
59
  t6 = scopeIconSvgIds(t4, t5);
64
- $[9] = t4;
65
- $[10] = t5;
66
- $[11] = t6;
67
- } else t6 = $[11];
60
+ $[8] = t4;
61
+ $[9] = t5;
62
+ $[10] = t6;
63
+ } else t6 = $[10];
68
64
  const body = t6;
69
65
  const labeled = !!(props["aria-label"] || props["aria-labelledby"]);
70
66
  const t7 = data?.attributes;
@@ -73,13 +69,13 @@ function IconSvg(t0) {
73
69
  const t10 = data?.attribution?.url ?? data?.attribution?.license;
74
70
  const t11 = data?.attribution?.author;
75
71
  let t12;
76
- if ($[12] !== body) {
72
+ if ($[11] !== body) {
77
73
  t12 = { __html: body };
78
- $[12] = body;
79
- $[13] = t12;
80
- } else t12 = $[13];
74
+ $[11] = body;
75
+ $[12] = t12;
76
+ } else t12 = $[12];
81
77
  let t13;
82
- if ($[14] !== props || $[15] !== t10 || $[16] !== t11 || $[17] !== t12 || $[18] !== t7 || $[19] !== t8 || $[20] !== t9) {
78
+ if ($[13] !== props || $[14] !== t10 || $[15] !== t11 || $[16] !== t12 || $[17] !== t7 || $[18] !== t8 || $[19] !== t9) {
83
79
  t13 = /* @__PURE__ */ jsx("svg", {
84
80
  ...t7,
85
81
  "aria-hidden": t8,
@@ -90,15 +86,15 @@ function IconSvg(t0) {
90
86
  ...props,
91
87
  dangerouslySetInnerHTML: t12
92
88
  });
93
- $[14] = props;
94
- $[15] = t10;
95
- $[16] = t11;
96
- $[17] = t12;
97
- $[18] = t7;
98
- $[19] = t8;
99
- $[20] = t9;
100
- $[21] = t13;
101
- } else t13 = $[21];
89
+ $[13] = props;
90
+ $[14] = t10;
91
+ $[15] = t11;
92
+ $[16] = t12;
93
+ $[17] = t7;
94
+ $[18] = t8;
95
+ $[19] = t9;
96
+ $[20] = t13;
97
+ } else t13 = $[20];
102
98
  return t13;
103
99
  }
104
100
  async function prefetchIcons(client, ...sources) {
@@ -127,4 +123,4 @@ async function prefetchIcons(client, ...sources) {
127
123
  }
128
124
 
129
125
  //#endregion
130
- export { IconSvg, prefetchIcons };
126
+ export { IconSvg, iconQuery, prefetchIcons };