@payloadcms/ui 4.0.0-internal.c3ac604 → 4.0.0-internal.cc18726

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 (383) hide show
  1. package/dist/elements/AppHeader/index.css +1 -0
  2. package/dist/elements/AppHeader/index.js +1 -1
  3. package/dist/elements/AppHeader/index.js.map +1 -1
  4. package/dist/elements/ArrayAction/index.d.ts +1 -0
  5. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  6. package/dist/elements/ArrayAction/index.js +45 -32
  7. package/dist/elements/ArrayAction/index.js.map +1 -1
  8. package/dist/elements/Autosave/index.d.ts.map +1 -1
  9. package/dist/elements/Autosave/index.js +2 -3
  10. package/dist/elements/Autosave/index.js.map +1 -1
  11. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  12. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  13. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  14. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  15. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  16. package/dist/elements/BulkUpload/FormsManager/index.js +2 -3
  17. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  18. package/dist/elements/Button/index.css +2 -2
  19. package/dist/elements/Button/index.d.ts.map +1 -1
  20. package/dist/elements/Button/index.js +2 -0
  21. package/dist/elements/Button/index.js.map +1 -1
  22. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +10 -0
  23. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  24. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +65 -3
  25. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  26. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
  27. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
  28. package/dist/elements/CopyLocaleData/index.d.ts.map +1 -1
  29. package/dist/elements/CopyLocaleData/index.js +8 -9
  30. package/dist/elements/CopyLocaleData/index.js.map +1 -1
  31. package/dist/elements/CopyToClipboard/index.d.ts +1 -0
  32. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  33. package/dist/elements/CopyToClipboard/index.js +10 -8
  34. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  35. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  36. package/dist/elements/DeleteMany/index.js +2 -3
  37. package/dist/elements/DeleteMany/index.js.map +1 -1
  38. package/dist/elements/Drawer/index.css +10 -4
  39. package/dist/elements/Dropzone/index.css +10 -4
  40. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +3 -2
  41. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  42. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  43. package/dist/elements/DuplicateDocument/index.js +2 -3
  44. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  45. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  46. package/dist/elements/EditMany/DrawerContent.js +2 -3
  47. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  48. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  49. package/dist/elements/FileManager/FileToolbar/index.js +3 -0
  50. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  51. package/dist/elements/FileManager/index.css +0 -30
  52. package/dist/elements/FileManager/index.d.ts.map +1 -1
  53. package/dist/elements/FileManager/index.js +379 -287
  54. package/dist/elements/FileManager/index.js.map +1 -1
  55. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  56. package/dist/elements/Hierarchy/MoveMany/index.js +2 -3
  57. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  58. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  59. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +2 -3
  60. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  61. package/dist/elements/IDLabel/index.css +6 -0
  62. package/dist/elements/IDLabel/index.d.ts +1 -1
  63. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  64. package/dist/elements/IDLabel/index.js +16 -21
  65. package/dist/elements/IDLabel/index.js.map +1 -1
  66. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +1 -7
  67. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  68. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +26 -32
  69. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  70. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  71. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -3
  72. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  73. package/dist/elements/LivePreview/Window/index.js +1 -1
  74. package/dist/elements/LivePreview/Window/index.js.map +1 -1
  75. package/dist/elements/Localizer/index.js +1 -1
  76. package/dist/elements/Localizer/index.js.map +1 -1
  77. package/dist/elements/Popup/PopupButtonList/index.css +1 -1
  78. package/dist/elements/Popup/index.js +1 -1
  79. package/dist/elements/Popup/index.js.map +1 -1
  80. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  81. package/dist/elements/PublishButton/ScheduleDrawer/index.js +9 -31
  82. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  83. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts +1 -1
  84. package/dist/elements/PublishButton/ScheduleDrawer/types.d.ts.map +1 -1
  85. package/dist/elements/PublishButton/ScheduleDrawer/types.js.map +1 -1
  86. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  87. package/dist/elements/PublishButton/index.js +5 -6
  88. package/dist/elements/PublishButton/index.js.map +1 -1
  89. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  90. package/dist/elements/PublishMany/DrawerContent.js +2 -3
  91. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  92. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -3
  93. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  94. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  95. package/dist/elements/RelationshipTable/index.js +5 -2
  96. package/dist/elements/RelationshipTable/index.js.map +1 -1
  97. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  98. package/dist/elements/RestoreMany/index.js +2 -3
  99. package/dist/elements/RestoreMany/index.js.map +1 -1
  100. package/dist/elements/SaveDraftButton/index.d.ts.map +1 -1
  101. package/dist/elements/SaveDraftButton/index.js +2 -3
  102. package/dist/elements/SaveDraftButton/index.js.map +1 -1
  103. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  104. package/dist/elements/SortHeader/index.js +29 -26
  105. package/dist/elements/SortHeader/index.js.map +1 -1
  106. package/dist/elements/Status/index.d.ts.map +1 -1
  107. package/dist/elements/Status/index.js +2 -3
  108. package/dist/elements/Status/index.js.map +1 -1
  109. package/dist/elements/StepNav/index.css +64 -14
  110. package/dist/elements/StepNav/index.d.ts.map +1 -1
  111. package/dist/elements/StepNav/index.js +143 -69
  112. package/dist/elements/StepNav/index.js.map +1 -1
  113. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  114. package/dist/elements/Table/DefaultCell/index.js +3 -11
  115. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  116. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  117. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  118. package/dist/elements/Table/OrderableRow.js +17 -1
  119. package/dist/elements/Table/OrderableRow.js.map +1 -1
  120. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  121. package/dist/elements/Table/OrderableTable.js +20 -4
  122. package/dist/elements/Table/OrderableTable.js.map +1 -1
  123. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  124. package/dist/elements/Table/RelationshipProvider/index.js +2 -3
  125. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  126. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  127. package/dist/elements/UnpublishButton/index.js +3 -4
  128. package/dist/elements/UnpublishButton/index.js.map +1 -1
  129. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  130. package/dist/elements/UnpublishMany/DrawerContent.js +2 -3
  131. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  132. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  133. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  134. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  135. package/dist/elements/Upload/index.css +39 -32
  136. package/dist/elements/Upload/index.d.ts.map +1 -1
  137. package/dist/elements/Upload/index.js +37 -99
  138. package/dist/elements/Upload/index.js.map +1 -1
  139. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  140. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  141. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  142. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  143. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  144. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  145. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  146. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  147. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  148. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  149. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  150. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  151. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  152. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +1 -1
  153. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  154. package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
  155. package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
  156. package/dist/elements/WhereBuilder/conditionValue.js +32 -0
  157. package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
  158. package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
  159. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
  160. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  161. package/dist/elements/WhereBuilder/index.js +15 -4
  162. package/dist/elements/WhereBuilder/index.js.map +1 -1
  163. package/dist/exports/client/index.d.ts +2 -1
  164. package/dist/exports/client/index.d.ts.map +1 -1
  165. package/dist/exports/client/index.js +1 -1
  166. package/dist/exports/client/index.js.map +3 -3
  167. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  168. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  169. package/dist/fields/Array/ArrayRow.js +2 -0
  170. package/dist/fields/Array/ArrayRow.js.map +1 -1
  171. package/dist/fields/Array/index.d.ts.map +1 -1
  172. package/dist/fields/Array/index.js +40 -13
  173. package/dist/fields/Array/index.js.map +1 -1
  174. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  175. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  176. package/dist/fields/Blocks/BlockRow.js +2 -0
  177. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  178. package/dist/fields/Blocks/RowActions.d.ts +1 -0
  179. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  180. package/dist/fields/Blocks/RowActions.js +22 -19
  181. package/dist/fields/Blocks/RowActions.js.map +1 -1
  182. package/dist/fields/Blocks/index.d.ts.map +1 -1
  183. package/dist/fields/Blocks/index.js +37 -10
  184. package/dist/fields/Blocks/index.js.map +1 -1
  185. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  186. package/dist/fields/FieldLabel/index.js +4 -5
  187. package/dist/fields/FieldLabel/index.js.map +1 -1
  188. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  189. package/dist/fields/Relationship/Input.js +2 -3
  190. package/dist/fields/Relationship/Input.js.map +1 -1
  191. package/dist/fields/Slug/index.d.ts.map +1 -1
  192. package/dist/fields/Slug/index.js +2 -3
  193. package/dist/fields/Slug/index.js.map +1 -1
  194. package/dist/fields/Upload/Input.d.ts.map +1 -1
  195. package/dist/fields/Upload/Input.js +46 -19
  196. package/dist/fields/Upload/Input.js.map +1 -1
  197. package/dist/fields/Upload/Input.spec.js +242 -0
  198. package/dist/fields/Upload/Input.spec.js.map +1 -0
  199. package/dist/fields/shared/index.d.ts +1 -1
  200. package/dist/fields/shared/index.d.ts.map +1 -1
  201. package/dist/fields/shared/index.js.map +1 -1
  202. package/dist/forms/Form/index.d.ts.map +1 -1
  203. package/dist/forms/Form/index.js +6 -4
  204. package/dist/forms/Form/index.js.map +1 -1
  205. package/dist/forms/NullifyField/index.d.ts.map +1 -1
  206. package/dist/forms/NullifyField/index.js +2 -3
  207. package/dist/forms/NullifyField/index.js.map +1 -1
  208. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  209. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
  210. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  211. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  212. package/dist/hooks/usePayloadAPI.js +2 -3
  213. package/dist/hooks/usePayloadAPI.js.map +1 -1
  214. package/dist/icons/Edit/index.d.ts +0 -1
  215. package/dist/icons/Edit/index.d.ts.map +1 -1
  216. package/dist/icons/Edit/index.js +4 -4
  217. package/dist/icons/Edit/index.js.map +1 -1
  218. package/dist/providers/Actions/index.d.ts +1 -0
  219. package/dist/providers/Actions/index.d.ts.map +1 -1
  220. package/dist/providers/Actions/index.js +43 -11
  221. package/dist/providers/Actions/index.js.map +1 -1
  222. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  223. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  224. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  225. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  226. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  227. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  228. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  229. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  230. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  231. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  232. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  233. package/dist/providers/Auth/authSessionRequests.js +119 -0
  234. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  235. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  236. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  237. package/dist/providers/Auth/index.d.ts +2 -56
  238. package/dist/providers/Auth/index.d.ts.map +1 -1
  239. package/dist/providers/Auth/index.js +283 -135
  240. package/dist/providers/Auth/index.js.map +1 -1
  241. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  242. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  243. package/dist/providers/Auth/sessionActivity.js +49 -0
  244. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  245. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  246. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  247. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  248. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  249. package/dist/providers/Auth/sessionTiming.js +18 -0
  250. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  251. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  252. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  253. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  254. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  255. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  256. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  257. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  258. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  259. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  260. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  261. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  262. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  263. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  264. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  265. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  266. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  267. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  268. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  269. package/dist/providers/Auth/types.d.ts +65 -0
  270. package/dist/providers/Auth/types.d.ts.map +1 -0
  271. package/dist/providers/Auth/types.js +2 -0
  272. package/dist/providers/Auth/types.js.map +1 -0
  273. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  274. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  275. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  276. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  277. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  278. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  279. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  280. package/dist/providers/DocumentInfo/index.js +2 -3
  281. package/dist/providers/DocumentInfo/index.js.map +1 -1
  282. package/dist/providers/FormErrorHandler/index.d.ts +5 -1
  283. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -1
  284. package/dist/providers/FormErrorHandler/index.js.map +1 -1
  285. package/dist/providers/Locale/index.d.ts +1 -5
  286. package/dist/providers/Locale/index.d.ts.map +1 -1
  287. package/dist/providers/Locale/index.js +64 -137
  288. package/dist/providers/Locale/index.js.map +1 -1
  289. package/dist/providers/Root/index.js +4 -4
  290. package/dist/providers/Root/index.js.map +1 -1
  291. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  292. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  293. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  294. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  295. package/dist/providers/RouteTransition/index.d.ts +2 -0
  296. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  297. package/dist/providers/RouteTransition/index.js +42 -14
  298. package/dist/providers/RouteTransition/index.js.map +1 -1
  299. package/dist/providers/Selection/index.d.ts.map +1 -1
  300. package/dist/providers/Selection/index.js +2 -3
  301. package/dist/providers/Selection/index.js.map +1 -1
  302. package/dist/providers/ServerFunctions/index.d.ts +5 -1
  303. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  304. package/dist/providers/ServerFunctions/index.js +15 -0
  305. package/dist/providers/ServerFunctions/index.js.map +1 -1
  306. package/dist/styles.css +1 -1
  307. package/dist/templates/Default/index.d.ts +1 -0
  308. package/dist/templates/Default/index.d.ts.map +1 -1
  309. package/dist/templates/Default/index.js +2 -0
  310. package/dist/templates/Default/index.js.map +1 -1
  311. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  312. package/dist/utilities/formatMetadata.js +0 -5
  313. package/dist/utilities/formatMetadata.js.map +1 -1
  314. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  315. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  316. package/dist/utilities/getFilesFromClipboard.js +49 -0
  317. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  318. package/dist/utilities/getHasScheduledPublish.d.ts +2 -3
  319. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -1
  320. package/dist/utilities/getHasScheduledPublish.js +2 -5
  321. package/dist/utilities/getHasScheduledPublish.js.map +1 -1
  322. package/dist/utilities/schedulePublishHandler.d.ts +8 -1
  323. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  324. package/dist/utilities/schedulePublishHandler.js +68 -4
  325. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  326. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  327. package/dist/utilities/serverFunctionRegistry.js +2 -1
  328. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  329. package/dist/utilities/slugify.d.ts.map +1 -1
  330. package/dist/utilities/slugify.js +3 -0
  331. package/dist/utilities/slugify.js.map +1 -1
  332. package/dist/views/API/index.client.d.ts.map +1 -1
  333. package/dist/views/API/index.client.js +2 -3
  334. package/dist/views/API/index.client.js.map +1 -1
  335. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  336. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +3 -2
  337. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  338. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  339. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  340. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  341. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  342. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +104 -66
  343. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  344. package/dist/views/Dashboard/Default/ModularDashboard/index.css +33 -140
  345. package/dist/views/Document/index.d.ts.map +1 -1
  346. package/dist/views/Document/index.js +1 -2
  347. package/dist/views/Document/index.js.map +1 -1
  348. package/dist/views/Edit/SetDocumentTitle/index.d.ts.map +1 -1
  349. package/dist/views/Edit/SetDocumentTitle/index.js +4 -1
  350. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  351. package/dist/views/Edit/index.d.ts.map +1 -1
  352. package/dist/views/Edit/index.js +3 -2
  353. package/dist/views/Edit/index.js.map +1 -1
  354. package/dist/views/HierarchyList/index.css +1 -1
  355. package/dist/views/List/ListHeader/index.d.ts +1 -10
  356. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  357. package/dist/views/List/ListHeader/index.js +1 -3
  358. package/dist/views/List/ListHeader/index.js.map +1 -1
  359. package/dist/views/List/index.client.d.ts.map +1 -1
  360. package/dist/views/List/index.client.js +0 -14
  361. package/dist/views/List/index.client.js.map +1 -1
  362. package/dist/views/List/index.css +6 -1
  363. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  364. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  365. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  366. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  367. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  368. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  369. package/dist/views/Root/index.d.ts.map +1 -1
  370. package/dist/views/Root/index.js +1 -0
  371. package/dist/views/Root/index.js.map +1 -1
  372. package/dist/views/Version/Default/SetStepNav.d.ts.map +1 -1
  373. package/dist/views/Version/Default/SetStepNav.js +10 -13
  374. package/dist/views/Version/Default/SetStepNav.js.map +1 -1
  375. package/dist/views/Version/Default/index.d.ts.map +1 -1
  376. package/dist/views/Version/Default/index.js +12 -13
  377. package/dist/views/Version/Default/index.js.map +1 -1
  378. package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
  379. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.d.ts.map +1 -1
  380. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js +2 -3
  381. package/dist/views/Versions/VersionPillLabel/VersionPillLabel.js.map +1 -1
  382. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  383. package/package.json +6 -5
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","React","useMemo","useState","Popup","PopupList","ChevronIcon","XIcon","useTranslation","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WidgetEditControl","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","activeDragId","setActiveDragId","sensors","t1","t2","Symbol","for","t3","event","over","droppableId","id","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","widget_0","t4","event_0","_jsxs","children","_jsx","autoScroll","enabled","threshold","x","y","collisionDetection","onDragCancel","onDragEnd","onDragStart","className","style","display","flexWrap","length","map","widget_1","_index","Fragment","DraggableItem","disabled","width","inert","component","onPointerDown","_temp","onSave","data","widgetData","widgetID","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onResize","onClick","type","dropAnimation","duration","modifiers","draggedWidget","find","widget_2","e","stopPropagation","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","filter","option","isDisabled","button","buttonType","render","close","ButtonGroup","isSelected","Button","toFixed","size","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","DroppableItem","ref","height","isOver","t5","t6","t7","t8","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Modifier } from '@dnd-kit/core'\nimport type { ClientWidget, WidgetWidth } from 'payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport React, { useMemo, useState } from 'react'\n\nimport { Popup } from '../../../../elements/Popup/index.js'\nimport * as PopupList from '../../../../elements/Popup/PopupButtonList/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { XIcon } from '../../../../icons/X/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\n/**\n * Custom modifier that only applies snapCenterToCursor for pointer events.\n * During keyboard navigation, we handle positioning ourselves via the coordinate getter.\n */\nconst snapCenterToCursorOnlyForPointer: Modifier = (args) => {\n const { activatorEvent } = args\n\n // Only apply snap for pointer events (mouse/touch), not keyboard\n // Check activatorEvent.type since KeyboardEvent may not exist on server\n if (activatorEvent && 'key' in activatorEvent) {\n return args.transform\n }\n\n return snapCenterToCursor(args)\n}\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\n id: string\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n width: WidgetWidth\n}\n\nexport type WidgetInstanceClient = {\n component: React.ReactNode\n item: WidgetItem\n}\n\nexport type DropTargetWidget = {\n position: 'after' | 'before'\n widget: WidgetInstanceClient\n} | null\n\n/* eslint-disable perfectionist/sort-objects */\nconst WIDTH_TO_PERCENTAGE = {\n 'x-small': 25,\n small: (1 / 3) * 100,\n medium: 50,\n large: (2 / 3) * 100,\n 'x-large': 75,\n full: 100,\n} as const\n\nexport function ModularDashboardClient({\n clientLayout: initialLayout,\n widgets,\n}: {\n clientLayout: WidgetInstanceClient[]\n widgets: ClientWidget[]\n}) {\n const { t } = useTranslation()\n const {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const sensors = useDashboardSensors()\n\n return (\n <div>\n <DndContext\n autoScroll={{\n enabled: true,\n threshold: {\n x: 0, // No horizontal scroll\n y: 0.2, // Allow vertical scroll at 20% from edge\n },\n }}\n collisionDetection={closestInXAxis}\n // https://github.com/clauderic/dnd-kit/issues/926#issuecomment-1640115665\n id=\"dashboard-dnd-context\"\n onDragCancel={() => {\n setActiveDragId(null)\n }}\n onDragEnd={(event) => {\n if (!event.over) {\n setActiveDragId(null)\n return\n }\n const droppableId = event.over.id as string\n const i = droppableId.lastIndexOf('-')\n const slug = droppableId.slice(0, i)\n const position = droppableId.slice(i + 1)\n\n if (slug === event.active.id) {\n return\n }\n\n const moveFromIndex = currentLayout?.findIndex(\n (widget) => widget.item.id === event.active.id,\n )\n let moveToIndex = currentLayout?.findIndex((widget) => widget.item.id === slug)\n if (moveFromIndex < moveToIndex) {\n moveToIndex--\n }\n if (position === 'after') {\n moveToIndex++\n }\n moveWidget({ moveFromIndex, moveToIndex })\n setActiveDragId(null)\n }}\n onDragStart={(event) => {\n setActiveDragId(event.active.id as string)\n }}\n sensors={sensors}\n >\n <div\n className={`modular-dashboard ${isEditing ? 'editing' : ''}`}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n // Don't add gap here! We need to use padding on the widgets instead\n // to make sure all rows have the same width always.\n }}\n >\n {currentLayout?.length === 0 && (\n <div className=\"modular-dashboard__empty\">\n <p>{t('dashboard:noItems')}</p>\n </div>\n )}\n {currentLayout?.map((widget, _index) => (\n <React.Fragment key={widget.item.id}>\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n }}\n width={widget.item.width}\n >\n <div className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}>\n <div aria-hidden={isEditing} className=\"widget-content\" inert={isEditing}>\n {widget.component}\n </div>\n {isEditing && (\n <div\n className=\"widget-wrapper__controls\"\n onPointerDown={(e) => e.stopPropagation()}\n >\n <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\n />\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n />\n <button\n className=\"widget-wrapper__delete-btn\"\n onClick={() => deleteWidget(widget.item.id)}\n type=\"button\"\n >\n <span className=\"sr-only\">\n {t('dashboard:deleteWidget', { id: widget.item.id })}\n </span>\n <XIcon />\n </button>\n </div>\n )}\n </div>\n </DraggableItem>\n </React.Fragment>\n ))}\n <DragOverlay\n className=\"drag-overlay\"\n dropAnimation={{\n duration: 100,\n }}\n // Uses custom modifier that only applies for pointer, not keyboard navigation.\n modifiers={[snapCenterToCursorOnlyForPointer]}\n >\n {activeDragId\n ? (() => {\n const draggedWidget = currentLayout?.find(\n (widget) => widget.item.id === activeDragId,\n )\n return draggedWidget ? (\n <div\n style={{\n transform: 'scale(0.25)',\n }}\n >\n <div\n className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}\n >\n <div className=\"widget-content\">{draggedWidget.component}</div>\n </div>\n </div>\n ) : null\n })()\n : null}\n </DragOverlay>\n </div>\n </DndContext>\n <DashboardStepNav\n addWidget={addWidget}\n cancel={cancel}\n isEditing={isEditing}\n resetLayout={resetLayout}\n saveLayout={saveLayout}\n setIsEditing={setIsEditing}\n widgets={widgets}\n />\n {cancelModal}\n </div>\n )\n}\n\nfunction WidgetWidthDropdown({\n currentWidth,\n maxWidth,\n minWidth,\n onResize,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onResize: (width: WidgetWidth) => void\n}) {\n // Filter options based on minWidth and maxWidth\n const validOptions = useMemo(() => {\n const minPercentage = WIDTH_TO_PERCENTAGE[minWidth]\n const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth]\n\n return Object.entries(WIDTH_TO_PERCENTAGE)\n .map(([key, value]) => ({\n width: key as WidgetWidth,\n percentage: value,\n }))\n .filter((option) => option.percentage >= minPercentage && option.percentage <= maxPercentage)\n }, [minWidth, maxWidth])\n\n const isDisabled = validOptions.length <= 1\n\n if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n button={\n <button\n className=\"widget-wrapper__size-btn\"\n onPointerDown={(e) => e.stopPropagation()}\n type=\"button\"\n >\n <span className=\"widget-wrapper__size-btn-text\">{currentWidth}</span>\n <ChevronIcon className=\"widget-wrapper__size-btn-icon\" />\n </button>\n }\n buttonType=\"custom\"\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {validOptions.map((option) => {\n const isSelected = option.width === currentWidth\n return (\n <PopupList.Button\n active={isSelected}\n key={option.width}\n onClick={() => {\n onResize(option.width)\n close()\n }}\n >\n <span className=\"widget-wrapper__size-btn-label\">{option.width}</span>\n <span className=\"widget-wrapper__size-btn-percentage\">\n {option.percentage.toFixed(0)}%\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: React.ReactNode\n disabled?: boolean\n id: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { attributes, isDragging, listeners, setNodeRef } = useDraggable({\n id: props.id,\n disabled: props.disabled,\n })\n\n const mergedStyles: React.CSSProperties = {\n ...props.style,\n opacity: isDragging ? 0.3 : 1,\n position: 'relative',\n }\n\n // Only apply draggable attributes and listeners when not disabled\n // to prevent disabling interactive elements inside the widget\n const draggableProps = props.disabled ? {} : { ...listeners, ...attributes }\n\n return (\n <div className=\"widget\" data-slug={props.id} data-width={props.width} style={mergedStyles}>\n <DroppableItem id={props.id} position=\"before\" />\n <div\n className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n {...draggableProps}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n {props.children}\n </div>\n <DroppableItem id={props.id} position=\"after\" />\n </div>\n )\n}\n\nfunction DroppableItem({ id, position }: { id: string; position: 'after' | 'before' }) {\n const { setNodeRef, isOver } = useDroppable({ id: `${id}-${position}`, data: { position } })\n\n return (\n <div\n className=\"droppable-widget\"\n data-testid={`${id}-${position}`}\n ref={setNodeRef}\n style={{\n position: 'absolute',\n left: position === 'before' ? -2 : 'auto',\n right: position === 'after' ? -2 : 'auto',\n top: 0,\n bottom: 0,\n borderRadius: '1000px',\n width: '4px',\n backgroundColor: isOver ? 'var(--color-bg-success)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["c","_c","DndContext","DragOverlay","useDraggable","useDroppable","snapCenterToCursor","React","useEffect","useMemo","useState","Button","Popup","PopupList","ChevronIcon","useTranslation","DashboardStepNav","useDashboardLayout","closestInXAxis","useDashboardSensors","WidgetEditControl","snapCenterToCursorOnlyForPointer","args","activatorEvent","transform","WIDTH_TO_PERCENTAGE","small","medium","large","full","ModularDashboardClient","t0","$","clientLayout","initialLayout","widgets","t","addWidget","cancel","cancelModal","currentLayout","deleteWidget","isEditing","moveWidget","resetLayout","resizeWidget","saveLayout","setIsEditing","updateWidgetData","activeDragId","setActiveDragId","activeControlsWidgetID","setActiveControlsWidgetID","sensors","t1","t2","t3","t4","Symbol","for","t5","event","over","droppableId","id","i","lastIndexOf","slug","slice","position","active","moveFromIndex","findIndex","widget","item","moveToIndex","widget_0","t6","event_0","_jsxs","children","_jsx","autoScroll","enabled","threshold","x","y","collisionDetection","onDragCancel","onDragEnd","onDragStart","className","style","display","flexWrap","length","map","widget_1","_index","Fragment","DraggableItem","disabled","width","filter","Boolean","join","inert","component","onPointerDown","_temp","onSave","data","widgetData","widgetID","WidgetWidthDropdown","currentWidth","maxWidth","minWidth","onOpenChange","isOpen","onResize","buttonStyle","icon","margin","onClick","round","dropAnimation","duration","modifiers","draggedWidget","find","widget_2","e","stopPropagation","validOptions","minPercentage","maxPercentage","Object","entries","key","value","percentage","option","isDisabled","onToggleClose","onToggleOpen","render","close","ButtonGroup","isSelected","toFixed","renderButton","_active","onKeyDown","ariaProps","extraButtonProps","size","selected","verticalAlign","props","attributes","isDragging","listeners","setNodeRef","mergedStyles","opacity","draggableProps","DroppableItem","ref","height","isOver","t7","t8","left","right","top","bottom","borderRadius","backgroundColor","marginBottom","marginTop","pointerEvents","zIndex"],"sources":["../../../../../src/views/Dashboard/Default/ModularDashboard/index.client.tsx"],"sourcesContent":["'use client'\n\nimport type { Modifier } from '@dnd-kit/core'\nimport type { ClientWidget, WidgetWidth } from 'payload'\n\nimport { DndContext, DragOverlay, useDraggable, useDroppable } from '@dnd-kit/core'\nimport { snapCenterToCursor } from '@dnd-kit/modifiers'\nimport React, { useEffect, useMemo, useState } from 'react'\n\nimport { Button } from '../../../../elements/Button/index.js'\nimport { Popup } from '../../../../elements/Popup/index.js'\nimport * as PopupList from '../../../../elements/Popup/PopupButtonList/index.js'\nimport { ChevronIcon } from '../../../../icons/Chevron/index.js'\nimport { useTranslation } from '../../../../providers/Translation/index.js'\nimport { DashboardStepNav } from './DashboardStepNav.js'\nimport { useDashboardLayout } from './useDashboardLayout.js'\nimport { closestInXAxis } from './utils/collisionDetection.js'\nimport { useDashboardSensors } from './utils/sensors.js'\nimport { WidgetEditControl } from './WidgetEditControl.js'\n\n/**\n * Custom modifier that only applies snapCenterToCursor for pointer events.\n * During keyboard navigation, we handle positioning ourselves via the coordinate getter.\n */\nconst snapCenterToCursorOnlyForPointer: Modifier = (args) => {\n const { activatorEvent } = args\n\n // Only apply snap for pointer events (mouse/touch), not keyboard\n // Check activatorEvent.type since KeyboardEvent may not exist on server\n if (activatorEvent && 'key' in activatorEvent) {\n return args.transform\n }\n\n return snapCenterToCursor(args)\n}\n\nexport type WidgetItem = {\n data?: Record<string, unknown>\n id: string\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n width: WidgetWidth\n}\n\nexport type WidgetInstanceClient = {\n component: React.ReactNode\n item: WidgetItem\n}\n\nexport type DropTargetWidget = {\n position: 'after' | 'before'\n widget: WidgetInstanceClient\n} | null\n\n/* eslint-disable perfectionist/sort-objects */\nconst WIDTH_TO_PERCENTAGE = {\n 'x-small': 25,\n small: (1 / 3) * 100,\n medium: 50,\n large: (2 / 3) * 100,\n 'x-large': 75,\n full: 100,\n} as const\n\nexport function ModularDashboardClient({\n clientLayout: initialLayout,\n widgets,\n}: {\n clientLayout: WidgetInstanceClient[]\n widgets: ClientWidget[]\n}) {\n const { t } = useTranslation()\n const {\n addWidget,\n cancel,\n cancelModal,\n currentLayout,\n deleteWidget,\n isEditing,\n moveWidget,\n resetLayout,\n resizeWidget,\n saveLayout,\n setIsEditing,\n updateWidgetData,\n } = useDashboardLayout(initialLayout)\n\n const [activeDragId, setActiveDragId] = useState<null | string>(null)\n const [activeControlsWidgetID, setActiveControlsWidgetID] = useState<null | string>(null)\n const sensors = useDashboardSensors()\n\n useEffect(() => {\n if (!isEditing) {\n setActiveControlsWidgetID(null)\n }\n }, [isEditing])\n\n return (\n <div>\n <DndContext\n autoScroll={{\n enabled: true,\n threshold: {\n x: 0, // No horizontal scroll\n y: 0.2, // Allow vertical scroll at 20% from edge\n },\n }}\n collisionDetection={closestInXAxis}\n // https://github.com/clauderic/dnd-kit/issues/926#issuecomment-1640115665\n id=\"dashboard-dnd-context\"\n onDragCancel={() => {\n setActiveDragId(null)\n }}\n onDragEnd={(event) => {\n if (!event.over) {\n setActiveDragId(null)\n return\n }\n const droppableId = event.over.id as string\n const i = droppableId.lastIndexOf('-')\n const slug = droppableId.slice(0, i)\n const position = droppableId.slice(i + 1)\n\n if (slug === event.active.id) {\n return\n }\n\n const moveFromIndex = currentLayout?.findIndex(\n (widget) => widget.item.id === event.active.id,\n )\n let moveToIndex = currentLayout?.findIndex((widget) => widget.item.id === slug)\n if (moveFromIndex < moveToIndex) {\n moveToIndex--\n }\n if (position === 'after') {\n moveToIndex++\n }\n moveWidget({ moveFromIndex, moveToIndex })\n setActiveDragId(null)\n }}\n onDragStart={(event) => {\n setActiveDragId(event.active.id as string)\n }}\n sensors={sensors}\n >\n <div\n className={`modular-dashboard ${isEditing ? 'editing' : ''}`}\n style={{\n display: 'flex',\n flexWrap: 'wrap',\n // Don't add gap here! We need to use padding on the widgets instead\n // to make sure all rows have the same width always.\n }}\n >\n {currentLayout?.length === 0 && (\n <div className=\"modular-dashboard__empty\">\n <p>{t('dashboard:noItems')}</p>\n </div>\n )}\n {currentLayout?.map((widget, _index) => (\n <React.Fragment key={widget.item.id}>\n <DraggableItem\n disabled={!isEditing}\n id={widget.item.id}\n style={{\n width: `${WIDTH_TO_PERCENTAGE[widget.item.width]}%`,\n }}\n width={widget.item.width}\n >\n <div\n className={[\n 'widget-wrapper',\n isEditing ? 'widget-wrapper--editing' : '',\n activeControlsWidgetID === widget.item.id\n ? 'widget-wrapper--controls-active'\n : '',\n ]\n .filter(Boolean)\n .join(' ')}\n >\n <div aria-hidden={isEditing} className=\"widget-content\" inert={isEditing}>\n {widget.component}\n </div>\n {isEditing && <div aria-hidden className=\"widget-wrapper__edit-overlay\" />}\n {isEditing && (\n <div\n className=\"widget-wrapper__controls\"\n onPointerDown={(e) => e.stopPropagation()}\n >\n <WidgetEditControl\n onSave={(data) => {\n updateWidgetData(widget.item.id, data)\n }}\n widgetData={widget.item.data}\n widgetID={widget.item.id}\n />\n <WidgetWidthDropdown\n currentWidth={widget.item.width}\n maxWidth={widget.item.maxWidth}\n minWidth={widget.item.minWidth}\n onOpenChange={(isOpen) => {\n setActiveControlsWidgetID(isOpen ? widget.item.id : null)\n }}\n onResize={(width) => resizeWidget(widget.item.id, width)}\n />\n <Button\n aria-label={t('dashboard:deleteWidget', { id: widget.item.id })}\n buttonStyle=\"destructive\"\n className=\"widget-wrapper__delete-btn\"\n icon=\"x\"\n margin={false}\n onClick={() => deleteWidget(widget.item.id)}\n round\n />\n </div>\n )}\n </div>\n </DraggableItem>\n </React.Fragment>\n ))}\n <DragOverlay\n className=\"drag-overlay\"\n dropAnimation={{\n duration: 100,\n }}\n // Uses custom modifier that only applies for pointer, not keyboard navigation.\n modifiers={[snapCenterToCursorOnlyForPointer]}\n >\n {activeDragId\n ? (() => {\n const draggedWidget = currentLayout?.find(\n (widget) => widget.item.id === activeDragId,\n )\n return draggedWidget ? (\n <div\n style={{\n transform: 'scale(0.25)',\n }}\n >\n <div\n className={`widget-wrapper ${isEditing ? 'widget-wrapper--editing' : ''}`}\n >\n <div className=\"widget-content\">{draggedWidget.component}</div>\n </div>\n </div>\n ) : null\n })()\n : null}\n </DragOverlay>\n </div>\n </DndContext>\n <DashboardStepNav\n addWidget={addWidget}\n cancel={cancel}\n isEditing={isEditing}\n resetLayout={resetLayout}\n saveLayout={saveLayout}\n setIsEditing={setIsEditing}\n widgets={widgets}\n />\n {cancelModal}\n </div>\n )\n}\n\nfunction WidgetWidthDropdown({\n currentWidth,\n maxWidth,\n minWidth,\n onOpenChange,\n onResize,\n}: {\n currentWidth: WidgetWidth\n maxWidth: WidgetWidth\n minWidth: WidgetWidth\n onOpenChange: (isOpen: boolean) => void\n onResize: (width: WidgetWidth) => void\n}) {\n // Filter options based on minWidth and maxWidth\n const validOptions = useMemo(() => {\n const minPercentage = WIDTH_TO_PERCENTAGE[minWidth]\n const maxPercentage = WIDTH_TO_PERCENTAGE[maxWidth]\n\n return Object.entries(WIDTH_TO_PERCENTAGE)\n .map(([key, value]) => ({\n width: key as WidgetWidth,\n percentage: value,\n }))\n .filter((option) => option.percentage >= minPercentage && option.percentage <= maxPercentage)\n }, [minWidth, maxWidth])\n\n const isDisabled = validOptions.length <= 1\n\n if (isDisabled) {\n return null\n }\n\n return (\n <Popup\n onToggleClose={() => onOpenChange(false)}\n onToggleOpen={onOpenChange}\n render={({ close }) => (\n <PopupList.ButtonGroup>\n {validOptions.map((option) => {\n const isSelected = option.width === currentWidth\n return (\n <PopupList.Button\n active={isSelected}\n key={option.width}\n onClick={() => {\n onResize(option.width)\n close()\n }}\n >\n <span className=\"widget-wrapper__size-btn-label\">{option.width}</span>\n <span className=\"widget-wrapper__size-btn-percentage\">\n {option.percentage.toFixed(0)}%\n </span>\n </PopupList.Button>\n )\n })}\n </PopupList.ButtonGroup>\n )}\n renderButton={({ active: _active, onClick, onKeyDown, ...ariaProps }) => (\n <Button\n buttonStyle=\"secondary\"\n className=\"widget-wrapper__size-btn\"\n extraButtonProps={{\n onKeyDown,\n onPointerDown: (e) => e.stopPropagation(),\n ...ariaProps,\n }}\n icon={<ChevronIcon className=\"widget-wrapper__size-btn-icon\" size={16} />}\n margin={false}\n onClick={onClick}\n selected={_active}\n >\n {currentWidth}\n </Button>\n )}\n size=\"small\"\n verticalAlign=\"bottom\"\n />\n )\n}\n\nfunction DraggableItem(props: {\n children: React.ReactNode\n disabled?: boolean\n id: string\n style?: React.CSSProperties\n width: WidgetWidth\n}) {\n const { attributes, isDragging, listeners, setNodeRef } = useDraggable({\n id: props.id,\n disabled: props.disabled,\n })\n\n const mergedStyles: React.CSSProperties = {\n ...props.style,\n opacity: isDragging ? 0.3 : 1,\n position: 'relative',\n }\n\n // Only apply draggable attributes and listeners when not disabled\n // to prevent disabling interactive elements inside the widget\n const draggableProps = props.disabled ? {} : { ...listeners, ...attributes }\n\n return (\n <div className=\"widget\" data-slug={props.id} data-width={props.width} style={mergedStyles}>\n <DroppableItem id={props.id} position=\"before\" />\n <div\n className=\"draggable\"\n id={props.id}\n ref={setNodeRef}\n {...draggableProps}\n style={{\n width: '100%',\n height: '100%',\n }}\n >\n {props.children}\n </div>\n <DroppableItem id={props.id} position=\"after\" />\n </div>\n )\n}\n\nfunction DroppableItem({ id, position }: { id: string; position: 'after' | 'before' }) {\n const { setNodeRef, isOver } = useDroppable({ id: `${id}-${position}`, data: { position } })\n\n return (\n <div\n className=\"droppable-widget\"\n data-testid={`${id}-${position}`}\n ref={setNodeRef}\n style={{\n position: 'absolute',\n left: position === 'before' ? -2 : 'auto',\n right: position === 'after' ? -2 : 'auto',\n top: 0,\n bottom: 0,\n borderRadius: '1000px',\n width: '4px',\n backgroundColor: isOver ? 'var(--color-bg-brand-secondary)' : 'transparent',\n marginBottom: '10px',\n marginTop: '10px',\n pointerEvents: 'none',\n zIndex: 1000,\n }}\n />\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -93,7 +93,33 @@
93
93
  width: 100%;
