camox 0.43.0 → 0.45.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (412) hide show
  1. package/bin/camox.mjs +9 -1
  2. package/dist/components/AuthGate.js +0 -6
  3. package/dist/components/DeviceSelector.js +96 -0
  4. package/dist/components/PlatformLabel.js +20 -24
  5. package/dist/core/components/lexical/HighlightNode.js +1 -1
  6. package/dist/core/components/lexical/InlineContentEditable.js +15 -19
  7. package/dist/core/components/lexical/InlineLexicalEditor.js +54 -74
  8. package/dist/core/components/lexical/InlineStylesPlugin.js +57 -41
  9. package/dist/core/components/lexical/MaxLengthPlugin.js +59 -0
  10. package/dist/core/components/lexical/SelectionBroadcaster.js +55 -56
  11. package/dist/core/components/lexical/SidebarLexicalEditor.js +327 -234
  12. package/dist/core/components/lexical/SummaryToggleGuard.js +42 -0
  13. package/dist/core/components/lexical/TextLinkPopover.js +169 -180
  14. package/dist/core/createApp.d.ts +254 -299
  15. package/dist/core/createApp.js +123 -29
  16. package/dist/core/createBlock.d.ts +5 -5
  17. package/dist/core/createBlock.js +399 -152
  18. package/dist/core/createCollection.d.ts +55 -0
  19. package/dist/core/createCollection.js +93 -0
  20. package/dist/core/createLayout.d.ts +197 -61
  21. package/dist/core/createLayout.js +114 -56
  22. package/dist/core/defineDocument.d.ts +3 -5
  23. package/dist/core/derivedRoutes.js +49 -1
  24. package/dist/core/dom.d.ts +13 -4
  25. package/dist/core/dom.js +44 -1
  26. package/dist/core/editing/BlockEditingRuntime.d.ts +16 -0
  27. package/dist/core/editing/BlockEditingRuntime.js +6 -15
  28. package/dist/core/editing/CompleteBlockEditingRuntime.js +28 -23
  29. package/dist/core/editing/createEditableBlock.d.ts +820 -565
  30. package/dist/core/editing/createEditableBlock.js +2153 -971
  31. package/dist/core/editing/referenceWrites.js +51 -0
  32. package/dist/core/editing/useLatestRecord.js +90 -0
  33. package/dist/core/hooks/useArtifactHost.js +139 -0
  34. package/dist/core/hooks/useFieldSelection.js +43 -18
  35. package/dist/core/hooks/useIsEditable.js +12 -10
  36. package/dist/core/hooks/useOverlayMessage.js +15 -19
  37. package/dist/core/lib/artifact.d.ts +21 -0
  38. package/dist/core/lib/artifact.js +154 -0
  39. package/dist/core/lib/artifactColors.js +123 -0
  40. package/dist/core/lib/artifactData.d.ts +1 -0
  41. package/dist/core/lib/artifactData.js +131 -0
  42. package/dist/core/lib/artifactHost.js +205 -0
  43. package/dist/core/lib/artifactRuntime.js +36 -0
  44. package/dist/core/lib/artifactTheme.js +57 -0
  45. package/dist/core/lib/contentType.d.ts +304 -103
  46. package/dist/core/lib/contentType.js +207 -168
  47. package/dist/core/lib/fieldTypes.js +4 -0
  48. package/dist/core/lib/iconTypes.d.ts +13 -0
  49. package/dist/core/lib/icons.d.ts +6 -0
  50. package/dist/core/lib/icons.js +126 -0
  51. package/dist/core/lib/imagePlaceholder.js +177 -0
  52. package/dist/core/lib/imageTransform.js +1 -1
  53. package/dist/core/lib/lexicalReact.d.ts +3 -1
  54. package/dist/core/lib/lexicalState.js +7 -7
  55. package/dist/core/lib/modifierFormats.js +1 -1
  56. package/dist/core/lib/previewPaused.js +9 -0
  57. package/dist/core/lib/recordScope.js +316 -0
  58. package/dist/core/lib/reference.d.ts +81 -0
  59. package/dist/core/lib/reference.js +29 -0
  60. package/dist/core/lib/textLinks.js +7 -5
  61. package/dist/core/lib/textStyles.d.ts +6 -8
  62. package/dist/core/lib/textStyles.js +5 -5
  63. package/dist/core/notFound.d.ts +7 -0
  64. package/dist/core/notFound.js +11 -0
  65. package/dist/core/pageDestinations.js +6 -3
  66. package/dist/core/recordItem.js +34 -0
  67. package/dist/core/requestContext.d.ts +26 -0
  68. package/dist/core/requestContext.js +20 -0
  69. package/dist/features/canvas/CamoxCanvas.js +1734 -0
  70. package/dist/features/canvas/CanvasBlockFrame.js +353 -0
  71. package/dist/features/canvas/CanvasBlockHeader.js +55 -0
  72. package/dist/features/canvas/CanvasLoadingScreen.js +35 -0
  73. package/dist/features/canvas/CanvasOverlays.js +254 -0
  74. package/dist/features/canvas/CanvasPageEdge.js +87 -0
  75. package/dist/features/canvas/CanvasPageFrame.js +335 -0
  76. package/dist/features/canvas/CanvasPageHeader.js +125 -0
  77. package/dist/features/canvas/CanvasPreviewPageSlot.js +103 -0
  78. package/dist/features/canvas/CanvasShelfMarker.js +255 -0
  79. package/dist/features/canvas/DerivedPagePathInput.js +238 -0
  80. package/dist/features/canvas/canvasCamera.js +229 -0
  81. package/dist/features/canvas/canvasFlight.js +104 -0
  82. package/dist/features/canvas/canvasFrameCapture.js +364 -0
  83. package/dist/features/canvas/canvasFrameDocument.js +317 -0
  84. package/dist/features/canvas/canvasFrameMode.js +53 -0
  85. package/dist/features/canvas/canvasInsertionSeams.js +44 -0
  86. package/dist/features/canvas/canvasItems.js +120 -0
  87. package/dist/features/canvas/canvasOverlayGeometry.js +240 -0
  88. package/dist/features/canvas/canvasPages.js +79 -0
  89. package/dist/features/canvas/canvasScreenSpace.js +26 -0
  90. package/dist/features/canvas/canvasSelection.js +18 -0
  91. package/dist/features/canvas/canvasStore.js +149 -0
  92. package/dist/features/canvas/canvasThumbnails.js +304 -0
  93. package/dist/features/canvas/canvasZoom.js +10 -0
  94. package/dist/features/canvas/sidebar/CanvasInspector.js +202 -0
  95. package/dist/features/canvas/sidebar/CanvasNavigator.js +226 -0
  96. package/dist/features/canvas/sidebar/CanvasSidebar.js +60 -0
  97. package/dist/features/canvas/sidebar/CanvasSidebarFrame.js +48 -0
  98. package/dist/features/canvas/sidebar/CanvasSidebarSkeleton.js +39 -0
  99. package/dist/features/canvas/sidebar/CatalogBlockInspector.js +189 -0
  100. package/dist/features/canvas/sidebar/CuratedPageInspector.js +69 -0
  101. package/dist/features/canvas/sidebar/DerivedPageInspector.js +37 -0
  102. package/dist/features/canvas/sidebar/LayoutPageBlocks.js +78 -0
  103. package/dist/features/canvas/sidebar/LayoutPageOverview.js +71 -0
  104. package/dist/features/canvas/sidebar/PageInspector.js +157 -0
  105. package/dist/features/canvas/sidebar/PageInspectorSkeleton.js +90 -0
  106. package/dist/features/canvas/sidebar/PageOverview.js +27 -0
  107. package/dist/features/canvas/sidebar/SingletonPageInspector.js +31 -0
  108. package/dist/features/canvas/useCanvasCamera.js +803 -0
  109. package/dist/features/canvas/useCanvasFrame.js +149 -0
  110. package/dist/features/canvas/useCanvasFrameInput.js +97 -0
  111. package/dist/features/canvas/useCanvasNearness.js +57 -0
  112. package/dist/features/canvas/useDiscoveredPreviewPaths.js +62 -0
  113. package/dist/features/content/CamoxContent.d.ts +2 -5
  114. package/dist/features/content/CamoxContent.js +174 -271
  115. package/dist/features/content/CollectionItemSheetContext.js +106 -0
  116. package/dist/features/content/ContentAssets.js +315 -0
  117. package/dist/features/content/ContentCollection.js +663 -0
  118. package/dist/features/content/collection-form.js +58 -0
  119. package/dist/features/content/components/AssetCard.js +101 -69
  120. package/dist/features/content/components/AssetCardSkeleton.js +4 -8
  121. package/dist/features/content/components/ContentSidebar.js +129 -18
  122. package/dist/features/content/components/ContentSidebarGroup.js +37 -0
  123. package/dist/features/content/components/DeleteCollectionItemButton.js +202 -0
  124. package/dist/features/content/components/MissingFromLocale.js +282 -0
  125. package/dist/features/content/components/UploadDropZone.js +27 -31
  126. package/dist/features/content/components/UploadProgressDrawer.js +90 -98
  127. package/dist/features/navigation/navigation.d.ts +66 -20
  128. package/dist/features/navigation/navigation.js +257 -90
  129. package/dist/features/og/defaultFonts.js +8 -8
  130. package/dist/features/og/geist-variable-ttf-base64.js +1 -1
  131. package/dist/features/og/imageResponse.d.ts +8 -0
  132. package/dist/features/og/imageResponse.js +26 -0
  133. package/dist/features/page/CuratedPageContent.js +167 -0
  134. package/dist/features/page/DerivedPageContent.js +26 -30
  135. package/dist/features/page/SharedLayoutContent.js +25 -27
  136. package/dist/features/preview/CamoxPreview.d.ts +23 -61
  137. package/dist/features/preview/CamoxPreview.js +811 -507
  138. package/dist/features/preview/EditablePageContent.js +1 -1
  139. package/dist/features/preview/EditablePageExperience.js +16 -22
  140. package/dist/features/preview/components/AddBlockDialog.js +270 -0
  141. package/dist/features/preview/components/AssetFieldEditor.js +173 -154
  142. package/dist/features/preview/components/AssetLightbox.js +194 -136
  143. package/dist/features/preview/components/AssetPickerModal.js +153 -170
  144. package/dist/features/preview/components/BlockActionsPopover.js +150 -149
  145. package/dist/features/preview/components/BlockErrorBoundary.js +8 -12
  146. package/dist/features/preview/components/BlockThumbnail.js +176 -100
  147. package/dist/features/preview/components/CanvasPreview.js +243 -0
  148. package/dist/features/preview/components/CreatePageModal.js +128 -137
  149. package/dist/features/preview/components/DebouncedFieldEditor.js +29 -33
  150. package/dist/features/preview/components/DerivedLayoutDialog.js +46 -29
  151. package/dist/features/preview/components/DrillRow.js +150 -0
  152. package/dist/features/preview/components/FieldOverlayStyles.js +33 -10
  153. package/dist/features/preview/components/FieldToolbar.js +166 -116
  154. package/dist/features/preview/components/Frame.js +108 -20
  155. package/dist/features/preview/components/IconFieldEditor.js +227 -0
  156. package/dist/features/preview/components/ItemFieldsEditor.js +238 -205
  157. package/dist/features/preview/components/LinkFieldEditor.js +135 -139
  158. package/dist/features/preview/components/Metadata.js +22 -30
  159. package/dist/features/preview/components/MobilePreviewDrawer.js +89 -108
  160. package/dist/features/preview/components/MultipleAssetFieldEditor.js +334 -246
  161. package/dist/features/preview/components/OverlayTracker.js +10 -42
  162. package/dist/features/preview/components/Overlays.js +81 -69
  163. package/dist/features/preview/components/PageInfo.js +1748 -0
  164. package/dist/features/preview/components/PageInfoSkeleton.js +51 -0
  165. package/dist/features/preview/components/PageLocationFieldset.js +112 -116
  166. package/dist/features/preview/components/PageNavigatorHeader.js +24 -0
  167. package/dist/features/preview/components/PageNicknameField.js +22 -26
  168. package/dist/features/preview/components/PagePicker.js +145 -147
  169. package/dist/features/preview/components/PageTree.js +525 -532
  170. package/dist/features/preview/components/PreviewActivation.js +28 -32
  171. package/dist/features/preview/components/PreviewPanel.js +620 -319
  172. package/dist/features/preview/components/PreviewToolbar.js +111 -340
  173. package/dist/features/preview/components/RecordCard.js +80 -0
  174. package/dist/features/preview/components/RecordCombobox.js +178 -0
  175. package/dist/features/preview/components/ReferenceFieldEditor.js +149 -0
  176. package/dist/features/preview/components/ReferenceListFieldEditor.js +432 -0
  177. package/dist/features/preview/components/RemovedBlockPlaceholder.js +95 -0
  178. package/dist/features/preview/components/RepeatableItemsList.js +125 -138
  179. package/dist/features/preview/components/SelectionEditor.js +993 -0
  180. package/dist/features/preview/components/ShikiMarkdown.js +14 -18
  181. package/dist/features/preview/components/SidebarSection.js +52 -64
  182. package/dist/features/preview/components/StudioEditingFallback.js +56 -0
  183. package/dist/features/preview/components/UnlinkAssetButton.js +104 -107
  184. package/dist/features/preview/components/blockGridNavigation.js +15 -0
  185. package/dist/features/preview/components/contentFieldSchema.js +8 -0
  186. package/dist/features/preview/components/useFieldWriter.js +200 -0
  187. package/dist/features/preview/components/useRecordView.js +383 -0
  188. package/dist/features/preview/components/useRepeatableItemActions.js +35 -37
  189. package/dist/features/preview/components/useUpdateBlockPosition.js +37 -37
  190. package/dist/features/preview/editingFrame.js +197 -0
  191. package/dist/features/preview/overlayHighlights.js +27 -0
  192. package/dist/features/preview/overlayMessages.js +72 -1
  193. package/dist/features/preview/pageRecord.js +189 -0
  194. package/dist/features/preview/previewConstants.js +6 -2
  195. package/dist/features/preview/previewPageFrame.js +95 -0
  196. package/dist/features/preview/previewPreparation.js +7 -0
  197. package/dist/features/preview/previewSelection.js +33 -59
  198. package/dist/features/preview/previewStore.js +225 -123
  199. package/dist/features/preview/referencePickerFocus.js +29 -0
  200. package/dist/features/preview/repeatableItemTargets.js +56 -0
  201. package/dist/features/preview/selectionReveal.js +21 -0
  202. package/dist/features/preview/usePreviewViewportActions.js +114 -0
  203. package/dist/features/preview/viewportContinuity.js +109 -0
  204. package/dist/features/provider/AuthenticatedCamoxProvider.js +69 -44
  205. package/dist/features/provider/CamoxProvider.d.ts +3 -6
  206. package/dist/features/provider/CamoxProvider.js +38 -50
  207. package/dist/features/provider/CoreCamoxProvider.js +71 -23
  208. package/dist/features/provider/LocalhostPreviewProvider.js +73 -73
  209. package/dist/features/provider/PreviewSignInPage.js +54 -0
  210. package/dist/features/provider/components/CamoxAppContext.js +11 -11
  211. package/dist/features/provider/components/CommandPalette.js +87 -143
  212. package/dist/features/provider/useAdminShortcuts.js +7 -11
  213. package/dist/features/routes/pageRuntime.d.ts +44 -4
  214. package/dist/features/routes/pageRuntime.js +244 -137
  215. package/dist/features/runtime/RuntimeChrome.js +117 -115
  216. package/dist/features/runtime/alternates.js +64 -0
  217. package/dist/features/runtime/analytics.d.ts +7 -0
  218. package/dist/features/runtime/analytics.js +66 -0
  219. package/dist/features/runtime/artifactSources.js +87 -0
  220. package/dist/features/runtime/editingFallback.js +20 -0
  221. package/dist/features/runtime/linkPrefetch.js +97 -0
  222. package/dist/features/runtime/livePages.js +62 -0
  223. package/dist/features/runtime/llmsTxt.js +40 -0
  224. package/dist/features/runtime/loopbackFetch.js +18 -0
  225. package/dist/features/runtime/navigationAccessibility.js +51 -0
  226. package/dist/features/runtime/navigationTarget.js +23 -2
  227. package/dist/features/runtime/pageApp.js +216 -141
  228. package/dist/features/runtime/pageBlockTypes.js +20 -0
  229. package/dist/features/runtime/pageClient.d.ts +2 -4
  230. package/dist/features/runtime/pageClient.js +18 -3
  231. package/dist/features/runtime/pageNavigation.js +254 -32
  232. package/dist/features/runtime/pageServer.d.ts +2 -4
  233. package/dist/features/runtime/pageServer.js +8 -1
  234. package/dist/features/runtime/pageViewport.js +7 -0
  235. package/dist/features/runtime/runtime.d.ts +60 -23
  236. package/dist/features/runtime/runtime.js +779 -166
  237. package/dist/features/runtime/runtimeChromeLoader.js +58 -0
  238. package/dist/features/runtime/runtimeRoutes.d.ts +19 -0
  239. package/dist/features/runtime/runtimeRoutes.js +25 -0
  240. package/dist/features/runtime/scrollRestoration.js +133 -0
  241. package/dist/features/runtime/studioApp.d.ts +4 -3
  242. package/dist/features/runtime/studioApp.js +5 -9
  243. package/dist/features/runtime/studioClient.d.ts +2 -4
  244. package/dist/features/runtime/studioClient.js +12 -3
  245. package/dist/features/runtime/studioServer.d.ts +2 -4
  246. package/dist/features/runtime/studioServer.js +6 -1
  247. package/dist/features/runtime/worker.d.ts +6 -0
  248. package/dist/features/runtime/worker.js +23 -0
  249. package/dist/features/runtime/workerRequest.js +44 -0
  250. package/dist/features/studio/CamoxStudio.d.ts +2 -6
  251. package/dist/features/studio/CamoxStudio.js +34 -49
  252. package/dist/features/studio/FollowAgentProvider.js +338 -0
  253. package/dist/features/studio/components/ChatSidebar.js +356 -0
  254. package/dist/features/studio/components/DraftsControl.js +676 -0
  255. package/dist/features/studio/components/FaviconDialog.js +318 -0
  256. package/dist/features/studio/components/LocalePicker.js +785 -0
  257. package/dist/features/studio/components/Navbar.js +123 -103
  258. package/dist/features/studio/components/ProjectMenu.js +239 -260
  259. package/dist/features/studio/components/RenameDraftDialog.js +206 -0
  260. package/dist/features/studio/components/ReviewDraftSheet.js +1472 -0
  261. package/dist/features/studio/components/ThreadComposer.js +157 -0
  262. package/dist/features/studio/components/ThreadMarkdown.js +113 -0
  263. package/dist/features/studio/components/ThreadMessages.js +270 -0
  264. package/dist/features/studio/components/UserButton.js +34 -23
  265. package/dist/features/studio/draftLabel.js +33 -0
  266. package/dist/features/studio/draftNotice.js +13 -0
  267. package/dist/features/studio/followAgent.js +250 -0
  268. package/dist/features/studio/followAgentContext.js +7 -0
  269. package/dist/features/studio/localeOptions.js +118 -0
  270. package/dist/features/studio/localeSwitch.js +19 -0
  271. package/dist/features/studio/routes.js +48 -1
  272. package/dist/features/studio/studioStore.js +64 -1
  273. package/dist/features/studio/useTheme.js +24 -27
  274. package/dist/features/vite/artifactRuntimeMinification.js +36 -0
  275. package/dist/features/vite/auth.js +1 -50
  276. package/dist/features/vite/blockBoilerplate.js +6 -5
  277. package/dist/features/vite/blockChunks.js +31 -0
  278. package/dist/features/vite/bundlerLogs.js +17 -0
  279. package/dist/features/vite/definitionsSync.js +158 -226
  280. package/dist/features/vite/devAuthentication.js +4 -16
  281. package/dist/features/vite/devSignIn.js +87 -0
  282. package/dist/features/vite/iconGeneration.js +16 -0
  283. package/dist/features/vite/layoutGeneration.js +11 -1
  284. package/dist/features/vite/publishSeededContent.js +30 -0
  285. package/dist/features/vite/routeGeneration.js +6 -7
  286. package/dist/features/vite/runtimeDev.js +80 -99
  287. package/dist/features/vite/vite.d.ts +53 -31
  288. package/dist/features/vite/vite.js +230 -116
  289. package/dist/features/vite/workerBuild.js +39 -0
  290. package/dist/hooks/use-debounced-field.js +116 -47
  291. package/dist/hooks/use-file-upload.js +114 -67
  292. package/dist/hooks/use-marquee-selection.js +32 -36
  293. package/dist/hooks/use-page-destinations.js +69 -37
  294. package/dist/lib/api-client-server.d.ts +5 -0
  295. package/dist/lib/api-client-server.js +10 -4
  296. package/dist/lib/api-client.d.ts +6 -0
  297. package/dist/lib/api-client.js +51 -16
  298. package/dist/lib/api-socket.js +17 -0
  299. package/dist/lib/auth-page-styles.js +39 -0
  300. package/dist/lib/auth.js +139 -60
  301. package/dist/lib/collection-cache.js +23 -0
  302. package/dist/lib/draft-scope.d.ts +4 -0
  303. package/dist/lib/draft-scope.js +222 -0
  304. package/dist/lib/html.js +12 -0
  305. package/dist/lib/link-pages.js +154 -0
  306. package/dist/lib/locale-path.d.ts +22 -0
  307. package/dist/lib/locale-path.js +57 -0
  308. package/dist/lib/normalized-data.js +252 -152
  309. package/dist/lib/preview-handoff.js +13 -0
  310. package/dist/lib/queries.d.ts +11 -0
  311. package/dist/lib/queries.js +71 -131
  312. package/dist/lib/studio-reads.d.ts +14 -0
  313. package/dist/lib/studio-reads.js +574 -0
  314. package/dist/lib/use-project-room.js +50 -47
  315. package/dist/lib/use-thread.js +310 -0
  316. package/dist/lib/utils.js +25 -29
  317. package/dist/lib/view-locale-context.js +22 -0
  318. package/dist/lib/view-locale.js +46 -0
  319. package/dist/package.js +5 -0
  320. package/dist/studio-overlays.css +41 -147
  321. package/dist/studio.css +2 -2
  322. package/package.json +70 -72
  323. package/skills/camox/SKILL.md +16 -5
  324. package/skills/camox/references/artifacts.md +179 -0
  325. package/skills/camox/references/block-definitions.md +98 -55
  326. package/skills/camox/references/cli-common.md +18 -6
  327. package/skills/camox/references/cli-content.md +92 -58
  328. package/skills/camox/references/cli-publishing.md +26 -0
  329. package/skills/camox/references/dom-integrations.md +27 -0
  330. package/skills/camox/references/field-styling.md +7 -7
  331. package/skills/camox/references/layout-definitions.md +16 -14
  332. package/skills/camox/references/localization.md +56 -0
  333. package/skills/camox/references/routed-layouts.md +133 -15
  334. package/skills/camox-expand/SKILL.md +69 -0
  335. package/skills/camox-expand/references/jobs.md +39 -0
  336. package/skills/camoxify/SKILL.md +38 -2
  337. package/dist/core/components/AddBlockControlBar.js +0 -78
  338. package/dist/core/hooks/useRequireDraftSource.js +0 -23
  339. package/dist/features/metadata/sitemap.d.ts +0 -8
  340. package/dist/features/metadata/sitemap.js +0 -17
  341. package/dist/features/og/imageResponse.node.d.ts +0 -12
  342. package/dist/features/og/imageResponse.node.js +0 -49
  343. package/dist/features/og/imageResponse.workerd.d.ts +0 -12
  344. package/dist/features/og/imageResponse.workerd.js +0 -40
  345. package/dist/features/page/PublishedPageContent.js +0 -205
  346. package/dist/features/page/PublishedPageExperience.js +0 -23
  347. package/dist/features/preview/DerivedPreview.js +0 -134
  348. package/dist/features/preview/commentsEnabled.js +0 -8
  349. package/dist/features/preview/components/AddBlockSidebar.js +0 -381
  350. package/dist/features/preview/components/AttachedComments.js +0 -194
  351. package/dist/features/preview/components/CommentHeader.js +0 -122
  352. package/dist/features/preview/components/CommentSidebar.js +0 -29
  353. package/dist/features/preview/components/CommentTargetQuote.js +0 -166
  354. package/dist/features/preview/components/DerivedLayoutSidebar.d.ts +0 -5
  355. package/dist/features/preview/components/DerivedLayoutSidebar.js +0 -179
  356. package/dist/features/preview/components/DerivedPageInfoSidebar.js +0 -69
  357. package/dist/features/preview/components/LeftSidebar.js +0 -68
  358. package/dist/features/preview/components/PageEditorSidebar.js +0 -563
  359. package/dist/features/preview/components/PageInfoSidebar.js +0 -1551
  360. package/dist/features/preview/components/PageNavigatorSidebar.js +0 -78
  361. package/dist/features/preview/components/PageStatusBadge.js +0 -97
  362. package/dist/features/preview/components/PeekedBlock.js +0 -217
  363. package/dist/features/preview/components/PreviewComments.js +0 -56
  364. package/dist/features/preview/components/PreviewToolbarSpacer.js +0 -43
  365. package/dist/features/preview/components/PublicationRow.js +0 -422
  366. package/dist/features/preview/components/PublishDialog.js +0 -194
  367. package/dist/features/preview/components/RightSidebar.js +0 -59
  368. package/dist/features/preview/previewCommentsStore.js +0 -115
  369. package/dist/features/preview/publication.js +0 -81
  370. package/dist/features/runtime/SharedChromeContext.js +0 -7
  371. package/dist/features/studio/components/EnvironmentMenu.js +0 -413
  372. package/dist/features/vite/appGeneration.js +0 -89
  373. package/dist/lib/view-queries.js +0 -28
  374. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/Matches.d.ts +0 -114
  375. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/RouterProvider.d.ts +0 -25
  376. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/config.d.ts +0 -1
  377. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/defer.d.ts +0 -1
  378. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/fileRoute.d.ts +0 -20
  379. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/global.d.ts +0 -8
  380. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/hash-scroll.d.ts +0 -1
  381. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/index.d.ts +0 -18
  382. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/link.d.ts +0 -161
  383. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/load-matches.d.ts +0 -6
  384. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/location.d.ts +0 -54
  385. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/lru-cache.d.ts +0 -8
  386. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/manifest.d.ts +0 -32
  387. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/new-process-route-tree.d.ts +0 -115
  388. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/not-found.d.ts +0 -1
  389. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/redirect.d.ts +0 -49
  390. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/rewrite.d.ts +0 -1
  391. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/root.d.ts +0 -6
  392. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/route.d.ts +0 -343
  393. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/routeInfo.d.ts +0 -48
  394. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/router.d.ts +0 -695
  395. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/scroll-restoration.d.ts +0 -1
  396. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchMiddleware.d.ts +0 -1
  397. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/searchParams.d.ts +0 -5
  398. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/RawStream.d.ts +0 -38
  399. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/seroval-plugins.d.ts +0 -1
  400. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/ssr/serializer/transformer.d.ts +0 -65
  401. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/stores.d.ts +0 -69
  402. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/structuralSharing.d.ts +0 -1
  403. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/typePrimitives.d.ts +0 -1
  404. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderData.d.ts +0 -1
  405. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useLoaderDeps.d.ts +0 -1
  406. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useNavigate.d.ts +0 -10
  407. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useParams.d.ts +0 -1
  408. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useRouteContext.d.ts +0 -1
  409. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/useSearch.d.ts +0 -1
  410. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/utils.d.ts +0 -28
  411. package/dist/node_modules/.pnpm/@tanstack_router-core@1.168.14/node_modules/@tanstack/router-core/dist/esm/validators.d.ts +0 -49
  412. package/skills/camox/references/cli-environments.md +0 -37
