canopycms 0.0.68-int.98 → 0.1.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 (688) hide show
  1. package/CHANGELOG.md +2131 -0
  2. package/README.md +47 -63
  3. package/dist/ai/generate.d.ts +5 -0
  4. package/dist/ai/generate.js +244 -115
  5. package/dist/ai/index.d.ts +1 -1
  6. package/dist/ai/json-to-markdown.d.ts +21 -1
  7. package/dist/ai/json-to-markdown.js +120 -57
  8. package/dist/ai/references.d.ts +72 -0
  9. package/dist/ai/references.js +223 -0
  10. package/dist/ai/resolve-branch.js +9 -2
  11. package/dist/ai/to-plain-text.d.ts +17 -8
  12. package/dist/ai/to-plain-text.js +18 -15
  13. package/dist/ai/types.d.ts +84 -3
  14. package/dist/api/admin-branch-health.d.ts +24 -1
  15. package/dist/api/admin-branch-health.js +52 -20
  16. package/dist/api/admin.d.ts +23 -5
  17. package/dist/api/admin.js +36 -1
  18. package/dist/api/assets.js +88 -78
  19. package/dist/api/branch-create-window.d.ts +12 -0
  20. package/dist/api/branch-create-window.js +13 -0
  21. package/dist/api/branch-merge.d.ts +1 -1
  22. package/dist/api/branch-merge.js +1 -1
  23. package/dist/api/branch-review.d.ts +3 -3
  24. package/dist/api/branch-review.js +16 -7
  25. package/dist/api/branch-status.d.ts +16 -6
  26. package/dist/api/branch-status.js +57 -12
  27. package/dist/api/branch-withdraw.d.ts +2 -2
  28. package/dist/api/branch-withdraw.js +8 -3
  29. package/dist/api/branch.d.ts +25 -12
  30. package/dist/api/branch.js +164 -103
  31. package/dist/api/client.d.ts +78 -58
  32. package/dist/api/client.js +150 -117
  33. package/dist/api/comments.d.ts +12 -3
  34. package/dist/api/comments.js +118 -9
  35. package/dist/api/content.d.ts +9 -9
  36. package/dist/api/content.js +131 -22
  37. package/dist/api/entries-constants.d.ts +14 -3
  38. package/dist/api/entries-constants.js +14 -3
  39. package/dist/api/entries.d.ts +40 -2
  40. package/dist/api/entries.js +102 -6
  41. package/dist/api/github-sync.d.ts +19 -0
  42. package/dist/api/github-sync.js +50 -3
  43. package/dist/api/groups.d.ts +4 -4
  44. package/dist/api/groups.js +2 -1
  45. package/dist/api/guards.js +23 -3
  46. package/dist/api/index.d.ts +3 -1
  47. package/dist/api/index.js +1 -0
  48. package/dist/api/permissions.d.ts +21 -2
  49. package/dist/api/permissions.js +50 -3
  50. package/dist/api/request-deadline.d.ts +59 -0
  51. package/dist/api/request-deadline.js +73 -0
  52. package/dist/api/resolve-references.js +8 -7
  53. package/dist/api/route-builder.d.ts +14 -0
  54. package/dist/api/route-builder.js +14 -1
  55. package/dist/api/schema.d.ts +11 -9
  56. package/dist/api/schema.js +2 -0
  57. package/dist/api/settings-helpers.d.ts +5 -1
  58. package/dist/api/settings-helpers.js +10 -2
  59. package/dist/api/types.d.ts +18 -0
  60. package/dist/api/users-constants.d.ts +6 -0
  61. package/dist/api/users-constants.js +6 -0
  62. package/dist/assets/asset-url.d.ts +28 -16
  63. package/dist/assets/asset-url.js +51 -25
  64. package/dist/assets/finalize.js +3 -0
  65. package/dist/assets/index.d.ts +1 -1
  66. package/dist/assets/materialize.d.ts +153 -0
  67. package/dist/assets/materialize.js +402 -0
  68. package/dist/assets/store-local.d.ts +19 -5
  69. package/dist/assets/store-local.js +69 -10
  70. package/dist/assets/store-s3.d.ts +38 -7
  71. package/dist/assets/store-s3.js +128 -22
  72. package/dist/assets/transform-directives.d.ts +52 -13
  73. package/dist/assets/transform-directives.js +87 -27
  74. package/dist/assets/transform.d.ts +3 -3
  75. package/dist/assets/transform.js +13 -8
  76. package/dist/assets/types.d.ts +31 -4
  77. package/dist/auth/cache.d.ts +1 -1
  78. package/dist/auth/cache.js +1 -1
  79. package/dist/auth/caching-auth-plugin.d.ts +2 -0
  80. package/dist/auth/caching-auth-plugin.js +12 -2
  81. package/dist/auth/file-based-auth-cache.d.ts +8 -0
  82. package/dist/auth/file-based-auth-cache.js +18 -8
  83. package/dist/auth/person-name.d.ts +5 -0
  84. package/dist/auth/person-name.js +8 -0
  85. package/dist/auth/plugin.d.ts +10 -1
  86. package/dist/auth/types.d.ts +2 -0
  87. package/dist/auth/user-metadata-lookup.d.ts +21 -0
  88. package/dist/auth/user-metadata-lookup.js +116 -0
  89. package/dist/authorization/branch.d.ts +1 -1
  90. package/dist/authorization/branch.js +12 -13
  91. package/dist/authorization/groups/schema.d.ts +4 -4
  92. package/dist/authorization/helpers.d.ts +8 -0
  93. package/dist/authorization/helpers.js +8 -0
  94. package/dist/authorization/index.d.ts +1 -1
  95. package/dist/authorization/index.js +1 -1
  96. package/dist/authorization/protected-branch.d.ts +5 -4
  97. package/dist/authorization/protected-branch.js +7 -5
  98. package/dist/branch-health.d.ts +35 -8
  99. package/dist/branch-health.js +54 -18
  100. package/dist/branch-metadata-error.d.ts +27 -0
  101. package/dist/branch-metadata-error.js +23 -0
  102. package/dist/branch-metadata-file.d.ts +205 -24
  103. package/dist/branch-metadata-file.js +126 -25
  104. package/dist/branch-metadata.d.ts +45 -6
  105. package/dist/branch-metadata.js +142 -50
  106. package/dist/branch-provisioning.d.ts +167 -0
  107. package/dist/branch-provisioning.js +501 -0
  108. package/dist/branch-registry.d.ts +8 -0
  109. package/dist/branch-registry.js +61 -9
  110. package/dist/branch-schema-cache.d.ts +29 -12
  111. package/dist/branch-schema-cache.js +64 -21
  112. package/dist/branch-sparse.d.ts +23 -0
  113. package/dist/branch-sparse.js +118 -0
  114. package/dist/branch-workspace.d.ts +42 -3
  115. package/dist/branch-workspace.js +239 -100
  116. package/dist/build/asset-refs.d.ts +94 -0
  117. package/dist/build/asset-refs.js +267 -0
  118. package/dist/build/generate-ai-content.js +5 -0
  119. package/dist/build/inline-flight.d.ts +37 -0
  120. package/dist/build/inline-flight.js +142 -0
  121. package/dist/cli/asset-refs.d.ts +52 -0
  122. package/dist/cli/asset-refs.js +194 -0
  123. package/dist/cli/cli.d.ts +15 -1
  124. package/dist/cli/cli.js +8543 -3193
  125. package/dist/cli/configured-asset-store.d.ts +12 -0
  126. package/dist/cli/configured-asset-store.js +46 -0
  127. package/dist/cli/generate-ai-content.js +4244 -1072
  128. package/dist/cli/init.js +217 -126
  129. package/dist/cli/project-detect.d.ts +2 -0
  130. package/dist/cli/project-detect.js +2 -0
  131. package/dist/cli/template-files/Dockerfile.cms.template +13 -5
  132. package/dist/cli/template-files/cms-stack.ts.template +16 -13
  133. package/dist/client.d.ts +1 -2
  134. package/dist/client.js +1 -2
  135. package/dist/comment-store.d.ts +25 -0
  136. package/dist/comment-store.js +43 -8
  137. package/dist/config/flatten.js +2 -0
  138. package/dist/config/helpers.js +2 -2
  139. package/dist/config/index.d.ts +1 -1
  140. package/dist/config/schemas/config.d.ts +12 -29
  141. package/dist/config/schemas/config.js +9 -12
  142. package/dist/config/schemas/field.d.ts +3 -0
  143. package/dist/config/schemas/field.js +58 -4
  144. package/dist/config/schemas/media.d.ts +4 -13
  145. package/dist/config/schemas/media.js +5 -8
  146. package/dist/config/schemas/url.d.ts +2 -20
  147. package/dist/config/schemas/url.js +2 -25
  148. package/dist/config/types.d.ts +116 -22
  149. package/dist/config/types.js +3 -9
  150. package/dist/config/validation.d.ts +25 -4
  151. package/dist/config/validation.js +116 -3
  152. package/dist/content-id-index.js +2 -2
  153. package/dist/content-index-generation.d.ts +1 -1
  154. package/dist/content-index-generation.js +1 -1
  155. package/dist/content-listing.d.ts +10 -1
  156. package/dist/content-listing.js +22 -5
  157. package/dist/content-reader.d.ts +9 -0
  158. package/dist/content-reader.js +16 -11
  159. package/dist/content-store.d.ts +75 -12
  160. package/dist/content-store.js +249 -86
  161. package/dist/content-tree.js +2 -2
  162. package/dist/context.js +5 -2
  163. package/dist/dangling-reference-log.d.ts +17 -0
  164. package/dist/dangling-reference-log.js +29 -0
  165. package/dist/dev-content-watcher.d.ts +1 -1
  166. package/dist/dev-content-watcher.js +1 -1
  167. package/dist/editor/BranchManager.d.ts +23 -7
  168. package/dist/editor/BranchManager.js +119 -54
  169. package/dist/editor/CanopyEditor.d.ts +1 -1
  170. package/dist/editor/CanopyEditor.js +1 -2
  171. package/dist/editor/CommentsPanel.d.ts +14 -0
  172. package/dist/editor/CommentsPanel.js +68 -43
  173. package/dist/editor/Editor.d.ts +11 -5
  174. package/dist/editor/Editor.js +891 -218
  175. package/dist/editor/EditorAuthGate.d.ts +7 -1
  176. package/dist/editor/EditorAuthGate.js +41 -9
  177. package/dist/editor/EntryNavigator.d.ts +22 -0
  178. package/dist/editor/EntryNavigator.js +353 -105
  179. package/dist/editor/FormHeader.d.ts +25 -0
  180. package/dist/editor/FormHeader.js +82 -0
  181. package/dist/editor/FormRenderer.d.ts +27 -3
  182. package/dist/editor/FormRenderer.js +171 -76
  183. package/dist/editor/PreviewFrame.d.ts +40 -0
  184. package/dist/editor/PreviewFrame.js +215 -0
  185. package/dist/editor/PreviewPane.d.ts +47 -0
  186. package/dist/editor/PreviewPane.js +147 -0
  187. package/dist/editor/PreviewToolbarTools.d.ts +22 -0
  188. package/dist/editor/PreviewToolbarTools.js +73 -0
  189. package/dist/editor/admin/SystemHealthPanel.d.ts +2 -1
  190. package/dist/editor/admin/SystemHealthPanel.js +163 -33
  191. package/dist/editor/admin/useSystemHealth.d.ts +18 -0
  192. package/dist/editor/admin/useSystemHealth.js +70 -1
  193. package/dist/editor/branch-status.d.ts +17 -0
  194. package/dist/editor/branch-status.js +29 -0
  195. package/dist/editor/canopy-path.d.ts +9 -6
  196. package/dist/editor/canopy-path.js +8 -11
  197. package/dist/editor/client-reference-resolver.d.ts +43 -16
  198. package/dist/editor/client-reference-resolver.js +155 -64
  199. package/dist/editor/comments/BranchComments.d.ts +1 -1
  200. package/dist/editor/comments/BranchComments.js +2 -2
  201. package/dist/editor/comments/CloseRefusedNotice.d.ts +4 -0
  202. package/dist/editor/comments/CloseRefusedNotice.js +7 -0
  203. package/dist/editor/comments/CommentThreadsPopover.d.ts +47 -0
  204. package/dist/editor/comments/CommentThreadsPopover.js +274 -0
  205. package/dist/editor/comments/CommentWriteAlert.d.ts +11 -0
  206. package/dist/editor/comments/CommentWriteAlert.js +13 -0
  207. package/dist/editor/comments/EntryComments.d.ts +10 -4
  208. package/dist/editor/comments/EntryComments.js +14 -17
  209. package/dist/editor/comments/FieldWrapper.d.ts +18 -4
  210. package/dist/editor/comments/FieldWrapper.js +62 -28
  211. package/dist/editor/comments/InlineCommentThread.d.ts +9 -2
  212. package/dist/editor/comments/InlineCommentThread.js +11 -47
  213. package/dist/editor/comments/ThreadCarousel.d.ts +1 -1
  214. package/dist/editor/comments/ThreadCarousel.js +18 -21
  215. package/dist/editor/comments/ThreadReplyControls.d.ts +28 -0
  216. package/dist/editor/comments/ThreadReplyControls.js +92 -0
  217. package/dist/editor/comments/field-comment-context.d.ts +14 -0
  218. package/dist/editor/comments/field-comment-context.js +14 -0
  219. package/dist/editor/comments/form-comments.d.ts +48 -0
  220. package/dist/editor/comments/form-comments.js +178 -0
  221. package/dist/editor/comments/item-anchor-copy.d.ts +6 -0
  222. package/dist/editor/comments/item-anchor-copy.js +6 -0
  223. package/dist/editor/comments/move-focus-if-unmoved.d.ts +6 -0
  224. package/dist/editor/comments/move-focus-if-unmoved.js +11 -0
  225. package/dist/editor/comments/popover-placement.d.ts +18 -0
  226. package/dist/editor/comments/popover-placement.js +58 -0
  227. package/dist/editor/comments/use-tracked-writes.d.ts +16 -0
  228. package/dist/editor/comments/use-tracked-writes.js +53 -0
  229. package/dist/editor/components/BranchAccessList.d.ts +15 -0
  230. package/dist/editor/components/BranchAccessList.js +52 -0
  231. package/dist/editor/components/BranchLockBanner.d.ts +22 -0
  232. package/dist/editor/components/BranchLockBanner.js +39 -0
  233. package/dist/editor/components/BranchPill.d.ts +32 -0
  234. package/dist/editor/components/BranchPill.js +33 -0
  235. package/dist/editor/components/BranchesDrawer.d.ts +11 -0
  236. package/dist/editor/components/BranchesDrawer.js +5 -0
  237. package/dist/editor/components/ConfirmDeleteModal.d.ts +6 -1
  238. package/dist/editor/components/ConfirmDeleteModal.js +3 -2
  239. package/dist/editor/components/DestructiveMenuItem.d.ts +7 -0
  240. package/dist/editor/components/DestructiveMenuItem.js +8 -0
  241. package/dist/editor/components/EditorCrashScreen.d.ts +17 -0
  242. package/dist/editor/components/EditorCrashScreen.js +22 -0
  243. package/dist/editor/components/EditorErrorBoundary.d.ts +38 -0
  244. package/dist/editor/components/EditorErrorBoundary.js +40 -0
  245. package/dist/editor/components/EditorHeader.d.ts +56 -106
  246. package/dist/editor/components/EditorHeader.js +130 -131
  247. package/dist/editor/components/EditorRail.d.ts +49 -0
  248. package/dist/editor/components/EditorRail.js +65 -0
  249. package/dist/editor/components/EntryBreadcrumb.d.ts +33 -0
  250. package/dist/editor/components/EntryBreadcrumb.js +56 -0
  251. package/dist/editor/components/EntryCreateModal.d.ts +12 -7
  252. package/dist/editor/components/EntryCreateModal.js +51 -57
  253. package/dist/editor/components/NoEditPermissionNotice.d.ts +6 -5
  254. package/dist/editor/components/NoEditPermissionNotice.js +5 -4
  255. package/dist/editor/components/QuickOpenPalette.d.ts +22 -0
  256. package/dist/editor/components/QuickOpenPalette.js +66 -0
  257. package/dist/editor/components/ReadOnlyDraftNotice.d.ts +11 -0
  258. package/dist/editor/components/ReadOnlyDraftNotice.js +12 -0
  259. package/dist/editor/components/ReasonedMenuItem.d.ts +15 -0
  260. package/dist/editor/components/ReasonedMenuItem.js +15 -0
  261. package/dist/editor/components/ReferencedByList.d.ts +11 -0
  262. package/dist/editor/components/ReferencedByList.js +28 -0
  263. package/dist/editor/components/RelativeTime.d.ts +10 -0
  264. package/dist/editor/components/RelativeTime.js +10 -0
  265. package/dist/editor/components/RenameEntryModal.d.ts +9 -1
  266. package/dist/editor/components/RenameEntryModal.js +19 -31
  267. package/dist/editor/components/RetryToastMessage.d.ts +9 -0
  268. package/dist/editor/components/RetryToastMessage.js +6 -0
  269. package/dist/editor/components/SaveAllResult.d.ts +25 -0
  270. package/dist/editor/components/SaveAllResult.js +86 -0
  271. package/dist/editor/components/SaveSplitButton.d.ts +30 -0
  272. package/dist/editor/components/SaveSplitButton.js +108 -0
  273. package/dist/editor/components/StagedChangesDrawer.d.ts +39 -0
  274. package/dist/editor/components/StagedChangesDrawer.js +92 -0
  275. package/dist/editor/components/UnavailableEntryNotice.d.ts +6 -0
  276. package/dist/editor/components/UnavailableEntryNotice.js +9 -0
  277. package/dist/editor/components/UnavailableTypeMessage.d.ts +6 -0
  278. package/dist/editor/components/UnavailableTypeMessage.js +9 -0
  279. package/dist/editor/components/UndoToastMessage.d.ts +18 -0
  280. package/dist/editor/components/UndoToastMessage.js +10 -0
  281. package/dist/editor/components/UserBadge.d.ts +2 -5
  282. package/dist/editor/components/UserBadge.js +62 -33
  283. package/dist/editor/components/ValidationSummary.d.ts +14 -0
  284. package/dist/editor/components/ValidationSummary.js +24 -0
  285. package/dist/editor/components/index.d.ts +2 -2
  286. package/dist/editor/components/index.js +2 -2
  287. package/dist/editor/context/ApiClientContext.d.ts +8 -2
  288. package/dist/editor/context/ApiClientContext.js +19 -8
  289. package/dist/editor/context/AssetContext.d.ts +13 -35
  290. package/dist/editor/context/AssetContext.js +12 -31
  291. package/dist/editor/context/EditorStateContext.d.ts +4 -4
  292. package/dist/editor/context/EditorStateContext.js +4 -4
  293. package/dist/editor/context/SWRProvider.d.ts +3 -3
  294. package/dist/editor/context/SiteMdxAllowContext.d.ts +4 -0
  295. package/dist/editor/context/SiteMdxAllowContext.js +7 -0
  296. package/dist/editor/context/index.d.ts +2 -1
  297. package/dist/editor/context/index.js +2 -1
  298. package/dist/editor/contrast.d.ts +19 -0
  299. package/dist/editor/contrast.js +41 -0
  300. package/dist/editor/copy.d.ts +18 -0
  301. package/dist/editor/copy.js +18 -0
  302. package/dist/editor/editor-config.js +16 -0
  303. package/dist/editor/editor-utils.d.ts +34 -8
  304. package/dist/editor/editor-utils.js +42 -20
  305. package/dist/editor/entry-search.d.ts +20 -0
  306. package/dist/editor/entry-search.js +34 -0
  307. package/dist/editor/field-breadcrumb.d.ts +12 -0
  308. package/dist/editor/field-breadcrumb.js +85 -0
  309. package/dist/editor/field-props.d.ts +86 -0
  310. package/dist/editor/field-props.js +27 -0
  311. package/dist/editor/field-target.d.ts +30 -0
  312. package/dist/editor/field-target.js +77 -0
  313. package/dist/editor/fields/BlockField.d.ts +12 -0
  314. package/dist/editor/fields/BlockField.js +89 -73
  315. package/dist/editor/fields/CodeField.d.ts +2 -0
  316. package/dist/editor/fields/CodeField.js +6 -2
  317. package/dist/editor/fields/DateTimeField.d.ts +4 -29
  318. package/dist/editor/fields/DateTimeField.js +79 -41
  319. package/dist/editor/fields/ExpandAllButton.d.ts +6 -0
  320. package/dist/editor/fields/ExpandAllButton.js +4 -0
  321. package/dist/editor/fields/FieldCrashFallback.d.ts +17 -0
  322. package/dist/editor/fields/FieldCrashFallback.js +30 -0
  323. package/dist/editor/fields/FieldLabel.d.ts +37 -0
  324. package/dist/editor/fields/FieldLabel.js +19 -0
  325. package/dist/editor/fields/ImageField.d.ts +4 -0
  326. package/dist/editor/fields/ImageField.js +29 -14
  327. package/dist/editor/fields/InlineGroupField.js +4 -3
  328. package/dist/editor/fields/ItemList.d.ts +42 -0
  329. package/dist/editor/fields/ItemList.js +130 -0
  330. package/dist/editor/fields/MarkdownField.d.ts +32 -0
  331. package/dist/editor/fields/MarkdownField.js +223 -46
  332. package/dist/editor/fields/MdxImageDialog.js +1 -1
  333. package/dist/editor/fields/NumberField.d.ts +2 -0
  334. package/dist/editor/fields/NumberField.js +8 -5
  335. package/dist/editor/fields/NumberListField.d.ts +2 -0
  336. package/dist/editor/fields/NumberListField.js +19 -16
  337. package/dist/editor/fields/ObjectField.d.ts +2 -7
  338. package/dist/editor/fields/ObjectField.js +15 -5
  339. package/dist/editor/fields/ObjectListField.d.ts +29 -0
  340. package/dist/editor/fields/ObjectListField.js +57 -0
  341. package/dist/editor/fields/ReferenceField.d.ts +2 -0
  342. package/dist/editor/fields/ReferenceField.js +34 -9
  343. package/dist/editor/fields/SelectField.d.ts +2 -0
  344. package/dist/editor/fields/SelectField.js +11 -2
  345. package/dist/editor/fields/StringListField.d.ts +4 -1
  346. package/dist/editor/fields/StringListField.js +22 -8
  347. package/dist/editor/fields/TextField.d.ts +2 -0
  348. package/dist/editor/fields/TextField.js +6 -2
  349. package/dist/editor/fields/ToggleField.d.ts +2 -0
  350. package/dist/editor/fields/ToggleField.js +8 -3
  351. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +1 -1
  352. package/dist/editor/fields/entry-link/InsertEntryLink.js +1 -1
  353. package/dist/editor/fields/form-expansion.d.ts +9 -0
  354. package/dist/editor/fields/form-expansion.js +2 -0
  355. package/dist/editor/fields/item-expansion.d.ts +15 -0
  356. package/dist/editor/fields/item-expansion.js +60 -0
  357. package/dist/editor/fields/list-item-keys.d.ts +8 -0
  358. package/dist/editor/fields/list-item-keys.js +50 -0
  359. package/dist/editor/fields/list-item-title.d.ts +20 -0
  360. package/dist/editor/fields/list-item-title.js +85 -0
  361. package/dist/editor/fields/markdown-export-options.d.ts +2 -0
  362. package/dist/editor/fields/markdown-export-options.js +8 -0
  363. package/dist/editor/fields/markdown-fidelity-visitors.d.ts +11 -0
  364. package/dist/editor/fields/markdown-fidelity-visitors.js +160 -0
  365. package/dist/editor/fields/mdx-jsx-support.d.ts +5 -1
  366. package/dist/editor/fields/mdx-jsx-support.js +157 -69
  367. package/dist/editor/fields/rich-text-failures.d.ts +5 -0
  368. package/dist/editor/fields/rich-text-failures.js +26 -0
  369. package/dist/editor/fields/toolbar-wrap.d.ts +7 -0
  370. package/dist/editor/fields/toolbar-wrap.js +35 -0
  371. package/dist/editor/form-outline.d.ts +13 -0
  372. package/dist/editor/form-outline.js +70 -0
  373. package/dist/editor/group-manager/GroupCard.d.ts +4 -1
  374. package/dist/editor/group-manager/GroupCard.js +12 -3
  375. package/dist/editor/group-manager/GroupForm.js +1 -1
  376. package/dist/editor/group-manager/InternalGroupsTab.d.ts +2 -1
  377. package/dist/editor/group-manager/InternalGroupsTab.js +4 -4
  378. package/dist/editor/group-manager/MemberList.d.ts +2 -1
  379. package/dist/editor/group-manager/MemberList.js +15 -4
  380. package/dist/editor/group-manager/hooks/useGroupState.d.ts +5 -0
  381. package/dist/editor/group-manager/hooks/useGroupState.js +30 -7
  382. package/dist/editor/group-manager/index.js +34 -5
  383. package/dist/editor/group-manager/types.d.ts +5 -2
  384. package/dist/editor/hooks/create-branch-request.d.ts +20 -0
  385. package/dist/editor/hooks/create-branch-request.js +54 -0
  386. package/dist/editor/hooks/save-all.d.ts +68 -0
  387. package/dist/editor/hooks/save-all.js +61 -0
  388. package/dist/editor/hooks/useBranchActions.d.ts +11 -1
  389. package/dist/editor/hooks/useBranchActions.js +42 -19
  390. package/dist/editor/hooks/useBranchManager.d.ts +21 -0
  391. package/dist/editor/hooks/useBranchManager.js +321 -125
  392. package/dist/editor/hooks/useBranchesData.d.ts +8 -4
  393. package/dist/editor/hooks/useBranchesData.js +9 -5
  394. package/dist/editor/hooks/useCommentSystem.d.ts +14 -2
  395. package/dist/editor/hooks/useCommentSystem.js +79 -55
  396. package/dist/editor/hooks/useCommentsData.d.ts +11 -7
  397. package/dist/editor/hooks/useCommentsData.js +20 -19
  398. package/dist/editor/hooks/useDraftManager.d.ts +77 -3
  399. package/dist/editor/hooks/useDraftManager.js +887 -94
  400. package/dist/editor/hooks/useEditorLayout.d.ts +53 -7
  401. package/dist/editor/hooks/useEditorLayout.js +98 -20
  402. package/dist/editor/hooks/useEntriesData.d.ts +2 -1
  403. package/dist/editor/hooks/useEntriesData.js +18 -4
  404. package/dist/editor/hooks/useEntryManager.d.ts +41 -2
  405. package/dist/editor/hooks/useEntryManager.js +227 -41
  406. package/dist/editor/hooks/useGroupManager.js +13 -16
  407. package/dist/editor/hooks/usePermissionManager.js +14 -6
  408. package/dist/editor/hooks/usePreviewMarks.d.ts +21 -0
  409. package/dist/editor/hooks/usePreviewMarks.js +33 -0
  410. package/dist/editor/hooks/useReferenceResolution.d.ts +10 -3
  411. package/dist/editor/hooks/useReferenceResolution.js +34 -177
  412. package/dist/editor/hooks/useSchemaManager.d.ts +25 -6
  413. package/dist/editor/hooks/useSchemaManager.js +97 -39
  414. package/dist/editor/hooks/useUserMetadata.d.ts +14 -4
  415. package/dist/editor/hooks/useUserMetadata.js +76 -47
  416. package/dist/editor/hooks/user-metadata-batcher.d.ts +8 -0
  417. package/dist/editor/hooks/user-metadata-batcher.js +33 -0
  418. package/dist/editor/media/AssetCard.d.ts +6 -7
  419. package/dist/editor/media/AssetCard.js +24 -31
  420. package/dist/editor/media/AssetListRow.d.ts +16 -0
  421. package/dist/editor/media/AssetListRow.js +41 -0
  422. package/dist/editor/media/CropStep.js +6 -1
  423. package/dist/editor/media/MediaLibrary.d.ts +4 -3
  424. package/dist/editor/media/MediaLibrary.js +11 -4
  425. package/dist/editor/media/MediaLibraryBody.d.ts +3 -3
  426. package/dist/editor/media/MediaLibraryBody.js +195 -80
  427. package/dist/editor/media/MediaLibrarySkeleton.d.ts +6 -0
  428. package/dist/editor/media/MediaLibrarySkeleton.js +14 -0
  429. package/dist/editor/media/crop-math.d.ts +3 -4
  430. package/dist/editor/media/crop-math.js +11 -22
  431. package/dist/editor/media/editor-image-src.d.ts +8 -0
  432. package/dist/editor/media/editor-image-src.js +10 -0
  433. package/dist/editor/media/format-bytes.d.ts +2 -0
  434. package/dist/editor/media/format-bytes.js +23 -0
  435. package/dist/editor/media/media-library-prefs.d.ts +23 -0
  436. package/dist/editor/media/media-library-prefs.js +49 -0
  437. package/dist/editor/media/media-library-view.d.ts +34 -0
  438. package/dist/editor/media/media-library-view.js +40 -0
  439. package/dist/editor/media/useAssetLibrary.d.ts +30 -0
  440. package/dist/editor/media/useAssetLibrary.js +126 -0
  441. package/dist/editor/media/useStableAssetOrder.d.ts +11 -0
  442. package/dist/editor/media/useStableAssetOrder.js +37 -0
  443. package/dist/editor/media/useThumbnailFailure.d.ts +6 -0
  444. package/dist/editor/media/useThumbnailFailure.js +16 -0
  445. package/dist/editor/permission-manager/GroupSelector.js +2 -2
  446. package/dist/editor/permission-manager/PermissionEditor.d.ts +1 -1
  447. package/dist/editor/permission-manager/PermissionEditor.js +15 -4
  448. package/dist/editor/permission-manager/PermissionLevelBadge.js +1 -1
  449. package/dist/editor/permission-manager/PermissionTree.d.ts +1 -1
  450. package/dist/editor/permission-manager/UserSelector.d.ts +1 -1
  451. package/dist/editor/permission-manager/UserSelector.js +3 -3
  452. package/dist/editor/permission-manager/index.js +12 -3
  453. package/dist/editor/permission-manager/types.d.ts +5 -2
  454. package/dist/editor/platform.d.ts +3 -0
  455. package/dist/editor/platform.js +9 -0
  456. package/dist/editor/preview-asset-base.d.ts +9 -0
  457. package/dist/editor/preview-asset-base.js +17 -0
  458. package/dist/editor/preview-bridge.d.ts +51 -27
  459. package/dist/editor/preview-bridge.js +103 -144
  460. package/dist/editor/preview-marks.d.ts +15 -0
  461. package/dist/editor/preview-marks.js +74 -0
  462. package/dist/editor/preview-path.d.ts +12 -0
  463. package/dist/editor/preview-path.js +45 -1
  464. package/dist/editor/preview-scale.d.ts +27 -0
  465. package/dist/editor/preview-scale.js +34 -0
  466. package/dist/editor/raw-asset-base.d.ts +5 -0
  467. package/dist/editor/raw-asset-base.js +14 -0
  468. package/dist/editor/relative-time.d.ts +4 -4
  469. package/dist/editor/relative-time.js +16 -8
  470. package/dist/editor/schema-editor/CollectionEditor.d.ts +20 -3
  471. package/dist/editor/schema-editor/CollectionEditor.js +361 -62
  472. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +5 -1
  473. package/dist/editor/schema-editor/EntryTypeEditor.js +11 -6
  474. package/dist/editor/schema-editor/collection-draft.d.ts +22 -0
  475. package/dist/editor/schema-editor/collection-draft.js +40 -0
  476. package/dist/editor/schema-editor/index.d.ts +1 -1
  477. package/dist/editor/schema-label.d.ts +10 -0
  478. package/dist/editor/schema-label.js +17 -0
  479. package/dist/editor/settings-conflict.d.ts +5 -0
  480. package/dist/editor/settings-conflict.js +8 -0
  481. package/dist/editor/shell/ActivityRail.d.ts +37 -0
  482. package/dist/editor/shell/ActivityRail.js +91 -0
  483. package/dist/editor/shell/EditorShell.d.ts +17 -0
  484. package/dist/editor/shell/EditorShell.js +31 -0
  485. package/dist/editor/shell/PaneLayout.d.ts +28 -0
  486. package/dist/editor/shell/PaneLayout.js +116 -0
  487. package/dist/editor/shell/SidePanelHost.d.ts +35 -0
  488. package/dist/editor/shell/SidePanelHost.js +184 -0
  489. package/dist/editor/shell/TopBar.d.ts +12 -0
  490. package/dist/editor/shell/TopBar.js +14 -0
  491. package/dist/editor/shell/host-chrome.d.ts +16 -0
  492. package/dist/editor/shell/host-chrome.js +69 -0
  493. package/dist/editor/slug.d.ts +16 -0
  494. package/dist/editor/slug.js +43 -0
  495. package/dist/editor/theme.d.ts +2 -1
  496. package/dist/editor/theme.js +314 -13
  497. package/dist/editor/unanswered.d.ts +17 -0
  498. package/dist/editor/unanswered.js +26 -0
  499. package/dist/editor/unavailable-entry-type.d.ts +20 -0
  500. package/dist/editor/unavailable-entry-type.js +28 -0
  501. package/dist/editor/undo-removal.d.ts +57 -0
  502. package/dist/editor/undo-removal.js +163 -0
  503. package/dist/editor/user-display.d.ts +4 -0
  504. package/dist/editor/user-display.js +5 -0
  505. package/dist/editor/utils/confirm-modal.d.ts +8 -0
  506. package/dist/editor/utils/confirm-modal.js +12 -0
  507. package/dist/editor/utils/editor-errors.d.ts +19 -0
  508. package/dist/editor/utils/editor-errors.js +32 -0
  509. package/dist/editor/utils/focus-return.d.ts +56 -0
  510. package/dist/editor/utils/focus-return.js +106 -0
  511. package/dist/entry-link-resolver.d.ts +11 -1
  512. package/dist/entry-link-resolver.js +65 -5
  513. package/dist/entry-schema-registry.d.ts +3 -3
  514. package/dist/entry-schema-registry.js +7 -4
  515. package/dist/entry-schema.d.ts +49 -3
  516. package/dist/entry-schema.js +18 -0
  517. package/dist/git-manager.d.ts +172 -10
  518. package/dist/git-manager.js +449 -107
  519. package/dist/github-service.d.ts +39 -2
  520. package/dist/github-service.js +101 -7
  521. package/dist/http/handler.js +74 -9
  522. package/dist/http/types.d.ts +2 -0
  523. package/dist/http/worker-not-ready.d.ts +9 -4
  524. package/dist/http/worker-not-ready.js +59 -6
  525. package/dist/index.d.ts +2 -0
  526. package/dist/index.js +3 -0
  527. package/dist/item-keys.d.ts +46 -0
  528. package/dist/item-keys.js +235 -0
  529. package/dist/operating-mode/editor-mode-check.d.ts +15 -0
  530. package/dist/operating-mode/editor-mode-check.js +24 -0
  531. package/dist/operating-mode/mode-env.d.ts +13 -14
  532. package/dist/operating-mode/mode-env.js +13 -14
  533. package/dist/operating-mode/types.d.ts +2 -2
  534. package/dist/paths/branch.d.ts +0 -1
  535. package/dist/paths/branch.js +1 -8
  536. package/dist/paths/index.d.ts +1 -1
  537. package/dist/paths/index.js +1 -1
  538. package/dist/paths/validation.js +0 -2
  539. package/dist/preview.d.ts +8 -0
  540. package/dist/preview.js +7 -0
  541. package/dist/reference-resolver.js +1 -0
  542. package/dist/resolve-canopy-user.d.ts +1 -1
  543. package/dist/resolve-canopy-user.js +1 -1
  544. package/dist/schema/meta-loader.d.ts +18 -8
  545. package/dist/schema/meta-loader.js +42 -9
  546. package/dist/schema/registry-fingerprint.d.ts +14 -0
  547. package/dist/schema/registry-fingerprint.js +63 -0
  548. package/dist/schema/resolver.d.ts +7 -4
  549. package/dist/schema/resolver.js +7 -6
  550. package/dist/schema/schema-store.d.ts +7 -10
  551. package/dist/schema/schema-store.js +13 -11
  552. package/dist/schema/schema-unavailable-error.d.ts +11 -0
  553. package/dist/schema/schema-unavailable-error.js +15 -0
  554. package/dist/schema/types.d.ts +22 -0
  555. package/dist/schema-registry-record.d.ts +35 -0
  556. package/dist/schema-registry-record.js +134 -0
  557. package/dist/server.d.ts +79 -9
  558. package/dist/server.js +62 -8
  559. package/dist/services.d.ts +33 -5
  560. package/dist/services.js +155 -37
  561. package/dist/settings-workspace.d.ts +23 -3
  562. package/dist/settings-workspace.js +159 -45
  563. package/dist/stamp-on-publish.d.ts +36 -0
  564. package/dist/stamp-on-publish.js +71 -0
  565. package/dist/static/index.d.ts +58 -5
  566. package/dist/static/index.js +133 -3
  567. package/dist/static/seo.d.ts +5 -5
  568. package/dist/static/seo.js +5 -5
  569. package/dist/submission-attribution.d.ts +8 -0
  570. package/dist/submission-attribution.js +22 -0
  571. package/dist/system-users.d.ts +12 -0
  572. package/dist/system-users.js +12 -0
  573. package/dist/task-queue/cms-task-queue.d.ts +1 -1
  574. package/dist/task-queue/cms-task-queue.js +1 -1
  575. package/dist/task-queue/index.d.ts +1 -1
  576. package/dist/task-queue/index.js +1 -1
  577. package/dist/task-queue/task-queue.d.ts +6 -0
  578. package/dist/task-queue/task-queue.js +29 -0
  579. package/dist/task-queue/worker-status.d.ts +35 -9
  580. package/dist/task-queue/worker-status.js +84 -17
  581. package/dist/types.d.ts +90 -9
  582. package/dist/url-collision.js +3 -3
  583. package/dist/url-exclusivity-fixtures.d.ts +8 -1
  584. package/dist/url-exclusivity-fixtures.js +11 -1
  585. package/dist/user.js +2 -1
  586. package/dist/utils/atomic-write.js +2 -1
  587. package/dist/utils/base-branch.d.ts +13 -0
  588. package/dist/utils/base-branch.js +23 -0
  589. package/dist/utils/content-serialize.d.ts +15 -7
  590. package/dist/utils/content-serialize.js +353 -51
  591. package/dist/utils/content-write-lock.d.ts +6 -1
  592. package/dist/utils/content-write-lock.js +21 -6
  593. package/dist/utils/debug.d.ts +1 -1
  594. package/dist/utils/debug.js +5 -3
  595. package/dist/utils/error.js +13 -2
  596. package/dist/utils/escape-text.d.ts +7 -0
  597. package/dist/utils/escape-text.js +27 -0
  598. package/dist/utils/fs.d.ts +12 -4
  599. package/dist/utils/fs.js +18 -5
  600. package/dist/utils/git.d.ts +21 -1
  601. package/dist/utils/git.js +63 -8
  602. package/dist/utils/json-source-splice.d.ts +14 -0
  603. package/dist/utils/json-source-splice.js +120 -0
  604. package/dist/utils/markdown-body-splice.d.ts +39 -0
  605. package/dist/utils/markdown-body-splice.js +421 -0
  606. package/dist/utils/occ-json-write.js +18 -12
  607. package/dist/utils/provision-log.d.ts +25 -0
  608. package/dist/utils/provision-log.js +49 -0
  609. package/dist/utils/provisioning-lock.d.ts +32 -1
  610. package/dist/utils/provisioning-lock.js +78 -32
  611. package/dist/utils/sanitize-href.d.ts +9 -23
  612. package/dist/utils/sanitize-href.js +14 -28
  613. package/dist/utils/title-field.d.ts +10 -0
  614. package/dist/utils/title-field.js +47 -0
  615. package/dist/utils/yaml-source-splice.d.ts +58 -0
  616. package/dist/utils/yaml-source-splice.js +515 -0
  617. package/dist/validation/block-structural-keys.d.ts +1 -1
  618. package/dist/validation/block-structural-keys.js +1 -1
  619. package/dist/validation/deletion-checker.d.ts +21 -29
  620. package/dist/validation/deletion-checker.js +41 -117
  621. package/dist/validation/entry-validator.d.ts +6 -10
  622. package/dist/validation/entry-validator.js +19 -26
  623. package/dist/validation/field-traversal.d.ts +22 -0
  624. package/dist/validation/field-traversal.js +39 -8
  625. package/dist/validation/markdown-safety.d.ts +68 -0
  626. package/dist/validation/markdown-safety.js +596 -0
  627. package/dist/validation/mdx-allowlist.d.ts +55 -0
  628. package/dist/validation/mdx-allowlist.js +183 -0
  629. package/dist/validation/reference-validator.d.ts +2 -0
  630. package/dist/validation/reference-validator.js +3 -0
  631. package/dist/version.d.ts +1 -1
  632. package/dist/version.js +1 -1
  633. package/dist/worker/branch-policy.d.ts +124 -0
  634. package/dist/worker/branch-policy.js +243 -0
  635. package/dist/worker/bundle-header.d.ts +117 -0
  636. package/dist/worker/bundle-header.js +253 -0
  637. package/dist/worker/cms-worker.d.ts +236 -142
  638. package/dist/worker/cms-worker.js +772 -285
  639. package/dist/worker/gateway-egress.d.ts +43 -0
  640. package/dist/worker/gateway-egress.js +209 -0
  641. package/dist/worker/gateway-instance.d.ts +42 -0
  642. package/dist/worker/gateway-instance.js +129 -0
  643. package/dist/worker/git-process.d.ts +81 -0
  644. package/dist/worker/git-process.js +234 -0
  645. package/dist/worker/git-sync.d.ts +34 -17
  646. package/dist/worker/git-sync.js +394 -131
  647. package/dist/worker/github-auth.d.ts +9 -9
  648. package/dist/worker/github-auth.js +13 -15
  649. package/dist/worker/github-gateway-http.d.ts +62 -0
  650. package/dist/worker/github-gateway-http.js +977 -0
  651. package/dist/worker/github-gateway-wire.d.ts +590 -0
  652. package/dist/worker/github-gateway-wire.js +488 -0
  653. package/dist/worker/github-gateway.d.ts +238 -0
  654. package/dist/worker/github-gateway.js +726 -0
  655. package/dist/worker/github-mirror-upkeep.d.ts +75 -0
  656. package/dist/worker/github-mirror-upkeep.js +266 -0
  657. package/dist/worker/github-mirror.d.ts +364 -0
  658. package/dist/worker/github-mirror.js +1030 -0
  659. package/dist/worker/github-transfer.d.ts +56 -0
  660. package/dist/worker/github-transfer.js +444 -0
  661. package/dist/worker/history-rewrite.d.ts +4 -5
  662. package/dist/worker/history-rewrite.js +12 -17
  663. package/dist/worker/provisioned-workspace.d.ts +5 -5
  664. package/dist/worker/provisioned-workspace.js +5 -5
  665. package/dist/worker/rebase.d.ts +1 -1
  666. package/dist/worker/rebase.js +58 -54
  667. package/dist/worker/remote-git-maintenance.d.ts +3 -0
  668. package/dist/worker/remote-git-maintenance.js +12 -0
  669. package/dist/worker/schema-gate.d.ts +49 -0
  670. package/dist/worker/schema-gate.js +226 -0
  671. package/dist/worker/self-checks.d.ts +107 -0
  672. package/dist/worker/self-checks.js +358 -0
  673. package/dist/worker/shared-repo-git.d.ts +96 -0
  674. package/dist/worker/shared-repo-git.js +459 -0
  675. package/dist/worker/sparse-cone.d.ts +20 -0
  676. package/dist/worker/sparse-cone.js +136 -0
  677. package/dist/worker/stale-mirror.d.ts +82 -0
  678. package/dist/worker/stale-mirror.js +130 -0
  679. package/dist/worker/task-runner.d.ts +5 -3
  680. package/dist/worker/task-runner.js +287 -186
  681. package/dist/worker/worker-context.d.ts +36 -37
  682. package/package.json +35 -7
  683. package/dist/editor/EditorPanes.d.ts +0 -10
  684. package/dist/editor/EditorPanes.js +0 -98
  685. package/dist/editor/components/EditorFooter.d.ts +0 -11
  686. package/dist/editor/components/EditorFooter.js +0 -9
  687. package/dist/editor/components/EditorSidebar.d.ts +0 -67
  688. package/dist/editor/components/EditorSidebar.js +0 -22
