@payloadcms/ui 4.0.0-internal.e7d4ebc → 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 (274) hide show
  1. package/dist/css/app.css +121 -0
  2. package/dist/css/forms.css +0 -6
  3. package/dist/css/spacing.css +10 -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/BulkUpload/EditMany/DrawerContent.js +2 -2
  11. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  12. package/dist/elements/CodeEditor/index.css +0 -5
  13. package/dist/elements/CommandPalette/index.css +0 -7
  14. package/dist/elements/CopyToClipboard/index.d.ts +1 -0
  15. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  16. package/dist/elements/CopyToClipboard/index.js +10 -8
  17. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  18. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  19. package/dist/elements/CreateDocumentButton/index.js +4 -1
  20. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  21. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  22. package/dist/elements/DatePicker/DatePicker.js +1 -0
  23. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  24. package/dist/elements/DatePicker/index.css +1 -1
  25. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  26. package/dist/elements/DeleteDocument/index.js +16 -1
  27. package/dist/elements/DeleteDocument/index.js.map +1 -1
  28. package/dist/elements/EditMany/DrawerContent.js +2 -2
  29. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  30. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  31. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  32. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  33. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  34. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  35. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  36. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  37. package/dist/elements/FileManager/FileToolbar/index.js +3 -0
  38. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  39. package/dist/elements/FileManager/index.js +1 -0
  40. package/dist/elements/FileManager/index.js.map +1 -1
  41. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +0 -1
  42. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  43. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +109 -89
  44. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  45. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  46. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +2 -0
  47. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  48. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +0 -1
  49. package/dist/elements/InputStepper/index.css +0 -1
  50. package/dist/elements/Locked/index.css +0 -8
  51. package/dist/elements/Locked/index.d.ts.map +1 -1
  52. package/dist/elements/Locked/index.js +70 -64
  53. package/dist/elements/Locked/index.js.map +1 -1
  54. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  55. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  56. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  57. package/dist/elements/Nav/SidebarTabs/index.css +0 -5
  58. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  59. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  60. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  61. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  62. package/dist/elements/NavGroup/index.css +0 -1
  63. package/dist/elements/PreviewButton/index.d.ts +1 -2
  64. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  65. package/dist/elements/PreviewButton/index.js +11 -5
  66. package/dist/elements/PreviewButton/index.js.map +1 -1
  67. package/dist/elements/PreviewSizes/index.css +8 -9
  68. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  69. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  70. package/dist/elements/ReactSelect/index.css +0 -3
  71. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  72. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  73. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  74. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  75. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  76. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  77. package/dist/elements/RelationshipTable/index.js +36 -3
  78. package/dist/elements/RelationshipTable/index.js.map +1 -1
  79. package/dist/elements/SelectRow/index.d.ts +4 -3
  80. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  81. package/dist/elements/SelectRow/index.js +10 -7
  82. package/dist/elements/SelectRow/index.js.map +1 -1
  83. package/dist/elements/SidebarToggle/index.css +0 -17
  84. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  85. package/dist/elements/SortColumn/index.js +42 -38
  86. package/dist/elements/SortColumn/index.js.map +1 -1
  87. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  88. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  89. package/dist/elements/Table/OrderableRow.js +17 -1
  90. package/dist/elements/Table/OrderableRow.js.map +1 -1
  91. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  92. package/dist/elements/Table/OrderableTable.js +19 -2
  93. package/dist/elements/Table/OrderableTable.js.map +1 -1
  94. package/dist/elements/TableSection/index.css +0 -1
  95. package/dist/elements/Tooltip/index.css +15 -34
  96. package/dist/elements/Tooltip/index.d.ts +11 -3
  97. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  98. package/dist/elements/Tooltip/index.js +151 -85
  99. package/dist/elements/Tooltip/index.js.map +1 -1
  100. package/dist/elements/Upload/index.css +0 -5
  101. package/dist/exports/client/index.d.ts +5 -1
  102. package/dist/exports/client/index.d.ts.map +1 -1
  103. package/dist/exports/client/index.js +1 -1
  104. package/dist/exports/client/index.js.map +3 -3
  105. package/dist/fields/Blocks/index.js +3 -3
  106. package/dist/fields/Blocks/index.js.map +1 -1
  107. package/dist/fields/Checkbox/Input.d.ts +2 -0
  108. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  109. package/dist/fields/Checkbox/Input.js +32 -26
  110. package/dist/fields/Checkbox/Input.js.map +1 -1
  111. package/dist/fields/Checkbox/index.css +37 -73
  112. package/dist/fields/FieldError/index.css +0 -9
  113. package/dist/fields/FieldError/index.d.ts.map +1 -1
  114. package/dist/fields/FieldError/index.js +19 -9
  115. package/dist/fields/FieldError/index.js.map +1 -1
  116. package/dist/fields/Join/index.css +9 -0
  117. package/dist/fields/Join/index.d.ts.map +1 -1
  118. package/dist/fields/Join/index.js +13 -9
  119. package/dist/fields/Join/index.js.map +1 -1
  120. package/dist/fields/RadioGroup/index.css +0 -7
  121. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  122. package/dist/fields/Relationship/Input.js +32 -14
  123. package/dist/fields/Relationship/Input.js.map +1 -1
  124. package/dist/fields/Slug/index.css +0 -1
  125. package/dist/fields/Slug/index.d.ts.map +1 -1
  126. package/dist/fields/Slug/index.js +80 -125
  127. package/dist/fields/Slug/index.js.map +1 -1
  128. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  129. package/dist/forms/Form/fieldReducer.js +3 -1
  130. package/dist/forms/Form/fieldReducer.js.map +1 -1
  131. package/dist/forms/Form/index.d.ts.map +1 -1
  132. package/dist/forms/Form/index.js +9 -1
  133. package/dist/forms/Form/index.js.map +1 -1
  134. package/dist/forms/Form/types.d.ts +1 -1
  135. package/dist/forms/Form/types.d.ts.map +1 -1
  136. package/dist/forms/Form/types.js.map +1 -1
  137. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  138. package/dist/forms/WatchChildErrors/index.js +2 -2
  139. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  140. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -1
  141. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  142. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  143. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  144. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  145. package/dist/layouts/Root/index.d.ts +1 -1
  146. package/dist/layouts/Root/index.d.ts.map +1 -1
  147. package/dist/layouts/Root/index.js +8 -2
  148. package/dist/layouts/Root/index.js.map +1 -1
  149. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  150. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  151. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  152. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  153. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  154. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  155. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  156. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  157. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  158. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  159. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  160. package/dist/providers/Auth/authSessionRequests.js +119 -0
  161. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  162. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  163. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  164. package/dist/providers/Auth/index.d.ts +2 -56
  165. package/dist/providers/Auth/index.d.ts.map +1 -1
  166. package/dist/providers/Auth/index.js +283 -135
  167. package/dist/providers/Auth/index.js.map +1 -1
  168. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  169. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  170. package/dist/providers/Auth/sessionActivity.js +49 -0
  171. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  172. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  173. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  174. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  175. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  176. package/dist/providers/Auth/sessionTiming.js +18 -0
  177. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  178. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  179. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  180. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  181. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  182. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  183. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  184. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  185. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  186. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  187. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  188. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  189. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  190. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  191. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  192. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  193. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  194. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  195. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  196. package/dist/providers/Auth/types.d.ts +66 -0
  197. package/dist/providers/Auth/types.d.ts.map +1 -0
  198. package/dist/providers/Auth/types.js +2 -0
  199. package/dist/providers/Auth/types.js.map +1 -0
  200. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  201. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  202. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  203. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  204. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  205. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  206. package/dist/providers/Embed/index.d.ts +24 -0
  207. package/dist/providers/Embed/index.d.ts.map +1 -0
  208. package/dist/providers/Embed/index.js +105 -0
  209. package/dist/providers/Embed/index.js.map +1 -0
  210. package/dist/providers/FormErrorHandler/index.d.ts +24 -0
  211. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  212. package/dist/providers/FormErrorHandler/index.js +6 -0
  213. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  214. package/dist/providers/Root/index.d.ts +1 -0
  215. package/dist/providers/Root/index.d.ts.map +1 -1
  216. package/dist/providers/Root/index.js +37 -31
  217. package/dist/providers/Root/index.js.map +1 -1
  218. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  219. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  220. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  221. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  222. package/dist/providers/RouteTransition/index.d.ts +2 -0
  223. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  224. package/dist/providers/RouteTransition/index.js +42 -14
  225. package/dist/providers/RouteTransition/index.js.map +1 -1
  226. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  227. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  228. package/dist/providers/SidebarTabs/index.js.map +1 -1
  229. package/dist/providers/Theme/index.d.ts +3 -0
  230. package/dist/providers/Theme/index.d.ts.map +1 -1
  231. package/dist/providers/Theme/index.js +107 -95
  232. package/dist/providers/Theme/index.js.map +1 -1
  233. package/dist/styles.css +12 -10
  234. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  235. package/dist/utilities/combineFieldLabel.js +5 -1
  236. package/dist/utilities/combineFieldLabel.js.map +1 -1
  237. package/dist/utilities/generateFieldID.d.ts +1 -1
  238. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  239. package/dist/utilities/generateFieldID.js +2 -2
  240. package/dist/utilities/generateFieldID.js.map +1 -1
  241. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  242. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  243. package/dist/utilities/getRequestEmbed.js +10 -0
  244. package/dist/utilities/getRequestEmbed.js.map +1 -0
  245. package/dist/utilities/renderTable.d.ts.map +1 -1
  246. package/dist/utilities/renderTable.js +18 -2
  247. package/dist/utilities/renderTable.js.map +1 -1
  248. package/dist/utilities/slugify.d.ts.map +1 -1
  249. package/dist/utilities/slugify.js +49 -6
  250. package/dist/utilities/slugify.js.map +1 -1
  251. package/dist/views/Dashboard/Default/ModularDashboard/index.css +0 -8
  252. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +4 -4
  253. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  254. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  255. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  256. package/dist/views/HierarchyList/index.css +1 -1
  257. package/dist/views/List/index.css +1 -1
  258. package/dist/views/List/index.d.ts.map +1 -1
  259. package/dist/views/List/index.js +4 -0
  260. package/dist/views/List/index.js.map +1 -1
  261. package/dist/views/Logout/index.d.ts.map +1 -1
  262. package/dist/views/Logout/index.js +11 -0
  263. package/dist/views/Logout/index.js.map +1 -1
  264. package/package.json +6 -11
  265. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  266. package/dist/scss/app.scss +0 -183
  267. package/dist/scss/colors.scss +0 -191
  268. package/dist/scss/custom.css +0 -1
  269. package/dist/scss/queries.scss +0 -27
  270. package/dist/scss/styles.scss +0 -9
  271. package/dist/scss/svg.scss +0 -10
  272. package/dist/scss/toastify.scss +0 -61
  273. package/dist/scss/vars.scss +0 -192
  274. package/dist/scss/z-index.scss +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"combineFieldLabel.d.ts","sourceRoot":"","sources":["../../src/utilities/combineFieldLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAO1C,eAAO,MAAM,iBAAiB,oCAI3B;IACD,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB,KAAG,KAAK,CAAC,SAiBT,CAAA"}
