@webiny/app-admin 6.6.0-alpha.0 → 6.6.0-alpha.10

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 (912) hide show
  1. package/base/Admin.js +34 -2
  2. package/base/Admin.js.map +1 -1
  3. package/base/Base/DefaultFieldRenderers.js +21 -2
  4. package/base/Base/DefaultFieldRenderers.js.map +1 -1
  5. package/base/Base/FieldRenderers/AutoCompleteRenderer.d.ts +13 -0
  6. package/base/Base/FieldRenderers/AutoCompleteRenderer.js +30 -0
  7. package/base/Base/FieldRenderers/AutoCompleteRenderer.js.map +1 -0
  8. package/base/Base/FieldRenderers/BirthdayInputRenderer.d.ts +21 -0
  9. package/base/Base/FieldRenderers/BirthdayInputRenderer.js +39 -0
  10. package/base/Base/FieldRenderers/BirthdayInputRenderer.js.map +1 -0
  11. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.d.ts +1 -0
  12. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js +123 -0
  13. package/base/Base/FieldRenderers/BirthdayInputRenderer.test.js.map +1 -0
  14. package/base/Base/FieldRenderers/HorizontalTabsRenderer.d.ts +2 -2
  15. package/base/Base/FieldRenderers/LexicalRenderer.js +10 -6
  16. package/base/Base/FieldRenderers/LexicalRenderer.js.map +1 -1
  17. package/base/Base/FieldRenderers/MultiFilePickerRenderer.js +8 -5
  18. package/base/Base/FieldRenderers/MultiFilePickerRenderer.js.map +1 -1
  19. package/base/Base/FieldRenderers/MultiSelectRenderer.d.ts +15 -0
  20. package/base/Base/FieldRenderers/MultiSelectRenderer.js +31 -0
  21. package/base/Base/FieldRenderers/MultiSelectRenderer.js.map +1 -0
  22. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.d.ts +2 -0
  23. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js +5 -2
  24. package/base/Base/FieldRenderers/ObjectRenderer/DynamicZoneRenderer.js.map +1 -1
  25. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.d.ts +11 -0
  26. package/base/Base/FieldRenderers/ObjectRenderer/{MultiValueDynamicZone.js → MultiValueDynamicZone/MultiValueDynamicZone.js} +83 -15
  27. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZone.js.map +1 -0
  28. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.d.ts +13 -0
  29. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.js +28 -0
  30. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/MultiValueDynamicZonePresenter.js.map +1 -0
  31. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.d.ts +15 -0
  32. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.js +5 -0
  33. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/abstractions.js.map +1 -0
  34. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.d.ts +1 -0
  35. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.js +11 -0
  36. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/feature.js.map +1 -0
  37. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/index.d.ts +2 -0
  38. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone/index.js +2 -0
  39. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.d.ts +1 -1
  40. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js +29 -4
  41. package/base/Base/FieldRenderers/ObjectRenderer/ObjectAccordionMultipleRenderer.js.map +1 -1
  42. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.d.ts +12 -8
  43. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js +48 -8
  44. package/base/Base/FieldRenderers/ObjectRenderer/ObjectFieldComponents.js.map +1 -1
  45. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js +16 -25
  46. package/base/Base/FieldRenderers/ObjectRenderer/ObjectRenderer.js.map +1 -1
  47. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.d.ts +3 -2
  48. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js +29 -8
  49. package/base/Base/FieldRenderers/ObjectRenderer/SingleValueDynamicZone.js.map +1 -1
  50. package/base/Base/FieldRenderers/ObjectRenderer/{TemplatePicker.d.ts → TemplatePicker/AddTemplateButton.d.ts} +1 -1
  51. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js +24 -0
  52. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/AddTemplateButton.js.map +1 -0
  53. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.d.ts +13 -0
  54. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js +21 -0
  55. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/SelectableTemplate.js.map +1 -0
  56. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.d.ts +3 -0
  57. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js +35 -0
  58. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateCard.js.map +1 -0
  59. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.d.ts +8 -0
  60. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js +22 -0
  61. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGallery.js.map +1 -0
  62. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.d.ts +10 -0
  63. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js +52 -0
  64. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateGalleryToolbar.js.map +1 -0
  65. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.d.ts +8 -0
  66. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js +16 -0
  67. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateIcon.js.map +1 -0
  68. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.d.ts +10 -0
  69. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js +22 -0
  70. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateList.js.map +1 -0
  71. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.d.ts +3 -0
  72. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js +35 -0
  73. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/TemplateListItem.js.map +1 -0
  74. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.d.ts +1 -0
  75. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/index.js +1 -0
  76. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.d.ts +6 -0
  77. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker/types.js +0 -0
  78. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.d.ts +8 -3
  79. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js +25 -17
  80. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.js.map +1 -1
  81. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.d.ts +1 -0
  82. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.js +106 -0
  83. package/base/Base/FieldRenderers/ObjectRenderer/resolveItemTitle.test.js.map +1 -0
  84. package/base/Base/FieldRenderers/RadioButtonsRenderer.js +3 -2
  85. package/base/Base/FieldRenderers/RadioButtonsRenderer.js.map +1 -1
  86. package/base/Base/FieldRenderers/SelectRenderer.d.ts +6 -0
  87. package/base/Base/FieldRenderers/SelectRenderer.js +4 -2
  88. package/base/Base/FieldRenderers/SelectRenderer.js.map +1 -1
  89. package/base/Base/FieldRenderers/VerticalTabsRenderer.d.ts +2 -2
  90. package/base/Base/Menus.js +4 -4
  91. package/base/Base/Menus.js.map +1 -1
  92. package/base/Base.js +2 -1
  93. package/base/Base.js.map +1 -1
  94. package/base/createRootContainer.js +8 -2
  95. package/base/createRootContainer.js.map +1 -1
  96. package/base/resolveApiUrl.d.ts +10 -0
  97. package/base/resolveApiUrl.js +11 -3
  98. package/base/resolveApiUrl.js.map +1 -1
  99. package/base/ui/AssumedPermissionsSelector.d.ts +47 -0
  100. package/base/ui/AssumedPermissionsSelector.js +7 -0
  101. package/base/ui/AssumedPermissionsSelector.js.map +1 -0
  102. package/base/ui/DebuggerIndicator.d.ts +23 -0
  103. package/base/ui/DebuggerIndicator.js +5 -0
  104. package/base/ui/DebuggerIndicator.js.map +1 -0
  105. package/base/ui/Layout.d.ts +20 -0
  106. package/base/ui/Layout.js +2 -1
  107. package/base/ui/Layout.js.map +1 -1
  108. package/components/DeveloperMode/DeveloperMode.d.ts +1 -3
  109. package/components/DeveloperMode/DeveloperMode.js.map +1 -1
  110. package/components/Drawers/DrawerParamsContext.d.ts +6 -0
  111. package/components/Drawers/DrawerParamsContext.js +10 -0
  112. package/components/Drawers/DrawerParamsContext.js.map +1 -0
  113. package/components/Drawers/DrawersContext.d.ts +13 -0
  114. package/components/Drawers/DrawersContext.js +50 -0
  115. package/components/Drawers/DrawersContext.js.map +1 -0
  116. package/components/Drawers/useDrawers.d.ts +2 -0
  117. package/components/Drawers/useDrawers.js +10 -0
  118. package/components/Drawers/useDrawers.js.map +1 -0
  119. package/components/Filters/Filters.js +10 -3
  120. package/components/Filters/Filters.js.map +1 -1
  121. package/components/IconPicker/IconPickerComponent.d.ts +2 -2
  122. package/components/IconPicker/IconPickerComponent.js +1 -1
  123. package/components/IconPicker/IconPickerComponent.js.map +1 -1
  124. package/components/LexicalEditor/LexicalLinkForm.js +3 -0
  125. package/components/LexicalEditor/LexicalLinkForm.js.map +1 -1
  126. package/components/ListView/ListViewBulkActions.d.ts +2 -2
  127. package/components/ListView/ListViewContent.d.ts +2 -2
  128. package/components/ListView/ListViewFilters.d.ts +2 -2
  129. package/components/ListView/index.d.ts +6 -6
  130. package/components/OverlayLayout/OverlayLayout.js +4 -2
  131. package/components/OverlayLayout/OverlayLayout.js.map +1 -1
  132. package/components/OverlayLayout/components/OverlayContent.js +1 -0
  133. package/components/OverlayLayout/components/OverlayContent.js.map +1 -1
  134. package/components/RolesMultiAutocomplete/index.d.ts +4 -2
  135. package/components/SplitView/SplitView.d.ts +2 -2
  136. package/components/SplitView/SplitView.js +8 -8
  137. package/components/SplitView/SplitView.js.map +1 -1
  138. package/components/Table/components/Table/TableInner.d.ts +2 -2
  139. package/components/TeamAutocomplete/index.d.ts +4 -2
  140. package/components/TeamsMultiAutocomplete/index.d.ts +4 -2
  141. package/components/index.d.ts +0 -1
  142. package/components/index.js +0 -1
  143. package/config/AdminConfig/Breadcrumbs.d.ts +42 -0
  144. package/config/AdminConfig/Breadcrumbs.js +24 -0
  145. package/config/AdminConfig/Breadcrumbs.js.map +1 -0
  146. package/config/AdminConfig/Drawer.d.ts +10 -0
  147. package/config/AdminConfig/Drawer.js +19 -0
  148. package/config/AdminConfig/Drawer.js.map +1 -0
  149. package/config/AdminConfig/LexicalTheme/AllowCustomColors.d.ts +5 -0
  150. package/config/AdminConfig/LexicalTheme/AllowCustomColors.js +18 -0
  151. package/config/AdminConfig/LexicalTheme/AllowCustomColors.js.map +1 -0
  152. package/config/AdminConfig/LexicalTheme.d.ts +2 -0
  153. package/config/AdminConfig/LexicalTheme.js +2 -0
  154. package/config/AdminConfig/LexicalTheme.js.map +1 -1
  155. package/config/AdminConfig/Widget.d.ts +9 -1
  156. package/config/AdminConfig/Widget.js +6 -2
  157. package/config/AdminConfig/Widget.js.map +1 -1
  158. package/config/AdminConfig.d.ts +8 -0
  159. package/config/AdminConfig.js +8 -1
  160. package/config/AdminConfig.js.map +1 -1
  161. package/domain/Identity.js +1 -1
  162. package/domain/Identity.js.map +1 -1
  163. package/exports/admin/ui.d.ts +4 -0
  164. package/exports/admin/ui.js +4 -1
  165. package/exports/admin.d.ts +7 -0
  166. package/exports/admin.js +5 -0
  167. package/features/accessManagement/types.d.ts +3 -3
  168. package/features/adminAssistant/AdminAssistantGateway.d.ts +30 -0
  169. package/features/adminAssistant/AdminAssistantGateway.js +41 -0
  170. package/features/adminAssistant/AdminAssistantGateway.js.map +1 -0
  171. package/features/adminAssistant/AdminAssistantPresenter.d.ts +60 -0
  172. package/features/adminAssistant/AdminAssistantPresenter.js +377 -0
  173. package/features/adminAssistant/AdminAssistantPresenter.js.map +1 -0
  174. package/features/adminAssistant/abstractions.d.ts +176 -0
  175. package/features/adminAssistant/abstractions.js +6 -0
  176. package/features/adminAssistant/abstractions.js.map +1 -0
  177. package/features/adminAssistant/feature.d.ts +3 -0
  178. package/features/adminAssistant/feature.js +19 -0
  179. package/features/adminAssistant/feature.js.map +1 -0
  180. package/features/adminAssistant/index.d.ts +6 -0
  181. package/features/adminAssistant/index.js +3 -0
  182. package/features/adminAssistant/turnsFromMessages.d.ts +15 -0
  183. package/features/adminAssistant/turnsFromMessages.js +77 -0
  184. package/features/adminAssistant/turnsFromMessages.js.map +1 -0
  185. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.d.ts +11 -0
  186. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js +44 -0
  187. package/features/adminUsers/account/getCurrentUser/GetCurrentUserGateway.js.map +1 -0
  188. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.d.ts +10 -0
  189. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js +19 -0
  190. package/features/adminUsers/account/getCurrentUser/GetCurrentUserUseCase.js.map +1 -0
  191. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.d.ts +16 -0
  192. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js +5 -0
  193. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserGateway.js.map +1 -0
  194. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.d.ts +10 -0
  195. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js +5 -0
  196. package/features/adminUsers/account/getCurrentUser/abstractions/GetCurrentUserUseCase.js.map +1 -0
  197. package/features/adminUsers/account/getCurrentUser/abstractions/index.d.ts +6 -0
  198. package/features/adminUsers/account/getCurrentUser/abstractions/index.js +2 -0
  199. package/features/adminUsers/account/getCurrentUser/feature.d.ts +3 -0
  200. package/features/adminUsers/account/getCurrentUser/feature.js +19 -0
  201. package/features/adminUsers/account/getCurrentUser/feature.js.map +1 -0
  202. package/features/adminUsers/account/getCurrentUser/index.d.ts +1 -0
  203. package/features/adminUsers/account/getCurrentUser/index.js +1 -0
  204. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.d.ts +11 -0
  205. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js +48 -0
  206. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserGateway.js.map +1 -0
  207. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.d.ts +10 -0
  208. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js +19 -0
  209. package/features/adminUsers/account/updateCurrentUser/UpdateCurrentUserUseCase.js.map +1 -0
  210. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.d.ts +26 -0
  211. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js +5 -0
  212. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserGateway.js.map +1 -0
  213. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.d.ts +13 -0
  214. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js +5 -0
  215. package/features/adminUsers/account/updateCurrentUser/abstractions/UpdateCurrentUserUseCase.js.map +1 -0
  216. package/features/adminUsers/account/updateCurrentUser/abstractions/index.d.ts +8 -0
  217. package/features/adminUsers/account/updateCurrentUser/abstractions/index.js +2 -0
  218. package/features/adminUsers/account/updateCurrentUser/feature.d.ts +3 -0
  219. package/features/adminUsers/account/updateCurrentUser/feature.js +19 -0
  220. package/features/adminUsers/account/updateCurrentUser/feature.js.map +1 -0
  221. package/features/adminUsers/account/updateCurrentUser/index.d.ts +1 -0
  222. package/features/adminUsers/account/updateCurrentUser/index.js +1 -0
  223. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.d.ts +6 -0
  224. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js +22 -0
  225. package/features/adminUsers/passwordPolicy/RulesPasswordPolicy.js.map +1 -0
  226. package/features/adminUsers/passwordPolicy/abstractions.d.ts +20 -0
  227. package/features/adminUsers/passwordPolicy/abstractions.js +5 -0
  228. package/features/adminUsers/passwordPolicy/abstractions.js.map +1 -0
  229. package/features/adminUsers/passwordPolicy/feature.d.ts +8 -0
  230. package/features/adminUsers/passwordPolicy/feature.js +18 -0
  231. package/features/adminUsers/passwordPolicy/feature.js.map +1 -0
  232. package/features/adminUsers/passwordPolicy/index.d.ts +3 -0
  233. package/features/adminUsers/passwordPolicy/index.js +3 -0
  234. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.d.ts +10 -0
  235. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js +11 -0
  236. package/features/adminUsers/passwordPolicy/readPasswordPolicyRules.js.map +1 -0
  237. package/features/adminUsers/permissions/abstractions.d.ts +17 -0
  238. package/features/adminUsers/permissions/abstractions.js +6 -0
  239. package/features/adminUsers/permissions/abstractions.js.map +1 -0
  240. package/features/adminUsers/permissions/feature.d.ts +14 -0
  241. package/features/adminUsers/permissions/feature.js +7 -0
  242. package/features/adminUsers/permissions/feature.js.map +1 -0
  243. package/features/adminUsers/permissionsSchema.d.ts +10 -0
  244. package/features/adminUsers/permissionsSchema.js +18 -0
  245. package/features/adminUsers/permissionsSchema.js.map +1 -0
  246. package/features/adminUsers/users/createUser/CreateUserGateway.d.ts +11 -0
  247. package/features/adminUsers/users/createUser/CreateUserGateway.js +49 -0
  248. package/features/adminUsers/users/createUser/CreateUserGateway.js.map +1 -0
  249. package/features/adminUsers/users/createUser/CreateUserUseCase.d.ts +10 -0
  250. package/features/adminUsers/users/createUser/CreateUserUseCase.js +18 -0
  251. package/features/adminUsers/users/createUser/CreateUserUseCase.js.map +1 -0
  252. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.d.ts +21 -0
  253. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js +5 -0
  254. package/features/adminUsers/users/createUser/abstractions/CreateUserGateway.js.map +1 -0
  255. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.d.ts +14 -0
  256. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js +5 -0
  257. package/features/adminUsers/users/createUser/abstractions/CreateUserUseCase.js.map +1 -0
  258. package/features/adminUsers/users/createUser/abstractions/index.d.ts +2 -0
  259. package/features/adminUsers/users/createUser/abstractions/index.js +2 -0
  260. package/features/adminUsers/users/createUser/feature.d.ts +3 -0
  261. package/features/adminUsers/users/createUser/feature.js +19 -0
  262. package/features/adminUsers/users/createUser/feature.js.map +1 -0
  263. package/features/adminUsers/users/createUser/index.d.ts +2 -0
  264. package/features/adminUsers/users/createUser/index.js +2 -0
  265. package/features/adminUsers/users/deleteUser/DeleteUserGateway.d.ts +11 -0
  266. package/features/adminUsers/users/deleteUser/DeleteUserGateway.js +40 -0
  267. package/features/adminUsers/users/deleteUser/DeleteUserGateway.js.map +1 -0
  268. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.d.ts +10 -0
  269. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js +18 -0
  270. package/features/adminUsers/users/deleteUser/DeleteUserUseCase.js.map +1 -0
  271. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.d.ts +11 -0
  272. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js +5 -0
  273. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserGateway.js.map +1 -0
  274. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.d.ts +11 -0
  275. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js +5 -0
  276. package/features/adminUsers/users/deleteUser/abstractions/DeleteUserUseCase.js.map +1 -0
  277. package/features/adminUsers/users/deleteUser/abstractions/index.d.ts +2 -0
  278. package/features/adminUsers/users/deleteUser/abstractions/index.js +2 -0
  279. package/features/adminUsers/users/deleteUser/feature.d.ts +3 -0
  280. package/features/adminUsers/users/deleteUser/feature.js +19 -0
  281. package/features/adminUsers/users/deleteUser/feature.js.map +1 -0
  282. package/features/adminUsers/users/deleteUser/index.d.ts +2 -0
  283. package/features/adminUsers/users/deleteUser/index.js +2 -0
  284. package/features/adminUsers/users/getUser/GetUserGateway.d.ts +11 -0
  285. package/features/adminUsers/users/getUser/GetUserGateway.js +57 -0
  286. package/features/adminUsers/users/getUser/GetUserGateway.js.map +1 -0
  287. package/features/adminUsers/users/getUser/GetUserUseCase.d.ts +10 -0
  288. package/features/adminUsers/users/getUser/GetUserUseCase.js +18 -0
  289. package/features/adminUsers/users/getUser/GetUserUseCase.js.map +1 -0
  290. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.d.ts +32 -0
  291. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js +5 -0
  292. package/features/adminUsers/users/getUser/abstractions/GetUserGateway.js.map +1 -0
  293. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.d.ts +14 -0
  294. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js +5 -0
  295. package/features/adminUsers/users/getUser/abstractions/GetUserUseCase.js.map +1 -0
  296. package/features/adminUsers/users/getUser/abstractions/index.d.ts +2 -0
  297. package/features/adminUsers/users/getUser/abstractions/index.js +2 -0
  298. package/features/adminUsers/users/getUser/feature.d.ts +3 -0
  299. package/features/adminUsers/users/getUser/feature.js +19 -0
  300. package/features/adminUsers/users/getUser/feature.js.map +1 -0
  301. package/features/adminUsers/users/getUser/index.d.ts +2 -0
  302. package/features/adminUsers/users/getUser/index.js +2 -0
  303. package/features/adminUsers/users/listUsers/ListUsersGateway.d.ts +11 -0
  304. package/features/adminUsers/users/listUsers/ListUsersGateway.js +39 -0
  305. package/features/adminUsers/users/listUsers/ListUsersGateway.js.map +1 -0
  306. package/features/adminUsers/users/listUsers/ListUsersUseCase.d.ts +10 -0
  307. package/features/adminUsers/users/listUsers/ListUsersUseCase.js +18 -0
  308. package/features/adminUsers/users/listUsers/ListUsersUseCase.js.map +1 -0
  309. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.d.ts +17 -0
  310. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js +5 -0
  311. package/features/adminUsers/users/listUsers/abstractions/ListUsersGateway.js.map +1 -0
  312. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.d.ts +10 -0
  313. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js +5 -0
  314. package/features/adminUsers/users/listUsers/abstractions/ListUsersUseCase.js.map +1 -0
  315. package/features/adminUsers/users/listUsers/abstractions/index.d.ts +2 -0
  316. package/features/adminUsers/users/listUsers/abstractions/index.js +2 -0
  317. package/features/adminUsers/users/listUsers/feature.d.ts +3 -0
  318. package/features/adminUsers/users/listUsers/feature.js +19 -0
  319. package/features/adminUsers/users/listUsers/feature.js.map +1 -0
  320. package/features/adminUsers/users/listUsers/index.d.ts +2 -0
  321. package/features/adminUsers/users/listUsers/index.js +2 -0
  322. package/features/adminUsers/users/updateUser/UpdateUserGateway.d.ts +11 -0
  323. package/features/adminUsers/users/updateUser/UpdateUserGateway.js +59 -0
  324. package/features/adminUsers/users/updateUser/UpdateUserGateway.js.map +1 -0
  325. package/features/adminUsers/users/updateUser/UpdateUserUseCase.d.ts +10 -0
  326. package/features/adminUsers/users/updateUser/UpdateUserUseCase.js +18 -0
  327. package/features/adminUsers/users/updateUser/UpdateUserUseCase.js.map +1 -0
  328. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.d.ts +33 -0
  329. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js +5 -0
  330. package/features/adminUsers/users/updateUser/abstractions/UpdateUserGateway.js.map +1 -0
  331. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.d.ts +15 -0
  332. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js +5 -0
  333. package/features/adminUsers/users/updateUser/abstractions/UpdateUserUseCase.js.map +1 -0
  334. package/features/adminUsers/users/updateUser/abstractions/index.d.ts +2 -0
  335. package/features/adminUsers/users/updateUser/abstractions/index.js +2 -0
  336. package/features/adminUsers/users/updateUser/feature.d.ts +3 -0
  337. package/features/adminUsers/users/updateUser/feature.js +19 -0
  338. package/features/adminUsers/users/updateUser/feature.js.map +1 -0
  339. package/features/adminUsers/users/updateUser/index.d.ts +2 -0
  340. package/features/adminUsers/users/updateUser/index.js +2 -0
  341. package/features/aiChats/AiChatSaveError.d.ts +6 -0
  342. package/features/aiChats/AiChatSaveError.js +8 -0
  343. package/features/aiChats/AiChatSaveError.js.map +1 -0
  344. package/features/aiChats/AiChatsGateway.d.ts +18 -0
  345. package/features/aiChats/AiChatsGateway.js +132 -0
  346. package/features/aiChats/AiChatsGateway.js.map +1 -0
  347. package/features/aiChats/AiChatsRepository.d.ts +36 -0
  348. package/features/aiChats/AiChatsRepository.js +110 -0
  349. package/features/aiChats/AiChatsRepository.js.map +1 -0
  350. package/features/aiChats/AiChatsRequestError.d.ts +9 -0
  351. package/features/aiChats/AiChatsRequestError.js +8 -0
  352. package/features/aiChats/AiChatsRequestError.js.map +1 -0
  353. package/features/aiChats/abstractions.d.ts +76 -0
  354. package/features/aiChats/abstractions.js +6 -0
  355. package/features/aiChats/abstractions.js.map +1 -0
  356. package/features/aiChats/feature.d.ts +3 -0
  357. package/features/aiChats/feature.js +19 -0
  358. package/features/aiChats/feature.js.map +1 -0
  359. package/features/aiChats/index.d.ts +9 -0
  360. package/features/aiChats/index.js +3 -0
  361. package/features/aiChats/messageOf.d.ts +2 -0
  362. package/features/aiChats/messageOf.js +7 -0
  363. package/features/aiChats/messageOf.js.map +1 -0
  364. package/features/aiSettings/abstractions.d.ts +16 -0
  365. package/features/aiSettings/abstractions.js +5 -0
  366. package/features/aiSettings/abstractions.js.map +1 -0
  367. package/features/aiSettings/index.d.ts +2 -0
  368. package/features/aiSettings/index.js +1 -0
  369. package/features/assumePermissions/ApiStreamClientDecorator.d.ts +16 -0
  370. package/features/assumePermissions/ApiStreamClientDecorator.js +29 -0
  371. package/features/assumePermissions/ApiStreamClientDecorator.js.map +1 -0
  372. package/features/assumePermissions/AssumePermissionsContext.d.ts +17 -0
  373. package/features/assumePermissions/AssumePermissionsContext.js +32 -0
  374. package/features/assumePermissions/AssumePermissionsContext.js.map +1 -0
  375. package/features/assumePermissions/AssumePermissionsUseCase.d.ts +33 -0
  376. package/features/assumePermissions/AssumePermissionsUseCase.js +48 -0
  377. package/features/assumePermissions/AssumePermissionsUseCase.js.map +1 -0
  378. package/features/assumePermissions/GraphQLClientDecorator.d.ts +16 -0
  379. package/features/assumePermissions/GraphQLClientDecorator.js +29 -0
  380. package/features/assumePermissions/GraphQLClientDecorator.js.map +1 -0
  381. package/features/assumePermissions/ListAssumableTargetsGateway.d.ts +13 -0
  382. package/features/assumePermissions/ListAssumableTargetsGateway.js +74 -0
  383. package/features/assumePermissions/ListAssumableTargetsGateway.js.map +1 -0
  384. package/features/assumePermissions/ListAssumableTargetsUseCase.d.ts +16 -0
  385. package/features/assumePermissions/ListAssumableTargetsUseCase.js +38 -0
  386. package/features/assumePermissions/ListAssumableTargetsUseCase.js.map +1 -0
  387. package/features/assumePermissions/LogInUseCaseDecorator.d.ts +33 -0
  388. package/features/assumePermissions/LogInUseCaseDecorator.js +36 -0
  389. package/features/assumePermissions/LogInUseCaseDecorator.js.map +1 -0
  390. package/features/assumePermissions/LogOutUseCaseDecorator.d.ts +16 -0
  391. package/features/assumePermissions/LogOutUseCaseDecorator.js +21 -0
  392. package/features/assumePermissions/LogOutUseCaseDecorator.js.map +1 -0
  393. package/features/assumePermissions/abstractions.d.ts +78 -0
  394. package/features/assumePermissions/abstractions.js +8 -0
  395. package/features/assumePermissions/abstractions.js.map +1 -0
  396. package/features/assumePermissions/assumePermissionsHeader.d.ts +3 -0
  397. package/features/assumePermissions/assumePermissionsHeader.js +7 -0
  398. package/features/assumePermissions/assumePermissionsHeader.js.map +1 -0
  399. package/features/assumePermissions/feature.d.ts +4 -0
  400. package/features/assumePermissions/feature.js +32 -0
  401. package/features/assumePermissions/feature.js.map +1 -0
  402. package/features/assumePermissions/index.d.ts +4 -0
  403. package/features/assumePermissions/index.js +2 -0
  404. package/features/banners/Banners.d.ts +15 -0
  405. package/features/banners/Banners.js +39 -0
  406. package/features/banners/Banners.js.map +1 -0
  407. package/features/banners/abstractions.d.ts +34 -0
  408. package/features/banners/abstractions.js +5 -0
  409. package/features/banners/abstractions.js.map +1 -0
  410. package/features/banners/feature.d.ts +3 -0
  411. package/features/banners/feature.js +17 -0
  412. package/features/banners/feature.js.map +1 -0
  413. package/features/banners/index.d.ts +2 -0
  414. package/features/banners/index.js +2 -0
  415. package/features/dateFormatter/DefaultDateFormatter.d.ts +8 -0
  416. package/features/dateFormatter/DefaultDateFormatter.js +25 -0
  417. package/features/dateFormatter/DefaultDateFormatter.js.map +1 -0
  418. package/features/dateFormatter/abstractions.d.ts +13 -0
  419. package/features/dateFormatter/abstractions.js +5 -0
  420. package/features/dateFormatter/abstractions.js.map +1 -0
  421. package/features/dateFormatter/feature.d.ts +3 -0
  422. package/features/dateFormatter/feature.js +17 -0
  423. package/features/dateFormatter/feature.js.map +1 -0
  424. package/features/dateFormatter/formatUtcOffset.d.ts +1 -0
  425. package/features/dateFormatter/formatUtcOffset.js +11 -0
  426. package/features/dateFormatter/formatUtcOffset.js.map +1 -0
  427. package/features/dateFormatter/index.d.ts +4 -0
  428. package/features/dateFormatter/index.js +4 -0
  429. package/features/dateFormatter/useDateFormatter.d.ts +5 -0
  430. package/features/dateFormatter/useDateFormatter.js +8 -0
  431. package/features/dateFormatter/useDateFormatter.js.map +1 -0
  432. package/features/debugger/DebugSessionsRepository.d.ts +35 -0
  433. package/features/debugger/DebugSessionsRepository.js +57 -0
  434. package/features/debugger/DebugSessionsRepository.js.map +1 -0
  435. package/features/debugger/GraphQLExtensionsDebugHandler.d.ts +17 -0
  436. package/features/debugger/GraphQLExtensionsDebugHandler.js +21 -0
  437. package/features/debugger/GraphQLExtensionsDebugHandler.js.map +1 -0
  438. package/features/debugger/GraphQLExtensionsDebugHandler.test.d.ts +1 -0
  439. package/features/debugger/GraphQLExtensionsDebugHandler.test.js +112 -0
  440. package/features/debugger/GraphQLExtensionsDebugHandler.test.js.map +1 -0
  441. package/features/debugger/abstractions.d.ts +50 -0
  442. package/features/debugger/abstractions.js +5 -0
  443. package/features/debugger/abstractions.js.map +1 -0
  444. package/features/debugger/constants.d.ts +1 -0
  445. package/features/debugger/constants.js +4 -0
  446. package/features/debugger/constants.js.map +1 -0
  447. package/features/debugger/feature.d.ts +3 -0
  448. package/features/debugger/feature.js +19 -0
  449. package/features/debugger/feature.js.map +1 -0
  450. package/features/debugger/index.d.ts +3 -0
  451. package/features/debugger/index.js +3 -0
  452. package/features/featureFlags/FeatureFlagsGateway.d.ts +10 -0
  453. package/features/featureFlags/FeatureFlagsGateway.js +40 -0
  454. package/features/featureFlags/FeatureFlagsGateway.js.map +1 -0
  455. package/features/featureFlags/FeatureFlagsService.d.ts +16 -0
  456. package/features/featureFlags/FeatureFlagsService.js +64 -0
  457. package/features/featureFlags/FeatureFlagsService.js.map +1 -0
  458. package/features/featureFlags/abstractions.d.ts +19 -0
  459. package/features/featureFlags/abstractions.js +6 -0
  460. package/features/featureFlags/abstractions.js.map +1 -0
  461. package/features/featureFlags/feature.d.ts +3 -0
  462. package/features/featureFlags/feature.js +19 -0
  463. package/features/featureFlags/feature.js.map +1 -0
  464. package/features/formModel/AccessControlRuleEvaluator.d.ts +12 -0
  465. package/features/formModel/AccessControlRuleEvaluator.js +30 -0
  466. package/features/formModel/AccessControlRuleEvaluator.js.map +1 -0
  467. package/features/formModel/AccessControlRuleEvaluator.test.d.ts +1 -0
  468. package/features/formModel/AccessControlRuleEvaluator.test.js +219 -0
  469. package/features/formModel/AccessControlRuleEvaluator.test.js.map +1 -0
  470. package/features/formModel/ConditionRuleEvaluator.js +34 -4
  471. package/features/formModel/ConditionRuleEvaluator.js.map +1 -1
  472. package/features/formModel/Field.d.ts +14 -1
  473. package/features/formModel/Field.js +49 -3
  474. package/features/formModel/Field.js.map +1 -1
  475. package/features/formModel/FieldBuilder.d.ts +3 -3
  476. package/features/formModel/FieldBuilder.js +3 -2
  477. package/features/formModel/FieldBuilder.js.map +1 -1
  478. package/features/formModel/FieldBuilder.test.js +162 -5
  479. package/features/formModel/FieldBuilder.test.js.map +1 -1
  480. package/features/formModel/FocusManager.js +10 -3
  481. package/features/formModel/FocusManager.js.map +1 -1
  482. package/features/formModel/FormErrors.d.ts +2 -2
  483. package/features/formModel/FormErrors.js +1 -1
  484. package/features/formModel/FormErrors.js.map +1 -1
  485. package/features/formModel/FormModel.d.ts +2 -0
  486. package/features/formModel/FormModel.js +32 -9
  487. package/features/formModel/FormModel.js.map +1 -1
  488. package/features/formModel/FormModel.test.js +883 -2
  489. package/features/formModel/FormModel.test.js.map +1 -1
  490. package/features/formModel/FormView.d.ts +8 -4
  491. package/features/formModel/ObjectField.d.ts +12 -1
  492. package/features/formModel/ObjectField.js +70 -20
  493. package/features/formModel/ObjectField.js.map +1 -1
  494. package/features/formModel/PresenterErrors.d.ts +2 -2
  495. package/features/formModel/Rules.test.js +224 -16
  496. package/features/formModel/Rules.test.js.map +1 -1
  497. package/features/formModel/abstractions.d.ts +56 -4
  498. package/features/formModel/abstractions.js +2 -1
  499. package/features/formModel/abstractions.js.map +1 -1
  500. package/features/formModel/createFieldRenderer.d.ts +42 -0
  501. package/features/formModel/createFieldRenderer.js +33 -10
  502. package/features/formModel/createFieldRenderer.js.map +1 -1
  503. package/features/formModel/demo/FormModelDemo.d.ts +2 -2
  504. package/features/formModel/feature.js +2 -0
  505. package/features/formModel/feature.js.map +1 -1
  506. package/features/formModel/fieldTypes/DateTimeFieldType.d.ts +67 -4
  507. package/features/formModel/fieldTypes/DateTimeFieldType.js +88 -22
  508. package/features/formModel/fieldTypes/DateTimeFieldType.js.map +1 -1
  509. package/features/formModel/fieldTypes/ObjectFieldType.d.ts +3 -1
  510. package/features/formModel/fieldTypes/ObjectFieldType.js +23 -1
  511. package/features/formModel/fieldTypes/ObjectFieldType.js.map +1 -1
  512. package/features/formModel/fieldTypes/dateLimits.d.ts +37 -0
  513. package/features/formModel/fieldTypes/dateLimits.js +64 -0
  514. package/features/formModel/fieldTypes/dateLimits.js.map +1 -0
  515. package/features/formModel/fieldTypes/dateLimits.test.d.ts +1 -0
  516. package/features/formModel/fieldTypes/dateLimits.test.js +60 -0
  517. package/features/formModel/fieldTypes/dateLimits.test.js.map +1 -0
  518. package/features/formModel/hasSubtreeFocusRequest.d.ts +12 -0
  519. package/features/formModel/hasSubtreeFocusRequest.js +15 -0
  520. package/features/formModel/hasSubtreeFocusRequest.js.map +1 -0
  521. package/features/formModel/index.d.ts +3 -2
  522. package/features/formModel/index.js +2 -1
  523. package/features/formModel/jsonSchema/JsonSchema.d.ts +18 -0
  524. package/features/formModel/jsonSchema/JsonSchema.js +0 -0
  525. package/features/formModel/jsonSchema/JsonSchemaFieldOptions.d.ts +4 -0
  526. package/features/formModel/jsonSchema/JsonSchemaFieldOptions.js +0 -0
  527. package/features/formModel/jsonSchema/JsonSchemaIssue.d.ts +4 -0
  528. package/features/formModel/jsonSchema/JsonSchemaIssue.js +0 -0
  529. package/features/formModel/jsonSchema/JsonSchemaValidationResult.d.ts +5 -0
  530. package/features/formModel/jsonSchema/JsonSchemaValidationResult.js +0 -0
  531. package/features/formModel/jsonSchema/JsonSchemaValidator.d.ts +4 -0
  532. package/features/formModel/jsonSchema/JsonSchemaValidator.js +0 -0
  533. package/features/formModel/jsonSchema/PlainObject.d.ts +1 -0
  534. package/features/formModel/jsonSchema/PlainObject.js +0 -0
  535. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.d.ts +5 -0
  536. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js +154 -0
  537. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.js.map +1 -0
  538. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.d.ts +1 -0
  539. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js +643 -0
  540. package/features/formModel/jsonSchema/buildFieldsFromJsonSchema.test.js.map +1 -0
  541. package/features/formModel/jsonSchema/createJsonSchemaValidator.d.ts +3 -0
  542. package/features/formModel/jsonSchema/createJsonSchemaValidator.js +40 -0
  543. package/features/formModel/jsonSchema/createJsonSchemaValidator.js.map +1 -0
  544. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.d.ts +1 -0
  545. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js +141 -0
  546. package/features/formModel/jsonSchema/createJsonSchemaValidator.test.js.map +1 -0
  547. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.d.ts +3 -0
  548. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js +52 -0
  549. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.js.map +1 -0
  550. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.d.ts +1 -0
  551. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js +250 -0
  552. package/features/formModel/jsonSchema/formDataToJsonSchemaValue.test.js.map +1 -0
  553. package/features/formModel/jsonSchema/getJsonSchemaKind.d.ts +3 -0
  554. package/features/formModel/jsonSchema/getJsonSchemaKind.js +31 -0
  555. package/features/formModel/jsonSchema/getJsonSchemaKind.js.map +1 -0
  556. package/features/formModel/jsonSchema/getJsonSchemaKind.test.d.ts +1 -0
  557. package/features/formModel/jsonSchema/getJsonSchemaKind.test.js +123 -0
  558. package/features/formModel/jsonSchema/getJsonSchemaKind.test.js.map +1 -0
  559. package/features/formModel/jsonSchema/isPlainObject.d.ts +2 -0
  560. package/features/formModel/jsonSchema/isPlainObject.js +4 -0
  561. package/features/formModel/jsonSchema/isPlainObject.js.map +1 -0
  562. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.d.ts +3 -0
  563. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js +30 -0
  564. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.js.map +1 -0
  565. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.d.ts +1 -0
  566. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js +207 -0
  567. package/features/formModel/jsonSchema/jsonSchemaValueToFormData.test.js.map +1 -0
  568. package/features/formModel/jsonSchema/normalizeJsonSchema.d.ts +2 -0
  569. package/features/formModel/jsonSchema/normalizeJsonSchema.js +10 -0
  570. package/features/formModel/jsonSchema/normalizeJsonSchema.js.map +1 -0
  571. package/features/formModel/renderers.d.ts +2 -0
  572. package/features/formModel/renderers.js +2 -0
  573. package/features/notifications/Notifications.d.ts +1 -0
  574. package/features/notifications/Notifications.js +3 -0
  575. package/features/notifications/Notifications.js.map +1 -1
  576. package/features/notifications/Notifications.test.d.ts +1 -0
  577. package/features/notifications/Notifications.test.js +106 -0
  578. package/features/notifications/Notifications.test.js.map +1 -0
  579. package/features/notifications/NotificationsRenderer.d.ts +3 -2
  580. package/features/notifications/NotificationsRenderer.js +23 -4
  581. package/features/notifications/NotificationsRenderer.js.map +1 -1
  582. package/features/notifications/NotificationsRenderer.test.d.ts +1 -0
  583. package/features/notifications/NotificationsRenderer.test.js +261 -0
  584. package/features/notifications/NotificationsRenderer.test.js.map +1 -0
  585. package/features/notifications/abstractions.d.ts +13 -2
  586. package/features/notifications/abstractions.js.map +1 -1
  587. package/features/security/AuthenticationContext/ApiStreamClientDecorator.d.ts +22 -0
  588. package/features/security/AuthenticationContext/ApiStreamClientDecorator.js +32 -0
  589. package/features/security/AuthenticationContext/ApiStreamClientDecorator.js.map +1 -0
  590. package/features/security/AuthenticationContext/feature.js +2 -0
  591. package/features/security/AuthenticationContext/feature.js.map +1 -1
  592. package/features/security/LogIn/LogInUseCase.d.ts +0 -1
  593. package/features/security/LogIn/LogInUseCase.js +2 -5
  594. package/features/security/LogIn/LogInUseCase.js.map +1 -1
  595. package/features/security/LogIn/hasAppPermissions.d.ts +2 -0
  596. package/features/security/LogIn/hasAppPermissions.js +8 -0
  597. package/features/security/LogIn/hasAppPermissions.js.map +1 -0
  598. package/features/slugify/DefaultSlugify.d.ts +8 -0
  599. package/features/slugify/DefaultSlugify.js +20 -0
  600. package/features/slugify/DefaultSlugify.js.map +1 -0
  601. package/features/slugify/abstractions.d.ts +12 -0
  602. package/features/slugify/abstractions.js +5 -0
  603. package/features/slugify/abstractions.js.map +1 -0
  604. package/features/slugify/feature.d.ts +1 -0
  605. package/features/slugify/feature.js +11 -0
  606. package/features/slugify/feature.js.map +1 -0
  607. package/features/slugify/index.d.ts +3 -0
  608. package/features/slugify/index.js +3 -0
  609. package/features/stringFormatter/DefaultStringFormatter.d.ts +17 -0
  610. package/features/stringFormatter/DefaultStringFormatter.js +19 -0
  611. package/features/stringFormatter/DefaultStringFormatter.js.map +1 -0
  612. package/features/stringFormatter/abstractions.d.ts +11 -0
  613. package/features/stringFormatter/abstractions.js +5 -0
  614. package/features/stringFormatter/abstractions.js.map +1 -0
  615. package/features/stringFormatter/feature.d.ts +3 -0
  616. package/features/stringFormatter/feature.js +19 -0
  617. package/features/stringFormatter/feature.js.map +1 -0
  618. package/features/stringFormatter/index.d.ts +4 -0
  619. package/features/stringFormatter/index.js +4 -0
  620. package/features/stringFormatter/useStringFormatter.d.ts +5 -0
  621. package/features/stringFormatter/useStringFormatter.js +8 -0
  622. package/features/stringFormatter/useStringFormatter.js.map +1 -0
  623. package/features/tenancy/ApiStreamClientDecorator.d.ts +16 -0
  624. package/features/tenancy/ApiStreamClientDecorator.js +30 -0
  625. package/features/tenancy/ApiStreamClientDecorator.js.map +1 -0
  626. package/features/tenancy/feature.js +2 -0
  627. package/features/tenancy/feature.js.map +1 -1
  628. package/features/wcp/ReactLicense.d.ts +11 -0
  629. package/features/wcp/ReactLicense.js +33 -0
  630. package/features/wcp/ReactLicense.js.map +1 -1
  631. package/features/wcp/WcpGateway.js +7 -0
  632. package/features/wcp/WcpGateway.js.map +1 -1
  633. package/hooks/index.d.ts +3 -0
  634. package/hooks/index.js +3 -0
  635. package/hooks/useDrawer.d.ts +9 -0
  636. package/hooks/useDrawer.js +19 -0
  637. package/hooks/useDrawer.js.map +1 -0
  638. package/hooks/useHotkeys.js +11 -7
  639. package/hooks/useHotkeys.js.map +1 -1
  640. package/hooks/useOpenDrawer.d.ts +7 -0
  641. package/hooks/useOpenDrawer.js +18 -0
  642. package/hooks/useOpenDrawer.js.map +1 -0
  643. package/hooks/useSnackbar.js.map +1 -1
  644. package/index.d.ts +43 -2
  645. package/index.js +43 -15
  646. package/modules/AccessManagementExtension.js +49 -23
  647. package/modules/AccessManagementExtension.js.map +1 -1
  648. package/modules/DebuggerExtension.d.ts +2 -0
  649. package/modules/DebuggerExtension.js +55 -0
  650. package/modules/DebuggerExtension.js.map +1 -0
  651. package/package.json +41 -38
  652. package/presentation/accessManagement/SecurityPermissions.js +3 -3
  653. package/presentation/accessManagement/SecurityPermissions.js.map +1 -1
  654. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.d.ts +3 -1
  655. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js +14 -18
  656. package/presentation/accessManagement/apiKeys/ApiKeysPresenter.js.map +1 -1
  657. package/presentation/accessManagement/apiKeys/components/ApiKeysView.d.ts +2 -2
  658. package/presentation/accessManagement/apiKeys/components/ApiKeysView.js +13 -7
  659. package/presentation/accessManagement/apiKeys/components/ApiKeysView.js.map +1 -1
  660. package/presentation/accessManagement/roles/RolesPresenter.d.ts +3 -1
  661. package/presentation/accessManagement/roles/RolesPresenter.js +12 -16
  662. package/presentation/accessManagement/roles/RolesPresenter.js.map +1 -1
  663. package/presentation/accessManagement/roles/components/RolesDataList.d.ts +10 -0
  664. package/presentation/accessManagement/roles/components/RolesDataList.js +146 -0
  665. package/presentation/accessManagement/roles/components/RolesDataList.js.map +1 -0
  666. package/presentation/accessManagement/roles/components/RolesForm.d.ts +13 -0
  667. package/presentation/accessManagement/roles/components/RolesForm.js +114 -0
  668. package/presentation/accessManagement/roles/components/RolesForm.js.map +1 -0
  669. package/presentation/accessManagement/roles/components/RolesView.d.ts +2 -2
  670. package/presentation/accessManagement/roles/components/RolesView.js +6 -212
  671. package/presentation/accessManagement/roles/components/RolesView.js.map +1 -1
  672. package/presentation/accessManagement/teams/TeamsPresenter.d.ts +3 -1
  673. package/presentation/accessManagement/teams/TeamsPresenter.js +12 -16
  674. package/presentation/accessManagement/teams/TeamsPresenter.js.map +1 -1
  675. package/presentation/accessManagement/teams/components/TeamsDataList.d.ts +10 -0
  676. package/presentation/accessManagement/teams/components/TeamsDataList.js +146 -0
  677. package/presentation/accessManagement/teams/components/TeamsDataList.js.map +1 -0
  678. package/presentation/accessManagement/teams/components/TeamsForm.d.ts +13 -0
  679. package/presentation/accessManagement/teams/components/TeamsForm.js +96 -0
  680. package/presentation/accessManagement/teams/components/TeamsForm.js.map +1 -0
  681. package/presentation/accessManagement/teams/components/TeamsView.d.ts +2 -2
  682. package/presentation/accessManagement/teams/components/TeamsView.js +6 -194
  683. package/presentation/accessManagement/teams/components/TeamsView.js.map +1 -1
  684. package/presentation/adminUsers/AdminUsers.d.ts +10 -0
  685. package/presentation/adminUsers/AdminUsers.js +77 -0
  686. package/presentation/adminUsers/AdminUsers.js.map +1 -0
  687. package/presentation/adminUsers/SecurityPermission.d.ts +2 -0
  688. package/presentation/adminUsers/SecurityPermission.js +15 -0
  689. package/presentation/adminUsers/SecurityPermission.js.map +1 -0
  690. package/presentation/adminUsers/UserItem.d.ts +10 -0
  691. package/presentation/adminUsers/UserItem.js +0 -0
  692. package/presentation/adminUsers/components/AvatarImage/AvatarImage.d.ts +3 -0
  693. package/presentation/adminUsers/components/AvatarImage/AvatarImage.js +31 -0
  694. package/presentation/adminUsers/components/AvatarImage/AvatarImage.js.map +1 -0
  695. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.d.ts +10 -0
  696. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js +53 -0
  697. package/presentation/adminUsers/components/AvatarImage/AvatarImagePreview.js.map +1 -0
  698. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.d.ts +7 -0
  699. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js +28 -0
  700. package/presentation/adminUsers/components/AvatarImage/AvatarImageTrigger.js.map +1 -0
  701. package/presentation/adminUsers/components/AvatarImage/index.d.ts +1 -0
  702. package/presentation/adminUsers/components/AvatarImage/index.js +1 -0
  703. package/presentation/adminUsers/routes.d.ts +10 -0
  704. package/presentation/adminUsers/routes.js +20 -0
  705. package/presentation/adminUsers/routes.js.map +1 -0
  706. package/presentation/adminUsers/userMenu/AccountDetails.d.ts +6 -0
  707. package/presentation/adminUsers/userMenu/AccountDetails.js +20 -0
  708. package/presentation/adminUsers/userMenu/AccountDetails.js.map +1 -0
  709. package/presentation/adminUsers/userMenu/useIsDefaultTenant.d.ts +1 -0
  710. package/presentation/adminUsers/userMenu/useIsDefaultTenant.js +9 -0
  711. package/presentation/adminUsers/userMenu/useIsDefaultTenant.js.map +1 -0
  712. package/presentation/adminUsers/views/Account/Account.d.ts +2 -0
  713. package/presentation/adminUsers/views/Account/Account.js +137 -0
  714. package/presentation/adminUsers/views/Account/Account.js.map +1 -0
  715. package/presentation/adminUsers/views/Account/index.d.ts +1 -0
  716. package/presentation/adminUsers/views/Account/index.js +1 -0
  717. package/presentation/adminUsers/views/Users/UsersDataList.d.ts +3 -0
  718. package/presentation/adminUsers/views/Users/UsersDataList.js +180 -0
  719. package/presentation/adminUsers/views/Users/UsersDataList.js.map +1 -0
  720. package/presentation/adminUsers/views/Users/UsersForm.d.ts +5 -0
  721. package/presentation/adminUsers/views/Users/UsersForm.js +175 -0
  722. package/presentation/adminUsers/views/Users/UsersForm.js.map +1 -0
  723. package/presentation/adminUsers/views/Users/UsersView.d.ts +2 -0
  724. package/presentation/adminUsers/views/Users/UsersView.js +15 -0
  725. package/presentation/adminUsers/views/Users/UsersView.js.map +1 -0
  726. package/presentation/adminUsers/views/Users/components/DeleteAction.d.ts +7 -0
  727. package/presentation/adminUsers/views/Users/components/DeleteAction.js +29 -0
  728. package/presentation/adminUsers/views/Users/components/DeleteAction.js.map +1 -0
  729. package/presentation/adminUsers/views/Users/hooks/useUserForm.d.ts +27 -0
  730. package/presentation/adminUsers/views/Users/hooks/useUserForm.js +101 -0
  731. package/presentation/adminUsers/views/Users/hooks/useUserForm.js.map +1 -0
  732. package/presentation/adminUsers/views/Users/search.js +21 -0
  733. package/presentation/adminUsers/views/Users/search.js.map +1 -0
  734. package/presentation/adminUsers/views/Users/search.svg +20 -0
  735. package/presentation/adminUsers/views/utils.d.ts +3 -0
  736. package/presentation/adminUsers/views/utils.js +12 -0
  737. package/presentation/adminUsers/views/utils.js.map +1 -0
  738. package/presentation/aiChats/AiChatsPanelPresenter.d.ts +28 -0
  739. package/presentation/aiChats/AiChatsPanelPresenter.js +132 -0
  740. package/presentation/aiChats/AiChatsPanelPresenter.js.map +1 -0
  741. package/presentation/aiChats/abstractions.d.ts +69 -0
  742. package/presentation/aiChats/abstractions.js +5 -0
  743. package/presentation/aiChats/abstractions.js.map +1 -0
  744. package/presentation/aiChats/feature.d.ts +3 -0
  745. package/presentation/aiChats/feature.js +17 -0
  746. package/presentation/aiChats/feature.js.map +1 -0
  747. package/presentation/aiChats/index.d.ts +2 -0
  748. package/presentation/aiChats/index.js +2 -0
  749. package/presentation/assumePermissions/AssumePermissionsPresenter.d.ts +36 -0
  750. package/presentation/assumePermissions/AssumePermissionsPresenter.js +153 -0
  751. package/presentation/assumePermissions/AssumePermissionsPresenter.js.map +1 -0
  752. package/presentation/assumePermissions/abstractions.d.ts +30 -0
  753. package/presentation/assumePermissions/abstractions.js +5 -0
  754. package/presentation/assumePermissions/abstractions.js.map +1 -0
  755. package/presentation/assumePermissions/components/AssumePermissionsButton.d.ts +14 -0
  756. package/presentation/assumePermissions/components/AssumePermissionsButton.js +42 -0
  757. package/presentation/assumePermissions/components/AssumePermissionsButton.js.map +1 -0
  758. package/presentation/assumePermissions/components/AssumedPermissionsBanner.d.ts +11 -0
  759. package/presentation/assumePermissions/components/AssumedPermissionsBanner.js +25 -0
  760. package/presentation/assumePermissions/components/AssumedPermissionsBanner.js.map +1 -0
  761. package/presentation/assumePermissions/components/AssumedPermissionsSelector.d.ts +2 -0
  762. package/presentation/assumePermissions/components/AssumedPermissionsSelector.js +68 -0
  763. package/presentation/assumePermissions/components/AssumedPermissionsSelector.js.map +1 -0
  764. package/presentation/assumePermissions/feature.d.ts +3 -0
  765. package/presentation/assumePermissions/feature.js +17 -0
  766. package/presentation/assumePermissions/feature.js.map +1 -0
  767. package/presentation/assumePermissions/index.d.ts +4 -0
  768. package/presentation/assumePermissions/index.js +4 -0
  769. package/presentation/banners/BannersPresenter.d.ts +14 -0
  770. package/presentation/banners/BannersPresenter.js +60 -0
  771. package/presentation/banners/BannersPresenter.js.map +1 -0
  772. package/presentation/banners/abstractions.d.ts +24 -0
  773. package/presentation/banners/abstractions.js +5 -0
  774. package/presentation/banners/abstractions.js.map +1 -0
  775. package/presentation/banners/components/Banner.d.ts +10 -0
  776. package/presentation/banners/components/Banner.js +32 -0
  777. package/presentation/banners/components/Banner.js.map +1 -0
  778. package/presentation/banners/components/BannerBar.d.ts +11 -0
  779. package/presentation/banners/components/BannerBar.js +51 -0
  780. package/presentation/banners/components/BannerBar.js.map +1 -0
  781. package/presentation/banners/feature.d.ts +3 -0
  782. package/presentation/banners/feature.js +17 -0
  783. package/presentation/banners/feature.js.map +1 -0
  784. package/presentation/banners/index.d.ts +6 -0
  785. package/presentation/banners/index.js +4 -0
  786. package/presentation/banners/useBanner.d.ts +10 -0
  787. package/presentation/banners/useBanner.js +15 -0
  788. package/presentation/banners/useBanner.js.map +1 -0
  789. package/presentation/commandPalette/CommandPalettePresenter.d.ts +21 -0
  790. package/presentation/commandPalette/CommandPalettePresenter.js +93 -0
  791. package/presentation/commandPalette/CommandPalettePresenter.js.map +1 -0
  792. package/presentation/commandPalette/abstractions.d.ts +81 -0
  793. package/presentation/commandPalette/abstractions.js +7 -0
  794. package/presentation/commandPalette/abstractions.js.map +1 -0
  795. package/presentation/commandPalette/commands/AiChatsCommand.d.ts +24 -0
  796. package/presentation/commandPalette/commands/AiChatsCommand.js +41 -0
  797. package/presentation/commandPalette/commands/AiChatsCommand.js.map +1 -0
  798. package/presentation/commandPalette/commands/AskAiCommand.d.ts +26 -0
  799. package/presentation/commandPalette/commands/AskAiCommand.js +34 -0
  800. package/presentation/commandPalette/commands/AskAiCommand.js.map +1 -0
  801. package/presentation/commandPalette/commands/CopyCurrentUrlCommand.d.ts +15 -0
  802. package/presentation/commandPalette/commands/CopyCurrentUrlCommand.js +33 -0
  803. package/presentation/commandPalette/commands/CopyCurrentUrlCommand.js.map +1 -0
  804. package/presentation/commandPalette/commands/SendMessageCommand.d.ts +23 -0
  805. package/presentation/commandPalette/commands/SendMessageCommand.js +66 -0
  806. package/presentation/commandPalette/commands/SendMessageCommand.js.map +1 -0
  807. package/presentation/commandPalette/commands/SignOutCommand.d.ts +18 -0
  808. package/presentation/commandPalette/commands/SignOutCommand.js +37 -0
  809. package/presentation/commandPalette/commands/SignOutCommand.js.map +1 -0
  810. package/presentation/commandPalette/commands/feature.d.ts +5 -0
  811. package/presentation/commandPalette/commands/feature.js +19 -0
  812. package/presentation/commandPalette/commands/feature.js.map +1 -0
  813. package/presentation/commandPalette/feature.d.ts +3 -0
  814. package/presentation/commandPalette/feature.js +17 -0
  815. package/presentation/commandPalette/feature.js.map +1 -0
  816. package/presentation/commandPalette/index.d.ts +3 -0
  817. package/presentation/commandPalette/index.js +2 -0
  818. package/presentation/createReactiveComponent.d.ts +1 -0
  819. package/presentation/createReactiveComponent.js +1 -0
  820. package/presentation/debugger/DebuggerPresenter.d.ts +14 -0
  821. package/presentation/debugger/DebuggerPresenter.js +45 -0
  822. package/presentation/debugger/DebuggerPresenter.js.map +1 -0
  823. package/presentation/debugger/abstractions.d.ts +17 -0
  824. package/presentation/debugger/abstractions.js +5 -0
  825. package/presentation/debugger/abstractions.js.map +1 -0
  826. package/presentation/debugger/components/DebuggerIndicator.d.ts +2 -0
  827. package/presentation/debugger/components/DebuggerIndicator.js +45 -0
  828. package/presentation/debugger/components/DebuggerIndicator.js.map +1 -0
  829. package/presentation/debugger/components/DebuggerView.d.ts +4 -0
  830. package/presentation/debugger/components/DebuggerView.js +44 -0
  831. package/presentation/debugger/components/DebuggerView.js.map +1 -0
  832. package/presentation/debugger/downloadJson.d.ts +7 -0
  833. package/presentation/debugger/downloadJson.js +17 -0
  834. package/presentation/debugger/downloadJson.js.map +1 -0
  835. package/presentation/debugger/feature.d.ts +3 -0
  836. package/presentation/debugger/feature.js +17 -0
  837. package/presentation/debugger/feature.js.map +1 -0
  838. package/presentation/debugger/routes.d.ts +4 -0
  839. package/presentation/debugger/routes.js +10 -0
  840. package/presentation/debugger/routes.js.map +1 -0
  841. package/presentation/featureFlags/FeatureFlagsProvider.d.ts +7 -0
  842. package/presentation/featureFlags/FeatureFlagsProvider.js +22 -0
  843. package/presentation/featureFlags/FeatureFlagsProvider.js.map +1 -0
  844. package/presentation/featureFlags/useFeatureFlags.d.ts +2 -0
  845. package/presentation/featureFlags/useFeatureFlags.js +17 -0
  846. package/presentation/featureFlags/useFeatureFlags.js.map +1 -0
  847. package/presentation/installation/components/SystemInstaller/SystemInstaller.d.ts +2 -2
  848. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js +4 -3
  849. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep.js.map +1 -1
  850. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js +0 -3
  851. package/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js.map +1 -1
  852. package/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js.map +1 -1
  853. package/presentation/listPresenter/FolderAwareDataSource.d.ts +5 -0
  854. package/presentation/listPresenter/FolderAwareDataSource.js +8 -4
  855. package/presentation/listPresenter/FolderAwareDataSource.js.map +1 -1
  856. package/presentation/listPresenter/QueryMatcher.d.ts +28 -5
  857. package/presentation/listPresenter/QueryMatcher.js +74 -4
  858. package/presentation/listPresenter/QueryMatcher.js.map +1 -1
  859. package/presentation/listPresenter/QueryMatcher.test.d.ts +1 -0
  860. package/presentation/listPresenter/QueryMatcher.test.js +345 -0
  861. package/presentation/listPresenter/QueryMatcher.test.js.map +1 -0
  862. package/presentation/sortable/SortablePresenter.d.ts +23 -0
  863. package/presentation/sortable/SortablePresenter.js +175 -0
  864. package/presentation/sortable/SortablePresenter.js.map +1 -0
  865. package/presentation/sortable/abstractions.d.ts +24 -0
  866. package/presentation/sortable/abstractions.js +5 -0
  867. package/presentation/sortable/abstractions.js.map +1 -0
  868. package/presentation/sortable/feature.d.ts +1 -0
  869. package/presentation/sortable/feature.js +11 -0
  870. package/presentation/sortable/feature.js.map +1 -0
  871. package/presentation/sortable/index.d.ts +2 -0
  872. package/presentation/sortable/index.js +2 -0
  873. package/presentation/trashBin/TrashBinPresenter.js +3 -1
  874. package/presentation/trashBin/TrashBinPresenter.js.map +1 -1
  875. package/presentation/trashBin/TrashBinPresenter.test.d.ts +1 -0
  876. package/presentation/trashBin/TrashBinPresenter.test.js +91 -0
  877. package/presentation/trashBin/TrashBinPresenter.test.js.map +1 -0
  878. package/presentation/trashBin/abstractions.d.ts +1 -1
  879. package/presentation/trashBin/abstractions.js.map +1 -1
  880. package/presentation/trashBin/components/BulkActions/DeleteItems.d.ts +2 -2
  881. package/presentation/trashBin/components/BulkActions/DeleteItems.js +5 -1
  882. package/presentation/trashBin/components/BulkActions/DeleteItems.js.map +1 -1
  883. package/presentation/trashBin/components/BulkActions/DeleteItems.test.d.ts +1 -0
  884. package/presentation/trashBin/components/BulkActions/DeleteItems.test.js +100 -0
  885. package/presentation/trashBin/components/BulkActions/DeleteItems.test.js.map +1 -0
  886. package/presentation/trashBin/components/BulkActions/RestoreItems.d.ts +2 -2
  887. package/presentation/trashBin/components/TrashBinOverlay.d.ts +2 -2
  888. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js +2 -1
  889. package/presentation/trashBin/hooks/useDeleteTrashBinItem.js.map +1 -1
  890. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.d.ts +1 -0
  891. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js +67 -0
  892. package/presentation/trashBin/hooks/useDeleteTrashBinItem.test.js.map +1 -0
  893. package/static/svg/search.43fa797c.svg +20 -0
  894. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.d.ts +0 -10
  895. package/base/Base/FieldRenderers/ObjectRenderer/MultiValueDynamicZone.js.map +0 -1
  896. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js +0 -68
  897. package/base/Base/FieldRenderers/ObjectRenderer/TemplatePicker.js.map +0 -1
  898. package/base/Base/Menus/WebinyVersion.d.ts +0 -2
  899. package/base/Base/Menus/WebinyVersion.js +0 -23
  900. package/base/Base/Menus/WebinyVersion.js.map +0 -1
  901. package/base/WebinyVersion.d.ts +0 -2
  902. package/base/WebinyVersion.js +0 -23
  903. package/base/WebinyVersion.js.map +0 -1
  904. package/components/Wcp.d.ts +0 -19
  905. package/components/Wcp.js +0 -37
  906. package/components/Wcp.js.map +0 -1
  907. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.d.ts +0 -8
  908. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js +0 -17
  909. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/createPasswordValidator.js.map +0 -1
  910. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.d.ts +0 -1
  911. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js +0 -16
  912. package/presentation/installation/components/SystemInstaller/steps/AdminUserStep/usePasswordValidator.js.map +0 -1
