canopycms 0.0.67-int.90 → 0.0.67

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 (539) hide show
  1. package/README.md +30 -3
  2. package/dist/ai/generate.js +1 -27
  3. package/dist/ai/handler.d.ts +0 -4
  4. package/dist/ai/handler.js +0 -11
  5. package/dist/ai/index.d.ts +1 -8
  6. package/dist/ai/index.js +1 -8
  7. package/dist/ai/json-to-markdown.js +15 -58
  8. package/dist/ai/resolve-branch.d.ts +2 -7
  9. package/dist/ai/resolve-branch.js +2 -8
  10. package/dist/ai/strip-mdx.d.ts +5 -13
  11. package/dist/ai/strip-mdx.js +5 -17
  12. package/dist/ai/to-plain-text.d.ts +10 -28
  13. package/dist/ai/to-plain-text.js +10 -28
  14. package/dist/ai/transform-components.d.ts +2 -4
  15. package/dist/ai/transform-components.js +8 -19
  16. package/dist/ai/types.d.ts +5 -10
  17. package/dist/api/admin-branch-health.d.ts +4 -12
  18. package/dist/api/admin-branch-health.js +26 -66
  19. package/dist/api/admin.d.ts +4 -12
  20. package/dist/api/admin.js +10 -26
  21. package/dist/api/assets.d.ts +0 -25
  22. package/dist/api/assets.js +50 -91
  23. package/dist/api/branch-merge.d.ts +1 -1
  24. package/dist/api/branch-merge.js +0 -2
  25. package/dist/api/branch-review.d.ts +0 -8
  26. package/dist/api/branch-review.js +0 -13
  27. package/dist/api/branch-status.d.ts +0 -3
  28. package/dist/api/branch-status.js +8 -33
  29. package/dist/api/branch-withdraw.d.ts +0 -1
  30. package/dist/api/branch-withdraw.js +6 -9
  31. package/dist/api/branch.d.ts +7 -12
  32. package/dist/api/branch.js +7 -44
  33. package/dist/api/client.d.ts +71 -224
  34. package/dist/api/client.js +82 -233
  35. package/dist/api/comments.d.ts +2 -4
  36. package/dist/api/comments.js +0 -17
  37. package/dist/api/content.d.ts +0 -6
  38. package/dist/api/content.js +66 -142
  39. package/dist/api/entries-constants.d.ts +5 -9
  40. package/dist/api/entries-constants.js +5 -9
  41. package/dist/api/entries.d.ts +8 -13
  42. package/dist/api/entries.js +20 -51
  43. package/dist/api/github-sync.d.ts +2 -4
  44. package/dist/api/github-sync.js +4 -8
  45. package/dist/api/groups.d.ts +3 -0
  46. package/dist/api/groups.js +8 -21
  47. package/dist/api/guards.d.ts +4 -16
  48. package/dist/api/guards.js +3 -22
  49. package/dist/api/index.d.ts +4 -4
  50. package/dist/api/permissions.d.ts +2 -0
  51. package/dist/api/permissions.js +18 -40
  52. package/dist/api/reference-options.d.ts +0 -1
  53. package/dist/api/reference-options.js +3 -11
  54. package/dist/api/request-body-hash.d.ts +12 -23
  55. package/dist/api/request-body-hash.js +12 -23
  56. package/dist/api/resolve-references.d.ts +0 -1
  57. package/dist/api/resolve-references.js +13 -28
  58. package/dist/api/route-builder.d.ts +3 -7
  59. package/dist/api/route-builder.js +1 -1
  60. package/dist/api/routes.d.ts +12 -0
  61. package/dist/api/routes.js +47 -0
  62. package/dist/api/schema.d.ts +23 -33
  63. package/dist/api/schema.js +20 -74
  64. package/dist/api/settings-helpers.js +4 -5
  65. package/dist/api/types.d.ts +0 -5
  66. package/dist/api/user.js +0 -5
  67. package/dist/api/validators.d.ts +14 -52
  68. package/dist/api/validators.js +14 -52
  69. package/dist/assets/asset-prefixes.d.ts +4 -8
  70. package/dist/assets/asset-prefixes.js +4 -8
  71. package/dist/assets/asset-src.d.ts +5 -22
  72. package/dist/assets/asset-src.js +5 -21
  73. package/dist/assets/factory.d.ts +1 -2
  74. package/dist/assets/factory.js +1 -2
  75. package/dist/assets/finalize.d.ts +3 -1
  76. package/dist/assets/finalize.js +3 -1
  77. package/dist/assets/index.d.ts +3 -3
  78. package/dist/assets/index.js +1 -1
  79. package/dist/assets/keys.d.ts +5 -3
  80. package/dist/assets/keys.js +6 -3
  81. package/dist/assets/pipeline.d.ts +3 -2
  82. package/dist/assets/pipeline.js +22 -56
  83. package/dist/assets/sharp-loader.d.ts +2 -10
  84. package/dist/assets/sharp-loader.js +2 -10
  85. package/dist/assets/store-local.d.ts +1 -2
  86. package/dist/assets/store-local.js +1 -2
  87. package/dist/assets/store-s3.d.ts +3 -4
  88. package/dist/assets/svg-sanitizer.d.ts +6 -14
  89. package/dist/assets/svg-sanitizer.js +6 -14
  90. package/dist/assets/transform-directives.d.ts +3 -4
  91. package/dist/assets/transform-directives.js +1 -1
  92. package/dist/assets/transform.d.ts +19 -30
  93. package/dist/assets/transform.js +18 -31
  94. package/dist/auth/cache.d.ts +2 -3
  95. package/dist/auth/cache.js +2 -3
  96. package/dist/auth/caching-auth-plugin.d.ts +11 -22
  97. package/dist/auth/caching-auth-plugin.js +12 -14
  98. package/dist/auth/context-helpers.d.ts +6 -20
  99. package/dist/auth/context-helpers.js +5 -17
  100. package/dist/auth/file-based-auth-cache.d.ts +10 -21
  101. package/dist/auth/file-based-auth-cache.js +23 -51
  102. package/dist/auth/plugin.d.ts +29 -61
  103. package/dist/auth/plugin.js +9 -13
  104. package/dist/auth/types.d.ts +11 -20
  105. package/dist/authorization/branch.d.ts +30 -49
  106. package/dist/authorization/branch.js +16 -42
  107. package/dist/authorization/content.d.ts +11 -40
  108. package/dist/authorization/content.js +13 -45
  109. package/dist/authorization/groups/index.d.ts +0 -3
  110. package/dist/authorization/groups/index.js +0 -3
  111. package/dist/authorization/groups/loader.d.ts +14 -28
  112. package/dist/authorization/groups/loader.js +14 -38
  113. package/dist/authorization/groups/schema.d.ts +0 -6
  114. package/dist/authorization/groups/schema.js +4 -7
  115. package/dist/authorization/helpers.d.ts +9 -28
  116. package/dist/authorization/helpers.js +9 -28
  117. package/dist/authorization/index.d.ts +3 -25
  118. package/dist/authorization/index.js +3 -35
  119. package/dist/authorization/path.d.ts +6 -13
  120. package/dist/authorization/path.js +8 -25
  121. package/dist/authorization/permissions/index.d.ts +0 -3
  122. package/dist/authorization/permissions/index.js +0 -3
  123. package/dist/authorization/permissions/loader.d.ts +14 -27
  124. package/dist/authorization/permissions/loader.js +14 -32
  125. package/dist/authorization/permissions/schema.d.ts +1 -6
  126. package/dist/authorization/permissions/schema.js +6 -13
  127. package/dist/authorization/protected-branch.d.ts +36 -65
  128. package/dist/authorization/protected-branch.js +29 -41
  129. package/dist/authorization/settings-file-store.d.ts +38 -81
  130. package/dist/authorization/settings-file-store.js +38 -79
  131. package/dist/authorization/types.d.ts +4 -26
  132. package/dist/authorization/types.js +0 -6
  133. package/dist/authorization/validation.d.ts +1 -23
  134. package/dist/authorization/validation.js +1 -24
  135. package/dist/branch-health.d.ts +39 -67
  136. package/dist/branch-health.js +27 -43
  137. package/dist/branch-metadata-file.d.ts +16 -32
  138. package/dist/branch-metadata-file.js +13 -26
  139. package/dist/branch-metadata.d.ts +49 -80
  140. package/dist/branch-metadata.js +57 -87
  141. package/dist/branch-registry.d.ts +26 -64
  142. package/dist/branch-registry.js +44 -93
  143. package/dist/branch-schema-cache.d.ts +34 -124
  144. package/dist/branch-schema-cache.js +49 -155
  145. package/dist/branch-workspace.d.ts +4 -4
  146. package/dist/branch-workspace.js +15 -19
  147. package/dist/build/generate-ai-content.d.ts +1 -0
  148. package/dist/build/generate-ai-content.js +12 -25
  149. package/dist/build-canopy.d.ts +17 -27
  150. package/dist/build-canopy.js +16 -23
  151. package/dist/build-mode.d.ts +25 -27
  152. package/dist/build-mode.js +25 -29
  153. package/dist/cli/cli.d.ts +15 -26
  154. package/dist/cli/cli.js +601 -978
  155. package/dist/cli/generate-ai-content.js +351 -628
  156. package/dist/cli/github-app-manifest.d.ts +84 -0
  157. package/dist/cli/github-app-manifest.js +161 -0
  158. package/dist/cli/init-github-app.d.ts +110 -444
  159. package/dist/cli/init-github-app.js +236 -773
  160. package/dist/cli/init.js +39 -80
  161. package/dist/cli/migrate.d.ts +13 -10
  162. package/dist/cli/migrate.js +22 -30
  163. package/dist/cli/project-detect.d.ts +17 -31
  164. package/dist/cli/project-detect.js +31 -42
  165. package/dist/cli/project-root.d.ts +4 -11
  166. package/dist/cli/project-root.js +4 -11
  167. package/dist/cli/prompt.d.ts +10 -0
  168. package/dist/cli/prompt.js +67 -0
  169. package/dist/cli/sync.d.ts +0 -8
  170. package/dist/cli/sync.js +8 -28
  171. package/dist/cli/template-files/middleware.ts.template +15 -29
  172. package/dist/cli/templates.d.ts +2 -12
  173. package/dist/cli/templates.js +4 -4
  174. package/dist/client.d.ts +1 -1
  175. package/dist/comment-store.d.ts +32 -53
  176. package/dist/comment-store.js +32 -52
  177. package/dist/config/flatten.d.ts +0 -3
  178. package/dist/config/flatten.js +2 -12
  179. package/dist/config/helpers.js +2 -2
  180. package/dist/config/index.d.ts +2 -2
  181. package/dist/config/index.js +1 -4
  182. package/dist/config/schemas/collection.d.ts +0 -8
  183. package/dist/config/schemas/collection.js +0 -10
  184. package/dist/config/schemas/config.d.ts +6 -78
  185. package/dist/config/schemas/config.js +38 -54
  186. package/dist/config/schemas/field.d.ts +2 -242
  187. package/dist/config/schemas/field.js +9 -20
  188. package/dist/config/schemas/media.js +1 -1
  189. package/dist/config/schemas/permissions.js +0 -2
  190. package/dist/config/schemas/url.d.ts +5 -6
  191. package/dist/config/schemas/url.js +5 -6
  192. package/dist/config/types.d.ts +45 -33
  193. package/dist/config/types.js +0 -1
  194. package/dist/config.d.ts +1 -8
  195. package/dist/config.js +1 -9
  196. package/dist/content-id-index.d.ts +76 -188
  197. package/dist/content-id-index.js +79 -230
  198. package/dist/content-index-generation.d.ts +27 -48
  199. package/dist/content-index-generation.js +35 -84
  200. package/dist/content-index-registry.d.ts +15 -24
  201. package/dist/content-index-registry.js +5 -9
  202. package/dist/content-listing.d.ts +64 -107
  203. package/dist/content-listing.js +68 -118
  204. package/dist/content-reader.d.ts +20 -29
  205. package/dist/content-reader.js +10 -18
  206. package/dist/content-store.d.ts +210 -336
  207. package/dist/content-store.js +413 -657
  208. package/dist/content-tree.d.ts +44 -86
  209. package/dist/content-tree.js +26 -54
  210. package/dist/context.d.ts +67 -94
  211. package/dist/context.js +53 -72
  212. package/dist/dev-content-watcher.d.ts +18 -18
  213. package/dist/dev-content-watcher.js +41 -44
  214. package/dist/editor/BranchManager.d.ts +3 -6
  215. package/dist/editor/BranchManager.js +24 -44
  216. package/dist/editor/CanopyEditor.js +5 -2
  217. package/dist/editor/CommentsPanel.js +0 -2
  218. package/dist/editor/Editor.js +19 -76
  219. package/dist/editor/EditorAuthGate.d.ts +27 -0
  220. package/dist/editor/EditorAuthGate.js +140 -0
  221. package/dist/editor/EntryNavigator.js +0 -20
  222. package/dist/editor/FormRenderer.d.ts +1 -2
  223. package/dist/editor/FormRenderer.js +8 -23
  224. package/dist/editor/admin/SystemHealthPanel.js +20 -37
  225. package/dist/editor/admin/useSystemHealth.d.ts +2 -3
  226. package/dist/editor/admin/useSystemHealth.js +10 -12
  227. package/dist/editor/client-reference-resolver.d.ts +2 -5
  228. package/dist/editor/client-reference-resolver.js +2 -19
  229. package/dist/editor/comments/BranchComments.js +0 -4
  230. package/dist/editor/comments/EntryComments.js +0 -4
  231. package/dist/editor/comments/FieldWrapper.js +0 -4
  232. package/dist/editor/comments/InlineCommentThread.js +0 -2
  233. package/dist/editor/comments/ThreadCarousel.d.ts +0 -58
  234. package/dist/editor/comments/ThreadCarousel.js +0 -12
  235. package/dist/editor/components/EditorFooter.d.ts +0 -8
  236. package/dist/editor/components/EditorFooter.js +0 -5
  237. package/dist/editor/components/EditorHeader.d.ts +0 -31
  238. package/dist/editor/components/EditorHeader.js +21 -71
  239. package/dist/editor/components/EditorSidebar.d.ts +0 -19
  240. package/dist/editor/components/EditorSidebar.js +0 -16
  241. package/dist/editor/components/EntryCreateModal.d.ts +4 -4
  242. package/dist/editor/components/EntryCreateModal.js +7 -22
  243. package/dist/editor/components/RenameEntryModal.js +0 -4
  244. package/dist/editor/components/UserBadge.js +0 -10
  245. package/dist/editor/components/index.js +0 -2
  246. package/dist/editor/context/ApiClientContext.d.ts +8 -7
  247. package/dist/editor/context/ApiClientContext.js +39 -11
  248. package/dist/editor/context/AssetContext.d.ts +7 -17
  249. package/dist/editor/context/AssetContext.js +7 -17
  250. package/dist/editor/context/EditorIdentityContext.d.ts +13 -0
  251. package/dist/editor/context/EditorIdentityContext.js +7 -0
  252. package/dist/editor/context/EditorStateContext.d.ts +10 -41
  253. package/dist/editor/context/EditorStateContext.js +7 -23
  254. package/dist/editor/context/SWRProvider.d.ts +3 -6
  255. package/dist/editor/context/index.d.ts +1 -20
  256. package/dist/editor/context/index.js +1 -20
  257. package/dist/editor/editor-utils.d.ts +8 -47
  258. package/dist/editor/editor-utils.js +19 -72
  259. package/dist/editor/fields/BlockField.d.ts +2 -2
  260. package/dist/editor/fields/BlockField.js +1 -2
  261. package/dist/editor/fields/CodeField.d.ts +0 -1
  262. package/dist/editor/fields/CodeField.js +0 -1
  263. package/dist/editor/fields/DateTimeField.d.ts +15 -22
  264. package/dist/editor/fields/DateTimeField.js +17 -26
  265. package/dist/editor/fields/ImageField.d.ts +2 -2
  266. package/dist/editor/fields/ImageField.js +8 -14
  267. package/dist/editor/fields/InlineGroupField.d.ts +0 -1
  268. package/dist/editor/fields/InlineGroupField.js +0 -1
  269. package/dist/editor/fields/MarkdownField.d.ts +0 -1
  270. package/dist/editor/fields/MarkdownField.js +6 -11
  271. package/dist/editor/fields/MdxImageDialog.d.ts +1 -1
  272. package/dist/editor/fields/MdxImageDialog.js +0 -1
  273. package/dist/editor/fields/NumberField.d.ts +9 -19
  274. package/dist/editor/fields/NumberField.js +11 -22
  275. package/dist/editor/fields/NumberListField.d.ts +7 -10
  276. package/dist/editor/fields/NumberListField.js +7 -10
  277. package/dist/editor/fields/ObjectField.d.ts +5 -8
  278. package/dist/editor/fields/ObjectField.js +0 -1
  279. package/dist/editor/fields/ReferenceField.d.ts +1 -1
  280. package/dist/editor/fields/ReferenceField.js +11 -16
  281. package/dist/editor/fields/SelectField.d.ts +2 -2
  282. package/dist/editor/fields/SelectField.js +0 -1
  283. package/dist/editor/fields/StringListField.d.ts +0 -4
  284. package/dist/editor/fields/StringListField.js +4 -9
  285. package/dist/editor/fields/TextField.d.ts +0 -1
  286. package/dist/editor/fields/TextField.js +0 -1
  287. package/dist/editor/fields/ToggleField.d.ts +0 -1
  288. package/dist/editor/fields/ToggleField.js +0 -1
  289. package/dist/editor/fields/entry-link/EntryLinkContext.js +2 -4
  290. package/dist/editor/fields/entry-link/InsertEntryLink.d.ts +0 -3
  291. package/dist/editor/fields/entry-link/InsertEntryLink.js +0 -4
  292. package/dist/editor/group-manager/ExternalGroupsTab.d.ts +0 -3
  293. package/dist/editor/group-manager/ExternalGroupsTab.js +0 -1
  294. package/dist/editor/group-manager/GroupCard.d.ts +0 -3
  295. package/dist/editor/group-manager/GroupForm.d.ts +0 -3
  296. package/dist/editor/group-manager/InternalGroupsTab.d.ts +0 -3
  297. package/dist/editor/group-manager/InternalGroupsTab.js +0 -2
  298. package/dist/editor/group-manager/MemberList.d.ts +0 -3
  299. package/dist/editor/group-manager/hooks/useExternalGroupSearch.d.ts +0 -3
  300. package/dist/editor/group-manager/hooks/useExternalGroupSearch.js +0 -3
  301. package/dist/editor/group-manager/hooks/useGroupState.d.ts +0 -3
  302. package/dist/editor/group-manager/hooks/useGroupState.js +0 -5
  303. package/dist/editor/group-manager/hooks/useUserSearch.d.ts +0 -3
  304. package/dist/editor/group-manager/hooks/useUserSearch.js +0 -3
  305. package/dist/editor/group-manager/index.d.ts +0 -6
  306. package/dist/editor/group-manager/index.js +0 -10
  307. package/dist/editor/group-manager/types.d.ts +2 -5
  308. package/dist/editor/group-manager/types.js +0 -3
  309. package/dist/editor/hooks/index.d.ts +6 -11
  310. package/dist/editor/hooks/index.js +6 -12
  311. package/dist/editor/hooks/useBranchActions.d.ts +0 -14
  312. package/dist/editor/hooks/useBranchActions.js +0 -22
  313. package/dist/editor/hooks/useBranchManager.d.ts +2 -48
  314. package/dist/editor/hooks/useBranchManager.js +4 -64
  315. package/dist/editor/hooks/useBranchesData.d.ts +7 -6
  316. package/dist/editor/hooks/useBranchesData.js +7 -6
  317. package/dist/editor/hooks/useCommentSystem.d.ts +0 -49
  318. package/dist/editor/hooks/useCommentSystem.js +1 -36
  319. package/dist/editor/hooks/useDraftManager.d.ts +2 -35
  320. package/dist/editor/hooks/useDraftManager.js +23 -64
  321. package/dist/editor/hooks/useEditorLayout.d.ts +0 -20
  322. package/dist/editor/hooks/useEditorLayout.js +0 -23
  323. package/dist/editor/hooks/useEntriesData.d.ts +1 -0
  324. package/dist/editor/hooks/useEntriesData.js +2 -3
  325. package/dist/editor/hooks/useEntryLinkResolution.d.ts +2 -2
  326. package/dist/editor/hooks/useEntryLinkResolution.js +2 -2
  327. package/dist/editor/hooks/useEntryManager.d.ts +2 -27
  328. package/dist/editor/hooks/useEntryManager.js +29 -78
  329. package/dist/editor/hooks/useGroupManager.d.ts +0 -21
  330. package/dist/editor/hooks/useGroupManager.js +0 -21
  331. package/dist/editor/hooks/usePermissionManager.d.ts +0 -20
  332. package/dist/editor/hooks/usePermissionManager.js +0 -20
  333. package/dist/editor/hooks/useReferenceResolution.d.ts +2 -33
  334. package/dist/editor/hooks/useReferenceResolution.js +1 -48
  335. package/dist/editor/hooks/useSchemaManager.d.ts +8 -27
  336. package/dist/editor/hooks/useSchemaManager.js +0 -19
  337. package/dist/editor/hooks/useUserContext.d.ts +2 -9
  338. package/dist/editor/hooks/useUserContext.js +10 -10
  339. package/dist/editor/hooks/useUserMetadata.d.ts +0 -2
  340. package/dist/editor/hooks/useUserMetadata.js +0 -3
  341. package/dist/editor/media/AssetCard.d.ts +0 -1
  342. package/dist/editor/media/AssetCard.js +1 -2
  343. package/dist/editor/media/CropStep.d.ts +0 -1
  344. package/dist/editor/media/CropStep.js +0 -1
  345. package/dist/editor/media/MediaLibrary.d.ts +1 -2
  346. package/dist/editor/media/MediaLibrary.js +1 -2
  347. package/dist/editor/media/MediaLibraryBody.d.ts +0 -1
  348. package/dist/editor/media/MediaLibraryBody.js +0 -1
  349. package/dist/editor/media/crop-math.d.ts +1 -1
  350. package/dist/editor/media/crop-math.js +1 -1
  351. package/dist/editor/permission-manager/GroupSelector.d.ts +0 -3
  352. package/dist/editor/permission-manager/PermissionEditor.d.ts +0 -4
  353. package/dist/editor/permission-manager/PermissionEditor.js +0 -1
  354. package/dist/editor/permission-manager/PermissionLevelBadge.d.ts +0 -7
  355. package/dist/editor/permission-manager/PermissionLevelBadge.js +0 -4
  356. package/dist/editor/permission-manager/PermissionTree.d.ts +0 -4
  357. package/dist/editor/permission-manager/UserSelector.d.ts +0 -3
  358. package/dist/editor/permission-manager/constants.d.ts +0 -3
  359. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.d.ts +0 -3
  360. package/dist/editor/permission-manager/hooks/useGroupsAndUsers.js +0 -10
  361. package/dist/editor/permission-manager/hooks/usePermissionTree.d.ts +0 -14
  362. package/dist/editor/permission-manager/hooks/usePermissionTree.js +0 -11
  363. package/dist/editor/permission-manager/index.d.ts +0 -7
  364. package/dist/editor/permission-manager/index.js +0 -16
  365. package/dist/editor/permission-manager/types.d.ts +2 -12
  366. package/dist/editor/permission-manager/types.js +0 -3
  367. package/dist/editor/permission-manager/utils.d.ts +0 -28
  368. package/dist/editor/permission-manager/utils.js +9 -23
  369. package/dist/editor/preview-bridge.d.ts +5 -1
  370. package/dist/editor/preview-bridge.js +4 -4
  371. package/dist/editor/schema-editor/CollectionEditor.d.ts +0 -5
  372. package/dist/editor/schema-editor/CollectionEditor.js +9 -31
  373. package/dist/editor/schema-editor/EntryTypeEditor.d.ts +0 -6
  374. package/dist/editor/schema-editor/EntryTypeEditor.js +3 -24
  375. package/dist/editor/schema-editor/index.d.ts +0 -7
  376. package/dist/editor/schema-editor/index.js +0 -7
  377. package/dist/editor/utils/env.d.ts +3 -18
  378. package/dist/editor/utils/env.js +6 -25
  379. package/dist/entry-link-resolver.d.ts +13 -35
  380. package/dist/entry-link-resolver.js +20 -53
  381. package/dist/entry-schema-registry.d.ts +20 -60
  382. package/dist/entry-schema-registry.js +20 -69
  383. package/dist/entry-schema.d.ts +118 -223
  384. package/dist/entry-schema.js +46 -91
  385. package/dist/git-manager.d.ts +101 -200
  386. package/dist/git-manager.js +211 -384
  387. package/dist/github-service.d.ts +34 -75
  388. package/dist/github-service.js +37 -91
  389. package/dist/http/handler.d.ts +6 -37
  390. package/dist/http/handler.js +65 -120
  391. package/dist/http/router.d.ts +15 -32
  392. package/dist/http/router.js +34 -99
  393. package/dist/http/types.d.ts +15 -40
  394. package/dist/http/types.js +3 -7
  395. package/dist/id.d.ts +4 -10
  396. package/dist/id.js +4 -10
  397. package/dist/index.js +6 -9
  398. package/dist/operating-mode/client-safe-strategy.d.ts +7 -14
  399. package/dist/operating-mode/client-safe-strategy.js +8 -28
  400. package/dist/operating-mode/client-unsafe-strategy.d.ts +6 -16
  401. package/dist/operating-mode/client-unsafe-strategy.js +9 -34
  402. package/dist/operating-mode/client.d.ts +3 -10
  403. package/dist/operating-mode/client.js +3 -8
  404. package/dist/operating-mode/deployment-name-fixtures.d.ts +14 -18
  405. package/dist/operating-mode/deployment-name-fixtures.js +14 -18
  406. package/dist/operating-mode/deployment-name.d.ts +19 -29
  407. package/dist/operating-mode/deployment-name.js +29 -47
  408. package/dist/operating-mode/index.d.ts +4 -25
  409. package/dist/operating-mode/index.js +9 -31
  410. package/dist/operating-mode/mode-env.d.ts +32 -54
  411. package/dist/operating-mode/mode-env.js +36 -58
  412. package/dist/operating-mode/types.d.ts +24 -72
  413. package/dist/operating-mode/types.js +1 -7
  414. package/dist/paths/branch-name.d.ts +30 -40
  415. package/dist/paths/branch-name.js +30 -40
  416. package/dist/paths/branch.d.ts +4 -18
  417. package/dist/paths/branch.js +6 -22
  418. package/dist/paths/index.d.ts +2 -13
  419. package/dist/paths/index.js +3 -23
  420. package/dist/paths/normalize-server.d.ts +3 -15
  421. package/dist/paths/normalize-server.js +3 -15
  422. package/dist/paths/normalize.d.ts +13 -33
  423. package/dist/paths/normalize.js +13 -33
  424. package/dist/paths/resolve.d.ts +4 -17
  425. package/dist/paths/resolve.js +4 -22
  426. package/dist/paths/types.d.ts +12 -34
  427. package/dist/paths/types.js +5 -7
  428. package/dist/paths/validation.d.ts +22 -119
  429. package/dist/paths/validation.js +30 -148
  430. package/dist/reference-resolver.d.ts +0 -13
  431. package/dist/reference-resolver.js +0 -18
  432. package/dist/resolve-canopy-user.d.ts +16 -18
  433. package/dist/resolve-canopy-user.js +17 -26
  434. package/dist/resource-generation.d.ts +16 -25
  435. package/dist/resource-generation.js +34 -97
  436. package/dist/schema/meta-loader.d.ts +2 -14
  437. package/dist/schema/meta-loader.js +15 -64
  438. package/dist/schema/resolver.d.ts +1 -4
  439. package/dist/schema/resolver.js +1 -6
  440. package/dist/schema/schema-store-types.d.ts +0 -12
  441. package/dist/schema/schema-store.d.ts +61 -138
  442. package/dist/schema/schema-store.js +85 -282
  443. package/dist/schema/types.d.ts +0 -4
  444. package/dist/server.d.ts +62 -93
  445. package/dist/server.js +63 -94
  446. package/dist/services.d.ts +23 -47
  447. package/dist/services.js +55 -98
  448. package/dist/settings-workspace.d.ts +17 -30
  449. package/dist/settings-workspace.js +51 -81
  450. package/dist/static/index.d.ts +26 -52
  451. package/dist/static/index.js +33 -67
  452. package/dist/{worker/task-queue.d.ts → task-queue/cms-task-queue.d.ts} +7 -9
  453. package/dist/task-queue/cms-task-queue.js +13 -0
  454. package/dist/task-queue/task-queue-config.d.ts +3 -0
  455. package/dist/{worker → task-queue}/task-queue-config.js +1 -6
  456. package/dist/task-queue/task-queue.d.ts +16 -22
  457. package/dist/task-queue/task-queue.js +20 -44
  458. package/dist/task-queue/types.d.ts +0 -1
  459. package/dist/task-queue/worker-status.d.ts +35 -0
  460. package/dist/task-queue/worker-status.js +40 -0
  461. package/dist/types.d.ts +40 -51
  462. package/dist/url-collision.d.ts +26 -40
  463. package/dist/url-collision.js +47 -63
  464. package/dist/url-exclusivity-fixtures.d.ts +15 -20
  465. package/dist/url-exclusivity-fixtures.js +14 -19
  466. package/dist/url-path-resolver.d.ts +8 -16
  467. package/dist/url-path-resolver.js +19 -29
  468. package/dist/user.d.ts +8 -21
  469. package/dist/user.js +10 -19
  470. package/dist/utils/async-mutex.js +4 -6
  471. package/dist/utils/atomic-write.d.ts +2 -11
  472. package/dist/utils/atomic-write.js +2 -11
  473. package/dist/utils/body-field.d.ts +8 -15
  474. package/dist/utils/body-field.js +8 -15
  475. package/dist/utils/content-serialize.d.ts +18 -24
  476. package/dist/utils/content-serialize.js +109 -160
  477. package/dist/utils/content-write-lock.d.ts +51 -106
  478. package/dist/utils/content-write-lock.js +66 -111
  479. package/dist/utils/debug.d.ts +7 -23
  480. package/dist/utils/debug.js +7 -23
  481. package/dist/utils/entry-url.d.ts +11 -23
  482. package/dist/utils/entry-url.js +11 -26
  483. package/dist/utils/error.d.ts +25 -90
  484. package/dist/utils/error.js +60 -147
  485. package/dist/utils/flatten-group-fields.d.ts +5 -7
  486. package/dist/utils/flatten-group-fields.js +5 -7
  487. package/dist/utils/format.d.ts +1 -5
  488. package/dist/utils/format.js +1 -5
  489. package/dist/utils/fs.d.ts +3 -4
  490. package/dist/utils/fs.js +3 -4
  491. package/dist/utils/git.d.ts +52 -83
  492. package/dist/utils/git.js +79 -125
  493. package/dist/utils/logger.d.ts +35 -50
  494. package/dist/utils/logger.js +35 -52
  495. package/dist/utils/provisioning-lock.d.ts +23 -35
  496. package/dist/utils/provisioning-lock.js +49 -69
  497. package/dist/utils/sanitize-href.d.ts +5 -10
  498. package/dist/utils/sanitize-href.js +8 -18
  499. package/dist/utils/title-field.d.ts +17 -20
  500. package/dist/utils/title-field.js +18 -27
  501. package/dist/utils/typed-filename.d.ts +20 -48
  502. package/dist/utils/typed-filename.js +25 -61
  503. package/dist/utils/url-prefix.d.ts +3 -3
  504. package/dist/utils/url-prefix.js +3 -3
  505. package/dist/validation/block-structural-keys.d.ts +16 -31
  506. package/dist/validation/block-structural-keys.js +19 -29
  507. package/dist/validation/deletion-checker.d.ts +0 -34
  508. package/dist/validation/deletion-checker.js +1 -43
  509. package/dist/validation/entry-link-validator.d.ts +6 -13
  510. package/dist/validation/entry-link-validator.js +4 -13
  511. package/dist/validation/entry-type-reference-validator.d.ts +13 -18
  512. package/dist/validation/entry-type-reference-validator.js +13 -18
  513. package/dist/validation/entry-validator.d.ts +13 -25
  514. package/dist/validation/entry-validator.js +15 -32
  515. package/dist/validation/field-traversal.d.ts +3 -30
  516. package/dist/validation/field-traversal.js +1 -32
  517. package/dist/validation/reference-validator.d.ts +5 -24
  518. package/dist/validation/reference-validator.js +5 -30
  519. package/dist/worker/cms-worker.d.ts +172 -232
  520. package/dist/worker/cms-worker.js +241 -333
  521. package/dist/worker/git-sync.d.ts +32 -133
  522. package/dist/worker/git-sync.js +129 -191
  523. package/dist/worker/github-auth.d.ts +13 -19
  524. package/dist/worker/github-auth.js +13 -19
  525. package/dist/worker/history-rewrite.d.ts +53 -66
  526. package/dist/worker/history-rewrite.js +54 -60
  527. package/dist/worker/log.d.ts +24 -41
  528. package/dist/worker/log.js +25 -42
  529. package/dist/worker/rebase.d.ts +20 -110
  530. package/dist/worker/rebase.js +279 -354
  531. package/dist/worker/task-runner.d.ts +32 -66
  532. package/dist/worker/task-runner.js +126 -162
  533. package/dist/worker/worker-context.d.ts +41 -81
  534. package/package.json +4 -4
  535. package/dist/cli/template-files/middleware-clerk.ts.template +0 -37
  536. package/dist/worker/task-queue-config.d.ts +0 -8
  537. package/dist/worker/task-queue.js +0 -19
  538. package/dist/worker/worker-status.d.ts +0 -47
  539. package/dist/worker/worker-status.js +0 -52
