@payloadcms/ui 4.0.0-internal.532221d → 4.0.0-internal.567a487

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 (501) hide show
  1. package/dist/elements/AppHeader/index.css +5 -0
  2. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  3. package/dist/elements/AppHeader/index.js +3 -0
  4. package/dist/elements/AppHeader/index.js.map +1 -1
  5. package/dist/elements/ArrayAction/index.d.ts +1 -0
  6. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  7. package/dist/elements/ArrayAction/index.js +45 -32
  8. package/dist/elements/ArrayAction/index.js.map +1 -1
  9. package/dist/elements/Autosave/index.d.ts.map +1 -1
  10. package/dist/elements/Autosave/index.js +3 -0
  11. package/dist/elements/Autosave/index.js.map +1 -1
  12. package/dist/elements/BranchSelector/NewBranchModal/index.css +46 -0
  13. package/dist/elements/BranchSelector/NewBranchModal/index.d.ts +12 -0
  14. package/dist/elements/BranchSelector/NewBranchModal/index.d.ts.map +1 -0
  15. package/dist/elements/BranchSelector/NewBranchModal/index.js +174 -0
  16. package/dist/elements/BranchSelector/NewBranchModal/index.js.map +1 -0
  17. package/dist/elements/BranchSelector/index.css +172 -0
  18. package/dist/elements/BranchSelector/index.d.ts +13 -0
  19. package/dist/elements/BranchSelector/index.d.ts.map +1 -0
  20. package/dist/elements/BranchSelector/index.js +255 -0
  21. package/dist/elements/BranchSelector/index.js.map +1 -0
  22. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  23. package/dist/elements/BulkUpload/FormsManager/index.js +6 -2
  24. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  25. package/dist/elements/Button/index.css +2 -2
  26. package/dist/elements/ChangeSummary/index.css +18 -0
  27. package/dist/elements/ChangeSummary/index.d.ts +28 -0
  28. package/dist/elements/ChangeSummary/index.d.ts.map +1 -0
  29. package/dist/elements/ChangeSummary/index.js +147 -0
  30. package/dist/elements/ChangeSummary/index.js.map +1 -0
  31. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +10 -0
  32. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  33. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +55 -0
  34. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  35. package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -1
  36. package/dist/elements/ColumnSelection/Popup.js +3 -3
  37. package/dist/elements/ColumnSelection/Popup.js.map +1 -1
  38. package/dist/elements/Combobox/index.css +84 -23
  39. package/dist/elements/Combobox/index.d.ts +21 -0
  40. package/dist/elements/Combobox/index.d.ts.map +1 -1
  41. package/dist/elements/Combobox/index.js +66 -21
  42. package/dist/elements/Combobox/index.js.map +1 -1
  43. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  44. package/dist/elements/DeleteDocument/index.js +9 -2
  45. package/dist/elements/DeleteDocument/index.js.map +1 -1
  46. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  47. package/dist/elements/DeleteMany/index.js +4 -1
  48. package/dist/elements/DeleteMany/index.js.map +1 -1
  49. package/dist/elements/DocumentHeader/Tabs/Tab/index.css +5 -3
  50. package/dist/elements/DocumentHeader/Tabs/tabs/BranchChangesPill/index.css +12 -0
  51. package/dist/elements/DocumentHeader/Tabs/tabs/BranchChangesPill/index.d.ts +12 -0
  52. package/dist/elements/DocumentHeader/Tabs/tabs/BranchChangesPill/index.d.ts.map +1 -0
  53. package/dist/elements/DocumentHeader/Tabs/tabs/BranchChangesPill/index.js +83 -0
  54. package/dist/elements/DocumentHeader/Tabs/tabs/BranchChangesPill/index.js.map +1 -0
  55. package/dist/elements/DocumentHeader/Tabs/tabs/BranchSettingsTab/index.d.ts +14 -0
  56. package/dist/elements/DocumentHeader/Tabs/tabs/BranchSettingsTab/index.d.ts.map +1 -0
  57. package/dist/elements/DocumentHeader/Tabs/tabs/BranchSettingsTab/index.js +28 -0
  58. package/dist/elements/DocumentHeader/Tabs/tabs/BranchSettingsTab/index.js.map +1 -0
  59. package/dist/elements/DocumentHeader/Tabs/tabs/index.d.ts.map +1 -1
  60. package/dist/elements/DocumentHeader/Tabs/tabs/index.js +32 -1
  61. package/dist/elements/DocumentHeader/Tabs/tabs/index.js.map +1 -1
  62. package/dist/elements/Drawer/index.css +10 -4
  63. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +3 -2
  64. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  65. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  66. package/dist/elements/DuplicateDocument/index.js +6 -1
  67. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  68. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  69. package/dist/elements/EditMany/DrawerContent.js +4 -1
  70. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  71. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  72. package/dist/elements/Hierarchy/ColumnBrowser/index.js +4 -1
  73. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  74. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -1
  75. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +4 -1
  76. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -1
  77. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +2 -1
  78. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  79. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +2 -0
  80. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  81. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  82. package/dist/elements/Hierarchy/Modal/index.js +3 -0
  83. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  84. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  85. package/dist/elements/Hierarchy/MoveMany/index.js +4 -1
  86. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  87. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  88. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +3 -0
  89. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  90. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  91. package/dist/elements/Hierarchy/Tree/useChildren.js +4 -1
  92. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
  93. package/dist/elements/IDLabel/index.css +6 -0
  94. package/dist/elements/IDLabel/index.d.ts +1 -1
  95. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  96. package/dist/elements/IDLabel/index.js +16 -21
  97. package/dist/elements/IDLabel/index.js.map +1 -1
  98. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +1 -7
  99. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  100. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +26 -32
  101. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  102. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  103. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +6 -2
  104. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  105. package/dist/elements/MergeBranch/context.d.ts +67 -0
  106. package/dist/elements/MergeBranch/context.d.ts.map +1 -0
  107. package/dist/elements/MergeBranch/context.js +47 -0
  108. package/dist/elements/MergeBranch/context.js.map +1 -0
  109. package/dist/elements/MergeBranch/index.css +136 -0
  110. package/dist/elements/MergeBranch/index.d.ts +15 -0
  111. package/dist/elements/MergeBranch/index.d.ts.map +1 -0
  112. package/dist/elements/MergeBranch/index.js +545 -0
  113. package/dist/elements/MergeBranch/index.js.map +1 -0
  114. package/dist/elements/MergeBranch/provider.d.ts +12 -0
  115. package/dist/elements/MergeBranch/provider.d.ts.map +1 -0
  116. package/dist/elements/MergeBranch/provider.js +19 -0
  117. package/dist/elements/MergeBranch/provider.js.map +1 -0
  118. package/dist/elements/MergeBranch/slug.d.ts +9 -0
  119. package/dist/elements/MergeBranch/slug.d.ts.map +1 -0
  120. package/dist/elements/MergeBranch/slug.js +8 -0
  121. package/dist/elements/MergeBranch/slug.js.map +1 -0
  122. package/dist/elements/Nav/context.js +2 -2
  123. package/dist/elements/Nav/context.js.map +1 -1
  124. package/dist/elements/Nav/getNavPrefs.d.ts +6 -0
  125. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  126. package/dist/elements/Nav/getNavPrefs.js +14 -46
  127. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  128. package/dist/elements/NavGroup/index.js +1 -1
  129. package/dist/elements/NavGroup/index.js.map +1 -1
  130. package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -1
  131. package/dist/elements/PermanentlyDeleteButton/index.js +4 -1
  132. package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -1
  133. package/dist/elements/Popup/PopupButtonList/index.css +1 -1
  134. package/dist/elements/Popup/index.js +1 -1
  135. package/dist/elements/Popup/index.js.map +1 -1
  136. package/dist/elements/PublishButton/ScheduleDrawer/index.js +1 -1
  137. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  138. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  139. package/dist/elements/PublishButton/index.js +6 -2
  140. package/dist/elements/PublishButton/index.js.map +1 -1
  141. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  142. package/dist/elements/PublishMany/DrawerContent.js +4 -1
  143. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  144. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -3
  145. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  146. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  147. package/dist/elements/RelationshipTable/index.js +5 -2
  148. package/dist/elements/RelationshipTable/index.js.map +1 -1
  149. package/dist/elements/RestoreButton/index.d.ts.map +1 -1
  150. package/dist/elements/RestoreButton/index.js +4 -1
  151. package/dist/elements/RestoreButton/index.js.map +1 -1
  152. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  153. package/dist/elements/RestoreMany/index.js +3 -0
  154. package/dist/elements/RestoreMany/index.js.map +1 -1
  155. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  156. package/dist/elements/SaveDraftButton/index.js +15 -2
  157. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  158. package/dist/elements/SchedulePublishButton/index.d.ts.map +1 -1
  159. package/dist/elements/SchedulePublishButton/index.js +7 -1
  160. package/dist/elements/SchedulePublishButton/index.js.map +1 -1
  161. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  162. package/dist/elements/SortHeader/index.js +29 -26
  163. package/dist/elements/SortHeader/index.js.map +1 -1
  164. package/dist/elements/Status/index.d.ts.map +1 -1
  165. package/dist/elements/Status/index.js +16 -3
  166. package/dist/elements/Status/index.js.map +1 -1
  167. package/dist/elements/StepNav/index.css +71 -14
  168. package/dist/elements/StepNav/index.d.ts.map +1 -1
  169. package/dist/elements/StepNav/index.js +135 -69
  170. package/dist/elements/StepNav/index.js.map +1 -1
  171. package/dist/elements/Table/DefaultCell/fields/BranchStatus/index.css +34 -0
  172. package/dist/elements/Table/DefaultCell/fields/BranchStatus/index.d.ts +13 -0
  173. package/dist/elements/Table/DefaultCell/fields/BranchStatus/index.d.ts.map +1 -0
  174. package/dist/elements/Table/DefaultCell/fields/BranchStatus/index.js +51 -0
  175. package/dist/elements/Table/DefaultCell/fields/BranchStatus/index.js.map +1 -0
  176. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  177. package/dist/elements/Table/DefaultCell/index.js +3 -11
  178. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  179. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  180. package/dist/elements/Table/OrderableTable.js +3 -1
  181. package/dist/elements/Table/OrderableTable.js.map +1 -1
  182. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  183. package/dist/elements/Table/RelationshipProvider/index.js +29 -23
  184. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  185. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  186. package/dist/elements/UnpublishButton/index.js +4 -1
  187. package/dist/elements/UnpublishButton/index.js.map +1 -1
  188. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  189. package/dist/elements/UnpublishMany/DrawerContent.js +4 -1
  190. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  191. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  192. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +3 -0
  193. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  194. package/dist/exports/client/index.d.ts +19 -1
  195. package/dist/exports/client/index.d.ts.map +1 -1
  196. package/dist/exports/client/index.js +1 -1
  197. package/dist/exports/client/index.js.map +3 -3
  198. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  199. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  200. package/dist/fields/Array/ArrayRow.js +2 -0
  201. package/dist/fields/Array/ArrayRow.js.map +1 -1
  202. package/dist/fields/Array/index.d.ts.map +1 -1
  203. package/dist/fields/Array/index.js +38 -10
  204. package/dist/fields/Array/index.js.map +1 -1
  205. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  206. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  207. package/dist/fields/Blocks/BlockRow.js +2 -0
  208. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  209. package/dist/fields/Blocks/RowActions.d.ts +1 -0
  210. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  211. package/dist/fields/Blocks/RowActions.js +22 -19
  212. package/dist/fields/Blocks/RowActions.js.map +1 -1
  213. package/dist/fields/Blocks/index.d.ts.map +1 -1
  214. package/dist/fields/Blocks/index.js +35 -7
  215. package/dist/fields/Blocks/index.js.map +1 -1
  216. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  217. package/dist/fields/Relationship/Input.js +5 -1
  218. package/dist/fields/Relationship/Input.js.map +1 -1
  219. package/dist/fields/Upload/Input.d.ts.map +1 -1
  220. package/dist/fields/Upload/Input.js +4 -1
  221. package/dist/fields/Upload/Input.js.map +1 -1
  222. package/dist/forms/Form/index.d.ts.map +1 -1
  223. package/dist/forms/Form/index.js +4 -1
  224. package/dist/forms/Form/index.js.map +1 -1
  225. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  226. package/dist/hooks/usePayloadAPI.js +44 -40
  227. package/dist/hooks/usePayloadAPI.js.map +1 -1
  228. package/dist/icons/Branch/index.css +5 -0
  229. package/dist/icons/Branch/index.d.ts +7 -0
  230. package/dist/icons/Branch/index.d.ts.map +1 -0
  231. package/dist/icons/Branch/index.js +25 -0
  232. package/dist/icons/Branch/index.js.map +1 -0
  233. package/dist/icons/Edit/index.d.ts +0 -1
  234. package/dist/icons/Edit/index.d.ts.map +1 -1
  235. package/dist/icons/Edit/index.js +4 -4
  236. package/dist/icons/Edit/index.js.map +1 -1
  237. package/dist/providers/Actions/index.d.ts +1 -0
  238. package/dist/providers/Actions/index.d.ts.map +1 -1
  239. package/dist/providers/Actions/index.js +43 -11
  240. package/dist/providers/Actions/index.js.map +1 -1
  241. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  242. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  243. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  244. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  245. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  246. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  247. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  248. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  249. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  250. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  251. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  252. package/dist/providers/Auth/authSessionRequests.js +119 -0
  253. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  254. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  255. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  256. package/dist/providers/Auth/index.d.ts +2 -56
  257. package/dist/providers/Auth/index.d.ts.map +1 -1
  258. package/dist/providers/Auth/index.js +283 -135
  259. package/dist/providers/Auth/index.js.map +1 -1
  260. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  261. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  262. package/dist/providers/Auth/sessionActivity.js +49 -0
  263. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  264. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  265. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  266. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  267. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  268. package/dist/providers/Auth/sessionTiming.js +18 -0
  269. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  270. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  271. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  272. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  273. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  274. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  275. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  276. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  277. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  278. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  279. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  280. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  281. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  282. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  283. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  284. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  285. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  286. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  287. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  288. package/dist/providers/Auth/types.d.ts +65 -0
  289. package/dist/providers/Auth/types.d.ts.map +1 -0
  290. package/dist/providers/Auth/types.js +2 -0
  291. package/dist/providers/Auth/types.js.map +1 -0
  292. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  293. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  294. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  295. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  296. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  297. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  298. package/dist/providers/Branch/index.d.ts +68 -0
  299. package/dist/providers/Branch/index.d.ts.map +1 -0
  300. package/dist/providers/Branch/index.js +193 -0
  301. package/dist/providers/Branch/index.js.map +1 -0
  302. package/dist/providers/Branch/index.server.d.ts +14 -0
  303. package/dist/providers/Branch/index.server.d.ts.map +1 -0
  304. package/dist/providers/Branch/index.server.js +125 -0
  305. package/dist/providers/Branch/index.server.js.map +1 -0
  306. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  307. package/dist/providers/DocumentInfo/index.js +5 -1
  308. package/dist/providers/DocumentInfo/index.js.map +1 -1
  309. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts +2 -1
  310. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts.map +1 -1
  311. package/dist/providers/DocumentInfo/useGetDocPermissions.js +3 -1
  312. package/dist/providers/DocumentInfo/useGetDocPermissions.js.map +1 -1
  313. package/dist/providers/FormErrorHandler/index.d.ts +5 -1
  314. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -1
  315. package/dist/providers/FormErrorHandler/index.js.map +1 -1
  316. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  317. package/dist/providers/Hierarchy/index.js +4 -1
  318. package/dist/providers/Hierarchy/index.js.map +1 -1
  319. package/dist/providers/Locale/index.d.ts.map +1 -1
  320. package/dist/providers/Locale/index.js +41 -36
  321. package/dist/providers/Locale/index.js.map +1 -1
  322. package/dist/providers/Preferences/index.d.ts +3 -1
  323. package/dist/providers/Preferences/index.d.ts.map +1 -1
  324. package/dist/providers/Preferences/index.js +9 -3
  325. package/dist/providers/Preferences/index.js.map +1 -1
  326. package/dist/providers/Root/index.js +4 -4
  327. package/dist/providers/Root/index.js.map +1 -1
  328. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  329. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  330. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  331. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  332. package/dist/providers/RouteTransition/index.d.ts +2 -0
  333. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  334. package/dist/providers/RouteTransition/index.js +42 -14
  335. package/dist/providers/RouteTransition/index.js.map +1 -1
  336. package/dist/styles.css +1 -1
  337. package/dist/templates/Default/index.d.ts +1 -0
  338. package/dist/templates/Default/index.d.ts.map +1 -1
  339. package/dist/templates/Default/index.js +44 -36
  340. package/dist/templates/Default/index.js.map +1 -1
  341. package/dist/utilities/getAdminPreferences.d.ts +14 -0
  342. package/dist/utilities/getAdminPreferences.d.ts.map +1 -0
  343. package/dist/utilities/getAdminPreferences.js +22 -0
  344. package/dist/utilities/getAdminPreferences.js.map +1 -0
  345. package/dist/utilities/getRequestBranch.d.ts +20 -0
  346. package/dist/utilities/getRequestBranch.d.ts.map +1 -0
  347. package/dist/utilities/getRequestBranch.js +35 -0
  348. package/dist/utilities/getRequestBranch.js.map +1 -0
  349. package/dist/utilities/getVersions.d.ts +6 -1
  350. package/dist/utilities/getVersions.d.ts.map +1 -1
  351. package/dist/utilities/getVersions.js +5 -0
  352. package/dist/utilities/getVersions.js.map +1 -1
  353. package/dist/utilities/initReq.d.ts.map +1 -1
  354. package/dist/utilities/initReq.js +8 -0
  355. package/dist/utilities/initReq.js.map +1 -1
  356. package/dist/utilities/matchesSearchQuery.d.ts +12 -0
  357. package/dist/utilities/matchesSearchQuery.d.ts.map +1 -0
  358. package/dist/utilities/matchesSearchQuery.js +23 -0
  359. package/dist/utilities/matchesSearchQuery.js.map +1 -0
  360. package/dist/{elements/ColumnSelection/matchesColumnSearch.spec.js → utilities/matchesSearchQuery.spec.js} +29 -29
  361. package/dist/utilities/matchesSearchQuery.spec.js.map +1 -0
  362. package/dist/utilities/scheduleMergeHandler.d.ts +33 -0
  363. package/dist/utilities/scheduleMergeHandler.d.ts.map +1 -0
  364. package/dist/utilities/scheduleMergeHandler.js +119 -0
  365. package/dist/utilities/scheduleMergeHandler.js.map +1 -0
  366. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  367. package/dist/utilities/schedulePublishHandler.js +10 -0
  368. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  369. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  370. package/dist/utilities/serverFunctionRegistry.js +6 -0
  371. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  372. package/dist/views/API/index.client.d.ts.map +1 -1
  373. package/dist/views/API/index.client.js +10 -2
  374. package/dist/views/API/index.client.js.map +1 -1
  375. package/dist/views/Branch/BranchChanges/index.d.ts +23 -0
  376. package/dist/views/Branch/BranchChanges/index.d.ts.map +1 -0
  377. package/dist/views/Branch/BranchChanges/index.js +150 -0
  378. package/dist/views/Branch/BranchChanges/index.js.map +1 -0
  379. package/dist/views/Branch/ChangedDocuments/index.css +118 -0
  380. package/dist/views/Branch/ChangedDocuments/index.d.ts +34 -0
  381. package/dist/views/Branch/ChangedDocuments/index.d.ts.map +1 -0
  382. package/dist/views/Branch/ChangedDocuments/index.js +233 -0
  383. package/dist/views/Branch/ChangedDocuments/index.js.map +1 -0
  384. package/dist/views/Branch/DiscardChangesButton/index.d.ts +16 -0
  385. package/dist/views/Branch/DiscardChangesButton/index.d.ts.map +1 -0
  386. package/dist/views/Branch/DiscardChangesButton/index.js +106 -0
  387. package/dist/views/Branch/DiscardChangesButton/index.js.map +1 -0
  388. package/dist/views/Branch/Manage/index.d.ts +11 -0
  389. package/dist/views/Branch/Manage/index.d.ts.map +1 -0
  390. package/dist/views/Branch/Manage/index.js +71 -0
  391. package/dist/views/Branch/Manage/index.js.map +1 -0
  392. package/dist/views/Branch/MergeChangesButton/index.d.ts +14 -0
  393. package/dist/views/Branch/MergeChangesButton/index.d.ts.map +1 -0
  394. package/dist/views/Branch/MergeChangesButton/index.js +55 -0
  395. package/dist/views/Branch/MergeChangesButton/index.js.map +1 -0
  396. package/dist/views/Branch/MergeLedger/index.css +137 -0
  397. package/dist/views/Branch/MergeLedger/index.d.ts +31 -0
  398. package/dist/views/Branch/MergeLedger/index.d.ts.map +1 -0
  399. package/dist/views/Branch/MergeLedger/index.js +211 -0
  400. package/dist/views/Branch/MergeLedger/index.js.map +1 -0
  401. package/dist/views/Branch/ScheduledMerges/index.css +83 -0
  402. package/dist/views/Branch/ScheduledMerges/index.d.ts +32 -0
  403. package/dist/views/Branch/ScheduledMerges/index.d.ts.map +1 -0
  404. package/dist/views/Branch/ScheduledMerges/index.js +183 -0
  405. package/dist/views/Branch/ScheduledMerges/index.js.map +1 -0
  406. package/dist/views/Branch/index.css +77 -0
  407. package/dist/views/Branch/index.d.ts +17 -0
  408. package/dist/views/Branch/index.d.ts.map +1 -0
  409. package/dist/views/Branch/index.js +188 -0
  410. package/dist/views/Branch/index.js.map +1 -0
  411. package/dist/views/Branch/renderBranchDiff.d.ts +29 -0
  412. package/dist/views/Branch/renderBranchDiff.d.ts.map +1 -0
  413. package/dist/views/Branch/renderBranchDiff.js +151 -0
  414. package/dist/views/Branch/renderBranchDiff.js.map +1 -0
  415. package/dist/views/Branch/renderMergeDiff.d.ts +24 -0
  416. package/dist/views/Branch/renderMergeDiff.d.ts.map +1 -0
  417. package/dist/views/Branch/renderMergeDiff.js +94 -0
  418. package/dist/views/Branch/renderMergeDiff.js.map +1 -0
  419. package/dist/views/Branches/index.d.ts +16 -0
  420. package/dist/views/Branches/index.d.ts.map +1 -0
  421. package/dist/views/Branches/index.js +54 -0
  422. package/dist/views/Branches/index.js.map +1 -0
  423. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  424. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +3 -2
  425. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  426. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  427. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  428. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  429. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  430. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +104 -66
  431. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  432. package/dist/views/Dashboard/Default/ModularDashboard/index.css +33 -140
  433. package/dist/views/Document/getDocumentView.d.ts.map +1 -1
  434. package/dist/views/Document/getDocumentView.js +21 -2
  435. package/dist/views/Document/getDocumentView.js.map +1 -1
  436. package/dist/views/Document/getMetaBySegment.d.ts.map +1 -1
  437. package/dist/views/Document/getMetaBySegment.js +9 -0
  438. package/dist/views/Document/getMetaBySegment.js.map +1 -1
  439. package/dist/views/Document/index.d.ts +3 -1
  440. package/dist/views/Document/index.d.ts.map +1 -1
  441. package/dist/views/Document/index.js +8 -1
  442. package/dist/views/Document/index.js.map +1 -1
  443. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  444. package/dist/views/HierarchyList/HierarchyTable/index.js +6 -2
  445. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  446. package/dist/views/List/ListHeader/index.d.ts +1 -10
  447. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  448. package/dist/views/List/ListHeader/index.js +1 -3
  449. package/dist/views/List/ListHeader/index.js.map +1 -1
  450. package/dist/views/List/index.client.d.ts.map +1 -1
  451. package/dist/views/List/index.client.js +0 -14
  452. package/dist/views/List/index.client.js.map +1 -1
  453. package/dist/views/List/index.css +5 -0
  454. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  455. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  456. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  457. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  458. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  459. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  460. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  461. package/dist/views/Root/getRouteData.js +12 -4
  462. package/dist/views/Root/getRouteData.js.map +1 -1
  463. package/dist/views/Root/index.d.ts.map +1 -1
  464. package/dist/views/Root/index.js +1 -0
  465. package/dist/views/Root/index.js.map +1 -1
  466. package/dist/views/Version/Default/index.css +26 -2
  467. package/dist/views/Version/Default/index.d.ts.map +1 -1
  468. package/dist/views/Version/Default/index.js +18 -6
  469. package/dist/views/Version/Default/index.js.map +1 -1
  470. package/dist/views/Version/Default/types.d.ts +9 -0
  471. package/dist/views/Version/Default/types.d.ts.map +1 -1
  472. package/dist/views/Version/Default/types.js.map +1 -1
  473. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  474. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +8 -0
  475. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  476. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  477. package/dist/views/Version/Restore/index.js +6 -3
  478. package/dist/views/Version/Restore/index.js.map +1 -1
  479. package/dist/views/Version/index.d.ts.map +1 -1
  480. package/dist/views/Version/index.js +4 -0
  481. package/dist/views/Version/index.js.map +1 -1
  482. package/dist/views/Versions/buildColumns.d.ts +2 -1
  483. package/dist/views/Versions/buildColumns.d.ts.map +1 -1
  484. package/dist/views/Versions/buildColumns.js +21 -1
  485. package/dist/views/Versions/buildColumns.js.map +1 -1
  486. package/dist/views/Versions/cells/Branch/index.d.ts +12 -0
  487. package/dist/views/Versions/cells/Branch/index.d.ts.map +1 -0
  488. package/dist/views/Versions/cells/Branch/index.js +27 -0
  489. package/dist/views/Versions/cells/Branch/index.js.map +1 -0
  490. package/dist/views/Versions/index.client.d.ts +0 -1
  491. package/dist/views/Versions/index.client.d.ts.map +1 -1
  492. package/dist/views/Versions/index.client.js.map +1 -1
  493. package/dist/views/Versions/index.d.ts.map +1 -1
  494. package/dist/views/Versions/index.js +2 -14
  495. package/dist/views/Versions/index.js.map +1 -1
  496. package/package.json +5 -5
  497. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts +0 -10
  498. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts.map +0 -1
  499. package/dist/elements/ColumnSelection/matchesColumnSearch.js +0 -21
  500. package/dist/elements/ColumnSelection/matchesColumnSearch.js.map +0 -1
  501. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
