@payloadcms/ui 4.0.0-internal.e55ccef → 4.0.0-internal.f11981a

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 (361) hide show
  1. package/dist/css/app.css +121 -0
  2. package/dist/css/forms.css +0 -6
  3. package/dist/css/spacing.css +11 -3
  4. package/dist/css/z-index.css +1 -0
  5. package/dist/elements/AddNewRelation/index.css +0 -1
  6. package/dist/elements/AppHeader/index.css +0 -3
  7. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  8. package/dist/elements/AppHeader/index.js +5 -1
  9. package/dist/elements/AppHeader/index.js.map +1 -1
  10. package/dist/elements/ArrayAction/index.d.ts +2 -0
  11. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  12. package/dist/elements/ArrayAction/index.js +65 -24
  13. package/dist/elements/ArrayAction/index.js.map +1 -1
  14. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +2 -2
  15. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  16. package/dist/elements/BulkUpload/FileSidebar/index.css +4 -0
  17. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +2 -2
  18. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  19. package/dist/elements/BulkUpload/FormsManager/createFormData.js +4 -15
  20. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  21. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  22. package/dist/elements/BulkUpload/FormsManager/index.js +1 -1
  23. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  24. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts +8 -1
  25. package/dist/elements/ClipboardAction/clipboardUtilities.d.ts.map +1 -1
  26. package/dist/elements/ClipboardAction/clipboardUtilities.js +40 -8
  27. package/dist/elements/ClipboardAction/clipboardUtilities.js.map +1 -1
  28. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +120 -0
  29. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +1 -0
  30. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  31. package/dist/elements/ClipboardAction/index.js +17 -1
  32. package/dist/elements/ClipboardAction/index.js.map +1 -1
  33. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +144 -0
  34. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +1 -0
  35. package/dist/elements/ClipboardAction/types.d.ts +3 -0
  36. package/dist/elements/ClipboardAction/types.d.ts.map +1 -1
  37. package/dist/elements/ClipboardAction/types.js.map +1 -1
  38. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts +10 -0
  39. package/dist/elements/ClipboardAction/useCanPasteClipboard.d.ts.map +1 -0
  40. package/dist/elements/ClipboardAction/useCanPasteClipboard.js +21 -0
  41. package/dist/elements/ClipboardAction/useCanPasteClipboard.js.map +1 -0
  42. package/dist/elements/CodeEditor/index.css +0 -5
  43. package/dist/elements/CommandPalette/index.css +0 -7
  44. package/dist/elements/CopyToClipboard/index.d.ts +1 -0
  45. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  46. package/dist/elements/CopyToClipboard/index.js +10 -8
  47. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  48. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  49. package/dist/elements/CreateDocumentButton/index.js +4 -1
  50. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  51. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  52. package/dist/elements/DatePicker/DatePicker.js +1 -0
  53. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  54. package/dist/elements/DatePicker/index.css +1 -1
  55. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  56. package/dist/elements/DeleteDocument/index.js +16 -1
  57. package/dist/elements/DeleteDocument/index.js.map +1 -1
  58. package/dist/elements/EditMany/DrawerContent.js +2 -2
  59. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  60. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  61. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  62. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  63. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  64. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  65. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  66. package/dist/elements/FileManager/FilePreview/index.css +3 -3
  67. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  68. package/dist/elements/FileManager/FileToolbar/index.js +3 -0
  69. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  70. package/dist/elements/FileManager/index.css +36 -23
  71. package/dist/elements/FileManager/index.d.ts +1 -1
  72. package/dist/elements/FileManager/index.d.ts.map +1 -1
  73. package/dist/elements/FileManager/index.js +15 -4
  74. package/dist/elements/FileManager/index.js.map +1 -1
  75. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +0 -1
  76. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  77. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +109 -89
  78. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  79. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  80. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +2 -0
  81. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  82. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +0 -1
  83. package/dist/elements/InputStepper/index.css +0 -1
  84. package/dist/elements/Locked/index.css +0 -8
  85. package/dist/elements/Locked/index.d.ts.map +1 -1
  86. package/dist/elements/Locked/index.js +70 -64
  87. package/dist/elements/Locked/index.js.map +1 -1
  88. package/dist/elements/MiniCarousel/index.css +39 -37
  89. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  90. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  91. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  92. package/dist/elements/Nav/SidebarTabs/index.css +0 -5
  93. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  94. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  95. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  96. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  97. package/dist/elements/NavGroup/index.css +0 -1
  98. package/dist/elements/PreviewButton/index.d.ts +1 -2
  99. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  100. package/dist/elements/PreviewButton/index.js +11 -5
  101. package/dist/elements/PreviewButton/index.js.map +1 -1
  102. package/dist/elements/PreviewSizes/index.css +8 -9
  103. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  104. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  105. package/dist/elements/ReactSelect/MultiValueLabel/index.css +2 -2
  106. package/dist/elements/ReactSelect/index.css +0 -3
  107. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  108. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  109. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  110. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  111. package/dist/elements/RelationshipTable/index.css +0 -2
  112. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  113. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  114. package/dist/elements/RelationshipTable/index.js +36 -3
  115. package/dist/elements/RelationshipTable/index.js.map +1 -1
  116. package/dist/elements/RenderTitle/index.css +4 -0
  117. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  118. package/dist/elements/RenderTitle/index.js +18 -13
  119. package/dist/elements/RenderTitle/index.js.map +1 -1
  120. package/dist/elements/SelectRow/index.d.ts +4 -3
  121. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  122. package/dist/elements/SelectRow/index.js +10 -7
  123. package/dist/elements/SelectRow/index.js.map +1 -1
  124. package/dist/elements/SidebarToggle/index.css +0 -17
  125. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  126. package/dist/elements/SortColumn/index.js +42 -38
  127. package/dist/elements/SortColumn/index.js.map +1 -1
  128. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  129. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  130. package/dist/elements/Table/OrderableRow.js +17 -1
  131. package/dist/elements/Table/OrderableRow.js.map +1 -1
  132. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  133. package/dist/elements/Table/OrderableTable.js +19 -2
  134. package/dist/elements/Table/OrderableTable.js.map +1 -1
  135. package/dist/elements/Table/index.css +1 -0
  136. package/dist/elements/TableSection/index.css +0 -1
  137. package/dist/elements/Thumbnail/index.d.ts +1 -1
  138. package/dist/elements/Thumbnail/index.d.ts.map +1 -1
  139. package/dist/elements/Thumbnail/index.js.map +1 -1
  140. package/dist/elements/TimezonePicker/index.d.ts.map +1 -1
  141. package/dist/elements/TimezonePicker/index.js +5 -1
  142. package/dist/elements/TimezonePicker/index.js.map +1 -1
  143. package/dist/elements/Tooltip/index.css +15 -34
  144. package/dist/elements/Tooltip/index.d.ts +11 -3
  145. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  146. package/dist/elements/Tooltip/index.js +151 -85
  147. package/dist/elements/Tooltip/index.js.map +1 -1
  148. package/dist/elements/Upload/index.css +0 -5
  149. package/dist/exports/client/index.d.ts +5 -1
  150. package/dist/exports/client/index.d.ts.map +1 -1
  151. package/dist/exports/client/index.js +1 -1
  152. package/dist/exports/client/index.js.map +3 -3
  153. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  154. package/dist/fields/Array/ArrayRow.js +97 -160
  155. package/dist/fields/Array/ArrayRow.js.map +1 -1
  156. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  157. package/dist/fields/Blocks/BlockRow.js +134 -195
  158. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  159. package/dist/fields/Blocks/RowActions.d.ts +2 -0
  160. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  161. package/dist/fields/Blocks/RowActions.js +23 -20
  162. package/dist/fields/Blocks/RowActions.js.map +1 -1
  163. package/dist/fields/Blocks/index.js +3 -3
  164. package/dist/fields/Blocks/index.js.map +1 -1
  165. package/dist/fields/Checkbox/Input.d.ts +2 -0
  166. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  167. package/dist/fields/Checkbox/Input.js +32 -26
  168. package/dist/fields/Checkbox/Input.js.map +1 -1
  169. package/dist/fields/Checkbox/index.css +37 -73
  170. package/dist/fields/FieldError/index.css +0 -9
  171. package/dist/fields/FieldError/index.d.ts.map +1 -1
  172. package/dist/fields/FieldError/index.js +19 -9
  173. package/dist/fields/FieldError/index.js.map +1 -1
  174. package/dist/fields/Join/index.css +9 -0
  175. package/dist/fields/Join/index.d.ts.map +1 -1
  176. package/dist/fields/Join/index.js +13 -9
  177. package/dist/fields/Join/index.js.map +1 -1
  178. package/dist/fields/RadioGroup/index.css +0 -7
  179. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  180. package/dist/fields/Relationship/Input.js +32 -14
  181. package/dist/fields/Relationship/Input.js.map +1 -1
  182. package/dist/fields/Relationship/select-components/MultiValueLabel/index.css +1 -1
  183. package/dist/fields/Slug/index.css +0 -1
  184. package/dist/fields/Slug/index.d.ts.map +1 -1
  185. package/dist/fields/Slug/index.js +75 -111
  186. package/dist/fields/Slug/index.js.map +1 -1
  187. package/dist/fields/Upload/index.css +19 -4
  188. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  189. package/dist/forms/Form/fieldReducer.js +3 -1
  190. package/dist/forms/Form/fieldReducer.js.map +1 -1
  191. package/dist/forms/Form/index.d.ts.map +1 -1
  192. package/dist/forms/Form/index.js +12 -15
  193. package/dist/forms/Form/index.js.map +1 -1
  194. package/dist/forms/Form/types.d.ts +1 -1
  195. package/dist/forms/Form/types.d.ts.map +1 -1
  196. package/dist/forms/Form/types.js.map +1 -1
  197. package/dist/forms/RenderFields/index.css +16 -2
  198. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  199. package/dist/forms/WatchChildErrors/index.js +2 -2
  200. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  201. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
  202. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  203. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  204. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  205. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  206. package/dist/layouts/Root/index.d.ts +1 -1
  207. package/dist/layouts/Root/index.d.ts.map +1 -1
  208. package/dist/layouts/Root/index.js +8 -2
  209. package/dist/layouts/Root/index.js.map +1 -1
  210. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  211. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  212. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  213. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  214. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  215. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  216. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  217. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  218. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  219. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  220. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  221. package/dist/providers/Auth/authSessionRequests.js +119 -0
  222. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  223. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  224. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  225. package/dist/providers/Auth/index.d.ts +2 -56
  226. package/dist/providers/Auth/index.d.ts.map +1 -1
  227. package/dist/providers/Auth/index.js +283 -135
  228. package/dist/providers/Auth/index.js.map +1 -1
  229. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  230. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  231. package/dist/providers/Auth/sessionActivity.js +49 -0
  232. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  233. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  234. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  235. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  236. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  237. package/dist/providers/Auth/sessionTiming.js +18 -0
  238. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  239. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  240. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  241. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  242. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  243. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  244. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  245. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  246. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  247. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  248. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  249. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  250. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  251. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  252. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  253. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  254. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  255. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  256. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  257. package/dist/providers/Auth/types.d.ts +66 -0
  258. package/dist/providers/Auth/types.d.ts.map +1 -0
  259. package/dist/providers/Auth/types.js +2 -0
  260. package/dist/providers/Auth/types.js.map +1 -0
  261. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  262. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  263. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  264. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  265. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  266. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  267. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  268. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  269. package/dist/providers/DocumentTitle/index.js +2 -0
  270. package/dist/providers/DocumentTitle/index.js.map +1 -1
  271. package/dist/providers/Embed/index.d.ts +24 -0
  272. package/dist/providers/Embed/index.d.ts.map +1 -0
  273. package/dist/providers/Embed/index.js +105 -0
  274. package/dist/providers/Embed/index.js.map +1 -0
  275. package/dist/providers/FormErrorHandler/index.d.ts +24 -0
  276. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  277. package/dist/providers/FormErrorHandler/index.js +6 -0
  278. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  279. package/dist/providers/Root/index.d.ts +1 -0
  280. package/dist/providers/Root/index.d.ts.map +1 -1
  281. package/dist/providers/Root/index.js +37 -31
  282. package/dist/providers/Root/index.js.map +1 -1
  283. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  284. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  285. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  286. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  287. package/dist/providers/RouteTransition/index.d.ts +2 -0
  288. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  289. package/dist/providers/RouteTransition/index.js +42 -14
  290. package/dist/providers/RouteTransition/index.js.map +1 -1
  291. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  292. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  293. package/dist/providers/SidebarTabs/index.js.map +1 -1
  294. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  295. package/dist/providers/TableColumns/buildColumnState/index.js +1 -1
  296. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  297. package/dist/providers/TableColumns/buildColumnState/index.spec.js +40 -0
  298. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +1 -0
  299. package/dist/providers/Theme/index.d.ts +3 -0
  300. package/dist/providers/Theme/index.d.ts.map +1 -1
  301. package/dist/providers/Theme/index.js +107 -95
  302. package/dist/providers/Theme/index.js.map +1 -1
  303. package/dist/providers/UploadHandlers/index.d.ts +2 -7
  304. package/dist/providers/UploadHandlers/index.d.ts.map +1 -1
  305. package/dist/providers/UploadHandlers/index.js +102 -42
  306. package/dist/providers/UploadHandlers/index.js.map +1 -1
  307. package/dist/styles.css +13 -10
  308. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  309. package/dist/utilities/combineFieldLabel.js +5 -1
  310. package/dist/utilities/combineFieldLabel.js.map +1 -1
  311. package/dist/utilities/generateFieldID.d.ts +1 -1
  312. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  313. package/dist/utilities/generateFieldID.js +2 -2
  314. package/dist/utilities/generateFieldID.js.map +1 -1
  315. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  316. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  317. package/dist/utilities/getRequestEmbed.js +10 -0
  318. package/dist/utilities/getRequestEmbed.js.map +1 -0
  319. package/dist/utilities/handleServerFunctions.d.ts +32 -8
  320. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  321. package/dist/utilities/handleServerFunctions.js +17 -37
  322. package/dist/utilities/handleServerFunctions.js.map +1 -1
  323. package/dist/utilities/renderTable.d.ts.map +1 -1
  324. package/dist/utilities/renderTable.js +18 -2
  325. package/dist/utilities/renderTable.js.map +1 -1
  326. package/dist/utilities/serverFunctionRegistry.d.ts +12 -7
  327. package/dist/utilities/serverFunctionRegistry.d.ts.map +1 -1
  328. package/dist/utilities/serverFunctionRegistry.js +25 -7
  329. package/dist/utilities/serverFunctionRegistry.js.map +1 -1
  330. package/dist/utilities/slugify.d.ts.map +1 -1
  331. package/dist/utilities/slugify.js +49 -6
  332. package/dist/utilities/slugify.js.map +1 -1
  333. package/dist/views/Dashboard/Default/ModularDashboard/index.css +0 -8
  334. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +4 -4
  335. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  336. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  337. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  338. package/dist/views/Edit/index.css +61 -53
  339. package/dist/views/HierarchyList/index.css +1 -1
  340. package/dist/views/List/index.css +1 -1
  341. package/dist/views/List/index.d.ts.map +1 -1
  342. package/dist/views/List/index.js +4 -0
  343. package/dist/views/List/index.js.map +1 -1
  344. package/dist/views/Logout/index.d.ts.map +1 -1
  345. package/dist/views/Logout/index.js +11 -0
  346. package/dist/views/Logout/index.js.map +1 -1
  347. package/dist/views/Root/index.d.ts +12 -1
  348. package/dist/views/Root/index.d.ts.map +1 -1
  349. package/dist/views/Root/index.js +10 -3
  350. package/dist/views/Root/index.js.map +1 -1
  351. package/package.json +6 -11
  352. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  353. package/dist/scss/app.scss +0 -183
  354. package/dist/scss/colors.scss +0 -191
  355. package/dist/scss/custom.css +0 -1
  356. package/dist/scss/queries.scss +0 -27
  357. package/dist/scss/styles.scss +0 -9
  358. package/dist/scss/svg.scss +0 -10
  359. package/dist/scss/toastify.scss +0 -61
  360. package/dist/scss/vars.scss +0 -192
  361. package/dist/scss/z-index.scss +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"index.client.js","names":["PREFERENCE_KEYS","React","useCallback","useRef","useState","usePreferences","useServerFunctions","SidebarTabsProvider","DelayedSpinner","Tooltip","TabError","SidebarTabsClient","baseClass","initialActiveTabID","initialTabContents","loadingDelay","tabs","setPreference","serverFunction","activeTabID","setActiveTabID","tabContent","setTabContent","loadingTab","setLoadingTab","hoveredTab","setHoveredTab","loadingTabsRef","Set","tabContentRef","useEffect","current","prev","loadTabContent","tabSlug","revalidate","hasCachedContent","Boolean","has","add","result","name","args","newContent","component","error","errorMessage","Error","message","handleRetry","clearedContent","_jsx","onRetry","delete","reloadTabContent","handleTabChange","slug","NAV_SIDEBAR_ACTIVE_TAB","activeTab","tab","find","t","lazyLoadable","handleTabKeyDown","e","currentIndex","key","preventDefault","direction","newIndex","length","newTab","setTimeout","document","querySelector","focus","activeContent","_Fragment","activeTabSlug","_jsxs","className","role","map","index","isActive","onClick","onKeyDown","onMouseEnter","onMouseLeave","tabIndex","type","position","show","label","icon","delay","isLoading","content","style","undefined","display"],"sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useRef, useState } from 'react'\n\nimport type { RenderTabServerFnArgs, RenderTabServerFnReturnType } from './renderTabServerFn.js'\n\nimport { usePreferences } from '../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { SidebarTabsProvider } from '../../../providers/SidebarTabs/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { Tooltip } from '../../Tooltip/index.js'\nimport { TabError } from './TabError/index.js'\n\nexport type TabMetadata = {\n icon: React.ReactNode\n isDefaultActive?: boolean\n label: string\n /** Whether this tab can be loaded/revalidated via serverFunction */\n lazyLoadable?: boolean\n slug: string\n}\n\nexport type SidebarTabsClientProps = {\n baseClass: string\n initialActiveTabID: string\n initialTabContents: Record<string, React.ReactNode>\n /**\n * Delay before showing loading spinner (in ms), prevents flashing on fast loads\n * @default 200\n */\n loadingDelay?: number\n tabs: TabMetadata[]\n}\n\nexport const SidebarTabsClient: React.FC<SidebarTabsClientProps> = ({\n baseClass,\n initialActiveTabID,\n initialTabContents,\n loadingDelay = 200,\n tabs,\n}) => {\n const { setPreference } = usePreferences()\n const { serverFunction } = useServerFunctions()\n\n const [activeTabID, setActiveTabID] = useState(initialActiveTabID)\n const [tabContent, setTabContent] = useState<Record<string, React.ReactNode>>(initialTabContents)\n const [loadingTab, setLoadingTab] = useState<null | string>(null)\n const [hoveredTab, setHoveredTab] = useState<null | string>(null)\n const loadingTabsRef = useRef<Set<string>>(new Set())\n const tabContentRef = useRef(initialTabContents)\n\n // Update cached content when server provides new initialTabContents\n // This is needed because useState only uses initialValue on first mount\n React.useEffect(() => {\n tabContentRef.current = { ...tabContentRef.current, ...initialTabContents }\n setTabContent((prev) => ({ ...prev, ...initialTabContents }))\n }, [initialTabContents])\n\n const loadTabContent = useCallback(\n async (tabSlug: string, { revalidate = false }: { revalidate?: boolean } = {}) => {\n const hasCachedContent = Boolean(tabContentRef.current[tabSlug])\n\n // Skip if already loaded (unless revalidating) or currently loading\n if ((hasCachedContent && !revalidate) || loadingTabsRef.current.has(tabSlug)) {\n return\n }\n\n // Mark as loading - only show spinner if no cached content\n loadingTabsRef.current.add(tabSlug)\n if (!hasCachedContent) {\n setLoadingTab(tabSlug)\n }\n\n try {\n const result = (await serverFunction({\n name: 'render-tab',\n args: { tabSlug } as RenderTabServerFnArgs,\n })) as RenderTabServerFnReturnType\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: result.component,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } catch (error) {\n // On revalidate failure, keep showing cached content\n if (hasCachedContent && revalidate) {\n return\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n const handleRetry = () => {\n // Clear the error and retry loading\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n void loadTabContent(tabSlug)\n }\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: <TabError message={errorMessage} onRetry={handleRetry} />,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } finally {\n loadingTabsRef.current.delete(tabSlug)\n setLoadingTab(null)\n }\n },\n [serverFunction],\n )\n\n const reloadTabContent = useCallback(\n (tabSlug: string) => {\n // Clear cached content to force reload\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n\n void loadTabContent(tabSlug)\n },\n [loadTabContent],\n )\n\n const handleTabChange = useCallback(\n (slug: string) => {\n setActiveTabID(slug)\n void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, { activeTab: slug })\n // Only revalidate tabs that can be loaded via serverFunction\n // Pre-rendered React elements (like default nav) can't be revalidated\n const tab = tabs.find((t) => t.slug === slug)\n void loadTabContent(slug, { revalidate: tab?.lazyLoadable ?? false })\n },\n [setPreference, loadTabContent, tabs],\n )\n\n const handleTabKeyDown = useCallback(\n (e: React.KeyboardEvent, currentIndex: number) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const direction = e.key === 'ArrowLeft' ? -1 : 1\n const newIndex = (currentIndex + direction + tabs.length) % tabs.length\n const newTab = tabs[newIndex]\n handleTabChange(newTab.slug)\n // Focus will be handled by the tabIndex change\n setTimeout(() => {\n document.querySelector<HTMLButtonElement>(`.${baseClass}__tab--active`)?.focus()\n }, 0)\n }\n },\n [baseClass, handleTabChange, tabs],\n )\n\n const activeContent = tabContent[activeTabID]\n\n // If there's only one tab (the default nav), render it without tab UI\n if (tabs.length === 1) {\n return <>{activeContent}</>\n }\n\n return (\n <SidebarTabsProvider activeTabSlug={activeTabID} reloadTabContent={reloadTabContent}>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs`} role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = tab.slug === activeTabID\n\n return (\n <button\n aria-selected={isActive}\n className={`${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`}\n key={tab.slug}\n onClick={() => handleTabChange(tab.slug)}\n onKeyDown={(e) => handleTabKeyDown(e, index)}\n onMouseEnter={() => setHoveredTab(tab.slug)}\n onMouseLeave={() => setHoveredTab(null)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <Tooltip\n className={`${baseClass}__tooltip`}\n position=\"bottom\"\n show={hoveredTab === tab.slug}\n >\n {tab.label}\n </Tooltip>\n <span className={`${baseClass}__tab-icon`}>{tab.icon}</span>\n <span className={`${baseClass}__tab-label`}>{tab.label}</span>\n </button>\n )\n })}\n </div>\n <div className={`${baseClass}__content`} role=\"tabpanel\">\n <DelayedSpinner\n baseClass={baseClass}\n delay={loadingDelay}\n isLoading={loadingTab === activeTabID}\n />\n {tabs.map((tab) => {\n const content = tabContent[tab.slug]\n if (!content) {\n return null\n }\n const isActive = tab.slug === activeTabID && loadingTab !== activeTabID\n return (\n <div key={tab.slug} style={isActive ? undefined : { display: 'none' }}>\n {content}\n </div>\n )\n })}\n </div>\n </div>\n </SidebarTabsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.client.js","names":["PREFERENCE_KEYS","React","useCallback","useRef","useState","usePreferences","useServerFunctions","SidebarTabsProvider","DelayedSpinner","Tooltip","TabError","SidebarTabsClient","baseClass","initialActiveTabID","initialTabContents","loadingDelay","tabs","setPreference","serverFunction","activeTabID","setActiveTabID","tabContent","setTabContent","loadingTab","setLoadingTab","hoveredTab","setHoveredTab","loadingTabsRef","Set","tabContentRef","useEffect","current","prev","loadTabContent","tabSlug","revalidate","serverArgs","hasCachedContent","Boolean","has","add","result","name","args","newContent","component","error","errorMessage","Error","message","handleRetry","clearedContent","_jsx","onRetry","delete","reloadTabContent","handleTabChange","slug","NAV_SIDEBAR_ACTIVE_TAB","activeTab","tab","find","t","lazyLoadable","handleTabKeyDown","e","currentIndex","key","preventDefault","direction","newIndex","length","newTab","setTimeout","document","querySelector","focus","activeContent","_Fragment","activeTabSlug","_jsxs","className","role","map","index","isActive","onClick","onKeyDown","onMouseEnter","onMouseLeave","tabIndex","type","position","show","label","icon","delay","isLoading","content","style","undefined","display"],"sources":["../../../../src/elements/Nav/SidebarTabs/index.client.tsx"],"sourcesContent":["'use client'\n\nimport { PREFERENCE_KEYS } from 'payload/shared'\nimport React, { useCallback, useRef, useState } from 'react'\n\nimport type { RenderTabServerFnArgs, RenderTabServerFnReturnType } from './renderTabServerFn.js'\n\nimport { usePreferences } from '../../../providers/Preferences/index.js'\nimport { useServerFunctions } from '../../../providers/ServerFunctions/index.js'\nimport { SidebarTabsProvider } from '../../../providers/SidebarTabs/index.js'\nimport { DelayedSpinner } from '../../DelayedSpinner/index.js'\nimport { Tooltip } from '../../Tooltip/index.js'\nimport { TabError } from './TabError/index.js'\n\nexport type TabMetadata = {\n icon: React.ReactNode\n isDefaultActive?: boolean\n label: string\n /** Whether this tab can be loaded/revalidated via serverFunction */\n lazyLoadable?: boolean\n slug: string\n}\n\nexport type SidebarTabsClientProps = {\n baseClass: string\n initialActiveTabID: string\n initialTabContents: Record<string, React.ReactNode>\n /**\n * Delay before showing loading spinner (in ms), prevents flashing on fast loads\n * @default 200\n */\n loadingDelay?: number\n tabs: TabMetadata[]\n}\n\nexport const SidebarTabsClient: React.FC<SidebarTabsClientProps> = ({\n baseClass,\n initialActiveTabID,\n initialTabContents,\n loadingDelay = 200,\n tabs,\n}) => {\n const { setPreference } = usePreferences()\n const { serverFunction } = useServerFunctions()\n\n const [activeTabID, setActiveTabID] = useState(initialActiveTabID)\n const [tabContent, setTabContent] = useState<Record<string, React.ReactNode>>(initialTabContents)\n const [loadingTab, setLoadingTab] = useState<null | string>(null)\n const [hoveredTab, setHoveredTab] = useState<null | string>(null)\n const loadingTabsRef = useRef<Set<string>>(new Set())\n const tabContentRef = useRef(initialTabContents)\n\n // Update cached content when server provides new initialTabContents\n // This is needed because useState only uses initialValue on first mount\n React.useEffect(() => {\n tabContentRef.current = { ...tabContentRef.current, ...initialTabContents }\n setTabContent((prev) => ({ ...prev, ...initialTabContents }))\n }, [initialTabContents])\n\n const loadTabContent = useCallback(\n async (\n tabSlug: string,\n {\n revalidate = false,\n serverArgs,\n }: { revalidate?: boolean; serverArgs?: Partial<RenderTabServerFnArgs> } = {},\n ) => {\n const hasCachedContent = Boolean(tabContentRef.current[tabSlug])\n\n // Skip if already loaded (unless revalidating) or currently loading\n if ((hasCachedContent && !revalidate) || loadingTabsRef.current.has(tabSlug)) {\n return\n }\n\n // Mark as loading - only show spinner if no cached content\n loadingTabsRef.current.add(tabSlug)\n if (!hasCachedContent) {\n setLoadingTab(tabSlug)\n }\n\n try {\n const result = (await serverFunction({\n name: 'render-tab',\n args: { ...serverArgs, tabSlug } as RenderTabServerFnArgs,\n })) as RenderTabServerFnReturnType\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: result.component,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } catch (error) {\n // On revalidate failure, keep showing cached content\n if (hasCachedContent && revalidate) {\n return\n }\n\n const errorMessage = error instanceof Error ? error.message : 'Unknown error'\n\n const handleRetry = () => {\n // Clear the error and retry loading, threading the original serverArgs through so the\n // retry doesn't silently fall back to req.query-based rendering (the stale-tree bug).\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n void loadTabContent(tabSlug, { serverArgs })\n }\n\n const newContent = {\n ...tabContentRef.current,\n [tabSlug]: <TabError message={errorMessage} onRetry={handleRetry} />,\n }\n\n tabContentRef.current = newContent\n setTabContent(newContent)\n } finally {\n loadingTabsRef.current.delete(tabSlug)\n setLoadingTab(null)\n }\n },\n [serverFunction],\n )\n\n const reloadTabContent = useCallback(\n (tabSlug: string, serverArgs?: Partial<RenderTabServerFnArgs>) => {\n // Clear cached content to force reload\n const clearedContent = { ...tabContentRef.current }\n delete clearedContent[tabSlug]\n tabContentRef.current = clearedContent\n setTabContent(clearedContent)\n\n void loadTabContent(tabSlug, { serverArgs })\n },\n [loadTabContent],\n )\n\n const handleTabChange = useCallback(\n (slug: string) => {\n setActiveTabID(slug)\n void setPreference(PREFERENCE_KEYS.NAV_SIDEBAR_ACTIVE_TAB, { activeTab: slug })\n // Only revalidate tabs that can be loaded via serverFunction\n // Pre-rendered React elements (like default nav) can't be revalidated\n const tab = tabs.find((t) => t.slug === slug)\n void loadTabContent(slug, { revalidate: tab?.lazyLoadable ?? false })\n },\n [setPreference, loadTabContent, tabs],\n )\n\n const handleTabKeyDown = useCallback(\n (e: React.KeyboardEvent, currentIndex: number) => {\n if (e.key === 'ArrowLeft' || e.key === 'ArrowRight') {\n e.preventDefault()\n const direction = e.key === 'ArrowLeft' ? -1 : 1\n const newIndex = (currentIndex + direction + tabs.length) % tabs.length\n const newTab = tabs[newIndex]\n handleTabChange(newTab.slug)\n // Focus will be handled by the tabIndex change\n setTimeout(() => {\n document.querySelector<HTMLButtonElement>(`.${baseClass}__tab--active`)?.focus()\n }, 0)\n }\n },\n [baseClass, handleTabChange, tabs],\n )\n\n const activeContent = tabContent[activeTabID]\n\n // If there's only one tab (the default nav), render it without tab UI\n if (tabs.length === 1) {\n return <>{activeContent}</>\n }\n\n return (\n <SidebarTabsProvider activeTabSlug={activeTabID} reloadTabContent={reloadTabContent}>\n <div className={baseClass}>\n <div className={`${baseClass}__tabs`} role=\"tablist\">\n {tabs.map((tab, index) => {\n const isActive = tab.slug === activeTabID\n\n return (\n <button\n aria-selected={isActive}\n className={`${baseClass}__tab ${isActive ? `${baseClass}__tab--active` : ''}`}\n key={tab.slug}\n onClick={() => handleTabChange(tab.slug)}\n onKeyDown={(e) => handleTabKeyDown(e, index)}\n onMouseEnter={() => setHoveredTab(tab.slug)}\n onMouseLeave={() => setHoveredTab(null)}\n role=\"tab\"\n tabIndex={isActive ? 0 : -1}\n type=\"button\"\n >\n <Tooltip\n className={`${baseClass}__tooltip`}\n position=\"bottom\"\n show={hoveredTab === tab.slug}\n >\n {tab.label}\n </Tooltip>\n <span className={`${baseClass}__tab-icon`}>{tab.icon}</span>\n <span className={`${baseClass}__tab-label`}>{tab.label}</span>\n </button>\n )\n })}\n </div>\n <div className={`${baseClass}__content`} role=\"tabpanel\">\n <DelayedSpinner\n baseClass={baseClass}\n delay={loadingDelay}\n isLoading={loadingTab === activeTabID}\n />\n {tabs.map((tab) => {\n const content = tabContent[tab.slug]\n if (!content) {\n return null\n }\n const isActive = tab.slug === activeTabID && loadingTab !== activeTabID\n return (\n <div key={tab.slug} style={isActive ? undefined : { display: 'none' }}>\n {content}\n </div>\n )\n })}\n </div>\n </div>\n </SidebarTabsProvider>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -29,10 +29,6 @@
29
29
  border: var(--stroke-width-small) solid transparent;
30
30
  background-color: transparent;
31
31
  color: var(--color-icon-secondary);
32
- transition:
33
- background-color 0.15s ease,
34
- border-color 0.15s ease,
35
- color 0.15s ease;
36
32
  position: relative;
37
33
 
38
34
  &:hover {
@@ -56,7 +52,6 @@
56
52
  display: flex;
57
53
  align-items: center;
58
54
  justify-content: center;
59
- transition: opacity 0.15s ease;
60
55
  }
61
56
 
62
57
  /* Visually hidden but still accessible for screen readers */
@@ -1,6 +1,7 @@
1
1
  import type { ServerFunction } from 'payload';
2
2
  import type React from 'react';
3
3
  export type RenderTabServerFnArgs = {
4
+ searchParams?: Record<string, unknown>;
4
5
  tabSlug: string;
5
6
  };
6
7
  export type RenderTabServerFnReturnType = {
@@ -1 +1 @@
1
- {"version":3,"file":"renderTabServerFn.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAC3C,qBAAqB,EACrB,2BAA2B,CA6C5B,CAAA"}
1
+ {"version":3,"file":"renderTabServerFn.d.ts","sourceRoot":"","sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAC7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAI9B,MAAM,MAAM,qBAAqB,GAAG;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACtC,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,cAAc,CAC3C,qBAAqB,EACrB,2BAA2B,CA6C5B,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import { RenderServerComponent } from '../../RenderServerComponent/index.js';
2
2
  export const renderTabHandler = ({
3
3
  req,
4
+ searchParams,
4
5
  tabSlug
5
6
  }) => {
6
7
  if (!req.user) {
@@ -33,7 +34,7 @@ export const renderTabHandler = ({
33
34
  params: req.routeParams,
34
35
  payload: req.payload,
35
36
  req,
36
- searchParams: req.query,
37
+ searchParams: searchParams ?? req.query,
37
38
  user: req.user
38
39
  }
39
40
  });
@@ -1 +1 @@
1
- {"version":3,"file":"renderTabServerFn.js","names":["RenderServerComponent","renderTabHandler","req","tabSlug","user","Error","importMap","payload","tabs","config","admin","components","sidebar","component","tabConfig","find","tab","slug","Component","Content","serverProps","i18n","locale","params","routeParams","searchParams","query","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\nimport type React from 'react'\n\nimport { RenderServerComponent } from '../../RenderServerComponent/index.js'\n\nexport type RenderTabServerFnArgs = {\n tabSlug: string\n}\n\nexport type RenderTabServerFnReturnType = {\n component: React.ReactNode\n}\n\nexport const renderTabHandler: ServerFunction<\n RenderTabServerFnArgs,\n RenderTabServerFnReturnType\n> = ({ req, tabSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { importMap } = req.payload\n const { tabs } = req.payload.config.admin.components?.sidebar || {}\n\n if (!tabs) {\n return { component: null }\n }\n\n const tabConfig = tabs.find((tab) => tab.slug === tabSlug)\n\n if (!tabConfig) {\n return { component: null }\n }\n\n try {\n const component = RenderServerComponent({\n Component: tabConfig.components.Content,\n importMap,\n serverProps: {\n i18n: req.i18n,\n locale: req.locale,\n params: req.routeParams,\n payload: req.payload,\n req,\n searchParams: req.query,\n user: req.user,\n },\n })\n\n return { component }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n req.payload.logger.error({\n err: error,\n msg: `Error rendering tab \"${tabSlug}\": ${errorMessage}`,\n })\n\n return { component: null }\n }\n}\n"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ;AAUtC,OAAO,MAAMC,gBAAA,GAGTA,CAAC;EAAEC,GAAG;EAAEC;AAAO,CAAE;EACnB,IAAI,CAACD,GAAA,CAAIE,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAS,CAAE,GAAGJ,GAAA,CAAIK,OAAO;EACjC,MAAM;IAAEC;EAAI,CAAE,GAAGN,GAAA,CAAIK,OAAO,CAACE,MAAM,CAACC,KAAK,CAACC,UAAU,EAAEC,OAAA,IAAW,CAAC;EAElE,IAAI,CAACJ,IAAA,EAAM;IACT,OAAO;MAAEK,SAAA,EAAW;IAAK;EAC3B;EAEA,MAAMC,SAAA,GAAYN,IAAA,CAAKO,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI,KAAKd,OAAA;EAElD,IAAI,CAACW,SAAA,EAAW;IACd,OAAO;MAAED,SAAA,EAAW;IAAK;EAC3B;EAEA,IAAI;IACF,MAAMA,SAAA,GAAYb,qBAAA,CAAsB;MACtCkB,SAAA,EAAWJ,SAAA,CAAUH,UAAU,CAACQ,OAAO;MACvCb,SAAA;MACAc,WAAA,EAAa;QACXC,IAAA,EAAMnB,GAAA,CAAImB,IAAI;QACdC,MAAA,EAAQpB,GAAA,CAAIoB,MAAM;QAClBC,MAAA,EAAQrB,GAAA,CAAIsB,WAAW;QACvBjB,OAAA,EAASL,GAAA,CAAIK,OAAO;QACpBL,GAAA;QACAuB,YAAA,EAAcvB,GAAA,CAAIwB,KAAK;QACvBtB,IAAA,EAAMF,GAAA,CAAIE;MACZ;IACF;IAEA,OAAO;MAAES;IAAU;EACrB,EAAE,OAAOc,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBtB,KAAA,GAAQsB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErEzB,GAAA,CAAIK,OAAO,CAACwB,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,wBAAwB9B,OAAA,MAAayB,YAAA;IAC5C;IAEA,OAAO;MAAEf,SAAA,EAAW;IAAK;EAC3B;AACF","ignoreList":[]}
1
+ {"version":3,"file":"renderTabServerFn.js","names":["RenderServerComponent","renderTabHandler","req","searchParams","tabSlug","user","Error","importMap","payload","tabs","config","admin","components","sidebar","component","tabConfig","find","tab","slug","Component","Content","serverProps","i18n","locale","params","routeParams","query","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../src/elements/Nav/SidebarTabs/renderTabServerFn.ts"],"sourcesContent":["import type { ServerFunction } from 'payload'\nimport type React from 'react'\n\nimport { RenderServerComponent } from '../../RenderServerComponent/index.js'\n\nexport type RenderTabServerFnArgs = {\n searchParams?: Record<string, unknown>\n tabSlug: string\n}\n\nexport type RenderTabServerFnReturnType = {\n component: React.ReactNode\n}\n\nexport const renderTabHandler: ServerFunction<\n RenderTabServerFnArgs,\n RenderTabServerFnReturnType\n> = ({ req, searchParams, tabSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { importMap } = req.payload\n const { tabs } = req.payload.config.admin.components?.sidebar || {}\n\n if (!tabs) {\n return { component: null }\n }\n\n const tabConfig = tabs.find((tab) => tab.slug === tabSlug)\n\n if (!tabConfig) {\n return { component: null }\n }\n\n try {\n const component = RenderServerComponent({\n Component: tabConfig.components.Content,\n importMap,\n serverProps: {\n i18n: req.i18n,\n locale: req.locale,\n params: req.routeParams,\n payload: req.payload,\n req,\n searchParams: searchParams ?? req.query,\n user: req.user,\n },\n })\n\n return { component }\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : String(error)\n\n req.payload.logger.error({\n err: error,\n msg: `Error rendering tab \"${tabSlug}\": ${errorMessage}`,\n })\n\n return { component: null }\n }\n}\n"],"mappings":"AAGA,SAASA,qBAAqB,QAAQ;AAWtC,OAAO,MAAMC,gBAAA,GAGTA,CAAC;EAAEC,GAAG;EAAEC,YAAY;EAAEC;AAAO,CAAE;EACjC,IAAI,CAACF,GAAA,CAAIG,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAS,CAAE,GAAGL,GAAA,CAAIM,OAAO;EACjC,MAAM;IAAEC;EAAI,CAAE,GAAGP,GAAA,CAAIM,OAAO,CAACE,MAAM,CAACC,KAAK,CAACC,UAAU,EAAEC,OAAA,IAAW,CAAC;EAElE,IAAI,CAACJ,IAAA,EAAM;IACT,OAAO;MAAEK,SAAA,EAAW;IAAK;EAC3B;EAEA,MAAMC,SAAA,GAAYN,IAAA,CAAKO,IAAI,CAAEC,GAAA,IAAQA,GAAA,CAAIC,IAAI,KAAKd,OAAA;EAElD,IAAI,CAACW,SAAA,EAAW;IACd,OAAO;MAAED,SAAA,EAAW;IAAK;EAC3B;EAEA,IAAI;IACF,MAAMA,SAAA,GAAYd,qBAAA,CAAsB;MACtCmB,SAAA,EAAWJ,SAAA,CAAUH,UAAU,CAACQ,OAAO;MACvCb,SAAA;MACAc,WAAA,EAAa;QACXC,IAAA,EAAMpB,GAAA,CAAIoB,IAAI;QACdC,MAAA,EAAQrB,GAAA,CAAIqB,MAAM;QAClBC,MAAA,EAAQtB,GAAA,CAAIuB,WAAW;QACvBjB,OAAA,EAASN,GAAA,CAAIM,OAAO;QACpBN,GAAA;QACAC,YAAA,EAAcA,YAAA,IAAgBD,GAAA,CAAIwB,KAAK;QACvCrB,IAAA,EAAMH,GAAA,CAAIG;MACZ;IACF;IAEA,OAAO;MAAES;IAAU;EACrB,EAAE,OAAOa,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBrB,KAAA,GAAQqB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErEzB,GAAA,CAAIM,OAAO,CAACuB,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,wBAAwB7B,OAAA,MAAawB,YAAA;IAC5C;IAEA,OAAO;MAAEd,SAAA,EAAW;IAAK;EAC3B;AACF","ignoreList":[]}
@@ -57,7 +57,6 @@
57
57
  color: var(--color-icon-tertiary);
58
58
  left: calc(-1 * var(--spacer-1));
59
59
  opacity: 0;
60
- transition: opacity 150ms ease;
61
60
  }
62
61
 
63
62
  .nav-group--collapsed .collapsible__toggle {
@@ -1,4 +1,3 @@
1
- import type { PreviewButtonClientProps } from 'payload';
2
1
  import React from 'react';
3
- export declare function PreviewButton(props: PreviewButtonClientProps): React.JSX.Element;
2
+ export declare function PreviewButton(): React.JSX.Element;
4
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PreviewButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAA;AAEvD,OAAO,KAAgC,MAAM,OAAO,CAAA;AAQpD,wBAAgB,aAAa,CAAC,KAAK,EAAE,wBAAwB,qBA0C5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/PreviewButton/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAgC,MAAM,OAAO,CAAA;AAQpD,wBAAgB,aAAa,sBAoD5B"}
@@ -8,7 +8,7 @@ import { usePreviewURL } from '../../providers/LivePreview/context.js';
8
8
  import { useTranslation } from '../../providers/Translation/index.js';
9
9
  import { Button } from '../Button/index.js';
10
10
  import { Tooltip } from '../Tooltip/index.js';
11
- export function PreviewButton(props) {
11
+ export function PreviewButton() {
12
12
  const $ = _c(9);
13
13
  const {
14
14
  previewURL
@@ -20,11 +20,16 @@ export function PreviewButton(props) {
20
20
  const [hovered, setHovered] = useState(false);
21
21
  let t0;
22
22
  if ($[0] !== previewURL) {
23
- t0 = async () => {
24
- if (previewURL) {
25
- await navigator.clipboard.writeText(previewURL);
26
- setCopied(true);
23
+ t0 = async event => {
24
+ if (!previewURL) {
25
+ return;
27
26
  }
27
+ if (event.metaKey || event.ctrlKey) {
28
+ window.open(previewURL, "_blank", "noopener,noreferrer");
29
+ return;
30
+ }
31
+ await navigator.clipboard.writeText(previewURL);
32
+ setCopied(true);
28
33
  };
29
34
  $[0] = previewURL;
30
35
  $[1] = t0;
@@ -70,6 +75,7 @@ export function PreviewButton(props) {
70
75
  onClick: handleClick
71
76
  }), _jsx(Tooltip, {
72
77
  delay: 0,
78
+ id: "preview-button-tooltip",
73
79
  show: hovered || copied,
74
80
  children: label
75
81
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useState","LinkIcon","usePreviewURL","useTranslation","Button","Tooltip","PreviewButton","props","$","previewURL","t","copied","setCopied","hovered","setHovered","t0","navigator","clipboard","writeText","handleClick","t1","label","t2","t3","Symbol","for","_jsxs","onPointerEnter","onPointerLeave","style","position","children","_jsx","buttonStyle","icon","size","onClick","delay","show"],"sources":["../../../src/elements/PreviewButton/index.tsx"],"sourcesContent":["'use client'\nimport type { PreviewButtonClientProps } from 'payload'\n\nimport React, { useCallback, useState } from 'react'\n\nimport { LinkIcon } from '../../icons/Link/index.js'\nimport { usePreviewURL } from '../../providers/LivePreview/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Tooltip } from '../Tooltip/index.js'\n\nexport function PreviewButton(props: PreviewButtonClientProps) {\n const { previewURL } = usePreviewURL()\n const { t } = useTranslation()\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n\n const handleClick = useCallback(async () => {\n if (previewURL) {\n await navigator.clipboard.writeText(previewURL)\n setCopied(true)\n }\n }, [previewURL])\n\n if (!previewURL) {\n return null\n }\n\n const label = copied ? t('general:copied') : t('general:copy')\n\n return (\n <span\n onPointerEnter={() => {\n setHovered(true)\n setCopied(false)\n }}\n onPointerLeave={() => {\n setHovered(false)\n setCopied(false)\n }}\n style={{ position: 'relative' }}\n >\n <Button\n buttonStyle=\"ghost\"\n icon={<LinkIcon size={24} />}\n id=\"preview-button\"\n onClick={handleClick}\n />\n <Tooltip delay={0} show={hovered || copied}>\n {label}\n </Tooltip>\n </span>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAGA,OAAOC,KAAA,IAASC,WAAW,EAAEC,QAAQ,QAAQ;AAE7C,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,OAAO,QAAQ;AAExB,OAAO,SAAAC,cAAAC,KAAA;EAAA,MAAAC,CAAA,GAAAX,EAAA;EACL;IAAAY;EAAA,IAAuBP,aAAA;EACvB;IAAAQ;EAAA,IAAcP,cAAA;EACd,OAAAQ,MAAA,EAAAC,SAAA,IAA4BZ,QAAA,MAAS;EACrC,OAAAa,OAAA,EAAAC,UAAA,IAA8Bd,QAAA,MAAS;EAAA,IAAAe,EAAA;EAAA,IAAAP,CAAA,QAAAC,UAAA;IAEPM,EAAA,SAAAA,CAAA;MAAA,IAC1BN,UAAA;QAAA,MACIO,SAAA,CAAAC,SAAA,CAAAC,SAAA,CAA8BT,UAAA;QACpCG,SAAA,KAAU;MAAA;IAAA;IAEdJ,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EALA,MAAAW,WAAA,GAAoBJ,EAKL;EAAA,KAEVN,UAAA;IAAA;EAAA;EAAA,IAAAW,EAAA;EAAA,IAAAZ,CAAA,QAAAG,MAAA,IAAAH,CAAA,QAAAW,WAAA,IAAAX,CAAA,QAAAK,OAAA,IAAAL,CAAA,QAAAE,CAAA;IAIL,MAAAW,KAAA,GAAcV,MAAA,GAASD,CAAA,CAAE,oBAAoBA,CAAA,CAAE;IAAA,IAAAY,EAAA;IAAA,IAAAC,EAAA;IAAA,IAAAf,CAAA,QAAAgB,MAAA,CAAAC,GAAA;MAI3BH,EAAA,GAAAA,CAAA;QACdR,UAAA,KAAW;QACXF,SAAA,MAAU;MAAA;MAEIW,EAAA,GAAAA,CAAA;QACdT,UAAA,MAAW;QACXF,SAAA,MAAU;MAAA;MACZJ,CAAA,MAAAc,EAAA;MAAAd,CAAA,MAAAe,EAAA;IAAA;MAAAD,EAAA,GAAAd,CAAA;MAAAe,EAAA,GAAAf,CAAA;IAAA;IARFY,EAAA,GAAAM,KAAA,CAAC;MAAAC,cAAA,EACiBL,EAGhB;MAAAM,cAAA,EACgBL,EAGhB;MAAAM,KAAA;QAAAC,QAAA,EACmB;MAAA;MAAAC,QAAA,GAEnBC,IAAA,CAAA5B,MAAA;QAAA6B,WAAA,EACc;QAAAC,IAAA,EACNF,IAAA,CAAA/B,QAAA;UAAAkC,IAAA;QAAA,C;YACH;QAAAC,OAAA,EACMjB;MAAA,C,GAEXa,IAAA,CAAA3B,OAAA;QAAAgC,KAAA;QAAAC,IAAA,EAAyBzB,OAAA,IAAWF,MAAA;QAAAoB,QAAA,EACjCV;MAAA,C;;;;;;;;;;SAlBLD,E","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","React","useCallback","useState","LinkIcon","usePreviewURL","useTranslation","Button","Tooltip","PreviewButton","$","previewURL","t","copied","setCopied","hovered","setHovered","t0","event","metaKey","ctrlKey","window","open","navigator","clipboard","writeText","handleClick","t1","label","t2","t3","Symbol","for","_jsxs","onPointerEnter","onPointerLeave","style","position","children","_jsx","buttonStyle","icon","size","onClick","delay","id","show"],"sources":["../../../src/elements/PreviewButton/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useState } from 'react'\n\nimport { LinkIcon } from '../../icons/Link/index.js'\nimport { usePreviewURL } from '../../providers/LivePreview/context.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { Tooltip } from '../Tooltip/index.js'\n\nexport function PreviewButton() {\n const { previewURL } = usePreviewURL()\n const { t } = useTranslation()\n const [copied, setCopied] = useState(false)\n const [hovered, setHovered] = useState(false)\n\n const handleClick = useCallback(\n async (event: React.MouseEvent<HTMLButtonElement>) => {\n if (!previewURL) {\n return\n }\n\n if (event.metaKey || event.ctrlKey) {\n window.open(previewURL, '_blank', 'noopener,noreferrer')\n return\n }\n\n await navigator.clipboard.writeText(previewURL)\n setCopied(true)\n },\n [previewURL],\n )\n\n if (!previewURL) {\n return null\n }\n\n const label = copied ? t('general:copied') : t('general:copy')\n\n return (\n <span\n onPointerEnter={() => {\n setHovered(true)\n setCopied(false)\n }}\n onPointerLeave={() => {\n setHovered(false)\n setCopied(false)\n }}\n style={{ position: 'relative' }}\n >\n <Button\n buttonStyle=\"ghost\"\n icon={<LinkIcon size={24} />}\n id=\"preview-button\"\n onClick={handleClick}\n />\n <Tooltip delay={0} id=\"preview-button-tooltip\" show={hovered || copied}>\n {label}\n </Tooltip>\n </span>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,OAAOC,KAAA,IAASC,WAAW,EAAEC,QAAQ,QAAQ;AAE7C,SAASC,QAAQ,QAAQ;AACzB,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,SAASC,MAAM,QAAQ;AACvB,SAASC,OAAO,QAAQ;AAExB,OAAO,SAAAC,cAAA;EAAA,MAAAC,CAAA,GAAAV,EAAA;EACL;IAAAW;EAAA,IAAuBN,aAAA;EACvB;IAAAO;EAAA,IAAcN,cAAA;EACd,OAAAO,MAAA,EAAAC,SAAA,IAA4BX,QAAA,MAAS;EACrC,OAAAY,OAAA,EAAAC,UAAA,IAA8Bb,QAAA,MAAS;EAAA,IAAAc,EAAA;EAAA,IAAAP,CAAA,QAAAC,UAAA;IAGrCM,EAAA,SAAAC,KAAA;MAAA,KACOP,UAAA;QAAA;MAAA;MAAA,IAIDO,KAAA,CAAAC,OAAA,IAAiBD,KAAA,CAAAE,OAAa;QAChCC,MAAA,CAAAC,IAAA,CAAYX,UAAA,EAAY,UAAU;QAAA;MAAA;MAAA,MAI9BY,SAAA,CAAAC,SAAA,CAAAC,SAAA,CAA8Bd,UAAA;MACpCG,SAAA,KAAU;IAAA;IACZJ,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAO,EAAA;EAAA;IAAAA,EAAA,GAAAP,CAAA;EAAA;EAbF,MAAAgB,WAAA,GAAoBT,EAcN;EAAA,KAGTN,UAAA;IAAA;EAAA;EAAA,IAAAgB,EAAA;EAAA,IAAAjB,CAAA,QAAAG,MAAA,IAAAH,CAAA,QAAAgB,WAAA,IAAAhB,CAAA,QAAAK,OAAA,IAAAL,CAAA,QAAAE,CAAA;IAIL,MAAAgB,KAAA,GAAcf,MAAA,GAASD,CAAA,CAAE,oBAAoBA,CAAA,CAAE;IAAA,IAAAiB,EAAA;IAAA,IAAAC,EAAA;IAAA,IAAApB,CAAA,QAAAqB,MAAA,CAAAC,GAAA;MAI3BH,EAAA,GAAAA,CAAA;QACdb,UAAA,KAAW;QACXF,SAAA,MAAU;MAAA;MAEIgB,EAAA,GAAAA,CAAA;QACdd,UAAA,MAAW;QACXF,SAAA,MAAU;MAAA;MACZJ,CAAA,MAAAmB,EAAA;MAAAnB,CAAA,MAAAoB,EAAA;IAAA;MAAAD,EAAA,GAAAnB,CAAA;MAAAoB,EAAA,GAAApB,CAAA;IAAA;IARFiB,EAAA,GAAAM,KAAA,CAAC;MAAAC,cAAA,EACiBL,EAGhB;MAAAM,cAAA,EACgBL,EAGhB;MAAAM,KAAA;QAAAC,QAAA,EACmB;MAAA;MAAAC,QAAA,GAEnBC,IAAA,CAAAhC,MAAA;QAAAiC,WAAA,EACc;QAAAC,IAAA,EACNF,IAAA,CAAAnC,QAAA;UAAAsC,IAAA;QAAA,C;YACH;QAAAC,OAAA,EACMjB;MAAA,C,GAEXa,IAAA,CAAA/B,OAAA;QAAAoC,KAAA;QAAAC,EAAA,EAAsB;QAAAC,IAAA,EAA+B/B,OAAA,IAAWF,MAAA;QAAAyB,QAAA,EAC7DV;MAAA,C;;;;;;;;;;SAlBLD,E","ignoreList":[]}
@@ -1,7 +1,7 @@
1
1
  @layer payload-default {
2
2
  .preview-sizes {
3
3
  margin: var(--spacer-6) calc(var(--gutter-h) * -1) 0 calc(var(--gutter-h) * -1);
4
- border-top: var(--stroke-width-small) solid var(--theme-elevation-150);
4
+ border-top: var(--stroke-width-small) solid var(--color-border);
5
5
  max-height: calc(100vh - var(--spacer-6) * 3);
6
6
  height: 100%;
7
7
  display: flex;
@@ -10,7 +10,7 @@
10
10
 
11
11
  .preview-sizes__imageWrap {
12
12
  min-width: 60%;
13
- border-right: var(--stroke-width-small) solid var(--theme-elevation-150);
13
+ border-right: var(--stroke-width-small) solid var(--color-border);
14
14
  }
15
15
 
16
16
  .preview-sizes__preview {
@@ -20,7 +20,7 @@
20
20
  }
21
21
 
22
22
  .preview-sizes__meta {
23
- border-bottom: var(--stroke-width-small) solid var(--theme-elevation-150);
23
+ border-bottom: var(--stroke-width-small) solid var(--color-border);
24
24
  padding: var(--spacer-3) var(--gutter-h);
25
25
  display: flex;
26
26
  flex-wrap: wrap;
@@ -41,7 +41,7 @@
41
41
 
42
42
  .preview-sizes__sizeName,
43
43
  .preview-sizes .file-meta__size-type {
44
- color: var(--theme-elevation-600);
44
+ color: var(--color-text-secondary);
45
45
  }
46
46
 
47
47
  .preview-sizes__listWrap {
@@ -61,7 +61,7 @@
61
61
  left: 0;
62
62
  height: calc(var(--spacer-6) * 2);
63
63
  width: 100%;
64
- background: linear-gradient(180deg, transparent 0, var(--theme-bg) 100%);
64
+ background: linear-gradient(180deg, transparent 0, var(--color-bg) 100%);
65
65
  pointer-events: none;
66
66
  }
67
67
 
@@ -79,15 +79,14 @@
79
79
  display: flex;
80
80
  gap: var(--spacer-3);
81
81
  cursor: pointer;
82
- transition: background-color 0.2s ease-in-out;
83
82
  }
84
83
 
85
84
  .preview-sizes__sizeOption:hover {
86
- background-color: var(--theme-elevation-100);
85
+ background-color: var(--color-bg-hover);
87
86
  }
88
87
 
89
88
  .preview-sizes--selected {
90
- background-color: var(--theme-elevation-100);
89
+ background-color: var(--color-bg-secondary);
91
90
  }
92
91
 
93
92
  .preview-sizes__image {
@@ -142,7 +141,7 @@
142
141
  }
143
142
 
144
143
  .preview-sizes__listWrap {
145
- border-top: var(--stroke-width-small) solid var(--theme-elevation-150);
144
+ border-top: var(--stroke-width-small) solid var(--color-border);
146
145
  height: 40%;
147
146
  }
148
147
  }
@@ -6,7 +6,6 @@
6
6
  justify-content: center;
7
7
  flex-shrink: 0;
8
8
  color: var(--color-icon-secondary);
9
- transition: color 100ms;
10
9
 
11
10
  &:hover {
12
11
  color: var(--color-icon);
@@ -8,7 +8,6 @@
8
8
  background: var(--color-bg);
9
9
  height: 1.25rem;
10
10
  margin: 0;
11
- transition: border 0.2s cubic-bezier(0.2, 0, 0, 1);
12
11
 
13
12
  &:focus,
14
13
  &:focus-visible {
@@ -8,11 +8,11 @@
8
8
  align-items: center;
9
9
  max-width: 9.375rem;
10
10
  color: currentColor;
11
- padding-left: var(--spacer-1);
11
+ padding-left: var(--spacer-1-5);
12
12
  }
13
13
 
14
14
  .multi-value-label--disabled {
15
- padding-right: var(--spacer-1);
15
+ padding-right: var(--spacer-1-5);
16
16
  }
17
17
 
18
18
  .multi-value-label__text {
@@ -18,9 +18,6 @@
18
18
  line-height: var(--text-body-medium-line-height);
19
19
  -webkit-appearance: none;
20
20
  appearance: none;
21
- transition-property: box-shadow, background-color;
22
- transition-duration: 100ms;
23
- transition-timing-function: cubic-bezier(0, 0.2, 0.2, 1);
24
21
  height: auto;
25
22
  padding-block: calc(var(--spacer-1) + 1px);
26
23
  padding-inline: var(--field-padding-inline) var(--spacer-5);
@@ -1,4 +1,3 @@
1
1
  import React from 'react';
2
- import './Pagination.css';
3
2
  export declare const RelationshipTablePagination: React.FC;
4
3
  //# sourceMappingURL=Pagination.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/Pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,OAAO,kBAAkB,CAAA;AAIzB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAuC/C,CAAA"}
1
+ {"version":3,"file":"Pagination.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/Pagination.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAKzB,eAAO,MAAM,2BAA2B,EAAE,KAAK,CAAC,EAoB/C,CAAA"}
@@ -1,94 +1,44 @@
1
1
  'use client';
2
2
 
3
3
  import { c as _c } from "react/compiler-runtime";
4
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  import React from 'react';
6
6
  import { useListQuery } from '../../providers/ListQuery/index.js';
7
- import { useTranslation } from '../../providers/Translation/index.js';
8
- import './Pagination.css';
9
- const baseClass = 'relationship-table-pagination';
7
+ import { Pagination } from '../Pagination/index.js';
10
8
  export const RelationshipTablePagination = () => {
11
- const $ = _c(18);
9
+ const $ = _c(9);
12
10
  const {
13
11
  data,
14
12
  handlePageChange
15
13
  } = useListQuery();
16
- const {
17
- t
18
- } = useTranslation();
19
- const {
20
- hasNextPage,
21
- hasPrevPage,
22
- limit,
23
- nextPage,
24
- page,
25
- prevPage,
26
- totalDocs,
27
- totalPages
28
- } = data;
29
- if (!totalPages || totalPages <= 1 || !totalDocs || !page || !limit) {
14
+ if (!data?.totalDocs || !data?.limit) {
30
15
  return null;
31
16
  }
32
- const currentRangeStart = (page - 1) * limit + 1;
33
- const currentRangeEnd = Math.min(page * limit, totalDocs);
34
- const t0 = !hasPrevPage;
35
- let t1;
36
- if ($[0] !== handlePageChange || $[1] !== prevPage) {
37
- t1 = () => void handlePageChange(prevPage || 1);
38
- $[0] = handlePageChange;
39
- $[1] = prevPage;
40
- $[2] = t1;
41
- } else {
42
- t1 = $[2];
43
- }
44
- let t2;
45
- if ($[3] !== currentRangeEnd || $[4] !== currentRangeStart || $[5] !== handlePageChange || $[6] !== hasNextPage || $[7] !== nextPage || $[8] !== page || $[9] !== t || $[10] !== t0 || $[11] !== t1 || $[12] !== totalDocs) {
46
- let t3;
47
- if ($[14] !== handlePageChange || $[15] !== nextPage || $[16] !== page) {
48
- t3 = () => void handlePageChange(nextPage || page + 1);
49
- $[14] = handlePageChange;
50
- $[15] = nextPage;
51
- $[16] = page;
52
- $[17] = t3;
53
- } else {
54
- t3 = $[17];
55
- }
56
- t2 = _jsxs("div", {
57
- className: baseClass,
58
- children: [_jsxs("div", {
59
- className: `${baseClass}__nav`,
60
- children: [_jsx("button", {
61
- className: `${baseClass}__button`,
62
- disabled: t0,
63
- onClick: t1,
64
- type: "button",
65
- children: t("general:previous")
66
- }), _jsx("button", {
67
- className: `${baseClass}__button`,
68
- disabled: !hasNextPage,
69
- onClick: t3,
70
- type: "button",
71
- children: t("general:next")
72
- })]
73
- }), _jsxs("div", {
74
- className: `${baseClass}__count`,
75
- children: [currentRangeStart, " \u2013 ", currentRangeEnd, " ", t("general:of"), " ", totalDocs]
76
- })]
17
+ let t0;
18
+ if ($[0] !== data.hasNextPage || $[1] !== data.hasPrevPage || $[2] !== data.limit || $[3] !== data.nextPage || $[4] !== data.page || $[5] !== data.prevPage || $[6] !== data.totalPages || $[7] !== handlePageChange) {
19
+ t0 = _jsx(Pagination, {
20
+ hasNextPage: data.hasNextPage,
21
+ hasPrevPage: data.hasPrevPage,
22
+ limit: data.limit,
23
+ nextPage: data.nextPage,
24
+ numberOfNeighbors: 1,
25
+ onChange: handlePageChange,
26
+ page: data.page,
27
+ prevPage: data.prevPage,
28
+ totalPages: data.totalPages
77
29
  });
78
- $[3] = currentRangeEnd;
79
- $[4] = currentRangeStart;
80
- $[5] = handlePageChange;
81
- $[6] = hasNextPage;
82
- $[7] = nextPage;
83
- $[8] = page;
84
- $[9] = t;
85
- $[10] = t0;
86
- $[11] = t1;
87
- $[12] = totalDocs;
88
- $[13] = t2;
30
+ $[0] = data.hasNextPage;
31
+ $[1] = data.hasPrevPage;
32
+ $[2] = data.limit;
33
+ $[3] = data.nextPage;
34
+ $[4] = data.page;
35
+ $[5] = data.prevPage;
36
+ $[6] = data.totalPages;
37
+ $[7] = handlePageChange;
38
+ $[8] = t0;
89
39
  } else {
90
- t2 = $[13];
40
+ t0 = $[8];
91
41
  }
92
- return t2;
42
+ return t0;
93
43
  };
94
44
  //# sourceMappingURL=Pagination.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.js","names":["c","_c","React","useListQuery","useTranslation","baseClass","RelationshipTablePagination","$","data","handlePageChange","t","hasNextPage","hasPrevPage","limit","nextPage","page","prevPage","totalDocs","totalPages","currentRangeStart","currentRangeEnd","Math","min","t0","t1","t2","t3","_jsxs","className","children","_jsx","disabled","onClick","type"],"sources":["../../../src/elements/RelationshipTable/Pagination.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport './Pagination.css'\n\nconst baseClass = 'relationship-table-pagination'\n\nexport const RelationshipTablePagination: React.FC = () => {\n const { data, handlePageChange } = useListQuery()\n const { t } = useTranslation()\n\n const { hasNextPage, hasPrevPage, limit, nextPage, page, prevPage, totalDocs, totalPages } = data\n\n // Don't render pagination if there's only one page, no docs, or missing data\n if (!totalPages || totalPages <= 1 || !totalDocs || !page || !limit) {\n return null\n }\n\n const currentRangeStart = (page - 1) * limit + 1\n const currentRangeEnd = Math.min(page * limit, totalDocs)\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__nav`}>\n <button\n className={`${baseClass}__button`}\n disabled={!hasPrevPage}\n onClick={() => void handlePageChange(prevPage || 1)}\n type=\"button\"\n >\n {t('general:previous')}\n </button>\n <button\n className={`${baseClass}__button`}\n disabled={!hasNextPage}\n onClick={() => void handlePageChange(nextPage || page + 1)}\n type=\"button\"\n >\n {t('general:next')}\n </button>\n </div>\n <div className={`${baseClass}__count`}>\n {currentRangeStart} – {currentRangeEnd} {t('general:of')} {totalDocs}\n </div>\n </div>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAC7B,SAASC,cAAc,QAAQ;AAC/B,OAAO;AAEP,MAAMC,SAAA,GAAY;AAElB,OAAO,MAAMC,2BAAA,GAAwCA,CAAA;EAAA,MAAAC,CAAA,GAAAN,EAAA;EACnD;IAAAO,IAAA;IAAAC;EAAA,IAAmCN,YAAA;EACnC;IAAAO;EAAA,IAAcN,cAAA;EAEd;IAAAO,WAAA;IAAAC,WAAA;IAAAC,KAAA;IAAAC,QAAA;IAAAC,IAAA;IAAAC,QAAA;IAAAC,SAAA;IAAAC;EAAA,IAA6FV,IAAA;EAAA,IAGzF,CAACU,UAAA,IAAcA,UAAA,KAAc,KAAMD,SAAA,KAAcF,IAAA,KAASF,KAAA;IAAA;EAAA;EAI9D,MAAAM,iBAAA,GAA0B,CAACJ,IAAA,IAAO,IAAKF,KAAA,IAAQ;EAC/C,MAAAO,eAAA,GAAwBC,IAAA,CAAAC,GAAA,CAASP,IAAA,GAAOF,KAAA,EAAOI,SAAA;EAO7B,MAAAM,EAAA,IAACX,WAAA;EAAA,IAAAY,EAAA;EAAA,IAAAjB,CAAA,QAAAE,gBAAA,IAAAF,CAAA,QAAAS,QAAA;IACFQ,EAAA,GAAAA,CAAA,UAAWf,gBAAA,CAAiBO,QAAA,KAAY;IAAAT,CAAA,MAAAE,gBAAA;IAAAF,CAAA,MAAAS,QAAA;IAAAT,CAAA,MAAAiB,EAAA;EAAA;IAAAA,EAAA,GAAAjB,CAAA;EAAA;EAAA,IAAAkB,EAAA;EAAA,IAAAlB,CAAA,QAAAa,eAAA,IAAAb,CAAA,QAAAY,iBAAA,IAAAZ,CAAA,QAAAE,gBAAA,IAAAF,CAAA,QAAAI,WAAA,IAAAJ,CAAA,QAAAO,QAAA,IAAAP,CAAA,QAAAQ,IAAA,IAAAR,CAAA,QAAAG,CAAA,IAAAH,CAAA,SAAAgB,EAAA,IAAAhB,CAAA,SAAAiB,EAAA,IAAAjB,CAAA,SAAAU,SAAA;IAAA,IAAAS,EAAA;IAAA,IAAAnB,CAAA,SAAAE,gBAAA,IAAAF,CAAA,SAAAO,QAAA,IAAAP,CAAA,SAAAQ,IAAA;MAQxCW,EAAA,GAAAA,CAAA,UAAWjB,gBAAA,CAAiBK,QAAA,IAAYC,IAAA,IAAO;MAAAR,CAAA,OAAAE,gBAAA;MAAAF,CAAA,OAAAO,QAAA;MAAAP,CAAA,OAAAQ,IAAA;MAAAR,CAAA,OAAAmB,EAAA;IAAA;MAAAA,EAAA,GAAAnB,CAAA;IAAA;IAb9DkB,EAAA,GAAAE,KAAA,CAAC;MAAAC,SAAA,EAAAvB,SAAA;MAAAwB,QAAA,GACCF,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAAvB,SAAA,OAAmB;QAAAwB,QAAA,GACjCC,IAAA,CAAC;UAAAF,SAAA,EACY,GAAAvB,SAAA,UAAsB;UAAA0B,QAAA,EACvBR,EAAC;UAAAS,OAAA,EACFR,EAAwC;UAAAS,IAAA,EAC5C;UAAAJ,QAAA,EAEJnB,CAAA,CAAE;QAAA,C,GAELoB,IAAA,CAAC;UAAAF,SAAA,EACY,GAAAvB,SAAA,UAAsB;UAAA0B,QAAA,GACtBpB,WAAA;UAAAqB,OAAA,EACFN,EAA+C;UAAAO,IAAA,EACnD;UAAAJ,QAAA,EAEJnB,CAAA,CAAE;QAAA,C;UAGPiB,KAAA,CAAC;QAAAC,SAAA,EAAe,GAAAvB,SAAA,SAAqB;QAAAwB,QAAA,GAClCV,iBAAA,EAAkB,YAAIC,eAAA,EAAgB,KAAEV,CAAA,CAAE,eAAc,KAAEO,SAAA;MAAA,C;;;;;;;;;;;;;;;;SApB/DQ,E;CAwBJ","ignoreList":[]}
1
+ {"version":3,"file":"Pagination.js","names":["c","_c","React","useListQuery","Pagination","RelationshipTablePagination","$","data","handlePageChange","totalDocs","limit","t0","hasNextPage","hasPrevPage","nextPage","page","prevPage","totalPages","_jsx","numberOfNeighbors","onChange"],"sources":["../../../src/elements/RelationshipTable/Pagination.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { Pagination } from '../Pagination/index.js'\n\nexport const RelationshipTablePagination: React.FC = () => {\n const { data, handlePageChange } = useListQuery()\n\n if (!data?.totalDocs || !data?.limit) {\n return null\n }\n\n return (\n <Pagination\n hasNextPage={data.hasNextPage}\n hasPrevPage={data.hasPrevPage}\n limit={data.limit}\n nextPage={data.nextPage}\n numberOfNeighbors={1}\n onChange={handlePageChange}\n page={data.page}\n prevPage={data.prevPage}\n totalPages={data.totalPages}\n />\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAC7B,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,2BAAA,GAAwCA,CAAA;EAAA,MAAAC,CAAA,GAAAL,EAAA;EACnD;IAAAM,IAAA;IAAAC;EAAA,IAAmCL,YAAA;EAAA,IAE/B,CAACI,IAAA,EAAAE,SAAA,KAAoBF,IAAA,EAAAG,KAAM;IAAA;EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAL,CAAA,QAAAC,IAAA,CAAAK,WAAA,IAAAN,CAAA,QAAAC,IAAA,CAAAM,WAAA,IAAAP,CAAA,QAAAC,IAAA,CAAAG,KAAA,IAAAJ,CAAA,QAAAC,IAAA,CAAAO,QAAA,IAAAR,CAAA,QAAAC,IAAA,CAAAQ,IAAA,IAAAT,CAAA,QAAAC,IAAA,CAAAS,QAAA,IAAAV,CAAA,QAAAC,IAAA,CAAAU,UAAA,IAAAX,CAAA,QAAAE,gBAAA;IAK7BG,EAAA,GAAAO,IAAA,CAAAd,UAAA;MAAAQ,WAAA,EACeL,IAAA,CAAAK,WAAA;MAAAC,WAAA,EACAN,IAAA,CAAAM,WAAA;MAAAH,KAAA,EACNH,IAAA,CAAAG,KAAA;MAAAI,QAAA,EACGP,IAAA,CAAAO,QAAA;MAAAK,iBAAA;MAAAC,QAAA,EAEAZ,gBAAA;MAAAO,IAAA,EACJR,IAAA,CAAAQ,IAAA;MAAAC,QAAA,EACIT,IAAA,CAAAS,QAAA;MAAAC,UAAA,EACEV,IAAA,CAAAU;IAAA,C;;;;;;;;;;;;;SATdN,E;CAYJ","ignoreList":[]}
@@ -39,8 +39,6 @@
39
39
  .relationship-table .table {
40
40
  margin-bottom: 0;
41
41
  background: var(--color-bg);
42
- border: var(--stroke-width-small) solid var(--color-border);
43
- border-radius: var(--radius-medium);
44
42
  overflow: auto;
45
43
 
46
44
  table {
@@ -6,6 +6,7 @@ type RelationshipTableComponentProps = {
6
6
  readonly AfterInput?: React.ReactNode;
7
7
  readonly allowCreate?: boolean;
8
8
  readonly BeforeInput?: React.ReactNode;
9
+ readonly Description?: React.ReactNode;
9
10
  readonly disableTable?: boolean;
10
11
  readonly field: JoinFieldClient;
11
12
  readonly fieldPath?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAEnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAgBrE,OAAO,aAAa,CAAA;AAIpB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAEzE,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CA8VvE,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/RelationshipTable/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,eAAe,EAEpB,KAAK,aAAa,EAClB,KAAK,KAAK,EACX,MAAM,SAAS,CAAA;AAEhB,OAAO,KAA6D,MAAM,OAAO,CAAA;AAEjF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAiBrE,OAAO,aAAa,CAAA;AAIpB,KAAK,+BAA+B,GAAG;IACrC,QAAQ,CAAC,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACrC,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtC,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAA;IAC/B,QAAQ,CAAC,KAAK,EAAE,eAAe,CAAA;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,aAAa,CAAC,EAAE,KAAK,CAAA;IAC9B,QAAQ,CAAC,WAAW,CAAC,EAAE,aAAa,CAAA;IACpC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,mBAAmB,CAAC,aAAa,CAAC,CAAA;IAC/D,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAChC,QAAQ,CAAC,MAAM,CAAC,EAAE;QAChB,cAAc,EAAE,cAAc,CAAA;QAC9B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACvC,CAAA;AAED,MAAM,MAAM,YAAY,GAAG,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;AAEzE,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,+BAA+B,CAkZvE,CAAA"}
@@ -7,6 +7,7 @@ import React, { Fragment, useCallback, useEffect, useRef, useState } from 'react
7
7
  import { useEffectEvent } from '../../hooks/useEffectEvent.js';
8
8
  import { useAuth } from '../../providers/Auth/index.js';
9
9
  import { useConfig } from '../../providers/Config/index.js';
10
+ import { useDocumentEvents } from '../../providers/DocumentEvents/index.js';
10
11
  import { ListQueryProvider } from '../../providers/ListQuery/index.js';
11
12
  import { useServerFunctions } from '../../providers/ServerFunctions/index.js';
12
13
  import { TableColumnsProvider } from '../../providers/TableColumns/index.js';
@@ -25,6 +26,7 @@ export const RelationshipTable = props => {
25
26
  AfterInput,
26
27
  allowCreate = true,
27
28
  BeforeInput,
29
+ Description,
28
30
  disableTable = false,
29
31
  field,
30
32
  fieldPath,
@@ -177,6 +179,37 @@ export const RelationshipTable = props => {
177
179
  setCurrentDrawerID(undefined);
178
180
  }
179
181
  }, [isDrawerOpen]);
182
+ // Keep this table in sync with documents created, updated, or deleted elsewhere
183
+ // (a sibling join table, the relationship field, or an inline drawer edit).
184
+ const {
185
+ mostRecentUpdate
186
+ } = useDocumentEvents();
187
+ const lastHandledEventRef = useRef(null);
188
+ const handleDocumentEvent = useEffectEvent(event => {
189
+ if (disableTable || !event || event === lastHandledEventRef.current) {
190
+ return;
191
+ }
192
+ const relationSlugs = Array.isArray(relationTo) ? relationTo : [relationTo];
193
+ if (!relationSlugs.includes(event.entitySlug)) {
194
+ return;
195
+ }
196
+ lastHandledEventRef.current = event;
197
+ // Skip the refetch when the current data already reflects this event — e.g. this
198
+ // table's own drawer already applied it optimistically via onDrawerSave/onDrawerDelete,
199
+ // or a fresh mount already loaded data that includes it. Otherwise saving/deleting from
200
+ // this table's own drawer (which also emits a matching event) would render a second time.
201
+ const eventDocID = event.doc?.id ?? event.id;
202
+ const existingDoc = isPolymorphic ? data?.docs?.find(doc => doc.relationTo === event.entitySlug && doc.value?.id === eventDocID) : data?.docs?.find(doc => doc.id === eventDocID);
203
+ const existingUpdatedAt = isPolymorphic ? existingDoc?.value?.updatedAt : existingDoc?.updatedAt;
204
+ const isAlreadyReflected = event.operation === 'delete' ? !existingDoc : Boolean(existingDoc) && existingUpdatedAt === event.updatedAt;
205
+ if (isAlreadyReflected) {
206
+ return;
207
+ }
208
+ void renderTable();
209
+ });
210
+ useEffect(() => {
211
+ handleDocumentEvent(mostRecentUpdate);
212
+ }, [mostRecentUpdate]);
180
213
  const canCreate = allowCreate !== false && permissions?.collections?.[isPolymorphic ? relationTo[0] : relationTo]?.create;
181
214
  useEffect(() => {
182
215
  if (isPolymorphic && selectedCollection) {
@@ -220,7 +253,7 @@ export const RelationshipTable = props => {
220
253
  children: [Label, /*#__PURE__*/_jsx("div", {
221
254
  className: `${baseClass}__actions`,
222
255
  children: addNewButton
223
- })]
256
+ }), Description]
224
257
  }), BeforeInput, /*#__PURE__*/_jsx("p", {
225
258
  children: t('general:loading')
226
259
  })]
@@ -231,7 +264,7 @@ export const RelationshipTable = props => {
231
264
  children: [Label, /*#__PURE__*/_jsx("div", {
232
265
  className: `${baseClass}__actions`,
233
266
  children: addNewButton
234
- })]
267
+ }), Description]
235
268
  }), BeforeInput, /*#__PURE__*/_jsx(NoListResults, {
236
269
  Actions: canCreate ? [/*#__PURE__*/_jsx(AddNewButton, {
237
270
  allowCreate: canCreate,
@@ -269,7 +302,7 @@ export const RelationshipTable = props => {
269
302
  children: [Label, /*#__PURE__*/_jsxs("div", {
270
303
  className: `${baseClass}__actions`,
271
304
  children: [addNewButton, columnsButton]
272
- })]
305
+ }), Description]
273
306
  }), BeforeInput, Table, /*#__PURE__*/_jsx(RelationshipTablePagination, {})]
274
307
  })
275
308
  })