@@ -2,7 +2,7 @@ import React from "react";
2
2
  interface SystemInstallerProps {
3
3
  children: React.ReactNode;
4
4
  }
5
- export declare const SystemInstaller: (({ children }: SystemInstallerProps) => React.JSX.Element) & {
6
- displayName: string;
5
+ export declare const SystemInstaller: (({ children }: SystemInstallerProps) => React.JSX.Element) & React.NamedExoticComponent<SystemInstallerProps> & {
6
+ readonly type: ({ children }: SystemInstallerProps) => React.JSX.Element;
7
7
  };
8
8
  export {};
@@ -4,7 +4,8 @@ import { Bind, Form, useForm } from "@webiny/form";
4
4
  import { validation } from "@webiny/validation";
5
5
  import { Center } from "./Center.js";
6
6
  import { Container } from "./Container.js";
7
- import { usePasswordValidator } from "./AdminUserStep/usePasswordValidator.js";
7
+ import { useFeature } from "@webiny/app";
8
+ import { PasswordPolicyFeature } from "../../../../../features/adminUsers/passwordPolicy/index.js";
8
9
  const AdminUserStep = ({ nextStep })=>/*#__PURE__*/ react.createElement(Container, {
9
10
  title: "Admin account",
10
11
  message: "This is the account you’ll use to access and manage your Webiny instance."
@@ -17,7 +18,7 @@ const AdminUserStep = ({ nextStep })=>/*#__PURE__*/ react.createElement(Containe
17
18
  }, ()=>/*#__PURE__*/ react.createElement(AdminUserInputs, null)))));