@@ -1,19 +1,48 @@
1
- import * as _$_sinclair_typebox0 from "@sinclair/typebox";
2
- import { Static, TArray, TObject, TSchema, TUnsafe } from "@sinclair/typebox";
3
-
1
+ import { Collection } from "../createCollection.js";
2
+ import { IconId, IconValue } from "./iconTypes.js";
3
+ import { SystemOrderKey } from "@camox/api-contract";
4
+ import { Static, TArray, TBoolean, TObject, TSchema, TUnsafe } from "@sinclair/typebox";
4
5
  //#region src/core/lib/contentType.d.ts
5
- declare class FieldToken {
6
+ export declare const ReferenceContentBrand: unique symbol;
7
+ export type ReferenceSchema<T extends Record<string, TSchema>> = TUnsafe<string | null> & {
8
+ readonly [ReferenceContentBrand]: T;
9
+ fieldType: "Reference";
10
+ };
11
+ export type ReferenceListSchema<T extends Record<string, TSchema>> = TUnsafe<string[]> & {
12
+ readonly [ReferenceContentBrand]: T;
13
+ fieldType: "ReferenceList";
14
+ };
15
+ /** The keys a query can order a collection's records by: its text fields and system metadata. */
16
+ export type OrderableKeys<T extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends {
17
+ fieldType: "String";
18
+ } ? K : never; }[keyof T & string] | SystemOrderKey;
19
+ /** A single-key ordering: `{ title: "asc" }`. */
20
+ export type QueryOrderBy<K extends string> = { [P in K]: { [Q in P]: "asc" | "desc"; } & { [Q in Exclude<K, P>]?: never; }; }[K];
21
+ type Range<N extends number, Acc extends number[] = []> = Acc["length"] extends N ? Acc[number] : Range<N, [...Acc, Acc["length"]]>;
22
+ /** 1 to 100: literal limits outside it are rejected; computed `number` limits are checked on sync. */
23
+ type QueryLimit = Exclude<Range<101>, 0>;
24
+ export type ValidQueryLimit<L extends number> = number extends L ? number : L extends QueryLimit ? L : never;
25
+ /**
26
+ * Defines a query-backed list's membership and order in code: optionally one ordering key and a
27
+ * limit (at most, and by default, 100 records). Live pages list published records ordered by
28
+ * their published content; the preview lists drafts too. Ties break by record id.
29
+ */
30
+ export type ReferenceQuery<T extends Record<string, TSchema>, L extends number = number> = {
31
+ orderBy?: QueryOrderBy<OrderableKeys<T>>;
32
+ limit?: L & ValidQueryLimit<L>;
33
+ };
34
+ export declare class FieldToken {
6
35
  readonly fieldName: string;
7
36
  constructor(fieldName: string);
8
37
  toString(): string;
9
38
  }
