@payloadcms/ui 3.80.0-internal.21e9c47 → 3.80.0-internal.37a8509

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 (553) hide show
  1. package/dist/elements/BulkUpload/EditForm/index.d.ts.map +1 -1
  2. package/dist/elements/BulkUpload/EditForm/index.js +12 -0
  3. package/dist/elements/BulkUpload/EditForm/index.js.map +1 -1
  4. package/dist/elements/Button/index.d.ts.map +1 -1
  5. package/dist/elements/Button/index.js +3 -5
  6. package/dist/elements/Button/index.js.map +1 -1
  7. package/dist/elements/Button/index.scss +5 -38
  8. package/dist/elements/Button/types.d.ts +1 -1
  9. package/dist/elements/Button/types.d.ts.map +1 -1
  10. package/dist/elements/Button/types.js.map +1 -1
  11. package/dist/elements/CheckboxPopup/index.d.ts.map +1 -1
  12. package/dist/elements/CheckboxPopup/index.js +1 -0
  13. package/dist/elements/CheckboxPopup/index.js.map +1 -1
  14. package/dist/elements/CheckboxPopup/index.scss +0 -1
  15. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  16. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +53 -3
  17. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  18. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +541 -0
  19. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -0
  20. package/dist/elements/Combobox/index.d.ts.map +1 -1
  21. package/dist/elements/Combobox/index.js +1 -0
  22. package/dist/elements/Combobox/index.js.map +1 -1
  23. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  24. package/dist/elements/DefaultListViewTabs/index.js +54 -28
  25. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  26. package/dist/elements/DocumentControls/index.d.ts +0 -1
  27. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  28. package/dist/elements/DocumentControls/index.js +10 -6
  29. package/dist/elements/DocumentControls/index.js.map +1 -1
  30. package/dist/elements/DocumentControls/index.scss +1 -1
  31. package/dist/elements/DocumentDrawer/index.d.ts.map +1 -1
  32. package/dist/elements/DocumentDrawer/index.js +141 -54
  33. package/dist/elements/DocumentDrawer/index.js.map +1 -1
  34. package/dist/elements/DocumentDrawer/types.d.ts +1 -7
  35. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  36. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  37. package/dist/elements/DrawerActionHeader/index.d.ts.map +1 -1
  38. package/dist/elements/DrawerActionHeader/index.js +0 -2
  39. package/dist/elements/DrawerActionHeader/index.js.map +1 -1
  40. package/dist/elements/DrawerActionHeader/index.scss +2 -2
  41. package/dist/elements/FolderView/Breadcrumbs/index.d.ts +19 -0
  42. package/dist/elements/FolderView/Breadcrumbs/index.d.ts.map +1 -0
  43. package/dist/elements/FolderView/Breadcrumbs/index.js +96 -0
  44. package/dist/elements/FolderView/Breadcrumbs/index.js.map +1 -0
  45. package/dist/elements/FolderView/Breadcrumbs/index.scss +56 -0
  46. package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts +6 -0
  47. package/dist/elements/FolderView/BrowseByFolderButton/index.d.ts.map +1 -0
  48. package/dist/elements/FolderView/BrowseByFolderButton/index.js +40 -0
  49. package/dist/elements/FolderView/BrowseByFolderButton/index.js.map +1 -0
  50. package/dist/elements/FolderView/BrowseByFolderButton/index.scss +30 -0
  51. package/dist/elements/FolderView/Cell/index.client.d.ts +13 -0
  52. package/dist/elements/FolderView/Cell/index.client.d.ts.map +1 -0
  53. package/dist/elements/FolderView/Cell/index.client.js +95 -0
  54. package/dist/elements/FolderView/Cell/index.client.js.map +1 -0
  55. package/dist/elements/FolderView/Cell/index.server.d.ts +4 -0
  56. package/dist/elements/FolderView/Cell/index.server.d.ts.map +1 -0
  57. package/dist/elements/FolderView/Cell/index.server.js +18 -0
  58. package/dist/elements/FolderView/Cell/index.server.js.map +1 -0
  59. package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts +3 -0
  60. package/dist/elements/FolderView/ColoredFolderIcon/index.d.ts.map +1 -0
  61. package/dist/elements/FolderView/ColoredFolderIcon/index.js +9 -0
  62. package/dist/elements/FolderView/ColoredFolderIcon/index.js.map +1 -0
  63. package/dist/elements/FolderView/ColoredFolderIcon/index.scss +5 -0
  64. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts +7 -0
  65. package/dist/elements/FolderView/CurrentFolderActions/index.d.ts.map +1 -0
  66. package/dist/elements/FolderView/CurrentFolderActions/index.js +162 -0
  67. package/dist/elements/FolderView/CurrentFolderActions/index.js.map +1 -0
  68. package/dist/elements/FolderView/DragOverlaySelection/index.d.ts +11 -0
  69. package/dist/elements/FolderView/DragOverlaySelection/index.d.ts.map +1 -0
  70. package/dist/elements/FolderView/DragOverlaySelection/index.js +62 -0
  71. package/dist/elements/FolderView/DragOverlaySelection/index.js.map +1 -0
  72. package/dist/elements/FolderView/DragOverlaySelection/index.scss +35 -0
  73. package/dist/elements/FolderView/DraggableTableRow/index.d.ts +18 -0
  74. package/dist/elements/FolderView/DraggableTableRow/index.d.ts.map +1 -0
  75. package/dist/elements/FolderView/DraggableTableRow/index.js +63 -0
  76. package/dist/elements/FolderView/DraggableTableRow/index.js.map +1 -0
  77. package/dist/elements/FolderView/DraggableTableRow/index.scss +135 -0
  78. package/dist/elements/FolderView/DraggableWithClick/index.d.ts +15 -0
  79. package/dist/elements/FolderView/DraggableWithClick/index.d.ts.map +1 -0
  80. package/dist/elements/FolderView/DraggableWithClick/index.js +86 -0
  81. package/dist/elements/FolderView/DraggableWithClick/index.js.map +1 -0
  82. package/dist/elements/FolderView/DraggableWithClick/index.scss +5 -0
  83. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts +7 -0
  84. package/dist/elements/FolderView/Drawers/EditFolderAction/index.d.ts.map +1 -0
  85. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js +39 -0
  86. package/dist/elements/FolderView/Drawers/EditFolderAction/index.js.map +1 -0
  87. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts +37 -0
  88. package/dist/elements/FolderView/Drawers/MoveToFolder/index.d.ts.map +1 -0
  89. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js +609 -0
  90. package/dist/elements/FolderView/Drawers/MoveToFolder/index.js.map +1 -0
  91. package/dist/elements/FolderView/Drawers/MoveToFolder/index.scss +30 -0
  92. package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts +4 -0
  93. package/dist/elements/FolderView/FilterFolderTypePill/index.d.ts.map +1 -0
  94. package/dist/elements/FolderView/FilterFolderTypePill/index.js +102 -0
  95. package/dist/elements/FolderView/FilterFolderTypePill/index.js.map +1 -0
  96. package/dist/elements/FolderView/FilterFolderTypePill/index.scss +16 -0
  97. package/dist/elements/FolderView/FolderField/index.scss +12 -0
  98. package/dist/elements/FolderView/FolderField/index.server.d.ts +4 -0
  99. package/dist/elements/FolderView/FolderField/index.server.d.ts.map +1 -0
  100. package/dist/elements/FolderView/FolderField/index.server.js +16 -0
  101. package/dist/elements/FolderView/FolderField/index.server.js.map +1 -0
  102. package/dist/elements/FolderView/FolderFileCard/index.d.ts +30 -0
  103. package/dist/elements/FolderView/FolderFileCard/index.d.ts.map +1 -0
  104. package/dist/elements/FolderView/FolderFileCard/index.js +209 -0
  105. package/dist/elements/FolderView/FolderFileCard/index.js.map +1 -0
  106. package/dist/elements/FolderView/FolderFileCard/index.scss +247 -0
  107. package/dist/elements/FolderView/FolderFileTable/index.d.ts +8 -0
  108. package/dist/elements/FolderView/FolderFileTable/index.d.ts.map +1 -0
  109. package/dist/elements/FolderView/FolderFileTable/index.js +284 -0
  110. package/dist/elements/FolderView/FolderFileTable/index.js.map +1 -0
  111. package/dist/elements/FolderView/FolderFileTable/index.scss +11 -0
  112. package/dist/elements/FolderView/FolderTypeField/index.d.ts +4 -0
  113. package/dist/elements/FolderView/FolderTypeField/index.d.ts.map +1 -0
  114. package/dist/elements/FolderView/FolderTypeField/index.js +123 -0
  115. package/dist/elements/FolderView/FolderTypeField/index.js.map +1 -0
  116. package/dist/elements/FolderView/ItemCardGrid/index.d.ts +16 -0
  117. package/dist/elements/FolderView/ItemCardGrid/index.d.ts.map +1 -0
  118. package/dist/elements/FolderView/ItemCardGrid/index.js +34 -0
  119. package/dist/elements/FolderView/ItemCardGrid/index.js.map +1 -0
  120. package/dist/elements/FolderView/ItemCardGrid/index.scss +16 -0
  121. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts +37 -0
  122. package/dist/elements/FolderView/MoveDocToFolder/index.d.ts.map +1 -0
  123. package/dist/elements/FolderView/MoveDocToFolder/index.js +292 -0
  124. package/dist/elements/FolderView/MoveDocToFolder/index.js.map +1 -0
  125. package/dist/elements/{HierarchyButton → FolderView/MoveDocToFolder}/index.scss +1 -7
  126. package/dist/elements/FolderView/SimpleTable/index.d.ts +19 -0
  127. package/dist/elements/FolderView/SimpleTable/index.d.ts.map +1 -0
  128. package/dist/elements/FolderView/SimpleTable/index.js +95 -0
  129. package/dist/elements/FolderView/SimpleTable/index.js.map +1 -0
  130. package/dist/elements/FolderView/SimpleTable/index.scss +59 -0
  131. package/dist/elements/FolderView/SortByPill/index.d.ts +4 -0
  132. package/dist/elements/FolderView/SortByPill/index.d.ts.map +1 -0
  133. package/dist/elements/FolderView/SortByPill/index.js +112 -0
  134. package/dist/elements/FolderView/SortByPill/index.js.map +1 -0
  135. package/dist/elements/FolderView/SortByPill/index.scss +16 -0
  136. package/dist/elements/FolderView/ToggleViewButtons/index.d.ts +8 -0
  137. package/dist/elements/FolderView/ToggleViewButtons/index.d.ts.map +1 -0
  138. package/dist/elements/FolderView/ToggleViewButtons/index.js +31 -0
  139. package/dist/elements/FolderView/ToggleViewButtons/index.js.map +1 -0
  140. package/dist/elements/FolderView/ToggleViewButtons/index.scss +17 -0
  141. package/dist/elements/Link/index.d.ts +0 -4
  142. package/dist/elements/Link/index.d.ts.map +1 -1
  143. package/dist/elements/Link/index.js +0 -5
  144. package/dist/elements/Link/index.js.map +1 -1
  145. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts +15 -0
  146. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.d.ts.map +1 -0
  147. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js +182 -0
  148. package/dist/elements/ListHeader/TitleActions/ListCreateNewDocInFolderButton.js.map +1 -0
  149. package/dist/elements/ListHeader/TitleActions/index.d.ts +1 -0
  150. package/dist/elements/ListHeader/TitleActions/index.d.ts.map +1 -1
  151. package/dist/elements/ListHeader/TitleActions/index.js +1 -0
  152. package/dist/elements/ListHeader/TitleActions/index.js.map +1 -1
  153. package/dist/elements/ListHeader/index.js +2 -2
  154. package/dist/elements/ListHeader/index.js.map +1 -1
  155. package/dist/elements/ListSelection/index.scss +1 -2
  156. package/dist/elements/Locked/index.scss +1 -1
  157. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  158. package/dist/elements/PublishButton/index.js +3 -1
  159. package/dist/elements/PublishButton/index.js.map +1 -1
  160. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  161. package/dist/elements/RelationshipTable/index.js +17 -12
  162. package/dist/elements/RelationshipTable/index.js.map +1 -1
  163. package/dist/elements/StepNav/index.d.ts.map +1 -1
  164. package/dist/elements/StepNav/index.js +1 -10
  165. package/dist/elements/StepNav/index.js.map +1 -1
  166. package/dist/elements/StepNav/types.d.ts +0 -1
  167. package/dist/elements/StepNav/types.d.ts.map +1 -1
  168. package/dist/elements/StepNav/types.js.map +1 -1
  169. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  170. package/dist/elements/Table/DefaultCell/index.js +0 -20
  171. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  172. package/dist/elements/Toasts/fieldErrors.d.ts +4 -0
  173. package/dist/elements/Toasts/fieldErrors.d.ts.map +1 -1
  174. package/dist/elements/Toasts/fieldErrors.js +4 -2
  175. package/dist/elements/Toasts/fieldErrors.js.map +1 -1
  176. package/dist/elements/Toasts/fieldErrors.spec.js +46 -0
  177. package/dist/elements/Toasts/fieldErrors.spec.js.map +1 -0
  178. package/dist/elements/Tooltip/index.js +1 -1
  179. package/dist/elements/Tooltip/index.js.map +1 -1
  180. package/dist/elements/Tooltip/index.scss +15 -1
  181. package/dist/elements/WhereBuilder/Condition/Relationship/index.d.ts.map +1 -1
  182. package/dist/elements/WhereBuilder/Condition/Relationship/index.js +8 -6
  183. package/dist/elements/WhereBuilder/Condition/Relationship/index.js.map +1 -1
  184. package/dist/elements/WhereBuilder/field-types.d.ts.map +1 -1
  185. package/dist/elements/WhereBuilder/field-types.js +2 -5
  186. package/dist/elements/WhereBuilder/field-types.js.map +1 -1
  187. package/dist/elements/withMergedProps/index.d.ts +1 -1
  188. package/dist/elements/withMergedProps/index.js +1 -1
  189. package/dist/elements/withMergedProps/index.js.map +1 -1
  190. package/dist/exports/client/{DatePicker-CL2EGBVQ.js → DatePicker-T2DMDMM5.js} +2 -2
  191. package/dist/exports/client/chunk-WDZJLNNB.js +29 -0
  192. package/dist/exports/client/{chunk-SH42NW5R.js.map → chunk-WDZJLNNB.js.map} +4 -4
  193. package/dist/exports/client/index.d.ts +9 -30
  194. package/dist/exports/client/index.d.ts.map +1 -1
  195. package/dist/exports/client/index.js +24 -26
  196. package/dist/exports/client/index.js.map +4 -4
  197. package/dist/exports/rsc/index.d.ts +3 -3
  198. package/dist/exports/rsc/index.d.ts.map +1 -1
  199. package/dist/exports/rsc/index.js +3 -3
  200. package/dist/exports/rsc/index.js.map +1 -1
  201. package/dist/exports/shared/index.js.map +1 -1
  202. package/dist/fields/Join/index.d.ts.map +1 -1
  203. package/dist/fields/Join/index.js +1 -1
  204. package/dist/fields/Join/index.js.map +1 -1
  205. package/dist/forms/Form/mergeServerFormState.d.ts.map +1 -1
  206. package/dist/forms/Form/mergeServerFormState.js +101 -24
  207. package/dist/forms/Form/mergeServerFormState.js.map +1 -1
  208. package/dist/icons/Chevron/index.d.ts.map +1 -1
  209. package/dist/icons/Chevron/index.js +1 -5
  210. package/dist/icons/Chevron/index.js.map +1 -1
  211. package/dist/icons/Document/index.d.ts +1 -3
  212. package/dist/icons/Document/index.d.ts.map +1 -1
  213. package/dist/icons/Document/index.js +2 -4
  214. package/dist/icons/Document/index.js.map +1 -1
  215. package/dist/icons/Document/index.scss +0 -4
  216. package/dist/icons/Folder/index.d.ts +2 -4
  217. package/dist/icons/Folder/index.d.ts.map +1 -1
  218. package/dist/icons/Folder/index.js +2 -4
  219. package/dist/icons/Folder/index.js.map +1 -1
  220. package/dist/icons/Folder/index.scss +0 -8
  221. package/dist/icons/Lock/index.scss +1 -1
  222. package/dist/icons/Plus/index.d.ts.map +1 -1
  223. package/dist/icons/Plus/index.js +1 -2
  224. package/dist/icons/Plus/index.js.map +1 -1
  225. package/dist/providers/Folders/groupItemIDsByRelation.d.ts +3 -0
  226. package/dist/providers/Folders/groupItemIDsByRelation.d.ts.map +1 -0
  227. package/dist/providers/Folders/groupItemIDsByRelation.js +10 -0
  228. package/dist/providers/Folders/groupItemIDsByRelation.js.map +1 -0
  229. package/dist/providers/Folders/index.d.ts +143 -0
  230. package/dist/providers/Folders/index.d.ts.map +1 -0
  231. package/dist/providers/Folders/index.js +641 -0
  232. package/dist/providers/Folders/index.js.map +1 -0
  233. package/dist/providers/Root/index.d.ts.map +1 -1
  234. package/dist/providers/Root/index.js +15 -18
  235. package/dist/providers/Root/index.js.map +1 -1
  236. package/dist/providers/ServerFunctions/index.d.ts +6 -1
  237. package/dist/providers/ServerFunctions/index.d.ts.map +1 -1
  238. package/dist/providers/ServerFunctions/index.js +18 -0
  239. package/dist/providers/ServerFunctions/index.js.map +1 -1
  240. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts +1 -2
  241. package/dist/providers/TableColumns/buildColumnState/renderCell.d.ts.map +1 -1
  242. package/dist/providers/TableColumns/buildColumnState/renderCell.js +1 -34
  243. package/dist/providers/TableColumns/buildColumnState/renderCell.js.map +1 -1
  244. package/dist/styles.css +1 -1
  245. package/dist/utilities/getFolderResultsComponentAndData.d.ts +25 -0
  246. package/dist/utilities/getFolderResultsComponentAndData.d.ts.map +1 -0
  247. package/dist/utilities/getFolderResultsComponentAndData.js +135 -0
  248. package/dist/utilities/getFolderResultsComponentAndData.js.map +1 -0
  249. package/dist/utilities/handleLivePreview.d.ts.map +1 -1
  250. package/dist/utilities/renderTable.d.ts +1 -3
  251. package/dist/utilities/renderTable.d.ts.map +1 -1
  252. package/dist/utilities/renderTable.js +3 -9
  253. package/dist/utilities/renderTable.js.map +1 -1
  254. package/dist/views/BrowseByFolder/index.d.ts +5 -0
  255. package/dist/views/BrowseByFolder/index.d.ts.map +1 -0
  256. package/dist/views/BrowseByFolder/index.js +342 -0
  257. package/dist/views/BrowseByFolder/index.js.map +1 -0
  258. package/dist/views/BrowseByFolder/index.scss +174 -0
  259. package/dist/views/CollectionFolder/ListSelection/index.d.ts +9 -0
  260. package/dist/views/CollectionFolder/ListSelection/index.d.ts.map +1 -0
  261. package/dist/views/CollectionFolder/ListSelection/index.js +180 -0
  262. package/dist/views/CollectionFolder/ListSelection/index.js.map +1 -0
  263. package/dist/views/CollectionFolder/index.d.ts +5 -0
  264. package/dist/views/CollectionFolder/index.d.ts.map +1 -0
  265. package/dist/views/CollectionFolder/index.js +325 -0
  266. package/dist/views/CollectionFolder/index.js.map +1 -0
  267. package/dist/views/CollectionFolder/index.scss +162 -0
  268. package/dist/views/Edit/index.d.ts +1 -1
  269. package/dist/views/Edit/index.d.ts.map +1 -1
  270. package/dist/views/Edit/index.js +12 -5
  271. package/dist/views/Edit/index.js.map +1 -1
  272. package/dist/views/List/index.d.ts.map +1 -1
  273. package/dist/views/List/index.js +7 -51
  274. package/dist/views/List/index.js.map +1 -1
  275. package/package.json +4 -4
  276. package/dist/elements/CreateDocumentButton/index.d.ts +0 -26
  277. package/dist/elements/CreateDocumentButton/index.d.ts.map +0 -1
  278. package/dist/elements/CreateDocumentButton/index.js +0 -182
  279. package/dist/elements/CreateDocumentButton/index.js.map +0 -1
  280. package/dist/elements/DelayedSpinner/index.d.ts +0 -23
  281. package/dist/elements/DelayedSpinner/index.d.ts.map +0 -1
  282. package/dist/elements/DelayedSpinner/index.js +0 -61
  283. package/dist/elements/DelayedSpinner/index.js.map +0 -1
  284. package/dist/elements/HierarchyButton/index.d.ts +0 -11
  285. package/dist/elements/HierarchyButton/index.d.ts.map +0 -1
  286. package/dist/elements/HierarchyButton/index.js +0 -126
  287. package/dist/elements/HierarchyButton/index.js.map +0 -1
  288. package/dist/elements/HierarchyButton/index.server.d.ts +0 -10
  289. package/dist/elements/HierarchyButton/index.server.d.ts.map +0 -1
  290. package/dist/elements/HierarchyButton/index.server.js +0 -34
  291. package/dist/elements/HierarchyButton/index.server.js.map +0 -1
  292. package/dist/elements/HierarchyColumnBrowser/Column/index.d.ts +0 -5
  293. package/dist/elements/HierarchyColumnBrowser/Column/index.d.ts.map +0 -1
  294. package/dist/elements/HierarchyColumnBrowser/Column/index.js +0 -166
  295. package/dist/elements/HierarchyColumnBrowser/Column/index.js.map +0 -1
  296. package/dist/elements/HierarchyColumnBrowser/Column/index.scss +0 -63
  297. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.d.ts +0 -5
  298. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.d.ts.map +0 -1
  299. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.js +0 -161
  300. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.js.map +0 -1
  301. package/dist/elements/HierarchyColumnBrowser/ColumnItem/index.scss +0 -105
  302. package/dist/elements/HierarchyColumnBrowser/index.d.ts +0 -8
  303. package/dist/elements/HierarchyColumnBrowser/index.d.ts.map +0 -1
  304. package/dist/elements/HierarchyColumnBrowser/index.js +0 -470
  305. package/dist/elements/HierarchyColumnBrowser/index.js.map +0 -1
  306. package/dist/elements/HierarchyColumnBrowser/index.scss +0 -20
  307. package/dist/elements/HierarchyColumnBrowser/types.d.ts +0 -103
  308. package/dist/elements/HierarchyColumnBrowser/types.d.ts.map +0 -1
  309. package/dist/elements/HierarchyColumnBrowser/types.js +0 -2
  310. package/dist/elements/HierarchyColumnBrowser/types.js.map +0 -1
  311. package/dist/elements/HierarchyDrawer/Drawer/index.d.ts +0 -20
  312. package/dist/elements/HierarchyDrawer/Drawer/index.d.ts.map +0 -1
  313. package/dist/elements/HierarchyDrawer/Drawer/index.js +0 -289
  314. package/dist/elements/HierarchyDrawer/Drawer/index.js.map +0 -1
  315. package/dist/elements/HierarchyDrawer/Drawer/index.scss +0 -81
  316. package/dist/elements/HierarchyDrawer/fetchAncestorPath.d.ts +0 -15
  317. package/dist/elements/HierarchyDrawer/fetchAncestorPath.d.ts.map +0 -1
  318. package/dist/elements/HierarchyDrawer/fetchAncestorPath.js +0 -60
  319. package/dist/elements/HierarchyDrawer/fetchAncestorPath.js.map +0 -1
  320. package/dist/elements/HierarchyDrawer/index.d.ts +0 -30
  321. package/dist/elements/HierarchyDrawer/index.d.ts.map +0 -1
  322. package/dist/elements/HierarchyDrawer/index.js +0 -146
  323. package/dist/elements/HierarchyDrawer/index.js.map +0 -1
  324. package/dist/elements/HierarchyDrawer/types.d.ts +0 -65
  325. package/dist/elements/HierarchyDrawer/types.d.ts.map +0 -1
  326. package/dist/elements/HierarchyDrawer/types.js +0 -3
  327. package/dist/elements/HierarchyDrawer/types.js.map +0 -1
  328. package/dist/elements/HierarchyField/SelectedHierarchies.d.ts +0 -13
  329. package/dist/elements/HierarchyField/SelectedHierarchies.d.ts.map +0 -1
  330. package/dist/elements/HierarchyField/SelectedHierarchies.js +0 -194
  331. package/dist/elements/HierarchyField/SelectedHierarchies.js.map +0 -1
  332. package/dist/elements/HierarchyField/SelectedHierarchies.scss +0 -78
  333. package/dist/elements/HierarchyField/index.client.d.ts +0 -8
  334. package/dist/elements/HierarchyField/index.client.d.ts.map +0 -1
  335. package/dist/elements/HierarchyField/index.client.js +0 -198
  336. package/dist/elements/HierarchyField/index.client.js.map +0 -1
  337. package/dist/elements/HierarchyField/index.scss +0 -35
  338. package/dist/elements/HierarchyField/index.server.d.ts +0 -3
  339. package/dist/elements/HierarchyField/index.server.d.ts.map +0 -1
  340. package/dist/elements/HierarchyField/index.server.js +0 -30
  341. package/dist/elements/HierarchyField/index.server.js.map +0 -1
  342. package/dist/elements/HierarchySearch/HierarchySearchInput.d.ts +0 -18
  343. package/dist/elements/HierarchySearch/HierarchySearchInput.d.ts.map +0 -1
  344. package/dist/elements/HierarchySearch/HierarchySearchInput.js +0 -115
  345. package/dist/elements/HierarchySearch/HierarchySearchInput.js.map +0 -1
  346. package/dist/elements/HierarchySearch/HierarchySearchResultItem.d.ts +0 -13
  347. package/dist/elements/HierarchySearch/HierarchySearchResultItem.d.ts.map +0 -1
  348. package/dist/elements/HierarchySearch/HierarchySearchResultItem.js +0 -88
  349. package/dist/elements/HierarchySearch/HierarchySearchResultItem.js.map +0 -1
  350. package/dist/elements/HierarchySearch/HierarchySearchResults.d.ts +0 -17
  351. package/dist/elements/HierarchySearch/HierarchySearchResults.d.ts.map +0 -1
  352. package/dist/elements/HierarchySearch/HierarchySearchResults.js +0 -85
  353. package/dist/elements/HierarchySearch/HierarchySearchResults.js.map +0 -1
  354. package/dist/elements/HierarchySearch/index.d.ts +0 -10
  355. package/dist/elements/HierarchySearch/index.d.ts.map +0 -1
  356. package/dist/elements/HierarchySearch/index.js +0 -144
  357. package/dist/elements/HierarchySearch/index.js.map +0 -1
  358. package/dist/elements/HierarchySearch/index.scss +0 -212
  359. package/dist/elements/HierarchySearch/types.d.ts +0 -21
  360. package/dist/elements/HierarchySearch/types.d.ts.map +0 -1
  361. package/dist/elements/HierarchySearch/types.js +0 -2
  362. package/dist/elements/HierarchySearch/types.js.map +0 -1
  363. package/dist/elements/HierarchySearch/useHierarchySearch.d.ts +0 -20
  364. package/dist/elements/HierarchySearch/useHierarchySearch.d.ts.map +0 -1
  365. package/dist/elements/HierarchySearch/useHierarchySearch.js +0 -122
  366. package/dist/elements/HierarchySearch/useHierarchySearch.js.map +0 -1
  367. package/dist/elements/HierarchyTree/HierarchySidebarTab.d.ts +0 -20
  368. package/dist/elements/HierarchyTree/HierarchySidebarTab.d.ts.map +0 -1
  369. package/dist/elements/HierarchyTree/HierarchySidebarTab.js +0 -156
  370. package/dist/elements/HierarchyTree/HierarchySidebarTab.js.map +0 -1
  371. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.d.ts +0 -7
  372. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.d.ts.map +0 -1
  373. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.js +0 -167
  374. package/dist/elements/HierarchyTree/HierarchySidebarTab.server.js.map +0 -1
  375. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.d.ts +0 -8
  376. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.d.ts.map +0 -1
  377. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.js +0 -36
  378. package/dist/elements/HierarchyTree/LoadMore/LoadMoreButton.js.map +0 -1
  379. package/dist/elements/HierarchyTree/LoadMore/index.d.ts +0 -12
  380. package/dist/elements/HierarchyTree/LoadMore/index.d.ts.map +0 -1
  381. package/dist/elements/HierarchyTree/LoadMore/index.js +0 -29
  382. package/dist/elements/HierarchyTree/LoadMore/index.js.map +0 -1
  383. package/dist/elements/HierarchyTree/LoadMore/index.scss +0 -26
  384. package/dist/elements/HierarchyTree/TreeConnector.d.ts +0 -7
  385. package/dist/elements/HierarchyTree/TreeConnector.d.ts.map +0 -1
  386. package/dist/elements/HierarchyTree/TreeConnector.js +0 -23
  387. package/dist/elements/HierarchyTree/TreeConnector.js.map +0 -1
  388. package/dist/elements/HierarchyTree/TreeFocusContext.d.ts +0 -28
  389. package/dist/elements/HierarchyTree/TreeFocusContext.d.ts.map +0 -1
  390. package/dist/elements/HierarchyTree/TreeFocusContext.js +0 -140
  391. package/dist/elements/HierarchyTree/TreeFocusContext.js.map +0 -1
  392. package/dist/elements/HierarchyTree/TreeNode/index.d.ts +0 -5
  393. package/dist/elements/HierarchyTree/TreeNode/index.d.ts.map +0 -1
  394. package/dist/elements/HierarchyTree/TreeNode/index.js +0 -201
  395. package/dist/elements/HierarchyTree/TreeNode/index.js.map +0 -1
  396. package/dist/elements/HierarchyTree/TreeNode/index.scss +0 -99
  397. package/dist/elements/HierarchyTree/index.d.ts +0 -4
  398. package/dist/elements/HierarchyTree/index.d.ts.map +0 -1
  399. package/dist/elements/HierarchyTree/index.js +0 -64
  400. package/dist/elements/HierarchyTree/index.js.map +0 -1
  401. package/dist/elements/HierarchyTree/index.scss +0 -42
  402. package/dist/elements/HierarchyTree/types.d.ts +0 -55
  403. package/dist/elements/HierarchyTree/types.d.ts.map +0 -1
  404. package/dist/elements/HierarchyTree/types.js +0 -2
  405. package/dist/elements/HierarchyTree/types.js.map +0 -1
  406. package/dist/elements/HierarchyTree/useChildren.d.ts +0 -26
  407. package/dist/elements/HierarchyTree/useChildren.d.ts.map +0 -1
  408. package/dist/elements/HierarchyTree/useChildren.js +0 -150
  409. package/dist/elements/HierarchyTree/useChildren.js.map +0 -1
  410. package/dist/elements/HierarchyTree/useTreeState.d.ts +0 -9
  411. package/dist/elements/HierarchyTree/useTreeState.d.ts.map +0 -1
  412. package/dist/elements/HierarchyTree/useTreeState.js +0 -50
  413. package/dist/elements/HierarchyTree/useTreeState.js.map +0 -1
  414. package/dist/elements/HydrateHierarchyProvider/index.d.ts +0 -4
  415. package/dist/elements/HydrateHierarchyProvider/index.d.ts.map +0 -1
  416. package/dist/elements/HydrateHierarchyProvider/index.js +0 -67
  417. package/dist/elements/HydrateHierarchyProvider/index.js.map +0 -1
  418. package/dist/elements/LoadMoreRow/index.d.ts +0 -15
  419. package/dist/elements/LoadMoreRow/index.d.ts.map +0 -1
  420. package/dist/elements/LoadMoreRow/index.js +0 -75
  421. package/dist/elements/LoadMoreRow/index.js.map +0 -1
  422. package/dist/elements/LoadMoreRow/index.scss +0 -42
  423. package/dist/elements/MoveMany/index.d.ts +0 -22
  424. package/dist/elements/MoveMany/index.d.ts.map +0 -1
  425. package/dist/elements/MoveMany/index.js +0 -278
  426. package/dist/elements/MoveMany/index.js.map +0 -1
  427. package/dist/elements/MoveMany/index.scss +0 -7
  428. package/dist/elements/Spinner/index.d.ts +0 -16
  429. package/dist/elements/Spinner/index.d.ts.map +0 -1
  430. package/dist/elements/Spinner/index.js +0 -49
  431. package/dist/elements/Spinner/index.js.map +0 -1
  432. package/dist/elements/Spinner/index.scss +0 -39
  433. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts +0 -6
  434. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +0 -1
  435. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +0 -187
  436. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +0 -1
  437. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.scss +0 -29
  438. package/dist/elements/Tree/LoadMore/LoadMoreButton.d.ts +0 -8
  439. package/dist/elements/Tree/LoadMore/LoadMoreButton.d.ts.map +0 -1
  440. package/dist/elements/Tree/LoadMore/LoadMoreButton.js +0 -36
  441. package/dist/elements/Tree/LoadMore/LoadMoreButton.js.map +0 -1
  442. package/dist/elements/Tree/LoadMore/index.d.ts +0 -12
  443. package/dist/elements/Tree/LoadMore/index.d.ts.map +0 -1
  444. package/dist/elements/Tree/LoadMore/index.js +0 -29
  445. package/dist/elements/Tree/LoadMore/index.js.map +0 -1
  446. package/dist/elements/Tree/LoadMore/index.scss +0 -26
  447. package/dist/elements/Tree/TreeConnector.d.ts +0 -7
  448. package/dist/elements/Tree/TreeConnector.d.ts.map +0 -1
  449. package/dist/elements/Tree/TreeConnector.js +0 -23
  450. package/dist/elements/Tree/TreeConnector.js.map +0 -1
  451. package/dist/elements/Tree/TreeFocusContext.d.ts +0 -28
  452. package/dist/elements/Tree/TreeFocusContext.d.ts.map +0 -1
  453. package/dist/elements/Tree/TreeFocusContext.js +0 -140
  454. package/dist/elements/Tree/TreeFocusContext.js.map +0 -1
  455. package/dist/elements/Tree/TreeNode/index.d.ts +0 -5
  456. package/dist/elements/Tree/TreeNode/index.d.ts.map +0 -1
  457. package/dist/elements/Tree/TreeNode/index.js +0 -218
  458. package/dist/elements/Tree/TreeNode/index.js.map +0 -1
  459. package/dist/elements/Tree/TreeNode/index.scss +0 -110
  460. package/dist/elements/Tree/index.d.ts +0 -5
  461. package/dist/elements/Tree/index.d.ts.map +0 -1
  462. package/dist/elements/Tree/index.js +0 -258
  463. package/dist/elements/Tree/index.js.map +0 -1
  464. package/dist/elements/Tree/index.scss +0 -63
  465. package/dist/elements/Tree/types.d.ts +0 -67
  466. package/dist/elements/Tree/types.d.ts.map +0 -1
  467. package/dist/elements/Tree/types.js +0 -2
  468. package/dist/elements/Tree/types.js.map +0 -1
  469. package/dist/elements/Tree/useChildren.d.ts +0 -25
  470. package/dist/elements/Tree/useChildren.d.ts.map +0 -1
  471. package/dist/elements/Tree/useChildren.js +0 -213
  472. package/dist/elements/Tree/useChildren.js.map +0 -1
  473. package/dist/exports/client/chunk-SH42NW5R.js +0 -29
  474. package/dist/fields/Null/index.d.ts +0 -11
  475. package/dist/fields/Null/index.d.ts.map +0 -1
  476. package/dist/fields/Null/index.js +0 -13
  477. package/dist/fields/Null/index.js.map +0 -1
  478. package/dist/icons/Filter/index.d.ts +0 -4
  479. package/dist/icons/Filter/index.d.ts.map +0 -1
  480. package/dist/icons/Filter/index.js +0 -15
  481. package/dist/icons/Filter/index.js.map +0 -1
  482. package/dist/icons/Filter/index.scss +0 -13
  483. package/dist/icons/Tag/index.d.ts +0 -8
  484. package/dist/icons/Tag/index.d.ts.map +0 -1
  485. package/dist/icons/Tag/index.js +0 -22
  486. package/dist/icons/Tag/index.js.map +0 -1
  487. package/dist/icons/Tag/index.scss +0 -14
  488. package/dist/providers/DocumentSelection/index.d.ts +0 -8
  489. package/dist/providers/DocumentSelection/index.d.ts.map +0 -1
  490. package/dist/providers/DocumentSelection/index.js +0 -239
  491. package/dist/providers/DocumentSelection/index.js.map +0 -1
  492. package/dist/providers/DocumentSelection/types.d.ts +0 -122
  493. package/dist/providers/DocumentSelection/types.d.ts.map +0 -1
  494. package/dist/providers/DocumentSelection/types.js +0 -5
  495. package/dist/providers/DocumentSelection/types.js.map +0 -1
  496. package/dist/providers/Hierarchy/index.d.ts +0 -5
  497. package/dist/providers/Hierarchy/index.d.ts.map +0 -1
  498. package/dist/providers/Hierarchy/index.js +0 -337
  499. package/dist/providers/Hierarchy/index.js.map +0 -1
  500. package/dist/providers/Hierarchy/types.d.ts +0 -101
  501. package/dist/providers/Hierarchy/types.d.ts.map +0 -1
  502. package/dist/providers/Hierarchy/types.js +0 -2
  503. package/dist/providers/Hierarchy/types.js.map +0 -1
  504. package/dist/utilities/isSuperset.d.ts +0 -6
  505. package/dist/utilities/isSuperset.d.ts.map +0 -1
  506. package/dist/utilities/isSuperset.js +0 -10
  507. package/dist/utilities/isSuperset.js.map +0 -1
  508. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts +0 -10
  509. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +0 -1
  510. package/dist/views/HierarchyList/DocumentListSelection/index.js +0 -135
  511. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +0 -1
  512. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +0 -21
  513. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +0 -1
  514. package/dist/views/HierarchyList/HierarchyListHeader/index.js +0 -67
  515. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +0 -1
  516. package/dist/views/HierarchyList/HierarchyListHeader/index.scss +0 -9
  517. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts +0 -4
  518. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +0 -1
  519. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +0 -104
  520. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +0 -1
  521. package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts +0 -4
  522. package/dist/views/HierarchyList/HierarchyTable/DateCell.d.ts.map +0 -1
  523. package/dist/views/HierarchyList/HierarchyTable/DateCell.js +0 -53
  524. package/dist/views/HierarchyList/HierarchyTable/DateCell.js.map +0 -1
  525. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts +0 -4
  526. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.d.ts.map +0 -1
  527. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js +0 -128
  528. package/dist/views/HierarchyList/HierarchyTable/RelatedNameCell.js.map +0 -1
  529. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts +0 -99
  530. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +0 -1
  531. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +0 -118
  532. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +0 -1
  533. package/dist/views/HierarchyList/HierarchyTable/SlotTable.scss +0 -214
  534. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +0 -23
  535. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +0 -1
  536. package/dist/views/HierarchyList/HierarchyTable/index.js +0 -387
  537. package/dist/views/HierarchyList/HierarchyTable/index.js.map +0 -1
  538. package/dist/views/HierarchyList/HierarchyTable/index.scss +0 -148
  539. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +0 -20
  540. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +0 -1
  541. package/dist/views/HierarchyList/HierarchyTable/types.js +0 -2
  542. package/dist/views/HierarchyList/HierarchyTable/types.js.map +0 -1
  543. package/dist/views/HierarchyList/TypeFilter/index.d.ts +0 -15
  544. package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +0 -1
  545. package/dist/views/HierarchyList/TypeFilter/index.js +0 -37
  546. package/dist/views/HierarchyList/TypeFilter/index.js.map +0 -1
  547. package/dist/views/HierarchyList/TypeFilter/index.scss +0 -32
  548. package/dist/views/HierarchyList/index.d.ts +0 -5
  549. package/dist/views/HierarchyList/index.d.ts.map +0 -1
  550. package/dist/views/HierarchyList/index.js +0 -303
  551. package/dist/views/HierarchyList/index.js.map +0 -1
  552. package/dist/views/HierarchyList/index.scss +0 -72
  553. /package/dist/exports/client/{DatePicker-CL2EGBVQ.js.map → DatePicker-T2DMDMM5.js.map} +0 -0