18
19
  const AdminUserInputs = ()=>{
19
20
  const form = useForm();
20
- const passwordValidator = usePasswordValidator();
21
+ const { passwordPolicy } = useFeature(PasswordPolicyFeature);
21
22
  const appName = process.env.REACT_APP_AUTH_INSTALLER_APP_NAME || "Cognito";
22
23
  return /*#__PURE__*/ react.createElement(Grid, null, /*#__PURE__*/ react.createElement(Grid.Column, {
23
24
  span: 6
@@ -47,7 +48,7 @@ const AdminUserInputs = ()=>{
47
48
  }, /*#__PURE__*/ react.createElement(Bind, {
48
49
  name: `${appName}.password`,
49
50
  validators: [
50
- passwordValidator,
51
+ (value)=>passwordPolicy.validate(value),
51
52
  validation.create("required")
52
53
  ]
53
54
  }, /*#__PURE__*/ react.createElement(Input, {
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/AdminUserStep.js","sources":["../../../../../../src/presentation/installation/components/SystemInstaller/steps/AdminUserStep.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button, Grid, Input } from \"@webiny/admin-ui\";\nimport { Bind, Form, useForm } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { Center } from \"./Center.js\";\nimport { Container } from \"./Container.js\";\nimport type { ISystemInstallerPresenter } from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\nimport { usePasswordValidator } from \"./AdminUserStep/usePasswordValidator.js\";\n\ninterface StepProps {\n nextStep: ISystemInstallerPresenter[\"nextStep\"];\n}\n\nexport const AdminUserStep = ({ nextStep }: StepProps) => {\n return (\n <Container\n title={\"Admin account\"}\n message={\"This is the account you’ll use to access and manage your Webiny instance.\"}\n >\n <Center>\n <div style={{ width: 400 }}>\n <Form onSubmit={data => nextStep(data)}>{() => <AdminUserInputs />}</Form>\n </div>\n </Center>\n </Container>\n );\n};\n\nconst AdminUserInputs = () => {\n const form = useForm();\n const passwordValidator = usePasswordValidator();\n\n // The install wizard renders BEFORE any auth-provider extension is mounted (it replaces the app\n // tree), so the installer's app name can't come from DI here — it must be a build-time value.\n // The submitted data is keyed under this name, becoming `installationInput: [{ app, data }]`, so\n // it has to match the API-side AppInstaller's `appName`. Defaults to \"Cognito\" (AWS hosting type);\n // the self-hosted hosting type sets REACT_APP_AUTH_INSTALLER_APP_NAME=\"SelfHostedAuth\".\n const appName = process.env.REACT_APP_AUTH_INSTALLER_APP_NAME || \"Cognito\";\n\n return (\n <Grid>\n <Grid.Column span={6}>\n <Bind name={`${appName}.firstName`} validators={validation.create(\"required\")}>\n <Input label={\"First name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name={`${appName}.lastName`} validators={validation.create(\"required\")}>\n <Input label={\"Last name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={`${appName}.email`}\n beforeChange={(value: string, cb) => cb(value.toLowerCase())}\n validators={validation.create(\"required,email\")}\n >\n <Input label={\"Your email\"} autoComplete={\"new-password\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={`${appName}.password`}\n validators={[passwordValidator, validation.create(\"required\")]}\n >\n <Input\n label={\"Choose password\"}\n type={\"password\"}\n autoComplete={\"new-password\"}\n />\n </Bind>\n </Grid.Column>\n\n <Grid.Column span={12}>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"primary\"}\n size={\"lg\"}\n text={\"Next step\"}\n onClick={form.submit}\n />\n </Grid.Column>\n </Grid>\n );\n};\n"],"names":["AdminUserStep","nextStep","Container","Center","Form","data","AdminUserInputs","form","useForm","passwordValidator","usePasswordValidator","appName","process","Grid","Bind","validation","Input","value","cb","Button"],"mappings":";;;;;;;AAaO,MAAMA,gBAAgB,CAAC,EAAEC,QAAQ,EAAa,GAC1C,WAAP,GACI,oBAACC,WAASA;QACN,OAAO;QACP,SAAS;qBAET,oBAACC,QAAMA,MAAAA,WAAAA,GACH,oBAAC;QAAI,OAAO;YAAE,OAAO;QAAI;qBACrB,oBAACC,MAAIA;QAAC,UAAUC,CAAAA,OAAQJ,SAASI;OAAQ,kBAAM,oBAACC,iBAAeA;AAOnF,MAAMA,kBAAkB;IACpB,MAAMC,OAAOC;IACb,MAAMC,oBAAoBC;IAO1B,MAAMC,UAAUC,QAAQ,GAAG,CAAC,iCAAiC,IAAI;IAEjE,OAAO,WAAP,GACI,oBAACC,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,MAAM,GAAGH,QAAQ,UAAU,CAAC;QAAE,YAAYI,WAAW,MAAM,CAAC;qBAC9D,oBAACC,OAAKA;QAAC,OAAO;wBAGtB,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,MAAM,GAAGH,QAAQ,SAAS,CAAC;QAAE,YAAYI,WAAW,MAAM,CAAC;qBAC7D,oBAACC,OAAKA;QAAC,OAAO;wBAGtB,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QACD,MAAM,GAAGH,QAAQ,MAAM,CAAC;QACxB,cAAc,CAACM,OAAeC,KAAOA,GAAGD,MAAM,WAAW;QACzD,YAAYF,WAAW,MAAM,CAAC;qBAE9B,oBAACC,OAAKA;QAAC,OAAO;QAAc,cAAc;wBAGlD,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QACD,MAAM,GAAGH,QAAQ,SAAS,CAAC;QAC3B,YAAY;YAACF;YAAmBM,WAAW,MAAM,CAAC;SAAY;qBAE9D,oBAACC,OAAKA;QACF,OAAO;QACP,MAAM;QACN,cAAc;wBAK1B,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACM,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAASZ,KAAK,MAAM;;AAKxC"}
1
+ {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/AdminUserStep.js","sources":["../../../../../../src/presentation/installation/components/SystemInstaller/steps/AdminUserStep.tsx"],"sourcesContent":["import React from \"react\";\nimport { Button, Grid, Input } from \"@webiny/admin-ui\";\nimport { Bind, Form, useForm } from \"@webiny/form\";\nimport { validation } from \"@webiny/validation\";\nimport { Center } from \"./Center.js\";\nimport { Container } from \"./Container.js\";\nimport type { ISystemInstallerPresenter } from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\nimport { useFeature } from \"@webiny/app\";\nimport { PasswordPolicyFeature } from \"~/features/adminUsers/passwordPolicy/index.js\";\n\ninterface StepProps {\n nextStep: ISystemInstallerPresenter[\"nextStep\"];\n}\n\nexport const AdminUserStep = ({ nextStep }: StepProps) => {\n return (\n <Container\n title={\"Admin account\"}\n message={\"This is the account you’ll use to access and manage your Webiny instance.\"}\n >\n <Center>\n <div style={{ width: 400 }}>\n <Form onSubmit={data => nextStep(data)}>{() => <AdminUserInputs />}</Form>\n </div>\n </Center>\n </Container>\n );\n};\n\nconst AdminUserInputs = () => {\n const form = useForm();\n const { passwordPolicy } = useFeature(PasswordPolicyFeature);\n\n // The install wizard renders BEFORE any auth-provider extension is mounted (it replaces the app\n // tree), so the installer's app name can't come from DI here — it must be a build-time value.\n // The submitted data is keyed under this name, becoming `installationInput: [{ app, data }]`, so\n // it has to match the API-side AppInstaller's `appName`. Defaults to \"Cognito\" (AWS hosting type);\n // the self-hosted hosting type sets REACT_APP_AUTH_INSTALLER_APP_NAME=\"SelfHostedAuth\".\n const appName = process.env.REACT_APP_AUTH_INSTALLER_APP_NAME || \"Cognito\";\n\n return (\n <Grid>\n <Grid.Column span={6}>\n <Bind name={`${appName}.firstName`} validators={validation.create(\"required\")}>\n <Input label={\"First name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={6}>\n <Bind name={`${appName}.lastName`} validators={validation.create(\"required\")}>\n <Input label={\"Last name\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={`${appName}.email`}\n beforeChange={(value: string, cb) => cb(value.toLowerCase())}\n validators={validation.create(\"required,email\")}\n >\n <Input label={\"Your email\"} autoComplete={\"new-password\"} />\n </Bind>\n </Grid.Column>\n <Grid.Column span={12}>\n <Bind\n name={`${appName}.password`}\n validators={[\n (value: string) => passwordPolicy.validate(value),\n validation.create(\"required\")\n ]}\n >\n <Input\n label={\"Choose password\"}\n type={\"password\"}\n autoComplete={\"new-password\"}\n />\n </Bind>\n </Grid.Column>\n\n <Grid.Column span={12}>\n <Button\n containerClassName={\"w-full\"}\n className={\"w-full\"}\n variant={\"primary\"}\n size={\"lg\"}\n text={\"Next step\"}\n onClick={form.submit}\n />\n </Grid.Column>\n </Grid>\n );\n};\n"],"names":["AdminUserStep","nextStep","Container","Center","Form","data","AdminUserInputs","form","useForm","passwordPolicy","useFeature","PasswordPolicyFeature","appName","process","Grid","Bind","validation","Input","value","cb","Button"],"mappings":";;;;;;;;AAcO,MAAMA,gBAAgB,CAAC,EAAEC,QAAQ,EAAa,GAC1C,WAAP,GACI,oBAACC,WAASA;QACN,OAAO;QACP,SAAS;qBAET,oBAACC,QAAMA,MAAAA,WAAAA,GACH,oBAAC;QAAI,OAAO;YAAE,OAAO;QAAI;qBACrB,oBAACC,MAAIA;QAAC,UAAUC,CAAAA,OAAQJ,SAASI;OAAQ,kBAAM,oBAACC,iBAAeA;AAOnF,MAAMA,kBAAkB;IACpB,MAAMC,OAAOC;IACb,MAAM,EAAEC,cAAc,EAAE,GAAGC,WAAWC;IAOtC,MAAMC,UAAUC,QAAQ,GAAG,CAAC,iCAAiC,IAAI;IAEjE,OAAO,WAAP,GACI,oBAACC,MAAIA,MAAAA,WAAAA,GACD,oBAACA,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,MAAM,GAAGH,QAAQ,UAAU,CAAC;QAAE,YAAYI,WAAW,MAAM,CAAC;qBAC9D,oBAACC,OAAKA;QAAC,OAAO;wBAGtB,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QAAC,MAAM,GAAGH,QAAQ,SAAS,CAAC;QAAE,YAAYI,WAAW,MAAM,CAAC;qBAC7D,oBAACC,OAAKA;QAAC,OAAO;wBAGtB,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QACD,MAAM,GAAGH,QAAQ,MAAM,CAAC;QACxB,cAAc,CAACM,OAAeC,KAAOA,GAAGD,MAAM,WAAW;QACzD,YAAYF,WAAW,MAAM,CAAC;qBAE9B,oBAACC,OAAKA;QAAC,OAAO;QAAc,cAAc;wBAGlD,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACC,MAAIA;QACD,MAAM,GAAGH,QAAQ,SAAS,CAAC;QAC3B,YAAY;YACR,CAACM,QAAkBT,eAAe,QAAQ,CAACS;YAC3CF,WAAW,MAAM,CAAC;SACrB;qBAED,oBAACC,OAAKA;QACF,OAAO;QACP,MAAM;QACN,cAAc;wBAK1B,oBAACH,KAAK,MAAM;QAAC,MAAM;qBACf,oBAACM,QAAMA;QACH,oBAAoB;QACpB,WAAW;QACX,SAAS;QACT,MAAM;QACN,MAAM;QACN,SAASb,KAAK,MAAM;;AAKxC"}
@@ -3,9 +3,6 @@ const INSTALL_FINISH_URL = process.env.REACT_APP_WEBINY_INSTALL_FINISH_URL || "h
3
3
  const buildInstallFinishHref = ()=>{
4
4
  if ("false" === process.env.REACT_APP_WEBINY_TELEMETRY) return null;
5
5
  if ("u" < typeof window) return null;
6
- const isCloudFrontHost = window.location.hostname.endsWith(".cloudfront.net");
7
- const allowAlternate = Boolean(process.env.REACT_APP_WEBINY_INSTALL_FINISH_URL);
8
- if (!isCloudFrontHost && !allowAlternate) return null;
9
6
  const machineId = getMachineId();
10
7
  if (!machineId) return null;
11
8
  const currentUrl = window.location.origin + window.location.pathname;
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js","sources":["../../../../../../../src/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.ts"],"sourcesContent":["import { getMachineId } from \"@webiny/telemetry/react.js\";\nimport type { ISystemInstallerPresenter } from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\n\nconst INSTALL_FINISH_URL =\n process.env.REACT_APP_WEBINY_INSTALL_FINISH_URL || \"https://www.webiny.com/install/finish\";\n\n/**\n * If telemetry is enabled AND the admin is hosted on CloudFront (production\n * deployment), route the \"Start using Webiny\" CTA through the marketing\n * site's /install/finish page so the website's anonymous wts_did cookie can\n * be aliased to the deployer's machine_id. Falls through to the local\n * `finishInstallation` flow otherwise.\n */\nconst buildInstallFinishHref = (): string | null => {\n if (process.env.REACT_APP_WEBINY_TELEMETRY === \"false\") {\n return null;\n }\n\n if (typeof window === \"undefined\") {\n return null;\n }\n const isCloudFrontHost = window.location.hostname.endsWith(\".cloudfront.net\");\n const allowAlternate = Boolean(process.env.REACT_APP_WEBINY_INSTALL_FINISH_URL);\n if (!isCloudFrontHost && !allowAlternate) {\n return null;\n }\n\n const machineId = getMachineId();\n if (!machineId) {\n return null;\n }\n\n const currentUrl = window.location.origin + window.location.pathname;\n const params = new URLSearchParams({\n machine_id: machineId,\n return_to: currentUrl\n });\n return `${INSTALL_FINISH_URL}?${params.toString()}`;\n};\n\nexport const handleStartUsing = (\n finishInstallation: ISystemInstallerPresenter[\"finishInstallation\"]\n) => {\n if (typeof window !== \"undefined\") {\n const handoff = buildInstallFinishHref();\n if (handoff) {\n window.location.assign(handoff);\n return;\n }\n }\n finishInstallation();\n};\n"],"names":["INSTALL_FINISH_URL","process","buildInstallFinishHref","window","isCloudFrontHost","allowAlternate","Boolean","machineId","getMachineId","currentUrl","params","URLSearchParams","handleStartUsing","finishInstallation","handoff"],"mappings":";AAGA,MAAMA,qBACFC,QAAQ,GAAG,CAAC,mCAAmC,IAAI;AASvD,MAAMC,yBAAyB;IAC3B,IAAID,AAA2C,YAA3CA,QAAQ,GAAG,CAAC,0BAA0B,EACtC,OAAO;IAGX,IAAI,AAAkB,MAAlB,OAAOE,QACP,OAAO;IAEX,MAAMC,mBAAmBD,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC3D,MAAME,iBAAiBC,QAAQL,QAAQ,GAAG,CAAC,mCAAmC;IAC9E,IAAI,CAACG,oBAAoB,CAACC,gBACtB,OAAO;IAGX,MAAME,YAAYC;IAClB,IAAI,CAACD,WACD,OAAO;IAGX,MAAME,aAAaN,OAAO,QAAQ,CAAC,MAAM,GAAGA,OAAO,QAAQ,CAAC,QAAQ;IACpE,MAAMO,SAAS,IAAIC,gBAAgB;QAC/B,YAAYJ;QACZ,WAAWE;IACf;IACA,OAAO,GAAGT,mBAAmB,CAAC,EAAEU,OAAO,QAAQ,IAAI;AACvD;AAEO,MAAME,mBAAmB,CAC5BC;IAEA,IAAI,AAAkB,MAAlB,OAAOV,QAAwB;QAC/B,MAAMW,UAAUZ;QAChB,IAAIY,SAAS,YACTX,OAAO,QAAQ,CAAC,MAAM,CAACW;IAG/B;IACAD;AACJ"}
1
+ {"version":3,"file":"presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.js","sources":["../../../../../../../src/presentation/installation/components/SystemInstaller/steps/FinishSetup/handleStartUsing.ts"],"sourcesContent":["import { getMachineId } from \"@webiny/telemetry/react.js\";\nimport type { ISystemInstallerPresenter } from \"~/presentation/installation/presenters/SystemInstaller/abstractions.js\";\n\nconst INSTALL_FINISH_URL =\n process.env.REACT_APP_WEBINY_INSTALL_FINISH_URL || \"https://www.webiny.com/install/finish\";\n\n/**\n * If telemetry is enabled, route the \"Start using Webiny\" CTA through the\n * marketing site's /install/finish page so the website's anonymous wts_did\n * cookie can be aliased to the deployer's machine_id. Falls through to the\n * local `finishInstallation` flow otherwise.\n *\n * This used to run only when the admin was served from a `.cloudfront.net`\n * host, which meant standalone installs were never aliased and the whole\n * install-to-marketing-visit link was AWS-only. The website side of the\n * handoff drops its matching CloudFront restriction, so both halves of the\n * path now work for any host.\n */\nconst buildInstallFinishHref = (): string | null => {\n if (process.env.REACT_APP_WEBINY_TELEMETRY === \"false\") {\n return null;\n }\n\n if (typeof window === \"undefined\") {\n return null;\n }\n\n const machineId = getMachineId();\n if (!machineId) {\n return null;\n }\n\n const currentUrl = window.location.origin + window.location.pathname;\n const params = new URLSearchParams({\n machine_id: machineId,\n return_to: currentUrl\n });\n return `${INSTALL_FINISH_URL}?${params.toString()}`;\n};\n\nexport const handleStartUsing = (\n finishInstallation: ISystemInstallerPresenter[\"finishInstallation\"]\n) => {\n if (typeof window !== \"undefined\") {\n const handoff = buildInstallFinishHref();\n if (handoff) {\n window.location.assign(handoff);\n return;\n }\n }\n finishInstallation();\n};\n"],"names":["INSTALL_FINISH_URL","process","buildInstallFinishHref","window","machineId","getMachineId","currentUrl","params","URLSearchParams","handleStartUsing","finishInstallation","handoff"],"mappings":";AAGA,MAAMA,qBACFC,QAAQ,GAAG,CAAC,mCAAmC,IAAI;AAcvD,MAAMC,yBAAyB;IAC3B,IAAID,AAA2C,YAA3CA,QAAQ,GAAG,CAAC,0BAA0B,EACtC,OAAO;IAGX,IAAI,AAAkB,MAAlB,OAAOE,QACP,OAAO;IAGX,MAAMC,YAAYC;IAClB,IAAI,CAACD,WACD,OAAO;IAGX,MAAME,aAAaH,OAAO,QAAQ,CAAC,MAAM,GAAGA,OAAO,QAAQ,CAAC,QAAQ;IACpE,MAAMI,SAAS,IAAIC,gBAAgB;QAC/B,YAAYJ;QACZ,WAAWE;IACf;IACA,OAAO,GAAGN,mBAAmB,CAAC,EAAEO,OAAO,QAAQ,IAAI;AACvD;AAEO,MAAME,mBAAmB,CAC5BC;IAEA,IAAI,AAAkB,MAAlB,OAAOP,QAAwB;QAC/B,MAAMQ,UAAUT;QAChB,IAAIS,SAAS,YACTR,OAAO,QAAQ,CAAC,MAAM,CAACQ;IAG/B;IACAD;AACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n SystemInstallerPresenter as Abstraction,\n InstallationInput,\n SystemInstallerRepository,\n type SystemInstallerViewModel,\n type WizardStep,\n type WizardStepState,\n type ErrorObject\n} from \"./abstractions.js\";\nimport { TelemetryService } from \"~/features/telemetry/index.js\";\nimport { NewsletterSubscriptionService } from \"~/features/newsletter/index.js\";\n\nclass SystemInstallerPresenterImpl implements Abstraction.Interface {\n private loading = true;\n private isInstalled = false;\n private currentStep = 0;\n private error: ErrorObject | undefined = undefined;\n private installing = false;\n private startUsing = false;\n private installerData: Record<string, any> = {};\n private wizardSteps: WizardStep[];\n\n constructor(\n private telemetry: TelemetryService.Interface,\n private newsletter: NewsletterSubscriptionService.Interface,\n private repository: SystemInstallerRepository.Interface\n ) {\n // TODO: Wizard steps need to be implemented via plugins, but this will do for now.\n this.wizardSteps = [\n { name: \"introduction\", label: \"Introduction\" },\n { name: \"basic-info\", label: \"Basic info\" },\n // Show the admin-account step for IdPs that seed the first admin user during install:\n // Cognito (idp type) or any IdP that declares an installer app name (e.g. self-hosted).\n // External IdPs (Okta/Auth0) set neither, so the step stays hidden for them.\n process.env.REACT_APP_IDP_TYPE === \"cognito\" ||\n Boolean(process.env.REACT_APP_AUTH_INSTALLER_APP_NAME)\n ? { name: \"admin-account\", label: \"Admin account\" }\n : undefined,\n { name: \"finish\", label: \"Finish setup\" }\n ].filter(Boolean) as WizardStep[];\n\n makeAutoObservable(this, {}, { autoBind: true });\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const isInstalled = await this.repository.isSystemInstalled();\n runInAction(() => {\n this.isInstalled = isInstalled;\n this.startUsing = isInstalled;\n this.loading = false;\n });\n\n if (!isInstalled) {\n await this.telemetry.sendEvent(\"install-wizard-start\");\n }\n } catch {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n get vm(): SystemInstallerViewModel {\n return {\n error: this.error,\n loading: this.loading,\n isInstalled: this.isInstalled,\n startUsing: this.startUsing,\n currentStep: this.wizardSteps[this.currentStep].name,\n steps: this.wizardSteps.map((step, index) => {\n let state: WizardStepState = \"idle\";\n if (index === this.currentStep) {\n state = \"current\";\n }\n\n if (index < this.currentStep) {\n state = \"completed\";\n }\n\n return {\n ...step,\n state\n };\n }),\n installing: this.installing\n };\n }\n\n nextStep = (data: Record<string, any> = {}): void => {\n if (this.currentStep < this.wizardSteps.length - 1) {\n Object.assign(this.installerData, data ?? {});\n this.currentStep++;\n }\n };\n\n previousStep = (): void => {\n if (this.currentStep > 0) {\n this.currentStep--;\n }\n };\n\n goToStep = (name: WizardStep[\"name\"]): void => {\n const stepIndex = this.wizardSteps.findIndex(step => step.name === name);\n\n if (stepIndex > -1) {\n this.currentStep = stepIndex;\n }\n };\n\n installSystem = async (): Promise<void> => {\n runInAction(() => {\n this.installing = true;\n });\n try {\n const { basicInfo, ...installerData } = toJS(this.installerData);\n const installationInput: InstallationInput = Object.keys(installerData).map(key => {\n return {\n app: key,\n data: installerData[key]\n };\n });\n await this.repository.installSystem(installationInput);\n\n // We intentionally do NOT send `projectName` or `organizationName` to\n // telemetry — those are user-typed free-text fields that risk\n // identifying the user's company. Only the categorical\n // `referralSource` is forwarded for funnel attribution.\n await this.telemetry.sendEvent(\"install-wizard-end\", {\n referralSource: basicInfo.referralSource\n });\n\n runInAction(() => {\n this.isInstalled = true;\n this.installing = false;\n });\n\n // ToS acceptance in the basic-info step covers consent. Fire-and-forget\n // so a slow/failed newsletter call never blocks the wizard.\n // Admin-user data is keyed by the active IdP's installer app name (Cognito,\n // SelfHostedAuth, …), so don't hardcode \"Cognito\".\n const authApp = process.env.REACT_APP_AUTH_INSTALLER_APP_NAME || \"Cognito\";\n const adminUser = installerData[authApp];\n if (adminUser) {\n this.newsletter.subscribe({\n email: adminUser.email,\n firstName: adminUser.firstName,\n lastName: adminUser.lastName\n });\n }\n } catch (error) {\n runInAction(() => {\n this.error = error;\n this.installing = false;\n console.log(\"error\", error);\n });\n }\n };\n\n finishInstallation = () => {\n this.startUsing = true;\n };\n}\n\nexport const SystemInstallerPresenter = createImplementation({\n abstraction: Abstraction,\n implementation: SystemInstallerPresenterImpl,\n dependencies: [TelemetryService, NewsletterSubscriptionService, SystemInstallerRepository]\n});\n"],"names":["SystemInstallerPresenterImpl","telemetry","newsletter","repository","undefined","data","Object","name","stepIndex","step","runInAction","basicInfo","installerData","toJS","installationInput","key","authApp","process","adminUser","error","console","Boolean","makeAutoObservable","isInstalled","index","state","SystemInstallerPresenter","createImplementation","Abstraction","TelemetryService","NewsletterSubscriptionService","SystemInstallerRepository"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.js","sources":["../../../../../src/presentation/installation/presenters/SystemInstaller/SystemInstallerPresenter.ts"],"sourcesContent":["import { makeAutoObservable, runInAction, toJS } from \"mobx\";\nimport { createImplementation } from \"@webiny/di\";\nimport {\n SystemInstallerPresenter as Abstraction,\n InstallationInput,\n SystemInstallerRepository,\n type SystemInstallerViewModel,\n type WizardStep,\n type WizardStepState,\n type ErrorObject\n} from \"./abstractions.js\";\nimport { TelemetryService } from \"~/features/telemetry/index.js\";\nimport { NewsletterSubscriptionService } from \"~/features/newsletter/index.js\";\n\nclass SystemInstallerPresenterImpl implements Abstraction.Interface {\n private loading = true;\n private isInstalled = false;\n private currentStep = 0;\n private error: ErrorObject | undefined = undefined;\n private installing = false;\n private startUsing = false;\n private installerData: Record<string, any> = {};\n private wizardSteps: WizardStep[];\n\n constructor(\n private telemetry: TelemetryService.Interface,\n private newsletter: NewsletterSubscriptionService.Interface,\n private repository: SystemInstallerRepository.Interface\n ) {\n // TODO: Wizard steps need to be implemented via plugins, but this will do for now.\n this.wizardSteps = [\n { name: \"introduction\", label: \"Introduction\" },\n { name: \"basic-info\", label: \"Basic info\" },\n // Show the admin-account step for IdPs that seed the first admin user during install:\n // Cognito (idp type) or any IdP that declares an installer app name (e.g. standalone).\n // External IdPs (Okta/Auth0) set neither, so the step stays hidden for them.\n process.env.REACT_APP_IDP_TYPE === \"cognito\" ||\n Boolean(process.env.REACT_APP_AUTH_INSTALLER_APP_NAME)\n ? { name: \"admin-account\", label: \"Admin account\" }\n : undefined,\n { name: \"finish\", label: \"Finish setup\" }\n ].filter(Boolean) as WizardStep[];\n\n makeAutoObservable(this, {}, { autoBind: true });\n this.initialize();\n }\n\n private async initialize(): Promise<void> {\n runInAction(() => {\n this.loading = true;\n });\n\n try {\n const isInstalled = await this.repository.isSystemInstalled();\n runInAction(() => {\n this.isInstalled = isInstalled;\n this.startUsing = isInstalled;\n this.loading = false;\n });\n\n if (!isInstalled) {\n await this.telemetry.sendEvent(\"install-wizard-start\");\n }\n } catch {\n runInAction(() => {\n this.loading = false;\n });\n }\n }\n\n get vm(): SystemInstallerViewModel {\n return {\n error: this.error,\n loading: this.loading,\n isInstalled: this.isInstalled,\n startUsing: this.startUsing,\n currentStep: this.wizardSteps[this.currentStep].name,\n steps: this.wizardSteps.map((step, index) => {\n let state: WizardStepState = \"idle\";\n if (index === this.currentStep) {\n state = \"current\";\n }\n\n if (index < this.currentStep) {\n state = \"completed\";\n }\n\n return {\n ...step,\n state\n };\n }),\n installing: this.installing\n };\n }\n\n nextStep = (data: Record<string, any> = {}): void => {\n if (this.currentStep < this.wizardSteps.length - 1) {\n Object.assign(this.installerData, data ?? {});\n this.currentStep++;\n }\n };\n\n previousStep = (): void => {\n if (this.currentStep > 0) {\n this.currentStep--;\n }\n };\n\n goToStep = (name: WizardStep[\"name\"]): void => {\n const stepIndex = this.wizardSteps.findIndex(step => step.name === name);\n\n if (stepIndex > -1) {\n this.currentStep = stepIndex;\n }\n };\n\n installSystem = async (): Promise<void> => {\n runInAction(() => {\n this.installing = true;\n });\n try {\n const { basicInfo, ...installerData } = toJS(this.installerData);\n const installationInput: InstallationInput = Object.keys(installerData).map(key => {\n return {\n app: key,\n data: installerData[key]\n };\n });\n await this.repository.installSystem(installationInput);\n\n // We intentionally do NOT send `projectName` or `organizationName` to\n // telemetry — those are user-typed free-text fields that risk\n // identifying the user's company. Only the categorical\n // `referralSource` is forwarded for funnel attribution.\n await this.telemetry.sendEvent(\"install-wizard-end\", {\n referralSource: basicInfo.referralSource\n });\n\n runInAction(() => {\n this.isInstalled = true;\n this.installing = false;\n });\n\n // ToS acceptance in the basic-info step covers consent. Fire-and-forget\n // so a slow/failed newsletter call never blocks the wizard.\n // Admin-user data is keyed by the active IdP's installer app name (Cognito,\n // SelfHostedAuth, …), so don't hardcode \"Cognito\".\n const authApp = process.env.REACT_APP_AUTH_INSTALLER_APP_NAME || \"Cognito\";\n const adminUser = installerData[authApp];\n if (adminUser) {\n this.newsletter.subscribe({\n email: adminUser.email,\n firstName: adminUser.firstName,\n lastName: adminUser.lastName\n });\n }\n } catch (error) {\n runInAction(() => {\n this.error = error;\n this.installing = false;\n console.log(\"error\", error);\n });\n }\n };\n\n finishInstallation = () => {\n this.startUsing = true;\n };\n}\n\nexport const SystemInstallerPresenter = createImplementation({\n abstraction: Abstraction,\n implementation: SystemInstallerPresenterImpl,\n dependencies: [TelemetryService, NewsletterSubscriptionService, SystemInstallerRepository]\n});\n"],"names":["SystemInstallerPresenterImpl","telemetry","newsletter","repository","undefined","data","Object","name","stepIndex","step","runInAction","basicInfo","installerData","toJS","installationInput","key","authApp","process","adminUser","error","console","Boolean","makeAutoObservable","isInstalled","index","state","SystemInstallerPresenter","createImplementation","Abstraction","TelemetryService","NewsletterSubscriptionService","SystemInstallerRepository"],"mappings":"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"}
@@ -10,6 +10,11 @@ export interface FolderAwareDataSourceConfig<TRow> {
10
10
  };
11
11
  keyField: keyof TRow & string;
12
12
  localFilters?: Record<string, (item: TRow, value: unknown) => boolean>;
13
+ /**
14
+ * Reads the value of a sort field from an item, for ordering rows locally.
15
+ * See `QueryMatcherConfig.getSortValue`.
16
+ */
17
+ getSortValue?: (item: TRow, field: string) => unknown;
13
18
  }