@@ -4,22 +4,18 @@
4
4
  import { z } from 'zod';
5
5
  export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObject<{
6
6
  adapter: z.ZodLiteral<"local">;
7
- publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
8
7
  /** Root directory for local asset storage. Defaults to the caller's dev-assets dir. */
9
8
  directory: z.ZodOptional<z.ZodEffects<z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>, string, string>>;
10
9
  }, "strict", z.ZodTypeAny, {
11
10
  adapter: "local";
12
- publicBaseUrl?: string | undefined;
13
11
  directory?: string | undefined;
14
12
  }, {
15
13
  adapter: "local";
16
- publicBaseUrl?: string | undefined;
17
14
  directory?: string | undefined;
18
15
  }>, z.ZodObject<{
19
16
  adapter: z.ZodLiteral<"s3">;
20
17
  bucket: z.ZodString;
21
18
  region: z.ZodString;
22
- publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
23
19
  /**
24
20
  * Where the browser POSTs a presigned direct upload. Absolute http(s) URL or a
25
21
  * site-relative path; defaults to the S3 REST endpoint the AWS SDK returns.
@@ -29,10 +25,10 @@ export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObjec
29
25
  * signature is unaffected — a presigned POST's string-to-sign is the base64 policy
30
26
  * alone, so the host never enters it (pinned by store-s3.test.ts).
31
27
  *
32
- * NOT a prefix. Unlike `publicBaseUrl`, nothing is joined onto this value; it replaces
33
- * the POST target outright and is passed through byte-for-byte. Do not route it through
34
- * `joinUrlPrefix` "for consistency" — that would strip the trailing slash and silently
35
- * stop a CDN path pattern like `/asset-upload/*` from matching.
28
+ * NOT a prefix: nothing is joined onto this value; it replaces the POST target outright
29
+ * and is passed through byte-for-byte. Do not route it through `joinUrlPrefix` "for
30
+ * consistency" — that would strip the trailing slash and silently stop a CDN path
31
+ * pattern like `/asset-upload/*` from matching.
36
32
  */
37
33
  uploadUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
38
34
  /** Max upload size in bytes for presigned direct uploads. Defaults to 50 MiB. */
@@ -41,23 +37,18 @@ export declare const mediaSchema: z.ZodDiscriminatedUnion<"adapter", [z.ZodObjec
41
37
  adapter: "s3";
42
38
  bucket: string;
43
39
  region: string;
44
- publicBaseUrl?: string | undefined;
45
40
  uploadUrl?: string | undefined;
46
41
  maxUploadBytes?: number | undefined;
47
42
  }, {
48
43
  adapter: "s3";
49
44
  bucket: string;
50
45
  region: string;
51
- publicBaseUrl?: string | undefined;
52
46
  uploadUrl?: string | undefined;
53
47
  maxUploadBytes?: number | undefined;
54
48
  }>, z.ZodObject<{
55
49
  adapter: z.ZodLiteral<"lfs">;
56
- publicBaseUrl: z.ZodOptional<z.ZodEffects<z.ZodString, string, string>>;
57
50
  }, "strict", z.ZodTypeAny, {
58
51
  adapter: "lfs";
59
- publicBaseUrl?: string | undefined;
60
52
  }, {
61
53
  adapter: "lfs";
62
- publicBaseUrl?: string | undefined;
63
54
  }>]>;