94
94
  }
95
95
 
96
- .widget-wrapper--editing:hover .widget-wrapper__controls {
96
+ .widget-wrapper--editing .widget-wrapper__controls {
97
+ transition: opacity 0.2s ease;
98
+ }
99
+
100
+ .widget-wrapper--editing:hover .widget-wrapper__controls,
101
+ .widget-wrapper--editing:has(:focus-visible) .widget-wrapper__controls,
102
+ .widget-wrapper--controls-active .widget-wrapper__controls {
103
+ opacity: 1;
104
+ }
105
+
106
+ .widget-wrapper__edit-overlay {
107
+ position: absolute;
108
+ inset: 0;
109
+ z-index: 5;
110
+ pointer-events: none;
111
+ background: rgba(0, 0, 0, 0.35);
112
+ outline: var(--accessibility-outline);
113
+ outline-offset: var(--accessibility-outline-offset);
114
+ border-radius: var(--radius-medium);
115
+ box-sizing: border-box;
116
+ opacity: 0;
117
+ transition: opacity 0.2s ease;
118
+ }
119
+
120
+ .widget-wrapper--editing:hover .widget-wrapper__edit-overlay,
121
+ .widget-wrapper--editing:has(:focus-visible) .widget-wrapper__edit-overlay,
122
+ .widget-wrapper--controls-active .widget-wrapper__edit-overlay {
97
123
  opacity: 1;
98
124
  }
99
125
 
@@ -107,159 +133,26 @@
107
133
  gap: var(--spacer-2);
108
134
  }
