camox 0.44.0 → 0.46.0

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