@@ -3,7 +3,7 @@
3
3
  */
4
4
  import { z } from 'zod';
5
5
  import { relativePathSchema } from './collection.js';
6
- import { assetMountUrlSchema, uploadTargetUrlSchema } from './url.js';
6
+ import { uploadTargetUrlSchema } from './url.js';
7
7
  // Media adapter configuration schema.
8
8
  // Keyed as a discriminated union on `adapter` so each adapter's required fields are
9
9
  // enforced at parse time. With a plain z.union, a malformed s3 config (e.g. missing
@@ -26,7 +26,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
26
26
  z
27
27
  .object({
28
28
  adapter: z.literal('local'),
29
- publicBaseUrl: assetMountUrlSchema.optional(),
30
29
  /** Root directory for local asset storage. Defaults to the caller's dev-assets dir. */
31
30
  directory: relativePathSchema.optional(),
32
31
  })
@@ -36,7 +35,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
36
35
  adapter: z.literal('s3'),
37
36
  bucket: z.string().min(1),
38
37
  region: z.string().min(1),
39
- publicBaseUrl: assetMountUrlSchema.optional(),
40
38
  /**
41
39
  * Where the browser POSTs a presigned direct upload. Absolute http(s) URL or a
42
40
  * site-relative path; defaults to the S3 REST endpoint the AWS SDK returns.
@@ -46,10 +44,10 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
46
44
  * signature is unaffected — a presigned POST's string-to-sign is the base64 policy
47
45
  * alone, so the host never enters it (pinned by store-s3.test.ts).
48
46
  *
49
- * NOT a prefix. Unlike `publicBaseUrl`, nothing is joined onto this value; it replaces
50
- * the POST target outright and is passed through byte-for-byte. Do not route it through
51
- * `joinUrlPrefix` "for consistency" — that would strip the trailing slash and silently
52
- * stop a CDN path pattern like `/asset-upload/*` from matching.
47
+ * NOT a prefix: nothing is joined onto this value; it replaces the POST target outright
48
+ * and is passed through byte-for-byte. Do not route it through `joinUrlPrefix` "for
49
+ * consistency" — that would strip the trailing slash and silently stop a CDN path
50
+ * pattern like `/asset-upload/*` from matching.
53
51
  */
