@payloadcms/ui 4.0.0-internal.add4c47 → 4.0.0-internal.af6aad0

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 (717) hide show
  1. package/dist/css/app.css +121 -0
  2. package/dist/css/forms.css +0 -6
  3. package/dist/css/spacing.css +10 -3
  4. package/dist/css/z-index.css +1 -0
  5. package/dist/elements/AddNewRelation/index.css +0 -5
  6. package/dist/elements/AddNewRelation/index.js +2 -2
  7. package/dist/elements/AddNewRelation/index.js.map +1 -1
  8. package/dist/elements/AppHeader/index.css +5 -3
  9. package/dist/elements/AppHeader/index.d.ts +1 -8
  10. package/dist/elements/AppHeader/index.d.ts.map +1 -1
  11. package/dist/elements/AppHeader/index.js +8 -13
  12. package/dist/elements/AppHeader/index.js.map +1 -1
  13. package/dist/elements/ArrayAction/index.d.ts +1 -0
  14. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  15. package/dist/elements/ArrayAction/index.js +45 -32
  16. package/dist/elements/ArrayAction/index.js.map +1 -1
  17. package/dist/elements/BulkUpload/AddFilesView/index.css +10 -4
  18. package/dist/elements/BulkUpload/AddFilesView/index.d.ts.map +1 -1
  19. package/dist/elements/BulkUpload/AddFilesView/index.js +71 -51
  20. package/dist/elements/BulkUpload/AddFilesView/index.js.map +1 -1
  21. package/dist/elements/BulkUpload/EditMany/DrawerContent.js +2 -2
  22. package/dist/elements/BulkUpload/EditMany/DrawerContent.js.map +1 -1
  23. package/dist/elements/Button/index.css +25 -2
  24. package/dist/elements/Button/index.d.ts.map +1 -1
  25. package/dist/elements/Button/index.js +2 -0
  26. package/dist/elements/Button/index.js.map +1 -1
  27. package/dist/elements/Button/types.d.ts +1 -1
  28. package/dist/elements/Button/types.d.ts.map +1 -1
  29. package/dist/elements/Button/types.js.map +1 -1
  30. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts +10 -0
  31. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.d.ts.map +1 -1
  32. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js +65 -3
  33. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.js.map +1 -1
  34. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +345 -1
  35. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +1 -1
  36. package/dist/elements/CodeEditor/index.css +0 -5
  37. package/dist/elements/CommandPalette/index.css +0 -7
  38. package/dist/elements/CopyToClipboard/index.d.ts +1 -0
  39. package/dist/elements/CopyToClipboard/index.d.ts.map +1 -1
  40. package/dist/elements/CopyToClipboard/index.js +10 -8
  41. package/dist/elements/CopyToClipboard/index.js.map +1 -1
  42. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  43. package/dist/elements/CreateDocumentButton/index.js +4 -1
  44. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  45. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  46. package/dist/elements/DatePicker/DatePicker.js +1 -0
  47. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  48. package/dist/elements/DatePicker/index.css +1 -1
  49. package/dist/elements/DefaultListViewTabs/index.css +1 -0
  50. package/dist/elements/DefaultListViewTabs/index.d.ts.map +1 -1
  51. package/dist/elements/DefaultListViewTabs/index.js +84 -62
  52. package/dist/elements/DefaultListViewTabs/index.js.map +1 -1
  53. package/dist/elements/DeleteDocument/index.d.ts.map +1 -1
  54. package/dist/elements/DeleteDocument/index.js +16 -1
  55. package/dist/elements/DeleteDocument/index.js.map +1 -1
  56. package/dist/elements/DocumentDrawer/types.d.ts +1 -1
  57. package/dist/elements/DocumentDrawer/types.d.ts.map +1 -1
  58. package/dist/elements/DocumentDrawer/types.js.map +1 -1
  59. package/dist/elements/Drawer/index.css +10 -4
  60. package/dist/elements/Drawer/types.d.ts +2 -2
  61. package/dist/elements/Drawer/types.d.ts.map +1 -1
  62. package/dist/elements/Drawer/types.js.map +1 -1
  63. package/dist/elements/Dropzone/index.css +10 -4
  64. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js +3 -2
  65. package/dist/elements/DuplicateDocument/SelectLocalesDrawer/index.js.map +1 -1
  66. package/dist/elements/EditMany/DrawerContent.js +2 -2
  67. package/dist/elements/EditMany/DrawerContent.js.map +1 -1
  68. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  69. package/dist/elements/FieldSelect/reduceFieldOptions.js +3 -1
  70. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  71. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +143 -0
  72. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +1 -0
  73. package/dist/elements/FileDetails/StaticFileDetails/index.css +8 -9
  74. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  75. package/dist/elements/FileManager/FileToolbar/index.js +3 -0
  76. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  77. package/dist/elements/FileManager/index.css +0 -30
  78. package/dist/elements/FileManager/index.d.ts.map +1 -1
  79. package/dist/elements/FileManager/index.js +380 -287
  80. package/dist/elements/FileManager/index.js.map +1 -1
  81. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +22 -4
  82. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
  83. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +68 -49
  84. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  85. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.css +100 -16
  86. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
  87. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +97 -137
  88. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  89. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts +1 -1
  90. package/dist/elements/Hierarchy/ColumnBrowser/index.d.ts.map +1 -1
  91. package/dist/elements/Hierarchy/ColumnBrowser/index.js +51 -23
  92. package/dist/elements/Hierarchy/ColumnBrowser/index.js.map +1 -1
  93. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts +26 -3
  94. package/dist/elements/Hierarchy/ColumnBrowser/types.d.ts.map +1 -1
  95. package/dist/elements/Hierarchy/ColumnBrowser/types.js.map +1 -1
  96. package/dist/elements/Hierarchy/CreateNewButton/index.css +9 -0
  97. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts +9 -0
  98. package/dist/elements/Hierarchy/CreateNewButton/index.d.ts.map +1 -0
  99. package/dist/elements/Hierarchy/CreateNewButton/index.js +111 -0
  100. package/dist/elements/Hierarchy/CreateNewButton/index.js.map +1 -0
  101. package/dist/elements/Hierarchy/DocHeaderButton/index.d.ts.map +1 -1
  102. package/dist/elements/Hierarchy/DocHeaderButton/index.js +6 -1
  103. package/dist/elements/Hierarchy/DocHeaderButton/index.js.map +1 -1
  104. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js +1 -3
  105. package/dist/elements/Hierarchy/DocHeaderButton/index.server.js.map +1 -1
  106. package/dist/elements/Hierarchy/Field/index.client.d.ts +5 -0
  107. package/dist/elements/Hierarchy/Field/index.client.d.ts.map +1 -1
  108. package/dist/elements/Hierarchy/Field/index.client.js +120 -95
  109. package/dist/elements/Hierarchy/Field/index.client.js.map +1 -1
  110. package/dist/elements/Hierarchy/Field/index.css +3 -34
  111. package/dist/elements/Hierarchy/Modal/Footer/index.css +45 -0
  112. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts +28 -0
  113. package/dist/elements/Hierarchy/Modal/Footer/index.d.ts.map +1 -0
  114. package/dist/elements/Hierarchy/Modal/Footer/index.js +166 -0
  115. package/dist/elements/Hierarchy/Modal/Footer/index.js.map +1 -0
  116. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts +18 -4
  117. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.d.ts.map +1 -1
  118. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js +88 -24
  119. package/dist/elements/Hierarchy/Modal/fetchAncestorPath.js.map +1 -1
  120. package/dist/elements/Hierarchy/Modal/index.css +4 -53
  121. package/dist/elements/Hierarchy/Modal/index.d.ts +5 -2
  122. package/dist/elements/Hierarchy/Modal/index.d.ts.map +1 -1
  123. package/dist/elements/Hierarchy/Modal/index.js +136 -99
  124. package/dist/elements/Hierarchy/Modal/index.js.map +1 -1
  125. package/dist/elements/Hierarchy/Modal/types.d.ts +15 -0
  126. package/dist/elements/Hierarchy/Modal/types.d.ts.map +1 -1
  127. package/dist/elements/Hierarchy/Modal/types.js.map +1 -1
  128. package/dist/elements/Hierarchy/MoveMany/index.d.ts +7 -3
  129. package/dist/elements/Hierarchy/MoveMany/index.d.ts.map +1 -1
  130. package/dist/elements/Hierarchy/MoveMany/index.js +43 -170
  131. package/dist/elements/Hierarchy/MoveMany/index.js.map +1 -1
  132. package/dist/elements/Hierarchy/Search/index.css +2 -9
  133. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
  134. package/dist/elements/Hierarchy/Search/index.js +6 -73
  135. package/dist/elements/Hierarchy/Search/index.js.map +1 -1
  136. package/dist/elements/Hierarchy/Search/types.d.ts +2 -6
  137. package/dist/elements/Hierarchy/Search/types.d.ts.map +1 -1
  138. package/dist/elements/Hierarchy/Search/types.js.map +1 -1
  139. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts +0 -4
  140. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.d.ts.map +1 -1
  141. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js +101 -166
  142. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.js.map +1 -1
  143. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.d.ts.map +1 -1
  144. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js +3 -21
  145. package/dist/elements/Hierarchy/Tree/HierarchySidebarTab.server.js.map +1 -1
  146. package/dist/elements/Hierarchy/Tree/LoadMore/index.css +3 -3
  147. package/dist/elements/Hierarchy/Tree/TreeNode/index.css +59 -30
  148. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts +1 -1
  149. package/dist/elements/Hierarchy/Tree/TreeNode/index.d.ts.map +1 -1
  150. package/dist/elements/Hierarchy/Tree/TreeNode/index.js +54 -10
  151. package/dist/elements/Hierarchy/Tree/TreeNode/index.js.map +1 -1
  152. package/dist/elements/Hierarchy/Tree/index.css +8 -9
  153. package/dist/elements/Hierarchy/Tree/index.d.ts.map +1 -1
  154. package/dist/elements/Hierarchy/Tree/index.js +29 -47
  155. package/dist/elements/Hierarchy/Tree/index.js.map +1 -1
  156. package/dist/elements/Hierarchy/Tree/types.d.ts +9 -1
  157. package/dist/elements/Hierarchy/Tree/types.d.ts.map +1 -1
  158. package/dist/elements/Hierarchy/Tree/types.js.map +1 -1
  159. package/dist/elements/Hierarchy/Tree/useChildren.d.ts.map +1 -1
  160. package/dist/elements/Hierarchy/Tree/useChildren.js +11 -1
  161. package/dist/elements/Hierarchy/Tree/useChildren.js.map +1 -1
  162. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts +22 -0
  163. package/dist/elements/Hierarchy/getFolderHierarchySlug.d.ts.map +1 -0
  164. package/dist/elements/Hierarchy/getFolderHierarchySlug.js +17 -0
  165. package/dist/elements/Hierarchy/getFolderHierarchySlug.js.map +1 -0
  166. package/dist/elements/Hierarchy/move/moveDocuments.d.ts +34 -0
  167. package/dist/elements/Hierarchy/move/moveDocuments.d.ts.map +1 -0
  168. package/dist/elements/Hierarchy/move/moveDocuments.js +94 -0
  169. package/dist/elements/Hierarchy/move/moveDocuments.js.map +1 -0
  170. package/dist/elements/IDLabel/index.css +6 -0
  171. package/dist/elements/IDLabel/index.d.ts +1 -1
  172. package/dist/elements/IDLabel/index.d.ts.map +1 -1
  173. package/dist/elements/IDLabel/index.js +16 -21
  174. package/dist/elements/IDLabel/index.js.map +1 -1
  175. package/dist/elements/InputStepper/index.css +0 -1
  176. package/dist/elements/ListControls/index.d.ts.map +1 -1
  177. package/dist/elements/ListControls/index.js +3 -2
  178. package/dist/elements/ListControls/index.js.map +1 -1
  179. package/dist/elements/ListControls/types.d.ts +4 -0
  180. package/dist/elements/ListControls/types.d.ts.map +1 -1
  181. package/dist/elements/ListControls/types.js.map +1 -1
  182. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts +1 -7
  183. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.d.ts.map +1 -1
  184. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js +26 -32
  185. package/dist/elements/ListHeader/TitleActions/ListBulkUploadButton.js.map +1 -1
  186. package/dist/elements/Locked/index.css +0 -8
  187. package/dist/elements/Locked/index.d.ts.map +1 -1
  188. package/dist/elements/Locked/index.js +70 -64
  189. package/dist/elements/Locked/index.js.map +1 -1
  190. package/dist/elements/Nav/NavSidebarToggle/index.js +1 -1
  191. package/dist/elements/Nav/NavSidebarToggle/index.js.map +1 -1
  192. package/dist/elements/Nav/NavWrapper/index.d.ts +1 -0
  193. package/dist/elements/Nav/NavWrapper/index.d.ts.map +1 -1
  194. package/dist/elements/Nav/NavWrapper/index.js +12 -18
  195. package/dist/elements/Nav/NavWrapper/index.js.map +1 -1
  196. package/dist/elements/Nav/SidebarTabs/index.client.d.ts.map +1 -1
  197. package/dist/elements/Nav/SidebarTabs/index.client.js +12 -5
  198. package/dist/elements/Nav/SidebarTabs/index.client.js.map +1 -1
  199. package/dist/elements/Nav/SidebarTabs/index.css +1 -7
  200. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts +1 -0
  201. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.d.ts.map +1 -1
  202. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +2 -1
  203. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  204. package/dist/elements/Nav/context.d.ts +0 -1
  205. package/dist/elements/Nav/context.d.ts.map +1 -1
  206. package/dist/elements/Nav/context.js +92 -67
  207. package/dist/elements/Nav/context.js.map +1 -1
  208. package/dist/elements/Nav/index.css +47 -42
  209. package/dist/elements/Nav/index.d.ts +4 -0
  210. package/dist/elements/Nav/index.d.ts.map +1 -1
  211. package/dist/elements/Nav/index.js +16 -1
  212. package/dist/elements/Nav/index.js.map +1 -1
  213. package/dist/elements/NavGroup/index.css +29 -16
  214. package/dist/elements/Popup/PopupButtonList/index.css +33 -17
  215. package/dist/elements/Popup/index.css +6 -0
  216. package/dist/elements/Popup/index.d.ts +10 -0
  217. package/dist/elements/Popup/index.d.ts.map +1 -1
  218. package/dist/elements/Popup/index.js +13 -6
  219. package/dist/elements/Popup/index.js.map +1 -1
  220. package/dist/elements/PreviewButton/index.d.ts +1 -2
  221. package/dist/elements/PreviewButton/index.d.ts.map +1 -1
  222. package/dist/elements/PreviewButton/index.js +11 -5
  223. package/dist/elements/PreviewButton/index.js.map +1 -1
  224. package/dist/elements/PreviewSizes/index.css +8 -9
  225. package/dist/elements/PublishButton/ScheduleDrawer/index.js +1 -1
  226. package/dist/elements/PublishButton/ScheduleDrawer/index.js.map +1 -1
  227. package/dist/elements/QueryPresets/QueryPresetBar/index.js +1 -3
  228. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  229. package/dist/elements/ReactSelect/ClearIndicator/index.css +0 -1
  230. package/dist/elements/ReactSelect/MultiValue/index.css +0 -1
  231. package/dist/elements/ReactSelect/index.css +0 -3
  232. package/dist/elements/ReactSelect/types.d.ts +5 -0
  233. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  234. package/dist/elements/ReactSelect/types.js.map +1 -1
  235. package/dist/elements/RelationshipTable/Pagination.d.ts +0 -1
  236. package/dist/elements/RelationshipTable/Pagination.d.ts.map +1 -1
  237. package/dist/elements/RelationshipTable/Pagination.js +27 -77
  238. package/dist/elements/RelationshipTable/Pagination.js.map +1 -1
  239. package/dist/elements/RelationshipTable/index.d.ts +1 -0
  240. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  241. package/dist/elements/RelationshipTable/index.js +41 -5
  242. package/dist/elements/RelationshipTable/index.js.map +1 -1
  243. package/dist/elements/RenderTitle/index.css +4 -0
  244. package/dist/elements/RenderTitle/index.d.ts.map +1 -1
  245. package/dist/elements/RenderTitle/index.js +18 -13
  246. package/dist/elements/RenderTitle/index.js.map +1 -1
  247. package/dist/elements/SegmentedControl/index.css +58 -0
  248. package/dist/elements/SegmentedControl/index.d.ts +19 -0
  249. package/dist/elements/SegmentedControl/index.d.ts.map +1 -0
  250. package/dist/elements/SegmentedControl/index.js +104 -0
  251. package/dist/elements/SegmentedControl/index.js.map +1 -0
  252. package/dist/elements/SelectAll/index.d.ts.map +1 -1
  253. package/dist/elements/SelectAll/index.js +1 -2
  254. package/dist/elements/SelectAll/index.js.map +1 -1
  255. package/dist/elements/SelectRow/index.d.ts +4 -3
  256. package/dist/elements/SelectRow/index.d.ts.map +1 -1
  257. package/dist/elements/SelectRow/index.js +11 -9
  258. package/dist/elements/SelectRow/index.js.map +1 -1
  259. package/dist/elements/SidebarRow/index.css +1 -5
  260. package/dist/elements/SidebarToggle/index.css +3 -18
  261. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  262. package/dist/elements/SortColumn/index.js +42 -38
  263. package/dist/elements/SortColumn/index.js.map +1 -1
  264. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  265. package/dist/elements/SortHeader/index.js +29 -26
  266. package/dist/elements/SortHeader/index.js.map +1 -1
  267. package/dist/elements/StepNav/DropTarget/index.css +20 -0
  268. package/dist/elements/StepNav/DropTarget/index.d.ts +16 -0
  269. package/dist/elements/StepNav/DropTarget/index.d.ts.map +1 -0
  270. package/dist/elements/StepNav/DropTarget/index.js +71 -0
  271. package/dist/elements/StepNav/DropTarget/index.js.map +1 -0
  272. package/dist/elements/StepNav/index.css +64 -14
  273. package/dist/elements/StepNav/index.d.ts.map +1 -1
  274. package/dist/elements/StepNav/index.js +147 -69
  275. package/dist/elements/StepNav/index.js.map +1 -1
  276. package/dist/elements/StepNav/types.d.ts +6 -0
  277. package/dist/elements/StepNav/types.d.ts.map +1 -1
  278. package/dist/elements/StepNav/types.js.map +1 -1
  279. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.css +5 -7
  280. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.d.ts.map +1 -1
  281. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js +14 -3
  282. package/dist/elements/Table/DefaultCell/fields/Hierarchy/index.js.map +1 -1
  283. package/dist/elements/Table/DefaultCell/index.d.ts.map +1 -1
  284. package/dist/elements/Table/DefaultCell/index.js +3 -11
  285. package/dist/elements/Table/DefaultCell/index.js.map +1 -1
  286. package/dist/elements/Table/OrderableRow.d.ts +3 -1
  287. package/dist/elements/Table/OrderableRow.d.ts.map +1 -1
  288. package/dist/elements/Table/OrderableRow.js +17 -1
  289. package/dist/elements/Table/OrderableRow.js.map +1 -1
  290. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  291. package/dist/elements/Table/OrderableTable.js +19 -2
  292. package/dist/elements/Table/OrderableTable.js.map +1 -1
  293. package/dist/elements/TableSection/index.css +0 -1
  294. package/dist/elements/Tooltip/index.css +15 -34
  295. package/dist/elements/Tooltip/index.d.ts +11 -3
  296. package/dist/elements/Tooltip/index.d.ts.map +1 -1
  297. package/dist/elements/Tooltip/index.js +151 -85
  298. package/dist/elements/Tooltip/index.js.map +1 -1
  299. package/dist/elements/Upload/UploadFromURLModal/index.d.ts +1 -1
  300. package/dist/elements/Upload/UploadFromURLModal/index.d.ts.map +1 -1
  301. package/dist/elements/Upload/UploadFromURLModal/index.js.map +1 -1
  302. package/dist/elements/Upload/index.css +39 -37
  303. package/dist/elements/Upload/index.d.ts.map +1 -1
  304. package/dist/elements/Upload/index.js +37 -99
  305. package/dist/elements/Upload/index.js.map +1 -1
  306. package/dist/elements/Upload/usePasteFromClipboard.d.ts +14 -0
  307. package/dist/elements/Upload/usePasteFromClipboard.d.ts.map +1 -0
  308. package/dist/elements/Upload/usePasteFromClipboard.js +93 -0
  309. package/dist/elements/Upload/usePasteFromClipboard.js.map +1 -0
  310. package/dist/elements/Upload/useUploadFromUrl.d.ts +20 -0
  311. package/dist/elements/Upload/useUploadFromUrl.d.ts.map +1 -0
  312. package/dist/elements/Upload/useUploadFromUrl.js +201 -0
  313. package/dist/elements/Upload/useUploadFromUrl.js.map +1 -0
  314. package/dist/elements/UploadDropzoneContent/index.css +31 -0
  315. package/dist/elements/UploadDropzoneContent/index.d.ts +17 -0
  316. package/dist/elements/UploadDropzoneContent/index.d.ts.map +1 -0
  317. package/dist/elements/UploadDropzoneContent/index.js +62 -0
  318. package/dist/elements/UploadDropzoneContent/index.js.map +1 -0
  319. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts +18 -0
  320. package/dist/elements/UserMenu/HoverSubmenuGroup.d.ts.map +1 -0
  321. package/dist/elements/UserMenu/HoverSubmenuGroup.js +38 -0
  322. package/dist/elements/UserMenu/HoverSubmenuGroup.js.map +1 -0
  323. package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
  324. package/dist/elements/UserMenu/LanguageMenu/index.js +83 -39
  325. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
  326. package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
  327. package/dist/elements/UserMenu/SettingsMenu/index.js +57 -21
  328. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
  329. package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
  330. package/dist/elements/UserMenu/ThemeMenu/index.js +83 -39
  331. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
  332. package/dist/elements/UserMenu/index.css +32 -2
  333. package/dist/elements/UserMenu/index.d.ts +1 -0
  334. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  335. package/dist/elements/UserMenu/index.js +77 -51
  336. package/dist/elements/UserMenu/index.js.map +1 -1
  337. package/dist/elements/UserMenu/useHoverSubmenu.d.ts +21 -0
  338. package/dist/elements/UserMenu/useHoverSubmenu.d.ts.map +1 -0
  339. package/dist/elements/UserMenu/useHoverSubmenu.js +260 -0
  340. package/dist/elements/UserMenu/useHoverSubmenu.js.map +1 -0
  341. package/dist/elements/ViewModeToggle/index.d.ts +8 -0
  342. package/dist/elements/ViewModeToggle/index.d.ts.map +1 -0
  343. package/dist/elements/ViewModeToggle/index.js +29 -0
  344. package/dist/elements/ViewModeToggle/index.js.map +1 -0
  345. package/dist/elements/WhereBuilder/conditionValue.d.ts +32 -0
  346. package/dist/elements/WhereBuilder/conditionValue.d.ts.map +1 -0
  347. package/dist/elements/WhereBuilder/conditionValue.js +32 -0
  348. package/dist/elements/WhereBuilder/conditionValue.js.map +1 -0
  349. package/dist/elements/WhereBuilder/conditionValue.spec.js +65 -0
  350. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +1 -0
  351. package/dist/elements/WhereBuilder/index.d.ts.map +1 -1
  352. package/dist/elements/WhereBuilder/index.js +15 -4
  353. package/dist/elements/WhereBuilder/index.js.map +1 -1
  354. package/dist/exports/client/index.d.ts +9 -1
  355. package/dist/exports/client/index.d.ts.map +1 -1
  356. package/dist/exports/client/index.js +1 -1
  357. package/dist/exports/client/index.js.map +3 -3
  358. package/dist/fields/Array/ArrayRow.d.ts +1 -0
  359. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  360. package/dist/fields/Array/ArrayRow.js +2 -0
  361. package/dist/fields/Array/ArrayRow.js.map +1 -1
  362. package/dist/fields/Array/index.d.ts.map +1 -1
  363. package/dist/fields/Array/index.js +38 -10
  364. package/dist/fields/Array/index.js.map +1 -1
  365. package/dist/fields/Blocks/BlockRow.d.ts +1 -0
  366. package/dist/fields/Blocks/BlockRow.d.ts.map +1 -1
  367. package/dist/fields/Blocks/BlockRow.js +2 -0
  368. package/dist/fields/Blocks/BlockRow.js.map +1 -1
  369. package/dist/fields/Blocks/RowActions.d.ts +1 -0
  370. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  371. package/dist/fields/Blocks/RowActions.js +22 -19
  372. package/dist/fields/Blocks/RowActions.js.map +1 -1
  373. package/dist/fields/Blocks/index.d.ts.map +1 -1
  374. package/dist/fields/Blocks/index.js +38 -10
  375. package/dist/fields/Blocks/index.js.map +1 -1
  376. package/dist/fields/Checkbox/Input.d.ts +4 -2
  377. package/dist/fields/Checkbox/Input.d.ts.map +1 -1
  378. package/dist/fields/Checkbox/Input.js +136 -148
  379. package/dist/fields/Checkbox/Input.js.map +1 -1
  380. package/dist/fields/Checkbox/index.css +163 -186
  381. package/dist/fields/FieldError/index.css +0 -9
  382. package/dist/fields/FieldError/index.d.ts.map +1 -1
  383. package/dist/fields/FieldError/index.js +19 -9
  384. package/dist/fields/FieldError/index.js.map +1 -1
  385. package/dist/fields/Join/index.css +9 -0
  386. package/dist/fields/Join/index.d.ts.map +1 -1
  387. package/dist/fields/Join/index.js +13 -9
  388. package/dist/fields/Join/index.js.map +1 -1
  389. package/dist/fields/RadioGroup/index.css +0 -7
  390. package/dist/fields/Relationship/Input.d.ts.map +1 -1
  391. package/dist/fields/Relationship/Input.js +53 -17
  392. package/dist/fields/Relationship/Input.js.map +1 -1
  393. package/dist/fields/Relationship/optionsReducer.d.ts.map +1 -1
  394. package/dist/fields/Relationship/optionsReducer.js +2 -0
  395. package/dist/fields/Relationship/optionsReducer.js.map +1 -1
  396. package/dist/fields/Relationship/types.d.ts +24 -0
  397. package/dist/fields/Relationship/types.d.ts.map +1 -1
  398. package/dist/fields/Relationship/types.js.map +1 -1
  399. package/dist/fields/Slug/index.css +0 -1
  400. package/dist/fields/Slug/index.d.ts.map +1 -1
  401. package/dist/fields/Slug/index.js +80 -125
  402. package/dist/fields/Slug/index.js.map +1 -1
  403. package/dist/fields/Upload/Input.d.ts.map +1 -1
  404. package/dist/fields/Upload/Input.js +44 -16
  405. package/dist/fields/Upload/Input.js.map +1 -1
  406. package/dist/fields/Upload/Input.spec.js +241 -0
  407. package/dist/fields/Upload/Input.spec.js.map +1 -0
  408. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  409. package/dist/forms/Form/fieldReducer.js +3 -1
  410. package/dist/forms/Form/fieldReducer.js.map +1 -1
  411. package/dist/forms/Form/index.d.ts.map +1 -1
  412. package/dist/forms/Form/index.js +9 -1
  413. package/dist/forms/Form/index.js.map +1 -1
  414. package/dist/forms/Form/types.d.ts +1 -1
  415. package/dist/forms/Form/types.d.ts.map +1 -1
  416. package/dist/forms/Form/types.js.map +1 -1
  417. package/dist/forms/WatchChildErrors/index.d.ts.map +1 -1
  418. package/dist/forms/WatchChildErrors/index.js +2 -2
  419. package/dist/forms/WatchChildErrors/index.js.map +1 -1
  420. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  421. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +2 -1
  422. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  423. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  424. package/dist/forms/fieldSchemasToFormState/renderField.js +1 -3
  425. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  426. package/dist/icons/CollapseLayers/index.css +5 -0
  427. package/dist/icons/CollapseLayers/index.d.ts +7 -0
  428. package/dist/icons/CollapseLayers/index.d.ts.map +1 -0
  429. package/dist/icons/CollapseLayers/index.js +23 -0
  430. package/dist/icons/CollapseLayers/index.js.map +1 -0
  431. package/dist/icons/Edit/index.d.ts +0 -1
  432. package/dist/icons/Edit/index.d.ts.map +1 -1
  433. package/dist/icons/Edit/index.js +4 -4
  434. package/dist/icons/Edit/index.js.map +1 -1
  435. package/dist/icons/Table/index.css +5 -0
  436. package/dist/icons/Table/index.d.ts +7 -0
  437. package/dist/icons/Table/index.d.ts.map +1 -0
  438. package/dist/icons/Table/index.js +25 -0
  439. package/dist/icons/Table/index.js.map +1 -0
  440. package/dist/layouts/Root/index.d.ts +1 -1
  441. package/dist/layouts/Root/index.d.ts.map +1 -1
  442. package/dist/layouts/Root/index.js +8 -2
  443. package/dist/layouts/Root/index.js.map +1 -1
  444. package/dist/providers/Actions/index.d.ts +1 -0
  445. package/dist/providers/Actions/index.d.ts.map +1 -1
  446. package/dist/providers/Actions/index.js +43 -11
  447. package/dist/providers/Actions/index.js.map +1 -1
  448. package/dist/providers/Auth/AuthSessionDebug/index.css +48 -0
  449. package/dist/providers/Auth/AuthSessionDebug/index.d.ts +13 -0
  450. package/dist/providers/Auth/AuthSessionDebug/index.d.ts.map +1 -0
  451. package/dist/providers/Auth/AuthSessionDebug/index.js +93 -0
  452. package/dist/providers/Auth/AuthSessionDebug/index.js.map +1 -0
  453. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts +21 -0
  454. package/dist/providers/Auth/AuthSessionDebug/utilities.d.ts.map +1 -0
  455. package/dist/providers/Auth/AuthSessionDebug/utilities.js +53 -0
  456. package/dist/providers/Auth/AuthSessionDebug/utilities.js.map +1 -0
  457. package/dist/providers/Auth/authSessionRequests.d.ts +27 -0
  458. package/dist/providers/Auth/authSessionRequests.d.ts.map +1 -0
  459. package/dist/providers/Auth/authSessionRequests.js +119 -0
  460. package/dist/providers/Auth/authSessionRequests.js.map +1 -0
  461. package/dist/providers/Auth/authSessionRequests.spec.js +121 -0
  462. package/dist/providers/Auth/authSessionRequests.spec.js.map +1 -0
  463. package/dist/providers/Auth/index.d.ts +2 -56
  464. package/dist/providers/Auth/index.d.ts.map +1 -1
  465. package/dist/providers/Auth/index.js +283 -135
  466. package/dist/providers/Auth/index.js.map +1 -1
  467. package/dist/providers/Auth/sessionActivity.d.ts +23 -0
  468. package/dist/providers/Auth/sessionActivity.d.ts.map +1 -0
  469. package/dist/providers/Auth/sessionActivity.js +49 -0
  470. package/dist/providers/Auth/sessionActivity.js.map +1 -0
  471. package/dist/providers/Auth/sessionActivity.spec.js +44 -0
  472. package/dist/providers/Auth/sessionActivity.spec.js.map +1 -0
  473. package/dist/providers/Auth/sessionTiming.d.ts +11 -0
  474. package/dist/providers/Auth/sessionTiming.d.ts.map +1 -0
  475. package/dist/providers/Auth/sessionTiming.js +18 -0
  476. package/dist/providers/Auth/sessionTiming.js.map +1 -0
  477. package/dist/providers/Auth/tabSessionSync/index.d.ts +17 -0
  478. package/dist/providers/Auth/tabSessionSync/index.d.ts.map +1 -0
  479. package/dist/providers/Auth/tabSessionSync/index.js +263 -0
  480. package/dist/providers/Auth/tabSessionSync/index.js.map +1 -0
  481. package/dist/providers/Auth/tabSessionSync/index.spec.js +463 -0
  482. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +1 -0
  483. package/dist/providers/Auth/tabSessionSync/types.d.ts +107 -0
  484. package/dist/providers/Auth/tabSessionSync/types.d.ts.map +1 -0
  485. package/dist/providers/Auth/tabSessionSync/types.js +6 -0
  486. package/dist/providers/Auth/tabSessionSync/types.js.map +1 -0
  487. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts +11 -0
  488. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.d.ts.map +1 -0
  489. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js +90 -0
  490. package/dist/providers/Auth/tabSessionSync/useTabSessionSync.js.map +1 -0
  491. package/dist/providers/Auth/tabSessionSync/utilities.d.ts +26 -0
  492. package/dist/providers/Auth/tabSessionSync/utilities.d.ts.map +1 -0
  493. package/dist/providers/Auth/tabSessionSync/utilities.js +159 -0
  494. package/dist/providers/Auth/tabSessionSync/utilities.js.map +1 -0
  495. package/dist/providers/Auth/types.d.ts +65 -0
  496. package/dist/providers/Auth/types.d.ts.map +1 -0
  497. package/dist/providers/Auth/types.js +2 -0
  498. package/dist/providers/Auth/types.js.map +1 -0
  499. package/dist/providers/Auth/useAuthSessionTimers.d.ts +26 -0
  500. package/dist/providers/Auth/useAuthSessionTimers.d.ts.map +1 -0
  501. package/dist/providers/Auth/useAuthSessionTimers.js +203 -0
  502. package/dist/providers/Auth/useAuthSessionTimers.js.map +1 -0
  503. package/dist/providers/Auth/useAuthSessionTimers.spec.js +311 -0
  504. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +1 -0
  505. package/dist/providers/DocumentTitle/index.d.ts +1 -0
  506. package/dist/providers/DocumentTitle/index.d.ts.map +1 -1
  507. package/dist/providers/DocumentTitle/index.js +2 -0
  508. package/dist/providers/DocumentTitle/index.js.map +1 -1
  509. package/dist/providers/Embed/index.d.ts +24 -0
  510. package/dist/providers/Embed/index.d.ts.map +1 -0
  511. package/dist/providers/Embed/index.js +105 -0
  512. package/dist/providers/Embed/index.js.map +1 -0
  513. package/dist/providers/FormErrorHandler/index.d.ts +24 -0
  514. package/dist/providers/FormErrorHandler/index.d.ts.map +1 -0
  515. package/dist/providers/FormErrorHandler/index.js +6 -0
  516. package/dist/providers/FormErrorHandler/index.js.map +1 -0
  517. package/dist/providers/Hierarchy/index.d.ts.map +1 -1
  518. package/dist/providers/Hierarchy/index.js +53 -24
  519. package/dist/providers/Hierarchy/index.js.map +1 -1
  520. package/dist/providers/Hierarchy/types.d.ts +2 -0
  521. package/dist/providers/Hierarchy/types.d.ts.map +1 -1
  522. package/dist/providers/Hierarchy/types.js.map +1 -1
  523. package/dist/providers/HierarchyDnd/index.css +51 -0
  524. package/dist/providers/HierarchyDnd/index.d.ts +21 -0
  525. package/dist/providers/HierarchyDnd/index.d.ts.map +1 -0
  526. package/dist/providers/HierarchyDnd/index.js +163 -0
  527. package/dist/providers/HierarchyDnd/index.js.map +1 -0
  528. package/dist/providers/HierarchyDnd/types.d.ts +56 -0
  529. package/dist/providers/HierarchyDnd/types.d.ts.map +1 -0
  530. package/dist/providers/HierarchyDnd/types.js +21 -0
  531. package/dist/providers/HierarchyDnd/types.js.map +1 -0
  532. package/dist/providers/Locale/index.d.ts.map +1 -1
  533. package/dist/providers/Locale/index.js +41 -36
  534. package/dist/providers/Locale/index.js.map +1 -1
  535. package/dist/providers/Root/index.d.ts +1 -0
  536. package/dist/providers/Root/index.d.ts.map +1 -1
  537. package/dist/providers/Root/index.js +37 -31
  538. package/dist/providers/Root/index.js.map +1 -1
  539. package/dist/providers/RouteTransition/ProgressBar/index.js +4 -1
  540. package/dist/providers/RouteTransition/ProgressBar/index.js.map +1 -1
  541. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +44 -0
  542. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +1 -0
  543. package/dist/providers/RouteTransition/index.d.ts +2 -0
  544. package/dist/providers/RouteTransition/index.d.ts.map +1 -1
  545. package/dist/providers/RouteTransition/index.js +42 -14
  546. package/dist/providers/RouteTransition/index.js.map +1 -1
  547. package/dist/providers/SidebarTabs/index.d.ts +3 -2
  548. package/dist/providers/SidebarTabs/index.d.ts.map +1 -1
  549. package/dist/providers/SidebarTabs/index.js.map +1 -1
  550. package/dist/providers/Theme/index.d.ts +3 -0
  551. package/dist/providers/Theme/index.d.ts.map +1 -1
  552. package/dist/providers/Theme/index.js +107 -95
  553. package/dist/providers/Theme/index.js.map +1 -1
  554. package/dist/styles.css +12 -10
  555. package/dist/templates/Default/Wrapper/index.css +2 -1
  556. package/dist/templates/Default/Wrapper/index.d.ts +2 -0
  557. package/dist/templates/Default/Wrapper/index.d.ts.map +1 -1
  558. package/dist/templates/Default/Wrapper/index.js +12 -6
  559. package/dist/templates/Default/Wrapper/index.js.map +1 -1
  560. package/dist/templates/Default/index.css +3 -1
  561. package/dist/templates/Default/index.d.ts +1 -0
  562. package/dist/templates/Default/index.d.ts.map +1 -1
  563. package/dist/templates/Default/index.js +19 -15
  564. package/dist/templates/Default/index.js.map +1 -1
  565. package/dist/utilities/combineFieldLabel.d.ts.map +1 -1
  566. package/dist/utilities/combineFieldLabel.js +5 -1
  567. package/dist/utilities/combineFieldLabel.js.map +1 -1
  568. package/dist/utilities/formatMetadata.d.ts.map +1 -1
  569. package/dist/utilities/formatMetadata.js +0 -5
  570. package/dist/utilities/formatMetadata.js.map +1 -1
  571. package/dist/utilities/generateFieldID.d.ts +1 -1
  572. package/dist/utilities/generateFieldID.d.ts.map +1 -1
  573. package/dist/utilities/generateFieldID.js +2 -2
  574. package/dist/utilities/generateFieldID.js.map +1 -1
  575. package/dist/utilities/getFilesFromClipboard.d.ts +10 -0
  576. package/dist/utilities/getFilesFromClipboard.d.ts.map +1 -0
  577. package/dist/utilities/getFilesFromClipboard.js +49 -0
  578. package/dist/utilities/getFilesFromClipboard.js.map +1 -0
  579. package/dist/utilities/getRequestEmbed.d.ts +14 -0
  580. package/dist/utilities/getRequestEmbed.d.ts.map +1 -0
  581. package/dist/utilities/getRequestEmbed.js +10 -0
  582. package/dist/utilities/getRequestEmbed.js.map +1 -0
  583. package/dist/utilities/renderTable.d.ts.map +1 -1
  584. package/dist/utilities/renderTable.js +18 -2
  585. package/dist/utilities/renderTable.js.map +1 -1
  586. package/dist/utilities/slugify.d.ts.map +1 -1
  587. package/dist/utilities/slugify.js +50 -6
  588. package/dist/utilities/slugify.js.map +1 -1
  589. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  590. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +3 -2
  591. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  592. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.d.ts.map +1 -1
  593. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js +7 -7
  594. package/dist/views/Dashboard/Default/ModularDashboard/WidgetEditControl.js.map +1 -1
  595. package/dist/views/Dashboard/Default/ModularDashboard/index.client.d.ts.map +1 -1
  596. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +104 -66
  597. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  598. package/dist/views/Dashboard/Default/ModularDashboard/index.css +29 -144
  599. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js +4 -4
  600. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/RenderWidget.js.map +1 -1
  601. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +10 -10
  602. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  603. package/dist/views/Edit/SetDocumentTitle/index.d.ts.map +1 -1
  604. package/dist/views/Edit/SetDocumentTitle/index.js +4 -1
  605. package/dist/views/Edit/SetDocumentTitle/index.js.map +1 -1
  606. package/dist/views/Edit/index.d.ts.map +1 -1
  607. package/dist/views/Edit/index.js +3 -2
  608. package/dist/views/Edit/index.js.map +1 -1
  609. package/dist/views/HierarchyList/DocumentListSelection/index.d.ts.map +1 -1
  610. package/dist/views/HierarchyList/DocumentListSelection/index.js +100 -105
  611. package/dist/views/HierarchyList/DocumentListSelection/index.js.map +1 -1
  612. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.css +216 -0
  613. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts +20 -0
  614. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.d.ts.map +1 -0
  615. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js +182 -0
  616. package/dist/views/HierarchyList/HierarchyCards/DocumentCard/index.js.map +1 -0
  617. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.css +38 -0
  618. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts +15 -0
  619. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.d.ts.map +1 -0
  620. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js +85 -0
  621. package/dist/views/HierarchyList/HierarchyCards/DragPreviewItem/index.js.map +1 -0
  622. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.css +98 -0
  623. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts +27 -0
  624. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.d.ts.map +1 -0
  625. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js +84 -0
  626. package/dist/views/HierarchyList/HierarchyCards/FolderCard/index.js.map +1 -0
  627. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts +19 -0
  628. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.d.ts.map +1 -0
  629. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js +100 -0
  630. package/dist/views/HierarchyList/HierarchyCards/HierarchyCard/index.js.map +1 -0
  631. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts +53 -0
  632. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.d.ts.map +1 -0
  633. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js +145 -0
  634. package/dist/views/HierarchyList/HierarchyCards/PlaneItem/index.js.map +1 -0
  635. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts +8 -0
  636. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.d.ts.map +1 -0
  637. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js +21 -0
  638. package/dist/views/HierarchyList/HierarchyCards/getThumbnailSrc.js.map +1 -0
  639. package/dist/views/HierarchyList/HierarchyCards/index.css +115 -0
  640. package/dist/views/HierarchyList/HierarchyCards/index.d.ts +80 -0
  641. package/dist/views/HierarchyList/HierarchyCards/index.d.ts.map +1 -0
  642. package/dist/views/HierarchyList/HierarchyCards/index.js +457 -0
  643. package/dist/views/HierarchyList/HierarchyCards/index.js.map +1 -0
  644. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts +6 -1
  645. package/dist/views/HierarchyList/HierarchyListHeader/index.d.ts.map +1 -1
  646. package/dist/views/HierarchyList/HierarchyListHeader/index.js +10 -8
  647. package/dist/views/HierarchyList/HierarchyListHeader/index.js.map +1 -1
  648. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.d.ts.map +1 -1
  649. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js +11 -10
  650. package/dist/views/HierarchyList/HierarchyTable/ChildNameCell.js.map +1 -1
  651. package/dist/views/HierarchyList/HierarchyTable/SlotTable.d.ts.map +1 -1
  652. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js +3 -6
  653. package/dist/views/HierarchyList/HierarchyTable/SlotTable.js.map +1 -1
  654. package/dist/views/HierarchyList/HierarchyTable/index.css +51 -0
  655. package/dist/views/HierarchyList/HierarchyTable/index.d.ts +13 -1
  656. package/dist/views/HierarchyList/HierarchyTable/index.d.ts.map +1 -1
  657. package/dist/views/HierarchyList/HierarchyTable/index.js +156 -38
  658. package/dist/views/HierarchyList/HierarchyTable/index.js.map +1 -1
  659. package/dist/views/HierarchyList/HierarchyTable/types.d.ts +6 -0
  660. package/dist/views/HierarchyList/HierarchyTable/types.d.ts.map +1 -1
  661. package/dist/views/HierarchyList/HierarchyTable/types.js.map +1 -1
  662. package/dist/views/HierarchyList/index.css +1 -1
  663. package/dist/views/HierarchyList/index.d.ts.map +1 -1
  664. package/dist/views/HierarchyList/index.js +103 -20
  665. package/dist/views/HierarchyList/index.js.map +1 -1
  666. package/dist/views/List/ListHeader/index.d.ts +1 -10
  667. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  668. package/dist/views/List/ListHeader/index.js +1 -3
  669. package/dist/views/List/ListHeader/index.js.map +1 -1
  670. package/dist/views/List/ListSelection/index.d.ts.map +1 -1
  671. package/dist/views/List/ListSelection/index.js +138 -122
  672. package/dist/views/List/ListSelection/index.js.map +1 -1
  673. package/dist/views/List/handleHierarchy.d.ts +6 -1
  674. package/dist/views/List/handleHierarchy.d.ts.map +1 -1
  675. package/dist/views/List/handleHierarchy.js +34 -3
  676. package/dist/views/List/handleHierarchy.js.map +1 -1
  677. package/dist/views/List/index.client.d.ts.map +1 -1
  678. package/dist/views/List/index.client.js +128 -18
  679. package/dist/views/List/index.client.js.map +1 -1
  680. package/dist/views/List/index.css +6 -1
  681. package/dist/views/List/index.d.ts.map +1 -1
  682. package/dist/views/List/index.js +29 -14
  683. package/dist/views/List/index.js.map +1 -1
  684. package/dist/views/Logout/index.d.ts.map +1 -1
  685. package/dist/views/Logout/index.js +11 -0
  686. package/dist/views/Logout/index.js.map +1 -1
  687. package/dist/views/Root/getCustomCollectionViewByRoute.d.ts.map +1 -1
  688. package/dist/views/Root/getCustomCollectionViewByRoute.js.map +1 -1
  689. package/dist/views/Root/getCustomGlobalViewByRoute.d.ts.map +1 -1
  690. package/dist/views/Root/getCustomGlobalViewByRoute.js.map +1 -1
  691. package/dist/views/Root/getCustomViewByKey.d.ts.map +1 -1
  692. package/dist/views/Root/getCustomViewByKey.js.map +1 -1
  693. package/dist/views/Root/getRouteData.d.ts.map +1 -1
  694. package/dist/views/Root/getRouteData.js +8 -2
  695. package/dist/views/Root/getRouteData.js.map +1 -1
  696. package/dist/views/Root/index.d.ts +12 -1
  697. package/dist/views/Root/index.d.ts.map +1 -1
  698. package/dist/views/Root/index.js +11 -3
  699. package/dist/views/Root/index.js.map +1 -1
  700. package/dist/views/Version/generateVersionViewMetadata.js.map +1 -1
  701. package/dist/views/Versions/generateVersionsViewMetadata.js.map +1 -1
  702. package/package.json +6 -11
  703. package/dist/elements/Hierarchy/Field/SelectedHierarchies.css +0 -36
  704. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts +0 -13
  705. package/dist/elements/Hierarchy/Field/SelectedHierarchies.d.ts.map +0 -1
  706. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js +0 -141
  707. package/dist/elements/Hierarchy/Field/SelectedHierarchies.js.map +0 -1
  708. package/dist/elements/RelationshipTable/Pagination.css +0 -39
  709. package/dist/scss/app.scss +0 -183
  710. package/dist/scss/colors.scss +0 -191
  711. package/dist/scss/custom.css +0 -1
  712. package/dist/scss/queries.scss +0 -27
  713. package/dist/scss/styles.scss +0 -9
  714. package/dist/scss/svg.scss +0 -10
  715. package/dist/scss/toastify.scss +0 -61
  716. package/dist/scss/vars.scss +0 -192
  717. package/dist/scss/z-index.scss +0 -9
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useWindowInfo","formatAdminURL","React","useEffect","useState","Account","LogOutIcon","useAuth","useConfig","useTranslation","MenuSeparator","Popup","PopupList","RenderCustomComponent","LanguageMenu","LanguageMenuContent","SettingsMenu","SettingsMenuContent","SubMenuHeader","ThemeMenu","ThemeMenuContent","baseClass","UserMenu","t0","$","CustomAvatar","CustomLogoutButton","settingsItemGroups","t1","undefined","user","languageOptions","t","config","t2","getEntityConfig","admin","t3","routes","t4","t5","theme","adminTheme","userSlug","account","accountRoute","logout","logoutRoute","adminRoute","breakpoints","t6","s","smallBreak","isMobile","Boolean","activeMobileSubmenu","setActiveMobileSubmenu","t7","t8","userCollectionConfig","collectionSlug","useAsTitle","titleValue","titleString","identifier","username","email","hasMultipleLanguages","Array","isArray","length","showThemeMenu","hasSettingsItems","some","_temp","showPreferencesGroup","logoutHref","path","accountHref","t9","Symbol","for","t10","t11","active","ariaProps","_jsx","className","filter","join","type","children","CustomComponent","Fallback","caret","horizontalAlign","onToggleClose","renderButton","verticalAlign","_jsxs","_Fragment","onBack","title","groups","href","ButtonGroup","onMobileOpen","MenuItem","Button","icon","group","items"],"sources":["../../../src/elements/UserMenu/index.tsx"],"sourcesContent":["'use client'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useEffect, useState } from 'react'\n\nimport type { UserMenuSettingsGroup } from './SettingsMenu/index.js'\n\nimport { Account } from '../../graphics/Account/index.js'\nimport { LogOutIcon } from '../../icons/LogOut/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MenuSeparator } from '../MenuSeparator/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { LanguageMenu, LanguageMenuContent } from './LanguageMenu/index.js'\nimport { SettingsMenu, SettingsMenuContent } from './SettingsMenu/index.js'\nimport { SubMenuHeader } from './SubMenuHeader/index.js'\nimport { ThemeMenu, ThemeMenuContent } from './ThemeMenu/index.js'\nimport './index.css'\n\nconst baseClass = 'user-menu'\n\ntype UserMenuProps = {\n CustomAvatar?: React.ReactNode\n CustomLogoutButton?: React.ReactNode\n settingsItemGroups?: UserMenuSettingsGroup[]\n}\n\nexport const UserMenu: React.FC<UserMenuProps> = ({\n CustomAvatar,\n CustomLogoutButton,\n settingsItemGroups = [],\n}) => {\n const { user } = useAuth()\n const { languageOptions, t } = useTranslation()\n const {\n config: {\n admin: {\n routes: { account: accountRoute, logout: logoutRoute },\n theme: adminTheme,\n user: userSlug,\n },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const isMobile = Boolean(smallBreak)\n\n const [activeMobileSubmenu, setActiveMobileSubmenu] = useState<\n 'language' | 'settings' | 'theme' | null\n >(null)\n\n useEffect(() => {\n if (!isMobile) {\n setActiveMobileSubmenu(null)\n }\n }, [isMobile])\n\n const userCollectionConfig = getEntityConfig({ collectionSlug: userSlug })\n const useAsTitle = userCollectionConfig?.admin?.useAsTitle ?? 'email'\n const titleValue =\n useAsTitle !== 'email' && user ? (user as Record<string, unknown>)[useAsTitle] : undefined\n const titleString = typeof titleValue === 'string' ? titleValue : undefined\n\n const identifier = user?.username ?? user?.email ?? ''\n const hasMultipleLanguages = Array.isArray(languageOptions) && languageOptions.length > 1\n const showThemeMenu = adminTheme === 'all'\n const hasSettingsItems = settingsItemGroups.some((group) => group.items.length > 0)\n const showPreferencesGroup = showThemeMenu || hasMultipleLanguages\n\n const logoutHref = formatAdminURL({ adminRoute, path: logoutRoute })\n const accountHref = formatAdminURL({ adminRoute, path: accountRoute })\n\n return (\n <Popup\n caret={false}\n className={baseClass}\n horizontalAlign=\"right\"\n onToggleClose={() => setActiveMobileSubmenu(null)}\n renderButton={({ active, ...ariaProps }) => (\n <button\n {...ariaProps}\n aria-label={t('authentication:account')}\n className={[`${baseClass}__trigger`, active && `${baseClass}__trigger--active`]\n .filter(Boolean)\n .join(' ')}\n type=\"button\"\n >\n <RenderCustomComponent CustomComponent={CustomAvatar} Fallback={<Account />} />\n </button>\n )}\n size=\"large\"\n theme=\"dark\"\n verticalAlign=\"bottom\"\n >\n {isMobile && activeMobileSubmenu ? (\n // Mobile submenu panel\n <>\n {activeMobileSubmenu === 'theme' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:theme')}\n />\n <ThemeMenuContent />\n </>\n )}\n {activeMobileSubmenu === 'language' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:language')}\n />\n <LanguageMenuContent />\n </>\n )}\n {activeMobileSubmenu === 'settings' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:settings')}\n />\n <SettingsMenuContent groups={settingsItemGroups} />\n </>\n )}\n </>\n ) : (\n // Normal menu content (desktop always; mobile when no active submenu)\n <>\n {/* Profile header */}\n <a className={`${baseClass}__profile`} href={accountHref}>\n <div className={`${baseClass}__avatar`}>\n <RenderCustomComponent CustomComponent={CustomAvatar} Fallback={<Account />} />\n </div>\n <div>\n {titleString && <p className={`${baseClass}__name`}>{titleString}</p>}\n {identifier && <p className={`${baseClass}__identifier`}>{identifier}</p>}\n </div>\n </a>\n\n {/* Preferences group: Theme + Language */}\n {showPreferencesGroup && (\n <PopupList.ButtonGroup>\n {showThemeMenu && (\n <ThemeMenu\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('theme') : undefined}\n />\n )}\n {hasMultipleLanguages && (\n <LanguageMenu\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('language') : undefined}\n />\n )}\n </PopupList.ButtonGroup>\n )}\n\n <MenuSeparator />\n\n {/* Settings group */}\n {hasSettingsItems && (\n <>\n <PopupList.ButtonGroup>\n <SettingsMenu\n groups={settingsItemGroups}\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('settings') : undefined}\n />\n </PopupList.ButtonGroup>\n <MenuSeparator />\n </>\n )}\n\n {/* Account actions */}\n <PopupList.MenuItem>\n {CustomLogoutButton ?? (\n <PopupList.Button href={logoutHref} icon={<LogOutIcon />}>\n {t('authentication:logOut')}\n </PopupList.Button>\n )}\n </PopupList.MenuItem>\n </>\n )}\n </Popup>\n )\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useWindowInfo","formatAdminURL","React","useEffect","useState","Account","ChevronIcon","LogOutIcon","useAuth","useConfig","useTranslation","MenuSeparator","Popup","PopupList","RenderCustomComponent","HoverSubmenuGroupProvider","LanguageMenu","LanguageMenuContent","SettingsMenu","SettingsMenuContent","SubMenuHeader","ThemeMenu","ThemeMenuContent","baseClass","UserMenu","t0","$","CustomAvatar","CustomLogoutButton","settingsItemGroups","t1","showTitle","t2","undefined","user","languageOptions","t","config","t3","getEntityConfig","admin","t4","routes","t5","t6","theme","adminTheme","userSlug","account","accountRoute","logout","logoutRoute","adminRoute","breakpoints","t7","s","smallBreak","isMobile","Boolean","activeMobileSubmenu","setActiveMobileSubmenu","menuInstanceKey","setMenuInstanceKey","t8","t9","userCollectionConfig","collectionSlug","useAsTitle","titleValue","titleString","identifier","username","email","hasMultipleLanguages","Array","isArray","length","showThemeMenu","hasSettingsItems","some","_temp","showPreferencesGroup","logoutHref","path","accountHref","t10","Symbol","for","_temp2","t11","t12","active","ariaProps","_jsx","className","filter","join","type","children","_jsxs","direction","size","caret","horizontalAlign","onToggleClose","renderButton","verticalAlign","_Fragment","onBack","title","groups","href","CustomComponent","Fallback","MenuItem","onMobileOpen","Button","icon","group","items","key"],"sources":["../../../src/elements/UserMenu/index.tsx"],"sourcesContent":["'use client'\nimport { useWindowInfo } from '@faceless-ui/window-info'\nimport { formatAdminURL } from 'payload/shared'\nimport React, { useEffect, useState } from 'react'\n\nimport type { UserMenuSettingsGroup } from './SettingsMenu/index.js'\n\nimport { Account } from '../../graphics/Account/index.js'\nimport { ChevronIcon } from '../../icons/Chevron/index.js'\nimport { LogOutIcon } from '../../icons/LogOut/index.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport { MenuSeparator } from '../MenuSeparator/index.js'\nimport { Popup, PopupList } from '../Popup/index.js'\nimport { RenderCustomComponent } from '../RenderCustomComponent/index.js'\nimport { HoverSubmenuGroupProvider } from './HoverSubmenuGroup.js'\nimport { LanguageMenu, LanguageMenuContent } from './LanguageMenu/index.js'\nimport { SettingsMenu, SettingsMenuContent } from './SettingsMenu/index.js'\nimport { SubMenuHeader } from './SubMenuHeader/index.js'\nimport './index.css'\nimport { ThemeMenu, ThemeMenuContent } from './ThemeMenu/index.js'\n\nconst baseClass = 'user-menu'\n\ntype UserMenuProps = {\n CustomAvatar?: React.ReactNode\n CustomLogoutButton?: React.ReactNode\n settingsItemGroups?: UserMenuSettingsGroup[]\n showTitle?: boolean\n}\n\nexport const UserMenu: React.FC<UserMenuProps> = ({\n CustomAvatar,\n CustomLogoutButton,\n settingsItemGroups = [],\n showTitle = false,\n}) => {\n const { user } = useAuth()\n const { languageOptions, t } = useTranslation()\n const {\n config: {\n admin: {\n routes: { account: accountRoute, logout: logoutRoute },\n theme: adminTheme,\n user: userSlug,\n },\n routes: { admin: adminRoute },\n },\n getEntityConfig,\n } = useConfig()\n const {\n breakpoints: { s: smallBreak },\n } = useWindowInfo()\n\n const isMobile = Boolean(smallBreak)\n\n const [activeMobileSubmenu, setActiveMobileSubmenu] = useState<\n 'language' | 'settings' | 'theme' | null\n >(null)\n\n // Bumped whenever the account menu closes, so submenu triggers (Theme/Language/Settings)\n // remount and reset their own open/hover state - otherwise a submenu left open via hover\n // stays mounted and open even after the parent menu itself has closed.\n const [menuInstanceKey, setMenuInstanceKey] = useState(0)\n\n useEffect(() => {\n if (!isMobile) {\n setActiveMobileSubmenu(null)\n }\n }, [isMobile])\n\n const userCollectionConfig = getEntityConfig({ collectionSlug: userSlug })\n const useAsTitle = userCollectionConfig?.admin?.useAsTitle ?? 'email'\n const titleValue =\n useAsTitle !== 'email' && user ? (user as Record<string, unknown>)[useAsTitle] : undefined\n const titleString = typeof titleValue === 'string' ? titleValue : undefined\n\n const identifier = user?.username ?? user?.email ?? ''\n const hasMultipleLanguages = Array.isArray(languageOptions) && languageOptions.length > 1\n const showThemeMenu = adminTheme === 'all'\n const hasSettingsItems = settingsItemGroups.some((group) => group.items.length > 0)\n const showPreferencesGroup = showThemeMenu || hasMultipleLanguages\n\n const logoutHref = formatAdminURL({ adminRoute, path: logoutRoute })\n const accountHref = formatAdminURL({ adminRoute, path: accountRoute })\n\n return (\n <Popup\n caret={false}\n className={baseClass}\n horizontalAlign=\"right\"\n onToggleClose={() => {\n setActiveMobileSubmenu(null)\n setMenuInstanceKey((key) => key + 1)\n }}\n renderButton={({ active, ...ariaProps }) => (\n <button\n {...ariaProps}\n aria-label={t('authentication:account')}\n className={[\n `${baseClass}__trigger`,\n active && `${baseClass}__trigger--active`,\n showTitle && `${baseClass}__trigger--with-title`,\n ]\n .filter(Boolean)\n .join(' ')}\n type=\"button\"\n >\n <div className={`${baseClass}__trigger-content`}>\n {showTitle && (titleString || identifier) && (\n <p className={`${baseClass}__trigger-label`}>{titleString || identifier}</p>\n )}\n <ChevronIcon direction=\"down\" size={16} />\n </div>\n </button>\n )}\n showScrim\n size=\"large\"\n theme=\"dark\"\n verticalAlign=\"bottom\"\n >\n {isMobile && activeMobileSubmenu ? (\n // Mobile submenu panel\n <>\n {activeMobileSubmenu === 'theme' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:theme')}\n />\n <ThemeMenuContent />\n </>\n )}\n {activeMobileSubmenu === 'language' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:language')}\n />\n <LanguageMenuContent />\n </>\n )}\n {activeMobileSubmenu === 'settings' && (\n <>\n <SubMenuHeader\n onBack={() => setActiveMobileSubmenu(null)}\n title={t('general:settings')}\n />\n <SettingsMenuContent groups={settingsItemGroups} />\n </>\n )}\n </>\n ) : (\n // Normal menu content (desktop always; mobile when no active submenu)\n <>\n {/* Profile header */}\n <a className={`${baseClass}__profile`} href={accountHref}>\n <div className={`${baseClass}__avatar`}>\n <RenderCustomComponent CustomComponent={CustomAvatar} Fallback={<Account />} />\n </div>\n <div>\n {titleString && <p className={`${baseClass}__name`}>{titleString}</p>}\n {identifier && <p className={`${baseClass}__identifier`}>{identifier}</p>}\n </div>\n </a>\n\n <HoverSubmenuGroupProvider>\n {/* Preferences group: Theme + Language */}\n {showPreferencesGroup && (\n <>\n {showThemeMenu && (\n <PopupList.MenuItem>\n <ThemeMenu\n key={menuInstanceKey}\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('theme') : undefined}\n />\n </PopupList.MenuItem>\n )}\n {hasMultipleLanguages && (\n <PopupList.MenuItem>\n <LanguageMenu\n key={menuInstanceKey}\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('language') : undefined}\n />\n </PopupList.MenuItem>\n )}\n </>\n )}\n\n <MenuSeparator />\n\n {/* Settings group */}\n {hasSettingsItems && (\n <>\n <PopupList.MenuItem>\n <SettingsMenu\n groups={settingsItemGroups}\n key={menuInstanceKey}\n onMobileOpen={isMobile ? () => setActiveMobileSubmenu('settings') : undefined}\n />\n </PopupList.MenuItem>\n <MenuSeparator />\n </>\n )}\n </HoverSubmenuGroupProvider>\n\n {/* Account actions */}\n <PopupList.MenuItem>\n {CustomLogoutButton ?? (\n <PopupList.Button href={logoutHref} icon={<LogOutIcon />}>\n {t('authentication:logOut')}\n </PopupList.Button>\n )}\n </PopupList.MenuItem>\n </>\n )}\n </Popup>\n )\n}\n"],"mappings":"AAAA;;AAAA,SAAAA,CAAA,IAAAC,EAAA;;AACA,SAASC,aAAa,QAAQ;AAC9B,SAASC,cAAc,QAAQ;AAC/B,OAAOC,KAAA,IAASC,SAAS,EAAEC,QAAQ,QAAQ;AAI3C,SAASC,OAAO,QAAQ;AACxB,SAASC,WAAW,QAAQ;AAC5B,SAASC,UAAU,QAAQ;AAC3B,SAASC,OAAO,QAAQ;AACxB,SAASC,SAAS,QAAQ;AAC1B,SAASC,cAAc,QAAQ;AAC/B,SAASC,aAAa,QAAQ;AAC9B,SAASC,KAAK,EAAEC,SAAS,QAAQ;AACjC,SAASC,qBAAqB,QAAQ;AACtC,SAASC,yBAAyB,QAAQ;AAC1C,SAASC,YAAY,EAAEC,mBAAmB,QAAQ;AAClD,SAASC,YAAY,EAAEC,mBAAmB,QAAQ;AAClD,SAASC,aAAa,QAAQ;AAC9B,OAAO;AACP,SAASC,SAAS,EAAEC,gBAAgB,QAAQ;AAE5C,MAAMC,SAAA,GAAY;AASlB,OAAO,MAAMC,QAAA,GAAoCC,EAAA;EAAA,MAAAC,CAAA,GAAA3B,EAAA;EAAC;IAAA4B,YAAA;IAAAC,kBAAA;IAAAC,kBAAA,EAAAC,EAAA;IAAAC,SAAA,EAAAC;EAAA,IAAAP,EAKjD;EAFC,MAAAI,kBAAA,GAAAC,EAAuB,KAAAG,SAAA,QAAvBH,EAAuB;EACvB,MAAAC,SAAA,GAAAC,EAAiB,KAAAC,SAAA,WAAjBD,EAAiB;EAEjB;IAAAE;EAAA,IAAiB1B,OAAA;EACjB;IAAA2B,eAAA;IAAAC;EAAA,IAA+B1B,cAAA;EAC/B;IAAA2B,MAAA,EAAAC,EAAA;IAAAC;EAAA,IAUI9B,SAAA;EATM;IAAA+B,KAAA,EAAAC,EAAA;IAAAC,MAAA,EAAAC;EAAA,IAAAL,EAOP;EANQ;IAAAI,MAAA,EAAAE,EAAA;IAAAC,KAAA,EAAAC,UAAA;IAAAZ,IAAA,EAAAa;EAAA,IAAAN,EAIN;EAHS;IAAAO,OAAA,EAAAC,YAAA;IAAAC,MAAA,EAAAC;EAAA,IAAAP,EAA8C;EAIhD;IAAAJ,KAAA,EAAAY;EAAA,IAAAT,EAAqB;EAIjC;IAAAU,WAAA,EAAAC;EAAA,IAEItD,aAAA;EADW;IAAAuD,CAAA,EAAAC;EAAA,IAAAF,EAAiB;EAGhC,MAAAG,QAAA,GAAiBC,OAAA,CAAQF,UAAA;EAEzB,OAAAG,mBAAA,EAAAC,sBAAA,IAAsDxD,QAAA,KAEpD;EAKF,OAAAyD,eAAA,EAAAC,kBAAA,IAA8C1D,QAAA,EAAS;EAAA,IAAA2D,EAAA;EAAA,IAAAC,EAAA;EAAA,IAAAtC,CAAA,QAAA+B,QAAA;IAE7CM,EAAA,GAAAA,CAAA;MAAA,KACHN,QAAA;QACHG,sBAAA,KAAuB;MAAA;IAAA;IAExBI,EAAA,IAACP,QAAA;IAAS/B,CAAA,MAAA+B,QAAA;IAAA/B,CAAA,MAAAqC,EAAA;IAAArC,CAAA,MAAAsC,EAAA;EAAA;IAAAD,EAAA,GAAArC,CAAA;IAAAsC,EAAA,GAAAtC,CAAA;EAAA;EAJbvB,SAAA,CAAU4D,EAIV,EAAGC,EAAU;EAEb,MAAAC,oBAAA,GAA6B1B,eAAA;IAAA2B,cAAA,EAAkCnB;EAAA,CAAS;EACxE,MAAAoB,UAAA,GAAmBF,oBAAA,EAAAzB,KAAA,EAAA2B,UAAA,IAA2C;EAC9D,MAAAC,UAAA,GACED,UAAA,KAAe,WAAWjC,IAAA,GAAOA,IAAiC,CAACiC,UAAA,IAAAA,SAAc;EACnF,MAAAE,WAAA,GAAoB,OAAOD,UAAA,KAAe,WAAWA,UAAA,GAAAnC,SAAa;EAElE,MAAAqC,UAAA,GAAmBpC,IAAA,EAAAqC,QAAA,IAAkBrC,IAAA,EAAAsC,KAAM,IAAS;EACpD,MAAAC,oBAAA,GAA6BC,KAAA,CAAAC,OAAA,CAAcxC,eAAA,KAAoBA,eAAA,CAAAyC,MAAA,IAAyB;EACxF,MAAAC,aAAA,GAAsB/B,UAAA,KAAe;EACrC,MAAAgC,gBAAA,GAAyBjD,kBAAA,CAAAkD,IAAA,CAAAC,KAAwD;EACjF,MAAAC,oBAAA,GAA6BJ,aAAA,IAAiBJ,oBAAA;EAE9C,MAAAS,UAAA,GAAmBjF,cAAA;IAAAmD,UAAA;IAAA+B,IAAA,EAAmChC;EAAA,CAAY;EAClE,MAAAiC,WAAA,GAAoBnF,cAAA;IAAAmD,UAAA;IAAA+B,IAAA,EAAmClC;EAAA,CAAa;EAAA,IAAAoC,GAAA;EAAA,IAAA3D,CAAA,QAAA4D,MAAA,CAAAC,GAAA;IAOjDF,GAAA,GAAAA,CAAA;MACbzB,sBAAA,KAAuB;MACvBE,kBAAA,CAAA0B,MAAkC;IAAA;IACpC9D,CAAA,MAAA2D,GAAA;EAAA;IAAAA,GAAA,GAAA3D,CAAA;EAAA;EAAA,IAAA+D,GAAA;EAAA,IAAA/D,CAAA,QAAA4C,UAAA,IAAA5C,CAAA,QAAAK,SAAA,IAAAL,CAAA,QAAAU,CAAA,IAAAV,CAAA,QAAA2C,WAAA;IACcoB,GAAA,GAAAC,GAAA;MAAC;QAAAC,MAAA;QAAA,GAAAC;MAAA,IAAAF,GAAwB;MAAA,OACrCG,IAAA,CAAC;QAAA,GACKD,SAAS;QAAA,cACDxD,CAAA,CAAE;QAAA0D,SAAA,EACH,CACT,GAAAvE,SAAA,WAAuB,EACvBoE,MAAA,IAAU,GAAApE,SAAA,mBAA+B,EACzCQ,SAAA,IAAa,GAAAR,SAAA,uBAAmC,EAAAwE,MAAA,CAAArC,OAExC,EAAAsC,IAAA,CACF;QAAAC,IAAA,EACH;QAAAC,QAAA,EAELC,KAAA,CAAC;UAAAL,SAAA,EAAe,GAAAvE,SAAA,mBAA+B;UAAA2E,QAAA,GAC5CnE,SAAA,KAAcsC,WAAA,IAAeC,UAAS,KACrCuB,IAAA,CAAC;YAAAC,SAAA,EAAa,GAAAvE,SAAA,iBAA6B;YAAA2E,QAAA,EAAG7B,WAAA,IAAeC;UAAA,C,GAE/DuB,IAAA,CAAAvF,WAAA;YAAA8F,SAAA,EAAuB;YAAAC,IAAA;UAAA,C;;;;;;;;;;;;SAzB/BR,IAAA,CAAAjF,KAAA;IAAA0F,KAAA;IAAAR,SAAA,EAAAvE,SAAA;IAAAgF,eAAA,EAGkB;IAAAC,aAAA,EACDnB,GAGf;IAAAoB,YAAA,EACchB,G;;UAsBT;IAAA5C,KAAA,EACC;IAAA6D,aAAA,EACQ;IAAAR,QAAA,EAEbzC,QAAA,IAAYE,mBAAA,GAEXwC,KAAA,CAAAQ,SAAA;MAAAT,QAAA,GACGvC,mBAAA,KAAwB,WACvBwC,KAAA,CAAAQ,SAAA;QAAAT,QAAA,GACEL,IAAA,CAAAzE,aAAA;UAAAwF,MAAA,EAAAA,CAAA,KACgBhD,sBAAA,KAAuB;UAAAiD,KAAA,EAC9BzE,CAAA,CAAE;QAAA,C,GAEXyD,IAAA,CAAAvE,gBAAA,IAAC;MAAA,C,GAGJqC,mBAAA,KAAwB,cACvBwC,KAAA,CAAAQ,SAAA;QAAAT,QAAA,GACEL,IAAA,CAAAzE,aAAA;UAAAwF,MAAA,EAAAA,CAAA,KACgBhD,sBAAA,KAAuB;UAAAiD,KAAA,EAC9BzE,CAAA,CAAE;QAAA,C,GAEXyD,IAAA,CAAA5E,mBAAA,IAAC;MAAA,C,GAGJ0C,mBAAA,KAAwB,cACvBwC,KAAA,CAAAQ,SAAA;QAAAT,QAAA,GACEL,IAAA,CAAAzE,aAAA;UAAAwF,MAAA,EAAAA,CAAA,KACgBhD,sBAAA,KAAuB;UAAAiD,KAAA,EAC9BzE,CAAA,CAAE;QAAA,C,GAEXyD,IAAA,CAAA1E,mBAAA;UAAA2F,MAAA,EAA6BjF;QAAA,C;;SAMnCsE,KAAA,CAAAQ,SAAA;MAAAT,QAAA,GAEEC,KAAA,CAAC;QAAAL,SAAA,EAAa,GAAAvE,SAAA,WAAuB;QAAAwF,IAAA,EAAQ3B,WAAA;QAAAc,QAAA,GAC3CL,IAAA,CAAC;UAAAC,SAAA,EAAe,GAAAvE,SAAA,UAAsB;UAAA2E,QAAA,EACpCL,IAAA,CAAA/E,qBAAA;YAAAkG,eAAA,EAAwCrF,YAAA;YAAAsF,QAAA,EAAwBpB,IAAA,CAAAxF,OAAA,IAAC;UAAA,C;YAEnE8F,KAAA,CAAC;UAAAD,QAAA,GACE7B,WAAA,IAAewB,IAAA,CAAC;YAAAC,SAAA,EAAa,GAAAvE,SAAA,QAAoB;YAAA2E,QAAA,EAAG7B;UAAA,C,GACpDC,UAAA,IAAcuB,IAAA,CAAC;YAAAC,SAAA,EAAa,GAAAvE,SAAA,cAA0B;YAAA2E,QAAA,EAAG5B;UAAA,C;;UAI9D6B,KAAA,CAAApF,yBAAA;QAAAmF,QAAA,GAEGjB,oBAAA,IACCkB,KAAA,CAAAQ,SAAA;UAAAT,QAAA,GACGrB,aAAA,IACCgB,IAAA,CAAAhF,SAAA,CAAAqG,QAAA;YAAAhB,QAAA,EACEL,IAAA,CAAAxE,SAAA;cAAA8F,YAAA,EAEgB1D,QAAA,SAAiBG,sBAAA,CAAuB,WAAA3B;YAAW,GAD5D4B,eAAA;UAAA,C,GAKVY,oBAAA,IACCoB,IAAA,CAAAhF,SAAA,CAAAqG,QAAA;YAAAhB,QAAA,EACEL,IAAA,CAAA7E,YAAA;cAAAmG,YAAA,EAEgB1D,QAAA,SAAiBG,sBAAA,CAAuB,cAAA3B;YAAc,GAD/D4B,eAAA;UAAA,C;YAQfgC,IAAA,CAAAlF,aAAA,IAAC,GAGAmE,gBAAA,IACCqB,KAAA,CAAAQ,SAAA;UAAAT,QAAA,GACEL,IAAA,CAAAhF,SAAA,CAAAqG,QAAA;YAAAhB,QAAA,EACEL,IAAA,CAAA3E,YAAA;cAAA4F,MAAA,EACUjF,kBAAA;cAAAsF,YAAA,EAEM1D,QAAA,SAAiBG,sBAAA,CAAuB,cAAA3B;YAAc,GAD/D4B,eAAA;UAAA,C,GAITgC,IAAA,CAAAlF,aAAA,IAAC;QAAA,C;UAMPkF,IAAA,CAAAhF,SAAA,CAAAqG,QAAA;QAAAhB,QAAA,EACGtE,kBAAA,IACCiE,IAAA,CAAAhF,SAAA,CAAAuG,MAAA;UAAAL,IAAA,EAAwB7B,UAAA;UAAAmC,IAAA,EAAkBxB,IAAA,CAAAtF,UAAA,IAAC;UAAA2F,QAAA,EACxC9D,CAAA,CAAE;QAAA,C;;;;CAQnB;AA3LiD,SAAA4C,MAAAsC,KAAA;EAAA,OAiDaA,KAAA,CAAAC,KAAA,CAAA3C,MAAA,IAAqB;AAAA;AAjDlC,SAAAY,OAAAgC,GAAA;EAAA,OA8DbA,GAAA,IAAM;AAAA","ignoreList":[]}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Opens a submenu on hover and keeps it open while the cursor is inside the trigger, the
3
+ * content, the trough between them, or the funnel-shaped safe zone connecting the two -
4
+ * closing once it has genuinely left all of those for `HOVER_CLOSE_DELAY`.
5
+ *
6
+ * `id` identifies this submenu within its `HoverSubmenuGroupProvider` (if any) - when
7
+ * a sibling submenu becomes active, this one closes immediately rather than waiting on
8
+ * its own hover-out timer.
9
+ */
10
+ export declare const useHoverSubmenu: (id: string) => {
11
+ close: () => void;
12
+ contentRef: import("react").RefObject<HTMLElement>;
13
+ isOpen: boolean;
14
+ keepOpen: () => void;
15
+ open: (e?: {
16
+ clientX: number;
17
+ clientY: number;
18
+ }) => void;
19
+ triggerRef: import("react").RefObject<HTMLElement>;
20
+ };
21
+ //# sourceMappingURL=useHoverSubmenu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHoverSubmenu.d.ts","sourceRoot":"","sources":["../../../src/elements/UserMenu/useHoverSubmenu.ts"],"names":[],"mappings":"AAuHA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,OAAQ,MAAM;;;;;eA2BjC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;;CAwH5C,CAAA"}
@@ -0,0 +1,260 @@
1
+ 'use client';
2
+
3
+ import { c as _c } from "react/compiler-runtime";
4
+ import { useCallback, useEffect, useRef, useState } from 'react';
5
+ import { useHoverSubmenuGroup } from './HoverSubmenuGroup.js';
6
+ const HOVER_CLOSE_DELAY = 75;
7
+ const POLYGON_BUFFER = 2;
8
+ const isInsideRect = (x, y, rect) => x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom;
9
+ const isInsideAxisAlignedRect = (x, y, x1, y1, x2, y2) => {
10
+ const minX = Math.min(x1, x2);
11
+ const maxX = Math.max(x1, x2);
12
+ const minY = Math.min(y1, y2);
13
+ const maxY = Math.max(y1, y2);
14
+ return x >= minX && x <= maxX && y >= minY && y <= maxY;
15
+ };
16
+ const hasIntersectingEdge = (px, py, xi, yi, xj, yj) => yi >= py !== yj >= py && px <= (xj - xi) * (py - yi) / (yj - yi) + xi;
17
+ /** Ray-casting point-in-polygon test, ported from Floating UI's `safePolygon`. */
18
+ const isPointInPolygon = (px, py, points) => {
19
+ let inside = false;
20
+ for (let i = 0; i < points.length; i++) {
21
+ const [xi, yi] = points[i];
22
+ const [xj, yj] = points[(i + 1) % points.length];
23
+ if (hasIntersectingEdge(px, py, xi, yi, xj, yj)) {
24
+ inside = !inside;
25
+ }
26
+ }
27
+ return inside;
28
+ };
29
+ /**
30
+ * Computes the funnel-shaped safe zone connecting `anchor` (the last cursor position over
31
+ * the trigger) to the content panel, ported from Floating UI's `safePolygon` 'left'/'right'
32
+ * cases. Unlike a bounding-box union, this narrows toward the panel, so hovering something
33
+ * far below/above the trigger-to-panel path (e.g. an unrelated item below a short submenu)
34
+ * correctly falls outside the zone.
35
+ */
36
+ const getFunnelPolygon = (anchor, triggerRect, contentRect, contentIsLeft) => {
37
+ const isContentTaller = contentRect.height > triggerRect.height;
38
+ const leaveFromBottom = anchor.y > contentRect.bottom - contentRect.height / 2;
39
+ const yOffset = isContentTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4;
40
+ const pointOneY = isContentTaller ? anchor.y + yOffset : leaveFromBottom ? anchor.y + yOffset : anchor.y - yOffset;
41
+ const pointTwoY = isContentTaller ? anchor.y - yOffset : leaveFromBottom ? anchor.y + yOffset : anchor.y - yOffset;
42
+ if (contentIsLeft) {
43
+ const cursorPointX = anchor.x + POLYGON_BUFFER + 1;
44
+ const commonXTop = leaveFromBottom ? contentRect.right - POLYGON_BUFFER : isContentTaller ? contentRect.right - POLYGON_BUFFER : contentRect.left;
45
+ const commonXBottom = leaveFromBottom ? isContentTaller ? contentRect.right - POLYGON_BUFFER : contentRect.left : contentRect.right - POLYGON_BUFFER;
46
+ return [[commonXTop, contentRect.top], [commonXBottom, contentRect.bottom], [cursorPointX, pointOneY], [cursorPointX, pointTwoY]];
47
+ }
48
+ const cursorPointX = anchor.x - POLYGON_BUFFER;
49
+ const commonXTop = leaveFromBottom ? contentRect.left + POLYGON_BUFFER : isContentTaller ? contentRect.left + POLYGON_BUFFER : contentRect.right;
50
+ const commonXBottom = leaveFromBottom ? isContentTaller ? contentRect.left + POLYGON_BUFFER : contentRect.right : contentRect.left + POLYGON_BUFFER;
51
+ return [[cursorPointX, pointOneY], [cursorPointX, pointTwoY], [commonXTop, contentRect.top], [commonXBottom, contentRect.bottom]];
52
+ };
53
+ /**
54
+ * Opens a submenu on hover and keeps it open while the cursor is inside the trigger, the
55
+ * content, the trough between them, or the funnel-shaped safe zone connecting the two -
56
+ * closing once it has genuinely left all of those for `HOVER_CLOSE_DELAY`.
57
+ *
58
+ * `id` identifies this submenu within its `HoverSubmenuGroupProvider` (if any) - when
59
+ * a sibling submenu becomes active, this one closes immediately rather than waiting on
60
+ * its own hover-out timer.
61
+ */
62
+ export const useHoverSubmenu = id => {
63
+ const $ = _c(21);
64
+ const [isOpen, setIsOpen] = useState(false);
65
+ const closeTimeoutRef = useRef(null);
66
+ const triggerRef = useRef(null);
67
+ const contentRef = useRef(null);
68
+ const anchorRef = useRef(null);
69
+ const hasLandedRef = useRef(false);
70
+ const group = useHoverSubmenuGroup();
71
+ let t0;
72
+ if ($[0] === Symbol.for("react.memo_cache_sentinel")) {
73
+ t0 = () => {
74
+ if (closeTimeoutRef.current) {
75
+ clearTimeout(closeTimeoutRef.current);
76
+ closeTimeoutRef.current = null;
77
+ }
78
+ };
79
+ $[0] = t0;
80
+ } else {
81
+ t0 = $[0];
82
+ }
83
+ const cancelClose = t0;
84
+ let t1;
85
+ if ($[1] === Symbol.for("react.memo_cache_sentinel")) {
86
+ t1 = () => {
87
+ if (closeTimeoutRef.current) {
88
+ return;
89
+ }
90
+ closeTimeoutRef.current = setTimeout(() => {
91
+ setIsOpen(false);
92
+ closeTimeoutRef.current = null;
93
+ }, HOVER_CLOSE_DELAY);
94
+ };
95
+ $[1] = t1;
96
+ } else {
97
+ t1 = $[1];
98
+ }
99
+ const scheduleClose = t1;
100
+ let t2;
101
+ if ($[2] !== group || $[3] !== id) {
102
+ t2 = e => {
103
+ cancelClose();
104
+ hasLandedRef.current = false;
105
+ if (e) {
106
+ anchorRef.current = {
107
+ x: e.clientX,
108
+ y: e.clientY
109
+ };
110
+ }
111
+ group?.setActiveId(id);
112
+ setIsOpen(true);
113
+ };
114
+ $[2] = group;
115
+ $[3] = id;
116
+ $[4] = t2;
117
+ } else {
118
+ t2 = $[4];
119
+ }
120
+ const open = t2;
121
+ let t3;
122
+ if ($[5] === Symbol.for("react.memo_cache_sentinel")) {
123
+ t3 = () => {
124
+ cancelClose();
125
+ hasLandedRef.current = true;
126
+ };
127
+ $[5] = t3;
128
+ } else {
129
+ t3 = $[5];
130
+ }
131
+ const keepOpen = t3;
132
+ let t4;
133
+ if ($[6] !== group || $[7] !== id) {
134
+ t4 = () => {
135
+ cancelClose();
136
+ setIsOpen(false);
137
+ group?.setActiveId(current => current === id ? null : current);
138
+ };
139
+ $[6] = group;
140
+ $[7] = id;
141
+ $[8] = t4;
142
+ } else {
143
+ t4 = $[8];
144
+ }
145
+ const close = t4;
146
+ let t5;
147
+ let t6;
148
+ if ($[9] !== group || $[10] !== id || $[11] !== isOpen) {
149
+ t5 = () => {
150
+ if (isOpen && group && group.activeId !== null && group.activeId !== id) {
151
+ cancelClose();
152
+ setIsOpen(false);
153
+ }
154
+ };
155
+ t6 = [group, isOpen, id, cancelClose];
156
+ $[9] = group;
157
+ $[10] = id;
158
+ $[11] = isOpen;
159
+ $[12] = t5;
160
+ $[13] = t6;
161
+ } else {
162
+ t5 = $[12];
163
+ t6 = $[13];
164
+ }
165
+ useEffect(t5, t6);
166
+ let t7;
167
+ let t8;
168
+ if ($[14] !== isOpen) {
169
+ t7 = () => {
170
+ if (!isOpen) {
171
+ return;
172
+ }
173
+ const handlePointerMove = e_0 => {
174
+ const triggerRect = triggerRef.current?.getBoundingClientRect();
175
+ const contentRect = contentRef.current?.getBoundingClientRect();
176
+ if (!triggerRect || !contentRect) {
177
+ return;
178
+ }
179
+ const {
180
+ clientX,
181
+ clientY
182
+ } = e_0;
183
+ if (isInsideRect(clientX, clientY, triggerRect)) {
184
+ anchorRef.current = {
185
+ x: clientX,
186
+ y: clientY
187
+ };
188
+ hasLandedRef.current = false;
189
+ cancelClose();
190
+ return;
191
+ }
192
+ if (isInsideRect(clientX, clientY, contentRect)) {
193
+ hasLandedRef.current = true;
194
+ cancelClose();
195
+ return;
196
+ }
197
+ const contentIsLeft = contentRect.right <= triggerRect.left + 1;
198
+ const isContentTaller = contentRect.height > triggerRect.height;
199
+ const boundTop = (isContentTaller ? triggerRect : contentRect).top;
200
+ const boundBottom = (isContentTaller ? triggerRect : contentRect).bottom;
201
+ const movedPastTrigger = contentIsLeft ? clientX >= triggerRect.right - 1 : clientX <= triggerRect.left + 1;
202
+ const troughX1 = contentIsLeft ? contentRect.right - 1 : triggerRect.right - 1;
203
+ const troughX2 = contentIsLeft ? triggerRect.left + 1 : contentRect.left + 1;
204
+ const isInsideTrough = isInsideAxisAlignedRect(clientX, clientY, troughX1, boundBottom, troughX2, boundTop);
205
+ if (movedPastTrigger) {
206
+ scheduleClose();
207
+ return;
208
+ }
209
+ if (isInsideTrough) {
210
+ cancelClose();
211
+ return;
212
+ }
213
+ if (hasLandedRef.current) {
214
+ scheduleClose();
215
+ return;
216
+ }
217
+ const anchor = anchorRef.current ?? {
218
+ x: contentIsLeft ? triggerRect.left : triggerRect.right,
219
+ y: (triggerRect.top + triggerRect.bottom) / 2
220
+ };
221
+ const polygon = getFunnelPolygon(anchor, triggerRect, contentRect, contentIsLeft);
222
+ const isInsidePolygon = isPointInPolygon(clientX, clientY, polygon);
223
+ if (isInsidePolygon) {
224
+ cancelClose();
225
+ } else {
226
+ scheduleClose();
227
+ }
228
+ };
229
+ document.addEventListener("mousemove", handlePointerMove);
230
+ return () => document.removeEventListener("mousemove", handlePointerMove);
231
+ };
232
+ t8 = [isOpen, cancelClose, scheduleClose];
233
+ $[14] = isOpen;
234
+ $[15] = t7;
235
+ $[16] = t8;
236
+ } else {
237
+ t7 = $[15];
238
+ t8 = $[16];
239
+ }
240
+ useEffect(t7, t8);
241
+ let t9;
242
+ if ($[17] !== close || $[18] !== isOpen || $[19] !== open) {
243
+ t9 = {
244
+ close,
245
+ contentRef,
246
+ isOpen,
247
+ keepOpen,
248
+ open,
249
+ triggerRef
250
+ };
251
+ $[17] = close;
252
+ $[18] = isOpen;
253
+ $[19] = open;
254
+ $[20] = t9;
255
+ } else {
256
+ t9 = $[20];
257
+ }
258
+ return t9;
259
+ };
260
+ //# sourceMappingURL=useHoverSubmenu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHoverSubmenu.js","names":["c","_c","useCallback","useEffect","useRef","useState","useHoverSubmenuGroup","HOVER_CLOSE_DELAY","POLYGON_BUFFER","isInsideRect","x","y","rect","left","right","top","bottom","isInsideAxisAlignedRect","x1","y1","x2","y2","minX","Math","min","maxX","max","minY","maxY","hasIntersectingEdge","px","py","xi","yi","xj","yj","isPointInPolygon","points","inside","i","length","getFunnelPolygon","anchor","triggerRect","contentRect","contentIsLeft","isContentTaller","height","leaveFromBottom","yOffset","pointOneY","pointTwoY","cursorPointX","commonXTop","commonXBottom","useHoverSubmenu","id","$","isOpen","setIsOpen","closeTimeoutRef","triggerRef","contentRef","anchorRef","hasLandedRef","group","t0","Symbol","for","current","clearTimeout","cancelClose","t1","setTimeout","scheduleClose","t2","e","clientX","clientY","setActiveId","open","t3","keepOpen","t4","close","t5","t6","activeId","t7","t8","handlePointerMove","e_0","getBoundingClientRect","boundTop","boundBottom","movedPastTrigger","troughX1","troughX2","isInsideTrough","polygon","isInsidePolygon","document","addEventListener","removeEventListener","t9"],"sources":["../../../src/elements/UserMenu/useHoverSubmenu.ts"],"sourcesContent":["'use client'\nimport { useCallback, useEffect, useRef, useState } from 'react'\n\nimport { useHoverSubmenuGroup } from './HoverSubmenuGroup.js'\n\nconst HOVER_CLOSE_DELAY = 75\nconst POLYGON_BUFFER = 2\n\ntype Point = [x: number, y: number]\n\nconst isInsideRect = (x: number, y: number, rect: DOMRect) =>\n x >= rect.left && x <= rect.right && y >= rect.top && y <= rect.bottom\n\nconst isInsideAxisAlignedRect = (\n x: number,\n y: number,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n) => {\n const minX = Math.min(x1, x2)\n const maxX = Math.max(x1, x2)\n const minY = Math.min(y1, y2)\n const maxY = Math.max(y1, y2)\n return x >= minX && x <= maxX && y >= minY && y <= maxY\n}\n\nconst hasIntersectingEdge = (\n px: number,\n py: number,\n xi: number,\n yi: number,\n xj: number,\n yj: number,\n) => yi >= py !== yj >= py && px <= ((xj - xi) * (py - yi)) / (yj - yi) + xi\n\n/** Ray-casting point-in-polygon test, ported from Floating UI's `safePolygon`. */\nconst isPointInPolygon = (px: number, py: number, points: Point[]) => {\n let inside = false\n for (let i = 0; i < points.length; i++) {\n const [xi, yi] = points[i]\n const [xj, yj] = points[(i + 1) % points.length]\n if (hasIntersectingEdge(px, py, xi, yi, xj, yj)) {\n inside = !inside\n }\n }\n return inside\n}\n\n/**\n * Computes the funnel-shaped safe zone connecting `anchor` (the last cursor position over\n * the trigger) to the content panel, ported from Floating UI's `safePolygon` 'left'/'right'\n * cases. Unlike a bounding-box union, this narrows toward the panel, so hovering something\n * far below/above the trigger-to-panel path (e.g. an unrelated item below a short submenu)\n * correctly falls outside the zone.\n */\nconst getFunnelPolygon = (\n anchor: { x: number; y: number },\n triggerRect: DOMRect,\n contentRect: DOMRect,\n contentIsLeft: boolean,\n): Point[] => {\n const isContentTaller = contentRect.height > triggerRect.height\n const leaveFromBottom = anchor.y > contentRect.bottom - contentRect.height / 2\n\n const yOffset = isContentTaller ? POLYGON_BUFFER / 2 : POLYGON_BUFFER * 4\n const pointOneY = isContentTaller\n ? anchor.y + yOffset\n : leaveFromBottom\n ? anchor.y + yOffset\n : anchor.y - yOffset\n const pointTwoY = isContentTaller\n ? anchor.y - yOffset\n : leaveFromBottom\n ? anchor.y + yOffset\n : anchor.y - yOffset\n\n if (contentIsLeft) {\n const cursorPointX = anchor.x + POLYGON_BUFFER + 1\n const commonXTop = leaveFromBottom\n ? contentRect.right - POLYGON_BUFFER\n : isContentTaller\n ? contentRect.right - POLYGON_BUFFER\n : contentRect.left\n const commonXBottom = leaveFromBottom\n ? isContentTaller\n ? contentRect.right - POLYGON_BUFFER\n : contentRect.left\n : contentRect.right - POLYGON_BUFFER\n\n return [\n [commonXTop, contentRect.top],\n [commonXBottom, contentRect.bottom],\n [cursorPointX, pointOneY],\n [cursorPointX, pointTwoY],\n ]\n }\n\n const cursorPointX = anchor.x - POLYGON_BUFFER\n const commonXTop = leaveFromBottom\n ? contentRect.left + POLYGON_BUFFER\n : isContentTaller\n ? contentRect.left + POLYGON_BUFFER\n : contentRect.right\n const commonXBottom = leaveFromBottom\n ? isContentTaller\n ? contentRect.left + POLYGON_BUFFER\n : contentRect.right\n : contentRect.left + POLYGON_BUFFER\n\n return [\n [cursorPointX, pointOneY],\n [cursorPointX, pointTwoY],\n [commonXTop, contentRect.top],\n [commonXBottom, contentRect.bottom],\n ]\n}\n\n/**\n * Opens a submenu on hover and keeps it open while the cursor is inside the trigger, the\n * content, the trough between them, or the funnel-shaped safe zone connecting the two -\n * closing once it has genuinely left all of those for `HOVER_CLOSE_DELAY`.\n *\n * `id` identifies this submenu within its `HoverSubmenuGroupProvider` (if any) - when\n * a sibling submenu becomes active, this one closes immediately rather than waiting on\n * its own hover-out timer.\n */\nexport const useHoverSubmenu = (id: string) => {\n const [isOpen, setIsOpen] = useState(false)\n const closeTimeoutRef = useRef<null | ReturnType<typeof setTimeout>>(null)\n const triggerRef = useRef<HTMLElement | null>(null)\n const contentRef = useRef<HTMLElement | null>(null)\n const anchorRef = useRef<{ x: number; y: number } | null>(null)\n const hasLandedRef = useRef(false)\n const group = useHoverSubmenuGroup()\n\n const cancelClose = useCallback(() => {\n if (closeTimeoutRef.current) {\n clearTimeout(closeTimeoutRef.current)\n closeTimeoutRef.current = null\n }\n }, [])\n\n const scheduleClose = useCallback(() => {\n if (closeTimeoutRef.current) {\n return\n }\n closeTimeoutRef.current = setTimeout(() => {\n setIsOpen(false)\n closeTimeoutRef.current = null\n }, HOVER_CLOSE_DELAY)\n }, [])\n\n const open = useCallback(\n (e?: { clientX: number; clientY: number }) => {\n cancelClose()\n hasLandedRef.current = false\n if (e) {\n anchorRef.current = { x: e.clientX, y: e.clientY }\n }\n group?.setActiveId(id)\n setIsOpen(true)\n },\n [cancelClose, group, id],\n )\n\n // For the content panel's own onMouseEnter - just cancels a pending close and marks us\n // as \"landed\", without touching the trigger anchor point `open()` seeds.\n const keepOpen = useCallback(() => {\n cancelClose()\n hasLandedRef.current = true\n }, [cancelClose])\n\n const close = useCallback(() => {\n cancelClose()\n setIsOpen(false)\n group?.setActiveId((current) => (current === id ? null : current))\n }, [cancelClose, group, id])\n\n // A sibling became active (its trigger was hovered) - force-close this one now,\n // instead of relying on this submenu's own hover-zone timeout to eventually catch up.\n useEffect(() => {\n if (isOpen && group && group.activeId !== null && group.activeId !== id) {\n cancelClose()\n setIsOpen(false)\n }\n }, [group, isOpen, id, cancelClose])\n\n useEffect(() => {\n if (!isOpen) {\n return\n }\n\n const handlePointerMove = (e: MouseEvent) => {\n const triggerRect = triggerRef.current?.getBoundingClientRect()\n const contentRect = contentRef.current?.getBoundingClientRect()\n if (!triggerRect || !contentRect) {\n return\n }\n\n const { clientX, clientY } = e\n\n if (isInsideRect(clientX, clientY, triggerRect)) {\n anchorRef.current = { x: clientX, y: clientY }\n hasLandedRef.current = false\n cancelClose()\n return\n }\n\n if (isInsideRect(clientX, clientY, contentRect)) {\n hasLandedRef.current = true\n cancelClose()\n return\n }\n\n const contentIsLeft = contentRect.right <= triggerRect.left + 1\n const isContentTaller = contentRect.height > triggerRect.height\n const boundTop = (isContentTaller ? triggerRect : contentRect).top\n const boundBottom = (isContentTaller ? triggerRect : contentRect).bottom\n\n // Cursor has already moved past the trigger, away from the content entirely - no\n // amount of funnel forgiveness should keep it open.\n const movedPastTrigger = contentIsLeft\n ? clientX >= triggerRect.right - 1\n : clientX <= triggerRect.left + 1\n\n // The strip directly between the trigger and content is always safe, regardless of\n // funnel shape - prevents flapping when moving back and forth in the gap.\n const troughX1 = contentIsLeft ? contentRect.right - 1 : triggerRect.right - 1\n const troughX2 = contentIsLeft ? triggerRect.left + 1 : contentRect.left + 1\n const isInsideTrough = isInsideAxisAlignedRect(\n clientX,\n clientY,\n troughX1,\n boundBottom,\n troughX2,\n boundTop,\n )\n\n if (movedPastTrigger) {\n scheduleClose()\n return\n }\n\n if (isInsideTrough) {\n cancelClose()\n return\n }\n\n if (hasLandedRef.current) {\n scheduleClose()\n return\n }\n\n const anchor = anchorRef.current ?? {\n x: contentIsLeft ? triggerRect.left : triggerRect.right,\n y: (triggerRect.top + triggerRect.bottom) / 2,\n }\n\n const polygon = getFunnelPolygon(anchor, triggerRect, contentRect, contentIsLeft)\n const isInsidePolygon = isPointInPolygon(clientX, clientY, polygon)\n\n if (isInsidePolygon) {\n cancelClose()\n } else {\n scheduleClose()\n }\n }\n\n document.addEventListener('mousemove', handlePointerMove)\n return () => document.removeEventListener('mousemove', handlePointerMove)\n }, [isOpen, cancelClose, scheduleClose])\n\n return { close, contentRef, isOpen, keepOpen, open, triggerRef }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export type DocumentViewMode = 'grid' | 'table';
3
+ export type ViewModeToggleProps = {
4
+ onChange: (viewMode: DocumentViewMode) => void;
5
+ viewMode: DocumentViewMode;
6
+ };
7
+ export declare const ViewModeToggle: React.FC<ViewModeToggleProps>;
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/ViewModeToggle/index.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,MAAM,OAAO,CAAA;AAMzB,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,OAAO,CAAA;AAE/C,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,CAAC,QAAQ,EAAE,gBAAgB,KAAK,IAAI,CAAA;IAC9C,QAAQ,EAAE,gBAAgB,CAAA;CAC3B,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CAaxD,CAAA"}
@@ -0,0 +1,29 @@
1
+ 'use client';
2
+
3
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
+ import React from 'react';
5
+ import { GridViewIcon } from '../../icons/GridView/index.js';
6
+ import { TableIcon } from '../../icons/Table/index.js';
7
+ import { SegmentedControl } from '../SegmentedControl/index.js';
8
+ export const ViewModeToggle = ({
9
+ onChange,
10
+ viewMode
11
+ }) => /*#__PURE__*/_jsxs(SegmentedControl.Root, {
12
+ legend: "View mode",
13
+ onChange: nextViewMode => onChange(nextViewMode),
14
+ value: viewMode,
15
+ children: [/*#__PURE__*/_jsx(SegmentedControl.Option, {
16
+ "aria-label": "Table view",
17
+ icon: /*#__PURE__*/_jsx(TableIcon, {
18
+ size: 24
19
+ }),
20
+ value: "table"
21
+ }), /*#__PURE__*/_jsx(SegmentedControl.Option, {
22
+ "aria-label": "Grid view",
23
+ icon: /*#__PURE__*/_jsx(GridViewIcon, {
24
+ size: 24
25
+ }),
26
+ value: "grid"
27
+ })]
28
+ });
29
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["React","GridViewIcon","TableIcon","SegmentedControl","ViewModeToggle","onChange","viewMode","_jsxs","Root","legend","nextViewMode","value","_jsx","Option","icon","size"],"sources":["../../../src/elements/ViewModeToggle/index.tsx"],"sourcesContent":["'use client'\n\nimport React from 'react'\n\nimport { GridViewIcon } from '../../icons/GridView/index.js'\nimport { TableIcon } from '../../icons/Table/index.js'\nimport { SegmentedControl } from '../SegmentedControl/index.js'\n\nexport type DocumentViewMode = 'grid' | 'table'\n\nexport type ViewModeToggleProps = {\n onChange: (viewMode: DocumentViewMode) => void\n viewMode: DocumentViewMode\n}\n\nexport const ViewModeToggle: React.FC<ViewModeToggleProps> = ({ onChange, viewMode }) => (\n <SegmentedControl.Root\n legend=\"View mode\"\n onChange={(nextViewMode) => onChange(nextViewMode as DocumentViewMode)}\n value={viewMode}\n >\n <SegmentedControl.Option aria-label=\"Table view\" icon={<TableIcon size={24} />} value=\"table\" />\n <SegmentedControl.Option\n aria-label=\"Grid view\"\n icon={<GridViewIcon size={24} />}\n value=\"grid\"\n />\n </SegmentedControl.Root>\n)\n"],"mappings":"AAAA;;;AAEA,OAAOA,KAAA,MAAW;AAElB,SAASC,YAAY,QAAQ;AAC7B,SAASC,SAAS,QAAQ;AAC1B,SAASC,gBAAgB,QAAQ;AASjC,OAAO,MAAMC,cAAA,GAAgDA,CAAC;EAAEC,QAAQ;EAAEC;AAAQ,CAAE,kBAClFC,KAAA,CAACJ,gBAAA,CAAiBK,IAAI;EACpBC,MAAA,EAAO;EACPJ,QAAA,EAAWK,YAAA,IAAiBL,QAAA,CAASK,YAAA;EACrCC,KAAA,EAAOL,QAAA;0BAEPM,IAAA,CAACT,gBAAA,CAAiBU,MAAM;IAAC,cAAW;IAAaC,IAAA,eAAMF,IAAA,CAACV,SAAA;MAAUa,IAAA,EAAM;;IAAQJ,KAAA,EAAM;mBACtFC,IAAA,CAACT,gBAAA,CAAiBU,MAAM;IACtB,cAAW;IACXC,IAAA,eAAMF,IAAA,CAACX,YAAA;MAAac,IAAA,EAAM;;IAC1BJ,KAAA,EAAM","ignoreList":[]}
@@ -0,0 +1,32 @@
1
+ import type { UpdateCondition } from './types.js';
2
+ type UpdateType = Parameters<UpdateCondition>[0]['type'];
3
+ /**
4
+ * A row that holds no value yet. Empty arrives as `''` from the URL, `null` from a cleared
5
+ * select, or `undefined` from a row that was added but never filled in.
6
+ */
7
+ export declare const isEmptyConditionValue: ({ value }: {
8
+ value: unknown;
9
+ }) => boolean;
10
+ /**
11
+ * The value a row renders with. Only a missing value becomes `undefined`. `0` and `false` are
12
+ * real filter values, so they must survive.
13
+ */
14
+ export declare const getDisplayedConditionValue: <T>({ value }: {
15
+ value: T;
16
+ }) => T | undefined;
17
+ /**
18
+ * Whether an edit leaves the row unchanged, and so must not be committed.
19
+ *
20
+ * An empty row renders blank and reports `undefined` back up as soon as it mounts. Committing
21
+ * that stores `{ [operator]: undefined }`, which `qs.stringify` drops when the query is written
22
+ * to the URL — so the row is gone on the next parse.
23
+ *
24
+ * Field and operator edits change the row even while it holds no value, so they always commit.
25
+ */
26
+ export declare const isNoOpConditionValueUpdate: ({ type, incomingValue, storedValue, }: {
27
+ incomingValue: unknown;
28
+ storedValue: unknown;
29
+ type: UpdateType;
30
+ }) => boolean;
31
+ export {};
32
+ //# sourceMappingURL=conditionValue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionValue.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/conditionValue.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAEjD,KAAK,UAAU,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;AAExD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,cAAe;IAAE,KAAK,EAAE,OAAO,CAAA;CAAE,KAAG,OACf,CAAA;AAEvD;;;GAGG;AACH,eAAO,MAAM,0BAA0B,GAAI,CAAC,aAAa;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,KAAG,CAAC,GAAG,SACxD,CAAA;AAEpB;;;;;;;;GAQG;AACH,eAAO,MAAM,0BAA0B,0CAIpC;IACD,aAAa,EAAE,OAAO,CAAA;IACtB,WAAW,EAAE,OAAO,CAAA;IACpB,IAAI,EAAE,UAAU,CAAA;CACjB,KAAG,OAG6C,CAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * A row that holds no value yet. Empty arrives as `''` from the URL, `null` from a cleared
3
+ * select, or `undefined` from a row that was added but never filled in.
4
+ */export const isEmptyConditionValue = ({
5
+ value
6
+ }) => value === undefined || value === null || value === '';
7
+ /**
8
+ * The value a row renders with. Only a missing value becomes `undefined`. `0` and `false` are
9
+ * real filter values, so they must survive.
10
+ */
11
+ export const getDisplayedConditionValue = ({
12
+ value
13
+ }) => value ?? undefined;
14
+ /**
15
+ * Whether an edit leaves the row unchanged, and so must not be committed.
16
+ *
17
+ * An empty row renders blank and reports `undefined` back up as soon as it mounts. Committing
18
+ * that stores `{ [operator]: undefined }`, which `qs.stringify` drops when the query is written
19
+ * to the URL — so the row is gone on the next parse.
20
+ *
21
+ * Field and operator edits change the row even while it holds no value, so they always commit.
22
+ */
23
+ export const isNoOpConditionValueUpdate = ({
24
+ type,
25
+ incomingValue,
26
+ storedValue
27
+ }) => type === 'value' && isEmptyConditionValue({
28
+ value: storedValue
29
+ }) && isEmptyConditionValue({
30
+ value: incomingValue
31
+ });
32
+ //# sourceMappingURL=conditionValue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionValue.js","names":["isEmptyConditionValue","value","undefined","getDisplayedConditionValue","isNoOpConditionValueUpdate","type","incomingValue","storedValue"],"sources":["../../../src/elements/WhereBuilder/conditionValue.ts"],"sourcesContent":["import type { UpdateCondition } from './types.js'\n\ntype UpdateType = Parameters<UpdateCondition>[0]['type']\n\n/**\n * A row that holds no value yet. Empty arrives as `''` from the URL, `null` from a cleared\n * select, or `undefined` from a row that was added but never filled in.\n */\nexport const isEmptyConditionValue = ({ value }: { value: unknown }): boolean =>\n value === undefined || value === null || value === ''\n\n/**\n * The value a row renders with. Only a missing value becomes `undefined`. `0` and `false` are\n * real filter values, so they must survive.\n */\nexport const getDisplayedConditionValue = <T>({ value }: { value: T }): T | undefined =>\n value ?? undefined\n\n/**\n * Whether an edit leaves the row unchanged, and so must not be committed.\n *\n * An empty row renders blank and reports `undefined` back up as soon as it mounts. Committing\n * that stores `{ [operator]: undefined }`, which `qs.stringify` drops when the query is written\n * to the URL — so the row is gone on the next parse.\n *\n * Field and operator edits change the row even while it holds no value, so they always commit.\n */\nexport const isNoOpConditionValueUpdate = ({\n type,\n incomingValue,\n storedValue,\n}: {\n incomingValue: unknown\n storedValue: unknown\n type: UpdateType\n}): boolean =>\n type === 'value' &&\n isEmptyConditionValue({ value: storedValue }) &&\n isEmptyConditionValue({ value: incomingValue })\n"],"mappings":"AAIA;;;GAIA,OAAO,MAAMA,qBAAA,GAAwBA,CAAC;EAAEC;AAAK,CAAsB,KACjEA,KAAA,KAAUC,SAAA,IAAaD,KAAA,KAAU,QAAQA,KAAA,KAAU;AAErD;;;;AAIA,OAAO,MAAME,0BAAA,GAA6BA,CAAI;EAAEF;AAAK,CAAgB,KACnEA,KAAA,IAASC,SAAA;AAEX;;;;;;;;;AASA,OAAO,MAAME,0BAAA,GAA6BA,CAAC;EACzCC,IAAI;EACJC,aAAa;EACbC;AAAW,CAKZ,KACCF,IAAA,KAAS,WACTL,qBAAA,CAAsB;EAAEC,KAAA,EAAOM;AAAY,MAC3CP,qBAAA,CAAsB;EAAEC,KAAA,EAAOK;AAAc","ignoreList":[]}
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { getDisplayedConditionValue, isEmptyConditionValue, isNoOpConditionValueUpdate } from './conditionValue.js';
3
+ describe('isEmptyConditionValue', () => {
4
+ it.each([['undefined', undefined], ['null', null], ['an empty string', '']])('should treat %s as empty', (_label, value) => {
5
+ expect(isEmptyConditionValue({
6
+ value
7
+ })).toBe(true);
8
+ });
9
+ it.each([['a string', 'option1'], ['zero', 0], ['false', false]])('should treat %s as a real value', (_label, value) => {
10
+ expect(isEmptyConditionValue({
11
+ value
12
+ })).toBe(false);
13
+ });
14
+ });
15
+ describe('getDisplayedConditionValue', () => {
16
+ it.each([['undefined', undefined], ['null', null]])('should display %s as no value', (_label, value) => {
17
+ expect(getDisplayedConditionValue({
18
+ value
19
+ })).toBeUndefined();
20
+ });
21
+ it.each([['zero', 0], ['false', false], ['an empty string', ''], ['a string', 'option1']])('should display %s as itself', (_label, value) => {
22
+ expect(getDisplayedConditionValue({
23
+ value
24
+ })).toBe(value);
25
+ });
26
+ });
27
+ describe('isNoOpConditionValueUpdate', () => {
28
+ it('should skip the empty value a row reports back for a stored empty string', () => {
29
+ // The row this covers comes from a URL such as `?where[or][0][and][0][field][equals]=`.
30
+ expect(isNoOpConditionValueUpdate({
31
+ incomingValue: undefined,
32
+ storedValue: '',
33
+ type: 'value'
34
+ })).toBe(true);
35
+ });
36
+ it.each([['undefined', 'an empty string', undefined, ''], ['null', 'undefined', null, undefined], ['undefined', 'undefined', undefined, undefined]])('should skip a %s value stored as %s', (_incomingLabel, _storedLabel, incomingValue, storedValue) => {
37
+ expect(isNoOpConditionValueUpdate({
38
+ incomingValue,
39
+ storedValue,
40
+ type: 'value'
41
+ })).toBe(true);
42
+ });
43
+ it('should commit a value typed into an empty row', () => {
44
+ expect(isNoOpConditionValueUpdate({
45
+ incomingValue: 'option1',
46
+ storedValue: '',
47
+ type: 'value'
48
+ })).toBe(false);
49
+ });
50
+ it('should commit a row the user cleared', () => {
51
+ expect(isNoOpConditionValueUpdate({
52
+ incomingValue: undefined,
53
+ storedValue: 'option1',
54
+ type: 'value'
55
+ })).toBe(false);
56
+ });
57
+ it.each([['field'], ['operator']])('should commit a %s edit on a row that holds no value', type => {
58
+ expect(isNoOpConditionValueUpdate({
59
+ incomingValue: undefined,
60
+ storedValue: '',
61
+ type
62
+ })).toBe(false);
63
+ });
64
+ });
65
+ //# sourceMappingURL=conditionValue.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionValue.spec.js","names":["describe","expect","it","getDisplayedConditionValue","isEmptyConditionValue","isNoOpConditionValueUpdate","each","undefined","_label","value","toBe","toBeUndefined","incomingValue","storedValue","type","_incomingLabel","_storedLabel"],"sources":["../../../src/elements/WhereBuilder/conditionValue.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport {\n getDisplayedConditionValue,\n isEmptyConditionValue,\n isNoOpConditionValueUpdate,\n} from './conditionValue.js'\n\ndescribe('isEmptyConditionValue', () => {\n it.each([\n ['undefined', undefined],\n ['null', null],\n ['an empty string', ''],\n ])('should treat %s as empty', (_label, value) => {\n expect(isEmptyConditionValue({ value })).toBe(true)\n })\n\n it.each([\n ['a string', 'option1'],\n ['zero', 0],\n ['false', false],\n ])('should treat %s as a real value', (_label, value) => {\n expect(isEmptyConditionValue({ value })).toBe(false)\n })\n})\n\ndescribe('getDisplayedConditionValue', () => {\n it.each([\n ['undefined', undefined],\n ['null', null],\n ])('should display %s as no value', (_label, value) => {\n expect(getDisplayedConditionValue({ value })).toBeUndefined()\n })\n\n it.each([\n ['zero', 0],\n ['false', false],\n ['an empty string', ''],\n ['a string', 'option1'],\n ])('should display %s as itself', (_label, value) => {\n expect(getDisplayedConditionValue({ value })).toBe(value)\n })\n})\n\ndescribe('isNoOpConditionValueUpdate', () => {\n it('should skip the empty value a row reports back for a stored empty string', () => {\n // The row this covers comes from a URL such as `?where[or][0][and][0][field][equals]=`.\n expect(\n isNoOpConditionValueUpdate({ incomingValue: undefined, storedValue: '', type: 'value' }),\n ).toBe(true)\n })\n\n it.each([\n ['undefined', 'an empty string', undefined, ''],\n ['null', 'undefined', null, undefined],\n ['undefined', 'undefined', undefined, undefined],\n ])(\n 'should skip a %s value stored as %s',\n (_incomingLabel, _storedLabel, incomingValue, storedValue) => {\n expect(isNoOpConditionValueUpdate({ incomingValue, storedValue, type: 'value' })).toBe(true)\n },\n )\n\n it('should commit a value typed into an empty row', () => {\n expect(\n isNoOpConditionValueUpdate({ incomingValue: 'option1', storedValue: '', type: 'value' }),\n ).toBe(false)\n })\n\n it('should commit a row the user cleared', () => {\n expect(\n isNoOpConditionValueUpdate({\n incomingValue: undefined,\n storedValue: 'option1',\n type: 'value',\n }),\n ).toBe(false)\n })\n\n it.each([['field'], ['operator']] as const)(\n 'should commit a %s edit on a row that holds no value',\n (type) => {\n expect(isNoOpConditionValueUpdate({ incomingValue: undefined, storedValue: '', type })).toBe(\n false,\n )\n },\n )\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SACEC,0BAA0B,EAC1BC,qBAAqB,EACrBC,0BAA0B,QACrB;AAEPL,QAAA,CAAS,yBAAyB;EAChCE,EAAA,CAAGI,IAAI,CAAC,CACN,CAAC,aAAaC,SAAA,CAAU,EACxB,CAAC,QAAQ,KAAK,EACd,CAAC,mBAAmB,GAAG,CACxB,EAAE,4BAA4B,CAACC,MAAA,EAAQC,KAAA;IACtCR,MAAA,CAAOG,qBAAA,CAAsB;MAAEK;IAAM,IAAIC,IAAI,CAAC;EAChD;EAEAR,EAAA,CAAGI,IAAI,CAAC,CACN,CAAC,YAAY,UAAU,EACvB,CAAC,QAAQ,EAAE,EACX,CAAC,SAAS,MAAM,CACjB,EAAE,mCAAmC,CAACE,MAAA,EAAQC,KAAA;IAC7CR,MAAA,CAAOG,qBAAA,CAAsB;MAAEK;IAAM,IAAIC,IAAI,CAAC;EAChD;AACF;AAEAV,QAAA,CAAS,8BAA8B;EACrCE,EAAA,CAAGI,IAAI,CAAC,CACN,CAAC,aAAaC,SAAA,CAAU,EACxB,CAAC,QAAQ,KAAK,CACf,EAAE,iCAAiC,CAACC,MAAA,EAAQC,KAAA;IAC3CR,MAAA,CAAOE,0BAAA,CAA2B;MAAEM;IAAM,IAAIE,aAAa;EAC7D;EAEAT,EAAA,CAAGI,IAAI,CAAC,CACN,CAAC,QAAQ,EAAE,EACX,CAAC,SAAS,MAAM,EAChB,CAAC,mBAAmB,GAAG,EACvB,CAAC,YAAY,UAAU,CACxB,EAAE,+BAA+B,CAACE,MAAA,EAAQC,KAAA;IACzCR,MAAA,CAAOE,0BAAA,CAA2B;MAAEM;IAAM,IAAIC,IAAI,CAACD,KAAA;EACrD;AACF;AAEAT,QAAA,CAAS,8BAA8B;EACrCE,EAAA,CAAG,4EAA4E;IAC7E;IACAD,MAAA,CACEI,0BAAA,CAA2B;MAAEO,aAAA,EAAeL,SAAA;MAAWM,WAAA,EAAa;MAAIC,IAAA,EAAM;IAAQ,IACtFJ,IAAI,CAAC;EACT;EAEAR,EAAA,CAAGI,IAAI,CAAC,CACN,CAAC,aAAa,mBAAmBC,SAAA,EAAW,GAAG,EAC/C,CAAC,QAAQ,aAAa,MAAMA,SAAA,CAAU,EACtC,CAAC,aAAa,aAAaA,SAAA,EAAWA,SAAA,CAAU,CACjD,EACC,uCACA,CAACQ,cAAA,EAAgBC,YAAA,EAAcJ,aAAA,EAAeC,WAAA;IAC5CZ,MAAA,CAAOI,0BAAA,CAA2B;MAAEO,aAAA;MAAeC,WAAA;MAAaC,IAAA,EAAM;IAAQ,IAAIJ,IAAI,CAAC;EACzF;EAGFR,EAAA,CAAG,iDAAiD;IAClDD,MAAA,CACEI,0BAAA,CAA2B;MAAEO,aAAA,EAAe;MAAWC,WAAA,EAAa;MAAIC,IAAA,EAAM;IAAQ,IACtFJ,IAAI,CAAC;EACT;EAEAR,EAAA,CAAG,wCAAwC;IACzCD,MAAA,CACEI,0BAAA,CAA2B;MACzBO,aAAA,EAAeL,SAAA;MACfM,WAAA,EAAa;MACbC,IAAA,EAAM;IACR,IACAJ,IAAI,CAAC;EACT;EAEAR,EAAA,CAAGI,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,WAAW,CAAC,EAC/B,wDACCQ,IAAA;IACCb,MAAA,CAAOI,0BAAA,CAA2B;MAAEO,aAAA,EAAeL,SAAA;MAAWM,WAAA,EAAa;MAAIC;IAAK,IAAIJ,IAAI,CAC1F;EAEJ;AAEJ","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAQnB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsRpD,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/WhereBuilder/index.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAkB,MAAM,OAAO,CAAA;AAEtC,OAAO,KAAK,EAKV,iBAAiB,EAClB,MAAM,YAAY,CAAA;AAanB,OAAO,aAAa,CAAA;AAKpB,OAAO,EAAE,iBAAiB,EAAE,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CA6RpD,CAAA"}