14
19
  export interface FetchParams {
15
20
  where?: Record<string, unknown>;
@@ -9,7 +9,10 @@ class FolderAwareDataSource {
9
9
  };
10
10
  this._loading = false;
11
11
  this._locationField = config.locationField ?? "location";
12
- this._registeredFilterNames = new Set(config.registeredFilterNames ?? []);
12
+ this._registeredFilterNames = new Set([
13
+ ...config.registeredFilterNames ?? [],
14
+ ...Object.keys(config.localFilters ?? {})
15
+ ]);
13
16
  this._getDescendantFolders = config.getDescendantFolders;
14
17
  this._keyField = config.keyField;
15
18
  const locationField = this._locationField;
@@ -25,7 +28,8 @@ class FolderAwareDataSource {
25
28
  };
26
29
  this.queryMatcher = new QueryMatcher({
27
30
  keyField: config.keyField,
28
- localFilters
31
+ localFilters,
32
+ getSortValue: config.getSortValue
29
33
  });
30
34
  makeObservable(this, {
31
35
  _meta: observable,
@@ -56,7 +60,7 @@ class FolderAwareDataSource {
56
60
  });
57
61
  runInAction(()=>{
58
62
  this.onQueryResult(result.data);
59
- this.queryMatcher.updateFromQuery(params, result.data.map((item)=>String(item[this._keyField])));
63
+ this.queryMatcher.updateFromQuery(params, result.data.map((item)=>String(item[this._keyField])), result.meta.hasMoreItems);
60
64
  this._meta = {
61
65
  cursor: result.meta.cursor,
62
66
  hasMoreItems: result.meta.hasMoreItems,
@@ -82,7 +86,7 @@ class FolderAwareDataSource {
82
86
  });
83
87
  runInAction(()=>{
84
88
  this.onLoadMoreResult(result.data);
85
- this.queryMatcher.appendResultKeys(result.data.map((item)=>String(item[this._keyField])));
89
+ this.queryMatcher.appendResultKeys(result.data.map((item)=>String(item[this._keyField])), result.meta.hasMoreItems);
86
90
  this._meta = {
87
91
  cursor: result.meta.cursor,
88
92
  hasMoreItems: result.meta.hasMoreItems,
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/listPresenter/FolderAwareDataSource.js","sources":["../../../src/presentation/listPresenter/FolderAwareDataSource.ts"],"sourcesContent":["import { makeObservable, observable, computed, runInAction, action } from \"mobx\";\nimport type { IDataSource, IDataSourceQuery, IDataSourceMeta } from \"./abstractions.js\";\nimport { QueryMatcher } from \"./QueryMatcher.js\";\n\nexport interface FolderAwareDataSourceConfig<TRow> {\n locationField?: string;\n registeredFilterNames?: string[];\n getDescendantFolders?: { execute(folderId: string): { id: string }[] };\n keyField: keyof TRow & string;\n localFilters?: Record<string, (item: TRow, value: unknown) => boolean>;\n}\n\nexport interface FetchParams {\n where?: Record<string, unknown>;\n sort?: string[];\n search?: string;\n limit?: number;\n after?: string;\n}\n\nexport interface FetchResult<TRow> {\n data: TRow[];\n meta: { cursor: string | null; hasMoreItems: boolean; totalCount: number };\n}\n\nexport abstract class FolderAwareDataSource<TRow> implements IDataSource<TRow> {\n private _meta: IDataSourceMeta = { cursor: null, hasMoreItems: false, totalCount: 0 };\n private _loading = false;\n private _locationField: string;\n private _registeredFilterNames: Set<string>;\n private _getDescendantFolders: FolderAwareDataSourceConfig<TRow>[\"getDescendantFolders\"];\n private _keyField: keyof TRow & string;\n protected queryMatcher: QueryMatcher<TRow>;\n\n constructor(config: FolderAwareDataSourceConfig<TRow>) {\n this._locationField = config.locationField ?? \"location\";\n this._registeredFilterNames = new Set(config.registeredFilterNames ?? []);\n this._getDescendantFolders = config.getDescendantFolders;\n this._keyField = config.keyField;\n\n const locationField = this._locationField;\n const localFilters: Record<string, (item: TRow, value: unknown) => boolean> = {\n folderId: (item, value) => {\n const folderId = value as string;\n const location = (item as Record<string, any>)[locationField];\n const itemFolderId = location?.folderId as string | undefined;\n if (folderId && folderId !== \"root\") {\n return itemFolderId === folderId;\n }\n return !itemFolderId || itemFolderId === \"root\";\n },\n ...config.localFilters\n };\n\n this.queryMatcher = new QueryMatcher<TRow>({\n keyField: config.keyField,\n localFilters\n });\n\n makeObservable<FolderAwareDataSource<TRow>, \"_meta\" | \"_loading\">(this, {\n _meta: observable,\n _loading: observable,\n meta: computed,\n loading: computed,\n query: action,\n loadMore: action\n });\n }\n\n abstract get rows(): TRow[];\n\n abstract fetch(params: FetchParams): Promise<FetchResult<TRow>>;\n\n protected onQueryResult(_data: TRow[]): void {}\n\n protected onLoadMoreResult(_data: TRow[]): void {}\n\n get meta(): IDataSourceMeta {\n return this._meta;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n async query(params: IDataSourceQuery): Promise<void> {\n this._loading = true;\n\n try {\n const result = await this.fetch({\n where: this.buildWhere(params),\n sort: this.buildSort(params),\n search: params.search,\n limit: params.limit,\n after: params.cursor\n });\n\n runInAction(() => {\n this.onQueryResult(result.data);\n this.queryMatcher.updateFromQuery(\n params,\n result.data.map(item => String(item[this._keyField]))\n );\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n async loadMore(params: IDataSourceQuery): Promise<void> {\n if (!this._meta.hasMoreItems || this._loading) {\n return;\n }\n\n this._loading = true;\n\n try {\n const result = await this.fetch({\n where: this.buildWhere(params),\n sort: this.buildSort(params),\n search: params.search,\n limit: params.limit,\n after: this._meta.cursor ?? undefined\n });\n\n runInAction(() => {\n this.onLoadMoreResult(result.data);\n this.queryMatcher.appendResultKeys(\n result.data.map(item => String(item[this._keyField]))\n );\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n protected customizeWhere(\n _where: Record<string, unknown>,\n _filters: Record<string, unknown>\n ): void {}\n\n protected shouldExpandFolders(_filters: Record<string, unknown>): boolean {\n return false;\n }\n\n private buildWhere(params: IDataSourceQuery): Record<string, unknown> | undefined {\n const where: Record<string, unknown> = {};\n const filters = params.filters ?? {};\n const folderId = (filters.folderId as string | undefined) || \"root\";\n const isRoot = folderId === \"root\";\n const hasAdvancedFilters = Object.keys(filters).some(\n k => k !== \"folderId\" && !this._registeredFilterNames.has(k)\n );\n const isSearching =\n !!params.search || hasAdvancedFilters || this.shouldExpandFolders(filters);\n\n if (isSearching && isRoot) {\n // Search/filter from root: no folder filter — search all folders.\n } else if (isSearching && this._getDescendantFolders) {\n const descendants = this._getDescendantFolders.execute(folderId);\n const folderIds = descendants.map(f => f.id);\n where[this._locationField] = { folderId_in: folderIds };\n } else {\n where[this._locationField] = { folderId };\n }\n\n for (const [key, value] of Object.entries(filters)) {\n if (key === \"folderId\") {\n continue;\n }\n where[key] = value;\n }\n\n this.customizeWhere(where, filters);\n\n return Object.keys(where).length > 0 ? where : undefined;\n }\n\n private buildSort(params: IDataSourceQuery): string[] | undefined {\n if (!params.sort) {\n return undefined;\n }\n return [`${params.sort.field}_${params.sort.direction}`];\n }\n}\n"],"names":["FolderAwareDataSource","config","Set","locationField","localFilters","item","value","folderId","location","itemFolderId","QueryMatcher","makeObservable","observable","computed","action","_data","params","result","runInAction","String","undefined","_where","_filters","where","filters","isRoot","hasAdvancedFilters","Object","k","isSearching","descendants","folderIds","f","key"],"mappings":"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"}
1
+ {"version":3,"file":"presentation/listPresenter/FolderAwareDataSource.js","sources":["../../../src/presentation/listPresenter/FolderAwareDataSource.ts"],"sourcesContent":["import { makeObservable, observable, computed, runInAction, action } from \"mobx\";\nimport type { IDataSource, IDataSourceQuery, IDataSourceMeta } from \"./abstractions.js\";\nimport { QueryMatcher } from \"./QueryMatcher.js\";\n\nexport interface FolderAwareDataSourceConfig<TRow> {\n locationField?: string;\n registeredFilterNames?: string[];\n getDescendantFolders?: { execute(folderId: string): { id: string }[] };\n keyField: keyof TRow & string;\n localFilters?: Record<string, (item: TRow, value: unknown) => boolean>;\n /**\n * Reads the value of a sort field from an item, for ordering rows locally.\n * See `QueryMatcherConfig.getSortValue`.\n */\n getSortValue?: (item: TRow, field: string) => unknown;\n}\n\nexport interface FetchParams {\n where?: Record<string, unknown>;\n sort?: string[];\n search?: string;\n limit?: number;\n after?: string;\n}\n\nexport interface FetchResult<TRow> {\n data: TRow[];\n meta: { cursor: string | null; hasMoreItems: boolean; totalCount: number };\n}\n\nexport abstract class FolderAwareDataSource<TRow> implements IDataSource<TRow> {\n private _meta: IDataSourceMeta = { cursor: null, hasMoreItems: false, totalCount: 0 };\n private _loading = false;\n private _locationField: string;\n private _registeredFilterNames: Set<string>;\n private _getDescendantFolders: FolderAwareDataSourceConfig<TRow>[\"getDescendantFolders\"];\n private _keyField: keyof TRow & string;\n protected queryMatcher: QueryMatcher<TRow>;\n\n constructor(config: FolderAwareDataSourceConfig<TRow>) {\n this._locationField = config.locationField ?? \"location\";\n this._registeredFilterNames = new Set([\n ...(config.registeredFilterNames ?? []),\n ...Object.keys(config.localFilters ?? {})\n ]);\n this._getDescendantFolders = config.getDescendantFolders;\n this._keyField = config.keyField;\n\n const locationField = this._locationField;\n const localFilters: Record<string, (item: TRow, value: unknown) => boolean> = {\n folderId: (item, value) => {\n const folderId = value as string;\n const location = (item as Record<string, any>)[locationField];\n const itemFolderId = location?.folderId as string | undefined;\n if (folderId && folderId !== \"root\") {\n return itemFolderId === folderId;\n }\n return !itemFolderId || itemFolderId === \"root\";\n },\n ...config.localFilters\n };\n\n this.queryMatcher = new QueryMatcher<TRow>({\n keyField: config.keyField,\n localFilters,\n getSortValue: config.getSortValue\n });\n\n makeObservable<FolderAwareDataSource<TRow>, \"_meta\" | \"_loading\">(this, {\n _meta: observable,\n _loading: observable,\n meta: computed,\n loading: computed,\n query: action,\n loadMore: action\n });\n }\n\n abstract get rows(): TRow[];\n\n abstract fetch(params: FetchParams): Promise<FetchResult<TRow>>;\n\n protected onQueryResult(_data: TRow[]): void {}\n\n protected onLoadMoreResult(_data: TRow[]): void {}\n\n get meta(): IDataSourceMeta {\n return this._meta;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n async query(params: IDataSourceQuery): Promise<void> {\n this._loading = true;\n\n try {\n const result = await this.fetch({\n where: this.buildWhere(params),\n sort: this.buildSort(params),\n search: params.search,\n limit: params.limit,\n after: params.cursor\n });\n\n runInAction(() => {\n this.onQueryResult(result.data);\n this.queryMatcher.updateFromQuery(\n params,\n result.data.map(item => String(item[this._keyField])),\n result.meta.hasMoreItems\n );\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n async loadMore(params: IDataSourceQuery): Promise<void> {\n if (!this._meta.hasMoreItems || this._loading) {\n return;\n }\n\n this._loading = true;\n\n try {\n const result = await this.fetch({\n where: this.buildWhere(params),\n sort: this.buildSort(params),\n search: params.search,\n limit: params.limit,\n after: this._meta.cursor ?? undefined\n });\n\n runInAction(() => {\n this.onLoadMoreResult(result.data);\n this.queryMatcher.appendResultKeys(\n result.data.map(item => String(item[this._keyField])),\n result.meta.hasMoreItems\n );\n this._meta = {\n cursor: result.meta.cursor,\n hasMoreItems: result.meta.hasMoreItems,\n totalCount: result.meta.totalCount\n };\n });\n } finally {\n runInAction(() => {\n this._loading = false;\n });\n }\n }\n\n protected customizeWhere(\n _where: Record<string, unknown>,\n _filters: Record<string, unknown>\n ): void {}\n\n protected shouldExpandFolders(_filters: Record<string, unknown>): boolean {\n return false;\n }\n\n private buildWhere(params: IDataSourceQuery): Record<string, unknown> | undefined {\n const where: Record<string, unknown> = {};\n const filters = params.filters ?? {};\n const folderId = (filters.folderId as string | undefined) || \"root\";\n const isRoot = folderId === \"root\";\n const hasAdvancedFilters = Object.keys(filters).some(\n k => k !== \"folderId\" && !this._registeredFilterNames.has(k)\n );\n const isSearching =\n !!params.search || hasAdvancedFilters || this.shouldExpandFolders(filters);\n\n if (isSearching && isRoot) {\n // Search/filter from root: no folder filter — search all folders.\n } else if (isSearching && this._getDescendantFolders) {\n const descendants = this._getDescendantFolders.execute(folderId);\n const folderIds = descendants.map(f => f.id);\n where[this._locationField] = { folderId_in: folderIds };\n } else {\n where[this._locationField] = { folderId };\n }\n\n for (const [key, value] of Object.entries(filters)) {\n if (key === \"folderId\") {\n continue;\n }\n where[key] = value;\n }\n\n this.customizeWhere(where, filters);\n\n return Object.keys(where).length > 0 ? where : undefined;\n }\n\n private buildSort(params: IDataSourceQuery): string[] | undefined {\n if (!params.sort) {\n return undefined;\n }\n return [`${params.sort.field}_${params.sort.direction}`];\n }\n}\n"],"names":["FolderAwareDataSource","config","Set","Object","locationField","localFilters","item","value","folderId","location","itemFolderId","QueryMatcher","makeObservable","observable","computed","action","_data","params","result","runInAction","String","undefined","_where","_filters","where","filters","isRoot","hasAdvancedFilters","k","isSearching","descendants","folderIds","f","key"],"mappings":"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"}
@@ -1,8 +1,15 @@
1
1
  import type { IDataSourceQuery } from "./abstractions.js";
2
2
  type ItemPredicate<TRow> = (item: TRow, value: unknown) => boolean;
3
+ type SortValueGetter<TRow> = (item: TRow, field: string) => unknown;
3
4
  export interface QueryMatcherConfig<TRow> {
4
5
  keyField: keyof TRow & string;
5
6
  localFilters: Record<string, ItemPredicate<TRow>>;
7
+ /**
8
+ * Reads the value of a sort field from an item. Defaults to a dot-path lookup
9
+ * (e.g. `savedOn`, `values.title`). Override when the query's sort field name
10
+ * does not match the item's shape.
11
+ */
12
+ getSortValue?: SortValueGetter<TRow>;
6
13
  }
7
14
  /**
8
15
  * Decides which cached items belong in the current view.
@@ -34,10 +41,11 @@ export interface QueryMatcherConfig<TRow> {
34
41
  * });
35
42
  *
36
43
  * // In DataSource.query(), after fetching:
37
- * matcher.updateFromQuery(params, result.data.map(item => item.id));
44
+ * matcher.updateFromQuery(params, result.data.map(item => item.id), result.meta.hasMoreItems);
38
45
  *
39
- * // In DataSource.rows getter:
40
- * return cache.getItems().filter(matcher.matcher);
46
+ * // In DataSource.rows getter (filters, sorts by the applied sort, and cuts off at the
47
+ * // last loaded item):
48
+ * return matcher.select(cache.getItems());
41
49
  * ```
42
50
  */
43
51
  export declare class QueryMatcher<TRow> {
@@ -45,12 +53,27 @@ export declare class QueryMatcher<TRow> {
45
53
  private _queryResultKeys;
46
54
  private _matcher;
47
55
  private localFilterKeys;
56
+ private getSortValue;
57
+ private _view;
48
58
  constructor(config: QueryMatcherConfig<TRow>);
49
59
  get matcher(): (item: TRow) => boolean;
50
60
  filter(items: TRow[]): TRow[];
61
+ /**
62
+ * Returns the items that belong in the current view, in the view's order.
63
+ *
64
+ * The cache is shared by views with different sorts, so its order means nothing to
65
+ * this view. Instead, matching items are sorted by the applied sort (ties keep the
66
+ * server order), and the result is cut off after the last item the server returned
67
+ * for this view. That keeps locally created or updated items in their sort position,
68
+ * and hides cached items that sort past the loaded pages until pagination reaches them.
69
+ *
70
+ * While searching, the server's (relevance) order is kept as is.
71
+ */
72
+ select(items: TRow[]): TRow[];
73
+ private getKey;
51
74
  hasServerSideFilters(params: IDataSourceQuery): boolean;
52
- updateFromQuery(params: IDataSourceQuery, resultKeys: string[]): void;
53
- appendResultKeys(keys: string[]): void;
75
+ updateFromQuery(params: IDataSourceQuery, resultKeys: string[], hasMore?: boolean): void;
76
+ appendResultKeys(keys: string[], hasMore?: boolean): void;
54
77
  private buildMatcher;
55
78
  }
56
79
  export {};
@@ -1,12 +1,15 @@
1
- import { action, computed, makeObservable, observable } from "mobx";
1
+ import { action, computed, makeObservable, observableRef } from "mobx";
2
2
  class QueryMatcher {
3
3
  constructor(config){
4
4
  this.config = config;
5
5
  this._queryResultKeys = null;
6
6
  this._matcher = ()=>true;
7
+ this._view = null;
7
8
  this.localFilterKeys = new Set(Object.keys(config.localFilters));
9
+ this.getSortValue = config.getSortValue ?? getValueByPath;
8
10
  makeObservable(this, {
9
- _matcher: observable.ref,
11
+ _matcher: observableRef,
12
+ _view: observableRef,
10
13
  matcher: computed,
11
14
  updateFromQuery: action,
12
15
  appendResultKeys: action
@@ -18,18 +21,65 @@ class QueryMatcher {
18
21
  filter(items) {
19
22
  return items.filter(this._matcher);
20
23
  }
24
+ select(items) {
25
+ const matched = this.filter(items);
26
+ const view = this._view;
27
+ if (!view) return matched;
28
+ const serverIndex = new Map(view.resultKeys.map((key, index)=>[
29
+ key,
30
+ index
31
+ ]));
32
+ const indexOf = (item)=>serverIndex.get(this.getKey(item)) ?? 1 / 0;
33
+ const sort = view.searching ? void 0 : view.sort;
34
+ const sorted = [
35
+ ...matched
36
+ ].sort((a, b)=>{
37
+ if (sort) {
38
+ const result = compareValues(this.getSortValue(a, sort.field), this.getSortValue(b, sort.field));
39
+ if (0 !== result) return "ASC" === sort.direction ? result : -result;
40
+ }
41
+ const left = indexOf(a);
42
+ const right = indexOf(b);
43
+ return left === right ? 0 : left < right ? -1 : 1;
44
+ });
45
+ if (!view.hasMore) return sorted;
46
+ let lastLoaded = -1;
47
+ sorted.forEach((item, index)=>{
48
+ if (serverIndex.has(this.getKey(item))) lastLoaded = index;
49
+ });
50
+ return lastLoaded < 0 ? sorted : sorted.slice(0, lastLoaded + 1);
51
+ }
52
+ getKey(item) {
53
+ return String(item[this.config.keyField]);
54
+ }
21
55
  hasServerSideFilters(params) {
22
56
  if (params.search) return true;
23
57
  const filters = params.filters ?? {};
24
58
  return Object.keys(filters).some((key)=>!this.localFilterKeys.has(key));
25
59
  }
26
- updateFromQuery(params, resultKeys) {
60
+ updateFromQuery(params, resultKeys, hasMore = false) {
27
61
  if (this.hasServerSideFilters(params)) this._queryResultKeys = new Set(resultKeys);
28
62
  else this._queryResultKeys = null;
29
63
  this._matcher = this.buildMatcher(params);
64
+ this._view = {
65
+ resultKeys: [
66
+ ...resultKeys
67
+ ],
68
+ sort: params.sort,
69
+ searching: !!params.search,
70
+ hasMore
71
+ };
30
72
  }
31
- appendResultKeys(keys) {
73
+ appendResultKeys(keys, hasMore = false) {
32
74
  if (this._queryResultKeys) for (const key of keys)this._queryResultKeys.add(key);
75
+ if (this._view) this._view = {
76
+ ...this._view,
77
+ resultKeys: [
78
+ ...this._view.resultKeys,
79
+ ...keys
80
+ ],
81
+ hasMore
82
+ };
33
83
  }
34
84
  buildMatcher(params) {
35
85
  const filters = params.filters ?? {};
@@ -54,6 +104,26 @@ class QueryMatcher {
54
104
  };
55
105
  }
56
106
  }
107
+ function getValueByPath(item, path) {
108
+ let current = item;
109
+ for (const part of path.split(".")){
110
+ if (null == current || "object" != typeof current) return;
111
+ current = current[part];
112
+ }
113
+ return current;
114
+ }
115
+ function compareValues(a, b) {
116
+ const aEmpty = null == a;
117
+ const bEmpty = null == b;
118
+ if (aEmpty || bEmpty) return aEmpty === bEmpty ? 0 : aEmpty ? 1 : -1;
119
+ const left = a instanceof Date ? a.getTime() : a;
120
+ const right = b instanceof Date ? b.getTime() : b;
121
+ if ("number" == typeof left && "number" == typeof right) return left - right;
122
+ if ("boolean" == typeof left && "boolean" == typeof right) return Number(left) - Number(right);
123
+ const leftString = String(left);
124
+ const rightString = String(right);
125
+ return leftString < rightString ? -1 : leftString > rightString ? 1 : 0;
126
+ }
57
127
  export { QueryMatcher };
58
128
 
59
129
  //# sourceMappingURL=QueryMatcher.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"presentation/listPresenter/QueryMatcher.js","sources":["../../../src/presentation/listPresenter/QueryMatcher.ts"],"sourcesContent":["import { makeObservable, observable, computed, action } from \"mobx\";\nimport type { IDataSourceQuery } from \"./abstractions.js\";\n\ntype ItemPredicate<TRow> = (item: TRow, value: unknown) => boolean;\n\nexport interface QueryMatcherConfig<TRow> {\n keyField: keyof TRow & string;\n localFilters: Record<string, ItemPredicate<TRow>>;\n}\n\n/**\n * Decides which cached items belong in the current view.\n *\n * A DataSource backed by a shared cache (e.g., per-model entry cache) needs to\n * filter cached items to only those matching the active query. QueryMatcher does\n * this by splitting filters into two categories:\n *\n * - **Local filters** (e.g., folderId, status) — evaluated client-side against\n * each item using predicates provided via `localFilters` config. Used when\n * browsing without search or server-side filters.\n *\n * - **Server-side filters** (search, advanced search, any filter key not in\n * `localFilters`) — cannot be evaluated locally. Instead, QueryMatcher tracks\n * the set of item keys returned by the last server query (`_queryResultKeys`)\n * and restricts the view to those items.\n *\n * The `matcher` getter is MobX-computed, so any DataSource `rows` getter that\n * reads it will recompute when the matcher changes after a query.\n *\n * Usage:\n * ```ts\n * const matcher = new QueryMatcher<MyItem>({\n * keyField: \"id\",\n * localFilters: {\n * folderId: (item, value) => item.folderId === value,\n * status: (item, value) => item.status === value,\n * }\n * });\n *\n * // In DataSource.query(), after fetching:\n * matcher.updateFromQuery(params, result.data.map(item => item.id));\n *\n * // In DataSource.rows getter:\n * return cache.getItems().filter(matcher.matcher);\n * ```\n */\nexport class QueryMatcher<TRow> {\n private _queryResultKeys: Set<string> | null = null;\n private _matcher: (item: TRow) => boolean = () => true;\n private localFilterKeys: Set<string>;\n\n constructor(private config: QueryMatcherConfig<TRow>) {\n this.localFilterKeys = new Set(Object.keys(config.localFilters));\n\n makeObservable<QueryMatcher<TRow>, \"_matcher\">(this, {\n _matcher: observable.ref,\n matcher: computed,\n updateFromQuery: action,\n appendResultKeys: action\n });\n }\n\n get matcher(): (item: TRow) => boolean {\n return this._matcher;\n }\n\n filter(items: TRow[]): TRow[] {\n return items.filter(this._matcher);\n }\n\n hasServerSideFilters(params: IDataSourceQuery): boolean {\n if (params.search) {\n return true;\n }\n const filters = params.filters ?? {};\n return Object.keys(filters).some(key => !this.localFilterKeys.has(key));\n }\n\n updateFromQuery(params: IDataSourceQuery, resultKeys: string[]): void {\n if (this.hasServerSideFilters(params)) {\n this._queryResultKeys = new Set(resultKeys);\n } else {\n this._queryResultKeys = null;\n }\n this._matcher = this.buildMatcher(params);\n }\n\n appendResultKeys(keys: string[]): void {\n if (this._queryResultKeys) {\n for (const key of keys) {\n this._queryResultKeys.add(key);\n }\n }\n }\n\n private buildMatcher(params: IDataSourceQuery): (item: TRow) => boolean {\n const filters = params.filters ?? {};\n const queryResultKeys = this._queryResultKeys;\n const isSearching = !!params.search;\n const { keyField, localFilters } = this.config;\n\n const activeLocalFilters: Array<{ predicate: ItemPredicate<TRow>; value: unknown }> = [];\n for (const [key, predicate] of Object.entries(localFilters)) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n activeLocalFilters.push({ predicate, value });\n }\n }\n\n return (item: TRow) => {\n if (queryResultKeys) {\n if (!queryResultKeys.has(String(item[keyField]))) {\n return false;\n }\n } else if (!isSearching) {\n for (const { predicate, value } of activeLocalFilters) {\n if (!predicate(item, value)) {\n return false;\n }\n }\n }\n\n return true;\n };\n }\n}\n"],"names":["QueryMatcher","config","Set","Object","makeObservable","observable","computed","action","items","params","filters","key","resultKeys","keys","queryResultKeys","isSearching","keyField","localFilters","activeLocalFilters","predicate","value","item","String"],"mappings":";AA8CO,MAAMA;IAKT,YAAoBC,MAAgC,CAAE;aAAlCA,MAAM,GAANA;aAJZ,gBAAgB,GAAuB;aACvC,QAAQ,GAA4B,IAAM;QAI9C,IAAI,CAAC,eAAe,GAAG,IAAIC,IAAIC,OAAO,IAAI,CAACF,OAAO,YAAY;QAE9DG,eAA+C,IAAI,EAAE;YACjD,UAAUC,WAAW,GAAG;YACxB,SAASC;YACT,iBAAiBC;YACjB,kBAAkBA;QACtB;IACJ;IAEA,IAAI,UAAmC;QACnC,OAAO,IAAI,CAAC,QAAQ;IACxB;IAEA,OAAOC,KAAa,EAAU;QAC1B,OAAOA,MAAM,MAAM,CAAC,IAAI,CAAC,QAAQ;IACrC;IAEA,qBAAqBC,MAAwB,EAAW;QACpD,IAAIA,OAAO,MAAM,EACb,OAAO;QAEX,MAAMC,UAAUD,OAAO,OAAO,IAAI,CAAC;QACnC,OAAON,OAAO,IAAI,CAACO,SAAS,IAAI,CAACC,CAAAA,MAAO,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAACA;IACtE;IAEA,gBAAgBF,MAAwB,EAAEG,UAAoB,EAAQ;QAClE,IAAI,IAAI,CAAC,oBAAoB,CAACH,SAC1B,IAAI,CAAC,gBAAgB,GAAG,IAAIP,IAAIU;aAEhC,IAAI,CAAC,gBAAgB,GAAG;QAE5B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAACH;IACtC;IAEA,iBAAiBI,IAAc,EAAQ;QACnC,IAAI,IAAI,CAAC,gBAAgB,EACrB,KAAK,MAAMF,OAAOE,KACd,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAACF;IAGtC;IAEQ,aAAaF,MAAwB,EAA2B;QACpE,MAAMC,UAAUD,OAAO,OAAO,IAAI,CAAC;QACnC,MAAMK,kBAAkB,IAAI,CAAC,gBAAgB;QAC7C,MAAMC,cAAc,CAAC,CAACN,OAAO,MAAM;QACnC,MAAM,EAAEO,QAAQ,EAAEC,YAAY,EAAE,GAAG,IAAI,CAAC,MAAM;QAE9C,MAAMC,qBAAgF,EAAE;QACxF,KAAK,MAAM,CAACP,KAAKQ,UAAU,IAAIhB,OAAO,OAAO,CAACc,cAAe;YACzD,MAAMG,QAAQV,OAAO,CAACC,IAAI;YAC1B,IAAIS,QAAAA,OACAF,mBAAmB,IAAI,CAAC;gBAAEC;gBAAWC;YAAM;QAEnD;QAEA,OAAO,CAACC;YACJ,IAAIP,iBACA;gBAAA,IAAI,CAACA,gBAAgB,GAAG,CAACQ,OAAOD,IAAI,CAACL,SAAS,IAC1C,OAAO;YACX,OACG,IAAI,CAACD,aACR;gBAAA,KAAK,MAAM,EAAEI,SAAS,EAAEC,KAAK,EAAE,IAAIF,mBAC/B,IAAI,CAACC,UAAUE,MAAMD,QACjB,OAAO;YAEf;YAGJ,OAAO;QACX;IACJ;AACJ"}
1
+ {"version":3,"file":"presentation/listPresenter/QueryMatcher.js","sources":["../../../src/presentation/listPresenter/QueryMatcher.ts"],"sourcesContent":["import { makeObservable, observableRef, computed, action } from \"mobx\";\nimport type { IDataSourceQuery } from \"./abstractions.js\";\n\ntype ItemPredicate<TRow> = (item: TRow, value: unknown) => boolean;\n\ntype SortValueGetter<TRow> = (item: TRow, field: string) => unknown;\n\nexport interface QueryMatcherConfig<TRow> {\n keyField: keyof TRow & string;\n localFilters: Record<string, ItemPredicate<TRow>>;\n /**\n * Reads the value of a sort field from an item. Defaults to a dot-path lookup\n * (e.g. `savedOn`, `values.title`). Override when the query's sort field name\n * does not match the item's shape.\n */\n getSortValue?: SortValueGetter<TRow>;\n}\n\n/**\n * Decides which cached items belong in the current view.\n *\n * A DataSource backed by a shared cache (e.g., per-model entry cache) needs to\n * filter cached items to only those matching the active query. QueryMatcher does\n * this by splitting filters into two categories:\n *\n * - **Local filters** (e.g., folderId, status) — evaluated client-side against\n * each item using predicates provided via `localFilters` config. Used when\n * browsing without search or server-side filters.\n *\n * - **Server-side filters** (search, advanced search, any filter key not in\n * `localFilters`) — cannot be evaluated locally. Instead, QueryMatcher tracks\n * the set of item keys returned by the last server query (`_queryResultKeys`)\n * and restricts the view to those items.\n *\n * The `matcher` getter is MobX-computed, so any DataSource `rows` getter that\n * reads it will recompute when the matcher changes after a query.\n *\n * Usage:\n * ```ts\n * const matcher = new QueryMatcher<MyItem>({\n * keyField: \"id\",\n * localFilters: {\n * folderId: (item, value) => item.folderId === value,\n * status: (item, value) => item.status === value,\n * }\n * });\n *\n * // In DataSource.query(), after fetching:\n * matcher.updateFromQuery(params, result.data.map(item => item.id), result.meta.hasMoreItems);\n *\n * // In DataSource.rows getter (filters, sorts by the applied sort, and cuts off at the\n * // last loaded item):\n * return matcher.select(cache.getItems());\n * ```\n */\nexport class QueryMatcher<TRow> {\n private _queryResultKeys: Set<string> | null = null;\n private _matcher: (item: TRow) => boolean = () => true;\n private localFilterKeys: Set<string>;\n private getSortValue: SortValueGetter<TRow>;\n\n // Ordering state of the current view: the keys the server returned for the active\n // query (in server order, extended by `appendResultKeys`), the applied sort, and\n // whether the server has more items beyond the loaded ones.\n private _view: {\n resultKeys: string[];\n sort: IDataSourceQuery[\"sort\"];\n searching: boolean;\n hasMore: boolean;\n } | null = null;\n\n constructor(private config: QueryMatcherConfig<TRow>) {\n this.localFilterKeys = new Set(Object.keys(config.localFilters));\n this.getSortValue = config.getSortValue ?? getValueByPath;\n\n makeObservable<QueryMatcher<TRow>, \"_matcher\" | \"_view\">(this, {\n _matcher: observableRef,\n _view: observableRef,\n matcher: computed,\n updateFromQuery: action,\n appendResultKeys: action\n });\n }\n\n get matcher(): (item: TRow) => boolean {\n return this._matcher;\n }\n\n filter(items: TRow[]): TRow[] {\n return items.filter(this._matcher);\n }\n\n /**\n * Returns the items that belong in the current view, in the view's order.\n *\n * The cache is shared by views with different sorts, so its order means nothing to\n * this view. Instead, matching items are sorted by the applied sort (ties keep the\n * server order), and the result is cut off after the last item the server returned\n * for this view. That keeps locally created or updated items in their sort position,\n * and hides cached items that sort past the loaded pages until pagination reaches them.\n *\n * While searching, the server's (relevance) order is kept as is.\n */\n select(items: TRow[]): TRow[] {\n const matched = this.filter(items);\n const view = this._view;\n if (!view) {\n return matched;\n }\n\n const serverIndex = new Map(view.resultKeys.map((key, index) => [key, index]));\n // Items the server did not return for this view (cached by other views, or created\n // locally) sort after the server's items among equal sort values.\n const indexOf = (item: TRow) =>\n serverIndex.get(this.getKey(item)) ?? Number.POSITIVE_INFINITY;\n\n const sort = view.searching ? undefined : view.sort;\n const sorted = [...matched].sort((a, b) => {\n if (sort) {\n const result = compareValues(\n this.getSortValue(a, sort.field),\n this.getSortValue(b, sort.field)\n );\n if (result !== 0) {\n return sort.direction === \"ASC\" ? result : -result;\n }\n }\n const left = indexOf(a);\n const right = indexOf(b);\n return left === right ? 0 : left < right ? -1 : 1;\n });\n\n if (!view.hasMore) {\n return sorted;\n }\n\n let lastLoaded = -1;\n sorted.forEach((item, index) => {\n if (serverIndex.has(this.getKey(item))) {\n lastLoaded = index;\n }\n });\n\n return lastLoaded < 0 ? sorted : sorted.slice(0, lastLoaded + 1);\n }\n\n private getKey(item: TRow): string {\n return String(item[this.config.keyField]);\n }\n\n hasServerSideFilters(params: IDataSourceQuery): boolean {\n if (params.search) {\n return true;\n }\n const filters = params.filters ?? {};\n return Object.keys(filters).some(key => !this.localFilterKeys.has(key));\n }\n\n updateFromQuery(params: IDataSourceQuery, resultKeys: string[], hasMore = false): void {\n if (this.hasServerSideFilters(params)) {\n this._queryResultKeys = new Set(resultKeys);\n } else {\n this._queryResultKeys = null;\n }\n this._matcher = this.buildMatcher(params);\n this._view = {\n resultKeys: [...resultKeys],\n sort: params.sort,\n searching: !!params.search,\n hasMore\n };\n }\n\n appendResultKeys(keys: string[], hasMore = false): void {\n if (this._queryResultKeys) {\n for (const key of keys) {\n this._queryResultKeys.add(key);\n }\n }\n if (this._view) {\n this._view = {\n ...this._view,\n resultKeys: [...this._view.resultKeys, ...keys],\n hasMore\n };\n }\n }\n\n private buildMatcher(params: IDataSourceQuery): (item: TRow) => boolean {\n const filters = params.filters ?? {};\n const queryResultKeys = this._queryResultKeys;\n const isSearching = !!params.search;\n const { keyField, localFilters } = this.config;\n\n const activeLocalFilters: Array<{ predicate: ItemPredicate<TRow>; value: unknown }> = [];\n for (const [key, predicate] of Object.entries(localFilters)) {\n const value = filters[key];\n if (value !== undefined && value !== null) {\n activeLocalFilters.push({ predicate, value });\n }\n }\n\n return (item: TRow) => {\n if (queryResultKeys) {\n if (!queryResultKeys.has(String(item[keyField]))) {\n return false;\n }\n } else if (!isSearching) {\n for (const { predicate, value } of activeLocalFilters) {\n if (!predicate(item, value)) {\n return false;\n }\n }\n }\n\n return true;\n };\n }\n}\n\nfunction getValueByPath(item: unknown, path: string): unknown {\n let current: unknown = item;\n for (const part of path.split(\".\")) {\n if (current === null || current === undefined || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[part];\n }\n return current;\n}\n\n/**\n * Compares two sort values in ascending order, the same way the DDB and SQL storage sort\n * entries: `null` and `undefined` sort last (so first in descending order), and an empty\n * string is a regular string. Strings are compared by code point, which keeps ISO dates in\n * chronological order.\n */\nfunction compareValues(a: unknown, b: unknown): number {\n const aEmpty = a === null || a === undefined;\n const bEmpty = b === null || b === undefined;\n if (aEmpty || bEmpty) {\n return aEmpty === bEmpty ? 0 : aEmpty ? 1 : -1;\n }\n\n const left = a instanceof Date ? a.getTime() : a;\n const right = b instanceof Date ? b.getTime() : b;\n\n if (typeof left === \"number\" && typeof right === \"number\") {\n return left - right;\n }\n if (typeof left === \"boolean\" && typeof right === \"boolean\") {\n return Number(left) - Number(right);\n }\n\n const leftString = String(left);\n const rightString = String(right);\n return leftString < rightString ? -1 : leftString > rightString ? 1 : 0;\n}\n"],"names":["QueryMatcher","config","Set","Object","getValueByPath","makeObservable","observableRef","computed","action","items","matched","view","serverIndex","Map","key","index","indexOf","item","Number","sort","undefined","sorted","a","b","result","compareValues","left","right","lastLoaded","String","params","filters","resultKeys","hasMore","keys","queryResultKeys","isSearching","keyField","localFilters","activeLocalFilters","predicate","value","path","current","part","aEmpty","bEmpty","Date","leftString","rightString"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};