54
52
  uploadUrl: uploadTargetUrlSchema.optional(),
55
53
  /** Max upload size in bytes for presigned direct uploads. Defaults to 50 MiB. */
@@ -59,7 +57,6 @@ export const mediaSchema = z.discriminatedUnion('adapter', [
59
57
  z
60
58
  .object({
61
59
  adapter: z.literal('lfs'),
62
- publicBaseUrl: assetMountUrlSchema.optional(),
63
60
  })
64
61
  .strict(),
65
62
  ]);
@@ -13,27 +13,9 @@ import { z } from 'zod';
13
13
  /**
14
14
  * Where the browser POSTs a presigned direct upload (`media.uploadUrl`).
15
15
  *
16
- * Stricter than `assetMountUrlSchema` by exactly one case — no protocol-relative `//host` —
17
- * because that spelling is ambiguous rather than insecure: it resolves to http or https
18
- * depending on the editor page issuing the upload, so the config would not determine where a
19
- * live credential is sent. `isHttpUrlOrSameOriginPath`'s doc carries the full reasoning,
20
- * including why bare `http://` is nonetheless accepted.
21
- *
22
- * "Exactly one case" is measured, not asserted: a census over every 4-character string
23
- * drawn from an 11-symbol alphabet (slash, backslash, dot, colon, %2e, ?, #, tab, and three
24
- * letters), plus hand-written shapes, found 39 values the two schemas treat differently — and
25
- * every one is a literal `//host` (three only after `.trim()` strips a leading tab).
16
+ * `isHttpUrlOrSameOriginPath`'s doc carries the reasoning, including why a protocol-relative
17
+ * `//host` is refused while bare `http://` is accepted.
26
18
  */