@@ -1,6 +1,3 @@
1
- /**
2
- * External groups tab component
3
- */
4
1
  import React from 'react';
5
2
  import type { ExternalGroup } from './types.js';
6
3
  export interface ExternalGroupsTabProps {
@@ -3,7 +3,6 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
3
  import { Alert, Group, Loader, Paper, ScrollArea, Stack, Text, TextInput } from '@mantine/core';
4
4
  import { IconAlertCircle, IconBuilding, IconSearch } from '@tabler/icons-react';
5
5
  export const ExternalGroupsTab = ({ canEdit, searchQuery, searchResults, isSearching, searchError, onSearchQueryChange, canSearch, }) => {
6
- // Read-only view (when !canEdit)
7
6
  if (!canEdit) {
8
7
  return (_jsx("div", { style: {
9
8
  flex: 1,
@@ -1,6 +1,3 @@
1
- /**
2
- * Card component for displaying a single group with its members
3
- */
4
1
  import React from 'react';
5
2
  import type { InternalGroup, UserSearchResult, CanopyGroupId, CanopyUserId } from './types.js';
6
3
  export interface GroupCardProps {
@@ -1,6 +1,3 @@
1
- /**
2
- * Modal form for creating/editing groups
3
- */
4
1
  import React from 'react';
5
2
  import type { InternalGroup, GroupFormData } from './types.js';
6
3
  export interface GroupFormProps {
@@ -1,6 +1,3 @@
1
- /**
2
- * Internal groups tab component
3
- */
4
1
  import React from 'react';
5
2
  import type { InternalGroup, UserSearchResult, CanopyGroupId, CanopyUserId } from './types.js';
6
3
  export interface InternalGroupsTabProps {
@@ -4,7 +4,6 @@ import { Button, Group, Paper, ScrollArea, Stack, Text } from '@mantine/core';
4
4
  import { IconPlus, IconUsers } from '@tabler/icons-react';
5
5
  import { GroupCard } from './GroupCard.js';
6
6
  export const InternalGroupsTab = ({ groups, canEdit, onCreateGroup, onEditGroup, onDeleteGroup, onAddMember, onRemoveMember, onGetUserMetadata, activeSearchGroupId, searchQuery, searchResults, isSearching, searchError, onSearchQueryChange, onShowSearch, onHideSearch, canSearch, }) => {
7
- // Read-only view
8
7
  if (!canEdit) {
9
8
  return (_jsx("div", { style: {
10
9
  flex: 1,
@@ -12,6 +11,5 @@ export const InternalGroupsTab = ({ groups, canEdit, onCreateGroup, onEditGroup,
12
11
  paddingTop: 'var(--mantine-spacing-md)',
13
12
  }, children: groups.length === 0 ? (_jsxs(Paper, { withBorder: true, p: "md", style: { textAlign: 'center' }, children: [_jsx(IconUsers, { size: 32, color: "gray", style: { margin: '0 auto', marginBottom: 8 } }), _jsx(Text, { size: "sm", c: "dimmed", children: "No internal groups" })] })) : (_jsx(Stack, { gap: "xs", pb: "md", children: groups.map((group) => (_jsx(Paper, { withBorder: true, p: "sm", children: _jsxs(Group, { justify: "space-between", children: [_jsxs("div", { children: [_jsx(Text, { size: "sm", fw: 500, children: group.name }), group.description && (_jsx(Text, { size: "xs", c: "dimmed", children: group.description }))] }), _jsxs(Text, { size: "sm", variant: "light", children: [group.members?.length || 0, " members"] })] }) }, group.id))) })) }));
14
13
  }
15
- // Editable view
16
14
  return (_jsx(ScrollArea, { style: { height: '100%' }, pt: "md", children: _jsxs(Stack, { gap: "sm", pb: "md", children: [_jsxs(Group, { justify: "space-between", mb: "xs", children: [_jsx(Text, { size: "sm", fw: 500, c: "dimmed", children: "Manage your internal groups" }), _jsx(Button, { size: "xs", variant: "light", leftSection: _jsx(IconPlus, { size: 14 }), onClick: onCreateGroup, children: "Create Group" })] }), groups.length === 0 ? (_jsxs(Paper, { withBorder: true, p: "md", style: { textAlign: 'center' }, children: [_jsx(IconUsers, { size: 32, color: "gray", style: { margin: '0 auto', marginBottom: 8 } }), _jsx(Text, { size: "sm", c: "dimmed", children: "No internal groups yet. Create one to get started." })] })) : (groups.map((group) => (_jsx(GroupCard, { group: group, onEdit: onEditGroup, onDelete: onDeleteGroup, onAddMember: onAddMember, onRemoveMember: onRemoveMember, onGetUserMetadata: onGetUserMetadata, showUserSearch: activeSearchGroupId === group.id, searchQuery: searchQuery, searchResults: searchResults, isSearching: isSearching, searchError: searchError, onSearchQueryChange: onSearchQueryChange, onShowSearch: () => onShowSearch(group.id), onHideSearch: onHideSearch, canSearch: canSearch }, group.id))))] }) }));
17
15
  };
@@ -1,6 +1,3 @@
1
- /**
2
- * Member list component with user search for adding members
3
- */
4
1
  import React from 'react';
5
2
  import type { UserSearchResult, CanopyGroupId, CanopyUserId } from './types.js';
6
3
  export interface MemberListProps {
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for external group search functionality
3
- */
4
1
  import type { ExternalGroup } from '../types.js';
5
2
  export interface UseExternalGroupSearchOptions {
6
3
  onSearchExternalGroups?: (query: string) => Promise<ExternalGroup[]>;
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for external group search functionality
3
- */
4
1
  import { useState, useEffect } from 'react';
5
2
  export function useExternalGroupSearch({ onSearchExternalGroups, }) {
6
3
  const [searchQuery, setSearchQuery] = useState('');
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for managing internal group state
3
- */
4
1
  import type { InternalGroup, CanopyGroupId, CanopyUserId } from '../types.js';
5
2
  export interface UseGroupStateOptions {
6
3
  initialGroups: InternalGroup[];
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for managing internal group state
3
- */
4
1
  import { useState, useEffect, useCallback } from 'react';
5
2
  const TEMP_GROUP_ID_PREFIX = 'temp-';
6
3
  const isTempGroupId = (id) => id.startsWith(TEMP_GROUP_ID_PREFIX);
@@ -9,7 +6,6 @@ export function useGroupState({ initialGroups, onSave, }) {
9
6
  const [isDirty, setIsDirty] = useState(false);
10
7
  const [isSaving, setIsSaving] = useState(false);
11
8
  const [error, setError] = useState(null);
12
- // Sync groups when prop changes
13
9
  useEffect(() => {
14
10
  setGroups(initialGroups);
15
11
  setIsDirty(false);
@@ -57,7 +53,6 @@ export function useGroupState({ initialGroups, onSave, }) {
57
53
  const save = useCallback(async () => {
58
54
  if (!onSave)
59
55
  return;
60
- // Validate that Admins group is not empty
61
56
  const adminsGroup = groups.find((g) => g.id === 'Admins');
62
57
  if (!adminsGroup || !adminsGroup.members || adminsGroup.members.length === 0) {
63
58
  setError('Cannot remove the last admin. At least one admin is required.');
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for user search functionality
3
- */
4
1
  import type { UserSearchResult } from '../types.js';
5
2
  export interface UseUserSearchOptions {
6
3
  onSearchUsers?: (query: string, limit?: number) => Promise<UserSearchResult[]>;
@@ -1,6 +1,3 @@
1
- /**
2
- * Hook for user search functionality
3
- */
4
1
  import { useState, useEffect, useCallback } from 'react';
5
2
  export function useUserSearch({ onSearchUsers }) {
6
3
  const [searchQuery, setSearchQuery] = useState('');
@@ -1,9 +1,3 @@
1
- /**
2
- * GroupManager - Main component for managing internal and external groups.
3
- *
4
- * This component provides a tabbed UI for managing internal groups with
5
- * member assignment, and browsing external groups from the organization.
6
- */
7
1
  import React from 'react';
8
2
  import type { GroupManagerProps } from './types.js';
9
3
  export declare const GroupManager: React.FC<GroupManagerProps>;
@@ -1,11 +1,5 @@
1
1
  'use client';
2
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
- /**
4
- * GroupManager - Main component for managing internal and external groups.
5
- *
6
- * This component provides a tabbed UI for managing internal groups with
7
- * member assignment, and browsing external groups from the organization.
8
- */
9
3
  import { useState, useCallback } from 'react';
10
4
  import { Alert, Button, Group, Loader, Stack, Tabs, Text } from '@mantine/core';
11
5
  import { IconAlertCircle } from '@tabler/icons-react';
@@ -16,16 +10,12 @@ import { InternalGroupsTab } from './InternalGroupsTab.js';
16
10
  import { ExternalGroupsTab } from './ExternalGroupsTab.js';
17
11
  import { GroupForm } from './GroupForm.js';
18
12
  export const GroupManager = ({ internalGroups: initialInternalGroups, loading = false, canEdit, onSave, onSearchUsers, onGetUserMetadata, onSearchExternalGroups, onClose: _, }) => {
19
- // Group state management
20
13
  const { groups, isDirty, isSaving, error, setError, createGroup, updateGroup, deleteGroup, addMember, removeMember, save, discard, } = useGroupState({
21
14
  initialGroups: initialInternalGroups,
22
15
  onSave,
23
16
  });
24
- // User search for adding members
25
17
  const userSearch = useUserSearch({ onSearchUsers });
26
- // External group search
27
18
  const externalGroupSearch = useExternalGroupSearch({ onSearchExternalGroups });
28
- // Modal state for creating/editing groups
29
19
  const [isModalOpen, setIsModalOpen] = useState(false);
30
20
  const [editingGroup, setEditingGroup] = useState(null);
31
21
  const [formData, setFormData] = useState({
@@ -1,11 +1,8 @@
1
- /**
2
- * Type definitions for GroupManager module
3
- */
4
- import type { UserSearchResult, GroupMetadata } from '../../auth/types.js';
1
+ import type { UserSearchResult } from '../../auth/types.js';
5
2
  import type { CanopyGroupId, CanopyUserId } from '../../types.js';
6
3
  import type { InternalGroup } from '../../authorization/index.js';
7
4
  import type { ExternalGroup } from '../../api/groups.js';
8
- export type { UserSearchResult, GroupMetadata, InternalGroup, ExternalGroup };
5
+ export type { UserSearchResult, InternalGroup, ExternalGroup };
9
6
  export type { CanopyGroupId, CanopyUserId };
10
7
  export interface GroupManagerProps {
11
8
  internalGroups: InternalGroup[];
@@ -1,4 +1 @@
1
- /**
2
- * Type definitions for GroupManager module
3
- */
4
1
  export {};
@@ -1,14 +1,9 @@
1
- export * from './useEditorLayout.js';
2
- export { useBranchManager, type UseBranchManagerOptions } from './useBranchManager.js';
3
- export { useEntryManager, listAllEntries } from './useEntryManager.js';
4
- export * from './useDraftManager.js';
1
+ export { useEditorLayout } from './useEditorLayout.js';
2
+ export { useBranchManager } from './useBranchManager.js';
3
+ export { useEntryManager } from './useEntryManager.js';
4
+ export { useDraftManager } from './useDraftManager.js';
5
5
  export { useCommentSystem } from './useCommentSystem.js';
6
- export { useBranchesData, fetchBranches, BRANCHES_KEY, type BranchesData } from './useBranchesData.js';
7
- export { fetchEntriesAndSchema, entriesKey, type EntriesData, type FetchEntriesParams, } from './useEntriesData.js';
8
- export { useCommentsData, fetchComments, commentsKey, type CommentsData } from './useCommentsData.js';
9
6
  export { useGroupManager } from './useGroupManager.js';
10
7
  export { usePermissionManager } from './usePermissionManager.js';
11
- export { useBranchActions } from './useBranchActions.js';
12
- export { useUserContext, type UseUserContextReturn } from './useUserContext.js';
13
- export { useReferenceResolution, type UseReferenceResolutionOptions, type UseReferenceResolutionResult, } from './useReferenceResolution.js';
14
- export { useSchemaManager, type UseSchemaManagerOptions, type UseSchemaManagerReturn, } from './useSchemaManager.js';
8
+ export { useUserContext } from './useUserContext.js';
9
+ export { useSchemaManager } from './useSchemaManager.js';
@@ -1,17 +1,11 @@
1
- // Barrel export for all custom hooks
2
- // Export hooks as they are created
3
- // Note: resetApiClient functions are not exported - they're test-only utilities
4
- export * from './useEditorLayout.js';
1
+ // Only the hooks Editor.tsx and media/MediaLibraryBody.tsx import. Everything
2
+ // else in this directory is deep-imported from its own module.
3
+ export { useEditorLayout } from './useEditorLayout.js';
5
4
  export { useBranchManager } from './useBranchManager.js';
6
- export { useEntryManager, listAllEntries } from './useEntryManager.js';
7
- export * from './useDraftManager.js';
5
+ export { useEntryManager } from './useEntryManager.js';
6
+ export { useDraftManager } from './useDraftManager.js';
8
7
  export { useCommentSystem } from './useCommentSystem.js';
9
- export { useBranchesData, fetchBranches, BRANCHES_KEY } from './useBranchesData.js';
10
- export { fetchEntriesAndSchema, entriesKey, } from './useEntriesData.js';
11
- export { useCommentsData, fetchComments, commentsKey } from './useCommentsData.js';
12
8
  export { useGroupManager } from './useGroupManager.js';
13
9
  export { usePermissionManager } from './usePermissionManager.js';
14
- export { useBranchActions } from './useBranchActions.js';
15
10
  export { useUserContext } from './useUserContext.js';
16
- export { useReferenceResolution, } from './useReferenceResolution.js';
17
- export { useSchemaManager, } from './useSchemaManager.js';
11
+ export { useSchemaManager } from './useSchemaManager.js';
@@ -15,19 +15,5 @@ export interface UseBranchActionsReturn {
15
15
  }
16
16
  /**
17
17
  * Custom hook for branch navigation actions with dirty check support.
18
- *
19
- * Handles:
20
- * - Branch switching with unsaved changes confirmation
21
- * - Creating new branches with dirty check
22
- *
23
- * @example
24
- * ```tsx
25
- * const { handleBranchChange, handleCreateBranch } = useBranchActions({
26
- * branchName,
27
- * setBranchName,
28
- * isAnyDirty,
29
- * onReloadBranches
30
- * })
31
- * ```
32
18
  */
33
19
  export declare function useBranchActions(options: UseBranchActionsOptions): UseBranchActionsReturn;
@@ -5,31 +5,11 @@ import { Text } from '@mantine/core';
5
5
  import { useApiClient } from '../context/index.js';
6
6
  /**
7
7
  * Custom hook for branch navigation actions with dirty check support.
8
- *
9
- * Handles:
10
- * - Branch switching with unsaved changes confirmation
11
- * - Creating new branches with dirty check
12
- *
13
- * @example
14
- * ```tsx
15
- * const { handleBranchChange, handleCreateBranch } = useBranchActions({
16
- * branchName,
17
- * setBranchName,
18
- * isAnyDirty,
19
- * onReloadBranches
20
- * })
21
- * ```
22
8
  */
23
9
  export function useBranchActions(options) {
24
10
  const apiClient = useApiClient();
25
- // Helper: Perform branch switch with URL update
26
11
  const performBranchSwitch = (next) => {
27
- // Update branchName state - hooks will react:
28
- // - useEntryManager clears selectedPath and refreshes entries
29
- // - useDraftManager clears drafts/loadedValues
30
- // - useCommentSystem loads comments
31
12
  options.setBranchName(next);
32
- // Update URL
33
13
  if (typeof window !== 'undefined') {
34
14
  const url = new URL(window.location.href);
35
15
  url.searchParams.set('branch', next);
@@ -37,7 +17,6 @@ export function useBranchActions(options) {
37
17
  }
38
18
  options.onBranchSwitch?.(next);
39
19
  };
40
- // Helper: Check for dirty state and show modal
41
20
  const confirmIfDirty = async (message) => {
42
21
  if (!options.isAnyDirty())
43
22
  return true;
@@ -64,7 +43,6 @@ export function useBranchActions(options) {
64
43
  const confirmed = await confirmIfDirty('Create new branch without saving changes?');
65
44
  if (!confirmed)
66
45
  return;
67
- // Create the branch via API
68
46
  try {
69
47
  const result = await apiClient.branches.create({
70
48
  branch: branch.name,
@@ -2,10 +2,7 @@ import type { ConflictStatus, PullRequestState, SyncStatus } from '../../types.j
2
2
  import type { OperatingMode } from '../../operating-mode/index.js';
3
3
  import type { CommentThread } from '../../comment-store.js';
4
4
  import type { BranchListItem } from '../../api/branch.js';
5
- /**
6
- * Branch summary for display in BranchManager component.
7
- */
8
- export interface BranchSummary {
5
+ interface BranchSummary {
9
6
  name: string;
10
7
  status: string;
11
8
  createdBy?: string;
@@ -50,21 +47,9 @@ export interface BranchSummary {
50
47
  submitBlocked: boolean;
51
48
  }
52
49
  export interface UseBranchManagerOptions {
53
- /**
54
- * Initial branch name.
55
- */
56
50
  initialBranch: string;
57
- /**
58
- * Operating mode (dev, etc.).
59
- */
60
51
  operatingMode: OperatingMode;
61
- /**
62
- * Callback to set busy state.
63
- */
64
52
  setBusy: (busy: boolean) => void;
65
- /**
66
- * Current comments (for computing comment counts per branch).
67
- */
68
53
  comments: CommentThread[];
69
54
  }
70
55
  export interface UseBranchManagerReturn {
@@ -82,37 +67,6 @@ export interface UseBranchManagerReturn {
82
67
  }
83
68
  /**
84
69
  * Custom hook for managing git branches.
85
- *
86
- * Handles:
87
- * - Loading branches from API
88
- * - Branch switching with unsaved changes confirmation
89
- * - Creating new branches
90
- * - Branch workflow (submit, withdraw, request changes)
91
- * - URL synchronization for branch parameter
92
- *
93
- * @example
94
- * ```tsx
95
- * const {
96
- * branchName,
97
- * branches,
98
- * currentBranch,
99
- * handleBranchChange,
100
- * handleCreateBranch,
101
- * handleSubmit
102
- * } = useBranchManager({
103
- * initialBranch: 'main',
104
- * operatingMode: 'collaboration',
105
- * selectedPath,
106
- * drafts,
107
- * loadedValues,
108
- * setDrafts,
109
- * setLoadedValues,
110
- * setSelectedId,
111
- * setEntries,
112
- * onEntriesRefresh: refreshEntries,
113
- * onCommentsLoad: loadComments,
114
- * setBusy
115
- * })
116
- * ```
117
70
  */
118
71
  export declare function useBranchManager(options: UseBranchManagerOptions): UseBranchManagerReturn;
72
+ export {};
@@ -49,9 +49,6 @@ const confirmModalHandlers = (onConfirm, onDismiss) => {
49
49
  },
50
50
  };
51
51
  };
52
- /**
53
- * Helper function to show confirmation modal for branch submit action.
54
- */
55
52
  const showSubmitConfirmation = (branchName, onConfirm, onDismiss) => {
56
53
  modals.openConfirmModal({
57
54
  title: 'Submit Branch for Review',
@@ -61,9 +58,6 @@ const showSubmitConfirmation = (branchName, onConfirm, onDismiss) => {
61
58
  ...confirmModalHandlers(onConfirm, onDismiss),
62
59
  });
63
60
  };
64
- /**
65
- * Helper function to show confirmation modal for branch withdraw action.
66
- */
67
61
  const showWithdrawConfirmation = (branchName, onConfirm, onDismiss) => {
68
62
  modals.openConfirmModal({
69
63
  title: 'Withdraw Branch from Review',
@@ -74,8 +68,6 @@ const showWithdrawConfirmation = (branchName, onConfirm, onDismiss) => {
74
68
  });
75
69
  };
76
70
  /**
77
- * Helper function to show confirmation modal for branch delete action.
78
- *
79
71
  * Unlike submit/withdraw (both reversible), delete is irreversible -- it
80
72
  * unlinks branch.json, removes the clone, and removes the branch head from
81
73
  * the local git mirror. Before this, `handleDelete` below called
@@ -95,54 +87,18 @@ const showDeleteConfirmation = (branchName, onConfirm, onDismiss) => {
95
87
  // (apps/test-app/e2e/fixtures/branch-page.ts's deleteBranch) already
96
88
  // anticipated a delete confirmation and clicks
97
89
  // [data-testid="confirm-delete-branch"] when it appears. Without this the
98
- // modal opens, nothing dismisses it, and the branch never disappears --
99
- // which is exactly how the e2e suite caught this confirmation being added.
90
+ // modal opens, nothing dismisses it, and the branch never disappears.
100
91
  confirmProps: { color: 'red', 'data-testid': 'confirm-delete-branch' },
101
92
  ...confirmModalHandlers(onConfirm, onDismiss),
102
93
  });
103
94
  };
104
95
  /**
105
96
  * Custom hook for managing git branches.
106
- *
107
- * Handles:
108
- * - Loading branches from API
109
- * - Branch switching with unsaved changes confirmation
110
- * - Creating new branches
111
- * - Branch workflow (submit, withdraw, request changes)
112
- * - URL synchronization for branch parameter
113
- *
114
- * @example
115
- * ```tsx
116
- * const {
117
- * branchName,
118
- * branches,
119
- * currentBranch,
120
- * handleBranchChange,
121
- * handleCreateBranch,
122
- * handleSubmit
123
- * } = useBranchManager({
124
- * initialBranch: 'main',
125
- * operatingMode: 'collaboration',
126
- * selectedPath,
127
- * drafts,
128
- * loadedValues,
129
- * setDrafts,
130
- * setLoadedValues,
131
- * setSelectedId,
132
- * setEntries,
133
- * onEntriesRefresh: refreshEntries,
134
- * onCommentsLoad: loadComments,
135
- * setBusy
136
- * })
137
- * ```
138
97
  */
139
98
  export function useBranchManager(options) {
140
99
  const apiClient = useApiClient();
141
100
  const { mutate: globalMutate } = useSWRConfig();
142
101
  const [branchName, setBranchName] = useState(options.initialBranch);
143
- // Automatic load, deduped by SWR (e.g. React Strict Mode's double effect
144
- // invoke collapses to a single request). Not keyed by branchName -- the
145
- // endpoint returns every branch regardless of which one is selected.
146
102
  const { data: branchesData, error: branchesError, isValidating: branchesIsValidating, } = useBranchesData(apiClient);
147
103
  const branches = useMemo(() => branchesData?.branches ?? [], [branchesData]);
148
104
  // Adopt the server's default branch once data arrives, if nothing pinned one.
@@ -151,7 +107,7 @@ export function useBranchManager(options) {
151
107
  setBranchName(branchesData.defaultBranch);
152
108
  }
153
109
  }, [branchesData, branchName]);
154
- // Surface/clear the sticky error toast the same way loadBranches() used to.
110
+ // Surfaces/clears the sticky error toast the same way loadBranches() does.
155
111
  useEffect(() => {
156
112
  if (branchesError) {
157
113
  console.error(branchesError);
@@ -183,7 +139,6 @@ export function useBranchManager(options) {
183
139
  // resolves to the branch the server actually persisted (e.g. "feature-x").
184
140
  const currentBranch = branches.find((b) => b.name === branchName) ??
185
141
  branches.find((b) => b.name === sanitizeBranchName(branchName));
186
- // Compute branch summaries with comment counts
187
142
  const branchSummaries = useMemo(() => {
188
143
  return branches.map((b) => {
189
144
  const branchComments = b.name === branchName ? options.comments : [];
@@ -244,8 +199,6 @@ export function useBranchManager(options) {
244
199
  catch (err) {
245
200
  console.error(err);
246
201
  const message = err instanceof Error ? err.message : 'Failed to load branches';
247
- // Fixed id: retries update the existing toast instead of stacking; sticky
248
- // because the editor cannot function without the branch list.
249
202
  notifications.show({
250
203
  id: 'canopy-branches-load-failed',
251
204
  message,
@@ -315,13 +268,7 @@ export function useBranchManager(options) {
315
268
  finally {
316
269
  options.setBusy(false);
317
270
  }
318
- },
319
- // Dismissal is not an error. Rejecting here meant clicking Cancel
320
- // logged a console error at the only call site (Editor.tsx catches
321
- // these into console.error), which is both noise and a trip hazard
322
- // for the CI=1 stray-console gate. Settled once, by onCancel OR
323
- // onClose, so an Escape/overlay dismissal can't leave this pending.
324
- () => resolve());
271
+ }, () => resolve());
325
272
  });
326
273
  };
327
274
  const handleRequestChanges = async (branchNameForChanges) => {
@@ -367,19 +314,12 @@ export function useBranchManager(options) {
367
314
  // rethrown). Cancellation resolves too -- see below.
368
315
  resolve();
369
316
  }
370
- },
371
- // Dismissal is not an error. Rejecting here meant clicking Cancel
372
- // logged a console error at the only call site (Editor.tsx catches
373
- // these into console.error), which is both noise and a trip hazard
374
- // for the CI=1 stray-console gate. Settled once, by onCancel OR
375
- // onClose, so an Escape/overlay dismissal can't leave this pending.
376
- () => resolve());
317
+ }, () => resolve());
377
318
  });
378
319
  };
379
320
  const handleReloadBranchData = async () => {
380
321
  await loadBranches();
381
322
  };
382
- // Sync branch to URL parameter
383
323
  useEffect(() => {
384
324
  if (typeof window === 'undefined')
385
325
  return;
@@ -29,6 +29,7 @@ export declare function fetchBranches(apiClient: Pick<ApiClient, 'branches'>): P
29
29
  * How often to re-poll while at least one branch is mid-flight, in ms.
30
30
  * Only ever active in the transient window below, so this is not a
31
31
  * standing background poll.
32
+ * @internal Exported only for the test that pins it.
32
33
  */
33
34
  export declare const IN_FLIGHT_POLL_MS = 15000;
34
35
  /**
@@ -36,12 +37,12 @@ export declare const IN_FLIGHT_POLL_MS = 15000;
36
37
  *
37
38
  * `pending-sync` -> `synced` | `sync-failed` happens asynchronously on the
38
39
  * EC2 worker when it drains the task queue, with nothing pushed to the
39
- * browser. Before SWR, the branches list happened to refetch on every
40
- * branch switch, so these badges (PR #160) converged incidentally as the
41
- * user moved around. That effect is gone now -- correctly, since the list
42
- * isn't branch-scoped -- so without this a user who submits a branch would
43
- * watch "Pending sync" forever until they reloaded the page or performed
44
- * some unrelated branch mutation.
40
+ * browser. The branches list is not refetched on a branch switch (it isn't
41
+ * branch-scoped), so an in-flight badge converges only via this poll --
42
+ * without it, a user who submits a branch would watch "Pending sync"
43
+ * forever until they reloaded the page or performed some unrelated branch
44
+ * mutation.
45
+ * @internal Exported only for the test that pins it.
45
46
  */
46
47
  export declare function hasInFlightBranch(data: BranchesData | undefined): boolean;
47
48
  /**
@@ -35,6 +35,7 @@ export async function fetchBranches(apiClient) {
35
35
  * How often to re-poll while at least one branch is mid-flight, in ms.
36
36
  * Only ever active in the transient window below, so this is not a
37
37
  * standing background poll.
38
+ * @internal Exported only for the test that pins it.
38
39
  */
39
40
  export const IN_FLIGHT_POLL_MS = 15_000;
40
41
  /**
@@ -42,12 +43,12 @@ export const IN_FLIGHT_POLL_MS = 15_000;
42
43
  *
43
44
  * `pending-sync` -> `synced` | `sync-failed` happens asynchronously on the
44
45
  * EC2 worker when it drains the task queue, with nothing pushed to the
45
- * browser. Before SWR, the branches list happened to refetch on every
46
- * branch switch, so these badges (PR #160) converged incidentally as the
47
- * user moved around. That effect is gone now -- correctly, since the list
48
- * isn't branch-scoped -- so without this a user who submits a branch would
49
- * watch "Pending sync" forever until they reloaded the page or performed
50
- * some unrelated branch mutation.
46
+ * browser. The branches list is not refetched on a branch switch (it isn't
47
+ * branch-scoped), so an in-flight badge converges only via this poll --
48
+ * without it, a user who submits a branch would watch "Pending sync"
49
+ * forever until they reloaded the page or performed some unrelated branch
50
+ * mutation.
51
+ * @internal Exported only for the test that pins it.
51
52
  */
52
53
  export function hasInFlightBranch(data) {
53
54
  return (data?.branches ?? []).some((b) => b.syncStatus === 'pending-sync');
@@ -1,37 +1,13 @@
1
1
  import type { CommentThread } from '../../comment-store.js';
2
2
  import type { EditorEntry } from '../Editor.js';
3
3
  export interface UseCommentSystemOptions {
4
- /**
5
- * Current branch name for loading/saving comments.
6
- */
7
4
  branchName: string;
8
- /**
9
- * Currently selected entry path.
10
- */
11
5
  selectedPath: string;
12
- /**
13
- * Current entry being edited.
14
- */
15
6
  currentEntry: EditorEntry | undefined;
16
- /**
17
- * Current user identifier.
18
- */
19
7
  currentUser: string;
20
- /**
21
- * Whether the current user can resolve comment threads.
22
- */
23
8
  canResolveComments: boolean;
24
- /**
25
- * Callback to change the selected entry.
26
- */
27
9
  setSelectedPath: (id: string) => void;
28
- /**
29
- * Callback to open the branch manager.
30
- */
31
10
  setBranchManagerOpen: (open: boolean) => void;
32
- /**
33
- * Optional callback when comments are loaded/updated.
34
- */
35
11
  onCommentsChange?: (comments: CommentThread[]) => void;
36
12
  }
37
13
  export interface UseCommentSystemReturn {
@@ -63,30 +39,5 @@ export interface UseCommentSystemReturn {
63
39
  }
64
40
  /**
65
41
  * Custom hook for managing the comment system.
66
- *
67
- * Handles:
68
- * - Loading comments from API
69
- * - Adding comments to threads
70
- * - Resolving comment threads
71
- * - Field focus highlighting from preview frame
72
- * - Active comment context tracking
73
- *
74
- * @example
75
- * ```tsx
76
- * const {
77
- * comments,
78
- * activeThreads,
79
- * handleAddComment,
80
- * handleResolveThread,
81
- * loadComments
82
- * } = useCommentSystem({
83
- * branchName,
84
- * selectedPath,
85
- * currentEntry,
86
- * currentUser,
87
- * canResolveComments,
88
- * onReloadBranches
89
- * })
90
- * ```
91
42
  */
92
43
  export declare function useCommentSystem(options: UseCommentSystemOptions): UseCommentSystemReturn;