@payloadcms/ui 4.0.0-internal.f05c47f → 4.0.0-internal.f715c6e

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 (328) hide show
  1. package/dist/elements/AppHeader/index.css +0 -1
  2. package/dist/elements/ArrayAction/index.d.ts +0 -1
  3. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  4. package/dist/elements/ArrayAction/index.js +32 -45
  5. package/dist/elements/ArrayAction/index.js.map +1 -1
  6. package/dist/elements/Autosave/index.d.ts.map +1 -1
  7. package/dist/elements/Autosave/index.js +0 -3
  8. package/dist/elements/Autosave/index.js.map +1 -1
  9. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  10. package/dist/elements/BulkUpload/FormsManager/index.js +2 -6
  11. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  12. package/dist/elements/Button/index.css +2 -2
  13. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +0 -10
  14. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  15. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +0 -55
  16. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  17. package/dist/elements/ColumnSelection/Popup.d.ts.map +1 -1
  18. package/dist/elements/ColumnSelection/Popup.js +3 -3
  19. package/dist/elements/ColumnSelection/Popup.js.map +1 -1
  20. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts +10 -0
  21. package/dist/elements/ColumnSelection/matchesColumnSearch.d.ts.map +1 -0
  22. package/dist/elements/ColumnSelection/matchesColumnSearch.js +21 -0
  23. package/dist/elements/ColumnSelection/matchesColumnSearch.js.map +1 -0
  24. package/dist/{utilities/matchesSearchQuery.spec.js → elements/ColumnSelection/matchesColumnSearch.spec.js} +29 -29
  25. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +1 -0
  26. package/dist/elements/Combobox/index.css +23 -76
  27. package/dist/elements/Combobox/index.d.ts +0 -7
  28. package/dist/elements/Combobox/index.d.ts.map +1 -1
  29. package/dist/elements/Combobox/index.js +20 -58
  30. package/dist/elements/Combobox/index.js.map +1 -1
  31. package/dist/elements/CopyToClipboard/index.d.ts +0 -1
  32. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  33. package/dist/elements/CopyToClipboard/index.js +8 -10
  34. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  35. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  36. package/dist/elements/DeleteDocument/index.js +2 -9
  37. package/dist/elements/DeleteDocument/index.js.map +1 -1
  38. package/dist/elements/DeleteMany/index.d.ts.map +1 -1
  39. package/dist/elements/DeleteMany/index.js +1 -4
  40. package/dist/elements/DeleteMany/index.js.map +1 -1
  41. package/dist/elements/Drawer/index.css +4 -10
  42. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +2 -3
  43. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  44. package/dist/elements/DuplicateDocument/index.d.ts.map +1 -1
  45. package/dist/elements/DuplicateDocument/index.js +1 -6
  46. package/dist/elements/DuplicateDocument/index.js.map +1 -1
  47. package/dist/elements/EditMany/DrawerContent.d.ts.map +1 -1
  48. package/dist/elements/EditMany/DrawerContent.js +1 -4
  49. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  50. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  51. package/dist/elements/FileManager/FileToolbar/index.js +0 -3
  52. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  53. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  54. package/dist/elements/Hierarchy/ColumnBrowser/index.js +1 -4
  55. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  56. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +1 -1
  57. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +1 -4
  58. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +1 -1
  59. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +1 -2
  60. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  61. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +0 -2
  62. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  63. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  64. package/dist/elements/Hierarchy/Modal/index.js +0 -3
  65. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  66. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  67. package/dist/elements/Hierarchy/MoveMany/index.js +1 -4
  68. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  69. package/dist/elements/Hierarchy/Search/useHierarchySearch.d.ts.map +1 -1
  70. package/dist/elements/Hierarchy/Search/useHierarchySearch.js +0 -3
  71. package/dist/elements/Hierarchy/Search/useHierarchySearch.js.map +1 -1
  72. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  73. package/dist/elements/Hierarchy/Tree/useChildren.js +1 -4
  74. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
  75. package/dist/elements/IDLabel/index.css +0 -6
  76. package/dist/elements/IDLabel/index.d.ts +1 -1
  77. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  78. package/dist/elements/IDLabel/index.js +21 -16
  79. package/dist/elements/IDLabel/index.js.map +1 -1
  80. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +7 -1
  81. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  82. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +32 -26
  83. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  84. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.d.ts.map +1 -1
  85. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +2 -6
  86. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  87. package/dist/elements/PermanentlyDeleteButton/index.d.ts.map +1 -1
  88. package/dist/elements/PermanentlyDeleteButton/index.js +1 -4
  89. package/dist/elements/PermanentlyDeleteButton/index.js.map +1 -1
  90. package/dist/elements/Popup/PopupButtonList/index.css +1 -1
  91. package/dist/elements/Popup/index.js +1 -1
  92. package/dist/elements/Popup/index.js.map +1 -1
  93. package/dist/elements/PublishButton/ScheduleDrawer/index.js +1 -1
  94. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  95. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  96. package/dist/elements/PublishButton/index.js +2 -6
  97. package/dist/elements/PublishButton/index.js.map +1 -1
  98. package/dist/elements/PublishMany/DrawerContent.d.ts.map +1 -1
  99. package/dist/elements/PublishMany/DrawerContent.js +1 -4
  100. package/dist/elements/PublishMany/DrawerContent.js.map +1 -1
  101. package/dist/elements/QueryPresets/QueryPresetBar/index.js +3 -1
  102. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  103. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  104. package/dist/elements/RelationshipTable/index.js +2 -5
  105. package/dist/elements/RelationshipTable/index.js.map +1 -1
  106. package/dist/elements/RestoreButton/index.d.ts.map +1 -1
  107. package/dist/elements/RestoreButton/index.js +1 -4
  108. package/dist/elements/RestoreButton/index.js.map +1 -1
  109. package/dist/elements/RestoreMany/index.d.ts.map +1 -1
  110. package/dist/elements/RestoreMany/index.js +0 -3
  111. package/dist/elements/RestoreMany/index.js.map +1 -1
  112. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  113. package/dist/elements/SortHeader/index.js +26 -29
  114. package/dist/elements/SortHeader/index.js.map +1 -1
  115. package/dist/elements/StepNav/index.css +14 -64
  116. package/dist/elements/StepNav/index.d.ts.map +1 -1
  117. package/dist/elements/StepNav/index.js +69 -145
  118. package/dist/elements/StepNav/index.js.map +1 -1
  119. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  120. package/dist/elements/Table/DefaultCell/index.js +11 -3
  121. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  122. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  123. package/dist/elements/Table/OrderableTable.js +1 -3
  124. package/dist/elements/Table/OrderableTable.js.map +1 -1
  125. package/dist/elements/Table/RelationshipProvider/index.d.ts.map +1 -1
  126. package/dist/elements/Table/RelationshipProvider/index.js +23 -29
  127. package/dist/elements/Table/RelationshipProvider/index.js.map +1 -1
  128. package/dist/elements/UnpublishButton/index.d.ts.map +1 -1
  129. package/dist/elements/UnpublishButton/index.js +1 -4
  130. package/dist/elements/UnpublishButton/index.js.map +1 -1
  131. package/dist/elements/UnpublishMany/DrawerContent.d.ts.map +1 -1
  132. package/dist/elements/UnpublishMany/DrawerContent.js +1 -4
  133. package/dist/elements/UnpublishMany/DrawerContent.js.map +1 -1
  134. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  135. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +0 -3
  136. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  137. package/dist/exports/client/index.d.ts +1 -5
  138. package/dist/exports/client/index.d.ts.map +1 -1
  139. package/dist/exports/client/index.js +1 -1
  140. package/dist/exports/client/index.js.map +3 -3
  141. package/dist/fields/Array/ArrayRow.d.ts +0 -1
  142. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  143. package/dist/fields/Array/ArrayRow.js +0 -2
  144. package/dist/fields/Array/ArrayRow.js.map +1 -1
  145. package/dist/fields/Array/index.d.ts.map +1 -1
  146. package/dist/fields/Array/index.js +10 -38
  147. package/dist/fields/Array/index.js.map +1 -1
  148. package/dist/fields/Blocks/BlockRow.d.ts +0 -1
  149. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  150. package/dist/fields/Blocks/BlockRow.js +0 -2
  151. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  152. package/dist/fields/Blocks/RowActions.d.ts +0 -1
  153. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  154. package/dist/fields/Blocks/RowActions.js +19 -22
  155. package/dist/fields/Blocks/RowActions.js.map +1 -1
  156. package/dist/fields/Blocks/index.d.ts.map +1 -1
  157. package/dist/fields/Blocks/index.js +7 -35
  158. package/dist/fields/Blocks/index.js.map +1 -1
  159. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  160. package/dist/fields/Relationship/Input.js +1 -5
  161. package/dist/fields/Relationship/Input.js.map +1 -1
  162. package/dist/fields/Upload/Input.d.ts.map +1 -1
  163. package/dist/fields/Upload/Input.js +1 -4
  164. package/dist/fields/Upload/Input.js.map +1 -1
  165. package/dist/forms/Form/index.d.ts.map +1 -1
  166. package/dist/forms/Form/index.js +1 -4
  167. package/dist/forms/Form/index.js.map +1 -1
  168. package/dist/hooks/usePayloadAPI.d.ts.map +1 -1
  169. package/dist/hooks/usePayloadAPI.js +40 -44
  170. package/dist/hooks/usePayloadAPI.js.map +1 -1
  171. package/dist/icons/Edit/index.d.ts +1 -0
  172. package/dist/icons/Edit/index.d.ts.map +1 -1
  173. package/dist/icons/Edit/index.js +4 -4
  174. package/dist/icons/Edit/index.js.map +1 -1
  175. package/dist/providers/Actions/index.d.ts +0 -1
  176. package/dist/providers/Actions/index.d.ts.map +1 -1
  177. package/dist/providers/Actions/index.js +11 -43
  178. package/dist/providers/Actions/index.js.map +1 -1
  179. package/dist/providers/Auth/index.d.ts +56 -2
  180. package/dist/providers/Auth/index.d.ts.map +1 -1
  181. package/dist/providers/Auth/index.js +135 -283
  182. package/dist/providers/Auth/index.js.map +1 -1
  183. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  184. package/dist/providers/DocumentInfo/index.js +1 -5
  185. package/dist/providers/DocumentInfo/index.js.map +1 -1
  186. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts +1 -2
  187. package/dist/providers/DocumentInfo/useGetDocPermissions.d.ts.map +1 -1
  188. package/dist/providers/DocumentInfo/useGetDocPermissions.js +1 -3
  189. package/dist/providers/DocumentInfo/useGetDocPermissions.js.map +1 -1
  190. package/dist/providers/FormErrorHandler/index.d.ts +1 -5
  191. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -1
  192. package/dist/providers/FormErrorHandler/index.js.map +1 -1
  193. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  194. package/dist/providers/Hierarchy/index.js +1 -4
  195. package/dist/providers/Hierarchy/index.js.map +1 -1
  196. package/dist/providers/Locale/index.d.ts.map +1 -1
  197. package/dist/providers/Locale/index.js +36 -41
  198. package/dist/providers/Locale/index.js.map +1 -1
  199. package/dist/providers/Root/index.js +4 -4
  200. package/dist/providers/Root/index.js.map +1 -1
  201. package/dist/providers/RouteTransition/ProgressBar/index.js +1 -4
  202. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  203. package/dist/providers/RouteTransition/index.d.ts +0 -2
  204. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  205. package/dist/providers/RouteTransition/index.js +14 -42
  206. package/dist/providers/RouteTransition/index.js.map +1 -1
  207. package/dist/styles.css +1 -1
  208. package/dist/templates/Default/index.d.ts +0 -1
  209. package/dist/templates/Default/index.d.ts.map +1 -1
  210. package/dist/templates/Default/index.js +39 -45
  211. package/dist/templates/Default/index.js.map +1 -1
  212. package/dist/utilities/filterOutUploadFields.d.ts.map +1 -1
  213. package/dist/utilities/filterOutUploadFields.js +1 -1
  214. package/dist/utilities/filterOutUploadFields.js.map +1 -1
  215. package/dist/utilities/initReq.d.ts.map +1 -1
  216. package/dist/utilities/initReq.js +0 -8
  217. package/dist/utilities/initReq.js.map +1 -1
  218. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  219. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +2 -3
  220. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  221. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  222. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  223. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  224. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  225. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +66 -104
  226. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  227. package/dist/views/Dashboard/Default/ModularDashboard/index.css +140 -33
  228. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  229. package/dist/views/HierarchyList/HierarchyTable/index.js +2 -6
  230. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  231. package/dist/views/List/ListHeader/index.d.ts +10 -1
  232. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  233. package/dist/views/List/ListHeader/index.js +3 -1
  234. package/dist/views/List/ListHeader/index.js.map +1 -1
  235. package/dist/views/List/index.client.d.ts.map +1 -1
  236. package/dist/views/List/index.client.js +14 -0
  237. package/dist/views/List/index.client.js.map +1 -1
  238. package/dist/views/List/index.css +0 -5
  239. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  240. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  241. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  242. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  243. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  244. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  245. package/dist/views/Root/index.d.ts.map +1 -1
  246. package/dist/views/Root/index.js +0 -1
  247. package/dist/views/Root/index.js.map +1 -1
  248. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  249. package/dist/views/Version/Restore/index.js +3 -6
  250. package/dist/views/Version/Restore/index.js.map +1 -1
  251. package/package.json +4 -4
  252. package/dist/elements/BranchSelector/index.css +0 -83
  253. package/dist/elements/BranchSelector/index.d.ts +0 -12
  254. package/dist/elements/BranchSelector/index.d.ts.map +0 -1
  255. package/dist/elements/BranchSelector/index.js +0 -160
  256. package/dist/elements/BranchSelector/index.js.map +0 -1
  257. package/dist/providers/Auth/AuthSessionDebug/index.css +0 -48
  258. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +0 -13
  259. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +0 -1
  260. package/dist/providers/Auth/AuthSessionDebug/index.js +0 -93
  261. package/dist/providers/Auth/AuthSessionDebug/index.js.map +0 -1
  262. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +0 -21
  263. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +0 -1
  264. package/dist/providers/Auth/AuthSessionDebug/utilities.js +0 -53
  265. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +0 -1
  266. package/dist/providers/Auth/authSessionRequests.d.ts +0 -27
  267. package/dist/providers/Auth/authSessionRequests.d.ts.map +0 -1
  268. package/dist/providers/Auth/authSessionRequests.js +0 -119
  269. package/dist/providers/Auth/authSessionRequests.js.map +0 -1
  270. package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
  271. package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
  272. package/dist/providers/Auth/sessionActivity.d.ts +0 -23
  273. package/dist/providers/Auth/sessionActivity.d.ts.map +0 -1
  274. package/dist/providers/Auth/sessionActivity.js +0 -49
  275. package/dist/providers/Auth/sessionActivity.js.map +0 -1
  276. package/dist/providers/Auth/sessionActivity.spec.js +0 -44
  277. package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
  278. package/dist/providers/Auth/sessionTiming.d.ts +0 -11
  279. package/dist/providers/Auth/sessionTiming.d.ts.map +0 -1
  280. package/dist/providers/Auth/sessionTiming.js +0 -18
  281. package/dist/providers/Auth/sessionTiming.js.map +0 -1
  282. package/dist/providers/Auth/tabSessionSync/index.d.ts +0 -17
  283. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +0 -1
  284. package/dist/providers/Auth/tabSessionSync/index.js +0 -263
  285. package/dist/providers/Auth/tabSessionSync/index.js.map +0 -1
  286. package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
  287. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
  288. package/dist/providers/Auth/tabSessionSync/types.d.ts +0 -107
  289. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +0 -1
  290. package/dist/providers/Auth/tabSessionSync/types.js +0 -6
  291. package/dist/providers/Auth/tabSessionSync/types.js.map +0 -1
  292. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +0 -11
  293. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +0 -1
  294. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +0 -90
  295. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +0 -1
  296. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +0 -26
  297. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +0 -1
  298. package/dist/providers/Auth/tabSessionSync/utilities.js +0 -159
  299. package/dist/providers/Auth/tabSessionSync/utilities.js.map +0 -1
  300. package/dist/providers/Auth/types.d.ts +0 -65
  301. package/dist/providers/Auth/types.d.ts.map +0 -1
  302. package/dist/providers/Auth/types.js +0 -2
  303. package/dist/providers/Auth/types.js.map +0 -1
  304. package/dist/providers/Auth/useAuthSessionTimers.d.ts +0 -26
  305. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +0 -1
  306. package/dist/providers/Auth/useAuthSessionTimers.js +0 -203
  307. package/dist/providers/Auth/useAuthSessionTimers.js.map +0 -1
  308. package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
  309. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
  310. package/dist/providers/Branch/index.d.ts +0 -62
  311. package/dist/providers/Branch/index.d.ts.map +0 -1
  312. package/dist/providers/Branch/index.js +0 -192
  313. package/dist/providers/Branch/index.js.map +0 -1
  314. package/dist/providers/Branch/index.server.d.ts +0 -14
  315. package/dist/providers/Branch/index.server.d.ts.map +0 -1
  316. package/dist/providers/Branch/index.server.js +0 -80
  317. package/dist/providers/Branch/index.server.js.map +0 -1
  318. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
  319. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
  320. package/dist/utilities/getRequestBranch.d.ts +0 -18
  321. package/dist/utilities/getRequestBranch.d.ts.map +0 -1
  322. package/dist/utilities/getRequestBranch.js +0 -32
  323. package/dist/utilities/getRequestBranch.js.map +0 -1
  324. package/dist/utilities/matchesSearchQuery.d.ts +0 -12
  325. package/dist/utilities/matchesSearchQuery.d.ts.map +0 -1
  326. package/dist/utilities/matchesSearchQuery.js +0 -23
  327. package/dist/utilities/matchesSearchQuery.js.map +0 -1
  328. package/dist/utilities/matchesSearchQuery.spec.js.map +0 -1