27
19
  export declare const uploadTargetUrlSchema: z.ZodEffects<z.ZodString, string, string>;
28
- /**
29
- * Where `/assets/…` is mounted for the editor's own previews (`media.publicBaseUrl`).
30
- *
31
- * Accepts an absolute http(s) URL, a protocol-relative `//host` URL, or a site-relative path
32
- * (see `.claude/future-tasks/editor-asset-mount-topology.md` option 1 — the `basePath` fallback
33
- * in `editor/context/AssetContext.tsx` exists for sites that need one and can't set an absolute
34
- * value). Rejects non-http(s) schemes: a plain `z.string().url()` check would accept
35
- * `publicBaseUrl: 'mailto:a@b.c'` and produce `/mailto:a@b.c/assets/…` at render time.
36
- */
37
- export declare const assetMountUrlSchema: z.ZodEffects<z.ZodString, string, string>;
38
20
  /** `editor.previewPrefix`, by `uploadTargetUrlSchema`'s rule: `//host` leaves the scheme open. */
39
21
  export declare const previewPrefixSchema: z.ZodEffects<z.ZodString, string, string>;
@@ -14,16 +14,8 @@ import { isHttpUrlOrSameOriginPath } from '../../utils/sanitize-href.js';
14
14
  /**
15
15
  * Where the browser POSTs a presigned direct upload (`media.uploadUrl`).
16
16
  *
17
- * Stricter than `assetMountUrlSchema` by exactly one case — no protocol-relative `//host` —
18
- * because that spelling is ambiguous rather than insecure: it resolves to http or https
19
- * depending on the editor page issuing the upload, so the config would not determine where a
20
- * live credential is sent. `isHttpUrlOrSameOriginPath`'s doc carries the full reasoning,
21
- * including why bare `http://` is nonetheless accepted.
22
- *
23
- * "Exactly one case" is measured, not asserted: a census over every 4-character string
24
- * drawn from an 11-symbol alphabet (slash, backslash, dot, colon, %2e, ?, #, tab, and three
25
- * letters), plus hand-written shapes, found 39 values the two schemas treat differently — and
26
- * every one is a literal `//host` (three only after `.trim()` strips a leading tab).
17
+ * `isHttpUrlOrSameOriginPath`'s doc carries the reasoning, including why a protocol-relative
18
+ * `//host` is refused while bare `http://` is accepted.
27
19
  */