@@ -0,0 +1,541 @@
1
+ import ObjectIdImport from 'bson-objectid';
2
+ import { describe, expect, it } from 'vitest';
3
+ import { mergeFormStateFromClipboard } from './mergeFormStateFromClipboard.js';
4
+ const ObjectId = 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport;
5
+ describe('mergeFormStateFromClipboard', () => {
6
+ describe('block ID regeneration', () => {
7
+ it('should generate new IDs when pasting blocks to prevent duplicates', () => {
8
+ const copiedBlockID = new ObjectId().toHexString();
9
+ const formState = {
10
+ layout: {
11
+ valid: true,
12
+ value: 0,
13
+ initialValue: 0,
14
+ rows: []
15
+ }
16
+ };
17
+ const clipboardData = {
18
+ type: 'blocks',
19
+ path: 'layout',
20
+ blocks: [],
21
+ data: {
22
+ 'layout.0.id': {
23
+ value: copiedBlockID,
24
+ valid: true
25
+ },
26
+ 'layout.0.blockType': {
27
+ value: 'content',
28
+ valid: true
29
+ },
30
+ 'layout.0.text': {
31
+ value: 'test content',
32
+ valid: true
33
+ }
34
+ },
35
+ rowIndex: 0
36
+ };
37
+ const result = mergeFormStateFromClipboard({
38
+ dataFromClipboard: clipboardData,
39
+ formState,
40
+ path: 'layout'
41
+ });
42
+ // Check that a new ID was generated
43
+ expect(result['layout.0.id']).toBeDefined();
44
+ expect(result['layout.0.id'].value).toBeDefined();
45
+ expect(result['layout.0.id'].value).not.toEqual(copiedBlockID);
46
+ expect(ObjectId.isValid(result['layout.0.id'].value)).toBe(true);
47
+ // Check that the row metadata also has the new ID
48
+ expect(result.layout.rows).toHaveLength(1);
49
+ expect(result.layout.rows?.[0]?.id).not.toEqual(copiedBlockID);
50
+ expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value);
51
+ });
52
+ it('should generate new IDs for nested blocks', () => {
53
+ const copiedBlockID = new ObjectId().toHexString();
54
+ const copiedNestedBlockID = new ObjectId().toHexString();
55
+ const formState = {
56
+ layout: {
57
+ valid: true,
58
+ value: 0,
59
+ initialValue: 0,
60
+ rows: []
61
+ }
62
+ };
63
+ const clipboardData = {
64
+ type: 'blocks',
65
+ path: 'layout',
66
+ blocks: [],
67
+ data: {
68
+ 'layout.0.id': {
69
+ value: copiedBlockID,
70
+ valid: true
71
+ },
72
+ 'layout.0.blockType': {
73
+ value: 'container',
74
+ valid: true
75
+ },
76
+ 'layout.0.subBlocks': {
77
+ value: 1,
78
+ valid: true,
79
+ rows: [{
80
+ id: copiedNestedBlockID
81
+ }]
82
+ },
83
+ 'layout.0.subBlocks.0.id': {
84
+ value: copiedNestedBlockID,
85
+ valid: true
86
+ },
87
+ 'layout.0.subBlocks.0.blockType': {
88
+ value: 'content',
89
+ valid: true
90
+ }
91
+ },
92
+ rowIndex: 0
93
+ };
94
+ const result = mergeFormStateFromClipboard({
95
+ dataFromClipboard: clipboardData,
96
+ formState,
97
+ path: 'layout'
98
+ });
99
+ // Check that parent block got new ID
100
+ expect(result['layout.0.id'].value).not.toEqual(copiedBlockID);
101
+ expect(ObjectId.isValid(result['layout.0.id'].value)).toBe(true);
102
+ // Check that nested block got new ID
103
+ expect(result['layout.0.subBlocks.0.id'].value).not.toEqual(copiedNestedBlockID);
104
+ expect(ObjectId.isValid(result['layout.0.subBlocks.0.id'].value)).toBe(true);
105
+ // Check that parent and nested IDs are different
106
+ expect(result['layout.0.id'].value).not.toEqual(result['layout.0.subBlocks.0.id'].value);
107
+ // Check that parent row metadata has new ID
108
+ expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value);
109
+ // Check that nested row metadata has new ID
110
+ expect(result['layout.0.subBlocks'].rows?.[0]?.id).toEqual(result['layout.0.subBlocks.0.id'].value);
111
+ });
112
+ it('should preserve non-ID field values when pasting', () => {
113
+ const copiedBlockID = new ObjectId().toHexString();
114
+ const formState = {
115
+ layout: {
116
+ valid: true,
117
+ value: 0,
118
+ initialValue: 0,
119
+ rows: []
120
+ }
121
+ };
122
+ const clipboardData = {
123
+ type: 'blocks',
124
+ path: 'layout',
125
+ blocks: [],
126
+ data: {
127
+ 'layout.0.id': {
128
+ value: copiedBlockID,
129
+ valid: true
130
+ },
131
+ 'layout.0.blockType': {
132
+ value: 'content',
133
+ valid: true
134
+ },
135
+ 'layout.0.text': {
136
+ value: 'preserved text content',
137
+ valid: true
138
+ }
139
+ },
140
+ rowIndex: 0
141
+ };
142
+ const result = mergeFormStateFromClipboard({
143
+ dataFromClipboard: clipboardData,
144
+ formState,
145
+ path: 'layout'
146
+ });
147
+ // Non-ID fields should be preserved
148
+ expect(result['layout.0.blockType'].value).toEqual('content');
149
+ expect(result['layout.0.text'].value).toEqual('preserved text content');
150
+ });
151
+ it('should generate new ID when pasting from row to field', () => {
152
+ const copiedBlockID = new ObjectId().toHexString();
153
+ const formState = {
154
+ duplicate: {
155
+ valid: true,
156
+ value: 0,
157
+ initialValue: 0,
158
+ rows: []
159
+ }
160
+ };
161
+ // Simulating copying from blocks.1 and pasting into duplicate field
162
+ const clipboardData = {
163
+ type: 'blocks',
164
+ path: 'blocks',
165
+ blocks: [],
166
+ data: {
167
+ 'blocks.1.id': {
168
+ value: copiedBlockID,
169
+ valid: true
170
+ },
171
+ 'blocks.1.blockType': {
172
+ value: 'number',
173
+ valid: true
174
+ },
175
+ 'blocks.1.number': {
176
+ value: 342,
177
+ valid: true
178
+ }
179
+ },
180
+ rowIndex: 1
181
+ };
182
+ const result = mergeFormStateFromClipboard({
183
+ dataFromClipboard: clipboardData,
184
+ formState,
185
+ path: 'duplicate'
186
+ });
187
+ // Check that a new ID was generated
188
+ expect(result['duplicate.0.id']).toBeDefined();
189
+ expect(result['duplicate.0.id'].value).toBeDefined();
190
+ expect(result['duplicate.0.id'].value).not.toEqual(copiedBlockID);
191
+ expect(ObjectId.isValid(result['duplicate.0.id'].value)).toBe(true);
192
+ // Check that the row metadata has the new ID (not the copied ID)
193
+ expect(result.duplicate.rows).toBeDefined();
194
+ expect(result.duplicate.rows).toHaveLength(1);
195
+ expect(result.duplicate.rows[0].id).not.toEqual(copiedBlockID);
196
+ expect(result.duplicate.rows[0].id).toEqual(result['duplicate.0.id'].value);
197
+ // Check that other fields were preserved
198
+ expect(result['duplicate.0.number'].value).toEqual(342);
199
+ });
200
+ });
201
+ describe('block row paste with nested array', () => {
202
+ it('should regenerate nested array item IDs when pasting a block row', () => {
203
+ const copiedBlockID = new ObjectId().toHexString();
204
+ const copiedArrayItemID1 = new ObjectId().toHexString();
205
+ const copiedArrayItemID2 = new ObjectId().toHexString();
206
+ const copiedArrayItemID3 = new ObjectId().toHexString();
207
+ const targetBlockID = new ObjectId().toHexString();
208
+ // Target form state: block at index 1 with empty buttons array
209
+ const formState = {
210
+ ctas: {
211
+ valid: true,
212
+ value: 2,
213
+ initialValue: 2,
214
+ rows: [{
215
+ id: copiedBlockID,
216
+ blockType: 'callToAction',
217
+ isLoading: false
218
+ }, {
219
+ id: targetBlockID,
220
+ blockType: 'callToAction',
221
+ isLoading: false
222
+ }]
223
+ },
224
+ 'ctas.0': {
225
+ value: 'callToAction',
226
+ valid: true
227
+ },
228
+ 'ctas.0.id': {
229
+ value: copiedBlockID,
230
+ valid: true
231
+ },
232
+ 'ctas.0.buttons': {
233
+ valid: true,
234
+ value: 3,
235
+ rows: [{
236
+ id: copiedArrayItemID1,
237
+ isLoading: false
238
+ }, {
239
+ id: copiedArrayItemID2,
240
+ isLoading: false
241
+ }, {
242
+ id: copiedArrayItemID3,
243
+ isLoading: false
244
+ }]
245
+ },
246
+ 'ctas.0.buttons.0.id': {
247
+ value: copiedArrayItemID1,
248
+ valid: true
249
+ },
250
+ 'ctas.0.buttons.1.id': {
251
+ value: copiedArrayItemID2,
252
+ valid: true
253
+ },
254
+ 'ctas.0.buttons.2.id': {
255
+ value: copiedArrayItemID3,
256
+ valid: true
257
+ },
258
+ 'ctas.1': {
259
+ value: 'callToAction',
260
+ valid: true
261
+ },
262
+ 'ctas.1.id': {
263
+ value: targetBlockID,
264
+ valid: true
265
+ },
266
+ 'ctas.1.buttons': {
267
+ valid: true,
268
+ value: 0,
269
+ rows: []
270
+ }
271
+ };
272
+ // Clipboard: block row 0 (source) with 3 buttons
273
+ const clipboardData = {
274
+ type: 'blocks',
275
+ path: 'ctas',
276
+ blocks: [],
277
+ rowIndex: 0,
278
+ data: {
279
+ 'ctas.0': {
280
+ value: 'callToAction',
281
+ valid: true
282
+ },
283
+ 'ctas.0.id': {
284
+ value: copiedBlockID,
285
+ valid: true
286
+ },
287
+ 'ctas.0.buttons': {
288
+ valid: true,
289
+ value: 3,
290
+ rows: [{
291
+ id: copiedArrayItemID1,
292
+ isLoading: false
293
+ }, {
294
+ id: copiedArrayItemID2,
295
+ isLoading: false
296
+ }, {
297
+ id: copiedArrayItemID3,
298
+ isLoading: false
299
+ }]
300
+ },
301
+ 'ctas.0.buttons.0.id': {
302
+ value: copiedArrayItemID1,
303
+ valid: true
304
+ },
305
+ 'ctas.0.buttons.0.label': {
306
+ value: 'Button 1',
307
+ valid: true
308
+ },
309
+ 'ctas.0.buttons.1.id': {
310
+ value: copiedArrayItemID2,
311
+ valid: true
312
+ },
313
+ 'ctas.0.buttons.1.label': {
314
+ value: 'Button 2',
315
+ valid: true
316
+ },
317
+ 'ctas.0.buttons.2.id': {
318
+ value: copiedArrayItemID3,
319
+ valid: true
320
+ },
321
+ 'ctas.0.buttons.2.label': {
322
+ value: 'Button 3',
323
+ valid: true
324
+ }
325
+ }
326
+ };
327
+ // Paste into block row 1 (target)
328
+ const result = mergeFormStateFromClipboard({
329
+ dataFromClipboard: clipboardData,
330
+ formState,
331
+ path: 'ctas',
332
+ rowIndex: 1
333
+ });
334
+ // Target block ID should NOT be overwritten
335
+ expect(result['ctas.1.id'].value).toEqual(targetBlockID);
336
+ // Nested array items should have NEW IDs (not the source IDs)
337
+ expect(result['ctas.1.buttons.0.id']).toBeDefined();
338
+ expect(result['ctas.1.buttons.0.id'].value).not.toEqual(copiedArrayItemID1);
339
+ expect(ObjectId.isValid(result['ctas.1.buttons.0.id'].value)).toBe(true);
340
+ expect(result['ctas.1.buttons.1.id']).toBeDefined();
341
+ expect(result['ctas.1.buttons.1.id'].value).not.toEqual(copiedArrayItemID2);
342
+ expect(result['ctas.1.buttons.2.id']).toBeDefined();
343
+ expect(result['ctas.1.buttons.2.id'].value).not.toEqual(copiedArrayItemID3);
344
+ // The rows metadata in ctas.1.buttons should have the new IDs
345
+ expect(result['ctas.1.buttons'].rows).toHaveLength(3);
346
+ expect(result['ctas.1.buttons'].rows[0].id).toEqual(result['ctas.1.buttons.0.id'].value);
347
+ expect(result['ctas.1.buttons'].rows[1].id).toEqual(result['ctas.1.buttons.1.id'].value);
348
+ expect(result['ctas.1.buttons'].rows[2].id).toEqual(result['ctas.1.buttons.2.id'].value);
349
+ // Field values should be copied
350
+ expect(result['ctas.1.buttons.0.label'].value).toEqual('Button 1');
351
+ expect(result['ctas.1.buttons.1.label'].value).toEqual('Button 2');
352
+ expect(result['ctas.1.buttons.2.label'].value).toEqual('Button 3');
353
+ // Source block should be untouched
354
+ expect(result['ctas.0.id'].value).toEqual(copiedBlockID);
355
+ expect(result['ctas.0.buttons'].rows).toHaveLength(3);
356
+ });
357
+ });
358
+ describe('array ID regeneration', () => {
359
+ it('should generate new IDs when pasting arrays to prevent duplicates', () => {
360
+ const copiedArrayID = new ObjectId().toHexString();
361
+ const formState = {
362
+ items: {
363
+ valid: true,
364
+ value: 0,
365
+ initialValue: 0,
366
+ rows: []
367
+ }
368
+ };
369
+ const clipboardData = {
370
+ type: 'array',
371
+ path: 'items',
372
+ fields: [],
373
+ data: {
374
+ 'items.0.id': {
375
+ value: copiedArrayID,
376
+ valid: true
377
+ },
378
+ 'items.0.text': {
379
+ value: 'test content',
380
+ valid: true
381
+ }
382
+ },
383
+ rowIndex: 0
384
+ };
385
+ const result = mergeFormStateFromClipboard({
386
+ dataFromClipboard: clipboardData,
387
+ formState,
388
+ path: 'items'
389
+ });
390
+ // Check that a new ID was generated
391
+ expect(result['items.0.id']).toBeDefined();
392
+ expect(result['items.0.id'].value).toBeDefined();
393
+ expect(result['items.0.id'].value).not.toEqual(copiedArrayID);
394
+ expect(ObjectId.isValid(result['items.0.id'].value)).toBe(true);
395
+ // Check that the row metadata also has the new ID
396
+ expect(result.items.rows).toHaveLength(1);
397
+ expect(result.items.rows?.[0]?.id).not.toEqual(copiedArrayID);
398
+ expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value);
399
+ });
400
+ it('should generate new IDs for nested arrays', () => {
401
+ const copiedArrayID = new ObjectId().toHexString();
402
+ const copiedNestedArrayID = new ObjectId().toHexString();
403
+ const formState = {
404
+ items: {
405
+ valid: true,
406
+ value: 0,
407
+ initialValue: 0,
408
+ rows: []
409
+ }
410
+ };
411
+ const clipboardData = {
412
+ type: 'array',
413
+ path: 'items',
414
+ fields: [],
415
+ data: {
416
+ 'items.0.id': {
417
+ value: copiedArrayID,
418
+ valid: true
419
+ },
420
+ 'items.0.text': {
421
+ value: 'parent array',
422
+ valid: true
423
+ },
424
+ 'items.0.subArray': {
425
+ value: 1,
426
+ valid: true,
427
+ rows: [{
428
+ id: copiedNestedArrayID
429
+ }]
430
+ },
431
+ 'items.0.subArray.0.id': {
432
+ value: copiedNestedArrayID,
433
+ valid: true
434
+ },
435
+ 'items.0.subArray.0.text': {
436
+ value: 'nested array',
437
+ valid: true
438
+ }
439
+ },
440
+ rowIndex: 0
441
+ };
442
+ const result = mergeFormStateFromClipboard({
443
+ dataFromClipboard: clipboardData,
444
+ formState,
445
+ path: 'items'
446
+ });
447
+ // Check that parent array got new ID
448
+ expect(result['items.0.id'].value).not.toEqual(copiedArrayID);
449
+ expect(ObjectId.isValid(result['items.0.id'].value)).toBe(true);
450
+ // Check that nested array got new ID
451
+ expect(result['items.0.subArray.0.id'].value).not.toEqual(copiedNestedArrayID);
452
+ expect(ObjectId.isValid(result['items.0.subArray.0.id'].value)).toBe(true);
453
+ // Check that parent and nested IDs are different
454
+ expect(result['items.0.id'].value).not.toEqual(result['items.0.subArray.0.id'].value);
455
+ // Check that parent row metadata has new ID
456
+ expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value);
457
+ // Check that nested row metadata has new ID
458
+ expect(result['items.0.subArray'].rows?.[0]?.id).toEqual(result['items.0.subArray.0.id'].value);
459
+ });
460
+ it('should preserve non-ID field values when pasting arrays', () => {
461
+ const copiedArrayID = new ObjectId().toHexString();
462
+ const formState = {
463
+ items: {
464
+ valid: true,
465
+ value: 0,
466
+ initialValue: 0,
467
+ rows: []
468
+ }
469
+ };
470
+ const clipboardData = {
471
+ type: 'array',
472
+ path: 'items',
473
+ fields: [],
474
+ data: {
475
+ 'items.0.id': {
476
+ value: copiedArrayID,
477
+ valid: true
478
+ },
479
+ 'items.0.text': {
480
+ value: 'preserved array text',
481
+ valid: true
482
+ }
483
+ },
484
+ rowIndex: 0
485
+ };
486
+ const result = mergeFormStateFromClipboard({
487
+ dataFromClipboard: clipboardData,
488
+ formState,
489
+ path: 'items'
490
+ });
491
+ // Non-ID fields should be preserved
492
+ expect(result['items.0.text'].value).toEqual('preserved array text');
493
+ });
494
+ it('should generate new ID when pasting from array row to field', () => {
495
+ const copiedArrayID = new ObjectId().toHexString();
496
+ const formState = {
497
+ disableSort: {
498
+ valid: true,
499
+ value: 0,
500
+ initialValue: 0,
501
+ rows: []
502
+ }
503
+ };
504
+ // Simulating copying from items.0 and pasting into disableSort field
505
+ const clipboardData = {
506
+ type: 'array',
507
+ path: 'items',
508
+ fields: [],
509
+ data: {
510
+ 'items.0.id': {
511
+ value: copiedArrayID,
512
+ valid: true
513
+ },
514
+ 'items.0.text': {
515
+ value: 'row one',
516
+ valid: true
517
+ }
518
+ },
519
+ rowIndex: 0
520
+ };
521
+ const result = mergeFormStateFromClipboard({
522
+ dataFromClipboard: clipboardData,
523
+ formState,
524
+ path: 'disableSort'
525
+ });
526
+ // Check that a new ID was generated
527
+ expect(result['disableSort.0.id']).toBeDefined();
528
+ expect(result['disableSort.0.id'].value).toBeDefined();
529
+ expect(result['disableSort.0.id'].value).not.toEqual(copiedArrayID);
530
+ expect(ObjectId.isValid(result['disableSort.0.id'].value)).toBe(true);
531
+ // Check that the row metadata has the new ID (not the copied ID)
532
+ expect(result.disableSort.rows).toBeDefined();
533
+ expect(result.disableSort.rows).toHaveLength(1);
534
+ expect(result.disableSort.rows[0].id).not.toEqual(copiedArrayID);
535
+ expect(result.disableSort.rows[0].id).toEqual(result['disableSort.0.id'].value);
536
+ // Check that other fields were preserved
537
+ expect(result['disableSort.0.text'].value).toEqual('row one');
538
+ });
539
+ });
540
+ });
541
+ //# sourceMappingURL=mergeFormStateFromClipboard.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mergeFormStateFromClipboard.spec.js","names":["ObjectIdImport","describe","expect","it","mergeFormStateFromClipboard","ObjectId","default","copiedBlockID","toHexString","formState","layout","valid","value","initialValue","rows","clipboardData","type","path","blocks","data","rowIndex","result","dataFromClipboard","toBeDefined","not","toEqual","isValid","toBe","toHaveLength","id","copiedNestedBlockID","duplicate","copiedArrayItemID1","copiedArrayItemID2","copiedArrayItemID3","targetBlockID","ctas","blockType","isLoading","copiedArrayID","items","fields","copiedNestedArrayID","disableSort"],"sources":["../../../src/elements/ClipboardAction/mergeFormStateFromClipboard.spec.ts"],"sourcesContent":["import type { FormState } from 'payload'\n\nimport ObjectIdImport from 'bson-objectid'\nimport { describe, expect, it } from 'vitest'\n\nimport { mergeFormStateFromClipboard } from './mergeFormStateFromClipboard.js'\nimport type { ClipboardPasteData } from './types.js'\n\nconst ObjectId = (\n 'default' in ObjectIdImport ? ObjectIdImport.default : ObjectIdImport\n) as typeof ObjectIdImport\n\ndescribe('mergeFormStateFromClipboard', () => {\n describe('block ID regeneration', () => {\n it('should generate new IDs when pasting blocks to prevent duplicates', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'content',\n valid: true,\n },\n 'layout.0.text': {\n value: 'test content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Check that a new ID was generated\n expect(result['layout.0.id']).toBeDefined()\n expect(result['layout.0.id'].value).toBeDefined()\n expect(result['layout.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['layout.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata also has the new ID\n expect(result.layout.rows).toHaveLength(1)\n expect(result.layout.rows?.[0]?.id).not.toEqual(copiedBlockID)\n expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value)\n })\n\n it('should generate new IDs for nested blocks', () => {\n const copiedBlockID = new ObjectId().toHexString()\n const copiedNestedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'container',\n valid: true,\n },\n 'layout.0.subBlocks': {\n value: 1,\n valid: true,\n rows: [{ id: copiedNestedBlockID }],\n },\n 'layout.0.subBlocks.0.id': {\n value: copiedNestedBlockID,\n valid: true,\n },\n 'layout.0.subBlocks.0.blockType': {\n value: 'content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Check that parent block got new ID\n expect(result['layout.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['layout.0.id'].value as string)).toBe(true)\n\n // Check that nested block got new ID\n expect(result['layout.0.subBlocks.0.id'].value).not.toEqual(copiedNestedBlockID)\n expect(ObjectId.isValid(result['layout.0.subBlocks.0.id'].value as string)).toBe(true)\n\n // Check that parent and nested IDs are different\n expect(result['layout.0.id'].value).not.toEqual(result['layout.0.subBlocks.0.id'].value)\n\n // Check that parent row metadata has new ID\n expect(result.layout.rows?.[0]?.id).toEqual(result['layout.0.id'].value)\n\n // Check that nested row metadata has new ID\n expect(result['layout.0.subBlocks'].rows?.[0]?.id).toEqual(\n result['layout.0.subBlocks.0.id'].value,\n )\n })\n\n it('should preserve non-ID field values when pasting', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n layout: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'layout',\n blocks: [],\n data: {\n 'layout.0.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'layout.0.blockType': {\n value: 'content',\n valid: true,\n },\n 'layout.0.text': {\n value: 'preserved text content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'layout',\n })\n\n // Non-ID fields should be preserved\n expect(result['layout.0.blockType'].value).toEqual('content')\n expect(result['layout.0.text'].value).toEqual('preserved text content')\n })\n\n it('should generate new ID when pasting from row to field', () => {\n const copiedBlockID = new ObjectId().toHexString()\n\n const formState: FormState = {\n duplicate: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n // Simulating copying from blocks.1 and pasting into duplicate field\n const clipboardData = {\n type: 'blocks' as const,\n path: 'blocks',\n blocks: [],\n data: {\n 'blocks.1.id': {\n value: copiedBlockID,\n valid: true,\n },\n 'blocks.1.blockType': {\n value: 'number',\n valid: true,\n },\n 'blocks.1.number': {\n value: 342,\n valid: true,\n },\n },\n rowIndex: 1,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'duplicate',\n })\n\n // Check that a new ID was generated\n expect(result['duplicate.0.id']).toBeDefined()\n expect(result['duplicate.0.id'].value).toBeDefined()\n expect(result['duplicate.0.id'].value).not.toEqual(copiedBlockID)\n expect(ObjectId.isValid(result['duplicate.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata has the new ID (not the copied ID)\n expect(result.duplicate.rows).toBeDefined()\n expect(result.duplicate.rows).toHaveLength(1)\n expect(result.duplicate.rows![0].id).not.toEqual(copiedBlockID)\n expect(result.duplicate.rows![0].id).toEqual(result['duplicate.0.id'].value)\n\n // Check that other fields were preserved\n expect(result['duplicate.0.number'].value).toEqual(342)\n })\n })\n\n describe('block row paste with nested array', () => {\n it('should regenerate nested array item IDs when pasting a block row', () => {\n const copiedBlockID = new ObjectId().toHexString()\n const copiedArrayItemID1 = new ObjectId().toHexString()\n const copiedArrayItemID2 = new ObjectId().toHexString()\n const copiedArrayItemID3 = new ObjectId().toHexString()\n const targetBlockID = new ObjectId().toHexString()\n\n // Target form state: block at index 1 with empty buttons array\n const formState: FormState = {\n ctas: {\n valid: true,\n value: 2,\n initialValue: 2,\n rows: [\n { id: copiedBlockID, blockType: 'callToAction', isLoading: false },\n { id: targetBlockID, blockType: 'callToAction', isLoading: false },\n ],\n },\n 'ctas.0': { value: 'callToAction', valid: true },\n 'ctas.0.id': { value: copiedBlockID, valid: true },\n 'ctas.0.buttons': {\n valid: true,\n value: 3,\n rows: [\n { id: copiedArrayItemID1, isLoading: false },\n { id: copiedArrayItemID2, isLoading: false },\n { id: copiedArrayItemID3, isLoading: false },\n ],\n },\n 'ctas.0.buttons.0.id': { value: copiedArrayItemID1, valid: true },\n 'ctas.0.buttons.1.id': { value: copiedArrayItemID2, valid: true },\n 'ctas.0.buttons.2.id': { value: copiedArrayItemID3, valid: true },\n 'ctas.1': { value: 'callToAction', valid: true },\n 'ctas.1.id': { value: targetBlockID, valid: true },\n 'ctas.1.buttons': {\n valid: true,\n value: 0,\n rows: [],\n },\n }\n\n // Clipboard: block row 0 (source) with 3 buttons\n const clipboardData: ClipboardPasteData = {\n type: 'blocks',\n path: 'ctas',\n blocks: [],\n rowIndex: 0,\n data: {\n 'ctas.0': { value: 'callToAction', valid: true },\n 'ctas.0.id': { value: copiedBlockID, valid: true },\n 'ctas.0.buttons': {\n valid: true,\n value: 3,\n rows: [\n { id: copiedArrayItemID1, isLoading: false },\n { id: copiedArrayItemID2, isLoading: false },\n { id: copiedArrayItemID3, isLoading: false },\n ],\n },\n 'ctas.0.buttons.0.id': { value: copiedArrayItemID1, valid: true },\n 'ctas.0.buttons.0.label': { value: 'Button 1', valid: true },\n 'ctas.0.buttons.1.id': { value: copiedArrayItemID2, valid: true },\n 'ctas.0.buttons.1.label': { value: 'Button 2', valid: true },\n 'ctas.0.buttons.2.id': { value: copiedArrayItemID3, valid: true },\n 'ctas.0.buttons.2.label': { value: 'Button 3', valid: true },\n },\n }\n\n // Paste into block row 1 (target)\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'ctas',\n rowIndex: 1,\n })\n\n // Target block ID should NOT be overwritten\n expect(result['ctas.1.id'].value).toEqual(targetBlockID)\n\n // Nested array items should have NEW IDs (not the source IDs)\n expect(result['ctas.1.buttons.0.id']).toBeDefined()\n expect(result['ctas.1.buttons.0.id'].value).not.toEqual(copiedArrayItemID1)\n expect(ObjectId.isValid(result['ctas.1.buttons.0.id'].value as string)).toBe(true)\n\n expect(result['ctas.1.buttons.1.id']).toBeDefined()\n expect(result['ctas.1.buttons.1.id'].value).not.toEqual(copiedArrayItemID2)\n\n expect(result['ctas.1.buttons.2.id']).toBeDefined()\n expect(result['ctas.1.buttons.2.id'].value).not.toEqual(copiedArrayItemID3)\n\n // The rows metadata in ctas.1.buttons should have the new IDs\n expect(result['ctas.1.buttons'].rows).toHaveLength(3)\n expect(result['ctas.1.buttons'].rows![0].id).toEqual(result['ctas.1.buttons.0.id'].value)\n expect(result['ctas.1.buttons'].rows![1].id).toEqual(result['ctas.1.buttons.1.id'].value)\n expect(result['ctas.1.buttons'].rows![2].id).toEqual(result['ctas.1.buttons.2.id'].value)\n\n // Field values should be copied\n expect(result['ctas.1.buttons.0.label'].value).toEqual('Button 1')\n expect(result['ctas.1.buttons.1.label'].value).toEqual('Button 2')\n expect(result['ctas.1.buttons.2.label'].value).toEqual('Button 3')\n\n // Source block should be untouched\n expect(result['ctas.0.id'].value).toEqual(copiedBlockID)\n expect(result['ctas.0.buttons'].rows).toHaveLength(3)\n })\n })\n\n describe('array ID regeneration', () => {\n it('should generate new IDs when pasting arrays to prevent duplicates', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'test content',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Check that a new ID was generated\n expect(result['items.0.id']).toBeDefined()\n expect(result['items.0.id'].value).toBeDefined()\n expect(result['items.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['items.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata also has the new ID\n expect(result.items.rows).toHaveLength(1)\n expect(result.items.rows?.[0]?.id).not.toEqual(copiedArrayID)\n expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value)\n })\n\n it('should generate new IDs for nested arrays', () => {\n const copiedArrayID = new ObjectId().toHexString()\n const copiedNestedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'parent array',\n valid: true,\n },\n 'items.0.subArray': {\n value: 1,\n valid: true,\n rows: [{ id: copiedNestedArrayID }],\n },\n 'items.0.subArray.0.id': {\n value: copiedNestedArrayID,\n valid: true,\n },\n 'items.0.subArray.0.text': {\n value: 'nested array',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Check that parent array got new ID\n expect(result['items.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['items.0.id'].value as string)).toBe(true)\n\n // Check that nested array got new ID\n expect(result['items.0.subArray.0.id'].value).not.toEqual(copiedNestedArrayID)\n expect(ObjectId.isValid(result['items.0.subArray.0.id'].value as string)).toBe(true)\n\n // Check that parent and nested IDs are different\n expect(result['items.0.id'].value).not.toEqual(result['items.0.subArray.0.id'].value)\n\n // Check that parent row metadata has new ID\n expect(result.items.rows?.[0]?.id).toEqual(result['items.0.id'].value)\n\n // Check that nested row metadata has new ID\n expect(result['items.0.subArray'].rows?.[0]?.id).toEqual(\n result['items.0.subArray.0.id'].value,\n )\n })\n\n it('should preserve non-ID field values when pasting arrays', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n items: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n const clipboardData: ClipboardPasteData = {\n type: 'array',\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'preserved array text',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'items',\n })\n\n // Non-ID fields should be preserved\n expect(result['items.0.text'].value).toEqual('preserved array text')\n })\n\n it('should generate new ID when pasting from array row to field', () => {\n const copiedArrayID = new ObjectId().toHexString()\n\n const formState: FormState = {\n disableSort: {\n valid: true,\n value: 0,\n initialValue: 0,\n rows: [],\n },\n }\n\n // Simulating copying from items.0 and pasting into disableSort field\n const clipboardData = {\n type: 'array' as const,\n path: 'items',\n fields: [],\n data: {\n 'items.0.id': {\n value: copiedArrayID,\n valid: true,\n },\n 'items.0.text': {\n value: 'row one',\n valid: true,\n },\n },\n rowIndex: 0,\n }\n\n const result = mergeFormStateFromClipboard({\n dataFromClipboard: clipboardData,\n formState,\n path: 'disableSort',\n })\n\n // Check that a new ID was generated\n expect(result['disableSort.0.id']).toBeDefined()\n expect(result['disableSort.0.id'].value).toBeDefined()\n expect(result['disableSort.0.id'].value).not.toEqual(copiedArrayID)\n expect(ObjectId.isValid(result['disableSort.0.id'].value as string)).toBe(true)\n\n // Check that the row metadata has the new ID (not the copied ID)\n expect(result.disableSort.rows).toBeDefined()\n expect(result.disableSort.rows).toHaveLength(1)\n expect(result.disableSort.rows![0].id).not.toEqual(copiedArrayID)\n expect(result.disableSort.rows![0].id).toEqual(result['disableSort.0.id'].value)\n\n // Check that other fields were preserved\n expect(result['disableSort.0.text'].value).toEqual('row one')\n })\n })\n})\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,cAAc,CAAA;AAIrB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAA;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAmG5C,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/Combobox/index.tsx"],"names":[],"mappings":"AACA,OAAO,KAAoC,MAAM,OAAO,CAAA;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGnD,OAAO,cAAc,CAAA;AAIrB;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAA;IAC1B,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,aAAa,EAAE,CAAA;IACxB,wDAAwD;IACxD,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACzC,iBAAiB,CAAC,EAAE,MAAM,CAAA;CAC3B,GAAG,IAAI,CAAC,UAAU,EAAE,UAAU,GAAG,QAAQ,CAAC,CAAA;AAE3C;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CAoG5C,CAAA"}
@@ -77,6 +77,7 @@ export const Combobox = props => {
77
77
  };