@@ -56,11 +56,11 @@
56
56
  border: var(--stroke-width-small) solid var(--special-border-translucent);
57
57
 
58
58
  &:hover:not(.btn--disabled) {
59
- background-color: var(--color-bg-secondary-hover);
59
+ background-color: var(--color-bg-transparent-hover);
60
60
  }
61
61
 
62
62
  &:active:not(.btn--disabled) {
63
- background-color: var(--color-bg-secondary-pressed);
63
+ background-color: var(--color-bg-transparent-pressed);
64
64
  }
65
65
 
66
66
  &.btn--disabled {
@@ -11,14 +11,4 @@ export declare function mergeFormStateFromClipboard({ dataFromClipboard: clipboa
11
11
  path: string;
12
12
  rowIndex?: number;
13
13
  }): FormState;
14
- /**
15
- * Inserts a new row at `rowIndex`, populated with clipboard data, without disturbing
16
- * any existing rows. Existing rows at and after `rowIndex` are shifted down by one.
17
- */
18
- export declare function insertRowFromClipboard({ dataFromClipboard: clipboardData, formState, path, rowIndex, }: {
19
- dataFromClipboard: ClipboardPasteData;
20
- formState: FormState;
21
- path: string;
22
- rowIndex: number;
23
- }): FormState;
24
14
  //# sourceMappingURL=mergeFormStateFromClipboard.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mergeFormStateFromClipboard.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAO,MAAM,SAAS,CAAA;AAIzD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAMpD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,8BAyBA;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,iBAAiB,EAAE,aAAa,EAChC,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,iBAAiB,EAAE,kBAAkB,CAAA;IACrC,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,aA0IA;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,iBAAiB,EAAE,aAAa,EAChC,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,iBAAiB,EAAE,kBAAkB,CAAA;IACrC,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,SAAS,CAqCZ"}
1
+ {"version":3,"file":"mergeFormStateFromClipboard.d.ts","sourceRoot":"","sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAIpD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAIpD,wBAAgB,qBAAqB,CAAC,EACpC,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,8BAyBA;AAED,wBAAgB,2BAA2B,CAAC,EAC1C,iBAAiB,EAAE,aAAa,EAChC,SAAS,EACT,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,iBAAiB,EAAE,kBAAkB,CAAA;IACrC,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,aA0IA"}
@@ -1,5 +1,4 @@
1
1
  import ObjectIdImport from 'bson-objectid';
2
- import { flattenRows, separateRows } from '../../forms/Form/rows.js';
3
2
  const ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport;
4
3
  export function reduceFormStateByPath({
5
4
  formState,
@@ -148,58 +147,4 @@ export function mergeFormStateFromClipboard({
148
147
  }
149
148
  return formState;
150
149
  }
151
- /**
152
- * Inserts a new row at `rowIndex`, populated with clipboard data, without disturbing
153
- * any existing rows. Existing rows at and after `rowIndex` are shifted down by one.
154
- */
155
- export function insertRowFromClipboard({
156
- dataFromClipboard: clipboardData,
157
- formState,
158
- path,
159
- rowIndex
160
- }) {
161
- const {
162
- path: pathFromClipboard,
163
- rowIndex: rowIndexFromClipboard
164
- } = clipboardData;
165
- const sourceRowPath = typeof rowIndexFromClipboard === 'number' ? `${pathFromClipboard}.${rowIndexFromClipboard}` : pathFromClipboard;
166
- const blockType = clipboardData.data[`${sourceRowPath}.blockType`]?.value;
167
- const newRowID = new ObjectId().toHexString();
168
- const {
169
- remainingFields,
170
- rows
171
- } = separateRows(path, formState);
172
- rows.splice(rowIndex, 0, {
173
- id: {
174
- initialValue: newRowID,
175
- valid: true,
176
- value: newRowID
177
- }
178
- });
179
- const newRows = [...(formState[path].rows || [])];
180
- const newRow = {
181
- id: newRowID,
182
- isLoading: false
183
- };
184
- if (blockType) {
185
- newRow.blockType = blockType;
186
- }
187
- newRows.splice(rowIndex, 0, newRow);
188
- const formStateWithNewRow = {
189
- ...remainingFields,
190
- ...flattenRows(path, rows),
191
- [path]: {
192
- ...formState[path],
193
- disableFormData: true,
194
- rows: newRows,
195
- value: rows.length
196
- }
197
- };
198
- return mergeFormStateFromClipboard({
199
- dataFromClipboard: clipboardData,
200
- formState: formStateWithNewRow,
201
- path,
202
- rowIndex
203
- });
204
- }
205
150
  //# sourceMappingURL=mergeFormStateFromClipboard.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"mergeFormStateFromClipboard.js","names":["ObjectIdImport","flattenRows","separateRows","ObjectId","default","reduceFormStateByPath","formState","path","rowIndex","filteredState","prefix","key","startsWith","customComponents","_","validate","__","field","Array","isArray","rows","map","row","serializableRow","mergeFormStateFromClipboard","dataFromClipboard","clipboardData","type","typeFromClipboard","data","pathFromClipboard","rowIndexFromClipboard","copyFromField","pasteIntoField","fromRowToField","pathToReplace","targetSegment","lastRenderedPath","rowIDFromClipboard","value","hasRows","length","id","isLoading","initialValue","disableFormData","fieldPath","idReplacements","Map","clipboardPath","newPath","replace","undefined","endsWith","oldID","isValid","newID","toHexString","set","relativePath","segments","split","parseInt","parentFieldPath","slice","join","fullParentPath","parentRows","isNaN","targetParts","lastPart","rowIndexFromTarget","insertRowFromClipboard","sourceRowPath","blockType","newRowID","remainingFields","splice","valid","newRows","newRow","formStateWithNewRow"],"sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.ts"],"sourcesContent":["import type { FieldState, FormState, Row } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\n\nimport type { ClipboardPasteData } from './types.js'\n\nimport { flattenRows, separateRows } from '../../forms/Form/rows.js'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nexport function reduceFormStateByPath({\n formState,\n path,\n rowIndex,\n}: {\n formState: FormState\n path: string\n rowIndex?: number\n}) {\n const filteredState: Record<string, FieldState> = {}\n const prefix = typeof rowIndex !== 'number' ? path : `${path}.${rowIndex}`\n\n for (const key in formState) {\n if (!key.startsWith(prefix)) {\n continue\n }\n\n const { customComponents: _, validate: __, ...field } = formState[key]\n\n if (Array.isArray(field.rows)) {\n field.rows = field.rows.map((row) => {\n if (!row || typeof row !== 'object') {\n return row\n }\n const { customComponents: _, ...serializableRow } = row\n return serializableRow\n })\n }\n\n filteredState[key] = field\n }\n\n return filteredState\n}\n\nexport function mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path,\n rowIndex,\n}: {\n dataFromClipboard: ClipboardPasteData\n formState: FormState\n path: string\n rowIndex?: number\n}) {\n const {\n type: typeFromClipboard,\n data: dataFromClipboard,\n path: pathFromClipboard,\n rowIndex: rowIndexFromClipboard,\n } = clipboardData\n\n const copyFromField = typeof rowIndexFromClipboard !== 'number'\n const pasteIntoField = typeof rowIndex !== 'number'\n const fromRowToField = !copyFromField && pasteIntoField\n const isArray = typeFromClipboard === 'array'\n\n let pathToReplace: string\n if (copyFromField && pasteIntoField) {\n pathToReplace = pathFromClipboard\n } else if (copyFromField) {\n pathToReplace = `${pathFromClipboard}.${rowIndex}`\n } else {\n pathToReplace = `${pathFromClipboard}.${rowIndexFromClipboard}`\n }\n\n let targetSegment: string\n if (!pasteIntoField) {\n targetSegment = `${path}.${rowIndex}`\n } else if (fromRowToField) {\n targetSegment = `${path}.0`\n } else {\n targetSegment = path\n }\n\n if (fromRowToField) {\n const lastRenderedPath = `${path}.0`\n const rowIDFromClipboard = dataFromClipboard[`${pathToReplace}.id`]?.value as string\n const hasRows = formState[path].rows?.length\n\n formState[path].rows = [\n {\n ...(hasRows && isArray ? formState[path].rows[0] : {}),\n id: rowIDFromClipboard,\n isLoading: false,\n lastRenderedPath,\n },\n ]\n formState[path].value = 1\n formState[path].initialValue = 1\n formState[path].disableFormData = true\n\n for (const fieldPath in formState) {\n if (\n fieldPath !== path &&\n !fieldPath.startsWith(lastRenderedPath) &&\n fieldPath.startsWith(path)\n ) {\n delete formState[fieldPath]\n }\n }\n }\n\n // Map to track old IDs to new IDs for regenerating nested IDs\n const idReplacements: Map<string, string> = new Map()\n\n for (const clipboardPath in dataFromClipboard) {\n // When pasting into a specific row, skip only the direct row ID to avoid overwriting\n // the target row's identity. Nested IDs (array item IDs within the block) should\n // still be processed so they get regenerated below, preventing server-side duplication.\n if (\n (!pasteIntoField && clipboardPath === `${pathToReplace}.id`) ||\n !clipboardPath.startsWith(pathToReplace)\n ) {\n continue\n }\n\n const newPath = clipboardPath.replace(pathToReplace, targetSegment)\n\n const customComponents = isArray ? formState[newPath]?.customComponents : undefined\n const validate = isArray ? formState[newPath]?.validate : undefined\n\n // If this is an ID field, generate a new ID to prevent duplicates\n if (clipboardPath.endsWith('.id') && dataFromClipboard[clipboardPath]?.value) {\n const oldID = dataFromClipboard[clipboardPath].value as string\n if (typeof oldID === 'string' && ObjectId.isValid(oldID)) {\n const newID = new ObjectId().toHexString()\n idReplacements.set(clipboardPath, newID)\n\n formState[newPath] = {\n customComponents,\n validate,\n ...dataFromClipboard[clipboardPath],\n initialValue: newID,\n value: newID,\n }\n continue\n }\n }\n\n formState[newPath] = {\n customComponents,\n validate,\n ...dataFromClipboard[clipboardPath],\n }\n }\n\n // Update parent field rows with new IDs\n for (const [clipboardPath, newID] of idReplacements) {\n const relativePath = clipboardPath.replace(`${pathToReplace}.`, '')\n const segments = relativePath.split('.')\n\n if (segments.length >= 2) {\n const rowIndex = parseInt(segments[segments.length - 2], 10)\n const parentFieldPath = segments.slice(0, segments.length - 2).join('.')\n const fullParentPath = parentFieldPath ? `${targetSegment}.${parentFieldPath}` : targetSegment\n\n if (formState[fullParentPath] && Array.isArray(formState[fullParentPath].rows)) {\n const parentRows = formState[fullParentPath].rows\n if (!isNaN(rowIndex) && parentRows[rowIndex]) {\n parentRows[rowIndex].id = newID\n }\n }\n } else if (segments.length === 1 && segments[0] === 'id') {\n // Top-level block ID - extract field path and row index from targetSegment\n const targetParts = targetSegment.split('.')\n const lastPart = targetParts[targetParts.length - 1]\n const rowIndexFromTarget = !isNaN(parseInt(lastPart, 10)) ? parseInt(lastPart, 10) : 0\n const fieldPath = !isNaN(parseInt(lastPart, 10))\n ? targetParts.slice(0, -1).join('.')\n : targetSegment\n\n if (formState[fieldPath] && Array.isArray(formState[fieldPath].rows)) {\n const rows = formState[fieldPath].rows\n if (rows[rowIndexFromTarget]) {\n rows[rowIndexFromTarget].id = newID\n }\n }\n }\n }\n\n return formState\n}\n\n/**\n * Inserts a new row at `rowIndex`, populated with clipboard data, without disturbing\n * any existing rows. Existing rows at and after `rowIndex` are shifted down by one.\n */\nexport function insertRowFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path,\n rowIndex,\n}: {\n dataFromClipboard: ClipboardPasteData\n formState: FormState\n path: string\n rowIndex: number\n}): FormState {\n const { path: pathFromClipboard, rowIndex: rowIndexFromClipboard } = clipboardData\n\n const sourceRowPath =\n typeof rowIndexFromClipboard === 'number'\n ? `${pathFromClipboard}.${rowIndexFromClipboard}`\n : pathFromClipboard\n\n const blockType = clipboardData.data[`${sourceRowPath}.blockType`]?.value as string | undefined\n\n const newRowID = new ObjectId().toHexString()\n\n const { remainingFields, rows } = separateRows(path, formState)\n\n rows.splice(rowIndex, 0, {\n id: { initialValue: newRowID, valid: true, value: newRowID },\n })\n\n const newRows = [...(formState[path].rows || [])]\n const newRow: Row = { id: newRowID, isLoading: false }\n if (blockType) {\n newRow.blockType = blockType\n }\n newRows.splice(rowIndex, 0, newRow)\n\n const formStateWithNewRow: FormState = {\n ...remainingFields,\n ...flattenRows(path, rows),\n [path]: { ...formState[path], disableFormData: true, rows: newRows, value: rows.length },\n }\n\n return mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState: formStateWithNewRow,\n path,\n rowIndex,\n })\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"mergeFormStateFromClipboard.js","names":["ObjectIdImport","ObjectId","default","reduceFormStateByPath","formState","path","rowIndex","filteredState","prefix","key","startsWith","customComponents","_","validate","__","field","Array","isArray","rows","map","row","serializableRow","mergeFormStateFromClipboard","dataFromClipboard","clipboardData","type","typeFromClipboard","data","pathFromClipboard","rowIndexFromClipboard","copyFromField","pasteIntoField","fromRowToField","pathToReplace","targetSegment","lastRenderedPath","rowIDFromClipboard","value","hasRows","length","id","isLoading","initialValue","disableFormData","fieldPath","idReplacements","Map","clipboardPath","newPath","replace","undefined","endsWith","oldID","isValid","newID","toHexString","set","relativePath","segments","split","parseInt","parentFieldPath","slice","join","fullParentPath","parentRows","isNaN","targetParts","lastPart","rowIndexFromTarget"],"sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.ts"],"sourcesContent":["import type { FieldState, FormState } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\n\nimport type { ClipboardPasteData } from './types.js'\n\nconst ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n\nexport function reduceFormStateByPath({\n formState,\n path,\n rowIndex,\n}: {\n formState: FormState\n path: string\n rowIndex?: number\n}) {\n const filteredState: Record<string, FieldState> = {}\n const prefix = typeof rowIndex !== 'number' ? path : `${path}.${rowIndex}`\n\n for (const key in formState) {\n if (!key.startsWith(prefix)) {\n continue\n }\n\n const { customComponents: _, validate: __, ...field } = formState[key]\n\n if (Array.isArray(field.rows)) {\n field.rows = field.rows.map((row) => {\n if (!row || typeof row !== 'object') {\n return row\n }\n const { customComponents: _, ...serializableRow } = row\n return serializableRow\n })\n }\n\n filteredState[key] = field\n }\n\n return filteredState\n}\n\nexport function mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path,\n rowIndex,\n}: {\n dataFromClipboard: ClipboardPasteData\n formState: FormState\n path: string\n rowIndex?: number\n}) {\n const {\n type: typeFromClipboard,\n data: dataFromClipboard,\n path: pathFromClipboard,\n rowIndex: rowIndexFromClipboard,\n } = clipboardData\n\n const copyFromField = typeof rowIndexFromClipboard !== 'number'\n const pasteIntoField = typeof rowIndex !== 'number'\n const fromRowToField = !copyFromField && pasteIntoField\n const isArray = typeFromClipboard === 'array'\n\n let pathToReplace: string\n if (copyFromField && pasteIntoField) {\n pathToReplace = pathFromClipboard\n } else if (copyFromField) {\n pathToReplace = `${pathFromClipboard}.${rowIndex}`\n } else {\n pathToReplace = `${pathFromClipboard}.${rowIndexFromClipboard}`\n }\n\n let targetSegment: string\n if (!pasteIntoField) {\n targetSegment = `${path}.${rowIndex}`\n } else if (fromRowToField) {\n targetSegment = `${path}.0`\n } else {\n targetSegment = path\n }\n\n if (fromRowToField) {\n const lastRenderedPath = `${path}.0`\n const rowIDFromClipboard = dataFromClipboard[`${pathToReplace}.id`]?.value as string\n const hasRows = formState[path].rows?.length\n\n formState[path].rows = [\n {\n ...(hasRows && isArray ? formState[path].rows[0] : {}),\n id: rowIDFromClipboard,\n isLoading: false,\n lastRenderedPath,\n },\n ]\n formState[path].value = 1\n formState[path].initialValue = 1\n formState[path].disableFormData = true\n\n for (const fieldPath in formState) {\n if (\n fieldPath !== path &&\n !fieldPath.startsWith(lastRenderedPath) &&\n fieldPath.startsWith(path)\n ) {\n delete formState[fieldPath]\n }\n }\n }\n\n // Map to track old IDs to new IDs for regenerating nested IDs\n const idReplacements: Map<string, string> = new Map()\n\n for (const clipboardPath in dataFromClipboard) {\n // When pasting into a specific row, skip only the direct row ID to avoid overwriting\n // the target row's identity. Nested IDs (array item IDs within the block) should\n // still be processed so they get regenerated below, preventing server-side duplication.\n if (\n (!pasteIntoField && clipboardPath === `${pathToReplace}.id`) ||\n !clipboardPath.startsWith(pathToReplace)\n ) {\n continue\n }\n\n const newPath = clipboardPath.replace(pathToReplace, targetSegment)\n\n const customComponents = isArray ? formState[newPath]?.customComponents : undefined\n const validate = isArray ? formState[newPath]?.validate : undefined\n\n // If this is an ID field, generate a new ID to prevent duplicates\n if (clipboardPath.endsWith('.id') && dataFromClipboard[clipboardPath]?.value) {\n const oldID = dataFromClipboard[clipboardPath].value as string\n if (typeof oldID === 'string' && ObjectId.isValid(oldID)) {\n const newID = new ObjectId().toHexString()\n idReplacements.set(clipboardPath, newID)\n\n formState[newPath] = {\n customComponents,\n validate,\n ...dataFromClipboard[clipboardPath],\n initialValue: newID,\n value: newID,\n }\n continue\n }\n }\n\n formState[newPath] = {\n customComponents,\n validate,\n ...dataFromClipboard[clipboardPath],\n }\n }\n\n // Update parent field rows with new IDs\n for (const [clipboardPath, newID] of idReplacements) {\n const relativePath = clipboardPath.replace(`${pathToReplace}.`, '')\n const segments = relativePath.split('.')\n\n if (segments.length >= 2) {\n const rowIndex = parseInt(segments[segments.length - 2], 10)\n const parentFieldPath = segments.slice(0, segments.length - 2).join('.')\n const fullParentPath = parentFieldPath ? `${targetSegment}.${parentFieldPath}` : targetSegment\n\n if (formState[fullParentPath] && Array.isArray(formState[fullParentPath].rows)) {\n const parentRows = formState[fullParentPath].rows\n if (!isNaN(rowIndex) && parentRows[rowIndex]) {\n parentRows[rowIndex].id = newID\n }\n }\n } else if (segments.length === 1 && segments[0] === 'id') {\n // Top-level block ID - extract field path and row index from targetSegment\n const targetParts = targetSegment.split('.')\n const lastPart = targetParts[targetParts.length - 1]\n const rowIndexFromTarget = !isNaN(parseInt(lastPart, 10)) ? parseInt(lastPart, 10) : 0\n const fieldPath = !isNaN(parseInt(lastPart, 10))\n ? targetParts.slice(0, -1).join('.')\n : targetSegment\n\n if (formState[fieldPath] && Array.isArray(formState[fieldPath].rows)) {\n const rows = formState[fieldPath].rows\n if (rows[rowIndexFromTarget]) {\n rows[rowIndexFromTarget].id = newID\n }\n }\n }\n }\n\n return formState\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Popup.d.ts","sourceRoot":"","sources":["../../../src/elements/ColumnSelection/Popup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAyE,MAAM,OAAO,CAAA;AAY7F,OAAO,aAAa,CAAA;AA8CpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAkDD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA6NpE,CAAA"}
1
+ {"version":3,"file":"Popup.d.ts","sourceRoot":"","sources":["../../../src/elements/ColumnSelection/Popup.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,yBAAyB,EAAe,MAAM,SAAS,CAAA;AAI7E,OAAO,KAAyE,MAAM,OAAO,CAAA;AAY7F,OAAO,aAAa,CAAA;AA8CpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,QAAQ,CAAC,cAAc,EAAE,yBAAyB,CAAC,MAAM,CAAC,CAAA;IAC1D,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,CAAA;IAC1B,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;IAC9C,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAC9B,CAAA;AAkDD,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA+NpE,CAAA"}
@@ -10,11 +10,11 @@ import { SearchIcon } from '../../icons/Search/index.js';
10
10
  import { XIcon } from '../../icons/X/index.js';
11
11
  import { useEditDepth } from '../../providers/EditDepth/index.js';
12
12
  import { useTranslation } from '../../providers/Translation/index.js';
13
- import { matchesSearchQuery } from '../../utilities/matchesSearchQuery.js';
14
13
  import { Button } from '../Button/index.js';
15
14
  import { DraggableSortable } from '../DraggableSortable/index.js';
16
15
  import { useDraggableSortable } from '../DraggableSortable/useDraggableSortable/index.js';
17
16
  import { Switch } from '../Switch/index.js';
17
+ import { matchesColumnSearch } from './matchesColumnSearch.js';
18
18
  import './Popup.css';
19
19
  const baseClass = 'column-selector';
20
20
  /**
@@ -208,8 +208,8 @@ export const ColumnSelectionPopup = ({
208
208
  };
209
209
  });
210
210
  // Filter by search query
211
- const filtered = searchQuery ? items.filter(item => matchesSearchQuery({
212
- label: item.labelText,
211
+ const filtered = searchQuery ? items.filter(item => matchesColumnSearch({
212
+ labelText: item.labelText,
213
213
  query: searchQuery
214
214
  })) : items;
215
215
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"Popup.js","names":["c","_c","getTranslation","fieldIsHiddenOrDisabled","fieldIsID","isFieldDisabled","React","useCallback","useId","useLayoutEffect","useMemo","useRef","useState","AlignJustifiedIcon","SearchIcon","XIcon","useEditDepth","useTranslation","matchesSearchQuery","Button","DraggableSortable","useDraggableSortable","Switch","baseClass","parseNestedLabel","label","includes","segments","split","length","NestedLabel","_jsx","_Fragment","map","segment","index","_jsxs","Fragment","className","ColumnItem","t0","$","id","active","labelText","onToggle","t","t1","attributes","isDragging","isOver","isSorting","listeners","setNodeRef","transform","t2","t3","t4","t5","filter","Boolean","t6","join","t7","undefined","t8","ref","style","children","size","checked","onChange","ColumnSelectionPopup","collectionSlug","columns","onClose","i18n","toggleColumn","column","col","accessor","moveColumn","fromIndex","toIndex","next","moved","splice","uuid","editDepth","searchQuery","setSearchQuery","containerRef","lockedWidth","setLockedWidth","current","offsetWidth","filteredColumns","field","columnItems","all","hidden","shown","items","i","labelWithPrefix","name","filtered","item","query","handleDragEnd","moveFromIndex","moveToIndex","allItems","shownCount","fromItem","toItem","fromIsShown","toIsShown","allIds","containerStyle","buttonStyle","icon","onClick","e","target","value","placeholder","type","ids","onDragEnd"],"sources":["../../../src/elements/ColumnSelection/Popup.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, SanitizedCollectionConfig, StaticLabel } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldIsHiddenOrDisabled, fieldIsID, isFieldDisabled } from 'payload/shared'\nimport React, { useCallback, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { AlignJustifiedIcon } from '../../icons/AlignJustified/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { matchesSearchQuery } from '../../utilities/matchesSearchQuery.js'\nimport { Button } from '../Button/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { useDraggableSortable } from '../DraggableSortable/useDraggableSortable/index.js'\nimport { Switch } from '../Switch/index.js'\nimport './Popup.css'\n\nconst baseClass = 'column-selector'\n\n/**\n * Parses a nested field label and returns segments for rendering.\n * - For deeply nested paths (more than 3 segments), truncates to [First, \"...\", Last]\n */\nfunction parseNestedLabel(label: string): string[] {\n if (!label.includes(' > ')) {\n return [label]\n }\n\n const segments = label.split(' > ')\n\n if (segments.length <= 3) {\n return segments\n }\n\n // For deep nesting, show: First / ... / Last\n return [segments[0], '...', segments[segments.length - 1]]\n}\n\ntype NestedLabelProps = {\n readonly label: string\n}\n\nconst NestedLabel: React.FC<NestedLabelProps> = ({ label }) => {\n const segments = parseNestedLabel(label)\n\n if (segments.length === 1) {\n return <>{segments[0]}</>\n }\n\n return (\n <>\n {segments.map((segment, index) => (\n <React.Fragment key={index}>\n {index > 0 && <span className={`${baseClass}__separator`}>/</span>}\n {segment}\n </React.Fragment>\n ))}\n </>\n )\n}\n\nexport type ColumnSelectionPopupProps = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly columns: Column[]\n /** Called with the next column state whenever a column is toggled or reordered. */\n readonly onChange: (columns: Column[]) => void\n readonly onClose?: () => void\n}\n\ntype ColumnItemProps = {\n readonly active: boolean\n readonly id: string\n readonly labelText: string\n readonly onToggle: () => void\n}\n\nconst ColumnItem: React.FC<ColumnItemProps> = ({ id, active, labelText, onToggle }) => {\n const { t } = useTranslation()\n const { attributes, isDragging, isOver, isSorting, listeners, setNodeRef, transform } =\n useDraggableSortable({\n id,\n })\n\n return (\n <div\n aria-label={labelText}\n className={[\n `${baseClass}__item`,\n !active && `${baseClass}__item--inactive`,\n isDragging && `${baseClass}__item--dragging`,\n isOver && isSorting && !isDragging && `${baseClass}__item--over`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={setNodeRef}\n style={{\n // Keep item in place while dragging - don't apply transform\n transform: isDragging ? undefined : transform,\n ...attributes.style,\n }}\n {...attributes}\n >\n <span\n aria-label={t('general:dragToReorder')}\n className={`${baseClass}__drag-handle`}\n {...listeners}\n >\n <AlignJustifiedIcon size={16} />\n </span>\n <span className={`${baseClass}__item-label`}>\n <NestedLabel label={labelText} />\n </span>\n <Switch checked={active} onChange={onToggle} />\n </div>\n )\n}\n\nexport const ColumnSelectionPopup: React.FC<ColumnSelectionPopupProps> = ({\n collectionSlug,\n columns,\n onChange,\n onClose,\n}) => {\n const { i18n, t } = useTranslation()\n\n const toggleColumn = useCallback(\n (column: string) => {\n onChange(\n columns.map((col) => (col.accessor === column ? { ...col, active: !col.active } : col)),\n )\n },\n [columns, onChange],\n )\n\n const moveColumn = useCallback(\n ({ fromIndex, toIndex }: { fromIndex: number; toIndex: number }) => {\n const next = [...columns]\n const [moved] = next.splice(fromIndex, 1)\n next.splice(toIndex, 0, moved)\n onChange(next)\n },\n [columns, onChange],\n )\n\n const uuid = useId()\n const editDepth = useEditDepth()\n const [searchQuery, setSearchQuery] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const [lockedWidth, setLockedWidth] = useState<null | number>(null)\n\n // Lock the width when search starts to prevent layout shift\n useLayoutEffect(() => {\n if (!containerRef.current) {\n return\n }\n\n if (searchQuery && lockedWidth === null) {\n // Capture width when search starts\n setLockedWidth(containerRef.current.offsetWidth)\n } else if (!searchQuery && lockedWidth !== null) {\n // Release width lock when search is cleared\n setLockedWidth(null)\n }\n }, [searchQuery, lockedWidth])\n\n const filteredColumns = useMemo(\n () =>\n columns?.filter(\n (col) =>\n !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) &&\n !isFieldDisabled(col.field, 'column'),\n ),\n [columns],\n )\n\n const columnItems = useMemo(() => {\n if (!filteredColumns) {\n return { all: [], hidden: [], shown: [] }\n }\n\n const items = filteredColumns.map((col, i) => {\n const { accessor, active, field } = col\n\n const label =\n 'labelWithPrefix' in field && field.labelWithPrefix !== undefined\n ? field.labelWithPrefix\n : 'label' in field && field.label !== undefined && field.label !== false\n ? field.label\n : 'name' in field && field.name !== undefined\n ? field.name\n : accessor\n\n const labelText =\n typeof label === 'string' ? label : getTranslation(label as StaticLabel, i18n)\n\n return {\n id: `${collectionSlug}-${accessor}-${i}${editDepth ? `-${editDepth}-` : ''}${uuid}`,\n accessor,\n active,\n index: i,\n label,\n labelText,\n }\n })\n\n // Filter by search query\n const filtered = searchQuery\n ? items.filter((item) => matchesSearchQuery({ label: item.labelText, query: searchQuery }))\n : items\n\n return {\n all: items,\n hidden: filtered.filter((item) => !item.active),\n shown: filtered.filter((item) => item.active),\n }\n }, [collectionSlug, editDepth, filteredColumns, i18n, searchQuery, uuid])\n\n const handleDragEnd = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex) {\n return\n }\n\n // All shown items first, then all hidden items\n const allItems = [...columnItems.shown, ...columnItems.hidden]\n const shownCount = columnItems.shown.length\n const fromItem = allItems[moveFromIndex]\n const toItem = allItems[moveToIndex]\n\n if (!fromItem || !toItem) {\n return\n }\n\n // Determine if crossing sections\n const fromIsShown = moveFromIndex < shownCount\n const toIsShown = moveToIndex < shownCount\n\n if (fromIsShown !== toIsShown) {\n // Cross-section move: just toggle the column's active state (show/hide)\n void toggleColumn(fromItem.accessor)\n // Don't reorder when crossing sections - the toggle handles the change\n return\n }\n\n // Same-section move: perform the reorder\n void moveColumn({\n fromIndex: fromItem.index,\n toIndex: toItem.index,\n })\n },\n [columnItems.shown, columnItems.hidden, moveColumn, toggleColumn],\n )\n\n if (!filteredColumns) {\n return null\n }\n\n // Combined IDs: shown items first, then hidden items\n const allIds = [...columnItems.shown, ...columnItems.hidden].map((item) => item.id)\n\n const containerStyle = lockedWidth\n ? ({ '--column-selector-locked-width': `${lockedWidth}px` } as React.CSSProperties)\n : undefined\n\n return (\n <div\n className={baseClass}\n data-popup-prevent-close\n data-width-locked={lockedWidth ? 'true' : undefined}\n ref={containerRef}\n style={containerStyle}\n >\n <div className={`${baseClass}__header`}>\n <span className={`${baseClass}__title`}>{t('general:editColumns')}</span>\n {onClose && (\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__close`}\n icon={<XIcon size={24} />}\n onClick={onClose}\n />\n )}\n </div>\n <div className={`${baseClass}__search`}>\n <div className={`${baseClass}__search-bar`}>\n <SearchIcon size={24} />\n <input\n aria-label={t('general:searchColumns')}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={t('general:searchColumns')}\n type=\"text\"\n value={searchQuery}\n />\n </div>\n </div>\n <div className={`${baseClass}__content`}>\n <DraggableSortable ids={allIds} onDragEnd={handleDragEnd}>\n {columnItems.shown.length === 0 && columnItems.hidden.length === 0 && searchQuery && (\n <div className={`${baseClass}__no-results`}>{t('general:noMatchesFound')}</div>\n )}\n {columnItems.shown.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:shownInTable')}</div>\n {columnItems.shown.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n {columnItems.hidden.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:notShownInTable')}</div>\n {columnItems.hidden.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n </DraggableSortable>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Popup.js","names":["c","_c","getTranslation","fieldIsHiddenOrDisabled","fieldIsID","isFieldDisabled","React","useCallback","useId","useLayoutEffect","useMemo","useRef","useState","AlignJustifiedIcon","SearchIcon","XIcon","useEditDepth","useTranslation","Button","DraggableSortable","useDraggableSortable","Switch","matchesColumnSearch","baseClass","parseNestedLabel","label","includes","segments","split","length","NestedLabel","_jsx","_Fragment","map","segment","index","_jsxs","Fragment","className","ColumnItem","t0","$","id","active","labelText","onToggle","t","t1","attributes","isDragging","isOver","isSorting","listeners","setNodeRef","transform","t2","t3","t4","t5","filter","Boolean","t6","join","t7","undefined","t8","ref","style","children","size","checked","onChange","ColumnSelectionPopup","collectionSlug","columns","onClose","i18n","toggleColumn","column","col","accessor","moveColumn","fromIndex","toIndex","next","moved","splice","uuid","editDepth","searchQuery","setSearchQuery","containerRef","lockedWidth","setLockedWidth","current","offsetWidth","filteredColumns","field","columnItems","all","hidden","shown","items","i","labelWithPrefix","name","filtered","item","query","handleDragEnd","moveFromIndex","moveToIndex","allItems","shownCount","fromItem","toItem","fromIsShown","toIsShown","allIds","containerStyle","buttonStyle","icon","onClick","e","target","value","placeholder","type","ids","onDragEnd"],"sources":["../../../src/elements/ColumnSelection/Popup.tsx"],"sourcesContent":["'use client'\n\nimport type { Column, SanitizedCollectionConfig, StaticLabel } from 'payload'\n\nimport { getTranslation } from '@payloadcms/translations'\nimport { fieldIsHiddenOrDisabled, fieldIsID, isFieldDisabled } from 'payload/shared'\nimport React, { useCallback, useId, useLayoutEffect, useMemo, useRef, useState } from 'react'\n\nimport { AlignJustifiedIcon } from '../../icons/AlignJustified/index.js'\nimport { SearchIcon } from '../../icons/Search/index.js'\nimport { XIcon } from '../../icons/X/index.js'\nimport { useEditDepth } from '../../providers/EditDepth/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { Button } from '../Button/index.js'\nimport { DraggableSortable } from '../DraggableSortable/index.js'\nimport { useDraggableSortable } from '../DraggableSortable/useDraggableSortable/index.js'\nimport { Switch } from '../Switch/index.js'\nimport { matchesColumnSearch } from './matchesColumnSearch.js'\nimport './Popup.css'\n\nconst baseClass = 'column-selector'\n\n/**\n * Parses a nested field label and returns segments for rendering.\n * - For deeply nested paths (more than 3 segments), truncates to [First, \"...\", Last]\n */\nfunction parseNestedLabel(label: string): string[] {\n if (!label.includes(' > ')) {\n return [label]\n }\n\n const segments = label.split(' > ')\n\n if (segments.length <= 3) {\n return segments\n }\n\n // For deep nesting, show: First / ... / Last\n return [segments[0], '...', segments[segments.length - 1]]\n}\n\ntype NestedLabelProps = {\n readonly label: string\n}\n\nconst NestedLabel: React.FC<NestedLabelProps> = ({ label }) => {\n const segments = parseNestedLabel(label)\n\n if (segments.length === 1) {\n return <>{segments[0]}</>\n }\n\n return (\n <>\n {segments.map((segment, index) => (\n <React.Fragment key={index}>\n {index > 0 && <span className={`${baseClass}__separator`}>/</span>}\n {segment}\n </React.Fragment>\n ))}\n </>\n )\n}\n\nexport type ColumnSelectionPopupProps = {\n readonly collectionSlug: SanitizedCollectionConfig['slug']\n readonly columns: Column[]\n /** Called with the next column state whenever a column is toggled or reordered. */\n readonly onChange: (columns: Column[]) => void\n readonly onClose?: () => void\n}\n\ntype ColumnItemProps = {\n readonly active: boolean\n readonly id: string\n readonly labelText: string\n readonly onToggle: () => void\n}\n\nconst ColumnItem: React.FC<ColumnItemProps> = ({ id, active, labelText, onToggle }) => {\n const { t } = useTranslation()\n const { attributes, isDragging, isOver, isSorting, listeners, setNodeRef, transform } =\n useDraggableSortable({\n id,\n })\n\n return (\n <div\n aria-label={labelText}\n className={[\n `${baseClass}__item`,\n !active && `${baseClass}__item--inactive`,\n isDragging && `${baseClass}__item--dragging`,\n isOver && isSorting && !isDragging && `${baseClass}__item--over`,\n ]\n .filter(Boolean)\n .join(' ')}\n ref={setNodeRef}\n style={{\n // Keep item in place while dragging - don't apply transform\n transform: isDragging ? undefined : transform,\n ...attributes.style,\n }}\n {...attributes}\n >\n <span\n aria-label={t('general:dragToReorder')}\n className={`${baseClass}__drag-handle`}\n {...listeners}\n >\n <AlignJustifiedIcon size={16} />\n </span>\n <span className={`${baseClass}__item-label`}>\n <NestedLabel label={labelText} />\n </span>\n <Switch checked={active} onChange={onToggle} />\n </div>\n )\n}\n\nexport const ColumnSelectionPopup: React.FC<ColumnSelectionPopupProps> = ({\n collectionSlug,\n columns,\n onChange,\n onClose,\n}) => {\n const { i18n, t } = useTranslation()\n\n const toggleColumn = useCallback(\n (column: string) => {\n onChange(\n columns.map((col) => (col.accessor === column ? { ...col, active: !col.active } : col)),\n )\n },\n [columns, onChange],\n )\n\n const moveColumn = useCallback(\n ({ fromIndex, toIndex }: { fromIndex: number; toIndex: number }) => {\n const next = [...columns]\n const [moved] = next.splice(fromIndex, 1)\n next.splice(toIndex, 0, moved)\n onChange(next)\n },\n [columns, onChange],\n )\n\n const uuid = useId()\n const editDepth = useEditDepth()\n const [searchQuery, setSearchQuery] = useState('')\n const containerRef = useRef<HTMLDivElement>(null)\n const [lockedWidth, setLockedWidth] = useState<null | number>(null)\n\n // Lock the width when search starts to prevent layout shift\n useLayoutEffect(() => {\n if (!containerRef.current) {\n return\n }\n\n if (searchQuery && lockedWidth === null) {\n // Capture width when search starts\n setLockedWidth(containerRef.current.offsetWidth)\n } else if (!searchQuery && lockedWidth !== null) {\n // Release width lock when search is cleared\n setLockedWidth(null)\n }\n }, [searchQuery, lockedWidth])\n\n const filteredColumns = useMemo(\n () =>\n columns?.filter(\n (col) =>\n !(fieldIsHiddenOrDisabled(col.field) && !fieldIsID(col.field)) &&\n !isFieldDisabled(col.field, 'column'),\n ),\n [columns],\n )\n\n const columnItems = useMemo(() => {\n if (!filteredColumns) {\n return { all: [], hidden: [], shown: [] }\n }\n\n const items = filteredColumns.map((col, i) => {\n const { accessor, active, field } = col\n\n const label =\n 'labelWithPrefix' in field && field.labelWithPrefix !== undefined\n ? field.labelWithPrefix\n : 'label' in field && field.label !== undefined && field.label !== false\n ? field.label\n : 'name' in field && field.name !== undefined\n ? field.name\n : accessor\n\n const labelText =\n typeof label === 'string' ? label : getTranslation(label as StaticLabel, i18n)\n\n return {\n id: `${collectionSlug}-${accessor}-${i}${editDepth ? `-${editDepth}-` : ''}${uuid}`,\n accessor,\n active,\n index: i,\n label,\n labelText,\n }\n })\n\n // Filter by search query\n const filtered = searchQuery\n ? items.filter((item) =>\n matchesColumnSearch({ labelText: item.labelText, query: searchQuery }),\n )\n : items\n\n return {\n all: items,\n hidden: filtered.filter((item) => !item.active),\n shown: filtered.filter((item) => item.active),\n }\n }, [collectionSlug, editDepth, filteredColumns, i18n, searchQuery, uuid])\n\n const handleDragEnd = useCallback(\n ({ moveFromIndex, moveToIndex }: { moveFromIndex: number; moveToIndex: number }) => {\n if (moveFromIndex === moveToIndex) {\n return\n }\n\n // All shown items first, then all hidden items\n const allItems = [...columnItems.shown, ...columnItems.hidden]\n const shownCount = columnItems.shown.length\n const fromItem = allItems[moveFromIndex]\n const toItem = allItems[moveToIndex]\n\n if (!fromItem || !toItem) {\n return\n }\n\n // Determine if crossing sections\n const fromIsShown = moveFromIndex < shownCount\n const toIsShown = moveToIndex < shownCount\n\n if (fromIsShown !== toIsShown) {\n // Cross-section move: just toggle the column's active state (show/hide)\n void toggleColumn(fromItem.accessor)\n // Don't reorder when crossing sections - the toggle handles the change\n return\n }\n\n // Same-section move: perform the reorder\n void moveColumn({\n fromIndex: fromItem.index,\n toIndex: toItem.index,\n })\n },\n [columnItems.shown, columnItems.hidden, moveColumn, toggleColumn],\n )\n\n if (!filteredColumns) {\n return null\n }\n\n // Combined IDs: shown items first, then hidden items\n const allIds = [...columnItems.shown, ...columnItems.hidden].map((item) => item.id)\n\n const containerStyle = lockedWidth\n ? ({ '--column-selector-locked-width': `${lockedWidth}px` } as React.CSSProperties)\n : undefined\n\n return (\n <div\n className={baseClass}\n data-popup-prevent-close\n data-width-locked={lockedWidth ? 'true' : undefined}\n ref={containerRef}\n style={containerStyle}\n >\n <div className={`${baseClass}__header`}>\n <span className={`${baseClass}__title`}>{t('general:editColumns')}</span>\n {onClose && (\n <Button\n aria-label={t('general:close')}\n buttonStyle=\"ghost\"\n className={`${baseClass}__close`}\n icon={<XIcon size={24} />}\n onClick={onClose}\n />\n )}\n </div>\n <div className={`${baseClass}__search`}>\n <div className={`${baseClass}__search-bar`}>\n <SearchIcon size={24} />\n <input\n aria-label={t('general:searchColumns')}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchQuery(e.target.value)}\n placeholder={t('general:searchColumns')}\n type=\"text\"\n value={searchQuery}\n />\n </div>\n </div>\n <div className={`${baseClass}__content`}>\n <DraggableSortable ids={allIds} onDragEnd={handleDragEnd}>\n {columnItems.shown.length === 0 && columnItems.hidden.length === 0 && searchQuery && (\n <div className={`${baseClass}__no-results`}>{t('general:noMatchesFound')}</div>\n )}\n {columnItems.shown.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:shownInTable')}</div>\n {columnItems.shown.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n {columnItems.hidden.length > 0 && (\n <div className={`${baseClass}__section`}>\n <div className={`${baseClass}__section-header`}>{t('general:notShownInTable')}</div>\n {columnItems.hidden.map((item) => (\n <ColumnItem\n active={item.active}\n id={item.id}\n key={item.id}\n labelText={item.labelText}\n onToggle={() => {\n void toggleColumn(item.accessor)\n }}\n />\n ))}\n </div>\n )}\n </DraggableSortable>\n </div>\n </div>\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Matches a column label against a search query. Single-character queries only
3
+ * match the start of a word, keeping single-letter searches low-noise; queries
4
+ * of two or more characters match anywhere in the label.
5
+ */
6
+ export declare function matchesColumnSearch({ labelText, query, }: {
7
+ labelText: string;
8
+ query: string;
9
+ }): boolean;
10
+ //# sourceMappingURL=matchesColumnSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesColumnSearch.d.ts","sourceRoot":"","sources":["../../../src/elements/ColumnSelection/matchesColumnSearch.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,KAAK,GACN,EAAE;IACD,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;CACd,GAAG,OAAO,CAcV"}
@@ -0,0 +1,21 @@
1
+ const WORD_SPLIT_REGEX = /[^\p{L}\p{N}]+/u;
2
+ /**
3
+ * Matches a column label against a search query. Single-character queries only
4
+ * match the start of a word, keeping single-letter searches low-noise; queries
5
+ * of two or more characters match anywhere in the label.
6
+ */
7
+ export function matchesColumnSearch({
8
+ labelText,
9
+ query
10
+ }) {
11
+ const normalizedQuery = query.trim().toLowerCase();
12
+ if (!normalizedQuery) {
13
+ return true;
14
+ }
15
+ const normalizedLabel = labelText.toLowerCase();
16
+ if (normalizedQuery.length === 1) {
17
+ return normalizedLabel.split(WORD_SPLIT_REGEX).some(word => word.startsWith(normalizedQuery));
18
+ }
19
+ return normalizedLabel.includes(normalizedQuery);
20
+ }
21
+ //# sourceMappingURL=matchesColumnSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesColumnSearch.js","names":["WORD_SPLIT_REGEX","matchesColumnSearch","labelText","query","normalizedQuery","trim","toLowerCase","normalizedLabel","length","split","some","word","startsWith","includes"],"sources":["../../../src/elements/ColumnSelection/matchesColumnSearch.ts"],"sourcesContent":["const WORD_SPLIT_REGEX = /[^\\p{L}\\p{N}]+/u\n\n/**\n * Matches a column label against a search query. Single-character queries only\n * match the start of a word, keeping single-letter searches low-noise; queries\n * of two or more characters match anywhere in the label.\n */\nexport function matchesColumnSearch({\n labelText,\n query,\n}: {\n labelText: string\n query: string\n}): boolean {\n const normalizedQuery = query.trim().toLowerCase()\n\n if (!normalizedQuery) {\n return true\n }\n\n const normalizedLabel = labelText.toLowerCase()\n\n if (normalizedQuery.length === 1) {\n return normalizedLabel.split(WORD_SPLIT_REGEX).some((word) => word.startsWith(normalizedQuery))\n }\n\n return normalizedLabel.includes(normalizedQuery)\n}\n"],"mappings":"AAAA,MAAMA,gBAAA,GAAmB;AAEzB;;;;;AAKA,OAAO,SAASC,oBAAoB;EAClCC,SAAS;EACTC;AAAK,CAIN;EACC,MAAMC,eAAA,GAAkBD,KAAA,CAAME,IAAI,GAAGC,WAAW;EAEhD,IAAI,CAACF,eAAA,EAAiB;IACpB,OAAO;EACT;EAEA,MAAMG,eAAA,GAAkBL,SAAA,CAAUI,WAAW;EAE7C,IAAIF,eAAA,CAAgBI,MAAM,KAAK,GAAG;IAChC,OAAOD,eAAA,CAAgBE,KAAK,CAACT,gBAAA,EAAkBU,IAAI,CAAEC,IAAA,IAASA,IAAA,CAAKC,UAAU,CAACR,eAAA;EAChF;EAEA,OAAOG,eAAA,CAAgBM,QAAQ,CAACT,eAAA;AAClC","ignoreList":[]}
@@ -1,87 +1,87 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { matchesSearchQuery } from './matchesSearchQuery.js';
3
- describe('matchesSearchQuery', () => {
2
+ import { matchesColumnSearch } from './matchesColumnSearch.js';
3
+ describe('matchesColumnSearch', () => {
4
4
  it('matches everything when the query is empty', () => {
5
- expect(matchesSearchQuery({
6
- label: 'Published Date',
5
+ expect(matchesColumnSearch({
6
+ labelText: 'Published Date',
7
7
  query: ''
8
8
  })).toBe(true);
9
9
  });
10
10
  it('matches everything when the query is only whitespace', () => {
11
- expect(matchesSearchQuery({
12
- label: 'Published Date',
11
+ expect(matchesColumnSearch({
12
+ labelText: 'Published Date',
13
13
  query: ' '
14
14
  })).toBe(true);
15
15
  });
16
16
  describe('single-character queries', () => {
17
17
  it('matches the start of the label', () => {
18
- expect(matchesSearchQuery({
19
- label: 'Published Date',
18
+ expect(matchesColumnSearch({
19
+ labelText: 'Published Date',
20
20
  query: 'p'
21
21
  })).toBe(true);
22
22
  });
23
23
  it('matches the start of a later word', () => {
24
- expect(matchesSearchQuery({
25
- label: 'Published Date',
24
+ expect(matchesColumnSearch({
25
+ labelText: 'Published Date',
26
26
  query: 'd'
27
27
  })).toBe(true);
28
28
  });
29
29
  it('matches the start of a word after a nested-label separator', () => {
30
- expect(matchesSearchQuery({
31
- label: 'Meta > Title',
30
+ expect(matchesColumnSearch({
31
+ labelText: 'Meta > Title',
32
32
  query: 't'
33
33
  })).toBe(true);
34
34
  });
35
35
  it('is case-insensitive', () => {
36
- expect(matchesSearchQuery({
37
- label: 'Published Date',
36
+ expect(matchesColumnSearch({
37
+ labelText: 'Published Date',
38
38
  query: 'P'
39
39
  })).toBe(true);
40
40
  });
41
41
  it('does not match a character in the middle of a word', () => {
42
- expect(matchesSearchQuery({
43
- label: 'Published Date',
42
+ expect(matchesColumnSearch({
43
+ labelText: 'Published Date',
44
44
  query: 'u'
45
45
  })).toBe(false);
46
46
  });
47
47
  it('returns false when no word starts with the character', () => {
48
- expect(matchesSearchQuery({
49
- label: 'Published Date',
48
+ expect(matchesColumnSearch({
49
+ labelText: 'Published Date',
50
50
  query: 'z'
51
51
  })).toBe(false);
52
52
  });
53
53
  it('matches the start of a non-Latin label', () => {
54
- expect(matchesSearchQuery({
55
- label: 'Пользователь',
54
+ expect(matchesColumnSearch({
55
+ labelText: 'Пользователь',
56
56
  query: 'п'
57
57
  })).toBe(true);
58
58
  });
59
59
  });
60
60
  describe('multi-character queries', () => {
61
61
  it('matches a substring in the middle of the label', () => {
62
- expect(matchesSearchQuery({
63
- label: 'Published Date',
62
+ expect(matchesColumnSearch({
63
+ labelText: 'Published Date',
64
64
  query: 'ish'
65
65
  })).toBe(true);
66
66
  });
67
67
  it('matches across a word boundary', () => {
68
- expect(matchesSearchQuery({
69
- label: 'Published Date',
68
+ expect(matchesColumnSearch({
69
+ labelText: 'Published Date',
70
70
  query: 'd da'
71
71
  })).toBe(true);
72
72
  });
73
73
  it('is case-insensitive', () => {
74
- expect(matchesSearchQuery({
75
- label: 'Published Date',
74
+ expect(matchesColumnSearch({
75
+ labelText: 'Published Date',
76
76
  query: 'DATE'
77
77
  })).toBe(true);
78
78
  });
79
79
  it('returns false when the substring is not present', () => {
80
- expect(matchesSearchQuery({
81
- label: 'Published Date',
80
+ expect(matchesColumnSearch({
81
+ labelText: 'Published Date',
82
82
  query: 'zzz'
83
83
  })).toBe(false);
84
84
  });
85
85
  });
86
86
  });
87
- //# sourceMappingURL=matchesSearchQuery.spec.js.map
87
+ //# sourceMappingURL=matchesColumnSearch.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matchesColumnSearch.spec.js","names":["describe","expect","it","matchesColumnSearch","labelText","query","toBe"],"sources":["../../../src/elements/ColumnSelection/matchesColumnSearch.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { matchesColumnSearch } from './matchesColumnSearch.js'\n\ndescribe('matchesColumnSearch', () => {\n it('matches everything when the query is empty', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: '' })).toBe(true)\n })\n\n it('matches everything when the query is only whitespace', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: ' ' })).toBe(true)\n })\n\n describe('single-character queries', () => {\n it('matches the start of the label', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'p' })).toBe(true)\n })\n\n it('matches the start of a later word', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'd' })).toBe(true)\n })\n\n it('matches the start of a word after a nested-label separator', () => {\n expect(matchesColumnSearch({ labelText: 'Meta > Title', query: 't' })).toBe(true)\n })\n\n it('is case-insensitive', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'P' })).toBe(true)\n })\n\n it('does not match a character in the middle of a word', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'u' })).toBe(false)\n })\n\n it('returns false when no word starts with the character', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'z' })).toBe(false)\n })\n\n it('matches the start of a non-Latin label', () => {\n expect(matchesColumnSearch({ labelText: 'Пользователь', query: 'п' })).toBe(true)\n })\n })\n\n describe('multi-character queries', () => {\n it('matches a substring in the middle of the label', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'ish' })).toBe(true)\n })\n\n it('matches across a word boundary', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'd da' })).toBe(true)\n })\n\n it('is case-insensitive', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'DATE' })).toBe(true)\n })\n\n it('returns false when the substring is not present', () => {\n expect(matchesColumnSearch({ labelText: 'Published Date', query: 'zzz' })).toBe(false)\n })\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SAASC,mBAAmB,QAAQ;AAEpCH,QAAA,CAAS,uBAAuB;EAC9BE,EAAA,CAAG,8CAA8C;IAC/CD,MAAA,CAAOE,mBAAA,CAAoB;MAAEC,SAAA,EAAW;MAAkBC,KAAA,EAAO;IAAG,IAAIC,IAAI,CAAC;EAC/E;EAEAJ,EAAA,CAAG,wDAAwD;IACzDD,MAAA,CAAOE,mBAAA,CAAoB;MAAEC,SAAA,EAAW;MAAkBC,KAAA,EAAO;IAAM,IAAIC,IAAI,CAAC;EAClF;EAEAN,QAAA,CAAS,4BAA4B;IACnCE,EAAA,CAAG,kCAAkC;MACnCD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAChF;IAEAJ,EAAA,CAAG,qCAAqC;MACtCD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAChF;IAEAJ,EAAA,CAAG,8DAA8D;MAC/DD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAgBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAC9E;IAEAJ,EAAA,CAAG,uBAAuB;MACxBD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAChF;IAEAJ,EAAA,CAAG,sDAAsD;MACvDD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAChF;IAEAJ,EAAA,CAAG,wDAAwD;MACzDD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAChF;IAEAJ,EAAA,CAAG,0CAA0C;MAC3CD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAgBC,KAAA,EAAO;MAAI,IAAIC,IAAI,CAAC;IAC9E;EACF;EAEAN,QAAA,CAAS,2BAA2B;IAClCE,EAAA,CAAG,kDAAkD;MACnDD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAM,IAAIC,IAAI,CAAC;IAClF;IAEAJ,EAAA,CAAG,kCAAkC;MACnCD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAO,IAAIC,IAAI,CAAC;IACnF;IAEAJ,EAAA,CAAG,uBAAuB;MACxBD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAO,IAAIC,IAAI,CAAC;IACnF;IAEAJ,EAAA,CAAG,mDAAmD;MACpDD,MAAA,CAAOE,mBAAA,CAAoB;QAAEC,SAAA,EAAW;QAAkBC,KAAA,EAAO;MAAM,IAAIC,IAAI,CAAC;IAClF;EACF;AACF","ignoreList":[]}
@@ -1,16 +1,7 @@
1
1
  @layer payload-default {
2
- /* The combobox supplies its own padding so the search bar can span the full
3
- width and sit flush against its dividing border. */
4
- .popup__scroll-container:has(.combobox__content) {
5
- padding: 0;
6
- }
7
-
8
2
  .combobox__content {
9
- --combobox-min-width: 240px;
10
-
11
3
  display: flex;
12
4
  flex-direction: column;
13
- min-width: var(--combobox-min-width);
14
5
  scrollbar-width: none;
15
6
  -ms-overflow-style: none;
16
7
 
@@ -19,88 +10,44 @@
19
10
  }
20
11
  }
21
12
 
22
- /* Held steady while searching so the popup doesn't resize as entries filter out */
23
- .combobox__content[data-width-locked] {
24
- min-width: var(--combobox-locked-width);
13
+ .combobox__search-wrapper {
14
+ display: none;
15
+ padding-top: var(--popup-padding);
16
+ padding-bottom: var(--spacer-2);
17
+ border-bottom: var(--stroke-width-small) solid var(--color-border);
18
+ margin-bottom: var(--spacer-2);
25
19
  }
26
20
 
27
- .combobox__search {
28
- display: flex;
29
- flex-shrink: 0;
30
- align-items: center;
31
- height: calc(var(--spacer-5) + var(--spacer-2) + var(--stroke-width-small));
32
- padding-inline: var(--spacer-2-5);
33
- border-bottom: var(--stroke-width-small) solid var(--color-border);
21
+ .combobox__search-wrapper--no-results {
22
+ border-bottom: none;
23
+ margin-bottom: 0;
34
24
  }
35
25
 
36
- .combobox__search-bar {
37
- display: flex;
38
- align-items: center;
39
- flex: 1;
40
- height: var(--spacer-4);
41
- padding-inline-end: var(--spacer-2);
26
+ .combobox__search-input {
27
+ width: 100%;
42
28
  background: var(--color-bg-secondary);
29
+ color: var(--color-text);
30
+ border: none;
43
31
  border-radius: var(--button-radius);
32
+ padding: var(--spacer-1) var(--spacer-2);
33
+ outline: none;
34
+ box-shadow: none;
44
35
  }
45
36
 
46
- .combobox__search-bar svg {
47
- display: block;
48
- flex-shrink: 0;
49
- color: var(--color-icon-secondary);
37
+ .combobox__search-input::placeholder {
38
+ color: var(--color-text-tertiary);
50
39
  }
51
40
 
52
- .combobox__search-input {
53
- flex: 1;
54
- height: 100%;
55
- padding: 0;
56
- background: transparent;
41
+ .combobox__search-input:focus,
42
+ .combobox__search-input:focus-visible {
43
+ background: var(--color-bg-secondary-hover);
44
+ outline: none;
57
45
  border: none;
58
- font-family: var(--text-body-medium-font-family);
59
- font-size: var(--text-body-medium-font-size);
60
- font-weight: var(--text-body-medium-font-weight);
61
- line-height: var(--text-body-medium-line-height);
62
- color: var(--color-text);
63
-
64
- &::placeholder {
65
- color: var(--color-text-tertiary);
66
- }
67
-
68
- &:focus,
69
- &:focus-visible {
70
- outline: none;
71
- box-shadow: none;
72
- }
73
- }
74
-
75
- .combobox__entries {
76
- padding-block: var(--spacer-2);
77
- overflow-y: auto;
46
+ box-shadow: none;
78
47
  }
79
48
 
80
49
  .combobox__entry {
81
50
  cursor: pointer;
82
51
  display: flex;
83
52
  }
84
-
85
- .combobox__footer {
86
- display: flex;
87
- flex-direction: column;
88
- flex-shrink: 0;
89
- padding-block: var(--spacer-2);
90
- border-top: var(--stroke-width-small) solid var(--color-border);
91
- }
92
-
93
- .combobox__no-results {
94
- display: flex;
95
- align-items: center;
96
- justify-content: center;
97
- min-height: calc(var(--spacer-6) + var(--spacer-2));
98
- padding-block: var(--spacer-2);
99
- padding-inline: var(--spacer-3);
100
- font-family: var(--text-body-medium-font-family);
101
- font-size: var(--text-body-medium-font-size);
102
- font-weight: var(--text-body-medium-font-weight);
103
- line-height: var(--text-body-medium-line-height);
104
- color: var(--color-text-secondary);
105
- }
106
53
  }
@@ -17,13 +17,6 @@ export type ComboboxProps = {
17
17
  /** Accessible label for the list of entries */
18
18
  'aria-label'?: string;
19
19
  entries: ComboboxEntry[];
20
- /**
21
- * Pinned below the entries, outside the scroll area and unaffected by search.
22
- * For actions that belong to the list as a whole, such as "create new".
23
- */
24
- footer?: (args: {
25
- close: () => void;
26
- }) => React.ReactNode;
27
20
  /** Minimum number of entries required to show search */
28
21
  minEntriesForSearch?: number;
29
22
  onSelect?: (entry: ComboboxEntry) => void;