10
- type SettingsScope = "block" | "item";
39
+ export type SettingsScope = "block" | "item";
11
40
  /**
12
41
  * Serializable conditional block produced by the settings proxy. Emits Handlebars-style
13
42
  * `{{#if ...}}...{{/if}}` syntax wrapping each child line, tagged with its scope so the
14
43
  * server-side resolver knows whether to read from `settings` or `itemSettings`.
15
44
  */
16
- declare class Conditional {
45
+ export declare class Conditional {
17
46
  readonly scope: SettingsScope;
18
47
  readonly settingName: string;
19
48
  readonly enumValue: string | null;
@@ -22,27 +51,31 @@ declare class Conditional {
22
51
  get openTag(): string;
23
52
  get closeTag(): string;
24
53
  }
25
- type ConditionalChild = string | FieldToken | Conditional;
26
- type ConditionalLines = ConditionalChild | ReadonlyArray<ConditionalChild>;
27
- type ContentProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: string & FieldToken };
54
+ export type ConditionalChild = string | FieldToken | Conditional;
55
+ export type ConditionalLines = ConditionalChild | ReadonlyArray<ConditionalChild>;
56
+ export type ContentProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: TShape[K] extends ReferenceSchema<infer T> ? ContentProxy<T> : string & FieldToken; };
28
57
  /**
29
58
  * Callable shape for one entry on the settings proxy. Booleans take a single `lines`
30
59
  * argument; enums take `(value, lines)`. Settings of other shapes are disallowed — they
31
60
  * don't make sense as conditions.
32
61
  */