109
135
 
110
- .widget-wrapper__delete-btn {
111
- display: flex;
112
- align-items: center;
113
- justify-content: center;
114
- width: var(--spacer-4);
115
- height: var(--spacer-4);
116
- background: var(--color-bg-danger);
117
- border: none;
118
- border-radius: var(--radius-small);
119
- cursor: pointer;
120
- color: var(--color-text-ondanger);
121
-
122
- &:hover {
123
- background: var(--color-bg-danger-hover);
124
- }
125
-
126
- &:active {
127
- background: var(--color-bg-danger-pressed);
128
- }
129
-
130
- &:focus-visible {
131
- outline: var(--accessibility-outline);
132
- outline-offset: var(--accessibility-outline-offset);
133
- }
134
-
135
- & svg {
136
- pointer-events: none;
137
- }
138
- }
139
-
140
- .widget-wrapper__edit-btn {
141
- display: flex;
142
- align-items: center;
143
- justify-content: center;
144
- width: var(--spacer-4);
145
- height: var(--spacer-4);
146
- background: var(--color-text);
147
- border: none;
148
- border-radius: var(--radius-small);
149
- cursor: pointer;
150
- color: var(--color-bg);
151
-
152
- & .icon {
153
- width: var(--spacer-3);
154
- height: var(--spacer-3);
155
- }
156
-
157
- &:hover {
158
- background: var(--color-text-secondary);
159
- }
160
-
161
- &:active {
162
- background: var(--color-text-tertiary);
163
- }
164
-
165
- & svg {
166
- pointer-events: none;
167
- }
168
- }
169
-
170
136
  .widget-wrapper__size-btn {
171
- display: flex;
172
- align-items: center;
173
- gap: var(--spacer-1);
174
- padding: var(--spacer-1) var(--spacer-2);
175
137
  min-width: auto;
176
- height: var(--spacer-4);
177
- background: var(--color-bg-inverse);
178
- border: none;
179
- border-radius: var(--radius-small);
180
- cursor: pointer;
181
- font-family: var(--text-body-small-font-family);
182
- font-size: var(--text-body-small-font-size);
183
- font-weight: var(--text-body-small-font-weight);
184
- line-height: var(--text-body-small-line-height);
185
- letter-spacing: var(--text-body-small-letter-spacing);
186
- color: var(--color-text-oninverse);
187
- white-space: nowrap;
188
-
189
- & .icon .stroke {
190
- stroke: var(--color-icon-oninverse);
191
- stroke-width: var(--stroke-width-medium);
192
- }
193
-
194
- &:hover {
195
- background: var(--color-bg-inverse-hover);
196
- }
197
-
198
- &:active {
199
- background: var(--color-bg-inverse-pressed);
200
- }
201
-
202
- &:disabled {
203
- opacity: 0.5;
204
- cursor: not-allowed;
205
- }
206
-
207
- &:disabled:hover {
208
- background: var(--color-bg-inverse);
209
- }
210
-
211
- &:focus-visible {
212
- outline: var(--accessibility-outline);
213
- outline-offset: var(--accessibility-outline-offset);
214
- }
215
138
 
216
- & svg {
217
- pointer-events: none;
139
+ & .btn__content {
140
+ gap: var(--spacer-1);
218
141
  }
219
142
  }
220
143
 
221
144
  .widget-wrapper__size-btn-percentage {
222
- font-family: var(--text-body-small-font-family);
223
- font-size: var(--text-body-small-font-size);
224
- margin-left: auto;
145
+ margin-left: var(--spacer-1);
225
146
  color: var(--color-text-tertiary);
226
147
  }
227
148
 
228
- .popup-button-list:has(.widget-wrapper__size-btn-label) .popup__scroll-container {
229
- padding: 0;
230
- }
231
-
232
- .popup__content:has(.widget-wrapper__size-btn-label) {
233
- padding: var(--spacer-1);
234
- box-shadow: rgba(0, 0, 0, 0.35) 0px 5px 15px;
235
- }
236
-
237
- .popup-button-list__button:has(.widget-wrapper__size-btn-label) {
238
- display: flex !important;
239
- align-items: center !important;
240
- gap: var(--spacer-3);
241
- }
242
-
243
- .popup-button-list__button:has(.widget-wrapper__size-btn-label) .widget-wrapper__size-btn-label {
244
- flex: 0 0 auto;
245
- }
246
-
247
- .popup-button-list__button:has(.widget-wrapper__size-btn-label)
248
- .widget-wrapper__size-btn-percentage {
249
- margin-left: auto !important;
250
- }
251
-
252
149
  .step-nav .dashboard-breadcrumb-dropdown .btn {
253
150
  padding-right: var(--spacer-1);
254
151
  }
255
152
 
256
- /* .step-nav .dashboard-breadcrumb-dropdown {
257
- margin-left: calc(var(--spacer-2) * -1);
258
- } */
259
-
260
153
  .step-nav .dashboard-breadcrumb-dropdown__editing {
261
154
  align-items: center;
262
- display: flex !important;
155
+ display: flex;
263
156
  gap: var(--spacer-2-5);
264
157
 
265
158
  > span:first-child {
@@ -268,8 +161,8 @@
268
161
  }
269
162
 
270
163
  .step-nav .dashboard-breadcrumb-dropdown__actions {
271
- display: flex !important;
272
- gap: var(--spacer-2-5);
164
+ display: flex;
165
+ gap: var(--spacer-2);
273
166
  }
274
167
 
275
168
  .step-nav .dashboard-breadcrumb-dropdown__label {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Document/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,IAAI,EACJ,uBAAuB,EACvB,uBAAuB,EAEvB,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,EACjC,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AA6BzB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,gBAAgB,CAAC,uBAAuB,CAAC,GACzC,KAAK,CAAC,EAAE,GACR,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,6PAgBxB;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,EAAE,gCAAgC,CAAA;CAC5C,GAAG,oBAAoB,KAAG,OAAO,CAAC;IACjC,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAsZA,CAAA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,oBAAoB,+QAuB7D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Document/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAEpB,IAAI,EACJ,uBAAuB,EACvB,uBAAuB,EAEvB,iBAAiB,EACjB,gBAAgB,EAChB,gCAAgC,EACjC,MAAM,SAAS,CAAA;AAIhB,OAAO,KAAK,MAAM,OAAO,CAAA;AA6BzB,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,MAAM,YAAY,GACpB,iBAAiB,GACjB,gBAAgB,CAAC,uBAAuB,CAAC,GACzC,KAAK,CAAC,EAAE,GACR,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAAC,CAAA;AAErC;;;;;GAKG;AACH,eAAO,MAAM,cAAc,6PAgBxB;IACD,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,OAAO,CAAA;IACtC,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAA;IACzC,QAAQ,CAAC,oBAAoB,CAAC,EAAE,OAAO,CAAA;IACvC,QAAQ,CAAC,EAAE,gCAAgC,CAAA;CAC5C,GAAG,oBAAoB,KAAG,OAAO,CAAC;IACjC,IAAI,EAAE,IAAI,CAAA;IACV,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B,CAqZA,CAAA;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,oBAAoB,+QAuB7D"}
@@ -204,8 +204,7 @@ export const renderDocument = async ({
204
204
  collectionConfig,
205
205
  globalConfig,
206
206
  hasPublishPermission,
207
- payload,
208
- user
207
+ payload
209
208
  })]);
210
209
  await recentlyViewedPromise;
211
210
  const documentViewServerProps = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["isolateObjectProperty","logError","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","DocumentHeader","RenderServerComponent","DocumentInfoProvider","EditDepthProvider","HydrateAuthProvider","LivePreviewProvider","buildFormState","getDocPreferences","getDocumentData","getDocumentPermissions","getHasScheduledPublish","getIsLocked","getVersions","handleLivePreview","handlePreview","isEditing","getIsEditing","getPreferences","NotFoundView","UnauthorizedViewWithGutter","getDocumentView","recordRecentlyViewed","renderDocumentSlots","renderDocument","disableActions","documentSubViewType","drawerSlug","importMap","initialData","initPageResult","overrideEntityVisibility","params","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","searchParams","versions","viewType","collectionConfig","docID","idFromArgs","globalConfig","locale","permissions","req","i18n","payload","config","routes","admin","adminRoute","api","apiRoute","user","visibleEntities","segments","Array","isArray","collectionSlug","slug","undefined","globalSlug","id","doc","redirectURL","path","encodeURIComponent","server","redirect","Error","isTrashedDoc","Boolean","deletedAt","reqForPermissions","transactionID","reqForLockCheck","docPreferences","docPermissions","hasDeletePermission","hasPublishPermission","hasSavePermission","hasTrashPermission","currentEditor","isLocked","lastUpdateTime","entityPreferences","Promise","all","data","collection","operation","recentlyViewedPromise","hasPublishedDoc","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","state","formState","hasScheduledPublish","code","fallbackLocale","readOnly","renderAllFields","schemaPath","skipValidation","documentViewServerProps","routeSegments","collections","find","visibleSlug","globals","formattedParams","URLSearchParams","append","apiQueryParams","toString","apiURL","View","showHeader","RootViewOverride","components","views","edit","root","Component","shouldAutosave","validateDraftData","drafts","validate","create","depth","draft","documentSlots","Description","clientProps","isLivePreviewEnabled","livePreviewConfig","livePreviewURL","isPreviewEnabled","previewURL","Document","_jsx","initialState","isTrashed","_jsxs","breakpoints","isLivePreviewing","value","editViewType","openByDefault","typeofLivePreviewURL","url","AfterHeader","serverProps","DocumentView","props","RenderedDocument","error","message","startsWith","err","notFound"],"sources":["../../../src/views/Document/index.tsx"],"sourcesContent":["import type {\n AdminViewServerProps,\n CollectionPreferences,\n Data,\n DocumentViewClientProps,\n DocumentViewServerProps,\n DocumentViewServerPropsOnly,\n EditViewComponent,\n PayloadComponent,\n RenderDocumentVersionsProperties,\n} from 'payload'\n\nimport { isolateObjectProperty, logError } from 'payload'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React from 'react'\n\nimport { DocumentHeader } from '../../elements/DocumentHeader/index.js'\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n/* eslint-disable payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds */\nimport {\n DocumentInfoProvider,\n EditDepthProvider,\n HydrateAuthProvider,\n LivePreviewProvider,\n} from '../../exports/client/index.js'\n/* eslint-enable payload/no-imports-from-exports-dir */\nimport { buildFormState } from '../../utilities/buildFormState.js'\nimport { getDocPreferences } from '../../utilities/getDocPreferences.js'\nimport { getDocumentData } from '../../utilities/getDocumentData.js'\nimport { getDocumentPermissions } from '../../utilities/getDocumentPermissions.js'\nimport { getHasScheduledPublish } from '../../utilities/getHasScheduledPublish.js'\nimport { getIsLocked } from '../../utilities/getIsLocked.js'\nimport { getVersions } from '../../utilities/getVersions.js'\nimport { handleLivePreview } from '../../utilities/handleLivePreview.js'\nimport { handlePreview } from '../../utilities/handlePreview.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\nimport { getPreferences } from '../../utilities/upsertPreferences.js'\nimport { NotFoundView } from '../NotFound/index.js'\nimport { UnauthorizedViewWithGutter } from '../Unauthorized/index.js'\nimport { getDocumentView } from './getDocumentView.js'\nimport { recordRecentlyViewed } from './recordRecentlyViewed.js'\nimport { renderDocumentSlots } from './renderDocumentSlots.js'\n\nexport { getDocumentView } from './getDocumentView.js'\n\nexport type ViewToRender =\n | EditViewComponent\n | PayloadComponent<DocumentViewServerProps>\n | React.FC\n | React.FC<DocumentViewClientProps>\n\n/**\n * This function is responsible for rendering\n * an Edit Document view on the server for both:\n * - default document edit views\n * - on-demand edit views within drawers\n */\nexport const renderDocument = async ({\n disableActions,\n documentSubViewType,\n drawerSlug,\n importMap,\n initialData,\n initPageResult,\n overrideEntityVisibility,\n params,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n searchParams,\n versions,\n viewType,\n}: {\n drawerSlug?: string\n overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n versions?: RenderDocumentVersionsProperties\n} & AdminViewServerProps): Promise<{\n data: Data\n Document: React.ReactNode\n}> => {\n const {\n collectionConfig,\n docID: idFromArgs,\n globalConfig,\n locale,\n permissions,\n req,\n req: {\n i18n,\n payload,\n payload: {\n config,\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n },\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const segments = Array.isArray(params?.segments) ? params.segments : []\n const collectionSlug = collectionConfig?.slug || undefined\n const globalSlug = globalConfig?.slug || undefined\n let isEditing = getIsEditing({ id: idFromArgs, collectionSlug, globalSlug })\n\n // Fetch the doc required for the view\n let doc =\n !idFromArgs && !globalSlug\n ? initialData || null\n : await getDocumentData({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n })\n\n if (isEditing && !doc) {\n // If it's a collection document that doesn't exist, redirect to collection list\n if (collectionSlug) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}?notFound=${encodeURIComponent(idFromArgs)}`,\n })\n req.server.redirect(redirectURL)\n } else {\n // For globals or other cases, keep the 404 behavior\n throw new Error('not-found')\n }\n }\n\n const isTrashedDoc = Boolean(doc && 'deletedAt' in doc && typeof doc?.deletedAt === 'string')\n\n // CRITICAL FIX FOR TRANSACTION RACE CONDITION:\n // When running parallel operations with Promise.all, if they share the same req object\n // and one operation calls initTransaction() which MUTATES req.transactionID, that mutation\n // is visible to all parallel operations. This causes:\n // 1. Operation A (e.g., getDocumentPermissions → docAccessOperation) calls initTransaction()\n // which sets req.transactionID = Promise, then resolves it to a UUID\n // 2. Operation B (e.g., getIsLocked) running in parallel receives the SAME req with the mutated transactionID\n // 3. Operation A (does not even know that Operation B even exists and is stil using the transactionID) commits/ends its transaction\n // 4. Operation B tries to use the now-expired session → MongoExpiredSessionError!\n //\n // Solution: Use isolateObjectProperty to create a Proxy that isolates the 'transactionID' property.\n // This allows each operation to have its own transactionID without affecting the parent req.\n // If parent req already has a transaction, preserve it (don't isolate), since this\n // issue only arises when one of the operations calls initTransaction() themselves -\n // because then, that operation will also try to commit/end the transaction itself.\n\n // If the transactionID is already set, the parallel operations will not try to\n // commit/end the transaction themselves, so we don't need to isolate the\n // transactionID property.\n const reqForPermissions = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n const reqForLockCheck = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n\n const [\n docPreferences,\n {\n docPermissions,\n hasDeletePermission,\n hasPublishPermission,\n hasSavePermission,\n hasTrashPermission,\n },\n { currentEditor, isLocked, lastUpdateTime },\n entityPreferences,\n ] = await Promise.all([\n // Get document preferences\n getDocPreferences({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n payload,\n user,\n }),\n\n // Get permissions - isolated transactionID prevents cross-contamination\n getDocumentPermissions({\n id: idFromArgs,\n collectionConfig,\n data: doc,\n globalConfig,\n req: reqForPermissions,\n }),\n\n // Fetch document lock state - isolated transactionID prevents cross-contamination\n getIsLocked({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n isEditing,\n req: reqForLockCheck,\n }),\n\n // get entity preferences\n getPreferences<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n payload,\n req.user.id,\n req.user.collection,\n ),\n ])\n\n const operation = (collectionSlug && idFromArgs) || globalSlug ? 'update' : 'create'\n\n // Record the document as recently viewed (collections only, never on the create route or for\n // trashed docs). Runs concurrently with the work below and never throws.\n const recentlyViewedPromise =\n collectionSlug && idFromArgs && doc && !isTrashedDoc\n ? recordRecentlyViewed({ id: idFromArgs, collectionSlug, req })\n : undefined\n\n const [\n { hasPublishedDoc, mostRecentVersionIsAutosaved, unpublishedVersionCount, versionCount },\n { state: formState },\n hasScheduledPublish,\n ] = await Promise.all([\n getVersions({\n id: idFromArgs,\n collectionConfig,\n doc,\n docPermissions,\n globalConfig,\n locale: locale?.code,\n payload,\n user,\n }),\n buildFormState({\n id: idFromArgs,\n collectionSlug,\n data: doc,\n docPermissions,\n docPreferences,\n fallbackLocale: false,\n globalSlug,\n locale: locale?.code,\n operation,\n readOnly: isTrashedDoc || isLocked,\n renderAllFields: true,\n req,\n schemaPath: collectionSlug || globalSlug,\n skipValidation: true,\n }),\n getHasScheduledPublish({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n user,\n }),\n ])\n\n await recentlyViewedPromise\n\n const documentViewServerProps: DocumentViewServerPropsOnly = {\n doc,\n hasPublishedDoc,\n i18n,\n initPageResult,\n locale,\n params,\n payload,\n permissions,\n routeSegments: segments,\n searchParams,\n server: req.server,\n user,\n versions,\n }\n\n if (\n !overrideEntityVisibility &&\n ((collectionSlug &&\n !visibleEntities?.collections?.find((visibleSlug) => visibleSlug === collectionSlug)) ||\n (globalSlug && !visibleEntities?.globals?.find((visibleSlug) => visibleSlug === globalSlug)))\n ) {\n throw new Error('not-found')\n }\n\n const formattedParams = new URLSearchParams()\n\n if (hasDraftsEnabled(collectionConfig || globalConfig)) {\n formattedParams.append('draft', 'true')\n }\n\n if (locale?.code) {\n formattedParams.append('locale', locale.code)\n }\n\n const apiQueryParams = `?${formattedParams.toString()}`\n\n const apiURL = formatAdminURL({\n apiRoute,\n path: collectionSlug\n ? `/${collectionSlug}/${idFromArgs}${apiQueryParams}`\n : globalSlug\n ? `/${globalSlug}${apiQueryParams}`\n : '',\n })\n\n let View: ViewToRender = null\n\n let showHeader = true\n\n const RootViewOverride =\n collectionConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in collectionConfig.admin.components.views.edit.root\n ? collectionConfig?.admin?.components?.views?.edit?.root?.Component\n : globalConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in globalConfig.admin.components.views.edit.root\n ? globalConfig?.admin?.components?.views?.edit?.root?.Component\n : null\n\n if (RootViewOverride) {\n View = RootViewOverride\n showHeader = false\n } else {\n ;({ View } = getDocumentView({\n collectionConfig,\n config,\n docPermissions,\n globalConfig,\n routeSegments: segments,\n }))\n\n if (View === UnauthorizedViewWithGutter) {\n showHeader = false\n }\n }\n\n if (!View) {\n View = NotFoundView as React.FC<AdminViewServerProps>\n }\n\n /**\n * Handle case where autoSave is enabled and the document is being created\n * => create document and redirect\n */\n const shouldAutosave = hasSavePermission && hasAutosaveEnabled(collectionConfig || globalConfig)\n\n const validateDraftData =\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.validate\n\n let id = idFromArgs\n\n if (shouldAutosave && !validateDraftData && !idFromArgs && collectionSlug) {\n doc = await payload.create({\n collection: collectionSlug,\n data: initialData || {},\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n req,\n user,\n })\n\n if (doc?.id) {\n id = doc.id\n isEditing = getIsEditing({ id: doc.id, collectionSlug, globalSlug })\n\n if (!drawerSlug && redirectAfterCreate !== false) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${doc.id}`,\n })\n\n req.server.redirect(redirectURL)\n }\n } else {\n throw new Error('not-found')\n }\n }\n\n const documentSlots = renderDocumentSlots({\n id,\n collectionConfig,\n doc: doc as Record<string, unknown>,\n globalConfig,\n hasSavePermission,\n locale,\n permissions,\n req,\n })\n\n // Extract Description from documentSlots to pass to DocumentHeader\n const { Description } = documentSlots\n\n const clientProps: DocumentViewClientProps = {\n formState,\n ...documentSlots,\n documentSubViewType,\n viewType,\n }\n\n const { isLivePreviewEnabled, livePreviewConfig, livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n const { isPreviewEnabled, previewURL } = await handlePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n return {\n data: doc,\n Document: (\n <DocumentInfoProvider\n apiURL={apiURL}\n collectionSlug={collectionConfig?.slug}\n currentEditor={currentEditor}\n disableActions={disableActions ?? false}\n docPermissions={docPermissions}\n globalSlug={globalConfig?.slug}\n hasDeletePermission={hasDeletePermission}\n hasPublishedDoc={hasPublishedDoc}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n hasScheduledPublish={hasScheduledPublish}\n hasTrashPermission={hasTrashPermission}\n id={id}\n initialData={doc}\n initialState={formState}\n isEditing={isEditing}\n isLocked={isLocked}\n isTrashed={isTrashedDoc}\n key={locale?.code}\n lastUpdateTime={lastUpdateTime}\n mostRecentVersionIsAutosaved={mostRecentVersionIsAutosaved}\n redirectAfterCreate={redirectAfterCreate}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n unpublishedVersionCount={unpublishedVersionCount}\n versionCount={versionCount}\n >\n <LivePreviewProvider\n breakpoints={livePreviewConfig?.breakpoints}\n isLivePreviewEnabled={isLivePreviewEnabled && operation !== 'create'}\n isLivePreviewing={Boolean(\n (entityPreferences?.value?.editViewType === undefined\n ? livePreviewConfig?.openByDefault\n : entityPreferences.value.editViewType === 'live-preview') && livePreviewURL,\n )}\n isPreviewEnabled={Boolean(isPreviewEnabled)}\n previewURL={previewURL}\n typeofLivePreviewURL={typeof livePreviewConfig?.url as 'function' | 'string' | undefined}\n url={livePreviewURL}\n >\n {showHeader && !drawerSlug && (\n <DocumentHeader\n AfterHeader={Description}\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n />\n )}\n <HydrateAuthProvider permissions={permissions} />\n <EditDepthProvider>\n {RenderServerComponent({\n clientProps,\n Component: View,\n importMap,\n serverProps: documentViewServerProps,\n })}\n </EditDepthProvider>\n </LivePreviewProvider>\n </DocumentInfoProvider>\n ),\n }\n}\n\nexport async function DocumentView(props: AdminViewServerProps) {\n try {\n const { Document: RenderedDocument } = await renderDocument(props)\n return RenderedDocument\n } catch (error) {\n if (error?.message === 'NEXT_REDIRECT') {\n throw error\n }\n\n // The TanStack adapter's `req.server.redirect()` throws `redirect:<url>` as a\n // control-flow signal — the target is already recorded on `req.server` and\n // honored upstream in `loadAdminPage`. It isn't a real error, so swallow it\n // without logging, mirroring the `NEXT_REDIRECT` guard above.\n if (error?.message?.startsWith('redirect:')) {\n return\n }\n\n logError({ err: error, payload: props.initPageResult.req.payload })\n\n if (error.message === 'not-found') {\n props.initPageResult.req.server.notFound()\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["isolateObjectProperty","logError","formatAdminURL","hasAutosaveEnabled","hasDraftsEnabled","React","DocumentHeader","RenderServerComponent","DocumentInfoProvider","EditDepthProvider","HydrateAuthProvider","LivePreviewProvider","buildFormState","getDocPreferences","getDocumentData","getDocumentPermissions","getHasScheduledPublish","getIsLocked","getVersions","handleLivePreview","handlePreview","isEditing","getIsEditing","getPreferences","NotFoundView","UnauthorizedViewWithGutter","getDocumentView","recordRecentlyViewed","renderDocumentSlots","renderDocument","disableActions","documentSubViewType","drawerSlug","importMap","initialData","initPageResult","overrideEntityVisibility","params","redirectAfterCreate","redirectAfterDelete","redirectAfterDuplicate","redirectAfterRestore","searchParams","versions","viewType","collectionConfig","docID","idFromArgs","globalConfig","locale","permissions","req","i18n","payload","config","routes","admin","adminRoute","api","apiRoute","user","visibleEntities","segments","Array","isArray","collectionSlug","slug","undefined","globalSlug","id","doc","redirectURL","path","encodeURIComponent","server","redirect","Error","isTrashedDoc","Boolean","deletedAt","reqForPermissions","transactionID","reqForLockCheck","docPreferences","docPermissions","hasDeletePermission","hasPublishPermission","hasSavePermission","hasTrashPermission","currentEditor","isLocked","lastUpdateTime","entityPreferences","Promise","all","data","collection","operation","recentlyViewedPromise","hasPublishedDoc","mostRecentVersionIsAutosaved","unpublishedVersionCount","versionCount","state","formState","hasScheduledPublish","code","fallbackLocale","readOnly","renderAllFields","schemaPath","skipValidation","documentViewServerProps","routeSegments","collections","find","visibleSlug","globals","formattedParams","URLSearchParams","append","apiQueryParams","toString","apiURL","View","showHeader","RootViewOverride","components","views","edit","root","Component","shouldAutosave","validateDraftData","drafts","validate","create","depth","draft","documentSlots","Description","clientProps","isLivePreviewEnabled","livePreviewConfig","livePreviewURL","isPreviewEnabled","previewURL","Document","_jsx","initialState","isTrashed","_jsxs","breakpoints","isLivePreviewing","value","editViewType","openByDefault","typeofLivePreviewURL","url","AfterHeader","serverProps","DocumentView","props","RenderedDocument","error","message","startsWith","err","notFound"],"sources":["../../../src/views/Document/index.tsx"],"sourcesContent":["import type {\n AdminViewServerProps,\n CollectionPreferences,\n Data,\n DocumentViewClientProps,\n DocumentViewServerProps,\n DocumentViewServerPropsOnly,\n EditViewComponent,\n PayloadComponent,\n RenderDocumentVersionsProperties,\n} from 'payload'\n\nimport { isolateObjectProperty, logError } from 'payload'\nimport { formatAdminURL, hasAutosaveEnabled, hasDraftsEnabled } from 'payload/shared'\nimport React from 'react'\n\nimport { DocumentHeader } from '../../elements/DocumentHeader/index.js'\nimport { RenderServerComponent } from '../../elements/RenderServerComponent/index.js'\n/* eslint-disable payload/no-imports-from-exports-dir -- Server component must reference exports/client bundle for proper client boundary in prod builds */\nimport {\n DocumentInfoProvider,\n EditDepthProvider,\n HydrateAuthProvider,\n LivePreviewProvider,\n} from '../../exports/client/index.js'\n/* eslint-enable payload/no-imports-from-exports-dir */\nimport { buildFormState } from '../../utilities/buildFormState.js'\nimport { getDocPreferences } from '../../utilities/getDocPreferences.js'\nimport { getDocumentData } from '../../utilities/getDocumentData.js'\nimport { getDocumentPermissions } from '../../utilities/getDocumentPermissions.js'\nimport { getHasScheduledPublish } from '../../utilities/getHasScheduledPublish.js'\nimport { getIsLocked } from '../../utilities/getIsLocked.js'\nimport { getVersions } from '../../utilities/getVersions.js'\nimport { handleLivePreview } from '../../utilities/handleLivePreview.js'\nimport { handlePreview } from '../../utilities/handlePreview.js'\nimport { isEditing as getIsEditing } from '../../utilities/isEditing.js'\nimport { getPreferences } from '../../utilities/upsertPreferences.js'\nimport { NotFoundView } from '../NotFound/index.js'\nimport { UnauthorizedViewWithGutter } from '../Unauthorized/index.js'\nimport { getDocumentView } from './getDocumentView.js'\nimport { recordRecentlyViewed } from './recordRecentlyViewed.js'\nimport { renderDocumentSlots } from './renderDocumentSlots.js'\n\nexport { getDocumentView } from './getDocumentView.js'\n\nexport type ViewToRender =\n | EditViewComponent\n | PayloadComponent<DocumentViewServerProps>\n | React.FC\n | React.FC<DocumentViewClientProps>\n\n/**\n * This function is responsible for rendering\n * an Edit Document view on the server for both:\n * - default document edit views\n * - on-demand edit views within drawers\n */\nexport const renderDocument = async ({\n disableActions,\n documentSubViewType,\n drawerSlug,\n importMap,\n initialData,\n initPageResult,\n overrideEntityVisibility,\n params,\n redirectAfterCreate,\n redirectAfterDelete,\n redirectAfterDuplicate,\n redirectAfterRestore,\n searchParams,\n versions,\n viewType,\n}: {\n drawerSlug?: string\n overrideEntityVisibility?: boolean\n readonly redirectAfterCreate?: boolean\n readonly redirectAfterDelete?: boolean\n readonly redirectAfterDuplicate?: boolean\n readonly redirectAfterRestore?: boolean\n versions?: RenderDocumentVersionsProperties\n} & AdminViewServerProps): Promise<{\n data: Data\n Document: React.ReactNode\n}> => {\n const {\n collectionConfig,\n docID: idFromArgs,\n globalConfig,\n locale,\n permissions,\n req,\n req: {\n i18n,\n payload,\n payload: {\n config,\n config: {\n routes: { admin: adminRoute, api: apiRoute },\n },\n },\n user,\n },\n visibleEntities,\n } = initPageResult\n\n const segments = Array.isArray(params?.segments) ? params.segments : []\n const collectionSlug = collectionConfig?.slug || undefined\n const globalSlug = globalConfig?.slug || undefined\n let isEditing = getIsEditing({ id: idFromArgs, collectionSlug, globalSlug })\n\n // Fetch the doc required for the view\n let doc =\n !idFromArgs && !globalSlug\n ? initialData || null\n : await getDocumentData({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n locale,\n payload,\n req,\n segments,\n user,\n })\n\n if (isEditing && !doc) {\n // If it's a collection document that doesn't exist, redirect to collection list\n if (collectionSlug) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}?notFound=${encodeURIComponent(idFromArgs)}`,\n })\n req.server.redirect(redirectURL)\n } else {\n // For globals or other cases, keep the 404 behavior\n throw new Error('not-found')\n }\n }\n\n const isTrashedDoc = Boolean(doc && 'deletedAt' in doc && typeof doc?.deletedAt === 'string')\n\n // CRITICAL FIX FOR TRANSACTION RACE CONDITION:\n // When running parallel operations with Promise.all, if they share the same req object\n // and one operation calls initTransaction() which MUTATES req.transactionID, that mutation\n // is visible to all parallel operations. This causes:\n // 1. Operation A (e.g., getDocumentPermissions → docAccessOperation) calls initTransaction()\n // which sets req.transactionID = Promise, then resolves it to a UUID\n // 2. Operation B (e.g., getIsLocked) running in parallel receives the SAME req with the mutated transactionID\n // 3. Operation A (does not even know that Operation B even exists and is stil using the transactionID) commits/ends its transaction\n // 4. Operation B tries to use the now-expired session → MongoExpiredSessionError!\n //\n // Solution: Use isolateObjectProperty to create a Proxy that isolates the 'transactionID' property.\n // This allows each operation to have its own transactionID without affecting the parent req.\n // If parent req already has a transaction, preserve it (don't isolate), since this\n // issue only arises when one of the operations calls initTransaction() themselves -\n // because then, that operation will also try to commit/end the transaction itself.\n\n // If the transactionID is already set, the parallel operations will not try to\n // commit/end the transaction themselves, so we don't need to isolate the\n // transactionID property.\n const reqForPermissions = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n const reqForLockCheck = req.transactionID ? req : isolateObjectProperty(req, 'transactionID')\n\n const [\n docPreferences,\n {\n docPermissions,\n hasDeletePermission,\n hasPublishPermission,\n hasSavePermission,\n hasTrashPermission,\n },\n { currentEditor, isLocked, lastUpdateTime },\n entityPreferences,\n ] = await Promise.all([\n // Get document preferences\n getDocPreferences({\n id: idFromArgs,\n collectionSlug,\n globalSlug,\n payload,\n user,\n }),\n\n // Get permissions - isolated transactionID prevents cross-contamination\n getDocumentPermissions({\n id: idFromArgs,\n collectionConfig,\n data: doc,\n globalConfig,\n req: reqForPermissions,\n }),\n\n // Fetch document lock state - isolated transactionID prevents cross-contamination\n getIsLocked({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n isEditing,\n req: reqForLockCheck,\n }),\n\n // get entity preferences\n getPreferences<CollectionPreferences>(\n collectionSlug ? `collection-${collectionSlug}` : `global-${globalSlug}`,\n payload,\n req.user.id,\n req.user.collection,\n ),\n ])\n\n const operation = (collectionSlug && idFromArgs) || globalSlug ? 'update' : 'create'\n\n // Record the document as recently viewed (collections only, never on the create route or for\n // trashed docs). Runs concurrently with the work below and never throws.\n const recentlyViewedPromise =\n collectionSlug && idFromArgs && doc && !isTrashedDoc\n ? recordRecentlyViewed({ id: idFromArgs, collectionSlug, req })\n : undefined\n\n const [\n { hasPublishedDoc, mostRecentVersionIsAutosaved, unpublishedVersionCount, versionCount },\n { state: formState },\n hasScheduledPublish,\n ] = await Promise.all([\n getVersions({\n id: idFromArgs,\n collectionConfig,\n doc,\n docPermissions,\n globalConfig,\n locale: locale?.code,\n payload,\n user,\n }),\n buildFormState({\n id: idFromArgs,\n collectionSlug,\n data: doc,\n docPermissions,\n docPreferences,\n fallbackLocale: false,\n globalSlug,\n locale: locale?.code,\n operation,\n readOnly: isTrashedDoc || isLocked,\n renderAllFields: true,\n req,\n schemaPath: collectionSlug || globalSlug,\n skipValidation: true,\n }),\n getHasScheduledPublish({\n id: idFromArgs,\n collectionConfig,\n globalConfig,\n hasPublishPermission,\n payload,\n }),\n ])\n\n await recentlyViewedPromise\n\n const documentViewServerProps: DocumentViewServerPropsOnly = {\n doc,\n hasPublishedDoc,\n i18n,\n initPageResult,\n locale,\n params,\n payload,\n permissions,\n routeSegments: segments,\n searchParams,\n server: req.server,\n user,\n versions,\n }\n\n if (\n !overrideEntityVisibility &&\n ((collectionSlug &&\n !visibleEntities?.collections?.find((visibleSlug) => visibleSlug === collectionSlug)) ||\n (globalSlug && !visibleEntities?.globals?.find((visibleSlug) => visibleSlug === globalSlug)))\n ) {\n throw new Error('not-found')\n }\n\n const formattedParams = new URLSearchParams()\n\n if (hasDraftsEnabled(collectionConfig || globalConfig)) {\n formattedParams.append('draft', 'true')\n }\n\n if (locale?.code) {\n formattedParams.append('locale', locale.code)\n }\n\n const apiQueryParams = `?${formattedParams.toString()}`\n\n const apiURL = formatAdminURL({\n apiRoute,\n path: collectionSlug\n ? `/${collectionSlug}/${idFromArgs}${apiQueryParams}`\n : globalSlug\n ? `/${globalSlug}${apiQueryParams}`\n : '',\n })\n\n let View: ViewToRender = null\n\n let showHeader = true\n\n const RootViewOverride =\n collectionConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in collectionConfig.admin.components.views.edit.root\n ? collectionConfig?.admin?.components?.views?.edit?.root?.Component\n : globalConfig?.admin?.components?.views?.edit?.root &&\n 'Component' in globalConfig.admin.components.views.edit.root\n ? globalConfig?.admin?.components?.views?.edit?.root?.Component\n : null\n\n if (RootViewOverride) {\n View = RootViewOverride\n showHeader = false\n } else {\n ;({ View } = getDocumentView({\n collectionConfig,\n config,\n docPermissions,\n globalConfig,\n routeSegments: segments,\n }))\n\n if (View === UnauthorizedViewWithGutter) {\n showHeader = false\n }\n }\n\n if (!View) {\n View = NotFoundView as React.FC<AdminViewServerProps>\n }\n\n /**\n * Handle case where autoSave is enabled and the document is being created\n * => create document and redirect\n */\n const shouldAutosave = hasSavePermission && hasAutosaveEnabled(collectionConfig || globalConfig)\n\n const validateDraftData =\n collectionConfig?.versions?.drafts && collectionConfig?.versions?.drafts?.validate\n\n let id = idFromArgs\n\n if (shouldAutosave && !validateDraftData && !idFromArgs && collectionSlug) {\n doc = await payload.create({\n collection: collectionSlug,\n data: initialData || {},\n depth: 0,\n draft: true,\n fallbackLocale: false,\n locale: locale?.code,\n req,\n user,\n })\n\n if (doc?.id) {\n id = doc.id\n isEditing = getIsEditing({ id: doc.id, collectionSlug, globalSlug })\n\n if (!drawerSlug && redirectAfterCreate !== false) {\n const redirectURL = formatAdminURL({\n adminRoute,\n path: `/collections/${collectionSlug}/${doc.id}`,\n })\n\n req.server.redirect(redirectURL)\n }\n } else {\n throw new Error('not-found')\n }\n }\n\n const documentSlots = renderDocumentSlots({\n id,\n collectionConfig,\n doc: doc as Record<string, unknown>,\n globalConfig,\n hasSavePermission,\n locale,\n permissions,\n req,\n })\n\n // Extract Description from documentSlots to pass to DocumentHeader\n const { Description } = documentSlots\n\n const clientProps: DocumentViewClientProps = {\n formState,\n ...documentSlots,\n documentSubViewType,\n viewType,\n }\n\n const { isLivePreviewEnabled, livePreviewConfig, livePreviewURL } = await handleLivePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n const { isPreviewEnabled, previewURL } = await handlePreview({\n collectionSlug,\n config,\n data: doc,\n globalSlug,\n operation,\n req,\n })\n\n return {\n data: doc,\n Document: (\n <DocumentInfoProvider\n apiURL={apiURL}\n collectionSlug={collectionConfig?.slug}\n currentEditor={currentEditor}\n disableActions={disableActions ?? false}\n docPermissions={docPermissions}\n globalSlug={globalConfig?.slug}\n hasDeletePermission={hasDeletePermission}\n hasPublishedDoc={hasPublishedDoc}\n hasPublishPermission={hasPublishPermission}\n hasSavePermission={hasSavePermission}\n hasScheduledPublish={hasScheduledPublish}\n hasTrashPermission={hasTrashPermission}\n id={id}\n initialData={doc}\n initialState={formState}\n isEditing={isEditing}\n isLocked={isLocked}\n isTrashed={isTrashedDoc}\n key={locale?.code}\n lastUpdateTime={lastUpdateTime}\n mostRecentVersionIsAutosaved={mostRecentVersionIsAutosaved}\n redirectAfterCreate={redirectAfterCreate}\n redirectAfterDelete={redirectAfterDelete}\n redirectAfterDuplicate={redirectAfterDuplicate}\n redirectAfterRestore={redirectAfterRestore}\n unpublishedVersionCount={unpublishedVersionCount}\n versionCount={versionCount}\n >\n <LivePreviewProvider\n breakpoints={livePreviewConfig?.breakpoints}\n isLivePreviewEnabled={isLivePreviewEnabled && operation !== 'create'}\n isLivePreviewing={Boolean(\n (entityPreferences?.value?.editViewType === undefined\n ? livePreviewConfig?.openByDefault\n : entityPreferences.value.editViewType === 'live-preview') && livePreviewURL,\n )}\n isPreviewEnabled={Boolean(isPreviewEnabled)}\n previewURL={previewURL}\n typeofLivePreviewURL={typeof livePreviewConfig?.url as 'function' | 'string' | undefined}\n url={livePreviewURL}\n >\n {showHeader && !drawerSlug && (\n <DocumentHeader\n AfterHeader={Description}\n collectionConfig={collectionConfig}\n globalConfig={globalConfig}\n permissions={permissions}\n req={req}\n />\n )}\n <HydrateAuthProvider permissions={permissions} />\n <EditDepthProvider>\n {RenderServerComponent({\n clientProps,\n Component: View,\n importMap,\n serverProps: documentViewServerProps,\n })}\n </EditDepthProvider>\n </LivePreviewProvider>\n </DocumentInfoProvider>\n ),\n }\n}\n\nexport async function DocumentView(props: AdminViewServerProps) {\n try {\n const { Document: RenderedDocument } = await renderDocument(props)\n return RenderedDocument\n } catch (error) {\n if (error?.message === 'NEXT_REDIRECT') {\n throw error\n }\n\n // The TanStack adapter's `req.server.redirect()` throws `redirect:<url>` as a\n // control-flow signal — the target is already recorded on `req.server` and\n // honored upstream in `loadAdminPage`. It isn't a real error, so swallow it\n // without logging, mirroring the `NEXT_REDIRECT` guard above.\n if (error?.message?.startsWith('redirect:')) {\n return\n }\n\n logError({ err: error, payload: props.initPageResult.req.payload })\n\n if (error.message === 'not-found') {\n props.initPageResult.req.server.notFound()\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AASvF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC,CAkCA,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAA;AASvF,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC;IACtC,gBAAgB,CAAC,EAAE,sBAAsB,CAAA;IACzC,MAAM,CAAC,EAAE,YAAY,CAAA;IACrB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,kBAAkB,CAAA;CAClC,CAuCA,CAAA"}
@@ -69,7 +69,10 @@ export const SetDocumentTitle = props => {
69
69
  hasInitialized.current = true;
70
70
  return;
71
71
  }
72
- setDocumentTitle(title);
72
+ const animationFrame = requestAnimationFrame(() => {
73
+ setDocumentTitle(title);
74
+ });
75
+ return () => cancelAnimationFrame(animationFrame);
73
76
  };
74
77
  t4 = [setDocumentTitle, title];
75
78
  $[10] = setDocumentTitle;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useEffect","useRef","useFormFields","useDocumentTitle","useTranslation","formatDocTitle","SetDocumentTitle","props","$","collectionConfig","config","fallback","globalConfig","useAsTitle","admin","t0","t1","fields","field","hasInitialized","i18n","setDocumentTitle","dateFormatFromConfig","dateFormat","value","t2","data","id","title","t3","t4","current"],"sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig } from 'payload'\n\nimport { useEffect, useRef } from 'react'\n\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../../utilities/formatDocTitle/index.js'\n\nexport const SetDocumentTitle: React.FC<{\n collectionConfig?: ClientCollectionConfig\n config?: ClientConfig\n fallback: string\n globalConfig?: ClientGlobalConfig\n}> = (props) => {\n const { collectionConfig, config, fallback, globalConfig } = props\n\n const useAsTitle = collectionConfig?.admin?.useAsTitle\n\n const field = useFormFields(([fields]) => (useAsTitle && fields && fields?.[useAsTitle]) || null)\n\n const hasInitialized = useRef(false)\n\n const { i18n } = useTranslation()\n\n const { setDocumentTitle } = useDocumentTitle()\n\n const dateFormatFromConfig = config?.admin?.dateFormat\n\n const title = formatDocTitle({\n collectionConfig,\n data: { id: '', [useAsTitle]: field?.value || '' },\n dateFormat: dateFormatFromConfig,\n fallback,\n globalConfig,\n i18n,\n })\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n setDocumentTitle(title)\n }, [setDocumentTitle, title])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,SAAS,EAAEC,MAAM,QAAQ;AAElC,SAASC,aAAa,QAAQ;AAC9B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,gBAAA,GAKRC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EACH;IAAAU,gBAAA;IAAAC,MAAA;IAAAC,QAAA;IAAAC;EAAA,IAA6DL,KAAA;EAE7D,MAAAM,UAAA,GAAmBJ,gBAAA,EAAAK,KAAA,EAAAD,UAAA;EAAyB,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAK,UAAA;IAEhBE,EAAA,GAAAC,EAAA;MAAC,OAAAC,MAAA,IAAAD,EAAQ;MAAA,OAAKH,UAAC,IAAcI,MAAA,IAAUA,MAAA,GAASJ,UAAA,CAAW,QAAK;IAAA;IAAAL,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA5F,MAAAU,KAAA,GAAchB,aAAA,CAAca,EAAgE;EAE5F,MAAAI,cAAA,GAAuBlB,MAAA,MAAO;EAE9B;IAAAmB;EAAA,IAAiBhB,cAAA;EAEjB;IAAAiB;EAAA,IAA6BlB,gBAAA;EAE7B,MAAAmB,oBAAA,GAA6BZ,MAAA,EAAAI,KAAA,EAAAS,UAAA;EAIG,MAAAP,EAAA,GAAAE,KAAA,EAAAM,KAAA,IAAgB;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,QAAAC,gBAAA,IAAAD,CAAA,QAAAc,oBAAA,IAAAd,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAY,IAAA,IAAAZ,CAAA,QAAAQ,EAAA,IAAAR,CAAA,QAAAK,UAAA;IAFlCY,EAAA,GAAApB,cAAA;MAAAI,gBAAA;MAAAiB,IAAA;QAAAC,EAAA,EAEA;QAAA,CAAKd,UAAA,GAAaG;MAAgB;MAAAO,UAAA,EAClCD,oBAAA;MAAAX,QAAA;MAAAC,YAAA;MAAAQ;IAAA,CAId;IAAAZ,CAAA,MAAAC,gBAAA;IAAAD,CAAA,MAAAc,oBAAA;IAAAd,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAY,IAAA;IAAAZ,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAPA,MAAAoB,KAAA,GAAcH,EAOd;EAAA,IAAAI,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtB,CAAA,SAAAa,gBAAA,IAAAb,CAAA,SAAAoB,KAAA;IAEUC,EAAA,GAAAA,CAAA;MAAA,KACHV,cAAA,CAAAY,OAAA;QACHZ,cAAA,CAAAY,OAAA;QAAA;MAAA;MAIFV,gBAAA,CAAiBO,KAAA;IAAA;IAChBE,EAAA,IAACT,gBAAA,EAAkBO,KAAA;IAAMpB,CAAA,OAAAa,gBAAA;IAAAb,CAAA,OAAAoB,KAAA;IAAApB,CAAA,OAAAqB,EAAA;IAAArB,CAAA,OAAAsB,EAAA;EAAA;IAAAD,EAAA,GAAArB,CAAA;IAAAsB,EAAA,GAAAtB,CAAA;EAAA;EAP5BR,SAAA,CAAU6B,EAOV,EAAGC,EAAyB;EAAA;AAAA,CAG9B","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useEffect","useRef","useFormFields","useDocumentTitle","useTranslation","formatDocTitle","SetDocumentTitle","props","$","collectionConfig","config","fallback","globalConfig","useAsTitle","admin","t0","t1","fields","field","hasInitialized","i18n","setDocumentTitle","dateFormatFromConfig","dateFormat","value","t2","data","id","title","t3","t4","current","animationFrame","requestAnimationFrame","cancelAnimationFrame"],"sources":["../../../../src/views/Edit/SetDocumentTitle/index.tsx"],"sourcesContent":["'use client'\nimport type { ClientCollectionConfig, ClientConfig, ClientGlobalConfig } from 'payload'\n\nimport { useEffect, useRef } from 'react'\n\nimport { useFormFields } from '../../../forms/Form/context.js'\nimport { useDocumentTitle } from '../../../providers/DocumentTitle/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { formatDocTitle } from '../../../utilities/formatDocTitle/index.js'\n\nexport const SetDocumentTitle: React.FC<{\n collectionConfig?: ClientCollectionConfig\n config?: ClientConfig\n fallback: string\n globalConfig?: ClientGlobalConfig\n}> = (props) => {\n const { collectionConfig, config, fallback, globalConfig } = props\n\n const useAsTitle = collectionConfig?.admin?.useAsTitle\n\n const field = useFormFields(([fields]) => (useAsTitle && fields && fields?.[useAsTitle]) || null)\n\n const hasInitialized = useRef(false)\n\n const { i18n } = useTranslation()\n\n const { setDocumentTitle } = useDocumentTitle()\n\n const dateFormatFromConfig = config?.admin?.dateFormat\n\n const title = formatDocTitle({\n collectionConfig,\n data: { id: '', [useAsTitle]: field?.value || '' },\n dateFormat: dateFormatFromConfig,\n fallback,\n globalConfig,\n i18n,\n })\n\n useEffect(() => {\n if (!hasInitialized.current) {\n hasInitialized.current = true\n return\n }\n\n // Coalesce rapid field changes before updating the title and step navigation contexts.\n const animationFrame = requestAnimationFrame(() => {\n setDocumentTitle(title)\n })\n\n return () => cancelAnimationFrame(animationFrame)\n }, [setDocumentTitle, title])\n\n return null\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;AAGA,SAASC,SAAS,EAAEC,MAAM,QAAQ;AAElC,SAASC,aAAa,QAAQ;AAC9B,SAASC,gBAAgB,QAAQ;AACjC,SAASC,cAAc,QAAQ;AAC/B,SAASC,cAAc,QAAQ;AAE/B,OAAO,MAAMC,gBAAA,GAKRC,KAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EACH;IAAAU,gBAAA;IAAAC,MAAA;IAAAC,QAAA;IAAAC;EAAA,IAA6DL,KAAA;EAE7D,MAAAM,UAAA,GAAmBJ,gBAAA,EAAAK,KAAA,EAAAD,UAAA;EAAyB,IAAAE,EAAA;EAAA,IAAAP,CAAA,QAAAK,UAAA;IAEhBE,EAAA,GAAAC,EAAA;MAAC,OAAAC,MAAA,IAAAD,EAAQ;MAAA,OAAKH,UAAC,IAAcI,MAAA,IAAUA,MAAA,GAASJ,UAAA,CAAW,QAAK;IAAA;IAAAL,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAA5F,MAAAU,KAAA,GAAchB,aAAA,CAAca,EAAgE;EAE5F,MAAAI,cAAA,GAAuBlB,MAAA,MAAO;EAE9B;IAAAmB;EAAA,IAAiBhB,cAAA;EAEjB;IAAAiB;EAAA,IAA6BlB,gBAAA;EAE7B,MAAAmB,oBAAA,GAA6BZ,MAAA,EAAAI,KAAA,EAAAS,UAAA;EAIG,MAAAP,EAAA,GAAAE,KAAA,EAAAM,KAAA,IAAgB;EAAA,IAAAC,EAAA;EAAA,IAAAjB,CAAA,QAAAC,gBAAA,IAAAD,CAAA,QAAAc,oBAAA,IAAAd,CAAA,QAAAG,QAAA,IAAAH,CAAA,QAAAI,YAAA,IAAAJ,CAAA,QAAAY,IAAA,IAAAZ,CAAA,QAAAQ,EAAA,IAAAR,CAAA,QAAAK,UAAA;IAFlCY,EAAA,GAAApB,cAAA;MAAAI,gBAAA;MAAAiB,IAAA;QAAAC,EAAA,EAEA;QAAA,CAAKd,UAAA,GAAaG;MAAgB;MAAAO,UAAA,EAClCD,oBAAA;MAAAX,QAAA;MAAAC,YAAA;MAAAQ;IAAA,CAId;IAAAZ,CAAA,MAAAC,gBAAA;IAAAD,CAAA,MAAAc,oBAAA;IAAAd,CAAA,MAAAG,QAAA;IAAAH,CAAA,MAAAI,YAAA;IAAAJ,CAAA,MAAAY,IAAA;IAAAZ,CAAA,MAAAQ,EAAA;IAAAR,CAAA,MAAAK,UAAA;IAAAL,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAPA,MAAAoB,KAAA,GAAcH,EAOd;EAAA,IAAAI,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtB,CAAA,SAAAa,gBAAA,IAAAb,CAAA,SAAAoB,KAAA;IAEUC,EAAA,GAAAA,CAAA;MAAA,KACHV,cAAA,CAAAY,OAAA;QACHZ,cAAA,CAAAY,OAAA;QAAA;MAAA;MAKF,MAAAC,cAAA,GAAuBC,qBAAA;QACrBZ,gBAAA,CAAiBO,KAAA;MAAA,CACnB;MAAA,aAEaM,oBAAA,CAAqBF,cAAA;IAAA;IACjCF,EAAA,IAACT,gBAAA,EAAkBO,KAAA;IAAMpB,CAAA,OAAAa,gBAAA;IAAAb,CAAA,OAAAoB,KAAA;IAAApB,CAAA,OAAAqB,EAAA;IAAArB,CAAA,OAAAsB,EAAA;EAAA;IAAAD,EAAA,GAAArB,CAAA;IAAAsB,EAAA,GAAAtB,CAAA;EAAA;EAZ5BR,SAAA,CAAU6B,EAYV,EAAGC,EAAyB;EAAA;AAAA,CAG9B","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAQ,MAAM,SAAS,CAAA;AAG5D,OAAO,KAA4D,MAAM,OAAO,CAAA;AAsChF,OAAO,aAAa,CAAA;AAKpB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,MAAM,EAAE,YAAY,EACpB,cAAc,EACd,iBAAiB,GAClB,EAAE,uBAAuB,qBAixBzB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/Edit/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,uBAAuB,EAAQ,MAAM,SAAS,CAAA;AAG5D,OAAO,KAA4D,MAAM,OAAO,CAAA;AAsChF,OAAO,aAAa,CAAA;AAKpB,MAAM,MAAM,aAAa,GAAG;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC,CAAA;AAKD,wBAAgB,eAAe,CAAC,EAC9B,sBAAsB,EACtB,kBAAkB,EAClB,WAAW,EACX,aAAa,EACb,WAAW,EAAE,iBAAiB,EAC9B,aAAa,EACb,aAAa,EACb,UAAU,EACV,eAAe,EACf,MAAM,EACN,eAAe,EACf,MAAM,EAAE,YAAY,EACpB,cAAc,EACd,iBAAiB,GAClB,EAAE,uBAAuB,qBAqxBzB"}
@@ -379,7 +379,7 @@ export function DefaultEditView({
379
379
  // Check for stale data on first edit only
380
380
  // Skip this check entirely for autosave-enabled collections/globals to prevent
381
381
  // false positives from the user's own autosaves
382
- const checkForStaleData = !hasCheckedForStaleDataRef.current && originalUpdatedAtRef.current && operation === 'update' && !autosaveEnabled;
382
+ const checkForStaleData = !hasCheckedForStaleDataRef.current && originalUpdatedAtRef.current && operation === 'update' && !isTrashed && !autosaveEnabled;
383
383
  if (checkForStaleData) {
384
384
  hasCheckedForStaleDataRef.current = true;
385
385
  }
@@ -394,6 +394,7 @@ export function DefaultEditView({
394
394
  globalSlug,
395
395
  operation,
396
396
  originalUpdatedAt: checkForStaleData ? originalUpdatedAtRef.current : undefined,
397
+ readOnly: isTrashed || isReadOnlyForIncomingUser,
397
398
  renderAllFields: false,
398
399
  returnLockStatus: isLockingEnabled,
399
400
  schemaPath: schemaPathSegments.join('.'),
@@ -420,7 +421,7 @@ export function DefaultEditView({
420
421
  }
421
422
  abortOnChangeRef.current = null;
422
423
  return state_0;
423
- }, [data?.updatedAt, editSessionStartTime, isLockingEnabled, getDocPreferences, getFormState, id, collectionSlug, docPermissions, globalSlug, operation, schemaPathSegments, handleDocumentLocking, autosaveEnabled]);
424
+ }, [data?.updatedAt, editSessionStartTime, isLockingEnabled, getDocPreferences, getFormState, id, collectionSlug, docPermissions, globalSlug, operation, schemaPathSegments, handleDocumentLocking, autosaveEnabled, isTrashed, isReadOnlyForIncomingUser]);
424
425
  // Clean up when the component unmounts or when the document is unlocked
425
426
  useEffect(() => {
426
427
  return () => {