28
20
  export const uploadTargetUrlSchema = z
29
21
  .string()
@@ -31,21 +23,6 @@ export const uploadTargetUrlSchema = z
31
23
  .refine((value) => isHttpUrlOrSameOriginPath(value), {
32
24
  message: 'must be an absolute http(s) URL or a site-relative path beginning with a single "/", with no query or fragment',
33
25
  });
34
- /**
35
- * Where `/assets/…` is mounted for the editor's own previews (`media.publicBaseUrl`).
36
- *
37
- * Accepts an absolute http(s) URL, a protocol-relative `//host` URL, or a site-relative path
38
- * (see `.claude/future-tasks/editor-asset-mount-topology.md` option 1 — the `basePath` fallback
39
- * in `editor/context/AssetContext.tsx` exists for sites that need one and can't set an absolute
40
- * value). Rejects non-http(s) schemes: a plain `z.string().url()` check would accept
41
- * `publicBaseUrl: 'mailto:a@b.c'` and produce `/mailto:a@b.c/assets/…` at render time.
42
- */
43
- export const assetMountUrlSchema = z
44
- .string()
45
- .trim()
46
- .refine((value) => isHttpUrlOrSameOriginPath(value, { allowProtocolRelative: true }), {
47
- message: 'must be an absolute http(s) URL, a protocol-relative "//host" URL, or a site-relative path beginning with a single "/", with no query or fragment',
48
- });
49
26
  /** `editor.previewPrefix`, by `uploadTargetUrlSchema`'s rule: `//host` leaves the scheme open. */
50
27
  export const previewPrefixSchema = z
51
28
  .string()
@@ -9,8 +9,10 @@ import type { LogicalPath, ContentId } from '../paths/types.js';
9
9
  import type { PermissionPath } from '../authorization/types.js';
10
10
  import type { EntryLinkUrlResolver } from '../entry-link-resolver.js';
11
11
  import type { CropRect } from '../assets/transform-directives.js';
12
- export declare const primitiveFieldTypes: readonly ["string", "number", "boolean", "datetime", "markdown", "mdx", "code"];
13
- export declare const fieldTypes: readonly ["string", "number", "boolean", "datetime", "markdown", "mdx", "code", "image", "select", "reference", "object", "block", "group"];
12
+ declare const scalarFieldTypes: readonly ["string", "number", "boolean", "datetime", "code"];
13
+ export declare const markdownFieldTypes: readonly ["markdown", "mdx"];
14
+ export declare const primitiveFieldTypes: readonly ["string", "number", "boolean", "datetime", "code", "markdown", "mdx"];
15
+ export declare const fieldTypes: readonly ["string", "number", "boolean", "datetime", "code", "markdown", "mdx", "image", "select", "reference", "object", "block", "group"];
14
16
  export type PrimitiveFieldType = (typeof primitiveFieldTypes)[number];