33
62
  type SettingCallable<T extends TSchema> = Static<T> extends boolean ? (lines: ConditionalLines) => Conditional : Static<T> extends string ? (value: Static<T>, lines: ConditionalLines) => Conditional : never;
34
- type SettingsProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: SettingCallable<TShape[K]> };
35
- type ToMarkdownBuilder<TContent extends Record<string, TSchema>, TSettings extends Record<string, TSchema> = Record<string, never>> = (c: ContentProxy<TContent>, s: SettingsProxy<TSettings>) => ReadonlyArray<string | FieldToken | Conditional>;
63
+ export type SettingsProxy<TShape extends Record<string, TSchema>> = { [K in keyof TShape & string]: SettingCallable<TShape[K]>; };
64
+ export type ToMarkdownBuilder<TContent extends Record<string, TSchema>, TSettings extends Record<string, TSchema> = Record<string, never>> = (c: ContentProxy<TContent>, s: SettingsProxy<TSettings>) => ReadonlyArray<string | FieldToken | Conditional>;
36
65
  declare const EmbedURLBrand: unique symbol;
37
- type EmbedURL = string & {
66
+ export type EmbedURL = string & {
38
67
  readonly [EmbedURLBrand]: true;
39
68
  };
40
- declare const ItemSettingsBrand: unique symbol;
41
- type WithItemSettings<S extends Record<string, TSchema>> = {
69
+ declare const ArtifactSourceBrand: unique symbol;
70
+ export type ArtifactSource = string & {
71
+ readonly [ArtifactSourceBrand]: true;
72
+ };
73
+ export declare const ItemSettingsBrand: unique symbol;
74
+ export type WithItemSettings<S extends Record<string, TSchema>> = {
42
75
  readonly [ItemSettingsBrand]?: S;
43
76
  };
44
77
  declare const LinkBrand: unique symbol;
45
- type LinkValue = ({
78
+ export type LinkValue = ({
46
79
  type: "external";
47
80
  href: string;
48
81
  } | {
@@ -54,7 +87,7 @@ type LinkValue = ({
54
87
  } & {
55
88
  readonly [LinkBrand]: true;
56
89
  };
57
- type ImageValue = {
90
+ export type ImageValue = {
58
91
  url: string;
59
92
  alt: string;
60
93
  filename: string;
@@ -64,7 +97,7 @@ type ImageValue = {
64
97
  } & {
65
98
  readonly __brand: "ImageValue";
66
99
  };
67
- type FileValue = {
100
+ export type FileValue = {
68
101
  url: string;
69
102
  alt: string;
70
103
  filename: string;
@@ -74,151 +107,319 @@ type FileValue = {
74
107
  } & {
75
108
  readonly __brand: "FileValue";
76
109
  };
110
+ export type StringField = TUnsafe<string> & {
111
+ fieldType: "String";
112
+ };
113
+ export type LinkField = TUnsafe<LinkValue>;
114
+ export type ImageField = TUnsafe<ImageValue>;
115
+ export type ImageListField = TArray<TUnsafe<ImageValue>>;
116
+ export type FileField = TUnsafe<FileValue>;
117
+ export type FileListField = TArray<TUnsafe<FileValue>>;
118
+ export type EmbedField = TUnsafe<EmbedURL>;
119
+ declare const ArtifactDataBrand: unique symbol;
120
+ /** An artifact field; `D` carries the names of its Artifact Data at the type level only. */
121
+ export type ArtifactField<D extends string = string> = TUnsafe<ArtifactSource> & {
122
+ fieldType: "Artifact";
123
+ readonly [ArtifactDataBrand]?: D;
124
+ };
125
+ export type IconField = TUnsafe<IconValue>;
126
+ export type RepeaterField<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = TArray<TObject<T>> & WithItemSettings<S>;
127
+ export type EnumSetting<O extends Record<string, string>> = TUnsafe<keyof O & string> & {
128
+ fieldType: "Enum";
129
+ };
130
+ export type BooleanSetting = TBoolean & {
131
+ fieldType: "Boolean";
132
+ };
133
+ type StringOptions = {
134
+ title?: string;
135
+ maxLength?: number;
136
+ minLength?: number;
137
+ pattern?: string;
138
+ };
77
139
  /**
78
- * Type builders for createBlock content schemas.
79
- * All fields must have default values.
140
+ * Builds the fields of a block or repeatable item's content.
141
+ * `enum` and `boolean` are not content: declare them in `settings` instead.
80
142
  */
81
- declare const Type$1: {
143
+ export interface ContentFieldBuilder {
144
+ /**
145
+ * An inline-editable text field.
146
+ *
147
+ * @example
148
+ * field.string({ default: "Hello", maxLength: 100, title: "Title" })
149
+ */
150
+ string: (options: StringOptions & {
151
+ default: string;
152
+ }) => StringField;
153
+ /**
154
+ * A link with text, a target (external URL or internal page) and a new-tab flag.
155
+ *
156
+ * @example
157
+ * field.link({ default: { text: "Learn more", href: "/", newTab: false }, title: "CTA" })
158
+ */
159
+ link: (options: {
160
+ default: {
161
+ text: string;
162
+ href: string;
163
+ newTab: boolean;
164
+ };
165
+ title?: string;
166
+ }) => LinkField;
82
167
  /**
83
- * Creates a string field with a required default value.
168
+ * An image asset.
84
169
  *
85
170
  * @example
86
- * Type.String({ default: 'Hello' })
87
- * Type.String({ default: 'Hello', maxLength: 100, title: 'Title' })
171
+ * field.image({ title: "Hero" })
172
+ */
173
+ image: (options?: {
174
+ title?: string;
175
+ required?: boolean;
176
+ }) => ImageField;
177
+ /**
178
+ * A list of image assets.
179
+ *
180
+ * @example
181
+ * field.imageList({ title: "Gallery", defaultItems: 3 })
182
+ */
183
+ imageList: (options?: {
184
+ title?: string;
185
+ defaultItems?: number;
186
+ }) => ImageListField;
187
+ /**
188
+ * A file asset.
189
+ *
190
+ * @example
191
+ * field.file({ accept: ["application/pdf"], title: "Datasheet" })
192
+ */
193
+ file: (options: {
194
+ accept: string[];
195
+ title?: string;
196
+ required?: boolean;
197
+ }) => FileField;
198
+ /**
199
+ * A list of file assets.
200
+ *
201
+ * @example
202
+ * field.fileList({ accept: ["application/pdf"], title: "Attachments" })
203
+ */
204
+ fileList: (options: {
205
+ accept: string[];
206
+ title?: string;
207
+ defaultItems?: number;
208
+ }) => FileListField;
209
+ /**
210
+ * A URL that must match `pattern`, rendered as an embed.
211
+ *
212
+ * @example
213
+ * field.embed({
214
+ * pattern: "https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+",
215
+ * default: "https://www.youtube.com/watch?v=dQw4w9WgXcQ",
216
+ * title: "YouTube URL",
217
+ * })
88
218
  */
89
- String: (options: {
219
+ embed: (options: {
220
+ pattern: string;
90
221
  default: string;
91
222
  title?: string;
92
- maxLength?: number;
93
- minLength?: number;
94
- pattern?: string;
95
- }) => TUnsafe<string>;
223
+ }) => EmbedField;
224
+ /**
225
+ * A self-contained web page, usually written by an agent, rendered in a sandboxed frame.
226
+ * `size: "fill"` fills a container whose size you control; `size: "content"` follows the
227
+ * page's height. The source is optional: an empty artifact renders nothing on the website.
228
+ *
229
+ * @example
230
+ * field.artifact({ size: "fill", title: "Hero visual" })
231
+ */
232
+ artifact: <const D extends string = never>(options: {
233
+ size: "fill" | "content";
234
+ /**
235
+ * Sibling content fields and settings shared with the artifact as Artifact Data. Inside a
236
+ * repeater, the siblings are the item's own fields and settings.
237
+ */
238
+ data?: readonly D[];
239
+ default?: string;
240
+ title?: string;
241
+ }) => ArtifactField<NoInfer<D>>;
242
+ /**
243
+ * An icon from the set configured in `camox()`.
244
+ *
245
+ * @example
246
+ * field.icon({ default: "lucide:star", title: "Icon" })
247
+ */
248
+ icon: (options: {
249
+ default: IconId;
250
+ title?: string;
251
+ }) => IconField;
252
+ /**
253
+ * Selects a record of `collection` by identity; its content is resolved independently.
254
+ *
255
+ * @example
256
+ * field.reference(customers, { title: "Customer" })
257
+ */
258
+ reference: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
259
+ title?: string;
260
+ required?: boolean;
261
+ }) => ReferenceSchema<T>;
96
262
  /**
97
- * Creates a repeatable array of object items.
98
- * The default array is auto-generated based on minItems.
263
+ * An ordered list of distinct records of `collection`; each resolves independently.
264
+ * An empty list is always valid, so there is no `required` or `minItems`.
265
+ * `toMarkdown` renders each linked record (one list item per record, in stored order);
266
+ * the block's own `toMarkdown` includes the whole list through its token.
99
267
  *
100
- * Items may also declare per-item `settings` (Enum/Boolean only) — not
101
- * inline-editable; they appear in the sidebar when the item is selected,
102
- * similar to block-level settings.
268
+ * With `query`, the list is query-backed: code defines its membership and order, editors
269
+ * cannot pick, remove or reorder records, and nothing is stored on the block.
103
270
  *
104
271
  * @example
105
- * Type.Repeater({
106
- * content: {
107
- * title: Type.String({ default: 'Item' }),
108
- * description: Type.String({ default: 'Description' }),
109
- * },
110
- * settings: {
111
- * highlighted: Type.Boolean({ default: false, title: 'Highlighted' }),
112
- * },
272
+ * field.referenceList(customers, { maxItems: 6, toMarkdown: (c) => [c.name] })
273
+ * field.referenceList(articles, { query: { orderBy: { publishedAt: "desc" }, limit: 3 } })
274
+ */
275
+ referenceList: <T extends Record<string, TSchema>, const L extends number = number>(collection: Collection<T>, options?: {
276
+ title?: string;
277
+ description?: string;
278
+ maxItems?: number;
279
+ query?: ReferenceQuery<T, L>;
280
+ toMarkdown?: ToMarkdownBuilder<T>;
281
+ }) => ReferenceListSchema<T>;
282
+ /**
283
+ * Repeatable items, each with its own content and optional settings. Repeaters may nest.
284
+ * Item settings are edited in the sidebar when the item is selected.
285
+ *
286
+ * @example
287
+ * field.repeater({
288
+ * content: (field) => ({
289
+ * title: field.string({ default: "Item" }),
290
+ * description: field.string({ default: "Description" }),
291
+ * }),
292
+ * settings: (setting) => ({
293
+ * highlighted: setting.boolean({ default: false, title: "Highlighted" }),
294
+ * }),
113
295
  * minItems: 1,
114
296
  * maxItems: 10,
115
- * title: 'Items',
116
- * toMarkdown: (c) => [`### ${c.title}`, c.description],
297
+ * title: "Items",
298
+ * toMarkdown: (c, s) => [`### ${c.title}`, s.highlighted(c.description)],
117
299
  * })
118
300
  */
119
- Repeater: <T extends Record<string, TSchema>, S extends Record<string, TSchema> = Record<string, never>>(options: {
120
- content: T;
121
- settings?: S;
301
+ repeater: <T extends Record<string, TSchema>, S extends Record<string, TSchema> = Record<string, never>>(options: {
302
+ content: (field: ContentFieldBuilder) => T & NoInfer<ArtifactDataCheck<T, S>>;
303
+ settings?: (setting: SettingBuilder) => S;
122
304
  minItems: number;
123
305
  maxItems: number;
124
306
  title?: string;
125
307
  toMarkdown: ToMarkdownBuilder<T, S>;
126
- }) => TArray<TObject<T>> & WithItemSettings<S>;
308
+ }) => RepeaterField<T, S>;
309
+ }
310
+ /** Content fields that can't be Artifact Data: artifact sources, repeaters and references. */
311
+ type UnsharedField = {
312
+ fieldType: "Artifact" | "Reference" | "ReferenceList";
313
+ } | TArray<TObject<any>>;
314
+ /** The sibling names an artifact can list in `data`: shared content fields, then settings. */
315
+ export type ArtifactDataName<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = { [K in keyof T & string]: T[K] extends UnsharedField ? never : K; }[keyof T & string] | (string extends keyof S ? never : keyof S & string);
316
+ /**
317
+ * Checks each artifact's `data` against its siblings. Applied to the `content` callback's return
318
+ * type, because callback parameters are context-sensitive (ADR 0001).
319
+ */
320
+ export type ArtifactDataCheck<T extends Record<string, TSchema>, S extends Record<string, TSchema>> = true extends HasAnyField<T> ? unknown : { [K in ArtifactKey<T>]: ArtifactField<ArtifactDataName<T, S>>; };
321
+ /** Shapes with fields that already fail to type check (`any`) are left to that error. */
322
+ type HasAnyField<T extends Record<string, TSchema>> = { [K in keyof T]-?: 0 extends 1 & T[K] ? true : false; }[keyof T];
323
+ type ArtifactKey<T extends Record<string, TSchema>> = { [K in keyof T & string]-?: T[K] extends {
324
+ fieldType: "Artifact";
325
+ } ? K : never; }[keyof T & string];
326
+ /**
327
+ * Builds the settings of a block or repeatable item: presentation options edited in the
328
+ * sidebar, never inline. Only `enum` and `boolean` are settings.
329
+ */
330
+ export interface SettingBuilder {
127
331
  /**
128
- * Creates an enum field with a set of predefined options.
332
+ * One of a fixed set of options; keys are stored, values are editor labels.
129
333
  *
130
334
  * @example
131
- * Type.Enum({
132
- * default: 'left',
133
- * options: { left: 'Left', center: 'Center', right: 'Right' },
134
- * title: 'Alignment'
135
- * })
335
+ * setting.enum({ default: "left", options: { left: "Left", right: "Right" }, title: "Alignment" })
136
336
  */
137
- Enum: <const O extends Record<string, string>>(options: {
337
+ enum: <const O extends Record<string, string>>(options: {
138
338
  default: keyof O & string;
139
339
  options: O;
140
340
  title?: string;
141
- }) => TUnsafe<keyof O & string>;
341
+ }) => EnumSetting<O>;
142
342
  /**
143
- * Creates a boolean toggle field.
343
+ * A toggle.
144
344
  *
145
345
  * @example
146
- * Type.Boolean({ default: false, title: 'Show background' })
346
+ * setting.boolean({ default: false, title: "Show background" })
147
347
  */
148
- Boolean: (options: {
348
+ boolean: (options: {
149
349
  default: boolean;
150
350
  title?: string;
151
- }) => _$_sinclair_typebox0.TBoolean;
351
+ }) => BooleanSetting;
352
+ }
353
+ /**
354
+ * Builds the fields of a collection record. Records are created through an authoring form, so
355
+ * `string` needs no default. Collections have no settings: `enum` and `boolean` are content here.
356
+ */
357
+ export interface CollectionFieldBuilder extends Pick<ContentFieldBuilder, "imageList" | "fileList" | "embed"> {
152
358
  /**
153
- * Creates an embed field for URLs matching a specific pattern.
359
+ * An image asset. Never required: collection fields can't be (the API rejects it).
154
360
  *
155
361
  * @example
156
- * Type.Embed({
157
- * pattern: 'https:\\/\\/(www\\.)?youtube\\.com\\/watch\\?v=.+',
158
- * default: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
159
- * title: 'YouTube URL'
160
- * })
362
+ * field.image({ title: "Cover" })
161
363
  */
162
- Embed: (options: {
163
- pattern: string;
164
- default: string;
364
+ image: (options?: {
165
365
  title?: string;
166
- }) => TUnsafe<EmbedURL>;
366
+ }) => ImageField;
167
367
  /**
168
- * Creates a link field with text, href/pageId, and newTab properties.
169
- * Supports both external URLs and internal page links.
368
+ * A file asset. Never required: collection fields can't be (the API rejects it).
170
369
  *
171
370
  * @example
172
- * Type.Link({ default: { text: 'Learn more', href: '/', newTab: false }, title: 'CTA' })
371
+ * field.file({ accept: ["application/pdf"], title: "Brochure" })
173
372
  */
174
- Link: (options: {
175
- default: {
176
- text: string;
177
- href: string;
178
- newTab: boolean;
179
- };
373
+ file: (options: {
374
+ accept: string[];
180
375
  title?: string;
181
- }) => TUnsafe<LinkValue>;
376
+ }) => FileField;
182
377
  /**
183
- * Creates an image asset field.
378
+ * An ordered list of distinct records of another collection, e.g. an article's co-authors.
379
+ * Collections hold manual lists only: a query would fan out across a whole collection.
184
380
  *
185
381
  * @example
186
- * Type.Image({ title: 'Hero' })
382
+ * field.referenceList(authors, { title: "Co-authors" })
187
383
  */
188
- Image: (options?: {
384
+ referenceList: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
189
385
  title?: string;
190
- }) => TUnsafe<ImageValue>;
386
+ description?: string;
387
+ maxItems?: number;
388
+ toMarkdown?: ToMarkdownBuilder<T>;
389
+ }) => ReferenceListSchema<T>;
191
390
  /**
192
- * Creates a file asset field.
391
+ * Selects a record of another collection by identity, e.g. an article's author. Never
392
+ * required: an unpublished record resolves empty on the live site.
193
393
  *
194
394
  * @example
195
- * Type.File({ accept: ['application/pdf'], title: 'Datasheet' })
395
+ * field.reference(authors, { title: "Author" })
196
396
  */
197
- File: (options: {
198
- accept: string[];
397
+ reference: <T extends Record<string, TSchema>>(collection: Collection<T>, options?: {
199
398
  title?: string;
200
- }) => TUnsafe<FileValue>;
399
+ }) => ReferenceSchema<T>;
201
400
  /**
202
- * Creates an array of image assets.
401
+ * A text field.
203
402
  *
204
403
  * @example
205
- * Type.ImageList({ title: 'Gallery', defaultItems: 3 })
404
+ * field.string({ minLength: 1, title: "Name" })
206
405
  */
207
- ImageList: (options?: {
208
- title?: string;
209
- defaultItems?: number;
210
- }) => TArray<TUnsafe<ImageValue>>;
406
+ string: (options?: StringOptions & {
407
+ default?: string;
408
+ }) => StringField;
211
409
  /**
212
- * Creates an array of file assets.
410
+ * One of a fixed set of options; keys are stored, values are editor labels.
213
411
  *
214
412
  * @example
215
- * Type.FileList({ accept: ['application/pdf'], title: 'Attachments' })
413
+ * field.enum({ default: "draft", options: { draft: "Draft", final: "Final" } })
216
414
  */
217
- FileList: (options: {
218
- accept: string[];
219
- title?: string;
220
- defaultItems?: number;
221
- }) => TArray<TUnsafe<FileValue>>;
222
- };
415
+ enum: SettingBuilder["enum"];
416
+ /**
417
+ * A toggle.
418
+ *
419
+ * @example
420
+ * field.boolean({ default: false, title: "Featured" })
421
+ */
422
+ boolean: SettingBuilder["boolean"];
423
+ }
223
424
  //#endregion
224
- export { EmbedURL, FileValue, ImageValue, ItemSettingsBrand, LinkValue, ToMarkdownBuilder, Type$1 as Type };
425
+ export {};