@@ -0,0 +1,136 @@
1
+ @layer payload-default {
2
+ /* Wraps the summary and its optional link so the gap to the mode options is the
3
+ wrapper's, and does not depend on which of the two is last. */
4
+ .merge-branch-modal__intro {
5
+ display: flex;
6
+ flex-direction: column;
7
+ align-items: flex-start;
8
+ gap: var(--spacer-1);
9
+ margin-block-end: var(--spacer-3);
10
+ }
11
+
12
+ .merge-branch-modal__summary {
13
+ margin-block: 0;
14
+ color: var(--color-text-secondary);
15
+ }
16
+
17
+ /* The way out of "all of it" — sits directly under the sentence it qualifies. */
18
+ .merge-branch-modal__review {
19
+ color: var(--color-text-brand);
20
+ }
21
+
22
+ .merge-branch-modal__modes {
23
+ display: flex;
24
+ flex-direction: column;
25
+ gap: var(--spacer-2);
26
+ }
27
+
28
+ /* Separated from the mode radios by a rule: this is a second, independent
29
+ decision, not a third option in the first one. */
30
+ .merge-branch-modal__close-branch {
31
+ margin-block-start: var(--spacer-3);
32
+ padding-block-start: var(--spacer-3);
33
+ border-block-start: var(--stroke-width-small) solid var(--color-border);
34
+ }
35
+
36
+ .merge-branch-modal__close-branch-help {
37
+ margin-block: var(--spacer-1) 0;
38
+ padding-inline-start: var(--spacer-4);
39
+ color: var(--color-text-secondary);
40
+ }
41
+
42
+ /* Indented to the radio label above it, so the date reads as part of choosing
43
+ "schedule" rather than as the next question down the modal. */
44
+ .merge-branch-modal__schedule {
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: var(--spacer-2);
48
+ margin-block-start: var(--spacer-2);
49
+ padding-inline-start: var(--spacer-4);
50
+ }
51
+
52
+ .merge-branch-modal__schedule-field {
53
+ display: flex;
54
+ flex-direction: column;
55
+ gap: var(--spacer-1);
56
+ }
57
+
58
+ /* The picker sizes itself to its container, which in a modal is the full width —
59
+ a date needs nothing like that much room. */
60
+ .merge-branch-modal__schedule-field .date-time-picker {
61
+ max-width: calc(var(--spacer-6) * 6);
62
+ }
63
+
64
+ .merge-branch-modal__schedule-help {
65
+ margin: 0;
66
+ color: var(--color-text-secondary);
67
+ }
68
+
69
+ .merge-branch-modal__upcoming {
70
+ display: flex;
71
+ flex-direction: column;
72
+ gap: var(--spacer-1);
73
+ }
74
+
75
+ .merge-branch-modal__upcoming-title {
76
+ margin: 0;
77
+ font-family: var(--text-body-small-font-family);
78
+ font-size: var(--text-body-small-font-size);
79
+ color: var(--color-text-secondary);
80
+ }
81
+
82
+ .merge-branch-modal__upcoming-list {
83
+ margin: 0;
84
+ padding: 0;
85
+ list-style: none;
86
+ }
87
+
88
+ .merge-branch-modal__upcoming-row {
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: space-between;
92
+ gap: var(--spacer-3);
93
+ }
94
+
95
+ .merge-branch-modal__unavailable {
96
+ margin: 0;
97
+ color: var(--color-text-secondary);
98
+ }
99
+
100
+ .merge-branch-modal__progress {
101
+ display: flex;
102
+ flex-direction: column;
103
+ gap: var(--spacer-2);
104
+ margin-block-start: var(--spacer-4);
105
+ }
106
+
107
+ .merge-branch-modal__progress-bar {
108
+ height: var(--spacer-1);
109
+ border-radius: var(--radius-full);
110
+ background: var(--color-bg-secondary);
111
+ overflow: hidden;
112
+ }
113
+
114
+ .merge-branch-modal__progress-fill {
115
+ height: 100%;
116
+ border-radius: inherit;
117
+ background: var(--color-text-brand);
118
+ /* Each document lands as a discrete step, so ease between them rather than
119
+ letting the bar snap on every event. */
120
+ transition: width 200ms ease-out;
121
+ }
122
+
123
+ .merge-branch-modal__progress-fill--complete {
124
+ background: var(--color-bg-success);
125
+ }
126
+
127
+ .merge-branch-modal__blocked {
128
+ margin-block: var(--spacer-3) 0;
129
+ padding-inline-start: var(--spacer-3);
130
+ color: var(--color-text-danger);
131
+ }
132
+
133
+ .merge-branch-modal__progress-label {
134
+ color: var(--color-text-secondary);
135
+ }
136
+ }
@@ -0,0 +1,15 @@
1
+ import React from 'react';
2
+ import './index.css';
3
+ /**
4
+ * The modal every merge entry point opens.
5
+ *
6
+ * Merging is a decision — what to take, and when — so it happens in a modal from
7
+ * wherever the branch is on screen, rather than by routing somewhere first.
8
+ *
9
+ * The merge itself streams. A branch can hold hundreds of documents and each one
10
+ * is a full write with hooks and validation, so "merging 34 of 230" is real
11
+ * information rather than a spinner's decoration; see `endpoints/merge.ts` for
12
+ * why that is a streamed response rather than a job and a polling loop.
13
+ */
14
+ export declare const MergeBranchModal: React.FC;
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/MergeBranch/index.tsx"],"names":[],"mappings":"AAUA,OAAO,KAA2C,MAAM,OAAO,CAAA;AAuB/D,OAAO,aAAa,CAAA;AAmBpB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAkiBpC,CAAA"}
@@ -0,0 +1,545 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { branchChangesCollectionSlug, branchesCollectionSlug, formatAdminURL, MAIN_BRANCH } from 'payload/shared';
5
+ import React, { useCallback, useEffect, useState } from 'react';
6
+ import { toast } from 'sonner';
7
+ import { CheckboxInput } from '../../fields/Checkbox/Input.js';
8
+ import { FieldLabel } from '../../fields/FieldLabel/index.js';
9
+ import { Radio } from '../../fields/RadioGroup/Radio/index.js';
10
+ import { useConfig } from '../../providers/Config/index.js';
11
+ import { useRouter } from '../../providers/RouterAdapter/index.js';
12
+ import { useRouteTransition } from '../../providers/RouteTransition/index.js';
13
+ import { useServerFunctions } from '../../providers/ServerFunctions/index.js';
14
+ import { useTranslation } from '../../providers/Translation/index.js';
15
+ import { requests } from '../../utilities/api.js';
16
+ import { buildUpcomingMergeWhere } from '../../utilities/scheduleMergeHandler.js';
17
+ import { Button } from '../Button/index.js';
18
+ import { ChangeSummary } from '../ChangeSummary/index.js';
19
+ import { DatePickerField } from '../DatePicker/index.js';
20
+ import { DialogBody, DialogFooter, DialogHeader, DialogModal } from '../Dialog/index.js';
21
+ import { Link } from '../Link/index.js';
22
+ import { useModal } from '../Modal/index.js';
23
+ import { useMergeBranch } from './context.js';
24
+ import { mergeBranchModalSlug } from './slug.js';
25
+ import './index.css';
26
+ const baseClass = 'merge-branch-modal';
27
+ /**
28
+ * How many changes the modal will read to describe the merge.
29
+ *
30
+ * High enough to cover any branch a person is reviewing by hand, low enough that a
31
+ * runaway branch does not turn opening this modal into a bulk read.
32
+ */
33
+ const SUMMARY_SAMPLE_LIMIT = 200;
34
+ /**
35
+ * The modal every merge entry point opens.
36
+ *
37
+ * Merging is a decision — what to take, and when — so it happens in a modal from
38
+ * wherever the branch is on screen, rather than by routing somewhere first.
39
+ *
40
+ * The merge itself streams. A branch can hold hundreds of documents and each one
41
+ * is a full write with hooks and validation, so "merging 34 of 230" is real
42
+ * information rather than a spinner's decoration; see `endpoints/merge.ts` for
43
+ * why that is a streamed response rather than a job and a polling loop.
44
+ */
45
+ export const MergeBranchModal = () => {
46
+ const {
47
+ closeMerge,
48
+ target
49
+ } = useMergeBranch();
50
+ const {
51
+ t
52
+ } = useTranslation();
53
+ const {
54
+ isModalOpen
55
+ } = useModal();
56
+ const router = useRouter();
57
+ const {
58
+ startRouteTransition
59
+ } = useRouteTransition();
60
+ const {
61
+ serverFunction
62
+ } = useServerFunctions();
63
+ const {
64
+ config: {
65
+ routes: {
66
+ api
67
+ },
68
+ serverURL
69
+ }
70
+ } = useConfig();
71
+ const [mode, setMode] = useState('now');
72
+ const [scheduledFor, setScheduledFor] = useState();
73
+ const [isMerging, setIsMerging] = useState(false);
74
+ const [progress, setProgress] = useState(null);
75
+ const [countedChanges, setCountedChanges] = useState(null);
76
+ /** The branch's changes, read here when the opener did not already know them. */
77
+ const [sampledChanges, setSampledChanges] = useState(null);
78
+ /** Set once the merge has finished, which switches the modal to its receipt. */
79
+ const [outcome, setOutcome] = useState(null);
80
+ const [closeBranch, setCloseBranch] = useState(false);
81
+ const [isScheduling, setIsScheduling] = useState(false);
82
+ const [upcoming, setUpcoming] = useState([]);
83
+ const isOpen = isModalOpen(mergeBranchModalSlug);
84
+ const branchSlug = target?.branchSlug;
85
+ const knownChanges = target?.changes;
86
+ // Offered only when nothing is left behind. Merging a subset means there is still
87
+ // work on the branch by definition, so closing it would abandon that work — a
88
+ // destructive act wearing a convenience checkbox. Computed up here because
89
+ // `handleMergeNow` depends on it.
90
+ const canCloseBranch = target?.selectedChangeIDs === undefined;
91
+ // Read on open rather than with the screen behind it: the switcher can be opened
92
+ // from anywhere, and a summary nobody has asked to see is a query on every page
93
+ // load. Skipped entirely when the opener already knows what it is merging.
94
+ useEffect(() => {
95
+ if (!isOpen || !branchSlug || knownChanges) {
96
+ return;
97
+ }
98
+ const controller = new AbortController();
99
+ const readChanges = async () => {
100
+ try {
101
+ const response = await requests.get(formatAdminURL({
102
+ apiRoute: api,
103
+ path: `/${branchChangesCollectionSlug}`,
104
+ serverURL
105
+ }), {
106
+ params: {
107
+ depth: 0,
108
+ limit: SUMMARY_SAMPLE_LIMIT,
109
+ select: {
110
+ collectionSlug: true,
111
+ operation: true
112
+ },
113
+ where: {
114
+ branch: {
115
+ equals: branchSlug
116
+ }
117
+ }
118
+ },
119
+ signal: controller.signal
120
+ });
121
+ const json = await response.json();
122
+ if (typeof json?.totalDocs === 'number') {
123
+ setCountedChanges(json.totalDocs);
124
+ // Only when the sample is the whole set. A breakdown of the first 200 of
125
+ // 900 changes would read as a description of the merge and be wrong about
126
+ // it, so past that point the count says it on its own.
127
+ setSampledChanges(json.docs?.length === json.totalDocs ? json.docs ?? null : null);
128
+ }
129
+ } catch (_err) {
130
+ // A missing summary degrades the copy, not the action — the merge still
131
+ // knows what it is applying.
132
+ }
133
+ };
134
+ void readChanges();
135
+ return () => controller.abort();
136
+ }, [api, branchSlug, isOpen, knownChanges, serverURL]);
137
+ // Upcoming schedules for this branch, loaded when the schedule option is chosen
138
+ // rather than with the modal — most merges are immediate and never ask.
139
+ const loadUpcoming = useCallback(async () => {
140
+ if (!branchSlug) {
141
+ return;
142
+ }
143
+ try {
144
+ const response_0 = await requests.get(formatAdminURL({
145
+ apiRoute: api,
146
+ path: '/payload-jobs',
147
+ serverURL
148
+ }), {
149
+ params: {
150
+ depth: 0,
151
+ limit: 10,
152
+ sort: 'waitUntil',
153
+ where: buildUpcomingMergeWhere({
154
+ branchSlug
155
+ })
156
+ }
157
+ });
158
+ const json_0 = await response_0.json();
159
+ setUpcoming((json_0.docs ?? []).filter(doc => Boolean(doc.waitUntil)).map(doc_0 => ({
160
+ id: doc_0.id,
161
+ waitUntil: String(doc_0.waitUntil)
162
+ })));
163
+ } catch (_err_0) {
164
+ // A missing list costs the reader context, not the action.
165
+ }
166
+ }, [api, branchSlug, serverURL]);
167
+ useEffect(() => {
168
+ if (isOpen && mode === 'schedule') {
169
+ void loadUpcoming();
170
+ }
171
+ }, [isOpen, loadUpcoming, mode]);
172
+ const reset = useCallback(() => {
173
+ setMode('now');
174
+ setScheduledFor(undefined);
175
+ setProgress(null);
176
+ setOutcome(null);
177
+ setCloseBranch(false);
178
+ setUpcoming([]);
179
+ }, []);
180
+ const dismiss = useCallback(() => {
181
+ closeMerge();
182
+ reset();
183
+ }, [closeMerge, reset]);
184
+ const reportResult = useCallback(result => {
185
+ if (result.merged.length) {
186
+ toast.success(t('branching:mergedCount', {
187
+ count: result.merged.length
188
+ }));
189
+ }
190
+ // Blocked entries are per-document refusals, not a failed merge: the rest
191
+ // was applied and the branch stays open for what was not.
192
+ result.blocked.forEach(({
193
+ message
194
+ }) => toast.error(message));
195
+ if (!result.merged.length && !result.blocked.length) {
196
+ toast.info(t('branching:noChangesYet'));
197
+ }
198
+ }, [t]);
199
+ const handleSchedule = useCallback(async () => {
200
+ if (!target || !scheduledFor || isScheduling) {
201
+ return;
202
+ }
203
+ setIsScheduling(true);
204
+ try {
205
+ const result_0 = await serverFunction({
206
+ name: 'schedule-merge',
207
+ args: {
208
+ branchID: target.branchID,
209
+ changes: target.selectedChangeIDs,
210
+ closeBranch: canCloseBranch && closeBranch,
211
+ date: scheduledFor
212
+ }
213
+ });
214
+ if (result_0?.error) {
215
+ toast.error(result_0.error);
216
+ return;
217
+ }
218
+ toast.success(t('branching:mergeScheduledFor', {
219
+ date: scheduledFor.toLocaleString(undefined, {
220
+ dateStyle: 'medium',
221
+ timeStyle: 'short'
222
+ })
223
+ }));
224
+ dismiss();
225
+ // The branch page shows nothing about a queued merge yet, but the jobs list
226
+ // does — and the branch's own state may have been read before this.
227
+ startRouteTransition(() => router.refresh());
228
+ } catch (_err_1) {
229
+ toast.error(t('error:unknown'));
230
+ } finally {
231
+ setIsScheduling(false);
232
+ }
233
+ }, [canCloseBranch, closeBranch, dismiss, isScheduling, router, scheduledFor, serverFunction, startRouteTransition, t, target]);
234
+ const handleCancel = useCallback(async deleteID => {
235
+ setIsScheduling(true);
236
+ try {
237
+ await serverFunction({
238
+ name: 'schedule-merge',
239
+ args: {
240
+ deleteID
241
+ }
242
+ });
243
+ await loadUpcoming();
244
+ toast.success(t('general:deletedSuccessfully'));
245
+ } catch (_err_2) {
246
+ toast.error(t('error:unknown'));
247
+ } finally {
248
+ setIsScheduling(false);
249
+ }
250
+ }, [loadUpcoming, serverFunction, t]);
251
+ const handleMergeNow = useCallback(async () => {
252
+ if (!target || isMerging) {
253
+ return;
254
+ }
255
+ setIsMerging(true);
256
+ setProgress(null);
257
+ try {
258
+ const response_1 = await fetch(formatAdminURL({
259
+ apiRoute: api,
260
+ path: `/${branchesCollectionSlug}/${target.branchID}/merge`,
261
+ serverURL
262
+ }), {
263
+ body: JSON.stringify({
264
+ changes: target.selectedChangeIDs,
265
+ // Ignored server-side when changes are left behind, but not sent at all
266
+ // when a subset is selected: the checkbox is not offered then either.
267
+ closeBranch: canCloseBranch && closeBranch,
268
+ stream: true
269
+ }),
270
+ credentials: 'include',
271
+ headers: {
272
+ 'Content-Type': 'application/json'
273
+ },
274
+ method: 'POST'
275
+ });
276
+ if (!response_1.ok || !response_1.body) {
277
+ // A non-streaming failure still returns JSON — a 403 carrying `blocked`,
278
+ // most usefully — so read it as the result rather than a bare error.
279
+ const json_1 = await response_1.json().catch(() => null);
280
+ if (json_1?.blocked?.length) {
281
+ reportResult(json_1);
282
+ } else {
283
+ toast.error(t('error:unknown'));
284
+ }
285
+ return;
286
+ }
287
+ const result_1 = await readMergeStream({
288
+ body: response_1.body,
289
+ onProgress: setProgress
290
+ });
291
+ if (!result_1) {
292
+ // The stream ended without a terminal event, which means the connection
293
+ // dropped mid-merge. The transaction rolls back with it, so nothing was
294
+ // applied — but say so rather than implying success.
295
+ toast.error(t('branching:mergeInterrupted'));
296
+ return;
297
+ }
298
+ if (result_1.type === 'error') {
299
+ toast.error(result_1.message);
300
+ return;
301
+ }
302
+ reportResult(result_1.result);
303
+ // Held open rather than dismissed. A small branch merges faster than the
304
+ // progress bar can be read, so closing on success would make the whole
305
+ // operation a flicker — the reader is left guessing whether it ran. The
306
+ // completed state is the receipt, and it is dismissed deliberately.
307
+ setOutcome(result_1.result);
308
+ // The changed-documents list and the branch's status both moved. Refreshed
309
+ // behind the modal so the page is already correct when it is dismissed.
310
+ startRouteTransition(() => router.refresh());
311
+ } catch (_err_3) {
312
+ toast.error(t('error:unknown'));
313
+ } finally {
314
+ setIsMerging(false);
315
+ }
316
+ }, [api, canCloseBranch, closeBranch, isMerging, reportResult, router, serverURL, startRouteTransition, t, target]);
317
+ if (!target) {
318
+ return null;
319
+ }
320
+ const modeOptions = [{
321
+ label: t('branching:mergeNow'),
322
+ value: 'now'
323
+ }, {
324
+ label: t('branching:scheduleMerge'),
325
+ value: 'schedule'
326
+ }];
327
+ const total = target.totalChanges ?? countedChanges ?? undefined;
328
+ const selectedCount = target.selectedChangeIDs?.length;
329
+ const summaryChanges = target.changes ?? sampledChanges;
330
+ // Three cases, in order of how much is known: a subset chosen, the whole branch
331
+ // with a count, and the whole branch before the count lands.
332
+ const summary = selectedCount !== undefined && total !== undefined ? t('branching:mergeSelectedOfTotal', {
333
+ selected: selectedCount,
334
+ total
335
+ }) : total !== undefined ? t('branching:mergeAllCount', {
336
+ count: total
337
+ }) : t('branching:mergeAllChanges');
338
+ const mergedCount = outcome?.merged.length ?? 0;
339
+ const isDone = Boolean(outcome);
340
+ // Completed bar rather than a residual fraction: the last progress event fires
341
+ // *before* the last document is applied, so it never reaches 100% on its own.
342
+ const percentComplete = isDone ? 100 : progress?.total ? Math.round(progress.current / progress.total * 100) : 0;
343
+ return /*#__PURE__*/_jsxs(DialogModal, {
344
+ className: baseClass,
345
+ closeOnBlur: !isMerging,
346
+ slug: mergeBranchModalSlug,
347
+ children: [/*#__PURE__*/_jsx(DialogHeader, {
348
+ showClose: !isMerging,
349
+ title: isDone ? t('branching:mergeComplete') : t('branching:mergeBranchInto', {
350
+ branch: target.branchName,
351
+ target: MAIN_BRANCH
352
+ })
353
+ }), /*#__PURE__*/_jsxs(DialogBody, {
354
+ children: [!isDone && /*#__PURE__*/_jsxs(React.Fragment, {
355
+ children: [/*#__PURE__*/_jsxs("div", {
356
+ className: `${baseClass}__intro`,
357
+ children: [/*#__PURE__*/_jsx("p", {
358
+ className: `${baseClass}__summary`,
359
+ children: summary
360
+ }), summaryChanges && /*#__PURE__*/_jsx(ChangeSummary, {
361
+ changes: summaryChanges,
362
+ showOperations: true
363
+ }), target.reviewURL && !isMerging && /*#__PURE__*/_jsx(Link, {
364
+ className: `${baseClass}__review`,
365
+ href: target.reviewURL,
366
+ onClick: dismiss,
367
+ children: t('branching:mergeOnlySelected')
368
+ })]
369
+ }), /*#__PURE__*/_jsx("div", {
370
+ className: `${baseClass}__modes`,
371
+ children: modeOptions.map(option => /*#__PURE__*/_jsx(Radio, {
372
+ id: `merge-mode-${option.value}`,
373
+ isSelected: mode === option.value,
374
+ onChange: () => setMode(option.value),
375
+ option: option,
376
+ path: "merge-mode",
377
+ readOnly: isMerging
378
+ }, option.value))
379
+ }), mode === 'schedule' && /*#__PURE__*/_jsxs("div", {
380
+ className: `${baseClass}__schedule`,
381
+ children: [/*#__PURE__*/_jsxs("div", {
382
+ className: `${baseClass}__schedule-field`,
383
+ children: [/*#__PURE__*/_jsx(FieldLabel, {
384
+ label: t('general:time'),
385
+ path: "merge-scheduled-for",
386
+ required: true
387
+ }), /*#__PURE__*/_jsx(DatePickerField, {
388
+ id: "merge-scheduled-for",
389
+ minDate: new Date(),
390
+ onChange: value => setScheduledFor(value ?? undefined),
391
+ pickerAppearance: "dayAndTime",
392
+ readOnly: isScheduling,
393
+ value: scheduledFor
394
+ })]
395
+ }), /*#__PURE__*/_jsx("p", {
396
+ className: `${baseClass}__schedule-help`,
397
+ children: t('branching:scheduleMergeHelp')
398
+ }), upcoming.length > 0 && /*#__PURE__*/_jsxs("div", {
399
+ className: `${baseClass}__upcoming`,
400
+ children: [/*#__PURE__*/_jsx("h4", {
401
+ className: `${baseClass}__upcoming-title`,
402
+ children: t('branching:scheduledMerges')
403
+ }), /*#__PURE__*/_jsx("ul", {
404
+ className: `${baseClass}__upcoming-list`,
405
+ children: upcoming.map(event => /*#__PURE__*/_jsxs("li", {
406
+ className: `${baseClass}__upcoming-row`,
407
+ children: [/*#__PURE__*/_jsx("span", {
408
+ children: new Date(event.waitUntil).toLocaleString(undefined, {
409
+ dateStyle: 'medium',
410
+ timeStyle: 'short'
411
+ })
412
+ }), /*#__PURE__*/_jsx(Button, {
413
+ buttonStyle: "ghost",
414
+ className: `${baseClass}__upcoming-cancel`,
415
+ disabled: isScheduling,
416
+ onClick: () => void handleCancel(event.id),
417
+ children: t('general:cancel')
418
+ })]
419
+ }, String(event.id)))
420
+ })]
421
+ })]
422
+ }), canCloseBranch && /*#__PURE__*/_jsxs("div", {
423
+ className: `${baseClass}__close-branch`,
424
+ children: [/*#__PURE__*/_jsx(CheckboxInput, {
425
+ checked: closeBranch,
426
+ id: "merge-close-branch",
427
+ label: t('branching:closeBranchAfterMerge'),
428
+ onToggle: () => setCloseBranch(prev => !prev),
429
+ readOnly: isMerging
430
+ }), /*#__PURE__*/_jsx("p", {
431
+ className: `${baseClass}__close-branch-help`,
432
+ children: closeBranch ? t('branching:closeBranchHelpOn') : t('branching:closeBranchHelpOff')
433
+ })]
434
+ })]
435
+ }), (isMerging || isDone) && /*#__PURE__*/_jsxs("div", {
436
+ className: `${baseClass}__progress`,
437
+ children: [/*#__PURE__*/_jsx("div", {
438
+ className: `${baseClass}__progress-bar`,
439
+ children: /*#__PURE__*/_jsx("div", {
440
+ className: [`${baseClass}__progress-fill`, isDone && `${baseClass}__progress-fill--complete`].filter(Boolean).join(' '),
441
+ style: {
442
+ width: `${percentComplete}%`
443
+ }
444
+ })
445
+ }), /*#__PURE__*/_jsx("span", {
446
+ className: `${baseClass}__progress-label`,
447
+ children: isDone ? t('branching:mergedOfTotal', {
448
+ current: mergedCount,
449
+ total: mergedCount
450
+ }) : progress ? t('branching:mergingProgress', {
451
+ current: progress.current,
452
+ total: progress.total
453
+ }) : t('branching:mergeStarting')
454
+ })]
455
+ }), outcome && outcome.blocked.length > 0 && /*#__PURE__*/_jsx("ul", {
456
+ className: `${baseClass}__blocked`,
457
+ children: outcome.blocked.map(each => /*#__PURE__*/_jsx("li", {
458
+ children: each.message
459
+ }, String(each.changeID)))
460
+ })]
461
+ }), /*#__PURE__*/_jsx(DialogFooter, {
462
+ children: isDone ? /*#__PURE__*/_jsx(Button, {
463
+ buttonStyle: "primary",
464
+ onClick: dismiss,
465
+ size: "medium",
466
+ children: t('general:close')
467
+ }) : /*#__PURE__*/_jsxs(React.Fragment, {
468
+ children: [/*#__PURE__*/_jsx(Button, {
469
+ buttonStyle: "secondary",
470
+ disabled: isMerging,
471
+ onClick: dismiss,
472
+ size: "medium",
473
+ children: t('general:cancel')
474
+ }), /*#__PURE__*/_jsx(Button, {
475
+ buttonStyle: "primary",
476
+ disabled: isMerging || isScheduling ||
477
+ // A schedule with no date is not a decision yet.
478
+ mode === 'schedule' && !scheduledFor,
479
+ onClick: () => void (mode === 'schedule' ? handleSchedule() : handleMergeNow()),
480
+ size: "medium",
481
+ children: mode === 'schedule' ? isScheduling ? t('branching:scheduling') : t('branching:scheduleMerge') : isMerging ? t('branching:merging') : t('branching:merge')
482
+ })]
483
+ })
484
+ })]
485
+ });
486
+ };
487
+ /**
488
+ * Reads the NDJSON merge stream, returning the terminal event.
489
+ *
490
+ * Returns null when the stream ends without one, which is how a dropped
491
+ * connection presents — indistinguishable from the server never finishing, and
492
+ * treated the same way, because in both cases the transaction did not commit.
493
+ */
494
+ const readMergeStream = async ({
495
+ body,
496
+ onProgress
497
+ }) => {
498
+ const reader = body.getReader();
499
+ const decoder = new TextDecoder();
500
+ let buffered = '';
501
+ const handleLine = line => {
502
+ const trimmed = line.trim();
503
+ if (!trimmed) {
504
+ return null;
505
+ }
506
+ let event;
507
+ try {
508
+ event = JSON.parse(trimmed);
509
+ } catch (_err) {
510
+ return null;
511
+ }
512
+ if (event.type === 'progress') {
513
+ onProgress({
514
+ current: Number(event.current),
515
+ total: Number(event.total)
516
+ });
517
+ return null;
518
+ }
519
+ return event;
520
+ };
521
+ while (true) {
522
+ const {
523
+ done,
524
+ value
525
+ } = await reader.read();
526
+ if (done) {
527
+ break;
528
+ }
529
+ buffered += decoder.decode(value, {
530
+ stream: true
531
+ });
532
+ // A chunk can split a line anywhere, so only whole lines are parsed and the
533
+ // remainder is carried forward.
534
+ const lines = buffered.split('\n');
535
+ buffered = lines.pop() ?? '';
536
+ for (const line of lines) {
537
+ const terminal = handleLine(line);
538
+ if (terminal) {
539
+ return terminal;
540
+ }
541
+ }
542
+ }
543
+ return handleLine(buffered);
544
+ };
545
+ //# sourceMappingURL=index.js.map