15
17
  export type FieldType = (typeof fieldTypes)[number];
16
18
  export type ContentFormat = 'md' | 'mdx' | 'json' | 'yaml';
@@ -51,7 +53,52 @@ interface BaseFieldConfig {
51
53
  isBody?: boolean;
52
54
  }
53
55
  interface PrimitiveFieldConfig extends BaseFieldConfig {
54
- type: PrimitiveFieldType;
56
+ type: (typeof scalarFieldTypes)[number];
57
+ /**
58
+ * On a top-level, optional, single `datetime` field: Canopy's first submit of an entry new to
59
+ * the base branch sets the field, while it is empty, to the submit's time
60
+ * (`stamp-on-publish.ts`). `ensureStampOnPublishPlacement` (`validation.ts`) refuses it
61
+ * anywhere else.
62
+ */
63
+ stampOnPublish?: boolean;
64
+ }
65
+ /** Content that would run code as it renders is refused at save; see `validation/markdown-safety.ts`. */
66
+ export interface MarkdownFieldConfig extends BaseFieldConfig {
67
+ type: (typeof markdownFieldTypes)[number];
68
+ /** Accept code, making every editor of this field a code author for whoever renders it. */
69
+ executable?: boolean;
70
+ /** On a `markdown` field the site compiles as MDX: check it as MDX. */
71
+ renderAs?: 'mdx';
72
+ /** Narrow what this field accepts as MDX, key by key over the site's `mdxAllow`. */
73
+ mdxAllow?: MdxAllowlist;
74
+ }
75
+ /**
76
+ * A prop's allowed values. `true`: any value the base policy accepts, a bare attribute (`<X open>`,
77
+ * the value `true`) and `{…}` values included. `'string'`: only a quoted string, `title="…"`; a
78
+ * bare attribute and every `{…}` refused. The object form adds `maxLength`, in characters (code
79
+ * points). A list: those values only; `[true, false]` is a boolean (bare, `{true}`, `{false}`).
80
+ */
81
+ export type MdxPropAllow = true | 'string' | {
82
+ type: 'string';
83
+ maxLength?: number;
84
+ } | Array<string | number | boolean>;
85
+ export interface MdxComponentAllow {
86
+ /** Allowed props by name. Omitted: any prop. `{}`: none. */
87
+ props?: Record<string, MdxPropAllow>;
88
+ }
89
+ /**
90
+ * What an MDX body may hold, narrowing the base policy (`validation/mdx-allowlist.ts`). An omitted
91
+ * key keeps the base policy's choice.
92
+ */
93
+ export interface MdxAllowlist {
94
+ /** Allowed components by name. Omitted: any plainly named component. `{}`: none. */
95
+ components?: Record<string, MdxComponentAllow>;
96
+ /** Allowed HTML tags, from the base policy's safe set. Omitted: that whole set. `[]`: none. */
97
+ htmlTags?: string[];
98
+ /** `false` refuses every `{…}`, comments and plain values included. Default `true`. */
99
+ expressions?: boolean;
100
+ /** `false` refuses `<>…</>`. Default `true`. */
101
+ fragments?: boolean;
55
102
  }
56
103
  export interface SelectFieldConfig extends BaseFieldConfig {
57
104
  type: 'select';
@@ -134,9 +181,16 @@ export interface ObjectFieldConfig extends BaseFieldConfig {
134
181
  fields: FieldConfig[];
135
182
  /**
136
183
  * On a `list: true` object, a direct `string` or `number` child whose value titles each
137
- * item's card; a blank or non-finite value falls back to "<label> #N".
184
+ * item's card; a blank or non-finite value falls back to the item's first non-blank `string`
185
+ * field, then "Item N".
138
186
  */
139
187
  itemTitleField?: string;
188
+ /**
189
+ * On a `list: true` object, what one item is called, as it reads mid-sentence ("team member"):
190
+ * the add button reads "Add team member" and an untitled item "Team member 3". Without it,
191
+ * "Add item" and "Item 3". `ensureItemTitleFieldsExist` (`validation.ts`) checks it.
192
+ */
193
+ itemLabel?: string;
140
194
  }
141
195
  /**
142
196
  * Inline group field config: visually groups fields in the editor without creating
@@ -159,22 +213,19 @@ export interface InlineGroupFieldConfig {
159
213
  export type CustomFieldConfig = BaseFieldConfig & {
160
214
  type: Exclude<string, FieldType>;
161
215
  };
162
- export type FieldConfig = PrimitiveFieldConfig | SelectFieldConfig | ReferenceFieldConfig | ImageFieldConfig | BlockFieldConfig | ObjectFieldConfig | InlineGroupFieldConfig | CustomFieldConfig;
216
+ export type FieldConfig = PrimitiveFieldConfig | MarkdownFieldConfig | SelectFieldConfig | ReferenceFieldConfig | ImageFieldConfig | BlockFieldConfig | ObjectFieldConfig | InlineGroupFieldConfig | CustomFieldConfig;
163
217
  export type MediaConfig = {
164
218
  adapter: 'local';
165
- publicBaseUrl?: string;
166
219
  directory?: string;
167
220
  } | {
168
221
  adapter: 's3';
169
222
  bucket: string;
170
223
  region: string;
171
- publicBaseUrl?: string;
172
224
  /** POST target for presigned direct uploads; see mediaSchema's s3 branch. */
173
225
  uploadUrl?: string;
174
226
  maxUploadBytes?: number;
175
227
  } | {
176
228
  adapter: 'lfs';
177
- publicBaseUrl?: string;
178
229
  };
179
230
  /**
180
231
  * Field definitions for one entry type — the array of FieldConfig that
@@ -201,6 +252,23 @@ export type EntryTypeConfig = {
201
252
  readonly description?: string;
202
253
  readonly default?: boolean;
203
254
  readonly maxItems?: number;
255
+ /**
256
+ * Set when this entry type could not be resolved, and `schema` is then empty. Only a
257
+ * branch workspace's schema carries it (see `BranchSchemaCache`); reading, writing,
258
+ * creating, renaming or deleting an entry of this type is refused.
259
+ */
260
+ readonly unavailable?: EntryTypeUnavailable;
261
+ };
262
+ /**
263
+ * Why an entry type has no schema: its `.collection.json` names an entry schema the running
264
+ * code's registry does not define, as when content synced ahead of the image that adds it.
265
+ */
266
+ export type EntryTypeUnavailable = {
267
+ readonly reason: 'unknown-schema';
268
+ /** The registry key the meta file names. */
269
+ readonly schemaRef: string;
270
+ /** The meta file naming it, relative to the content root. */
271
+ readonly metaFile: string;
204
272
  };
205
273
  /**
206
274
  * Collection: contains nested collections and typed entries.
@@ -224,7 +292,7 @@ export type CollectionConfig = {
224
292
  * Contains top-level collections and entries (typed content at the root level).
225
293
  */
