@payloadcms/ui 4.0.0-internal.cc18726 → 4.0.0-internal.cd47d20

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 (752) hide show
  1. package/dist/css/app.css +1 -0
  2. package/dist/css/preflight.css +1 -0
  3. package/dist/css/spacing.css +3 -0
  4. package/dist/elements/APIKeyInput/index.d.ts +2 -0
  5. package/dist/elements/APIKeyInput/index.d.ts.map +1 -1
  6. package/dist/elements/APIKeyInput/index.js +27 -29
  7. package/dist/elements/APIKeyInput/index.js.map +1 -1
  8. package/dist/elements/AddNewRelation/index.d.ts.map +1 -1
  9. package/dist/elements/AddNewRelation/index.js +1 -0
  10. package/dist/elements/AddNewRelation/index.js.map +1 -1
  11. package/dist/elements/AppHeader/index.css +3 -0
  12. package/dist/elements/ArrayAction/index.d.ts +1 -0
  13. package/dist/elements/ArrayAction/index.d.ts.map +1 -1
  14. package/dist/elements/ArrayAction/index.js +35 -32
  15. package/dist/elements/ArrayAction/index.js.map +1 -1
  16. package/dist/elements/Banner/index.css +4 -0
  17. package/dist/elements/Banner/index.d.ts.map +1 -1
  18. package/dist/elements/Banner/index.js +1 -0
  19. package/dist/elements/Banner/index.js.map +1 -1
  20. package/dist/elements/BulkUpload/ActionsBar/index.css +1 -0
  21. package/dist/elements/BulkUpload/AddingFilesView/index.css +2 -4
  22. package/dist/elements/BulkUpload/FileSidebar/index.css +1 -0
  23. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts +1 -1
  24. package/dist/elements/BulkUpload/FormsManager/createFormData.d.ts.map +1 -1
  25. package/dist/elements/BulkUpload/FormsManager/createFormData.js +7 -3
  26. package/dist/elements/BulkUpload/FormsManager/createFormData.js.map +1 -1
  27. package/dist/elements/BulkUpload/FormsManager/index.d.ts.map +1 -1
  28. package/dist/elements/BulkUpload/FormsManager/index.js +16 -9
  29. package/dist/elements/BulkUpload/FormsManager/index.js.map +1 -1
  30. package/dist/elements/BulkUpload/index.css +2 -0
  31. package/dist/elements/Button/index.d.ts.map +1 -1
  32. package/dist/elements/Button/index.js +11 -0
  33. package/dist/elements/Button/index.js.map +1 -1
  34. package/dist/elements/Button/types.d.ts +7 -2
  35. package/dist/elements/Button/types.d.ts.map +1 -1
  36. package/dist/elements/Button/types.js.map +1 -1
  37. package/dist/elements/ClipboardAction/index.d.ts.map +1 -1
  38. package/dist/elements/ClipboardAction/index.js +1 -0
  39. package/dist/elements/ClipboardAction/index.js.map +1 -1
  40. package/dist/elements/Collapsible/index.css +1 -0
  41. package/dist/elements/ColumnSelection/index.d.ts.map +1 -1
  42. package/dist/elements/ColumnSelection/index.js +59 -55
  43. package/dist/elements/ColumnSelection/index.js.map +1 -1
  44. package/dist/elements/Combobox/index.d.ts.map +1 -1
  45. package/dist/elements/Combobox/index.js +2 -0
  46. package/dist/elements/Combobox/index.js.map +1 -1
  47. package/dist/elements/CreateDocumentButton/index.d.ts.map +1 -1
  48. package/dist/elements/CreateDocumentButton/index.js +1 -0
  49. package/dist/elements/CreateDocumentButton/index.js.map +1 -1
  50. package/dist/elements/DatePicker/DatePicker.d.ts.map +1 -1
  51. package/dist/elements/DatePicker/DatePicker.js +113 -83
  52. package/dist/elements/DatePicker/DatePicker.js.map +1 -1
  53. package/dist/elements/DatePicker/index.css +7 -0
  54. package/dist/elements/Dialog/DialogModal/index.d.ts +1 -1
  55. package/dist/elements/Dialog/DialogModal/index.d.ts.map +1 -1
  56. package/dist/elements/Dialog/DialogModal/index.js +1 -1
  57. package/dist/elements/Dialog/DialogModal/index.js.map +1 -1
  58. package/dist/elements/Dialog/index.css +1 -0
  59. package/dist/elements/DocumentControls/index.css +1 -0
  60. package/dist/elements/DocumentControls/index.d.ts.map +1 -1
  61. package/dist/elements/DocumentControls/index.js +1 -0
  62. package/dist/elements/DocumentControls/index.js.map +1 -1
  63. package/dist/elements/DocumentDrawer/DrawerHeader/index.js +2 -2
  64. package/dist/elements/DocumentDrawer/DrawerHeader/index.js.map +1 -1
  65. package/dist/elements/DocumentFields/index.css +2 -0
  66. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts +1 -0
  67. package/dist/elements/DocumentHeader/Tabs/Tab/index.d.ts.map +1 -1
  68. package/dist/elements/DocumentHeader/Tabs/Tab/index.js +3 -2
  69. package/dist/elements/DocumentHeader/Tabs/Tab/index.js.map +1 -1
  70. package/dist/elements/DocumentHeader/Tabs/index.css +1 -0
  71. package/dist/elements/DocumentHeader/Tabs/index.d.ts +1 -0
  72. package/dist/elements/DocumentHeader/Tabs/index.d.ts.map +1 -1
  73. package/dist/elements/DocumentHeader/Tabs/index.js +5 -3
  74. package/dist/elements/DocumentHeader/Tabs/index.js.map +1 -1
  75. package/dist/elements/DocumentHeader/index.css +1 -0
  76. package/dist/elements/DocumentHeader/index.d.ts +1 -0
  77. package/dist/elements/DocumentHeader/index.d.ts.map +1 -1
  78. package/dist/elements/DocumentHeader/index.js +4 -2
  79. package/dist/elements/DocumentHeader/index.js.map +1 -1
  80. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts +1 -1
  81. package/dist/elements/DraggableSortable/DraggableSortableItem/types.d.ts.map +1 -1
  82. package/dist/elements/DraggableSortable/DraggableSortableItem/types.js.map +1 -1
  83. package/dist/elements/DraggableSortable/useDraggableSortable/index.d.ts.map +1 -1
  84. package/dist/elements/DraggableSortable/useDraggableSortable/index.js +11 -8
  85. package/dist/elements/DraggableSortable/useDraggableSortable/index.js.map +1 -1
  86. package/dist/elements/DraggableSortable/useDraggableSortable/types.d.ts +1 -0
  87. package/dist/elements/DraggableSortable/useDraggableSortable/types.d.ts.map +1 -1
  88. package/dist/elements/DraggableSortable/useDraggableSortable/types.js.map +1 -1
  89. package/dist/elements/Drawer/index.d.ts.map +1 -1
  90. package/dist/elements/Drawer/index.js +3 -1
  91. package/dist/elements/Drawer/index.js.map +1 -1
  92. package/dist/elements/EditUpload/index.css +2 -1
  93. package/dist/elements/EditUpload/index.js +53 -12
  94. package/dist/elements/EditUpload/index.js.map +1 -1
  95. package/dist/elements/FieldDiffContainer/index.css +1 -0
  96. package/dist/elements/FieldDiffContainer/index.js +1 -1
  97. package/dist/elements/FieldDiffContainer/index.js.map +1 -1
  98. package/dist/elements/FieldDiffLabel/index.css +1 -0
  99. package/dist/elements/FieldSelect/index.d.ts.map +1 -1
  100. package/dist/elements/FieldSelect/index.js +41 -24
  101. package/dist/elements/FieldSelect/index.js.map +1 -1
  102. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts +5 -1
  103. package/dist/elements/FieldSelect/reduceFieldOptions.d.ts.map +1 -1
  104. package/dist/elements/FieldSelect/reduceFieldOptions.js +24 -4
  105. package/dist/elements/FieldSelect/reduceFieldOptions.js.map +1 -1
  106. package/dist/elements/FileDetails/StaticFileDetails/index.css +2 -0
  107. package/dist/elements/FileManager/FileToolbar/index.d.ts.map +1 -1
  108. package/dist/elements/FileManager/FileToolbar/index.js +1 -0
  109. package/dist/elements/FileManager/FileToolbar/index.js.map +1 -1
  110. package/dist/elements/FilterTrigger/index.d.ts +5 -1
  111. package/dist/elements/FilterTrigger/index.d.ts.map +1 -1
  112. package/dist/elements/FilterTrigger/index.js +6 -0
  113. package/dist/elements/FilterTrigger/index.js.map +1 -1
  114. package/dist/elements/FullscreenModal/index.d.ts.map +1 -1
  115. package/dist/elements/FullscreenModal/index.js +1 -1
  116. package/dist/elements/FullscreenModal/index.js.map +1 -1
  117. package/dist/elements/GroupBy/Popup.d.ts.map +1 -1
  118. package/dist/elements/GroupBy/Popup.js +74 -45
  119. package/dist/elements/GroupBy/Popup.js.map +1 -1
  120. package/dist/elements/GroupBy/index.d.ts.map +1 -1
  121. package/dist/elements/GroupBy/index.js +2 -0
  122. package/dist/elements/GroupBy/index.js.map +1 -1
  123. package/dist/elements/HTMLDiff/index.css +1 -0
  124. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.css +3 -0
  125. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.d.ts.map +1 -1
  126. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js +60 -47
  127. package/dist/elements/Hierarchy/ColumnBrowser/Column/index.js.map +1 -1
  128. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.d.ts.map +1 -1
  129. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js +34 -27
  130. package/dist/elements/Hierarchy/ColumnBrowser/ColumnItem/index.js.map +1 -1
  131. package/dist/elements/Hierarchy/Field/index.server.d.ts +3 -2
  132. package/dist/elements/Hierarchy/Field/index.server.d.ts.map +1 -1
  133. package/dist/elements/Hierarchy/Field/index.server.js.map +1 -1
  134. package/dist/elements/Hierarchy/Search/index.d.ts.map +1 -1
  135. package/dist/elements/Hierarchy/Search/index.js +6 -7
  136. package/dist/elements/Hierarchy/Search/index.js.map +1 -1
  137. package/dist/elements/ItemsDrawer/index.css +3 -0
  138. package/dist/elements/ListControls/index.css +1 -0
  139. package/dist/elements/ListControls/index.d.ts.map +1 -1
  140. package/dist/elements/ListControls/index.js +8 -1
  141. package/dist/elements/ListControls/index.js.map +1 -1
  142. package/dist/elements/ListControls/types.d.ts +3 -1
  143. package/dist/elements/ListControls/types.d.ts.map +1 -1
  144. package/dist/elements/ListControls/types.js.map +1 -1
  145. package/dist/elements/ListControlsBar/index.css +1 -0
  146. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js +1 -1
  147. package/dist/elements/ListHeader/TitleActions/ListEmptyTrashButton.js.map +1 -1
  148. package/dist/elements/LivePreview/Toolbar/Controls/index.d.ts.map +1 -1
  149. package/dist/elements/LivePreview/Toolbar/Controls/index.js +3 -0
  150. package/dist/elements/LivePreview/Toolbar/Controls/index.js.map +1 -1
  151. package/dist/elements/LivePreview/Window/index.css +1 -0
  152. package/dist/elements/Localizer/index.d.ts +3 -6
  153. package/dist/elements/Localizer/index.d.ts.map +1 -1
  154. package/dist/elements/Localizer/index.js +19 -11
  155. package/dist/elements/Localizer/index.js.map +1 -1
  156. package/dist/elements/Modal/index.d.ts +5 -1
  157. package/dist/elements/Modal/index.d.ts.map +1 -1
  158. package/dist/elements/Modal/index.js +69 -1
  159. package/dist/elements/Modal/index.js.map +1 -1
  160. package/dist/elements/Nav/SettingsMenuButton/index.d.ts.map +1 -1
  161. package/dist/elements/Nav/SettingsMenuButton/index.js +1 -0
  162. package/dist/elements/Nav/SettingsMenuButton/index.js.map +1 -1
  163. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js +3 -2
  164. package/dist/elements/Nav/SidebarTabs/renderTabServerFn.js.map +1 -1
  165. package/dist/elements/Nav/getNavPrefs.d.ts.map +1 -1
  166. package/dist/elements/Nav/getNavPrefs.js +2 -0
  167. package/dist/elements/Nav/getNavPrefs.js.map +1 -1
  168. package/dist/elements/Nav/index.css +2 -0
  169. package/dist/elements/PageControls/GroupByPageControls.d.ts +1 -0
  170. package/dist/elements/PageControls/GroupByPageControls.d.ts.map +1 -1
  171. package/dist/elements/PageControls/GroupByPageControls.js +9 -6
  172. package/dist/elements/PageControls/GroupByPageControls.js.map +1 -1
  173. package/dist/elements/PageControls/index.css +1 -0
  174. package/dist/elements/PageControls/index.d.ts +2 -0
  175. package/dist/elements/PageControls/index.d.ts.map +1 -1
  176. package/dist/elements/PageControls/index.js +21 -12
  177. package/dist/elements/PageControls/index.js.map +1 -1
  178. package/dist/elements/Pagination/ClickableArrow/index.d.ts +1 -0
  179. package/dist/elements/Pagination/ClickableArrow/index.d.ts.map +1 -1
  180. package/dist/elements/Pagination/ClickableArrow/index.js +2 -0
  181. package/dist/elements/Pagination/ClickableArrow/index.js.map +1 -1
  182. package/dist/elements/Pagination/SimplePagination/index.d.ts +1 -0
  183. package/dist/elements/Pagination/SimplePagination/index.d.ts.map +1 -1
  184. package/dist/elements/Pagination/SimplePagination/index.js +14 -8
  185. package/dist/elements/Pagination/SimplePagination/index.js.map +1 -1
  186. package/dist/elements/Pagination/index.d.ts +1 -0
  187. package/dist/elements/Pagination/index.d.ts.map +1 -1
  188. package/dist/elements/Pagination/index.js +17 -12
  189. package/dist/elements/Pagination/index.js.map +1 -1
  190. package/dist/elements/PerPage/index.d.ts +1 -0
  191. package/dist/elements/PerPage/index.d.ts.map +1 -1
  192. package/dist/elements/PerPage/index.js +22 -15
  193. package/dist/elements/PerPage/index.js.map +1 -1
  194. package/dist/elements/PillSelector/index.css +1 -0
  195. package/dist/elements/Popup/PopupButtonList/index.d.ts +8 -0
  196. package/dist/elements/Popup/PopupButtonList/index.d.ts.map +1 -1
  197. package/dist/elements/Popup/PopupButtonList/index.js +50 -6
  198. package/dist/elements/Popup/PopupButtonList/index.js.map +1 -1
  199. package/dist/elements/Popup/PopupTrigger/index.d.ts +9 -2
  200. package/dist/elements/Popup/PopupTrigger/index.d.ts.map +1 -1
  201. package/dist/elements/Popup/PopupTrigger/index.js +58 -6
  202. package/dist/elements/Popup/PopupTrigger/index.js.map +1 -1
  203. package/dist/elements/Popup/index.css +4 -2
  204. package/dist/elements/Popup/index.d.ts +6 -27
  205. package/dist/elements/Popup/index.d.ts.map +1 -1
  206. package/dist/elements/Popup/index.js +114 -75
  207. package/dist/elements/Popup/index.js.map +1 -1
  208. package/dist/elements/PreviewSizes/index.css +2 -0
  209. package/dist/elements/PublishButton/index.css +1 -0
  210. package/dist/elements/PublishButton/index.d.ts.map +1 -1
  211. package/dist/elements/PublishButton/index.js +11 -25
  212. package/dist/elements/PublishButton/index.js.map +1 -1
  213. package/dist/elements/QueryPresets/QueryPresetBar/index.d.ts.map +1 -1
  214. package/dist/elements/QueryPresets/QueryPresetBar/index.js +18 -2
  215. package/dist/elements/QueryPresets/QueryPresetBar/index.js.map +1 -1
  216. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts +3 -2
  217. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  218. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  219. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts +3 -2
  220. package/dist/elements/QueryPresets/fields/GroupByField/index.d.ts.map +1 -1
  221. package/dist/elements/QueryPresets/fields/GroupByField/index.js.map +1 -1
  222. package/dist/elements/QueryPresets/fields/Heading/index.css +1 -0
  223. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts +3 -2
  224. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
  225. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  226. package/dist/elements/ReactSelect/ClearIndicator/index.css +5 -0
  227. package/dist/elements/ReactSelect/ClearIndicator/index.d.ts.map +1 -1
  228. package/dist/elements/ReactSelect/ClearIndicator/index.js +51 -20
  229. package/dist/elements/ReactSelect/ClearIndicator/index.js.map +1 -1
  230. package/dist/elements/ReactSelect/DefaultMenuPortal.d.ts.map +1 -1
  231. package/dist/elements/ReactSelect/DefaultMenuPortal.js +2 -1
  232. package/dist/elements/ReactSelect/DefaultMenuPortal.js.map +1 -1
  233. package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts +2 -4
  234. package/dist/elements/ReactSelect/DropdownIndicator/index.d.ts.map +1 -1
  235. package/dist/elements/ReactSelect/DropdownIndicator/index.js +16 -21
  236. package/dist/elements/ReactSelect/DropdownIndicator/index.js.map +1 -1
  237. package/dist/elements/ReactSelect/MultiValue/context.d.ts +6 -0
  238. package/dist/elements/ReactSelect/MultiValue/context.d.ts.map +1 -0
  239. package/dist/elements/ReactSelect/MultiValue/context.js +5 -0
  240. package/dist/elements/ReactSelect/MultiValue/context.js.map +1 -0
  241. package/dist/elements/ReactSelect/MultiValue/index.css +5 -0
  242. package/dist/elements/ReactSelect/MultiValue/index.d.ts.map +1 -1
  243. package/dist/elements/ReactSelect/MultiValue/index.js +89 -35
  244. package/dist/elements/ReactSelect/MultiValue/index.js.map +1 -1
  245. package/dist/elements/ReactSelect/MultiValueLabel/index.css +41 -1
  246. package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts +5 -1
  247. package/dist/elements/ReactSelect/MultiValueLabel/index.d.ts.map +1 -1
  248. package/dist/elements/ReactSelect/MultiValueLabel/index.js +49 -4
  249. package/dist/elements/ReactSelect/MultiValueLabel/index.js.map +1 -1
  250. package/dist/elements/ReactSelect/MultiValueRemove/index.css +30 -4
  251. package/dist/elements/ReactSelect/MultiValueRemove/index.d.ts.map +1 -1
  252. package/dist/elements/ReactSelect/MultiValueRemove/index.js +92 -66
  253. package/dist/elements/ReactSelect/MultiValueRemove/index.js.map +1 -1
  254. package/dist/elements/ReactSelect/Option/index.d.ts +6 -0
  255. package/dist/elements/ReactSelect/Option/index.d.ts.map +1 -0
  256. package/dist/elements/ReactSelect/Option/index.js +30 -0
  257. package/dist/elements/ReactSelect/Option/index.js.map +1 -0
  258. package/dist/elements/ReactSelect/index.d.ts.map +1 -1
  259. package/dist/elements/ReactSelect/index.js +4 -1
  260. package/dist/elements/ReactSelect/index.js.map +1 -1
  261. package/dist/elements/ReactSelect/types.d.ts +7 -1
  262. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  263. package/dist/elements/ReactSelect/types.js.map +1 -1
  264. package/dist/elements/RelationshipTable/AddNewButton.d.ts.map +1 -1
  265. package/dist/elements/RelationshipTable/AddNewButton.js +1 -0
  266. package/dist/elements/RelationshipTable/AddNewButton.js.map +1 -1
  267. package/dist/elements/RelationshipTable/index.d.ts.map +1 -1
  268. package/dist/elements/RelationshipTable/index.js +61 -57
  269. package/dist/elements/RelationshipTable/index.js.map +1 -1
  270. package/dist/elements/RenderTitle/index.css +1 -0
  271. package/dist/elements/SortColumn/index.d.ts.map +1 -1
  272. package/dist/elements/SortColumn/index.js +59 -95
  273. package/dist/elements/SortColumn/index.js.map +1 -1
  274. package/dist/elements/SortHeader/index.d.ts.map +1 -1
  275. package/dist/elements/SortHeader/index.js +18 -36
  276. package/dist/elements/SortHeader/index.js.map +1 -1
  277. package/dist/elements/StepNav/index.d.ts.map +1 -1
  278. package/dist/elements/StepNav/index.js +1 -0
  279. package/dist/elements/StepNav/index.js.map +1 -1
  280. package/dist/elements/Table/OrderableTable.d.ts +1 -0
  281. package/dist/elements/Table/OrderableTable.d.ts.map +1 -1
  282. package/dist/elements/Table/OrderableTable.js +6 -2
  283. package/dist/elements/Table/OrderableTable.js.map +1 -1
  284. package/dist/elements/Table/TableIdentity.d.ts +7 -0
  285. package/dist/elements/Table/TableIdentity.d.ts.map +1 -0
  286. package/dist/elements/Table/TableIdentity.js +47 -0
  287. package/dist/elements/Table/TableIdentity.js.map +1 -0
  288. package/dist/elements/Table/index.css +1 -0
  289. package/dist/elements/Table/index.d.ts +1 -0
  290. package/dist/elements/Table/index.d.ts.map +1 -1
  291. package/dist/elements/Table/index.js +91 -42
  292. package/dist/elements/Table/index.js.map +1 -1
  293. package/dist/elements/Table/useAriaSort.d.ts +7 -0
  294. package/dist/elements/Table/useAriaSort.d.ts.map +1 -0
  295. package/dist/elements/Table/useAriaSort.js +53 -0
  296. package/dist/elements/Table/useAriaSort.js.map +1 -0
  297. package/dist/elements/TableSection/index.css +1 -0
  298. package/dist/elements/Tabs/index.css +1 -0
  299. package/dist/elements/Thumbnail/index.css +1 -0
  300. package/dist/elements/ThumbnailCard/index.d.ts.map +1 -1
  301. package/dist/elements/ThumbnailCard/index.js +10 -8
  302. package/dist/elements/ThumbnailCard/index.js.map +1 -1
  303. package/dist/elements/TimezonePicker/index.css +1 -0
  304. package/dist/elements/Tooltip/index.css +7 -0
  305. package/dist/elements/Tooltip/index.d.ts +1 -1
  306. package/dist/elements/Tooltip/index.js +1 -1
  307. package/dist/elements/Tooltip/index.js.map +1 -1
  308. package/dist/elements/UserMenu/LanguageMenu/index.d.ts.map +1 -1
  309. package/dist/elements/UserMenu/LanguageMenu/index.js +3 -0
  310. package/dist/elements/UserMenu/LanguageMenu/index.js.map +1 -1
  311. package/dist/elements/UserMenu/SettingsMenu/index.d.ts.map +1 -1
  312. package/dist/elements/UserMenu/SettingsMenu/index.js +3 -0
  313. package/dist/elements/UserMenu/SettingsMenu/index.js.map +1 -1
  314. package/dist/elements/UserMenu/SubMenuHeader/index.d.ts.map +1 -1
  315. package/dist/elements/UserMenu/SubMenuHeader/index.js +2 -0
  316. package/dist/elements/UserMenu/SubMenuHeader/index.js.map +1 -1
  317. package/dist/elements/UserMenu/ThemeMenu/index.d.ts.map +1 -1
  318. package/dist/elements/UserMenu/ThemeMenu/index.js +3 -0
  319. package/dist/elements/UserMenu/ThemeMenu/index.js.map +1 -1
  320. package/dist/elements/UserMenu/index.d.ts.map +1 -1
  321. package/dist/elements/UserMenu/index.js +21 -4
  322. package/dist/elements/UserMenu/index.js.map +1 -1
  323. package/dist/elements/WhereBuilder/Condition/index.css +1 -0
  324. package/dist/elements/WhereBuilder/Condition/index.d.ts.map +1 -1
  325. package/dist/elements/WhereBuilder/Condition/index.js +7 -1
  326. package/dist/elements/WhereBuilder/Condition/index.js.map +1 -1
  327. package/dist/elements/WhereBuilder/index.css +2 -0
  328. package/dist/fields/Array/ArrayRow.d.ts.map +1 -1
  329. package/dist/fields/Array/ArrayRow.js +1 -0
  330. package/dist/fields/Array/ArrayRow.js.map +1 -1
  331. package/dist/fields/Array/index.css +1 -0
  332. package/dist/fields/Array/index.d.ts +3 -7
  333. package/dist/fields/Array/index.d.ts.map +1 -1
  334. package/dist/fields/Array/index.js.map +1 -1
  335. package/dist/fields/Blocks/RowActions.d.ts.map +1 -1
  336. package/dist/fields/Blocks/RowActions.js +25 -16
  337. package/dist/fields/Blocks/RowActions.js.map +1 -1
  338. package/dist/fields/Blocks/index.css +1 -0
  339. package/dist/fields/Blocks/index.d.ts +2 -5
  340. package/dist/fields/Blocks/index.d.ts.map +1 -1
  341. package/dist/fields/Blocks/index.js.map +1 -1
  342. package/dist/fields/Checkbox/index.d.ts +2 -12
  343. package/dist/fields/Checkbox/index.d.ts.map +1 -1
  344. package/dist/fields/Checkbox/index.js.map +1 -1
  345. package/dist/fields/Code/index.d.ts +2 -8
  346. package/dist/fields/Code/index.d.ts.map +1 -1
  347. package/dist/fields/Code/index.js.map +1 -1
  348. package/dist/fields/Collapsible/index.d.ts +2 -3
  349. package/dist/fields/Collapsible/index.d.ts.map +1 -1
  350. package/dist/fields/Collapsible/index.js.map +1 -1
  351. package/dist/fields/DateTime/index.d.ts +3 -7
  352. package/dist/fields/DateTime/index.d.ts.map +1 -1
  353. package/dist/fields/DateTime/index.js +1 -1
  354. package/dist/fields/DateTime/index.js.map +1 -1
  355. package/dist/fields/Email/index.d.ts +2 -7
  356. package/dist/fields/Email/index.d.ts.map +1 -1
  357. package/dist/fields/Email/index.js.map +1 -1
  358. package/dist/fields/Group/index.css +1 -0
  359. package/dist/fields/Group/index.d.ts +3 -5
  360. package/dist/fields/Group/index.d.ts.map +1 -1
  361. package/dist/fields/Group/index.js.map +1 -1
  362. package/dist/fields/JSON/index.d.ts +2 -6
  363. package/dist/fields/JSON/index.d.ts.map +1 -1
  364. package/dist/fields/JSON/index.js.map +1 -1
  365. package/dist/fields/Join/index.d.ts +2 -6
  366. package/dist/fields/Join/index.d.ts.map +1 -1
  367. package/dist/fields/Join/index.js.map +1 -1
  368. package/dist/fields/Number/index.d.ts +2 -7
  369. package/dist/fields/Number/index.d.ts.map +1 -1
  370. package/dist/fields/Number/index.js.map +1 -1
  371. package/dist/fields/Point/index.d.ts +3 -8
  372. package/dist/fields/Point/index.d.ts.map +1 -1
  373. package/dist/fields/Point/index.js.map +1 -1
  374. package/dist/fields/RadioGroup/index.js.map +1 -1
  375. package/dist/fields/Relationship/index.d.ts +2 -6
  376. package/dist/fields/Relationship/index.d.ts.map +1 -1
  377. package/dist/fields/Relationship/index.js.map +1 -1
  378. package/dist/fields/Relationship/select-components/MultiValueLabel/index.d.ts.map +1 -1
  379. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js +24 -2
  380. package/dist/fields/Relationship/select-components/MultiValueLabel/index.js.map +1 -1
  381. package/dist/fields/Row/index.css +2 -0
  382. package/dist/fields/Row/index.d.ts +2 -3
  383. package/dist/fields/Row/index.d.ts.map +1 -1
  384. package/dist/fields/Row/index.js.map +1 -1
  385. package/dist/fields/Select/index.d.ts +2 -9
  386. package/dist/fields/Select/index.d.ts.map +1 -1
  387. package/dist/fields/Select/index.js.map +1 -1
  388. package/dist/fields/Tabs/index.css +1 -0
  389. package/dist/fields/Tabs/index.d.ts +2 -4
  390. package/dist/fields/Tabs/index.d.ts.map +1 -1
  391. package/dist/fields/Tabs/index.js.map +1 -1
  392. package/dist/fields/Text/index.d.ts +2 -8
  393. package/dist/fields/Text/index.d.ts.map +1 -1
  394. package/dist/fields/Text/index.js.map +1 -1
  395. package/dist/fields/Textarea/index.d.ts +2 -9
  396. package/dist/fields/Textarea/index.d.ts.map +1 -1
  397. package/dist/fields/Textarea/index.js.map +1 -1
  398. package/dist/forms/Form/context.d.ts +3 -1
  399. package/dist/forms/Form/context.d.ts.map +1 -1
  400. package/dist/forms/Form/context.js +3 -1
  401. package/dist/forms/Form/context.js.map +1 -1
  402. package/dist/forms/Form/index.d.ts.map +1 -1
  403. package/dist/forms/Form/index.js +13 -4
  404. package/dist/forms/Form/index.js.map +1 -1
  405. package/dist/forms/RenderFields/context.d.ts +2 -2
  406. package/dist/forms/RenderFields/context.js +2 -2
  407. package/dist/forms/RenderFields/context.js.map +1 -1
  408. package/dist/forms/RenderFields/index.css +1 -0
  409. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  410. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +12 -4
  411. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  412. package/dist/forms/fieldSchemasToFormState/renderField.d.ts.map +1 -1
  413. package/dist/forms/fieldSchemasToFormState/renderField.js +3 -2
  414. package/dist/forms/fieldSchemasToFormState/renderField.js.map +1 -1
  415. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts +12 -0
  416. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.d.ts.map +1 -0
  417. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js +42 -0
  418. package/dist/forms/fieldSchemasToFormState/serverFunctions/mergeAllowedFieldOverrides.js.map +1 -0
  419. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts +8 -6
  420. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.d.ts.map +1 -1
  421. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js +22 -9
  422. package/dist/forms/fieldSchemasToFormState/serverFunctions/renderFieldServerFn.js.map +1 -1
  423. package/dist/forms/fieldSchemasToFormState/types.d.ts +1 -0
  424. package/dist/forms/fieldSchemasToFormState/types.d.ts.map +1 -1
  425. package/dist/forms/fieldSchemasToFormState/types.js.map +1 -1
  426. package/dist/hooks/useControllableState.js +3 -3
  427. package/dist/hooks/useControllableState.js.map +1 -1
  428. package/dist/layouts/Root/index.d.ts +3 -6
  429. package/dist/layouts/Root/index.d.ts.map +1 -1
  430. package/dist/layouts/Root/index.js +9 -10
  431. package/dist/layouts/Root/index.js.map +1 -1
  432. package/dist/providers/DocumentInfo/index.d.ts.map +1 -1
  433. package/dist/providers/DocumentInfo/index.js +30 -21
  434. package/dist/providers/DocumentInfo/index.js.map +1 -1
  435. package/dist/providers/DocumentInfo/types.d.ts +0 -10
  436. package/dist/providers/DocumentInfo/types.d.ts.map +1 -1
  437. package/dist/providers/DocumentInfo/types.js.map +1 -1
  438. package/dist/providers/LivePreview/index.d.ts.map +1 -1
  439. package/dist/providers/LivePreview/index.js +13 -6
  440. package/dist/providers/LivePreview/index.js.map +1 -1
  441. package/dist/providers/Locale/index.d.ts.map +1 -1
  442. package/dist/providers/Locale/index.js +6 -7
  443. package/dist/providers/Locale/index.js.map +1 -1
  444. package/dist/providers/ModalAccessibility/index.d.ts +3 -0
  445. package/dist/providers/ModalAccessibility/index.d.ts.map +1 -0
  446. package/dist/providers/ModalAccessibility/index.js +102 -0
  447. package/dist/providers/ModalAccessibility/index.js.map +1 -0
  448. package/dist/providers/Root/index.d.ts.map +1 -1
  449. package/dist/providers/Root/index.js +7 -6
  450. package/dist/providers/Root/index.js.map +1 -1
  451. package/dist/providers/TableColumns/buildColumnState/index.d.ts.map +1 -1
  452. package/dist/providers/TableColumns/buildColumnState/index.js +0 -1
  453. package/dist/providers/TableColumns/buildColumnState/index.js.map +1 -1
  454. package/dist/providers/ToastContainer/index.d.ts.map +1 -1
  455. package/dist/providers/ToastContainer/index.js +100 -33
  456. package/dist/providers/ToastContainer/index.js.map +1 -1
  457. package/dist/styles.css +5 -1
  458. package/dist/templates/Default/Wrapper/index.css +2 -0
  459. package/dist/templates/Default/index.css +1 -0
  460. package/dist/utilities/buildFormState.d.ts.map +1 -1
  461. package/dist/utilities/buildFormState.js +6 -2
  462. package/dist/utilities/buildFormState.js.map +1 -1
  463. package/dist/utilities/formatAbsoluteURL.d.ts +1 -1
  464. package/dist/utilities/formatAbsoluteURL.d.ts.map +1 -1
  465. package/dist/utilities/formatAbsoluteURL.js +18 -8
  466. package/dist/utilities/formatAbsoluteURL.js.map +1 -1
  467. package/dist/utilities/getActiveModal.d.ts +6 -0
  468. package/dist/utilities/getActiveModal.d.ts.map +1 -0
  469. package/dist/utilities/getActiveModal.js +8 -0
  470. package/dist/utilities/getActiveModal.js.map +1 -0
  471. package/dist/utilities/getDocPreferences.d.ts.map +1 -1
  472. package/dist/utilities/getDocPreferences.js +1 -0
  473. package/dist/utilities/getDocPreferences.js.map +1 -1
  474. package/dist/utilities/getPreferences.d.ts.map +1 -1
  475. package/dist/utilities/getPreferences.js +1 -0
  476. package/dist/utilities/getPreferences.js.map +1 -1
  477. package/dist/utilities/getVersions.d.ts.map +1 -1
  478. package/dist/utilities/getVersions.js +8 -0
  479. package/dist/utilities/getVersions.js.map +1 -1
  480. package/dist/utilities/handleAuthRedirect.d.ts.map +1 -1
  481. package/dist/utilities/handleAuthRedirect.js +4 -1
  482. package/dist/utilities/handleAuthRedirect.js.map +1 -1
  483. package/dist/utilities/handleServerFunctions.d.ts +9 -9
  484. package/dist/utilities/handleServerFunctions.d.ts.map +1 -1
  485. package/dist/utilities/handleServerFunctions.js +7 -5
  486. package/dist/utilities/handleServerFunctions.js.map +1 -1
  487. package/dist/utilities/isAbsoluteURL.d.ts +3 -0
  488. package/dist/utilities/isAbsoluteURL.d.ts.map +1 -0
  489. package/dist/utilities/isAbsoluteURL.js +15 -0
  490. package/dist/utilities/isAbsoluteURL.js.map +1 -0
  491. package/dist/utilities/isHttpURL.d.ts +3 -0
  492. package/dist/utilities/isHttpURL.d.ts.map +1 -0
  493. package/dist/utilities/isHttpURL.js +12 -0
  494. package/dist/utilities/isHttpURL.js.map +1 -0
  495. package/dist/utilities/isPathMatchingRoute.d.ts.map +1 -1
  496. package/dist/utilities/isPathMatchingRoute.js +7 -5
  497. package/dist/utilities/isPathMatchingRoute.js.map +1 -1
  498. package/dist/utilities/isPublicAdminRoute.d.ts.map +1 -1
  499. package/dist/utilities/isPublicAdminRoute.js +9 -6
  500. package/dist/utilities/isPublicAdminRoute.js.map +1 -1
  501. package/dist/utilities/renderTable.d.ts.map +1 -1
  502. package/dist/utilities/renderTable.js +9 -4
  503. package/dist/utilities/renderTable.js.map +1 -1
  504. package/dist/utilities/schedulePublishHandler.d.ts.map +1 -1
  505. package/dist/utilities/schedulePublishHandler.js +6 -1
  506. package/dist/utilities/schedulePublishHandler.js.map +1 -1
  507. package/dist/utilities/upsertPreferences.d.ts.map +1 -1
  508. package/dist/utilities/upsertPreferences.js +3 -0
  509. package/dist/utilities/upsertPreferences.js.map +1 -1
  510. package/dist/views/API/index.css +1 -0
  511. package/dist/views/Account/index.d.ts +1 -1
  512. package/dist/views/Account/index.d.ts.map +1 -1
  513. package/dist/views/Account/index.js +8 -5
  514. package/dist/views/Account/index.js.map +1 -1
  515. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.d.ts.map +1 -1
  516. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js +1 -0
  517. package/dist/views/Dashboard/Default/ModularDashboard/DashboardStepNav.js.map +1 -1
  518. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js +1 -0
  519. package/dist/views/Dashboard/Default/ModularDashboard/index.client.js.map +1 -1
  520. package/dist/views/Dashboard/Default/ModularDashboard/index.css +2 -0
  521. package/dist/views/Dashboard/Default/ModularDashboard/index.d.ts.map +1 -1
  522. package/dist/views/Dashboard/Default/ModularDashboard/index.js +1 -0
  523. package/dist/views/Dashboard/Default/ModularDashboard/index.js.map +1 -1
  524. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.d.ts.map +1 -1
  525. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js +3 -1
  526. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/getDefaultLayoutServerFn.js.map +1 -1
  527. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.d.ts.map +1 -1
  528. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js +2 -0
  529. package/dist/views/Dashboard/Default/ModularDashboard/renderWidget/renderWidgetServerFn.js.map +1 -1
  530. package/dist/views/Dashboard/index.d.ts.map +1 -1
  531. package/dist/views/Dashboard/index.js +2 -3
  532. package/dist/views/Dashboard/index.js.map +1 -1
  533. package/dist/views/Document/handleServerFunction.d.ts.map +1 -1
  534. package/dist/views/Document/handleServerFunction.js +3 -0
  535. package/dist/views/Document/handleServerFunction.js.map +1 -1
  536. package/dist/views/Document/index.d.ts +1 -1
  537. package/dist/views/Document/index.d.ts.map +1 -1
  538. package/dist/views/Document/index.js +9 -4
  539. package/dist/views/Document/index.js.map +1 -1
  540. package/dist/views/Document/renderDocumentSlots.d.ts +1 -0
  541. package/dist/views/Document/renderDocumentSlots.d.ts.map +1 -1
  542. package/dist/views/Document/renderDocumentSlots.js +7 -4
  543. package/dist/views/Document/renderDocumentSlots.js.map +1 -1
  544. package/dist/views/Edit/Auth/APIKey.d.ts +1 -1
  545. package/dist/views/Edit/Auth/APIKey.d.ts.map +1 -1
  546. package/dist/views/Edit/Auth/APIKey.js +233 -59
  547. package/dist/views/Edit/Auth/APIKey.js.map +1 -1
  548. package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts +12 -0
  549. package/dist/views/Edit/Auth/APIKeyGenerationModal.d.ts.map +1 -0
  550. package/dist/views/Edit/Auth/APIKeyGenerationModal.js +117 -0
  551. package/dist/views/Edit/Auth/APIKeyGenerationModal.js.map +1 -0
  552. package/dist/views/Edit/Auth/index.css +91 -0
  553. package/dist/views/Edit/Auth/index.d.ts.map +1 -1
  554. package/dist/views/Edit/Auth/index.js +10 -28
  555. package/dist/views/Edit/Auth/index.js.map +1 -1
  556. package/dist/views/Edit/Auth/types.d.ts +3 -1
  557. package/dist/views/Edit/Auth/types.d.ts.map +1 -1
  558. package/dist/views/Edit/Auth/types.js.map +1 -1
  559. package/dist/views/Edit/index.css +1 -0
  560. package/dist/views/ForgotPassword/ForgotPasswordForm/index.css +14 -0
  561. package/dist/views/ForgotPassword/ForgotPasswordForm/index.d.ts.map +1 -1
  562. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js +209 -161
  563. package/dist/views/ForgotPassword/ForgotPasswordForm/index.js.map +1 -1
  564. package/dist/views/ForgotPassword/index.d.ts.map +1 -1
  565. package/dist/views/ForgotPassword/index.js +2 -11
  566. package/dist/views/ForgotPassword/index.js.map +1 -1
  567. package/dist/views/HierarchyList/HierarchyTable/SlotTable.css +1 -0
  568. package/dist/views/HierarchyList/TypeFilter/index.d.ts.map +1 -1
  569. package/dist/views/HierarchyList/TypeFilter/index.js +6 -7
  570. package/dist/views/HierarchyList/TypeFilter/index.js.map +1 -1
  571. package/dist/views/HierarchyList/index.css +1 -0
  572. package/dist/views/List/ListHeader/index.css +1 -0
  573. package/dist/views/List/ListHeader/index.d.ts +0 -1
  574. package/dist/views/List/ListHeader/index.d.ts.map +1 -1
  575. package/dist/views/List/ListHeader/index.js +2 -6
  576. package/dist/views/List/ListHeader/index.js.map +1 -1
  577. package/dist/views/List/enrichDocsWithVersionStatus.d.ts.map +1 -1
  578. package/dist/views/List/enrichDocsWithVersionStatus.js +1 -0
  579. package/dist/views/List/enrichDocsWithVersionStatus.js.map +1 -1
  580. package/dist/views/List/handleServerFunction.d.ts.map +1 -1
  581. package/dist/views/List/handleServerFunction.js +4 -1
  582. package/dist/views/List/handleServerFunction.js.map +1 -1
  583. package/dist/views/List/index.client.d.ts.map +1 -1
  584. package/dist/views/List/index.client.js +130 -124
  585. package/dist/views/List/index.client.js.map +1 -1
  586. package/dist/views/List/index.css +2 -0
  587. package/dist/views/List/index.d.ts.map +1 -1
  588. package/dist/views/List/index.js +2 -1
  589. package/dist/views/List/index.js.map +1 -1
  590. package/dist/views/NotFound/client.d.ts +2 -0
  591. package/dist/views/NotFound/client.d.ts.map +1 -0
  592. package/dist/views/NotFound/client.js +4 -0
  593. package/dist/views/NotFound/client.js.map +1 -0
  594. package/dist/views/NotFound/page.d.ts +4 -11
  595. package/dist/views/NotFound/page.d.ts.map +1 -1
  596. package/dist/views/NotFound/page.js +6 -5
  597. package/dist/views/NotFound/page.js.map +1 -1
  598. package/dist/views/Root/index.d.ts +6 -7
  599. package/dist/views/Root/index.d.ts.map +1 -1
  600. package/dist/views/Root/index.js +33 -24
  601. package/dist/views/Root/index.js.map +1 -1
  602. package/dist/views/Verify/index.d.ts +1 -1
  603. package/dist/views/Verify/index.d.ts.map +1 -1
  604. package/dist/views/Verify/index.js +4 -4
  605. package/dist/views/Verify/index.js.map +1 -1
  606. package/dist/views/Version/Default/index.css +2 -0
  607. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts +1 -0
  608. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.d.ts.map +1 -1
  609. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js +56 -50
  610. package/dist/views/Version/RenderFieldsToDiff/DiffCollapser/index.js.map +1 -1
  611. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.d.ts.map +1 -1
  612. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js +41 -27
  613. package/dist/views/Version/RenderFieldsToDiff/buildVersionFields.js.map +1 -1
  614. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.d.ts +3 -2
  615. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.d.ts.map +1 -1
  616. package/dist/views/Version/RenderFieldsToDiff/fields/Checkbox/index.js.map +1 -1
  617. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.d.ts +3 -2
  618. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.d.ts.map +1 -1
  619. package/dist/views/Version/RenderFieldsToDiff/fields/Collapsible/index.js.map +1 -1
  620. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.css +8 -0
  621. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.d.ts +3 -2
  622. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.d.ts.map +1 -1
  623. package/dist/views/Version/RenderFieldsToDiff/fields/Date/index.js.map +1 -1
  624. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.d.ts +3 -2
  625. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.d.ts.map +1 -1
  626. package/dist/views/Version/RenderFieldsToDiff/fields/Group/index.js.map +1 -1
  627. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.d.ts.map +1 -1
  628. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js +10 -0
  629. package/dist/views/Version/RenderFieldsToDiff/fields/Iterable/index.js.map +1 -1
  630. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.d.ts.map +1 -1
  631. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js +1 -0
  632. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/generateLabelFromValue.js.map +1 -1
  633. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.css +1 -0
  634. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts +2 -2
  635. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.d.ts.map +1 -1
  636. package/dist/views/Version/RenderFieldsToDiff/fields/Relationship/index.js.map +1 -1
  637. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.d.ts +3 -2
  638. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.d.ts.map +1 -1
  639. package/dist/views/Version/RenderFieldsToDiff/fields/Row/index.js.map +1 -1
  640. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts +3 -2
  641. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.d.ts.map +1 -1
  642. package/dist/views/Version/RenderFieldsToDiff/fields/Select/index.js.map +1 -1
  643. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts +3 -2
  644. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.d.ts.map +1 -1
  645. package/dist/views/Version/RenderFieldsToDiff/fields/Tabs/index.js.map +1 -1
  646. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts +3 -2
  647. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.d.ts.map +1 -1
  648. package/dist/views/Version/RenderFieldsToDiff/fields/Text/index.js.map +1 -1
  649. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.css +1 -0
  650. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts +2 -2
  651. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.d.ts.map +1 -1
  652. package/dist/views/Version/RenderFieldsToDiff/fields/Upload/index.js.map +1 -1
  653. package/dist/views/Version/RenderFieldsToDiff/index.css +2 -0
  654. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.d.ts.map +1 -1
  655. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js +33 -1
  656. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.js.map +1 -1
  657. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts +8 -2
  658. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.d.ts.map +1 -1
  659. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js +17 -19
  660. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.js.map +1 -1
  661. package/dist/views/Version/Restore/index.d.ts.map +1 -1
  662. package/dist/views/Version/Restore/index.js +9 -6
  663. package/dist/views/Version/Restore/index.js.map +1 -1
  664. package/dist/views/Version/SelectLocales/index.d.ts.map +1 -1
  665. package/dist/views/Version/SelectLocales/index.js +1 -0
  666. package/dist/views/Version/SelectLocales/index.js.map +1 -1
  667. package/dist/views/Versions/VersionPillLabel/index.css +1 -0
  668. package/dist/views/Versions/index.css +1 -0
  669. package/dist/widgets/CollectionCards/index.css +4 -0
  670. package/dist/widgets/CollectionQuery/SortField/index.d.ts +3 -2
  671. package/dist/widgets/CollectionQuery/SortField/index.d.ts.map +1 -1
  672. package/dist/widgets/CollectionQuery/SortField/index.js.map +1 -1
  673. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts +3 -2
  674. package/dist/widgets/RecentlyViewed/CollectionsField/index.d.ts.map +1 -1
  675. package/dist/widgets/RecentlyViewed/CollectionsField/index.js.map +1 -1
  676. package/package.json +10 -5
  677. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js +0 -120
  678. package/dist/elements/ClipboardAction/clipboardUtilities.spec.js.map +0 -1
  679. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js +0 -144
  680. package/dist/elements/ClipboardAction/isClipboardDataValid.spec.js.map +0 -1
  681. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js +0 -885
  682. package/dist/elements/ClipboardAction/mergeFormStateFromClipboard.spec.js.map +0 -1
  683. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js +0 -87
  684. package/dist/elements/ColumnSelection/matchesColumnSearch.spec.js.map +0 -1
  685. package/dist/elements/CommandPalette/buildActions.spec.js +0 -158
  686. package/dist/elements/CommandPalette/buildActions.spec.js.map +0 -1
  687. package/dist/elements/CommandPalette/highlightLabel.spec.js +0 -78
  688. package/dist/elements/CommandPalette/highlightLabel.spec.js.map +0 -1
  689. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js +0 -143
  690. package/dist/elements/FieldSelect/reduceFieldOptions.spec.js.map +0 -1
  691. package/dist/elements/Toasts/fieldErrors.spec.js +0 -46
  692. package/dist/elements/Toasts/fieldErrors.spec.js.map +0 -1
  693. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js +0 -152
  694. package/dist/elements/WhereBuilder/Condition/Relationship/optionsReducer.spec.js.map +0 -1
  695. package/dist/elements/WhereBuilder/conditionValue.spec.js +0 -65
  696. package/dist/elements/WhereBuilder/conditionValue.spec.js.map +0 -1
  697. package/dist/fields/Upload/Input.spec.js +0 -242
  698. package/dist/fields/Upload/Input.spec.js.map +0 -1
  699. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts +0 -2
  700. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.d.ts.map +0 -1
  701. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js +0 -67
  702. package/dist/forms/fieldSchemasToFormState/fieldSchemasToFormState.spec.js.map +0 -1
  703. package/dist/layouts/Root/index.spec.js +0 -20
  704. package/dist/layouts/Root/index.spec.js.map +0 -1
  705. package/dist/providers/Auth/authSessionRequests.spec.js +0 -121
  706. package/dist/providers/Auth/authSessionRequests.spec.js.map +0 -1
  707. package/dist/providers/Auth/sessionActivity.spec.js +0 -44
  708. package/dist/providers/Auth/sessionActivity.spec.js.map +0 -1
  709. package/dist/providers/Auth/tabSessionSync/index.spec.js +0 -463
  710. package/dist/providers/Auth/tabSessionSync/index.spec.js.map +0 -1
  711. package/dist/providers/Auth/useAuthSessionTimers.spec.js +0 -311
  712. package/dist/providers/Auth/useAuthSessionTimers.spec.js.map +0 -1
  713. package/dist/providers/RouteTransition/ProgressBar/index.spec.js +0 -44
  714. package/dist/providers/RouteTransition/ProgressBar/index.spec.js.map +0 -1
  715. package/dist/providers/TableColumns/buildColumnState/index.spec.js +0 -40
  716. package/dist/providers/TableColumns/buildColumnState/index.spec.js.map +0 -1
  717. package/dist/utilities/appendCacheTag.spec.js +0 -34
  718. package/dist/utilities/appendCacheTag.spec.js.map +0 -1
  719. package/dist/utilities/formatMetadata.spec.js +0 -83
  720. package/dist/utilities/formatMetadata.spec.js.map +0 -1
  721. package/dist/utilities/fuzzyMatch.spec.js +0 -38
  722. package/dist/utilities/fuzzyMatch.spec.js.map +0 -1
  723. package/dist/utilities/getRequestLocale.d.ts +0 -7
  724. package/dist/utilities/getRequestLocale.d.ts.map +0 -1
  725. package/dist/utilities/getRequestLocale.js +0 -20
  726. package/dist/utilities/getRequestLocale.js.map +0 -1
  727. package/dist/utilities/initReq.d.ts +0 -16
  728. package/dist/utilities/initReq.d.ts.map +0 -1
  729. package/dist/utilities/initReq.js +0 -111
  730. package/dist/utilities/initReq.js.map +0 -1
  731. package/dist/utilities/isCustomAdminView.spec.js +0 -90
  732. package/dist/utilities/isCustomAdminView.spec.js.map +0 -1
  733. package/dist/utilities/isPathMatchingRoute.spec.js +0 -178
  734. package/dist/utilities/isPathMatchingRoute.spec.js.map +0 -1
  735. package/dist/utilities/normalizeRelationshipValue.spec.js +0 -373
  736. package/dist/utilities/normalizeRelationshipValue.spec.js.map +0 -1
  737. package/dist/utilities/recentlyViewed.spec.js +0 -92
  738. package/dist/utilities/recentlyViewed.spec.js.map +0 -1
  739. package/dist/utilities/selectiveCache.d.ts +0 -12
  740. package/dist/utilities/selectiveCache.d.ts.map +0 -1
  741. package/dist/utilities/selectiveCache.js +0 -37
  742. package/dist/utilities/selectiveCache.js.map +0 -1
  743. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js +0 -168
  744. package/dist/views/Root/getCustomCollectionViewByRoute.spec.js.map +0 -1
  745. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js +0 -861
  746. package/dist/views/Version/RenderFieldsToDiff/utilities/countChangedFields.spec.js.map +0 -1
  747. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js +0 -47
  748. package/dist/views/Version/RenderFieldsToDiff/utilities/fieldHasChanges.spec.js.map +0 -1
  749. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js +0 -135
  750. package/dist/views/Version/RenderFieldsToDiff/utilities/getFieldsForRowComparison.spec.js.map +0 -1
  751. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js +0 -100
  752. package/dist/widgets/CollectionQuery/getCollectionFieldPaths.spec.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","names":["afterEach","beforeEach","describe","expect","it","vi","TAB_SESSION_EVENT_TYPES","createTabSessionSync","tabSessionSyncCleanups","resetMockBroadcastChannels","cleanup","splice","restoreAllMocks","unstubAllGlobals","clearAllMocks","session","createSession","expirationMs","token","tabSessionSync","createTestTabSessionSync","now","broadcast","refreshStartedAt","type","REFRESHED","getBroadcastChannel","postMessage","toHaveBeenCalledWith","sourceTabID","sentAt","onSessionRefreshed","fn","localExpirationMs","channel","emit","createTabSessionMessage","onSessionExpired","expiredTokenAt","EXPIRED","not","toHaveBeenCalled","firstState","secondState","refreshMessage","logoutMessage","LOGGED_OUT","onSessionLoggedOut","firstChannel","secondChannel","toBe","toHaveBeenCalledOnce","appliedSession","refreshB","refreshA","toHaveBeenCalledTimes","toHaveBeenLastCalledWith","reconcileSession","mockResolvedValue","status","window","dispatchEvent","StorageEvent","key","newValue","JSON","stringify","affectedExpirationMs","Promise","resolve","stubGlobal","undefined","settlesSentAt","setItem","spyOn","Storage","prototype","broadcaster","value","mock","calls","parse","toEqual","isBroadcastChannelFallback","toContain","mockClear","logoutPublication","Error","broadcastLogoutSettlement","logoutKey","logoutValue","addEventListener","failedChannel","mockImplementationOnce","close","any","Function","resolveReconciliation","onTabSessionUnauthenticated","getTokenExpirationMs","push","MockBroadcastChannel","instances","listeners","Set","_type","listener","add","removeEventListener","delete","message","MessageEvent","data","messageWithoutTimestamp","refreshedMessage","exp","user","id","collection","at","length","constructor"],"sources":["../../../../src/providers/Auth/tabSessionSync/index.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { UserWithToken } from '../types.js'\nimport type { TabSessionMessage, TabSessionReconciliationResult } from './index.js'\n\nimport { TAB_SESSION_EVENT_TYPES, createTabSessionSync } from './index.js'\n\nconst tabSessionSyncCleanups: Array<() => void> = []\n\nbeforeEach(() => {\n resetMockBroadcastChannels()\n})\n\nafterEach(() => {\n for (const cleanup of tabSessionSyncCleanups.splice(0)) {\n cleanup()\n }\n\n vi.restoreAllMocks()\n vi.unstubAllGlobals()\n vi.clearAllMocks()\n})\n\ndescribe('createTabSessionSync', () => {\n it('should broadcast refreshed sessions with source-tab and timing metadata', () => {\n const session = createSession({ expirationMs: 20_000, token: 'refreshed-token' })\n const tabSessionSync = createTestTabSessionSync({ now: () => 123 })\n\n tabSessionSync.broadcast({\n refreshStartedAt: 100,\n session,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n expect(getBroadcastChannel().postMessage).toHaveBeenCalledWith({\n refreshStartedAt: 100,\n session,\n sourceTabID: 'local-tab',\n sentAt: 123,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n })\n\n it('should apply a newer refresh when the provider shortens the token lifetime', () => {\n const onSessionRefreshed = vi.fn()\n const session = createSession({ expirationMs: 30_000 })\n\n createTestTabSessionSync({\n localExpirationMs: 40_000,\n onSessionRefreshed,\n })\n const channel = getBroadcastChannel()\n\n channel.emit(\n createTabSessionMessage({\n sentAt: 100,\n session,\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n )\n\n expect(onSessionRefreshed).toHaveBeenCalledWith(session)\n })\n\n it('should ignore expiration events for older sessions', () => {\n const onSessionExpired = vi.fn()\n\n createTestTabSessionSync({\n localExpirationMs: 40_000,\n onSessionExpired,\n })\n const channel = getBroadcastChannel()\n\n channel.emit(\n createTabSessionMessage({\n expiredTokenAt: 30_000,\n sourceTabID: 'stale-expiration-tab',\n type: TAB_SESSION_EVENT_TYPES.EXPIRED,\n }),\n )\n\n expect(onSessionExpired).not.toHaveBeenCalled()\n })\n\n it('should converge on logout when equal-time events arrive in opposite orders', () => {\n let firstState = 'initial'\n let secondState = 'initial'\n const refreshMessage = createTabSessionMessage({\n sentAt: 500,\n session: createSession({ expirationMs: 30_000, token: 'refreshed-token' }),\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const logoutMessage = createTabSessionMessage({\n sentAt: 500,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n createTestTabSessionSync({\n onSessionLoggedOut: () => {\n firstState = 'logged-out'\n },\n onSessionRefreshed: () => {\n firstState = 'refreshed'\n },\n sourceTabID: 'first-local-tab',\n })\n const firstChannel = getBroadcastChannel()\n createTestTabSessionSync({\n onSessionLoggedOut: () => {\n secondState = 'logged-out'\n },\n onSessionRefreshed: () => {\n secondState = 'refreshed'\n },\n sourceTabID: 'second-local-tab',\n })\n const secondChannel = getBroadcastChannel()\n\n firstChannel.emit(refreshMessage)\n firstChannel.emit(logoutMessage)\n secondChannel.emit(logoutMessage)\n secondChannel.emit(refreshMessage)\n\n expect(firstState).toBe('logged-out')\n expect(secondState).toBe('logged-out')\n })\n\n it('should keep logout ahead of a refresh that started earlier and broadcast later', () => {\n const onSessionLoggedOut = vi.fn()\n const onSessionRefreshed = vi.fn()\n const refreshMessage = createTabSessionMessage({\n refreshStartedAt: 100,\n sentAt: 300,\n session: createSession({ expirationMs: 30_000, token: 'late-refreshed-token' }),\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const logoutMessage = createTabSessionMessage({\n sentAt: 200,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n createTestTabSessionSync({\n onSessionLoggedOut,\n onSessionRefreshed,\n sourceTabID: 'receiving-tab',\n })\n const channel = getBroadcastChannel()\n\n channel.emit(logoutMessage)\n channel.emit(refreshMessage)\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(onSessionRefreshed).not.toHaveBeenCalled()\n })\n\n it('should apply refreshes in publication order instead of request-start ordering for refresh-vs-refresh', () => {\n let appliedSession: UserWithToken | undefined\n const onSessionRefreshed = vi.fn((session: UserWithToken) => {\n appliedSession = session\n })\n const refreshB = createTabSessionMessage({\n refreshStartedAt: 200,\n sentAt: 100,\n session: createSession({ expirationMs: 30_000, token: 'refresh-b' }),\n sourceTabID: 'refresh-b-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const refreshA = createTabSessionMessage({\n refreshStartedAt: 100,\n sentAt: 200,\n session: createSession({ expirationMs: 40_000, token: 'refresh-a' }),\n sourceTabID: 'refresh-a-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n createTestTabSessionSync({ onSessionRefreshed, sourceTabID: 'receiving-tab' })\n const channel = getBroadcastChannel()\n\n channel.emit(refreshB)\n channel.emit(refreshA)\n\n expect(onSessionRefreshed).toHaveBeenCalledTimes(2)\n expect(onSessionRefreshed).toHaveBeenLastCalledWith(refreshA.session)\n expect(appliedSession).toBe(refreshA.session)\n })\n\n it('should ignore storage notifications while BroadcastChannel is healthy', async () => {\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const)\n\n createTestTabSessionSync({ reconcileSession, sourceTabID: 'receiving-tab' })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 30_000,\n refreshStartedAt: 100,\n sentAt: 200,\n sourceTabID: 'refreshing-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n }),\n )\n await Promise.resolve()\n\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should ignore a late storage refresh whose request started before logout', () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const)\n const onSessionLoggedOut = vi.fn()\n\n createTestTabSessionSync({\n reconcileSession,\n onSessionLoggedOut,\n sourceTabID: 'receiving-tab',\n })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 0,\n settlesSentAt: 200,\n sentAt: 201,\n sourceTabID: 'logout-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n }),\n }),\n )\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 30_000,\n refreshStartedAt: 100,\n sentAt: 300,\n sourceTabID: 'refresh-tab',\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n }),\n }),\n )\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should keep storage fallback notification-only while reconciling refresh and settling logout', async () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' })\n const onSessionLoggedOut = vi.fn()\n\n createTestTabSessionSync({\n reconcileSession,\n onSessionLoggedOut,\n sourceTabID: 'receiving-tab',\n })\n const setItem = vi.spyOn(Storage.prototype, 'setItem')\n const broadcaster = createTestTabSessionSync({\n now: () => 123,\n sourceTabID: 'broadcasting-tab',\n })\n\n broadcaster.broadcast({\n refreshStartedAt: 100,\n session: createSession({ expirationMs: 20_000, token: 'sensitive-token' }),\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n const [key, value] = setItem.mock.calls[0] as [string, string]\n\n expect(JSON.parse(value)).toEqual({\n affectedExpirationMs: 20_000,\n isBroadcastChannelFallback: true,\n refreshStartedAt: 100,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n sentAt: 123,\n sourceTabID: 'broadcasting-tab',\n })\n expect(value).not.toContain('sensitive-token')\n expect(value).not.toContain('user')\n\n window.dispatchEvent(new StorageEvent('storage', { key, newValue: value }))\n await Promise.resolve()\n\n expect(reconcileSession).toHaveBeenCalledOnce()\n\n reconcileSession.mockClear()\n\n const logoutPublication = broadcaster.broadcast({\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n\n expect(setItem).toHaveBeenCalledOnce()\n expect(logoutPublication.type).toBe(TAB_SESSION_EVENT_TYPES.LOGGED_OUT)\n\n if (logoutPublication.type !== TAB_SESSION_EVENT_TYPES.LOGGED_OUT) {\n throw new Error('Expected a logged-out publication.')\n }\n\n broadcaster.broadcastLogoutSettlement(logoutPublication)\n\n const [logoutKey, logoutValue] = setItem.mock.calls[1] as [string, string]\n\n expect(JSON.parse(logoutValue)).toEqual({\n affectedExpirationMs: 0,\n isBroadcastChannelFallback: true,\n settlesSentAt: 124,\n sentAt: 125,\n sourceTabID: 'broadcasting-tab',\n type: TAB_SESSION_EVENT_TYPES.LOGGED_OUT,\n })\n expect(logoutValue).not.toContain('sensitive-token')\n expect(logoutValue).not.toContain('user')\n\n window.dispatchEvent(new StorageEvent('storage', { key: logoutKey, newValue: logoutValue }))\n\n expect(onSessionLoggedOut).toHaveBeenCalledOnce()\n expect(reconcileSession).not.toHaveBeenCalled()\n\n await Promise.resolve()\n\n expect(reconcileSession).not.toHaveBeenCalled()\n })\n\n it('should downgrade a failed channel and reconcile through storage', async () => {\n const reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' })\n\n createTestTabSessionSync({ reconcileSession, sourceTabID: 'storage-peer' })\n const addEventListener = vi.spyOn(window, 'addEventListener')\n const setItem = vi.spyOn(Storage.prototype, 'setItem')\n const broadcaster = createTestTabSessionSync({ sourceTabID: 'channel-broadcaster' })\n const failedChannel = getBroadcastChannel()\n\n failedChannel.postMessage.mockImplementationOnce(() => {\n throw new Error('channel closed')\n })\n broadcaster.broadcast({\n refreshStartedAt: 100,\n session: createSession({ expirationMs: 20_000 }),\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n })\n\n expect(failedChannel.close).toHaveBeenCalledOnce()\n expect(addEventListener).toHaveBeenCalledWith('storage', expect.any(Function))\n expect(setItem).toHaveBeenCalledOnce()\n\n const [key, newValue] = setItem.mock.calls[0] as [string, string]\n\n window.dispatchEvent(new StorageEvent('storage', { key, newValue }))\n await Promise.resolve()\n\n expect(reconcileSession).toHaveBeenCalledOnce()\n })\n\n it('should ignore a pending storage reconciliation after cleanup', async () => {\n vi.stubGlobal('BroadcastChannel', undefined)\n let resolveReconciliation: ((result: TabSessionReconciliationResult) => void) | undefined\n const reconcileSession = vi.fn(\n () =>\n new Promise<TabSessionReconciliationResult>((resolve) => {\n resolveReconciliation = resolve\n }),\n )\n const onTabSessionUnauthenticated = vi.fn()\n const tabSessionSync = createTestTabSessionSync({\n reconcileSession,\n onTabSessionUnauthenticated,\n })\n\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: 'payload:auth-session:tab-sync',\n newValue: JSON.stringify({\n affectedExpirationMs: 40_000,\n refreshStartedAt: 400,\n type: TAB_SESSION_EVENT_TYPES.REFRESHED,\n sentAt: 500,\n sourceTabID: 'remote-tab',\n }),\n }),\n )\n tabSessionSync.cleanup()\n resolveReconciliation?.({ status: 'unauthenticated' })\n await Promise.resolve()\n\n expect(onTabSessionUnauthenticated).not.toHaveBeenCalled()\n })\n})\n\nfunction createTestTabSessionSync({\n reconcileSession = vi.fn().mockResolvedValue({ status: 'indeterminate' } as const),\n localExpirationMs,\n now,\n onSessionExpired = vi.fn(),\n onSessionLoggedOut = vi.fn(),\n onSessionRefreshed = vi.fn(),\n onTabSessionUnauthenticated = vi.fn(),\n sourceTabID = 'local-tab',\n}: {\n reconcileSession?: () => Promise<TabSessionReconciliationResult>\n localExpirationMs?: number\n now?: () => number\n onSessionExpired?: (expiredTokenAt: number) => void\n onSessionLoggedOut?: () => void\n onSessionRefreshed?: (session: UserWithToken) => void\n onTabSessionUnauthenticated?: () => void\n sourceTabID?: string\n} = {}) {\n const tabSessionSync = createTabSessionSync({\n reconcileSession,\n getTokenExpirationMs: () => localExpirationMs,\n now,\n onSessionExpired,\n onSessionLoggedOut,\n onSessionRefreshed,\n onTabSessionUnauthenticated,\n sourceTabID,\n })\n\n tabSessionSyncCleanups.push(tabSessionSync.cleanup)\n\n return tabSessionSync\n}\n\nclass MockBroadcastChannel {\n static instances: MockBroadcastChannel[] = []\n\n listeners = new Set<(event: MessageEvent<TabSessionMessage>) => void>()\n addEventListener = vi.fn(\n (_type: string, listener: (event: MessageEvent<TabSessionMessage>) => void) => {\n this.listeners.add(listener)\n },\n )\n close = vi.fn()\n postMessage = vi.fn()\n removeEventListener = vi.fn(\n (_type: string, listener: (event: MessageEvent<TabSessionMessage>) => void) => {\n this.listeners.delete(listener)\n },\n )\n\n emit(message: TabSessionMessage): void {\n for (const listener of this.listeners) {\n listener(new MessageEvent('message', { data: message }))\n }\n }\n}\n\nfunction createTabSessionMessage(\n message:\n | ({\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.EXPIRED }>,\n 'sentAt'\n >)\n | ({\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.LOGGED_OUT }>,\n 'sentAt'\n >)\n | ({\n refreshStartedAt?: number\n sentAt?: number\n } & Omit<\n Extract<TabSessionMessage, { type: typeof TAB_SESSION_EVENT_TYPES.REFRESHED }>,\n 'refreshStartedAt' | 'sentAt'\n >),\n): TabSessionMessage {\n const { sentAt = 100, ...messageWithoutTimestamp } = message\n\n if (messageWithoutTimestamp.type === TAB_SESSION_EVENT_TYPES.REFRESHED) {\n const { refreshStartedAt = sentAt, ...refreshedMessage } = messageWithoutTimestamp\n\n return { ...refreshedMessage, refreshStartedAt, sentAt }\n }\n\n return { ...messageWithoutTimestamp, sentAt } as TabSessionMessage\n}\n\nfunction createSession({\n expirationMs,\n token = 'token',\n}: {\n expirationMs: number\n token?: string\n}): UserWithToken {\n return {\n exp: expirationMs / 1000,\n token,\n user: { id: '1', collection: 'users' },\n }\n}\n\nfunction getBroadcastChannel(): MockBroadcastChannel {\n const channel = MockBroadcastChannel.instances.at(-1)\n\n if (!channel) {\n throw new Error('Expected a BroadcastChannel instance')\n }\n\n return channel\n}\n\nfunction resetMockBroadcastChannels(): void {\n MockBroadcastChannel.instances.length = 0\n vi.stubGlobal(\n 'BroadcastChannel',\n class extends MockBroadcastChannel {\n constructor() {\n super()\n MockBroadcastChannel.instances.push(this)\n }\n },\n )\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,311 +0,0 @@
1
- // @vitest-environment jsdom
2
- import React, { act } from 'react';
3
- import { createRoot } from 'react-dom/client';
4
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
5
- import { getAuthSessionTiming } from './sessionTiming.js';
6
- import { useAuthSessionTimers } from './useAuthSessionTimers.js';
7
- const timerCleanups = [];
8
- beforeEach(() => {
9
- vi.useFakeTimers();
10
- vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'));
11
- });
12
- afterEach(() => {
13
- for (const cleanup of timerCleanups.splice(0)) {
14
- cleanup();
15
- }
16
- vi.useRealTimers();
17
- });
18
- describe('useAuthSessionTimers', () => {
19
- it('should scale session timing for tokens shorter than two minutes', () => {
20
- const nowMs = Date.now();
21
- const expirationMs = nowMs + 30_000;
22
- expect(getAuthSessionTiming({
23
- expirationMs,
24
- nowMs
25
- })).toEqual({
26
- activityTrackingStartsAt: nowMs,
27
- expiresAt: expirationMs,
28
- refreshStartsAt: nowMs,
29
- reminderStartsAt: nowMs + 15_000
30
- });
31
- });
32
- it('should return the lifecycle timing when setting an expiration', () => {
33
- const timers = renderAuthSessionTimers();
34
- const expirationMs = Date.now() + 300_000;
35
- expect(timers.setExpiration(expirationMs)).toEqual({
36
- activityTrackingStartsAt: expirationMs - 240_000,
37
- expiresAt: expirationMs,
38
- refreshStartsAt: expirationMs - 120_000,
39
- reminderStartsAt: expirationMs - 60_000
40
- });
41
- });
42
- it('should refresh at the checkpoint when activity occurred in the tracking window', () => {
43
- const onActivity = vi.fn();
44
- const onActivityRefresh = vi.fn();
45
- const timers = renderAuthSessionTimers({
46
- onActivity,
47
- onActivityRefresh
48
- });
49
- timers.setExpiration(Date.now() + 300_000);
50
- act(() => {
51
- vi.advanceTimersByTime(120_000);
52
- window.dispatchEvent(new MouseEvent('mousemove'));
53
- vi.advanceTimersByTime(1_000);
54
- window.dispatchEvent(new KeyboardEvent('keydown'));
55
- vi.advanceTimersByTime(59_000);
56
- vi.advanceTimersByTime(1_000);
57
- });
58
- expect(onActivity).toHaveBeenCalledOnce();
59
- expect(onActivityRefresh).toHaveBeenCalledTimes(1);
60
- });
61
- it('should ignore activity once the expiration reminder opens', () => {
62
- const onActivityRefresh = vi.fn();
63
- const timers = renderAuthSessionTimers({
64
- onActivityRefresh
65
- });
66
- const sessionStartedAt = Date.now();
67
- timers.setExpiration(sessionStartedAt + 300_000);
68
- act(() => {
69
- vi.advanceTimersByTime(60_000);
70
- });
71
- vi.setSystemTime(sessionStartedAt + 240_000);
72
- expect(timers.recordActivity('route')).toBe(false);
73
- expect(onActivityRefresh).not.toHaveBeenCalled();
74
- });
75
- it('should clear timers and listeners on logout', () => {
76
- const onActivityRefresh = vi.fn();
77
- const onExpire = vi.fn();
78
- const timers = renderAuthSessionTimers({
79
- onActivityRefresh,
80
- onExpire
81
- });
82
- timers.setExpiration(Date.now() + 300_000);
83
- timers.clear();
84
- act(() => {
85
- window.dispatchEvent(new MouseEvent('mousemove'));
86
- vi.advanceTimersByTime(300_000);
87
- });
88
- expect(onActivityRefresh).not.toHaveBeenCalled();
89
- expect(onExpire).not.toHaveBeenCalled();
90
- });
91
- it('should schedule the reminder and expiration from the current expiration', () => {
92
- const onExpire = vi.fn();
93
- const onReminder = vi.fn();
94
- const timers = renderAuthSessionTimers({
95
- onExpire,
96
- onReminder
97
- });
98
- const expirationMs = Date.now() + 300_000;
99
- timers.setExpiration(expirationMs);
100
- act(() => {
101
- vi.advanceTimersByTime(240_000);
102
- });
103
- expect(onReminder).toHaveBeenCalledTimes(1);
104
- expect(onExpire).not.toHaveBeenCalled();
105
- act(() => {
106
- vi.advanceTimersByTime(60_000);
107
- });
108
- expect(onExpire).toHaveBeenCalledWith(expirationMs);
109
- });
110
- it('should respect expirations beyond the maximum browser timeout', () => {
111
- const onExpire = vi.fn();
112
- const timers = renderAuthSessionTimers({
113
- onExpire
114
- });
115
- const thirtyDaysMs = 2_592_000_000;
116
- const maximumBrowserTimeoutMs = 2_147_483_647;
117
- const expirationMs = Date.now() + thirtyDaysMs;
118
- timers.setExpiration(expirationMs);
119
- act(() => {
120
- vi.advanceTimersByTime(maximumBrowserTimeoutMs);
121
- });
122
- expect(onExpire).not.toHaveBeenCalled();
123
- act(() => {
124
- vi.advanceTimersByTime(thirtyDaysMs - maximumBrowserTimeoutMs - 1);
125
- });
126
- expect(onExpire).not.toHaveBeenCalled();
127
- act(() => {
128
- vi.advanceTimersByTime(1);
129
- });
130
- expect(onExpire).toHaveBeenCalledOnce();
131
- expect(onExpire).toHaveBeenCalledWith(expirationMs);
132
- });
133
- it('should schedule expiration when the token expires exactly now', () => {
134
- const onActivityRefresh = vi.fn();
135
- const onExpire = vi.fn();
136
- const onReminder = vi.fn();
137
- const timers = renderAuthSessionTimers({
138
- isAuthenticated: false,
139
- onActivityRefresh,
140
- onExpire,
141
- onReminder
142
- });
143
- const expirationMs = Date.now();
144
- timers.setExpiration(expirationMs);
145
- expect(onExpire).not.toHaveBeenCalled();
146
- act(() => {
147
- vi.advanceTimersByTime(0);
148
- });
149
- expect(onExpire).toHaveBeenCalledOnce();
150
- expect(onExpire).toHaveBeenCalledWith(expirationMs);
151
- expect(onActivityRefresh).not.toHaveBeenCalled();
152
- expect(onReminder).not.toHaveBeenCalled();
153
- });
154
- it('should schedule expiration when the token is already past', () => {
155
- const onActivityRefresh = vi.fn();
156
- const onExpire = vi.fn();
157
- const onReminder = vi.fn();
158
- const timers = renderAuthSessionTimers({
159
- isAuthenticated: false,
160
- onActivityRefresh,
161
- onExpire,
162
- onReminder
163
- });
164
- const expirationMs = Date.now() - 1;
165
- timers.setExpiration(expirationMs);
166
- act(() => {
167
- vi.advanceTimersByTime(0);
168
- });
169
- expect(onExpire).toHaveBeenCalledOnce();
170
- expect(onExpire).toHaveBeenCalledWith(expirationMs);
171
- expect(onActivityRefresh).not.toHaveBeenCalled();
172
- expect(onReminder).not.toHaveBeenCalled();
173
- });
174
- it('should reject a non-finite expiration without activating the session', () => {
175
- const onActivityRefresh = vi.fn();
176
- const onExpire = vi.fn();
177
- const timers = renderAuthSessionTimers({
178
- isAuthenticated: false,
179
- onActivityRefresh,
180
- onExpire
181
- });
182
- timers.setExpiration(Number.NaN);
183
- timers.scheduleRefresh(true);
184
- act(() => {
185
- vi.advanceTimersByTime(1_000);
186
- });
187
- expect(timers.getCurrentExpirationMs()).toBeUndefined();
188
- expect(onActivityRefresh).not.toHaveBeenCalled();
189
- expect(onExpire).not.toHaveBeenCalled();
190
- });
191
- it('should synchronously activate on apply and deactivate on clear', () => {
192
- const onActivityRefresh = vi.fn();
193
- const timers = renderAuthSessionTimers({
194
- isAuthenticated: false,
195
- onActivityRefresh
196
- });
197
- timers.clear();
198
- timers.setExpiration(Date.now() + 300_000);
199
- timers.scheduleRefresh(true);
200
- act(() => {
201
- vi.advanceTimersByTime(1_000);
202
- });
203
- expect(onActivityRefresh).toHaveBeenCalledOnce();
204
- timers.clear();
205
- timers.scheduleRefresh(true);
206
- act(() => {
207
- vi.advanceTimersByTime(1_000);
208
- });
209
- expect(onActivityRefresh).toHaveBeenCalledOnce();
210
- });
211
- it('should reset tracked activity when replacing the expiration', () => {
212
- const onActivity = vi.fn();
213
- const onActivityRefresh = vi.fn();
214
- const timers = renderAuthSessionTimers({
215
- onActivity,
216
- onActivityRefresh
217
- });
218
- const expirationMs = Date.now() + 300_000;
219
- timers.setExpiration(expirationMs);
220
- act(() => {
221
- vi.advanceTimersByTime(60_000);
222
- });
223
- expect(timers.recordActivity('route')).toBe(true);
224
- expect(onActivity).toHaveBeenCalledOnce();
225
- timers.setExpiration(expirationMs);
226
- expect(timers.recordActivity('route')).toBe(true);
227
- expect(onActivity).toHaveBeenCalledTimes(2);
228
- act(() => {
229
- vi.advanceTimersByTime(120_000);
230
- vi.advanceTimersByTime(1_000);
231
- });
232
- expect(onActivityRefresh).toHaveBeenCalledOnce();
233
- });
234
- it('should keep its controller and activity throttle across rerenders', () => {
235
- const onActivityRefresh = vi.fn();
236
- const timers = renderAuthSessionTimers({
237
- onActivityRefresh
238
- });
239
- const initialController = timers.getController();
240
- timers.setExpiration(Date.now() + 300_000);
241
- act(() => {
242
- vi.advanceTimersByTime(238_000);
243
- window.dispatchEvent(new MouseEvent('mousemove'));
244
- });
245
- timers.rerender();
246
- expect(timers.getController()).toBe(initialController);
247
- act(() => {
248
- vi.advanceTimersByTime(1);
249
- window.dispatchEvent(new MouseEvent('mousemove'));
250
- vi.advanceTimersByTime(999);
251
- });
252
- expect(onActivityRefresh).toHaveBeenCalledTimes(1);
253
- });
254
- it('should synchronously replace the current expiration', () => {
255
- const timers = renderAuthSessionTimers();
256
- const firstExpirationMs = Date.now() + 300_000;
257
- const replacementExpirationMs = Date.now() + 600_000;
258
- timers.setExpiration(firstExpirationMs);
259
- timers.setExpiration(replacementExpirationMs);
260
- expect(timers.getCurrentExpirationMs()).toBe(replacementExpirationMs);
261
- });
262
- });
263
- function renderAuthSessionTimers({
264
- isAuthenticated = true,
265
- onActivity = vi.fn(),
266
- onActivityRefresh = vi.fn(),
267
- onExpire = vi.fn(),
268
- onReminder = vi.fn()
269
- } = {}) {
270
- let controller;
271
- const container = document.createElement('div');
272
- const root = createRoot(container);
273
- function SessionTimers() {
274
- controller = useAuthSessionTimers({
275
- isAuthenticated,
276
- onActivity,
277
- onActivityRefresh,
278
- onExpire,
279
- onReminder
280
- });
281
- return null;
282
- }
283
- act(() => {
284
- root.render(React.createElement(SessionTimers));
285
- });
286
- timerCleanups.push(() => {
287
- act(() => {
288
- root.unmount();
289
- });
290
- });
291
- const getController = () => {
292
- if (!controller) {
293
- throw new Error('Expected auth session timers.');
294
- }
295
- return controller;
296
- };
297
- return {
298
- clear: () => getController().clear(),
299
- getController,
300
- getCurrentExpirationMs: () => getController().getCurrentExpirationMs(),
301
- rerender: () => {
302
- act(() => {
303
- root.render(React.createElement(SessionTimers));
304
- });
305
- },
306
- recordActivity: source => getController().recordActivity(source),
307
- scheduleRefresh: forceRefresh => getController().scheduleRefresh(forceRefresh),
308
- setExpiration: expirationMs => getController().setExpiration(expirationMs)
309
- };
310
- }
311
- //# sourceMappingURL=useAuthSessionTimers.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAuthSessionTimers.spec.js","names":["React","act","createRoot","afterEach","beforeEach","describe","expect","it","vi","getAuthSessionTiming","useAuthSessionTimers","timerCleanups","useFakeTimers","setSystemTime","Date","cleanup","splice","useRealTimers","nowMs","now","expirationMs","toEqual","activityTrackingStartsAt","expiresAt","refreshStartsAt","reminderStartsAt","timers","renderAuthSessionTimers","setExpiration","onActivity","fn","onActivityRefresh","advanceTimersByTime","window","dispatchEvent","MouseEvent","KeyboardEvent","toHaveBeenCalledOnce","toHaveBeenCalledTimes","sessionStartedAt","recordActivity","toBe","not","toHaveBeenCalled","onExpire","clear","onReminder","toHaveBeenCalledWith","thirtyDaysMs","maximumBrowserTimeoutMs","isAuthenticated","Number","NaN","scheduleRefresh","getCurrentExpirationMs","toBeUndefined","initialController","getController","rerender","firstExpirationMs","replacementExpirationMs","controller","container","document","createElement","root","SessionTimers","render","push","unmount","Error","source","forceRefresh"],"sources":["../../../src/providers/Auth/useAuthSessionTimers.spec.ts"],"sourcesContent":["// @vitest-environment jsdom\nimport React, { act } from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'\n\nimport type { AuthSessionTimers } from './useAuthSessionTimers.js'\n\nimport { getAuthSessionTiming } from './sessionTiming.js'\nimport { useAuthSessionTimers } from './useAuthSessionTimers.js'\n\nconst timerCleanups: Array<() => void> = []\n\nbeforeEach(() => {\n vi.useFakeTimers()\n vi.setSystemTime(new Date('2026-01-01T00:00:00.000Z'))\n})\n\nafterEach(() => {\n for (const cleanup of timerCleanups.splice(0)) {\n cleanup()\n }\n\n vi.useRealTimers()\n})\n\ndescribe('useAuthSessionTimers', () => {\n it('should scale session timing for tokens shorter than two minutes', () => {\n const nowMs = Date.now()\n const expirationMs = nowMs + 30_000\n\n expect(getAuthSessionTiming({ expirationMs, nowMs })).toEqual({\n activityTrackingStartsAt: nowMs,\n expiresAt: expirationMs,\n refreshStartsAt: nowMs,\n reminderStartsAt: nowMs + 15_000,\n })\n })\n\n it('should return the lifecycle timing when setting an expiration', () => {\n const timers = renderAuthSessionTimers()\n const expirationMs = Date.now() + 300_000\n\n expect(timers.setExpiration(expirationMs)).toEqual({\n activityTrackingStartsAt: expirationMs - 240_000,\n expiresAt: expirationMs,\n refreshStartsAt: expirationMs - 120_000,\n reminderStartsAt: expirationMs - 60_000,\n })\n })\n\n it('should refresh at the checkpoint when activity occurred in the tracking window', () => {\n const onActivity = vi.fn()\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivity, onActivityRefresh })\n\n timers.setExpiration(Date.now() + 300_000)\n act(() => {\n vi.advanceTimersByTime(120_000)\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(1_000)\n window.dispatchEvent(new KeyboardEvent('keydown'))\n vi.advanceTimersByTime(59_000)\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivity).toHaveBeenCalledOnce()\n expect(onActivityRefresh).toHaveBeenCalledTimes(1)\n })\n\n it('should ignore activity once the expiration reminder opens', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh })\n const sessionStartedAt = Date.now()\n\n timers.setExpiration(sessionStartedAt + 300_000)\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n vi.setSystemTime(sessionStartedAt + 240_000)\n\n expect(timers.recordActivity('route')).toBe(false)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n })\n\n it('should clear timers and listeners on logout', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh, onExpire })\n\n timers.setExpiration(Date.now() + 300_000)\n timers.clear()\n act(() => {\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(300_000)\n })\n\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onExpire).not.toHaveBeenCalled()\n })\n\n it('should schedule the reminder and expiration from the current expiration', () => {\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({ onExpire, onReminder })\n const expirationMs = Date.now() + 300_000\n\n timers.setExpiration(expirationMs)\n act(() => {\n vi.advanceTimersByTime(240_000)\n })\n\n expect(onReminder).toHaveBeenCalledTimes(1)\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n })\n\n it('should respect expirations beyond the maximum browser timeout', () => {\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({ onExpire })\n const thirtyDaysMs = 2_592_000_000\n const maximumBrowserTimeoutMs = 2_147_483_647\n const expirationMs = Date.now() + thirtyDaysMs\n\n timers.setExpiration(expirationMs)\n\n act(() => {\n vi.advanceTimersByTime(maximumBrowserTimeoutMs)\n })\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(thirtyDaysMs - maximumBrowserTimeoutMs - 1)\n })\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(1)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n })\n\n it('should schedule expiration when the token expires exactly now', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n const expirationMs = Date.now()\n\n timers.setExpiration(expirationMs)\n\n expect(onExpire).not.toHaveBeenCalled()\n\n act(() => {\n vi.advanceTimersByTime(0)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onReminder).not.toHaveBeenCalled()\n })\n\n it('should schedule expiration when the token is already past', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const onReminder = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n const expirationMs = Date.now() - 1\n\n timers.setExpiration(expirationMs)\n\n act(() => {\n vi.advanceTimersByTime(0)\n })\n\n expect(onExpire).toHaveBeenCalledOnce()\n expect(onExpire).toHaveBeenCalledWith(expirationMs)\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onReminder).not.toHaveBeenCalled()\n })\n\n it('should reject a non-finite expiration without activating the session', () => {\n const onActivityRefresh = vi.fn()\n const onExpire = vi.fn()\n const timers = renderAuthSessionTimers({\n isAuthenticated: false,\n onActivityRefresh,\n onExpire,\n })\n\n timers.setExpiration(Number.NaN)\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(timers.getCurrentExpirationMs()).toBeUndefined()\n expect(onActivityRefresh).not.toHaveBeenCalled()\n expect(onExpire).not.toHaveBeenCalled()\n })\n\n it('should synchronously activate on apply and deactivate on clear', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ isAuthenticated: false, onActivityRefresh })\n\n timers.clear()\n timers.setExpiration(Date.now() + 300_000)\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n\n timers.clear()\n timers.scheduleRefresh(true)\n act(() => {\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n })\n\n it('should reset tracked activity when replacing the expiration', () => {\n const onActivity = vi.fn()\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivity, onActivityRefresh })\n const expirationMs = Date.now() + 300_000\n\n timers.setExpiration(expirationMs)\n act(() => {\n vi.advanceTimersByTime(60_000)\n })\n expect(timers.recordActivity('route')).toBe(true)\n expect(onActivity).toHaveBeenCalledOnce()\n\n timers.setExpiration(expirationMs)\n\n expect(timers.recordActivity('route')).toBe(true)\n expect(onActivity).toHaveBeenCalledTimes(2)\n\n act(() => {\n vi.advanceTimersByTime(120_000)\n vi.advanceTimersByTime(1_000)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledOnce()\n })\n\n it('should keep its controller and activity throttle across rerenders', () => {\n const onActivityRefresh = vi.fn()\n const timers = renderAuthSessionTimers({ onActivityRefresh })\n const initialController = timers.getController()\n\n timers.setExpiration(Date.now() + 300_000)\n act(() => {\n vi.advanceTimersByTime(238_000)\n window.dispatchEvent(new MouseEvent('mousemove'))\n })\n timers.rerender()\n\n expect(timers.getController()).toBe(initialController)\n\n act(() => {\n vi.advanceTimersByTime(1)\n window.dispatchEvent(new MouseEvent('mousemove'))\n vi.advanceTimersByTime(999)\n })\n\n expect(onActivityRefresh).toHaveBeenCalledTimes(1)\n })\n\n it('should synchronously replace the current expiration', () => {\n const timers = renderAuthSessionTimers()\n const firstExpirationMs = Date.now() + 300_000\n const replacementExpirationMs = Date.now() + 600_000\n\n timers.setExpiration(firstExpirationMs)\n timers.setExpiration(replacementExpirationMs)\n\n expect(timers.getCurrentExpirationMs()).toBe(replacementExpirationMs)\n })\n})\n\nfunction renderAuthSessionTimers({\n isAuthenticated = true,\n onActivity = vi.fn(),\n onActivityRefresh = vi.fn(),\n onExpire = vi.fn(),\n onReminder = vi.fn(),\n}: {\n isAuthenticated?: boolean\n onActivity?: () => void\n onActivityRefresh?: () => void\n onExpire?: (expirationMs: number) => void\n onReminder?: () => void\n} = {}): RenderedAuthSessionTimers {\n let controller: AuthSessionTimers | undefined\n const container = document.createElement('div')\n const root = createRoot(container)\n\n function SessionTimers() {\n controller = useAuthSessionTimers({\n isAuthenticated,\n onActivity,\n onActivityRefresh,\n onExpire,\n onReminder,\n })\n\n return null\n }\n\n act(() => {\n root.render(React.createElement(SessionTimers))\n })\n\n timerCleanups.push(() => {\n act(() => {\n root.unmount()\n })\n })\n\n const getController = (): AuthSessionTimers => {\n if (!controller) {\n throw new Error('Expected auth session timers.')\n }\n\n return controller\n }\n\n return {\n clear: () => getController().clear(),\n getController,\n getCurrentExpirationMs: () => getController().getCurrentExpirationMs(),\n rerender: () => {\n act(() => {\n root.render(React.createElement(SessionTimers))\n })\n },\n recordActivity: (source) => getController().recordActivity(source),\n scheduleRefresh: (forceRefresh) => getController().scheduleRefresh(forceRefresh),\n setExpiration: (expirationMs) => getController().setExpiration(expirationMs),\n }\n}\n\ntype RenderedAuthSessionTimers = AuthSessionTimers & {\n getController: () => AuthSessionTimers\n recordActivity: (source: 'focus' | 'keydown' | 'mousemove' | 'route') => boolean\n rerender: () => void\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,44 +0,0 @@
1
- // @vitest-environment happy-dom
2
- import { act, createElement, useEffect } from 'react';
3
- import { createRoot } from 'react-dom/client';
4
- import { afterEach, beforeEach, expect, test, vi } from 'vitest';
5
- import { RouteTransitionProvider, useRouteTransition } from '../index.js';
6
- import { ProgressBar } from './index.js';
7
- let container;
8
- let root;
9
- beforeEach(() => {
10
- globalThis.IS_REACT_ACT_ENVIRONMENT = true;
11
- container = document.createElement('div');
12
- document.body.appendChild(container);
13
- root = createRoot(container);
14
- });
15
- afterEach(() => {
16
- act(() => root.unmount());
17
- container.remove();
18
- vi.useRealTimers();
19
- });
20
- test('does not show progress for transitions that finish before the initial delay', async () => {
21
- vi.useFakeTimers();
22
- const FastTransition = () => {
23
- const {
24
- holdRouteTransition
25
- } = useRouteTransition();
26
- useEffect(() => {
27
- const releaseRouteTransition = holdRouteTransition();
28
- const timeout = setTimeout(releaseRouteTransition, 50);
29
- return () => {
30
- clearTimeout(timeout);
31
- releaseRouteTransition();
32
- };
33
- }, [holdRouteTransition]);
34
- return null;
35
- };
36
- await act(async () => {
37
- root.render(createElement(RouteTransitionProvider, null, createElement(ProgressBar), createElement(FastTransition)));
38
- });
39
- await act(async () => {
40
- await vi.advanceTimersByTimeAsync(50);
41
- });
42
- expect(container.querySelector('.progress-bar')).toBeNull();
43
- });
44
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","names":["act","createElement","useEffect","createRoot","afterEach","beforeEach","expect","test","vi","RouteTransitionProvider","useRouteTransition","ProgressBar","container","root","globalThis","IS_REACT_ACT_ENVIRONMENT","document","body","appendChild","unmount","remove","useRealTimers","useFakeTimers","FastTransition","holdRouteTransition","releaseRouteTransition","timeout","setTimeout","clearTimeout","render","advanceTimersByTimeAsync","querySelector","toBeNull"],"sources":["../../../../src/providers/RouteTransition/ProgressBar/index.spec.ts"],"sourcesContent":["// @vitest-environment happy-dom\n\nimport { act, createElement, useEffect } from 'react'\nimport { createRoot, type Root } from 'react-dom/client'\nimport { afterEach, beforeEach, expect, test, vi } from 'vitest'\n\nimport { RouteTransitionProvider, useRouteTransition } from '../index.js'\nimport { ProgressBar } from './index.js'\n\nlet container: HTMLDivElement\nlet root: Root\n\nbeforeEach(() => {\n globalThis.IS_REACT_ACT_ENVIRONMENT = true\n container = document.createElement('div')\n document.body.appendChild(container)\n root = createRoot(container)\n})\n\nafterEach(() => {\n act(() => root.unmount())\n container.remove()\n vi.useRealTimers()\n})\n\ntest('does not show progress for transitions that finish before the initial delay', async () => {\n vi.useFakeTimers()\n\n const FastTransition = () => {\n const { holdRouteTransition } = useRouteTransition()\n\n useEffect(() => {\n const releaseRouteTransition = holdRouteTransition()\n const timeout = setTimeout(releaseRouteTransition, 50)\n\n return () => {\n clearTimeout(timeout)\n releaseRouteTransition()\n }\n }, [holdRouteTransition])\n\n return null\n }\n\n await act(async () => {\n root.render(\n createElement(\n RouteTransitionProvider,\n null,\n createElement(ProgressBar),\n createElement(FastTransition),\n ),\n )\n })\n\n await act(async () => {\n await vi.advanceTimersByTimeAsync(50)\n })\n\n expect(container.querySelector('.progress-bar')).toBeNull()\n})\n"],"mappings":"AAAA;AAEA,SAASA,GAAG,EAAEC,aAAa,EAAEC,SAAS,QAAQ;AAC9C,SAASC,UAAU,QAAmB;AACtC,SAASC,SAAS,EAAEC,UAAU,EAAEC,MAAM,EAAEC,IAAI,EAAEC,EAAE,QAAQ;AAExD,SAASC,uBAAuB,EAAEC,kBAAkB,QAAQ;AAC5D,SAASC,WAAW,QAAQ;AAE5B,IAAIC,SAAA;AACJ,IAAIC,IAAA;AAEJR,UAAA,CAAW;EACTS,UAAA,CAAWC,wBAAwB,GAAG;EACtCH,SAAA,GAAYI,QAAA,CAASf,aAAa,CAAC;EACnCe,QAAA,CAASC,IAAI,CAACC,WAAW,CAACN,SAAA;EAC1BC,IAAA,GAAOV,UAAA,CAAWS,SAAA;AACpB;AAEAR,SAAA,CAAU;EACRJ,GAAA,CAAI,MAAMa,IAAA,CAAKM,OAAO;EACtBP,SAAA,CAAUQ,MAAM;EAChBZ,EAAA,CAAGa,aAAa;AAClB;AAEAd,IAAA,CAAK,+EAA+E;EAClFC,EAAA,CAAGc,aAAa;EAEhB,MAAMC,cAAA,GAAiBA,CAAA;IACrB,MAAM;MAAEC;IAAmB,CAAE,GAAGd,kBAAA;IAEhCR,SAAA,CAAU;MACR,MAAMuB,sBAAA,GAAyBD,mBAAA;MAC/B,MAAME,OAAA,GAAUC,UAAA,CAAWF,sBAAA,EAAwB;MAEnD,OAAO;QACLG,YAAA,CAAaF,OAAA;QACbD,sBAAA;MACF;IACF,GAAG,CAACD,mBAAA,CAAoB;IAExB,OAAO;EACT;EAEA,MAAMxB,GAAA,CAAI;IACRa,IAAA,CAAKgB,MAAM,CACT5B,aAAA,CACEQ,uBAAA,EACA,MACAR,aAAA,CAAcU,WAAA,GACdV,aAAA,CAAcsB,cAAA;EAGpB;EAEA,MAAMvB,GAAA,CAAI;IACR,MAAMQ,EAAA,CAAGsB,wBAAwB,CAAC;EACpC;EAEAxB,MAAA,CAAOM,SAAA,CAAUmB,aAAa,CAAC,kBAAkBC,QAAQ;AAC3D","ignoreList":[]}
@@ -1,40 +0,0 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { buildColumnState } from './index.js';
3
- vi.mock('../../../exports/client/index.js', () => ({
4
- SortColumn: () => null
5
- }));
6
- describe('buildColumnState', () => {
7
- it('should handle fields with admin components explicitly set to undefined', () => {
8
- const clientField = {
9
- name: 'title',
10
- type: 'text'
11
- };
12
- const serverField = {
13
- name: 'title',
14
- type: 'text',
15
- admin: {
16
- components: undefined
17
- }
18
- };
19
- const columns = buildColumnState({
20
- clientFields: [clientField],
21
- collectionSlug: 'posts',
22
- customCellProps: {},
23
- dataType: 'monomorphic',
24
- docs: [],
25
- enableRowSelections: false,
26
- fieldPermissions: true,
27
- i18n: {
28
- t: vi.fn()
29
- },
30
- payload: {
31
- importMap: {}
32
- },
33
- serverFields: [serverField],
34
- useAsTitle: 'title'
35
- });
36
- expect(columns).toHaveLength(1);
37
- expect(columns[0].CustomLabel).toBeUndefined();
38
- });
39
- });
40
- //# sourceMappingURL=index.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.spec.js","names":["describe","expect","it","vi","buildColumnState","mock","SortColumn","clientField","name","type","serverField","admin","components","undefined","columns","clientFields","collectionSlug","customCellProps","dataType","docs","enableRowSelections","fieldPermissions","i18n","t","fn","payload","importMap","serverFields","useAsTitle","toHaveLength","CustomLabel","toBeUndefined"],"sources":["../../../../src/providers/TableColumns/buildColumnState/index.spec.ts"],"sourcesContent":["import type { I18nClient } from '@payloadcms/translations'\nimport type { ClientField, Field, Payload } from 'payload'\n\nimport { describe, expect, it, vi } from 'vitest'\n\nimport { buildColumnState } from './index.js'\n\nvi.mock('../../../exports/client/index.js', () => ({\n SortColumn: () => null,\n}))\n\ndescribe('buildColumnState', () => {\n it('should handle fields with admin components explicitly set to undefined', () => {\n const clientField: ClientField = {\n name: 'title',\n type: 'text',\n }\n const serverField: Field = {\n name: 'title',\n type: 'text',\n admin: {\n components: undefined,\n },\n }\n\n const columns = buildColumnState({\n clientFields: [clientField],\n collectionSlug: 'posts',\n customCellProps: {},\n dataType: 'monomorphic',\n docs: [],\n enableRowSelections: false,\n fieldPermissions: true,\n i18n: {\n t: vi.fn(),\n } as unknown as I18nClient,\n payload: {\n importMap: {},\n } as unknown as Payload,\n serverFields: [serverField],\n useAsTitle: 'title',\n })\n\n expect(columns).toHaveLength(1)\n expect(columns[0].CustomLabel).toBeUndefined()\n })\n})\n"],"mappings":"AAGA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ;AAEzC,SAASC,gBAAgB,QAAQ;AAEjCD,EAAA,CAAGE,IAAI,CAAC,oCAAoC,OAAO;EACjDC,UAAA,EAAYA,CAAA,KAAM;AACpB;AAEAN,QAAA,CAAS,oBAAoB;EAC3BE,EAAA,CAAG,0EAA0E;IAC3E,MAAMK,WAAA,GAA2B;MAC/BC,IAAA,EAAM;MACNC,IAAA,EAAM;IACR;IACA,MAAMC,WAAA,GAAqB;MACzBF,IAAA,EAAM;MACNC,IAAA,EAAM;MACNE,KAAA,EAAO;QACLC,UAAA,EAAYC;MACd;IACF;IAEA,MAAMC,OAAA,GAAUV,gBAAA,CAAiB;MAC/BW,YAAA,EAAc,CAACR,WAAA,CAAY;MAC3BS,cAAA,EAAgB;MAChBC,eAAA,EAAiB,CAAC;MAClBC,QAAA,EAAU;MACVC,IAAA,EAAM,EAAE;MACRC,mBAAA,EAAqB;MACrBC,gBAAA,EAAkB;MAClBC,IAAA,EAAM;QACJC,CAAA,EAAGpB,EAAA,CAAGqB,EAAE;MACV;MACAC,OAAA,EAAS;QACPC,SAAA,EAAW,CAAC;MACd;MACAC,YAAA,EAAc,CAACjB,WAAA,CAAY;MAC3BkB,UAAA,EAAY;IACd;IAEA3B,MAAA,CAAOa,OAAA,EAASe,YAAY,CAAC;IAC7B5B,MAAA,CAAOa,OAAO,CAAC,EAAE,CAACgB,WAAW,EAAEC,aAAa;EAC9C;AACF","ignoreList":[]}
@@ -1,34 +0,0 @@
1
- import { describe, expect, it } from 'vitest';
2
- import { appendCacheTag } from './appendCacheTag.js';
3
- describe('appendCacheTag', () => {
4
- it('should return the url unchanged when cacheTag is undefined', () => {
5
- expect(appendCacheTag('https://example.com/image.jpg', undefined)).toBe('https://example.com/image.jpg');
6
- });
7
- it('should return the url unchanged when cacheTag is false', () => {
8
- expect(appendCacheTag('https://example.com/image.jpg', false)).toBe('https://example.com/image.jpg');
9
- });
10
- it('should return the url unchanged when cacheTag is empty string', () => {
11
- expect(appendCacheTag('https://example.com/image.jpg', '')).toBe('https://example.com/image.jpg');
12
- });
13
- it('should append the cache tag with ? when the url has no query string', () => {
14
- const result = appendCacheTag('https://example.com/image.jpg', '2024-01-01T00:00:00.000Z');
15
- expect(result).toBe('https://example.com/image.jpg?2024-01-01T00%3A00%3A00.000Z');
16
- });
17
- it('should append the cache tag with & when the url already has a query string', () => {
18
- const result = appendCacheTag('https://example.com/image.jpg?w=800&q=75', '2024-01-01T00:00:00.000Z');
19
- expect(result).toBe('https://example.com/image.jpg?w=800&q=75&2024-01-01T00%3A00%3A00.000Z');
20
- });
21
- it('should URI-encode the cache tag value', () => {
22
- const result = appendCacheTag('/image.jpg', '2024-06-15T12:30:00.000Z');
23
- expect(result).toBe('/image.jpg?2024-06-15T12%3A30%3A00.000Z');
24
- });
25
- it('should work with relative urls', () => {
26
- const result = appendCacheTag('/uploads/photo.png', '2024-01-01T00:00:00.000Z');
27
- expect(result).toBe('/uploads/photo.png?2024-01-01T00%3A00%3A00.000Z');
28
- });
29
- it('should work with relative urls that already have a query string', () => {
30
- const result = appendCacheTag('/uploads/photo.png?size=large', '2024-01-01T00:00:00.000Z');
31
- expect(result).toBe('/uploads/photo.png?size=large&2024-01-01T00%3A00%3A00.000Z');
32
- });
33
- });
34
- //# sourceMappingURL=appendCacheTag.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"appendCacheTag.spec.js","names":["describe","expect","it","appendCacheTag","undefined","toBe","result"],"sources":["../../src/utilities/appendCacheTag.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { appendCacheTag } from './appendCacheTag.js'\n\ndescribe('appendCacheTag', () => {\n it('should return the url unchanged when cacheTag is undefined', () => {\n expect(appendCacheTag('https://example.com/image.jpg', undefined)).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should return the url unchanged when cacheTag is false', () => {\n expect(appendCacheTag('https://example.com/image.jpg', false)).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should return the url unchanged when cacheTag is empty string', () => {\n expect(appendCacheTag('https://example.com/image.jpg', '')).toBe(\n 'https://example.com/image.jpg',\n )\n })\n\n it('should append the cache tag with ? when the url has no query string', () => {\n const result = appendCacheTag('https://example.com/image.jpg', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('https://example.com/image.jpg?2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should append the cache tag with & when the url already has a query string', () => {\n const result = appendCacheTag(\n 'https://example.com/image.jpg?w=800&q=75',\n '2024-01-01T00:00:00.000Z',\n )\n expect(result).toBe('https://example.com/image.jpg?w=800&q=75&2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should URI-encode the cache tag value', () => {\n const result = appendCacheTag('/image.jpg', '2024-06-15T12:30:00.000Z')\n expect(result).toBe('/image.jpg?2024-06-15T12%3A30%3A00.000Z')\n })\n\n it('should work with relative urls', () => {\n const result = appendCacheTag('/uploads/photo.png', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('/uploads/photo.png?2024-01-01T00%3A00%3A00.000Z')\n })\n\n it('should work with relative urls that already have a query string', () => {\n const result = appendCacheTag('/uploads/photo.png?size=large', '2024-01-01T00:00:00.000Z')\n expect(result).toBe('/uploads/photo.png?size=large&2024-01-01T00%3A00%3A00.000Z')\n })\n})\n"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,QAAQ;AAErC,SAASC,cAAc,QAAQ;AAE/BH,QAAA,CAAS,kBAAkB;EACzBE,EAAA,CAAG,8DAA8D;IAC/DD,MAAA,CAAOE,cAAA,CAAe,iCAAiCC,SAAA,GAAYC,IAAI,CACrE;EAEJ;EAEAH,EAAA,CAAG,0DAA0D;IAC3DD,MAAA,CAAOE,cAAA,CAAe,iCAAiC,QAAQE,IAAI,CACjE;EAEJ;EAEAH,EAAA,CAAG,iEAAiE;IAClED,MAAA,CAAOE,cAAA,CAAe,iCAAiC,KAAKE,IAAI,CAC9D;EAEJ;EAEAH,EAAA,CAAG,uEAAuE;IACxE,MAAMI,MAAA,GAASH,cAAA,CAAe,iCAAiC;IAC/DF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,8EAA8E;IAC/E,MAAMI,MAAA,GAASH,cAAA,CACb,4CACA;IAEFF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,yCAAyC;IAC1C,MAAMI,MAAA,GAASH,cAAA,CAAe,cAAc;IAC5CF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,kCAAkC;IACnC,MAAMI,MAAA,GAASH,cAAA,CAAe,sBAAsB;IACpDF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;EAEAH,EAAA,CAAG,mEAAmE;IACpE,MAAMI,MAAA,GAASH,cAAA,CAAe,iCAAiC;IAC/DF,MAAA,CAAOK,MAAA,EAAQD,IAAI,CAAC;EACtB;AACF","ignoreList":[]}