1
+ {"version":3,"file":"combineFieldLabel.d.ts","sourceRoot":"","sources":["../../src/utilities/combineFieldLabel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAQ1C,eAAO,MAAM,iBAAiB,oCAI3B;IACD,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC7B,KAAK,CAAC,EAAE,WAAW,CAAA;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;CACzB,KAAG,KAAK,CAAC,SA0BT,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { toWords } from 'payload/shared';
2
3
  import { Fragment } from 'react';
3
4
  import { RenderCustomComponent } from '../elements/RenderCustomComponent/index.js';
4
5
  import { FieldLabel } from '../fields/FieldLabel/index.js';
@@ -7,6 +8,9 @@ export const combineFieldLabel = ({
7
8
  field,
8
9
  prefix
9
10
  }) => {
11
+ // Fall back to the humanized field name when a field has no label (e.g. `label: false`)
12
+ // so option lists like the bulk-edit field select never render an empty entry.
13
+ const label = 'label' in field && field.label ? field.label : 'name' in field && field.name ? toWords(field.name) : undefined;
10
14
  return /*#__PURE__*/_jsxs(Fragment, {
11
15
  children: [prefix ? /*#__PURE__*/_jsxs(Fragment, {
12
16
  children: [/*#__PURE__*/_jsx("span", {
@@ -22,7 +26,7 @@ export const combineFieldLabel = ({
22
26
  children: /*#__PURE__*/_jsx(RenderCustomComponent, {
23
27
  CustomComponent: CustomLabel,
24
28
  Fallback: /*#__PURE__*/_jsx(FieldLabel, {
25
- label: 'label' in field && field.label
29
+ label: label
26
30
  })
27
31
  })
28
32
  })]
@@ -1 +1 @@
1
- {"version":3,"file":"combineFieldLabel.js","names":["Fragment","RenderCustomComponent","FieldLabel","combineFieldLabel","CustomLabel","field","prefix","_jsxs","_jsx","style","display","CustomComponent","Fallback","label"],"sources":["../../src/utilities/combineFieldLabel.tsx"],"sourcesContent":["import type { ClientField } from 'payload'\n\nimport { Fragment } from 'react'\n\nimport { RenderCustomComponent } from '../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../fields/FieldLabel/index.js'\n\nexport const combineFieldLabel = ({\n CustomLabel,\n field,\n prefix,\n}: {\n CustomLabel?: React.ReactNode\n field?: ClientField\n prefix?: React.ReactNode\n}): React.ReactNode => {\n return (\n <Fragment>\n {prefix ? (\n <Fragment>\n <span style={{ display: 'inline-block' }}>{prefix}</span>\n {' > '}\n </Fragment>\n ) : null}\n <span style={{ display: 'inline-block' }}>\n <RenderCustomComponent\n CustomComponent={CustomLabel}\n Fallback={<FieldLabel label={'label' in field && field.label} />}\n />\n </span>\n </Fragment>\n )\n}\n"],"mappings":";AAEA,SAASA,QAAQ,QAAQ;AAEzB,SAASC,qBAAqB,QAAQ;AACtC,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC,WAAW;EACXC,KAAK;EACLC;AAAM,CAKP;EACC,oBACEC,KAAA,CAACP,QAAA;eACEM,MAAA,gBACCC,KAAA,CAACP,QAAA;8BACCQ,IAAA,CAAC;QAAKC,KAAA,EAAO;UAAEC,OAAA,EAAS;QAAe;kBAAIJ;UAC1C;SAED,M,aACJE,IAAA,CAAC;MAAKC,KAAA,EAAO;QAAEC,OAAA,EAAS;MAAe;gBACrC,aAAAF,IAAA,CAACP,qBAAA;QACCU,eAAA,EAAiBP,WAAA;QACjBQ,QAAA,eAAUJ,IAAA,CAACN,UAAA;UAAWW,KAAA,EAAO,WAAWR,KAAA,IAASA,KAAA,CAAMQ;;;;;AAKjE","ignoreList":[]}
1
+ {"version":3,"file":"combineFieldLabel.js","names":["toWords","Fragment","RenderCustomComponent","FieldLabel","combineFieldLabel","CustomLabel","field","prefix","label","name","undefined","_jsxs","_jsx","style","display","CustomComponent","Fallback"],"sources":["../../src/utilities/combineFieldLabel.tsx"],"sourcesContent":["import type { ClientField } from 'payload'\n\nimport { toWords } from 'payload/shared'\nimport { Fragment } from 'react'\n\nimport { RenderCustomComponent } from '../elements/RenderCustomComponent/index.js'\nimport { FieldLabel } from '../fields/FieldLabel/index.js'\n\nexport const combineFieldLabel = ({\n CustomLabel,\n field,\n prefix,\n}: {\n CustomLabel?: React.ReactNode\n field?: ClientField\n prefix?: React.ReactNode\n}): React.ReactNode => {\n // Fall back to the humanized field name when a field has no label (e.g. `label: false`)\n // so option lists like the bulk-edit field select never render an empty entry.\n const label =\n 'label' in field && field.label\n ? field.label\n : 'name' in field && field.name\n ? toWords(field.name)\n : undefined\n\n return (\n <Fragment>\n {prefix ? (\n <Fragment>\n <span style={{ display: 'inline-block' }}>{prefix}</span>\n {' > '}\n </Fragment>\n ) : null}\n <span style={{ display: 'inline-block' }}>\n <RenderCustomComponent\n CustomComponent={CustomLabel}\n Fallback={<FieldLabel label={label} />}\n />\n </span>\n </Fragment>\n )\n}\n"],"mappings":";AAEA,SAASA,OAAO,QAAQ;AACxB,SAASC,QAAQ,QAAQ;AAEzB,SAASC,qBAAqB,QAAQ;AACtC,SAASC,UAAU,QAAQ;AAE3B,OAAO,MAAMC,iBAAA,GAAoBA,CAAC;EAChCC,WAAW;EACXC,KAAK;EACLC;AAAM,CAKP;EACC;EACA;EACA,MAAMC,KAAA,GACJ,WAAWF,KAAA,IAASA,KAAA,CAAME,KAAK,GAC3BF,KAAA,CAAME,KAAK,GACX,UAAUF,KAAA,IAASA,KAAA,CAAMG,IAAI,GAC3BT,OAAA,CAAQM,KAAA,CAAMG,IAAI,IAClBC,SAAA;EAER,oBACEC,KAAA,CAACV,QAAA;eACEM,MAAA,gBACCI,KAAA,CAACV,QAAA;8BACCW,IAAA,CAAC;QAAKC,KAAA,EAAO;UAAEC,OAAA,EAAS;QAAe;kBAAIP;UAC1C;SAED,M,aACJK,IAAA,CAAC;MAAKC,KAAA,EAAO;QAAEC,OAAA,EAAS;MAAe;gBACrC,aAAAF,IAAA,CAACV,qBAAA;QACCa,eAAA,EAAiBV,WAAA;QACjBW,QAAA,eAAUJ,IAAA,CAACT,UAAA;UAAWK,KAAA,EAAOA;;;;;AAKvC","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export declare const generateFieldID: (path: string, editDepth: number, uuid: string) => string;
1
+ export declare const generateFieldID: (path: string, editDepth: number, uuid: string, prefix?: string) => string;
2
2
  //# sourceMappingURL=generateFieldID.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateFieldID.d.ts","sourceRoot":"","sources":["../../src/utilities/generateFieldID.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,SAAU,MAAM,aAAa,MAAM,QAAQ,MAAM,WAK5E,CAAA"}
1
+ {"version":3,"file":"generateFieldID.d.ts","sourceRoot":"","sources":["../../src/utilities/generateFieldID.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,SACpB,MAAM,aACD,MAAM,QACX,MAAM,WACJ,MAAM,WAMf,CAAA"}
@@ -1,7 +1,7 @@
1
- export const generateFieldID = (path, editDepth, uuid) => {
1
+ export const generateFieldID = (path, editDepth, uuid, prefix = 'field') => {
2
2
  if (!path) {
3
3
  return undefined;
4
4
  }
5
- return `field-${path.replace(/\./g, '__')}${editDepth > 1 ? `-${editDepth}` : ''}${uuid ? `-${uuid}` : ''}`;
5
+ return `${prefix}-${path.replace(/\./g, '__')}${editDepth > 1 ? `-${editDepth}` : ''}${uuid ? `-${uuid}` : ''}`;
6
6
  };
7
7
  //# sourceMappingURL=generateFieldID.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateFieldID.js","names":["generateFieldID","path","editDepth","uuid","undefined","replace"],"sources":["../../src/utilities/generateFieldID.ts"],"sourcesContent":["export const generateFieldID = (path: string, editDepth: number, uuid: string) => {\n if (!path) {\n return undefined\n }\n return `field-${path.replace(/\\./g, '__')}${editDepth > 1 ? `-${editDepth}` : ''}${uuid ? `-${uuid}` : ''}`\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAA,GAAkBA,CAACC,IAAA,EAAcC,SAAA,EAAmBC,IAAA;EAC/D,IAAI,CAACF,IAAA,EAAM;IACT,OAAOG,SAAA;EACT;EACA,OAAO,SAASH,IAAA,CAAKI,OAAO,CAAC,OAAO,QAAQH,SAAA,GAAY,IAAI,IAAIA,SAAA,EAAW,GAAG,KAAKC,IAAA,GAAO,IAAIA,IAAA,EAAM,GAAG,IAAI;AAC7G","ignoreList":[]}
1
+ {"version":3,"file":"generateFieldID.js","names":["generateFieldID","path","editDepth","uuid","prefix","undefined","replace"],"sources":["../../src/utilities/generateFieldID.ts"],"sourcesContent":["export const generateFieldID = (\n path: string,\n editDepth: number,\n uuid: string,\n prefix: string = 'field',\n) => {\n if (!path) {\n return undefined\n }\n return `${prefix}-${path.replace(/\\./g, '__')}${editDepth > 1 ? `-${editDepth}` : ''}${uuid ? `-${uuid}` : ''}`\n}\n"],"mappings":"AAAA,OAAO,MAAMA,eAAA,GAAkBA,CAC7BC,IAAA,EACAC,SAAA,EACAC,IAAA,EACAC,MAAA,GAAiB,OAAO;EAExB,IAAI,CAACH,IAAA,EAAM;IACT,OAAOI,SAAA;EACT;EACA,OAAO,GAAGD,MAAA,IAAUH,IAAA,CAAKK,OAAO,CAAC,OAAO,QAAQJ,SAAA,GAAY,IAAI,IAAIA,SAAA,EAAW,GAAG,KAAKC,IAAA,GAAO,IAAIA,IAAA,EAAM,GAAG,IAAI;AACjH","ignoreList":[]}
@@ -0,0 +1,14 @@
1
+ import type { SanitizedConfig } from 'payload';
2
+ type GetRequestEmbedArgs = {
3
+ config: SanitizedConfig;
4
+ cookies: Map<string, string>;
5
+ };
6
+ /**
7
+ * Reads the embed cookie from the request so embed mode renders correctly on
8
+ * first paint for any load once the cookie exists. The `?embed=true` query
9
+ * parameter is handled client-side, because the root layout cannot see search
10
+ * params.
11
+ */
12
+ export declare const getRequestEmbed: ({ config, cookies }: GetRequestEmbedArgs) => boolean;
13
+ export {};
14
+ //# sourceMappingURL=getRequestEmbed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRequestEmbed.d.ts","sourceRoot":"","sources":["../../src/utilities/getRequestEmbed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAE9C,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC7B,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,eAAe,wBAAyB,mBAAmB,KAAG,OACN,CAAA"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Reads the embed cookie from the request so embed mode renders correctly on
3
+ * first paint for any load once the cookie exists. The `?embed=true` query
4
+ * parameter is handled client-side, because the root layout cannot see search
5
+ * params.
6
+ */export const getRequestEmbed = ({
7
+ config,
8
+ cookies
9
+ }) => cookies.get(`${config.cookiePrefix || 'payload'}-embed`) === 'true';
10
+ //# sourceMappingURL=getRequestEmbed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getRequestEmbed.js","names":["getRequestEmbed","config","cookies","get","cookiePrefix"],"sources":["../../src/utilities/getRequestEmbed.ts"],"sourcesContent":["import type { SanitizedConfig } from 'payload'\n\ntype GetRequestEmbedArgs = {\n config: SanitizedConfig\n cookies: Map<string, string>\n}\n\n/**\n * Reads the embed cookie from the request so embed mode renders correctly on\n * first paint for any load once the cookie exists. The `?embed=true` query\n * parameter is handled client-side, because the root layout cannot see search\n * params.\n */\nexport const getRequestEmbed = ({ config, cookies }: GetRequestEmbedArgs): boolean =>\n cookies.get(`${config.cookiePrefix || 'payload'}-embed`) === 'true'\n"],"mappings":"AAOA;;;;;GAMA,OAAO,MAAMA,eAAA,GAAkBA,CAAC;EAAEC,MAAM;EAAEC;AAAO,CAAuB,KACtEA,OAAA,CAAQC,GAAG,CAAC,GAAGF,MAAA,CAAOG,YAAY,IAAI,iBAAiB,MAAM","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"renderTable.d.ts","sourceRoot":"","sources":["../../src/utilities/renderTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EAEZ,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,SAAS,EACT,aAAa,EACb,OAAO,EACP,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAC1B,SAAS,EACV,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,eAAO,MAAM,aAAa,WAChB,KAAK,EAAE,aACJ,SAAS,KACnB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAoB3B,CAAA;AAEH,eAAO,MAAM,WAAW,qTAwBrB;IACD,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,KAAG;IACF,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;CAyNvB,CAAA"}
1
+ {"version":3,"file":"renderTable.d.ts","sourceRoot":"","sources":["../../src/utilities/renderTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,sBAAsB,EACtB,YAAY,EAEZ,gBAAgB,EAChB,MAAM,EACN,gBAAgB,EAChB,KAAK,EACL,SAAS,EACT,SAAS,EACT,aAAa,EACb,OAAO,EACP,cAAc,EACd,yBAAyB,EACzB,0BAA0B,EAC1B,SAAS,EACV,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAkB,KAAK,UAAU,EAAE,MAAM,0BAA0B,CAAA;AAE1E,OAAO,KAAK,MAAM,OAAO,CAAA;AA0BzB,eAAO,MAAM,aAAa,WAChB,KAAK,EAAE,aACJ,SAAS,KACnB,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,SAAS,CAoB3B,CAAA;AAEH,eAAO,MAAM,WAAW,qTAwBrB;IACD,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,gBAAgB,CAAC,EAAE,yBAAyB,CAAA;IAC5C,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,OAAO,EAAE,gBAAgB,EAAE,CAAA;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACzC,IAAI,CAAC,EAAE,aAAa,GAAG,SAAS,CAAA;IAChC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,gBAAgB,CAAC,EAAE,0BAA0B,CAAA;IAC7C,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,kBAAkB,EAAE,MAAM,CAAA;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,GAAG,CAAC,EAAE,cAAc,CAAA;IACpB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,eAAe,CAAC,EAAE,WAAW,GAAG,SAAS,CAAA;IACzC,UAAU,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAA;IACnD,QAAQ,CAAC,EAAE,SAAS,CAAA;CACrB,KAAG;IACF,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,KAAK,EAAE,KAAK,CAAC,SAAS,CAAA;CA6NvB,CAAA"}
@@ -138,8 +138,13 @@ export const renderTable = ({
138
138
  hidden: true
139
139
  },
140
140
  Heading: /*#__PURE__*/_jsx(SelectAll, {}),
141
- renderedCells: (data?.docs || []).map((_, i) => /*#__PURE__*/_jsx(SelectRow, {
142
- rowData: data?.docs[i]
141
+ renderedCells: (data?.docs || []).map((row, i) => /*#__PURE__*/_jsx(SelectRow, {
142
+ rowData: row,
143
+ selectRowLabel: getSelectRowLabel({
144
+ i18n,
145
+ rowData: row,
146
+ useAsTitle
147
+ })
143
148
  }, i))
144
149
  });
145
150
  }
@@ -224,4 +229,15 @@ export const renderTable = ({
224
229
  }, key)
225
230
  };
226
231
  };
232
+ const getSelectRowLabel = ({
233
+ i18n,
234
+ rowData,
235
+ useAsTitle
236
+ }) => {
237
+ const title = useAsTitle ? rowData[useAsTitle] : undefined;
238
+ const label = typeof title === 'number' || typeof title === 'string' && title ? String(title) : String(rowData.id);
239
+ return i18n.t('general:selectLabel', {
240
+ label
241
+ });
242
+ };
227
243
  //# sourceMappingURL=renderTable.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"renderTable.js","names":["getTranslation","fieldAffectsData","fieldIsHiddenOrDisabled","React","RenderServerComponent","TableSectionContent","TableSectionHeader","TableSectionRoot","GroupByHeader","GroupByPageControls","OrderableTable","Pill","SelectAll","SelectionProvider","SelectRow","SortHeader","SortRow","Table","filterFieldsWithPermissions","buildColumnState","renderFilters","fields","importMap","reduce","acc","field","admin","components","Filter","set","name","Component","Map","renderTable","clientCollectionConfig","clientConfig","collectionConfig","collections","columns","customCellProps","data","enableRowSelections","fieldPermissions","groupByFieldPath","groupByValue","heading","i18n","key","orderableFieldName","payload","query","renderRowTypes","req","showHeading","tableAppearance","useAsTitle","viewType","columnState","clientFields","serverFields","isPolymorphic","isGroupingBy","Boolean","groupBy","collection","find","each","slug","some","push","serverCollectionConfig","config","sharedArgs","collectionSlug","undefined","dataType","docs","columnsToUse","unshift","accessor","active","disabled","hidden","Heading","t","renderedCells","map","doc","i","_jsx","size","relationTo","labels","singular","_","rowData","className","filter","join","_jsxs","totalDocs","appearance","splice"],"sources":["../../src/utilities/renderTable.tsx"],"sourcesContent":["import type {\n ClientCollectionConfig,\n ClientConfig,\n ClientField,\n CollectionConfig,\n Column,\n ColumnPreference,\n Field,\n ImportMap,\n ListQuery,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ViewTypes,\n} from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\nimport { fieldAffectsData, fieldIsHiddenOrDisabled } from 'payload/shared'\nimport React from 'react'\n\nimport type { BuildColumnStateArgs } from '../providers/TableColumns/buildColumnState/index.js'\n\nimport { RenderServerComponent } from '../elements/RenderServerComponent/index.js'\nimport {\n TableSectionContent,\n TableSectionHeader,\n TableSectionRoot,\n} from '../elements/TableSection/index.js'\nimport {\n GroupByHeader,\n GroupByPageControls,\n OrderableTable,\n Pill,\n SelectAll,\n SelectionProvider,\n SelectRow,\n SortHeader,\n SortRow,\n Table,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- these MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../exports/client/index.js'\nimport { filterFieldsWithPermissions } from '../providers/TableColumns/buildColumnState/filterFieldsWithPermissions.js'\nimport { buildColumnState } from '../providers/TableColumns/buildColumnState/index.js'\n\nexport const renderFilters = (\n fields: Field[],\n importMap: ImportMap,\n): Map<string, React.ReactNode> =>\n fields.reduce(\n (acc, field) => {\n if (fieldIsHiddenOrDisabled(field)) {\n return acc\n }\n\n if ('name' in field && field.admin?.components?.Filter) {\n acc.set(\n field.name,\n RenderServerComponent({\n Component: field.admin.components?.Filter,\n importMap,\n }),\n )\n }\n\n return acc\n },\n new Map() as Map<string, React.ReactNode>,\n )\n\nexport const renderTable = ({\n clientCollectionConfig,\n clientConfig,\n collectionConfig,\n collections,\n columns,\n customCellProps,\n data,\n enableRowSelections,\n fieldPermissions,\n groupByFieldPath,\n groupByValue,\n heading,\n i18n,\n key = 'table',\n orderableFieldName,\n payload,\n query,\n renderRowTypes,\n req,\n showHeading,\n tableAppearance,\n useAsTitle,\n viewType,\n}: {\n clientCollectionConfig?: ClientCollectionConfig\n clientConfig?: ClientConfig\n collectionConfig?: SanitizedCollectionConfig\n collections?: string[]\n columns: ColumnPreference[]\n customCellProps?: Record<string, unknown>\n data?: PaginatedDocs | undefined\n drawerSlug?: string\n enableRowSelections: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n groupByFieldPath?: string\n groupByValue?: string\n heading?: string\n i18n: I18nClient\n key?: string\n orderableFieldName: string\n payload: Payload\n query?: ListQuery\n renderRowTypes?: boolean\n req?: PayloadRequest\n /** Show heading without requiring full groupBy context */\n showHeading?: boolean\n tableAppearance?: 'condensed' | 'default'\n useAsTitle: CollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n}): {\n columnState: Column[]\n Table: React.ReactNode\n} => {\n // Ensure that columns passed as args comply with the field config, i.e. `hidden`, `disabled.column`, etc.\n\n let columnState: Column[]\n let clientFields: ClientField[] = clientCollectionConfig?.fields || []\n let serverFields: Field[] = collectionConfig?.fields || []\n const isPolymorphic = collections\n\n const isGroupingBy = Boolean(query?.groupBy)\n\n if (isPolymorphic) {\n clientFields = []\n serverFields = []\n\n for (const collection of collections) {\n const clientCollectionConfig = clientConfig.collections.find(\n (each) => each.slug === collection,\n )\n\n for (const field of filterFieldsWithPermissions({\n fieldPermissions,\n fields: clientCollectionConfig.fields,\n })) {\n if (fieldAffectsData(field)) {\n if (clientFields.some((each) => fieldAffectsData(each) && each.name === field.name)) {\n continue\n }\n }\n\n clientFields.push(field)\n }\n\n const serverCollectionConfig = payload.collections[collection].config\n\n for (const field of filterFieldsWithPermissions<Field>({\n fieldPermissions,\n fields: serverCollectionConfig.fields,\n })) {\n if (fieldAffectsData(field)) {\n if (serverFields.some((each) => fieldAffectsData(each) && each.name === field.name)) {\n continue\n }\n }\n\n serverFields.push(field)\n }\n }\n }\n\n const sharedArgs: Pick<\n BuildColumnStateArgs,\n | 'clientFields'\n | 'columns'\n | 'customCellProps'\n | 'enableRowSelections'\n | 'fieldPermissions'\n | 'i18n'\n | 'payload'\n | 'req'\n | 'serverFields'\n | 'useAsTitle'\n | 'viewType'\n > = {\n clientFields,\n columns,\n enableRowSelections,\n fieldPermissions,\n i18n,\n // sortColumnProps,\n customCellProps,\n payload,\n req,\n serverFields,\n useAsTitle,\n viewType,\n }\n\n if (isPolymorphic) {\n columnState = buildColumnState({\n ...sharedArgs,\n collectionSlug: undefined,\n dataType: 'polymorphic',\n docs: data?.docs || [],\n })\n } else {\n columnState = buildColumnState({\n ...sharedArgs,\n collectionSlug: clientCollectionConfig.slug,\n dataType: 'monomorphic',\n docs: data?.docs || [],\n })\n }\n\n const columnsToUse = [...columnState]\n\n if (renderRowTypes) {\n columnsToUse.unshift({\n accessor: 'collection',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: i18n.t('version:type'),\n renderedCells: (data?.docs || []).map((doc, i) => (\n <Pill key={i} size=\"small\">\n {getTranslation(\n collections\n ? payload.collections[doc.relationTo].config.labels.singular\n : clientCollectionConfig.labels.singular,\n i18n,\n )}\n </Pill>\n )),\n } as Column)\n }\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: <SelectAll />,\n renderedCells: (data?.docs || []).map((_, i) => (\n <SelectRow key={i} rowData={data?.docs[i]} />\n )),\n } as Column)\n }\n\n if (isGroupingBy) {\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot\n className={['table-wrap', groupByValue !== undefined && `table-wrap--group-by`]\n .filter(Boolean)\n .join(' ')}\n data-group-id={groupByValue}\n key={key}\n >\n <SelectionProvider docs={data?.docs || []} totalDocs={data?.totalDocs || 0}>\n <TableSectionHeader heading={heading}>\n <GroupByHeader\n collectionConfig={clientCollectionConfig}\n groupByFieldPath={groupByFieldPath}\n groupByValue={groupByValue}\n heading={heading}\n />\n <GroupByPageControls data={data} groupByValue={groupByValue} />\n </TableSectionHeader>\n <TableSectionContent>\n <Table appearance={tableAppearance} columns={columnsToUse} data={data?.docs || []} />\n </TableSectionContent>\n </SelectionProvider>\n </TableSectionRoot>\n ),\n }\n }\n\n if (!orderableFieldName) {\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot className=\"table-wrap\" key={key}>\n {showHeading && heading && (\n <TableSectionHeader>\n <h4>{heading}</h4>\n </TableSectionHeader>\n )}\n <TableSectionContent>\n <Table appearance={tableAppearance} columns={columnsToUse} data={data?.docs || []} />\n </TableSectionContent>\n </TableSectionRoot>\n ),\n }\n }\n\n // Insert after _select column (index 1) so order is: _select, _dragHandle, ...rest\n columnsToUse.splice(enableRowSelections ? 1 : 0, 0, {\n accessor: '_dragHandle',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: <SortHeader />,\n renderedCells: (data?.docs || []).map((_, i) => <SortRow key={i} />),\n } as Column)\n\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot className=\"table-wrap\" key={key}>\n <TableSectionContent>\n <OrderableTable\n appearance={tableAppearance}\n collection={clientCollectionConfig}\n columns={columnsToUse}\n data={data?.docs || []}\n />\n </TableSectionContent>\n </TableSectionRoot>\n ),\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"renderTable.js","names":["getTranslation","fieldAffectsData","fieldIsHiddenOrDisabled","React","RenderServerComponent","TableSectionContent","TableSectionHeader","TableSectionRoot","GroupByHeader","GroupByPageControls","OrderableTable","Pill","SelectAll","SelectionProvider","SelectRow","SortHeader","SortRow","Table","filterFieldsWithPermissions","buildColumnState","renderFilters","fields","importMap","reduce","acc","field","admin","components","Filter","set","name","Component","Map","renderTable","clientCollectionConfig","clientConfig","collectionConfig","collections","columns","customCellProps","data","enableRowSelections","fieldPermissions","groupByFieldPath","groupByValue","heading","i18n","key","orderableFieldName","payload","query","renderRowTypes","req","showHeading","tableAppearance","useAsTitle","viewType","columnState","clientFields","serverFields","isPolymorphic","isGroupingBy","Boolean","groupBy","collection","find","each","slug","some","push","serverCollectionConfig","config","sharedArgs","collectionSlug","undefined","dataType","docs","columnsToUse","unshift","accessor","active","disabled","hidden","Heading","t","renderedCells","map","doc","i","_jsx","size","relationTo","labels","singular","row","rowData","selectRowLabel","getSelectRowLabel","className","filter","join","_jsxs","totalDocs","appearance","splice","_","title","label","String","id"],"sources":["../../src/utilities/renderTable.tsx"],"sourcesContent":["import type {\n ClientCollectionConfig,\n ClientConfig,\n ClientField,\n CollectionConfig,\n Column,\n ColumnPreference,\n Field,\n ImportMap,\n ListQuery,\n PaginatedDocs,\n Payload,\n PayloadRequest,\n SanitizedCollectionConfig,\n SanitizedFieldsPermissions,\n ViewTypes,\n} from 'payload'\n\nimport { getTranslation, type I18nClient } from '@payloadcms/translations'\nimport { fieldAffectsData, fieldIsHiddenOrDisabled } from 'payload/shared'\nimport React from 'react'\n\nimport type { BuildColumnStateArgs } from '../providers/TableColumns/buildColumnState/index.js'\n\nimport { RenderServerComponent } from '../elements/RenderServerComponent/index.js'\nimport {\n TableSectionContent,\n TableSectionHeader,\n TableSectionRoot,\n} from '../elements/TableSection/index.js'\nimport {\n GroupByHeader,\n GroupByPageControls,\n OrderableTable,\n Pill,\n SelectAll,\n SelectionProvider,\n SelectRow,\n SortHeader,\n SortRow,\n Table,\n // eslint-disable-next-line payload/no-imports-from-exports-dir -- these MUST reference the exports dir: https://github.com/payloadcms/payload/issues/12002#issuecomment-2791493587\n} from '../exports/client/index.js'\nimport { filterFieldsWithPermissions } from '../providers/TableColumns/buildColumnState/filterFieldsWithPermissions.js'\nimport { buildColumnState } from '../providers/TableColumns/buildColumnState/index.js'\n\nexport const renderFilters = (\n fields: Field[],\n importMap: ImportMap,\n): Map<string, React.ReactNode> =>\n fields.reduce(\n (acc, field) => {\n if (fieldIsHiddenOrDisabled(field)) {\n return acc\n }\n\n if ('name' in field && field.admin?.components?.Filter) {\n acc.set(\n field.name,\n RenderServerComponent({\n Component: field.admin.components?.Filter,\n importMap,\n }),\n )\n }\n\n return acc\n },\n new Map() as Map<string, React.ReactNode>,\n )\n\nexport const renderTable = ({\n clientCollectionConfig,\n clientConfig,\n collectionConfig,\n collections,\n columns,\n customCellProps,\n data,\n enableRowSelections,\n fieldPermissions,\n groupByFieldPath,\n groupByValue,\n heading,\n i18n,\n key = 'table',\n orderableFieldName,\n payload,\n query,\n renderRowTypes,\n req,\n showHeading,\n tableAppearance,\n useAsTitle,\n viewType,\n}: {\n clientCollectionConfig?: ClientCollectionConfig\n clientConfig?: ClientConfig\n collectionConfig?: SanitizedCollectionConfig\n collections?: string[]\n columns: ColumnPreference[]\n customCellProps?: Record<string, unknown>\n data?: PaginatedDocs | undefined\n drawerSlug?: string\n enableRowSelections: boolean\n fieldPermissions?: SanitizedFieldsPermissions\n groupByFieldPath?: string\n groupByValue?: string\n heading?: string\n i18n: I18nClient\n key?: string\n orderableFieldName: string\n payload: Payload\n query?: ListQuery\n renderRowTypes?: boolean\n req?: PayloadRequest\n /** Show heading without requiring full groupBy context */\n showHeading?: boolean\n tableAppearance?: 'condensed' | 'default'\n useAsTitle: CollectionConfig['admin']['useAsTitle']\n viewType?: ViewTypes\n}): {\n columnState: Column[]\n Table: React.ReactNode\n} => {\n // Ensure that columns passed as args comply with the field config, i.e. `hidden`, `disabled.column`, etc.\n\n let columnState: Column[]\n let clientFields: ClientField[] = clientCollectionConfig?.fields || []\n let serverFields: Field[] = collectionConfig?.fields || []\n const isPolymorphic = collections\n\n const isGroupingBy = Boolean(query?.groupBy)\n\n if (isPolymorphic) {\n clientFields = []\n serverFields = []\n\n for (const collection of collections) {\n const clientCollectionConfig = clientConfig.collections.find(\n (each) => each.slug === collection,\n )\n\n for (const field of filterFieldsWithPermissions({\n fieldPermissions,\n fields: clientCollectionConfig.fields,\n })) {\n if (fieldAffectsData(field)) {\n if (clientFields.some((each) => fieldAffectsData(each) && each.name === field.name)) {\n continue\n }\n }\n\n clientFields.push(field)\n }\n\n const serverCollectionConfig = payload.collections[collection].config\n\n for (const field of filterFieldsWithPermissions<Field>({\n fieldPermissions,\n fields: serverCollectionConfig.fields,\n })) {\n if (fieldAffectsData(field)) {\n if (serverFields.some((each) => fieldAffectsData(each) && each.name === field.name)) {\n continue\n }\n }\n\n serverFields.push(field)\n }\n }\n }\n\n const sharedArgs: Pick<\n BuildColumnStateArgs,\n | 'clientFields'\n | 'columns'\n | 'customCellProps'\n | 'enableRowSelections'\n | 'fieldPermissions'\n | 'i18n'\n | 'payload'\n | 'req'\n | 'serverFields'\n | 'useAsTitle'\n | 'viewType'\n > = {\n clientFields,\n columns,\n enableRowSelections,\n fieldPermissions,\n i18n,\n // sortColumnProps,\n customCellProps,\n payload,\n req,\n serverFields,\n useAsTitle,\n viewType,\n }\n\n if (isPolymorphic) {\n columnState = buildColumnState({\n ...sharedArgs,\n collectionSlug: undefined,\n dataType: 'polymorphic',\n docs: data?.docs || [],\n })\n } else {\n columnState = buildColumnState({\n ...sharedArgs,\n collectionSlug: clientCollectionConfig.slug,\n dataType: 'monomorphic',\n docs: data?.docs || [],\n })\n }\n\n const columnsToUse = [...columnState]\n\n if (renderRowTypes) {\n columnsToUse.unshift({\n accessor: 'collection',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: i18n.t('version:type'),\n renderedCells: (data?.docs || []).map((doc, i) => (\n <Pill key={i} size=\"small\">\n {getTranslation(\n collections\n ? payload.collections[doc.relationTo].config.labels.singular\n : clientCollectionConfig.labels.singular,\n i18n,\n )}\n </Pill>\n )),\n } as Column)\n }\n\n if (enableRowSelections) {\n columnsToUse.unshift({\n accessor: '_select',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: <SelectAll />,\n renderedCells: (data?.docs || []).map((row, i) => (\n <SelectRow\n key={i}\n rowData={row}\n selectRowLabel={getSelectRowLabel({ i18n, rowData: row, useAsTitle })}\n />\n )),\n } as Column)\n }\n\n if (isGroupingBy) {\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot\n className={['table-wrap', groupByValue !== undefined && `table-wrap--group-by`]\n .filter(Boolean)\n .join(' ')}\n data-group-id={groupByValue}\n key={key}\n >\n <SelectionProvider docs={data?.docs || []} totalDocs={data?.totalDocs || 0}>\n <TableSectionHeader heading={heading}>\n <GroupByHeader\n collectionConfig={clientCollectionConfig}\n groupByFieldPath={groupByFieldPath}\n groupByValue={groupByValue}\n heading={heading}\n />\n <GroupByPageControls data={data} groupByValue={groupByValue} />\n </TableSectionHeader>\n <TableSectionContent>\n <Table appearance={tableAppearance} columns={columnsToUse} data={data?.docs || []} />\n </TableSectionContent>\n </SelectionProvider>\n </TableSectionRoot>\n ),\n }\n }\n\n if (!orderableFieldName) {\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot className=\"table-wrap\" key={key}>\n {showHeading && heading && (\n <TableSectionHeader>\n <h4>{heading}</h4>\n </TableSectionHeader>\n )}\n <TableSectionContent>\n <Table appearance={tableAppearance} columns={columnsToUse} data={data?.docs || []} />\n </TableSectionContent>\n </TableSectionRoot>\n ),\n }\n }\n\n // Insert after _select column (index 1) so order is: _select, _dragHandle, ...rest\n columnsToUse.splice(enableRowSelections ? 1 : 0, 0, {\n accessor: '_dragHandle',\n active: true,\n field: {\n admin: {\n disabled: true,\n },\n hidden: true,\n },\n Heading: <SortHeader />,\n renderedCells: (data?.docs || []).map((_, i) => <SortRow key={i} />),\n } as Column)\n\n return {\n columnState,\n // key is required since Next.js 15.2.0 to prevent React key error\n Table: (\n <TableSectionRoot className=\"table-wrap\" key={key}>\n <TableSectionContent>\n <OrderableTable\n appearance={tableAppearance}\n collection={clientCollectionConfig}\n columns={columnsToUse}\n data={data?.docs || []}\n />\n </TableSectionContent>\n </TableSectionRoot>\n ),\n }\n}\n\nconst getSelectRowLabel = ({\n i18n,\n rowData,\n useAsTitle,\n}: {\n i18n: I18nClient\n rowData: { id: number | string } & Record<string, unknown>\n useAsTitle: CollectionConfig['admin']['useAsTitle']\n}) => {\n const title = useAsTitle ? rowData[useAsTitle] : undefined\n const label =\n typeof title === 'number' || (typeof title === 'string' && title)\n ? String(title)\n : String(rowData.id)\n\n return i18n.t('general:selectLabel', { label })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utilities/slugify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAGL,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAE/B,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CACzC,yBAAyB,EACzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAiC7B,CAAA"}
1
+ {"version":3,"file":"slugify.d.ts","sourceRoot":"","sources":["../../src/utilities/slugify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,EAML,KAAK,cAAc,EACnB,KAAK,yBAAyB,EAE/B,MAAM,SAAS,CAAA;AAGhB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,EAAE,cAAc,CACzC,yBAAyB,EACzB,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAkF7B,CAAA"}
@@ -1,4 +1,4 @@
1
- import { flattenAllFields, getFieldByPath, UnauthorizedError } from 'payload';
1
+ import { executeAccess, getFieldByPath, getSlugFallbackValue, getUniqueFieldValue, hasDraftsEnabled, UnauthorizedError } from 'payload';
2
2
  import { slugify as defaultSlugify } from 'payload/shared';
3
3
  /**
4
4
  * This server function is directly related to the {@link https://payloadcms.com/docs/fields/slug | Slug Field}.
@@ -13,9 +13,11 @@ import { slugify as defaultSlugify } from 'payload/shared';
13
13
  */
14
14
  export const slugifyHandler = async args => {
15
15
  const {
16
+ id,
16
17
  collectionSlug,
17
18
  data,
18
19
  globalSlug,
20
+ locale,
19
21
  path,
20
22
  req,
21
23
  valueToSlugify
@@ -31,17 +33,58 @@ export const slugifyHandler = async args => {
31
33
  field
32
34
  } = getFieldByPath({
33
35
  config: req.payload.config,
34
- fields: flattenAllFields({
35
- fields: docConfig.fields
36
- }),
36
+ fields: docConfig.flattenedFields,
37
37
  path
38
38
  });
39
39
  const customSlugify = typeof field?.custom?.slugify === 'function' ? field.custom.slugify : undefined;
40
- const result = customSlugify ? await customSlugify({
40
+ const slugify = valueToSlugify => customSlugify ? customSlugify({
41
41
  data,
42
42
  req,
43
43
  valueToSlugify
44
44
  }) : defaultSlugify(valueToSlugify);
45
- return result;
45
+ const result = await slugify(valueToSlugify);
46
+ const collectionConfig = collectionSlug ? req.payload.collections[collectionSlug]?.config : null;
47
+ // Uniqueness dedupe only applies to a collection's slug field. Globals have no collection to
48
+ // dedupe against, so their result is returned as-is.
49
+ if (!collectionConfig || !field || field.type !== 'slug' || !('name' in field)) {
50
+ return result;
51
+ }
52
+ // Probing reads across the whole collection with the raw db, so require unrestricted read access —
53
+ // a row-filtered (`Where`) result is treated as not allowed, since scoping the probe to readable
54
+ // rows would break uniqueness.
55
+ const canRead = await executeAccess({
56
+ disableErrors: true,
57
+ req
58
+ }, collectionConfig.access.read);
59
+ if (canRead !== true) {
60
+ return result;
61
+ }
62
+ // A localized slug is unique per-locale, so scope the probe to the current locale — otherwise it
63
+ // dedupes against the default locale and can hand back a colliding value. The client passes the
64
+ // active admin locale; fall back to the request's own locale.
65
+ const localeToScope = field.localized ? locale ?? req.locale ?? undefined : undefined;
66
+ // The current doc is excluded so a regenerate can reuse its own value rather than bump past it.
67
+ const excludeId = typeof id === 'string' || typeof id === 'number' ? id : undefined;
68
+ // A source resolved to a value: dedupe it the same way the next save would, so the generate button
69
+ // can't hand back a slug that's already taken. With no source, return the `<singular>-N` fallback.
70
+ if (result) {
71
+ return getUniqueFieldValue({
72
+ id: excludeId,
73
+ collection: collectionConfig.slug,
74
+ draftsEnabled: hasDraftsEnabled(collectionConfig),
75
+ field: field.name,
76
+ locale: localeToScope,
77
+ req,
78
+ value: result
79
+ });
80
+ }
81
+ return getSlugFallbackValue({
82
+ id: excludeId,
83
+ collection: collectionConfig,
84
+ field: field.name,
85
+ locale: localeToScope,
86
+ req,
87
+ slugify
88
+ });
46
89
  };
47
90
  //# sourceMappingURL=slugify.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"slugify.js","names":["flattenAllFields","getFieldByPath","UnauthorizedError","slugify","defaultSlugify","slugifyHandler","args","collectionSlug","data","globalSlug","path","req","valueToSlugify","user","docConfig","payload","collections","config","globals","find","g","slug","Error","field","fields","customSlugify","custom","undefined","result"],"sources":["../../src/utilities/slugify.ts"],"sourcesContent":["import type { Slugify } from 'payload/shared'\n\nimport {\n flattenAllFields,\n getFieldByPath,\n type ServerFunction,\n type SlugifyServerFunctionArgs,\n UnauthorizedError,\n} from 'payload'\nimport { slugify as defaultSlugify } from 'payload/shared'\n\n/**\n * This server function is directly related to the {@link https://payloadcms.com/docs/fields/slug | Slug Field}.\n * This is a server function that is used to invoke the user's custom slugify function from the client.\n * This pattern is required, as there is no other way for us to pass their function across the client-server boundary.\n * - Not through props\n * - Not from a server function defined within a server component (see below)\n * When a server function contains non-serializable data within its closure, it gets passed through the boundary (and breaks).\n * The only way to pass server functions to the client (that contain non-serializable data) is if it is globally defined.\n * But we also cannot define this function alongside the server component, as we will not have access to their custom slugify function.\n * See `ServerFunctionsProvider` for more details.\n */\nexport const slugifyHandler: ServerFunction<\n SlugifyServerFunctionArgs,\n Promise<ReturnType<Slugify>>\n> = async (args) => {\n const { collectionSlug, data, globalSlug, path, req, valueToSlugify } = args\n\n if (!req.user) {\n throw new UnauthorizedError()\n }\n\n const docConfig = collectionSlug\n ? req.payload.collections[collectionSlug]?.config\n : globalSlug\n ? req.payload.config.globals.find((g) => g.slug === globalSlug)\n : null\n\n if (!docConfig) {\n throw new Error()\n }\n\n const { field } = getFieldByPath({\n config: req.payload.config,\n fields: flattenAllFields({ fields: docConfig.fields }),\n path,\n })\n\n const customSlugify = (\n typeof field?.custom?.slugify === 'function' ? field.custom.slugify : undefined\n ) as Slugify\n\n const result = customSlugify\n ? await customSlugify({ data, req, valueToSlugify })\n : defaultSlugify(valueToSlugify)\n\n return result\n}\n"],"mappings":"AAEA,SACEA,gBAAgB,EAChBC,cAAc,EAGdC,iBAAiB,QACZ;AACP,SAASC,OAAA,IAAWC,cAAc,QAAQ;AAE1C;;;;;;;;;;;AAWA,OAAO,MAAMC,cAAA,GAGT,MAAOC,IAAA;EACT,MAAM;IAAEC,cAAc;IAAEC,IAAI;IAAEC,UAAU;IAAEC,IAAI;IAAEC,GAAG;IAAEC;EAAc,CAAE,GAAGN,IAAA;EAExE,IAAI,CAACK,GAAA,CAAIE,IAAI,EAAE;IACb,MAAM,IAAIX,iBAAA;EACZ;EAEA,MAAMY,SAAA,GAAYP,cAAA,GACdI,GAAA,CAAII,OAAO,CAACC,WAAW,CAACT,cAAA,CAAe,EAAEU,MAAA,GACzCR,UAAA,GACEE,GAAA,CAAII,OAAO,CAACE,MAAM,CAACC,OAAO,CAACC,IAAI,CAAEC,CAAA,IAAMA,CAAA,CAAEC,IAAI,KAAKZ,UAAA,IAClD;EAEN,IAAI,CAACK,SAAA,EAAW;IACd,MAAM,IAAIQ,KAAA;EACZ;EAEA,MAAM;IAAEC;EAAK,CAAE,GAAGtB,cAAA,CAAe;IAC/BgB,MAAA,EAAQN,GAAA,CAAII,OAAO,CAACE,MAAM;IAC1BO,MAAA,EAAQxB,gBAAA,CAAiB;MAAEwB,MAAA,EAAQV,SAAA,CAAUU;IAAO;IACpDd;EACF;EAEA,MAAMe,aAAA,GACJ,OAAOF,KAAA,EAAOG,MAAA,EAAQvB,OAAA,KAAY,aAAaoB,KAAA,CAAMG,MAAM,CAACvB,OAAO,GAAGwB,SAAA;EAGxE,MAAMC,MAAA,GAASH,aAAA,GACX,MAAMA,aAAA,CAAc;IAAEjB,IAAA;IAAMG,GAAA;IAAKC;EAAe,KAChDR,cAAA,CAAeQ,cAAA;EAEnB,OAAOgB,MAAA;AACT","ignoreList":[]}
1
+ {"version":3,"file":"slugify.js","names":["executeAccess","getFieldByPath","getSlugFallbackValue","getUniqueFieldValue","hasDraftsEnabled","UnauthorizedError","slugify","defaultSlugify","slugifyHandler","args","id","collectionSlug","data","globalSlug","locale","path","req","valueToSlugify","user","docConfig","payload","collections","config","globals","find","g","slug","Error","field","fields","flattenedFields","customSlugify","custom","undefined","result","collectionConfig","type","canRead","disableErrors","access","read","localeToScope","localized","excludeId","collection","draftsEnabled","name","value"],"sources":["../../src/utilities/slugify.ts"],"sourcesContent":["import type { Slugify } from 'payload/shared'\n\nimport {\n executeAccess,\n getFieldByPath,\n getSlugFallbackValue,\n getUniqueFieldValue,\n hasDraftsEnabled,\n type ServerFunction,\n type SlugifyServerFunctionArgs,\n UnauthorizedError,\n} from 'payload'\nimport { slugify as defaultSlugify } from 'payload/shared'\n\n/**\n * This server function is directly related to the {@link https://payloadcms.com/docs/fields/slug | Slug Field}.\n * This is a server function that is used to invoke the user's custom slugify function from the client.\n * This pattern is required, as there is no other way for us to pass their function across the client-server boundary.\n * - Not through props\n * - Not from a server function defined within a server component (see below)\n * When a server function contains non-serializable data within its closure, it gets passed through the boundary (and breaks).\n * The only way to pass server functions to the client (that contain non-serializable data) is if it is globally defined.\n * But we also cannot define this function alongside the server component, as we will not have access to their custom slugify function.\n * See `ServerFunctionsProvider` for more details.\n */\nexport const slugifyHandler: ServerFunction<\n SlugifyServerFunctionArgs,\n Promise<ReturnType<Slugify>>\n> = async (args) => {\n const { id, collectionSlug, data, globalSlug, locale, path, req, valueToSlugify } = args\n\n if (!req.user) {\n throw new UnauthorizedError()\n }\n\n const docConfig = collectionSlug\n ? req.payload.collections[collectionSlug]?.config\n : globalSlug\n ? req.payload.config.globals.find((g) => g.slug === globalSlug)\n : null\n\n if (!docConfig) {\n throw new Error()\n }\n\n const { field } = getFieldByPath({\n config: req.payload.config,\n fields: docConfig.flattenedFields,\n path,\n })\n\n const customSlugify = (\n typeof field?.custom?.slugify === 'function' ? field.custom.slugify : undefined\n ) as Slugify\n\n const slugify = (valueToSlugify: unknown) =>\n customSlugify\n ? customSlugify({ data, req, valueToSlugify })\n : defaultSlugify(valueToSlugify as string)\n\n const result = await slugify(valueToSlugify)\n\n const collectionConfig = collectionSlug ? req.payload.collections[collectionSlug]?.config : null\n\n // Uniqueness dedupe only applies to a collection's slug field. Globals have no collection to\n // dedupe against, so their result is returned as-is.\n if (!collectionConfig || !field || field.type !== 'slug' || !('name' in field)) {\n return result\n }\n\n // Probing reads across the whole collection with the raw db, so require unrestricted read access —\n // a row-filtered (`Where`) result is treated as not allowed, since scoping the probe to readable\n // rows would break uniqueness.\n const canRead = await executeAccess({ disableErrors: true, req }, collectionConfig.access.read)\n\n if (canRead !== true) {\n return result\n }\n\n // A localized slug is unique per-locale, so scope the probe to the current locale — otherwise it\n // dedupes against the default locale and can hand back a colliding value. The client passes the\n // active admin locale; fall back to the request's own locale.\n const localeToScope = field.localized ? (locale ?? req.locale ?? undefined) : undefined\n\n // The current doc is excluded so a regenerate can reuse its own value rather than bump past it.\n const excludeId = typeof id === 'string' || typeof id === 'number' ? id : undefined\n\n // A source resolved to a value: dedupe it the same way the next save would, so the generate button\n // can't hand back a slug that's already taken. With no source, return the `<singular>-N` fallback.\n if (result) {\n return getUniqueFieldValue({\n id: excludeId,\n collection: collectionConfig.slug,\n draftsEnabled: hasDraftsEnabled(collectionConfig),\n field: field.name,\n locale: localeToScope,\n req,\n value: result,\n })\n }\n\n return getSlugFallbackValue({\n id: excludeId,\n collection: collectionConfig,\n field: field.name,\n locale: localeToScope,\n req,\n slugify,\n })\n}\n"],"mappings":"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","ignoreList":[]}
@@ -66,7 +66,6 @@
66
66
 
67
67
  .widget-wrapper__controls {
68
68
  opacity: 0;
69
- transition: opacity 0.2s ease;
70
69
  }
71
70
 
72
71
  .widget:focus-visible .widget-wrapper__controls,
@@ -94,10 +93,6 @@
94
93
  width: 100%;
95
94
  }
96
95
 
97
- .widget-wrapper--editing .widget-wrapper__controls {
98
- transition: opacity 0.2s ease;
99
- }
100
-
101
96
  .widget-wrapper--editing:hover .widget-wrapper__controls {
102
97
  opacity: 1;
103
98
  }
@@ -123,7 +118,6 @@
123
118
  border-radius: var(--radius-small);
124
119
  cursor: pointer;
125
120
  color: var(--color-text-ondanger);
126
- transition: all 0.2s ease;
127
121
 
128
122
  &:hover {
129
123
  background: var(--color-bg-danger-hover);
@@ -154,7 +148,6 @@
154
148
  border-radius: var(--radius-small);
155
149
  cursor: pointer;
156
150
  color: var(--color-bg);
157
- transition: all 0.2s ease;
158
151
 
159
152
  & .icon {
160
153
  width: var(--spacer-3);
@@ -185,7 +178,6 @@
185
178
  border: none;
186
179
  border-radius: var(--radius-small);
187
180
  cursor: pointer;
188
- transition: all 0.2s ease;
189
181
  font-family: var(--text-body-small-font-family);
190
182
  font-size: var(--text-body-small-font-size);
191
183
  font-weight: var(--text-body-small-font-weight);
@@ -45,11 +45,11 @@ export const RenderWidget = t0 => {
45
45
  }
46
46
  setComponent(React.createElement("div", {
47
47
  style: {
48
- background: "var(--theme-error-50)",
49
- border: "var(--stroke-width-small) solid var(--theme-error-200)",
50
- borderRadius: "4px",
48
+ background: "var(--color-bg-danger-tertiary)",
49
+ border: "var(--stroke-width-small) solid var(--color-border-danger)",
50
+ borderRadius: "var(--radius-medium)",
51
51
  color: "var(--color-text-danger)",
52
- padding: "20px",
52
+ padding: "var(--spacer-3)",
53
53
  textAlign: "center"
54
54
  }
55
55
  }, "Failed to load widget. Please try again later."));
@@ -1 +1 @@
1
- {"version":3,"file":"RenderWidget.js","names":["c","_c","React","useCallback","useEffect","useRef","ShimmerEffect","useServerFunctions","RenderWidget","t0","$","widgetData","widgetId","Component","setComponent","useState","serverFunction","requestIDRef","t1","render","requestID","current","widgetSlug","slice","lastIndexOf","result","name","args","component","t2","createElement","style","background","border","borderRadius","color","padding","textAlign","renderWidget","t3","t4","Symbol","for","_jsx","height","_Fragment","children"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\nimport { ShimmerEffect } from '../../../../../elements/ShimmerEffect/index.js'\nimport { useServerFunctions } from '../../../../../providers/ServerFunctions/index.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ widgetData, widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n const requestIDRef = useRef(0)\n\n const renderWidget = useCallback(() => {\n async function render() {\n const requestID = ++requestIDRef.current\n setComponent(null)\n\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n widgetData,\n widgetSlug,\n } as RenderWidgetServerFnArgs,\n })) as RenderWidgetServerFnReturnType\n\n if (requestID !== requestIDRef.current) {\n return\n }\n\n setComponent(result.component)\n } catch (_error) {\n if (requestID !== requestIDRef.current) {\n return\n }\n\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--theme-error-50)',\n border: 'var(--stroke-width-small) solid var(--theme-error-200)',\n borderRadius: '4px',\n color: 'var(--color-text-danger)',\n padding: '20px',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetData, widgetId])\n\n useEffect(() => {\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ;AAOtD,SAASC,aAAa,QAAQ;AAC9B,SAASC,kBAAkB,QAAQ;AAEnC;;;AAGA,OAAO,MAAMC,YAAA,GASRC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC;EAAA,IAAAH,EAAwB;EAC5B,OAAAI,SAAA,EAAAC,YAAA,IAAkCZ,KAAA,CAAAa,QAAA,KAAuC;EACzE;IAAAC;EAAA,IAA2BT,kBAAA;EAC3B,MAAAU,YAAA,GAAqBZ,MAAA,EAAO;EAAA,IAAAa,EAAA;EAAA,IAAAR,CAAA,QAAAM,cAAA,IAAAN,CAAA,QAAAC,UAAA,IAAAD,CAAA,QAAAE,QAAA;IAEKM,EAAA,GAAAA,CAAA;MAC/B,MAAAC,MAAA,kBAAAA,OAAA;QACE,MAAAC,SAAA,GAAoBH,YAAA,CAAAI,OAAA,GAAAJ,YAAA,CAAAI,OAAA,IAAoB;QACxCP,YAAA,KAAa;QAAA;QAAA;UAGX,MAAAQ,UAAA,GAAmBV,QAAA,CAAAW,KAAA,IAAkBX,QAAA,CAAAY,WAAA,CAAqB;UAE1D,MAAAC,MAAA,SAAsBT,cAAA;YAAAU,IAAA,EACd;YAAAC,IAAA;cAAAhB,UAAA;cAAAW;YAAA;UAAA,CAKR;UAAA,IAEIF,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAItCP,YAAA,CAAaW,MAAA,CAAAG,SAAgB;QAAA,SAAAC,EAAA;UAAA,IAEzBT,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAOtCP,YAAA,CACEZ,KAAA,CAAA4B,aAAA,CACE;YAAAC,KAAA;cAAAC,UAAA,EAGgB;cAAAC,MAAA,EACJ;cAAAC,YAAA,EACM;cAAAC,KAAA,EACP;cAAAC,OAAA,EACE;cAAAC,SAAA,EACE;YAAA;UAAA,GAGf;QAAA;MAAA;MAKHlB,MAAA;IAAA;IACPT,CAAA,MAAAM,cAAA;IAAAN,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAhDA,MAAA4B,YAAA,GAAqBpB,EAgDoB;EAAA,IAAAW,EAAA;EAAA,IAAAU,EAAA;EAAA,IAAA7B,CAAA,QAAA4B,YAAA;IAE/BT,EAAA,GAAAA,CAAA;MACHS,YAAA;IAAA;IACJC,EAAA,IAACD,YAAA;IAAa5B,CAAA,MAAA4B,YAAA;IAAA5B,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAA6B,EAAA;EAAA;IAAAV,EAAA,GAAAnB,CAAA;IAAA6B,EAAA,GAAA7B,CAAA;EAAA;EAFjBN,SAAA,CAAUyB,EAEV,EAAGU,EAAc;EAAA,KAEZ1B,SAAA;IAAA,IAAA2B,EAAA;IAAA,IAAA9B,CAAA,QAAA+B,MAAA,CAAAC,GAAA;MACIF,EAAA,GAAAG,IAAA,CAAArC,aAAA;QAAAsC,MAAA,EAAsB;MAAA,C;;;;;WAAtBJ,E;;;;IAGFA,EAAA,GAAAG,IAAA,CAAAE,SAAA;MAAAC,QAAA,EAAGjC;IAAA,C;;;;;;SAAH2B,E;CACT","ignoreList":[]}
1
+ {"version":3,"file":"RenderWidget.js","names":["c","_c","React","useCallback","useEffect","useRef","ShimmerEffect","useServerFunctions","RenderWidget","t0","$","widgetData","widgetId","Component","setComponent","useState","serverFunction","requestIDRef","t1","render","requestID","current","widgetSlug","slice","lastIndexOf","result","name","args","component","t2","createElement","style","background","border","borderRadius","color","padding","textAlign","renderWidget","t3","t4","Symbol","for","_jsx","height","_Fragment","children"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.tsx"],"sourcesContent":["'use client'\n\nimport React, { useCallback, useEffect, useRef } from 'react'\n\nimport type {\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType,\n} from './renderWidgetServerFn.js'\n\nimport { ShimmerEffect } from '../../../../../elements/ShimmerEffect/index.js'\nimport { useServerFunctions } from '../../../../../providers/ServerFunctions/index.js'\n\n/**\n * Utility to render a widget on-demand on the client.\n */\nexport const RenderWidget: React.FC<{\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * Unique ID for this widget instance (format: \"slug-timestamp\")\n */\n widgetId: string\n}> = ({ widgetData, widgetId }) => {\n const [Component, setComponent] = React.useState<null | React.ReactNode>(null)\n const { serverFunction } = useServerFunctions()\n const requestIDRef = useRef(0)\n\n const renderWidget = useCallback(() => {\n async function render() {\n const requestID = ++requestIDRef.current\n setComponent(null)\n\n try {\n const widgetSlug = widgetId.slice(0, widgetId.lastIndexOf('-'))\n\n const result = (await serverFunction({\n name: 'render-widget',\n args: {\n widgetData,\n widgetSlug,\n } as RenderWidgetServerFnArgs,\n })) as RenderWidgetServerFnReturnType\n\n if (requestID !== requestIDRef.current) {\n return\n }\n\n setComponent(result.component)\n } catch (_error) {\n if (requestID !== requestIDRef.current) {\n return\n }\n\n // Log error but don't expose details to console in production\n\n // Fallback error component\n setComponent(\n React.createElement(\n 'div',\n {\n style: {\n background: 'var(--color-bg-danger-tertiary)',\n border: 'var(--stroke-width-small) solid var(--color-border-danger)',\n borderRadius: 'var(--radius-medium)',\n color: 'var(--color-text-danger)',\n padding: 'var(--spacer-3)',\n textAlign: 'center',\n },\n },\n 'Failed to load widget. Please try again later.',\n ),\n )\n }\n }\n void render()\n }, [serverFunction, widgetData, widgetId])\n\n useEffect(() => {\n void renderWidget()\n }, [renderWidget])\n\n if (!Component) {\n return <ShimmerEffect height=\"100%\" />\n }\n\n return <>{Component}</>\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AAEA,OAAOC,KAAA,IAASC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ;AAOtD,SAASC,aAAa,QAAQ;AAC9B,SAASC,kBAAkB,QAAQ;AAEnC;;;AAGA,OAAO,MAAMC,YAAA,GASRC,EAAA;EAAA,MAAAC,CAAA,GAAAT,EAAA;EAAC;IAAAU,UAAA;IAAAC;EAAA,IAAAH,EAAwB;EAC5B,OAAAI,SAAA,EAAAC,YAAA,IAAkCZ,KAAA,CAAAa,QAAA,KAAuC;EACzE;IAAAC;EAAA,IAA2BT,kBAAA;EAC3B,MAAAU,YAAA,GAAqBZ,MAAA,EAAO;EAAA,IAAAa,EAAA;EAAA,IAAAR,CAAA,QAAAM,cAAA,IAAAN,CAAA,QAAAC,UAAA,IAAAD,CAAA,QAAAE,QAAA;IAEKM,EAAA,GAAAA,CAAA;MAC/B,MAAAC,MAAA,kBAAAA,OAAA;QACE,MAAAC,SAAA,GAAoBH,YAAA,CAAAI,OAAA,GAAAJ,YAAA,CAAAI,OAAA,IAAoB;QACxCP,YAAA,KAAa;QAAA;QAAA;UAGX,MAAAQ,UAAA,GAAmBV,QAAA,CAAAW,KAAA,IAAkBX,QAAA,CAAAY,WAAA,CAAqB;UAE1D,MAAAC,MAAA,SAAsBT,cAAA;YAAAU,IAAA,EACd;YAAAC,IAAA;cAAAhB,UAAA;cAAAW;YAAA;UAAA,CAKR;UAAA,IAEIF,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAItCP,YAAA,CAAaW,MAAA,CAAAG,SAAgB;QAAA,SAAAC,EAAA;UAAA,IAEzBT,SAAA,KAAcH,YAAA,CAAAI,OAAoB;YAAA;UAAA;UAOtCP,YAAA,CACEZ,KAAA,CAAA4B,aAAA,CACE;YAAAC,KAAA;cAAAC,UAAA,EAGgB;cAAAC,MAAA,EACJ;cAAAC,YAAA,EACM;cAAAC,KAAA,EACP;cAAAC,OAAA,EACE;cAAAC,SAAA,EACE;YAAA;UAAA,GAGf;QAAA;MAAA;MAKHlB,MAAA;IAAA;IACPT,CAAA,MAAAM,cAAA;IAAAN,CAAA,MAAAC,UAAA;IAAAD,CAAA,MAAAE,QAAA;IAAAF,CAAA,MAAAQ,EAAA;EAAA;IAAAA,EAAA,GAAAR,CAAA;EAAA;EAhDA,MAAA4B,YAAA,GAAqBpB,EAgDoB;EAAA,IAAAW,EAAA;EAAA,IAAAU,EAAA;EAAA,IAAA7B,CAAA,QAAA4B,YAAA;IAE/BT,EAAA,GAAAA,CAAA;MACHS,YAAA;IAAA;IACJC,EAAA,IAACD,YAAA;IAAa5B,CAAA,MAAA4B,YAAA;IAAA5B,CAAA,MAAAmB,EAAA;IAAAnB,CAAA,MAAA6B,EAAA;EAAA;IAAAV,EAAA,GAAAnB,CAAA;IAAA6B,EAAA,GAAA7B,CAAA;EAAA;EAFjBN,SAAA,CAAUyB,EAEV,EAAGU,EAAc;EAAA,KAEZ1B,SAAA;IAAA,IAAA2B,EAAA;IAAA,IAAA9B,CAAA,QAAA+B,MAAA,CAAAC,GAAA;MACIF,EAAA,GAAAG,IAAA,CAAArC,aAAA;QAAAsC,MAAA,EAAsB;MAAA,C;;;;;WAAtBJ,E;;;;IAGFA,EAAA,GAAAG,IAAA,CAAAE,SAAA;MAAAC,QAAA,EAAGjC;IAAA,C;;;;;;SAAH2B,E;CACT","ignoreList":[]}
@@ -28,11 +28,11 @@ export const renderWidgetHandler = ({
28
28
  return {
29
29
  component: React.createElement('div', {
30
30
  style: {
31
- background: 'var(--theme-elevation-50)',
32
- border: 'var(--stroke-width-small) solid var(--theme-elevation-200)',
33
- borderRadius: '4px',
34
- color: 'var(--theme-text)',
35
- padding: '20px',
31
+ background: 'var(--color-bg-secondary)',
32
+ border: 'var(--stroke-width-small) solid var(--color-border)',
33
+ borderRadius: 'var(--radius-medium)',
34
+ color: 'var(--color-text)',
35
+ padding: 'var(--spacer-3)',
36
36
  textAlign: 'center'
37
37
  }
38
38
  }, `Widget "${widgetSlug}" not found`)
@@ -66,11 +66,11 @@ export const renderWidgetHandler = ({
66
66
  return {
67
67
  component: React.createElement('div', {
68
68
  style: {
69
- background: 'var(--theme-error-50)',
70
- border: 'var(--stroke-width-small) solid var(--theme-error-200)',
71
- borderRadius: '4px',
72
- color: 'var(--theme-error-text)',
73
- padding: '20px',
69
+ background: 'var(--color-bg-danger-tertiary)',
70
+ border: 'var(--stroke-width-small) solid var(--color-border-danger)',
71
+ borderRadius: 'var(--radius-medium)',
72
+ color: 'var(--color-text-danger)',
73
+ padding: 'var(--spacer-3)',
74
74
  textAlign: 'center'
75
75
  }
76
76
  }, 'Error loading widget')
@@ -1 +1 @@
1
- {"version":3,"file":"renderWidgetServerFn.js","names":["React","RenderServerComponent","extractLocaleData","renderWidgetHandler","cookies","locale","permissions","req","widgetData","widgetSlug","user","Error","widgets","payload","config","admin","dashboard","importMap","widgetConfig","find","widget","slug","component","createElement","style","background","border","borderRadius","color","padding","textAlign","localeFilteredData","fields","length","serverProps","Component","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.ts"],"sourcesContent":["import type { Field, ServerFunction, WidgetServerProps } from 'payload'\n\nimport React from 'react'\n\nimport { RenderServerComponent } from '../../../../../elements/RenderServerComponent/index.js'\nimport { extractLocaleData } from '../utils/localeUtils.js'\n\nexport type RenderWidgetServerFnArgs = {\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * The slug of the widget to render\n */\n widgetSlug: string\n}\n\nexport type RenderWidgetServerFnReturnType = {\n component: React.ReactNode\n}\n\n/**\n * Server function to render a widget on-demand.\n * Similar to render-field but specifically for dashboard widgets.\n */\nexport const renderWidgetHandler: ServerFunction<\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType\n> = ({ cookies, locale, permissions, req, widgetData, widgetSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { widgets } = req.payload.config.admin.dashboard\n const { importMap } = req.payload\n\n // Find the widget configuration\n const widgetConfig = widgets.find((widget) => widget.slug === widgetSlug)\n\n if (!widgetConfig) {\n return {\n component: React.createElement(\n 'div',\n {\n style: {\n background: 'var(--theme-elevation-50)',\n border: 'var(--stroke-width-small) solid var(--theme-elevation-200)',\n borderRadius: '4px',\n color: 'var(--theme-text)',\n padding: '20px',\n textAlign: 'center',\n },\n },\n `Widget \"${widgetSlug}\" not found`,\n ),\n }\n }\n\n try {\n const localeFilteredData = widgetConfig.fields?.length\n ? extractLocaleData(widgetData || {}, req.locale || 'en', widgetConfig.fields)\n : widgetData || {}\n\n const serverProps: WidgetServerProps = {\n cookies,\n locale,\n permissions,\n req,\n widgetData: localeFilteredData,\n widgetSlug,\n }\n\n // Render the widget server component\n const component = RenderServerComponent({\n Component: widgetConfig.Component,\n importMap,\n serverProps,\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 widget \"${widgetSlug}\": ${errorMessage}`,\n })\n\n return {\n component: React.createElement(\n 'div',\n {\n style: {\n background: 'var(--theme-error-50)',\n border: 'var(--stroke-width-small) solid var(--theme-error-200)',\n borderRadius: '4px',\n color: 'var(--theme-error-text)',\n padding: '20px',\n textAlign: 'center',\n },\n },\n 'Error loading widget',\n ),\n }\n }\n}\n"],"mappings":"AAEA,OAAOA,KAAA,MAAW;AAElB,SAASC,qBAAqB,QAAQ;AACtC,SAASC,iBAAiB,QAAQ;AAiBlC;;;;AAIA,OAAO,MAAMC,mBAAA,GAGTA,CAAC;EAAEC,OAAO;EAAEC,MAAM;EAAEC,WAAW;EAAEC,GAAG;EAAEC,UAAU;EAAEC;AAAU,CAAE;EAChE,IAAI,CAACF,GAAA,CAAIG,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAO,CAAE,GAAGL,GAAA,CAAIM,OAAO,CAACC,MAAM,CAACC,KAAK,CAACC,SAAS;EACtD,MAAM;IAAEC;EAAS,CAAE,GAAGV,GAAA,CAAIM,OAAO;EAEjC;EACA,MAAMK,YAAA,GAAeN,OAAA,CAAQO,IAAI,CAAEC,MAAA,IAAWA,MAAA,CAAOC,IAAI,KAAKZ,UAAA;EAE9D,IAAI,CAACS,YAAA,EAAc;IACjB,OAAO;MACLI,SAAA,EAAWtB,KAAA,CAAMuB,aAAa,CAC5B,OACA;QACEC,KAAA,EAAO;UACLC,UAAA,EAAY;UACZC,MAAA,EAAQ;UACRC,YAAA,EAAc;UACdC,KAAA,EAAO;UACPC,OAAA,EAAS;UACTC,SAAA,EAAW;QACb;MACF,GACA,WAAWrB,UAAA,aAAuB;IAEtC;EACF;EAEA,IAAI;IACF,MAAMsB,kBAAA,GAAqBb,YAAA,CAAac,MAAM,EAAEC,MAAA,GAC5C/B,iBAAA,CAAkBM,UAAA,IAAc,CAAC,GAAGD,GAAA,CAAIF,MAAM,IAAI,MAAMa,YAAA,CAAac,MAAM,IAC3ExB,UAAA,IAAc,CAAC;IAEnB,MAAM0B,WAAA,GAAiC;MACrC9B,OAAA;MACAC,MAAA;MACAC,WAAA;MACAC,GAAA;MACAC,UAAA,EAAYuB,kBAAA;MACZtB;IACF;IAEA;IACA,MAAMa,SAAA,GAAYrB,qBAAA,CAAsB;MACtCkC,SAAA,EAAWjB,YAAA,CAAaiB,SAAS;MACjClB,SAAA;MACAiB;IACF;IAEA,OAAO;MAAEZ;IAAU;EACrB,EAAE,OAAOc,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBzB,KAAA,GAAQyB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErE7B,GAAA,CAAIM,OAAO,CAAC2B,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,2BAA2BjC,UAAA,MAAgB4B,YAAA;IAClD;IAEA,OAAO;MACLf,SAAA,EAAWtB,KAAA,CAAMuB,aAAa,CAC5B,OACA;QACEC,KAAA,EAAO;UACLC,UAAA,EAAY;UACZC,MAAA,EAAQ;UACRC,YAAA,EAAc;UACdC,KAAA,EAAO;UACPC,OAAA,EAAS;UACTC,SAAA,EAAW;QACb;MACF,GACA;IAEJ;EACF;AACF","ignoreList":[]}
1
+ {"version":3,"file":"renderWidgetServerFn.js","names":["React","RenderServerComponent","extractLocaleData","renderWidgetHandler","cookies","locale","permissions","req","widgetData","widgetSlug","user","Error","widgets","payload","config","admin","dashboard","importMap","widgetConfig","find","widget","slug","component","createElement","style","background","border","borderRadius","color","padding","textAlign","localeFilteredData","fields","length","serverProps","Component","error","errorMessage","message","String","logger","err","msg"],"sources":["../../../../../../src/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.ts"],"sourcesContent":["import type { Field, ServerFunction, WidgetServerProps } from 'payload'\n\nimport React from 'react'\n\nimport { RenderServerComponent } from '../../../../../elements/RenderServerComponent/index.js'\nimport { extractLocaleData } from '../utils/localeUtils.js'\n\nexport type RenderWidgetServerFnArgs = {\n /**\n * Instance-specific data for this widget\n */\n widgetData?: Record<string, unknown>\n /**\n * The slug of the widget to render\n */\n widgetSlug: string\n}\n\nexport type RenderWidgetServerFnReturnType = {\n component: React.ReactNode\n}\n\n/**\n * Server function to render a widget on-demand.\n * Similar to render-field but specifically for dashboard widgets.\n */\nexport const renderWidgetHandler: ServerFunction<\n RenderWidgetServerFnArgs,\n RenderWidgetServerFnReturnType\n> = ({ cookies, locale, permissions, req, widgetData, widgetSlug }) => {\n if (!req.user) {\n throw new Error('Unauthorized')\n }\n\n const { widgets } = req.payload.config.admin.dashboard\n const { importMap } = req.payload\n\n // Find the widget configuration\n const widgetConfig = widgets.find((widget) => widget.slug === widgetSlug)\n\n if (!widgetConfig) {\n return {\n component: React.createElement(\n 'div',\n {\n style: {\n background: 'var(--color-bg-secondary)',\n border: 'var(--stroke-width-small) solid var(--color-border)',\n borderRadius: 'var(--radius-medium)',\n color: 'var(--color-text)',\n padding: 'var(--spacer-3)',\n textAlign: 'center',\n },\n },\n `Widget \"${widgetSlug}\" not found`,\n ),\n }\n }\n\n try {\n const localeFilteredData = widgetConfig.fields?.length\n ? extractLocaleData(widgetData || {}, req.locale || 'en', widgetConfig.fields)\n : widgetData || {}\n\n const serverProps: WidgetServerProps = {\n cookies,\n locale,\n permissions,\n req,\n widgetData: localeFilteredData,\n widgetSlug,\n }\n\n // Render the widget server component\n const component = RenderServerComponent({\n Component: widgetConfig.Component,\n importMap,\n serverProps,\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 widget \"${widgetSlug}\": ${errorMessage}`,\n })\n\n return {\n component: React.createElement(\n 'div',\n {\n style: {\n background: 'var(--color-bg-danger-tertiary)',\n border: 'var(--stroke-width-small) solid var(--color-border-danger)',\n borderRadius: 'var(--radius-medium)',\n color: 'var(--color-text-danger)',\n padding: 'var(--spacer-3)',\n textAlign: 'center',\n },\n },\n 'Error loading widget',\n ),\n }\n }\n}\n"],"mappings":"AAEA,OAAOA,KAAA,MAAW;AAElB,SAASC,qBAAqB,QAAQ;AACtC,SAASC,iBAAiB,QAAQ;AAiBlC;;;;AAIA,OAAO,MAAMC,mBAAA,GAGTA,CAAC;EAAEC,OAAO;EAAEC,MAAM;EAAEC,WAAW;EAAEC,GAAG;EAAEC,UAAU;EAAEC;AAAU,CAAE;EAChE,IAAI,CAACF,GAAA,CAAIG,IAAI,EAAE;IACb,MAAM,IAAIC,KAAA,CAAM;EAClB;EAEA,MAAM;IAAEC;EAAO,CAAE,GAAGL,GAAA,CAAIM,OAAO,CAACC,MAAM,CAACC,KAAK,CAACC,SAAS;EACtD,MAAM;IAAEC;EAAS,CAAE,GAAGV,GAAA,CAAIM,OAAO;EAEjC;EACA,MAAMK,YAAA,GAAeN,OAAA,CAAQO,IAAI,CAAEC,MAAA,IAAWA,MAAA,CAAOC,IAAI,KAAKZ,UAAA;EAE9D,IAAI,CAACS,YAAA,EAAc;IACjB,OAAO;MACLI,SAAA,EAAWtB,KAAA,CAAMuB,aAAa,CAC5B,OACA;QACEC,KAAA,EAAO;UACLC,UAAA,EAAY;UACZC,MAAA,EAAQ;UACRC,YAAA,EAAc;UACdC,KAAA,EAAO;UACPC,OAAA,EAAS;UACTC,SAAA,EAAW;QACb;MACF,GACA,WAAWrB,UAAA,aAAuB;IAEtC;EACF;EAEA,IAAI;IACF,MAAMsB,kBAAA,GAAqBb,YAAA,CAAac,MAAM,EAAEC,MAAA,GAC5C/B,iBAAA,CAAkBM,UAAA,IAAc,CAAC,GAAGD,GAAA,CAAIF,MAAM,IAAI,MAAMa,YAAA,CAAac,MAAM,IAC3ExB,UAAA,IAAc,CAAC;IAEnB,MAAM0B,WAAA,GAAiC;MACrC9B,OAAA;MACAC,MAAA;MACAC,WAAA;MACAC,GAAA;MACAC,UAAA,EAAYuB,kBAAA;MACZtB;IACF;IAEA;IACA,MAAMa,SAAA,GAAYrB,qBAAA,CAAsB;MACtCkC,SAAA,EAAWjB,YAAA,CAAaiB,SAAS;MACjClB,SAAA;MACAiB;IACF;IAEA,OAAO;MAAEZ;IAAU;EACrB,EAAE,OAAOc,KAAA,EAAO;IACd,MAAMC,YAAA,GAAeD,KAAA,YAAiBzB,KAAA,GAAQyB,KAAA,CAAME,OAAO,GAAGC,MAAA,CAAOH,KAAA;IAErE7B,GAAA,CAAIM,OAAO,CAAC2B,MAAM,CAACJ,KAAK,CAAC;MACvBK,GAAA,EAAKL,KAAA;MACLM,GAAA,EAAK,2BAA2BjC,UAAA,MAAgB4B,YAAA;IAClD;IAEA,OAAO;MACLf,SAAA,EAAWtB,KAAA,CAAMuB,aAAa,CAC5B,OACA;QACEC,KAAA,EAAO;UACLC,UAAA,EAAY;UACZC,MAAA,EAAQ;UACRC,YAAA,EAAc;UACdC,KAAA,EAAO;UACPC,OAAA,EAAS;UACTC,SAAA,EAAW;QACb;MACF,GACA;IAEJ;EACF;AACF","ignoreList":[]}
@@ -45,7 +45,7 @@
45
45
  display: flex;
46
46
  flex-direction: column;
47
47
  align-items: flex-start;
48
- gap: var(--spacer-3);
48
+ gap: var(--spacer-2-5);
49
49
  }
50
50
 
51
51
  .hierarchy-list__no-results > * {
@@ -12,7 +12,7 @@
12
12
 
13
13
  .collection-list__sub-header {
14
14
  flex-basis: 100%;
15
- padding-top: var(--spacer-3);
15
+ padding-top: var(--spacer-2-5);
16
16
  }
17
17
 
18
18
  .collection-list .table table {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/List/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAKpB,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EAEvB,gBAAgB,EAGjB,MAAM,SAAS,CAAA;AAYhB,OAAO,KAAmB,MAAM,OAAO,CAAA;AAsBvC,OAAO,aAAa,CAAA;AAEpB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,iBAAiB,CAAC,EACd,gBAAgB,GAChB,KAAK,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAAC,CAAA;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,oBAAoB,CAAA;AAExB;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC;IACT,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB,CAieA,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAWjD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/views/List/index.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EAKpB,SAAS,EACT,mBAAmB,EACnB,uBAAuB,EAEvB,gBAAgB,EAGjB,MAAM,SAAS,CAAA;AAYhB,OAAO,KAAmB,MAAM,OAAO,CAAA;AAsBvC,OAAO,aAAa,CAAA;AAEpB;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;OAGG;IACH,iBAAiB,CAAC,EACd,gBAAgB,GAChB,KAAK,CAAC,aAAa,CAAC,mBAAmB,GAAG,CAAC,mBAAmB,GAAG,uBAAuB,CAAC,CAAC,CAAA;IAC9F,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACrC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,mBAAmB,EAAE,OAAO,CAAA;IAC5B,wBAAwB,CAAC,EAAE,OAAO,CAAA;IAClC;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAChC;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,GAAG,oBAAoB,CAAA;AAExB;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,SACnB,kBAAkB,KACvB,OAAO,CAAC;IACT,IAAI,EAAE,KAAK,CAAC,SAAS,CAAA;CACtB,CAseA,CAAA;AAED,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAWjD,CAAA"}
@@ -162,6 +162,10 @@ export const renderListView = async args => {
162
162
  });
163
163
  /** Automatically force select active columns. */
164
164
  const select = transformColumnsToSelect(columns);
165
+ /** Force select `useAsTitle` for accessible row-selection labels, even if its column is hidden. */
166
+ if (enableRowSelections && collectionConfig.admin.useAsTitle) {
167
+ select[collectionConfig.admin.useAsTitle] = true;
168
+ }
165
169
  /** Force select image fields for list view thumbnails */
166
170
  appendUploadSelectFields({
167
171
  collectionConfig,