@payloadcms/ui 4.0.0-internal.40de3ec → 4.0.0-internal.4c792ad

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 (562) hide show
  1. package/dist/css/colors.css +3 -0
  2. package/dist/css/design-tokens.css +5 -0
  3. package/dist/css/elevations.css +4 -0
  4. package/dist/css/radius.css +1 -3
  5. package/dist/css/theme.css +4 -0
  6. package/dist/css/utilities.css +5 -0
  7. package/dist/elements/APIKeyInput/index.css +92 -0
  8. package/dist/elements/APIKeyInput/index.d.ts +14 -0
  9. package/dist/elements/APIKeyInput/index.d.ts.map +1 -0
  10. package/dist/elements/APIKeyInput/index.js +86 -0
  11. package/dist/elements/APIKeyInput/index.js.map +1 -0
  12. package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
  13. package/dist/elements/AddNewRelation/index.js +85 -103
  14. package/dist/elements/AddNewRelation/index.js.map +1 -1
  15. package/dist/elements/AppHeader/index.d.ts +3 -1
  16. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  17. package/dist/elements/AppHeader/index.js +7 -27
  18. package/dist/elements/AppHeader/index.js.map +1 -1
  19. package/dist/elements/BulkUpload/ActionsBar/index.css +10 -4
  20. package/dist/elements/BulkUpload/ActionsBar/index.d.ts.map +1 -1
  21. package/dist/elements/BulkUpload/ActionsBar/index.js +43 -40
  22. package/dist/elements/BulkUpload/ActionsBar/index.js.map +1 -1
  23. package/dist/elements/BulkUpload/AddFilesView/index.js +1 -1
  24. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  25. package/dist/elements/BulkUpload/AddingFilesView/index.css +25 -0
  26. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts +1 -1
  27. package/dist/elements/BulkUpload/AddingFilesView/index.d.ts.map +1 -1
  28. package/dist/elements/BulkUpload/AddingFilesView/index.js +1 -1
  29. package/dist/elements/BulkUpload/AddingFilesView/index.js.map +1 -1
  30. package/dist/elements/BulkUpload/EditForm/index.css +9 -0
  31. package/dist/elements/BulkUpload/EditForm/index.d.ts +1 -1
  32. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  33. package/dist/elements/BulkUpload/EditForm/index.js +1 -1
  34. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  35. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts +1 -1
  36. package/dist/elements/BulkUpload/EditMany/DrawerContent.d.ts.map +1 -1
  37. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +59 -55
  38. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  39. package/dist/elements/BulkUpload/EditMany/index.css +71 -0
  40. package/dist/elements/BulkUpload/EditMany/index.d.ts +1 -1
  41. package/dist/elements/BulkUpload/EditMany/index.d.ts.map +1 -1
  42. package/dist/elements/BulkUpload/EditMany/index.js +1 -1
  43. package/dist/elements/BulkUpload/EditMany/index.js.map +1 -1
  44. package/dist/elements/BulkUpload/FileSidebar/index.css +54 -75
  45. package/dist/elements/BulkUpload/FileSidebar/index.d.ts.map +1 -1
  46. package/dist/elements/BulkUpload/FileSidebar/index.js +60 -50
  47. package/dist/elements/BulkUpload/FileSidebar/index.js.map +1 -1
  48. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  49. package/dist/elements/BulkUpload/FormsManager/index.js +13 -0
  50. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  51. package/dist/elements/Button/index.css +8 -0
  52. package/dist/elements/Card/index.css +1 -1
  53. package/dist/elements/CodeEditor/CodeEditor.d.ts.map +1 -1
  54. package/dist/elements/CodeEditor/CodeEditor.js +19 -0
  55. package/dist/elements/CodeEditor/CodeEditor.js.map +1 -1
  56. package/dist/elements/ColumnSelection/Popup.d.ts +12 -0
  57. package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -0
  58. package/dist/elements/{ColumnSelector/index.js → ColumnSelection/Popup.js} +24 -13
  59. package/dist/elements/ColumnSelection/Popup.js.map +1 -0
  60. package/dist/elements/ColumnSelection/index.d.ts +10 -0
  61. package/dist/elements/ColumnSelection/index.d.ts.map +1 -0
  62. package/dist/elements/{ColumnsButton → ColumnSelection}/index.js +23 -17
  63. package/dist/elements/ColumnSelection/index.js.map +1 -0
  64. package/dist/elements/Combobox/index.css +1 -0
  65. package/dist/elements/ConfirmationModal/index.css +7 -0
  66. package/dist/elements/ConfirmationModal/index.d.ts +1 -0
  67. package/dist/elements/ConfirmationModal/index.d.ts.map +1 -1
  68. package/dist/elements/ConfirmationModal/index.js +7 -3
  69. package/dist/elements/ConfirmationModal/index.js.map +1 -1
  70. package/dist/elements/DeleteMany/index.d.ts +3 -26
  71. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  72. package/dist/elements/DeleteMany/index.js +1 -95
  73. package/dist/elements/DeleteMany/index.js.map +1 -1
  74. package/dist/elements/Dialog/DialogModal/index.d.ts +1 -1
  75. package/dist/elements/Dialog/DialogModal/index.d.ts.map +1 -1
  76. package/dist/elements/Dialog/DialogModal/index.js.map +1 -1
  77. package/dist/elements/Dialog/index.css +4 -0
  78. package/dist/elements/DocumentControls/index.css +17 -1
  79. package/dist/elements/DocumentControls/index.d.ts +6 -0
  80. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  81. package/dist/elements/DocumentControls/index.js +9 -8
  82. package/dist/elements/DocumentControls/index.js.map +1 -1
  83. package/dist/elements/DocumentDrawer/DrawerContent.d.ts.map +1 -1
  84. package/dist/elements/DocumentDrawer/DrawerContent.js +10 -6
  85. package/dist/elements/DocumentDrawer/DrawerContent.js.map +1 -1
  86. package/dist/elements/DocumentDrawer/DrawerHeader/index.css +76 -4
  87. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts +7 -1
  88. package/dist/elements/DocumentDrawer/DrawerHeader/index.d.ts.map +1 -1
  89. package/dist/elements/DocumentDrawer/DrawerHeader/index.js +150 -87
  90. package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
  91. package/dist/elements/DocumentDrawer/types.d.ts +1 -0
  92. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  93. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  94. package/dist/elements/DocumentFields/index.css +61 -2
  95. package/dist/elements/DraggableSortable/index.js.map +1 -1
  96. package/dist/elements/Drawer/index.css +57 -26
  97. package/dist/elements/Drawer/index.d.ts +25 -0
  98. package/dist/elements/Drawer/index.d.ts.map +1 -1
  99. package/dist/elements/Drawer/index.js +133 -54
  100. package/dist/elements/Drawer/index.js.map +1 -1
  101. package/dist/elements/Drawer/types.d.ts +1 -0
  102. package/dist/elements/Drawer/types.d.ts.map +1 -1
  103. package/dist/elements/Drawer/types.js.map +1 -1
  104. package/dist/elements/EditMany/DrawerContent.d.ts +1 -1
  105. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  106. package/dist/elements/EditMany/DrawerContent.js +76 -71
  107. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  108. package/dist/elements/EditMany/index.css +71 -0
  109. package/dist/elements/EditMany/index.d.ts +9 -11
  110. package/dist/elements/EditMany/index.d.ts.map +1 -1
  111. package/dist/elements/EditMany/index.js +2 -40
  112. package/dist/elements/EditMany/index.js.map +1 -1
  113. package/dist/elements/FieldSelect/index.css +3 -0
  114. package/dist/elements/FileDetails/DraggableFileDetails/index.css +32 -0
  115. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts +1 -1
  116. package/dist/elements/FileDetails/DraggableFileDetails/index.d.ts.map +1 -1
  117. package/dist/elements/FileDetails/DraggableFileDetails/index.js +19 -18
  118. package/dist/elements/FileDetails/DraggableFileDetails/index.js.map +1 -1
  119. package/dist/elements/GroupBy/Popup.d.ts +21 -0
  120. package/dist/elements/GroupBy/Popup.d.ts.map +1 -0
  121. package/dist/elements/GroupBy/Popup.js +269 -0
  122. package/dist/elements/GroupBy/Popup.js.map +1 -0
  123. package/dist/elements/GroupBy/index.d.ts +12 -0
  124. package/dist/elements/GroupBy/index.d.ts.map +1 -0
  125. package/dist/elements/GroupBy/index.js +91 -0
  126. package/dist/elements/GroupBy/index.js.map +1 -0
  127. package/dist/elements/Hierarchy/Drawer/index.css +3 -21
  128. package/dist/elements/Hierarchy/Drawer/index.d.ts.map +1 -1
  129. package/dist/elements/Hierarchy/Drawer/index.js +5 -3
  130. package/dist/elements/Hierarchy/Drawer/index.js.map +1 -1
  131. package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +36 -0
  132. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +1 -1
  133. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -1
  134. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +1 -1
  135. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -1
  136. package/dist/elements/Hierarchy/Field/index.client.d.ts +1 -1
  137. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  138. package/dist/elements/Hierarchy/Field/index.client.js +5 -2
  139. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  140. package/dist/elements/Hierarchy/Field/index.css +37 -0
  141. package/dist/elements/Hierarchy/MoveMany/index.d.ts +0 -1
  142. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  143. package/dist/elements/Hierarchy/MoveMany/index.js +0 -1
  144. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  145. package/dist/elements/Hierarchy/Tree/LoadMore/index.css +27 -0
  146. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts +1 -1
  147. package/dist/elements/Hierarchy/Tree/LoadMore/index.d.ts.map +1 -1
  148. package/dist/elements/Hierarchy/Tree/LoadMore/index.js +1 -1
  149. package/dist/elements/Hierarchy/Tree/LoadMore/index.js.map +1 -1
  150. package/dist/elements/Hierarchy/Tree/TreeFocusContext.d.ts.map +1 -1
  151. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js +36 -16
  152. package/dist/elements/Hierarchy/Tree/TreeFocusContext.js.map +1 -1
  153. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  154. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +20 -15
  155. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  156. package/dist/elements/LeaveWithoutSaving/usePreventLeave.js.map +1 -1
  157. package/dist/elements/ListColumnSelectionButton/index.d.ts +11 -0
  158. package/dist/elements/ListColumnSelectionButton/index.d.ts.map +1 -0
  159. package/dist/elements/ListColumnSelectionButton/index.js +37 -0
  160. package/dist/elements/ListColumnSelectionButton/index.js.map +1 -0
  161. package/dist/elements/ListControls/index.css +5 -0
  162. package/dist/elements/ListControls/index.d.ts.map +1 -1
  163. package/dist/elements/ListControls/index.js +7 -7
  164. package/dist/elements/ListControls/index.js.map +1 -1
  165. package/dist/elements/ListDrawer/DrawerContent.d.ts.map +1 -1
  166. package/dist/elements/ListDrawer/DrawerContent.js +12 -6
  167. package/dist/elements/ListDrawer/DrawerContent.js.map +1 -1
  168. package/dist/elements/ListGroupByButton/index.d.ts +12 -0
  169. package/dist/elements/ListGroupByButton/index.d.ts.map +1 -0
  170. package/dist/elements/ListGroupByButton/index.js +55 -0
  171. package/dist/elements/ListGroupByButton/index.js.map +1 -0
  172. package/dist/elements/ListWhereBuilder/index.d.ts +16 -0
  173. package/dist/elements/ListWhereBuilder/index.d.ts.map +1 -0
  174. package/dist/elements/ListWhereBuilder/index.js +62 -0
  175. package/dist/elements/ListWhereBuilder/index.js.map +1 -0
  176. package/dist/elements/LoadMoreRow/index.css +34 -0
  177. package/dist/elements/LoadMoreRow/index.d.ts +1 -1
  178. package/dist/elements/LoadMoreRow/index.d.ts.map +1 -1
  179. package/dist/elements/LoadMoreRow/index.js +4 -8
  180. package/dist/elements/LoadMoreRow/index.js.map +1 -1
  181. package/dist/elements/Loading/index.css +28 -74
  182. package/dist/elements/Loading/index.d.ts.map +1 -1
  183. package/dist/elements/Loading/index.js +16 -60
  184. package/dist/elements/Loading/index.js.map +1 -1
  185. package/dist/elements/Localizer/index.d.ts.map +1 -1
  186. package/dist/elements/Localizer/index.js +3 -4
  187. package/dist/elements/Localizer/index.js.map +1 -1
  188. package/dist/elements/MenuSeparator/index.d.ts +4 -0
  189. package/dist/elements/MenuSeparator/index.d.ts.map +1 -0
  190. package/dist/elements/MenuSeparator/index.js +10 -0
  191. package/dist/elements/MenuSeparator/index.js.map +1 -0
  192. package/dist/elements/Nav/index.d.ts.map +1 -1
  193. package/dist/elements/Nav/index.js +4 -23
  194. package/dist/elements/Nav/index.js.map +1 -1
  195. package/dist/elements/Popup/PopupButtonList/index.css +48 -4
  196. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  197. package/dist/elements/Popup/PopupButtonList/index.js +1 -0
  198. package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
  199. package/dist/elements/Popup/PopupGroupLabel/index.css +19 -4
  200. package/dist/elements/Popup/index.d.ts +7 -0
  201. package/dist/elements/Popup/index.d.ts.map +1 -1
  202. package/dist/elements/Popup/index.js +143 -63
  203. package/dist/elements/Popup/index.js.map +1 -1
  204. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.d.ts +13 -0
  205. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.d.ts.map +1 -0
  206. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js +41 -0
  207. package/dist/elements/PublishButton/ScheduleDrawer/buildUpcomingScheduleWhere.js.map +1 -0
  208. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts +1 -0
  209. package/dist/elements/PublishButton/ScheduleDrawer/index.d.ts.map +1 -1
  210. package/dist/elements/PublishButton/ScheduleDrawer/index.js +9 -31
  211. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  212. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  213. package/dist/elements/PublishButton/index.js +4 -5
  214. package/dist/elements/PublishButton/index.js.map +1 -1
  215. package/dist/elements/PublishMany/DrawerContent.d.ts +2 -1
  216. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  217. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  218. package/dist/elements/PublishMany/index.d.ts +2 -6
  219. package/dist/elements/PublishMany/index.d.ts.map +1 -1
  220. package/dist/elements/PublishMany/index.js +0 -38
  221. package/dist/elements/PublishMany/index.js.map +1 -1
  222. package/dist/elements/QueryPresets/cells/ColumnsCell/{index.scss → index.css} +1 -3
  223. package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts +1 -1
  224. package/dist/elements/QueryPresets/cells/ColumnsCell/index.d.ts.map +1 -1
  225. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js +1 -1
  226. package/dist/elements/QueryPresets/cells/ColumnsCell/index.js.map +1 -1
  227. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts +1 -1
  228. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  229. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +77 -48
  230. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  231. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts +1 -1
  232. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
  233. package/dist/elements/QueryPresets/fields/GroupByField/index.js +12 -21
  234. package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
  235. package/dist/elements/QueryPresets/fields/Heading/index.css +52 -0
  236. package/dist/elements/QueryPresets/fields/Heading/index.d.ts +7 -0
  237. package/dist/elements/QueryPresets/fields/Heading/index.d.ts.map +1 -0
  238. package/dist/elements/QueryPresets/fields/Heading/index.js +31 -0
  239. package/dist/elements/QueryPresets/fields/Heading/index.js.map +1 -0
  240. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts +1 -1
  241. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
  242. package/dist/elements/QueryPresets/fields/WhereField/index.js +24 -23
  243. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  244. package/dist/elements/QueryPresets/fields/fields.css +23 -0
  245. package/dist/elements/ReactSelect/MultiValue/index.css +1 -1
  246. package/dist/elements/ReactSelect/getCaptureMenuScroll.d.ts +5 -0
  247. package/dist/elements/ReactSelect/getCaptureMenuScroll.d.ts.map +1 -0
  248. package/dist/elements/ReactSelect/getCaptureMenuScroll.js +10 -0
  249. package/dist/elements/ReactSelect/getCaptureMenuScroll.js.map +1 -0
  250. package/dist/elements/ReactSelect/getMenuListStyles.d.ts +6 -0
  251. package/dist/elements/ReactSelect/getMenuListStyles.d.ts.map +1 -0
  252. package/dist/elements/ReactSelect/getMenuListStyles.js +7 -0
  253. package/dist/elements/ReactSelect/getMenuListStyles.js.map +1 -0
  254. package/dist/elements/ReactSelect/index.css +0 -1
  255. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  256. package/dist/elements/ReactSelect/index.js +176 -139
  257. package/dist/elements/ReactSelect/index.js.map +1 -1
  258. package/dist/elements/ReactSelect/types.d.ts +1 -0
  259. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  260. package/dist/elements/ReactSelect/types.js.map +1 -1
  261. package/dist/elements/RelationshipTable/index.js +2 -2
  262. package/dist/elements/RelationshipTable/index.js.map +1 -1
  263. package/dist/elements/RenderTitle/index.css +10 -0
  264. package/dist/elements/RenderTitle/index.d.ts +5 -0
  265. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  266. package/dist/elements/RenderTitle/index.js +52 -27
  267. package/dist/elements/RenderTitle/index.js.map +1 -1
  268. package/dist/elements/SchedulePublishButton/index.d.ts.map +1 -1
  269. package/dist/elements/SchedulePublishButton/index.js +6 -1
  270. package/dist/elements/SchedulePublishButton/index.js.map +1 -1
  271. package/dist/elements/SelectMany/index.js +1 -1
  272. package/dist/elements/SelectMany/index.js.map +1 -1
  273. package/dist/elements/SortColumn/index.css +1 -1
  274. package/dist/elements/Spinner/index.css +16 -0
  275. package/dist/elements/Table/DefaultCell/fields/Blocks/index.d.ts.map +1 -1
  276. package/dist/elements/Table/DefaultCell/fields/Blocks/index.js.map +1 -1
  277. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  278. package/dist/elements/Table/OrderableRow.js +1 -1
  279. package/dist/elements/Table/OrderableRow.js.map +1 -1
  280. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  281. package/dist/elements/Table/RelationshipProvider/index.js +1 -0
  282. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  283. package/dist/elements/Table/index.css +39 -10
  284. package/dist/elements/Tabs/index.css +100 -0
  285. package/dist/elements/Tabs/index.d.ts +32 -0
  286. package/dist/elements/Tabs/index.d.ts.map +1 -0
  287. package/dist/elements/Tabs/index.js +62 -0
  288. package/dist/elements/Tabs/index.js.map +1 -0
  289. package/dist/elements/TimezonePicker/index.css +0 -15
  290. package/dist/elements/Toasts/fieldErrors.d.ts +1 -0
  291. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  292. package/dist/elements/Toasts/fieldErrors.js +25 -9
  293. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  294. package/dist/elements/Toasts/index.css +5 -0
  295. package/dist/elements/Tooltip/index.css +20 -4
  296. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  297. package/dist/elements/Tooltip/index.js +71 -3
  298. package/dist/elements/Tooltip/index.js.map +1 -1
  299. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  300. package/dist/elements/UnpublishButton/index.js +5 -13
  301. package/dist/elements/UnpublishButton/index.js.map +1 -1
  302. package/dist/elements/UnpublishMany/DrawerContent.d.ts +2 -1
  303. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  304. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  305. package/dist/elements/UnpublishMany/index.d.ts +2 -4
  306. package/dist/elements/UnpublishMany/index.d.ts.map +1 -1
  307. package/dist/elements/UnpublishMany/index.js +0 -38
  308. package/dist/elements/UnpublishMany/index.js.map +1 -1
  309. package/dist/elements/UserMenu/LanguageMenu/index.d.ts +6 -0
  310. package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -0
  311. package/dist/elements/UserMenu/LanguageMenu/index.js +133 -0
  312. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -0
  313. package/dist/elements/UserMenu/SettingsMenu/index.d.ts +15 -0
  314. package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -0
  315. package/dist/elements/UserMenu/SettingsMenu/index.js +119 -0
  316. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -0
  317. package/dist/elements/UserMenu/SubMenuHeader/index.d.ts +6 -0
  318. package/dist/elements/UserMenu/SubMenuHeader/index.d.ts.map +1 -0
  319. package/dist/elements/UserMenu/SubMenuHeader/index.js +34 -0
  320. package/dist/elements/UserMenu/SubMenuHeader/index.js.map +1 -0
  321. package/dist/elements/UserMenu/ThemeMenu/index.d.ts +6 -0
  322. package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -0
  323. package/dist/elements/UserMenu/ThemeMenu/index.js +145 -0
  324. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -0
  325. package/dist/elements/UserMenu/index.css +80 -0
  326. package/dist/elements/UserMenu/index.d.ts +10 -0
  327. package/dist/elements/UserMenu/index.d.ts.map +1 -0
  328. package/dist/elements/UserMenu/index.js +204 -0
  329. package/dist/elements/UserMenu/index.js.map +1 -0
  330. package/dist/elements/WhereBuilder/Condition/index.d.ts +1 -0
  331. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  332. package/dist/elements/WhereBuilder/Condition/index.js +17 -2
  333. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  334. package/dist/elements/WhereBuilder/index.d.ts +4 -3
  335. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  336. package/dist/elements/WhereBuilder/index.js +71 -62
  337. package/dist/elements/WhereBuilder/index.js.map +1 -1
  338. package/dist/elements/WhereBuilder/types.d.ts +6 -5
  339. package/dist/elements/WhereBuilder/types.d.ts.map +1 -1
  340. package/dist/elements/WhereBuilder/types.js.map +1 -1
  341. package/dist/exports/client/index.d.ts +13 -0
  342. package/dist/exports/client/index.d.ts.map +1 -1
  343. package/dist/exports/client/index.js +2 -2
  344. package/dist/exports/client/index.js.map +3 -3
  345. package/dist/exports/shared/index.js +1 -1
  346. package/dist/exports/shared/index.js.map +1 -1
  347. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.css +1 -49
  348. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.d.ts.map +1 -1
  349. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js +27 -20
  350. package/dist/fields/Blocks/BlockSelector/BlockSearch/index.js.map +1 -1
  351. package/dist/fields/Blocks/BlockSelector/index.css +17 -3
  352. package/dist/fields/Blocks/BlockSelector/index.js +1 -1
  353. package/dist/fields/Blocks/BlockSelector/index.js.map +1 -1
  354. package/dist/fields/RadioGroup/index.css +6 -0
  355. package/dist/fields/Row/index.d.ts +1 -1
  356. package/dist/fields/Tabs/Tab/index.d.ts +0 -1
  357. package/dist/fields/Tabs/Tab/index.d.ts.map +1 -1
  358. package/dist/fields/Tabs/Tab/index.js +12 -23
  359. package/dist/fields/Tabs/Tab/index.js.map +1 -1
  360. package/dist/fields/Tabs/index.d.ts.map +1 -1
  361. package/dist/fields/Tabs/index.js +37 -37
  362. package/dist/fields/Tabs/index.js.map +1 -1
  363. package/dist/fields/Upload/HasMany/index.css +4 -0
  364. package/dist/forms/RenderFields/RenderField.d.ts +1 -1
  365. package/dist/forms/RenderFields/RenderField.js +2 -1
  366. package/dist/forms/RenderFields/RenderField.js.map +1 -1
  367. package/dist/forms/useField/index.js.map +1 -1
  368. package/dist/icons/Check/index.css +1 -2
  369. package/dist/icons/Check/index.js +1 -1
  370. package/dist/icons/Check/index.js.map +1 -1
  371. package/dist/icons/Gear/index.d.ts.map +1 -1
  372. package/dist/icons/Gear/index.js +8 -1
  373. package/dist/icons/Gear/index.js.map +1 -1
  374. package/dist/icons/InteractionEnter/index.css +5 -0
  375. package/dist/icons/InteractionEnter/index.d.ts +11 -0
  376. package/dist/icons/InteractionEnter/index.d.ts.map +1 -0
  377. package/dist/icons/InteractionEnter/index.js +25 -0
  378. package/dist/icons/InteractionEnter/index.js.map +1 -0
  379. package/dist/icons/{Write → Key}/index.css +1 -1
  380. package/dist/icons/Key/index.d.ts +7 -0
  381. package/dist/icons/Key/index.d.ts.map +1 -0
  382. package/dist/icons/Key/index.js +24 -0
  383. package/dist/icons/Key/index.js.map +1 -0
  384. package/dist/icons/LogOut/index.js +2 -2
  385. package/dist/icons/LogOut/index.js.map +1 -1
  386. package/dist/icons/Schedule/index.d.ts.map +1 -1
  387. package/dist/icons/Schedule/index.js +38 -39
  388. package/dist/icons/Schedule/index.js.map +1 -1
  389. package/dist/icons/VariableColor/index.css +5 -0
  390. package/dist/icons/VariableColor/index.d.ts +7 -0
  391. package/dist/icons/VariableColor/index.d.ts.map +1 -0
  392. package/dist/icons/VariableColor/index.js +23 -0
  393. package/dist/icons/VariableColor/index.js.map +1 -0
  394. package/dist/icons/Warning/index.css +1 -7
  395. package/dist/icons/Warning/index.d.ts +1 -1
  396. package/dist/icons/Warning/index.d.ts.map +1 -1
  397. package/dist/icons/Warning/index.js +11 -16
  398. package/dist/icons/Warning/index.js.map +1 -1
  399. package/dist/icons/WarningTriangle/index.css +5 -0
  400. package/dist/icons/WarningTriangle/index.d.ts +6 -0
  401. package/dist/icons/WarningTriangle/index.d.ts.map +1 -0
  402. package/dist/icons/WarningTriangle/index.js +21 -0
  403. package/dist/icons/WarningTriangle/index.js.map +1 -0
  404. package/dist/icons/Write/index.d.ts +0 -1
  405. package/dist/icons/Write/index.d.ts.map +1 -1
  406. package/dist/icons/Write/index.js +1 -2
  407. package/dist/icons/Write/index.js.map +1 -1
  408. package/dist/providers/Auth/index.d.ts +3 -1
  409. package/dist/providers/Auth/index.d.ts.map +1 -1
  410. package/dist/providers/Auth/index.js +8 -3
  411. package/dist/providers/Auth/index.js.map +1 -1
  412. package/dist/providers/Config/index.js.map +1 -1
  413. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  414. package/dist/providers/DocumentInfo/index.js +4 -0
  415. package/dist/providers/DocumentInfo/index.js.map +1 -1
  416. package/dist/providers/DocumentInfo/types.d.ts +4 -0
  417. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  418. package/dist/providers/DocumentInfo/types.js.map +1 -1
  419. package/dist/providers/Root/index.d.ts.map +1 -1
  420. package/dist/providers/Root/index.js +27 -24
  421. package/dist/providers/Root/index.js.map +1 -1
  422. package/dist/providers/TableColumns/RenderDefaultCell/index.css +1 -0
  423. package/dist/providers/Theme/index.d.ts.map +1 -1
  424. package/dist/providers/Theme/index.js +16 -14
  425. package/dist/providers/Theme/index.js.map +1 -1
  426. package/dist/providers/ToastContainer/index.css +208 -0
  427. package/dist/providers/ToastContainer/index.d.ts +1 -0
  428. package/dist/providers/ToastContainer/index.d.ts.map +1 -1
  429. package/dist/providers/ToastContainer/index.js +19 -6
  430. package/dist/providers/ToastContainer/index.js.map +1 -1
  431. package/dist/scss/app.scss +7 -2
  432. package/dist/styles.css +1361 -1
  433. package/dist/templates/Default/index.d.ts.map +1 -1
  434. package/dist/templates/Default/index.js +52 -2
  435. package/dist/templates/Default/index.js.map +1 -1
  436. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js +0 -1
  437. package/dist/utilities/buildClientFieldSchemaMap/traverseFields.js.map +1 -1
  438. package/dist/utilities/buildFieldSchemaMap/traverseFields.js +0 -1
  439. package/dist/utilities/buildFieldSchemaMap/traverseFields.js.map +1 -1
  440. package/dist/utilities/formatDocTitle/formatDateTitle.d.ts.map +1 -1
  441. package/dist/utilities/formatDocTitle/formatDateTitle.js +1 -1
  442. package/dist/utilities/formatDocTitle/formatDateTitle.js.map +1 -1
  443. package/dist/utilities/getHasScheduledPublish.d.ts +12 -0
  444. package/dist/utilities/getHasScheduledPublish.d.ts.map +1 -0
  445. package/dist/utilities/getHasScheduledPublish.js +38 -0
  446. package/dist/utilities/getHasScheduledPublish.js.map +1 -0
  447. package/dist/utilities/getVersions.d.ts.map +1 -1
  448. package/dist/utilities/getVersions.js +1 -21
  449. package/dist/utilities/getVersions.js.map +1 -1
  450. package/dist/utilities/reduceFieldsToOptions.js +1 -1
  451. package/dist/utilities/reduceFieldsToOptions.js.map +1 -1
  452. package/dist/views/Account/ResetPreferences/index.js +1 -0
  453. package/dist/views/Account/ResetPreferences/index.js.map +1 -1
  454. package/dist/views/Account/Settings/index.css +30 -13
  455. package/dist/views/Account/ToggleTheme/index.d.ts.map +1 -1
  456. package/dist/views/Account/ToggleTheme/index.js +31 -47
  457. package/dist/views/Account/ToggleTheme/index.js.map +1 -1
  458. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  459. package/dist/views/Document/index.d.ts.map +1 -1
  460. package/dist/views/Document/index.js +10 -1
  461. package/dist/views/Document/index.js.map +1 -1
  462. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  463. package/dist/views/Edit/Auth/APIKey.js +10 -32
  464. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  465. package/dist/views/Edit/Auth/index.css +0 -67
  466. package/dist/views/Edit/index.d.ts.map +1 -1
  467. package/dist/views/Edit/index.js +62 -48
  468. package/dist/views/Edit/index.js.map +1 -1
  469. package/dist/views/HierarchyList/DocumentListSelection/index.js +8 -8
  470. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  471. package/dist/views/List/ListHeader/index.css +23 -1
  472. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  473. package/dist/views/List/ListHeader/index.js +0 -1
  474. package/dist/views/List/ListHeader/index.js.map +1 -1
  475. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  476. package/dist/views/List/ListSelection/index.js +84 -33
  477. package/dist/views/List/ListSelection/index.js.map +1 -1
  478. package/dist/views/List/handleGroupBy.d.ts.map +1 -1
  479. package/dist/views/List/handleGroupBy.js +9 -0
  480. package/dist/views/List/handleGroupBy.js.map +1 -1
  481. package/dist/views/List/index.client.d.ts.map +1 -1
  482. package/dist/views/List/index.client.js +7 -6
  483. package/dist/views/List/index.client.js.map +1 -1
  484. package/dist/views/List/index.css +15 -0
  485. package/dist/views/List/index.d.ts.map +1 -1
  486. package/dist/views/List/index.js +9 -2
  487. package/dist/views/List/index.js.map +1 -1
  488. package/dist/views/List/renderListViewSlots.d.ts.map +1 -1
  489. package/dist/views/List/renderListViewSlots.js +11 -0
  490. package/dist/views/List/renderListViewSlots.js.map +1 -1
  491. package/dist/views/Logout/LogoutClient.d.ts +14 -0
  492. package/dist/views/Logout/LogoutClient.d.ts.map +1 -1
  493. package/dist/views/Logout/LogoutClient.js +39 -33
  494. package/dist/views/Logout/LogoutClient.js.map +1 -1
  495. package/dist/views/Logout/index.d.ts.map +1 -1
  496. package/dist/views/Logout/index.js +7 -2
  497. package/dist/views/Logout/index.js.map +1 -1
  498. package/dist/views/Version/Default/index.css +3 -5
  499. package/dist/views/Version/Default/index.d.ts.map +1 -1
  500. package/dist/views/Version/Default/index.js +7 -28
  501. package/dist/views/Version/Default/index.js.map +1 -1
  502. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
  503. package/dist/views/Version/Restore/index.css +2 -2
  504. package/dist/views/Version/SelectComparison/VersionDrawer/index.css +5 -0
  505. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts +1 -1
  506. package/dist/views/Version/SelectComparison/VersionDrawer/index.d.ts.map +1 -1
  507. package/dist/views/Version/SelectComparison/VersionDrawer/index.js +1 -2
  508. package/dist/views/Version/SelectComparison/VersionDrawer/index.js.map +1 -1
  509. package/dist/views/Version/SelectComparison/index.css +5 -0
  510. package/dist/views/Version/SelectComparison/index.d.ts +1 -1
  511. package/dist/views/Version/SelectComparison/index.d.ts.map +1 -1
  512. package/dist/views/Version/SelectComparison/index.js +1 -1
  513. package/dist/views/Version/SelectComparison/index.js.map +1 -1
  514. package/dist/views/Version/SelectLocales/index.d.ts +1 -2
  515. package/dist/views/Version/SelectLocales/index.d.ts.map +1 -1
  516. package/dist/views/Version/SelectLocales/index.js +83 -32
  517. package/dist/views/Version/SelectLocales/index.js.map +1 -1
  518. package/dist/views/Versions/cells/CreatedAt/index.js.map +1 -1
  519. package/dist/views/Versions/index.css +19 -16
  520. package/dist/views/Versions/index.d.ts +1 -1
  521. package/dist/views/Versions/index.d.ts.map +1 -1
  522. package/dist/views/Versions/index.js +3 -26
  523. package/dist/views/Versions/index.js.map +1 -1
  524. package/package.json +5 -5
  525. package/dist/elements/BulkUpload/AddingFilesView/index.scss +0 -25
  526. package/dist/elements/BulkUpload/EditForm/index.scss +0 -11
  527. package/dist/elements/BulkUpload/EditMany/index.scss +0 -171
  528. package/dist/elements/ColumnSelector/index.d.ts +0 -9
  529. package/dist/elements/ColumnSelector/index.d.ts.map +0 -1
  530. package/dist/elements/ColumnSelector/index.js.map +0 -1
  531. package/dist/elements/ColumnsButton/index.d.ts +0 -7
  532. package/dist/elements/ColumnsButton/index.d.ts.map +0 -1
  533. package/dist/elements/ColumnsButton/index.js.map +0 -1
  534. package/dist/elements/EditMany/index.scss +0 -182
  535. package/dist/elements/FileDetails/DraggableFileDetails/index.scss +0 -35
  536. package/dist/elements/GroupByBuilder/index.d.ts +0 -12
  537. package/dist/elements/GroupByBuilder/index.d.ts.map +0 -1
  538. package/dist/elements/GroupByBuilder/index.js +0 -164
  539. package/dist/elements/GroupByBuilder/index.js.map +0 -1
  540. package/dist/elements/GroupByBuilder/index.scss +0 -39
  541. package/dist/elements/GroupByControl/index.d.ts +0 -9
  542. package/dist/elements/GroupByControl/index.d.ts.map +0 -1
  543. package/dist/elements/GroupByControl/index.js +0 -258
  544. package/dist/elements/GroupByControl/index.js.map +0 -1
  545. package/dist/elements/Hierarchy/Field/SelectedHierarchies.scss +0 -78
  546. package/dist/elements/Hierarchy/Field/index.scss +0 -41
  547. package/dist/elements/Hierarchy/MoveMany/index.scss +0 -7
  548. package/dist/elements/Hierarchy/Tree/LoadMore/index.scss +0 -26
  549. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts +0 -7
  550. package/dist/elements/Hierarchy/Tree/TreeConnector.d.ts.map +0 -1
  551. package/dist/elements/Hierarchy/Tree/TreeConnector.js +0 -23
  552. package/dist/elements/Hierarchy/Tree/TreeConnector.js.map +0 -1
  553. package/dist/elements/LoadMoreRow/index.scss +0 -45
  554. package/dist/elements/QueryPresets/fields/ColumnsField/index.scss +0 -17
  555. package/dist/elements/QueryPresets/fields/GroupByField/index.scss +0 -17
  556. package/dist/elements/QueryPresets/fields/WhereField/index.scss +0 -23
  557. package/dist/fields/Tabs/Tab/index.css +0 -82
  558. package/dist/scss/toasts.scss +0 -146
  559. package/dist/views/Version/SelectComparison/VersionDrawer/index.scss +0 -18
  560. package/dist/views/Version/SelectComparison/index.scss +0 -9
  561. /package/dist/elements/{ColumnSelector/index.css → ColumnSelection/Popup.css} +0 -0
  562. /package/dist/elements/{GroupByControl/index.css → GroupBy/Popup.css} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useState","isFieldDisabled","useDebounce","useEffectEvent","LineIcon","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","andIndex","fieldPath","filterOptions","isFirstCondition","join","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","updateJoin","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","undefined","disabled","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","classNames","menu","isClearable","onChange","filterOption","inputValue","data","plainTextLabel","toLowerCase","filter","map","f","operators","o","internalField","buttonStyle","icon","size","onClick"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly fieldPath: string\n readonly filterOptions?: ResolvedFilterOptions\n readonly isFirstCondition: boolean\n readonly join: 'and' | 'or'\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter?: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly updateJoin: UpdateJoin\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport { isFieldDisabled } from 'payload/shared'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { LineIcon } from '../../../icons/Line/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.css'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n andIndex,\n fieldPath,\n filterOptions,\n isFirstCondition,\n join,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n updateJoin,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.fieldPath === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n const disabled = !reducedField?.fieldPath || isFieldDisabled(reducedField?.field, 'filter')\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.fieldPath === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__join`}>\n {isFirstCondition ? (\n <span className={`${baseClass}__join-label`}>{t('general:where')}</span>\n ) : (\n <ReactSelect\n classNames={{\n menu: () => 'condition__join-menu',\n }}\n isClearable={false}\n onChange={(option: Option<'and' | 'or'>) =>\n updateJoin({ andIndex, join: option.value, orIndex })\n }\n options={[\n { label: t('general:and'), value: 'and' },\n { label: t('general:or'), value: 'or' },\n ]}\n value={{ label: join === 'and' ? t('general:and') : t('general:or'), value: join }}\n />\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields\n .filter((field) => !isFieldDisabled(field.field, 'filter'))\n .map((f) => ({ ...f, value: f.fieldPath }))}\n value={reducedField ? { ...reducedField, value: reducedField.fieldPath } : undefined}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || isFieldDisabled(reducedField?.field, 'filter')\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__actions-remove`}\n icon={<LineIcon size={24} />}\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useCallback","useEffect","useRef","useState","isFieldDisabled","useDebounce","useEffectEvent","LineIcon","useTranslation","Button","ReactSelect","DefaultFilter","getOperatorValueTypes","baseClass","Condition","props","andIndex","disableRemoveButton","fieldPath","filterOptions","isFirstCondition","join","operator","orIndex","reducedFields","removeCondition","RenderedFilter","updateCondition","updateJoin","value","t","reducedField","find","field","internalValue","setInternalValue","debouncedValue","lastReportedValue","booleanSelect","includes","type","valueOptions","label","options","updateValue","normalizedValue","undefined","current","disabled","handleFieldChange","option","handleOperatorChange","operatorValueTypes","validOperatorValue","isValidValue","_jsx","className","_jsxs","classNames","menu","isClearable","onChange","filterOption","inputValue","data","plainTextLabel","toLowerCase","filter","map","f","operators","o","internalField","buttonStyle","icon","size","onClick"],"sources":["../../../../src/elements/WhereBuilder/Condition/index.tsx"],"sourcesContent":["'use client'\nimport React, { useCallback, useEffect, useRef, useState } from 'react'\n\nimport type {\n AddCondition,\n ReducedField,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n Value,\n} from '../types.js'\n\nexport type Props = {\n readonly addCondition: AddCondition\n readonly andIndex: number\n readonly disableRemoveButton: boolean\n readonly fieldPath: string\n readonly filterOptions?: ResolvedFilterOptions\n readonly isFirstCondition: boolean\n readonly join: 'and' | 'or'\n readonly operator: Operator\n readonly orIndex: number\n readonly reducedFields: ReducedField[]\n readonly removeCondition: RemoveCondition\n readonly RenderedFilter?: React.ReactNode\n readonly updateCondition: UpdateCondition\n readonly updateJoin: UpdateJoin\n readonly value: Value\n}\n\nimport type { Operator, Option as PayloadOption, ResolvedFilterOptions } from 'payload'\n\nimport { isFieldDisabled } from 'payload/shared'\n\nimport type { Option } from '../../ReactSelect/index.js'\n\nimport { useDebounce } from '../../../hooks/useDebounce.js'\nimport { useEffectEvent } from '../../../hooks/useEffectEvent.js'\nimport { LineIcon } from '../../../icons/Line/index.js'\nimport { useTranslation } from '../../../providers/Translation/index.js'\nimport { Button } from '../../Button/index.js'\nimport { ReactSelect } from '../../ReactSelect/index.js'\nimport { DefaultFilter } from './DefaultFilter/index.js'\nimport { getOperatorValueTypes } from './validOperators.js'\nimport './index.css'\n\nconst baseClass = 'condition'\n\nexport const Condition: React.FC<Props> = (props) => {\n const {\n andIndex,\n disableRemoveButton,\n fieldPath,\n filterOptions,\n isFirstCondition,\n join,\n operator,\n orIndex,\n reducedFields,\n removeCondition,\n RenderedFilter,\n updateCondition,\n updateJoin,\n value,\n } = props\n\n const { t } = useTranslation()\n\n const reducedField = reducedFields.find((field) => field.fieldPath === fieldPath)\n\n const [internalValue, setInternalValue] = useState<Value>(value)\n\n const debouncedValue = useDebounce(internalValue, 300)\n\n // Tracks the last value this row reported upward, so the downward sync below can tell our own\n // committed echo apart from a genuine external change (e.g. the row being cleared/reset).\n const lastReportedValue = useRef<Value>(value)\n\n const booleanSelect = ['exists'].includes(operator) || reducedField?.field?.type === 'checkbox'\n\n let valueOptions: PayloadOption[] = []\n\n if (booleanSelect) {\n valueOptions = [\n { label: t('general:true'), value: 'true' },\n { label: t('general:false'), value: 'false' },\n ]\n } else if (reducedField?.field && 'options' in reducedField.field) {\n valueOptions = reducedField.field.options\n }\n\n const updateValue = useEffectEvent(async (debouncedValue: Value) => {\n if (operator) {\n const normalizedValue =\n debouncedValue === null || debouncedValue === '' ? undefined : debouncedValue\n lastReportedValue.current = normalizedValue\n await updateCondition({\n type: 'value',\n andIndex,\n field: reducedField,\n operator,\n orIndex,\n value: normalizedValue,\n })\n }\n })\n\n useEffect(() => {\n void updateValue(debouncedValue)\n }, [debouncedValue])\n\n // Sync external value changes (e.g. the row being cleared or reset to a placeholder) down into\n // local state, but skip our own committed echo so this never clobbers in-progress typing.\n useEffect(() => {\n if (value !== lastReportedValue.current) {\n lastReportedValue.current = value\n setInternalValue(value)\n }\n }, [value])\n\n const disabled = !reducedField?.fieldPath || isFieldDisabled(reducedField?.field, 'filter')\n\n const handleFieldChange = useCallback(\n async (field: Option<string>) => {\n setInternalValue(undefined)\n await updateCondition({\n type: 'field',\n andIndex,\n field: reducedFields.find((option) => option.fieldPath === field.value),\n operator,\n orIndex,\n value: undefined,\n })\n },\n [andIndex, operator, orIndex, reducedFields, updateCondition],\n )\n\n const handleOperatorChange = useCallback(\n async (operator: Option<Operator>) => {\n const operatorValueTypes = getOperatorValueTypes(reducedField.field.type)\n const validOperatorValue = operatorValueTypes[operator.value] || 'any'\n const isValidValue =\n validOperatorValue === 'any' ||\n typeof value === validOperatorValue ||\n (validOperatorValue === 'boolean' && (value === 'true' || value === 'false'))\n\n if (!isValidValue) {\n // if the current value is not valid for the new operator\n // reset the value before passing it to updateCondition\n setInternalValue(undefined)\n }\n\n await updateCondition({\n type: 'operator',\n andIndex,\n field: reducedField,\n operator: operator.value,\n orIndex,\n value: isValidValue ? value : undefined,\n })\n },\n [andIndex, reducedField, orIndex, updateCondition, value],\n )\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__wrap`}>\n <div className={`${baseClass}__join`}>\n {isFirstCondition ? (\n <span className={`${baseClass}__join-label`}>{t('general:where')}</span>\n ) : (\n <ReactSelect\n classNames={{\n menu: () => 'condition__join-menu',\n }}\n isClearable={false}\n onChange={(option: Option<'and' | 'or'>) =>\n updateJoin({ andIndex, join: option.value, orIndex })\n }\n options={[\n { label: t('general:and'), value: 'and' },\n { label: t('general:or'), value: 'or' },\n ]}\n value={{ label: join === 'and' ? t('general:and') : t('general:or'), value: join }}\n />\n )}\n </div>\n <div className={`${baseClass}__inputs`}>\n <div className={`${baseClass}__field`}>\n <ReactSelect\n disabled={disabled}\n filterOption={(option, inputValue) =>\n ((option?.data?.plainTextLabel as string) || option.label)\n .toLowerCase()\n .includes(inputValue.toLowerCase())\n }\n isClearable={false}\n onChange={handleFieldChange}\n options={reducedFields\n .filter((field) => !isFieldDisabled(field.field, 'filter'))\n .map((f) => ({ ...f, value: f.fieldPath }))}\n value={reducedField ? { ...reducedField, value: reducedField.fieldPath } : undefined}\n />\n </div>\n <div className={`${baseClass}__operator`}>\n <ReactSelect\n disabled={disabled}\n isClearable={false}\n onChange={handleOperatorChange}\n options={reducedField?.operators}\n value={reducedField?.operators.find((o) => operator === o.value) || null}\n />\n </div>\n <div className={`${baseClass}__value`}>\n {RenderedFilter || (\n <DefaultFilter\n booleanSelect={booleanSelect}\n disabled={\n !operator || !reducedField || isFieldDisabled(reducedField?.field, 'filter')\n }\n filterOptions={filterOptions}\n internalField={reducedField}\n onChange={setInternalValue}\n operator={operator}\n options={valueOptions}\n value={internalValue ?? ''}\n />\n )}\n </div>\n </div>\n <div className={`${baseClass}__actions`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__actions-remove`}\n disabled={disableRemoveButton}\n icon={<LineIcon size={24} />}\n onClick={() =>\n removeCondition({\n andIndex,\n orIndex,\n })\n }\n />\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -3,9 +3,10 @@ import type { WhereBuilderProps } from './types.js';
3
3
  import './index.css';
4
4
  export { WhereBuilderProps };
5
5
  /**
6
- * The WhereBuilder component is used to render the filter controls for a collection's list view
7
- * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
8
- * by the form; otherwise it uses list query state from {@link useListQuery}.
6
+ * Presentational filter builder. It renders the conditions described by `value` and
7
+ * reports edits through `onChange`. It is unaware of where its value is stored the
8
+ * list view wires it to list query state via {@link ListWhereBuilder}, and the Query
9
+ * Presets drawer wires it to form state.
9
10
  */
10
11
  export declare const WhereBuilder: React.FC<WhereBuilderProps>;
11
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAUnB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;GAIG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAwRpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAQnB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsRpD,CAAA"}
@@ -6,8 +6,6 @@ import { isFieldDisabled, transformWhereQuery, validateWhereQuery } from 'payloa
6
6
  import React, { useMemo } from 'react';
7
7
  import { CirclePlusIcon } from '../../icons/CirclePlus/index.js';
8
8
  import { useAuth } from '../../providers/Auth/index.js';
9
- import { useConfig } from '../../providers/Config/index.js';
10
- import { useListQuery } from '../../providers/ListQuery/index.js';
11
9
  import { useTranslation } from '../../providers/Translation/index.js';
12
10
  import { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js';
13
11
  import { Button } from '../Button/index.js';
@@ -16,19 +14,20 @@ import './index.css';
16
14
  import { fieldTypeConditions, getValidFieldOperators } from './field-types.js';
17
15
  const baseClass = 'where-builder';
18
16
  /**
19
- * The WhereBuilder component is used to render the filter controls for a collection's list view
20
- * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled
21
- * by the form; otherwise it uses list query state from {@link useListQuery}.
17
+ * Presentational filter builder. It renders the conditions described by `value` and
18
+ * reports edits through `onChange`. It is unaware of where its value is stored the
19
+ * list view wires it to list query state via {@link ListWhereBuilder}, and the Query
20
+ * Presets drawer wires it to form state.
22
21
  */
23
22
  export const WhereBuilder = props => {
24
23
  const {
25
24
  collectionSlug,
26
- fields: fieldsProp,
27
- onChange,
28
- onClose,
25
+ fields,
26
+ onChange: handleWhereChange,
27
+ onEmptyRemove,
29
28
  renderedFilters = undefined,
30
29
  resolvedFilterOptions = undefined,
31
- value: valueProp
30
+ value
32
31
  } = props;
33
32
  const {
34
33
  i18n,
@@ -37,15 +36,6 @@ export const WhereBuilder = props => {
37
36
  const {
38
37
  permissions
39
38
  } = useAuth();
40
- const {
41
- getEntityConfig
42
- } = useConfig();
43
- const listQuery = useListQuery();
44
- const isFormMode = typeof onChange === 'function';
45
- const collectionConfig = useMemo(() => isFormMode ? getEntityConfig({
46
- collectionSlug
47
- }) : null, [isFormMode, collectionSlug, getEntityConfig]);
48
- const fields = isFormMode ? collectionConfig?.fields : fieldsProp;
49
39
  const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields;
50
40
  const reducedFields = useMemo(() => reduceFieldsToOptions({
51
41
  fieldPermissions,
@@ -54,31 +44,24 @@ export const WhereBuilder = props => {
54
44
  }), [fieldPermissions, fields, i18n]);
55
45
  const firstField = useMemo(() => reducedFields.find(f => !isFieldDisabled(f.field, 'filter')), [reducedFields]);
56
46
  const conditions = useMemo(() => {
57
- const whereFromSearch = isFormMode ? valueProp : listQuery.query?.where;
58
- if (whereFromSearch) {
59
- if (validateWhereQuery(whereFromSearch)) {
60
- return whereFromSearch.or ?? [];
47
+ if (value) {
48
+ if (validateWhereQuery(value)) {
49
+ return value.or ?? [];
61
50
  }
62
- const transformedWhere = transformWhereQuery(whereFromSearch);
51
+ const transformedWhere = transformWhereQuery(value);
63
52
  if (validateWhereQuery(transformedWhere)) {
64
53
  return transformedWhere.or ?? [];
65
54
  }
66
- if (!isFormMode) {
67
- console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`); // eslint-disable-line no-console
68
- }
69
55
  }
70
56
  return [];
71
- }, [isFormMode, valueProp, listQuery.query?.where]);
72
- const handleWhereChange = useMemo(() => isFormMode ? where => {
73
- onChange?.(where);
74
- } : listQuery.handleWhereChange, [isFormMode, onChange, listQuery.handleWhereChange]);
75
- const addCondition = React.useCallback(async ({
57
+ }, [value]);
58
+ const addCondition = React.useCallback(({
76
59
  andIndex,
77
60
  field,
78
61
  orIndex,
79
62
  relation
80
63
  }) => {
81
- const newConditions = [...conditions];
64
+ const newConditions = structuredClone(conditions);
82
65
  const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value;
83
66
  if (relation === 'and') {
84
67
  newConditions[orIndex].and.splice(andIndex, 0, {
@@ -95,30 +78,36 @@ export const WhereBuilder = props => {
95
78
  }]
96
79
  });
97
80
  }
98
- await handleWhereChange({
81
+ void handleWhereChange({
99
82
  or: newConditions
100
83
  });
101
84
  }, [conditions, handleWhereChange]);
102
- const updateCondition = React.useCallback(async ({
85
+ const updateCondition = React.useCallback(({
86
+ type,
103
87
  andIndex: andIndex_0,
104
88
  field: field_0,
105
89
  operator: incomingOperator,
106
90
  orIndex: orIndex_0,
107
- value
91
+ value: value_0
108
92
  }) => {
109
93
  // Virtual first row: conditions not yet committed, build from scratch
110
94
  if (conditions.length === 0) {
95
+ // Ignore empty value edits so a cleared row doesn't re-commit itself. Field and
96
+ // operator picks carry empty values too, but must fall through to build the row.
97
+ if (type === 'value' && (value_0 === undefined || value_0 === null || value_0 === '')) {
98
+ return;
99
+ }
111
100
  const {
112
101
  validOperator
113
102
  } = getValidFieldOperators({
114
103
  field: field_0.field,
115
104
  operator: incomingOperator
116
105
  });
117
- await handleWhereChange({
106
+ void handleWhereChange({
118
107
  or: [{
119
108
  and: [{
120
109
  [String(field_0.fieldPath)]: {
121
- [validOperator]: value
110
+ [validOperator]: value_0
122
111
  }
123
112
  }]
124
113
  }]
@@ -135,47 +124,47 @@ export const WhereBuilder = props => {
135
124
  });
136
125
  // Skip if nothing changed
137
126
  const existingValue = existingCondition[String(field_0.fieldPath)]?.[validOperator_0];
138
- if (typeof existingValue !== 'undefined' && existingValue === value) {
127
+ if (typeof existingValue !== 'undefined' && existingValue === value_0) {
139
128
  return;
140
129
  }
141
130
  const newRowCondition = {
142
131
  [String(field_0.fieldPath)]: {
143
- [validOperator_0]: value
132
+ [validOperator_0]: value_0
144
133
  }
145
134
  };
146
135
  if (dequal(existingCondition, newRowCondition)) {
147
136
  return;
148
137
  }
149
- const newConditions_0 = [...conditions];
138
+ const newConditions_0 = structuredClone(conditions);
150
139
  newConditions_0[orIndex_0].and[andIndex_0] = newRowCondition;
151
- await handleWhereChange({
140
+ void handleWhereChange({
152
141
  or: newConditions_0
153
142
  });
154
143
  }
155
144
  }, [conditions, handleWhereChange]);
156
- const removeCondition = React.useCallback(async ({
145
+ const removeCondition = React.useCallback(({
157
146
  andIndex: andIndex_1,
158
147
  orIndex: orIndex_1
159
148
  }) => {
160
149
  // Virtual first row: removing it just closes the panel
161
150
  if (conditions.length === 0) {
162
- onClose?.();
151
+ onEmptyRemove?.();
163
152
  return;
164
153
  }
165
- const newConditions_1 = [...conditions];
154
+ const newConditions_1 = structuredClone(conditions);
166
155
  newConditions_1[orIndex_1].and.splice(andIndex_1, 1);
167
156
  if (newConditions_1[orIndex_1].and.length === 0) {
168
157
  newConditions_1.splice(orIndex_1, 1);
169
158
  }
170
- await handleWhereChange({
159
+ void handleWhereChange({
171
160
  or: newConditions_1
172
161
  });
173
162
  // Removing the last remaining condition closes the filters panel.
174
163
  if (newConditions_1.length === 0) {
175
- onClose?.();
164
+ onEmptyRemove?.();
176
165
  }
177
- }, [conditions, handleWhereChange, onClose]);
178
- const updateJoin = React.useCallback(async ({
166
+ }, [conditions, handleWhereChange, onEmptyRemove]);
167
+ const updateJoin = React.useCallback(({
179
168
  andIndex: andIndex_2,
180
169
  join,
181
170
  orIndex: orIndex_2
@@ -207,29 +196,48 @@ export const WhereBuilder = props => {
207
196
  newConditions_2[newConditions_2.length - 1].and.push(cond_0);
208
197
  }
209
198
  });
210
- await handleWhereChange({
199
+ void handleWhereChange({
211
200
  or: newConditions_2
212
201
  });
213
202
  }, [conditions, handleWhereChange]);
214
- const addFirstFilter = React.useCallback(async () => {
215
- if (firstField) {
216
- await addCondition({
217
- andIndex: 0,
218
- field: firstField,
219
- orIndex: conditions.length,
220
- relation: 'or'
203
+ const addFirstFilter = React.useCallback(() => {
204
+ if (!firstField) {
205
+ return;
206
+ }
207
+ // With no committed conditions, only the virtual placeholder row is shown. Commit it
208
+ // and append a new row so a second row appears on the first click.
209
+ if (conditions.length === 0) {
210
+ const defaultOperator_0 = firstField.operators[0].value;
211
+ const makeRow = () => ({
212
+ and: [{
213
+ [String(firstField.fieldPath)]: {
214
+ [defaultOperator_0]: undefined
215
+ }
216
+ }]
221
217
  });
218
+ void handleWhereChange({
219
+ or: [makeRow(), makeRow()]
220
+ });
221
+ return;
222
222
  }
223
- }, [addCondition, conditions.length, firstField]);
224
- // When conditions is empty in list mode, show a virtual first row immediately
225
- // (derived from the first available field) so the panel never opens blank.
226
- const displayConditions = !isFormMode && conditions.length === 0 && firstField ? [{
223
+ void addCondition({
224
+ andIndex: 0,
225
+ field: firstField,
226
+ orIndex: conditions.length,
227
+ relation: 'or'
228
+ });
229
+ }, [addCondition, conditions.length, firstField, handleWhereChange]);
230
+ // When conditions is empty, show a virtual first row so the panel never opens blank.
231
+ const displayConditions = conditions.length === 0 && firstField ? [{
227
232
  and: [{
228
233
  [firstField.fieldPath]: {
229
234
  [firstField.operators[0].value]: undefined
230
235
  }
231
236
  }]
232
237
  }] : conditions;
238
+ // Disable the remove button only when there are no committed conditions and this host
239
+ // doesn't provide an empty-state removal handler.
240
+ const disableRemoveButton = conditions.length === 0 && !onEmptyRemove;
233
241
  return /*#__PURE__*/_jsx("div", {
234
242
  className: baseClass,
235
243
  children: /*#__PURE__*/_jsxs("div", {
@@ -242,12 +250,13 @@ export const WhereBuilder = props => {
242
250
  const condition = displayConditions[orIndex_3].and[andIndex_3];
243
251
  const fieldPath = Object.keys(condition)[0];
244
252
  const operator = Object.keys(condition?.[fieldPath] || {})?.[0] || undefined;
245
- const value_0 = condition?.[fieldPath]?.[operator] || undefined;
253
+ const value_1 = condition?.[fieldPath]?.[operator] || undefined;
246
254
  const isFirstCondition = orIndex_3 === 0 && andIndex_3 === 0;
247
255
  const join_0 = andIndex_3 === 0 ? 'or' : 'and';
248
256
  return /*#__PURE__*/_jsx(Condition, {
249
257
  addCondition: addCondition,
250
258
  andIndex: andIndex_3,
259
+ disableRemoveButton: disableRemoveButton,
251
260
  fieldPath: fieldPath,
252
261
  filterOptions: resolvedFilterOptions?.get(fieldPath),
253
262
  isFirstCondition: isFirstCondition,
@@ -259,7 +268,7 @@ export const WhereBuilder = props => {
259
268
  RenderedFilter: renderedFilters?.get(fieldPath),
260
269
  updateCondition: updateCondition,
261
270
  updateJoin: updateJoin,
262
- value: value_0
271
+ value: value_1
263
272
  }, andIndex_3);
264
273
  })
265
274
  }, compoundOrKey);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["dequal","isFieldDisabled","transformWhereQuery","validateWhereQuery","React","useMemo","CirclePlusIcon","useAuth","useConfig","useListQuery","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionSlug","fields","fieldsProp","onChange","onClose","renderedFilters","undefined","resolvedFilterOptions","value","valueProp","i18n","t","permissions","getEntityConfig","listQuery","isFormMode","collectionConfig","fieldPermissions","collections","reducedFields","firstField","find","f","field","conditions","whereFromSearch","query","where","or","transformedWhere","console","warn","JSON","stringify","handleWhereChange","addCondition","useCallback","andIndex","orIndex","relation","newConditions","defaultOperator","type","operators","and","splice","String","fieldPath","push","updateCondition","operator","incomingOperator","length","validOperator","existingCondition","existingValue","newRowCondition","removeCondition","updateJoin","join","flattened","forEach","orGroup","oIdx","cond","aIdx","isTarget","currentJoin","itemJoin","index","addFirstFilter","displayConditions","_jsx","className","_jsxs","map","compoundOrKey","Array","isArray","_","condition","Object","keys","isFirstCondition","filterOptions","get","RenderedFilter","buttonStyle","icon","size","iconPosition","onClick"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { isFieldDisabled, transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type {\n AddCondition,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n WhereBuilderProps,\n} from './types.js'\n\nimport { CirclePlusIcon } from '../../icons/CirclePlus/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useListQuery } from '../../providers/ListQuery/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport './index.css'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * The WhereBuilder component is used to render the filter controls for a collection's list view\n * or in a form (e.g. Query Presets). When `value` and `onChange` are provided, it is controlled\n * by the form; otherwise it uses list query state from {@link useListQuery}.\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const {\n collectionSlug,\n fields: fieldsProp,\n onChange,\n onClose,\n renderedFilters = undefined,\n resolvedFilterOptions = undefined,\n value: valueProp,\n } = props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n const { getEntityConfig } = useConfig()\n const listQuery = useListQuery()\n\n const isFormMode = typeof onChange === 'function'\n\n const collectionConfig = useMemo(\n () => (isFormMode ? getEntityConfig({ collectionSlug }) : null),\n [isFormMode, collectionSlug, getEntityConfig],\n )\n const fields = isFormMode ? collectionConfig?.fields : fieldsProp\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields: fields ?? [],\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const firstField = useMemo(\n () => reducedFields.find((f) => !isFieldDisabled(f.field, 'filter')),\n [reducedFields],\n )\n\n const conditions = useMemo(() => {\n const whereFromSearch = isFormMode ? valueProp : listQuery.query?.where\n\n if (whereFromSearch) {\n if (validateWhereQuery(whereFromSearch)) {\n return whereFromSearch.or ?? []\n }\n\n const transformedWhere = transformWhereQuery(whereFromSearch)\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or ?? []\n }\n\n if (!isFormMode) {\n console.warn(`Invalid where query in URL: ${JSON.stringify(whereFromSearch)}`) // eslint-disable-line no-console\n }\n }\n\n return []\n }, [isFormMode, valueProp, listQuery.query?.where])\n\n const handleWhereChange = useMemo(\n () =>\n isFormMode\n ? (where: { or: typeof conditions }) => {\n onChange?.(where)\n }\n : listQuery.handleWhereChange,\n [isFormMode, onChange, listQuery.handleWhereChange],\n )\n\n const addCondition: AddCondition = React.useCallback(\n async ({ andIndex, field, orIndex, relation }) => {\n const newConditions = [...conditions]\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.fieldPath)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.fieldPath)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n async ({ andIndex, field, operator: incomingOperator, orIndex, value }) => {\n // Virtual first row: conditions not yet committed, build from scratch\n if (conditions.length === 0) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n await handleWhereChange({\n or: [{ and: [{ [String(field.fieldPath)]: { [validOperator]: value } }] }],\n })\n return\n }\n\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field?.fieldPath) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n\n // Skip if nothing changed\n const existingValue = existingCondition[String(field.fieldPath)]?.[validOperator]\n if (typeof existingValue !== 'undefined' && existingValue === value) {\n return\n }\n\n const newRowCondition = {\n [String(field.fieldPath)]: { [validOperator]: value },\n }\n\n if (dequal(existingCondition, newRowCondition)) {\n return\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and[andIndex] = newRowCondition\n\n await handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n async ({ andIndex, orIndex }) => {\n // Virtual first row: removing it just closes the panel\n if (conditions.length === 0) {\n onClose?.()\n return\n }\n\n const newConditions = [...conditions]\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n await handleWhereChange({ or: newConditions })\n\n // Removing the last remaining condition closes the filters panel.\n if (newConditions.length === 0) {\n onClose?.()\n }\n },\n [conditions, handleWhereChange, onClose],\n )\n\n const updateJoin: UpdateJoin = React.useCallback(\n async ({ andIndex, join, orIndex }) => {\n // Flatten the nested or/and structure into a single ordered list, tracking\n // the join relation that connects each condition to the previous one.\n const flattened: { cond: (typeof conditions)[number]['and'][number]; join: 'and' | 'or' }[] =\n []\n\n conditions.forEach((orGroup, oIdx) => {\n orGroup.and.forEach((cond, aIdx) => {\n const isTarget = oIdx === orIndex && aIdx === andIndex\n const currentJoin = flattened.length === 0 ? null : aIdx === 0 ? 'or' : 'and'\n\n flattened.push({ cond, join: isTarget ? join : currentJoin })\n })\n })\n\n // Rebuild the or/and structure from the flattened list using the join relations.\n const newConditions: typeof conditions = []\n\n flattened.forEach(({ cond, join: itemJoin }, index) => {\n if (index === 0 || itemJoin === 'or') {\n newConditions.push({ and: [cond] })\n } else {\n newConditions[newConditions.length - 1].and.push(cond)\n }\n })\n\n await handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const addFirstFilter = React.useCallback(async () => {\n if (firstField) {\n await addCondition({\n andIndex: 0,\n field: firstField,\n orIndex: conditions.length,\n relation: 'or',\n })\n }\n }, [addCondition, conditions.length, firstField])\n\n // When conditions is empty in list mode, show a virtual first row immediately\n // (derived from the first available field) so the panel never opens blank.\n const displayConditions =\n !isFormMode && conditions.length === 0 && firstField\n ? ([\n { and: [{ [firstField.fieldPath]: { [firstField.operators[0].value]: undefined } }] },\n ] as typeof conditions)\n : conditions\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__or-filters`}>\n {displayConditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <div className={`${baseClass}__and-filters`} key={compoundOrKey}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = displayConditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n const isFirstCondition = orIndex === 0 && andIndex === 0\n const join: 'and' | 'or' = andIndex === 0 ? 'or' : 'and'\n\n return (\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n isFirstCondition={isFirstCondition}\n join={join}\n key={andIndex}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n updateJoin={updateJoin}\n value={value}\n />\n )\n })}\n </div>\n )\n })}\n <div className={`${baseClass}__add-or-row`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__add-or`}\n icon={<CirclePlusIcon size={24} />}\n iconPosition=\"left\"\n onClick={addFirstFilter}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["dequal","isFieldDisabled","transformWhereQuery","validateWhereQuery","React","useMemo","CirclePlusIcon","useAuth","useTranslation","reduceFieldsToOptions","Button","Condition","fieldTypeConditions","getValidFieldOperators","baseClass","WhereBuilder","props","collectionSlug","fields","onChange","handleWhereChange","onEmptyRemove","renderedFilters","undefined","resolvedFilterOptions","value","i18n","t","permissions","fieldPermissions","collections","reducedFields","firstField","find","f","field","conditions","or","transformedWhere","addCondition","useCallback","andIndex","orIndex","relation","newConditions","structuredClone","defaultOperator","type","operators","and","splice","String","fieldPath","push","updateCondition","operator","incomingOperator","length","validOperator","existingCondition","existingValue","newRowCondition","removeCondition","updateJoin","join","flattened","forEach","orGroup","oIdx","cond","aIdx","isTarget","currentJoin","itemJoin","index","addFirstFilter","makeRow","displayConditions","disableRemoveButton","_jsx","className","_jsxs","map","compoundOrKey","Array","isArray","_","condition","Object","keys","isFirstCondition","filterOptions","get","RenderedFilter","buttonStyle","icon","size","iconPosition","onClick"],"sources":["../../../src/elements/WhereBuilder/index.tsx"],"sourcesContent":["'use client'\nimport type { Operator } from 'payload'\n\nimport { dequal } from 'dequal/lite'\nimport { isFieldDisabled, transformWhereQuery, validateWhereQuery } from 'payload/shared'\nimport React, { useMemo } from 'react'\n\nimport type {\n AddCondition,\n RemoveCondition,\n UpdateCondition,\n UpdateJoin,\n WhereBuilderProps,\n} from './types.js'\n\nimport { CirclePlusIcon } from '../../icons/CirclePlus/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { reduceFieldsToOptions } from '../../utilities/reduceFieldsToOptions.js'\nimport { Button } from '../Button/index.js'\nimport { Condition } from './Condition/index.js'\nimport './index.css'\nimport { fieldTypeConditions, getValidFieldOperators } from './field-types.js'\n\nconst baseClass = 'where-builder'\n\nexport { WhereBuilderProps }\n\n/**\n * Presentational filter builder. It renders the conditions described by `value` and\n * reports edits through `onChange`. It is unaware of where its value is stored — the\n * list view wires it to list query state via {@link ListWhereBuilder}, and the Query\n * Presets drawer wires it to form state.\n */\nexport const WhereBuilder: React.FC<WhereBuilderProps> = (props) => {\n const {\n collectionSlug,\n fields,\n onChange: handleWhereChange,\n onEmptyRemove,\n renderedFilters = undefined,\n resolvedFilterOptions = undefined,\n value,\n } = props\n const { i18n, t } = useTranslation()\n const { permissions } = useAuth()\n\n const fieldPermissions = permissions?.collections?.[collectionSlug]?.fields\n\n const reducedFields = useMemo(\n () =>\n reduceFieldsToOptions({\n fieldPermissions,\n fields: fields ?? [],\n i18n,\n }),\n [fieldPermissions, fields, i18n],\n )\n\n const firstField = useMemo(\n () => reducedFields.find((f) => !isFieldDisabled(f.field, 'filter')),\n [reducedFields],\n )\n\n const conditions = useMemo(() => {\n if (value) {\n if (validateWhereQuery(value)) {\n return value.or ?? []\n }\n\n const transformedWhere = transformWhereQuery(value)\n if (validateWhereQuery(transformedWhere)) {\n return transformedWhere.or ?? []\n }\n }\n\n return []\n }, [value])\n\n const addCondition: AddCondition = React.useCallback(\n ({ andIndex, field, orIndex, relation }) => {\n const newConditions = structuredClone(conditions)\n\n const defaultOperator = fieldTypeConditions[field.field.type].operators[0].value\n\n if (relation === 'and') {\n newConditions[orIndex].and.splice(andIndex, 0, {\n [String(field.fieldPath)]: {\n [defaultOperator]: undefined,\n },\n })\n } else {\n newConditions.push({\n and: [\n {\n [String(field.fieldPath)]: {\n [defaultOperator]: undefined,\n },\n },\n ],\n })\n }\n\n void handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const updateCondition: UpdateCondition = React.useCallback(\n ({ type, andIndex, field, operator: incomingOperator, orIndex, value }) => {\n // Virtual first row: conditions not yet committed, build from scratch\n if (conditions.length === 0) {\n // Ignore empty value edits so a cleared row doesn't re-commit itself. Field and\n // operator picks carry empty values too, but must fall through to build the row.\n if (type === 'value' && (value === undefined || value === null || value === '')) {\n return\n }\n\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n void handleWhereChange({\n or: [{ and: [{ [String(field.fieldPath)]: { [validOperator]: value } }] }],\n })\n return\n }\n\n const existingCondition = conditions[orIndex].and[andIndex]\n\n if (typeof existingCondition === 'object' && field?.fieldPath) {\n const { validOperator } = getValidFieldOperators({\n field: field.field,\n operator: incomingOperator,\n })\n\n // Skip if nothing changed\n const existingValue = existingCondition[String(field.fieldPath)]?.[validOperator]\n if (typeof existingValue !== 'undefined' && existingValue === value) {\n return\n }\n\n const newRowCondition = {\n [String(field.fieldPath)]: { [validOperator]: value },\n }\n\n if (dequal(existingCondition, newRowCondition)) {\n return\n }\n\n const newConditions = structuredClone(conditions)\n newConditions[orIndex].and[andIndex] = newRowCondition\n\n void handleWhereChange({ or: newConditions })\n }\n },\n [conditions, handleWhereChange],\n )\n\n const removeCondition: RemoveCondition = React.useCallback(\n ({ andIndex, orIndex }) => {\n // Virtual first row: removing it just closes the panel\n if (conditions.length === 0) {\n onEmptyRemove?.()\n return\n }\n\n const newConditions = structuredClone(conditions)\n newConditions[orIndex].and.splice(andIndex, 1)\n\n if (newConditions[orIndex].and.length === 0) {\n newConditions.splice(orIndex, 1)\n }\n\n void handleWhereChange({ or: newConditions })\n\n // Removing the last remaining condition closes the filters panel.\n if (newConditions.length === 0) {\n onEmptyRemove?.()\n }\n },\n [conditions, handleWhereChange, onEmptyRemove],\n )\n\n const updateJoin: UpdateJoin = React.useCallback(\n ({ andIndex, join, orIndex }) => {\n // Flatten the nested or/and structure into a single ordered list, tracking\n // the join relation that connects each condition to the previous one.\n const flattened: { cond: (typeof conditions)[number]['and'][number]; join: 'and' | 'or' }[] =\n []\n\n conditions.forEach((orGroup, oIdx) => {\n orGroup.and.forEach((cond, aIdx) => {\n const isTarget = oIdx === orIndex && aIdx === andIndex\n const currentJoin = flattened.length === 0 ? null : aIdx === 0 ? 'or' : 'and'\n\n flattened.push({ cond, join: isTarget ? join : currentJoin })\n })\n })\n\n // Rebuild the or/and structure from the flattened list using the join relations.\n const newConditions: typeof conditions = []\n\n flattened.forEach(({ cond, join: itemJoin }, index) => {\n if (index === 0 || itemJoin === 'or') {\n newConditions.push({ and: [cond] })\n } else {\n newConditions[newConditions.length - 1].and.push(cond)\n }\n })\n\n void handleWhereChange({ or: newConditions })\n },\n [conditions, handleWhereChange],\n )\n\n const addFirstFilter = React.useCallback(() => {\n if (!firstField) {\n return\n }\n\n // With no committed conditions, only the virtual placeholder row is shown. Commit it\n // and append a new row so a second row appears on the first click.\n if (conditions.length === 0) {\n const defaultOperator = firstField.operators[0].value\n const makeRow = () => ({\n and: [{ [String(firstField.fieldPath)]: { [defaultOperator]: undefined } }],\n })\n\n void handleWhereChange({ or: [makeRow(), makeRow()] })\n return\n }\n\n void addCondition({\n andIndex: 0,\n field: firstField,\n orIndex: conditions.length,\n relation: 'or',\n })\n }, [addCondition, conditions.length, firstField, handleWhereChange])\n\n // When conditions is empty, show a virtual first row so the panel never opens blank.\n const displayConditions =\n conditions.length === 0 && firstField\n ? ([\n { and: [{ [firstField.fieldPath]: { [firstField.operators[0].value]: undefined } }] },\n ] as typeof conditions)\n : conditions\n\n // Disable the remove button only when there are no committed conditions and this host\n // doesn't provide an empty-state removal handler.\n const disableRemoveButton = conditions.length === 0 && !onEmptyRemove\n\n return (\n <div className={baseClass}>\n <div className={`${baseClass}__or-filters`}>\n {displayConditions.map((or, orIndex) => {\n const compoundOrKey = `${orIndex}_${Array.isArray(or?.and) ? or.and.length : ''}`\n\n return (\n <div className={`${baseClass}__and-filters`} key={compoundOrKey}>\n {Array.isArray(or?.and) &&\n or.and.map((_, andIndex) => {\n const condition = displayConditions[orIndex].and[andIndex]\n const fieldPath = Object.keys(condition)[0]\n\n const operator =\n (Object.keys(condition?.[fieldPath] || {})?.[0] as Operator) || undefined\n\n const value = condition?.[fieldPath]?.[operator] || undefined\n\n const isFirstCondition = orIndex === 0 && andIndex === 0\n const join: 'and' | 'or' = andIndex === 0 ? 'or' : 'and'\n\n return (\n <Condition\n addCondition={addCondition}\n andIndex={andIndex}\n disableRemoveButton={disableRemoveButton}\n fieldPath={fieldPath}\n filterOptions={resolvedFilterOptions?.get(fieldPath)}\n isFirstCondition={isFirstCondition}\n join={join}\n key={andIndex}\n operator={operator}\n orIndex={orIndex}\n reducedFields={reducedFields}\n removeCondition={removeCondition}\n RenderedFilter={renderedFilters?.get(fieldPath)}\n updateCondition={updateCondition}\n updateJoin={updateJoin}\n value={value}\n />\n )\n })}\n </div>\n )\n })}\n <div className={`${baseClass}__add-or-row`}>\n <Button\n buttonStyle=\"ghost\"\n className={`${baseClass}__add-or`}\n icon={<CirclePlusIcon size={24} />}\n iconPosition=\"left\"\n onClick={addFirstFilter}\n >\n {t('general:addFilter')}\n </Button>\n </div>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,13 +2,14 @@ import type { ClientField, Operator, ResolvedFilterOptions, SanitizedCollectionC
2
2
  export type WhereBuilderProps = {
3
3
  readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural'];
4
4
  readonly collectionSlug: SanitizedCollectionConfig['slug'];
5
- readonly fields?: ClientField[];
6
- /** When set, WhereBuilder is controlled by the form (value + onChange) instead of list query. */
7
- readonly onChange?: (where: Where) => void;
8
- /** Called when the last condition is removed, so the parent can close the filters panel. */
9
- readonly onClose?: () => void;
5
+ readonly fields: ClientField[];
6
+ /** Called with the next `where` value whenever a condition is added, edited, or removed. */
7
+ readonly onChange: (where: Where) => Promise<void> | void;
8
+ /** Called when the last condition is removed, so the parent has empty state control. */
9
+ readonly onEmptyRemove?: () => void;
10
10
  readonly renderedFilters?: Map<string, React.ReactNode>;
11
11
  readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>;
12
+ /** The current `where` value to render conditions from. */
12
13
  readonly value?: Where;
13
14
  };
14
15
  export type Value = Date | number | number[] | string | string[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/WhereBuilder/types.ts"],"sourcesContent":["import type {\n ClientField,\n Operator,\n ResolvedFilterOptions,\n SanitizedCollectionConfig,\n Where,\n} from 'payload'\n\nexport type WhereBuilderProps = {\n readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural']\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields?: ClientField[]\n /** When set, WhereBuilder is controlled by the form (value + onChange) instead of list query. */\n readonly onChange?: (where: Where) => void\n /** Called when the last condition is removed, so the parent can close the filters panel. */\n readonly onClose?: () => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n readonly value?: Where\n}\n\nexport type Value = Date | number | number[] | string | string[]\n\nexport type ReducedField = {\n field: ClientField\n /** The field path (e.g. \"title\" or \"author.name\") */\n fieldPath: string\n label: React.ReactNode\n operators: {\n label: string\n value: Operator\n }[]\n plainTextLabel?: string\n}\n\nexport type Relation = 'and' | 'or'\n\nexport type ADD = {\n andIndex?: number\n field: string\n orIndex?: number\n relation?: Relation\n type: 'add'\n}\n\nexport type REMOVE = {\n andIndex: number\n orIndex: number\n type: 'remove'\n}\n\nexport type UPDATE = {\n andIndex: number\n field?: string\n operator?: string\n orIndex: number\n type: 'update'\n value?: unknown\n}\n\nexport type Action = ADD | REMOVE | UPDATE\n\nexport type State = {\n or: Where[]\n}\n\nexport type AddCondition = ({\n andIndex,\n field,\n orIndex,\n relation,\n}: {\n andIndex: number\n field: ReducedField\n orIndex: number\n relation: 'and' | 'or'\n}) => Promise<void> | void\n\nexport type UpdateCondition = ({\n type,\n andIndex,\n field,\n operator,\n orIndex,\n value,\n}: {\n andIndex: number\n field: ReducedField\n operator: string\n orIndex: number\n type: 'field' | 'operator' | 'value'\n value: Value\n}) => Promise<void> | void\n\nexport type RemoveCondition = ({\n andIndex,\n orIndex,\n}: {\n andIndex: number\n orIndex: number\n}) => Promise<void> | void\n\nexport type UpdateJoin = ({\n andIndex,\n join,\n orIndex,\n}: {\n andIndex: number\n join: Relation\n orIndex: number\n}) => Promise<void> | void\n"],"mappings":"AAsGA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/elements/WhereBuilder/types.ts"],"sourcesContent":["import type {\n ClientField,\n Operator,\n ResolvedFilterOptions,\n SanitizedCollectionConfig,\n Where,\n} from 'payload'\n\nexport type WhereBuilderProps = {\n readonly collectionPluralLabel?: SanitizedCollectionConfig['labels']['plural']\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly fields: ClientField[]\n /** Called with the next `where` value whenever a condition is added, edited, or removed. */\n readonly onChange: (where: Where) => Promise<void> | void\n /** Called when the last condition is removed, so the parent has empty state control. */\n readonly onEmptyRemove?: () => void\n readonly renderedFilters?: Map<string, React.ReactNode>\n readonly resolvedFilterOptions?: Map<string, ResolvedFilterOptions>\n /** The current `where` value to render conditions from. */\n readonly value?: Where\n}\n\nexport type Value = Date | number | number[] | string | string[]\n\nexport type ReducedField = {\n field: ClientField\n /** The field path (e.g. \"title\" or \"author.name\") */\n fieldPath: string\n label: React.ReactNode\n operators: {\n label: string\n value: Operator\n }[]\n plainTextLabel?: string\n}\n\nexport type Relation = 'and' | 'or'\n\nexport type ADD = {\n andIndex?: number\n field: string\n orIndex?: number\n relation?: Relation\n type: 'add'\n}\n\nexport type REMOVE = {\n andIndex: number\n orIndex: number\n type: 'remove'\n}\n\nexport type UPDATE = {\n andIndex: number\n field?: string\n operator?: string\n orIndex: number\n type: 'update'\n value?: unknown\n}\n\nexport type Action = ADD | REMOVE | UPDATE\n\nexport type State = {\n or: Where[]\n}\n\nexport type AddCondition = ({\n andIndex,\n field,\n orIndex,\n relation,\n}: {\n andIndex: number\n field: ReducedField\n orIndex: number\n relation: 'and' | 'or'\n}) => Promise<void> | void\n\nexport type UpdateCondition = ({\n type,\n andIndex,\n field,\n operator,\n orIndex,\n value,\n}: {\n andIndex: number\n field: ReducedField\n operator: string\n orIndex: number\n type: 'field' | 'operator' | 'value'\n value: Value\n}) => Promise<void> | void\n\nexport type RemoveCondition = ({\n andIndex,\n orIndex,\n}: {\n andIndex: number\n orIndex: number\n}) => Promise<void> | void\n\nexport type UpdateJoin = ({\n andIndex,\n join,\n orIndex,\n}: {\n andIndex: number\n join: Relation\n orIndex: number\n}) => Promise<void> | void\n"],"mappings":"AAuGA","ignoreList":[]}
@@ -25,6 +25,7 @@ export { QueryPresetsGroupByCell } from '../../elements/QueryPresets/cells/Group
25
25
  export { QueryPresetsColumnField } from '../../elements/QueryPresets/fields/ColumnsField/index.js';
26
26
  export { QueryPresetsWhereField } from '../../elements/QueryPresets/fields/WhereField/index.js';
27
27
  export { QueryPresetsGroupByField } from '../../elements/QueryPresets/fields/GroupByField/index.js';
28
+ export { QueryPresetsHeading } from '../../elements/QueryPresets/fields/Heading/index.js';
28
29
  export { ConfirmationModal } from '../../elements/ConfirmationModal/index.js';
29
30
  export type { OnCancel } from '../../elements/ConfirmationModal/index.js';
30
31
  export { DialogBody, DialogCancel, DialogConfirm, DialogFooter, DialogHeader, DialogModal, } from '../../elements/Dialog/index.js';
@@ -43,12 +44,17 @@ export { Translation } from '../../elements/Translation/index.js';
43
44
  export { default as DatePicker } from '../../elements/DatePicker/DatePicker.js';
44
45
  export { ViewDescription } from '../../elements/ViewDescription/index.js';
45
46
  export { AppHeader } from '../../elements/AppHeader/index.js';
47
+ export { MenuSeparator } from '../../elements/MenuSeparator/index.js';
46
48
  export { RenderCustomComponent } from '../../elements/RenderCustomComponent/index.js';
47
49
  export { BulkUploadDrawer, BulkUploadProvider, useBulkUpload, useBulkUploadDrawerSlug, } from '../../elements/BulkUpload/index.js';
48
50
  export { DrawerContentContainer } from '../../elements/DrawerContentContainer/index.js';
49
51
  export type { BulkUploadProps } from '../../elements/BulkUpload/index.js';
52
+ export { APIKeyInput } from '../../elements/APIKeyInput/index.js';
53
+ export type { APIKeyInputProps } from '../../elements/APIKeyInput/index.js';
50
54
  export { Banner } from '../../elements/Banner/index.js';
51
55
  export { Button } from '../../elements/Button/index.js';
56
+ export { TabButton, Tabs, TabsList } from '../../elements/Tabs/index.js';
57
+ export type { TabsProps, TabsTab } from '../../elements/Tabs/index.js';
52
58
  export { AnimateHeight } from '../../elements/AnimateHeight/index.js';
53
59
  export { PillSelector, type SelectablePill } from '../../elements/PillSelector/index.js';
54
60
  export { Card } from '../../elements/Card/index.js';
@@ -167,8 +173,10 @@ export type { ThumbnailCardProps } from '../../elements/ThumbnailCard/index.js';
167
173
  export { Tooltip } from '../../elements/Tooltip/index.js';
168
174
  import { toast } from 'sonner';
169
175
  export { toast };
176
+ export { FieldErrorsToast } from '../../elements/Toasts/fieldErrors.js';
170
177
  export { UnpublishMany } from '../../elements/UnpublishMany/index.js';
171
178
  export { Upload } from '../../elements/Upload/index.js';
179
+ export { UserMenu } from '../../elements/UserMenu/index.js';
172
180
  export { ListSearchFilter } from '../../elements/Search/ListSearchFilter/index.js';
173
181
  export { SearchInput } from '../../elements/Search/SearchInput/index.js';
174
182
  export { FilterTrigger } from '../../elements/FilterTrigger/index.js';
@@ -272,6 +280,7 @@ export { ClipboardIcon } from '../../icons/Clipboard/index.js';
272
280
  export { Dots } from '../../icons/Dots/index.js';
273
281
  export { DuplicateIcon } from '../../icons/Duplicate/index.js';
274
282
  export { EyeIcon } from '../../icons/Eye/index.js';
283
+ export { KeyIcon } from '../../icons/Key/index.js';
275
284
  export { LockIcon } from '../../icons/Lock/index.js';
276
285
  export { LockOpenIcon } from '../../icons/LockOpen/index.js';
277
286
  export { PeopleIcon } from '../../icons/People/index.js';
@@ -281,8 +290,12 @@ export { ThreeDotsIcon } from '../../icons/ThreeDots/index.js';
281
290
  export { TrashIcon } from '../../icons/Trash/index.js';
282
291
  export { ErrorIcon } from '../../icons/Error/index.js';
283
292
  export { InfoIcon } from '../../icons/Info/index.js';
293
+ export { InteractionEnterIcon } from '../../icons/InteractionEnter/index.js';
294
+ export { LanguageIcon } from '../../icons/Language/index.js';
284
295
  export { SuccessIcon } from '../../icons/Success/index.js';
296
+ export { VariableColorIcon } from '../../icons/VariableColor/index.js';
285
297
  export { WarningIcon } from '../../icons/Warning/index.js';
298
+ export { WarningTriangleIcon } from '../../icons/WarningTriangle/index.js';
286
299
  export { TagIcon } from '../../icons/Tag/index.js';
287
300
  export { type RenderDocumentResult, type RenderDocumentServerFunction, ServerFunctionsContext, type ServerFunctionsContextType, ServerFunctionsProvider, useServerFunctions, } from '../../providers/ServerFunctions/index.js';
288
301
  export { ActionsProvider, useActions } from '../../providers/Actions/index.js';