226
294
  export type RootCollectionConfig = {
227
- /** Optional label for the root collection (e.g., "All Files", "Content") */
295
+ /** Optional label for the root collection (e.g., "All content", "Content") */
228
296
  readonly label?: string;
229
297
  /** Entry types at the root level */
230
298
  readonly entries?: readonly EntryTypeConfig[];
@@ -254,7 +322,6 @@ export interface EditorSignInProps {
254
322
  }
255
323
  export interface CanopyEditorConfig {
256
324
  title?: string;
257
- subtitle?: string;
258
325
  theme?: unknown;
259
326
  /**
260
327
  * Preview-pane routes for sites whose routes don't mirror their content tree; otherwise an entry
@@ -331,12 +398,15 @@ export interface EntryValidationIssue {
331
398
  /** Path of the offending field (e.g. 'body'), when known. */
332
399
  fieldPath?: string;
333
400
  }
334
- /** Input passed to the `validateEntry` hook on every editor save. */
401
+ /** Input passed to the `validateEntry` hook on every content save, from the editor or not. */
335
402
  export interface ValidateEntryInput {
336
403
  /** Logical entry path including the content root (e.g. 'content/posts/hello-world'). */
337
404
  entryPath: string;
338
405
  branch: string;
339
- /** Entry type name when the editor specifies one (collections with multiple entry types). */
406
+ /**
407
+ * The entry type the save is validated and written as: an existing entry's on-disk type, else
408
+ * the requested one, else the collection's default. Absent only when the collection has none.
409
+ */
340
410
  entryType?: string;
341
411
  format: 'md' | 'mdx' | 'json' | 'yaml';
342
412
  data: Record<string, unknown>;
@@ -377,12 +447,18 @@ export interface CanopyConfig {
377
447
  sourceRoot?: SourceRoot;
378
448
  /** Deployment prefix the host app is served under — see {@link CanopyConfigInput.basePath}. */
379
449
  basePath?: string;
450
+ /** HTTP status of an unauthenticated API response — see {@link CanopyConfigInput.unauthenticatedStatus}. */
451
+ unauthenticatedStatus?: 401 | 419;
452
+ /** What a production build does on a dangling reference — see {@link CanopyConfigInput.danglingReferences}. */
453
+ danglingReferences?: 'error' | 'warn';
380
454
  editor?: CanopyEditorConfig;
381
455
  authPlugin?: AuthPlugin;
382
456
  /** Custom URL resolver for entry links — see {@link CanopyConfigInput.entryLinkUrl}. */
383
457
  entryLinkUrl?: EntryLinkUrlResolver;
384
458
  /** Save-time validation hook — see {@link CanopyConfigInput.validateEntry}. */
385
459
  validateEntry?: ValidateEntryHook;
460
+ /** Site default for every field checked as MDX — see {@link CanopyConfigInput.mdxAllow}. */
461
+ mdxAllow?: MdxAllowlist;
386
462
  /** Dev-mode-only behavior — see {@link CanopyConfigInput.dev}. */
387
463
  dev?: DevConfig;
388
464
  }
@@ -400,7 +476,10 @@ export interface CanopyConfigInput {
400
476
  defaultRemoteUrl?: string;
401
477
  gitBotAuthorName: string;
402
478
  gitBotAuthorEmail: string;
403
- /** Add `Edited-by: Name (user id)` for the submitter to submit commits. Default true. */
479
+ /**
480
+ * Add `Edited-by: Name (user id)` to submit commits, for the submitter and each user who saved
481
+ * since the last submit commit, and to settings commits for the user making the change. Default true.
482
+ */
404
483
  gitEditedByTrailers?: boolean;
405
484
  /** Also add `Co-authored-by: Name <email>`. Default false: emails in public history are public. */
406
485
  gitCoAuthoredByTrailers?: boolean;
@@ -442,12 +521,33 @@ export interface CanopyConfigInput {
442
521
  * silently filter out every entry (zero static params, a build that goes green with no pages).
443
522
  */
444
523
  basePath?: string;
524
+ /**
525
+ * HTTP status of an API response to a request with no accepted session. Default 401.
526
+ *
527
+ * Set 419 when the site's own pages sit behind HTTP Basic auth on the same origin as the
528
+ * editor. Chrome, holding a Basic credential entered at the site root, sends it with the
529
+ * editor's API requests and drops it when one answers 401; the next gated request, such as a
530
+ * preview image, then waits on a Basic prompt. 419 rather than 403
531
+ * because a CloudFront custom error response cannot match 419, and one mapping 403 to an error
532
+ * page would replace the body below.
533
+ *
534
+ * The body says `status: 401` either way, and that is what the editor detects sign-out from.
535
+ */
536
+ unauthenticatedStatus?: 401 | 419;
537
+ /**
538
+ * What a production build does when a reference names no entry. Default `'error'`: the build
539
+ * fails, listing each entry, field path and missing id, since the page would otherwise ship
540
+ * without what the reference supplied. `'warn'` prints the list, capped at 20, and lets the build pass.
541
+ */
542
+ danglingReferences?: 'error' | 'warn';
445
543
  editor?: CanopyEditorConfig;
446
544
  authPlugin?: AuthPlugin;
447
545
  /** Custom URL resolver for entry links. Overrides the default URL computation. */
448
546
  entryLinkUrl?: EntryLinkUrlResolver;
449
547
  /** Save-time validation hook. 'error' issues reject the save; 'warning' issues are returned with it. */
450
548
  validateEntry?: ValidateEntryHook;
549
+ /** What every field checked as MDX accepts; a field's own `mdxAllow` replaces it key by key. */
550
+ mdxAllow?: MdxAllowlist;
451
551
  /** Dev-mode-only behavior (content-sync divergence detection). Ignored when mode !== 'dev'. */
452
552
  dev?: DevConfig;
453
553
  }
@@ -487,22 +587,16 @@ export type FlatSchemaItem = {
487
587
  schemaRef?: string;
488
588
  default?: boolean;
489
589
  maxItems?: number;
590
+ /** See {@link EntryTypeConfig.unavailable}. */
591
+ unavailable?: EntryTypeUnavailable;
490
592
  };
491
593
  /**
492
594
  * Client config - subset safe for browser (DRY - derived from CanopyConfig)
493
595
  * Use flatSchema for O(1) cached access to the flattened schema structure.
494
596
  * Schema is loaded from .collection.json files on the server and provided as flatSchema.
495
597
  */
496
- export type CanopyClientConfig = Pick<CanopyConfig, 'defaultBaseBranch' | 'defaultActiveBranch' | 'contentRoot' | 'editor' | 'mode' | 'entryLinkUrl' | 'basePath'> & {
598
+ export type CanopyClientConfig = Pick<CanopyConfig, 'defaultBaseBranch' | 'defaultActiveBranch' | 'contentRoot' | 'editor' | 'mode' | 'entryLinkUrl' | 'basePath' | 'mdxAllow'> & {
497
599
  flatSchema: FlatSchemaItem[];
498
- /**
499
- * `media.publicBaseUrl`, when configured - the only part of `media` safe/
500
- * useful to expose client-side (the editor may be served from a different
501
- * origin than the site; the rest of `MediaConfig` - bucket, region, etc -
502
- * has no business in a browser bundle). Threaded through to `Editor`'s
503
- * `assetBaseUrl` prop. Undefined means root-relative asset URLs.
504
- */
505
- assetBaseUrl?: string;
506
600
  };
507
601
  export interface ClientOnlyFields {
508
602
  editor?: {
@@ -2,15 +2,9 @@
2
2
  * Type definitions for CanopyCMS configuration.
3
3
  * These are pure TypeScript types - Zod schemas are in ./schemas/
4
4
  */
5
- export const primitiveFieldTypes = [
6
- 'string',
7
- 'number',
8
- 'boolean',
9
- 'datetime',
10
- 'markdown',
11
- 'mdx',
12
- 'code',
13
- ];
5
+ const scalarFieldTypes = ['string', 'number', 'boolean', 'datetime', 'code'];
6
+ export const markdownFieldTypes = ['markdown', 'mdx'];
7
+ export const primitiveFieldTypes = [...scalarFieldTypes, ...markdownFieldTypes];
14
8
  // 'image' is not a primitive: it has a structured value (ImageFieldValue) and
15
9
  // its own per-type config (ImageFieldConfig, below), so it gets a dedicated
16
10
  // entry rather than sharing PrimitiveFieldConfig's flat shape.
@@ -5,12 +5,19 @@
5
5
  * from `createEntrySchemaRegistry` so the canonical schema-authoring path runs
6
6
  * the same checks. Exported so the test suite can exercise them directly.
7
7
  */
8
- import type { CanopyConfig } from './types.js';
8
+ import type { CanopyConfig, FieldConfig } from './types.js';
9
9
  /**
10
10
  * Recursively check that all select fields have options defined.
11
11
  * Throws an error if a select field is missing options.
12
12
  */
13
13
  export declare const ensureSelectFieldsHaveOptions: (fields: unknown) => void;
14
+ /**
15
+ * Check that every data field's name can be spelled as a field path segment (`isPathFieldName`):
16
+ * the form, the preview's marks, validation errors and comment threads all name a field by its
17
+ * path. An inline group's own name is not part of any path, so only its children are checked.
18
+ * `ITEM_KEY` is reserved too, since every list item and block carries it.
19
+ */
20
+ export declare const ensureFieldNamesSpellInPaths: (fields: unknown) => void;
14
21
  /**
15
22
  * Recursively check that all reference fields have at least one of `collections` or `entryTypes`.
16
23
  * Throws an error if a reference field has neither.
@@ -26,9 +33,11 @@ export declare const ensureReferenceFieldsHaveScope: (fields: unknown) => void;
26
33
  */
27
34
  export declare const forEachReferenceField: (fields: unknown, visit: (field: Record<string, unknown>) => void) => void;
28
35
  /**
29
- * Check that every `itemTitleField` sits on a `list: true` object and names a direct child
30
- * of type `string` or `number`, the only values the card heading shows as typed (a reference
31
- * would show its raw id, a select its stored value). Throws an error when it does not.
36
+ * Check that every `itemLabel` is non-blank text and, like every `itemTitleField`, sits on a
37
+ * `list: true` object, and that every `itemTitleField` names a direct child of type `string` or
38
+ * `number`, the only values the card heading shows as typed (a reference would show its raw id, a
39
+ * select its stored value). Throws an error when it does not. Entry schemas reach the editor
40
+ * through these checks, not the zod field schema.
32
41
  */
33
42
  export declare const ensureItemTitleFieldsExist: (fields: unknown) => void;
34
43
  /**
@@ -46,6 +55,18 @@ export declare const ensureNoFlattenedFieldNameCollisions: (fields: unknown, sco
46
55
  * correct TypeScript types but broken editor rendering.
47
56
  */
48
57
  export declare const ensureNoGroupsInsideComplexFields: (fields: unknown) => void;
58
+ /**
59
+ * Check that `stampOnPublish` sits only on an entry's own top-level `datetime` field (an inline
60
+ * group's members count, since groups carry no data) that is neither `list: true` nor
61
+ * `required: true`. The submit that stamps sets one top-level value, and a required field can
62
+ * never be saved empty, so it would never be stamped. Throws on the first problem.
63
+ */
64
+ export declare const ensureStampOnPublishPlacement: (fields: unknown, scopeLabel?: string) => void;
65
+ /**
66
+ * Check every markdown and mdx field's `mdxAllow` against its schema and its `renderAs`,
67
+ * `mdxAllow` and `executable` against each other. Throws on the first problem.
68
+ */
69
+ export declare const ensureMarkdownFieldOptions: (fields: readonly FieldConfig[]) => void;
49
70
  /**
50
71
  * Validate and normalize a CanopyConfig object.
51
72
  * Performs Zod validation and normalizes paths. Field-shape validation for