78
78
  return /*#__PURE__*/_jsx("div", {
79
79
  className: `${baseClass}__entry`,
80
+ "data-popup-prevent-close": true,
80
81
  onClick: handleClick,
81
82
  onKeyDown: e_0 => {
82
83
  if (e_0.key === 'Enter' || e_0.key === ' ') {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","_jsx","className","render","close","_jsxs","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,IAASC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIjD,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAuBlB;;;;;;AAMA,OAAO,MAAMC,QAAA,GAAqCC,KAAA;EAChD,MAAM;IACJC,OAAO;IACPC,mBAAA,GAAsB,CAAC;IACvBC,QAAQ;IACRC,aAAa;IACbC,YAAY;IACZC,iBAAA,GAAoB,WAAW;IAC/B,GAAGC;EAAA,CACJ,GAAGP,KAAA;EACJ,MAAM,CAACQ,WAAA,EAAaC,cAAA,CAAe,GAAGd,QAAA,CAAS;EAC/C,MAAMe,SAAA,GAAYhB,MAAA,CAAO;EACzB,MAAMiB,cAAA,GAAiBjB,MAAA,CAAyB;EAEhD,MAAMkB,eAAA,GAAkBnB,OAAA,CAAQ;IAC9B,IAAI,CAACe,WAAA,EAAa;MAChB,OAAOP,OAAA;IACT;IACA,MAAMY,MAAA,GAASL,WAAA,CAAYM,WAAW;IACtC,OAAOb,OAAA,CAAQc,MAAM,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,CAACH,WAAW,GAAGI,QAAQ,CAACL,MAAA;EACrE,GAAG,CAACZ,OAAA,EAASO,WAAA,CAAY;EAEzB,MAAMW,UAAA,GAAalB,OAAA,CAAQmB,MAAM,IAAIlB,mBAAA;EACrC,MAAMmB,UAAA,GAAaT,eAAA,CAAgBQ,MAAM,GAAG;EAE5C,MAAME,gBAAA,GAAmB9B,KAAA,CAAM+B,WAAW,CACvCC,MAAA;IACCd,SAAA,CAAUe,OAAO,GAAGD,MAAA;IACpB,IAAIA,MAAA,IAAUL,UAAA,EAAY;MACxBO,UAAA,CAAW;QACTf,cAAA,CAAec,OAAO,EAAEE,KAAA;MAC1B,GAAG;IACL;IACAtB,YAAA,GAAemB,MAAA;EACjB,GACA,CAACL,UAAA,EAAYd,YAAA,CAAa;EAG5B,MAAMuB,iBAAA,GAAoBpC,KAAA,CAAM+B,WAAW,CAAC;IAC1Cb,SAAA,CAAUe,OAAO,GAAG;IACpBhB,cAAA,CAAe;IACfL,aAAA;EACF,GAAG,CAACA,aAAA,CAAc;EAElB,oBACEyB,IAAA,CAACjC,KAAA;IACE,GAAGW,UAAU;IACduB,SAAA,EAAW,GAAGhC,SAAA,IAAaS,UAAA,CAAWuB,SAAS,IAAI,IAAI;IACvD1B,aAAA,EAAewB,iBAAA;IACfvB,YAAA,EAAciB,gBAAA;IACdS,MAAA,EAAQA,CAAC;MAAEC;IAAK,CAAE,kBAChBC,KAAA,CAAC;MAAIH,SAAA,EAAW,GAAGhC,SAAA,WAAoB;iBACpCqB,UAAA,iBACCU,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGhC,SAAA,mBAA4B,CAACuB,UAAA,GAAa,IAAIvB,SAAA,8BAAuC,GAAG,IAAI;kBAE1G,aAAA+B,IAAA,CAAC;UACC,cAAYvB,iBAAA;UACZwB,SAAA,EAAW,GAAGhC,SAAA,gBAAyB;UACvCoC,QAAA,EAAWC,CAAA,IAAM1B,cAAA,CAAe0B,CAAA,CAAEC,MAAM,CAACC,KAAK;UAC9CC,WAAA,EAAahC,iBAAA;UACbiC,GAAA,EAAK5B,cAAA;UACL6B,IAAA,EAAK;UACLH,KAAA,EAAO7B;;uBAIbqB,IAAA,CAAChC,SAAA,CAAU4C,WAAW;kBACnB7B,eAAA,CAAgB8B,GAAG,CAAC,CAAC1B,OAAA,EAAO2B,KAAA;UAC3B,MAAMC,WAAA,GAAcA,CAAA;YAClB,IAAIzC,QAAA,EAAU;cACZA,QAAA,CAASa,OAAA;YACX;YACAgB,KAAA;UACF;UAEA,oBACEH,IAAA,CAAC;YACCC,SAAA,EAAW,GAAGhC,SAAA,SAAkB;YAEhC+C,OAAA,EAASD,WAAA;YACTE,SAAA,EAAYX,GAAA;cACV,IAAIA,GAAA,CAAEY,GAAG,KAAK,WAAWZ,GAAA,CAAEY,GAAG,KAAK,KAAK;gBACtCZ,GAAA,CAAEa,cAAc;gBAChBJ,WAAA;cACF;YACF;YACAK,IAAA,EAAK;YACLC,QAAA,EAAU;sBAETlC,OAAA,CAAMmC;aAXF,GAAGnC,OAAA,CAAMC,IAAI,IAAI0B,KAAA,EAAO;QAcnC;;;;AAMZ","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","useMemo","useRef","useState","Popup","PopupList","baseClass","Combobox","props","entries","minEntriesForSearch","onSelect","onToggleClose","onToggleOpen","searchPlaceholder","popupProps","searchValue","setSearchValue","isOpenRef","searchInputRef","filteredEntries","search","toLowerCase","filter","entry","name","includes","showSearch","length","hasResults","handleToggleOpen","useCallback","active","current","setTimeout","focus","handleToggleClose","_jsx","className","render","close","_jsxs","onChange","e","target","value","placeholder","ref","type","ButtonGroup","map","index","handleClick","onClick","onKeyDown","key","preventDefault","role","tabIndex","Component"],"sources":["../../../src/elements/Combobox/index.tsx"],"sourcesContent":["'use client'\nimport React, { useMemo, useRef, useState } from 'react'\n\nimport type { PopupProps } from '../Popup/index.js'\n\nimport { Popup, PopupList } from '../Popup/index.js'\nimport './index.scss'\n\nconst baseClass = 'combobox'\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxEntry = {\n Component: React.ReactNode\n name: string\n}\n\n/**\n * @internal\n * @experimental\n */\nexport type ComboboxProps = {\n entries: ComboboxEntry[]\n /** Minimum number of entries required to show search */\n minEntriesForSearch?: number\n onSelect?: (entry: ComboboxEntry) => void\n searchPlaceholder?: string\n} & Omit<PopupProps, 'children' | 'render'>\n\n/**\n * A wrapper on top of Popup + PopupList.ButtonGroup that adds search functionality.\n *\n * @internal - this component may be removed or receive breaking changes in minor releases.\n * @experimental\n */\nexport const Combobox: React.FC<ComboboxProps> = (props) => {\n const {\n entries,\n minEntriesForSearch = 8,\n onSelect,\n onToggleClose,\n onToggleOpen,\n searchPlaceholder = 'Search...',\n ...popupProps\n } = props\n const [searchValue, setSearchValue] = useState('')\n const isOpenRef = useRef(false)\n const searchInputRef = useRef<HTMLInputElement>(null)\n\n const filteredEntries = useMemo(() => {\n if (!searchValue) {\n return entries\n }\n const search = searchValue.toLowerCase()\n return entries.filter((entry) => entry.name.toLowerCase().includes(search))\n }, [entries, searchValue])\n\n const showSearch = entries.length >= minEntriesForSearch\n const hasResults = filteredEntries.length > 0\n\n const handleToggleOpen = React.useCallback(\n (active: boolean) => {\n isOpenRef.current = active\n if (active && showSearch) {\n setTimeout(() => {\n searchInputRef.current?.focus()\n }, 100)\n }\n onToggleOpen?.(active)\n },\n [showSearch, onToggleOpen],\n )\n\n const handleToggleClose = React.useCallback(() => {\n isOpenRef.current = false\n setSearchValue('')\n onToggleClose?.()\n }, [onToggleClose])\n\n return (\n <Popup\n {...popupProps}\n className={`${baseClass} ${popupProps.className || ''}`}\n onToggleClose={handleToggleClose}\n onToggleOpen={handleToggleOpen}\n render={({ close }) => (\n <div className={`${baseClass}__content`}>\n {showSearch && (\n <div\n className={`${baseClass}__search-wrapper${!hasResults ? ` ${baseClass}__search-wrapper--no-results` : ''}`}\n >\n <input\n aria-label={searchPlaceholder}\n className={`${baseClass}__search-input`}\n onChange={(e) => setSearchValue(e.target.value)}\n placeholder={searchPlaceholder}\n ref={searchInputRef}\n type=\"text\"\n value={searchValue}\n />\n </div>\n )}\n <PopupList.ButtonGroup>\n {filteredEntries.map((entry, index) => {\n const handleClick = () => {\n if (onSelect) {\n onSelect(entry)\n }\n close()\n }\n\n return (\n <div\n className={`${baseClass}__entry`}\n data-popup-prevent-close\n key={`${entry.name}-${index}`}\n onClick={handleClick}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n handleClick()\n }\n }}\n role=\"menuitem\"\n tabIndex={0}\n >\n {entry.Component}\n </div>\n )\n })}\n </PopupList.ButtonGroup>\n </div>\n )}\n />\n )\n}\n"],"mappings":"AAAA;;;AACA,OAAOA,KAAA,IAASC,OAAO,EAAEC,MAAM,EAAEC,QAAQ,QAAQ;AAIjD,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,OAAO;AAEP,MAAMC,SAAA,GAAY;AAuBlB;;;;;;AAMA,OAAO,MAAMC,QAAA,GAAqCC,KAAA;EAChD,MAAM;IACJC,OAAO;IACPC,mBAAA,GAAsB,CAAC;IACvBC,QAAQ;IACRC,aAAa;IACbC,YAAY;IACZC,iBAAA,GAAoB,WAAW;IAC/B,GAAGC;EAAA,CACJ,GAAGP,KAAA;EACJ,MAAM,CAACQ,WAAA,EAAaC,cAAA,CAAe,GAAGd,QAAA,CAAS;EAC/C,MAAMe,SAAA,GAAYhB,MAAA,CAAO;EACzB,MAAMiB,cAAA,GAAiBjB,MAAA,CAAyB;EAEhD,MAAMkB,eAAA,GAAkBnB,OAAA,CAAQ;IAC9B,IAAI,CAACe,WAAA,EAAa;MAChB,OAAOP,OAAA;IACT;IACA,MAAMY,MAAA,GAASL,WAAA,CAAYM,WAAW;IACtC,OAAOb,OAAA,CAAQc,MAAM,CAAEC,KAAA,IAAUA,KAAA,CAAMC,IAAI,CAACH,WAAW,GAAGI,QAAQ,CAACL,MAAA;EACrE,GAAG,CAACZ,OAAA,EAASO,WAAA,CAAY;EAEzB,MAAMW,UAAA,GAAalB,OAAA,CAAQmB,MAAM,IAAIlB,mBAAA;EACrC,MAAMmB,UAAA,GAAaT,eAAA,CAAgBQ,MAAM,GAAG;EAE5C,MAAME,gBAAA,GAAmB9B,KAAA,CAAM+B,WAAW,CACvCC,MAAA;IACCd,SAAA,CAAUe,OAAO,GAAGD,MAAA;IACpB,IAAIA,MAAA,IAAUL,UAAA,EAAY;MACxBO,UAAA,CAAW;QACTf,cAAA,CAAec,OAAO,EAAEE,KAAA;MAC1B,GAAG;IACL;IACAtB,YAAA,GAAemB,MAAA;EACjB,GACA,CAACL,UAAA,EAAYd,YAAA,CAAa;EAG5B,MAAMuB,iBAAA,GAAoBpC,KAAA,CAAM+B,WAAW,CAAC;IAC1Cb,SAAA,CAAUe,OAAO,GAAG;IACpBhB,cAAA,CAAe;IACfL,aAAA;EACF,GAAG,CAACA,aAAA,CAAc;EAElB,oBACEyB,IAAA,CAACjC,KAAA;IACE,GAAGW,UAAU;IACduB,SAAA,EAAW,GAAGhC,SAAA,IAAaS,UAAA,CAAWuB,SAAS,IAAI,IAAI;IACvD1B,aAAA,EAAewB,iBAAA;IACfvB,YAAA,EAAciB,gBAAA;IACdS,MAAA,EAAQA,CAAC;MAAEC;IAAK,CAAE,kBAChBC,KAAA,CAAC;MAAIH,SAAA,EAAW,GAAGhC,SAAA,WAAoB;iBACpCqB,UAAA,iBACCU,IAAA,CAAC;QACCC,SAAA,EAAW,GAAGhC,SAAA,mBAA4B,CAACuB,UAAA,GAAa,IAAIvB,SAAA,8BAAuC,GAAG,IAAI;kBAE1G,aAAA+B,IAAA,CAAC;UACC,cAAYvB,iBAAA;UACZwB,SAAA,EAAW,GAAGhC,SAAA,gBAAyB;UACvCoC,QAAA,EAAWC,CAAA,IAAM1B,cAAA,CAAe0B,CAAA,CAAEC,MAAM,CAACC,KAAK;UAC9CC,WAAA,EAAahC,iBAAA;UACbiC,GAAA,EAAK5B,cAAA;UACL6B,IAAA,EAAK;UACLH,KAAA,EAAO7B;;uBAIbqB,IAAA,CAAChC,SAAA,CAAU4C,WAAW;kBACnB7B,eAAA,CAAgB8B,GAAG,CAAC,CAAC1B,OAAA,EAAO2B,KAAA;UAC3B,MAAMC,WAAA,GAAcA,CAAA;YAClB,IAAIzC,QAAA,EAAU;cACZA,QAAA,CAASa,OAAA;YACX;YACAgB,KAAA;UACF;UAEA,oBACEH,IAAA,CAAC;YACCC,SAAA,EAAW,GAAGhC,SAAA,SAAkB;YAChC,0BAAwB;YAExB+C,OAAA,EAASD,WAAA;YACTE,SAAA,EAAYX,GAAA;cACV,IAAIA,GAAA,CAAEY,GAAG,KAAK,WAAWZ,GAAA,CAAEY,GAAG,KAAK,KAAK;gBACtCZ,GAAA,CAAEa,cAAc;gBAChBJ,WAAA;cACF;YACF;YACAK,IAAA,EAAK;YACLC,QAAA,EAAU;sBAETlC,OAAA,CAAMmC;aAXF,GAAGnC,OAAA,CAAMC,IAAI,IAAI0B,KAAA,EAAO;QAcnC;;;;AAMZ","ignoreList":[]}